Great. I’ll generate a labeled visual diagram showing both the full
quantum circuit pipeline and the interaction loop between MTQC
(algorithm compilation) and MQPA (pulse-level execution).
I’ll let you know as soon as it’s ready for your review.
MQPA and MTQC Integration in a Quantum Computing Workflow
The diagram below illustrates a full quantum circuit pipeline from
classical input to output, highlighting how Multi-Target Quantum
Compilation (MTQC) and Multi-Qubit Pulse Amplification
(MQPA) relate to each other in an iterative feedback loop:
(image) Figure: A high-level quantum computing
pipeline illustrating the interplay between Multi-Target Quantum
Compilation (MTQC) and Multi-Qubit Pulse Amplification (MQPA). The
classical input is compiled into a quantum circuit via MTQC (utilizing a
genetic algorithm-based approach, GAVQA), then optimized at the pulse
level by MQPA for execution on quantum hardware. A feedback loop (dashed
blue arrow) connects MTQC and MQPA, allowing circuit design and pulse
shaping to iteratively inform each other to maximize fidelity.
Pipeline Stages
- Classical Input: The process begins with classical
data (e.g. molecular structures, GIS spatial data, text for NLP). This
is the problem input that needs to be processed or analyzed using a
quantum algorithm.
- Circuit Encoding: The classical input is encoded
into a quantum-readable form. This could involve embedding the data into
an initial quantum state or setting parameters in a quantum circuit that
represent the input features. Essentially, it translates classical
information into quantum superposition or
entangled states that a quantum computer can work
with.
- Quantum Compiler (MTQC/GAVQA): The encoded problem
is then handled by the quantum compiler, which in this case is a
Multi-Target Quantum Compilation (MTQC) algorithm. MTQC
(using the GAVQA approach) designs an optimized quantum circuit suited
for the task. Rather than targeting a single objective, MTQC can
optimize for multiple goals or sub-tasks simultaneously (hence
multi-target) (Quantum
computing’s next step: New algorithm boosts multitasking). The
compiler builds the circuit from a library of quantum gates and
evolves it through an iterative process (analogous to a
genetic algorithm with selection, crossover, and mutation) until an
optimal or near-optimal circuit is found (Quantum
computing’s next step: New algorithm boosts multitasking). This
produces a sequence of quantum gate operations that accomplish the
desired computation while balancing the multiple targets.
- MQPA Pulse Optimization: Before execution on
hardware, the abstract quantum gates are converted into actual physical
control pulses for the quantum device. This is where
Multi-Qubit Pulse Amplification (MQPA) comes into play.
MQPA involves fine-tuning the microwave or laser pulses that enact the
quantum gates, with a focus on pulse shaping,
error mitigation, and cross-talk
control. At this stage, the goal is to adjust control
parameters (pulse amplitudes, durations, frequencies, timing) to ensure
the gates are performed with high fidelity on real hardware. For
example, advanced pulse shaping techniques can counteract multiple error
sources at once (Experimental
error suppression in Cross-Resonance gates via multi …). Recent
research shows that carefully optimized pulses (e.g. using
multi-derivative, multi-constraint shaping) can achieve a 2–4×
improvement in multi-qubit gate fidelity (Improving
frequency selection of driven pulses using derivative …). Likewise,
calibrating pulses to minimize interference (cross-talk) between qubits
– for instance by detuning qubits or inserting calibration sequences –
helps constrain and correct crosstalk errors ([2207.08416]
Control and mitigation of microwave crosstalk effect with
superconducting qubits). MQPA thus ensures the compiled circuit is
tailored to the hardware’s physical quirks, maximizing the chance of
successful execution.
- Quantum Execution Environment: The optimized pulses
are then delivered to the quantum execution
environment, i.e. the quantum hardware (such as a
superconducting quantum processor, ion trap system, etc.). Here, the
qubits undergo the sequence of operations dictated by the pulses. This
is the actual running of the quantum circuit on the machine. Thanks to
the prior steps, the operations are scheduled and calibrated in a way
that seeks to minimize errors during this execution phase.
- Fidelity Measurement: After the quantum circuit is
executed, the qubits are measured to obtain a result. Measurement
collapses the quantum states to classical outcomes (bits or numerical
results). In addition to producing the raw outcome, this step evaluates
the fidelity of the operation – essentially checking
how close the actual outcome is to the ideal or expected outcome if
there were no errors. Fidelity can be assessed by running the circuit
multiple times to gather statistics or by comparing to known benchmark
states. High fidelity indicates the circuit performed as intended, while
lower fidelity signals the presence of errors or noise. This measurement
stage thus provides crucial feedback on the performance of both the
compiled circuit and the pulse optimizations.
- Classical Output: Finally, the results of the
measurement are output as classical data. This could be the answer to
the problem initially posed (for example, an optimal configuration of a
molecule, a classification label, or some numerical prediction). The
classical output is what the user or a classical post-processing
algorithm will use or interpret. At this point, the quantum part of the
computation is complete, and we’re back in the classical realm with an
answer.
MTQC ↔︎ MQPA Feedback Loop
One of the key aspects illustrated in the diagram is the
feedback loop between the Quantum Compiler (MTQC) and
the Pulse Optimization (MQPA) stages. This two-way interaction (shown by
the dashed blue arrow labeled “Feedback Loop (MTQC ↔︎ MQPA)”) means that
the process of compiling the circuit and the process of calibrating
pulses are not one-off sequential steps, but rather can inform each
other iteratively:
- Circuit ⟹ Pulse Influence: The structure of the
quantum circuit influences how we optimize pulses. For instance, if the
MTQC-designed circuit uses a particular gate frequently or entangles
certain qubits, the MQPA stage will focus on making those operations as
error-free as possible (by, say, using bespoke pulse shapes or adjusting
qubit frequencies to reduce cross-talk during those operations).
Knowledge of the circuit’s critical paths lets MQPA prioritize
mitigating errors on the most sensitive or frequent operations.
- Pulses ⟹ Circuit Influence: Conversely, feedback
from the pulse level can prompt changes in the circuit design. If the
hardware has difficulty executing a certain gate combination with high
fidelity (as revealed by the fidelity measurements), the compiler can
adjust the circuit in the next iteration. For example, MTQC might choose
an alternative gate decomposition that the hardware executes more
reliably, or re-route certain operations to qubits that are more
isolated from cross-talk. In effect, the compiler “learns” about the
hardware’s strengths and weaknesses through the fidelity feedback and
adapts the quantum circuit accordingly.
- Iterative Co-Optimization: MTQC using GAVQA is
inherently iterative – it evolves candidate circuits over many
generations, selecting those that perform best (Quantum
computing’s next step: New algorithm boosts multitasking). By
incorporating the real hardware execution results (fidelity data) into
this evolution as a fitness criterion, the algorithm can drive the
circuit design toward solutions that not only solve the computational
problem but also execute with higher fidelity on the given quantum
device. Likewise, the MQPA procedure can be iteratively refined: initial
pulse tuning is done for the first circuit draft, and after each run,
pulse parameters can be further adjusted based on observed error
patterns. This co-optimization loop continues until the compiled circuit
and its corresponding pulse schedule are jointly optimized for the
target hardware.
- Adapting to Noise: The importance of the MTQC–MQPA
loop is underscored by the need to handle quantum noise and errors.
Researchers are actively looking at extending compilation algorithms
like MTQC to account for noise characteristics of hardware (Quantum
computing’s next step: New algorithm boosts multitasking). The
feedback loop enables such adaptation: information about noise
(e.g. which qubit couplings are noisy, which pulses cause decoherence)
flows into the compiler, and conversely the compiler’s choices inform
what the pulse controller should focus on. The result is a more
resilient overall system – the quantum program and the machine’s control
settings are tuned together to achieve the best performance under
real-world conditions.
In summary, MTQC (Multi-Target Quantum Compilation)
provides the brain of the operation – designing quantum
circuits that aim to fulfill complex objectives – while MQPA
(Multi-Qubit Pulse Amplification) provides the muscle
at the hardware level – executing those circuits with high-fidelity
control over the qubits. The feedback loop between them is crucial: it
closes the gap between abstract algorithms and physical hardware. By
continuously feeding performance data back into the compilation process
and adjusting low-level controls based on high-level needs, the system
can achieve far better accuracy and efficiency than a one-pass
compile-and-run approach. This synergistic co-design of quantum software
and hardware control is key to unlocking improved quantum computation
capabilities (Quantum
computing’s next step: New algorithm boosts multitasking) (Improving
frequency selection of driven pulses using derivative …), especially
as we push the limits of today’s noisy quantum devices toward more
reliable, large-scale quantum computing.
Sources: Quantum compilation and multitasking (Quantum
computing’s next step: New algorithm boosts multitasking) (Quantum
computing’s next step: New algorithm boosts multitasking); hardware
pulse shaping and error mitigation techniques (Improving
frequency selection of driven pulses using derivative …) ([2207.08416]
Control and mitigation of microwave crosstalk effect with
superconducting qubits); integration of noise considerations into
compilation (Quantum
computing’s next step: New algorithm boosts multitasking).
LS0tDQp0aXRsZTogIlF1YW50dW0gdyBqZXNzaS5jaGF0Ig0KYXV0aG9yOiAiSmVzc2ljYSBNY1BoYXVsIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KR3JlYXQuIEnigJlsbCBnZW5lcmF0ZSBhIGxhYmVsZWQgdmlzdWFsIGRpYWdyYW0gc2hvd2luZyBib3RoIHRoZSBmdWxsIHF1YW50dW0gY2lyY3VpdCBwaXBlbGluZSBhbmQgdGhlIGludGVyYWN0aW9uIGxvb3AgYmV0d2VlbiBNVFFDIChhbGdvcml0aG0gY29tcGlsYXRpb24pIGFuZCBNUVBBIChwdWxzZS1sZXZlbCBleGVjdXRpb24pLg0KDQpJ4oCZbGwgbGV0IHlvdSBrbm93IGFzIHNvb24gYXMgaXTigJlzIHJlYWR5IGZvciB5b3VyIHJldmlldy4NCg0KIyBNUVBBIGFuZCBNVFFDIEludGVncmF0aW9uIGluIGEgUXVhbnR1bSBDb21wdXRpbmcgV29ya2Zsb3cNCg0KVGhlIGRpYWdyYW0gYmVsb3cgaWxsdXN0cmF0ZXMgYSBmdWxsIHF1YW50dW0gY2lyY3VpdCBwaXBlbGluZSBmcm9tIGNsYXNzaWNhbCBpbnB1dCB0byBvdXRwdXQsIGhpZ2hsaWdodGluZyBob3cgKipNdWx0aS1UYXJnZXQgUXVhbnR1bSBDb21waWxhdGlvbiAoTVRRQykqKiBhbmQgKipNdWx0aS1RdWJpdCBQdWxzZSBBbXBsaWZpY2F0aW9uIChNUVBBKSoqIHJlbGF0ZSB0byBlYWNoIG90aGVyIGluIGFuIGl0ZXJhdGl2ZSBmZWVkYmFjayBsb29wOg0KDQogKFtpbWFnZV0oKSkgKkZpZ3VyZTogQSBoaWdoLWxldmVsIHF1YW50dW0gY29tcHV0aW5nIHBpcGVsaW5lIGlsbHVzdHJhdGluZyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gTXVsdGktVGFyZ2V0IFF1YW50dW0gQ29tcGlsYXRpb24gKE1UUUMpIGFuZCBNdWx0aS1RdWJpdCBQdWxzZSBBbXBsaWZpY2F0aW9uIChNUVBBKS4gVGhlIGNsYXNzaWNhbCBpbnB1dCBpcyBjb21waWxlZCBpbnRvIGEgcXVhbnR1bSBjaXJjdWl0IHZpYSBNVFFDICh1dGlsaXppbmcgYSBnZW5ldGljIGFsZ29yaXRobS1iYXNlZCBhcHByb2FjaCwgR0FWUUEpLCB0aGVuIG9wdGltaXplZCBhdCB0aGUgcHVsc2UgbGV2ZWwgYnkgTVFQQSBmb3IgZXhlY3V0aW9uIG9uIHF1YW50dW0gaGFyZHdhcmUuIEEgZmVlZGJhY2sgbG9vcCAoZGFzaGVkIGJsdWUgYXJyb3cpIGNvbm5lY3RzIE1UUUMgYW5kIE1RUEEsIGFsbG93aW5nIGNpcmN1aXQgZGVzaWduIGFuZCBwdWxzZSBzaGFwaW5nIHRvIGl0ZXJhdGl2ZWx5IGluZm9ybSBlYWNoIG90aGVyIHRvIG1heGltaXplIGZpZGVsaXR5LiogDQoNCiMjIFBpcGVsaW5lIFN0YWdlcw0KDQotICoqQ2xhc3NpY2FsIElucHV0OioqIFRoZSBwcm9jZXNzIGJlZ2lucyB3aXRoIGNsYXNzaWNhbCBkYXRhIChlLmcuIG1vbGVjdWxhciBzdHJ1Y3R1cmVzLCBHSVMgc3BhdGlhbCBkYXRhLCB0ZXh0IGZvciBOTFApLiBUaGlzIGlzIHRoZSBwcm9ibGVtIGlucHV0IHRoYXQgbmVlZHMgdG8gYmUgcHJvY2Vzc2VkIG9yIGFuYWx5emVkIHVzaW5nIGEgcXVhbnR1bSBhbGdvcml0aG0uICANCi0gKipDaXJjdWl0IEVuY29kaW5nOioqIFRoZSBjbGFzc2ljYWwgaW5wdXQgaXMgZW5jb2RlZCBpbnRvIGEgcXVhbnR1bS1yZWFkYWJsZSBmb3JtLiBUaGlzIGNvdWxkIGludm9sdmUgZW1iZWRkaW5nIHRoZSBkYXRhIGludG8gYW4gaW5pdGlhbCBxdWFudHVtIHN0YXRlIG9yIHNldHRpbmcgcGFyYW1ldGVycyBpbiBhIHF1YW50dW0gY2lyY3VpdCB0aGF0IHJlcHJlc2VudCB0aGUgaW5wdXQgZmVhdHVyZXMuIEVzc2VudGlhbGx5LCBpdCB0cmFuc2xhdGVzIGNsYXNzaWNhbCBpbmZvcm1hdGlvbiBpbnRvIHF1YW50dW0gKipzdXBlcnBvc2l0aW9uKiogb3IgKiplbnRhbmdsZWQqKiBzdGF0ZXMgdGhhdCBhIHF1YW50dW0gY29tcHV0ZXIgY2FuIHdvcmsgd2l0aC4gIA0KLSAqKlF1YW50dW0gQ29tcGlsZXIgKE1UUUMvR0FWUUEpOioqIFRoZSBlbmNvZGVkIHByb2JsZW0gaXMgdGhlbiBoYW5kbGVkIGJ5IHRoZSBxdWFudHVtIGNvbXBpbGVyLCB3aGljaCBpbiB0aGlzIGNhc2UgaXMgYSAqKk11bHRpLVRhcmdldCBRdWFudHVtIENvbXBpbGF0aW9uIChNVFFDKSoqIGFsZ29yaXRobS4gTVRRQyAodXNpbmcgdGhlIEdBVlFBIGFwcHJvYWNoKSBkZXNpZ25zIGFuIG9wdGltaXplZCBxdWFudHVtIGNpcmN1aXQgc3VpdGVkIGZvciB0aGUgdGFzay4gUmF0aGVyIHRoYW4gdGFyZ2V0aW5nIGEgc2luZ2xlIG9iamVjdGl2ZSwgTVRRQyBjYW4gb3B0aW1pemUgZm9yIG11bHRpcGxlIGdvYWxzIG9yIHN1Yi10YXNrcyBzaW11bHRhbmVvdXNseSAoaGVuY2UgKm11bHRpLXRhcmdldCopIChbUXVhbnR1bSBjb21wdXRpbmcncyBuZXh0IHN0ZXA6IE5ldyBhbGdvcml0aG0gYm9vc3RzIG11bHRpdGFza2luZ10oaHR0cHM6Ly90ZWNoeHBsb3JlLmNvbS9uZXdzLzIwMjQtMTItcXVhbnR1bS1hbGdvcml0aG0tYm9vc3RzLW11bHRpdGFza2luZy5odG1sIzp+OnRleHQ9LGFwcGxpY2F0aW9ucyUyMGFjcm9zcyUyMHZhcmlvdXMlMjBzY2llbnRpZmljJTIwZGlzY2lwbGluZXMpKS4gVGhlIGNvbXBpbGVyIGJ1aWxkcyB0aGUgY2lyY3VpdCBmcm9tIGEgbGlicmFyeSBvZiBxdWFudHVtIGdhdGVzIGFuZCAqKmV2b2x2ZXMqKiBpdCB0aHJvdWdoIGFuIGl0ZXJhdGl2ZSBwcm9jZXNzIChhbmFsb2dvdXMgdG8gYSBnZW5ldGljIGFsZ29yaXRobSB3aXRoIHNlbGVjdGlvbiwgY3Jvc3NvdmVyLCBhbmQgbXV0YXRpb24pIHVudGlsIGFuIG9wdGltYWwgb3IgbmVhci1vcHRpbWFsIGNpcmN1aXQgaXMgZm91bmQgKFtRdWFudHVtIGNvbXB1dGluZydzIG5leHQgc3RlcDogTmV3IGFsZ29yaXRobSBib29zdHMgbXVsdGl0YXNraW5nXShodHRwczovL3RlY2h4cGxvcmUuY29tL25ld3MvMjAyNC0xMi1xdWFudHVtLWFsZ29yaXRobS1ib29zdHMtbXVsdGl0YXNraW5nLmh0bWwjOn46dGV4dD1JbWFnZSUzQSUyME5ldyUyMGFsZ29yaXRobSUyMGJvb3N0cyUyMG11bHRpdGFza2luZyxDcmVkaXQlM0ElMjBUb2hva3UlMjBVbml2ZXJzaXR5KSkuIFRoaXMgcHJvZHVjZXMgYSBzZXF1ZW5jZSBvZiBxdWFudHVtIGdhdGUgb3BlcmF0aW9ucyB0aGF0IGFjY29tcGxpc2ggdGhlIGRlc2lyZWQgY29tcHV0YXRpb24gd2hpbGUgYmFsYW5jaW5nIHRoZSBtdWx0aXBsZSB0YXJnZXRzLiAgDQotICoqTVFQQSBQdWxzZSBPcHRpbWl6YXRpb246KiogQmVmb3JlIGV4ZWN1dGlvbiBvbiBoYXJkd2FyZSwgdGhlIGFic3RyYWN0IHF1YW50dW0gZ2F0ZXMgYXJlIGNvbnZlcnRlZCBpbnRvIGFjdHVhbCBwaHlzaWNhbCAqKmNvbnRyb2wgcHVsc2VzKiogZm9yIHRoZSBxdWFudHVtIGRldmljZS4gVGhpcyBpcyB3aGVyZSAqKk11bHRpLVF1Yml0IFB1bHNlIEFtcGxpZmljYXRpb24gKE1RUEEpKiogY29tZXMgaW50byBwbGF5LiBNUVBBIGludm9sdmVzIGZpbmUtdHVuaW5nIHRoZSBtaWNyb3dhdmUgb3IgbGFzZXIgcHVsc2VzIHRoYXQgZW5hY3QgdGhlIHF1YW50dW0gZ2F0ZXMsIHdpdGggYSBmb2N1cyBvbiAqKnB1bHNlIHNoYXBpbmcqKiwgKiplcnJvciBtaXRpZ2F0aW9uKiosIGFuZCAqKmNyb3NzLXRhbGsgY29udHJvbCoqLiBBdCB0aGlzIHN0YWdlLCB0aGUgZ29hbCBpcyB0byBhZGp1c3QgY29udHJvbCBwYXJhbWV0ZXJzIChwdWxzZSBhbXBsaXR1ZGVzLCBkdXJhdGlvbnMsIGZyZXF1ZW5jaWVzLCB0aW1pbmcpIHRvIGVuc3VyZSB0aGUgZ2F0ZXMgYXJlIHBlcmZvcm1lZCB3aXRoIGhpZ2ggZmlkZWxpdHkgb24gcmVhbCBoYXJkd2FyZS4gRm9yIGV4YW1wbGUsIGFkdmFuY2VkIHB1bHNlIHNoYXBpbmcgdGVjaG5pcXVlcyBjYW4gY291bnRlcmFjdCBtdWx0aXBsZSBlcnJvciBzb3VyY2VzIGF0IG9uY2UgKFtFeHBlcmltZW50YWwgZXJyb3Igc3VwcHJlc3Npb24gaW4gQ3Jvc3MtUmVzb25hbmNlIGdhdGVzIHZpYSBtdWx0aSAuLi5dKGh0dHBzOi8vYXJ4aXYub3JnL2Ficy8yMzAzLjAxNDI3Izp+OnRleHQ9LHNpbXVsdGFuZW91c2x5JTIwYWdhaW5zdCUyMG11bHRpcGxlJTIwZXJyb3IlMjBzb3VyY2VzKSkuIFJlY2VudCByZXNlYXJjaCBzaG93cyB0aGF0IGNhcmVmdWxseSBvcHRpbWl6ZWQgcHVsc2VzIChlLmcuIHVzaW5nIG11bHRpLWRlcml2YXRpdmUsIG11bHRpLWNvbnN0cmFpbnQgc2hhcGluZykgY2FuIGFjaGlldmUgYSAy4oCTNMOXIGltcHJvdmVtZW50IGluIG11bHRpLXF1Yml0IGdhdGUgZmlkZWxpdHkgKFtJbXByb3ZpbmcgZnJlcXVlbmN5IHNlbGVjdGlvbiBvZiBkcml2ZW4gcHVsc2VzIHVzaW5nIGRlcml2YXRpdmUgLi4uXShodHRwczovL3d3dy5yZXNlYXJjaGdhdGUubmV0L3B1YmxpY2F0aW9uLzI1ODIwMTMyOV9JbXByb3ZpbmdfZnJlcXVlbmN5X3NlbGVjdGlvbl9vZl9kcml2ZW5fcHVsc2VzX3VzaW5nX2Rlcml2YXRpdmUtYmFzZWRfdHJhbnNpdGlvbl9zdXBwcmVzc2lvbiM6fjp0ZXh0PUV4cGVyaW1lbnRhbCUyMGVycm9yJTIwc3VwcHJlc3Npb24lMjBpbiUyMENyb3NzLGElMjB0d28lMjB0byUyMGZvdXJmb2xkKSkuIExpa2V3aXNlLCBjYWxpYnJhdGluZyBwdWxzZXMgdG8gbWluaW1pemUgaW50ZXJmZXJlbmNlIChjcm9zcy10YWxrKSBiZXR3ZWVuIHF1Yml0cyDigJMgZm9yIGluc3RhbmNlIGJ5IGRldHVuaW5nIHF1Yml0cyBvciBpbnNlcnRpbmcgY2FsaWJyYXRpb24gc2VxdWVuY2VzIOKAkyBoZWxwcyBjb25zdHJhaW4gYW5kIGNvcnJlY3QgY3Jvc3N0YWxrIGVycm9ycyAoW1syMjA3LjA4NDE2XSBDb250cm9sIGFuZCBtaXRpZ2F0aW9uIG9mIG1pY3Jvd2F2ZSBjcm9zc3RhbGsgZWZmZWN0IHdpdGggc3VwZXJjb25kdWN0aW5nIHF1Yml0c10oaHR0cHM6Ly9hcnhpdi5vcmcvYWJzLzIyMDcuMDg0MTYjOn46dGV4dD1jcm9zc3RhbGslMjBiZXR3ZWVuJTIwbWljcm93YXZlJTIwcHVsc2VzJTIwaXMsVXNpbmclMjBvdXIlMjBtZXRob2QlMkMlMjBubyUyMGFkZGl0aW9uYWwpKS4gTVFQQSB0aHVzIGVuc3VyZXMgdGhlIGNvbXBpbGVkIGNpcmN1aXQgaXMgdGFpbG9yZWQgdG8gdGhlIGhhcmR3YXJl4oCZcyBwaHlzaWNhbCBxdWlya3MsIG1heGltaXppbmcgdGhlIGNoYW5jZSBvZiBzdWNjZXNzZnVsIGV4ZWN1dGlvbi4gIA0KLSAqKlF1YW50dW0gRXhlY3V0aW9uIEVudmlyb25tZW50OioqIFRoZSBvcHRpbWl6ZWQgcHVsc2VzIGFyZSB0aGVuIGRlbGl2ZXJlZCB0byB0aGUgKipxdWFudHVtIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCoqLCBpLmUuIHRoZSBxdWFudHVtIGhhcmR3YXJlIChzdWNoIGFzIGEgc3VwZXJjb25kdWN0aW5nIHF1YW50dW0gcHJvY2Vzc29yLCBpb24gdHJhcCBzeXN0ZW0sIGV0Yy4pLiBIZXJlLCB0aGUgcXViaXRzIHVuZGVyZ28gdGhlIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgZGljdGF0ZWQgYnkgdGhlIHB1bHNlcy4gVGhpcyBpcyB0aGUgYWN0dWFsIHJ1bm5pbmcgb2YgdGhlIHF1YW50dW0gY2lyY3VpdCBvbiB0aGUgbWFjaGluZS4gVGhhbmtzIHRvIHRoZSBwcmlvciBzdGVwcywgdGhlIG9wZXJhdGlvbnMgYXJlIHNjaGVkdWxlZCBhbmQgY2FsaWJyYXRlZCBpbiBhIHdheSB0aGF0IHNlZWtzIHRvIG1pbmltaXplIGVycm9ycyBkdXJpbmcgdGhpcyBleGVjdXRpb24gcGhhc2UuICANCi0gKipGaWRlbGl0eSBNZWFzdXJlbWVudDoqKiBBZnRlciB0aGUgcXVhbnR1bSBjaXJjdWl0IGlzIGV4ZWN1dGVkLCB0aGUgcXViaXRzIGFyZSBtZWFzdXJlZCB0byBvYnRhaW4gYSByZXN1bHQuIE1lYXN1cmVtZW50IGNvbGxhcHNlcyB0aGUgcXVhbnR1bSBzdGF0ZXMgdG8gY2xhc3NpY2FsIG91dGNvbWVzIChiaXRzIG9yIG51bWVyaWNhbCByZXN1bHRzKS4gSW4gYWRkaXRpb24gdG8gcHJvZHVjaW5nIHRoZSByYXcgb3V0Y29tZSwgdGhpcyBzdGVwIGV2YWx1YXRlcyB0aGUgKipmaWRlbGl0eSoqIG9mIHRoZSBvcGVyYXRpb24g4oCTIGVzc2VudGlhbGx5IGNoZWNraW5nIGhvdyBjbG9zZSB0aGUgYWN0dWFsIG91dGNvbWUgaXMgdG8gdGhlIGlkZWFsIG9yIGV4cGVjdGVkIG91dGNvbWUgaWYgdGhlcmUgd2VyZSBubyBlcnJvcnMuIEZpZGVsaXR5IGNhbiBiZSBhc3Nlc3NlZCBieSBydW5uaW5nIHRoZSBjaXJjdWl0IG11bHRpcGxlIHRpbWVzIHRvIGdhdGhlciBzdGF0aXN0aWNzIG9yIGJ5IGNvbXBhcmluZyB0byBrbm93biBiZW5jaG1hcmsgc3RhdGVzLiBIaWdoIGZpZGVsaXR5IGluZGljYXRlcyB0aGUgY2lyY3VpdCBwZXJmb3JtZWQgYXMgaW50ZW5kZWQsIHdoaWxlIGxvd2VyIGZpZGVsaXR5IHNpZ25hbHMgdGhlIHByZXNlbmNlIG9mIGVycm9ycyBvciBub2lzZS4gVGhpcyBtZWFzdXJlbWVudCBzdGFnZSB0aHVzIHByb3ZpZGVzIGNydWNpYWwgZmVlZGJhY2sgb24gdGhlIHBlcmZvcm1hbmNlIG9mIGJvdGggdGhlIGNvbXBpbGVkIGNpcmN1aXQgYW5kIHRoZSBwdWxzZSBvcHRpbWl6YXRpb25zLiAgDQotICoqQ2xhc3NpY2FsIE91dHB1dDoqKiBGaW5hbGx5LCB0aGUgcmVzdWx0cyBvZiB0aGUgbWVhc3VyZW1lbnQgYXJlIG91dHB1dCBhcyBjbGFzc2ljYWwgZGF0YS4gVGhpcyBjb3VsZCBiZSB0aGUgYW5zd2VyIHRvIHRoZSBwcm9ibGVtIGluaXRpYWxseSBwb3NlZCAoZm9yIGV4YW1wbGUsIGFuIG9wdGltYWwgY29uZmlndXJhdGlvbiBvZiBhIG1vbGVjdWxlLCBhIGNsYXNzaWZpY2F0aW9uIGxhYmVsLCBvciBzb21lIG51bWVyaWNhbCBwcmVkaWN0aW9uKS4gVGhlIGNsYXNzaWNhbCBvdXRwdXQgaXMgd2hhdCB0aGUgdXNlciBvciBhIGNsYXNzaWNhbCBwb3N0LXByb2Nlc3NpbmcgYWxnb3JpdGhtIHdpbGwgdXNlIG9yIGludGVycHJldC4gQXQgdGhpcyBwb2ludCwgdGhlIHF1YW50dW0gcGFydCBvZiB0aGUgY29tcHV0YXRpb24gaXMgY29tcGxldGUsIGFuZCB3ZeKAmXJlIGJhY2sgaW4gdGhlIGNsYXNzaWNhbCByZWFsbSB3aXRoIGFuIGFuc3dlci4NCg0KIyMgTVRRQyDihpQgTVFQQSBGZWVkYmFjayBMb29wDQoNCk9uZSBvZiB0aGUga2V5IGFzcGVjdHMgaWxsdXN0cmF0ZWQgaW4gdGhlIGRpYWdyYW0gaXMgdGhlICoqZmVlZGJhY2sgbG9vcCoqIGJldHdlZW4gdGhlIFF1YW50dW0gQ29tcGlsZXIgKE1UUUMpIGFuZCB0aGUgUHVsc2UgT3B0aW1pemF0aW9uIChNUVBBKSBzdGFnZXMuIFRoaXMgdHdvLXdheSBpbnRlcmFjdGlvbiAoc2hvd24gYnkgdGhlIGRhc2hlZCBibHVlIGFycm93IGxhYmVsZWQg4oCcRmVlZGJhY2sgTG9vcCAoTVRRQyDihpQgTVFQQSnigJ0pIG1lYW5zIHRoYXQgdGhlIHByb2Nlc3Mgb2YgY29tcGlsaW5nIHRoZSBjaXJjdWl0IGFuZCB0aGUgcHJvY2VzcyBvZiBjYWxpYnJhdGluZyBwdWxzZXMgYXJlIG5vdCBvbmUtb2ZmIHNlcXVlbnRpYWwgc3RlcHMsIGJ1dCByYXRoZXIgY2FuIGluZm9ybSBlYWNoIG90aGVyIGl0ZXJhdGl2ZWx5Og0KDQotICoqQ2lyY3VpdCDin7kgUHVsc2UgSW5mbHVlbmNlOioqIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHF1YW50dW0gY2lyY3VpdCBpbmZsdWVuY2VzIGhvdyB3ZSBvcHRpbWl6ZSBwdWxzZXMuIEZvciBpbnN0YW5jZSwgaWYgdGhlIE1UUUMtZGVzaWduZWQgY2lyY3VpdCB1c2VzIGEgcGFydGljdWxhciBnYXRlIGZyZXF1ZW50bHkgb3IgZW50YW5nbGVzIGNlcnRhaW4gcXViaXRzLCB0aGUgTVFQQSBzdGFnZSB3aWxsIGZvY3VzIG9uIG1ha2luZyB0aG9zZSBvcGVyYXRpb25zIGFzIGVycm9yLWZyZWUgYXMgcG9zc2libGUgKGJ5LCBzYXksIHVzaW5nIGJlc3Bva2UgcHVsc2Ugc2hhcGVzIG9yIGFkanVzdGluZyBxdWJpdCBmcmVxdWVuY2llcyB0byByZWR1Y2UgY3Jvc3MtdGFsayBkdXJpbmcgdGhvc2Ugb3BlcmF0aW9ucykuIEtub3dsZWRnZSBvZiB0aGUgY2lyY3VpdOKAmXMgY3JpdGljYWwgcGF0aHMgbGV0cyBNUVBBIHByaW9yaXRpemUgbWl0aWdhdGluZyBlcnJvcnMgb24gdGhlIG1vc3Qgc2Vuc2l0aXZlIG9yIGZyZXF1ZW50IG9wZXJhdGlvbnMuICANCi0gKipQdWxzZXMg4p+5IENpcmN1aXQgSW5mbHVlbmNlOioqIENvbnZlcnNlbHksIGZlZWRiYWNrIGZyb20gdGhlIHB1bHNlIGxldmVsIGNhbiBwcm9tcHQgY2hhbmdlcyBpbiB0aGUgY2lyY3VpdCBkZXNpZ24uIElmIHRoZSBoYXJkd2FyZSBoYXMgZGlmZmljdWx0eSBleGVjdXRpbmcgYSBjZXJ0YWluIGdhdGUgY29tYmluYXRpb24gd2l0aCBoaWdoIGZpZGVsaXR5IChhcyByZXZlYWxlZCBieSB0aGUgZmlkZWxpdHkgbWVhc3VyZW1lbnRzKSwgdGhlIGNvbXBpbGVyIGNhbiBhZGp1c3QgdGhlIGNpcmN1aXQgaW4gdGhlIG5leHQgaXRlcmF0aW9uLiBGb3IgZXhhbXBsZSwgTVRRQyBtaWdodCBjaG9vc2UgYW4gYWx0ZXJuYXRpdmUgZ2F0ZSBkZWNvbXBvc2l0aW9uIHRoYXQgdGhlIGhhcmR3YXJlIGV4ZWN1dGVzIG1vcmUgcmVsaWFibHksIG9yIHJlLXJvdXRlIGNlcnRhaW4gb3BlcmF0aW9ucyB0byBxdWJpdHMgdGhhdCBhcmUgbW9yZSBpc29sYXRlZCBmcm9tIGNyb3NzLXRhbGsuIEluIGVmZmVjdCwgdGhlIGNvbXBpbGVyIOKAnGxlYXJuc+KAnSBhYm91dCB0aGUgaGFyZHdhcmXigJlzIHN0cmVuZ3RocyBhbmQgd2Vha25lc3NlcyB0aHJvdWdoIHRoZSBmaWRlbGl0eSBmZWVkYmFjayBhbmQgYWRhcHRzIHRoZSBxdWFudHVtIGNpcmN1aXQgYWNjb3JkaW5nbHkuICANCi0gKipJdGVyYXRpdmUgQ28tT3B0aW1pemF0aW9uOioqIE1UUUMgdXNpbmcgR0FWUUEgaXMgaW5oZXJlbnRseSBpdGVyYXRpdmUg4oCTIGl0IGV2b2x2ZXMgY2FuZGlkYXRlIGNpcmN1aXRzIG92ZXIgbWFueSBnZW5lcmF0aW9ucywgc2VsZWN0aW5nIHRob3NlIHRoYXQgcGVyZm9ybSBiZXN0IChbUXVhbnR1bSBjb21wdXRpbmcncyBuZXh0IHN0ZXA6IE5ldyBhbGdvcml0aG0gYm9vc3RzIG11bHRpdGFza2luZ10oaHR0cHM6Ly90ZWNoeHBsb3JlLmNvbS9uZXdzLzIwMjQtMTItcXVhbnR1bS1hbGdvcml0aG0tYm9vc3RzLW11bHRpdGFza2luZy5odG1sIzp+OnRleHQ9SW1hZ2UlM0ElMjBOZXclMjBhbGdvcml0aG0lMjBib29zdHMlMjBtdWx0aXRhc2tpbmcsQ3JlZGl0JTNBJTIwVG9ob2t1JTIwVW5pdmVyc2l0eSkpLiBCeSBpbmNvcnBvcmF0aW5nIHRoZSByZWFsIGhhcmR3YXJlIGV4ZWN1dGlvbiByZXN1bHRzIChmaWRlbGl0eSBkYXRhKSBpbnRvIHRoaXMgZXZvbHV0aW9uIGFzIGEgZml0bmVzcyBjcml0ZXJpb24sIHRoZSBhbGdvcml0aG0gY2FuIGRyaXZlIHRoZSBjaXJjdWl0IGRlc2lnbiB0b3dhcmQgc29sdXRpb25zIHRoYXQgbm90IG9ubHkgc29sdmUgdGhlIGNvbXB1dGF0aW9uYWwgcHJvYmxlbSBidXQgYWxzbyBleGVjdXRlIHdpdGggaGlnaGVyIGZpZGVsaXR5IG9uIHRoZSBnaXZlbiBxdWFudHVtIGRldmljZS4gTGlrZXdpc2UsIHRoZSBNUVBBIHByb2NlZHVyZSBjYW4gYmUgaXRlcmF0aXZlbHkgcmVmaW5lZDogaW5pdGlhbCBwdWxzZSB0dW5pbmcgaXMgZG9uZSBmb3IgdGhlIGZpcnN0IGNpcmN1aXQgZHJhZnQsIGFuZCBhZnRlciBlYWNoIHJ1biwgcHVsc2UgcGFyYW1ldGVycyBjYW4gYmUgZnVydGhlciBhZGp1c3RlZCBiYXNlZCBvbiBvYnNlcnZlZCBlcnJvciBwYXR0ZXJucy4gVGhpcyBjby1vcHRpbWl6YXRpb24gbG9vcCBjb250aW51ZXMgdW50aWwgdGhlIGNvbXBpbGVkIGNpcmN1aXQgYW5kIGl0cyBjb3JyZXNwb25kaW5nIHB1bHNlIHNjaGVkdWxlIGFyZSBqb2ludGx5IG9wdGltaXplZCBmb3IgdGhlIHRhcmdldCBoYXJkd2FyZS4gIA0KLSAqKkFkYXB0aW5nIHRvIE5vaXNlOioqIFRoZSBpbXBvcnRhbmNlIG9mIHRoZSBNVFFD4oCTTVFQQSBsb29wIGlzIHVuZGVyc2NvcmVkIGJ5IHRoZSBuZWVkIHRvIGhhbmRsZSBxdWFudHVtIG5vaXNlIGFuZCBlcnJvcnMuIFJlc2VhcmNoZXJzIGFyZSBhY3RpdmVseSBsb29raW5nIGF0IGV4dGVuZGluZyBjb21waWxhdGlvbiBhbGdvcml0aG1zIGxpa2UgTVRRQyB0byBhY2NvdW50IGZvciBub2lzZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgaGFyZHdhcmUgKFtRdWFudHVtIGNvbXB1dGluZydzIG5leHQgc3RlcDogTmV3IGFsZ29yaXRobSBib29zdHMgbXVsdGl0YXNraW5nXShodHRwczovL3RlY2h4cGxvcmUuY29tL25ld3MvMjAyNC0xMi1xdWFudHVtLWFsZ29yaXRobS1ib29zdHMtbXVsdGl0YXNraW5nLmh0bWwjOn46dGV4dD1Mb29raW5nJTIwYWhlYWQlMkMlMjBMZSUyMGFpbXMlMjB0byx3YXlzJTIwdG8lMjBlbmhhbmNlJTIwaXRzJTIwcGVyZm9ybWFuY2UpKS4gVGhlIGZlZWRiYWNrIGxvb3AgZW5hYmxlcyBzdWNoIGFkYXB0YXRpb246IGluZm9ybWF0aW9uIGFib3V0IG5vaXNlIChlLmcuIHdoaWNoIHF1Yml0IGNvdXBsaW5ncyBhcmUgbm9pc3ksIHdoaWNoIHB1bHNlcyBjYXVzZSBkZWNvaGVyZW5jZSkgZmxvd3MgaW50byB0aGUgY29tcGlsZXIsIGFuZCBjb252ZXJzZWx5IHRoZSBjb21waWxlcuKAmXMgY2hvaWNlcyBpbmZvcm0gd2hhdCB0aGUgcHVsc2UgY29udHJvbGxlciBzaG91bGQgZm9jdXMgb24uIFRoZSByZXN1bHQgaXMgYSBtb3JlIHJlc2lsaWVudCBvdmVyYWxsIHN5c3RlbSDigJMgdGhlIHF1YW50dW0gcHJvZ3JhbSBhbmQgdGhlIG1hY2hpbmXigJlzIGNvbnRyb2wgc2V0dGluZ3MgYXJlIHR1bmVkIHRvZ2V0aGVyIHRvIGFjaGlldmUgdGhlIGJlc3QgcGVyZm9ybWFuY2UgdW5kZXIgcmVhbC13b3JsZCBjb25kaXRpb25zLg0KDQpJbiBzdW1tYXJ5LCAqKk1UUUMgKE11bHRpLVRhcmdldCBRdWFudHVtIENvbXBpbGF0aW9uKSoqIHByb3ZpZGVzIHRoZSAqYnJhaW4qIG9mIHRoZSBvcGVyYXRpb24g4oCTIGRlc2lnbmluZyBxdWFudHVtIGNpcmN1aXRzIHRoYXQgYWltIHRvIGZ1bGZpbGwgY29tcGxleCBvYmplY3RpdmVzIOKAkyB3aGlsZSAqKk1RUEEgKE11bHRpLVF1Yml0IFB1bHNlIEFtcGxpZmljYXRpb24pKiogcHJvdmlkZXMgdGhlICptdXNjbGUqIGF0IHRoZSBoYXJkd2FyZSBsZXZlbCDigJMgZXhlY3V0aW5nIHRob3NlIGNpcmN1aXRzIHdpdGggaGlnaC1maWRlbGl0eSBjb250cm9sIG92ZXIgdGhlIHF1Yml0cy4gVGhlIGZlZWRiYWNrIGxvb3AgYmV0d2VlbiB0aGVtIGlzIGNydWNpYWw6IGl0IGNsb3NlcyB0aGUgZ2FwIGJldHdlZW4gYWJzdHJhY3QgYWxnb3JpdGhtcyBhbmQgcGh5c2ljYWwgaGFyZHdhcmUuIEJ5IGNvbnRpbnVvdXNseSBmZWVkaW5nIHBlcmZvcm1hbmNlIGRhdGEgYmFjayBpbnRvIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzIGFuZCBhZGp1c3RpbmcgbG93LWxldmVsIGNvbnRyb2xzIGJhc2VkIG9uIGhpZ2gtbGV2ZWwgbmVlZHMsIHRoZSBzeXN0ZW0gY2FuIGFjaGlldmUgZmFyIGJldHRlciBhY2N1cmFjeSBhbmQgZWZmaWNpZW5jeSB0aGFuIGEgb25lLXBhc3MgY29tcGlsZS1hbmQtcnVuIGFwcHJvYWNoLiBUaGlzIHN5bmVyZ2lzdGljIGNvLWRlc2lnbiBvZiBxdWFudHVtIHNvZnR3YXJlIGFuZCBoYXJkd2FyZSBjb250cm9sIGlzIGtleSB0byB1bmxvY2tpbmcgaW1wcm92ZWQgcXVhbnR1bSBjb21wdXRhdGlvbiBjYXBhYmlsaXRpZXMgKFtRdWFudHVtIGNvbXB1dGluZydzIG5leHQgc3RlcDogTmV3IGFsZ29yaXRobSBib29zdHMgbXVsdGl0YXNraW5nXShodHRwczovL3RlY2h4cGxvcmUuY29tL25ld3MvMjAyNC0xMi1xdWFudHVtLWFsZ29yaXRobS1ib29zdHMtbXVsdGl0YXNraW5nLmh0bWwjOn46dGV4dD0sYXBwbGljYXRpb25zJTIwYWNyb3NzJTIwdmFyaW91cyUyMHNjaWVudGlmaWMlMjBkaXNjaXBsaW5lcykpIChbSW1wcm92aW5nIGZyZXF1ZW5jeSBzZWxlY3Rpb24gb2YgZHJpdmVuIHB1bHNlcyB1c2luZyBkZXJpdmF0aXZlIC4uLl0oaHR0cHM6Ly93d3cucmVzZWFyY2hnYXRlLm5ldC9wdWJsaWNhdGlvbi8yNTgyMDEzMjlfSW1wcm92aW5nX2ZyZXF1ZW5jeV9zZWxlY3Rpb25fb2ZfZHJpdmVuX3B1bHNlc191c2luZ19kZXJpdmF0aXZlLWJhc2VkX3RyYW5zaXRpb25fc3VwcHJlc3Npb24jOn46dGV4dD1FeHBlcmltZW50YWwlMjBlcnJvciUyMHN1cHByZXNzaW9uJTIwaW4lMjBDcm9zcyxhJTIwdHdvJTIwdG8lMjBmb3VyZm9sZCkpLCBlc3BlY2lhbGx5IGFzIHdlIHB1c2ggdGhlIGxpbWl0cyBvZiB0b2RheeKAmXMgbm9pc3kgcXVhbnR1bSBkZXZpY2VzIHRvd2FyZCBtb3JlIHJlbGlhYmxlLCBsYXJnZS1zY2FsZSBxdWFudHVtIGNvbXB1dGluZy4gDQoNCioqU291cmNlczoqKiBRdWFudHVtIGNvbXBpbGF0aW9uIGFuZCBtdWx0aXRhc2tpbmcgKFtRdWFudHVtIGNvbXB1dGluZydzIG5leHQgc3RlcDogTmV3IGFsZ29yaXRobSBib29zdHMgbXVsdGl0YXNraW5nXShodHRwczovL3RlY2h4cGxvcmUuY29tL25ld3MvMjAyNC0xMi1xdWFudHVtLWFsZ29yaXRobS1ib29zdHMtbXVsdGl0YXNraW5nLmh0bWwjOn46dGV4dD0sYXBwbGljYXRpb25zJTIwYWNyb3NzJTIwdmFyaW91cyUyMHNjaWVudGlmaWMlMjBkaXNjaXBsaW5lcykpIChbUXVhbnR1bSBjb21wdXRpbmcncyBuZXh0IHN0ZXA6IE5ldyBhbGdvcml0aG0gYm9vc3RzIG11bHRpdGFza2luZ10oaHR0cHM6Ly90ZWNoeHBsb3JlLmNvbS9uZXdzLzIwMjQtMTItcXVhbnR1bS1hbGdvcml0aG0tYm9vc3RzLW11bHRpdGFza2luZy5odG1sIzp+OnRleHQ9SW1hZ2UlM0ElMjBOZXclMjBhbGdvcml0aG0lMjBib29zdHMlMjBtdWx0aXRhc2tpbmcsQ3JlZGl0JTNBJTIwVG9ob2t1JTIwVW5pdmVyc2l0eSkpOyBoYXJkd2FyZSBwdWxzZSBzaGFwaW5nIGFuZCBlcnJvciBtaXRpZ2F0aW9uIHRlY2huaXF1ZXMgKFtJbXByb3ZpbmcgZnJlcXVlbmN5IHNlbGVjdGlvbiBvZiBkcml2ZW4gcHVsc2VzIHVzaW5nIGRlcml2YXRpdmUgLi4uXShodHRwczovL3d3dy5yZXNlYXJjaGdhdGUubmV0L3B1YmxpY2F0aW9uLzI1ODIwMTMyOV9JbXByb3ZpbmdfZnJlcXVlbmN5X3NlbGVjdGlvbl9vZl9kcml2ZW5fcHVsc2VzX3VzaW5nX2Rlcml2YXRpdmUtYmFzZWRfdHJhbnNpdGlvbl9zdXBwcmVzc2lvbiM6fjp0ZXh0PUV4cGVyaW1lbnRhbCUyMGVycm9yJTIwc3VwcHJlc3Npb24lMjBpbiUyMENyb3NzLGElMjB0d28lMjB0byUyMGZvdXJmb2xkKSkgKFtbMjIwNy4wODQxNl0gQ29udHJvbCBhbmQgbWl0aWdhdGlvbiBvZiBtaWNyb3dhdmUgY3Jvc3N0YWxrIGVmZmVjdCB3aXRoIHN1cGVyY29uZHVjdGluZyBxdWJpdHNdKGh0dHBzOi8vYXJ4aXYub3JnL2Ficy8yMjA3LjA4NDE2Izp+OnRleHQ9Y3Jvc3N0YWxrJTIwYmV0d2VlbiUyMG1pY3Jvd2F2ZSUyMHB1bHNlcyUyMGlzLFVzaW5nJTIwb3VyJTIwbWV0aG9kJTJDJTIwbm8lMjBhZGRpdGlvbmFsKSk7IGludGVncmF0aW9uIG9mIG5vaXNlIGNvbnNpZGVyYXRpb25zIGludG8gY29tcGlsYXRpb24gKFtRdWFudHVtIGNvbXB1dGluZydzIG5leHQgc3RlcDogTmV3IGFsZ29yaXRobSBib29zdHMgbXVsdGl0YXNraW5nXShodHRwczovL3RlY2h4cGxvcmUuY29tL25ld3MvMjAyNC0xMi1xdWFudHVtLWFsZ29yaXRobS1ib29zdHMtbXVsdGl0YXNraW5nLmh0bWwjOn46dGV4dD1Mb29raW5nJTIwYWhlYWQlMkMlMjBMZSUyMGFpbXMlMjB0byx3YXlzJTIwdG8lMjBlbmhhbmNlJTIwaXRzJTIwcGVyZm9ybWFuY2UpKS4=