DIR : /home/kozerus/public_html/ko/ko_ahax.htm
/home/kozerus/public_html/ko
<html>
<head>
<title>/index.html 20230201_1200 links kofeshop tls </title>
<!--
-->
<div id=div_ajax_ko_coffeeshop hidden><h3>div_ajax_ko_coffeeshop</h3></div>
<div id=div_ajax_ko hidden><h3>div_ajax_ko</h3></div>
<hr color=yellow>
<!-- <img src="/imgs/btn/kob.png" onclick="alert('ko_confirm_beg');ko_confirm('test');alert('ko_confirm_end');return false;" height=20>ko_confirm -->
<br>
<hr color=yellow>
<!-- <img src="/imgs/btn/logo_buymeacoffee.png onclick="window.open('/ko_coffeeshop.html');return false;" height=20>ko_coffeeshop -->
<hr color=white>
<img src="/imgs/btn/koeyew.png" id=img_ko_coffeeshop onclick="toggle('div_ko_coffeeshop');return false;" height=25 border=0>ko_coffeeshop
<div id=div_ko_coffeeshop >
<!-- <img src="/imgs/btn/koeyeb.png" onclick="ko_coffeeshop('');return false;" height=50 border=0> -->
<hr color=black>
<hr color=white>
<h2>div_ko_coffeeshop</h2>
<hr color=white>
<hr color=black>
</div id=div_ko_coffeeshop_end>
<hr color=goldenrod>
<hr color=goldenrod>
<img src=/imgs/btn/koeyew.png id=img_ajax_hideshow height=25
onclick="toggle('div_ajax_hideshow'); return false;" >
ajax_hideshow
<div id=div_ajax_hideshow >
<h2>div_ajax_hideshow</h2>
</div id=div_ajax_hideshow_end>
<!--
<img src="/imgs/btn/koeyew.png" onclick="this.src = this.src == '/imgs/btn/koeyeb.png' ? '/imgs/btn/koeyew.png' : '/imgs/btn/koeyeb.png';"/>
-->
<!--
<script id="ajaxrequest" >
function ajaxRequest(){
var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"]; //activeX versions to check for in IE
if (window.ActiveXObject){ //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
for (var i=0; i<activexmodes.length; i++){
try{
return new ActiveXObject(activexmodes[i]);
}
catch(e){
//suppress error
}
}
}
else if (window.XMLHttpRequest) // if Mozilla, Safari etc
return new XMLHttpRequest();
else
return false;
}
function ajaxpost(){
var mypostrequest=new ajaxRequest();
mypostrequest.onreadystatechange=function(){
if (mypostrequest.readyState==4){
if (mypostrequest.status==200 || window.location.href.indexOf("http")==-1){
document.getElementById("result").innerHTML = mypostrequest.responseText;
}
else{
alert("An error has occured making the request");
}
}
}
var userId = encodeURIComponent(document.getElementById("userId").value);
var password = encodeURIComponent(document.getElementById("password").value);
var parameters="userId="+userId+"&password="+password;
mypostrequest.open("POST", "http://localhost:8080/AjaxTest/Login", true);
mypostrequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
mypostrequest.send(parameters);
}
</script>
-->
<!--
<script id="script_gethint_ajax">
function showHint(str) {
if (str.length == 0) {
document.getElementById("txtHint").innerHTML = "";
return;
}
else {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("txtHint").innerHTML = this.responseText;
}
};
xmlhttp.open("GET", "gethint.php?q=" + str, true);
xmlhttp.send();
}
}
</script>
-->
<!--
<script id="script_ajaxjs" >
function js_ajax() {
$(document).ready(function(){
$.ajax({
url: 'idx.php',
type: 'get',
dataType: 'JSON',
success: function(response){
var len = response.length;
for(var i=0; i<len; i++){
var id = response[i].id;
var username = response[i].username;
var name = response[i].name;
var email = response[i].email;
var tr_str = "<tr>" +
"<td align='center'>" + (i+1) + "</td>" +
"<td align='center'>" + username + "</td>" +
"<td align='center'>" + name + "</td>" +
"<td align='center'>" + email + "</td>" +
"</tr>";
$("#userTable tbody").append(tr_str);
}
}
});
});
return( $ajaxjs );
}
</script>
-->
<!--
<h1>gethint_ajax</h1>
<script id="script_gethint_ajax">
function showHint(str) {
if (str.length == 0) {
document.getElementById("txtHint").innerHTML = "";
return;
}
else {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("txtHint").innerHTML = this.responseText;
}
};
xmlhttp.open("POST", "idx.php?hint=" + str, true);
xmlhttp.send();
}
}
</script>
-->
<script id="script_koshow"><h1>script_koshow</h1>
function showjax(args) {
alert( "BUGS_12640 showjax args="+args );
}
function koshow_jax(args) {
alert( "BUGS_12640 koshow_jax args="+args );
// alertmsg( "msg_12650 kolists_jax="+kolists['default'] );
// kolists['konet'] = jax("/fb/txt/fb_konet_pages.txt");
// alertmsg( "msg_12651 kolists_konet="+kolists['konet'] );
// kolists['iperms'] =jax("/fb/txt/fb_iperms_pages.txt");
// alertmsg( "msg_12652 kolists_iperms="+kolists['iperms'] );
// kolists['jtfdcr'] = jax("/fb/txt/fb_jtfdcr_pages.txt");
// alertmsg( "msg_12653 kolists_jtfdcr="+kolists['jtfdcr'] );
alert( "BUGS_12659 koshow_jax args="+args );
}
</script>
<script id="script_jaxs" type="text/javascript">
// var kolists = new Array();
// ` kolists[''] = '';
kolists['default'] = 'pages/1.jpg\npages/2.jpg\npages/3.jpg';
kolists['blobs2'] = '
blob|/imgs/btn/blob.png|name_blob|color|size|link|
blob1|/imgs/btn/blob1.png|name_blob1|color|size|link|
blob2|/imgs/btn/blob2.png|name_blob2|color|size|link|
blob3|/imgs/btn/blob3.png|name_blob3|color|size|link|
blob0|/imgs/btn/blob0.png|name_blob0|color|size|link|
blob_w|/imgs/btn/blob_w.png|name_blob_w|color|size|link|
blob_b|/imgs/btn/blob_b.png|name_blob_b|color|size|link|
blob_m|/imgs/btn/blob_m.png|name_blob_m|color|size|link|
blob_default|/imgs/btn/blob_default.png|name_blob_default|color|size|link|
';
kolists['jax'] = 'jax/pages/1.jpg\njax/pages/2.jpg\njax/pages/3.jpg';
// kolists['jax'] = kolists['default'];
kolists['fb'] = '/fb/pages/1.jpg\n/fb/pages/2.jpg\n/fb/pages/3.jpg';
kolists['konet'] = '/fb/jtfdcr/pages/1.jpg\n/fb/jtfdcr/pages/2.jpg\n/fb/jtfdcr/pages/3.jpg';
kolists['iperms'] = '/fb/jtfdcr/pages/1.jpg\n/fb/jtfdcr/pages/2.jpg\n/fb/jtfdcr/pages/3.jpg';
kolists['jtfdcr'] = '/fb/jtfdcr/pages/1.jpg\n/fb/jtfdcr/pages/2.jpg\n/fb/jtfdcr/pages/3.jpg';
kolists['av'] = `
`;
kolists['fb'] =
`pages/1.jpg
pages/2.jpg
pages/3.jpg
pages/4.jpg
pages/5.jpg
pages/6.jpg
pages/7.jpg
pages/8.jpg
pages/9.jpg
`;
kolists['bb'] = ``;
kolists['dd'] = ``;
kolists['sl'] = `
`;
kolists['tm'] = ``;
kolists['tl'] = `
`;
kolists['us'] =
`usid|us_name|us_img|us_tn|us_desc|us_link
usid|us_name1|us_img1|us_tn1|us_desc1|us_link1
`;
kolists['yt'] = `
yt_20200408_mcduff|https://www.youtube.com/watch?v=baK-7kr-zoo
yt_20200408_webb|https://www.youtube.com/watch?v=QdZ-vfJSE9U
yt_20200407_webb|https://www.youtube.com/watch?v=R4dLXs0PIrI
yt_20200406_webb|https://www.youtube.com/watch?v=xgtAHyssRmo
yt_20150625_chrisrea_somewhere_between_stars_santo_spirito|https://www.youtube.com/watch?v=0RF1mXxAhys
yt_20200331_carlin_germs|https://www.youtube.com/watch?v=l_L6AS1Huno
yt_20190311_bob_dylan_gotta_serve_somebody_audio|https://www.youtube.com/watch?v=wC10VWDTzmU
yt_20200407_stroppyme|https://www.youtube.com/watch?v=unNuvGJ3ses
yt_20200406_autodidactic_chinese_tartate_1729|https://www.youtube.com/watch?v=bwoF1MlckRw
yt_20190905_quinn_timothy_oneil_band_let_it_rain_official|https://www.youtube.com/watch?v=CHedk8yAF_g
yt_20200407_housitonic|https://www.youtube.com/watch?v=_pBsL0qW2Vs
yt_20200407_amazingpolly|https://www.youtube.com/watch?v=zoK6h4Mg7E8
yt_20200406_vlad9vt_sicily_polygonal_ancient_masonry|https://www.youtube.com/watch?v=sVMjRmpdUIw
yt_20200404_vlad9vt_malta_magalith|https://www.youtube.com/watch?v=zpHy1Q-fqCU
yt_20200326_borealusforum_wal_thornhil_this_is_our_electric_univers_p1of2|https://www.youtube.com/watch?v=u7peR-2m8XI`;
// alert( "BUGS_5120 jax default_jaxurl="+default_jaxurl );
// alert( "BUGS_5120 jax jaxurl="+jaxurl );
// alert( "BUGS_12700 jax kolists_ticktick="+kolists[''] );
// alert( "BUGS_12700 jax fb="+kolists['fb'] );
// alert( "BUGS_12701 jax kolists_default="+kolists['default'] );
// alert( "BUGS_12702 jax kolists_konet="+kolists['default'] );
// alert( "BUGS_12703 jax kolists_iperms="+kolists['default'] );
// alert( "BUGS_12704 jax kolists_jtfdcr="+kolists['default'] );
// alert( "BUGS_12700 jax kolists_jax="+kolists['jax'] );
var default_jaxurl = "jax.html";
var jaxurl = default_jaxurl;
function jaxs(jaxurl) {
alert( "BUGS_12360 jax jaxurl="+jaxurl );
$.ajax({
url: jaxurl,
context: document.body,
success: function(responseText) {
// alert( "BUGS_12661 jax len="+responseText.split("\n").length+" responseText="+responseText );
kolists['jax'] = responseText;
alert( "BUGS_12662 jax kolists_jax="+kolists['jax'] );
alert( "BUGS_12663 jax kolists_default="+kolists['default'] );
alert( "BUGS_12664 jax kolists_fb="+kolists['fb'] );
alert( "BUGS_12665 jax kolists_konet="+kolists['konet'] );
alert( "BUGS_12666 jax kolists_iperms="+kolists['iperms'] );
alert( "BUGS_12667 jax kolists_jtfdcr="+kolists['jtfdcr'] );
$("#div_jax").html(responseText);
$("#div_jax").find("script").each(function(i) {
eval($(this).text());
alert( "BUGS_12662 jax responseText="+responseText );
return( responseText );
});
}
});
};
</script>
<!--
jax.html
<p class="ajax-result info">
jax.html
The contents of this message were loaded via Ajax.
A piece of JavaScript also included in the Ajax responseText
will change the background color of this message in a few seconds.
</p>
<script id="script_jaxnew" type="text/javascript">
var timerId = setTimeout(function() {
$("#div_jax")
.find("p")
.removeClass("info")
.addClass("success");
}, 7000);
</script>
-->
<script id="script_startup_files">
// Check for the various File API support.
// Great success! All the File APIs are supported.
function startup_files(args) {
alert( "msg_7540 startup_files` args="+args );
if (window.File && window.FileReader && window.FileList && window.Blob) {
}
else {
alertmsg('ERR_7480 access denied');
}
return("");
}
</script>
<script id="script_file_selects">
function file_selects(args) {
alert( "msg_7560 file_selects args="+args );
return('file_selects');
}
// files is a FileList of File objects. List some properties.
// FileList object
function handleFileSelect(evt) {
var files = evt.target.files;
var output = [];
for (var i = 0, f; f = files[i]; i++) {
output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
f.size, ' bytes, last modified: ',
f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
'</li>');
}
// if( document.getElementById('list')) {
// document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
// }
//// if( document.getElementById('output_list')) {
//// document.getElementById('output_list').innerHTML = '<ul>' + output.join('') + '</ul>';
//// }
if( document.getElementById('div_file_list')) {
document.getElementById('div_file_list').innerHTML = '<ul>' + output.join('') + '</ul>';
}
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);
document.getElementById('div_file_selects').addEventListener('change', handleFileSelect, false);
</script>
<script id="script_file_select">
function file_select(args) {
alert( "msg_7570 file_select args="+args );
return("");
}
</script>
<script id="script_files_tn">
// FileList object.
// files is a FileList of File objects. List some properties.
function handleFileSelect(evt) {
evt.stopPropagation();
evt.preventDefault();
var files = evt.dataTransfer.files;
var output = [];
for (var i = 0, f; f = files[i]; i++) {
output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
f.size, ' bytes, last modified: ',
f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
'</li>');
}
document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
}
function handleDragOver(evt) {
evt.stopPropagation();
evt.preventDefault();
evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.
}
// Setup the dnd listeners.
var dropZone = document.getElementById('drop_zone');
dropZone.addEventListener('dragover', handleDragOver, false);
dropZone.addEventListener('drop', handleFileSelect, false);
</script>
<script id="script_handlefileselect" >
// FileList object
// Loop through the FileList and render image files as thumbnails.
// Only process image files.
// Closure to capture the file information.
// Render thumbnail.
// Read in the image file as a data URL.
function handleFileSelect(evt) {
htmout = "";
htmout += "<br>\n";
htmout += "<hr color=goldenrod>\n";
htmout += "<a href=./ target=_blank><img id=img_home src=/img/btn/koeye.png dtitle=" home" height=20 border=0></a>\n";
htmout += "<hr color=goldenrod>\n";
htmout += "<form id=form_files type=POST action="./ko.php?k9=woof>\n";
htmout += " <input id=user value=user >user</input>\n";
htmout += " <input id=pass value=pass >pass</input>\n";
htmout += " <input id=cmd value=cmd >cmd</input>\n";
htmout += " <button id=btn_submit type=submit>\n";
htmout += " <button id=btn_reset type=reset>\n";
htmout += " </form id=form_files_end>\n";
htmout += "<hr color=goldenrod>\n";
htmout += "<br>\n";
var files = evt.target.files;
for (var i = 0, f; f = files[i]; i++) {
if (!f.type.match('image.*')) {continue;}
var reader = new FileReader();
reader.onload = (function(theFile) {
return function(e) {
var span = document.createElement('span');
span.innerHTML = ['<img class="thumb" src="', e.target.result,
'" title="', escape(theFile.name), '"/>'].join('');
document.getElementById('list').insertBefore(span, null);
document.getElementById('list').insertBefore(htmout, null);
};
})(f);
reader.readAsDataURL(f);
}
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>
<script id="script_clipboard" >
function handlePaste (e) {
var clipboardData, pastedData;
// Stop data actually being pasted into div
e.stopPropagation();
e.preventDefault();
// Get pasted data via clipboard API
clipboardData = e.clipboardData || window.clipboardData;
pastedData = clipboardData.getData('Text');
// Do whatever with pasteddata
alert(pastedData);
}
document.getElementById('editableDiv').addEventListener('paste', handlePaste);
</script>
<script id="script_clipboard_ff" >
function handlepaste_ff (e) {
var types, pastedData, savedContent;
// Browsers that support the 'text/html' type in the Clipboard API (Chrome, Firefox 22+)
if (e && e.clipboardData && e.clipboardData.types && e.clipboardData.getData) {
// Check for 'text/html' in types list. See abligh's answer below for deatils on
// why the DOMStringList bit is needed. We cannot fall back to 'text/plain' as
// Safari/Edge don't advertise HTML data even if it is available
types = e.clipboardData.types;
if (((types instanceof DOMStringList) && types.contains("text/html")) || (types.indexOf && types.indexOf('text/html') !== -1)) {
// Extract data and pass it to callback
pastedData = e.clipboardData.getData('text/html');
// processPaste(editableDiv, pastedData);
processPaste_ff(editableDiv, pastedData);
// Stop the data from actually being pasted
e.stopPropagation();
e.preventDefault();
return false;
}
}
// Everything else: Move existing element contents to a DocumentFragment for safekeeping
savedContent = document.createDocumentFragment();
while(editableDiv.childNodes.length > 0) {
savedContent.appendChild(editableDiv.childNodes[0]);
}
// Then wait for browser to paste content into it and cleanup
waitForPastedData(editableDiv, savedContent);
return true;
}
function waitForPastedData (elem, savedContent) {
// If data has been processes by browser, process it
if (elem.childNodes && elem.childNodes.length > 0) {
// Retrieve pasted content via innerHTML
// (Alternatively loop through elem.childNodes or elem.getElementsByTagName here)
var pastedData = elem.innerHTML;
// Restore saved content
elem.innerHTML = "";
elem.appendChild(savedContent);
// Call callback
processPaste_ff(elem, pastedData);
}
// Else wait 20ms and try again
else {
setTimeout(function () {
waitForPastedData(elem, savedContent)
}, 20);
}
}
function processPaste_ff (elem, pastedData) {
// Do whatever with gathered data;
alert(pastedData);
elem.focus();
}
// Modern browsers. Note: 3rd argument is required for Firefox <= 6
if (editableDiv.addEventListener) {
editableDiv.addEventListener('paste', handlepaste, false);
}
// IE <= 8
else {
editableDiv.attachEvent('onpaste', handlepaste);
}
$(document).on('paste','[contenteditable]',function(e) {
e.preventDefault();
var text = (e.originalEvent || e).clipboardData.getData('text/plain');
window.document.execCommand('insertText', false, text);
});
</script>
<script id="script_clipboard_jskit" >
function getSelectionText(){
var selectedText = ""
if (window.getSelection){ // all modern browsers and IE9+
selectedText = window.getSelection().toString()
}
return selectedText
}
document.addEventListener('mouseup', function(){
var thetext = getSelectionText()
if (thetext.length > 0){ // check there's some text selected
console.log(thetext) // logs whatever textual content the user has selected on the page
}
}, false)
function copySelectionText(){
var copysuccess // var to check whether execCommand successfully executed
try{
copysuccess = document.execCommand("copy") // run command to copy selected text to clipboard
}
catch(e){
copysuccess = false
}
return copysuccess
}
</script>
<script id="script_koshow" >
function koshow(args) {
// var kolists = new Array();
// alert( "msg_13220 koshow args="+args);
// kolists['default'] = "neuz konet iperms kids kitiworks pastryroad konabus jtfdc jtfdcr jtfinc jtfdcr dogs memes";
// kolists['kovs'] = "neuz konet iperms kids kitiworks pastryroad konabus jtfdc jtfdcr jtfinc jtfdcr dogs memes";
// kolists['kov'] = "neuz konet iperms kids konabus jtfdc jtfdcr jtfinc jtfdcr dogs memes";
// kolists['divs'] = "av bb fb gm pn sl tl us yt zm";
// alert( "BUGS_13230 kolists_kov="+kolists['kov'] );
if( /kovs/.test(args)) {
var id=args;
// alert( "msg_13240 koshow kovs id="+id);
var htmout = "";
var kolist = kolists[id].split(" ");
// var kolist = kolists[id];
// alert( "msg_13241 koshow kovs id="+id+" len="+kolist.length+" kolist="+kolist );
for( j=0; j<kolist.length; j++ ) {
var kovid = kolist[j];
img = '/imgs/btn/koeyeb_kov_'+kovid+'.png';
url = '/kov_'+kovid+'.html';
htmout += '<img src="'+img+'" ';
htmout += ' onclick="window.open(\''+url+'\');return false;"';
htmout += ' draggable="true" border=0 height=50 >';
if( document.getElementById('div_kovs')) {
document.getElementById('div_kovs').innerHTML=htmout;
}
if( document.getElementById('div_kov')) {
document.getElementById('div_kov').innerHTML=htmout;
}
if( document.getElementById('div_kov_w')) {
document.getElementById('div_kov_w').innerHTML=htmout;
}
if( document.getElementById('div_kov_b')) {
document.getElementById('div_kov_b').innerHTML=htmout;
}
if( document.getElementById('div_kov_m')) {
document.getElementById('div_kov_m').innerHTML=htmout;
}
}
return( kolists[id] );
}
if( /divs/.test(args)) {
var id=args;
// alert( "msg_13270 koshow divs id="+id);
var htmout = "";
var kolist = kolists[id].split(" ");
// alert( "msg_13280 koshow divs id="+id+" len="+kolist.length+" kolist="+kolist );
for( j=0; j<kolist.length; j++ ) {
var divid = kolist[j];
var div_divid = "div_"+divid;
var div_divid_w = "div_"+divid+"_w";
var div_divid_b = "div_"+divid+"_b";
var div_divid_m = "div_"+divid+"_m";
img_b = '/imgs/btn/koeyeb_'+divid+'.png';
img_w = '/imgs/btn/koeyew_'+divid+'.png';
img = '/imgs/btn/koeye_'+divid+'.png';
url = 'koshow("'+divid+'"); return false;"';
htmout += '<div id="'+div_divid+'" draggable="true" >';
htmout += ' <h1>'+div_divid+'</h1>';
htmout += ' <img src="'+img_w+'" ';
htmout += ' onclick="window.open(\'/index_'+divid+'.html\'); return false;"';
htmout += ' draggable="true" border=0 height=50 >';
htmout += '       ';
htmout += ' <img src="'+img+'" ';
htmout += ' onclick="koshow(\''+divid+'\'); return false;"';
htmout += ' draggable="true" border=0 height=50 >';
htmout += ' </div id="'+div_divid+'_tail">';
if( document.getElementById('div_divs')) {
document.getElementById('div_divs').innerHTML=htmout;
}
// if( document.getElementById('div_divs_w')) {
// document.getElementById('div_divs_w').innerHTML=htmout;
// }
// if( document.getElementById('div_div_b')) {
// document.getElementById('div_div_b').innerHTML=htmout;
// }
// if( document.getElementById('div_kov_m')) {
// document.getElementById('div_kov_m').innerHTML=htmout;
// }
}
return( kolists[id] );
}
// if( /yt/.test(args)) {
// alert( "BUGS_13385 ___FOUND yt args="+args );
// }
// else {
// alert( "BUGS_13385 NOTFOUND yt args="+args );
// }
if( /yt/.test(args)) {
var id=args;
alert( "msg_13381 koshow yt args="+args+" id="+id);
var kolist = kolists['default'];
alert( "msg_13382 koshow yt id="+kolist);
var htmout = "";
// var kolist = kolists[id].split(" ");
alert( "msg_13391 koshow yt kolists_yt="+kolist );
kolist = jax('/yt/txt/ytlist.txt').split("\n");
alert( "msg_13392 koshow yt kolist_jax_yt="+kolist );
for( j=0; j<kolist.length; j++ ) {
var ytid = kolist[j];
img = ''+ytid+'.png';
url = ''+ytid+'';
htmout += '<img src="'+img+'" ';
htmout += ' onclick="window.open(\''+url+'\');return false;"';
htmout += ' draggable="true" border=0 height=50 >';
if( document.getElementById('div_yt')) {
document.getElementById('div_yt').innerHTML=htmout;
}
if( document.getElementById('div_yt')) {
document.getElementById('div_yt').innerHTML=htmout;
}
if( document.getElementById('div_yt_w')) {
document.getElementById('div_yt_w').innerHTML=htmout;
}
if( document.getElementById('div_yt_b')) {
document.getElementById('div_yt_b').innerHTML=htmout;
}
if( document.getElementById('div_yt_m')) {
document.getElementById('div_yt_m').innerHTML=htmout;
}
}
return( kolists[id] );
}
alert( "msg_13300 koshow args="+args+" kolists_default="+kolists['default']);
return('');
}
</script>
<!-- <script src="./terminal.js"></script> -->
<!-- <script src="data:/text/plain;base64,LyoKQ29weXJpZ2h0IDIwMTEgR29vZ2xlIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpBdXRob3I6IEVyaWMgQmlkZWxtYW4gKGVyaWNiaWRlbG1hbkBjaHJvbWl1bS5vcmcpCiovCgp2YXIgdXRpbCA9IHV0aWwgfHwge307CnV0aWwudG9BcnJheSA9IGZ1bmN0aW9uKGxpc3QpIHsKICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobGlzdCB8fCBbXSwgMCk7Cn07CgovLyBDcm9zcy1icm93c2VyIGltcGwgdG8gZ2V0IGRvY3VtZW50J3MgaGVpZ2h0Lgp1dGlsLmdldERvY0hlaWdodCA9IGZ1bmN0aW9uKCkgewogIHZhciBkID0gZG9jdW1lbnQ7CiAgcmV0dXJuIE1hdGgubWF4KAogICAgICBNYXRoLm1heChkLmJvZHkuc2Nyb2xsSGVpZ2h0LCBkLmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpLAogICAgICBNYXRoLm1heChkLmJvZHkub2Zmc2V0SGVpZ2h0LCBkLmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQpLAogICAgICBNYXRoLm1heChkLmJvZHkuY2xpZW50SGVpZ2h0LCBkLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpCiAgKTsKfTsKCgovLyBUT0RPKGVyaWNiaWRlbG1hbik6IGFkZCBmYWxsYmFjayB0byBodG1sNSBhdWRpby4KZnVuY3Rpb24gU291bmQob3B0X2xvb3ApIHsKICB2YXIgc2VsZl8gPSB0aGlzOwogIHZhciBjb250ZXh0XyA9IG51bGw7CiAgdmFyIHNvdXJjZV8gPSBudWxsOwogIHZhciBsb29wXyA9IG9wdF9sb29wIHx8IGZhbHNlOwoKICB3aW5kb3cuQXVkaW9Db250ZXh0ID0gd2luZG93LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0OwogIGlmICh3aW5kb3cuQXVkaW9Db250ZXh0KSB7CiAgICBjb250ZXh0XyA9IG5ldyB3aW5kb3cuQXVkaW9Db250ZXh0KCk7CiAgfQoKICB0aGlzLmxvYWQgPSBmdW5jdGlvbih1cmwsIG1peFRvTW9ubywgb3B0X2NhbGxiYWNrKSB7CiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTsKICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInOwogICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICBpZiAoY29udGV4dF8pIHsKICAgICAgICAvKnNlbGZfLnNhbXBsZSA9IGNvbnRleHRfLmNyZWF0ZUJ1ZmZlcih0aGlzLnJlc3BvbnNlLCBtaXhUb01vbm8pOwogICAgICAgIGlmIChvcHRfY2FsbGJhY2spIHsKICAgICAgICAgIG9wdF9jYWxsYmFjaygpOwogICAgICAgIH0KICAgICAgICAqLwogICAgICAgIGNvbnRleHRfLmRlY29kZUF1ZGlvRGF0YSh0aGlzLnJlc3BvbnNlLCBmdW5jdGlvbihhdWRpb0J1ZmZlcikgewogICAgICAgICAgc2VsZl8uc2FtcGxlID0gYXVkaW9CdWZmZXI7CiAgICAgICAgICBvcHRfY2FsbGJhY2sgJiYgb3B0X2NhbGxiYWNrKCk7CiAgICAgICAgfSwgZnVuY3Rpb24oZSkgewogICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICB4aHIuc2VuZCgpOwogIH07CgogIHRoaXMucGxheSA9IGZ1bmN0aW9uKCkgewogICAgaWYgKGNvbnRleHRfKSB7CiAgICAgIHNvdXJjZV8gPSBjb250ZXh0Xy5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKICAgICAgc291cmNlXy5idWZmZXIgPSBzZWxmXy5zYW1wbGU7CiAgICAgIHNvdXJjZV8ubG9vcGluZyA9IGxvb3BfOwogICAgICBzb3VyY2VfLmNvbm5lY3QoY29udGV4dF8uZGVzdGluYXRpb24pOwogICAgICBzb3VyY2VfLm5vdGVPbigwKTsKICAgIH0KICB9OwoKICB0aGlzLnN0b3AgPSBmdW5jdGlvbigpIHsKICAgIGlmIChzb3VyY2VfKSB7CiAgICAgIHNvdXJjZV8ubm90ZU9mZigwKTsKICAgICAgc291cmNlXy5kaXNjb25uZWN0KDApOwogICAgfQogIH07Cn0KCnZhciBUZXJtaW5hbCA9IFRlcm1pbmFsIHx8IGZ1bmN0aW9uKGNvbnRhaW5lcklkKSB7CiAgd2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDsKICB3aW5kb3cucmVxdWVzdEZpbGVTeXN0ZW0gPSB3aW5kb3cucmVxdWVzdEZpbGVTeXN0ZW0gfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cud2Via2l0UmVxdWVzdEZpbGVTeXN0ZW07CgogIGNvbnN0IFZFUlNJT05fID0gJzEuMC4wJzsKICBjb25zdCBDTURTXyA9IFsKICAgICczZCcsICdjYXQnLCAnY2QnLCAnY3AnLCAnY2xlYXInLCAnZGF0ZScsICdoZWxwJywgJ2luc3RhbGwnLCAnbHMnLCAnbWtkaXInLAogICAgJ212JywgJ29wZW4nLCAncHdkJywgJ3JtJywgJ3JtZGlyJywgJ3RoZW1lJywgJ3ZlcnNpb24nLCAnd2hvJywgJ3dnZXQnCiAgXTsKICBjb25zdCBUSEVNRVNfID0gWydkZWZhdWx0JywgJ2NyZWFtJ107CgogIHZhciBmc18gPSBudWxsOwogIHZhciBjd2RfID0gbnVsbDsKICB2YXIgaGlzdG9yeV8gPSBbXTsKICB2YXIgaGlzdHBvc18gPSAwOwogIHZhciBoaXN0dGVtcF8gPSAwOwoKICB2YXIgdGltZXJfID0gbnVsbDsKICB2YXIgbWFnaWNXb3JkXyA9IG51bGw7CgogIHZhciBmc25fID0gbnVsbDsKICB2YXIgaXMzRF8gPSBmYWxzZTsKCiAgLy8gRmlyZSB3b3JrZXIgdG8gcmV0dXJuIHJlY3Vyc2l2ZSBzbmFwc2hvdCBvZiBjdXJyZW50IEZTIHRyZWUuCiAgdmFyIHdvcmtlcl8gPSBuZXcgV29ya2VyKCd3b3JrZXIuanMnKTsKICB3b3JrZXJfLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHsKICAgIHZhciBkYXRhID0gZS5kYXRhOwogICAgaWYgKGRhdGEuZW50cmllcykgewogICAgICBmc25fLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2Uoe2NtZDogJ2J1aWxkJywgZGF0YTogZGF0YS5lbnRyaWVzfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pOwogICAgfQogICAgaWYgKGRhdGEubXNnKSB7CiAgICAgIG91dHB1dCgnPGRpdj4nICsgZGF0YS5tc2cgKyAnPC9kaXY+Jyk7CiAgICB9CiAgfTsKICB3b3JrZXJfLm9uZXJyb3IgPSBmdW5jdGlvbihlKSB7IGNvbnNvbGUubG9nKGUpIH07CgogIC8vIENyZWF0ZSB0ZXJtaW5hbCBhbmQgY2FjaGUgRE9NIG5vZGVzOwogIHZhciBjb250YWluZXJfID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udGFpbmVySWQpOwogIGNvbnRhaW5lcl8uaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVFbmQnLAogICAgICBbJzxvdXRwdXQ+PC9vdXRwdXQ+JywKICAgICAgICc8ZGl2IGlkPSJpbnB1dC1saW5lIiBjbGFzcz0iaW5wdXQtbGluZSI+JywKICAgICAgICc8ZGl2IGNsYXNzPSJwcm9tcHQiPiQmZ3Q7PC9kaXY+PGRpdj48aW5wdXQgY2xhc3M9ImNtZGxpbmUiIGF1dG9mb2N1cyAvPjwvZGl2PicsCiAgICAgICAnPC9kaXY+J10uam9pbignJykpOwogIHZhciBjbWRMaW5lXyA9IGNvbnRhaW5lcl8ucXVlcnlTZWxlY3RvcignI2lucHV0LWxpbmUgLmNtZGxpbmUnKTsKICB2YXIgb3V0cHV0XyA9IGNvbnRhaW5lcl8ucXVlcnlTZWxlY3Rvcignb3V0cHV0Jyk7CiAgdmFyIGludGVybGFjZV8gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaW50ZXJsYWNlJyk7CiAgdmFyIGJlbGxfID0gbmV3IFNvdW5kKGZhbHNlKTsKICBiZWxsXy5sb2FkKCdiZWVwLm1wMycsIGZhbHNlKTsKCiAgLy8gSGFja2VyeSB0byByZXNpemUgdGhlIGludGVybGFjZSBiYWNrZ3JvdW5kIGltYWdlIGFzIHRoZSBjb250YWluZXIgZ3Jvd3MuCiAgb3V0cHV0Xy5hZGRFdmVudExpc3RlbmVyKCdET01TdWJ0cmVlTW9kaWZpZWQnLCBmdW5jdGlvbihlKSB7CiAgICB2YXIgZG9jSGVpZ2h0ID0gdXRpbC5nZXREb2NIZWlnaHQoKTsKICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSBkb2NIZWlnaHQgKyAncHgnOwogICAgLy9kb2N1bWVudC5ib2R5LnN0eWxlLmJhY2tncm91bmQgPSAnLXdlYmtpdC1yYWRpYWwtZ3JhZGllbnQoY2VudGVyICcgKyAoTWF0aC5yb3VuZChkb2NIZWlnaHQgLyAyKSkgKyAncHgsIGNvbnRhaW4sIHJnYmEoMCw3NSwwLDAuOCksIGJsYWNrKSBjZW50ZXIgY2VudGVyIG5vLXJlcGVhdCwgYmxhY2snOwogICAgaW50ZXJsYWNlXy5zdHlsZS5oZWlnaHQgPSBkb2NIZWlnaHQgKyAncHgnOwogICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgLy8gTmVlZCB0aGlzIHdyYXBwZWQgaW4gYSBzZXRUaW1lb3V0LiBDaHJvbWUgaXMganVwbWluZyB0byB0b3AgOigKICAgICAgLy93aW5kb3cuc2Nyb2xsVG8oMCwgZG9jSGVpZ2h0KTsKICAgICAgY21kTGluZV8uc2Nyb2xsSW50b1ZpZXcoKTsKICAgIH0sIDApOwogICAgLy93aW5kb3cuc2Nyb2xsVG8oMCwgZG9jSGVpZ2h0KTsKICB9LCBmYWxzZSk7CgogIG91dHB1dF8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICB2YXIgZWwgPSBlLnRhcmdldDsKICAgIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZpbGUnKSB8fCBlbC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZvbGRlcicpKSB7CiAgICAgIGNtZExpbmVfLnZhbHVlICs9ICcgJyArIGVsLnRleHRDb250ZW50OwogICAgfQogIH0sIGZhbHNlKTsKCiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgLy9pZiAoIWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdvZmZzY3JlZW4nKSkgewogICAgICBjbWRMaW5lXy5mb2N1cygpOwogICAgLy99CiAgfSwgZmFsc2UpOwoKICAvLyBBbHdheXMgZm9yY2UgdGV4dCBjdXJzb3IgdG8gZW5kIG9mIGlucHV0IGxpbmUuCiAgY21kTGluZV8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBpbnB1dFRleHRDbGlja18sIGZhbHNlKTsKCiAgLy8gSGFuZGxlIHVwL2Rvd24ga2V5IHByZXNzZXMgZm9yIHNoZWxsIGhpc3RvcnkgYW5kIGVudGVyIGZvciBuZXcgY29tbWFuZC4KICBjbWRMaW5lXy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywga2V5Ym9hcmRTaG9ydGN1dEhhbmRsZXJfLCBmYWxzZSk7CiAgY21kTGluZV8uYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBoaXN0b3J5SGFuZGxlcl8sIGZhbHNlKTsgLy8ga2V5dXAgbmVlZGVkIGZvciBpbnB1dCBibGlua2VyIHRvIGFwcGVhciBhdCBlbmQgb2YgaW5wdXQuCiAgY21kTGluZV8uYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHByb2Nlc3NOZXdDb21tYW5kXywgZmFsc2UpOwoKICAvKndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBmdW5jdGlvbihlKSB7CiAgICByZXR1cm4gIkRvbid0IGxlYXZlIG1lISI7CiAgfSwgZmFsc2UpOyovCgogIGZ1bmN0aW9uIGlucHV0VGV4dENsaWNrXyhlKSB7CiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZTsKICB9CgogIGZ1bmN0aW9uIGtleWJvYXJkU2hvcnRjdXRIYW5kbGVyXyhlKSB7CiAgICAvLyBUb2dnbGUgQ1JUIHNjcmVlbiBmbGlja2VyLgogICAgaWYgKChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSAmJiBlLmtleUNvZGUgPT0gODMpIHsgLy8gY3J0bCtzCiAgICAgIGNvbnRhaW5lcl8uY2xhc3NMaXN0LnRvZ2dsZSgnZmxpY2tlcicpOwogICAgICBvdXRwdXQoJzxkaXY+U2NyZWVuIGZsaWNrZXI6ICcgKwogICAgICAgICAgICAgKGNvbnRhaW5lcl8uY2xhc3NMaXN0LmNvbnRhaW5zKCdmbGlja2VyJykgPyAnb24nIDogJ29mZicpICsKICAgICAgICAgICAgICc8L2Rpdj4nKTsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gc2VsZWN0RmlsZV8oZWwpIHsKICAgIGFsZXJ0KGVsKQogIH0KCiAgZnVuY3Rpb24gaGlzdG9yeUhhbmRsZXJfKGUpIHsgLy8gVGFiIG5lZWRzIHRvIGJlIGtleWRvd24uCgogICAgaWYgKGhpc3RvcnlfLmxlbmd0aCkgewogICAgICBpZiAoZS5rZXlDb2RlID09IDM4IHx8IGUua2V5Q29kZSA9PSA0MCkgewogICAgICAgIGlmIChoaXN0b3J5X1toaXN0cG9zX10pIHsKICAgICAgICAgIGhpc3RvcnlfW2hpc3Rwb3NfXSA9IHRoaXMudmFsdWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGhpc3R0ZW1wXyA9IHRoaXMudmFsdWU7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoZS5rZXlDb2RlID09IDM4KSB7IC8vIHVwCiAgICAgICAgaGlzdHBvc18tLTsKICAgICAgICBpZiAoaGlzdHBvc18gPCAwKSB7CiAgICAgICAgICBoaXN0cG9zXyA9IDA7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PSA0MCkgeyAvLyBkb3duCiAgICAgICAgaGlzdHBvc18rKzsKICAgICAgICBpZiAoaGlzdHBvc18gPiBoaXN0b3J5Xy5sZW5ndGgpIHsKICAgICAgICAgIGhpc3Rwb3NfID0gaGlzdG9yeV8ubGVuZ3RoOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKGUua2V5Q29kZSA9PSAzOCB8fCBlLmtleUNvZGUgPT0gNDApIHsKICAgICAgICB0aGlzLnZhbHVlID0gaGlzdG9yeV9baGlzdHBvc19dID8gaGlzdG9yeV9baGlzdHBvc19dIDogaGlzdHRlbXBfOwogICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlOyAvLyBTZXRzIGN1cnNvciB0byBlbmQgb2YgaW5wdXQuCiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIHByb2Nlc3NOZXdDb21tYW5kXyhlKSB7CgogICAgLy8gQmVlcCBvbiBiYWNrc3BhY2UgYW5kIG5vIHZhbHVlIG9uIGNvbW1hbmQgbGluZS4KICAgIGlmICghdGhpcy52YWx1ZSAmJiBlLmtleUNvZGUgPT0gOCkgewogICAgICBiZWxsXy5zdG9wKCk7CiAgICAgIGJlbGxfLnBsYXkoKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlLmtleUNvZGUgPT0gOSkgeyAvLyBUYWIKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAvLyBUT0RPKGVyaWNiaWRlbG1hbik6IEltcGxlbWVudCB0YWIgc3VnZ2VzdC4KICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09IDEzKSB7IC8vIGVudGVyCgogICAgICAvLyBTYXZlIHNoZWxsIGhpc3RvcnkuCiAgICAgIGlmICh0aGlzLnZhbHVlKSB7CiAgICAgICAgaGlzdG9yeV9baGlzdG9yeV8ubGVuZ3RoXSA9IHRoaXMudmFsdWU7CiAgICAgICAgaGlzdHBvc18gPSBoaXN0b3J5Xy5sZW5ndGg7CiAgICAgIH0KCiAgICAgIC8vIER1cGxpY2F0ZSBjdXJyZW50IGlucHV0IGFuZCBhcHBlbmQgdG8gb3V0cHV0IHNlY3Rpb24uCiAgICAgIHZhciBsaW5lID0gdGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUuY2xvbmVOb2RlKHRydWUpOwogICAgICBsaW5lLnJlbW92ZUF0dHJpYnV0ZSgnaWQnKQogICAgICBsaW5lLmNsYXNzTGlzdC5hZGQoJ2xpbmUnKTsKICAgICAgdmFyIGlucHV0ID0gbGluZS5xdWVyeVNlbGVjdG9yKCdpbnB1dC5jbWRsaW5lJyk7CiAgICAgIGlucHV0LmF1dG9mb2N1cyA9IGZhbHNlOwogICAgICBpbnB1dC5yZWFkT25seSA9IHRydWU7CiAgICAgIG91dHB1dF8uYXBwZW5kQ2hpbGQobGluZSk7CgogICAgICAvLyBQYXJzZSBvdXQgY29tbWFuZCwgYXJncywgYW5kIHRyaW0gb2ZmIHdoaXRlc3BhY2UuCiAgICAgIC8vIFRPRE8oZXJpY2JpZGVsbWFuKTogU3VwcG9ydCBtdWx0aXBsZSBjb21tYSBzZXBhcmF0ZWQgY29tbWFuZHMuCiAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUudHJpbSgpKSB7CiAgICAgICAgdmFyIGFyZ3MgPSB0aGlzLnZhbHVlLnNwbGl0KCcgJykuZmlsdGVyKGZ1bmN0aW9uKHZhbCwgaSkgewogICAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgICB9KTsKICAgICAgICB2YXIgY21kID0gYXJnc1swXS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGFyZ3MgPSBhcmdzLnNwbGljZSgxKTsgLy8gUmVtb3ZlIGNtZCBmcm9tIGFyZyBsaXN0LgogICAgICB9CgogICAgICBzd2l0Y2ggKGNtZCkgewogICAgICAgIGNhc2UgJzNkJzoKICAgICAgICAgIGNsZWFyXyh0aGlzKTsKICAgICAgICAgIG91dHB1dCgnSG9sZCBvbiB0byB5b3VyIGJ1dHRzIScpOwogICAgICAgICAgdG9nZ2xlM0RWaWV3XygpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnY2F0JzoKICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGFyZ3Muam9pbignICcpOwoKICAgICAgICAgIGlmICghZmlsZU5hbWUpIHsKICAgICAgICAgICAgb3V0cHV0KCd1c2FnZTogJyArIGNtZCArICcgZmlsZW5hbWUnKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CgogICAgICAgICAgcmVhZF8oY21kLCBmaWxlTmFtZSwgZnVuY3Rpb24ocmVzdWx0KSB7CiAgICAgICAgICAgIG91dHB1dCgnPHByZT4nICsgcmVzdWx0ICsgJzwvcHJlPicpOwogICAgICAgICAgfSk7CgogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnY2xlYXInOgogICAgICAgICAgY2xlYXJfKHRoaXMpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNhc2UgJ2RhdGUnOgogICAgICAgICAgb3V0cHV0KChuZXcgRGF0ZSgpKS50b0xvY2FsZVN0cmluZygpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2V4aXQnOgogICAgICAgICAgaWYgKGlzM0RfKSB7CiAgICAgICAgICAgIHRvZ2dsZTNEVmlld18oKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aW1lcl8gIT0gbnVsbCkgewogICAgICAgICAgICBtYWdpY1dvcmRfLnN0b3AoKTsKICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcl8pOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnaGVscCc6CiAgICAgICAgICBvdXRwdXQoJzxkaXYgY2xhc3M9ImxzLWZpbGVzIj4nICsgQ01EU18uam9pbignPGJyPicpICsgJzwvZGl2PicpOwogICAgICAgICAgb3V0cHV0KCc8cD5BZGQgZmlsZXMgYnkgZHJhZ2dpbmcgdGhlbSBmcm9tIHlvdXIgZGVza3RvcC48L3A+Jyk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdpbnN0YWxsJzoKICAgICAgICAgIC8vIENoZWNrIGlzIGluc3RhbGxlZC4KICAgICAgICAgIGlmICh3aW5kb3cuY2hyb21lICYmIHdpbmRvdy5jaHJvbWUuYXBwKSB7CiAgICAgICAgICAgIGlmICghd2luZG93LmNocm9tZS5hcHAuaXNJbnN0YWxsZWQpIHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgY2hyb21lLmFwcC5pbnN0YWxsKCk7CiAgICAgICAgICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgICAgICAgICBhbGVydChlICsgJ1xuRW5hYmxlIGlzIGFib3V0OmZsYWdzJyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG91dHB1dCgnVGhpcyBhcHAgaXMgYWxyZWFkeSBpbnN0YWxsZWQuJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2xzJzoKICAgICAgICAgIGxzXyhmdW5jdGlvbihlbnRyaWVzKSB7CiAgICAgICAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCkgewogICAgICAgICAgICAgIHZhciBodG1sID0gZm9ybWF0Q29sdW1uc18oZW50cmllcyk7CiAgICAgICAgICAgICAgdXRpbC50b0FycmF5KGVudHJpZXMpLmZvckVhY2goZnVuY3Rpb24oZW50cnksIGkpIHsKICAgICAgICAgICAgICAgIGh0bWwucHVzaCgKICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9IicsIGVudHJ5LmlzRGlyZWN0b3J5ID8gJ2ZvbGRlcicgOiAnZmlsZScsCiAgICAgICAgICAgICAgICAgICAgJyI+JywgZW50cnkubmFtZSwgJzwvc3Bhbj48YnI+Jyk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgaHRtbC5wdXNoKCc8L2Rpdj4nKTsKICAgICAgICAgICAgICBvdXRwdXQoaHRtbC5qb2luKCcnKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAncHdkJzoKICAgICAgICAgIG91dHB1dChjd2RfLmZ1bGxQYXRoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2NkJzoKICAgICAgICAgIHZhciBkZXN0ID0gYXJncy5qb2luKCcgJykgfHwgJy8nOwoKICAgICAgICAgIGN3ZF8uZ2V0RGlyZWN0b3J5KGRlc3QsIHt9LCBmdW5jdGlvbihkaXJFbnRyeSkgewogICAgICAgICAgICBjd2RfID0gZGlyRW50cnk7CiAgICAgICAgICAgIG91dHB1dCgnPGRpdj4nICsgZGlyRW50cnkuZnVsbFBhdGggKyAnPC9kaXY+Jyk7CgogICAgICAgICAgICAvLyBUZWxsIEZTTiB2aXN1YWxpemVyIHRoYXQgd2UncmUgY2QnaW5nLgogICAgICAgICAgICBpZiAoZnNuXykgewogICAgICAgICAgICAgIGZzbl8uY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSh7Y21kOiAnY2QnLCBkYXRhOiBkZXN0fSwgbG9jYXRpb24ub3JpZ2luKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIH0sIGZ1bmN0aW9uKGUpIHsgaW52YWxpZE9wRm9yRW50cnlUeXBlXyhlLCBjbWQsIGRlc3QpOyB9KTsKCiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdta2Rpcic6CiAgICAgICAgICB2YXIgZGFzaFAgPSBmYWxzZTsKICAgICAgICAgIHZhciBpbmRleCA9IGFyZ3MuaW5kZXhPZignLXAnKTsKICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgICAgICBhcmdzLnNwbGljZShpbmRleCwgMSk7CiAgICAgICAgICAgIGRhc2hQID0gdHJ1ZTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoIWFyZ3MubGVuZ3RoKSB7CiAgICAgICAgICAgIG91dHB1dCgndXNhZ2U6ICcgKyBjbWQgKyAnIFstcF0gZGlyZWN0b3J5PGJyPicpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBDcmVhdGUgZWFjaCBkaXJlY3RvcnkgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LgogICAgICAgICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uKGRpck5hbWUsIGkpIHsKICAgICAgICAgICAgaWYgKGRhc2hQKSB7CiAgICAgICAgICAgICAgdmFyIGZvbGRlcnMgPSBkaXJOYW1lLnNwbGl0KCcvJyk7CgogICAgICAgICAgICAgIC8vIFRocm93IG91dCAnLi8nIG9yICcvJyBpZiBwcmVzZW50IG9uIHRoZSBiZWdpbm5pbmcgb2Ygb3VyIHBhdGguCiAgICAgICAgICAgICAgaWYgKGZvbGRlcnNbMF0gPT0gJy4nIHx8IGZvbGRlcnNbMF0gPT0gJycpIHsKICAgICAgICAgICAgICAgIGZvbGRlcnMgPSBmb2xkZXJzLnNsaWNlKDEpOwogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgY3JlYXRlRGlyXyhjd2RfLCBmb2xkZXJzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjd2RfLmdldERpcmVjdG9yeShkaXJOYW1lLCB7Y3JlYXRlOiB0cnVlLCBleGNsdXNpdmU6IHRydWV9LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIC8vIFRlbGwgRlNOIHZpc3VhbGl6ZXIgdGhhdCB3ZSdyZSBta2RpcidpbmcuCiAgICAgICAgICAgICAgICBpZiAoZnNuXykgewogICAgICAgICAgICAgICAgICBmc25fLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2Uoe2NtZDogJ21rZGlyJywgZGF0YTogZGlyTmFtZX0sIGxvY2F0aW9uLm9yaWdpbik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oZSkgeyBpbnZhbGlkT3BGb3JFbnRyeVR5cGVfKGUsIGNtZCwgZGlyTmFtZSk7IH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2NwJzoKICAgICAgICBjYXNlICdtdic6CiAgICAgICAgICB2YXIgc3JjID0gYXJnc1swXTsKICAgICAgICAgIHZhciBkZXN0ID0gYXJnc1sxXTsKCiAgICAgICAgICBpZiAoIXNyYyB8fCAhZGVzdCkgewogICAgICAgICAgICBvdXRwdXQoWyd1c2FnZTogJywgY21kLCAnIHNvdXJjZSB0YXJnZXQ8YnI+JywKICAgICAgICAgICAgICAgICAgICcmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsnLCBjbWQsCiAgICAgICAgICAgICAgICAgICAnIHNvdXJjZSBkaXJlY3RvcnkvJ10uam9pbignJykpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KCiAgICAgICAgICB2YXIgcnVuQWN0aW9uID0gZnVuY3Rpb24oY21kLCBzcmNEaXJFbnRyeSwgZGVzdERpckVudHJ5LCBvcHRfbmV3TmFtZSkgewogICAgICAgICAgICB2YXIgbmV3TmFtZSA9IG9wdF9uZXdOYW1lIHx8IG51bGw7CiAgICAgICAgICAgIGlmIChjbWQgPT0gJ212JykgewogICAgICAgICAgICAgICAgc3JjRGlyRW50cnkubW92ZVRvKGRlc3REaXJFbnRyeSwgbmV3TmFtZSk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHNyY0RpckVudHJ5LmNvcHlUbyhkZXN0RGlyRW50cnksIG5ld05hbWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH07CgogICAgICAgICAgLy8gTW92aW5nIHRvIGEgZm9sZGVyPyAoZS5nLiBzZWNvbmQgYXJnIGVuZHMgaW4gJy8nKS4KICAgICAgICAgIGlmIChkZXN0W2Rlc3QubGVuZ3RoIC0gMV0gPT0gJy8nKSB7CiAgICAgICAgICAgIGN3ZF8uZ2V0RGlyZWN0b3J5KHNyYywge30sIGZ1bmN0aW9uKHNyY0RpckVudHJ5KSB7CiAgICAgICAgICAgICAgLy8gQ3JlYXRlIGJsYWNrbGlzdCBmb3IgZGlycyB3ZSBjYW4ndCByZS1jcmVhdGUuCiAgICAgICAgICAgICAgdmFyIGNyZWF0ZSA9IFsKICAgICAgICAgICAgICAgICcuJywgJy4vJywgJy4uJywgJy4uLycsICcvJ10uaW5kZXhPZihkZXN0KSAhPSAtMSA/IGZhbHNlIDogdHJ1ZTsKCiAgICAgICAgICAgICAgY3dkXy5nZXREaXJlY3RvcnkoZGVzdCwge2NyZWF0ZTogY3JlYXRlfSwgZnVuY3Rpb24oZGVzdERpckVudHJ5KSB7CiAgICAgICAgICAgICAgICBydW5BY3Rpb24oY21kLCBzcmNEaXJFbnRyeSwgZGVzdERpckVudHJ5KTsKICAgICAgICAgICAgICB9LCBlcnJvckhhbmRsZXJfKTsKICAgICAgICAgICAgfSwgZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgIC8vIFRyeSB0aGUgc3JjIGVudHJ5IGFzIGEgZmlsZSBpbnN0ZWFkLgogICAgICAgICAgICAgIGN3ZF8uZ2V0RmlsZShzcmMsIHt9LCBmdW5jdGlvbihzcmNEaXJFbnRyeSkgewogICAgICAgICAgICAgICAgY3dkXy5nZXREaXJlY3RvcnkoZGVzdCwge30sIGZ1bmN0aW9uKGRlc3REaXJFbnRyeSkgewogICAgICAgICAgICAgICAgICBydW5BY3Rpb24oY21kLCBzcmNEaXJFbnRyeSwgZGVzdERpckVudHJ5KTsKICAgICAgICAgICAgICAgIH0sIGVycm9ySGFuZGxlcl8pOwogICAgICAgICAgICAgIH0sIGVycm9ySGFuZGxlcl8pOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7IC8vIFRyZWF0IHNyYy9kZXN0aW5hdGlvbiBhcyBmaWxlcy4KICAgICAgICAgICAgY3dkXy5nZXRGaWxlKHNyYywge30sIGZ1bmN0aW9uKHNyY0ZpbGVFbnRyeSkgewogICAgICAgICAgICAgIHNyY0ZpbGVFbnRyeS5nZXRQYXJlbnQoZnVuY3Rpb24ocGFyZW50RGlyRW50cnkpIHsKICAgICAgICAgICAgICAgIHJ1bkFjdGlvbihjbWQsIHNyY0ZpbGVFbnRyeSwgcGFyZW50RGlyRW50cnksIGRlc3QpOwogICAgICAgICAgICAgIH0sIGVycm9ySGFuZGxlcl8pOwogICAgICAgICAgICB9LCBlcnJvckhhbmRsZXJfKTsKICAgICAgICAgIH0KCiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdvcGVuJzoKICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGFyZ3Muam9pbignICcpOwoKICAgICAgICAgIGlmICghZmlsZU5hbWUpIHsKICAgICAgICAgICAgb3V0cHV0KCd1c2FnZTogJyArIGNtZCArICcgZmlsZW5hbWUnKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CgogICAgICAgICAgb3Blbl8oY21kLCBmaWxlTmFtZSwgZnVuY3Rpb24oZmlsZUVudHJ5KSB7CiAgICAgICAgICAgIHZhciBteVdpbiA9IHdpbmRvdy5vcGVuKGZpbGVFbnRyeS50b1VSTCgpLCAnbXl3aW4nKTsKICAgICAgICAgIH0pOwoKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2luaXQnOgogICAgICAgICAgaWYgKHdvcmtlcl8pIHsKICAgICAgICAgICAgd29ya2VyXy5wb3N0TWVzc2FnZSh7Y21kOiAnaW5pdCcsIHR5cGU6IHR5cGVfLCBzaXplOiBzaXplX30pOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAncm0nOgogICAgICAgICAgLy8gUmVtb3ZlIHJlY3Vyc2l2ZWx5PyBJZiBzbywgcmVtb3ZlIHRoZSBmbGFnKHMpIGZyb20gdGhlIGFyZyBsaXN0LgogICAgICAgICAgdmFyIHJlY3Vyc2l2ZSA9IGZhbHNlOwogICAgICAgICAgWyctcicsICctZicsICctcmYnLCAnLWZyJ10uZm9yRWFjaChmdW5jdGlvbihhcmcsIGkpIHsKICAgICAgICAgICAgdmFyIGluZGV4ID0gYXJncy5pbmRleE9mKGFyZyk7CiAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgICAgICAgIGFyZ3Muc3BsaWNlKGluZGV4LCAxKTsKICAgICAgICAgICAgICByZWN1cnNpdmUgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKCiAgICAgICAgICAvLyBSZW1vdmUgZWFjaCBmaWxlIHBhc3NlZCBhcyBhbiBhcmd1bWVudC4KICAgICAgICAgIGFyZ3MuZm9yRWFjaChmdW5jdGlvbihmaWxlTmFtZSwgaSkgewogICAgICAgICAgICBjd2RfLmdldEZpbGUoZmlsZU5hbWUsIHt9LCBmdW5jdGlvbihmaWxlRW50cnkpIHsKICAgICAgICAgICAgICBmaWxlRW50cnkucmVtb3ZlKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgLy8gVGVsbCBGU04gdmlzdWFsaXplciB0aGF0IHdlJ3JlIHJtJ2luZy4KICAgICAgICAgICAgICAgIGlmIChmc25fKSB7CiAgICAgICAgICAgICAgICAgIGZzbl8uY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSh7Y21kOiAncm0nLCBkYXRhOiBmaWxlTmFtZX0sIGxvY2F0aW9uLm9yaWdpbik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwgZXJyb3JIYW5kbGVyXyk7CiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICBpZiAocmVjdXJzaXZlICYmIGUuY29kZSA9PSBGaWxlRXJyb3IuVFlQRV9NSVNNQVRDSF9FUlIpIHsKICAgICAgICAgICAgICAgIGN3ZF8uZ2V0RGlyZWN0b3J5KGZpbGVOYW1lLCB7fSwgZnVuY3Rpb24oZGlyRW50cnkpIHsKICAgICAgICAgICAgICAgICAgZGlyRW50cnkucmVtb3ZlUmVjdXJzaXZlbHkobnVsbCwgZXJyb3JIYW5kbGVyXyk7CiAgICAgICAgICAgICAgICB9LCBlcnJvckhhbmRsZXJfKTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUuY29kZSA9PSBGaWxlRXJyb3IuSU5WQUxJRF9TVEFURV9FUlIpIHsKICAgICAgICAgICAgICAgIG91dHB1dChjbWQgKyAnOiAnICsgZmlsZU5hbWUgKyAnOiBpcyBhIGRpcmVjdG9yeTxicj4nKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyXyhlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdybWRpcic6CiAgICAgICAgICAvLyBSZW1vdmUgZWFjaCBkaXJlY3RvcnkgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LgogICAgICAgICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uKGRpck5hbWUsIGkpIHsKICAgICAgICAgICAgY3dkXy5nZXREaXJlY3RvcnkoZGlyTmFtZSwge30sIGZ1bmN0aW9uKGRpckVudHJ5KSB7CiAgICAgICAgICAgICAgZGlyRW50cnkucmVtb3ZlKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgLy8gVGVsbCBGU04gdmlzdWFsaXplciB0aGF0IHdlJ3JlIHJtZGlyJ2luZy4KICAgICAgICAgICAgICAgIGlmIChmc25fKSB7CiAgICAgICAgICAgICAgICAgIGZzbl8uY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSh7Y21kOiAncm0nLCBkYXRhOiBkaXJOYW1lfSwgbG9jYXRpb24ub3JpZ2luKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBpZiAoZS5jb2RlID09IEZpbGVFcnJvci5JTlZBTElEX01PRElGSUNBVElPTl9FUlIpIHsKICAgICAgICAgICAgICAgICAgb3V0cHV0KGNtZCArICc6ICcgKyBkaXJOYW1lICsgJzogRGlyZWN0b3J5IG5vdCBlbXB0eTxicj4nKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcl8oZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKGUpIHsgaW52YWxpZE9wRm9yRW50cnlUeXBlXyhlLCBjbWQsIGRpck5hbWUpOyB9KTsKICAgICAgICAgIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnc3Vkbyc6CiAgICAgICAgICBpZiAodGltZXJfICE9IG51bGwpIHsKICAgICAgICAgICAgbWFnaWNXb3JkXy5zdG9wKCk7CiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJfKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghbWFnaWNXb3JkXykgewogICAgICAgICAgICBtYWdpY1dvcmRfID0gbmV3IFNvdW5kKHRydWUpOwogICAgICAgICAgICBtYWdpY1dvcmRfLmxvYWQoJ21hZ2ljX3dvcmQubXAzJywgZmFsc2UsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIG1hZ2ljV29yZF8ucGxheSgpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1hZ2ljV29yZF8ucGxheSgpOwogICAgICAgICAgfQogICAgICAgICAgdGltZXJfID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIG91dHB1dCgiPGRpdj5ZT1UgRElETidUIFNBWSBUSEUgTUFHSUMgV09SRCE8L2Rpdj4iKTsKICAgICAgICAgIH0sIDEwMCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICd0aGVtZSc6CiAgICAgICAgICB2YXIgdGhlbWUgPSBhcmdzLmpvaW4oJyAnKTsKICAgICAgICAgIGlmICghdGhlbWUpIHsKICAgICAgICAgICAgb3V0cHV0KFsndXNhZ2U6ICcsIGNtZCwgJyAnICsgVEhFTUVTXy5qb2luKCcsJyldLmpvaW4oJycpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChUSEVNRVNfLmluZGV4T2YodGhlbWUpICE9IC0xKSB7CiAgICAgICAgICAgICAgc2V0VGhlbWVfKHRoZW1lKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBvdXRwdXQoJ0Vycm9yIC0gVW5yZWNvZ25pemVkIHRoZW1lIHVzZWQnKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndmVyc2lvbic6CiAgICAgICAgY2FzZSAndmVyJzoKICAgICAgICAgIG91dHB1dChWRVJTSU9OXyk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICd3Z2V0JzoKICAgICAgICAgIHZhciB1cmwgPSBhcmdzWzBdOwogICAgICAgICAgaWYgKCF1cmwpIHsKICAgICAgICAgICAgb3V0cHV0KFsndXNhZ2U6ICcsIGNtZCwgJyBtaXNzaW5nIFVSTCddLmpvaW4oJycpKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9IGVsc2UgaWYgKHVybC5zZWFyY2goJ15odHRwOi8vJykgPT0gLTEpIHsKICAgICAgICAgICAgdXJsID0gJ2h0dHA6Ly8nICsgdXJsOwogICAgICAgICAgfQogICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09IDIwMCAmJiB0aGlzLnJlYWR5U3RhdGUgPT0gNCkgewogICAgICAgICAgICAgIG91dHB1dCgnPHRleHRhcmVhPicgKyB0aGlzLnJlc3BvbnNlICsgJzwvdGV4dGFyZWE+Jyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgb3V0cHV0KCdFUlJPUjogJyArIHRoaXMuc3RhdHVzICsgJyAnICsgdGhpcy5zdGF0dXNUZXh0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICBvdXRwdXQoJ0VSUk9SOiAnICsgdGhpcy5zdGF0dXMgKyAnICcgKyB0aGlzLnN0YXR1c1RleHQpOwogICAgICAgICAgICBvdXRwdXQoJ0NvdWxkIG5vdCBmZXRjaCAnICsgdXJsKTsKICAgICAgICAgIH07CiAgICAgICAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTsKICAgICAgICAgIHhoci5zZW5kKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICd3aG8nOgogICAgICAgICAgb3V0cHV0KGRvY3VtZW50LnRpdGxlICsKICAgICAgICAgICAgICAgICAnIC0gQnk6IEVyaWMgQmlkZWxtYW4gJmx0O2VyaWNiaWRlbG1hbkBjaHJvbWl1bS5vcmcmZ3Q7Jyk7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgaWYgKGNtZCkgewogICAgICAgICAgICBvdXRwdXQoY21kICsgJzogY29tbWFuZCBub3QgZm91bmQnKTsKICAgICAgICAgIH0KICAgICAgfTsKCiAgICAgIHRoaXMudmFsdWUgPSAnJzsgLy8gQ2xlYXIvc2V0dXAgbGluZSBmb3IgbmV4dCBpbnB1dC4KICAgIH0KICB9CgogIGZ1bmN0aW9uIGZvcm1hdENvbHVtbnNfKGVudHJpZXMpIHsKICAgIHZhciBtYXhOYW1lID0gZW50cmllc1swXS5uYW1lOwogICAgdXRpbC50b0FycmF5KGVudHJpZXMpLmZvckVhY2goZnVuY3Rpb24oZW50cnksIGkpIHsKICAgICAgaWYgKGVudHJ5Lm5hbWUubGVuZ3RoID4gbWF4TmFtZS5sZW5ndGgpIHsKICAgICAgICBtYXhOYW1lID0gZW50cnkubmFtZTsKICAgICAgfQogICAgfSk7CgogICAgLy8gSWYgd2UgaGF2ZSAzIG9yIGxlc3MgZW50cmllcywgc2hvcnRlbiB0aGUgb3V0cHV0IGNvbnRhaW5lcidzIGhlaWdodC4KICAgIC8vIDE1cHggaGVpZ2h0IHdpdGggYSBtb25vc3BhY2UgZm9udC1zaXplIG9mIH4xMnB4OwogICAgdmFyIGhlaWdodCA9IGVudHJpZXMubGVuZ3RoID09IDEgPyAnaGVpZ2h0OiAnICsgKGVudHJpZXMubGVuZ3RoICogMzApICsgJ3B4OycgOgogICAgICAgICAgICAgICAgIGVudHJpZXMubGVuZ3RoIDw9IDMgPyAnaGVpZ2h0OiAnICsgKGVudHJpZXMubGVuZ3RoICogMTgpICsgJ3B4OycgOiAnJzsKCiAgICAvLyB+MTJweCBtb25vc3BhY2UgZm9udCB5aWVsZHMgfjhweCBzY3JlZW4gd2lkdGguCiAgICB2YXIgY29sV2lkdGggPSBtYXhOYW1lLmxlbmd0aCAqIDE2Oy8vOzg7CgogICAgcmV0dXJuIFsnPGRpdiBjbGFzcz0ibHMtZmlsZXMiIHN0eWxlPSItd2Via2l0LWNvbHVtbi13aWR0aDonLAogICAgICAgICAgICBjb2xXaWR0aCwgJ3B4OycsIGhlaWdodCwgJyI+J107CiAgfQoKICBmdW5jdGlvbiBpbnZhbGlkT3BGb3JFbnRyeVR5cGVfKGUsIGNtZCwgZGVzdCkgewogICAgaWYgKGUuY29kZSA9PSBGaWxlRXJyb3IuTk9UX0ZPVU5EX0VSUikgewogICAgICBvdXRwdXQoY21kICsgJzogJyArIGRlc3QgKyAnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5PGJyPicpOwogICAgfSBlbHNlIGlmIChlLmNvZGUgPT0gRmlsZUVycm9yLklOVkFMSURfU1RBVEVfRVJSKSB7CiAgICAgIG91dHB1dChjbWQgKyAnOiAnICsgZGVzdCArICc6IE5vdCBhIGRpcmVjdG9yeTxicj4nKTsKICAgIH0gZWxzZSBpZiAoZS5jb2RlID09IEZpbGVFcnJvci5JTlZBTElEX01PRElGSUNBVElPTl9FUlIpIHsKICAgICAgb3V0cHV0KGNtZCArICc6ICcgKyBkZXN0ICsgJzogRmlsZSBhbHJlYWR5IGV4aXN0czxicj4nKTsKICAgIH0gZWxzZSB7CiAgICAgIGVycm9ySGFuZGxlcl8oZSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBlcnJvckhhbmRsZXJfKGUpIHsKICAgIHZhciBtc2cgPSAnJzsKICAgIHN3aXRjaCAoZS5jb2RlKSB7CiAgICAgIGNhc2UgRmlsZUVycm9yLlFVT1RBX0VYQ0VFREVEX0VSUjoKICAgICAgICBtc2cgPSAnUVVPVEFfRVhDRUVERURfRVJSJzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBGaWxlRXJyb3IuTk9UX0ZPVU5EX0VSUjoKICAgICAgICBtc2cgPSAnTk9UX0ZPVU5EX0VSUic7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgRmlsZUVycm9yLlNFQ1VSSVRZX0VSUjoKICAgICAgICBtc2cgPSAnU0VDVVJJVFlfRVJSJzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBGaWxlRXJyb3IuSU5WQUxJRF9NT0RJRklDQVRJT05fRVJSOgogICAgICAgIG1zZyA9ICdJTlZBTElEX01PRElGSUNBVElPTl9FUlInOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEZpbGVFcnJvci5JTlZBTElEX1NUQVRFX0VSUjoKICAgICAgICBtc2cgPSAnSU5WQUxJRF9TVEFURV9FUlInOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIG1zZyA9ICdVbmtub3duIEVycm9yJzsKICAgICAgICBicmVhazsKICAgIH07CiAgICBvdXRwdXQoJzxkaXY+RXJyb3I6ICcgKyBtc2cgKyAnPC9kaXY+Jyk7CiAgfQoKICBmdW5jdGlvbiBjcmVhdGVEaXJfKHJvb3REaXJFbnRyeSwgZm9sZGVycywgb3B0X2Vycm9yQ2FsbGJhY2spIHsKICAgIHZhciBlcnJvckNhbGxiYWNrID0gb3B0X2Vycm9yQ2FsbGJhY2sgfHwgZXJyb3JIYW5kbGVyXzsKCiAgICByb290RGlyRW50cnkuZ2V0RGlyZWN0b3J5KGZvbGRlcnNbMF0sIHtjcmVhdGU6IHRydWV9LCBmdW5jdGlvbihkaXJFbnRyeSkgewoKICAgICAgLy8gUmVjdXJzaXZlbHkgYWRkIHRoZSBuZXcgc3ViZm9sZGVyIGlmIHdlIHN0aWxsIGhhdmUgYSBzdWJmb2xkZXIgdG8gY3JlYXRlLgogICAgICBpZiAoZm9sZGVycy5sZW5ndGgpIHsKICAgICAgICBjcmVhdGVEaXJfKGRpckVudHJ5LCBmb2xkZXJzLnNsaWNlKDEpKTsKICAgICAgfQogICAgfSwgZXJyb3JDYWxsYmFjayk7CiAgfQoKICBmdW5jdGlvbiBvcGVuXyhjbWQsIHBhdGgsIHN1Y2Nlc3NDYWxsYmFjaykgewogICAgaWYgKCFmc18pIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGN3ZF8uZ2V0RmlsZShwYXRoLCB7fSwgc3VjY2Vzc0NhbGxiYWNrLCBmdW5jdGlvbihlKSB7CiAgICAgIGlmIChlLmNvZGUgPT0gRmlsZUVycm9yLk5PVF9GT1VORF9FUlIpIHsKICAgICAgICBvdXRwdXQoY21kICsgJzogJyArIHBhdGggKyAnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5PGJyPicpOwogICAgICB9CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHJlYWRfKGNtZCwgcGF0aCwgc3VjY2Vzc0NhbGxiYWNrKSB7CiAgICBpZiAoIWZzXykgewogICAgICByZXR1cm47CiAgICB9CgogICAgY3dkXy5nZXRGaWxlKHBhdGgsIHt9LCBmdW5jdGlvbihmaWxlRW50cnkpIHsKICAgICAgZmlsZUVudHJ5LmZpbGUoZnVuY3Rpb24oZmlsZSkgewogICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwoKICAgICAgICByZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHRoaXMucmVzdWx0KTsKICAgICAgICB9OwoKICAgICAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTsKICAgICAgfSwgZXJyb3JIYW5kbGVyXyk7CiAgICB9LCBmdW5jdGlvbihlKSB7CiAgICAgIGlmIChlLmNvZGUgPT0gRmlsZUVycm9yLklOVkFMSURfU1RBVEVfRVJSKSB7CiAgICAgICAgb3V0cHV0KGNtZCArICc6ICcgKyBwYXRoICsgJzogaXMgYSBkaXJlY3Rvcnk8YnI+Jyk7CiAgICAgIH0gZWxzZSBpZiAoZS5jb2RlID09IEZpbGVFcnJvci5OT1RfRk9VTkRfRVJSKSB7CiAgICAgICAgb3V0cHV0KGNtZCArICc6ICcgKyBwYXRoICsgJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeTxicj4nKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBsc18oc3VjY2Vzc0NhbGxiYWNrKSB7CiAgICBpZiAoIWZzXykgewogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gUmVhZCBjb250ZW50cyBvZiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBBY2NvcmRpbmcgdG8gc3BlYywgbmVlZCB0bwogICAgLy8ga2VlcCBjYWxsaW5nIHJlYWRFbnRyaWVzKCkgdW50aWwgbGVuZ3RoIG9mIHJlc3VsdCBhcnJheSBpcyAwLiBXZSdyZQogICAgLy8gZ3VhcmVudGVlZCB0aGUgc2FtZSBlbnRyeSB3b24ndCBiZSByZXR1cm5lZCBhZ2Fpbi4KICAgIHZhciBlbnRyaWVzID0gW107CiAgICB2YXIgcmVhZGVyID0gY3dkXy5jcmVhdGVSZWFkZXIoKTsKCiAgICB2YXIgcmVhZEVudHJpZXMgPSBmdW5jdGlvbigpIHsKICAgICAgcmVhZGVyLnJlYWRFbnRyaWVzKGZ1bmN0aW9uKHJlc3VsdHMpIHsKICAgICAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSB7CiAgICAgICAgICBlbnRyaWVzID0gZW50cmllcy5zb3J0KCk7CiAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soZW50cmllcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVudHJpZXMgPSBlbnRyaWVzLmNvbmNhdCh1dGlsLnRvQXJyYXkocmVzdWx0cykpOwogICAgICAgICAgcmVhZEVudHJpZXMoKTsKICAgICAgICB9CiAgICAgIH0sIGVycm9ySGFuZGxlcl8pOwogICAgfTsKCiAgICByZWFkRW50cmllcygpOwogIH0KCiAgZnVuY3Rpb24gY2xlYXJfKGlucHV0KSB7CiAgICBvdXRwdXRfLmlubmVySFRNTCA9ICcnOwogICAgaW5wdXQudmFsdWUgPSAnJzsKICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7CiAgICBpbnRlcmxhY2VfLnN0eWxlLmhlaWdodCA9ICcxMDAlJzsKICB9CgogIGZ1bmN0aW9uIHNldFRoZW1lXyh0aGVtZSkgewogICAgdmFyIGN1cnJlbnRVcmwgPSBkb2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZTsKCiAgICBpZiAoIXRoZW1lIHx8IHRoZW1lID09ICdkZWZhdWx0JykgewogICAgICAvL2hpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCAnJywgY3VycmVudFVybCk7CiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd0aGVtZScpOwogICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSA9ICcnOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHRoZW1lKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCh0aGVtZSk7CiAgICAgIGxvY2FsU3RvcmFnZS50aGVtZSA9IHRoZW1lOwogICAgICAvL2hpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCAnJywgY3VycmVudFVybCArICcjdGhlbWU9JyArIHRoZW1lKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHRvZ2dsZTNEVmlld18oKSB7CiAgICB2YXIgYm9keSA9IGRvY3VtZW50LmJvZHk7CiAgICBib2R5LmNsYXNzTGlzdC50b2dnbGUoJ29mZnNjcmVlbicpOwoKICAgIGlzM0RfID0gIWlzM0RfOwoKICAgIGlmIChib2R5LmNsYXNzTGlzdC5jb250YWlucygnb2Zmc2NyZWVuJykpIHsKCiAgICAgIGNvbnRhaW5lcl8uc3R5bGUud2Via2l0VHJhbnNmb3JtID0KICAgICAgICAgICd0cmFuc2xhdGVZKCcgKyAodXRpbC5nZXREb2NIZWlnaHQoKSAtIDE3NSkgKyAncHgpJzsKCiAgICAgIHZhciB0cmFuc0VuZF8gPSBmdW5jdGlvbihlKSB7CiAgICAgICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOwogICAgICAgIGlmcmFtZS5pZCA9ICdmc24nOwogICAgICAgIGlmcmFtZS5zcmMgPSAnLi4vZnNuL2Zzbl9wcm90by5odG1sJzsKCiAgICAgICAgZnNuXyA9IGJvZHkuaW5zZXJ0QmVmb3JlKGlmcmFtZSwgYm9keS5maXJzdEVsZW1lbnRDaGlsZCk7CgogICAgICAgIGlmcmFtZS5jb250ZW50V2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgd29ya2VyXy5wb3N0TWVzc2FnZSh7Y21kOiAncmVhZCcsIHR5cGU6IHR5cGVfLCBzaXplOiBzaXplX30pOwogICAgICAgIH0KICAgICAgICBjb250YWluZXJfLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCB0cmFuc0VuZF8sIGZhbHNlKTsKICAgICAgfTsKICAgICAgY29udGFpbmVyXy5hZGRFdmVudExpc3RlbmVyKCd3ZWJraXRUcmFuc2l0aW9uRW5kJywgdHJhbnNFbmRfLCBmYWxzZSk7CiAgICB9IGVsc2UgewogICAgICBjb250YWluZXJfLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9ICd0cmFuc2xhdGVZKDApJzsKICAgICAgYm9keS5yZW1vdmVDaGlsZChmc25fKTsKICAgICAgZnNuXyA9IG51bGw7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvdXRwdXQoaHRtbCkgewogICAgb3V0cHV0Xy5pbnNlcnRBZGphY2VudEhUTUwoJ2JlZm9yZUVuZCcsIGh0bWwpOwogICAgLy9vdXRwdXRfLnNjcm9sbEludG9WaWV3KCk7CiAgICBjbWRMaW5lXy5zY3JvbGxJbnRvVmlldygpOwogIH0KCiAgcmV0dXJuIHsKICAgIGluaXRGUzogZnVuY3Rpb24ocGVyc2lzdGVudCwgc2l6ZSkgewogICAgICBvdXRwdXQoJzxkaXY+V2VsY29tZSB0byAnICsgZG9jdW1lbnQudGl0bGUgKwogICAgICAgICAgICAgJyEgKHYnICsgVkVSU0lPTl8gKyAnKTwvZGl2PicpOwogICAgICBvdXRwdXQoKG5ldyBEYXRlKCkpLnRvTG9jYWxlU3RyaW5nKCkpOwogICAgICBvdXRwdXQoJzxwPkRvY3VtZW50YXRpb246IHR5cGUgImhlbHAiPC9wPicpOwoKICAgICAgaWYgKCEhIXdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbSkgewogICAgICAgIG91dHB1dCgnPGRpdj5Tb3JyeSEgVGhlIEZpbGVTeXN0ZW0gQVBJcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB5b3VyIGJyb3dzZXIuPC9kaXY+Jyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICB2YXIgdHlwZSA9IHBlcnNpc3RlbnQgPyB3aW5kb3cuUEVSU0lTVEVOVCA6IHdpbmRvdy5URU1QT1JBUlk7CiAgICAgIHdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbSh0eXBlLCBzaXplLCBmdW5jdGlvbihmaWxlc3lzdGVtKSB7CiAgICAgICAgZnNfID0gZmlsZXN5c3RlbTsKICAgICAgICBjd2RfID0gZnNfLnJvb3Q7CiAgICAgICAgdHlwZV8gPSB0eXBlOwogICAgICAgIHNpemVfID0gc2l6ZTsKCiAgICAgICAgLy8gSWYgd2UgZ2V0IHRoaXMgZmFyLCBhdHRlbXB0IHRvIGNyZWF0ZSBhIGZvbGRlciB0byB0ZXN0IGlmIHRoZQogICAgICAgIC8vIC0tdW5saW1pdGVkLXF1b3RhLWZvci1maWxlcyBmYWcgaXMgc2V0LgogICAgICAgIGN3ZF8uZ2V0RGlyZWN0b3J5KCd0ZXN0cXVvdGFmb3Jmc2ZvbGRlcicsIHtjcmVhdGU6IHRydWV9LCBmdW5jdGlvbihkaXJFbnRyeSkgewogICAgICAgICAgZGlyRW50cnkucmVtb3ZlKGZ1bmN0aW9uKCkgeyAvLyBJZiBzdWNjZXNzZnVsbHkgY3JlYXRlZCwganVzdCBkZWxldGUgaXQuCiAgICAgICAgICAgIC8vIG5vb3AuCiAgICAgICAgICB9KTsKICAgICAgICB9LCBmdW5jdGlvbihlKSB7CiAgICAgICAgICBpZiAoZS5jb2RlID09IEZpbGVFcnJvci5RVU9UQV9FWENFRURFRF9FUlIpIHsKICAgICAgICAgICAgb3V0cHV0KCdFUlJPUjogV3JpdGUgYWNjZXNzIHRvIHRoZSBGaWxlU3lzdGVtIGlzIHVuYXZhaWxhYmxlLjxicj4nKTsKICAgICAgICAgICAgb3V0cHV0KCdUeXBlICJpbnN0YWxsIiBvciBydW4gQ2hyb21lIHdpdGggdGhlIC0tdW5saW1pdGVkLXF1b3RhLWZvci1maWxlcyBmbGFnLicpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZXJyb3JIYW5kbGVyXyhlKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgIH0sIGVycm9ySGFuZGxlcl8pOwogICAgfSwKICAgIG91dHB1dDogb3V0cHV0LAogICAgc2V0VGhlbWU6IHNldFRoZW1lXywKICAgIGdldENtZExpbmU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY21kTGluZV87IH0sCiAgICBhZGREcm9wcGVkRmlsZXM6IGZ1bmN0aW9uKGZpbGVzKSB7CiAgICAgIHV0aWwudG9BcnJheShmaWxlcykuZm9yRWFjaChmdW5jdGlvbihmaWxlLCBpKSB7CiAgICAgICAgY3dkXy5nZXRGaWxlKGZpbGUubmFtZSwge2NyZWF0ZTogdHJ1ZSwgZXhjbHVzaXZlOiB0cnVlfSwgZnVuY3Rpb24oZmlsZUVudHJ5KSB7CgogICAgICAgICAgLy8gVGVsbCBGU04gdmlzdWFsaXplciB3ZSd2ZSBhZGRlZCBhIGZpbGUuCiAgICAgICAgICBpZiAoZnNuXykgewogICAgICAgICAgICBmc25fLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2Uoe2NtZDogJ3RvdWNoJywgZGF0YTogZmlsZS5uYW1lfSwgbG9jYXRpb24ub3JpZ2luKTsKICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgZmlsZUVudHJ5LmNyZWF0ZVdyaXRlcihmdW5jdGlvbihmaWxlV3JpdGVyKSB7CiAgICAgICAgICAgIGZpbGVXcml0ZXIud3JpdGUoZmlsZSk7CiAgICAgICAgICB9LCBlcnJvckhhbmRsZXJfKTsKICAgICAgICB9LCBlcnJvckhhbmRsZXJfKTsKICAgICAgfSk7CiAgICB9LAogICAgdG9nZ2xlM0RWaWV3OiB0b2dnbGUzRFZpZXdfLAogICAgc2VsZWN0RmlsZTogc2VsZWN0RmlsZV8KICB9Cn07Cgo="></script> -->
<script id="script_terminal_js" >
/*
Copyright 2011 Google Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Author: Eric Bidelman (ericbidelman@chromium.org)
*/
var util = util || {};
util.toArray = function(list) {
return Array.prototype.slice.call(list || [], 0);
};
// Cross-browser impl to get document's height.
util.getDocHeight = function() {
var d = document;
return Math.max(
Math.max(d.body.scrollHeight, d.documentElement.scrollHeight),
Math.max(d.body.offsetHeight, d.documentElement.offsetHeight),
Math.max(d.body.clientHeight, d.documentElement.clientHeight)
);
};
// TODO(ericbidelman): add fallback to html5 audio.
function Sound(opt_loop) {
var self_ = this;
var context_ = null;
var source_ = null;
var loop_ = opt_loop || false;
window.AudioContext = window.AudioContext || window.webkitAudioContext;
if (window.AudioContext) {
context_ = new window.AudioContext();
}
this.load = function(url, mixToMono, opt_callback) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function() {
if (context_) {
/*self_.sample = context_.createBuffer(this.response, mixToMono);
if (opt_callback) {
opt_callback();
}
*/
context_.decodeAudioData(this.response, function(audioBuffer) {
self_.sample = audioBuffer;
opt_callback && opt_callback();
}, function(e) {
console.log(e);
});
}
};
xhr.send();
};
this.play = function() {
if (context_) {
source_ = context_.createBufferSource();
source_.buffer = self_.sample;
source_.looping = loop_;
source_.connect(context_.destination);
source_.noteOn(0);
}
};
this.stop = function() {
if (source_) {
source_.noteOff(0);
source_.disconnect(0);
}
};
}
var Terminal = Terminal || function(containerId) {
window.URL = window.URL || window.webkitURL;
window.requestFileSystem = window.requestFileSystem ||
window.webkitRequestFileSystem;
const VERSION_ = '1.0.0';
const CMDS_ = [
'vi', ':', '/', '?', '3d', 'cat', 'cd', 'cp', 'clear', 'date', 'help', 'install', 'ls', 'mkdir',
'mv', 'open', 'pwd', 'rm', 'rmdir', 'theme', 'version', 'who', 'wget'
];
const THEMES_ = ['default', 'cream'];
var fs_ = null;
var cwd_ = null;
var history_ = [];
var histpos_ = 0;
var histtemp_ = 0;
var timer_ = null;
var magicWord_ = null;
var fsn_ = null;
var is3D_ = false;
// Fire worker to return recursive snapshot of current FS tree.
var worker_ = new Worker('worker.js');
worker_.onmessage = function(e) {
var data = e.data;
if (data.entries) {
fsn_.contentWindow.postMessage({cmd: 'build', data: data.entries},
window.location.origin);
}
if (data.msg) {
output('<div>' + data.msg + '</div>');
}
};
worker_.onerror = function(e) { console.log(e) };
// Create terminal and cache DOM nodes;
var container_ = document.getElementById(containerId);
container_.insertAdjacentHTML('beforeEnd',
['<output></output>',
'<div id="input-line" class="input-line">',
'<div class="prompt">$></div><div><input class="cmdline" autofocus /></div>',
'</div>'].join(''));
var cmdLine_ = container_.querySelector('#input-line .cmdline');
var output_ = container_.querySelector('output');
var interlace_ = document.querySelector('.interlace');
var bell_ = new Sound(false);
bell_.load('beep.mp3', false);
// Hackery to resize the interlace background image as the container grows.
output_.addEventListener('DOMSubtreeModified', function(e) {
var docHeight = util.getDocHeight();
document.documentElement.style.height = docHeight + 'px';
//document.body.style.background = '-webkit-radial-gradient(center ' + (Math.round(docHeight / 2)) + 'px, contain, rgba(0,75,0,0.8), black) center center no-repeat, black';
interlace_.style.height = docHeight + 'px';
setTimeout(function() { // Need this wrapped in a setTimeout. Chrome is jupming to top :(
//window.scrollTo(0, docHeight);
cmdLine_.scrollIntoView();
}, 0);
//window.scrollTo(0, docHeight);
}, false);
output_.addEventListener('click', function(e) {
var el = e.target;
if (el.classList.contains('file') || el.classList.contains('folder')) {
cmdLine_.value += ' ' + el.textContent;
}
}, false);
window.addEventListener('click', function(e) {
//if (!document.body.classList.contains('offscreen')) {
cmdLine_.focus();
//}
}, false);
// Always force text cursor to end of input line.
cmdLine_.addEventListener('click', inputTextClick_, false);
// Handle up/down key presses for shell history and enter for new command.
cmdLine_.addEventListener('keydown', keyboardShortcutHandler_, false);
cmdLine_.addEventListener('keyup', historyHandler_, false); // keyup needed for input blinker to appear at end of input.
cmdLine_.addEventListener('keydown', processNewCommand_, false);
/*window.addEventListener('beforeunload', function(e) {
return "Don't leave me!";
}, false);*/
function inputTextClick_(e) {
this.value = this.value;
}
function keyboardShortcutHandler_(e) {
// Toggle CRT screen flicker.
if ((e.ctrlKey || e.metaKey) && e.keyCode == 83) { // crtl+s
container_.classList.toggle('flicker');
output('<div>Screen flicker: ' +
(container_.classList.contains('flicker') ? 'on' : 'off') +
'</div>');
e.preventDefault();
e.stopPropagation();
}
}
function selectFile_(el) {
alert(el)
}
function historyHandler_(e) { // Tab needs to be keydown.
if (history_.length) {
if (e.keyCode == 38 || e.keyCode == 40) {
if (history_[histpos_]) {
history_[histpos_] = this.value;
} else {
histtemp_ = this.value;
}
}
if (e.keyCode == 38) { // up
histpos_--;
if (histpos_ < 0) {
histpos_ = 0;
}
} else if (e.keyCode == 40) { // down
histpos_++;
if (histpos_ > history_.length) {
histpos_ = history_.length;
}
}
if (e.keyCode == 38 || e.keyCode == 40) {
this.value = history_[histpos_] ? history_[histpos_] : histtemp_;
this.value = this.value; // Sets cursor to end of input.
}
}
}
function processNewCommand_(e) {
// Beep on backspace and no value on command line.
if (!this.value && e.keyCode == 8) {
bell_.stop();
bell_.play();
return;
}
if (e.keyCode == 9) { // Tab
e.preventDefault();
// TODO(ericbidelman): Implement tab suggest.
} else if (e.keyCode == 13) { // enter
// Save shell history.
if (this.value) {
history_[history_.length] = this.value;
histpos_ = history_.length;
}
// Duplicate current input and append to output section.
var line = this.parentNode.parentNode.cloneNode(true);
line.removeAttribute('id')
line.classList.add('line');
var input = line.querySelector('input.cmdline');
input.autofocus = false;
input.readOnly = true;
output_.appendChild(line);
// Parse out command, args, and trim off whitespace.
// TODO(ericbidelman): Support multiple comma separated commands.
if (this.value && this.value.trim()) {
var args = this.value.split(' ').filter(function(val, i) {
return val;
});
var cmd = args[0].toLowerCase();
args = args.splice(1); // Remove cmd from arg list.
}
switch (cmd) {
case '3d':
clear_(this);
output('Hold on to your butts!');
toggle3DView_();
break;
case 'cat':
var fileName = args.join(' ');
if (!fileName) {
output('usage: ' + cmd + ' filename');
break;
}
read_(cmd, fileName, function(result) {
output('<pre>' + result + '</pre>');
});
break;
case 'clear':
clear_(this);
return;
case 'date':
output((new Date()).toLocaleString());
break;
case 'exit':
if (is3D_) {
toggle3DView_();
}
if (timer_ != null) {
magicWord_.stop();
clearInterval(timer_);
}
break;
case 'help':
output('<div class="ls-files">' + CMDS_.join('<br>') + '</div>');
output('<p>Add files by dragging them from your desktop.</p>');
break;
case 'install':
// Check is installed.
if (window.chrome && window.chrome.app) {
if (!window.chrome.app.isInstalled) {
try {
chrome.app.install();
} catch(e) {
alert(e + '\nEnable is about:flags');
}
} else {
output('This app is already installed.');
}
}
break;
case 'ls':
ls_(function(entries) {
if (entries.length) {
var html = formatColumns_(entries);
util.toArray(entries).forEach(function(entry, i) {
html.push(
'<span class="', entry.isDirectory ? 'folder' : 'file',
'">', entry.name, '</span><br>');
});
html.push('</div>');
output(html.join(''));
}
});
break;
case 'pwd':
output(cwd_.fullPath);
break;
case 'cd':
var dest = args.join(' ') || '/';
cwd_.getDirectory(dest, {}, function(dirEntry) {
cwd_ = dirEntry;
output('<div>' + dirEntry.fullPath + '</div>');
// Tell FSN visualizer that we're cd'ing.
if (fsn_) {
fsn_.contentWindow.postMessage({cmd: 'cd', data: dest}, location.origin);
}
}, function(e) { invalidOpForEntryType_(e, cmd, dest); });
break;
case 'mkdir':
var dashP = false;
var index = args.indexOf('-p');
if (index != -1) {
args.splice(index, 1);
dashP = true;
}
if (!args.length) {
output('usage: ' + cmd + ' [-p] directory<br>');
break;
}
// Create each directory passed as an argument.
args.forEach(function(dirName, i) {
if (dashP) {
var folders = dirName.split('/');
// Throw out './' or '/' if present on the beginning of our path.
if (folders[0] == '.' || folders[0] == '') {
folders = folders.slice(1);
}
createDir_(cwd_, folders);
} else {
cwd_.getDirectory(dirName, {create: true, exclusive: true}, function() {
// Tell FSN visualizer that we're mkdir'ing.
if (fsn_) {
fsn_.contentWindow.postMessage({cmd: 'mkdir', data: dirName}, location.origin);
}
}, function(e) { invalidOpForEntryType_(e, cmd, dirName); });
}
});
break;
case 'cp':
case 'mv':
var src = args[0];
var dest = args[1];
if (!src || !dest) {
output(['usage: ', cmd, ' source target<br>',
' ', cmd,
' source directory/'].join(''));
break;
}
var runAction = function(cmd, srcDirEntry, destDirEntry, opt_newName) {
var newName = opt_newName || null;
if (cmd == 'mv') {
srcDirEntry.moveTo(destDirEntry, newName);
} else {
srcDirEntry.copyTo(destDirEntry, newName);
}
};
// Moving to a folder? (e.g. second arg ends in '/').
if (dest[dest.length - 1] == '/') {
cwd_.getDirectory(src, {}, function(srcDirEntry) {
// Create blacklist for dirs we can't re-create.
var create = [
'.', './', '..', '../', '/'].indexOf(dest) != -1 ? false : true;
cwd_.getDirectory(dest, {create: create}, function(destDirEntry) {
runAction(cmd, srcDirEntry, destDirEntry);
}, errorHandler_);
}, function(e) {
// Try the src entry as a file instead.
cwd_.getFile(src, {}, function(srcDirEntry) {
cwd_.getDirectory(dest, {}, function(destDirEntry) {
runAction(cmd, srcDirEntry, destDirEntry);
}, errorHandler_);
}, errorHandler_);
});
} else { // Treat src/destination as files.
cwd_.getFile(src, {}, function(srcFileEntry) {
srcFileEntry.getParent(function(parentDirEntry) {
runAction(cmd, srcFileEntry, parentDirEntry, dest);
}, errorHandler_);
}, errorHandler_);
}
break;
case 'open':
var fileName = args.join(' ');
if (!fileName) {
output('usage: ' + cmd + ' filename');
break;
}
open_(cmd, fileName, function(fileEntry) {
var myWin = window.open(fileEntry.toURL(), 'mywin');
});
break;
case 'init':
if (worker_) {
worker_.postMessage({cmd: 'init', type: type_, size: size_});
}
break;
case 'rm':
// Remove recursively? If so, remove the flag(s) from the arg list.
var recursive = false;
['-r', '-f', '-rf', '-fr'].forEach(function(arg, i) {
var index = args.indexOf(arg);
if (index != -1) {
args.splice(index, 1);
recursive = true;
}
});
// Remove each file passed as an argument.
args.forEach(function(fileName, i) {
cwd_.getFile(fileName, {}, function(fileEntry) {
fileEntry.remove(function() {
// Tell FSN visualizer that we're rm'ing.
if (fsn_) {
fsn_.contentWindow.postMessage({cmd: 'rm', data: fileName}, location.origin);
}
}, errorHandler_);
}, function(e) {
if (recursive && e.code == FileError.TYPE_MISMATCH_ERR) {
cwd_.getDirectory(fileName, {}, function(dirEntry) {
dirEntry.removeRecursively(null, errorHandler_);
}, errorHandler_);
} else if (e.code == FileError.INVALID_STATE_ERR) {
output(cmd + ': ' + fileName + ': is a directory<br>');
} else {
errorHandler_(e);
}
});
});
break;
case 'rmdir':
// Remove each directory passed as an argument.
args.forEach(function(dirName, i) {
cwd_.getDirectory(dirName, {}, function(dirEntry) {
dirEntry.remove(function() {
// Tell FSN visualizer that we're rmdir'ing.
if (fsn_) {
fsn_.contentWindow.postMessage({cmd: 'rm', data: dirName}, location.origin);
}
}, function(e) {
if (e.code == FileError.INVALID_MODIFICATION_ERR) {
output(cmd + ': ' + dirName + ': Directory not empty<br>');
} else {
errorHandler_(e);
}
});
}, function(e) { invalidOpForEntryType_(e, cmd, dirName); });
});
break;
case 'sudo':
if (timer_ != null) {
magicWord_.stop();
clearInterval(timer_);
}
if (!magicWord_) {
magicWord_ = new Sound(true);
magicWord_.load('magic_word.mp3', false, function() {
magicWord_.play();
});
} else {
magicWord_.play();
}
timer_ = setInterval(function() {
output("<div>YOU DIDN'T SAY THE MAGIC WORD!</div>");
}, 100);
break;
case 'theme':
var theme = args.join(' ');
if (!theme) {
output(['usage: ', cmd, ' ' + THEMES_.join(',')].join(''));
} else {
if (THEMES_.indexOf(theme) != -1) {
setTheme_(theme);
} else {
output('Error - Unrecognized theme used');
}
}
break;
case 'vi':
case 'vi':
alert( "vi" );
// output(VERSION_);
break;
case ':':
alert( ":" );
break;
case '/':
alert( "/" );
break;
case '?':
alert( "?" );
break;
case 'version':
case 'ver':
output(VERSION_);
break;
case 'wget':
var url = args[0];
if (!url) {
output(['usage: ', cmd, ' missing URL'].join(''));
break;
} else if (url.search('^http://') == -1) {
url = 'http://' + url;
}
var xhr = new XMLHttpRequest();
xhr.onload = function(e) {
if (this.status == 200 && this.readyState == 4) {
output('<textarea>' + this.response + '</textarea>');
} else {
output('ERROR: ' + this.status + ' ' + this.statusText);
}
};
xhr.onerror = function(e) {
output('ERROR: ' + this.status + ' ' + this.statusText);
output('Could not fetch ' + url);
};
xhr.open('GET', url, true);
xhr.send();
break;
case 'who':
output(document.title +
' - By: jkwii <adminiwii@ko0.us> & Eric Bidelman <ericbidelman@chromium.org>');
break;
default:
if (cmd) {
output(cmd + ': command not found');
}
};
this.value = ''; // Clear/setup line for next input.
}
}
function formatColumns_(entries) {
var maxName = entries[0].name;
util.toArray(entries).forEach(function(entry, i) {
if (entry.name.length > maxName.length) {
maxName = entry.name;
}
});
// If we have 3 or less entries, shorten the output container's height.
// 15px height with a monospace font-size of ~12px;
var height = entries.length == 1 ? 'height: ' + (entries.length * 30) + 'px;' :
entries.length <= 3 ? 'height: ' + (entries.length * 18) + 'px;' : '';
// ~12px monospace font yields ~8px screen width.
var colWidth = maxName.length * 16;//;8;
return ['<div class="ls-files" style="-webkit-column-width:',
colWidth, 'px;', height, '">'];
}
function invalidOpForEntryType_(e, cmd, dest) {
if (e.code == FileError.NOT_FOUND_ERR) {
output(cmd + ': ' + dest + ': No such file or directory<br>');
} else if (e.code == FileError.INVALID_STATE_ERR) {
output(cmd + ': ' + dest + ': Not a directory<br>');
} else if (e.code == FileError.INVALID_MODIFICATION_ERR) {
output(cmd + ': ' + dest + ': File already exists<br>');
} else {
errorHandler_(e);
}
}
function errorHandler_(e) {
var msg = '';
switch (e.code) {
case FileError.QUOTA_EXCEEDED_ERR:
msg = 'QUOTA_EXCEEDED_ERR';
break;
case FileError.NOT_FOUND_ERR:
msg = 'NOT_FOUND_ERR';
break;
case FileError.SECURITY_ERR:
msg = 'SECURITY_ERR';
break;
case FileError.INVALID_MODIFICATION_ERR:
msg = 'INVALID_MODIFICATION_ERR';
break;
case FileError.INVALID_STATE_ERR:
msg = 'INVALID_STATE_ERR';
break;
default:
msg = 'Unknown Error';
break;
};
output('<div>Error: ' + msg + '</div>');
}
function createDir_(rootDirEntry, folders, opt_errorCallback) {
var errorCallback = opt_errorCallback || errorHandler_;
rootDirEntry.getDirectory(folders[0], {create: true}, function(dirEntry) {
// Recursively add the new subfolder if we still have a subfolder to create.
if (folders.length) {
createDir_(dirEntry, folders.slice(1));
}
}, errorCallback);
}
function open_(cmd, path, successCallback) {
if (!fs_) {
return;
}
cwd_.getFile(path, {}, successCallback, function(e) {
if (e.code == FileError.NOT_FOUND_ERR) {
output(cmd + ': ' + path + ': No such file or directory<br>');
}
});
}
function read_(cmd, path, successCallback) {
if (!fs_) {
return;
}
cwd_.getFile(path, {}, function(fileEntry) {
fileEntry.file(function(file) {
var reader = new FileReader();
reader.onloadend = function(e) {
successCallback(this.result);
};
reader.readAsText(file);
}, errorHandler_);
}, function(e) {
if (e.code == FileError.INVALID_STATE_ERR) {
output(cmd + ': ' + path + ': is a directory<br>');
} else if (e.code == FileError.NOT_FOUND_ERR) {
output(cmd + ': ' + path + ': No such file or directory<br>');
}
});
}
function ls_(successCallback) {
if (!fs_) {
return;
}
// Read contents of current working directory. According to spec, need to
// keep calling readEntries() until length of result array is 0. We're
// guarenteed the same entry won't be returned again.
var entries = [];
var reader = cwd_.createReader();
var readEntries = function() {
reader.readEntries(function(results) {
if (!results.length) {
entries = entries.sort();
successCallback(entries);
} else {
entries = entries.concat(util.toArray(results));
readEntries();
}
}, errorHandler_);
};
readEntries();
}
function clear_(input) {
output_.innerHTML = '';
input.value = '';
document.documentElement.style.height = '100%';
interlace_.style.height = '100%';
}
function setTheme_(theme) {
var currentUrl = document.location.pathname;
if (!theme || theme == 'default') {
//history.replaceState({}, '', currentUrl);
localStorage.removeItem('theme');
document.body.className = '';
return;
}
if (theme) {
document.body.classList.add(theme);
localStorage.theme = theme;
//history.replaceState({}, '', currentUrl + '#theme=' + theme);
}
}
function toggle3DView_() {
var body = document.body;
body.classList.toggle('offscreen');
is3D_ = !is3D_;
if (body.classList.contains('offscreen')) {
container_.style.webkitTransform =
'translateY(' + (util.getDocHeight() - 175) + 'px)';
var transEnd_ = function(e) {
var iframe = document.createElement('iframe');
iframe.id = 'fsn';
iframe.src = '../fsn/fsn_proto.html';
fsn_ = body.insertBefore(iframe, body.firstElementChild);
iframe.contentWindow.onload = function() {
worker_.postMessage({cmd: 'read', type: type_, size: size_});
}
container_.removeEventListener('webkitTransitionEnd', transEnd_, false);
};
container_.addEventListener('webkitTransitionEnd', transEnd_, false);
} else {
container_.style.webkitTransform = 'translateY(0)';
body.removeChild(fsn_);
fsn_ = null;
}
}
function output(html) {
output_.insertAdjacentHTML('beforeEnd', html);
//output_.scrollIntoView();
cmdLine_.scrollIntoView();
}
return {
initFS: function(persistent, size) {
output('<div>koterm: ' + document.title +
'! (v' + VERSION_ + ')</div>');
output((new Date()).toLocaleString());
output('<p>quickref: type "help"</p>');
if (!!!window.requestFileSystem) {
output('<div>MSG_9000 unauthorized access logged terminal disabled</div>');
return;
}
var type = persistent ? window.PERSISTENT : window.TEMPORARY;
window.requestFileSystem(type, size, function(filesystem) {
fs_ = filesystem;
cwd_ = fs_.root;
type_ = type;
size_ = size;
// If we get this far, attempt to create a folder to test if the
// --unlimited-quota-for-files fag is set.
cwd_.getDirectory('testquotaforfsfolder', {create: true}, function(dirEntry) {
dirEntry.remove(function() { // If successfully created, just delete it.
// noop.
});
}, function(e) {
if (e.code == FileError.QUOTA_EXCEEDED_ERR) {
output('ERROR: Write access to the FileSystem is unavailable.<br>');
output('Type "install" or run Chrome with the --unlimited-quota-for-files flag.');
} else {
errorHandler_(e);
}
});
}, errorHandler_);
},
output: output,
setTheme: setTheme_,
getCmdLine: function() { return cmdLine_; },
addDroppedFiles: function(files) {
util.toArray(files).forEach(function(file, i) {
cwd_.getFile(file.name, {create: true, exclusive: true}, function(fileEntry) {
// Tell FSN visualizer we've added a file.
if (fsn_) {
fsn_.contentWindow.postMessage({cmd: 'touch', data: file.name}, location.origin);
}
fileEntry.createWriter(function(fileWriter) {
fileWriter.write(file);
}, errorHandler_);
}, errorHandler_);
});
},
toggle3DView: toggle3DView_,
selectFile: selectFile_
}
};
</script>
<script id=script_togglehelp>
function toggleHelp() {
document.querySelector('.help').classList.toggle('hidden');
document.body.classList.toggle('dim');
}
(function() {
var term = new Terminal('container');
term.initFS(false, 1024 * 1024);
if (document.location.hash) {
var theme = document.location.hash.substring(1).split('=')[1];
term.setTheme(theme);
} else if (localStorage.theme) {
term.setTheme(localStorage.theme);
}
document.body.addEventListener('keydown', function(e) {
if (e.keyCode == 'h' ) { // help
toggleHelp();
e.stopPropagation();
e.preventDefault();
}
if (e.keyCode == 27) { // Esc
alert( "esc" );
// toggleHelp();
e.stopPropagation();
e.preventDefault();
}
if (e.keyCode == ":" ) { // colon
alert( ":" );
}
if (e.keyCode == "/" ) { // slash
alert( "/" );
}
if (e.keyCode == "?" ) { // question
alert( "?" );
}
}, false);
// Setup the DnD listeners for file drop.
document.body.addEventListener('dragenter', function(e) {
e.stopPropagation();
e.preventDefault();
this.classList.add('dropping');
}, false);
document.body.addEventListener('dragover', function(e) {
e.stopPropagation();
e.preventDefault();
e.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.
}, false);
document.body.addEventListener('dragleave', function(e) {
this.classList.remove('dropping');
}, false);
document.body.addEventListener('drop', function(e) {
e.stopPropagation();
e.preventDefault();
this.classList.remove('dropping');
term.addDroppedFiles(e.dataTransfer.files);
term.output('<div>File(s) added!</div>');
}, false);
})();
</script>
<script type="text/javascript">
function Upload(args) {
var fileUpload = document.getElementById("div_fileUpload_csv");
var regex = /^([a-zA-Z0-9\s_\\.\-:])+(.csv|.txt|.psv|.py|.htm|.html|.php)$/;
if (regex.test(fileUpload.value.toLowerCase())) {
if (typeof (FileReader) != "undefined") {
var reader = new FileReader();
reader.onload = function (e) {
var table = document.createElement("table");
var rows = e.target.result.split("\n");
for (var i = 0; i < rows.length; i++) {
var row = table.insertRow(-1);
// var cells = rows[i].split("|");
var cells = rows[i].split(",");
for (var j = 0; j < cells.length; j++) {
var cell = row.insertCell(-1);
cell.innerHTML = cells[j];
}
}
var csv2tbl = document.getElementById("csv2tbl");
csv2tbl.innerHTML = "";
csv2tbl.appendChild(table);
}
reader.readAsText(fileUpload.files[0]);
}
else {
alert("csv2tbl warn: unauthorized access noted");
}
}
else {
alert("csv2tbl fail: unsuppoted format");
}
}
</script>
<script id="script_jaxgrid" >
function jaxgrid(args) {
// alert( "BUGS_10000 jaxgrid args="+args );
htmout_head = "";
htmout_head += '<div id="div_jaxgrid">';
htmout_head += ' <h1>div_jaxgrid</h1>';
if( document.getElementById("div_jaxgrid")) {
document.getElementById("div_jaxgrid").innerHTML = htmout_head;
}
divids = kolists['divids'].split(" ");
// divids = "av fb pn sl tl us yt zm".split(" ");
divids_len=divids.length;
alert( "BUGS_34507 len="+divids_len+" divids="+divids )
var j=0;
alert( "BUGS_34501 j="+j+" divids="+divid);
for( j=0; j<divids_len; j++ ) {
divid=divids[j];
alert( "BUGS_37502 j="+j+" divid="+divid );
if( /alloff/.test(divid)) {continue; }
if( /allon/.test(divid)) { continue; }
if( /toggle/.test(divid)) { continue; }
if( /</.test(divid)) { htmout += divid; continue;}
canvas_id = "canvas_jax_"+divid;
img_id = "img_jax_"+divid;
// alert( "BUGS_10011 canvas_id="+canvas_id );
htmout_img = "";
htmout_img += '<img id="'+img_id+'" ';
htmout_img += ' src="/imgs/btn/kow.png" ';
htmout_img += ' onclick="jaxgrid1(\''+img_id+'\');return false;" ';
htmout_img += ' height=50>';
// alert( "BUGS_10012 htmout_img="+htmout_img );
htmout_canvas = "";
htmout_canvas += '<canvas id="'+canvas_id+'" ';
htmout_canvas += ' onclick="jaxgrid1(\''+canvas_id+'\');return false;" ';
htmout_canvas += ' height=100 width=200 >';
htmout_canvas += ' </canvas>';
// htmout = htmout_img+htmout_canvas;
htmout = htmout_canvas;
// alert( "BUGS_10013 htmout_canvas="+htmout_canvas );
// alert( "BUGS_10012 canvas_id="+canvas_id );
if( document.getElementById("div_jaxgrid")) {
// alert( "BUGS_10015 htmout="+htmout );
document.getElementById("div_jaxgrid").insertAdjacentHTML("beforeend", htmout);
}
// alert( "BUGS_10050 canvas_id="+canvas_id );
imgsrc="/imgs/btn/kob.png";
// alert( "BUGS_10051 imgsrc="+imgsrc );
// var my_gradient = ctx.createLinearGradient(0, 0, 0, 170);
// my_gradient.addColorStop(0, "black");
// my_gradient.addColorStop(1, "white");
var img = new Image();
imgsrc="/imgs/btn/kob.png";
img.src = imgsrc;
if( document.getElementById(canvas_id)) {
ctx=document.getElementById(canvas_id).getContext('2d');
// ctx.fillStyle = my_gradient;
ctx.fillStyle="wheat";
ctx.drawImage(img, 0, 0);
ctx.font = '18px yokkmokkOT';
ctx.fillStyle="wheat";
ctx.fillRect(0,0,200,100);
ctx.fillStyle="black";
ctx.fillText(divid,10,10);
}
// alert( "BUGS_10055 htmout_canvas="+htmout_canvas );
// htmout += 'j='+j+' divid='+divid+'<br>';
}
htmout_tail = " </div>";
document.getElementById("div_jaxgrid").insertAdjacentHTML("beforeend", htmout_tail );
// document.getElementById('div_jaxgrid').innerHTML=htmout_tail;
}
</script>
<script id="script_jaxgrid1" >
function jaxgrid1(args) {
alert( "BUGS_20002 jaxgrid2 args="+args );
divid=args;
return(args);
}
</script>
<script id="script_today">
function today(args) {
// alert( "BUGS_26500 today args="+args );
var today = new Date();
var day = today.getDay();
` var daylist = ["Sunday","Monday","Tuesday","Wednesday ","Thursday","Friday","Saturday"];
// console.log("Today is : " + daylist[day] + ".");
var hour = today.getHours();
var minute = today.getMinutes();
var second = today.getSeconds();
var prepand = (hour >= 12)? " PM ":" AM ";
hour = (hour >= 12)? hour - 12: hour;
if (hour===0 && prepand===' PM ') {
if (minute===0 && second===0) {
hour=12;
prepand=' Noon';
}
else {
hour=12;
prepand=' PM';
}
}
if (hour===0 && prepand===' AM ') {
if (minute===0 && second===0) {
hour=12;
prepand=' Midnight';
}
else {
hour=12;
prepand=' AM';
}
}
dttm=hour + prepand + ":" + minute + ":" + second;
// console.log("Current Time : "+hour + prepand + " : " + minute + " : " + second);
alert( "BUGS_26500 dttm="+dttm );
return(dttm);
}
</script>
<script id="script_jaxgrid2" >
function jaxgrid2(args) {
alert( "BUGS_20002 jaxgrid1 args="+args );
divid=args;
var htmout = "";
alert( "BUG_20000 jaxgrid1 divid="+divid );
jaxurl="/txt/"+divid+".txt";
list=""; list_len=0;
// if( filecheck(jaxurl)) {
// jax(jaxurl);
// list=kolists('jax').split("\n");
// list_len=list.length;
// }
canvasid="canvas_jax_"+divid;
if( document.getElementById(canvasid)) {
var ctx=document.getElementById(canvasid)).getContext('2d');
ctx.fillStyle="black';
ctx.fillText(divid,10,10);
ctx.fillText(list_len,20,20);
}
htmout += '<canvas id="canvas_jax_'+divid+'" ';
return(args);
}
</script>
<script id="script_ko_toggle">
function script_ko_toggle(element) {
var htmout = ""; var htmout_b = "";
var j=0; var k=0;
var htmbugs = "";
htmbugs += '<div id="div_htmbugs">';
htmbugs += ' <h1>div_htmbugs</h1>';
htmbugs += ' <pre>';
var style_d = "_style_d";
var style_v = "_style_v";
var divid = "";
var div_divid = "";
var divids = "konet iperms <hr> jkwii jk sk skwii <hr> jtfdc jtfinc jtfdcr <hr> law med kou kids <hr> av db dd fb pn sl tl tm yt zm <hr> abc media files misc mess xyz".split(" ");
// alert( "BUGS_102 divids="+divids );
htmout += '<div id="div_buttons_toggle">';
htmout_b += '<div id="div_buttons_toggle_b">';
if(( element == "div_alloff" )) {
for( j=0; j<divids.length; j++ ) {
// htmout = ""; htmout_b="";
divid=divids[j];
div_divid="div_"+divid;
if( divid == "<br>" ) {
htmout += divid;
htmout_b += divid;
continue;
}
if( divid == "<hr>" ) {
htmout += divid;
htmout_b += divid;
continue;
}
if(! document.getElementById(div_divid)) { continue; }
if( document.getElementById(div_divid)) {
document.getElementById(div_divid).style.display="none";
}
htmout += '<img src="/imgs/btn/koeyeb_'+divid+'.png" height=50 onclick="script_ko_toggle(\''+divid+'\');return false;" alt="btn_'+divid+'">';
htmout_b += '<img src="/imgs/btn/koeyeb_'+divid+'.png" height=50 onclick="script_ko_toggle(\''+divid+'\');return false;" alt="btn_'+divid+'">';
}
htmout += " </div>\n";
htmout_b += " </div>\n";
document.getElementById("div_buttons_toggle").innerHTML = htmout;
document.getElementById("div_buttons_toggle_b").innerHTML = htmout_b;
return;
}
if(( element == "div_toggle" )) {
// htmout = ""; htmout_b="";
for( j=0; j<divids.length; j++ ) {
divid=divids[j];
div_divid="div_"+divid;
if( divid == "<br>" ) {
htmout += divid;
htmout_b += divid;
continue;
}
if( divid == "<hr>" ) {
htmout += divid;
htmout_b += divid;
continue;
}
// alert( "BUGS_1770 toggle toggle j="+j+" element="+element );
if(! document.getElementById(div_divid)) { continue; }
if( document.getElementById(div_divid)) {
if( document.getElementById(div_divid).style.display == "none" ) {
document.getElementById(div_divid).style.display="inline";
htmout += '<img src="/imgs/btn/koeyew_'+divid+'.png" height=50 onclick="script_ko_toggle(\''+divid+'\');return false;" alt="btn_'+divid+'">';
htmout_b += '<img src="/imgs/btn/koeyew_'+divid+'.png" height=50 onclick="script_ko_toggle(\''+divid+'\');return false;" alt="btn_'+divid+'">';
}
else {
document.getElementById(div_divid).style.display="none";
htmout += '<img src="/imgs/btn/koeyeb_'+divid+'.png" height=50 onclick="script_ko_toggle(\''+divid+'\');return false;" alt="btn_'+divid+'">';
htmout_b += '<img src="/imgs/btn/koeyeb_'+divid+'.png" height=50 onclick="script_ko_toggle(\''+divid+'\');return false;" alt="btn_'+divid+'">';
}
}
}
htmout += " </div>\n";
htmout_b += " </div>\n";
document.getElementById("div_buttons_toggle").innerHTML = htmout;
document.getElementById("div_buttons_toggle_b").innerHTML = htmout_b;
return;
}
if( element == "div_allon" ) {
// htmout = ""; htmout_b = "";
for( j=0; j<divids.length; j++ ) {
divid=divids[j];
div_divid="div_"+divid;
if( divid == "<br>" ) {
htmout += divid;
htmout_b += divid;
// alert( "BUGS_105 <BR> divid="+divid+" htmout="+htmout );
continue;
}
if( divid == "<hr>" ) {
htmout += divid;
htmout_b += divid;
// alert( "BUGS_105 <HR> divid="+divid+" htmout="+htmout );
continue;
}
if(! document.getElementById(div_divid)) { continue; }
if( document.getElementById(div_divid)) {
document.getElementById(div_divid).style.display="inline";
}
htmout += '<img src="/imgs/btn/koeyew_'+divid+'.png" height=50 onclick="script_ko_toggle(\''+divid+'\');return false;" alt="btn_'+divid+'">\n';
htmout_b += '<img src="/imgs/btn/koeyew_'+divid+'.png" height=50 onclick="script_ko_toggle(\''+divid+'\');return false;" alt="btn_'+divid+'">\n';
// alert( "BUGS_115 j="+j+" divid="+divid+" htmout="+htmout+ "element="+element );
}
document.getElementById("div_buttons_toggle").innerHTML = htmout;
document.getElementById("div_buttons_toggle_b").innerHTML = htmout_b;
return;
}
// alert( "BUGS_1800 toggle element="+element );
for( j=0; j<divids.length; j++ ) {
divid=divids[j];
div_divid="div_"+divid;
if( divid == "<br>" ) {
// alert( "BUGS_151 <BR> divid="+divid+" element="+element );
htmout += divid;
continue;
}
if( divid == "<hr>" ) {
// alert( "BUGS_152 <HR> divid="+divid+" element="+element );
htmout += divid;
continue;
}
if(! document.getElementById(div_divid)) { continue; }
style_v = document.getElementById(div_divid).style.visibility;
// alert( "BUGS_132 j="+j+" style_d="+style_d+" style_v="+style_v );
// document.getElementById(div_divid).style.display = "none";
style_d = document.getElementById(div_divid).style.display;
// alert( "BUGS_133 j="+j+" style_d="+style_d+" style_v="+style_v );
htmbugs += "htmbugs j="+j+" divid="+divid;
htmbugs += " -== div_divid="+div_divid;
htmbugs += " element="+element;
htmbugs += " =- -=";
htmbugs += " style_d="+style_d+"";
htmbugs += " style_v="+style_v+"";
htmbugs += "====================\n";
// if( div_divid.match(/element/) != '') {
// if( div_divid.match(element)) {
// if( div_divid == element ) {
// alert( "BUGS_141 _MATCH_ div_divid="+div_divid+" element="+element+" style_d="+style_d+" style_v="+style_v );
// htmbugs += "BUGS_141 _MATCH_ div_divid="+div_divid+" element="+element+" style_d="+style_d+" style_v="+style_v;
// }
// else {
// alert( "BUGS_142 nomatch div_divid="+div_divid+" element="+element+" style_d="+style_d+" style_v="+style_v );
// htmbugs += "BUGS_142 _match_ div_divid="+div_divid+" element="+element+" style_d="+style_d+" style_v="+style_v;
// }
// selected button
// if( div_divid.match(element) ) {
if( div_divid == element ) {
style_d = document.getElementById(div_divid).style.display;
// alert( "BUGS_160 MATCH div_divid="+div_divid+" element="+element+" style_d="+style_d );
if( document.getElementById(div_divid).style.display == "none" ) {
htmout += '<img src="/imgs/btn/koeyew_'+divid+'.png" height=50 onclick="script_ko_toggle(\''+div_divid+'\');return false;" alt="btn_'+divid+'_hide">';
htmbugs += "BUGS_161 _DIV_DIVID-NONE div_divid="+div_divid+" element="+element+" style_d="+style_d+" style_v="+style_v;
document.getElementById(div_divid).style.display="inline";
}
else {
htmout += '<img src="/imgs/btn/koeyeb_'+divid+'.png" height=50 onclick="script_ko_toggle(\''+div_divid+'\');return false;" alt="btn_'+divid+'_hide">';
htmbugs += "BUGS_162 DIV_DIVID-INLINE div_divid="+div_divid+" element="+element+" style_d="+style_d+" style_v="+style_v;
document.getElementById(div_divid).style.display="none";
}
}
// other buttons
// else {
if( div_divid != element ) {
// alert( "BUGS_170 rest div_divid="+div_divid+" element="+element );
if( document.getElementById(div_divid).style.display == "none" ) {
htmout += '<img src="/imgs/btn/koeyeb_'+divid+'.png" height=50 onclick="script_ko_toggle(\''+div_divid+'\');return false;" alt="btn_'+divid+'_hide">';
htmbugs += "BUGS_171 div_divid_none div_divid="+div_divid+" element="+element+" style_d="+style_d+" style_v="+style_v;
}
else {
htmout += '<img src="/imgs/btn/koeyew_'+divid+'.png" height=50 onclick="script_ko_toggle(\''+div_divid+'\');return false;" alt="btn_'+divid+'_hide">';
htmbugs += "BUGS_172 div_divid_inline div_divid="+div_divid+" element="+element+" style_d="+style_d+" style_v="+style_v;
}
}
if( divid == "pn" ) { htmout += "<br>"; }
if( divid == "<br>" ) { htmout += "<br>\n"; }
if( divid == "<hr>" ) { htmout += "<hr>\n"; }
}
htmout += ' </div>';
htmbugs += " </pre>";
htmbugs += " </div>";
// alert( "BUGS_181 script_ko_toggle divid="+divid+" htmout="+htmout );
// alert( "BUGS_200 htmbugs="+htmbugs );
// document.getElementById("div_htmbugs").innerHTML = htmbugs;
document.getElementById("div_buttons_toggle").innerHTML = htmout;
document.getElementById("div_buttons_toggle_b").innerHTML = htmout;
}
</script>
<script id="script_startup_hideshow">
function startup_hideshow(){
// alert("BUGS_100 startup");
// script_ko_toggle("fb");
// script_ko_toggle("div_fb");
// script_ko_toggle("alloff");
// script_ko_toggle("allon");
// script_ko_toggle("toggle");
}
</script>
<script id=script_ko_toggle >
function startup_toggle(args) {
// alert( "ko_toggle BUGS_101 args="+args );
script_ko_toggle('alloff');
}
</script>
<script id=script_idlist>
function script_listids(args) {
koid="fb";
var kolist=kolists[koid];
var kolist_len=kolists[koid].split("\n").length;
var kolist=kolists[koid];
// alert( "BUGS_33001 startup kolist len="+kolist.length+" kolist="+kolist );
jkid="pagelist_pages";
var jklist=jklists[jkid];
// alert( "BUGS_33002 startup jklist len="+jklist.length+" jklist="+jklist );
var lines=jkload(jkid);
// alert( "BUGS_37450 startup jkload-pagelist_pages lines="+lines );
var koids=`
titles
blobhead
blobhead
fb_law
jtfdc_stalkarounds
mothersday
edu
hoa
law
pano
us
edu
hoa
hoa
law
fathersday
anniversary
reindependenceday
jtfdc_stalkarounds
jtfdc_stalkarounds_20200503
imgs_jukebox
blobs
blobs_orig
sounds
mp3_bavaria
mp3_jkwii
gifwave
ka1_mp3
av
fb
bb
dd
pn
sl
tm
tl
yt
zm
listids
pdfs_default
pdfs
btn_pdf
hats
kurrent
letters_j
letters_k
letters_s
pdfgrps
av
fb
bb
dd
sl
us
yt
`;
var jkids = `
mp3
mp4
pdf
imgs
fb
pn
tl
zm
pagelist_head
pagelist_pages
mp4_usps
pagelist_go
default
av_links
sl_links
zm_links
kov_links
svc_links
fb_links
gif_tek
gif_orbs
gif_cute
if_links
ko_links
us_links
u_links
now_links
ytlist
`;
// alert( "BUGS_31000 startup args="+args );
// alert( "BUGS_31001 startup koids="+koids );
// alert( "BUGS_31002 startup jkids="+jkids );
j=0; k=0;
htmout=""; htmout_j=""; htmout_k="";
jkid=""; jkids_len=0;
koid=""; koids_len=0;
jkids_len=jkids.split("\n").length;
htmout_j += "<h1>jkids</h1>\n";
htmout_j += "<table id=table_jkids>\n";
for( j=0; j< jkids_len; j++ ) {
jkid=""; jkid_len=0;
jkid=jkids.split("\n")[j];
// alert( "BUGS_33702 j="+j+" jkid="+jkid );
// alert( "BUGS_33702 j="+j+" jkid="+jkid+" jklist="+jkload(jkid) );
// if( jklists[jkid] ) {
// jkid_len=jklists[jkid].length;
// jkid_len=jkload(jkid).length;
// }
// alert( "BUGS_33702 j="+j+" jkid="+jkid+" jkid_length="+jkid_len );
htmout_j += "<tr>\n";
htmout_j += "<td>j="+j+"</td><td>jkid="+jkid+"</td><td>jkid_len="+jkid_len+"</td>\n";
htmout_j += " </tr>\n";
}
htmout_j += " </table>";
koids_len=koids.split("\n").length;
// alert( "BUGS_33720 k="+k+" koid="+koid+" koids_len="+koids_len+" koids="+koids );
htmout_k += "<h1>koids</h1>\n";
htmout_k += "<table id=table_koids>\n";
for( k=0; k< koids_len; k++ ) {
koid=""; koid_len="";
koid=koids.split("\n")[k];
if( koid == "" ) { continue; }
// koid_len=kolists[koid].split("\n").length;
// koid="titles";
// koid="blobhead";
// koid="fb_law";
var kotext=kolists[koid];
// alert( "BUGS_33700 startup k="+k+" koid="+"titles"+"= kolists="+kolists['titles'] );
// alert( "BUGS_33700 startup k="+k+" koid="+koid+"= kolists="+kolists[koid] );
// alert( "BUGS_33701 startup k="+k+" koid="+koid+" len="+kolist.split("\n").length+" kolist="+kolist );
// alert( "BUGS_33702 startup k="+k+" koid="+koid+" len="+kotext.split("\n").length+" kotext="+kotext );
// continue;
// alert( "BUGS_33702 startup kolist len="+kolist.length+" kolist="+kolist );
// alert( "BUGS_33721 koid="+koid+" kolists="+kolists['pagelist_pages'] );
// alert( "BUGS_33722 k="+k+" koid="+koid+" kolists1="+kolists1 );
htmout_k += "<tr>\n";
// htmout_k += "<td>k="+k+"</td><td>koid="+koid+"=</td><td>koid_len="+koid_len+"</td>\n";
htmout_k += "<td>k="+k+"</td><td>koid="+koid+"=</td><td>koid_len="+koid_len+"</td>\n";
htmout_k += " </tr>\n";
}
htmout_k += " </table>";
// alert( "BUGS_33730 htmout_k="+htmout_k );
htmout = "";
htmout += "<div id=div_bugs>\n";
htmout += " <h1>div_bugs</h1>\n";
// htmout += htmout_j;
htmout += "<hr color=goldenrod>\n";
htmout += htmout_k;
htmout += " </div>\n";
// alert( "BUGS_33730 k="+k+" koid="+koid+"= koids_len="+koids_len+" koids="+koids );
// alert( "BUGS_33740 htmout="+htmout );
document.getElementById('div_bugs').innerHTML=htmout;
return(htmout);
}
</script>
<script id=script_test>
function test(args) {
htmout = "";
htmout += "BUGS_37640 TEST";
alert( "BUGS_37640 TEST htmout="+htmout );
return( htmout );
}
</script>
<script id=script_startup_ajax>
function startup_ajax(divid,url) {
alert( "BUGS_37640 ko_ajax divid="+divid+" url="+url );
var jaxbak = "";
$( "#div_ajax_ko" ).load( url, function() {
var list=$("#div_ajax_ko" ).html();
// htmout_ajax_ko = ajax_ko_htmout(list);
// $( "#div_ajax_ko" ).html(htmout_ajax_ko);
});
// jaxbak=$("#div_ajax").html();
return(jaxbak);
}
</script>
<script id="script_startup">
kolists = [];
function startup_kludge(args) {
alert( "MSG_37860 STARTUP args="+args );
return("");
}
// startup('startup_kludge');
function startup_kludge(args) {
alert( "MSG_27001 STARTUP args="+args );
kogrids("");
search="";
if ( search.match(//)) {
ko_confirm(args);
}
// alert( "MSG_27002 STARTUP args="+args );
htmout = "";
// htmout = test(args);
divid="div_fbpages";
alert( "MSG_27001 startup divid="+divid );
// htmout = startup_fb('startup');
startup_fb('startup');
// alert( "MSG_37002 startup STARTUP_FB args="+args);
// htmout=startup_ajax(divid,url);
// htmout = startup_kogo(args);
// htmout = kogo(args);
list="";
list_fbd="";
list_fbpages="";
list_pdfs="";
bgid=1; wlim=1100; hlim=400;
// alert( "BUGS_37151 startup pong bgid="+bgid+" wlim="+wlim );
pong(bgid,wlim,hlim);
// alert( "BUGS_37152 startup pong bgid="+bgid+" wlim="+wlim );
// $( "#div_ajax" ).load( url." #projects li" );
url_pdfs="ka12:8000/ko.php?find=pdf/*.pdf";
url_fbpages="ka12:8000/ko.php?find=fb/zc/pages/*.jpg";
url_fbpages="ka12:8000/ko.php?todo=pagesimgs&fmt=list";
// url_fbd="ka12:8000/ko.php?find=\"find fb -type f -maxdepth 1 -name '??'\"";
url_fbd=url_pdfs;
url_fbd=url_fbpages;
url_fbd="ka12:8000/ko.php?find=\"find fb -type d -maxdepth 1 -name '??'\"";
url_fbd="ka12:8000/ko.php?find=tl/*.json";
url_fbd="ka12:8000/ko.php?find";
url_fbd="ka12:8000/ko.php?todo=fbd1";
// alert( "<h1>BUGS_36511 LOAD url_fbd="+url_fbd+"</h1><br>\n" );
$( "#div_ajax_fbd" ).load( url_fbd, function() {
list_fbd=$("#div_ajax_fbd").html();
// alert( "<h1>BUGS_36512 LOAD url_fbd="+url_fbd+" list_fbd="+list_fbd+"</h1><br>\n" );
htmout="";
list=list_fbd.split("\n");
htmout += "<div id=div_ajax_fbd>\n";
htmout += "<h1>flipbooks</h1>\n";
htmout += "<hr color=goldenrod>\n";
htmout += "<table id=table_fbd>\n";
htmout += "<tr><td>j</td><td width=100>url</td><td width=100>flipbook</td></tr>\n";
for( j=0; j<list.length; j++ ) {
fb=list[j];
tn = "<img src=/"+fb+"/pages/tn/tn_1.png height=100>\n";
url = "<a href=/"+fb+" target=_blank>\n";
url += tn;
url += " </a>\n";
k=j+1;
htmout += "<tr>";
htmout += "<td>"+k+"</td>";
htmout += "<td width=100>"+url+"</td>";
htmout += "<td width=200>"+fb+"</td>";
htmout += "</tr>\n";
}
htmout += " </table>\n";
htmout += " </div>\n";
// $("#div_ajax_fbd").html(htmout).hide();
});
// document.createElement("div");
// document.getElementById("div").insertAdjacentHTML('beforebegin',htmout);
// document.getElementById("div").insertAdjacentHTML('afterbegin',htmout);
// document.getElementById("div").insertAdjacentHTML('beforeend',htmout);
// document.getElementById("div").insertAdjacentHTML('afterend',htmout);
// jQuery(Array(101).join('<div></div>'));
// $('<div id="' + someID + '" class="foobar">' + content + '</div>');
// $('<div/>', { id: someID, className: 'foobar', html: content });
// $("body").append("<div>A div element with some text</div> ");
// jQuery("#paragraph1").text("This came from jQuery");
// var $myHeaderDiv = jQuery(myHeaderDiv); //assign to another variable
// jQuery(myHeaderDiv).fade(); //use directly
// or, as the $ is aliased to the jQuery object if you don't specify otherwise:
// var $myHeaderDiv = jQuery(myHeaderDiv); //assign
// $(myHeaderDiv).fade(); //use
// $(this).hide() - hides the current element.
// $("p").hide() - hides all <p> elements.
// $(".test").hide() - hides all elements with class="test".
// $("#test").hide() - hides the element with id="test".
// var div = document.createElement("div");
// div.style.width = "100px";
// div.style.height = "100px";
// div.style.background = "red";
// div.style.color = "white";
// div.innerHTML = "Hello";
// document.getElementById("main").appendChild(div);
url_fbpages="ka12:8000/ko.php?todo=pagesimgs&fmt=list";
alert( "<h1>BUGS_38000 LOAD url_fbpages="+url_fbpages+"</h1><br>\n" );
$( "#div_ajax_fbpages" ).load( url_fbpages, function() {
list_fbpages=$("#div_ajax_fbpages").html();
// alert( "<h1>BUGS_36522 LOAD FBPAGES list_fbpages="+list_fbpages+"</h1><br>\n" );
})
//.hide();
// url_pdfs="ka12:8000/ko.php?find=\"find pdf -type f -maxdepth 1 -name '*.pdf'\"";
// url_pdfs="ka12:8000/ko.php?find=pdf/*.pdf";
url_pdfs="ka12:8000/ko.php?todo=pdfs1";
// alert( "<h1>BUGS_36531 LOAD url_pdfs="+url_pdfs+"</h1><br>\n" );
$( "#div_ajax_pdf" ).load( url_pdf, function() {
list_pdfs=$("#div_ajax_pdf").html();
// alert( "<h1>BUGS_36532 LOAD PDF list_pdf="+list_pdf+"</h1><br>\n" );
list=list_pdf.split("\n");
htmout = "";
htmout += "<div id=ajax_pdf>\n";
htmout += "<h1>pdf "+url_pdf+"</h1>\n";
htmout += list;
htmout += " </div\n";
$("#div_ajax_pdf").html(htmout);
print(htmout );
exit;
progid="ko";
htmout = "";
htmout += "<html>\n";
htmout += "<head>\n";
htmout += " <title>"+progid+" pdfs1</title>\n";
htmout += " </head>\n";
// htmout += "<body bgcolor=linen>\n";
htmout += "<body bgcolor=wheat>\n";
htmout += "<div id=div_ajax_pdf>\n";
htmout += "<hr color=goldenrod>\n";
htmout += "<h1>pdf</h1>\n";
htmout += "<h2>"+progid+" </h2>\n";
htmout += "<hr color=goldenrod>\n";
htmout += "<table id=table_pdf>\n";
htmout += "<tr>";
htmout += "<td>j</td>";
htmout += "<td >url</td>";
htmout += "<td >pdf</td>";
htmout += "</tr>\n";
// alert( "<h1>BUGS_36720 list="+list+"</h1>\n" );
for( j=0; j<list.length; j=j+1) {
k=j+1;
pdf=list[j];
url =
"<a href=/pdf/web/viewer.html?file=/"+pdf+" target=_blank>\n";
url += "<img src=/imgs/btn/btn_pdf1.png height=50>\n";
url += "<img src=/imgs/btn/btn_pdf1.png height=50>\n";
url += "<img src=/imgs/btn/btn_pdf1.png height=50>\n";
url += "</a>\n";
htmout += "<tr>";
htmout += "<td>"+k+"</td>";
htmout += "<td>"+url+"</td>";
htmout += "<td><b>"+pdf+"</b></td>";
htmout += "</tr>\n";
}
htmout += " </table>\n";
htmout += "<hr color=goldenrod>\n";
htmout += " </div>\n";
htmout += " </body>\n";
htmout += " </html>\n";
// bugs $("#div_ajax_pdf").html(htmout).hide();
alert( "<h1>BUGS_36740 htmout="+htmout+"</h1>\n" );
print( htmout );
});
// .hide();
// alert( "<h1>BUGS_36533 LOAD url_pdf="+url_pdf+" list_pdf=$list_pdf</h1><br>\n" );
// .hide();
// $( "#div_ajax_pdf" ).load( url_pdf ).hide();
// $( "#div_ajax_pdf" ).load( url_pdf ).hide().css("visibility", "hidden");
// var content = $("#div_ajax_pdf").html();
// alert( "BUGS_105 content="+content );
// $('div_ajax_pdf').empty();
// var hiddenfield = $("<input type='hidden' id='div_ajax_pdfs2'>");
// var hiddendata = $("<div id=div_hiddendata ><h1>div_hiddendata</h1></div>" );
// alert( "BUGS_106 hiddendata="+hiddendata );
// $('body').append(hiddendata);
// hiddendata.val(content);
// alert( "BUGS_107 hiddendata.val="+hiddendata.val(content) );
// var content = $('div_ajax_pdfs');
// alert( "BUGS_108 content="+content );
// Content.html($('#myDiv2').val());
// $('#myDiv2').remove();
// alert( "BUGS_36511 startup url="+url);
//// var request = new XMLHttpRequest();
//// request.open("GET", url );
//// request.onreadystatechange = function() {
//// if(this.readyState === 4 && this.status === 200 ) {
//// list=this.responseText;
// alert( "BUGS_36511 list="+list );
// alert( "BUGS_36512 kolists_fbs="+kolists['fbs'] );
//// }
//// }
//// request.send();
// alert( "BUGS_36513 url="+url+" list="+list );
// alert( "BUGS_36514 kolists_fbs="+kolists['fbs'] );
// alert( "BUGS_36515 kolists_pdfs="+kolists['pdfs'] );
// script_listids('args');
// url="ka12:8000/ko.php?find";
// alert( "BUGS_36750 url="+url );
// $.ajax({url: url, success: function(result) {
// alert( "<h1>BUGS_36751 DONE FBS url="+url+" result="+result+"</h1><br>\n" );
// }});
// $.ajax({url: url_fbpages, success: function(result) {
// ajax_fbpages=result;
// alert( "BUGS_36531 DONE FBPAGES url="+url+" result="+result );
// }});
// $.ajax({url: url_pdfs, success: function(result) {
// ajax_pdfs=result;
// alert( "BUGS_36541 DONE result="+result );
// }});
// alert( "BUGS_36531" );
// alert( "BUGS_36532 ajax_fbpages="+ajax_fbpages );
// alert( "BUGS_36552 ajax_fbs="+ajax_fbs );
// alert( "BUGS_36542 ajax_pdfs="+ajax_pdfs );
// alert( "BUGS_36562 ajax_fbpages="+ajax_fbpages );
// $("button").click(function() {
// $.ajax({url: url, success: function(result){
// $("#div_bugs").html(result);
// }});
// });
// alert( "BUGS_36700 AJAX stall_kludge" );
// var now = Date.now(); miliseconds=10000;
// var end = now + miliseconds;
// while( now < end ) { now = Date.now(); }
// alert( "BUGS_36701 AJAX DONE ajax_fbs="+ajax_fbs );
// alert( "BUGS_36702 AJAX DONE ajax_fbpages="+ajax_fbpages );
// alert( "BUGS_36703 AJAX DONE ajax_pdfs="+ajax_pdfs );
var jkids=`
mp3
mp4
pdf
imgs
fb
pn
tl
zm
pagelist_head
pagelist_pages
pagelist_imgs
mp4_usps
pagelist_go
default
av_links
sl_links
zm_links
kov_links
svc_links
fb_links
gif_tek
gif_orbs
gif_cute
if_links
ko_links
us_links
u_links
now_links
ytlist
fb_law
jtfdc_stalkarounds
mothersday
edu
hoa
law pano
us
fb_law
edu
hoa
law
fathersday
anniversary
reindependenceday
jtfdc_stalkarounds
jtfdc_stalkarounds_20200503
imgs_jukebox
blobs
blobs_orig
sounds
mp3_bavaria
mp3
mp3_jkwii
gifwave
ka1_mp3
av
fb
bb
dd
pn
sl
tm
tl
yt
zm
divs
kovs
kov
listids
pdfs_default
pdfs
btn_pdf
hats
kurrent
letters_j
letters_k
letters_s
pdfgrps
mothersday
edu
hoa
law
pano
us
fb_law
edu
hoa
law
fathersday
anniversary
frindependenceday
jtfdc_stalkarounds
`;
var koids = `
mp3
fb
pagelist_pages
pagelist_imgs
`;
j=0;k=0;
var jkids = `
mp3
mp4
`;
for(j=0; j<jkids.split("\n").length; j++ ) {
jkid=jkids.split("\n")[j];
if( jkid == "" ) { continue; }
// alert( "BUGS_33100a jkid="+jkid+"=\n" );
// alert( "BUGS_102 33800 jkid="+jkid );
if( jkload(jkid) != "" ) {
var jklist=jkload(jkid).split("\n");
jklist_len=jklist.length;
// alert( "BUGS_33101 FOUND jkid="+jkid+"= jklist_len="+jklist_len+" jklist="+jklist+"\n" );
}
else {
var jklist="NOTFOUND jkid="+jkid;
jklist_len=-1;
// alert( "BUGS_33101 NOTFOUND jkid="+jkid+"= jklist_len="+jklist_len+" jklist="+jklist+"\n" );
}
continue;
// alert( "BUGS_33102 startup j="+j+" koid="+koid+"= kolist="+kolists['mp3']+ " len="+kolists['mp3'].split("\n").length+ " kolists="+kolists['mp3'] );
}
// alert( "BUGS_33103 startup j="+j+" koid="+koid+"= kolist="+kolist+ " len="+kolist.split("\n").length+ " kolists="+kolists['mp3'] );
//// for(j=0; j<koids.split("\n").length; j++ ) {
//// koid=koids.split("\n")[j];
//// if( koid == "" ) { continue; }
// alert( "BUGS_33100a koid="+koid+"=\n" );
//// if( kolists[koid] ) {
//// var kolist=kolists[koid].split("\n");
//// kolist_len=kolist.length;
//// alert( "BUGS_33100a FOUND koid="+koid+"= kolist_len="+kolist_len+" kolist="+kolist+"\n" );
//// }
//// else {
//// var kolist="NOTFOUND koid="+koid;
//// kolist_len=-1;
//// alert( "BUGS_33100b NOTFOUND koid="+koid+"= kolist_len="+kolist_len+" kolist="+kolist+"\n" );
//// }
//// continue;
////// alert( "BUGS_33100 startup j="+j+" koid="+koid+"= kolist="+kolists['mp3']+ " len="+kolists['mp3'].split("\n").length+ " kolists="+kolists['mp3'] );
//// alert( "BUGS_33100b startup j="+j+" koid="+koid+"= kolist="+kolist+ " len="+kolist.split("\n").length+ " kolists="+kolists['mp3'] );
//// }
////
//// alert( "BUGS_33109 startup j="+j+" koid="+koid+"= kolists="+kolists['mp3']+ " len="+kolists['mp3'].split("\n").length+ " kolists_titles="+kolists['mp3'] );
////
// koid="mp3";
// alert( "BUGS_33100 startup koid="+koid+"= kolists-mp3="+kolists['mp3']+ " len="+kolists['mp3'].split("\n").length+ " kolists_titles="+kolists['mp3'] );
// alert( "BUGS_33100 startup koid=titles kolists-titles="+kolists['titles']+ " len="+kolists['fb'].split("\n").length+ " kolists_titles="+kolists['titles'] );
// alert( "BUGS_33101 startup koid=pagelist_pages kolists-pagelist_pages="+kolists['pagelist_pages']+ " len="+kolists['fb'].split("\n").length+ " kolists_pagelist_pages="+kolists['pagelist_pages'] );
// alert( "BUGS_33102 startup koid=fb kolists-fb="+kolists['fb']+ " len="+kolists['fb'].split("\n").length+ " kolists_fb="+kolists['fb'] );
// koid="titles";
// var kolist=kolists[koid];
// alert( "BUGS_33781 startup koid="+koid+"= kolist len="+kolist.split("\n").length+" kolist="+kolist );
// koid="fb";
// var kolist=kolists[koid];
// alert( "BUGS_33782 startup koid="+koid+"= kolist len="+kolist.split("\n").length+" kolist="+kolist );
// jkid="pagelist_pages";
// var jklist=jklists[jkid];
// alert( "BUGS_33783 startup jklist len="+jklist.length+" jklist="+jklist );
// var lines=jkload(jkid);
// alert( "BUGS_33784 startup jkload-pagelist_pages lines="+lines );
// pdfs_show(args);
// blobhead_wait(args);
var jaxurl=args;
var href=window.location.href;
var search=window.location.search;
// http://ka12/fb/stlc/index.html = index_stlc.html
// alert( "BUGS_36700 startup args="+args+" href="+href );
href="/fb/stlc";
var hrefdirs = href.split("/");
hrefdirs_len=hrefdirs.length;
dirnam = hrefdirs[hrefdirs_len-1];
// alert( "BUGS_36760 startup hrefdirs="+hrefdirs+" href="+href );
// alert( "BUGS_21513 startup dirnam="+dirnam+" href="+href );
// alert( "BUGS_21512 startup dirnam="+dirnam+" href="+href );
// alert( "BUGS_21513 startup dirnam="+dirnam+" href="+href );
var indexname = href.replace("http://","").replace("/index.html","");
var indexname_html = "index_"+indexname+".html";
// if( filecheck( indexname_html)) {
// alert( "BUGS_21512 startup __FOUND indexname_html="+indexname_html+" href="+href );
// window.open(indexname_html);
// document.location.href=indexname_html;
// }
// alert( "BUGS_21512 startup NOTFOUND indexname_html="+indexname_html+" href="+href );
// kludge('');
// blob_sound('');
// alert( "BUGS_36780 startup args="+args );
var jaxurl="";
if( /jax/.test(search)) {
jaxurl = search.split("=")[1];
// alert( "BUGS_17240 startup jaxurl="+jaxurl );
}
// alert( "BUGS_36781 startup jaxurl="+jaxurl );
// var host=window.location.host;
// var pathname=window.location.pathname;
// url_default="fb.json";
// alert( "BUGS_2591 url_default="+url_default );
// var replaced = pathname.replace(/(^\.+|\.+$)/mg, '');
// if( pathname.endsWith(".htm")) {
// url_default=pathname.replace(".html",".json" );
// alert( "BUGS_2595 url_default="+url_default );
// alert( "BUGS_11700 startup jaxurl="+jaxurl );
// alert( "BUGS_11700 startup jaxurl="+jaxurl+" kolists="+kolists );
// alert( "BUGS_11701 startup jaxurl="+jaxurl+" divids="+divids );
// alert( "BUGS_11702 startup jaxurl="+jaxurl+" kolists_divids="+kolists['divids'] );
// jaxurl="/av.txt";
// if(filecheck(jaxurl)) { kolists['av'] = jax(jaxurl); }
// alert( "BUGS_11801 startup jaxurl="+jaxurl+ " len="+kolists['jax'].split("\n").length+ " kolists_jax="+kolists['jax'] );
// alert( "BUGS_11801 startup jaxurl="+jaxurl+ " len="+kolists['fb'].split("\n").length+ " kolists_fb="+kolists['fb'] );
// alert( "BUGS_11801 startup jaxurl="+jaxurl+ " len="+kolists['av'].split("\n").length+ " kolists_av="+kolists['av'] );
// alert( "BUGS_11802 startup jaxurl="+jaxurl+ " len="+kolists['fb'].split("\n").length+ " kolists_fb="+kolists['fb'] );
// alert( "BUGS_11803 startup jaxurl="+jaxurl+ " len="+kolists['pn'].split("\n").length+ " kolists_pn="+kolists['pn'] );
// alert( "BUGS_11804 startup jaxurl="+jaxurl+ " len="+kolists['sl'].split("\n").length+ " kolists_sl="+kolists['sl'] );
// alert( "BUGS_11805 startup jaxurl="+jaxurl+ " len="+kolists['tl'].split("\n").length+ " kolists_tl="+kolists['tl'] );
// alert( "BUGS_11806 startup jaxurl="+jaxurl+ " len="+kolists['yt'].split("\n").length+ " kolists_yt="+kolists['yt'] );
// alert( "BUGS_11807 startup jaxurl="+jaxurl+ " len="+kolists['zm'].split("\n").length+ " kolists_zm="+kolists['zm'] );
// blob_imgs("args");
alert( "BUGS_36810 kogrids BEG args="+args );
kogrids("");
alert( "BUGS_36831 load_kolists BEG args="+args );
load_kolists(args);
// alert( "BUGS_36832 show_kolists BEG args="+args );
show_kolists(args);
// jtfdc_stalkarounds('');
// alert( "BUGS_36833 startup_canvas BEG args="+args );
startup_canvas("");
// alert( "BUGS_36834 startup_canvas END args="+args );
// script_hideshow("alloff");
// script_hideshow("allon");
// script_hideshow("soul_lewis");
// script_hideshow("pdfs");
// script_hideshow("div_bb");
// script_hideshow("div_fb");
// script_hideshow("div_yt");
// alert( "BUGS_17491 startup_blobs " );
// startup_blobs(args);
// alert( "BUGS_17492 startup_blobs " );
// var jaxurl_default="fb.txt";
// var jaxurl = args;
// if( args == "" ) { jaxurl=jaxurl_default; }
// alert( "BUGS_6770 startup args="+args+" jaxurl="+jaxurl );
// if( filecheck(jaxurl)) {
// alert( "BUGS_28621 ___FOUND jaxurl="+jaxurl );
// }
// else {
//// alert( "BUGS_28622 NOTFOUND jaxurl="+jaxurl );
// }
// alert("BUGS_36900 startup END" );
}
</script>
<script id=script_ajax_pdf>
function ajax_pdf(divid,url) {
// alert( "BUGS_37210 divid="+divid+" url="+url );
if( divid == "" ) { return; }
if( url == "" ) { return; }
$( "#div_ajax_pdf" ).load( url, function() {
list_pdf=$("#div_ajax_pdf").html();
// alert( "BUGS_37211 LOAD url="+url+" list_pdf="+list_pdf+"\n" );
});
// alert( "BUGS_37212 LOAD url="+url+" list_pdf="+list_pdf+"\n" );
}
</script>
<script id=script_ajax_fbpages>
function ajax_fbpages(divid,url) {
// alert( "BUGS_37210 divid="+divid+" url="+url );
if( divid == "" ) { return; }
if( url == "" ) { return; }
$( "#div_ajax_fbpages" ).load( url, function() {
list_fbpages=$("#div_ajax_fbpages").html();
// alert( "BUGS_37211 LOAD url="+url+" list_fbpages="+list_fbpages+"\n" );
});
alert( "BUGS_37212 LOAD url="+url+" list_fbpages="+list_fbpages+"\n" );
}
</script>
<script id=script_ajax_mp3>
function ajax_mp3(divid,url) {
// alert( "BUGS_37210 divid="+divid+" url="+url );
if( divid == "" ) { return; }
if( url == "" ) { return; }
$( "#div_ajax_mp3" ).load( url, function() {
list_mp3=$("#div_ajax_mp3").html();
// alert( "BUGS_37211 LOAD url="+url+" list_mp3="+list_mp3+"\n" );
});
alert( "BUGS_37212 LOAD url="+url+" list_mp3="+list_mp3+"\n" );
}
</script>
<script id=script_ajax_mp4>
function ajax_mp4(divid,url) {
// url="ka12:8000/ko.php?todo=pages";
// alert( "BUGS_37210 divid="+divid+" url="+url );
if( divid == "" ) { return; }
if( url == "" ) { return; }
$( "#div_ajax_mp4" ).load( url, function() {
list_mp4=$("#div_ajax_mp4").html();
// alert( "BUGS_37211 LOAD url="+url+" list_mp4="+list_mp4+"\n" );
});
alert( "BUGS_37212 LOAD url="+url+" list_mp4="+list_mp4+"\n" );
}
</script>
<script id=script_ajax_yt>
function ajax_yt(divid,url) {
// url="ka12:8000/ko.php?todo=pages";
// alert( "BUGS_37210 divid="+divid+" url="+url );
if( divid == "" ) { return; }
if( url == "" ) { return; }
$( "#div_ajax_yt" ).load( url, function() {
list_yt=$("#div_ajax_yt").html();
// alert( "BUGS_37211 LOAD url="+url+" list_yt="+list_yt+"\n" );
});
// alert( "BUGS_37213 LOAD url="+url+" list_yt="+list_yt+"\n" );
}
</script>
<script id=script_ajax_bc>
function ajax_bc(divid,url) {
// url="ka12:8000/ko.php?todo=pages";
// alert( "BUGS_37210 divid="+divid+" url="+url );
if( divid == "" ) { return; }
if( url == "" ) { return; }
$( "#div_ajax_bc" ).load( url, function() {
list_bc=$("#div_ajax_bc").html();
// alert( "BUGS_37211 LOAD url="+url+" list_bc="+list_bc+"\n" );
});
// alert( "BUGS_37213 LOAD url="+url+" list_bc="+list_bc+"\n" );
}
</script>
<script id=script_ajax_ht>
function ajax_ht(divid,url) {
// url="ka12:8000/ko.php?todo=pages";
// alert( "BUGS_37210 divid="+divid+" url="+url );
if( divid == "" ) { return; }
if( url == "" ) { return; }
$( "#div_ajax_ht" ).load( url, function() {
list_ht=$("#div_ajax_ht").html();
// alert( "BUGS_37211 LOAD url="+url+" list_ht="+list_ht+"\n" );
});
// alert( "BUGS_37213 LOAD url="+url+" list_ht="+list_ht+"\n" );
}
</script>
<!-- casket2casket is_that_you_coffin -->
<script id=script_ajax_ko_coffeeshop>
function ajax_ko_coffeeshop(divid,url) {
// url="ko_coffeeshop.psv";
// alert( "BUGS_27600 ajax_ko_coffeeshop divid="+divid+" url="+url );
htmout="";
$( "#div_ajax_ko_coffeeshop" ).load( url, function() {
var data=$("#div_ajax_ko_coffeeshop" ).html();
// alert( "BUGS_27701 ajax_ko_coffeeshop data="+data );
// ko_coffeeshop(data);
ko_coffeeshop(divid);
// alert( "BUGS_27702 ajax_ko_coffeeshop data="+data );
// htmout_ajax_ko = ajax_ko_htmout(list);
// $( "#div_ajax_ko" ).html(htmout_ajax_ko);
});
}
</script>
<script id=script_ajax_ko>
function ajax_ko(divid,url) {
htmout="";
$( "#div_ajax_ko" ).load( url, function() {
var list=$("#div_ajax_ko" ).html();
// htmout_ajax_ko = ajax_ko_htmout(list);
// $( "#div_ajax_ko" ).html(htmout_ajax_ko);
});
//
// htmout="";
// htmout += "<div id="+divid+" >\n";
// htmout += " <h1>"+divid+"</h1>\n";
// htmout += " <h2>"+url+"</h2>\n";
// htmout += " <img src=/imgs/btn/koeye.png ";
// htmout += "onclick=\"ajax_ko_htmout(list); return false;\"";
// htmout += "height=100>\n";
// htmout += ajax_ko_htmout;
// htmout += " </div>\n";
}
</script>
<script id=script_ajax_globes>
function ajax_globes(divid,url) {
htmout="";
$( "#div_ajax_globes" ).load( url, function() {
var list=$("#div_ajax_globes" ).html();
// htmout_ajax_globes = ajax_ko_htmout(list);
// $( "#div_ajax_globes" ).html(htmout_ajax_globes);
});
//
// htmout="";
// htmout += "<div id="+divid+" >\n";
// htmout += " <h1>"+divid+"</h1>\n";
// htmout += " <h2>"+url+"</h2>\n";
// htmout += " <img src=/imgs/btn/koeye.png ";
// htmout += "onclick=\"ajax_ko_htmout(list); return false;\"";
// htmout += "height=100>\n";
// htmout += ajax_ko_htmout;
// htmout += " </div>\n";
}
</script>
<script id=script_ajax_ko_htmout>
function ajax_ko_htmout(list) {
// htmout="";
// htmout += "<hr color=goldenrod>";
// for( j=0; j<list.split("\n").length; j++ ) {
// line=list[j];
// if( line == "" ) { continue;}
// k=j+1;
// htmout += "k="+k
// htmout += line+"<br>\n";
// }
// return(htmout);
}
</script>
<script id=script_ajax_pdfs>
function ajax_pdfs(divid,url) {
list="
ajax_pdf1
ajax_pdf2
ajax_pdf3
";
htmout = "";
htmout_ajax_pdfs=ajax_pdfs_htmout(list);
htmout +="<div id="+divid+" >\n";
htmout += " <h1>"+divid+"<h1>\n";
htmout += " <h2>"+url+"</h2>\n";
htmout += htmout_ajax_pdfs;
htmout += " </div>\n";
$("#div_ajax_pdfs").html(htmout);
return(htmout);
}
</script>
<script id=script_ajax_pdfs_htmout>
function ajax_pdfs_htmout(list) {
htmout="";
for(j=0;j<list.split("\n").length; j++ ) {
htmout += list.split("\n")[j]+"<br>\n";
}
return(htmout);
}
</script>
<script id=script_ajax_fbpages1>
function ajax_fbpages1(divid,url) {
alert( "BUGS_38280 AJAX_FBPAGES divid="+divid+" url="+url );
list="
pages/1.jpg
pages/2.jpg
pages/3.jpg
";
htmout_ajax_fbpages=ajax_fbpages_htmout1(list);
htmout=""
htmout += "<h1>"+divid+</h1>\n";
htmout += "<h2>"+url+</h1>\n";
htmout += htmout_ajax_fbpages;
$("#div_ajax_fbpages").html(htmout);
return(htmout)
}
</script>
<script id=script_ajax_fbpages_htmout1>
function ajax_fbpages_htmout1(list) {
htmout="";
for(j=0; j<list.split("\n").length; j++ ) {
line=list.split("\n")[j];
if( line == "" ) { continue; }
k=j+1;
htmout += k+" "+line+"<br>\n";
}
return(htmout);
}
</script>
<script id=script_ajax_fbd>
function ajax_fbd(divid,url) {
list="
fb/konet
fb/iperms
fb/jtfdc
fb/jtfdcr
fb/jtfinc
fb/kou
fb/royal1
fb/kt
fb/go
fb/kitiworks
fb/mars
";
htmout += "<div id=div_ajax_fbd>\n";
htmout += " <h1>"+divid_"<h1>\n";
htmout += htmout_ajax_fbd_htmout;
htmout += " </div>\n";
$("#div_ajax_fbd").html(htmout);
return(htmout);
}
</script>
<script id=script_ajax_fbd_htmout>
function ajax_fbd_htmout(list) {
for( j=0; j<list.split("\n"); j++; ) {
line=list.split("\n")[j];
if( line == "" ) { continue; }
htmout += k+" ";
htmout += "<img src=/"+line+"/pages/tn/tn_1.png";
htmout += " onclick=\"window.open('"+fbid+"'); return false;\"";
htmout += " height=100><br>\n";
}
return(htmout);
}
</script>
<script id=script_parse2json>
function getJsonFromUrl(url) {
if(!url) url = location.href;
var question = url.indexOf("?");
var hash = url.indexOf("#");
if(hash==-1 && question==-1) return {};
if(hash==-1) hash = url.length;
var query = question==-1 || hash==question+1 ? url.substring(hash) :
url.substring(question+1,hash);
var result = {};
query.split("&").forEach(function(part) {
if(!part) return;
part = part.split("+").join(" "); // replace every + with space, regexp-free version
var eq = part.indexOf("=");
var key = eq>-1 ? part.substr(0,eq) : part;
var val = eq>-1 ? decodeURIComponent(part.substr(eq+1)) : "";
var from = key.indexOf("[");
if(from==-1) result[decodeURIComponent(key)] = val;
else {
var to = key.indexOf("]",from);
var index = decodeURIComponent(key.substring(from+1,to));
key = decodeURIComponent(key.substring(0,from));
if(!result[key]) result[key] = [];
if(!index) result[key].push(val);
else result[key][index] = val;
}
});
return result;
}
</script>
<script id="script_tail" > function script_tail(args) {alert( "BUGS_8300 script_tail"+args );} </script>
<script id=script_bookmarkusb>
function script_bookmarkusb(args) {
// alert( "BUGS_2600 script_bookmarkusb args="+args );
books = `
b_148|/fb/bookmarkusb/imgs/books/book_01.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_01.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_01.png|$40.148|desc_148|supplier_148|/fb/bookmarkusb/index.html?id=b_book_01
b_149|/fb/bookmarkusb/imgs/books/book_02.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_02.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_02.png|$40.149|desc_149|supplier_149|/fb/bookmarkusb/index.html?id=b_book_02
b_150|/fb/bookmarkusb/imgs/books/book_03.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_03.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_03.png|$40.150|desc_150|supplier_150|/fb/bookmarkusb/index.html?id=b_book_03
b_151|/fb/bookmarkusb/imgs/books/book_04.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_04.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_04.png|$40.151|desc_151|supplier_151|/fb/bookmarkusb/index.html?id=b_book_04
b_152|/fb/bookmarkusb/imgs/books/book_06.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_06.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_06.png|$40.152|desc_152|supplier_152|/fb/bookmarkusb/index.html?id=b_book_06
b_153|/fb/bookmarkusb/imgs/books/book_07.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_07.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_07.png|$40.153|desc_153|supplier_153|/fb/bookmarkusb/index.html?id=b_book_07
b_154|/fb/bookmarkusb/imgs/books/book_08.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_08.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_08.png|$40.154|desc_154|supplier_154|/fb/bookmarkusb/index.html?id=b_book_08
b_155|/fb/bookmarkusb/imgs/books/book_10.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_10.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_10.png|$40.155|desc_155|supplier_155|/fb/bookmarkusb/index.html?id=b_book_10
b_156|/fb/bookmarkusb/imgs/books/book_101.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_101.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_101.png|$40.156|desc_156|supplier_156|/fb/bookmarkusb/index.html?id=b_book_101
b_157|/fb/bookmarkusb/imgs/books/book_102.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_102.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_102.png|$40.157|desc_157|supplier_157|/fb/bookmarkusb/index.html?id=b_book_102
b_158|/fb/bookmarkusb/imgs/books/book_103.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_103.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_103.png|$40.158|desc_158|supplier_158|/fb/bookmarkusb/index.html?id=b_book_103
b_159|/fb/bookmarkusb/imgs/books/book_105.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_105.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_105.png|$40.159|desc_159|supplier_159|/fb/bookmarkusb/index.html?id=b_book_105
b_160|/fb/bookmarkusb/imgs/books/book_106.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_106.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_106.png|$40.160|desc_160|supplier_160|/fb/bookmarkusb/index.html?id=b_book_106
b_161|/fb/bookmarkusb/imgs/books/book_107.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_107.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_107.png|$40.161|desc_161|supplier_161|/fb/bookmarkusb/index.html?id=b_book_107
b_162|/fb/bookmarkusb/imgs/books/book_109.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_109.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_109.png|$40.162|desc_162|supplier_162|/fb/bookmarkusb/index.html?id=b_book_109
b_163|/fb/bookmarkusb/imgs/books/book_11.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_11.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_11.png|$40.163|desc_163|supplier_163|/fb/bookmarkusb/index.html?id=b_book_11
b_164|/fb/bookmarkusb/imgs/books/book_110.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_110.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_110.png|$40.164|desc_164|supplier_164|/fb/bookmarkusb/index.html?id=b_book_110
b_165|/fb/bookmarkusb/imgs/books/book_111.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_111.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_111.png|$40.165|desc_165|supplier_165|/fb/bookmarkusb/index.html?id=b_book_111
b_166|/fb/bookmarkusb/imgs/books/book_backs.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_backs.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_backs.png|$40.166|desc_166|supplier_166|/fb/bookmarkusb/index.html?id=b_book_backs
b_167|/fb/bookmarkusb/imgs/books/book_balance.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_balance.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_balance.png|$40.167|desc_167|supplier_167|/fb/bookmarkusb/index.html?id=b_book_balance
b_168|/fb/bookmarkusb/imgs/books/book_binder.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_binder.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_binder.png|$40.168|desc_168|supplier_168|/fb/bookmarkusb/index.html?id=b_book_binder
b_169|/fb/bookmarkusb/imgs/books/book_bookshelves_kids.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_bookshelves_kids.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_bookshelves_kids.png|$40.169|desc_169|supplier_169|/fb/bookmarkusb/index.html?id=b_book_bookshelves_kids
b_170|/fb/bookmarkusb/imgs/books/book_colloge.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_colloge.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_colloge.png|$40.170|desc_170|supplier_170|/fb/bookmarkusb/index.html?id=b_book_colloge
b_171|/fb/bookmarkusb/imgs/books/book_copwebs.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_copwebs.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_copwebs.png|$40.171|desc_171|supplier_171|/fb/bookmarkusb/index.html?id=b_book_copwebs
b_172|/fb/bookmarkusb/imgs/books/book_damaged.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_damaged.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_damaged.png|$40.172|desc_172|supplier_172|/fb/bookmarkusb/index.html?id=b_book_damaged
b_173|/fb/bookmarkusb/imgs/books/book_hourglass.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_hourglass.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_hourglass.png|$40.173|desc_173|supplier_173|/fb/bookmarkusb/index.html?id=b_book_hourglass
b_174|/fb/bookmarkusb/imgs/books/book_karambia.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_karambia.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_karambia.png|$40.174|desc_174|supplier_174|/fb/bookmarkusb/index.html?id=b_book_karambia
b_175|/fb/bookmarkusb/imgs/books/book_lanter_glasses.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_lanter_glasses.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_lanter_glasses.png|$40.175|desc_175|supplier_175|/fb/bookmarkusb/index.html?id=b_book_lanter_glasses
b_176|/fb/bookmarkusb/imgs/books/book_leather.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_leather.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_leather.png|$40.176|desc_176|supplier_176|/fb/bookmarkusb/index.html?id=b_book_leather
b_177|/fb/bookmarkusb/imgs/books/book_library.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_library.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_library.png|$40.177|desc_177|supplier_177|/fb/bookmarkusb/index.html?id=b_book_library
b_178|/fb/bookmarkusb/imgs/books/book_library2.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_library2.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_library2.png|$40.178|desc_178|supplier_178|/fb/bookmarkusb/index.html?id=b_book_library2
b_179|/fb/bookmarkusb/imgs/books/book_library3.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_library3.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_library3.png|$40.179|desc_179|supplier_179|/fb/bookmarkusb/index.html?id=b_book_library3
b_180|/fb/bookmarkusb/imgs/books/book_magazines.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_magazines.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_magazines.png|$40.180|desc_180|supplier_180|/fb/bookmarkusb/index.html?id=b_book_magazines
b_181|/fb/bookmarkusb/imgs/books/book_map_glases.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_map_glases.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_map_glases.png|$40.181|desc_181|supplier_181|/fb/bookmarkusb/index.html?id=b_book_map_glases
b_182|/fb/bookmarkusb/imgs/books/book_myst.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_myst.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_myst.png|$40.182|desc_182|supplier_182|/fb/bookmarkusb/index.html?id=b_book_myst
b_183|/fb/bookmarkusb/imgs/books/book_pageflip2.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_pageflip2.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_pageflip2.png|$40.183|desc_183|supplier_183|/fb/bookmarkusb/index.html?id=b_book_pageflip2
b_184|/fb/bookmarkusb/imgs/books/book_pageflips.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_pageflips.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_pageflips.png|$40.184|desc_184|supplier_184|/fb/bookmarkusb/index.html?id=b_book_pageflips
b_185|/fb/bookmarkusb/imgs/books/book_papers.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_papers.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_papers.png|$40.185|desc_185|supplier_185|/fb/bookmarkusb/index.html?id=b_book_papers
b_186|/fb/bookmarkusb/imgs/books/book_quill.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_quill.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_quill.png|$40.186|desc_186|supplier_186|/fb/bookmarkusb/index.html?id=b_book_quill
b_187|/fb/bookmarkusb/imgs/books/book_quill2.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_quill2.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_quill2.png|$40.187|desc_187|supplier_187|/fb/bookmarkusb/index.html?id=b_book_quill2
b_188|/fb/bookmarkusb/imgs/books/book_quill_blankpages.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_quill_blankpages.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_quill_blankpages.png|$40.188|desc_188|supplier_188|/fb/bookmarkusb/index.html?id=b_book_quill_blankpages
b_189|/fb/bookmarkusb/imgs/books/book_quill_rose.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_quill_rose.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_quill_rose.png|$40.189|desc_189|supplier_189|/fb/bookmarkusb/index.html?id=b_book_quill_rose
b_190|/fb/bookmarkusb/imgs/books/book_shelf.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_shelf.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_shelf.png|$40.190|desc_190|supplier_190|/fb/bookmarkusb/index.html?id=b_book_shelf
b_191|/fb/bookmarkusb/imgs/books/book_shelfset.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_shelfset.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_shelfset.png|$40.191|desc_191|supplier_191|/fb/bookmarkusb/index.html?id=b_book_shelfset
b_192|/fb/bookmarkusb/imgs/books/book_shelves.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_shelves.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_shelves.png|$40.192|desc_192|supplier_192|/fb/bookmarkusb/index.html?id=b_book_shelves
b_193|/fb/bookmarkusb/imgs/books/book_stacks.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_stacks.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_stacks.png|$40.193|desc_193|supplier_193|/fb/bookmarkusb/index.html?id=b_book_stacks
b_194|/fb/bookmarkusb/imgs/books/book_stacks2.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_stacks2.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_stacks2.png|$40.194|desc_194|supplier_194|/fb/bookmarkusb/index.html?id=b_book_stacks2
b_195|/fb/bookmarkusb/imgs/books/book_vintage.jpg|/fb/bookmarkusb/imgs/books/tn/tn_book_vintage.png|/fb/bookmarkusbimgs/bookspages/tn/tn_book_vintage.png|$40.195|desc_195|supplier_195|/fb/bookmarkusb/index.html?id=b_book_vintage
b_196|/fb/bookmarkusb/imgs/books/books_pick.jpg|/fb/bookmarkusb/imgs/books/tn/tn_books_pick.png|/fb/bookmarkusbimgs/bookspages/tn/tn_books_pick.png|$40.196|desc_196|supplier_196|/fb/bookmarkusb/index.html?id=b_books_pick
b_197|/fb/bookmarkusb/imgs/books/btn_pick.jpg|/fb/bookmarkusb/imgs/books/tn/tn_btn_pick.png|/fb/bookmarkusbimgs/bookspages/tn/tn_btn_pick.png|$40.197|desc_197|supplier_197|/fb/bookmarkusb/index.html?id=b_btn_pick
b_198|/fb/bookmarkusb/imgs/books/FCEsmvxXEAU5haz.jpg|/fb/bookmarkusb/imgs/books/tn/tn_FCEsmvxXEAU5haz.png|/fb/bookmarkusbimgs/bookspages/tn/tn_FCEsmvxXEAU5haz.png|$40.198|desc_198|supplier_198|/fb/bookmarkusb/index.html?id=b_FCEsmvxXEAU5haz
b_199|/fb/bookmarkusb/imgs/books/mlh23.jpg|/fb/bookmarkusb/imgs/books/tn/tn_mlh23.png|/fb/bookmarkusbimgs/bookspages/tn/tn_mlh23.png|$40.199|desc_199|supplier_199|/fb/bookmarkusb/index.html?id=b_mlh23
b_200|/fb/bookmarkusb/imgs/books/mlh24.jpg|/fb/bookmarkusb/imgs/books/tn/tn_mlh24.png|/fb/bookmarkusbimgs/bookspages/tn/tn_mlh24.png|$40.200|desc_200|supplier_200|/fb/bookmarkusb/index.html?id=b_mlh24
b_201|/fb/bookmarkusb/imgs/books/mlh25.jpg|/fb/bookmarkusb/imgs/books/tn/tn_mlh25.png|/fb/bookmarkusbimgs/bookspages/tn/tn_mlh25.png|$40.201|desc_201|supplier_201|/fb/bookmarkusb/index.html?id=b_mlh25
b_202|/fb/bookmarkusb/imgs/books/NRE_0233_0687641537_989ECM_N0072050NCAM00290_00_0LLJ02_800.jpg|/fb/bookmarkusb/imgs/books/tn/tn_NRE_0233_0687641537_989ECM_N0072050NCAM00290_00_0LLJ02_800.png|/fb/bookmarkusbimgs/bookspages/tn/tn_NRE_0233_0687641537_989ECM_N0072050NCAM00290_00_0LLJ02_800.png|$40.202|desc_202|supplier_202|/fb/bookmarkusb/index.html?id=b_NRE_0233_0687641537_989ECM_N0072050NCAM00290_00_0LLJ02_800
b_203|/fb/bookmarkusb/imgs/books/NRF_0233_0687641537_989EBY_N0072050NCAM00290_00_0LLJ02_800.jpg|/fb/bookmarkusb/imgs/books/tn/tn_NRF_0233_0687641537_989EBY_N0072050NCAM00290_00_0LLJ02_800.png|/fb/bookmarkusbimgs/bookspages/tn/tn_NRF_0233_0687641537_989EBY_N0072050NCAM00290_00_0LLJ02_800.png|$40.203|desc_203|supplier_203|/fb/bookmarkusb/index.html?id=b_NRF_0233_0687641537_989EBY_N0072050NCAM00290_00_0LLJ02_800
b_204|/fb/bookmarkusb/imgs/books/paper_canvas_550.jpg|/fb/bookmarkusb/imgs/books/tn/tn_paper_canvas_550.png|/fb/bookmarkusbimgs/bookspages/tn/tn_paper_canvas_550.png|$40.204|desc_204|supplier_204|/fb/bookmarkusb/index.html?id=b_paper_canvas_550
b_205|/fb/bookmarkusb/imgs/books/paper_ornate_550.jpg|/fb/bookmarkusb/imgs/books/tn/tn_paper_ornate_550.png|/fb/bookmarkusbimgs/bookspages/tn/tn_paper_ornate_550.png|$40.205|desc_205|supplier_205|/fb/bookmarkusb/index.html?id=b_paper_ornate_550
b_206|/fb/bookmarkusb/imgs/books/paper_quill_550.jpg|/fb/bookmarkusb/imgs/books/tn/tn_paper_quill_550.png|/fb/bookmarkusbimgs/bookspages/tn/tn_paper_quill_550.png|$40.206|desc_206|supplier_206|/fb/bookmarkusb/index.html?id=b_paper_quill_550
b_207|/fb/bookmarkusb/imgs/books/SC0_0234_0687741019_378ECM_N0072050SRLC16018_0000LMJ01_800.jpg|/fb/bookmarkusb/imgs/books/tn/tn_SC0_0234_0687741019_378ECM_N0072050SRLC16018_0000LMJ01_800.png|/fb/bookmarkusbimgs/bookspages/tn/tn_SC0_0234_0687741019_378ECM_N0072050SRLC16018_0000LMJ01_800.png|$40.207|desc_207|supplier_207|/fb/bookmarkusb/index.html?id=b_SC0_0234_0687741019_378ECM_N0072050SRLC16018_0000LMJ01_800
b_208|/fb/bookmarkusb/imgs/books/SC0_0234_0687741026_472ECM_N0072050SRLC16018_0000LMJ01_800.jpg|/fb/bookmarkusb/imgs/books/tn/tn_SC0_0234_0687741026_472ECM_N0072050SRLC16018_0000LMJ01_800.png|/fb/bookmarkusbimgs/bookspages/tn/tn_SC0_0234_0687741026_472ECM_N0072050SRLC16018_0000LMJ01_800.png|$40.208|desc_208|supplier_208|/fb/bookmarkusb/index.html?id=b_SC0_0234_0687741026_472ECM_N0072050SRLC16018_0000LMJ01_800
b_209|/fb/bookmarkusb/imgs/books/SC0_0235_0687800712_597ECM_N0072050SRLC16018_0000LMJ01_800.jpg|/fb/bookmarkusb/imgs/books/tn/tn_SC0_0235_0687800712_597ECM_N0072050SRLC16018_0000LMJ01_800.png|/fb/bookmarkusbimgs/bookspages/tn/tn_SC0_0235_0687800712_597ECM_N0072050SRLC16018_0000LMJ01_800.png|$40.209|desc_209|supplier_209|/fb/bookmarkusb/index.html?id=b_SC0_0235_0687800712_597ECM_N0072050SRLC16018_0000LMJ01_800
b_210|/fb/bookmarkusb/imgs/books/SC0_0235_0687800719_582ECM_N0072050SRLC16018_0000LMJ02_800.jpg|/fb/bookmarkusb/imgs/books/tn/tn_SC0_0235_0687800719_582ECM_N0072050SRLC16018_0000LMJ02_800.png|/fb/bookmarkusbimgs/bookspages/tn/tn_SC0_0235_0687800719_582ECM_N0072050SRLC16018_0000LMJ02_800.png|$40.210|desc_210|supplier_210|/fb/bookmarkusb/index.html?id=b_SC0_0235_0687800719_582ECM_N0072050SRLC16018_0000LMJ02_800
b_211|/fb/bookmarkusb/imgs/books/wen.jpg|/fb/bookmarkusb/imgs/books/tn/tn_wen.png|/fb/bookmarkusbimgs/bookspages/tn/tn_wen.png|$40.211|desc_211|supplier_211|/fb/bookmarkusb/index.html?id=b_wen
`;
// 5-
marks = `
u_83|/fb/bookmarkusb/imgs/marks/bookmark.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark.png|$20.83|usb_desc_83|usb_vender_83|/fb/bookmarkusb/index.html?id=bookmark
u_84|/fb/bookmarkusb/imgs/marks/bookmark01.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark01.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark01.png|$20.84|usb_desc_84|usb_vender_84|/fb/bookmarkusb/index.html?id=bookmark01
u_85|/fb/bookmarkusb/imgs/marks/bookmark02.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark02.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark02.png|$20.85|usb_desc_85|usb_vender_85|/fb/bookmarkusb/index.html?id=bookmark02
u_86|/fb/bookmarkusb/imgs/marks/bookmark03.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark03.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark03.png|$20.86|usb_desc_86|usb_vender_86|/fb/bookmarkusb/index.html?id=bookmark03
u_87|/fb/bookmarkusb/imgs/marks/bookmark04.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark04.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark04.png|$20.87|usb_desc_87|usb_vender_87|/fb/bookmarkusb/index.html?id=bookmark04
u_88|/fb/bookmarkusb/imgs/marks/bookmark05.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark05.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark05.png|$20.88|usb_desc_88|usb_vender_88|/fb/bookmarkusb/index.html?id=bookmark05
u_89|/fb/bookmarkusb/imgs/marks/bookmark06_patterns.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark06_patterns.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark06_patterns.png|$20.89|usb_desc_89|usb_vender_89|/fb/bookmarkusb/index.html?id=bookmark06_patterns
u_90|/fb/bookmarkusb/imgs/marks/bookmark07_corners.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark07_corners.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark07_corners.png|$20.90|usb_desc_90|usb_vender_90|/fb/bookmarkusb/index.html?id=bookmark07_corners
u_91|/fb/bookmarkusb/imgs/marks/bookmark08.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark08.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark08.png|$20.91|usb_desc_91|usb_vender_91|/fb/bookmarkusb/index.html?id=bookmark08
u_92|/fb/bookmarkusb/imgs/marks/bookmark09.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark09.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark09.png|$20.92|usb_desc_92|usb_vender_92|/fb/bookmarkusb/index.html?id=bookmark09
u_93|/fb/bookmarkusb/imgs/marks/bookmark10_zentangle.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark10_zentangle.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark10_zentangle.png|$20.93|usb_desc_93|usb_vender_93|/fb/bookmarkusb/index.html?id=bookmark10_zentangle
u_94|/fb/bookmarkusb/imgs/marks/bookmark11_butterflies.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark11_butterflies.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark11_butterflies.png|$20.94|usb_desc_94|usb_vender_94|/fb/bookmarkusb/index.html?id=bookmark11_butterflies
u_95|/fb/bookmarkusb/imgs/marks/bookmark12_book.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark12_book.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark12_book.png|$20.95|usb_desc_95|usb_vender_95|/fb/bookmarkusb/index.html?id=bookmark12_book
u_96|/fb/bookmarkusb/imgs/marks/bookmark12_metal.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark12_metal.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark12_metal.png|$20.96|usb_desc_96|usb_vender_96|/fb/bookmarkusb/index.html?id=bookmark12_metal
u_97|/fb/bookmarkusb/imgs/marks/bookmark13_ribbon.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark13_ribbon.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark13_ribbon.png|$20.97|usb_desc_97|usb_vender_97|/fb/bookmarkusb/index.html?id=bookmark13_ribbon
u_98|/fb/bookmarkusb/imgs/marks/bookmark15_circles.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark15_circles.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark15_circles.png|$20.98|usb_desc_98|usb_vender_98|/fb/bookmarkusb/index.html?id=bookmark15_circles
u_99|/fb/bookmarkusb/imgs/marks/bookmark16_card.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark16_card.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark16_card.png|$20.99|usb_desc_99|usb_vender_99|/fb/bookmarkusb/index.html?id=bookmark16_card
u_100|/fb/bookmarkusb/imgs/marks/bookmark16_resin.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark16_resin.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark16_resin.png|$20.100|usb_desc_100|usb_vender_100|/fb/bookmarkusb/index.html?id=bookmark16_resin
u_101|/fb/bookmarkusb/imgs/marks/bookmark17_screen.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark17_screen.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark17_screen.png|$20.101|usb_desc_101|usb_vender_101|/fb/bookmarkusb/index.html?id=bookmark17_screen
u_102|/fb/bookmarkusb/imgs/marks/bookmark18_cactus.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark18_cactus.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark18_cactus.png|$20.102|usb_desc_102|usb_vender_102|/fb/bookmarkusb/index.html?id=bookmark18_cactus
u_103|/fb/bookmarkusb/imgs/marks/bookmark20_amazon_wood.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark20_amazon_wood.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark20_amazon_wood.png|$20.103|usb_desc_103|usb_vender_103|/fb/bookmarkusb/index.html?id=bookmark20_amazon_wood
u_104|/fb/bookmarkusb/imgs/marks/bookmark21_engraved.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark21_engraved.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark21_engraved.png|$20.104|usb_desc_104|usb_vender_104|/fb/bookmarkusb/index.html?id=bookmark21_engraved
u_105|/fb/bookmarkusb/imgs/marks/bookmark22_hunt.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark22_hunt.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark22_hunt.png|$20.105|usb_desc_105|usb_vender_105|/fb/bookmarkusb/index.html?id=bookmark22_hunt
u_106|/fb/bookmarkusb/imgs/marks/bookmark23_design.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark23_design.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark23_design.png|$20.106|usb_desc_106|usb_vender_106|/fb/bookmarkusb/index.html?id=bookmark23_design
u_107|/fb/bookmarkusb/imgs/marks/bookmark23_watercolor.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark23_watercolor.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark23_watercolor.png|$20.107|usb_desc_107|usb_vender_107|/fb/bookmarkusb/index.html?id=bookmark23_watercolor
u_108|/fb/bookmarkusb/imgs/marks/bookmark24_classicladies.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark24_classicladies.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark24_classicladies.png|$20.108|usb_desc_108|usb_vender_108|/fb/bookmarkusb/index.html?id=bookmark24_classicladies
u_109|/fb/bookmarkusb/imgs/marks/bookmark25_handpainted.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark25_handpainted.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark25_handpainted.png|$20.109|usb_desc_109|usb_vender_109|/fb/bookmarkusb/index.html?id=bookmark25_handpainted
u_110|/fb/bookmarkusb/imgs/marks/bookmark26_katalin.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark26_katalin.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark26_katalin.png|$20.110|usb_desc_110|usb_vender_110|/fb/bookmarkusb/index.html?id=bookmark26_katalin
u_111|/fb/bookmarkusb/imgs/marks/bookmark27_dis.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark27_dis.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark27_dis.png|$20.111|usb_desc_111|usb_vender_111|/fb/bookmarkusb/index.html?id=bookmark27_dis
u_112|/fb/bookmarkusb/imgs/marks/bookmark31_fluffyheartz.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark31_fluffyheartz.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark31_fluffyheartz.png|$20.112|usb_desc_112|usb_vender_112|/fb/bookmarkusb/index.html?id=bookmark31_fluffyheartz
u_113|/fb/bookmarkusb/imgs/marks/bookmark31_ospry.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark31_ospry.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark31_ospry.png|$20.113|usb_desc_113|usb_vender_113|/fb/bookmarkusb/index.html?id=bookmark31_ospry
u_114|/fb/bookmarkusb/imgs/marks/bookmark32_emoji.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark32_emoji.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark32_emoji.png|$20.114|usb_desc_114|usb_vender_114|/fb/bookmarkusb/index.html?id=bookmark32_emoji
u_115|/fb/bookmarkusb/imgs/marks/bookmark32_holloween.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark32_holloween.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark32_holloween.png|$20.115|usb_desc_115|usb_vender_115|/fb/bookmarkusb/index.html?id=bookmark32_holloween
u_116|/fb/bookmarkusb/imgs/marks/bookmark34_sweetshop.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark34_sweetshop.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark34_sweetshop.png|$20.116|usb_desc_116|usb_vender_116|/fb/bookmarkusb/index.html?id=bookmark34_sweetshop
u_117|/fb/bookmarkusb/imgs/marks/bookmark36_bumblebee.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark36_bumblebee.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark36_bumblebee.png|$20.117|usb_desc_117|usb_vender_117|/fb/bookmarkusb/index.html?id=bookmark36_bumblebee
u_118|/fb/bookmarkusb/imgs/marks/bookmark36_cats.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark36_cats.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark36_cats.png|$20.118|usb_desc_118|usb_vender_118|/fb/bookmarkusb/index.html?id=bookmark36_cats
u_119|/fb/bookmarkusb/imgs/marks/bookmark36_dzenitahaj.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark36_dzenitahaj.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark36_dzenitahaj.png|$20.119|usb_desc_119|usb_vender_119|/fb/bookmarkusb/index.html?id=bookmark36_dzenitahaj
u_120|/fb/bookmarkusb/imgs/marks/bookmark38_memorial.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark38_memorial.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark38_memorial.png|$20.120|usb_desc_120|usb_vender_120|/fb/bookmarkusb/index.html?id=bookmark38_memorial
u_121|/fb/bookmarkusb/imgs/marks/bookmark39_steampunk.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark39_steampunk.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark39_steampunk.png|$20.121|usb_desc_121|usb_vender_121|/fb/bookmarkusb/index.html?id=bookmark39_steampunk
u_122|/fb/bookmarkusb/imgs/marks/bookmark40_katalin.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark40_katalin.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark40_katalin.png|$20.122|usb_desc_122|usb_vender_122|/fb/bookmarkusb/index.html?id=bookmark40_katalin
u_123|/fb/bookmarkusb/imgs/marks/bookmark41_oz.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark41_oz.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark41_oz.png|$20.123|usb_desc_123|usb_vender_123|/fb/bookmarkusb/index.html?id=bookmark41_oz
u_124|/fb/bookmarkusb/imgs/marks/bookmark42_christian.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark42_christian.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark42_christian.png|$20.124|usb_desc_124|usb_vender_124|/fb/bookmarkusb/index.html?id=bookmark42_christian
u_125|/fb/bookmarkusb/imgs/marks/bookmark44_nectansglen.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark44_nectansglen.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark44_nectansglen.png|$20.125|usb_desc_125|usb_vender_125|/fb/bookmarkusb/index.html?id=bookmark44_nectansglen
u_126|/fb/bookmarkusb/imgs/marks/bookmark45_paperclipbeads.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark45_paperclipbeads.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark45_paperclipbeads.png|$20.126|usb_desc_126|usb_vender_126|/fb/bookmarkusb/index.html?id=bookmark45_paperclipbeads
u_127|/fb/bookmarkusb/imgs/marks/bookmark50_red.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark50_red.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark50_red.png|$20.127|usb_desc_127|usb_vender_127|/fb/bookmarkusb/index.html?id=bookmark50_red
u_128|/fb/bookmarkusb/imgs/marks/bookmark51_booktop.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark51_booktop.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark51_booktop.png|$20.128|usb_desc_128|usb_vender_128|/fb/bookmarkusb/index.html?id=bookmark51_booktop
u_129|/fb/bookmarkusb/imgs/marks/bookmark_abcdef.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_abcdef.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_abcdef.png|$20.129|usb_desc_129|usb_vender_129|/fb/bookmarkusb/index.html?id=bookmark_abcdef
u_130|/fb/bookmarkusb/imgs/marks/bookmark_big.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_big.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_big.png|$20.130|usb_desc_130|usb_vender_130|/fb/bookmarkusb/index.html?id=bookmark_big
u_131|/fb/bookmarkusb/imgs/marks/bookmark_books.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_books.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_books.png|$20.131|usb_desc_131|usb_vender_131|/fb/bookmarkusb/index.html?id=bookmark_books
u_132|/fb/bookmarkusb/imgs/marks/bookmark_bronzehook.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_bronzehook.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_bronzehook.png|$20.132|usb_desc_132|usb_vender_132|/fb/bookmarkusb/index.html?id=bookmark_bronzehook
u_133|/fb/bookmarkusb/imgs/marks/bookmark_chain.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_chain.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_chain.png|$20.133|usb_desc_133|usb_vender_133|/fb/bookmarkusb/index.html?id=bookmark_chain
u_134|/fb/bookmarkusb/imgs/marks/bookmark_corners.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_corners.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_corners.png|$20.134|usb_desc_134|usb_vender_134|/fb/bookmarkusb/index.html?id=bookmark_corners
u_135|/fb/bookmarkusb/imgs/marks/bookmark_crochet.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_crochet.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_crochet.png|$20.135|usb_desc_135|usb_vender_135|/fb/bookmarkusb/index.html?id=bookmark_crochet
u_136|/fb/bookmarkusb/imgs/marks/bookmark_crochetcross.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_crochetcross.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_crochetcross.png|$20.136|usb_desc_136|usb_vender_136|/fb/bookmarkusb/index.html?id=bookmark_crochetcross
u_137|/fb/bookmarkusb/imgs/marks/bookmark_featherboxed.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_featherboxed.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_featherboxed.png|$20.137|usb_desc_137|usb_vender_137|/fb/bookmarkusb/index.html?id=bookmark_featherboxed
u_138|/fb/bookmarkusb/imgs/marks/bookmark_glowfeather.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_glowfeather.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_glowfeather.png|$20.138|usb_desc_138|usb_vender_138|/fb/bookmarkusb/index.html?id=bookmark_glowfeather
u_139|/fb/bookmarkusb/imgs/marks/bookmark_hundertwasser.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_hundertwasser.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_hundertwasser.png|$20.139|usb_desc_139|usb_vender_139|/fb/bookmarkusb/index.html?id=bookmark_hundertwasser
u_140|/fb/bookmarkusb/imgs/marks/bookmark_magnifiers.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_magnifiers.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_magnifiers.png|$20.140|usb_desc_140|usb_vender_140|/fb/bookmarkusb/index.html?id=bookmark_magnifiers
u_141|/fb/bookmarkusb/imgs/marks/bookmark_metal.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_metal.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_metal.png|$20.141|usb_desc_141|usb_vender_141|/fb/bookmarkusb/index.html?id=bookmark_metal
u_142|/fb/bookmarkusb/imgs/marks/bookmark_metal_jiazhenep.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_metal_jiazhenep.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_metal_jiazhenep.png|$20.142|usb_desc_142|usb_vender_142|/fb/bookmarkusb/index.html?id=bookmark_metal_jiazhenep
u_143|/fb/bookmarkusb/imgs/marks/bookmark_piikea.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_piikea.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_piikea.png|$20.143|usb_desc_143|usb_vender_143|/fb/bookmarkusb/index.html?id=bookmark_piikea
u_144|/fb/bookmarkusb/imgs/marks/bookmark_ribbon.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_ribbon.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_ribbon.png|$20.144|usb_desc_144|usb_vender_144|/fb/bookmarkusb/index.html?id=bookmark_ribbon
u_145|/fb/bookmarkusb/imgs/marks/bookmark_tasselfazhbary.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_tasselfazhbary.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_tasselfazhbary.png|$20.145|usb_desc_145|usb_vender_145|/fb/bookmarkusb/index.html?id=bookmark_tasselfazhbary
u_146|/fb/bookmarkusb/imgs/marks/bookmark_tassels.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_tassels.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_tassels.png|$20.146|usb_desc_146|usb_vender_146|/fb/bookmarkusb/index.html?id=bookmark_tassels
u_147|/fb/bookmarkusb/imgs/marks/bookmark_templets.jpg|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_templets.png|/fb/bookmarkusb/imgs/marks/tn/tn_bookmark_templets.png|$20.147|usb_desc_147|usb_vender_147|/fb/bookmarkusb/index.html?id=bookmark_templets
`;
usbs = `
u_1|/fb/bookmarkusb/imgs/usbs/usb01.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb01.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb01.png|$40.1|usb_desc_1|usb_vendor_1|/fb/bookmarkusb/index.html?id=usb01
u_2|/fb/bookmarkusb/imgs/usbs/usb02.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb02.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb02.png|$40.2|usb_desc_2|usb_vendor_2|/fb/bookmarkusb/index.html?id=usb02
u_3|/fb/bookmarkusb/imgs/usbs/usb03.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb03.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb03.png|$40.3|usb_desc_3|usb_vendor_3|/fb/bookmarkusb/index.html?id=usb03
u_4|/fb/bookmarkusb/imgs/usbs/usb04.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb04.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb04.png|$40.4|usb_desc_4|usb_vendor_4|/fb/bookmarkusb/index.html?id=usb04
u_5|/fb/bookmarkusb/imgs/usbs/usb05.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb05.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb05.png|$40.5|usb_desc_5|usb_vendor_5|/fb/bookmarkusb/index.html?id=usb05
u_6|/fb/bookmarkusb/imgs/usbs/usb10.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb10.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb10.png|$40.6|usb_desc_6|usb_vendor_6|/fb/bookmarkusb/index.html?id=usb10
u_7|/fb/bookmarkusb/imgs/usbs/usb11.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb11.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb11.png|$40.7|usb_desc_7|usb_vendor_7|/fb/bookmarkusb/index.html?id=usb11
u_8|/fb/bookmarkusb/imgs/usbs/usb13.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb13.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb13.png|$40.8|usb_desc_8|usb_vendor_8|/fb/bookmarkusb/index.html?id=usb13
u_9|/fb/bookmarkusb/imgs/usbs/usb14.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb14.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb14.png|$40.9|usb_desc_9|usb_vendor_9|/fb/bookmarkusb/index.html?id=usb14
u_10|/fb/bookmarkusb/imgs/usbs/usb_128gb.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_128gb.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_128gb.png|$40.10|usb_desc_10|usb_vendor_10|/fb/bookmarkusb/index.html?id=usb_128gb
u_11|/fb/bookmarkusb/imgs/usbs/usb_1tb_clip.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_1tb_clip.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_1tb_clip.png|$40.11|usb_desc_11|usb_vendor_11|/fb/bookmarkusb/index.html?id=usb_1tb_clip
u_12|/fb/bookmarkusb/imgs/usbs/usb_2gb.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_2gb.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_2gb.png|$40.12|usb_desc_12|usb_vendor_12|/fb/bookmarkusb/index.html?id=usb_2gb
u_13|/fb/bookmarkusb/imgs/usbs/usb_2tb_metal.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_2tb_metal.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_2tb_metal.png|$40.13|usb_desc_13|usb_vendor_13|/fb/bookmarkusb/index.html?id=usb_2tb_metal
u_14|/fb/bookmarkusb/imgs/usbs/usb_32gb_micro.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_32gb_micro.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_32gb_micro.png|$40.14|usb_desc_14|usb_vendor_14|/fb/bookmarkusb/index.html?id=usb_32gb_micro
u_15|/fb/bookmarkusb/imgs/usbs/usb_4gb_cards.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_4gb_cards.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_4gb_cards.png|$40.15|usb_desc_15|usb_vendor_15|/fb/bookmarkusb/index.html?id=usb_4gb_cards
u_16|/fb/bookmarkusb/imgs/usbs/usb_black.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_black.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_black.png|$40.16|usb_desc_16|usb_vendor_16|/fb/bookmarkusb/index.html?id=usb_black
u_17|/fb/bookmarkusb/imgs/usbs/usb_bottle.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_bottle.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_bottle.png|$40.17|usb_desc_17|usb_vendor_17|/fb/bookmarkusb/index.html?id=usb_bottle
u_18|/fb/bookmarkusb/imgs/usbs/usb_box.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_box.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_box.png|$40.18|usb_desc_18|usb_vendor_18|/fb/bookmarkusb/index.html?id=usb_box
u_19|/fb/bookmarkusb/imgs/usbs/usb_bullet.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_bullet.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_bullet.png|$40.19|usb_desc_19|usb_vendor_19|/fb/bookmarkusb/index.html?id=usb_bullet
u_20|/fb/bookmarkusb/imgs/usbs/usb_card3.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_card3.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_card3.png|$40.20|usb_desc_20|usb_vendor_20|/fb/bookmarkusb/index.html?id=usb_card3
u_21|/fb/bookmarkusb/imgs/usbs/usb_cards.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_cards.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_cards.png|$40.21|usb_desc_21|usb_vendor_21|/fb/bookmarkusb/index.html?id=usb_cards
u_22|/fb/bookmarkusb/imgs/usbs/usb_chocolate.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_chocolate.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_chocolate.png|$40.22|usb_desc_22|usb_vendor_22|/fb/bookmarkusb/index.html?id=usb_chocolate
u_23|/fb/bookmarkusb/imgs/usbs/usb_clip.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_clip.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_clip.png|$40.23|usb_desc_23|usb_vendor_23|/fb/bookmarkusb/index.html?id=usb_clip
u_24|/fb/bookmarkusb/imgs/usbs/usb_clips.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_clips.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_clips.png|$40.24|usb_desc_24|usb_vendor_24|/fb/bookmarkusb/index.html?id=usb_clips
u_25|/fb/bookmarkusb/imgs/usbs/usb_crystal.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_crystal.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_crystal.png|$40.25|usb_desc_25|usb_vendor_25|/fb/bookmarkusb/index.html?id=usb_crystal
u_26|/fb/bookmarkusb/imgs/usbs/usb_diagram.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_diagram.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_diagram.png|$40.26|usb_desc_26|usb_vendor_26|/fb/bookmarkusb/index.html?id=usb_diagram
u_27|/fb/bookmarkusb/imgs/usbs/usb_donut.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_donut.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_donut.png|$40.27|usb_desc_27|usb_vendor_27|/fb/bookmarkusb/index.html?id=usb_donut
u_28|/fb/bookmarkusb/imgs/usbs/usb_dual128gb.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_dual128gb.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_dual128gb.png|$40.28|usb_desc_28|usb_vendor_28|/fb/bookmarkusb/index.html?id=usb_dual128gb
u_29|/fb/bookmarkusb/imgs/usbs/usb_eagledager.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_eagledager.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_eagledager.png|$40.29|usb_desc_29|usb_vendor_29|/fb/bookmarkusb/index.html?id=usb_eagledager
u_30|/fb/bookmarkusb/imgs/usbs/usb_expandable.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_expandable.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_expandable.png|$40.30|usb_desc_30|usb_vendor_30|/fb/bookmarkusb/index.html?id=usb_expandable
u_31|/fb/bookmarkusb/imgs/usbs/usb_goldbar.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_goldbar.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_goldbar.png|$40.31|usb_desc_31|usb_vendor_31|/fb/bookmarkusb/index.html?id=usb_goldbar
u_32|/fb/bookmarkusb/imgs/usbs/usb_goldbar2.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_goldbar2.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_goldbar2.png|$40.32|usb_desc_32|usb_vendor_32|/fb/bookmarkusb/index.html?id=usb_goldbar2
u_33|/fb/bookmarkusb/imgs/usbs/usb_goldbars.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_goldbars.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_goldbars.png|$40.33|usb_desc_33|usb_vendor_33|/fb/bookmarkusb/index.html?id=usb_goldbars
u_34|/fb/bookmarkusb/imgs/usbs/usb_gorilla3_64gb.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_gorilla3_64gb.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_gorilla3_64gb.png|$40.34|usb_desc_34|usb_vendor_34|/fb/bookmarkusb/index.html?id=usb_gorilla3_64gb
u_35|/fb/bookmarkusb/imgs/usbs/usb_guitar.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_guitar.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_guitar.png|$40.35|usb_desc_35|usb_vendor_35|/fb/bookmarkusb/index.html?id=usb_guitar
u_36|/fb/bookmarkusb/imgs/usbs/usb_heart.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_heart.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_heart.png|$40.36|usb_desc_36|usb_vendor_36|/fb/bookmarkusb/index.html?id=usb_heart
u_37|/fb/bookmarkusb/imgs/usbs/usb_hellmans.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_hellmans.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_hellmans.png|$40.37|usb_desc_37|usb_vendor_37|/fb/bookmarkusb/index.html?id=usb_hellmans
u_38|/fb/bookmarkusb/imgs/usbs/usb_hp.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_hp.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_hp.png|$40.38|usb_desc_38|usb_vendor_38|/fb/bookmarkusb/index.html?id=usb_hp
u_39|/fb/bookmarkusb/imgs/usbs/usb_ipad.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_ipad.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_ipad.png|$40.39|usb_desc_39|usb_vendor_39|/fb/bookmarkusb/index.html?id=usb_ipad
u_40|/fb/bookmarkusb/imgs/usbs/usb_ironman.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_ironman.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_ironman.png|$40.40|usb_desc_40|usb_vendor_40|/fb/bookmarkusb/index.html?id=usb_ironman
u_41|/fb/bookmarkusb/imgs/usbs/usb_key.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_key.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_key.png|$40.41|usb_desc_41|usb_vendor_41|/fb/bookmarkusb/index.html?id=usb_key
u_42|/fb/bookmarkusb/imgs/usbs/usb_key_gadgetsin.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_key_gadgetsin.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_key_gadgetsin.png|$40.42|usb_desc_42|usb_vendor_42|/fb/bookmarkusb/index.html?id=usb_key_gadgetsin
u_43|/fb/bookmarkusb/imgs/usbs/usb_keyboard.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_keyboard.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_keyboard.png|$40.43|usb_desc_43|usb_vendor_43|/fb/bookmarkusb/index.html?id=usb_keyboard
u_44|/fb/bookmarkusb/imgs/usbs/usb_keys.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_keys.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_keys.png|$40.44|usb_desc_44|usb_vendor_44|/fb/bookmarkusb/index.html?id=usb_keys
u_45|/fb/bookmarkusb/imgs/usbs/usb_kootion10.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_kootion10.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_kootion10.png|$40.45|usb_desc_45|usb_vendor_45|/fb/bookmarkusb/index.html?id=usb_kootion10
u_46|/fb/bookmarkusb/imgs/usbs/usb_korea.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_korea.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_korea.png|$40.46|usb_desc_46|usb_vendor_46|/fb/bookmarkusb/index.html?id=usb_korea
u_47|/fb/bookmarkusb/imgs/usbs/usb_led_16gb.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_led_16gb.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_led_16gb.png|$40.47|usb_desc_47|usb_vendor_47|/fb/bookmarkusb/index.html?id=usb_led_16gb
u_48|/fb/bookmarkusb/imgs/usbs/usb_lipstick.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_lipstick.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_lipstick.png|$40.48|usb_desc_48|usb_vendor_48|/fb/bookmarkusb/index.html?id=usb_lipstick
u_49|/fb/bookmarkusb/imgs/usbs/usb_lock.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_lock.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_lock.png|$40.49|usb_desc_49|usb_vendor_49|/fb/bookmarkusb/index.html?id=usb_lock
u_50|/fb/bookmarkusb/imgs/usbs/usb_lonygus.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_lonygus.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_lonygus.png|$40.50|usb_desc_50|usb_vendor_50|/fb/bookmarkusb/index.html?id=usb_lonygus
u_51|/fb/bookmarkusb/imgs/usbs/usb_ninja.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_ninja.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_ninja.png|$40.51|usb_desc_51|usb_vendor_51|/fb/bookmarkusb/index.html?id=usb_ninja
u_52|/fb/bookmarkusb/imgs/usbs/usb_pc.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_pc.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_pc.png|$40.52|usb_desc_52|usb_vendor_52|/fb/bookmarkusb/index.html?id=usb_pc
u_53|/fb/bookmarkusb/imgs/usbs/usb_pen.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_pen.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_pen.png|$40.53|usb_desc_53|usb_vendor_53|/fb/bookmarkusb/index.html?id=usb_pen
u_54|/fb/bookmarkusb/imgs/usbs/usb_ports.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_ports.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_ports.png|$40.54|usb_desc_54|usb_vendor_54|/fb/bookmarkusb/index.html?id=usb_ports
u_55|/fb/bookmarkusb/imgs/usbs/usb_recycle.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_recycle.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_recycle.png|$40.55|usb_desc_55|usb_vendor_55|/fb/bookmarkusb/index.html?id=usb_recycle
u_56|/fb/bookmarkusb/imgs/usbs/usb_samsung64gb.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_samsung64gb.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_samsung64gb.png|$40.56|usb_desc_56|usb_vendor_56|/fb/bookmarkusb/index.html?id=usb_samsung64gb
u_57|/fb/bookmarkusb/imgs/usbs/usb_sandisk16gb.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_sandisk16gb.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_sandisk16gb.png|$40.57|usb_desc_57|usb_vendor_57|/fb/bookmarkusb/index.html?id=usb_sandisk16gb
u_58|/fb/bookmarkusb/imgs/usbs/usb_sandiskpc.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_sandiskpc.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_sandiskpc.png|$40.58|usb_desc_58|usb_vendor_58|/fb/bookmarkusb/index.html?id=usb_sandiskpc
u_59|/fb/bookmarkusb/imgs/usbs/usb_sdholder.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_sdholder.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_sdholder.png|$40.59|usb_desc_59|usb_vendor_59|/fb/bookmarkusb/index.html?id=usb_sdholder
u_60|/fb/bookmarkusb/imgs/usbs/usb_shippingcontainer.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_shippingcontainer.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_shippingcontainer.png|$40.60|usb_desc_60|usb_vendor_60|/fb/bookmarkusb/index.html?id=usb_shippingcontainer
u_61|/fb/bookmarkusb/imgs/usbs/usb_startrek.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_startrek.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_startrek.png|$40.61|usb_desc_61|usb_vendor_61|/fb/bookmarkusb/index.html?id=usb_startrek
u_62|/fb/bookmarkusb/imgs/usbs/usb_steampunk.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_steampunk.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_steampunk.png|$40.62|usb_desc_62|usb_vendor_62|/fb/bookmarkusb/index.html?id=usb_steampunk
u_63|/fb/bookmarkusb/imgs/usbs/usb_steampunk2.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_steampunk2.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_steampunk2.png|$40.63|usb_desc_63|usb_vendor_63|/fb/bookmarkusb/index.html?id=usb_steampunk2
u_64|/fb/bookmarkusb/imgs/usbs/usb_steampunk3.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_steampunk3.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_steampunk3.png|$40.64|usb_desc_64|usb_vendor_64|/fb/bookmarkusb/index.html?id=usb_steampunk3
u_65|/fb/bookmarkusb/imgs/usbs/usb_steampunk5.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_steampunk5.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_steampunk5.png|$40.65|usb_desc_65|usb_vendor_65|/fb/bookmarkusb/index.html?id=usb_steampunk5
u_66|/fb/bookmarkusb/imgs/usbs/usb_steampunk6.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_steampunk6.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_steampunk6.png|$40.66|usb_desc_66|usb_vendor_66|/fb/bookmarkusb/index.html?id=usb_steampunk6
u_67|/fb/bookmarkusb/imgs/usbs/usb_swissarmy.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_swissarmy.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_swissarmy.png|$40.67|usb_desc_67|usb_vendor_67|/fb/bookmarkusb/index.html?id=usb_swissarmy
u_68|/fb/bookmarkusb/imgs/usbs/usb_tedybear.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_tedybear.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_tedybear.png|$40.68|usb_desc_68|usb_vendor_68|/fb/bookmarkusb/index.html?id=usb_tedybear
u_69|/fb/bookmarkusb/imgs/usbs/usb_tgifts.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_tgifts.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_tgifts.png|$40.69|usb_desc_69|usb_vendor_69|/fb/bookmarkusb/index.html?id=usb_tgifts
u_70|/fb/bookmarkusb/imgs/usbs/usb_thumb.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_thumb.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_thumb.png|$40.70|usb_desc_70|usb_vendor_70|/fb/bookmarkusb/index.html?id=usb_thumb
u_71|/fb/bookmarkusb/imgs/usbs/usb_tin.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_tin.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_tin.png|$40.71|usb_desc_71|usb_vendor_71|/fb/bookmarkusb/index.html?id=usb_tin
u_72|/fb/bookmarkusb/imgs/usbs/usb_toaster.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_toaster.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_toaster.png|$40.72|usb_desc_72|usb_vendor_72|/fb/bookmarkusb/index.html?id=usb_toaster
u_73|/fb/bookmarkusb/imgs/usbs/usb_toshiba.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_toshiba.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_toshiba.png|$40.73|usb_desc_73|usb_vendor_73|/fb/bookmarkusb/index.html?id=usb_toshiba
u_74|/fb/bookmarkusb/imgs/usbs/usb_tube.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_tube.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_tube.png|$40.74|usb_desc_74|usb_vendor_74|/fb/bookmarkusb/index.html?id=usb_tube
u_75|/fb/bookmarkusb/imgs/usbs/usb_wangcc.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_wangcc.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_wangcc.png|$40.75|usb_desc_75|usb_vendor_75|/fb/bookmarkusb/index.html?id=usb_wangcc
u_76|/fb/bookmarkusb/imgs/usbs/usb_watch.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_watch.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_watch.png|$40.76|usb_desc_76|usb_vendor_76|/fb/bookmarkusb/index.html?id=usb_watch
u_77|/fb/bookmarkusb/imgs/usbs/usb_windows10.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_windows10.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_windows10.png|$40.77|usb_desc_77|usb_vendor_77|/fb/bookmarkusb/index.html?id=usb_windows10
u_78|/fb/bookmarkusb/imgs/usbs/usb_wood.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_wood.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_wood.png|$40.78|usb_desc_78|usb_vendor_78|/fb/bookmarkusb/index.html?id=usb_wood
u_79|/fb/bookmarkusb/imgs/usbs/usb_wood3.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_wood3.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_wood3.png|$40.79|usb_desc_79|usb_vendor_79|/fb/bookmarkusb/index.html?id=usb_wood3
u_80|/fb/bookmarkusb/imgs/usbs/usb_woodbook.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_woodbook.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_woodbook.png|$40.80|usb_desc_80|usb_vendor_80|/fb/bookmarkusb/index.html?id=usb_woodbook
u_81|/fb/bookmarkusb/imgs/usbs/usb_woodbox.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_woodbox.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_woodbox.png|$40.81|usb_desc_81|usb_vendor_81|/fb/bookmarkusb/index.html?id=usb_woodbox
u_82|/fb/bookmarkusb/imgs/usbs/usb_yoda.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_yoda.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_yoda.png|$40.82|usb_desc_82|usb_vendor_82|/fb/bookmarkusb/index.html?id=usb_yoda
u_345|/fb/bookmarkusb/imgs/usbs/usb01.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb01.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb01.png|$40.345|usb_desc_345|usb_vendor_345|/fb/bookmarkusb/index.html?id=usb01
u_346|/fb/bookmarkusb/imgs/usbs/usb02.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb02.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb02.png|$40.346|usb_desc_346|usb_vendor_346|/fb/bookmarkusb/index.html?id=usb02
u_347|/fb/bookmarkusb/imgs/usbs/usb03.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb03.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb03.png|$40.347|usb_desc_347|usb_vendor_347|/fb/bookmarkusb/index.html?id=usb03
u_348|/fb/bookmarkusb/imgs/usbs/usb04.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb04.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb04.png|$40.348|usb_desc_348|usb_vendor_348|/fb/bookmarkusb/index.html?id=usb04
u_349|/fb/bookmarkusb/imgs/usbs/usb05.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb05.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb05.png|$40.349|usb_desc_349|usb_vendor_349|/fb/bookmarkusb/index.html?id=usb05
u_350|/fb/bookmarkusb/imgs/usbs/usb10.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb10.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb10.png|$40.350|usb_desc_350|usb_vendor_350|/fb/bookmarkusb/index.html?id=usb10
u_351|/fb/bookmarkusb/imgs/usbs/usb11.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb11.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb11.png|$40.351|usb_desc_351|usb_vendor_351|/fb/bookmarkusb/index.html?id=usb11
u_352|/fb/bookmarkusb/imgs/usbs/usb13.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb13.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb13.png|$40.352|usb_desc_352|usb_vendor_352|/fb/bookmarkusb/index.html?id=usb13
u_353|/fb/bookmarkusb/imgs/usbs/usb14.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb14.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb14.png|$40.353|usb_desc_353|usb_vendor_353|/fb/bookmarkusb/index.html?id=usb14
u_354|/fb/bookmarkusb/imgs/usbs/usb_128gb.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_128gb.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_128gb.png|$40.354|usb_desc_354|usb_vendor_354|/fb/bookmarkusb/index.html?id=usb_128gb
u_355|/fb/bookmarkusb/imgs/usbs/usb_1tb_clip.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_1tb_clip.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_1tb_clip.png|$40.355|usb_desc_355|usb_vendor_355|/fb/bookmarkusb/index.html?id=usb_1tb_clip
u_356|/fb/bookmarkusb/imgs/usbs/usb_2gb.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_2gb.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_2gb.png|$40.356|usb_desc_356|usb_vendor_356|/fb/bookmarkusb/index.html?id=usb_2gb
u_357|/fb/bookmarkusb/imgs/usbs/usb_2tb_metal.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_2tb_metal.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_2tb_metal.png|$40.357|usb_desc_357|usb_vendor_357|/fb/bookmarkusb/index.html?id=usb_2tb_metal
u_358|/fb/bookmarkusb/imgs/usbs/usb_32gb_micro.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_32gb_micro.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_32gb_micro.png|$40.358|usb_desc_358|usb_vendor_358|/fb/bookmarkusb/index.html?id=usb_32gb_micro
u_359|/fb/bookmarkusb/imgs/usbs/usb_4gb_cards.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_4gb_cards.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_4gb_cards.png|$40.359|usb_desc_359|usb_vendor_359|/fb/bookmarkusb/index.html?id=usb_4gb_cards
u_360|/fb/bookmarkusb/imgs/usbs/usb_black.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_black.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_black.png|$40.360|usb_desc_360|usb_vendor_360|/fb/bookmarkusb/index.html?id=usb_black
u_361|/fb/bookmarkusb/imgs/usbs/usb_bottle.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_bottle.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_bottle.png|$40.361|usb_desc_361|usb_vendor_361|/fb/bookmarkusb/index.html?id=usb_bottle
u_362|/fb/bookmarkusb/imgs/usbs/usb_box.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_box.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_box.png|$40.362|usb_desc_362|usb_vendor_362|/fb/bookmarkusb/index.html?id=usb_box
u_363|/fb/bookmarkusb/imgs/usbs/usb_bullet.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_bullet.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_bullet.png|$40.363|usb_desc_363|usb_vendor_363|/fb/bookmarkusb/index.html?id=usb_bullet
u_364|/fb/bookmarkusb/imgs/usbs/usb_card3.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_card3.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_card3.png|$40.364|usb_desc_364|usb_vendor_364|/fb/bookmarkusb/index.html?id=usb_card3
u_365|/fb/bookmarkusb/imgs/usbs/usb_cards.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_cards.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_cards.png|$40.365|usb_desc_365|usb_vendor_365|/fb/bookmarkusb/index.html?id=usb_cards
u_366|/fb/bookmarkusb/imgs/usbs/usb_chocolate.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_chocolate.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_chocolate.png|$40.366|usb_desc_366|usb_vendor_366|/fb/bookmarkusb/index.html?id=usb_chocolate
u_367|/fb/bookmarkusb/imgs/usbs/usb_clip.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_clip.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_clip.png|$40.367|usb_desc_367|usb_vendor_367|/fb/bookmarkusb/index.html?id=usb_clip
u_368|/fb/bookmarkusb/imgs/usbs/usb_clips.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_clips.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_clips.png|$40.368|usb_desc_368|usb_vendor_368|/fb/bookmarkusb/index.html?id=usb_clips
u_369|/fb/bookmarkusb/imgs/usbs/usb_crystal.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_crystal.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_crystal.png|$40.369|usb_desc_369|usb_vendor_369|/fb/bookmarkusb/index.html?id=usb_crystal
u_370|/fb/bookmarkusb/imgs/usbs/usb_diagram.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_diagram.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_diagram.png|$40.370|usb_desc_370|usb_vendor_370|/fb/bookmarkusb/index.html?id=usb_diagram
u_371|/fb/bookmarkusb/imgs/usbs/usb_donut.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_donut.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_donut.png|$40.371|usb_desc_371|usb_vendor_371|/fb/bookmarkusb/index.html?id=usb_donut
u_372|/fb/bookmarkusb/imgs/usbs/usb_dual128gb.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_dual128gb.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_dual128gb.png|$40.372|usb_desc_372|usb_vendor_372|/fb/bookmarkusb/index.html?id=usb_dual128gb
u_373|/fb/bookmarkusb/imgs/usbs/usb_eagledager.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_eagledager.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_eagledager.png|$40.373|usb_desc_373|usb_vendor_373|/fb/bookmarkusb/index.html?id=usb_eagledager
u_374|/fb/bookmarkusb/imgs/usbs/usb_expandable.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_expandable.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_expandable.png|$40.374|usb_desc_374|usb_vendor_374|/fb/bookmarkusb/index.html?id=usb_expandable
u_375|/fb/bookmarkusb/imgs/usbs/usb_goldbar.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_goldbar.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_goldbar.png|$40.375|usb_desc_375|usb_vendor_375|/fb/bookmarkusb/index.html?id=usb_goldbar
u_376|/fb/bookmarkusb/imgs/usbs/usb_goldbar2.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_goldbar2.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_goldbar2.png|$40.376|usb_desc_376|usb_vendor_376|/fb/bookmarkusb/index.html?id=usb_goldbar2
u_377|/fb/bookmarkusb/imgs/usbs/usb_goldbars.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_goldbars.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_goldbars.png|$40.377|usb_desc_377|usb_vendor_377|/fb/bookmarkusb/index.html?id=usb_goldbars
u_378|/fb/bookmarkusb/imgs/usbs/usb_gorilla3_64gb.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_gorilla3_64gb.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_gorilla3_64gb.png|$40.378|usb_desc_378|usb_vendor_378|/fb/bookmarkusb/index.html?id=usb_gorilla3_64gb
u_379|/fb/bookmarkusb/imgs/usbs/usb_guitar.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_guitar.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_guitar.png|$40.379|usb_desc_379|usb_vendor_379|/fb/bookmarkusb/index.html?id=usb_guitar
u_380|/fb/bookmarkusb/imgs/usbs/usb_heart.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_heart.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_heart.png|$40.380|usb_desc_380|usb_vendor_380|/fb/bookmarkusb/index.html?id=usb_heart
u_381|/fb/bookmarkusb/imgs/usbs/usb_hellmans.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_hellmans.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_hellmans.png|$40.381|usb_desc_381|usb_vendor_381|/fb/bookmarkusb/index.html?id=usb_hellmans
u_382|/fb/bookmarkusb/imgs/usbs/usb_hp.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_hp.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_hp.png|$40.382|usb_desc_382|usb_vendor_382|/fb/bookmarkusb/index.html?id=usb_hp
u_383|/fb/bookmarkusb/imgs/usbs/usb_ipad.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_ipad.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_ipad.png|$40.383|usb_desc_383|usb_vendor_383|/fb/bookmarkusb/index.html?id=usb_ipad
u_384|/fb/bookmarkusb/imgs/usbs/usb_ironman.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_ironman.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_ironman.png|$40.384|usb_desc_384|usb_vendor_384|/fb/bookmarkusb/index.html?id=usb_ironman
u_385|/fb/bookmarkusb/imgs/usbs/usb_key.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_key.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_key.png|$40.385|usb_desc_385|usb_vendor_385|/fb/bookmarkusb/index.html?id=usb_key
u_386|/fb/bookmarkusb/imgs/usbs/usb_key_gadgetsin.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_key_gadgetsin.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_key_gadgetsin.png|$40.386|usb_desc_386|usb_vendor_386|/fb/bookmarkusb/index.html?id=usb_key_gadgetsin
u_387|/fb/bookmarkusb/imgs/usbs/usb_keyboard.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_keyboard.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_keyboard.png|$40.387|usb_desc_387|usb_vendor_387|/fb/bookmarkusb/index.html?id=usb_keyboard
u_388|/fb/bookmarkusb/imgs/usbs/usb_keys.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_keys.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_keys.png|$40.388|usb_desc_388|usb_vendor_388|/fb/bookmarkusb/index.html?id=usb_keys
u_389|/fb/bookmarkusb/imgs/usbs/usb_kootion10.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_kootion10.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_kootion10.png|$40.389|usb_desc_389|usb_vendor_389|/fb/bookmarkusb/index.html?id=usb_kootion10
u_390|/fb/bookmarkusb/imgs/usbs/usb_korea.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_korea.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_korea.png|$40.390|usb_desc_390|usb_vendor_390|/fb/bookmarkusb/index.html?id=usb_korea
u_391|/fb/bookmarkusb/imgs/usbs/usb_led_16gb.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_led_16gb.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_led_16gb.png|$40.391|usb_desc_391|usb_vendor_391|/fb/bookmarkusb/index.html?id=usb_led_16gb
u_392|/fb/bookmarkusb/imgs/usbs/usb_lipstick.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_lipstick.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_lipstick.png|$40.392|usb_desc_392|usb_vendor_392|/fb/bookmarkusb/index.html?id=usb_lipstick
u_393|/fb/bookmarkusb/imgs/usbs/usb_lock.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_lock.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_lock.png|$40.393|usb_desc_393|usb_vendor_393|/fb/bookmarkusb/index.html?id=usb_lock
u_394|/fb/bookmarkusb/imgs/usbs/usb_lonygus.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_lonygus.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_lonygus.png|$40.394|usb_desc_394|usb_vendor_394|/fb/bookmarkusb/index.html?id=usb_lonygus
u_395|/fb/bookmarkusb/imgs/usbs/usb_ninja.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_ninja.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_ninja.png|$40.395|usb_desc_395|usb_vendor_395|/fb/bookmarkusb/index.html?id=usb_ninja
u_396|/fb/bookmarkusb/imgs/usbs/usb_pc.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_pc.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_pc.png|$40.396|usb_desc_396|usb_vendor_396|/fb/bookmarkusb/index.html?id=usb_pc
u_397|/fb/bookmarkusb/imgs/usbs/usb_pen.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_pen.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_pen.png|$40.397|usb_desc_397|usb_vendor_397|/fb/bookmarkusb/index.html?id=usb_pen
u_398|/fb/bookmarkusb/imgs/usbs/usb_ports.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_ports.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_ports.png|$40.398|usb_desc_398|usb_vendor_398|/fb/bookmarkusb/index.html?id=usb_ports
u_399|/fb/bookmarkusb/imgs/usbs/usb_recycle.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_recycle.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_recycle.png|$40.399|usb_desc_399|usb_vendor_399|/fb/bookmarkusb/index.html?id=usb_recycle
u_400|/fb/bookmarkusb/imgs/usbs/usb_samsung64gb.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_samsung64gb.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_samsung64gb.png|$40.400|usb_desc_400|usb_vendor_400|/fb/bookmarkusb/index.html?id=usb_samsung64gb
u_401|/fb/bookmarkusb/imgs/usbs/usb_sandisk16gb.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_sandisk16gb.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_sandisk16gb.png|$40.401|usb_desc_401|usb_vendor_401|/fb/bookmarkusb/index.html?id=usb_sandisk16gb
u_402|/fb/bookmarkusb/imgs/usbs/usb_sandiskpc.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_sandiskpc.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_sandiskpc.png|$40.402|usb_desc_402|usb_vendor_402|/fb/bookmarkusb/index.html?id=usb_sandiskpc
u_403|/fb/bookmarkusb/imgs/usbs/usb_sdholder.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_sdholder.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_sdholder.png|$40.403|usb_desc_403|usb_vendor_403|/fb/bookmarkusb/index.html?id=usb_sdholder
u_404|/fb/bookmarkusb/imgs/usbs/usb_shippingcontainer.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_shippingcontainer.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_shippingcontainer.png|$40.404|usb_desc_404|usb_vendor_404|/fb/bookmarkusb/index.html?id=usb_shippingcontainer
u_405|/fb/bookmarkusb/imgs/usbs/usb_startrek.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_startrek.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_startrek.png|$40.405|usb_desc_405|usb_vendor_405|/fb/bookmarkusb/index.html?id=usb_startrek
u_406|/fb/bookmarkusb/imgs/usbs/usb_steampunk.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_steampunk.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_steampunk.png|$40.406|usb_desc_406|usb_vendor_406|/fb/bookmarkusb/index.html?id=usb_steampunk
u_407|/fb/bookmarkusb/imgs/usbs/usb_steampunk2.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_steampunk2.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_steampunk2.png|$40.407|usb_desc_407|usb_vendor_407|/fb/bookmarkusb/index.html?id=usb_steampunk2
u_408|/fb/bookmarkusb/imgs/usbs/usb_steampunk3.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_steampunk3.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_steampunk3.png|$40.408|usb_desc_408|usb_vendor_408|/fb/bookmarkusb/index.html?id=usb_steampunk3
u_409|/fb/bookmarkusb/imgs/usbs/usb_steampunk5.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_steampunk5.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_steampunk5.png|$40.409|usb_desc_409|usb_vendor_409|/fb/bookmarkusb/index.html?id=usb_steampunk5
u_410|/fb/bookmarkusb/imgs/usbs/usb_steampunk6.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_steampunk6.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_steampunk6.png|$40.410|usb_desc_410|usb_vendor_410|/fb/bookmarkusb/index.html?id=usb_steampunk6
u_411|/fb/bookmarkusb/imgs/usbs/usb_swissarmy.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_swissarmy.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_swissarmy.png|$40.411|usb_desc_411|usb_vendor_411|/fb/bookmarkusb/index.html?id=usb_swissarmy
u_412|/fb/bookmarkusb/imgs/usbs/usb_tedybear.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_tedybear.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_tedybear.png|$40.412|usb_desc_412|usb_vendor_412|/fb/bookmarkusb/index.html?id=usb_tedybear
u_413|/fb/bookmarkusb/imgs/usbs/usb_tgifts.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_tgifts.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_tgifts.png|$40.413|usb_desc_413|usb_vendor_413|/fb/bookmarkusb/index.html?id=usb_tgifts
u_414|/fb/bookmarkusb/imgs/usbs/usb_thumb.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_thumb.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_thumb.png|$40.414|usb_desc_414|usb_vendor_414|/fb/bookmarkusb/index.html?id=usb_thumb
u_415|/fb/bookmarkusb/imgs/usbs/usb_tin.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_tin.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_tin.png|$40.415|usb_desc_415|usb_vendor_415|/fb/bookmarkusb/index.html?id=usb_tin
u_416|/fb/bookmarkusb/imgs/usbs/usb_toaster.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_toaster.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_toaster.png|$40.416|usb_desc_416|usb_vendor_416|/fb/bookmarkusb/index.html?id=usb_toaster
u_417|/fb/bookmarkusb/imgs/usbs/usb_toshiba.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_toshiba.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_toshiba.png|$40.417|usb_desc_417|usb_vendor_417|/fb/bookmarkusb/index.html?id=usb_toshiba
u_418|/fb/bookmarkusb/imgs/usbs/usb_tube.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_tube.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_tube.png|$40.418|usb_desc_418|usb_vendor_418|/fb/bookmarkusb/index.html?id=usb_tube
u_419|/fb/bookmarkusb/imgs/usbs/usb_wangcc.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_wangcc.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_wangcc.png|$40.419|usb_desc_419|usb_vendor_419|/fb/bookmarkusb/index.html?id=usb_wangcc
u_420|/fb/bookmarkusb/imgs/usbs/usb_watch.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_watch.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_watch.png|$40.420|usb_desc_420|usb_vendor_420|/fb/bookmarkusb/index.html?id=usb_watch
u_421|/fb/bookmarkusb/imgs/usbs/usb_windows10.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_windows10.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_windows10.png|$40.421|usb_desc_421|usb_vendor_421|/fb/bookmarkusb/index.html?id=usb_windows10
u_422|/fb/bookmarkusb/imgs/usbs/usb_wood.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_wood.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_wood.png|$40.422|usb_desc_422|usb_vendor_422|/fb/bookmarkusb/index.html?id=usb_wood
u_423|/fb/bookmarkusb/imgs/usbs/usb_wood3.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_wood3.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_wood3.png|$40.423|usb_desc_423|usb_vendor_423|/fb/bookmarkusb/index.html?id=usb_wood3
u_424|/fb/bookmarkusb/imgs/usbs/usb_woodbook.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_woodbook.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_woodbook.png|$40.424|usb_desc_424|usb_vendor_424|/fb/bookmarkusb/index.html?id=usb_woodbook
u_425|/fb/bookmarkusb/imgs/usbs/usb_woodbox.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_woodbox.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_woodbox.png|$40.425|usb_desc_425|usb_vendor_425|/fb/bookmarkusb/index.html?id=usb_woodbox
u_426|/fb/bookmarkusb/imgs/usbs/usb_yoda.jpg|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_yoda.png|/fb/bookmarkusb/imgs/usbs/tn/tn_usb_yoda.png|$40.426|usb_desc_426|usb_vendor_426|/fb/bookmarkusb/index.html?id=usb_yoda
`;
htmout_books="";
htmout_marks="";
htmout_usbs="";
types="books marks usbs"
if( args == "books" ) { types="books"; }
if( args == "marks" ) { types="marks"; }
if( args == "usbs" ) { types="usbs"; }
// alert( "BUGS_3000 args="+args );
// alert( "BUGS_2700 types="+types );
types_len=types.split(" ").length;
// alert("BUGS_2701 types_len="+types_len);
j=0;
// alert( "BUGS_3100 TYPE bookmarkusb j="+j+" types="+types );
for( j=0; j<types_len; j++) {
type=types.split(" ")[j];
if( type == "" ) { continue; }
htmout=""; k=0;
var textlist=books;
if( type == "books" ) { textlist=books; }
if( type == "marks" ) { textlist=marks; }
if( type == "usbs" ) { textlist=usbs; }
// alert( "BUGS_3101 TYPELOOP bookmarkusb j="+j+" type="+type+" textlist="+textlist );
text_len=textlist.split("\n").length;
htmout="";
htmout += "<div id=div_bookmarkusb_"+type+">";
htmout += " <h1>"+type+"</h1>";
htmout += "<table id=table_"+type+">";
htmout += "<tr>";
htmout += "<td>id</td>";
htmout += "<td>url</td>";
htmout += "<td>amt</td>";
htmout += "<td>desc</td>";
htmout += "<td>supplier</td>";
htmout += "<td>link</td>";
for( j=0; j<text_len; j++ ) {
text=textlist.split("\n")[j];
if( text == "" ) { continue; }
// alert( "BUGS_2803 DATALOOP bookmarkusb j="+j+" text="+text );
id="id_b"+j;
// url="/fb/bookmarkusb/pages/zn/zn_1.jpg";
// tn="/imgs/btn/koeye.png";
// tn2="/fb/bookmarkusb/pages/tn/tn_1.png";
alt="alt_"+j;
amt="$100.00";
desc="desc_"+j;
id=text.split("|")[0];
url=text.split("|")[1];
// tn="/imgs/btn/koeye.png";
tn2=text.split("|")[2];
tn=text.split("|")[3];
alt=text.split("|")[3];
// tn=url;
// tn2=url;
amt=text.split("|")[4];
desc=text.split("|")[5];
supplier=text.split("|")[6];
link=text.split("|")[7];
/// alert( "BUGS_3434 url="+url+" tn2="+tn2 );
// htmout += "<a href="+url+" target=_blank>url</a><br>";
// htmout += "<img src="+url+" height=100><br>";
// htmout += "<a href="+tn+" target=_blank>tn</a><br>";
// htmout += "<img src="+tn+" height=50><br>";
// htmout += "<a href="+tn2+" target=_blank>tn2</a><br>";
// htmout += "<img src="+tn2+" height=40><br>";
htmout += "<tr>";
htmout += "<td>"+j+"</td>";
htmout += "<td>"
htmout+= " <a href="+url+" target=_blank class=\"popover\" >";
htmout += " <img src="+tn+" alt="+alt+" height=20>";
htmout += " <span><img src="+tn2+" alt="+alt+" height=200></span>";
htmout += " </a>";
// htmout += " <img src="+tn+" alt="+alt+" height=50>";
// htmout += " <img src="+tn2+" alt="+alt+" height=50>";
htmout += " </td>";
htmout += "<td>"+amt+"</td>";
htmout += "<td>"+desc+"</td>";
htmout += "<td>"+supplier+"</td>";
htmout += "<td>"+link+"</td>";
htmout += " </tr>";
k=k+1;
// alert( "BUGS_3500 j="+j+" url="+url+" tn="+tn+" tn2="+tn2 );
// if ( k==10 ) { k=0; htmout += "<br>\n"; }
}
htmout += " </table>";
htmout += " </div>";
// alert( "BUGS_2900 TYPETAIL j="+j+" type="+type );
divid="div_bookmarkusb";
if( type == "books" ) { divid="div_bookmarkusb_books"; }
if( type == "marks" ) { divid="div_bookmarkusb_marks"; }
if( type == "usbs" ) { divid="div_bookmarkusb_usbs"; }
// alert( "BUGS_2901 j="+j+" type="+type+" divid="+divid+" htmout="+htmout )
if( document.getElementById(divid)) {
document.getElementById(divid).innerHTML=htmout;
}
// alert( "BUGS_2902 id="+id+" amt="+amt+" desc="+desc );
}
// alert( "BUGS_2903 TYPELOOP TAIL j="+j+" type="+type );
return("");
}
</script>
<script id=script_toggle>
// $('#msform').fadeOut(50);
// $('#msform').fadeIn(50);
// $(body).html($(body).html().replace('lollypops', 'marshmellows'));
function toggle(divid) {
// alert( "BUGS_37850 BEG divid="+divid );
var imgid=divid.replace("div_","img_" );
if(! document.getElementById(divid)) { return; }
var imgid=divid.replace("div_","img_" );
style_display=document.getElementById(divid).style.display;
// alert( "BUGS_37850 TOGGLE imgid="+imgid+" style_display="+style_display );
if( style_display == "none" ) {
img="<img src=/imgs/btn/koeyew.png id="+imgid+" height=50 onclick=\"toggle('"+divid+"'); return false;\" >";
// alert( "BUGS_37881 NONE img="+img );
document.getElementById(divid).style.display="inline";
document.getElementById(imgid).innerHTML=img;
document.getElementById(imgid).src="/imgs/btn/koeyew.png";
// $("#img_ajax_ko").html(img);
// $("#img_ajax_ko").attr("src","/imgs/btn/koeyew.png");
// htmimg=document.getElementById(imgid).innerHTML;
// alert( "BUGS_37884 NONE htmimg="+htmimg );
}
else {
img="<img src=/imgs/btn/koeyeb.png id="+imgid+" height=50 onclick=\"toggle('"+divid+"'); return false;\" >";
// alert( "BUGS_37891 INLINE img="+img );
document.getElementById(divid).style.display="none";
document.getElementById(imgid).innerHTML=img;
document.getElementById(imgid).src="/imgs/btn/koeyeb.png";
// $("#img_ajax_ko").html(img);
// $("#img_ajax_ko").attr("src","/imgs/btn/koeyeb.png");
// htmimg=document.getElementById(imgid).innerHTML;
// alert( "BUGS_37893 INLINE htmimg="+htmimg );
}
}
</script>
<style id=style_tail>
.popover span {
background-color: #FFFDDA;
background-color: 'Light Yellow';
background-color: #FFFFCC;
background-color: wheat;
color: black;
}
.thumbnail:hover {
background-color: wheat;
color: wheat;
}
.thumbnail span {
border: 1px solid wheat;
background-color: wheat;
color: wheat;
}
// body {
// background-color: yellow;
// color: red;
// }
</style>
<!-- hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh -->
</head>
<!-- <body onload="startup('fb.txt'); return false;" > -->
<body onload="startup('ko_coffeeshop1.psv'); return false;" >
<script id=startup_kogo>
function startup_kogo(args) {
htmout = "";
htmout_pages("startup");
// alert( "BUGS_12 HEAD startup_kogo" );
// canvas_kogo_startup('startup_kogo');
// canvass_startup('');
// kogo("startup");
// alert( "BUGS_13 TAIL startup_kogo" );
return(htmout);
}
</script>
<script id=script_kogo>
function kogo(args) {
// alert( "BUGS_20 kogo HEAD args="+args );
ctx=document.getElementById('canvas_kogo').getContext('2d');
img=new Image();
img.src="/go/dgs/images/50/b.gif";
img.id="img_img"; img.height=100;
img_b=new Image();
img_b.src="/go/dgs/images/50/b.gif";
img_b.id="img_b"; img_b.height=100;
img_w=new Image();
img_w.src="/go/dgs/images/50/w.gif";
img_w.id="img_w"; img_w.height=100;
x=100;y=100;
// ctx.drawImage(img,500,500);
ctx.strokeStyle = 'black';
ctx.fillStyle = 'black';
ctx.lineWidth = 5;
// bxlim=19; bylim=19;
// ctx.drawImage(img_b,100,100);
// ctx.drawImage(img_b,100,bylim);
// ctx.drawImage(img_w,100,100);
// ctx.drawImage(img_w,bxlim,100);
// ctx.beginPath();
// ctx.moveTo(100,100);
// ctx.lineTo(100,100);
// ctx.lineTo(100,800);
// ctx.closePath();
// ctx.fill();
// ctx.beginPath();
// ctx.moveTo(500,500);
// ctx.lineTo(100,300);
// ctx.lineTo(800,300);
// ctx.closePath();
//
bhandi=5; url_bhandi=undefined; url_bhandi = geturlvars()["bhandi"];
bxlim=19; url_bxlim=undefined; url_bxlim = geturlvars()["bxlim"];
bylim=19; url_bylim=undefined; url_bylim = geturlvars()["bylim"];
bx0=10; url_bx0=undefined; url_bx0 = geturlvars()["bx0"];
by0=100; url_by0=undefined; url_by0 = geturlvars()["by0"];
bdx=100; url_bdx=undefined; url_bdx = geturlvars()["bdx"];
bdy=100; url_bdy=undefined; url_bdy = geturlvars()["bdy"];
bx=0; url_bx=undefined; url_bx = geturlvars()["bx"];
by=0; url_bhandi=undefined; url_by = geturlvars()["by"];
t=0; url_t=undefined; url_t = geturlvars()["t"];
x=0; url_x=undefined; url_x = geturlvars()["x"];
y=0; url_y=undefined; url_y = geturlvars()["y"];
z=0; url_z=undefined; url_z = geturlvars()["z"];
j=0; url_j=undefined; url_j = geturlvars()["j"];
k=0; url_k=undefined; url_k = geturlvars()["k"];
t0=0; url_t0=undefined; url_t0 = geturlvars()["t0"];
t1=0; url_t1=undefined; url_t1 = geturlvars()["t1"];
t2=0; url_t2=undefined; url_t2 = geturlvars()["t2"];
x0=0; url_x0=undefined; url_x0 = geturlvars()["x0"];
x1=0; url_x1=undefined; url_x1 = geturlvars()["x1"];
x2=0; url_x2=undefined; url_x2 = geturlvars()["x2"];
y0=0; url_y0=undefined; url_y0 = geturlvars()["y0"];
y1=0; url_y1=undefined; url_y1 = geturlvars()["y1"];
y2=0; url_y2=undefined; url_y2 = geturlvars()["y2"];
z=0; url_z=undefined; url_z = geturlvars()["z"];
z0=0; url_z0=undefined; url_z0 = geturlvars()["z0"];
z1=0; url_z1=undefined; url_z1 = geturlvars()["z1"];
z2=0; url_z2=undefined; url_z2 = geturlvars()["z2"];
p=0; url_p=undefined; url_p = geturlvars()["p"];
pb=0; url_pb=undefined; url_pb = geturlvars()["pb"];
pw=0; url_pw=undefined; url_pw = geturlvars()["pw"];
if( url_bx != undefined ) { bx=url_bx; }
if( url_by != undefined ) { by=url_by; }
if( url_bxlim != undefined ) { bxlim=url_bxlim; }
if( url_bylim != undefined ) { bylim=url_bylim; }
if( url_bx0 != undefined ) { bx0=url_bx0; }
if( url_by0 != undefined ) { by0=url_by0; }
if( url_bdx != undefined) { bdx=url_bdx; }
if( url_bdy != undefined) { bdy=url_bdy; }
if( url_t != undefined) { t=url_t; }
if( url_x != undefined) { x=url_x; }
if( url_y != undefined) { y=url_y; }
if( url_z != undefined) { z=url_z; }
if( url_p != undefined) { p=url_p; }
if( url_j != undefined) { j=url_j; }
if( url_k != undefined) { k=url_k; }
if( url_t0 != undefined) { t0=url_t0; }
if( url_t1 != undefined) { t1=url_t1; }
if( url_t2 != undefined) { t2=url_t2; }
if( url_x0 != undefined) { x0=url_x0; }
if( url_x1 != undefined) { x1=url_x1; }
if( url_x2 != undefined) { x2=url_x2; }
if( url_y0 != undefined) { y0=url_y0; }
if( url_y1 != undefined) { y1=url_y1; }
if( url_y2 != undefined) { y2=url_y2; }
if( url_pb != undefined) { pb=url_pb; }
if( url_pw != undefined) { pw=url_pw; }
var img=new Image();
var img_bg=new Image();
var img_board=new Image();
var img_bowl=new Image();
var img_bowlb=new Image();
var img_bowlw=new Image();
var img_lid=new Image();
var img_lidb=new Image();
var img_lidw=new Image();
var img_ko=new Image();
var img_ok=new Image();
var img_koeye=new Image();
var img_koeyeb=new Image();
var img_koeyew=new Image();
var img_b=new Image();
var img_w=new Image();
var img_b_b=new Image();
var img_b_w=new Image();
var img_w_b=new Image();
var img_w_w=new Image();
img.src="/imgs/btn/koeye.png"; img.id="img_img";
img_bg.src="/go/pages/zn/zn_1.jpg"; img_bg.id="img_bg"; img_bg.height=1100;
img_board.src="/go/pages/zn/zn_27.jpg";img_board.id="img_board"; img_board.height=1000;
img_bowl.src="/go/pages/zn/zn_57.jpg";
img_bowlb.src="/go/pages/zn/zn_58.jpg";
img_bowlw.src="/go/pages/zn/zn_58.jpg";
img_ko.src="/imgs/btn/ko.png";
img_ok.src="/imgs/btn/ok.png";
img_koeye.src="/imgs/btn/koeye.png";
img_koeyeb.src="/imgs/btn/koeyeb.png";
img_koeyew.src="/imgs/btn/koeyew.png";
img_b.src="/go/dgs/images/50/b.gif";
img_b_b.src="/go/dgs/images/50/b_b.gif";
img_b_w.src="/go/dgs/images/50/b_w.gif";
img_w.src="/go/dgs/images/50/w.gif";
img_w_b.src="/go/dgs/images/50/w_b.gif";
img_w_w.src="/go/dgs/images/50/w_w.gif";
ctx.strokeStyle = 'black';
ctx.fillStyle = 'black';
ctx.lineWidth = 1;
maxwidth=600;
// ctx.textBaseline=textbaseline;
// ctx.font = "50pt, sans-serif";
var bxbys = `
4,4
9,9
16,16
4,9
9,4
9,16
`;
bgid=27;
// alert( "BUGS_161 NEW_bg bgid="+bgid);
htmout += kogo_bg(ctx,bgid);
// alert( "BUGS_162 NEW_bg bgid="+bgid);
bid=10;
// alert( "BUGS_171 NEW_board bid="+bid);
htmout += kogo_board(ctx,bid);
// alert( "BUGS_181 NEW_LINES_HEAD");
htmout += kogo_lines(ctx,bxlim,bylim,bx0,by0,bdx,bdx);
// alert( "BUGS_191 NEW_BHANDI");
htmout += kogo_bhandi(ctx,bhandi);
// alert( "BUGS_192 NEW_BHANDI" );
// alert( "BUGS_201 bxbys="+bxbys+" bxlim="+bxlim+" bx0="+bx0+" bdx="+bdx );
htmout += kogo_bxbys(ctx,bxbys,bxlim,bylim,bx0,by0,bdx,bdy);
// alert( "BUGS_202 bxbys="+bxbys+" bxlim="+bxlim+" bx0="+bx0+" bdx="+bdx );
// htmout += kogo_bhandi(ctx,bhandi);
}
</script>
<script id=script_kogo_bg>
function kogo_bg(ctx,bgid) {
// alert("MSG_271 NEW_BG ctx="+ctx+" bgid="+bgid );
var bgid_default="27";
if( bgid == "" ) { bgid=bgid_default; }
var bgid=bgid_default; var url_bgid = geturlvars()["bgid"];
if( url_bgid != undefined ) { bid=url_bgid; }
// alert( "MSG_272 bgid="+bgid+" url_bgid="+url_bgid );
img_bg = new Image();
img_bg.src="/go/pages/zn/zn_"+bgid+".jpg";
w=1100; h=1100; bx0=0; by0=0;
// alert( "BUGS_273 bid="+bid+" bg_src="+img_bg.src );
ctx.drawImage(img_bg,bx0,by0,w,h);
// alert("MSG_274 NEW_BG bgid="+bgid+" url_bgid="+url_bgid );
return("");
}
</script>
<script id=script_kogo_board>
function kogo_board(ctx,bid) {
// alert("MSG_211 NEW_BOARD ctx="+ctx+" bid="+bid );
var bid_default="10";
if( bid == "" ) { bid=bid_default; }
var bid=bid_default; var url_bid = geturlvars()["bid"];
if( url_bid != undefined ) { bid=url_bid; }
// alert( "MSG_212 bid="+bid+" url_bid="+url_bid );
img_board = new Image();
img_board.src="/go/pages/zn/zn_"+bid+".jpg";
w=900; h=900; bx0=80; by0=50;
// alert( "BUGS_213 bid="+bid+" board_src="+img_board.src );
ctx.drawImage(img_board,bx0,by0,w,h);
// alert("MSG_214 NEW_BOARD bid="+bid+" url_bid="+url_bid );
return("");
}
</script>
<script id=script_kogo_lines>
function kogo_lines(ctx,bxlim,bylim,bx0,by0,bdx,bdy) {
// alert("MSG_231 NEW_LINES bxlim="+bxlim+" bx0="+bx0+" bdx="+bdx );
bdx=50; bdy=50; bx0=50; by0=50;
by=0;
t=0;
for( bx=0; bx< bxlim; bx++ ) {
bdy=5;
x=( bx * bdx )+bx0;
y1=by0;
y2=950;
y3=(bylim*bdy)+by0;
// alert( "BUGS_250 bx="+bx+" y1="+y1+" y2="+y2+" y3="+y3 );
ctx.strokeStyle = 'black';
ctx.fillStyle = 'black';
ctx.lineWidth = 2;
ctx.fillText(bx+1,x+20,y1-30);
ctx.fillText(bx+1,x+20,y1+950);
ctx.beginPath();
ctx.moveTo(x+bdx/2,y1+bdy);
ctx.lineTo(x+bdx/2,y1+bdy);
ctx.lineTo(x+bdx/2,y2+bdy);
ctx.closePath();
ctx.stroke();
// ctx.strokeStyle = 'white';
// ctx.fillStyle = 'white';
ctx.lineWidth = 2;
// ctx.drawImage( img_b,x,y1);
// t=t+1; ctx.fillText(t,x+bdx/2,y1+bdy/2);
// ctx.drawImage( img_w,x,y2);
// t=t+1; ctx.fillText(t,x+bdx/2,y2+bdy/2);
// alert( "BUGS_81 bx="+bx+" x="+x+" y1="+y1+" y2="+y2+" bdx="+bdx+" bx0="+bx0 );
}
// down bx=0; by=0; bdy=50; bdx=60; bx0=7; by0=47;
// across bdx=52; bdy=bdx; bx0=100; bx0=40; by0=50;
bdx=52; bdy=52; bx0=100; by0=40;
bdx=52; bdy=52; bx0=50; by0=50;
bdx=50; bdy=50; bx0=3; by0=50;
// alert( "BUGS_90 by="+by+" bdx="+bdx+" bylim="+bylim );
for( by=0; by<bylim; by++ ) {
y=( by * bdy )+by0;
x1=(bdx)+bx0;
x2=(bxlim*bdx)+bx0;
// alert( "BUGS_280 by="+by+" y="+y+" x1="+x1+" x2="+x2+" bdy="+bdy+" by0="+by0 );
ctx.strokeStyle = 'black';
ctx.fillStyle = 'black';
ctx.fillText(by+1,x1-25,y+5);
ctx.fillText(by+1,x1+950,y+5);
// alert( "BUGS_92 by="+by+" y="+y+" x1="+x1+" x2="+x2+" bdy="+bdy+" by0="+by0 );
ctx.lineWidth = 2;
ctx.beginPath();
ctx.moveTo(x1+bdx/2,y-bdy+1);
ctx.lineTo(x1+bdx/2,y-bdy+1);
ctx.lineTo(x2+bdx/2,y-bdy+1);
ctx.closePath();
ctx.stroke();
ctx.beginPath();
ctx.moveTo(80,950);
ctx.lineTo(80,950);
ctx.lineTo(970,950);
ctx.closePath();
ctx.stroke();
// ctx.drawImage( img_w,x1,y-bdy/2);
ctx.strokeStyle = 'black';
ctx.fillStyle = 'black';
t=t+1; ctx.fillText(t,x1+15,y);
// ctx.drawImage( img_b,x2,y-bdy/2);
ctx.strokeStyle = 'white';
ctx.fillStyle = 'white';
t=t+1; ctx.fillText(t,x2+20,y);
ctx.strokeStyle = 'black';
ctx.fillStyle = 'black';
}
return("");
}
</script>
<script id=script_kogo_bhandi>
function kogo_bhandi(ctx,bhandi) {
# alert("MSG_320 bhandi ctx="+ctx+" bhandi="+bhandi );
var step=""; if( geturlvars()['step'] != undefined ) { step=geturlvars()['step']; }
# alert("MSG_321 bhandi ctx="+ctx+" bhandi="+bhandi );
var bhandis_xys=`
1|4,4
2|4,4 16,16
3|4,4 16,16 4,16
4|4,4 16,16 4,16 16,4
5|4,4 16,16 4,16 16,10 10,10
6|4,4 16,16 4,16 16,10 4,10 16,4
7|4,4 16,16 4,16 16,10 4,10 16,4 10,10
8|4,4 16,16 4,16 16,10 4,10 16,4 10,4 10,16
9|4,4 16,16 4,16 16,10 4,10 16,4 10,4 10,16 10,10
`;
// alert( "BUGS_35 kogo bhandis_xys="+bhandis_xys );
// bhandi=0; url_bhandi=""; urlv_bhandi=""; urlp_bhandi="";
// var urlv_bhandi = geturlvars()["bhandi"];
// var urlp_bhandi = geturlparam('bhandi','Empty');
// alert( "BUGS_22 kogo bhandi="+bhandi+ " urlv_bhandi="+urlv_bhandi+ " urlp_bhandi="+urlp_bhandi);
xys=""; xys_len=0;
bhandi=0; url_bhandi=""; url_bhandi = geturlvars()["bhandi"];
if( url_bhandi != "" ) { bhandi=url_bhandi; }
if( bhandi < 10 ) {
xys=bhandis_xys.split("\n")[bhandi];
xys=xys.split("|")[1];
xys_len=xys.split(" ").length;
}
parms_bhandi="19|19|50|50|4|1|";
// bxlim=13; bylim=13; bx0=3; by0=-20; bdx=50; bdy=50;
bxlim=19; bylim=19; bx0=3; by0=-20; bdx=50; bdy=50;
for( j=0; j<xys_len; j++ ) {
t=j+1;
xy=xys.split(" ")[j];
if( xy == "" ) { continue; }
bx=xy.split(",")[0];
by=xy.split(",")[1];
x=(bx*bdx)+bx0;
y=(by*bdy)+by0;
htmout = "";
img=img_b_b;
// if( isOdd(t)) { img=img_b; } else { img=img_w; }
if( step != "" ) {
alert( "MSG_38626 STEP BHANDI bhandi="+bhandi+" t="+t+" ("+bx+","+by+")" );
}
if( document.getElementById('canvas_kogo')) {
ctx.drawImage(img,x,y);
}
}
// alert( "BUGS_381 NEW_BHANDI END" );
// $("#div_msg").html(htmout);
# alert( "BUGS_382 kogo bhandi="+bhandi+" xys="+xys );
// return("");
}
</script>
<script id=script_kogo_bxbys>
function kogo_bxbys(ctx,bxbys,bxlim,bylim,bx0,by0,bdx,bdy) {
// alert( "BUGS_390 bxbys="+bxbys+" bxlim="+bxlim );
var step=""; if( geturlvars()['step'] != undefined ) { step=geturlvars()['step']; }
var file=""; if( geturlvars()['file'] != undefined ) { file=geturlvars()['file']; }
var db3=""; if( geturlvars()['db3'] != undefined ) { db3=geturlvars()['db3']; }
var list=""; if( geturlvars()['list'] != undefined ) { list=geturlvars()['list']; }
if( file != "" ) { kogo_file(args); }
if( db3 != "" ) { kogo_db3(args); }
if( list != "" ) { kogo_list(args); }
bxbys_default=`
1,1
1,2
1,3
1,4
2,1
2,2
2,3
19,1
19,2
19,3
19,4
19,17
19,18
19,19
0,0
`;
if( bxbys == "" ) { bxbys=bxbys_default; }
t=1; var bxby=""; var bx=""; var bx=""; var by="";
bdx=20; bdy=20; bx0=130; by0=100;
for( j=0; j<bxbys.split("\n").length; j++ ) {
bxby=bxbys.split("\n")[j];
// if( bxby == "" ) { contine; }
if( bxby.split(",").length == 0 ) { continue; }
bx=bxby.split("\,")[0];
by=bxby.split("\,")[1];
// alert( "BUGS_382 j="+j+" t="+t+" bx="+by+" bxby="+bxby );
if( bx == undefined ) { continue; }
if( by == undefined ) { continue; }
if( bx == 0 ) { continue; }
if( by == 0 ) { continue; }
x=(bx*bdx)+bx0;
y=(by*bdy)+by0;
// alert( "BUGS_410 bxby="+bxby+" bx="+bx+" by="+by+" x="+x+" y="+y );
if( step != "" ) {
alert( "STEP t="+t+" bx="+bx+" by="+by );
}
var img=new Image();
img_b=new Image();
img_w=new Image();
img.src="/imgs/btn/koeye.png";
img_b.src="/go/dgs/images/50/b.gif";
img_w.src="/go/dgs/images/50/w.gif";
// img.height=img_b.height;
// img.width=img_b.width;
img=img_w;
if( isOdd(t)) { img=img_w; }
else { img=img_w }
// alert( "MSG_430 j="+j+" t="+t+" ("+bx+","+by+")"+" x="+x+" y="+y );
ctx.drawImage(img,x,y);
t=t+1;
}
// alert( "BUGS_430 kogo_bxbys END bx="+bx+" t="+t+" x="+x );
}
</script>
<script id=script_kogo_file>
function kogo_file(args) {
htmout = "kogo_file";
alert( "MSG_1710 kogo_FILE args="+args+" htmout="+htmout );
return(htmout );
}
</script>
<script id=script_kogo_db3>
function kogo_db3(args) {
htmout = "kogo_db3";
alert( "MSG_1710 kogo_DB3 args="+args+" htmout="+htmout );
return(htmout );
}
</script>
<script id=script_kogo_list>
function kogo_list(args) {
htmout = "kogo_list";
alert( "MSG_1710 kogo_FILE args="+args+" htmout="+htmout );
return(htmout );
}
</script>
<script id=script_kogo_ajax>
function kogo_ajax(args) {
htmout = "kogo_ajax";
alert( "MSG_1710 kogo_AJAX args="+args+" htmout="+htmout );
return(htmout );
}
</script>
<script id=script_kogo_bugs>
function kogo_bugs(args) {
alert( "BUGS_22 kogo_bugs args="+args );
var htmout="";
var woods="wood1 wood2 wood3 wood4 wood5 wood6 wood7 wood8";
var wood="wood8";
// alert( "BUGS_101 kogo wood="+wood );
var canvas = document.getElementById('canvas_kogo');
// alert( "BUGS_102 canvas="+canvas );
if( canvas.getContext ) {
var ctx = canvas.getContext('2d');
ctx.clearRect(0,0,400,400);
// ctx.save();
}
else {
alert( "ERR_109 canvas NOTFOUND ctx=" );
}
if( ctx == null ) { return(htmout); }
// alert( "BUGS_030 kogo args="+args );
alert( "BUGS_40 kogo args="+args );
//// grad = ctx.createRadialGradient(0,0,0,0,0,600);
//// grad.addColorStop(0,'#000');
//// grad.addColorStop(1,'rgb('+color+', '+color+', '+color+')');
//
//var x=0;
//var y=0;
//var dy=4;
//var dx=4;
//var WIDTH=1100;
//var HEIGHT=800;
var img_ko = new Image();
var img_ok = new Image();
var img_koeye = new Image();
var img_koeyeb = new Image();
var img_koeyew = new Image();
var img_brd = new Image();
var img_b = new Image();
var img_b_b = new Image();
var img_b_w = new Image();
var img_w = new Image();
var img_w_b = new Image();
var img_w_w = new Image();
// img_ko.src="/imgs/btn/ko.png";
// img_ok.src="imgs/btn/ok.png";
// img_koeye.src="/imgs/btn/koeye.png";
// img_koeyeb.src="/imgs/btn/koeyeb.png";
// img_koeyew.src="/imgs/btn/koeyew.png";
// img_b.src_b="/go/dgs/images/50/b_b.gif";
// img_b_b.src="/go/dgs/images/50/b_b.gif";
// img_b_w.src="/go/dgs/images/50/b_w.gif";
// img_w.src="/go/dgs/images/50/w.gif";
// img_w_b.src="/go/dgs/images/50/w_b.gif";
// img_w_w.src="/go/dgs/images/50/w_w.gif";
// img_brd.src="/go/dgs/images/50/"+wood+".gif";
var c = document.getElementById("canvas");
var ctx = c.getContext("2d");
var img = document.getElementById("img_ko");
var img_ko = document.getElementById("img_ko");
var img_ok = document.getElementById("img_ok");
var img_koeye = document.getElementById("img_koeye");
var img_koeyeb = document.getElementById("img_koeyeb");
var img_koeyew = document.getElementById("img_koeyew");
// var img_brd = document.getElementById("img_wood8");
// var img_brd = document.getElementById("img_wood_1");
// var img_brd = document.getElementById("img_wood_1_tn");
// var img_brd = document.getElementById("img_wood_1_zn");
brd_id_default="1";
// brd_id_default="27";
brd_id=brd_id_default;
alert( "BUGS_101 brd_id="+brd_id );
bid=1; bxlim=19; bylim=19; bhandi=9;
bx0=0; by0=200; bdx=5; bdy=5;
p="p"; p1="p1"; p2="p2";
t=0; x=0; y=0;
t0=0; x0=0; y0=0;
t1=1; x1=1; y1=1;
t2=2; x2=2; y2=2;
alert( "BUGS_160 geturlparameters bid="+bid+" bxlim="+bxlim );
// url_bid=geturlparameter('bid');
// url_bxlim=geturlparameter('bxlim'); url_bylim=geturlparameter('bylim');
// url_bhandi=geturlparameter('bhandi');
// url_bx0=geturlparameter('bx0');
// url_by0=geturlparameter('by0');
// url_bx=geturlparameter('bx');
// url_by=geturlparameter('by');
//
// url_p=geturlparameter('p'); url_p1=geturlparameter('p1'); url_p2=geturlparameter('p2');
//
// url_t=geturlparameter('t'); url_x=geturlparameter('x'); url_y=geturlparameter('y');
// url_t0=geturlparameter('t0'); url_x0=geturlparameter('x0'); url_y0=geturlparameter('y0');
// url_t1=geturlparameter('t1'); url_x1=geturlparameter('x1'); url_y1=geturlparameter('y1');
// url_t2=geturlparameter('t2'); url_x2=geturlparameter('x2'); url_y2=geturlparameter('y2');
alert( "BUGS_180 url_bid" );
if( url_bid != "" ) { bid=url_bid; }
if( url_bxlim != "" ) { bxlim=url_bxlim; }
if( url_bylim != "" ) { bylim=url_bylim; }
if( url_bx0 != "" ) { bx0=url_bx0; }
if( url_by0 != "" ) { by0=url_by0; }
if( url_bhandi != "" ) { bhandi=url_bhandi; }
if( url_bx != "" ) { bx=url_bx; }
if( url_by != "" ) { by=url_by; }
if( url_p != "" ) { p=url_p; }
if( url_p1 != "" ) { p1=url_p1; }
if( url_p2 != "" ) { p2=url_p2; }
if( url_t != "" ) { t=url_t; }
if( url_x != "" ) { x=url_x; }
if( url_y != "" ) { y=url_y; }
if( url_t0 != "" ) { t0=url_t0; }
if( url_x0 != "" ) { x0=url_x0; }
if( url_y0 != "" ) { y0=url_y0; }
if( url_t1 != "" ) { t1=url_t1; }
if( url_x1 != "" ) { x1=url_x1; }
if( url_y1 != "" ) { y1=url_y1; }
if( url_t2 != "" ) { t2=url_t2; }
if( url_x2 != "" ) { x2=url_x2; }
if( url_y2 != "" ) { y2=url_y2; }
if( url_bdx != "" ) { bdx=url_bdx; }
if( url_bdy != "" ) { bdy=url_bdy; }
// alert( "BUGS_200 bid="+bid+" bxlim="+bxlim+" bx0="+bx0+" bdx="+bdx );
dttm="20211201_1500";
htmout = "";
htmout .= "bid="+bid+" bxlim="+bxlim+" bylim="+bylim+" bhandi="+bhandi+"<br>";
htmout .= "p="+p+" p1="+p2+" dttm="+dttm+" <br>";
// id=geturlparameter('id');
// var parser = document.createElement('a');
// parser.href=document.location;
brd_id=1;
img_brd.src="/go/pages/zn/zn_"+brd_id+".jpg";
// alert( "BUGS_102 brd_id="+brd_id+" src="+img_brd.src );
var img_b = document.getElementById("img_b");
var img_w = document.getElementById("img_w");
// alert( "BUGS_100 img_brd="+img_brd );
var img_b_b = document.getElementById("img_b_b");
var img_b_w = document.getElementById("img_b_w");
var img_w_b = document.getElementById("img_w_b");
var img_w_w = document.getElementById("img_w_w");
var brd_dx=100; var brd_dy=10;
x=0; y=20; ctx.drawImage(img_ko,x,y);
x=250; y=20; ctx.drawImage(img_koeye,x,y);
x=450; y=20; ctx.drawImage(img_koeyeb,x,y);
x=650; y=20; ctx.drawImage(img_koeyew,x,y);
x=900; y=20; ctx.drawImage(img_ok,x,y);
// alert( "BUGS_101 img_brd="+img_brd );
var brd_x0=0; var brd_y0=200;
ctx.drawImage(img_brd,brd_x0,brd_y0);
// alert( "BUGS_102 img_b="+img_b );
x=260; y=260; ctx.drawImage(img_b,x,y);
x=440; y=440; ctx.drawImage(img_w,x,y);
x=200; y=800; ctx.drawImage(img_b_b,x,y);
x=250; y=800; ctx.drawImage(img_b_w,x,y);
x=300; y=800; ctx.drawImage(img_w_b,x,y);
x=350; y=800; ctx.drawImage(img_w_w,x,y);
//
x=600; y=600; dx=700; dy=700;
ctx.beginPath();
ctx.moveTo(x,y);
ctx.lineTo(dx,y);
ctx.lineTo(x,dy);
// ctx.fillStyle="#FBF7F8";
ctx.fill();
// alert( "BUGS_130 img_w="+img_w );
x=700; y=700; dx1=800; dy1=800; dx2=100; dy2=100;
x0=200; y0=200;
x1=200; y1=200;
x2=200; y1=600;
ctx.beginPath();
ctx.moveTo(x0,y0);
ctx.lineTo(x1,y1);
ctx.lineTo(x2,y2);
ctx.closePath();
ctx.stroke();
ctx.fillStyle="#FAF7F8";
// ctx.fill();
// alert( "BUGS_140 img_w="+img_w );
// var img_ko=new Image();
// img_ko.src="imgs/btn/ko.png";
// alert( "BUGS_106 kogo x="+x+" y="+y+" img="+img_ko.src );
// x=100; y=100; ctx.drawImage(img_ko,x,y); x=x+dx; y=y+dy;
// alert( "BUGS_107 kogo x="+x+" y="+y+" img="+img_ko.src );
x=300; y=600; ctx.drawImage(img_w_b,x,y);
x=350; y=650; ctx.drawImage(img_w_w,x,y);
x=400; y=700; ctx.drawImage(img_b_b,x,y);
x=450; y=750; ctx.drawImage(img_b_w,x,y);
// alert( 'BUGS_150 IMG_B_B...IMG_W_W');
return("");
// x=500; y=500; ctx.drawImage(img_b,x,y); x=x+dx; y=y+dy;
// x=220; y=220; ctx.drawImage(img_b_b,x,y); x=x+dx; y=y+dy;
// x=230; y=230; ctx.drawImage(img_b_w,x,y); x=x+dx; y=y+dy;
x=x+dx; y=y+dy;
x=x+dx; y=y+dy;
// x=310; y=700; ctx.drawImage(img_w,x,y); x=x+dx; y=y+dy;
// x=320; y=320; ctx.drawImage(img_w_b,x,y); x=x+dx; y=y+dy;
// x=330; y=330; ctx.drawImage(img_w_w,x,y); x=x+dx; y=y+dy;
// if( document.getElemntById("div_layer1")) {
// div_layer1 = document.getElemntById("div_layer1");
// div_ctx_bg = div_layer1.getContext("2d");
// }
// if( document.getElemntById("div_layer2")) {
// div_layer2 = document.getElemntById("div_layer2");
// div_ctx_square = div_layer2.getContext("2d");
// }
// if( document.getElemntById("div_layer3")) {
// div_layer3 = document.getElemntById("div_layer3");
// div_ctx_circle = div_layer3.getContext("2d");
// }
ctx.clearRect(0,0,WIDTH,HEIGHT);
ctx.fillStyle="#FAF7F8";
ctx.begPath();
// ctx.rect(0,0,WIDTH,HEIGHT);
ctx.arc(x,y,10,0,Math.PI*2,true);
ctx.closePath();
ctx.fill();
if(x+dx>WIDTH||x+dx<0) dx=-dx;
if(y+dy>HEIGHT||y+dy<0) dy=-dy;
x+=dx;
y+=dy;
x=0; y=0;
var img_b = new Image();
var t=0;
var bx=0; var by=0;
var bxlim = 7; var bylim=7;
var x2 = 0; var y2 = 0;
var dx = 10; var dy = 10;
// img_b.onload = function() {
// var w1 = 1100;
// var h1 = 1100;
// var w2 = 10;
// var h2 = 10;
for( bx = 0; bx < bxlim; bx=bx+1) {
if( x2 < bxlim ) { x2 = x2+dx; }
else { x2=0; }
for( by = 0; by < bylim; by=by+1) {
if( y2 < bylim ) { y2 = y2+dy; }
else { y2=0; }
// var x2 = canvas.width / 2 - w2 / 2;
// var y2 = canvas.height / 2 - h2 / 2;
ctx.drawImage(img_b, x1,y1,w1,h1, x2,y2,w2,h2);
}
}
// }
// fonts
var font_italic="Italic 30px Sans-Serif"
var font_bold="Italic 30px Sans-Serif"
var fillstyle="#00F";
var textalign="center";
var textbaseline="Top";
var filltext="filltext";
var maxwidth=400;
var filltext="filltext";
var text="kogo";
x=200; y=200;
ctx.fillStyle=fillstyle;
ctx.font=font;
ctx.fillStyle=fillstyle;
ctx.textBaseline=textbaseline;
ctx.fillText(filltext,x,y);
strokeText(text,x,y,maxwidth);
return(htmout);
}
</script>
<script id=script_htmout_pages>
function htmout_pages(args) {
// alert( "BUGS_300 htmout_pages" );
htmout = "";
htmout += "<hr color=black>";
htmout += "<hr color=white>";
htmout += "<div id=div_pages>\n";
htmout += "<h1>div_pages</h1>\n";
htmout += "<hr color=white>\n";
htmout += "<img src=/imgs/btn/koeye.png id=img_boards onclick=\"toggle(\'div_boards\'); return false;\" height=10><br>\n";
htmout += " <div id=div_boards>\n";
htmout += " <h2>boards</h2>\n";
htmout += " <a href=/go/pages/zn/zn_49.jpg >";
htmout += " <img id=img_boards src=/go/pages/tn/tn_49.png height=100 >";
htmout += " </a>\n";
htmout += " </div>\n";
htmout += "<hr color=white>\n";
htmout += "<img src=/imgs/btn/koeye.png id=img_bowls onclick=\"toggle(\'div_bowls\'); return false;\" height=10><br>\n";
htmout += " <div id=div_bowls>\n";
htmout += " <h2>bowls</h2>\n";
htmout += " <a href=/go/pages/zn/zn_59.jpg >";
htmout += " <img id=img_bowls src=/go/pages/tn/tn_59.png height=100 >";
htmout += " </a>\n";
htmout += " </div>\n";
htmout += "<hr color=white>\n";
htmout += "<img src=/imgs/btn/koeye.png id=img_stones onclick=\"toggle(\'div_stones\'); return false;\" height=10><br>\n";
htmout += " <div id=div_stones>\n";
htmout += " <h2>stones</h2>\n";
htmout += " <a href=/go/pages/zn/zn_47.jpg >";
htmout += " <img src=/go/pages/tn/tn_47.png height=100 >";
htmout += " </a>\n";
htmout += " </div>\n";
htmout += "<hr color=white>\n";
for( j=1; j<64; j++ ) {
img="/go/pages/zn/zn_"+j+".jpg";
tn="/go/pages/tn/tn_"+j+".png";
img_id="img_page_"+j;
htmout += "<a href="+img+" target=_blank>";
htmout += "<img src="+img+" id="+img_id+" height=200>";
htmout += " </a>\n";
htmout += j;
htmout += "<a href=/go/ko_canvas.html?b="+j+" target=_blank>";
htmout += "<img src="+tn+" id="+img_id+"_tn height=20>";
htmout += " </a>\n";
}
// alert( "BUGS_420 htmout_pages" );
htmout += "<hr color=white>";
htmout += "<hr color=black>";
htmout += " </div>";
// alert( "BUGS_440 htmout="+htmout );
// $("#div_pages").html(htmout);
if( document.getElementById("div_pages")) {
document.getElementById("div_pages").innerHTML=htmout;
}
// alert( "BUGS_450 htmout_pages="+htmout_pages );
}
</script>
<script id=script_toggle>
// $('#msform').fadeOut(50);
// $('#msform').fadeIn(50);
// $(body).html($(body).html().replace('lollypops', 'marshmellows'));
function toggle(divid) {
var imgid=divid.replace("div_","img_" );
if(! document.getElementById(divid)) { return; }
var imgid=divid.replace("div_","img_" );
style_display=document.getElementById(divid).style.display;
if( style_display == "none" ) {
img="<img src=/imgs/btn/koeyew.png id="+imgid+" height=50 onclick=\"toggle('"+divid+"'); return false;\" >";
// alert( "BUGS_37881 NONE img="+img );
document.getElementById(divid).style.display="inline";
document.getElementById(imgid).innerHTML=img;
document.getElementById(imgid).src="/imgs/btn/koeyew.png";
}
else {
img="<img src=/imgs/btn/koeyeb.png id="+imgid+" height=25 onclick=\"toggle('"+divid+"'); return false;\" >";
document.getElementById(divid).style.display="none";
document.getElementById(imgid).innerHTML=img;
document.getElementById(imgid).src="/imgs/btn/koeyeb.png";
}
}
</script>
<script id=script_konva src='data:/text/plain;base64,IWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6KHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6dHx8c2VsZikuS29udmE9ZSgpfSh0aGlzLChmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjsKLyoKICAgKiBLb252YSBKYXZhU2NyaXB0IEZyYW1ld29yayB2OC4zLjAKICAgKiBodHRwOi8va29udmFqcy5vcmcvCiAgICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVAogICAqIERhdGU6IE1vbiBOb3YgMTUgMjAyMQogICAqCiAgICogT3JpZ2luYWwgd29yayBDb3B5cmlnaHQgKEMpIDIwMTEgLSAyMDEzIGJ5IEVyaWMgUm93ZWxsIChLaW5ldGljSlMpCiAgICogTW9kaWZpZWQgd29yayBDb3B5cmlnaHQgKEMpIDIwMTQgLSBwcmVzZW50IGJ5IEFudG9uIExhdnJlbm92IChLb252YSkKICAgKgogICAqIEBsaWNlbnNlCiAgICovdmFyIHQ9TWF0aC5QSS8xODA7Y29uc3QgZT0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU/c2VsZjp7fSxpPXtfZ2xvYmFsOmUsdmVyc2lvbjoiOC4zLjAiLGlzQnJvd3NlcjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmKCJbb2JqZWN0IFdpbmRvd10iPT09e30udG9TdHJpbmcuY2FsbCh3aW5kb3cpfHwiW29iamVjdCBnbG9iYWxdIj09PXt9LnRvU3RyaW5nLmNhbGwod2luZG93KSksaXNVbm1pbmlmaWVkOi9wYXJhbS8udGVzdChmdW5jdGlvbih0KXt9LnRvU3RyaW5nKCkpLGRibENsaWNrV2luZG93OjQwMCxnZXRBbmdsZTplPT5pLmFuZ2xlRGVnP2UqdDplLGVuYWJsZVRyYWNlOiExLHBvaW50ZXJFdmVudHNFbmFibGVkOiEwLGF1dG9EcmF3RW5hYmxlZDohMCxoaXRPbkRyYWdFbmFibGVkOiExLGNhcHR1cmVQb2ludGVyRXZlbnRzRW5hYmxlZDohMSxfbW91c2VMaXN0ZW5DbGljazohMSxfdG91Y2hMaXN0ZW5DbGljazohMSxfcG9pbnRlckxpc3RlbkNsaWNrOiExLF9tb3VzZUluRGJsQ2xpY2tXaW5kb3c6ITEsX3RvdWNoSW5EYmxDbGlja1dpbmRvdzohMSxfcG9pbnRlckluRGJsQ2xpY2tXaW5kb3c6ITEsX21vdXNlRGJsQ2xpY2tQb2ludGVySWQ6bnVsbCxfdG91Y2hEYmxDbGlja1BvaW50ZXJJZDpudWxsLF9wb2ludGVyRGJsQ2xpY2tQb2ludGVySWQ6bnVsbCxwaXhlbFJhdGlvOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSxkcmFnRGlzdGFuY2U6MyxhbmdsZURlZzohMCxzaG93V2FybmluZ3M6ITAsZHJhZ0J1dHRvbnM6WzAsMV0saXNEcmFnZ2luZzooKT0+aS5ERC5pc0RyYWdnaW5nLGlzRHJhZ1JlYWR5OigpPT4hIWkuREQubm9kZSxkb2N1bWVudDplLmRvY3VtZW50LF9pbmplY3RHbG9iYWwodCl7ZS5Lb252YT10fX0scj10PT57aVt0LnByb3RvdHlwZS5nZXRDbGFzc05hbWUoKV09dH07aS5faW5qZWN0R2xvYmFsKGkpO2NsYXNzIGF7Y29uc3RydWN0b3IodD1bMSwwLDAsMSwwLDBdKXt0aGlzLmRpcnR5PSExLHRoaXMubT10JiZ0LnNsaWNlKCl8fFsxLDAsMCwxLDAsMF19cmVzZXQoKXt0aGlzLm1bMF09MSx0aGlzLm1bMV09MCx0aGlzLm1bMl09MCx0aGlzLm1bM109MSx0aGlzLm1bNF09MCx0aGlzLm1bNV09MH1jb3B5KCl7cmV0dXJuIG5ldyBhKHRoaXMubSl9Y29weUludG8odCl7dC5tWzBdPXRoaXMubVswXSx0Lm1bMV09dGhpcy5tWzFdLHQubVsyXT10aGlzLm1bMl0sdC5tWzNdPXRoaXMubVszXSx0Lm1bNF09dGhpcy5tWzRdLHQubVs1XT10aGlzLm1bNV19cG9pbnQodCl7dmFyIGU9dGhpcy5tO3JldHVybnt4OmVbMF0qdC54K2VbMl0qdC55K2VbNF0seTplWzFdKnQueCtlWzNdKnQueStlWzVdfX10cmFuc2xhdGUodCxlKXtyZXR1cm4gdGhpcy5tWzRdKz10aGlzLm1bMF0qdCt0aGlzLm1bMl0qZSx0aGlzLm1bNV0rPXRoaXMubVsxXSp0K3RoaXMubVszXSplLHRoaXN9c2NhbGUodCxlKXtyZXR1cm4gdGhpcy5tWzBdKj10LHRoaXMubVsxXSo9dCx0aGlzLm1bMl0qPWUsdGhpcy5tWzNdKj1lLHRoaXN9cm90YXRlKHQpe3ZhciBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCkscj10aGlzLm1bMF0qZSt0aGlzLm1bMl0qaSxhPXRoaXMubVsxXSplK3RoaXMubVszXSppLG49dGhpcy5tWzBdKi1pK3RoaXMubVsyXSplLHM9dGhpcy5tWzFdKi1pK3RoaXMubVszXSplO3JldHVybiB0aGlzLm1bMF09cix0aGlzLm1bMV09YSx0aGlzLm1bMl09bix0aGlzLm1bM109cyx0aGlzfWdldFRyYW5zbGF0aW9uKCl7cmV0dXJue3g6dGhpcy5tWzRdLHk6dGhpcy5tWzVdfX1za2V3KHQsZSl7dmFyIGk9dGhpcy5tWzBdK3RoaXMubVsyXSplLHI9dGhpcy5tWzFdK3RoaXMubVszXSplLGE9dGhpcy5tWzJdK3RoaXMubVswXSp0LG49dGhpcy5tWzNdK3RoaXMubVsxXSp0O3JldHVybiB0aGlzLm1bMF09aSx0aGlzLm1bMV09cix0aGlzLm1bMl09YSx0aGlzLm1bM109bix0aGlzfW11bHRpcGx5KHQpe3ZhciBlPXRoaXMubVswXSp0Lm1bMF0rdGhpcy5tWzJdKnQubVsxXSxpPXRoaXMubVsxXSp0Lm1bMF0rdGhpcy5tWzNdKnQubVsxXSxyPXRoaXMubVswXSp0Lm1bMl0rdGhpcy5tWzJdKnQubVszXSxhPXRoaXMubVsxXSp0Lm1bMl0rdGhpcy5tWzNdKnQubVszXSxuPXRoaXMubVswXSp0Lm1bNF0rdGhpcy5tWzJdKnQubVs1XSt0aGlzLm1bNF0scz10aGlzLm1bMV0qdC5tWzRdK3RoaXMubVszXSp0Lm1bNV0rdGhpcy5tWzVdO3JldHVybiB0aGlzLm1bMF09ZSx0aGlzLm1bMV09aSx0aGlzLm1bMl09cix0aGlzLm1bM109YSx0aGlzLm1bNF09bix0aGlzLm1bNV09cyx0aGlzfWludmVydCgpe3ZhciB0PTEvKHRoaXMubVswXSp0aGlzLm1bM10tdGhpcy5tWzFdKnRoaXMubVsyXSksZT10aGlzLm1bM10qdCxpPS10aGlzLm1bMV0qdCxyPS10aGlzLm1bMl0qdCxhPXRoaXMubVswXSp0LG49dCoodGhpcy5tWzJdKnRoaXMubVs1XS10aGlzLm1bM10qdGhpcy5tWzRdKSxzPXQqKHRoaXMubVsxXSp0aGlzLm1bNF0tdGhpcy5tWzBdKnRoaXMubVs1XSk7cmV0dXJuIHRoaXMubVswXT1lLHRoaXMubVsxXT1pLHRoaXMubVsyXT1yLHRoaXMubVszXT1hLHRoaXMubVs0XT1uLHRoaXMubVs1XT1zLHRoaXN9Z2V0TWF0cml4KCl7cmV0dXJuIHRoaXMubX1zZXRBYnNvbHV0ZVBvc2l0aW9uKHQsZSl7dmFyIGk9dGhpcy5tWzBdLHI9dGhpcy5tWzFdLGE9dGhpcy5tWzJdLG49dGhpcy5tWzNdLHM9dGhpcy5tWzRdLG89KGkqKGUtdGhpcy5tWzVdKS1yKih0LXMpKS8oaSpuLXIqYSksaD0odC1zLWEqbykvaTtyZXR1cm4gdGhpcy50cmFuc2xhdGUoaCxvKX1kZWNvbXBvc2UoKXt2YXIgdD10aGlzLm1bMF0sZT10aGlzLm1bMV0saT10aGlzLm1bMl0scj10aGlzLm1bM10sYT10KnItZSppO2xldCBuPXt4OnRoaXMubVs0XSx5OnRoaXMubVs1XSxyb3RhdGlvbjowLHNjYWxlWDowLHNjYWxlWTowLHNrZXdYOjAsc2tld1k6MH07aWYoMCE9dHx8MCE9ZSl7dmFyIHM9TWF0aC5zcXJ0KHQqdCtlKmUpO24ucm90YXRpb249ZT4wP01hdGguYWNvcyh0L3MpOi1NYXRoLmFjb3ModC9zKSxuLnNjYWxlWD1zLG4uc2NhbGVZPWEvcyxuLnNrZXdYPSh0KmkrZSpyKS9hLG4uc2tld1k9MH1lbHNlIGlmKDAhPWl8fDAhPXIpe3ZhciBvPU1hdGguc3FydChpKmkrcipyKTtuLnJvdGF0aW9uPU1hdGguUEkvMi0ocj4wP01hdGguYWNvcygtaS9vKTotTWF0aC5hY29zKGkvbykpLG4uc2NhbGVYPWEvbyxuLnNjYWxlWT1vLG4uc2tld1g9MCxuLnNrZXdZPSh0KmkrZSpyKS9hfXJldHVybiBuLnJvdGF0aW9uPWcuX2dldFJvdGF0aW9uKG4ucm90YXRpb24pLG59fXZhciBuPU1hdGguUEkvMTgwLHM9MTgwL01hdGguUEksbz0iS29udmEgZXJyb3I6ICIsaD17YWxpY2VibHVlOlsyNDAsMjQ4LDI1NV0sYW50aXF1ZXdoaXRlOlsyNTAsMjM1LDIxNV0sYXF1YTpbMCwyNTUsMjU1XSxhcXVhbWFyaW5lOlsxMjcsMjU1LDIxMl0sYXp1cmU6WzI0MCwyNTUsMjU1XSxiZWlnZTpbMjQ1LDI0NSwyMjBdLGJpc3F1ZTpbMjU1LDIyOCwxOTZdLGJsYWNrOlswLDAsMF0sYmxhbmNoZWRhbG1vbmQ6WzI1NSwyMzUsMjA1XSxibHVlOlswLDAsMjU1XSxibHVldmlvbGV0OlsxMzgsNDMsMjI2XSxicm93bjpbMTY1LDQyLDQyXSxidXJseXdvb2Q6WzIyMiwxODQsMTM1XSxjYWRldGJsdWU6Wzk1LDE1OCwxNjBdLGNoYXJ0cmV1c2U6WzEyNywyNTUsMF0sY2hvY29sYXRlOlsyMTAsMTA1LDMwXSxjb3JhbDpbMjU1LDEyNyw4MF0sY29ybmZsb3dlcmJsdWU6WzEwMCwxNDksMjM3XSxjb3Juc2lsazpbMjU1LDI0OCwyMjBdLGNyaW1zb246WzIyMCwyMCw2MF0sY3lhbjpbMCwyNTUsMjU1XSxkYXJrYmx1ZTpbMCwwLDEzOV0sZGFya2N5YW46WzAsMTM5LDEzOV0sZGFya2dvbGRlbnJvZDpbMTg0LDEzMiwxMV0sZGFya2dyYXk6WzE2OSwxNjksMTY5XSxkYXJrZ3JlZW46WzAsMTAwLDBdLGRhcmtncmV5OlsxNjksMTY5LDE2OV0sZGFya2toYWtpOlsxODksMTgzLDEwN10sZGFya21hZ2VudGE6WzEzOSwwLDEzOV0sZGFya29saXZlZ3JlZW46Wzg1LDEwNyw0N10sZGFya29yYW5nZTpbMjU1LDE0MCwwXSxkYXJrb3JjaGlkOlsxNTMsNTAsMjA0XSxkYXJrcmVkOlsxMzksMCwwXSxkYXJrc2FsbW9uOlsyMzMsMTUwLDEyMl0sZGFya3NlYWdyZWVuOlsxNDMsMTg4LDE0M10sZGFya3NsYXRlYmx1ZTpbNzIsNjEsMTM5XSxkYXJrc2xhdGVncmF5Ols0Nyw3OSw3OV0sZGFya3NsYXRlZ3JleTpbNDcsNzksNzldLGRhcmt0dXJxdW9pc2U6WzAsMjA2LDIwOV0sZGFya3Zpb2xldDpbMTQ4LDAsMjExXSxkZWVwcGluazpbMjU1LDIwLDE0N10sZGVlcHNreWJsdWU6WzAsMTkxLDI1NV0sZGltZ3JheTpbMTA1LDEwNSwxMDVdLGRpbWdyZXk6WzEwNSwxMDUsMTA1XSxkb2RnZXJibHVlOlszMCwxNDQsMjU1XSxmaXJlYnJpY2s6WzE3OCwzNCwzNF0sZmxvcmFsd2hpdGU6WzI1NSwyNTUsMjQwXSxmb3Jlc3RncmVlbjpbMzQsMTM5LDM0XSxmdWNoc2lhOlsyNTUsMCwyNTVdLGdhaW5zYm9ybzpbMjIwLDIyMCwyMjBdLGdob3N0d2hpdGU6WzI0OCwyNDgsMjU1XSxnb2xkOlsyNTUsMjE1LDBdLGdvbGRlbnJvZDpbMjE4LDE2NSwzMl0sZ3JheTpbMTI4LDEyOCwxMjhdLGdyZWVuOlswLDEyOCwwXSxncmVlbnllbGxvdzpbMTczLDI1NSw0N10sZ3JleTpbMTI4LDEyOCwxMjhdLGhvbmV5ZGV3OlsyNDAsMjU1LDI0MF0saG90cGluazpbMjU1LDEwNSwxODBdLGluZGlhbnJlZDpbMjA1LDkyLDkyXSxpbmRpZ286Wzc1LDAsMTMwXSxpdm9yeTpbMjU1LDI1NSwyNDBdLGtoYWtpOlsyNDAsMjMwLDE0MF0sbGF2ZW5kZXI6WzIzMCwyMzAsMjUwXSxsYXZlbmRlcmJsdXNoOlsyNTUsMjQwLDI0NV0sbGF3bmdyZWVuOlsxMjQsMjUyLDBdLGxlbW9uY2hpZmZvbjpbMjU1LDI1MCwyMDVdLGxpZ2h0Ymx1ZTpbMTczLDIxNiwyMzBdLGxpZ2h0Y29yYWw6WzI0MCwxMjgsMTI4XSxsaWdodGN5YW46WzIyNCwyNTUsMjU1XSxsaWdodGdvbGRlbnJvZHllbGxvdzpbMjUwLDI1MCwyMTBdLGxpZ2h0Z3JheTpbMjExLDIxMSwyMTFdLGxpZ2h0Z3JlZW46WzE0NCwyMzgsMTQ0XSxsaWdodGdyZXk6WzIxMSwyMTEsMjExXSxsaWdodHBpbms6WzI1NSwxODIsMTkzXSxsaWdodHNhbG1vbjpbMjU1LDE2MCwxMjJdLGxpZ2h0c2VhZ3JlZW46WzMyLDE3OCwxNzBdLGxpZ2h0c2t5Ymx1ZTpbMTM1LDIwNiwyNTBdLGxpZ2h0c2xhdGVncmF5OlsxMTksMTM2LDE1M10sbGlnaHRzbGF0ZWdyZXk6WzExOSwxMzYsMTUzXSxsaWdodHN0ZWVsYmx1ZTpbMTc2LDE5NiwyMjJdLGxpZ2h0eWVsbG93OlsyNTUsMjU1LDIyNF0sbGltZTpbMCwyNTUsMF0sbGltZWdyZWVuOls1MCwyMDUsNTBdLGxpbmVuOlsyNTAsMjQwLDIzMF0sbWFnZW50YTpbMjU1LDAsMjU1XSxtYXJvb246WzEyOCwwLDBdLG1lZGl1bWFxdWFtYXJpbmU6WzEwMiwyMDUsMTcwXSxtZWRpdW1ibHVlOlswLDAsMjA1XSxtZWRpdW1vcmNoaWQ6WzE4Niw4NSwyMTFdLG1lZGl1bXB1cnBsZTpbMTQ3LDExMiwyMTldLG1lZGl1bXNlYWdyZWVuOls2MCwxNzksMTEzXSxtZWRpdW1zbGF0ZWJsdWU6WzEyMywxMDQsMjM4XSxtZWRpdW1zcHJpbmdncmVlbjpbMCwyNTAsMTU0XSxtZWRpdW10dXJxdW9pc2U6WzcyLDIwOSwyMDRdLG1lZGl1bXZpb2xldHJlZDpbMTk5LDIxLDEzM10sbWlkbmlnaHRibHVlOlsyNSwyNSwxMTJdLG1pbnRjcmVhbTpbMjQ1LDI1NSwyNTBdLG1pc3R5cm9zZTpbMjU1LDIyOCwyMjVdLG1vY2Nhc2luOlsyNTUsMjI4LDE4MV0sbmF2YWpvd2hpdGU6WzI1NSwyMjIsMTczXSxuYXZ5OlswLDAsMTI4XSxvbGRsYWNlOlsyNTMsMjQ1LDIzMF0sb2xpdmU6WzEyOCwxMjgsMF0sb2xpdmVkcmFiOlsxMDcsMTQyLDM1XSxvcmFuZ2U6WzI1NSwxNjUsMF0sb3JhbmdlcmVkOlsyNTUsNjksMF0sb3JjaGlkOlsyMTgsMTEyLDIxNF0scGFsZWdvbGRlbnJvZDpbMjM4LDIzMiwxNzBdLHBhbGVncmVlbjpbMTUyLDI1MSwxNTJdLHBhbGV0dXJxdW9pc2U6WzE3NSwyMzgsMjM4XSxwYWxldmlvbGV0cmVkOlsyMTksMTEyLDE0N10scGFwYXlhd2hpcDpbMjU1LDIzOSwyMTNdLHBlYWNocHVmZjpbMjU1LDIxOCwxODVdLHBlcnU6WzIwNSwxMzMsNjNdLHBpbms6WzI1NSwxOTIsMjAzXSxwbHVtOlsyMjEsMTYwLDIwM10scG93ZGVyYmx1ZTpbMTc2LDIyNCwyMzBdLHB1cnBsZTpbMTI4LDAsMTI4XSxyZWJlY2NhcHVycGxlOlsxMDIsNTEsMTUzXSxyZWQ6WzI1NSwwLDBdLHJvc3licm93bjpbMTg4LDE0MywxNDNdLHJveWFsYmx1ZTpbNjUsMTA1LDIyNV0sc2FkZGxlYnJvd246WzEzOSw2OSwxOV0sc2FsbW9uOlsyNTAsMTI4LDExNF0sc2FuZHlicm93bjpbMjQ0LDE2NCw5Nl0sc2VhZ3JlZW46WzQ2LDEzOSw4N10sc2Vhc2hlbGw6WzI1NSwyNDUsMjM4XSxzaWVubmE6WzE2MCw4Miw0NV0sc2lsdmVyOlsxOTIsMTkyLDE5Ml0sc2t5Ymx1ZTpbMTM1LDIwNiwyMzVdLHNsYXRlYmx1ZTpbMTA2LDkwLDIwNV0sc2xhdGVncmF5OlsxMTksMTI4LDE0NF0sc2xhdGVncmV5OlsxMTksMTI4LDE0NF0sc25vdzpbMjU1LDI1NSwyNTBdLHNwcmluZ2dyZWVuOlswLDI1NSwxMjddLHN0ZWVsYmx1ZTpbNzAsMTMwLDE4MF0sdGFuOlsyMTAsMTgwLDE0MF0sdGVhbDpbMCwxMjgsMTI4XSx0aGlzdGxlOlsyMTYsMTkxLDIxNl0sdHJhbnNwYXJlbnQ6WzI1NSwyNTUsMjU1LDBdLHRvbWF0bzpbMjU1LDk5LDcxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDhdLHZpb2xldDpbMjM4LDEzMCwyMzhdLHdoZWF0OlsyNDUsMjIyLDE3OV0sd2hpdGU6WzI1NSwyNTUsMjU1XSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NV0seWVsbG93OlsyNTUsMjU1LDBdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDVdfSxsPS9yZ2JcKChcZHsxLDN9KSwoXGR7MSwzfSksKFxkezEsM30pXCkvLGQ9W107Y29uc3QgYz0idW5kZWZpbmVkIiE9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSYmcmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsNjApfSxnPXtfaXNFbGVtZW50OnQ9PiEoIXR8fDEhPXQubm9kZVR5cGUpLF9pc0Z1bmN0aW9uOnQ9PiEhKHQmJnQuY29uc3RydWN0b3ImJnQuY2FsbCYmdC5hcHBseSksX2lzUGxhaW5PYmplY3Q6dD0+ISF0JiZ0LmNvbnN0cnVjdG9yPT09T2JqZWN0LF9pc0FycmF5OnQ9PiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCksX2lzTnVtYmVyOnQ9PiJbb2JqZWN0IE51bWJlcl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpJiYhaXNOYU4odCkmJmlzRmluaXRlKHQpLF9pc1N0cmluZzp0PT4iW29iamVjdCBTdHJpbmddIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSxfaXNCb29sZWFuOnQ9PiJbb2JqZWN0IEJvb2xlYW5dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSxpc09iamVjdDp0PT50IGluc3RhbmNlb2YgT2JqZWN0LGlzVmFsaWRTZWxlY3Rvcih0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuITE7dmFyIGU9dFswXTtyZXR1cm4iIyI9PT1lfHwiLiI9PT1lfHxlPT09ZS50b1VwcGVyQ2FzZSgpfSxfc2lnbjp0PT4wPT09dHx8dD4wPzE6LTEscmVxdWVzdEFuaW1GcmFtZSh0KXtkLnB1c2godCksMT09PWQubGVuZ3RoJiZjKChmdW5jdGlvbigpe2NvbnN0IHQ9ZDtkPVtdLHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dCgpfSkpfSkpfSxjcmVhdGVDYW52YXNFbGVtZW50KCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7dHJ5e3Quc3R5bGU9dC5zdHlsZXx8e319Y2F0Y2godCl7fXJldHVybiB0fSxjcmVhdGVJbWFnZUVsZW1lbnQ6KCk9PmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpLF9pc0luRG9jdW1lbnQodCl7Zm9yKDt0PXQucGFyZW50Tm9kZTspaWYodD09ZG9jdW1lbnQpcmV0dXJuITA7cmV0dXJuITF9LF91cmxUb0ltYWdlKHQsZSl7dmFyIGk9Zy5jcmVhdGVJbWFnZUVsZW1lbnQoKTtpLm9ubG9hZD1mdW5jdGlvbigpe2UoaSl9LGkuc3JjPXR9LF9yZ2JUb0hleDoodCxlLGkpPT4oKDE8PDI0KSsodDw8MTYpKyhlPDw4KStpKS50b1N0cmluZygxNikuc2xpY2UoMSksX2hleFRvUmdiKHQpe3Q9dC5yZXBsYWNlKCIjIiwiIik7dmFyIGU9cGFyc2VJbnQodCwxNik7cmV0dXJue3I6ZT4+MTYmMjU1LGc6ZT4+OCYyNTUsYjoyNTUmZX19LGdldFJhbmRvbUNvbG9yKCl7Zm9yKHZhciB0PSgxNjc3NzIxNSpNYXRoLnJhbmRvbSgpPDwwKS50b1N0cmluZygxNik7dC5sZW5ndGg8NjspdD0iMCIrdDtyZXR1cm4iIyIrdH0sZ2V0UkdCKHQpe3ZhciBlO3JldHVybiB0IGluIGg/e3I6KGU9aFt0XSlbMF0sZzplWzFdLGI6ZVsyXX06IiMiPT09dFswXT90aGlzLl9oZXhUb1JnYih0LnN1YnN0cmluZygxKSk6InJnYigiPT09dC5zdWJzdHIoMCw0KT8oZT1sLmV4ZWModC5yZXBsYWNlKC8gL2csIiIpKSx7cjpwYXJzZUludChlWzFdLDEwKSxnOnBhcnNlSW50KGVbMl0sMTApLGI6cGFyc2VJbnQoZVszXSwxMCl9KTp7cjowLGc6MCxiOjB9fSxjb2xvclRvUkdCQTp0PT4odD10fHwiYmxhY2siLGcuX25hbWVkQ29sb3JUb1JCQSh0KXx8Zy5faGV4M0NvbG9yVG9SR0JBKHQpfHxnLl9oZXg2Q29sb3JUb1JHQkEodCl8fGcuX3JnYkNvbG9yVG9SR0JBKHQpfHxnLl9yZ2JhQ29sb3JUb1JHQkEodCl8fGcuX2hzbENvbG9yVG9SR0JBKHQpKSxfbmFtZWRDb2xvclRvUkJBKHQpe3ZhciBlPWhbdC50b0xvd2VyQ2FzZSgpXTtyZXR1cm4gZT97cjplWzBdLGc6ZVsxXSxiOmVbMl0sYToxfTpudWxsfSxfcmdiQ29sb3JUb1JHQkEodCl7aWYoMD09PXQuaW5kZXhPZigicmdiKCIpKXt2YXIgZT0odD10Lm1hdGNoKC9yZ2JcKChbXildKylcKS8pWzFdKS5zcGxpdCgvICosICovKS5tYXAoTnVtYmVyKTtyZXR1cm57cjplWzBdLGc6ZVsxXSxiOmVbMl0sYToxfX19LF9yZ2JhQ29sb3JUb1JHQkEodCl7aWYoMD09PXQuaW5kZXhPZigicmdiYSgiKSl7dmFyIGU9KHQ9dC5tYXRjaCgvcmdiYVwoKFteKV0rKVwpLylbMV0pLnNwbGl0KC8gKiwgKi8pLm1hcChOdW1iZXIpO3JldHVybntyOmVbMF0sZzplWzFdLGI6ZVsyXSxhOmVbM119fX0sX2hleDZDb2xvclRvUkdCQSh0KXtpZigiIyI9PT10WzBdJiY3PT09dC5sZW5ndGgpcmV0dXJue3I6cGFyc2VJbnQodC5zbGljZSgxLDMpLDE2KSxnOnBhcnNlSW50KHQuc2xpY2UoMyw1KSwxNiksYjpwYXJzZUludCh0LnNsaWNlKDUsNyksMTYpLGE6MX19LF9oZXgzQ29sb3JUb1JHQkEodCl7aWYoIiMiPT09dFswXSYmND09PXQubGVuZ3RoKXJldHVybntyOnBhcnNlSW50KHRbMV0rdFsxXSwxNiksZzpwYXJzZUludCh0WzJdK3RbMl0sMTYpLGI6cGFyc2VJbnQodFszXSt0WzNdLDE2KSxhOjF9fSxfaHNsQ29sb3JUb1JHQkEodCl7aWYoL2hzbFwoKFxkKyksXHMqKFtcZC5dKyklLFxzKihbXGQuXSspJVwpL2cudGVzdCh0KSl7Y29uc3RbZSwuLi5pXT0vaHNsXCgoXGQrKSxccyooW1xkLl0rKSUsXHMqKFtcZC5dKyklXCkvZy5leGVjKHQpLHI9TnVtYmVyKGlbMF0pLzM2MCxhPU51bWJlcihpWzFdKS8xMDAsbj1OdW1iZXIoaVsyXSkvMTAwO2xldCBzLG8saDtpZigwPT09YSlyZXR1cm4gaD0yNTUqbix7cjpNYXRoLnJvdW5kKGgpLGc6TWF0aC5yb3VuZChoKSxiOk1hdGgucm91bmQoaCksYToxfTtzPW48LjU/biooMSthKTpuK2EtbiphO2NvbnN0IGw9MipuLXMsZD1bMCwwLDBdO2ZvcihsZXQgdD0wO3Q8Mzt0Kyspbz1yKzEvMyotKHQtMSksbzwwJiZvKyssbz4xJiZvLS0saD02Km88MT9sKzYqKHMtbCkqbzoyKm88MT9zOjMqbzwyP2wrKHMtbCkqKDIvMy1vKSo2OmwsZFt0XT0yNTUqaDtyZXR1cm57cjpNYXRoLnJvdW5kKGRbMF0pLGc6TWF0aC5yb3VuZChkWzFdKSxiOk1hdGgucm91bmQoZFsyXSksYToxfX19LGhhdmVJbnRlcnNlY3Rpb246KHQsZSk9PiEoZS54PnQueCt0LndpZHRofHxlLngrZS53aWR0aDx0Lnh8fGUueT50LnkrdC5oZWlnaHR8fGUueStlLmhlaWdodDx0LnkpLGNsb25lT2JqZWN0KHQpe3ZhciBlPXt9O2Zvcih2YXIgaSBpbiB0KXRoaXMuX2lzUGxhaW5PYmplY3QodFtpXSk/ZVtpXT10aGlzLmNsb25lT2JqZWN0KHRbaV0pOnRoaXMuX2lzQXJyYXkodFtpXSk/ZVtpXT10aGlzLmNsb25lQXJyYXkodFtpXSk6ZVtpXT10W2ldO3JldHVybiBlfSxjbG9uZUFycmF5OnQ9PnQuc2xpY2UoMCksZGVnVG9SYWQ6dD0+dCpuLHJhZFRvRGVnOnQ9PnQqcyxfZGVnVG9SYWQ6dD0+KGcud2FybigiVXRpbC5fZGVnVG9SYWQgaXMgcmVtb3ZlZC4gUGxlYXNlIHVzZSBwdWJsaWMgVXRpbC5kZWdUb1JhZCBpbnN0ZWFkLiIpLGcuZGVnVG9SYWQodCkpLF9yYWRUb0RlZzp0PT4oZy53YXJuKCJVdGlsLl9yYWRUb0RlZyBpcyByZW1vdmVkLiBQbGVhc2UgdXNlIHB1YmxpYyBVdGlsLnJhZFRvRGVnIGluc3RlYWQuIiksZy5yYWRUb0RlZyh0KSksX2dldFJvdGF0aW9uOnQ9PmkuYW5nbGVEZWc/Zy5yYWRUb0RlZyh0KTp0LF9jYXBpdGFsaXplOnQ9PnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKSx0aHJvdyh0KXt0aHJvdyBuZXcgRXJyb3Iobyt0KX0sZXJyb3IodCl7Y29uc29sZS5lcnJvcihvK3QpfSx3YXJuKHQpe2kuc2hvd1dhcm5pbmdzJiZjb25zb2xlLndhcm4oIktvbnZhIHdhcm5pbmc6ICIrdCl9LGVhY2godCxlKXtmb3IodmFyIGkgaW4gdCllKGksdFtpXSl9LF9pblJhbmdlOih0LGUsaSk9PmU8PXQmJnQ8aSxfZ2V0UHJvamVjdGlvblRvU2VnbWVudCh0LGUsaSxyLGEsbil7dmFyIHMsbyxoLGw9KHQtaSkqKHQtaSkrKGUtcikqKGUtcik7aWYoMD09bClzPXQsbz1lLGg9KGEtaSkqKGEtaSkrKG4tcikqKG4tcik7ZWxzZXt2YXIgZD0oKGEtdCkqKGktdCkrKG4tZSkqKHItZSkpL2w7ZDwwPyhzPXQsbz1lLGg9KHQtYSkqKHQtYSkrKGUtbikqKGUtbikpOmQ+MT8ocz1pLG89cixoPShpLWEpKihpLWEpKyhyLW4pKihyLW4pKTpoPSgocz10K2QqKGktdCkpLWEpKihzLWEpKygobz1lK2QqKHItZSkpLW4pKihvLW4pfXJldHVybltzLG8saF19LF9nZXRQcm9qZWN0aW9uVG9MaW5lKHQsZSxpKXt2YXIgcj1nLmNsb25lT2JqZWN0KHQpLGE9TnVtYmVyLk1BWF9WQUxVRTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihuLHMpe2lmKGl8fHMhPT1lLmxlbmd0aC0xKXt2YXIgbz1lWyhzKzEpJWUubGVuZ3RoXSxoPWcuX2dldFByb2plY3Rpb25Ub1NlZ21lbnQobi54LG4ueSxvLngsby55LHQueCx0LnkpLGw9aFswXSxkPWhbMV0sYz1oWzJdO2M8YSYmKHIueD1sLHIueT1kLGE9Yyl9fSkpLHJ9LF9wcmVwYXJlQXJyYXlGb3JUd2Vlbih0LGUsaSl7dmFyIHIsYT1bXSxuPVtdO2lmKHQubGVuZ3RoPmUubGVuZ3RoKXt2YXIgcz1lO2U9dCx0PXN9Zm9yKHI9MDtyPHQubGVuZ3RoO3IrPTIpYS5wdXNoKHt4OnRbcl0seTp0W3IrMV19KTtmb3Iocj0wO3I8ZS5sZW5ndGg7cis9MiluLnB1c2goe3g6ZVtyXSx5OmVbcisxXX0pO3ZhciBvPVtdO3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPWcuX2dldFByb2plY3Rpb25Ub0xpbmUodCxhLGkpO28ucHVzaChlLngpLG8ucHVzaChlLnkpfSkpLG99LF9wcmVwYXJlVG9TdHJpbmdpZnkodCl7dmFyIGU7Zm9yKHZhciBpIGluIHQudmlzaXRlZEJ5Q2lyY3VsYXJSZWZlcmVuY2VSZW1vdmFsPSEwLHQpaWYodC5oYXNPd25Qcm9wZXJ0eShpKSYmdFtpXSYmIm9iamVjdCI9PXR5cGVvZiB0W2ldKWlmKGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGkpLHRbaV0udmlzaXRlZEJ5Q2lyY3VsYXJSZWZlcmVuY2VSZW1vdmFsfHxnLl9pc0VsZW1lbnQodFtpXSkpe2lmKCFlLmNvbmZpZ3VyYWJsZSlyZXR1cm4gbnVsbDtkZWxldGUgdFtpXX1lbHNlIGlmKG51bGw9PT1nLl9wcmVwYXJlVG9TdHJpbmdpZnkodFtpXSkpe2lmKCFlLmNvbmZpZ3VyYWJsZSlyZXR1cm4gbnVsbDtkZWxldGUgdFtpXX1yZXR1cm4gZGVsZXRlIHQudmlzaXRlZEJ5Q2lyY3VsYXJSZWZlcmVuY2VSZW1vdmFsLHR9LF9hc3NpZ24odCxlKXtmb3IodmFyIGkgaW4gZSl0W2ldPWVbaV07cmV0dXJuIHR9LF9nZXRGaXJzdFBvaW50ZXJJZDp0PT50LnRvdWNoZXM/dC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyOnQucG9pbnRlcklkfHw5OTl9O2Z1bmN0aW9uIHUodCl7cmV0dXJuIGcuX2lzU3RyaW5nKHQpPyciJyt0KyciJzoiW29iamVjdCBOdW1iZXJdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KXx8Zy5faXNCb29sZWFuKHQpP3Q6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQ+MjU1PzI1NTp0PDA/MDpNYXRoLnJvdW5kKHQpfWZ1bmN0aW9uIHAoKXtpZihpLmlzVW5taW5pZmllZClyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZy5faXNOdW1iZXIodCl8fGcud2Fybih1KHQpKycgaXMgYSBub3QgdmFsaWQgdmFsdWUgZm9yICInK2UrJyIgYXR0cmlidXRlLiBUaGUgdmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLicpLHR9fWZ1bmN0aW9uIHYodCl7aWYoaS5pc1VubWluaWZpZWQpcmV0dXJuIGZ1bmN0aW9uKGUsaSl7bGV0IHI9Zy5faXNOdW1iZXIoZSksYT1nLl9pc0FycmF5KGUpJiZlLmxlbmd0aD09dDtyZXR1cm4gcnx8YXx8Zy53YXJuKHUoZSkrJyBpcyBhIG5vdCB2YWxpZCB2YWx1ZSBmb3IgIicraSsnIiBhdHRyaWJ1dGUuIFRoZSB2YWx1ZSBzaG91bGQgYmUgYSBudW1iZXIgb3IgQXJyYXk8bnVtYmVyPignK3QrIikiKSxlfX1mdW5jdGlvbiBtKCl7aWYoaS5pc1VubWluaWZpZWQpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGcuX2lzTnVtYmVyKHQpfHwiYXV0byI9PT10fHxnLndhcm4odSh0KSsnIGlzIGEgbm90IHZhbGlkIHZhbHVlIGZvciAiJytlKyciIGF0dHJpYnV0ZS4gVGhlIHZhbHVlIHNob3VsZCBiZSBhIG51bWJlciBvciAiYXV0byIuJyksdH19ZnVuY3Rpb24gXygpe2lmKGkuaXNVbm1pbmlmaWVkKXJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBnLl9pc1N0cmluZyh0KXx8Zy53YXJuKHUodCkrJyBpcyBhIG5vdCB2YWxpZCB2YWx1ZSBmb3IgIicrZSsnIiBhdHRyaWJ1dGUuIFRoZSB2YWx1ZSBzaG91bGQgYmUgYSBzdHJpbmcuJyksdH19ZnVuY3Rpb24geSgpe2lmKGkuaXNVbm1pbmlmaWVkKXJldHVybiBmdW5jdGlvbih0LGUpe2NvbnN0IGk9Zy5faXNTdHJpbmcodCkscj0iW29iamVjdCBDYW52YXNHcmFkaWVudF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfHx0JiZ0LmFkZENvbG9yU3RvcDtyZXR1cm4gaXx8cnx8Zy53YXJuKHUodCkrJyBpcyBhIG5vdCB2YWxpZCB2YWx1ZSBmb3IgIicrZSsnIiBhdHRyaWJ1dGUuIFRoZSB2YWx1ZSBzaG91bGQgYmUgYSBzdHJpbmcgb3IgYSBuYXRpdmUgZ3JhZGllbnQuJyksdH19ZnVuY3Rpb24geCgpe2lmKGkuaXNVbm1pbmlmaWVkKXJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiEwPT09dHx8ITE9PT10fHxnLndhcm4odSh0KSsnIGlzIGEgbm90IHZhbGlkIHZhbHVlIGZvciAiJytlKyciIGF0dHJpYnV0ZS4gVGhlIHZhbHVlIHNob3VsZCBiZSBhIGJvb2xlYW4uJyksdH19dmFyIGI9ImdldCIsUz0ic2V0Ijtjb25zdCB3PXthZGRHZXR0ZXJTZXR0ZXIodCxlLGkscixhKXt3LmFkZEdldHRlcih0LGUsaSksdy5hZGRTZXR0ZXIodCxlLHIsYSksdy5hZGRPdmVybG9hZGVkR2V0dGVyU2V0dGVyKHQsZSl9LGFkZEdldHRlcih0LGUsaSl7dmFyIHI9YitnLl9jYXBpdGFsaXplKGUpO3QucHJvdG90eXBlW3JdPXQucHJvdG90eXBlW3JdfHxmdW5jdGlvbigpe3ZhciB0PXRoaXMuYXR0cnNbZV07cmV0dXJuIHZvaWQgMD09PXQ/aTp0fX0sYWRkU2V0dGVyKHQsZSxpLHIpe3ZhciBhPVMrZy5fY2FwaXRhbGl6ZShlKTt0LnByb3RvdHlwZVthXXx8dy5vdmVyV3JpdGVTZXR0ZXIodCxlLGkscil9LG92ZXJXcml0ZVNldHRlcih0LGUsaSxyKXt2YXIgYT1TK2cuX2NhcGl0YWxpemUoZSk7dC5wcm90b3R5cGVbYV09ZnVuY3Rpb24odCl7cmV0dXJuIGkmJm51bGwhPXQmJih0PWkuY2FsbCh0aGlzLHQsZSkpLHRoaXMuX3NldEF0dHIoZSx0KSxyJiZyLmNhbGwodGhpcyksdGhpc319LGFkZENvbXBvbmVudHNHZXR0ZXJTZXR0ZXIodCxlLHIsYSxuKXt2YXIgcyxvLGg9ci5sZW5ndGgsbD1nLl9jYXBpdGFsaXplLGQ9YitsKGUpLGM9UytsKGUpO3QucHJvdG90eXBlW2RdPWZ1bmN0aW9uKCl7dmFyIHQ9e307Zm9yKHM9MDtzPGg7cysrKXRbbz1yW3NdXT10aGlzLmdldEF0dHIoZStsKG8pKTtyZXR1cm4gdH07dmFyIGY9ZnVuY3Rpb24odCl7aWYoaS5pc1VubWluaWZpZWQpcmV0dXJuIGZ1bmN0aW9uKGUsaSl7cmV0dXJuIGcuaXNPYmplY3QoZSl8fGcud2Fybih1KGUpKycgaXMgYSBub3QgdmFsaWQgdmFsdWUgZm9yICInK2krJyIgYXR0cmlidXRlLiBUaGUgdmFsdWUgc2hvdWxkIGJlIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgJyt0KSxlfX0ocik7dC5wcm90b3R5cGVbY109ZnVuY3Rpb24odCl7dmFyIGkscj10aGlzLmF0dHJzW2VdO2ZvcihpIGluIGEmJih0PWEuY2FsbCh0aGlzLHQpKSxmJiZmLmNhbGwodGhpcyx0LGUpLHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmdGhpcy5fc2V0QXR0cihlK2woaSksdFtpXSk7cmV0dXJuIHRoaXMuX2ZpcmVDaGFuZ2VFdmVudChlLHIsdCksbiYmbi5jYWxsKHRoaXMpLHRoaXN9LHcuYWRkT3ZlcmxvYWRlZEdldHRlclNldHRlcih0LGUpfSxhZGRPdmVybG9hZGVkR2V0dGVyU2V0dGVyKHQsZSl7dmFyIGk9Zy5fY2FwaXRhbGl6ZShlKSxyPVMraSxhPWIraTt0LnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzW3JdKGFyZ3VtZW50c1swXSksdGhpcyk6dGhpc1thXSgpfX0sYWRkRGVwcmVjYXRlZEdldHRlclNldHRlcih0LGUsaSxyKXtnLmVycm9yKCJBZGRpbmcgZGVwcmVjYXRlZCAiK2UpO3ZhciBhPWIrZy5fY2FwaXRhbGl6ZShlKSxuPWUrIiBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgc29vbi4gTG9vayBhdCBLb252YSBjaGFuZ2UgbG9nIGZvciBtb3JlIGluZm9ybWF0aW9uLiI7dC5wcm90b3R5cGVbYV09ZnVuY3Rpb24oKXtnLmVycm9yKG4pO3ZhciB0PXRoaXMuYXR0cnNbZV07cmV0dXJuIHZvaWQgMD09PXQ/aTp0fSx3LmFkZFNldHRlcih0LGUsciwoZnVuY3Rpb24oKXtnLmVycm9yKG4pfSkpLHcuYWRkT3ZlcmxvYWRlZEdldHRlclNldHRlcih0LGUpfSxiYWNrQ29tcGF0KHQsZSl7Zy5lYWNoKGUsKGZ1bmN0aW9uKGUsaSl7dmFyIHI9dC5wcm90b3R5cGVbaV0sYT1iK2cuX2NhcGl0YWxpemUoZSksbj1TK2cuX2NhcGl0YWxpemUoZSk7ZnVuY3Rpb24gcygpe3IuYXBwbHkodGhpcyxhcmd1bWVudHMpLGcuZXJyb3IoJyInK2UrJyIgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBzb29uLiBVc2UgIiInK2krJyIgaW5zdGVhZC4nKX10LnByb3RvdHlwZVtlXT1zLHQucHJvdG90eXBlW2FdPXMsdC5wcm90b3R5cGVbbl09c30pKX0sYWZ0ZXJTZXRGaWx0ZXIoKXt0aGlzLl9maWx0ZXJVcFRvRGF0ZT0hMX19O2Z1bmN0aW9uIEModCl7dmFyIGUsaSxyPVtdLGE9dC5sZW5ndGgsbj1nO2ZvcihlPTA7ZTxhO2UrKylpPXRbZV0sbi5faXNOdW1iZXIoaSk/aT1NYXRoLnJvdW5kKDFlMyppKS8xZTM6bi5faXNTdHJpbmcoaSl8fChpKz0iIiksci5wdXNoKGkpO3JldHVybiByfXZhciBrPVsiYXJjIiwiYXJjVG8iLCJiZWdpblBhdGgiLCJiZXppZXJDdXJ2ZVRvIiwiY2xlYXJSZWN0IiwiY2xpcCIsImNsb3NlUGF0aCIsImNyZWF0ZUxpbmVhckdyYWRpZW50IiwiY3JlYXRlUGF0dGVybiIsImNyZWF0ZVJhZGlhbEdyYWRpZW50IiwiZHJhd0ltYWdlIiwiZWxsaXBzZSIsImZpbGwiLCJmaWxsVGV4dCIsImdldEltYWdlRGF0YSIsImNyZWF0ZUltYWdlRGF0YSIsImxpbmVUbyIsIm1vdmVUbyIsInB1dEltYWdlRGF0YSIsInF1YWRyYXRpY0N1cnZlVG8iLCJyZWN0IiwicmVzdG9yZSIsInJvdGF0ZSIsInNhdmUiLCJzY2FsZSIsInNldExpbmVEYXNoIiwic2V0VHJhbnNmb3JtIiwic3Ryb2tlIiwic3Ryb2tlVGV4dCIsInRyYW5zZm9ybSIsInRyYW5zbGF0ZSJdO2NsYXNzIFB7Y29uc3RydWN0b3IodCl7dGhpcy5jYW52YXM9dCx0aGlzLl9jb250ZXh0PXQuX2NhbnZhcy5nZXRDb250ZXh0KCIyZCIpLGkuZW5hYmxlVHJhY2UmJih0aGlzLnRyYWNlQXJyPVtdLHRoaXMuX2VuYWJsZVRyYWNlKCkpfWZpbGxTaGFwZSh0KXt0LmZpbGxFbmFibGVkKCkmJnRoaXMuX2ZpbGwodCl9X2ZpbGwodCl7fXN0cm9rZVNoYXBlKHQpe3QuaGFzU3Ryb2tlKCkmJnRoaXMuX3N0cm9rZSh0KX1fc3Ryb2tlKHQpe31maWxsU3Ryb2tlU2hhcGUodCl7dC5hdHRycy5maWxsQWZ0ZXJTdHJva2VFbmFibGVkPyh0aGlzLnN0cm9rZVNoYXBlKHQpLHRoaXMuZmlsbFNoYXBlKHQpKToodGhpcy5maWxsU2hhcGUodCksdGhpcy5zdHJva2VTaGFwZSh0KSl9Z2V0VHJhY2UodCxlKXt2YXIgaSxyLGEsbixzPXRoaXMudHJhY2VBcnIsbz1zLmxlbmd0aCxoPSIiO2ZvcihpPTA7aTxvO2krKykoYT0ocj1zW2ldKS5tZXRob2QpPyhuPXIuYXJncyxoKz1hLHQ/aCs9IigpIjpnLl9pc0FycmF5KG5bMF0pP2grPSIoWyIrbi5qb2luKCIsIikrIl0pIjooZSYmKG49bi5tYXAoKHQ9PiJudW1iZXIiPT10eXBlb2YgdD9NYXRoLmZsb29yKHQpOnQpKSksaCs9IigiK24uam9pbigiLCIpKyIpIikpOihoKz1yLnByb3BlcnR5LHR8fChoKz0iPSIrci52YWwpKSxoKz0iOyI7cmV0dXJuIGh9Y2xlYXJUcmFjZSgpe3RoaXMudHJhY2VBcnI9W119X3RyYWNlKHQpe3ZhciBlPXRoaXMudHJhY2VBcnI7ZS5wdXNoKHQpLGUubGVuZ3RoPj0xMDAmJmUuc2hpZnQoKX1yZXNldCgpe3ZhciB0PXRoaXMuZ2V0Q2FudmFzKCkuZ2V0UGl4ZWxSYXRpbygpO3RoaXMuc2V0VHJhbnNmb3JtKDEqdCwwLDAsMSp0LDAsMCl9Z2V0Q2FudmFzKCl7cmV0dXJuIHRoaXMuY2FudmFzfWNsZWFyKHQpe3ZhciBlPXRoaXMuZ2V0Q2FudmFzKCk7dD90aGlzLmNsZWFyUmVjdCh0Lnh8fDAsdC55fHwwLHQud2lkdGh8fDAsdC5oZWlnaHR8fDApOnRoaXMuY2xlYXJSZWN0KDAsMCxlLmdldFdpZHRoKCkvZS5waXhlbFJhdGlvLGUuZ2V0SGVpZ2h0KCkvZS5waXhlbFJhdGlvKX1fYXBwbHlMaW5lQ2FwKHQpe3ZhciBlPXQuZ2V0TGluZUNhcCgpO2UmJnRoaXMuc2V0QXR0cigibGluZUNhcCIsZSl9X2FwcGx5T3BhY2l0eSh0KXt2YXIgZT10LmdldEFic29sdXRlT3BhY2l0eSgpOzEhPT1lJiZ0aGlzLnNldEF0dHIoImdsb2JhbEFscGhhIixlKX1fYXBwbHlMaW5lSm9pbih0KXt2YXIgZT10LmF0dHJzLmxpbmVKb2luO2UmJnRoaXMuc2V0QXR0cigibGluZUpvaW4iLGUpfXNldEF0dHIodCxlKXt0aGlzLl9jb250ZXh0W3RdPWV9YXJjKHQsZSxpLHIsYSxuKXt0aGlzLl9jb250ZXh0LmFyYyh0LGUsaSxyLGEsbil9YXJjVG8odCxlLGkscixhKXt0aGlzLl9jb250ZXh0LmFyY1RvKHQsZSxpLHIsYSl9YmVnaW5QYXRoKCl7dGhpcy5fY29udGV4dC5iZWdpblBhdGgoKX1iZXppZXJDdXJ2ZVRvKHQsZSxpLHIsYSxuKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8odCxlLGkscixhLG4pfWNsZWFyUmVjdCh0LGUsaSxyKXt0aGlzLl9jb250ZXh0LmNsZWFyUmVjdCh0LGUsaSxyKX1jbGlwKCl7dGhpcy5fY29udGV4dC5jbGlwKCl9Y2xvc2VQYXRoKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX1jcmVhdGVJbWFnZURhdGEodCxlKXt2YXIgaT1hcmd1bWVudHM7cmV0dXJuIDI9PT1pLmxlbmd0aD90aGlzLl9jb250ZXh0LmNyZWF0ZUltYWdlRGF0YSh0LGUpOjE9PT1pLmxlbmd0aD90aGlzLl9jb250ZXh0LmNyZWF0ZUltYWdlRGF0YSh0KTp2b2lkIDB9Y3JlYXRlTGluZWFyR3JhZGllbnQodCxlLGkscil7cmV0dXJuIHRoaXMuX2NvbnRleHQuY3JlYXRlTGluZWFyR3JhZGllbnQodCxlLGkscil9Y3JlYXRlUGF0dGVybih0LGUpe3JldHVybiB0aGlzLl9jb250ZXh0LmNyZWF0ZVBhdHRlcm4odCxlKX1jcmVhdGVSYWRpYWxHcmFkaWVudCh0LGUsaSxyLGEsbil7cmV0dXJuIHRoaXMuX2NvbnRleHQuY3JlYXRlUmFkaWFsR3JhZGllbnQodCxlLGkscixhLG4pfWRyYXdJbWFnZSh0LGUsaSxyLGEsbixzLG8saCl7dmFyIGw9YXJndW1lbnRzLGQ9dGhpcy5fY29udGV4dDszPT09bC5sZW5ndGg/ZC5kcmF3SW1hZ2UodCxlLGkpOjU9PT1sLmxlbmd0aD9kLmRyYXdJbWFnZSh0LGUsaSxyLGEpOjk9PT1sLmxlbmd0aCYmZC5kcmF3SW1hZ2UodCxlLGkscixhLG4scyxvLGgpfWVsbGlwc2UodCxlLGkscixhLG4scyxvKXt0aGlzLl9jb250ZXh0LmVsbGlwc2UodCxlLGkscixhLG4scyxvKX1pc1BvaW50SW5QYXRoKHQsZSl7cmV0dXJuIHRoaXMuX2NvbnRleHQuaXNQb2ludEluUGF0aCh0LGUpfWZpbGwodCl7dD90aGlzLl9jb250ZXh0LmZpbGwodCk6dGhpcy5fY29udGV4dC5maWxsKCl9ZmlsbFJlY3QodCxlLGkscil7dGhpcy5fY29udGV4dC5maWxsUmVjdCh0LGUsaSxyKX1zdHJva2VSZWN0KHQsZSxpLHIpe3RoaXMuX2NvbnRleHQuc3Ryb2tlUmVjdCh0LGUsaSxyKX1maWxsVGV4dCh0LGUsaSxyKXtyP3RoaXMuX2NvbnRleHQuZmlsbFRleHQodCxlLGkscik6dGhpcy5fY29udGV4dC5maWxsVGV4dCh0LGUsaSl9bWVhc3VyZVRleHQodCl7cmV0dXJuIHRoaXMuX2NvbnRleHQubWVhc3VyZVRleHQodCl9Z2V0SW1hZ2VEYXRhKHQsZSxpLHIpe3JldHVybiB0aGlzLl9jb250ZXh0LmdldEltYWdlRGF0YSh0LGUsaSxyKX1saW5lVG8odCxlKXt0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpfW1vdmVUbyh0LGUpe3RoaXMuX2NvbnRleHQubW92ZVRvKHQsZSl9cmVjdCh0LGUsaSxyKXt0aGlzLl9jb250ZXh0LnJlY3QodCxlLGkscil9cHV0SW1hZ2VEYXRhKHQsZSxpKXt0aGlzLl9jb250ZXh0LnB1dEltYWdlRGF0YSh0LGUsaSl9cXVhZHJhdGljQ3VydmVUbyh0LGUsaSxyKXt0aGlzLl9jb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8odCxlLGkscil9cmVzdG9yZSgpe3RoaXMuX2NvbnRleHQucmVzdG9yZSgpfXJvdGF0ZSh0KXt0aGlzLl9jb250ZXh0LnJvdGF0ZSh0KX1zYXZlKCl7dGhpcy5fY29udGV4dC5zYXZlKCl9c2NhbGUodCxlKXt0aGlzLl9jb250ZXh0LnNjYWxlKHQsZSl9c2V0TGluZURhc2godCl7dGhpcy5fY29udGV4dC5zZXRMaW5lRGFzaD90aGlzLl9jb250ZXh0LnNldExpbmVEYXNoKHQpOiJtb3pEYXNoImluIHRoaXMuX2NvbnRleHQ/dGhpcy5fY29udGV4dC5tb3pEYXNoPXQ6IndlYmtpdExpbmVEYXNoImluIHRoaXMuX2NvbnRleHQmJih0aGlzLl9jb250ZXh0LndlYmtpdExpbmVEYXNoPXQpfWdldExpbmVEYXNoKCl7cmV0dXJuIHRoaXMuX2NvbnRleHQuZ2V0TGluZURhc2goKX1zZXRUcmFuc2Zvcm0odCxlLGkscixhLG4pe3RoaXMuX2NvbnRleHQuc2V0VHJhbnNmb3JtKHQsZSxpLHIsYSxuKX1zdHJva2UodCl7dD90aGlzLl9jb250ZXh0LnN0cm9rZSh0KTp0aGlzLl9jb250ZXh0LnN0cm9rZSgpfXN0cm9rZVRleHQodCxlLGkscil7dGhpcy5fY29udGV4dC5zdHJva2VUZXh0KHQsZSxpLHIpfXRyYW5zZm9ybSh0LGUsaSxyLGEsbil7dGhpcy5fY29udGV4dC50cmFuc2Zvcm0odCxlLGkscixhLG4pfXRyYW5zbGF0ZSh0LGUpe3RoaXMuX2NvbnRleHQudHJhbnNsYXRlKHQsZSl9X2VuYWJsZVRyYWNlKCl7dmFyIHQsZSxpPXRoaXMscj1rLmxlbmd0aCxhPXRoaXMuc2V0QXR0cixuPWZ1bmN0aW9uKHQpe3ZhciByLGE9aVt0XTtpW3RdPWZ1bmN0aW9uKCl7cmV0dXJuIGU9QyhBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpLHI9YS5hcHBseShpLGFyZ3VtZW50cyksaS5fdHJhY2Uoe21ldGhvZDp0LGFyZ3M6ZX0pLHJ9fTtmb3IodD0wO3Q8cjt0KyspbihrW3RdKTtpLnNldEF0dHI9ZnVuY3Rpb24oKXthLmFwcGx5KGksYXJndW1lbnRzKTt2YXIgdD1hcmd1bWVudHNbMF0sZT1hcmd1bWVudHNbMV07InNoYWRvd09mZnNldFgiIT09dCYmInNoYWRvd09mZnNldFkiIT09dCYmInNoYWRvd0JsdXIiIT09dHx8KGUvPXRoaXMuY2FudmFzLmdldFBpeGVsUmF0aW8oKSksaS5fdHJhY2Uoe3Byb3BlcnR5OnQsdmFsOmV9KX19X2FwcGx5R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKHQpe2NvbnN0IGU9dC5hdHRycy5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247IWV8fCJzb3VyY2Utb3ZlciI9PT1lfHx0aGlzLnNldEF0dHIoImdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIsZSl9fVsiZmlsbFN0eWxlIiwic3Ryb2tlU3R5bGUiLCJzaGFkb3dDb2xvciIsInNoYWRvd0JsdXIiLCJzaGFkb3dPZmZzZXRYIiwic2hhZG93T2Zmc2V0WSIsImxpbmVDYXAiLCJsaW5lRGFzaE9mZnNldCIsImxpbmVKb2luIiwibGluZVdpZHRoIiwibWl0ZXJMaW1pdCIsImZvbnQiLCJ0ZXh0QWxpZ24iLCJ0ZXh0QmFzZWxpbmUiLCJnbG9iYWxBbHBoYSIsImdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIsImltYWdlU21vb3RoaW5nRW5hYmxlZCJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShQLnByb3RvdHlwZSx0LHtnZXQoKXtyZXR1cm4gdGhpcy5fY29udGV4dFt0XX0sc2V0KGUpe3RoaXMuX2NvbnRleHRbdF09ZX19KX0pKTtjbGFzcyBUIGV4dGVuZHMgUHtfZmlsbENvbG9yKHQpe3ZhciBlPXQuZmlsbCgpO3RoaXMuc2V0QXR0cigiZmlsbFN0eWxlIixlKSx0Ll9maWxsRnVuYyh0aGlzKX1fZmlsbFBhdHRlcm4odCl7dGhpcy5zZXRBdHRyKCJmaWxsU3R5bGUiLHQuX2dldEZpbGxQYXR0ZXJuKCkpLHQuX2ZpbGxGdW5jKHRoaXMpfV9maWxsTGluZWFyR3JhZGllbnQodCl7dmFyIGU9dC5fZ2V0TGluZWFyR3JhZGllbnQoKTtlJiYodGhpcy5zZXRBdHRyKCJmaWxsU3R5bGUiLGUpLHQuX2ZpbGxGdW5jKHRoaXMpKX1fZmlsbFJhZGlhbEdyYWRpZW50KHQpe3ZhciBlPXQuX2dldFJhZGlhbEdyYWRpZW50KCk7ZSYmKHRoaXMuc2V0QXR0cigiZmlsbFN0eWxlIixlKSx0Ll9maWxsRnVuYyh0aGlzKSl9X2ZpbGwodCl7dmFyIGU9dC5maWxsKCksaT10LmdldEZpbGxQcmlvcml0eSgpO2lmKGUmJiJjb2xvciI9PT1pKXRoaXMuX2ZpbGxDb2xvcih0KTtlbHNle3ZhciByPXQuZ2V0RmlsbFBhdHRlcm5JbWFnZSgpO2lmKHImJiJwYXR0ZXJuIj09PWkpdGhpcy5fZmlsbFBhdHRlcm4odCk7ZWxzZXt2YXIgYT10LmdldEZpbGxMaW5lYXJHcmFkaWVudENvbG9yU3RvcHMoKTtpZihhJiYibGluZWFyLWdyYWRpZW50Ij09PWkpdGhpcy5fZmlsbExpbmVhckdyYWRpZW50KHQpO2Vsc2V7dmFyIG49dC5nZXRGaWxsUmFkaWFsR3JhZGllbnRDb2xvclN0b3BzKCk7biYmInJhZGlhbC1ncmFkaWVudCI9PT1pP3RoaXMuX2ZpbGxSYWRpYWxHcmFkaWVudCh0KTplP3RoaXMuX2ZpbGxDb2xvcih0KTpyP3RoaXMuX2ZpbGxQYXR0ZXJuKHQpOmE/dGhpcy5fZmlsbExpbmVhckdyYWRpZW50KHQpOm4mJnRoaXMuX2ZpbGxSYWRpYWxHcmFkaWVudCh0KX19fX1fc3Ryb2tlTGluZWFyR3JhZGllbnQodCl7dmFyIGU9dC5nZXRTdHJva2VMaW5lYXJHcmFkaWVudFN0YXJ0UG9pbnQoKSxpPXQuZ2V0U3Ryb2tlTGluZWFyR3JhZGllbnRFbmRQb2ludCgpLHI9dC5nZXRTdHJva2VMaW5lYXJHcmFkaWVudENvbG9yU3RvcHMoKSxhPXRoaXMuY3JlYXRlTGluZWFyR3JhZGllbnQoZS54LGUueSxpLngsaS55KTtpZihyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rPTIpYS5hZGRDb2xvclN0b3AocltuXSxyW24rMV0pO3RoaXMuc2V0QXR0cigic3Ryb2tlU3R5bGUiLGEpfX1fc3Ryb2tlKHQpe3ZhciBlPXQuZGFzaCgpLGk9dC5nZXRTdHJva2VTY2FsZUVuYWJsZWQoKTtpZih0Lmhhc1N0cm9rZSgpKXtpZighaSl7dGhpcy5zYXZlKCk7dmFyIHI9dGhpcy5nZXRDYW52YXMoKS5nZXRQaXhlbFJhdGlvKCk7dGhpcy5zZXRUcmFuc2Zvcm0ociwwLDAsciwwLDApfXRoaXMuX2FwcGx5TGluZUNhcCh0KSxlJiZ0LmRhc2hFbmFibGVkKCkmJih0aGlzLnNldExpbmVEYXNoKGUpLHRoaXMuc2V0QXR0cigibGluZURhc2hPZmZzZXQiLHQuZGFzaE9mZnNldCgpKSksdGhpcy5zZXRBdHRyKCJsaW5lV2lkdGgiLHQuc3Ryb2tlV2lkdGgoKSksdC5nZXRTaGFkb3dGb3JTdHJva2VFbmFibGVkKCl8fHRoaXMuc2V0QXR0cigic2hhZG93Q29sb3IiLCJyZ2JhKDAsMCwwLDApIiksdC5nZXRTdHJva2VMaW5lYXJHcmFkaWVudENvbG9yU3RvcHMoKT90aGlzLl9zdHJva2VMaW5lYXJHcmFkaWVudCh0KTp0aGlzLnNldEF0dHIoInN0cm9rZVN0eWxlIix0LnN0cm9rZSgpKSx0Ll9zdHJva2VGdW5jKHRoaXMpLGl8fHRoaXMucmVzdG9yZSgpfX1fYXBwbHlTaGFkb3codCl7dmFyIGUsaSxyLGE9bnVsbCE9PShlPXQuZ2V0U2hhZG93UkdCQSgpKSYmdm9pZCAwIT09ZT9lOiJibGFjayIsbj1udWxsIT09KGk9dC5nZXRTaGFkb3dCbHVyKCkpJiZ2b2lkIDAhPT1pP2k6NSxzPW51bGwhPT0ocj10LmdldFNoYWRvd09mZnNldCgpKSYmdm9pZCAwIT09cj9yOnt4OjAseTowfSxvPXQuZ2V0QWJzb2x1dGVTY2FsZSgpLGg9dGhpcy5jYW52YXMuZ2V0UGl4ZWxSYXRpbygpLGw9by54KmgsZD1vLnkqaDt0aGlzLnNldEF0dHIoInNoYWRvd0NvbG9yIixhKSx0aGlzLnNldEF0dHIoInNoYWRvd0JsdXIiLG4qTWF0aC5taW4oTWF0aC5hYnMobCksTWF0aC5hYnMoZCkpKSx0aGlzLnNldEF0dHIoInNoYWRvd09mZnNldFgiLHMueCpsKSx0aGlzLnNldEF0dHIoInNoYWRvd09mZnNldFkiLHMueSpkKX19Y2xhc3MgQSBleHRlbmRzIFB7X2ZpbGwodCl7dGhpcy5zYXZlKCksdGhpcy5zZXRBdHRyKCJmaWxsU3R5bGUiLHQuY29sb3JLZXkpLHQuX2ZpbGxGdW5jSGl0KHRoaXMpLHRoaXMucmVzdG9yZSgpfXN0cm9rZVNoYXBlKHQpe3QuaGFzSGl0U3Ryb2tlKCkmJnRoaXMuX3N0cm9rZSh0KX1fc3Ryb2tlKHQpe2lmKHQuaGFzSGl0U3Ryb2tlKCkpe3ZhciBlPXQuZ2V0U3Ryb2tlU2NhbGVFbmFibGVkKCk7aWYoIWUpe3RoaXMuc2F2ZSgpO3ZhciBpPXRoaXMuZ2V0Q2FudmFzKCkuZ2V0UGl4ZWxSYXRpbygpO3RoaXMuc2V0VHJhbnNmb3JtKGksMCwwLGksMCwwKX10aGlzLl9hcHBseUxpbmVDYXAodCk7dmFyIHI9dC5oaXRTdHJva2VXaWR0aCgpLGE9ImF1dG8iPT09cj90LnN0cm9rZVdpZHRoKCk6cjt0aGlzLnNldEF0dHIoImxpbmVXaWR0aCIsYSksdGhpcy5zZXRBdHRyKCJzdHJva2VTdHlsZSIsdC5jb2xvcktleSksdC5fc3Ryb2tlRnVuY0hpdCh0aGlzKSxlfHx0aGlzLnJlc3RvcmUoKX19fXZhciBNO2NsYXNzIEd7Y29uc3RydWN0b3IodCl7dGhpcy5waXhlbFJhdGlvPTEsdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsdGhpcy5pc0NhY2hlPSExO3ZhciBlPSh0fHx7fSkucGl4ZWxSYXRpb3x8aS5waXhlbFJhdGlvfHxmdW5jdGlvbigpe2lmKE0pcmV0dXJuIE07dmFyIHQ9Zy5jcmVhdGVDYW52YXNFbGVtZW50KCkuZ2V0Q29udGV4dCgiMmQiKTtyZXR1cm4gTT0oaS5fZ2xvYmFsLmRldmljZVBpeGVsUmF0aW98fDEpLyh0LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHQubW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8dC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHQub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHQuYmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8MSl9KCk7dGhpcy5waXhlbFJhdGlvPWUsdGhpcy5fY2FudmFzPWcuY3JlYXRlQ2FudmFzRWxlbWVudCgpLHRoaXMuX2NhbnZhcy5zdHlsZS5wYWRkaW5nPSIwIix0aGlzLl9jYW52YXMuc3R5bGUubWFyZ2luPSIwIix0aGlzLl9jYW52YXMuc3R5bGUuYm9yZGVyPSIwIix0aGlzLl9jYW52YXMuc3R5bGUuYmFja2dyb3VuZD0idHJhbnNwYXJlbnQiLHRoaXMuX2NhbnZhcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuX2NhbnZhcy5zdHlsZS50b3A9IjAiLHRoaXMuX2NhbnZhcy5zdHlsZS5sZWZ0PSIwIn1nZXRDb250ZXh0KCl7cmV0dXJuIHRoaXMuY29udGV4dH1nZXRQaXhlbFJhdGlvKCl7cmV0dXJuIHRoaXMucGl4ZWxSYXRpb31zZXRQaXhlbFJhdGlvKHQpe3ZhciBlPXRoaXMucGl4ZWxSYXRpbzt0aGlzLnBpeGVsUmF0aW89dCx0aGlzLnNldFNpemUodGhpcy5nZXRXaWR0aCgpL2UsdGhpcy5nZXRIZWlnaHQoKS9lKX1zZXRXaWR0aCh0KXt0aGlzLndpZHRoPXRoaXMuX2NhbnZhcy53aWR0aD10KnRoaXMucGl4ZWxSYXRpbyx0aGlzLl9jYW52YXMuc3R5bGUud2lkdGg9dCsicHgiO3ZhciBlPXRoaXMucGl4ZWxSYXRpbzt0aGlzLmdldENvbnRleHQoKS5fY29udGV4dC5zY2FsZShlLGUpfXNldEhlaWdodCh0KXt0aGlzLmhlaWdodD10aGlzLl9jYW52YXMuaGVpZ2h0PXQqdGhpcy5waXhlbFJhdGlvLHRoaXMuX2NhbnZhcy5zdHlsZS5oZWlnaHQ9dCsicHgiO3ZhciBlPXRoaXMucGl4ZWxSYXRpbzt0aGlzLmdldENvbnRleHQoKS5fY29udGV4dC5zY2FsZShlLGUpfWdldFdpZHRoKCl7cmV0dXJuIHRoaXMud2lkdGh9Z2V0SGVpZ2h0KCl7cmV0dXJuIHRoaXMuaGVpZ2h0fXNldFNpemUodCxlKXt0aGlzLnNldFdpZHRoKHR8fDApLHRoaXMuc2V0SGVpZ2h0KGV8fDApfXRvRGF0YVVSTCh0LGUpe3RyeXtyZXR1cm4gdGhpcy5fY2FudmFzLnRvRGF0YVVSTCh0LGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gdGhpcy5fY2FudmFzLnRvRGF0YVVSTCgpfWNhdGNoKHQpe3JldHVybiBnLmVycm9yKCJVbmFibGUgdG8gZ2V0IGRhdGEgVVJMLiAiK3QubWVzc2FnZSsiIEZvciBtb3JlIGluZm8gcmVhZCBodHRwczovL2tvbnZhanMub3JnL2RvY3MvcG9zdHMvVGFpbnRlZF9DYW52YXMuaHRtbC4iKSwiIn19fX13LmFkZEdldHRlclNldHRlcihHLCJwaXhlbFJhdGlvIix2b2lkIDAscCgpKTtjbGFzcyBFIGV4dGVuZHMgR3tjb25zdHJ1Y3Rvcih0PXt3aWR0aDowLGhlaWdodDowfSl7c3VwZXIodCksdGhpcy5jb250ZXh0PW5ldyBUKHRoaXMpLHRoaXMuc2V0U2l6ZSh0LndpZHRoLHQuaGVpZ2h0KX19Y2xhc3MgUiBleHRlbmRzIEd7Y29uc3RydWN0b3IodD17d2lkdGg6MCxoZWlnaHQ6MH0pe3N1cGVyKHQpLHRoaXMuaGl0Q2FudmFzPSEwLHRoaXMuY29udGV4dD1uZXcgQSh0aGlzKSx0aGlzLnNldFNpemUodC53aWR0aCx0LmhlaWdodCl9fWNvbnN0IEw9e2dldCBpc0RyYWdnaW5nKCl7dmFyIHQ9ITE7cmV0dXJuIEwuX2RyYWdFbGVtZW50cy5mb3JFYWNoKChlPT57ImRyYWdnaW5nIj09PWUuZHJhZ1N0YXR1cyYmKHQ9ITApfSkpLHR9LGp1c3REcmFnZ2VkOiExLGdldCBub2RlKCl7dmFyIHQ7cmV0dXJuIEwuX2RyYWdFbGVtZW50cy5mb3JFYWNoKChlPT57dD1lLm5vZGV9KSksdH0sX2RyYWdFbGVtZW50czpuZXcgTWFwLF9kcmFnKHQpe2NvbnN0IGU9W107TC5fZHJhZ0VsZW1lbnRzLmZvckVhY2goKChpLHIpPT57Y29uc3R7bm9kZTphfT1pLG49YS5nZXRTdGFnZSgpO24uc2V0UG9pbnRlcnNQb3NpdGlvbnModCksdm9pZCAwPT09aS5wb2ludGVySWQmJihpLnBvaW50ZXJJZD1nLl9nZXRGaXJzdFBvaW50ZXJJZCh0KSk7Y29uc3Qgcz1uLl9jaGFuZ2VkUG9pbnRlclBvc2l0aW9ucy5maW5kKCh0PT50LmlkPT09aS5wb2ludGVySWQpKTtpZihzKXtpZigiZHJhZ2dpbmciIT09aS5kcmFnU3RhdHVzKXt2YXIgbz1hLmRyYWdEaXN0YW5jZSgpO2lmKE1hdGgubWF4KE1hdGguYWJzKHMueC1pLnN0YXJ0UG9pbnRlclBvcy54KSxNYXRoLmFicyhzLnktaS5zdGFydFBvaW50ZXJQb3MueSkpPG8pcmV0dXJuO2lmKGEuc3RhcnREcmFnKHtldnQ6dH0pLCFhLmlzRHJhZ2dpbmcoKSlyZXR1cm59YS5fc2V0RHJhZ1Bvc2l0aW9uKHQsaSksZS5wdXNoKGEpfX0pKSxlLmZvckVhY2goKGU9PntlLmZpcmUoImRyYWdtb3ZlIix7dHlwZToiZHJhZ21vdmUiLHRhcmdldDplLGV2dDp0fSwhMCl9KSl9LF9lbmREcmFnQmVmb3JlKHQpe0wuX2RyYWdFbGVtZW50cy5mb3JFYWNoKChlPT57Y29uc3R7bm9kZTpyfT1lLGE9ci5nZXRTdGFnZSgpO3QmJmEuc2V0UG9pbnRlcnNQb3NpdGlvbnModCk7aWYoIWEuX2NoYW5nZWRQb2ludGVyUG9zaXRpb25zLmZpbmQoKHQ9PnQuaWQ9PT1lLnBvaW50ZXJJZCkpKXJldHVybjsiZHJhZ2dpbmciIT09ZS5kcmFnU3RhdHVzJiYic3RvcHBlZCIhPT1lLmRyYWdTdGF0dXN8fChMLmp1c3REcmFnZ2VkPSEwLGkuX21vdXNlTGlzdGVuQ2xpY2s9ITEsaS5fdG91Y2hMaXN0ZW5DbGljaz0hMSxpLl9wb2ludGVyTGlzdGVuQ2xpY2s9ITEsZS5kcmFnU3RhdHVzPSJzdG9wcGVkIik7Y29uc3Qgbj1lLm5vZGUuZ2V0TGF5ZXIoKXx8ZS5ub2RlIGluc3RhbmNlb2YgaS5TdGFnZSYmZS5ub2RlO24mJm4uYmF0Y2hEcmF3KCl9KSl9LF9lbmREcmFnQWZ0ZXIodCl7TC5fZHJhZ0VsZW1lbnRzLmZvckVhY2goKChlLGkpPT57InN0b3BwZWQiPT09ZS5kcmFnU3RhdHVzJiZlLm5vZGUuZmlyZSgiZHJhZ2VuZCIse3R5cGU6ImRyYWdlbmQiLHRhcmdldDplLm5vZGUsZXZ0OnR9LCEwKSwiZHJhZ2dpbmciIT09ZS5kcmFnU3RhdHVzJiZMLl9kcmFnRWxlbWVudHMuZGVsZXRlKGkpfSkpfX07aS5pc0Jyb3dzZXImJih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsTC5fZW5kRHJhZ0JlZm9yZSwhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixMLl9lbmREcmFnQmVmb3JlLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixMLl9kcmFnKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixMLl9kcmFnKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsTC5fZW5kRHJhZ0FmdGVyLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLEwuX2VuZERyYWdBZnRlciwhMSkpO3ZhciBEPSJhYnNvbHV0ZU9wYWNpdHkiLE89ImFsbEV2ZW50TGlzdGVuZXJzIixJPSJhYnNvbHV0ZVRyYW5zZm9ybSIsRj0iYWJzb2x1dGVTY2FsZSIsTj0iY2FudmFzIixCPSJsaXN0ZW5pbmciLHo9Im1vdXNlZW50ZXIiLFc9Im1vdXNlbGVhdmUiLEg9IlNoYXBlIixZPSIgIixYPSJzdGFnZSIsaj0idHJhbnNmb3JtIixVPSJ2aXNpYmxlIixxPVsieENoYW5nZS5rb252YSIsInlDaGFuZ2Uua29udmEiLCJzY2FsZVhDaGFuZ2Uua29udmEiLCJzY2FsZVlDaGFuZ2Uua29udmEiLCJza2V3WENoYW5nZS5rb252YSIsInNrZXdZQ2hhbmdlLmtvbnZhIiwicm90YXRpb25DaGFuZ2Uua29udmEiLCJvZmZzZXRYQ2hhbmdlLmtvbnZhIiwib2Zmc2V0WUNoYW5nZS5rb252YSIsInRyYW5zZm9ybXNFbmFibGVkQ2hhbmdlLmtvbnZhIl0uam9pbihZKTtsZXQgVj0xO2NsYXNzIEt7Y29uc3RydWN0b3IodCl7dGhpcy5faWQ9VisrLHRoaXMuZXZlbnRMaXN0ZW5lcnM9e30sdGhpcy5hdHRycz17fSx0aGlzLmluZGV4PTAsdGhpcy5fYWxsRXZlbnRMaXN0ZW5lcnM9bnVsbCx0aGlzLnBhcmVudD1udWxsLHRoaXMuX2NhY2hlPW5ldyBNYXAsdGhpcy5fYXR0YWNoZWREZXBzTGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5fbGFzdFBvcz1udWxsLHRoaXMuX2JhdGNoaW5nVHJhbnNmb3JtQ2hhbmdlPSExLHRoaXMuX25lZWRDbGVhclRyYW5zZm9ybUNhY2hlPSExLHRoaXMuX2ZpbHRlclVwVG9EYXRlPSExLHRoaXMuX2lzVW5kZXJDYWNoZT0hMSx0aGlzLl9kcmFnRXZlbnRJZD1udWxsLHRoaXMuX3Nob3VsZEZpcmVDaGFuZ2VFdmVudHM9ITEsdGhpcy5zZXRBdHRycyh0KSx0aGlzLl9zaG91bGRGaXJlQ2hhbmdlRXZlbnRzPSEwfWhhc0NoaWxkcmVuKCl7cmV0dXJuITF9X2NsZWFyQ2FjaGUodCl7dCE9PWomJnQhPT1JfHwhdGhpcy5fY2FjaGUuZ2V0KHQpP3Q/dGhpcy5fY2FjaGUuZGVsZXRlKHQpOnRoaXMuX2NhY2hlLmNsZWFyKCk6dGhpcy5fY2FjaGUuZ2V0KHQpLmRpcnR5PSEwfV9nZXRDYWNoZSh0LGUpe3ZhciBpPXRoaXMuX2NhY2hlLmdldCh0KTtyZXR1cm4odm9pZCAwPT09aXx8KHQ9PT1qfHx0PT09SSkmJiEwPT09aS5kaXJ0eSkmJihpPWUuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZS5zZXQodCxpKSksaX1fY2FsY3VsYXRlKHQsZSxpKXtpZighdGhpcy5fYXR0YWNoZWREZXBzTGlzdGVuZXJzLmdldCh0KSl7Y29uc3QgaT1lLm1hcCgodD0+dCsiQ2hhbmdlLmtvbnZhIikpLmpvaW4oWSk7dGhpcy5vbihpLCgoKT0+e3RoaXMuX2NsZWFyQ2FjaGUodCl9KSksdGhpcy5fYXR0YWNoZWREZXBzTGlzdGVuZXJzLnNldCh0LCEwKX1yZXR1cm4gdGhpcy5fZ2V0Q2FjaGUodCxpKX1fZ2V0Q2FudmFzQ2FjaGUoKXtyZXR1cm4gdGhpcy5fY2FjaGUuZ2V0KE4pfV9jbGVhclNlbGZBbmREZXNjZW5kYW50Q2FjaGUodCl7dGhpcy5fY2xlYXJDYWNoZSh0KSx0PT09SSYmdGhpcy5maXJlKCJhYnNvbHV0ZVRyYW5zZm9ybUNoYW5nZSIpfWNsZWFyQ2FjaGUoKXtyZXR1cm4gdGhpcy5fY2FjaGUuZGVsZXRlKE4pLHRoaXMuX2NsZWFyU2VsZkFuZERlc2NlbmRhbnRDYWNoZSgpLHRoaXMuX3JlcXVlc3REcmF3KCksdGhpc31jYWNoZSh0KXt2YXIgZT10fHx7fSxpPXt9O3ZvaWQgMCE9PWUueCYmdm9pZCAwIT09ZS55JiZ2b2lkIDAhPT1lLndpZHRoJiZ2b2lkIDAhPT1lLmhlaWdodHx8KGk9dGhpcy5nZXRDbGllbnRSZWN0KHtza2lwVHJhbnNmb3JtOiEwLHJlbGF0aXZlVG86dGhpcy5nZXRQYXJlbnQoKX0pKTt2YXIgcj1NYXRoLmNlaWwoZS53aWR0aHx8aS53aWR0aCksYT1NYXRoLmNlaWwoZS5oZWlnaHR8fGkuaGVpZ2h0KSxuPWUucGl4ZWxSYXRpbyxzPXZvaWQgMD09PWUueD9pLng6ZS54LG89dm9pZCAwPT09ZS55P2kueTplLnksaD1lLm9mZnNldHx8MCxsPWUuZHJhd0JvcmRlcnx8ITEsZD1lLmhpdENhbnZhc1BpeGVsUmF0aW98fDE7aWYociYmYSl7cy09aCxvLT1oO3ZhciBjPW5ldyBFKHtwaXhlbFJhdGlvOm4sd2lkdGg6cis9MipoLGhlaWdodDphKz0yKmh9KSx1PW5ldyBFKHtwaXhlbFJhdGlvOm4sd2lkdGg6MCxoZWlnaHQ6MH0pLGY9bmV3IFIoe3BpeGVsUmF0aW86ZCx3aWR0aDpyLGhlaWdodDphfSkscD1jLmdldENvbnRleHQoKSx2PWYuZ2V0Q29udGV4dCgpO3JldHVybiBmLmlzQ2FjaGU9ITAsYy5pc0NhY2hlPSEwLHRoaXMuX2NhY2hlLmRlbGV0ZShOKSx0aGlzLl9maWx0ZXJVcFRvRGF0ZT0hMSwhMT09PWUuaW1hZ2VTbW9vdGhpbmdFbmFibGVkJiYoYy5nZXRDb250ZXh0KCkuX2NvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPSExLHUuZ2V0Q29udGV4dCgpLl9jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZD0hMSkscC5zYXZlKCksdi5zYXZlKCkscC50cmFuc2xhdGUoLXMsLW8pLHYudHJhbnNsYXRlKC1zLC1vKSx0aGlzLl9pc1VuZGVyQ2FjaGU9ITAsdGhpcy5fY2xlYXJTZWxmQW5kRGVzY2VuZGFudENhY2hlKEQpLHRoaXMuX2NsZWFyU2VsZkFuZERlc2NlbmRhbnRDYWNoZShGKSx0aGlzLmRyYXdTY2VuZShjLHRoaXMpLHRoaXMuZHJhd0hpdChmLHRoaXMpLHRoaXMuX2lzVW5kZXJDYWNoZT0hMSxwLnJlc3RvcmUoKSx2LnJlc3RvcmUoKSxsJiYocC5zYXZlKCkscC5iZWdpblBhdGgoKSxwLnJlY3QoMCwwLHIsYSkscC5jbG9zZVBhdGgoKSxwLnNldEF0dHIoInN0cm9rZVN0eWxlIiwicmVkIikscC5zZXRBdHRyKCJsaW5lV2lkdGgiLDUpLHAuc3Ryb2tlKCkscC5yZXN0b3JlKCkpLHRoaXMuX2NhY2hlLnNldChOLHtzY2VuZTpjLGZpbHRlcjp1LGhpdDpmLHg6cyx5Om99KSx0aGlzLl9yZXF1ZXN0RHJhdygpLHRoaXN9Zy5lcnJvcigiQ2FuIG5vdCBjYWNoZSB0aGUgbm9kZS4gV2lkdGggb3IgaGVpZ2h0IG9mIHRoZSBub2RlIGVxdWFscyAwLiBDYWNoaW5nIGlzIHNraXBwZWQuIil9aXNDYWNoZWQoKXtyZXR1cm4gdGhpcy5fY2FjaGUuaGFzKE4pfWdldENsaWVudFJlY3QodCl7dGhyb3cgbmV3IEVycm9yKCdhYnN0cmFjdCAiZ2V0Q2xpZW50UmVjdCIgbWV0aG9kIGNhbGwnKX1fdHJhbnNmb3JtZWRSZWN0KHQsZSl7dmFyIGkscixhLG4scz1be3g6dC54LHk6dC55fSx7eDp0LngrdC53aWR0aCx5OnQueX0se3g6dC54K3Qud2lkdGgseTp0LnkrdC5oZWlnaHR9LHt4OnQueCx5OnQueSt0LmhlaWdodH1dLG89dGhpcy5nZXRBYnNvbHV0ZVRyYW5zZm9ybShlKTtyZXR1cm4gcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1vLnBvaW50KHQpO3ZvaWQgMD09PWkmJihpPWE9ZS54LHI9bj1lLnkpLGk9TWF0aC5taW4oaSxlLngpLHI9TWF0aC5taW4ocixlLnkpLGE9TWF0aC5tYXgoYSxlLngpLG49TWF0aC5tYXgobixlLnkpfSkpLHt4OmkseTpyLHdpZHRoOmEtaSxoZWlnaHQ6bi1yfX1fZHJhd0NhY2hlZFNjZW5lQ2FudmFzKHQpe3Quc2F2ZSgpLHQuX2FwcGx5T3BhY2l0eSh0aGlzKSx0Ll9hcHBseUdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbih0aGlzKTtjb25zdCBlPXRoaXMuX2dldENhbnZhc0NhY2hlKCk7dC50cmFuc2xhdGUoZS54LGUueSk7dmFyIGk9dGhpcy5fZ2V0Q2FjaGVkU2NlbmVDYW52YXMoKSxyPWkucGl4ZWxSYXRpbzt0LmRyYXdJbWFnZShpLl9jYW52YXMsMCwwLGkud2lkdGgvcixpLmhlaWdodC9yKSx0LnJlc3RvcmUoKX1fZHJhd0NhY2hlZEhpdENhbnZhcyh0KXt2YXIgZT10aGlzLl9nZXRDYW52YXNDYWNoZSgpLGk9ZS5oaXQ7dC5zYXZlKCksdC50cmFuc2xhdGUoZS54LGUueSksdC5kcmF3SW1hZ2UoaS5fY2FudmFzLDAsMCxpLndpZHRoL2kucGl4ZWxSYXRpbyxpLmhlaWdodC9pLnBpeGVsUmF0aW8pLHQucmVzdG9yZSgpfV9nZXRDYWNoZWRTY2VuZUNhbnZhcygpe3ZhciB0LGUsaSxyLGE9dGhpcy5maWx0ZXJzKCksbj10aGlzLl9nZXRDYW52YXNDYWNoZSgpLHM9bi5zY2VuZSxvPW4uZmlsdGVyLGg9by5nZXRDb250ZXh0KCk7aWYoYSl7aWYoIXRoaXMuX2ZpbHRlclVwVG9EYXRlKXt2YXIgbD1zLnBpeGVsUmF0aW87by5zZXRTaXplKHMud2lkdGgvcy5waXhlbFJhdGlvLHMuaGVpZ2h0L3MucGl4ZWxSYXRpbyk7dHJ5e2Zvcih0PWEubGVuZ3RoLGguY2xlYXIoKSxoLmRyYXdJbWFnZShzLl9jYW52YXMsMCwwLHMuZ2V0V2lkdGgoKS9sLHMuZ2V0SGVpZ2h0KCkvbCksZT1oLmdldEltYWdlRGF0YSgwLDAsby5nZXRXaWR0aCgpLG8uZ2V0SGVpZ2h0KCkpLGk9MDtpPHQ7aSsrKSJmdW5jdGlvbiI9PXR5cGVvZihyPWFbaV0pPyhyLmNhbGwodGhpcyxlKSxoLnB1dEltYWdlRGF0YShlLDAsMCkpOmcuZXJyb3IoIkZpbHRlciBzaG91bGQgYmUgdHlwZSBvZiBmdW5jdGlvbiwgYnV0IGdvdCAiK3R5cGVvZiByKyIgaW5zdGVhZC4gUGxlYXNlIGNoZWNrIGNvcnJlY3QgZmlsdGVycyIpfWNhdGNoKHQpe2cuZXJyb3IoIlVuYWJsZSB0byBhcHBseSBmaWx0ZXIuICIrdC5tZXNzYWdlKyIgVGhpcyBwb3N0IG15IGhlbHAgeW91IGh0dHBzOi8va29udmFqcy5vcmcvZG9jcy9wb3N0cy9UYWludGVkX0NhbnZhcy5odG1sLiIpfXRoaXMuX2ZpbHRlclVwVG9EYXRlPSEwfXJldHVybiBvfXJldHVybiBzfW9uKHQsZSl7aWYodGhpcy5fY2FjaGUmJnRoaXMuX2NhY2hlLmRlbGV0ZShPKSwzPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fZGVsZWdhdGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBpLHIsYSxuLHM9dC5zcGxpdChZKSxvPXMubGVuZ3RoO2ZvcihpPTA7aTxvO2krKylhPShyPXNbaV0uc3BsaXQoIi4iKSlbMF0sbj1yWzFdfHwiIix0aGlzLmV2ZW50TGlzdGVuZXJzW2FdfHwodGhpcy5ldmVudExpc3RlbmVyc1thXT1bXSksdGhpcy5ldmVudExpc3RlbmVyc1thXS5wdXNoKHtuYW1lOm4saGFuZGxlcjplfSk7cmV0dXJuIHRoaXN9b2ZmKHQsZSl7dmFyIGkscixhLG4scyxvPSh0fHwiIikuc3BsaXQoWSksaD1vLmxlbmd0aDtpZih0aGlzLl9jYWNoZSYmdGhpcy5fY2FjaGUuZGVsZXRlKE8pLCF0KWZvcihyIGluIHRoaXMuZXZlbnRMaXN0ZW5lcnMpdGhpcy5fb2ZmKHIpO2ZvcihpPTA7aTxoO2krKylpZihuPShhPW9baV0uc3BsaXQoIi4iKSlbMF0scz1hWzFdLG4pdGhpcy5ldmVudExpc3RlbmVyc1tuXSYmdGhpcy5fb2ZmKG4scyxlKTtlbHNlIGZvcihyIGluIHRoaXMuZXZlbnRMaXN0ZW5lcnMpdGhpcy5fb2ZmKHIscyxlKTtyZXR1cm4gdGhpc31kaXNwYXRjaEV2ZW50KHQpe3ZhciBlPXt0YXJnZXQ6dGhpcyx0eXBlOnQudHlwZSxldnQ6dH07cmV0dXJuIHRoaXMuZmlyZSh0LnR5cGUsZSksdGhpc31hZGRFdmVudExpc3RlbmVyKHQsZSl7cmV0dXJuIHRoaXMub24odCwoZnVuY3Rpb24odCl7ZS5jYWxsKHRoaXMsdC5ldnQpfSkpLHRoaXN9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0KXtyZXR1cm4gdGhpcy5vZmYodCksdGhpc31fZGVsZWdhdGUodCxlLGkpe3ZhciByPXRoaXM7dGhpcy5vbih0LChmdW5jdGlvbih0KXtmb3IodmFyIGE9dC50YXJnZXQuZmluZEFuY2VzdG9ycyhlLCEwLHIpLG49MDtuPGEubGVuZ3RoO24rKykodD1nLmNsb25lT2JqZWN0KHQpKS5jdXJyZW50VGFyZ2V0PWFbbl0saS5jYWxsKGFbbl0sdCl9KSl9cmVtb3ZlKCl7cmV0dXJuIHRoaXMuaXNEcmFnZ2luZygpJiZ0aGlzLnN0b3BEcmFnKCksTC5fZHJhZ0VsZW1lbnRzLmRlbGV0ZSh0aGlzLl9pZCksdGhpcy5fcmVtb3ZlKCksdGhpc31fY2xlYXJDYWNoZXMoKXt0aGlzLl9jbGVhclNlbGZBbmREZXNjZW5kYW50Q2FjaGUoSSksdGhpcy5fY2xlYXJTZWxmQW5kRGVzY2VuZGFudENhY2hlKEQpLHRoaXMuX2NsZWFyU2VsZkFuZERlc2NlbmRhbnRDYWNoZShGKSx0aGlzLl9jbGVhclNlbGZBbmREZXNjZW5kYW50Q2FjaGUoWCksdGhpcy5fY2xlYXJTZWxmQW5kRGVzY2VuZGFudENhY2hlKFUpLHRoaXMuX2NsZWFyU2VsZkFuZERlc2NlbmRhbnRDYWNoZShCKX1fcmVtb3ZlKCl7dGhpcy5fY2xlYXJDYWNoZXMoKTt2YXIgdD10aGlzLmdldFBhcmVudCgpO3QmJnQuY2hpbGRyZW4mJih0LmNoaWxkcmVuLnNwbGljZSh0aGlzLmluZGV4LDEpLHQuX3NldENoaWxkcmVuSW5kaWNlcygpLHRoaXMucGFyZW50PW51bGwpfWRlc3Ryb3koKXtyZXR1cm4gdGhpcy5yZW1vdmUoKSx0aGlzfWdldEF0dHIodCl7dmFyIGU9ImdldCIrZy5fY2FwaXRhbGl6ZSh0KTtyZXR1cm4gZy5faXNGdW5jdGlvbih0aGlzW2VdKT90aGlzW2VdKCk6dGhpcy5hdHRyc1t0XX1nZXRBbmNlc3RvcnMoKXtmb3IodmFyIHQ9dGhpcy5nZXRQYXJlbnQoKSxlPVtdO3Q7KWUucHVzaCh0KSx0PXQuZ2V0UGFyZW50KCk7cmV0dXJuIGV9Z2V0QXR0cnMoKXtyZXR1cm4gdGhpcy5hdHRyc3x8e319c2V0QXR0cnModCl7cmV0dXJuIHRoaXMuX2JhdGNoVHJhbnNmb3JtQ2hhbmdlcygoKCk9Pnt2YXIgZSxpO2lmKCF0KXJldHVybiB0aGlzO2ZvcihlIGluIHQpImNoaWxkcmVuIiE9PWUmJihpPSJzZXQiK2cuX2NhcGl0YWxpemUoZSksZy5faXNGdW5jdGlvbih0aGlzW2ldKT90aGlzW2ldKHRbZV0pOnRoaXMuX3NldEF0dHIoZSx0W2VdKSl9KSksdGhpc31pc0xpc3RlbmluZygpe3JldHVybiB0aGlzLl9nZXRDYWNoZShCLHRoaXMuX2lzTGlzdGVuaW5nKX1faXNMaXN0ZW5pbmcodCl7aWYoIXRoaXMubGlzdGVuaW5nKCkpcmV0dXJuITE7Y29uc3QgZT10aGlzLmdldFBhcmVudCgpO3JldHVybiFlfHxlPT09dHx8dGhpcz09PXR8fGUuX2lzTGlzdGVuaW5nKHQpfWlzVmlzaWJsZSgpe3JldHVybiB0aGlzLl9nZXRDYWNoZShVLHRoaXMuX2lzVmlzaWJsZSl9X2lzVmlzaWJsZSh0KXtpZighdGhpcy52aXNpYmxlKCkpcmV0dXJuITE7Y29uc3QgZT10aGlzLmdldFBhcmVudCgpO3JldHVybiFlfHxlPT09dHx8dGhpcz09PXR8fGUuX2lzVmlzaWJsZSh0KX1zaG91bGREcmF3SGl0KHQsZT0hMSl7aWYodClyZXR1cm4gdGhpcy5faXNWaXNpYmxlKHQpJiZ0aGlzLl9pc0xpc3RlbmluZyh0KTt2YXIgcj10aGlzLmdldExheWVyKCksYT0hMTtMLl9kcmFnRWxlbWVudHMuZm9yRWFjaCgodD0+eyJkcmFnZ2luZyI9PT10LmRyYWdTdGF0dXMmJigiU3RhZ2UiPT09dC5ub2RlLm5vZGVUeXBlfHx0Lm5vZGUuZ2V0TGF5ZXIoKT09PXIpJiYoYT0hMCl9KSk7dmFyIG49IWUmJiFpLmhpdE9uRHJhZ0VuYWJsZWQmJmE7cmV0dXJuIHRoaXMuaXNMaXN0ZW5pbmcoKSYmdGhpcy5pc1Zpc2libGUoKSYmIW59c2hvdygpe3JldHVybiB0aGlzLnZpc2libGUoITApLHRoaXN9aGlkZSgpe3JldHVybiB0aGlzLnZpc2libGUoITEpLHRoaXN9Z2V0WkluZGV4KCl7cmV0dXJuIHRoaXMuaW5kZXh8fDB9Z2V0QWJzb2x1dGVaSW5kZXgoKXt2YXIgdCxlLGkscixhPXRoaXMuZ2V0RGVwdGgoKSxuPXRoaXMscz0wO3JldHVybiJTdGFnZSIhPT1uLm5vZGVUeXBlJiZmdW5jdGlvbiBvKGgpe2Zvcih0PVtdLGU9aC5sZW5ndGgsaT0wO2k8ZTtpKyspcj1oW2ldLHMrKyxyLm5vZGVUeXBlIT09SCYmKHQ9dC5jb25jYXQoci5nZXRDaGlsZHJlbigpLnNsaWNlKCkpKSxyLl9pZD09PW4uX2lkJiYoaT1lKTt0Lmxlbmd0aD4wJiZ0WzBdLmdldERlcHRoKCk8PWEmJm8odCl9KG4uZ2V0U3RhZ2UoKS5nZXRDaGlsZHJlbigpKSxzfWdldERlcHRoKCl7Zm9yKHZhciB0PTAsZT10aGlzLnBhcmVudDtlOyl0KyssZT1lLnBhcmVudDtyZXR1cm4gdH1fYmF0Y2hUcmFuc2Zvcm1DaGFuZ2VzKHQpe3RoaXMuX2JhdGNoaW5nVHJhbnNmb3JtQ2hhbmdlPSEwLHQoKSx0aGlzLl9iYXRjaGluZ1RyYW5zZm9ybUNoYW5nZT0hMSx0aGlzLl9uZWVkQ2xlYXJUcmFuc2Zvcm1DYWNoZSYmKHRoaXMuX2NsZWFyQ2FjaGUoaiksdGhpcy5fY2xlYXJTZWxmQW5kRGVzY2VuZGFudENhY2hlKEkpKSx0aGlzLl9uZWVkQ2xlYXJUcmFuc2Zvcm1DYWNoZT0hMX1zZXRQb3NpdGlvbih0KXtyZXR1cm4gdGhpcy5fYmF0Y2hUcmFuc2Zvcm1DaGFuZ2VzKCgoKT0+e3RoaXMueCh0LngpLHRoaXMueSh0LnkpfSkpLHRoaXN9Z2V0UG9zaXRpb24oKXtyZXR1cm57eDp0aGlzLngoKSx5OnRoaXMueSgpfX1nZXRSZWxhdGl2ZVBvaW50ZXJQb3NpdGlvbigpe2lmKCF0aGlzLmdldFN0YWdlKCkpcmV0dXJuIG51bGw7dmFyIHQ9dGhpcy5nZXRTdGFnZSgpLmdldFBvaW50ZXJQb3NpdGlvbigpO2lmKCF0KXJldHVybiBudWxsO3ZhciBlPXRoaXMuZ2V0QWJzb2x1dGVUcmFuc2Zvcm0oKS5jb3B5KCk7cmV0dXJuIGUuaW52ZXJ0KCksZS5wb2ludCh0KX1nZXRBYnNvbHV0ZVBvc2l0aW9uKHQpe2xldCBlPSExLGk9dGhpcy5wYXJlbnQ7Zm9yKDtpOyl7aWYoaS5pc0NhY2hlZCgpKXtlPSEwO2JyZWFrfWk9aS5wYXJlbnR9ZSYmIXQmJih0PSEwKTt2YXIgcj10aGlzLmdldEFic29sdXRlVHJhbnNmb3JtKHQpLmdldE1hdHJpeCgpLG49bmV3IGEscz10aGlzLm9mZnNldCgpO3JldHVybiBuLm09ci5zbGljZSgpLG4udHJhbnNsYXRlKHMueCxzLnkpLG4uZ2V0VHJhbnNsYXRpb24oKX1zZXRBYnNvbHV0ZVBvc2l0aW9uKHQpe3ZhciBlPXRoaXMuX2NsZWFyVHJhbnNmb3JtKCk7dGhpcy5hdHRycy54PWUueCx0aGlzLmF0dHJzLnk9ZS55LGRlbGV0ZSBlLngsZGVsZXRlIGUueSx0aGlzLl9jbGVhckNhY2hlKGopO3ZhciBpPXRoaXMuX2dldEFic29sdXRlVHJhbnNmb3JtKCkuY29weSgpO3JldHVybiBpLmludmVydCgpLGkudHJhbnNsYXRlKHQueCx0LnkpLHQ9e3g6dGhpcy5hdHRycy54K2kuZ2V0VHJhbnNsYXRpb24oKS54LHk6dGhpcy5hdHRycy55K2kuZ2V0VHJhbnNsYXRpb24oKS55fSx0aGlzLl9zZXRUcmFuc2Zvcm0oZSksdGhpcy5zZXRQb3NpdGlvbih7eDp0LngseTp0Lnl9KSx0aGlzLl9jbGVhckNhY2hlKGopLHRoaXMuX2NsZWFyU2VsZkFuZERlc2NlbmRhbnRDYWNoZShJKSx0aGlzfV9zZXRUcmFuc2Zvcm0odCl7dmFyIGU7Zm9yKGUgaW4gdCl0aGlzLmF0dHJzW2VdPXRbZV19X2NsZWFyVHJhbnNmb3JtKCl7dmFyIHQ9e3g6dGhpcy54KCkseTp0aGlzLnkoKSxyb3RhdGlvbjp0aGlzLnJvdGF0aW9uKCksc2NhbGVYOnRoaXMuc2NhbGVYKCksc2NhbGVZOnRoaXMuc2NhbGVZKCksb2Zmc2V0WDp0aGlzLm9mZnNldFgoKSxvZmZzZXRZOnRoaXMub2Zmc2V0WSgpLHNrZXdYOnRoaXMuc2tld1goKSxza2V3WTp0aGlzLnNrZXdZKCl9O3JldHVybiB0aGlzLmF0dHJzLng9MCx0aGlzLmF0dHJzLnk9MCx0aGlzLmF0dHJzLnJvdGF0aW9uPTAsdGhpcy5hdHRycy5zY2FsZVg9MSx0aGlzLmF0dHJzLnNjYWxlWT0xLHRoaXMuYXR0cnMub2Zmc2V0WD0wLHRoaXMuYXR0cnMub2Zmc2V0WT0wLHRoaXMuYXR0cnMuc2tld1g9MCx0aGlzLmF0dHJzLnNrZXdZPTAsdH1tb3ZlKHQpe3ZhciBlPXQueCxpPXQueSxyPXRoaXMueCgpLGE9dGhpcy55KCk7cmV0dXJuIHZvaWQgMCE9PWUmJihyKz1lKSx2b2lkIDAhPT1pJiYoYSs9aSksdGhpcy5zZXRQb3NpdGlvbih7eDpyLHk6YX0pLHRoaXN9X2VhY2hBbmNlc3RvclJldmVyc2UodCxlKXt2YXIgaSxyLGE9W10sbj10aGlzLmdldFBhcmVudCgpO2lmKCFlfHxlLl9pZCE9PXRoaXMuX2lkKXtmb3IoYS51bnNoaWZ0KHRoaXMpO24mJighZXx8bi5faWQhPT1lLl9pZCk7KWEudW5zaGlmdChuKSxuPW4ucGFyZW50O2ZvcihpPWEubGVuZ3RoLHI9MDtyPGk7cisrKXQoYVtyXSl9fXJvdGF0ZSh0KXtyZXR1cm4gdGhpcy5yb3RhdGlvbih0aGlzLnJvdGF0aW9uKCkrdCksdGhpc31tb3ZlVG9Ub3AoKXtpZighdGhpcy5wYXJlbnQpcmV0dXJuIGcud2FybigiTm9kZSBoYXMgbm8gcGFyZW50LiBtb3ZlVG9Ub3AgZnVuY3Rpb24gaXMgaWdub3JlZC4iKSwhMTt2YXIgdD10aGlzLmluZGV4O3JldHVybiB0aGlzLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UodCwxKSx0aGlzLnBhcmVudC5jaGlsZHJlbi5wdXNoKHRoaXMpLHRoaXMucGFyZW50Ll9zZXRDaGlsZHJlbkluZGljZXMoKSwhMH1tb3ZlVXAoKXtpZighdGhpcy5wYXJlbnQpcmV0dXJuIGcud2FybigiTm9kZSBoYXMgbm8gcGFyZW50LiBtb3ZlVXAgZnVuY3Rpb24gaXMgaWdub3JlZC4iKSwhMTt2YXIgdD10aGlzLmluZGV4O3JldHVybiB0PHRoaXMucGFyZW50LmdldENoaWxkcmVuKCkubGVuZ3RoLTEmJih0aGlzLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UodCwxKSx0aGlzLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UodCsxLDAsdGhpcyksdGhpcy5wYXJlbnQuX3NldENoaWxkcmVuSW5kaWNlcygpLCEwKX1tb3ZlRG93bigpe2lmKCF0aGlzLnBhcmVudClyZXR1cm4gZy53YXJuKCJOb2RlIGhhcyBubyBwYXJlbnQuIG1vdmVEb3duIGZ1bmN0aW9uIGlzIGlnbm9yZWQuIiksITE7dmFyIHQ9dGhpcy5pbmRleDtyZXR1cm4gdD4wJiYodGhpcy5wYXJlbnQuY2hpbGRyZW4uc3BsaWNlKHQsMSksdGhpcy5wYXJlbnQuY2hpbGRyZW4uc3BsaWNlKHQtMSwwLHRoaXMpLHRoaXMucGFyZW50Ll9zZXRDaGlsZHJlbkluZGljZXMoKSwhMCl9bW92ZVRvQm90dG9tKCl7aWYoIXRoaXMucGFyZW50KXJldHVybiBnLndhcm4oIk5vZGUgaGFzIG5vIHBhcmVudC4gbW92ZVRvQm90dG9tIGZ1bmN0aW9uIGlzIGlnbm9yZWQuIiksITE7dmFyIHQ9dGhpcy5pbmRleDtyZXR1cm4gdD4wJiYodGhpcy5wYXJlbnQuY2hpbGRyZW4uc3BsaWNlKHQsMSksdGhpcy5wYXJlbnQuY2hpbGRyZW4udW5zaGlmdCh0aGlzKSx0aGlzLnBhcmVudC5fc2V0Q2hpbGRyZW5JbmRpY2VzKCksITApfXNldFpJbmRleCh0KXtpZighdGhpcy5wYXJlbnQpcmV0dXJuIGcud2FybigiTm9kZSBoYXMgbm8gcGFyZW50LiB6SW5kZXggcGFyYW1ldGVyIGlzIGlnbm9yZWQuIiksdGhpczsodDwwfHx0Pj10aGlzLnBhcmVudC5jaGlsZHJlbi5sZW5ndGgpJiZnLndhcm4oIlVuZXhwZWN0ZWQgdmFsdWUgIit0KyIgZm9yIHpJbmRleCBwcm9wZXJ0eS4gekluZGV4IGlzIGp1c3QgaW5kZXggb2YgYSBub2RlIGluIGNoaWxkcmVuIG9mIGl0cyBwYXJlbnQuIEV4cGVjdGVkIHZhbHVlIGlzIGZyb20gMCB0byAiKyh0aGlzLnBhcmVudC5jaGlsZHJlbi5sZW5ndGgtMSkrIi4iKTt2YXIgZT10aGlzLmluZGV4O3JldHVybiB0aGlzLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UoZSwxKSx0aGlzLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UodCwwLHRoaXMpLHRoaXMucGFyZW50Ll9zZXRDaGlsZHJlbkluZGljZXMoKSx0aGlzfWdldEFic29sdXRlT3BhY2l0eSgpe3JldHVybiB0aGlzLl9nZXRDYWNoZShELHRoaXMuX2dldEFic29sdXRlT3BhY2l0eSl9X2dldEFic29sdXRlT3BhY2l0eSgpe3ZhciB0PXRoaXMub3BhY2l0eSgpLGU9dGhpcy5nZXRQYXJlbnQoKTtyZXR1cm4gZSYmIWUuX2lzVW5kZXJDYWNoZSYmKHQqPWUuZ2V0QWJzb2x1dGVPcGFjaXR5KCkpLHR9bW92ZVRvKHQpe3JldHVybiB0aGlzLmdldFBhcmVudCgpIT09dCYmKHRoaXMuX3JlbW92ZSgpLHQuYWRkKHRoaXMpKSx0aGlzfXRvT2JqZWN0KCl7dmFyIHQsZSxpLHIsYT17fSxuPXRoaXMuZ2V0QXR0cnMoKTtmb3IodCBpbiBhLmF0dHJzPXt9LG4pZT1uW3RdLGcuaXNPYmplY3QoZSkmJiFnLl9pc1BsYWluT2JqZWN0KGUpJiYhZy5faXNBcnJheShlKXx8KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXNbdF0mJnRoaXNbdF0sZGVsZXRlIG5bdF0scj1pP2kuY2FsbCh0aGlzKTpudWxsLG5bdF09ZSxyIT09ZSYmKGEuYXR0cnNbdF09ZSkpO3JldHVybiBhLmNsYXNzTmFtZT10aGlzLmdldENsYXNzTmFtZSgpLGcuX3ByZXBhcmVUb1N0cmluZ2lmeShhKX10b0pTT04oKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy50b09iamVjdCgpKX1nZXRQYXJlbnQoKXtyZXR1cm4gdGhpcy5wYXJlbnR9ZmluZEFuY2VzdG9ycyh0LGUsaSl7dmFyIHI9W107ZSYmdGhpcy5faXNNYXRjaCh0KSYmci5wdXNoKHRoaXMpO2Zvcih2YXIgYT10aGlzLnBhcmVudDthOyl7aWYoYT09PWkpcmV0dXJuIHI7YS5faXNNYXRjaCh0KSYmci5wdXNoKGEpLGE9YS5wYXJlbnR9cmV0dXJuIHJ9aXNBbmNlc3Rvck9mKHQpe3JldHVybiExfWZpbmRBbmNlc3Rvcih0LGUsaSl7cmV0dXJuIHRoaXMuZmluZEFuY2VzdG9ycyh0LGUsaSlbMF19X2lzTWF0Y2godCl7aWYoIXQpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIHQodGhpcyk7dmFyIGUsaSxyPXQucmVwbGFjZSgvIC9nLCIiKS5zcGxpdCgiLCIpLGE9ci5sZW5ndGg7Zm9yKGU9MDtlPGE7ZSsrKWlmKGk9cltlXSxnLmlzVmFsaWRTZWxlY3RvcihpKXx8KGcud2FybignU2VsZWN0b3IgIicraSsnIiBpcyBpbnZhbGlkLiBBbGxvd2VkIHNlbGVjdG9ycyBleGFtcGxlcyBhcmUgIiNmb28iLCAiLmJhciIgb3IgIkdyb3VwIi4nKSxnLndhcm4oJ0lmIHlvdSBoYXZlIGEgY3VzdG9tIHNoYXBlIHdpdGggc3VjaCBjbGFzc05hbWUsIHBsZWFzZSBjaGFuZ2UgaXQgdG8gc3RhcnQgd2l0aCB1cHBlciBsZXR0ZXIgbGlrZSAiVHJpYW5nbGUiLicpLGcud2FybigiS29udmEgaXMgYXdlc29tZSwgcmlnaHQ/IikpLCIjIj09PWkuY2hhckF0KDApKXtpZih0aGlzLmlkKCk9PT1pLnNsaWNlKDEpKXJldHVybiEwfWVsc2UgaWYoIi4iPT09aS5jaGFyQXQoMCkpe2lmKHRoaXMuaGFzTmFtZShpLnNsaWNlKDEpKSlyZXR1cm4hMH1lbHNlIGlmKHRoaXMuY2xhc3NOYW1lPT09aXx8dGhpcy5ub2RlVHlwZT09PWkpcmV0dXJuITA7cmV0dXJuITF9Z2V0TGF5ZXIoKXt2YXIgdD10aGlzLmdldFBhcmVudCgpO3JldHVybiB0P3QuZ2V0TGF5ZXIoKTpudWxsfWdldFN0YWdlKCl7cmV0dXJuIHRoaXMuX2dldENhY2hlKFgsdGhpcy5fZ2V0U3RhZ2UpfV9nZXRTdGFnZSgpe3ZhciB0PXRoaXMuZ2V0UGFyZW50KCk7cmV0dXJuIHQ/dC5nZXRTdGFnZSgpOnZvaWQgMH1maXJlKHQsZT17fSxpKXtyZXR1cm4gZS50YXJnZXQ9ZS50YXJnZXR8fHRoaXMsaT90aGlzLl9maXJlQW5kQnViYmxlKHQsZSk6dGhpcy5fZmlyZSh0LGUpLHRoaXN9Z2V0QWJzb2x1dGVUcmFuc2Zvcm0odCl7cmV0dXJuIHQ/dGhpcy5fZ2V0QWJzb2x1dGVUcmFuc2Zvcm0odCk6dGhpcy5fZ2V0Q2FjaGUoSSx0aGlzLl9nZXRBYnNvbHV0ZVRyYW5zZm9ybSl9X2dldEFic29sdXRlVHJhbnNmb3JtKHQpe3ZhciBlO2lmKHQpcmV0dXJuIGU9bmV3IGEsdGhpcy5fZWFjaEFuY2VzdG9yUmV2ZXJzZSgoZnVuY3Rpb24odCl7dmFyIGk9dC50cmFuc2Zvcm1zRW5hYmxlZCgpOyJhbGwiPT09aT9lLm11bHRpcGx5KHQuZ2V0VHJhbnNmb3JtKCkpOiJwb3NpdGlvbiI9PT1pJiZlLnRyYW5zbGF0ZSh0LngoKS10Lm9mZnNldFgoKSx0LnkoKS10Lm9mZnNldFkoKSl9KSx0KSxlO2U9dGhpcy5fY2FjaGUuZ2V0KEkpfHxuZXcgYSx0aGlzLnBhcmVudD90aGlzLnBhcmVudC5nZXRBYnNvbHV0ZVRyYW5zZm9ybSgpLmNvcHlJbnRvKGUpOmUucmVzZXQoKTt2YXIgaT10aGlzLnRyYW5zZm9ybXNFbmFibGVkKCk7aWYoImFsbCI9PT1pKWUubXVsdGlwbHkodGhpcy5nZXRUcmFuc2Zvcm0oKSk7ZWxzZSBpZigicG9zaXRpb24iPT09aSl7Y29uc3QgdD10aGlzLmF0dHJzLnh8fDAsaT10aGlzLmF0dHJzLnl8fDAscj10aGlzLmF0dHJzLm9mZnNldFh8fDAsYT10aGlzLmF0dHJzLm9mZnNldFl8fDA7ZS50cmFuc2xhdGUodC1yLGktYSl9cmV0dXJuIGUuZGlydHk9ITEsZX1nZXRBYnNvbHV0ZVNjYWxlKHQpe2Zvcih2YXIgZT10aGlzO2U7KWUuX2lzVW5kZXJDYWNoZSYmKHQ9ZSksZT1lLmdldFBhcmVudCgpO2NvbnN0IGk9dGhpcy5nZXRBYnNvbHV0ZVRyYW5zZm9ybSh0KS5kZWNvbXBvc2UoKTtyZXR1cm57eDppLnNjYWxlWCx5Omkuc2NhbGVZfX1nZXRBYnNvbHV0ZVJvdGF0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QWJzb2x1dGVUcmFuc2Zvcm0oKS5kZWNvbXBvc2UoKS5yb3RhdGlvbn1nZXRUcmFuc2Zvcm0oKXtyZXR1cm4gdGhpcy5fZ2V0Q2FjaGUoaix0aGlzLl9nZXRUcmFuc2Zvcm0pfV9nZXRUcmFuc2Zvcm0oKXt2YXIgdCxlLHI9dGhpcy5fY2FjaGUuZ2V0KGopfHxuZXcgYTtyLnJlc2V0KCk7dmFyIG49dGhpcy54KCkscz10aGlzLnkoKSxvPWkuZ2V0QW5nbGUodGhpcy5yb3RhdGlvbigpKSxoPW51bGwhPT0odD10aGlzLmF0dHJzLnNjYWxlWCkmJnZvaWQgMCE9PXQ/dDoxLGw9bnVsbCE9PShlPXRoaXMuYXR0cnMuc2NhbGVZKSYmdm9pZCAwIT09ZT9lOjEsZD10aGlzLmF0dHJzLnNrZXdYfHwwLGM9dGhpcy5hdHRycy5za2V3WXx8MCxnPXRoaXMuYXR0cnMub2Zmc2V0WHx8MCx1PXRoaXMuYXR0cnMub2Zmc2V0WXx8MDtyZXR1cm4gMD09PW4mJjA9PT1zfHxyLnRyYW5zbGF0ZShuLHMpLDAhPT1vJiZyLnJvdGF0ZShvKSwwPT09ZCYmMD09PWN8fHIuc2tldyhkLGMpLDE9PT1oJiYxPT09bHx8ci5zY2FsZShoLGwpLDA9PT1nJiYwPT09dXx8ci50cmFuc2xhdGUoLTEqZywtMSp1KSxyLmRpcnR5PSExLHJ9Y2xvbmUodCl7dmFyIGUsaSxyLGEsbixzPWcuY2xvbmVPYmplY3QodGhpcy5hdHRycyk7Zm9yKGUgaW4gdClzW2VdPXRbZV07dmFyIG89bmV3IHRoaXMuY29uc3RydWN0b3Iocyk7Zm9yKGUgaW4gdGhpcy5ldmVudExpc3RlbmVycylmb3Iocj0oaT10aGlzLmV2ZW50TGlzdGVuZXJzW2VdKS5sZW5ndGgsYT0wO2E8cjthKyspKG49aVthXSkubmFtZS5pbmRleE9mKCJrb252YSIpPDAmJihvLmV2ZW50TGlzdGVuZXJzW2VdfHwoby5ldmVudExpc3RlbmVyc1tlXT1bXSksby5ldmVudExpc3RlbmVyc1tlXS5wdXNoKG4pKTtyZXR1cm4gb31fdG9Lb252YUNhbnZhcyh0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2V0Q2xpZW50UmVjdCgpLGk9dGhpcy5nZXRTdGFnZSgpLHI9dm9pZCAwIT09dC54P3QueDplLngsYT12b2lkIDAhPT10Lnk/dC55OmUueSxuPXQucGl4ZWxSYXRpb3x8MSxzPW5ldyBFKHt3aWR0aDp0LndpZHRofHxlLndpZHRofHwoaT9pLndpZHRoKCk6MCksaGVpZ2h0OnQuaGVpZ2h0fHxlLmhlaWdodHx8KGk/aS5oZWlnaHQoKTowKSxwaXhlbFJhdGlvOm59KSxvPXMuZ2V0Q29udGV4dCgpO3JldHVybiBvLnNhdmUoKSwocnx8YSkmJm8udHJhbnNsYXRlKC0xKnIsLTEqYSksdGhpcy5kcmF3U2NlbmUocyksby5yZXN0b3JlKCksc310b0NhbnZhcyh0KXtyZXR1cm4gdGhpcy5fdG9Lb252YUNhbnZhcyh0KS5fY2FudmFzfXRvRGF0YVVSTCh0KXt2YXIgZT0odD10fHx7fSkubWltZVR5cGV8fG51bGwsaT10LnF1YWxpdHl8fG51bGwscj10aGlzLl90b0tvbnZhQ2FudmFzKHQpLnRvRGF0YVVSTChlLGkpO3JldHVybiB0LmNhbGxiYWNrJiZ0LmNhbGxiYWNrKHIpLHJ9dG9JbWFnZSh0KXtpZighdHx8IXQuY2FsbGJhY2spdGhyb3ciY2FsbGJhY2sgcmVxdWlyZWQgZm9yIHRvSW1hZ2UgbWV0aG9kIGNvbmZpZyBhcmd1bWVudCI7dmFyIGU9dC5jYWxsYmFjaztkZWxldGUgdC5jYWxsYmFjayxnLl91cmxUb0ltYWdlKHRoaXMudG9EYXRhVVJMKHQpLChmdW5jdGlvbih0KXtlKHQpfSkpfXNldFNpemUodCl7cmV0dXJuIHRoaXMud2lkdGgodC53aWR0aCksdGhpcy5oZWlnaHQodC5oZWlnaHQpLHRoaXN9Z2V0U2l6ZSgpe3JldHVybnt3aWR0aDp0aGlzLndpZHRoKCksaGVpZ2h0OnRoaXMuaGVpZ2h0KCl9fWdldENsYXNzTmFtZSgpe3JldHVybiB0aGlzLmNsYXNzTmFtZXx8dGhpcy5ub2RlVHlwZX1nZXRUeXBlKCl7cmV0dXJuIHRoaXMubm9kZVR5cGV9Z2V0RHJhZ0Rpc3RhbmNlKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuYXR0cnMuZHJhZ0Rpc3RhbmNlP3RoaXMuYXR0cnMuZHJhZ0Rpc3RhbmNlOnRoaXMucGFyZW50P3RoaXMucGFyZW50LmdldERyYWdEaXN0YW5jZSgpOmkuZHJhZ0Rpc3RhbmNlfV9vZmYodCxlLGkpe3ZhciByLGEsbixzPXRoaXMuZXZlbnRMaXN0ZW5lcnNbdF07Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKylpZihhPXNbcl0ubmFtZSxuPXNbcl0uaGFuZGxlciwhKCJrb252YSI9PT1hJiYia29udmEiIT09ZXx8ZSYmYSE9PWV8fGkmJmkhPT1uKSl7aWYocy5zcGxpY2UociwxKSwwPT09cy5sZW5ndGgpe2RlbGV0ZSB0aGlzLmV2ZW50TGlzdGVuZXJzW3RdO2JyZWFrfXItLX19X2ZpcmVDaGFuZ2VFdmVudCh0LGUsaSl7dGhpcy5fZmlyZSh0KyJDaGFuZ2UiLHtvbGRWYWw6ZSxuZXdWYWw6aX0pfWFkZE5hbWUodCl7aWYoIXRoaXMuaGFzTmFtZSh0KSl7dmFyIGU9dGhpcy5uYW1lKCksaT1lP2UrIiAiK3Q6dDt0aGlzLm5hbWUoaSl9cmV0dXJuIHRoaXN9aGFzTmFtZSh0KXtpZighdClyZXR1cm4hMTtjb25zdCBlPXRoaXMubmFtZSgpO3JldHVybiEhZSYmLTEhPT0oZXx8IiIpLnNwbGl0KC9ccy9nKS5pbmRleE9mKHQpfXJlbW92ZU5hbWUodCl7dmFyIGU9KHRoaXMubmFtZSgpfHwiIikuc3BsaXQoL1xzL2cpLGk9ZS5pbmRleE9mKHQpO3JldHVybi0xIT09aSYmKGUuc3BsaWNlKGksMSksdGhpcy5uYW1lKGUuam9pbigiICIpKSksdGhpc31zZXRBdHRyKHQsZSl7dmFyIGk9dGhpc1sic2V0IitnLl9jYXBpdGFsaXplKHQpXTtyZXR1cm4gZy5faXNGdW5jdGlvbihpKT9pLmNhbGwodGhpcyxlKTp0aGlzLl9zZXRBdHRyKHQsZSksdGhpc31fcmVxdWVzdERyYXcoKXtpZihpLmF1dG9EcmF3RW5hYmxlZCl7Y29uc3QgdD10aGlzLmdldExheWVyKCl8fHRoaXMuZ2V0U3RhZ2UoKTtudWxsPT10fHx0LmJhdGNoRHJhdygpfX1fc2V0QXR0cih0LGUpe3ZhciBpPXRoaXMuYXR0cnNbdF07KGkhPT1lfHxnLmlzT2JqZWN0KGUpKSYmKG51bGw9PWU/ZGVsZXRlIHRoaXMuYXR0cnNbdF06dGhpcy5hdHRyc1t0XT1lLHRoaXMuX3Nob3VsZEZpcmVDaGFuZ2VFdmVudHMmJnRoaXMuX2ZpcmVDaGFuZ2VFdmVudCh0LGksZSksdGhpcy5fcmVxdWVzdERyYXcoKSl9X3NldENvbXBvbmVudEF0dHIodCxlLGkpe3ZhciByO3ZvaWQgMCE9PWkmJigocj10aGlzLmF0dHJzW3RdKXx8KHRoaXMuYXR0cnNbdF09dGhpcy5nZXRBdHRyKHQpKSx0aGlzLmF0dHJzW3RdW2VdPWksdGhpcy5fZmlyZUNoYW5nZUV2ZW50KHQscixpKSl9X2ZpcmVBbmRCdWJibGUodCxlLGkpe2lmKGUmJnRoaXMubm9kZVR5cGU9PT1IJiYoZS50YXJnZXQ9dGhpcyksISgodD09PXp8fHQ9PT1XKSYmKGkmJih0aGlzPT09aXx8dGhpcy5pc0FuY2VzdG9yT2YmJnRoaXMuaXNBbmNlc3Rvck9mKGkpKXx8IlN0YWdlIj09PXRoaXMubm9kZVR5cGUmJiFpKSkpe3RoaXMuX2ZpcmUodCxlKTt2YXIgcj0odD09PXp8fHQ9PT1XKSYmaSYmaS5pc0FuY2VzdG9yT2YmJmkuaXNBbmNlc3Rvck9mKHRoaXMpJiYhaS5pc0FuY2VzdG9yT2YodGhpcy5wYXJlbnQpOyhlJiYhZS5jYW5jZWxCdWJibGV8fCFlKSYmdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50LmlzTGlzdGVuaW5nKCkmJiFyJiYoaSYmaS5wYXJlbnQ/dGhpcy5fZmlyZUFuZEJ1YmJsZS5jYWxsKHRoaXMucGFyZW50LHQsZSxpKTp0aGlzLl9maXJlQW5kQnViYmxlLmNhbGwodGhpcy5wYXJlbnQsdCxlKSl9fV9nZXRQcm90b0xpc3RlbmVycyh0KXtsZXQgZT10aGlzLl9jYWNoZS5nZXQoTyk7aWYoIWUpe2U9e307bGV0IHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpO2Zvcig7dDspaWYodC5ldmVudExpc3RlbmVycyl7Zm9yKHZhciBpIGluIHQuZXZlbnRMaXN0ZW5lcnMpe2NvbnN0IHI9dC5ldmVudExpc3RlbmVyc1tpXSxhPWVbaV18fFtdO2VbaV09ci5jb25jYXQoYSl9dD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9ZWxzZSB0PU9iamVjdC5nZXRQcm90b3R5cGVPZih0KTt0aGlzLl9jYWNoZS5zZXQoTyxlKX1yZXR1cm4gZVt0XX1fZmlyZSh0LGUpeyhlPWV8fHt9KS5jdXJyZW50VGFyZ2V0PXRoaXMsZS50eXBlPXQ7Y29uc3QgaT10aGlzLl9nZXRQcm90b0xpc3RlbmVycyh0KTtpZihpKWZvcih2YXIgcj0wO3I8aS5sZW5ndGg7cisrKWlbcl0uaGFuZGxlci5jYWxsKHRoaXMsZSk7Y29uc3QgYT10aGlzLmV2ZW50TGlzdGVuZXJzW3RdO2lmKGEpZm9yKHI9MDtyPGEubGVuZ3RoO3IrKylhW3JdLmhhbmRsZXIuY2FsbCh0aGlzLGUpfWRyYXcoKXtyZXR1cm4gdGhpcy5kcmF3U2NlbmUoKSx0aGlzLmRyYXdIaXQoKSx0aGlzfV9jcmVhdGVEcmFnRWxlbWVudCh0KXt2YXIgZT10P3QucG9pbnRlcklkOnZvaWQgMCxpPXRoaXMuZ2V0U3RhZ2UoKSxyPXRoaXMuZ2V0QWJzb2x1dGVQb3NpdGlvbigpLGE9aS5fZ2V0UG9pbnRlckJ5SWQoZSl8fGkuX2NoYW5nZWRQb2ludGVyUG9zaXRpb25zWzBdfHxyO0wuX2RyYWdFbGVtZW50cy5zZXQodGhpcy5faWQse25vZGU6dGhpcyxzdGFydFBvaW50ZXJQb3M6YSxvZmZzZXQ6e3g6YS54LXIueCx5OmEueS1yLnl9LGRyYWdTdGF0dXM6InJlYWR5Iixwb2ludGVySWQ6ZX0pfXN0YXJ0RHJhZyh0LGU9ITApe0wuX2RyYWdFbGVtZW50cy5oYXModGhpcy5faWQpfHx0aGlzLl9jcmVhdGVEcmFnRWxlbWVudCh0KTtMLl9kcmFnRWxlbWVudHMuZ2V0KHRoaXMuX2lkKS5kcmFnU3RhdHVzPSJkcmFnZ2luZyIsdGhpcy5maXJlKCJkcmFnc3RhcnQiLHt0eXBlOiJkcmFnc3RhcnQiLHRhcmdldDp0aGlzLGV2dDp0JiZ0LmV2dH0sZSl9X3NldERyYWdQb3NpdGlvbih0LGUpe2NvbnN0IGk9dGhpcy5nZXRTdGFnZSgpLl9nZXRQb2ludGVyQnlJZChlLnBvaW50ZXJJZCk7aWYoaSl7dmFyIHI9e3g6aS54LWUub2Zmc2V0LngseTppLnktZS5vZmZzZXQueX0sYT10aGlzLmRyYWdCb3VuZEZ1bmMoKTtpZih2b2lkIDAhPT1hKXtjb25zdCBlPWEuY2FsbCh0aGlzLHIsdCk7ZT9yPWU6Zy53YXJuKCJkcmFnQm91bmRGdW5jIGRpZCBub3QgcmV0dXJuIGFueSB2YWx1ZS4gVGhhdCBpcyB1bmV4cGVjdGVkIGJlaGF2aW9yLiBZb3UgbXVzdCByZXR1cm4gbmV3IGFic29sdXRlIHBvc2l0aW9uIGZyb20gZHJhZ0JvdW5kRnVuYy4iKX10aGlzLl9sYXN0UG9zJiZ0aGlzLl9sYXN0UG9zLng9PT1yLngmJnRoaXMuX2xhc3RQb3MueT09PXIueXx8KHRoaXMuc2V0QWJzb2x1dGVQb3NpdGlvbihyKSx0aGlzLl9yZXF1ZXN0RHJhdygpKSx0aGlzLl9sYXN0UG9zPXJ9fXN0b3BEcmFnKHQpe2NvbnN0IGU9TC5fZHJhZ0VsZW1lbnRzLmdldCh0aGlzLl9pZCk7ZSYmKGUuZHJhZ1N0YXR1cz0ic3RvcHBlZCIpLEwuX2VuZERyYWdCZWZvcmUodCksTC5fZW5kRHJhZ0FmdGVyKHQpfXNldERyYWdnYWJsZSh0KXt0aGlzLl9zZXRBdHRyKCJkcmFnZ2FibGUiLHQpLHRoaXMuX2RyYWdDaGFuZ2UoKX1pc0RyYWdnaW5nKCl7Y29uc3QgdD1MLl9kcmFnRWxlbWVudHMuZ2V0KHRoaXMuX2lkKTtyZXR1cm4hIXQmJiJkcmFnZ2luZyI9PT10LmRyYWdTdGF0dXN9X2xpc3RlbkRyYWcoKXt0aGlzLl9kcmFnQ2xlYW51cCgpLHRoaXMub24oIm1vdXNlZG93bi5rb252YSB0b3VjaHN0YXJ0LmtvbnZhIiwoZnVuY3Rpb24odCl7aWYoKCEodm9pZCAwIT09dC5ldnQuYnV0dG9uKXx8aS5kcmFnQnV0dG9ucy5pbmRleE9mKHQuZXZ0LmJ1dHRvbik+PTApJiYhdGhpcy5pc0RyYWdnaW5nKCkpe3ZhciBlPSExO0wuX2RyYWdFbGVtZW50cy5mb3JFYWNoKCh0PT57dGhpcy5pc0FuY2VzdG9yT2YodC5ub2RlKSYmKGU9ITApfSkpLGV8fHRoaXMuX2NyZWF0ZURyYWdFbGVtZW50KHQpfX0pKX1fZHJhZ0NoYW5nZSgpe2lmKHRoaXMuYXR0cnMuZHJhZ2dhYmxlKXRoaXMuX2xpc3RlbkRyYWcoKTtlbHNle2lmKHRoaXMuX2RyYWdDbGVhbnVwKCksIXRoaXMuZ2V0U3RhZ2UoKSlyZXR1cm47Y29uc3QgdD1MLl9kcmFnRWxlbWVudHMuZ2V0KHRoaXMuX2lkKSxlPXQmJiJkcmFnZ2luZyI9PT10LmRyYWdTdGF0dXMsaT10JiYicmVhZHkiPT09dC5kcmFnU3RhdHVzO2U/dGhpcy5zdG9wRHJhZygpOmkmJkwuX2RyYWdFbGVtZW50cy5kZWxldGUodGhpcy5faWQpfX1fZHJhZ0NsZWFudXAoKXt0aGlzLm9mZigibW91c2Vkb3duLmtvbnZhIiksdGhpcy5vZmYoInRvdWNoc3RhcnQua29udmEiKX1pc0NsaWVudFJlY3RPblNjcmVlbih0PXt4OjAseTowfSl7Y29uc3QgZT10aGlzLmdldFN0YWdlKCk7aWYoIWUpcmV0dXJuITE7Y29uc3QgaT17eDotdC54LHk6LXQueSx3aWR0aDplLndpZHRoKCkrdC54LGhlaWdodDplLmhlaWdodCgpK3QueX07cmV0dXJuIGcuaGF2ZUludGVyc2VjdGlvbihpLHRoaXMuZ2V0Q2xpZW50UmVjdCgpKX1zdGF0aWMgY3JlYXRlKHQsZSl7cmV0dXJuIGcuX2lzU3RyaW5nKHQpJiYodD1KU09OLnBhcnNlKHQpKSx0aGlzLl9jcmVhdGVOb2RlKHQsZSl9c3RhdGljIF9jcmVhdGVOb2RlKHQsZSl7dmFyIHIsYSxuLHM9Sy5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lLmNhbGwodCksbz10LmNoaWxkcmVuO2UmJih0LmF0dHJzLmNvbnRhaW5lcj1lKSxpW3NdfHwoZy53YXJuKCdDYW4gbm90IGZpbmQgYSBub2RlIHdpdGggY2xhc3MgbmFtZSAiJytzKyciLiBGYWxsYmFjayB0byAiU2hhcGUiLicpLHM9IlNoYXBlIik7aWYocj1uZXcoMCxpW3NdKSh0LmF0dHJzKSxvKWZvcihhPW8ubGVuZ3RoLG49MDtuPGE7bisrKXIuYWRkKEsuX2NyZWF0ZU5vZGUob1tuXSkpO3JldHVybiByfX1LLnByb3RvdHlwZS5ub2RlVHlwZT0iTm9kZSIsSy5wcm90b3R5cGUuX2F0dHJzQWZmZWN0aW5nU2l6ZT1bXSxLLnByb3RvdHlwZS5ldmVudExpc3RlbmVycz17fSxLLnByb3RvdHlwZS5vbi5jYWxsKEsucHJvdG90eXBlLHEsKGZ1bmN0aW9uKCl7dGhpcy5fYmF0Y2hpbmdUcmFuc2Zvcm1DaGFuZ2U/dGhpcy5fbmVlZENsZWFyVHJhbnNmb3JtQ2FjaGU9ITA6KHRoaXMuX2NsZWFyQ2FjaGUoaiksdGhpcy5fY2xlYXJTZWxmQW5kRGVzY2VuZGFudENhY2hlKEkpKX0pKSxLLnByb3RvdHlwZS5vbi5jYWxsKEsucHJvdG90eXBlLCJ2aXNpYmxlQ2hhbmdlLmtvbnZhIiwoZnVuY3Rpb24oKXt0aGlzLl9jbGVhclNlbGZBbmREZXNjZW5kYW50Q2FjaGUoVSl9KSksSy5wcm90b3R5cGUub24uY2FsbChLLnByb3RvdHlwZSwibGlzdGVuaW5nQ2hhbmdlLmtvbnZhIiwoZnVuY3Rpb24oKXt0aGlzLl9jbGVhclNlbGZBbmREZXNjZW5kYW50Q2FjaGUoQil9KSksSy5wcm90b3R5cGUub24uY2FsbChLLnByb3RvdHlwZSwib3BhY2l0eUNoYW5nZS5rb252YSIsKGZ1bmN0aW9uKCl7dGhpcy5fY2xlYXJTZWxmQW5kRGVzY2VuZGFudENhY2hlKEQpfSkpO2NvbnN0IFE9dy5hZGRHZXR0ZXJTZXR0ZXI7UShLLCJ6SW5kZXgiKSxRKEssImFic29sdXRlUG9zaXRpb24iKSxRKEssInBvc2l0aW9uIiksUShLLCJ4IiwwLHAoKSksUShLLCJ5IiwwLHAoKSksUShLLCJnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLCJzb3VyY2Utb3ZlciIsXygpKSxRKEssIm9wYWNpdHkiLDEscCgpKSxRKEssIm5hbWUiLCIiLF8oKSksUShLLCJpZCIsIiIsXygpKSxRKEssInJvdGF0aW9uIiwwLHAoKSksdy5hZGRDb21wb25lbnRzR2V0dGVyU2V0dGVyKEssInNjYWxlIixbIngiLCJ5Il0pLFEoSywic2NhbGVYIiwxLHAoKSksUShLLCJzY2FsZVkiLDEscCgpKSx3LmFkZENvbXBvbmVudHNHZXR0ZXJTZXR0ZXIoSywic2tldyIsWyJ4IiwieSJdKSxRKEssInNrZXdYIiwwLHAoKSksUShLLCJza2V3WSIsMCxwKCkpLHcuYWRkQ29tcG9uZW50c0dldHRlclNldHRlcihLLCJvZmZzZXQiLFsieCIsInkiXSksUShLLCJvZmZzZXRYIiwwLHAoKSksUShLLCJvZmZzZXRZIiwwLHAoKSksUShLLCJkcmFnRGlzdGFuY2UiLG51bGwscCgpKSxRKEssIndpZHRoIiwwLHAoKSksUShLLCJoZWlnaHQiLDAscCgpKSxRKEssImxpc3RlbmluZyIsITAseCgpKSxRKEssInByZXZlbnREZWZhdWx0IiwhMCx4KCkpLFEoSywiZmlsdGVycyIsbnVsbCwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ZpbHRlclVwVG9EYXRlPSExLHR9KSksUShLLCJ2aXNpYmxlIiwhMCx4KCkpLFEoSywidHJhbnNmb3Jtc0VuYWJsZWQiLCJhbGwiLF8oKSksUShLLCJzaXplIiksUShLLCJkcmFnQm91bmRGdW5jIiksUShLLCJkcmFnZ2FibGUiLCExLHgoKSksdy5iYWNrQ29tcGF0KEsse3JvdGF0ZURlZzoicm90YXRlIixzZXRSb3RhdGlvbkRlZzoic2V0Um90YXRpb24iLGdldFJvdGF0aW9uRGVnOiJnZXRSb3RhdGlvbiJ9KTtjbGFzcyBKIGV4dGVuZHMgS3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jaGlsZHJlbj1bXX1nZXRDaGlsZHJlbih0KXtpZighdClyZXR1cm4gdGhpcy5jaGlsZHJlbnx8W107Y29uc3QgZT10aGlzLmNoaWxkcmVufHxbXTt2YXIgaT1bXTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXt0KGUpJiZpLnB1c2goZSl9KSksaX1oYXNDaGlsZHJlbigpe3JldHVybiB0aGlzLmdldENoaWxkcmVuKCkubGVuZ3RoPjB9cmVtb3ZlQ2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5nZXRDaGlsZHJlbigpLmZvckVhY2goKHQ9Pnt0LnBhcmVudD1udWxsLHQuaW5kZXg9MCx0LnJlbW92ZSgpfSkpLHRoaXMuY2hpbGRyZW49W10sdGhpcy5fcmVxdWVzdERyYXcoKSx0aGlzfWRlc3Ryb3lDaGlsZHJlbigpe3JldHVybiB0aGlzLmdldENoaWxkcmVuKCkuZm9yRWFjaCgodD0+e3QucGFyZW50PW51bGwsdC5pbmRleD0wLHQuZGVzdHJveSgpfSkpLHRoaXMuY2hpbGRyZW49W10sdGhpcy5fcmVxdWVzdERyYXcoKSx0aGlzfWFkZCguLi50KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2Zvcih2YXIgZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdGhpcy5hZGQoYXJndW1lbnRzW2VdKTtyZXR1cm4gdGhpc312YXIgaT10WzBdO3JldHVybiBpLmdldFBhcmVudCgpPyhpLm1vdmVUbyh0aGlzKSx0aGlzKToodGhpcy5fdmFsaWRhdGVBZGQoaSksaS5pbmRleD10aGlzLmdldENoaWxkcmVuKCkubGVuZ3RoLGkucGFyZW50PXRoaXMsaS5fY2xlYXJDYWNoZXMoKSx0aGlzLmdldENoaWxkcmVuKCkucHVzaChpKSx0aGlzLl9maXJlKCJhZGQiLHtjaGlsZDppfSksdGhpcy5fcmVxdWVzdERyYXcoKSx0aGlzKX1kZXN0cm95KCl7cmV0dXJuIHRoaXMuaGFzQ2hpbGRyZW4oKSYmdGhpcy5kZXN0cm95Q2hpbGRyZW4oKSxzdXBlci5kZXN0cm95KCksdGhpc31maW5kKHQpe3JldHVybiB0aGlzLl9nZW5lcmFsRmluZCh0LCExKX1maW5kT25lKHQpe3ZhciBlPXRoaXMuX2dlbmVyYWxGaW5kKHQsITApO3JldHVybiBlLmxlbmd0aD4wP2VbMF06dm9pZCAwfV9nZW5lcmFsRmluZCh0LGUpe3ZhciBpPVtdO3JldHVybiB0aGlzLl9kZXNjZW5kYW50cygocj0+e2NvbnN0IGE9ci5faXNNYXRjaCh0KTtyZXR1cm4gYSYmaS5wdXNoKHIpLCEoIWF8fCFlKX0pKSxpfV9kZXNjZW5kYW50cyh0KXtsZXQgZT0hMTtjb25zdCBpPXRoaXMuZ2V0Q2hpbGRyZW4oKTtmb3IoY29uc3QgciBvZiBpKXtpZihlPXQociksZSlyZXR1cm4hMDtpZihyLmhhc0NoaWxkcmVuKCkmJihlPXIuX2Rlc2NlbmRhbnRzKHQpLGUpKXJldHVybiEwfXJldHVybiExfXRvT2JqZWN0KCl7dmFyIHQ9Sy5wcm90b3R5cGUudG9PYmplY3QuY2FsbCh0aGlzKTtyZXR1cm4gdC5jaGlsZHJlbj1bXSx0aGlzLmdldENoaWxkcmVuKCkuZm9yRWFjaCgoZT0+e3QuY2hpbGRyZW4ucHVzaChlLnRvT2JqZWN0KCkpfSkpLHR9aXNBbmNlc3Rvck9mKHQpe2Zvcih2YXIgZT10LmdldFBhcmVudCgpO2U7KXtpZihlLl9pZD09PXRoaXMuX2lkKXJldHVybiEwO2U9ZS5nZXRQYXJlbnQoKX1yZXR1cm4hMX1jbG9uZSh0KXt2YXIgZT1LLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMsdCk7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKChmdW5jdGlvbih0KXtlLmFkZCh0LmNsb25lKCkpfSkpLGV9Z2V0QWxsSW50ZXJzZWN0aW9ucyh0KXt2YXIgZT1bXTtyZXR1cm4gdGhpcy5maW5kKCJTaGFwZSIpLmZvckVhY2goKGZ1bmN0aW9uKGkpe2kuaXNWaXNpYmxlKCkmJmkuaW50ZXJzZWN0cyh0KSYmZS5wdXNoKGkpfSkpLGV9X2NsZWFyU2VsZkFuZERlc2NlbmRhbnRDYWNoZSh0KXt2YXIgZTtzdXBlci5fY2xlYXJTZWxmQW5kRGVzY2VuZGFudENhY2hlKHQpLHRoaXMuaXNDYWNoZWQoKXx8bnVsbD09PShlPXRoaXMuY2hpbGRyZW4pfHx2b2lkIDA9PT1lfHxlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuX2NsZWFyU2VsZkFuZERlc2NlbmRhbnRDYWNoZSh0KX0pKX1fc2V0Q2hpbGRyZW5JbmRpY2VzKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuY2hpbGRyZW4pfHx2b2lkIDA9PT10fHx0LmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC5pbmRleD1lfSkpLHRoaXMuX3JlcXVlc3REcmF3KCl9ZHJhd1NjZW5lKHQsZSl7dmFyIGk9dGhpcy5nZXRMYXllcigpLHI9dHx8aSYmaS5nZXRDYW52YXMoKSxhPXImJnIuZ2V0Q29udGV4dCgpLG49dGhpcy5fZ2V0Q2FudmFzQ2FjaGUoKSxzPW4mJm4uc2NlbmUsbz1yJiZyLmlzQ2FjaGU7aWYoIXRoaXMuaXNWaXNpYmxlKCkmJiFvKXJldHVybiB0aGlzO2lmKHMpe2Euc2F2ZSgpO3ZhciBoPXRoaXMuZ2V0QWJzb2x1dGVUcmFuc2Zvcm0oZSkuZ2V0TWF0cml4KCk7YS50cmFuc2Zvcm0oaFswXSxoWzFdLGhbMl0saFszXSxoWzRdLGhbNV0pLHRoaXMuX2RyYXdDYWNoZWRTY2VuZUNhbnZhcyhhKSxhLnJlc3RvcmUoKX1lbHNlIHRoaXMuX2RyYXdDaGlsZHJlbigiZHJhd1NjZW5lIixyLGUpO3JldHVybiB0aGlzfWRyYXdIaXQodCxlKXtpZighdGhpcy5zaG91bGREcmF3SGl0KGUpKXJldHVybiB0aGlzO3ZhciBpPXRoaXMuZ2V0TGF5ZXIoKSxyPXR8fGkmJmkuaGl0Q2FudmFzLGE9ciYmci5nZXRDb250ZXh0KCksbj10aGlzLl9nZXRDYW52YXNDYWNoZSgpO2lmKG4mJm4uaGl0KXthLnNhdmUoKTt2YXIgcz10aGlzLmdldEFic29sdXRlVHJhbnNmb3JtKGUpLmdldE1hdHJpeCgpO2EudHJhbnNmb3JtKHNbMF0sc1sxXSxzWzJdLHNbM10sc1s0XSxzWzVdKSx0aGlzLl9kcmF3Q2FjaGVkSGl0Q2FudmFzKGEpLGEucmVzdG9yZSgpfWVsc2UgdGhpcy5fZHJhd0NoaWxkcmVuKCJkcmF3SGl0IixyLGUpO3JldHVybiB0aGlzfV9kcmF3Q2hpbGRyZW4odCxlLGkpe3ZhciByLGE9ZSYmZS5nZXRDb250ZXh0KCksbj10aGlzLmNsaXBXaWR0aCgpLHM9dGhpcy5jbGlwSGVpZ2h0KCksbz10aGlzLmNsaXBGdW5jKCksaD1uJiZzfHxvO2NvbnN0IGw9aT09PXRoaXM7aWYoaCl7YS5zYXZlKCk7dmFyIGQ9dGhpcy5nZXRBYnNvbHV0ZVRyYW5zZm9ybShpKSxjPWQuZ2V0TWF0cml4KCk7aWYoYS50cmFuc2Zvcm0oY1swXSxjWzFdLGNbMl0sY1szXSxjWzRdLGNbNV0pLGEuYmVnaW5QYXRoKCksbylvLmNhbGwodGhpcyxhLHRoaXMpO2Vsc2V7dmFyIGc9dGhpcy5jbGlwWCgpLHU9dGhpcy5jbGlwWSgpO2EucmVjdChnLHUsbixzKX1hLmNsaXAoKSxjPWQuY29weSgpLmludmVydCgpLmdldE1hdHJpeCgpLGEudHJhbnNmb3JtKGNbMF0sY1sxXSxjWzJdLGNbM10sY1s0XSxjWzVdKX12YXIgZj0hbCYmInNvdXJjZS1vdmVyIiE9PXRoaXMuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKCkmJiJkcmF3U2NlbmUiPT09dDtmJiYoYS5zYXZlKCksYS5fYXBwbHlHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24odGhpcykpLG51bGw9PT0ocj10aGlzLmNoaWxkcmVuKXx8dm9pZCAwPT09cnx8ci5mb3JFYWNoKChmdW5jdGlvbihyKXtyW3RdKGUsaSl9KSksZiYmYS5yZXN0b3JlKCksaCYmYS5yZXN0b3JlKCl9Z2V0Q2xpZW50UmVjdCh0KXt2YXIgZSxpLHIsYSxuLHM9KHQ9dHx8e30pLnNraXBUcmFuc2Zvcm0sbz10LnJlbGF0aXZlVG8saD17eDoxLzAseToxLzAsd2lkdGg6MCxoZWlnaHQ6MH0sbD10aGlzO251bGw9PT0oZT10aGlzLmNoaWxkcmVuKXx8dm9pZCAwPT09ZXx8ZS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihlLnZpc2libGUoKSl7dmFyIHM9ZS5nZXRDbGllbnRSZWN0KHtyZWxhdGl2ZVRvOmwsc2tpcFNoYWRvdzp0LnNraXBTaGFkb3csc2tpcFN0cm9rZTp0LnNraXBTdHJva2V9KTswPT09cy53aWR0aCYmMD09PXMuaGVpZ2h0fHwodm9pZCAwPT09aT8oaT1zLngscj1zLnksYT1zLngrcy53aWR0aCxuPXMueStzLmhlaWdodCk6KGk9TWF0aC5taW4oaSxzLngpLHI9TWF0aC5taW4ocixzLnkpLGE9TWF0aC5tYXgoYSxzLngrcy53aWR0aCksbj1NYXRoLm1heChuLHMueStzLmhlaWdodCkpKX19KSk7Zm9yKHZhciBkPXRoaXMuZmluZCgiU2hhcGUiKSxjPSExLGc9MDtnPGQubGVuZ3RoO2crKyl7aWYoZFtnXS5faXNWaXNpYmxlKHRoaXMpKXtjPSEwO2JyZWFrfX1yZXR1cm4gaD1jJiZ2b2lkIDAhPT1pP3t4OmkseTpyLHdpZHRoOmEtaSxoZWlnaHQ6bi1yfTp7eDowLHk6MCx3aWR0aDowLGhlaWdodDowfSxzP2g6dGhpcy5fdHJhbnNmb3JtZWRSZWN0KGgsbyl9fXcuYWRkQ29tcG9uZW50c0dldHRlclNldHRlcihKLCJjbGlwIixbIngiLCJ5Iiwid2lkdGgiLCJoZWlnaHQiXSksdy5hZGRHZXR0ZXJTZXR0ZXIoSiwiY2xpcFgiLHZvaWQgMCxwKCkpLHcuYWRkR2V0dGVyU2V0dGVyKEosImNsaXBZIix2b2lkIDAscCgpKSx3LmFkZEdldHRlclNldHRlcihKLCJjbGlwV2lkdGgiLHZvaWQgMCxwKCkpLHcuYWRkR2V0dGVyU2V0dGVyKEosImNsaXBIZWlnaHQiLHZvaWQgMCxwKCkpLHcuYWRkR2V0dGVyU2V0dGVyKEosImNsaXBGdW5jIik7Y29uc3QgWj1uZXcgTWFwLCQ9dm9pZCAwIT09aS5fZ2xvYmFsLlBvaW50ZXJFdmVudDtmdW5jdGlvbiB0dCh0KXtyZXR1cm4gWi5nZXQodCl9ZnVuY3Rpb24gZXQodCl7cmV0dXJue2V2dDp0LHBvaW50ZXJJZDp0LnBvaW50ZXJJZH19ZnVuY3Rpb24gaXQodCxlKXtyZXR1cm4gWi5nZXQodCk9PT1lfWZ1bmN0aW9uIHJ0KHQsZSl7YXQodCk7ZS5nZXRTdGFnZSgpJiYoWi5zZXQodCxlKSwkJiZlLl9maXJlKCJnb3Rwb2ludGVyY2FwdHVyZSIsZXQobmV3IFBvaW50ZXJFdmVudCgiZ290cG9pbnRlcmNhcHR1cmUiKSkpKX1mdW5jdGlvbiBhdCh0LGUpe2NvbnN0IGk9Wi5nZXQodCk7aWYoIWkpcmV0dXJuO2NvbnN0IHI9aS5nZXRTdGFnZSgpO3ImJnIuY29udGVudCxaLmRlbGV0ZSh0KSwkJiZpLl9maXJlKCJsb3N0cG9pbnRlcmNhcHR1cmUiLGV0KG5ldyBQb2ludGVyRXZlbnQoImxvc3Rwb2ludGVyY2FwdHVyZSIpKSl9dmFyIG50PSJtb3VzZWxlYXZlIixzdD0ibW91c2VvdmVyIixvdD0ibW91c2VlbnRlciIsaHQ9Im1vdXNlbW92ZSIsbHQ9Im1vdXNlZG93biIsZHQ9Im1vdXNldXAiLGN0PSJwb2ludGVybW92ZSIsZ3Q9InBvaW50ZXJkb3duIix1dD0icG9pbnRlcnVwIixmdD0icG9pbnRlcmNhbmNlbCIscHQ9InBvaW50ZXJvdXQiLHZ0PSJwb2ludGVybGVhdmUiLG10PSJwb2ludGVyb3ZlciIsX3Q9InBvaW50ZXJlbnRlciIseXQ9ImNvbnRleHRtZW51Iix4dD0idG91Y2hzdGFydCIsYnQ9InRvdWNoZW5kIixTdD0idG91Y2htb3ZlIix3dD0idG91Y2hjYW5jZWwiLEN0PSJ3aGVlbCIsa3Q9W1tvdCwiX3BvaW50ZXJlbnRlciJdLFtsdCwiX3BvaW50ZXJkb3duIl0sW2h0LCJfcG9pbnRlcm1vdmUiXSxbZHQsIl9wb2ludGVydXAiXSxbbnQsIl9wb2ludGVybGVhdmUiXSxbeHQsIl9wb2ludGVyZG93biJdLFtTdCwiX3BvaW50ZXJtb3ZlIl0sW2J0LCJfcG9pbnRlcnVwIl0sW3d0LCJfcG9pbnRlcmNhbmNlbCJdLFtzdCwiX3BvaW50ZXJvdmVyIl0sW0N0LCJfd2hlZWwiXSxbeXQsIl9jb250ZXh0bWVudSJdLFtndCwiX3BvaW50ZXJkb3duIl0sW2N0LCJfcG9pbnRlcm1vdmUiXSxbdXQsIl9wb2ludGVydXAiXSxbZnQsIl9wb2ludGVyY2FuY2VsIl0sWyJsb3N0cG9pbnRlcmNhcHR1cmUiLCJfbG9zdHBvaW50ZXJjYXB0dXJlIl1dO2NvbnN0IFB0PXttb3VzZTp7W3B0XToibW91c2VvdXQiLFt2dF06bnQsW210XTpzdCxbX3RdOm90LFtjdF06aHQsW2d0XTpsdCxbdXRdOmR0LFtmdF06Im1vdXNlY2FuY2VsIixwb2ludGVyY2xpY2s6ImNsaWNrIixwb2ludGVyZGJsY2xpY2s6ImRibGNsaWNrIn0sdG91Y2g6e1twdF06InRvdWNob3V0IixbdnRdOiJ0b3VjaGxlYXZlIixbbXRdOiJ0b3VjaG92ZXIiLFtfdF06InRvdWNoZW50ZXIiLFtjdF06U3QsW2d0XTp4dCxbdXRdOmJ0LFtmdF06d3QscG9pbnRlcmNsaWNrOiJ0YXAiLHBvaW50ZXJkYmxjbGljazoiZGJsdGFwIn0scG9pbnRlcjp7W3B0XTpwdCxbdnRdOnZ0LFttdF06bXQsW190XTpfdCxbY3RdOmN0LFtndF06Z3QsW3V0XTp1dCxbZnRdOmZ0LHBvaW50ZXJjbGljazoicG9pbnRlcmNsaWNrIixwb2ludGVyZGJsY2xpY2s6InBvaW50ZXJkYmxjbGljayJ9fSxUdD10PT50LmluZGV4T2YoInBvaW50ZXIiKT49MD8icG9pbnRlciI6dC5pbmRleE9mKCJ0b3VjaCIpPj0wPyJ0b3VjaCI6Im1vdXNlIixBdD10PT57Y29uc3QgZT1UdCh0KTtyZXR1cm4icG9pbnRlciI9PT1lP2kucG9pbnRlckV2ZW50c0VuYWJsZWQmJlB0LnBvaW50ZXI6InRvdWNoIj09PWU/UHQudG91Y2g6Im1vdXNlIj09PWU/UHQubW91c2U6dm9pZCAwfTtmdW5jdGlvbiBNdCh0PXt9KXtyZXR1cm4odC5jbGlwRnVuY3x8dC5jbGlwV2lkdGh8fHQuY2xpcEhlaWdodCkmJmcud2FybigiU3RhZ2UgZG9lcyBub3Qgc3VwcG9ydCBjbGlwcGluZy4gUGxlYXNlIHVzZSBjbGlwIGZvciBMYXllcnMgb3IgR3JvdXBzLiIpLHR9Y29uc3QgR3Q9W107Y2xhc3MgRXQgZXh0ZW5kcyBKe2NvbnN0cnVjdG9yKHQpe3N1cGVyKE10KHQpKSx0aGlzLl9wb2ludGVyUG9zaXRpb25zPVtdLHRoaXMuX2NoYW5nZWRQb2ludGVyUG9zaXRpb25zPVtdLHRoaXMuX2J1aWxkRE9NKCksdGhpcy5fYmluZENvbnRlbnRFdmVudHMoKSxHdC5wdXNoKHRoaXMpLHRoaXMub24oIndpZHRoQ2hhbmdlLmtvbnZhIGhlaWdodENoYW5nZS5rb252YSIsdGhpcy5fcmVzaXplRE9NKSx0aGlzLm9uKCJ2aXNpYmxlQ2hhbmdlLmtvbnZhIix0aGlzLl9jaGVja1Zpc2liaWxpdHkpLHRoaXMub24oImNsaXBXaWR0aENoYW5nZS5rb252YSBjbGlwSGVpZ2h0Q2hhbmdlLmtvbnZhIGNsaXBGdW5jQ2hhbmdlLmtvbnZhIiwoKCk9PntNdCh0aGlzLmF0dHJzKX0pKSx0aGlzLl9jaGVja1Zpc2liaWxpdHkoKX1fdmFsaWRhdGVBZGQodCl7Y29uc3QgZT0iTGF5ZXIiPT09dC5nZXRUeXBlKCksaT0iRmFzdExheWVyIj09PXQuZ2V0VHlwZSgpO2V8fGl8fGcudGhyb3coIllvdSBtYXkgb25seSBhZGQgbGF5ZXJzIHRvIHRoZSBzdGFnZS4iKX1fY2hlY2tWaXNpYmlsaXR5KCl7aWYoIXRoaXMuY29udGVudClyZXR1cm47Y29uc3QgdD10aGlzLnZpc2libGUoKT8iIjoibm9uZSI7dGhpcy5jb250ZW50LnN0eWxlLmRpc3BsYXk9dH1zZXRDb250YWluZXIodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZigiLiI9PT10LmNoYXJBdCgwKSl7dmFyIGU9dC5zbGljZSgxKTt0PWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZSlbMF19ZWxzZXt2YXIgaTtpPSIjIiE9PXQuY2hhckF0KDApP3Q6dC5zbGljZSgxKSx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGkpfWlmKCF0KXRocm93IkNhbiBub3QgZmluZCBjb250YWluZXIgaW4gZG9jdW1lbnQgd2l0aCBpZCAiK2l9cmV0dXJuIHRoaXMuX3NldEF0dHIoImNvbnRhaW5lciIsdCksdGhpcy5jb250ZW50JiYodGhpcy5jb250ZW50LnBhcmVudEVsZW1lbnQmJnRoaXMuY29udGVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGVudCksdC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpKSx0aGlzfXNob3VsZERyYXdIaXQoKXtyZXR1cm4hMH1jbGVhcigpe3ZhciB0LGU9dGhpcy5jaGlsZHJlbixpPWUubGVuZ3RoO2Zvcih0PTA7dDxpO3QrKyllW3RdLmNsZWFyKCk7cmV0dXJuIHRoaXN9Y2xvbmUodCl7cmV0dXJuIHR8fCh0PXt9KSx0LmNvbnRhaW5lcj0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxKLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMsdCl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKTt2YXIgdD10aGlzLmNvbnRlbnQ7dCYmZy5faXNJbkRvY3VtZW50KHQpJiZ0aGlzLmNvbnRhaW5lcigpLnJlbW92ZUNoaWxkKHQpO3ZhciBlPUd0LmluZGV4T2YodGhpcyk7cmV0dXJuIGU+LTEmJkd0LnNwbGljZShlLDEpLHRoaXN9Z2V0UG9pbnRlclBvc2l0aW9uKCl7Y29uc3QgdD10aGlzLl9wb2ludGVyUG9zaXRpb25zWzBdfHx0aGlzLl9jaGFuZ2VkUG9pbnRlclBvc2l0aW9uc1swXTtyZXR1cm4gdD97eDp0LngseTp0Lnl9OihnLndhcm4oIlBvaW50ZXIgcG9zaXRpb24gaXMgbWlzc2luZyBhbmQgbm90IHJlZ2lzdGVyZWQgYnkgdGhlIHN0YWdlLiBMb29rcyBsaWtlIGl0IGlzIG91dHNpZGUgb2YgdGhlIHN0YWdlIGNvbnRhaW5lci4gWW91IGNhbiBzZXQgaXQgbWFudWFsbHkgZnJvbSBldmVudDogc3RhZ2Uuc2V0UG9pbnRlcnNQb3NpdGlvbnMoZXZlbnQpOyIpLG51bGwpfV9nZXRQb2ludGVyQnlJZCh0KXtyZXR1cm4gdGhpcy5fcG9pbnRlclBvc2l0aW9ucy5maW5kKChlPT5lLmlkPT09dCkpfWdldFBvaW50ZXJzUG9zaXRpb25zKCl7cmV0dXJuIHRoaXMuX3BvaW50ZXJQb3NpdGlvbnN9Z2V0U3RhZ2UoKXtyZXR1cm4gdGhpc31nZXRDb250ZW50KCl7cmV0dXJuIHRoaXMuY29udGVudH1fdG9Lb252YUNhbnZhcyh0KXsodD10fHx7fSkueD10Lnh8fDAsdC55PXQueXx8MCx0LndpZHRoPXQud2lkdGh8fHRoaXMud2lkdGgoKSx0LmhlaWdodD10LmhlaWdodHx8dGhpcy5oZWlnaHQoKTt2YXIgZT1uZXcgRSh7d2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHQscGl4ZWxSYXRpbzp0LnBpeGVsUmF0aW98fDF9KSxpPWUuZ2V0Q29udGV4dCgpLl9jb250ZXh0LHI9dGhpcy5jaGlsZHJlbjtyZXR1cm4odC54fHx0LnkpJiZpLnRyYW5zbGF0ZSgtMSp0LngsLTEqdC55KSxyLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKGUuaXNWaXNpYmxlKCkpe3ZhciByPWUuX3RvS29udmFDYW52YXModCk7aS5kcmF3SW1hZ2Uoci5fY2FudmFzLHQueCx0Lnksci5nZXRXaWR0aCgpL3IuZ2V0UGl4ZWxSYXRpbygpLHIuZ2V0SGVpZ2h0KCkvci5nZXRQaXhlbFJhdGlvKCkpfX0pKSxlfWdldEludGVyc2VjdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDt2YXIgZSxpPXRoaXMuY2hpbGRyZW47Zm9yKGU9aS5sZW5ndGgtMTtlPj0wO2UtLSl7Y29uc3Qgcj1pW2VdLmdldEludGVyc2VjdGlvbih0KTtpZihyKXJldHVybiByfXJldHVybiBudWxsfV9yZXNpemVET00oKXt2YXIgdD10aGlzLndpZHRoKCksZT10aGlzLmhlaWdodCgpO3RoaXMuY29udGVudCYmKHRoaXMuY29udGVudC5zdHlsZS53aWR0aD10KyJweCIsdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodD1lKyJweCIpLHRoaXMuYnVmZmVyQ2FudmFzLnNldFNpemUodCxlKSx0aGlzLmJ1ZmZlckhpdENhbnZhcy5zZXRTaXplKHQsZSksdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChpPT57aS5zZXRTaXplKHt3aWR0aDp0LGhlaWdodDplfSksaS5kcmF3KCl9KSl9YWRkKHQsLi4uZSl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IodmFyIHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRoaXMuYWRkKGFyZ3VtZW50c1tyXSk7cmV0dXJuIHRoaXN9c3VwZXIuYWRkKHQpO3ZhciBhPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO3JldHVybiBhPjUmJmcud2FybigiVGhlIHN0YWdlIGhhcyAiK2ErIiBsYXllcnMuIFJlY29tbWVuZGVkIG1heGltdW0gbnVtYmVyIG9mIGxheWVycyBpcyAzLTUuIEFkZGluZyBtb3JlIGxheWVycyBpbnRvIHRoZSBzdGFnZSBtYXkgZHJvcCB0aGUgcGVyZm9ybWFuY2UuIFJldGhpbmsgeW91ciB0cmVlIHN0cnVjdHVyZSwgeW91IGNhbiB1c2UgS29udmEuR3JvdXAuIiksdC5zZXRTaXplKHt3aWR0aDp0aGlzLndpZHRoKCksaGVpZ2h0OnRoaXMuaGVpZ2h0KCl9KSx0LmRyYXcoKSxpLmlzQnJvd3NlciYmdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKHQuY2FudmFzLl9jYW52YXMpLHRoaXN9Z2V0UGFyZW50KCl7cmV0dXJuIG51bGx9Z2V0TGF5ZXIoKXtyZXR1cm4gbnVsbH1oYXNQb2ludGVyQ2FwdHVyZSh0KXtyZXR1cm4gaXQodCx0aGlzKX1zZXRQb2ludGVyQ2FwdHVyZSh0KXtydCh0LHRoaXMpfXJlbGVhc2VDYXB0dXJlKHQpe2F0KHQpfWdldExheWVycygpe3JldHVybiB0aGlzLmNoaWxkcmVufV9iaW5kQ29udGVudEV2ZW50cygpe2kuaXNCcm93c2VyJiZrdC5mb3JFYWNoKCgoW3QsZV0pPT57dGhpcy5jb250ZW50LmFkZEV2ZW50TGlzdGVuZXIodCwodD0+e3RoaXNbZV0odCl9KSl9KSl9X3BvaW50ZXJlbnRlcih0KXt0aGlzLnNldFBvaW50ZXJzUG9zaXRpb25zKHQpO2NvbnN0IGU9QXQodC50eXBlKTt0aGlzLl9maXJlKGUucG9pbnRlcmVudGVyLHtldnQ6dCx0YXJnZXQ6dGhpcyxjdXJyZW50VGFyZ2V0OnRoaXN9KX1fcG9pbnRlcm92ZXIodCl7dGhpcy5zZXRQb2ludGVyc1Bvc2l0aW9ucyh0KTtjb25zdCBlPUF0KHQudHlwZSk7dGhpcy5fZmlyZShlLnBvaW50ZXJvdmVyLHtldnQ6dCx0YXJnZXQ6dGhpcyxjdXJyZW50VGFyZ2V0OnRoaXN9KX1fZ2V0VGFyZ2V0U2hhcGUodCl7bGV0IGU9dGhpc1t0KyJ0YXJnZXRTaGFwZSJdO3JldHVybiBlJiYhZS5nZXRTdGFnZSgpJiYoZT1udWxsKSxlfV9wb2ludGVybGVhdmUodCl7Y29uc3QgZT1BdCh0LnR5cGUpLHI9VHQodC50eXBlKTtpZihlKXt0aGlzLnNldFBvaW50ZXJzUG9zaXRpb25zKHQpO3ZhciBhPXRoaXMuX2dldFRhcmdldFNoYXBlKHIpLG49IUwuaXNEcmFnZ2luZ3x8aS5oaXRPbkRyYWdFbmFibGVkO2EmJm4/KGEuX2ZpcmVBbmRCdWJibGUoZS5wb2ludGVyb3V0LHtldnQ6dH0pLGEuX2ZpcmVBbmRCdWJibGUoZS5wb2ludGVybGVhdmUse2V2dDp0fSksdGhpcy5fZmlyZShlLnBvaW50ZXJsZWF2ZSx7ZXZ0OnQsdGFyZ2V0OnRoaXMsY3VycmVudFRhcmdldDp0aGlzfSksdGhpc1tyKyJ0YXJnZXRTaGFwZSJdPW51bGwpOm4mJih0aGlzLl9maXJlKGUucG9pbnRlcmxlYXZlLHtldnQ6dCx0YXJnZXQ6dGhpcyxjdXJyZW50VGFyZ2V0OnRoaXN9KSx0aGlzLl9maXJlKGUucG9pbnRlcm91dCx7ZXZ0OnQsdGFyZ2V0OnRoaXMsY3VycmVudFRhcmdldDp0aGlzfSkpLHRoaXMucG9pbnRlclBvcz12b2lkIDAsdGhpcy5fcG9pbnRlclBvc2l0aW9ucz1bXX19X3BvaW50ZXJkb3duKHQpe2NvbnN0IGU9QXQodC50eXBlKSxyPVR0KHQudHlwZSk7aWYoZSl7dGhpcy5zZXRQb2ludGVyc1Bvc2l0aW9ucyh0KTt2YXIgYT0hMTt0aGlzLl9jaGFuZ2VkUG9pbnRlclBvc2l0aW9ucy5mb3JFYWNoKChuPT57dmFyIHM9dGhpcy5nZXRJbnRlcnNlY3Rpb24obik7TC5qdXN0RHJhZ2dlZD0hMSxpWyJfIityKyJMaXN0ZW5DbGljayJdPSEwO2lmKCEocyYmcy5pc0xpc3RlbmluZygpKSlyZXR1cm47aS5jYXB0dXJlUG9pbnRlckV2ZW50c0VuYWJsZWQmJnMuc2V0UG9pbnRlckNhcHR1cmUobi5pZCksdGhpc1tyKyJDbGlja1N0YXJ0U2hhcGUiXT1zLHMuX2ZpcmVBbmRCdWJibGUoZS5wb2ludGVyZG93bix7ZXZ0OnQscG9pbnRlcklkOm4uaWR9KSxhPSEwO2NvbnN0IG89dC50eXBlLmluZGV4T2YoInRvdWNoIik+PTA7cy5wcmV2ZW50RGVmYXVsdCgpJiZ0LmNhbmNlbGFibGUmJm8mJnQucHJldmVudERlZmF1bHQoKX0pKSxhfHx0aGlzLl9maXJlKGUucG9pbnRlcmRvd24se2V2dDp0LHRhcmdldDp0aGlzLGN1cnJlbnRUYXJnZXQ6dGhpcyxwb2ludGVySWQ6dGhpcy5fcG9pbnRlclBvc2l0aW9uc1swXS5pZH0pfX1fcG9pbnRlcm1vdmUodCl7Y29uc3QgZT1BdCh0LnR5cGUpLHI9VHQodC50eXBlKTtpZighZSlyZXR1cm47aWYoTC5pc0RyYWdnaW5nJiZMLm5vZGUucHJldmVudERlZmF1bHQoKSYmdC5jYW5jZWxhYmxlJiZ0LnByZXZlbnREZWZhdWx0KCksdGhpcy5zZXRQb2ludGVyc1Bvc2l0aW9ucyh0KSwhKCFMLmlzRHJhZ2dpbmd8fGkuaGl0T25EcmFnRW5hYmxlZCkpcmV0dXJuO3ZhciBhPXt9O2xldCBuPSExO3ZhciBzPXRoaXMuX2dldFRhcmdldFNoYXBlKHIpO3RoaXMuX2NoYW5nZWRQb2ludGVyUG9zaXRpb25zLmZvckVhY2goKGk9Pntjb25zdCBvPXR0KGkuaWQpfHx0aGlzLmdldEludGVyc2VjdGlvbihpKSxoPWkuaWQsbD17ZXZ0OnQscG9pbnRlcklkOmh9O3ZhciBkPXMhPT1vO2lmKGQmJnMmJihzLl9maXJlQW5kQnViYmxlKGUucG9pbnRlcm91dCxPYmplY3QuYXNzaWduKHt9LGwpLG8pLHMuX2ZpcmVBbmRCdWJibGUoZS5wb2ludGVybGVhdmUsT2JqZWN0LmFzc2lnbih7fSxsKSxvKSksbyl7aWYoYVtvLl9pZF0pcmV0dXJuO2Fbby5faWRdPSEwfW8mJm8uaXNMaXN0ZW5pbmcoKT8obj0hMCxkJiYoby5fZmlyZUFuZEJ1YmJsZShlLnBvaW50ZXJvdmVyLE9iamVjdC5hc3NpZ24oe30sbCkscyksby5fZmlyZUFuZEJ1YmJsZShlLnBvaW50ZXJlbnRlcixPYmplY3QuYXNzaWduKHt9LGwpLHMpLHRoaXNbcisidGFyZ2V0U2hhcGUiXT1vKSxvLl9maXJlQW5kQnViYmxlKGUucG9pbnRlcm1vdmUsT2JqZWN0LmFzc2lnbih7fSxsKSkpOnMmJih0aGlzLl9maXJlKGUucG9pbnRlcm92ZXIse2V2dDp0LHRhcmdldDp0aGlzLGN1cnJlbnRUYXJnZXQ6dGhpcyxwb2ludGVySWQ6aH0pLHRoaXNbcisidGFyZ2V0U2hhcGUiXT1udWxsKX0pKSxufHx0aGlzLl9maXJlKGUucG9pbnRlcm1vdmUse2V2dDp0LHRhcmdldDp0aGlzLGN1cnJlbnRUYXJnZXQ6dGhpcyxwb2ludGVySWQ6dGhpcy5fY2hhbmdlZFBvaW50ZXJQb3NpdGlvbnNbMF0uaWR9KX1fcG9pbnRlcnVwKHQpe2NvbnN0IGU9QXQodC50eXBlKSxyPVR0KHQudHlwZSk7aWYoIWUpcmV0dXJuO3RoaXMuc2V0UG9pbnRlcnNQb3NpdGlvbnModCk7Y29uc3QgYT10aGlzW3IrIkNsaWNrU3RhcnRTaGFwZSJdLG49dGhpc1tyKyJDbGlja0VuZFNoYXBlIl07dmFyIHM9e307bGV0IG89ITE7dGhpcy5fY2hhbmdlZFBvaW50ZXJQb3NpdGlvbnMuZm9yRWFjaCgoaD0+e2NvbnN0IGw9dHQoaC5pZCl8fHRoaXMuZ2V0SW50ZXJzZWN0aW9uKGgpO2lmKGwpe2lmKGwucmVsZWFzZUNhcHR1cmUoaC5pZCksc1tsLl9pZF0pcmV0dXJuO3NbbC5faWRdPSEwfWNvbnN0IGQ9aC5pZCxjPXtldnQ6dCxwb2ludGVySWQ6ZH07bGV0IGc9ITE7aVsiXyIrcisiSW5EYmxDbGlja1dpbmRvdyJdJiZpWyJfIityKyJJbkRibENsaWNrV2luZG93SWQiXT09PWQ/KGc9ITAsY2xlYXJUaW1lb3V0KHRoaXNbcisiRGJsVGltZW91dCJdKSk6TC5qdXN0RHJhZ2dlZHx8KGlbIl8iK3IrIkluRGJsQ2xpY2tXaW5kb3ciXT0hMCxpWyJfIityKyJJbkRibENsaWNrV2luZG93SWQiXT1kLGNsZWFyVGltZW91dCh0aGlzW3IrIkRibFRpbWVvdXQiXSkpLHRoaXNbcisiRGJsVGltZW91dCJdPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7aVsiXyIrcisiSW5EYmxDbGlja1dpbmRvdyJdPSExfSksaS5kYmxDbGlja1dpbmRvdyksbCYmbC5pc0xpc3RlbmluZygpPyhvPSEwLHRoaXNbcisiQ2xpY2tFbmRTaGFwZSJdPWwsbC5fZmlyZUFuZEJ1YmJsZShlLnBvaW50ZXJ1cCxPYmplY3QuYXNzaWduKHt9LGMpKSxpWyJfIityKyJMaXN0ZW5DbGljayJdJiZhJiZhPT09bCYmKGwuX2ZpcmVBbmRCdWJibGUoZS5wb2ludGVyY2xpY2ssT2JqZWN0LmFzc2lnbih7fSxjKSksZyYmbiYmbj09PWwmJmwuX2ZpcmVBbmRCdWJibGUoZS5wb2ludGVyZGJsY2xpY2ssT2JqZWN0LmFzc2lnbih7fSxjKSkpKToodGhpc1tyKyJDbGlja0VuZFNoYXBlIl09bnVsbCxpWyJfIityKyJMaXN0ZW5DbGljayJdJiZ0aGlzLl9maXJlKGUucG9pbnRlcmNsaWNrLHtldnQ6dCx0YXJnZXQ6dGhpcyxjdXJyZW50VGFyZ2V0OnRoaXMscG9pbnRlcklkOmR9KSxnJiZ0aGlzLl9maXJlKGUucG9pbnRlcmRibGNsaWNrLHtldnQ6dCx0YXJnZXQ6dGhpcyxjdXJyZW50VGFyZ2V0OnRoaXMscG9pbnRlcklkOmR9KSl9KSksb3x8dGhpcy5fZmlyZShlLnBvaW50ZXJ1cCx7ZXZ0OnQsdGFyZ2V0OnRoaXMsY3VycmVudFRhcmdldDp0aGlzLHBvaW50ZXJJZDp0aGlzLl9jaGFuZ2VkUG9pbnRlclBvc2l0aW9uc1swXS5pZH0pLGlbIl8iK3IrIkxpc3RlbkNsaWNrIl09ITEsdC5jYW5jZWxhYmxlJiZ0LnByZXZlbnREZWZhdWx0KCl9X2NvbnRleHRtZW51KHQpe3RoaXMuc2V0UG9pbnRlcnNQb3NpdGlvbnModCk7dmFyIGU9dGhpcy5nZXRJbnRlcnNlY3Rpb24odGhpcy5nZXRQb2ludGVyUG9zaXRpb24oKSk7ZSYmZS5pc0xpc3RlbmluZygpP2UuX2ZpcmVBbmRCdWJibGUoeXQse2V2dDp0fSk6dGhpcy5fZmlyZSh5dCx7ZXZ0OnQsdGFyZ2V0OnRoaXMsY3VycmVudFRhcmdldDp0aGlzfSl9X3doZWVsKHQpe3RoaXMuc2V0UG9pbnRlcnNQb3NpdGlvbnModCk7dmFyIGU9dGhpcy5nZXRJbnRlcnNlY3Rpb24odGhpcy5nZXRQb2ludGVyUG9zaXRpb24oKSk7ZSYmZS5pc0xpc3RlbmluZygpP2UuX2ZpcmVBbmRCdWJibGUoQ3Qse2V2dDp0fSk6dGhpcy5fZmlyZShDdCx7ZXZ0OnQsdGFyZ2V0OnRoaXMsY3VycmVudFRhcmdldDp0aGlzfSl9X3BvaW50ZXJjYW5jZWwodCl7dGhpcy5zZXRQb2ludGVyc1Bvc2l0aW9ucyh0KTtjb25zdCBlPXR0KHQucG9pbnRlcklkKXx8dGhpcy5nZXRJbnRlcnNlY3Rpb24odGhpcy5nZXRQb2ludGVyUG9zaXRpb24oKSk7ZSYmZS5fZmlyZUFuZEJ1YmJsZSh1dCxldCh0KSksYXQodC5wb2ludGVySWQpfV9sb3N0cG9pbnRlcmNhcHR1cmUodCl7YXQodC5wb2ludGVySWQpfXNldFBvaW50ZXJzUG9zaXRpb25zKHQpe3ZhciBlPXRoaXMuX2dldENvbnRlbnRQb3NpdGlvbigpLGk9bnVsbCxyPW51bGw7dm9pZCAwIT09KHQ9dHx8d2luZG93LmV2ZW50KS50b3VjaGVzPyh0aGlzLl9wb2ludGVyUG9zaXRpb25zPVtdLHRoaXMuX2NoYW5nZWRQb2ludGVyUG9zaXRpb25zPVtdLEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodC50b3VjaGVzLCh0PT57dGhpcy5fcG9pbnRlclBvc2l0aW9ucy5wdXNoKHtpZDp0LmlkZW50aWZpZXIseDoodC5jbGllbnRYLWUubGVmdCkvZS5zY2FsZVgseToodC5jbGllbnRZLWUudG9wKS9lLnNjYWxlWX0pfSkpLEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodC5jaGFuZ2VkVG91Y2hlc3x8dC50b3VjaGVzLCh0PT57dGhpcy5fY2hhbmdlZFBvaW50ZXJQb3NpdGlvbnMucHVzaCh7aWQ6dC5pZGVudGlmaWVyLHg6KHQuY2xpZW50WC1lLmxlZnQpL2Uuc2NhbGVYLHk6KHQuY2xpZW50WS1lLnRvcCkvZS5zY2FsZVl9KX0pKSk6KGk9KHQuY2xpZW50WC1lLmxlZnQpL2Uuc2NhbGVYLHI9KHQuY2xpZW50WS1lLnRvcCkvZS5zY2FsZVksdGhpcy5wb2ludGVyUG9zPXt4OmkseTpyfSx0aGlzLl9wb2ludGVyUG9zaXRpb25zPVt7eDppLHk6cixpZDpnLl9nZXRGaXJzdFBvaW50ZXJJZCh0KX1dLHRoaXMuX2NoYW5nZWRQb2ludGVyUG9zaXRpb25zPVt7eDppLHk6cixpZDpnLl9nZXRGaXJzdFBvaW50ZXJJZCh0KX1dKX1fc2V0UG9pbnRlclBvc2l0aW9uKHQpe2cud2FybignTWV0aG9kIF9zZXRQb2ludGVyUG9zaXRpb24gaXMgZGVwcmVjYXRlZC4gVXNlICJzdGFnZS5zZXRQb2ludGVyc1Bvc2l0aW9ucyhldmVudCkiIGluc3RlYWQuJyksdGhpcy5zZXRQb2ludGVyc1Bvc2l0aW9ucyh0KX1fZ2V0Q29udGVudFBvc2l0aW9uKCl7aWYoIXRoaXMuY29udGVudHx8IXRoaXMuY29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QpcmV0dXJue3RvcDowLGxlZnQ6MCxzY2FsZVg6MSxzY2FsZVk6MX07dmFyIHQ9dGhpcy5jb250ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6dC50b3AsbGVmdDp0LmxlZnQsc2NhbGVYOnQud2lkdGgvdGhpcy5jb250ZW50LmNsaWVudFdpZHRofHwxLHNjYWxlWTp0LmhlaWdodC90aGlzLmNvbnRlbnQuY2xpZW50SGVpZ2h0fHwxfX1fYnVpbGRET00oKXtpZih0aGlzLmJ1ZmZlckNhbnZhcz1uZXcgRSh7d2lkdGg6dGhpcy53aWR0aCgpLGhlaWdodDp0aGlzLmhlaWdodCgpfSksdGhpcy5idWZmZXJIaXRDYW52YXM9bmV3IFIoe3BpeGVsUmF0aW86MSx3aWR0aDp0aGlzLndpZHRoKCksaGVpZ2h0OnRoaXMuaGVpZ2h0KCl9KSxpLmlzQnJvd3Nlcil7dmFyIHQ9dGhpcy5jb250YWluZXIoKTtpZighdCl0aHJvdyJTdGFnZSBoYXMgbm8gY29udGFpbmVyLiBBIGNvbnRhaW5lciBpcyByZXF1aXJlZC4iO3QuaW5uZXJIVE1MPSIiLHRoaXMuY29udGVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmNvbnRlbnQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIix0aGlzLmNvbnRlbnQuc3R5bGUudXNlclNlbGVjdD0ibm9uZSIsdGhpcy5jb250ZW50LmNsYXNzTmFtZT0ia29udmFqcy1jb250ZW50Iix0aGlzLmNvbnRlbnQuc2V0QXR0cmlidXRlKCJyb2xlIiwicHJlc2VudGF0aW9uIiksdC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpLHRoaXMuX3Jlc2l6ZURPTSgpfX1jYWNoZSgpe3JldHVybiBnLndhcm4oIkNhY2hlIGZ1bmN0aW9uIGlzIG5vdCBhbGxvd2VkIGZvciBzdGFnZS4gWW91IG1heSB1c2UgY2FjaGUgb25seSBmb3IgbGF5ZXJzLCBncm91cHMgYW5kIHNoYXBlcy4iKSx0aGlzfWNsZWFyQ2FjaGUoKXtyZXR1cm4gdGhpc31iYXRjaERyYXcoKXtyZXR1cm4gdGhpcy5nZXRDaGlsZHJlbigpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuYmF0Y2hEcmF3KCl9KSksdGhpc319RXQucHJvdG90eXBlLm5vZGVUeXBlPSJTdGFnZSIscihFdCksdy5hZGRHZXR0ZXJTZXR0ZXIoRXQsImNvbnRhaW5lciIpO3ZhciBSdD0iaGFzU2hhZG93IixMdD0ic2hhZG93UkdCQSIsRHQ9InBhdHRlcm5JbWFnZSIsT3Q9ImxpbmVhckdyYWRpZW50IixJdD0icmFkaWFsR3JhZGllbnQiO2xldCBGdDtmdW5jdGlvbiBOdCgpe3JldHVybiBGdHx8KEZ0PWcuY3JlYXRlQ2FudmFzRWxlbWVudCgpLmdldENvbnRleHQoIjJkIiksRnQpfWNvbnN0IEJ0PXt9O2NsYXNzIHp0IGV4dGVuZHMgS3tjb25zdHJ1Y3Rvcih0KXtsZXQgZTtmb3Ioc3VwZXIodCk7ZT1nLmdldFJhbmRvbUNvbG9yKCksIWV8fGUgaW4gQnQ7KTt0aGlzLmNvbG9yS2V5PWUsQnRbZV09dGhpc31nZXRDb250ZXh0KCl7cmV0dXJuIGcud2Fybigic2hhcGUuZ2V0Q29udGV4dCgpIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgZG8gbm90IHVzZSBpdC4iKSx0aGlzLmdldExheWVyKCkuZ2V0Q29udGV4dCgpfWdldENhbnZhcygpe3JldHVybiBnLndhcm4oInNoYXBlLmdldENhbnZhcygpIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgZG8gbm90IHVzZSBpdC4iKSx0aGlzLmdldExheWVyKCkuZ2V0Q2FudmFzKCl9Z2V0U2NlbmVGdW5jKCl7cmV0dXJuIHRoaXMuYXR0cnMuc2NlbmVGdW5jfHx0aGlzLl9zY2VuZUZ1bmN9Z2V0SGl0RnVuYygpe3JldHVybiB0aGlzLmF0dHJzLmhpdEZ1bmN8fHRoaXMuX2hpdEZ1bmN9aGFzU2hhZG93KCl7cmV0dXJuIHRoaXMuX2dldENhY2hlKFJ0LHRoaXMuX2hhc1NoYWRvdyl9X2hhc1NoYWRvdygpe3JldHVybiB0aGlzLnNoYWRvd0VuYWJsZWQoKSYmMCE9PXRoaXMuc2hhZG93T3BhY2l0eSgpJiYhISh0aGlzLnNoYWRvd0NvbG9yKCl8fHRoaXMuc2hhZG93Qmx1cigpfHx0aGlzLnNoYWRvd09mZnNldFgoKXx8dGhpcy5zaGFkb3dPZmZzZXRZKCkpfV9nZXRGaWxsUGF0dGVybigpe3JldHVybiB0aGlzLl9nZXRDYWNoZShEdCx0aGlzLl9fZ2V0RmlsbFBhdHRlcm4pfV9fZ2V0RmlsbFBhdHRlcm4oKXtpZih0aGlzLmZpbGxQYXR0ZXJuSW1hZ2UoKSl7Y29uc3QgdD1OdCgpLmNyZWF0ZVBhdHRlcm4odGhpcy5maWxsUGF0dGVybkltYWdlKCksdGhpcy5maWxsUGF0dGVyblJlcGVhdCgpfHwicmVwZWF0Iik7aWYodCYmdC5zZXRUcmFuc2Zvcm0pe2NvbnN0IGU9bmV3IGE7ZS50cmFuc2xhdGUodGhpcy5maWxsUGF0dGVyblgoKSx0aGlzLmZpbGxQYXR0ZXJuWSgpKSxlLnJvdGF0ZShpLmdldEFuZ2xlKHRoaXMuZmlsbFBhdHRlcm5Sb3RhdGlvbigpKSksZS5zY2FsZSh0aGlzLmZpbGxQYXR0ZXJuU2NhbGVYKCksdGhpcy5maWxsUGF0dGVyblNjYWxlWSgpKSxlLnRyYW5zbGF0ZSgtMSp0aGlzLmZpbGxQYXR0ZXJuT2Zmc2V0WCgpLC0xKnRoaXMuZmlsbFBhdHRlcm5PZmZzZXRZKCkpO2NvbnN0IHI9ZS5nZXRNYXRyaXgoKTt0LnNldFRyYW5zZm9ybSh7YTpyWzBdLGI6clsxXSxjOnJbMl0sZDpyWzNdLGU6cls0XSxmOnJbNV19KX1yZXR1cm4gdH19X2dldExpbmVhckdyYWRpZW50KCl7cmV0dXJuIHRoaXMuX2dldENhY2hlKE90LHRoaXMuX19nZXRMaW5lYXJHcmFkaWVudCl9X19nZXRMaW5lYXJHcmFkaWVudCgpe3ZhciB0PXRoaXMuZmlsbExpbmVhckdyYWRpZW50Q29sb3JTdG9wcygpO2lmKHQpe2Zvcih2YXIgZT1OdCgpLGk9dGhpcy5maWxsTGluZWFyR3JhZGllbnRTdGFydFBvaW50KCkscj10aGlzLmZpbGxMaW5lYXJHcmFkaWVudEVuZFBvaW50KCksYT1lLmNyZWF0ZUxpbmVhckdyYWRpZW50KGkueCxpLnksci54LHIueSksbj0wO248dC5sZW5ndGg7bis9MilhLmFkZENvbG9yU3RvcCh0W25dLHRbbisxXSk7cmV0dXJuIGF9fV9nZXRSYWRpYWxHcmFkaWVudCgpe3JldHVybiB0aGlzLl9nZXRDYWNoZShJdCx0aGlzLl9fZ2V0UmFkaWFsR3JhZGllbnQpfV9fZ2V0UmFkaWFsR3JhZGllbnQoKXt2YXIgdD10aGlzLmZpbGxSYWRpYWxHcmFkaWVudENvbG9yU3RvcHMoKTtpZih0KXtmb3IodmFyIGU9TnQoKSxpPXRoaXMuZmlsbFJhZGlhbEdyYWRpZW50U3RhcnRQb2ludCgpLHI9dGhpcy5maWxsUmFkaWFsR3JhZGllbnRFbmRQb2ludCgpLGE9ZS5jcmVhdGVSYWRpYWxHcmFkaWVudChpLngsaS55LHRoaXMuZmlsbFJhZGlhbEdyYWRpZW50U3RhcnRSYWRpdXMoKSxyLngsci55LHRoaXMuZmlsbFJhZGlhbEdyYWRpZW50RW5kUmFkaXVzKCkpLG49MDtuPHQubGVuZ3RoO24rPTIpYS5hZGRDb2xvclN0b3AodFtuXSx0W24rMV0pO3JldHVybiBhfX1nZXRTaGFkb3dSR0JBKCl7cmV0dXJuIHRoaXMuX2dldENhY2hlKEx0LHRoaXMuX2dldFNoYWRvd1JHQkEpfV9nZXRTaGFkb3dSR0JBKCl7aWYodGhpcy5oYXNTaGFkb3coKSl7dmFyIHQ9Zy5jb2xvclRvUkdCQSh0aGlzLnNoYWRvd0NvbG9yKCkpO3JldHVybiJyZ2JhKCIrdC5yKyIsIit0LmcrIiwiK3QuYisiLCIrdC5hKih0aGlzLnNoYWRvd09wYWNpdHkoKXx8MSkrIikifX1oYXNGaWxsKCl7cmV0dXJuIHRoaXMuX2NhbGN1bGF0ZSgiaGFzRmlsbCIsWyJmaWxsRW5hYmxlZCIsImZpbGwiLCJmaWxsUGF0dGVybkltYWdlIiwiZmlsbExpbmVhckdyYWRpZW50Q29sb3JTdG9wcyIsImZpbGxSYWRpYWxHcmFkaWVudENvbG9yU3RvcHMiXSwoKCk9PnRoaXMuZmlsbEVuYWJsZWQoKSYmISEodGhpcy5maWxsKCl8fHRoaXMuZmlsbFBhdHRlcm5JbWFnZSgpfHx0aGlzLmZpbGxMaW5lYXJHcmFkaWVudENvbG9yU3RvcHMoKXx8dGhpcy5maWxsUmFkaWFsR3JhZGllbnRDb2xvclN0b3BzKCkpKSl9aGFzU3Ryb2tlKCl7cmV0dXJuIHRoaXMuX2NhbGN1bGF0ZSgiaGFzU3Ryb2tlIixbInN0cm9rZUVuYWJsZWQiLCJzdHJva2VXaWR0aCIsInN0cm9rZSIsInN0cm9rZUxpbmVhckdyYWRpZW50Q29sb3JTdG9wcyJdLCgoKT0+dGhpcy5zdHJva2VFbmFibGVkKCkmJnRoaXMuc3Ryb2tlV2lkdGgoKSYmISghdGhpcy5zdHJva2UoKSYmIXRoaXMuc3Ryb2tlTGluZWFyR3JhZGllbnRDb2xvclN0b3BzKCkpKSl9aGFzSGl0U3Ryb2tlKCl7Y29uc3QgdD10aGlzLmhpdFN0cm9rZVdpZHRoKCk7cmV0dXJuImF1dG8iPT09dD90aGlzLmhhc1N0cm9rZSgpOnRoaXMuc3Ryb2tlRW5hYmxlZCgpJiYhIXR9aW50ZXJzZWN0cyh0KXt2YXIgZT10aGlzLmdldFN0YWdlKCkuYnVmZmVySGl0Q2FudmFzO3JldHVybiBlLmdldENvbnRleHQoKS5jbGVhcigpLHRoaXMuZHJhd0hpdChlLG51bGwsITApLGUuY29udGV4dC5nZXRJbWFnZURhdGEoTWF0aC5yb3VuZCh0LngpLE1hdGgucm91bmQodC55KSwxLDEpLmRhdGFbM10+MH1kZXN0cm95KCl7cmV0dXJuIEsucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSxkZWxldGUgQnRbdGhpcy5jb2xvcktleV0sZGVsZXRlIHRoaXMuY29sb3JLZXksdGhpc31fdXNlQnVmZmVyQ2FudmFzKHQpe3ZhciBlO2lmKCF0aGlzLmdldFN0YWdlKCkpcmV0dXJuITE7aWYoIShudWxsPT09KGU9dGhpcy5hdHRycy5wZXJmZWN0RHJhd0VuYWJsZWQpfHx2b2lkIDA9PT1lfHxlKSlyZXR1cm4hMTtjb25zdCBpPXR8fHRoaXMuaGFzRmlsbCgpLHI9dGhpcy5oYXNTdHJva2UoKSxhPTEhPT10aGlzLmdldEFic29sdXRlT3BhY2l0eSgpO2lmKGkmJnImJmEpcmV0dXJuITA7Y29uc3Qgbj10aGlzLmhhc1NoYWRvdygpLHM9dGhpcy5zaGFkb3dGb3JTdHJva2VFbmFibGVkKCk7cmV0dXJuISEoaSYmciYmbiYmcyl9c2V0U3Ryb2tlSGl0RW5hYmxlZCh0KXtnLndhcm4oInN0cm9rZUhpdEVuYWJsZWQgcHJvcGVydHkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBoaXRTdHJva2VXaWR0aCBpbnN0ZWFkLiIpLHQ/dGhpcy5oaXRTdHJva2VXaWR0aCgiYXV0byIpOnRoaXMuaGl0U3Ryb2tlV2lkdGgoMCl9Z2V0U3Ryb2tlSGl0RW5hYmxlZCgpe3JldHVybiAwIT09dGhpcy5oaXRTdHJva2VXaWR0aCgpfWdldFNlbGZSZWN0KCl7dmFyIHQ9dGhpcy5zaXplKCk7cmV0dXJue3g6dGhpcy5fY2VudHJvaWQ/LXQud2lkdGgvMjowLHk6dGhpcy5fY2VudHJvaWQ/LXQuaGVpZ2h0LzI6MCx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19Z2V0Q2xpZW50UmVjdCh0PXt9KXtjb25zdCBlPXQuc2tpcFRyYW5zZm9ybSxpPXQucmVsYXRpdmVUbyxyPXRoaXMuZ2V0U2VsZlJlY3QoKSxhPSF0LnNraXBTdHJva2UmJnRoaXMuaGFzU3Ryb2tlKCkmJnRoaXMuc3Ryb2tlV2lkdGgoKXx8MCxuPXIud2lkdGgrYSxzPXIuaGVpZ2h0K2Esbz0hdC5za2lwU2hhZG93JiZ0aGlzLmhhc1NoYWRvdygpLGg9bz90aGlzLnNoYWRvd09mZnNldFgoKTowLGw9bz90aGlzLnNoYWRvd09mZnNldFkoKTowLGQ9bitNYXRoLmFicyhoKSxjPXMrTWF0aC5hYnMobCksZz1vJiZ0aGlzLnNoYWRvd0JsdXIoKXx8MCx1PWQrMipnLGY9YysyKmc7bGV0IHA9MDtNYXRoLnJvdW5kKGEvMikhPT1hLzImJihwPTEpO2NvbnN0IHY9e3dpZHRoOnUrcCxoZWlnaHQ6ZitwLHg6LU1hdGgucm91bmQoYS8yK2cpK01hdGgubWluKGgsMCkrci54LHk6LU1hdGgucm91bmQoYS8yK2cpK01hdGgubWluKGwsMCkrci55fTtyZXR1cm4gZT92OnRoaXMuX3RyYW5zZm9ybWVkUmVjdCh2LGkpfWRyYXdTY2VuZSh0LGUpe3ZhciBpLHIsYT10aGlzLmdldExheWVyKCksbj10fHxhLmdldENhbnZhcygpLHM9bi5nZXRDb250ZXh0KCksbz10aGlzLl9nZXRDYW52YXNDYWNoZSgpLGg9dGhpcy5nZXRTY2VuZUZ1bmMoKSxsPXRoaXMuaGFzU2hhZG93KCksZD1uLmlzQ2FjaGUsYz1lPT09dGhpcztpZighdGhpcy5pc1Zpc2libGUoKSYmIWMpcmV0dXJuIHRoaXM7aWYobyl7cy5zYXZlKCk7dmFyIGc9dGhpcy5nZXRBYnNvbHV0ZVRyYW5zZm9ybShlKS5nZXRNYXRyaXgoKTtyZXR1cm4gcy50cmFuc2Zvcm0oZ1swXSxnWzFdLGdbMl0sZ1szXSxnWzRdLGdbNV0pLHRoaXMuX2RyYXdDYWNoZWRTY2VuZUNhbnZhcyhzKSxzLnJlc3RvcmUoKSx0aGlzfWlmKCFoKXJldHVybiB0aGlzO2lmKHMuc2F2ZSgpLHRoaXMuX3VzZUJ1ZmZlckNhbnZhcygpJiYhZCl7KHI9KGk9dGhpcy5nZXRTdGFnZSgpLmJ1ZmZlckNhbnZhcykuZ2V0Q29udGV4dCgpKS5jbGVhcigpLHIuc2F2ZSgpLHIuX2FwcGx5TGluZUpvaW4odGhpcyk7dmFyIHU9dGhpcy5nZXRBYnNvbHV0ZVRyYW5zZm9ybShlKS5nZXRNYXRyaXgoKTtyLnRyYW5zZm9ybSh1WzBdLHVbMV0sdVsyXSx1WzNdLHVbNF0sdVs1XSksaC5jYWxsKHRoaXMscix0aGlzKSxyLnJlc3RvcmUoKTt2YXIgZj1pLnBpeGVsUmF0aW87bCYmcy5fYXBwbHlTaGFkb3codGhpcykscy5fYXBwbHlPcGFjaXR5KHRoaXMpLHMuX2FwcGx5R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKHRoaXMpLHMuZHJhd0ltYWdlKGkuX2NhbnZhcywwLDAsaS53aWR0aC9mLGkuaGVpZ2h0L2YpfWVsc2V7aWYocy5fYXBwbHlMaW5lSm9pbih0aGlzKSwhYyl7dT10aGlzLmdldEFic29sdXRlVHJhbnNmb3JtKGUpLmdldE1hdHJpeCgpO3MudHJhbnNmb3JtKHVbMF0sdVsxXSx1WzJdLHVbM10sdVs0XSx1WzVdKSxzLl9hcHBseU9wYWNpdHkodGhpcykscy5fYXBwbHlHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24odGhpcyl9bCYmcy5fYXBwbHlTaGFkb3codGhpcyksaC5jYWxsKHRoaXMscyx0aGlzKX1yZXR1cm4gcy5yZXN0b3JlKCksdGhpc31kcmF3SGl0KHQsZSxpPSExKXtpZighdGhpcy5zaG91bGREcmF3SGl0KGUsaSkpcmV0dXJuIHRoaXM7dmFyIHI9dGhpcy5nZXRMYXllcigpLGE9dHx8ci5oaXRDYW52YXMsbj1hJiZhLmdldENvbnRleHQoKSxzPXRoaXMuaGl0RnVuYygpfHx0aGlzLnNjZW5lRnVuYygpLG89dGhpcy5fZ2V0Q2FudmFzQ2FjaGUoKSxoPW8mJm8uaGl0O2lmKHRoaXMuY29sb3JLZXl8fGcud2FybigiTG9va3MgbGlrZSB5b3VyIGNhbnZhcyBoYXMgYSBkZXN0cm95ZWQgc2hhcGUgaW4gaXQuIERvIG5vdCByZXVzZSBzaGFwZSBhZnRlciB5b3UgZGVzdHJveWVkIGl0LiBJZiB5b3Ugd2FudCB0byByZXVzZSBzaGFwZSB5b3Ugc2hvdWxkIGNhbGwgcmVtb3ZlKCkgaW5zdGVhZCBvZiBkZXN0cm95KCkiKSxoKXtuLnNhdmUoKTt2YXIgbD10aGlzLmdldEFic29sdXRlVHJhbnNmb3JtKGUpLmdldE1hdHJpeCgpO3JldHVybiBuLnRyYW5zZm9ybShsWzBdLGxbMV0sbFsyXSxsWzNdLGxbNF0sbFs1XSksdGhpcy5fZHJhd0NhY2hlZEhpdENhbnZhcyhuKSxuLnJlc3RvcmUoKSx0aGlzfWlmKCFzKXJldHVybiB0aGlzO24uc2F2ZSgpLG4uX2FwcGx5TGluZUpvaW4odGhpcyk7aWYoISh0aGlzPT09ZSkpe3ZhciBkPXRoaXMuZ2V0QWJzb2x1dGVUcmFuc2Zvcm0oZSkuZ2V0TWF0cml4KCk7bi50cmFuc2Zvcm0oZFswXSxkWzFdLGRbMl0sZFszXSxkWzRdLGRbNV0pfXJldHVybiBzLmNhbGwodGhpcyxuLHRoaXMpLG4ucmVzdG9yZSgpLHRoaXN9ZHJhd0hpdEZyb21DYWNoZSh0PTApe3ZhciBlLGkscixhLG4scz10aGlzLl9nZXRDYW52YXNDYWNoZSgpLG89dGhpcy5fZ2V0Q2FjaGVkU2NlbmVDYW52YXMoKSxoPXMuaGl0LGw9aC5nZXRDb250ZXh0KCksZD1oLmdldFdpZHRoKCksYz1oLmdldEhlaWdodCgpO2wuY2xlYXIoKSxsLmRyYXdJbWFnZShvLl9jYW52YXMsMCwwLGQsYyk7dHJ5e2ZvcihyPShpPShlPWwuZ2V0SW1hZ2VEYXRhKDAsMCxkLGMpKS5kYXRhKS5sZW5ndGgsYT1nLl9oZXhUb1JnYih0aGlzLmNvbG9yS2V5KSxuPTA7bjxyO24rPTQpaVtuKzNdPnQ/KGlbbl09YS5yLGlbbisxXT1hLmcsaVtuKzJdPWEuYixpW24rM109MjU1KTppW24rM109MDtsLnB1dEltYWdlRGF0YShlLDAsMCl9Y2F0Y2godCl7Zy5lcnJvcigiVW5hYmxlIHRvIGRyYXcgaGl0IGdyYXBoIGZyb20gY2FjaGVkIHNjZW5lIGNhbnZhcy4gIit0Lm1lc3NhZ2UpfXJldHVybiB0aGlzfWhhc1BvaW50ZXJDYXB0dXJlKHQpe3JldHVybiBpdCh0LHRoaXMpfXNldFBvaW50ZXJDYXB0dXJlKHQpe3J0KHQsdGhpcyl9cmVsZWFzZUNhcHR1cmUodCl7YXQodCl9fXp0LnByb3RvdHlwZS5fZmlsbEZ1bmM9ZnVuY3Rpb24odCl7dC5maWxsKCl9LHp0LnByb3RvdHlwZS5fc3Ryb2tlRnVuYz1mdW5jdGlvbih0KXt0LnN0cm9rZSgpfSx6dC5wcm90b3R5cGUuX2ZpbGxGdW5jSGl0PWZ1bmN0aW9uKHQpe3QuZmlsbCgpfSx6dC5wcm90b3R5cGUuX3N0cm9rZUZ1bmNIaXQ9ZnVuY3Rpb24odCl7dC5zdHJva2UoKX0senQucHJvdG90eXBlLl9jZW50cm9pZD0hMSx6dC5wcm90b3R5cGUubm9kZVR5cGU9IlNoYXBlIixyKHp0KSx6dC5wcm90b3R5cGUuZXZlbnRMaXN0ZW5lcnM9e30senQucHJvdG90eXBlLm9uLmNhbGwoenQucHJvdG90eXBlLCJzaGFkb3dDb2xvckNoYW5nZS5rb252YSBzaGFkb3dCbHVyQ2hhbmdlLmtvbnZhIHNoYWRvd09mZnNldENoYW5nZS5rb252YSBzaGFkb3dPcGFjaXR5Q2hhbmdlLmtvbnZhIHNoYWRvd0VuYWJsZWRDaGFuZ2Uua29udmEiLChmdW5jdGlvbigpe3RoaXMuX2NsZWFyQ2FjaGUoUnQpfSkpLHp0LnByb3RvdHlwZS5vbi5jYWxsKHp0LnByb3RvdHlwZSwic2hhZG93Q29sb3JDaGFuZ2Uua29udmEgc2hhZG93T3BhY2l0eUNoYW5nZS5rb252YSBzaGFkb3dFbmFibGVkQ2hhbmdlLmtvbnZhIiwoZnVuY3Rpb24oKXt0aGlzLl9jbGVhckNhY2hlKEx0KX0pKSx6dC5wcm90b3R5cGUub24uY2FsbCh6dC5wcm90b3R5cGUsImZpbGxQcmlvcml0eUNoYW5nZS5rb252YSBmaWxsUGF0dGVybkltYWdlQ2hhbmdlLmtvbnZhIGZpbGxQYXR0ZXJuUmVwZWF0Q2hhbmdlLmtvbnZhIGZpbGxQYXR0ZXJuU2NhbGVYQ2hhbmdlLmtvbnZhIGZpbGxQYXR0ZXJuU2NhbGVZQ2hhbmdlLmtvbnZhIGZpbGxQYXR0ZXJuT2Zmc2V0WENoYW5nZS5rb252YSBmaWxsUGF0dGVybk9mZnNldFlDaGFuZ2Uua29udmEgZmlsbFBhdHRlcm5YQ2hhbmdlLmtvbnZhIGZpbGxQYXR0ZXJuWUNoYW5nZS5rb252YSBmaWxsUGF0dGVyblJvdGF0aW9uQ2hhbmdlLmtvbnZhIiwoZnVuY3Rpb24oKXt0aGlzLl9jbGVhckNhY2hlKER0KX0pKSx6dC5wcm90b3R5cGUub24uY2FsbCh6dC5wcm90b3R5cGUsImZpbGxQcmlvcml0eUNoYW5nZS5rb252YSBmaWxsTGluZWFyR3JhZGllbnRDb2xvclN0b3BzQ2hhbmdlLmtvbnZhIGZpbGxMaW5lYXJHcmFkaWVudFN0YXJ0UG9pbnRYQ2hhbmdlLmtvbnZhIGZpbGxMaW5lYXJHcmFkaWVudFN0YXJ0UG9pbnRZQ2hhbmdlLmtvbnZhIGZpbGxMaW5lYXJHcmFkaWVudEVuZFBvaW50WENoYW5nZS5rb252YSBmaWxsTGluZWFyR3JhZGllbnRFbmRQb2ludFlDaGFuZ2Uua29udmEiLChmdW5jdGlvbigpe3RoaXMuX2NsZWFyQ2FjaGUoT3QpfSkpLHp0LnByb3RvdHlwZS5vbi5jYWxsKHp0LnByb3RvdHlwZSwiZmlsbFByaW9yaXR5Q2hhbmdlLmtvbnZhIGZpbGxSYWRpYWxHcmFkaWVudENvbG9yU3RvcHNDaGFuZ2Uua29udmEgZmlsbFJhZGlhbEdyYWRpZW50U3RhcnRQb2ludFhDaGFuZ2Uua29udmEgZmlsbFJhZGlhbEdyYWRpZW50U3RhcnRQb2ludFlDaGFuZ2Uua29udmEgZmlsbFJhZGlhbEdyYWRpZW50RW5kUG9pbnRYQ2hhbmdlLmtvbnZhIGZpbGxSYWRpYWxHcmFkaWVudEVuZFBvaW50WUNoYW5nZS5rb252YSBmaWxsUmFkaWFsR3JhZGllbnRTdGFydFJhZGl1c0NoYW5nZS5rb252YSBmaWxsUmFkaWFsR3JhZGllbnRFbmRSYWRpdXNDaGFuZ2Uua29udmEiLChmdW5jdGlvbigpe3RoaXMuX2NsZWFyQ2FjaGUoSXQpfSkpLHcuYWRkR2V0dGVyU2V0dGVyKHp0LCJzdHJva2UiLHZvaWQgMCx5KCkpLHcuYWRkR2V0dGVyU2V0dGVyKHp0LCJzdHJva2VXaWR0aCIsMixwKCkpLHcuYWRkR2V0dGVyU2V0dGVyKHp0LCJmaWxsQWZ0ZXJTdHJva2VFbmFibGVkIiwhMSksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsImhpdFN0cm9rZVdpZHRoIiwiYXV0byIsbSgpKSx3LmFkZEdldHRlclNldHRlcih6dCwic3Ryb2tlSGl0RW5hYmxlZCIsITAseCgpKSx3LmFkZEdldHRlclNldHRlcih6dCwicGVyZmVjdERyYXdFbmFibGVkIiwhMCx4KCkpLHcuYWRkR2V0dGVyU2V0dGVyKHp0LCJzaGFkb3dGb3JTdHJva2VFbmFibGVkIiwhMCx4KCkpLHcuYWRkR2V0dGVyU2V0dGVyKHp0LCJsaW5lSm9pbiIpLHcuYWRkR2V0dGVyU2V0dGVyKHp0LCJsaW5lQ2FwIiksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsInNjZW5lRnVuYyIpLHcuYWRkR2V0dGVyU2V0dGVyKHp0LCJoaXRGdW5jIiksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsImRhc2giKSx3LmFkZEdldHRlclNldHRlcih6dCwiZGFzaE9mZnNldCIsMCxwKCkpLHcuYWRkR2V0dGVyU2V0dGVyKHp0LCJzaGFkb3dDb2xvciIsdm9pZCAwLF8oKSksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsInNoYWRvd0JsdXIiLDAscCgpKSx3LmFkZEdldHRlclNldHRlcih6dCwic2hhZG93T3BhY2l0eSIsMSxwKCkpLHcuYWRkQ29tcG9uZW50c0dldHRlclNldHRlcih6dCwic2hhZG93T2Zmc2V0IixbIngiLCJ5Il0pLHcuYWRkR2V0dGVyU2V0dGVyKHp0LCJzaGFkb3dPZmZzZXRYIiwwLHAoKSksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsInNoYWRvd09mZnNldFkiLDAscCgpKSx3LmFkZEdldHRlclNldHRlcih6dCwiZmlsbFBhdHRlcm5JbWFnZSIpLHcuYWRkR2V0dGVyU2V0dGVyKHp0LCJmaWxsIix2b2lkIDAseSgpKSx3LmFkZEdldHRlclNldHRlcih6dCwiZmlsbFBhdHRlcm5YIiwwLHAoKSksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsImZpbGxQYXR0ZXJuWSIsMCxwKCkpLHcuYWRkR2V0dGVyU2V0dGVyKHp0LCJmaWxsTGluZWFyR3JhZGllbnRDb2xvclN0b3BzIiksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsInN0cm9rZUxpbmVhckdyYWRpZW50Q29sb3JTdG9wcyIpLHcuYWRkR2V0dGVyU2V0dGVyKHp0LCJmaWxsUmFkaWFsR3JhZGllbnRTdGFydFJhZGl1cyIsMCksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsImZpbGxSYWRpYWxHcmFkaWVudEVuZFJhZGl1cyIsMCksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsImZpbGxSYWRpYWxHcmFkaWVudENvbG9yU3RvcHMiKSx3LmFkZEdldHRlclNldHRlcih6dCwiZmlsbFBhdHRlcm5SZXBlYXQiLCJyZXBlYXQiKSx3LmFkZEdldHRlclNldHRlcih6dCwiZmlsbEVuYWJsZWQiLCEwKSx3LmFkZEdldHRlclNldHRlcih6dCwic3Ryb2tlRW5hYmxlZCIsITApLHcuYWRkR2V0dGVyU2V0dGVyKHp0LCJzaGFkb3dFbmFibGVkIiwhMCksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsImRhc2hFbmFibGVkIiwhMCksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsInN0cm9rZVNjYWxlRW5hYmxlZCIsITApLHcuYWRkR2V0dGVyU2V0dGVyKHp0LCJmaWxsUHJpb3JpdHkiLCJjb2xvciIpLHcuYWRkQ29tcG9uZW50c0dldHRlclNldHRlcih6dCwiZmlsbFBhdHRlcm5PZmZzZXQiLFsieCIsInkiXSksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsImZpbGxQYXR0ZXJuT2Zmc2V0WCIsMCxwKCkpLHcuYWRkR2V0dGVyU2V0dGVyKHp0LCJmaWxsUGF0dGVybk9mZnNldFkiLDAscCgpKSx3LmFkZENvbXBvbmVudHNHZXR0ZXJTZXR0ZXIoenQsImZpbGxQYXR0ZXJuU2NhbGUiLFsieCIsInkiXSksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsImZpbGxQYXR0ZXJuU2NhbGVYIiwxLHAoKSksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsImZpbGxQYXR0ZXJuU2NhbGVZIiwxLHAoKSksdy5hZGRDb21wb25lbnRzR2V0dGVyU2V0dGVyKHp0LCJmaWxsTGluZWFyR3JhZGllbnRTdGFydFBvaW50IixbIngiLCJ5Il0pLHcuYWRkQ29tcG9uZW50c0dldHRlclNldHRlcih6dCwic3Ryb2tlTGluZWFyR3JhZGllbnRTdGFydFBvaW50IixbIngiLCJ5Il0pLHcuYWRkR2V0dGVyU2V0dGVyKHp0LCJmaWxsTGluZWFyR3JhZGllbnRTdGFydFBvaW50WCIsMCksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsInN0cm9rZUxpbmVhckdyYWRpZW50U3RhcnRQb2ludFgiLDApLHcuYWRkR2V0dGVyU2V0dGVyKHp0LCJmaWxsTGluZWFyR3JhZGllbnRTdGFydFBvaW50WSIsMCksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsInN0cm9rZUxpbmVhckdyYWRpZW50U3RhcnRQb2ludFkiLDApLHcuYWRkQ29tcG9uZW50c0dldHRlclNldHRlcih6dCwiZmlsbExpbmVhckdyYWRpZW50RW5kUG9pbnQiLFsieCIsInkiXSksdy5hZGRDb21wb25lbnRzR2V0dGVyU2V0dGVyKHp0LCJzdHJva2VMaW5lYXJHcmFkaWVudEVuZFBvaW50IixbIngiLCJ5Il0pLHcuYWRkR2V0dGVyU2V0dGVyKHp0LCJmaWxsTGluZWFyR3JhZGllbnRFbmRQb2ludFgiLDApLHcuYWRkR2V0dGVyU2V0dGVyKHp0LCJzdHJva2VMaW5lYXJHcmFkaWVudEVuZFBvaW50WCIsMCksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsImZpbGxMaW5lYXJHcmFkaWVudEVuZFBvaW50WSIsMCksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsInN0cm9rZUxpbmVhckdyYWRpZW50RW5kUG9pbnRZIiwwKSx3LmFkZENvbXBvbmVudHNHZXR0ZXJTZXR0ZXIoenQsImZpbGxSYWRpYWxHcmFkaWVudFN0YXJ0UG9pbnQiLFsieCIsInkiXSksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsImZpbGxSYWRpYWxHcmFkaWVudFN0YXJ0UG9pbnRYIiwwKSx3LmFkZEdldHRlclNldHRlcih6dCwiZmlsbFJhZGlhbEdyYWRpZW50U3RhcnRQb2ludFkiLDApLHcuYWRkQ29tcG9uZW50c0dldHRlclNldHRlcih6dCwiZmlsbFJhZGlhbEdyYWRpZW50RW5kUG9pbnQiLFsieCIsInkiXSksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsImZpbGxSYWRpYWxHcmFkaWVudEVuZFBvaW50WCIsMCksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsImZpbGxSYWRpYWxHcmFkaWVudEVuZFBvaW50WSIsMCksdy5hZGRHZXR0ZXJTZXR0ZXIoenQsImZpbGxQYXR0ZXJuUm90YXRpb24iLDApLHcuYmFja0NvbXBhdCh6dCx7ZGFzaEFycmF5OiJkYXNoIixnZXREYXNoQXJyYXk6ImdldERhc2giLHNldERhc2hBcnJheToiZ2V0RGFzaCIsZHJhd0Z1bmM6InNjZW5lRnVuYyIsZ2V0RHJhd0Z1bmM6ImdldFNjZW5lRnVuYyIsc2V0RHJhd0Z1bmM6InNldFNjZW5lRnVuYyIsZHJhd0hpdEZ1bmM6ImhpdEZ1bmMiLGdldERyYXdIaXRGdW5jOiJnZXRIaXRGdW5jIixzZXREcmF3SGl0RnVuYzoic2V0SGl0RnVuYyJ9KTt2YXIgV3Q9W3t4OjAseTowfSx7eDotMSx5Oi0xfSx7eDoxLHk6LTF9LHt4OjEseToxfSx7eDotMSx5OjF9XSxIdD1XdC5sZW5ndGg7Y2xhc3MgWXQgZXh0ZW5kcyBKe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuY2FudmFzPW5ldyBFLHRoaXMuaGl0Q2FudmFzPW5ldyBSKHtwaXhlbFJhdGlvOjF9KSx0aGlzLl93YWl0aW5nRm9yRHJhdz0hMSx0aGlzLm9uKCJ2aXNpYmxlQ2hhbmdlLmtvbnZhIix0aGlzLl9jaGVja1Zpc2liaWxpdHkpLHRoaXMuX2NoZWNrVmlzaWJpbGl0eSgpLHRoaXMub24oImltYWdlU21vb3RoaW5nRW5hYmxlZENoYW5nZS5rb252YSIsdGhpcy5fc2V0U21vb3RoRW5hYmxlZCksdGhpcy5fc2V0U21vb3RoRW5hYmxlZCgpfWNyZWF0ZVBOR1N0cmVhbSgpe3JldHVybiB0aGlzLmNhbnZhcy5fY2FudmFzLmNyZWF0ZVBOR1N0cmVhbSgpfWdldENhbnZhcygpe3JldHVybiB0aGlzLmNhbnZhc31nZXROYXRpdmVDYW52YXNFbGVtZW50KCl7cmV0dXJuIHRoaXMuY2FudmFzLl9jYW52YXN9Z2V0SGl0Q2FudmFzKCl7cmV0dXJuIHRoaXMuaGl0Q2FudmFzfWdldENvbnRleHQoKXtyZXR1cm4gdGhpcy5nZXRDYW52YXMoKS5nZXRDb250ZXh0KCl9Y2xlYXIodCl7cmV0dXJuIHRoaXMuZ2V0Q29udGV4dCgpLmNsZWFyKHQpLHRoaXMuZ2V0SGl0Q2FudmFzKCkuZ2V0Q29udGV4dCgpLmNsZWFyKHQpLHRoaXN9c2V0WkluZGV4KHQpe3N1cGVyLnNldFpJbmRleCh0KTt2YXIgZT10aGlzLmdldFN0YWdlKCk7cmV0dXJuIGUmJmUuY29udGVudCYmKGUuY29udGVudC5yZW1vdmVDaGlsZCh0aGlzLmdldE5hdGl2ZUNhbnZhc0VsZW1lbnQoKSksdDxlLmNoaWxkcmVuLmxlbmd0aC0xP2UuY29udGVudC5pbnNlcnRCZWZvcmUodGhpcy5nZXROYXRpdmVDYW52YXNFbGVtZW50KCksZS5jaGlsZHJlblt0KzFdLmdldENhbnZhcygpLl9jYW52YXMpOmUuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmdldE5hdGl2ZUNhbnZhc0VsZW1lbnQoKSkpLHRoaXN9bW92ZVRvVG9wKCl7Sy5wcm90b3R5cGUubW92ZVRvVG9wLmNhbGwodGhpcyk7dmFyIHQ9dGhpcy5nZXRTdGFnZSgpO3JldHVybiB0JiZ0LmNvbnRlbnQmJih0LmNvbnRlbnQucmVtb3ZlQ2hpbGQodGhpcy5nZXROYXRpdmVDYW52YXNFbGVtZW50KCkpLHQuY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmdldE5hdGl2ZUNhbnZhc0VsZW1lbnQoKSkpLCEwfW1vdmVVcCgpe2lmKCFLLnByb3RvdHlwZS5tb3ZlVXAuY2FsbCh0aGlzKSlyZXR1cm4hMTt2YXIgdD10aGlzLmdldFN0YWdlKCk7cmV0dXJuISghdHx8IXQuY29udGVudCkmJih0LmNvbnRlbnQucmVtb3ZlQ2hpbGQodGhpcy5nZXROYXRpdmVDYW52YXNFbGVtZW50KCkpLHRoaXMuaW5kZXg8dC5jaGlsZHJlbi5sZW5ndGgtMT90LmNvbnRlbnQuaW5zZXJ0QmVmb3JlKHRoaXMuZ2V0TmF0aXZlQ2FudmFzRWxlbWVudCgpLHQuY2hpbGRyZW5bdGhpcy5pbmRleCsxXS5nZXRDYW52YXMoKS5fY2FudmFzKTp0LmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5nZXROYXRpdmVDYW52YXNFbGVtZW50KCkpLCEwKX1tb3ZlRG93bigpe2lmKEsucHJvdG90eXBlLm1vdmVEb3duLmNhbGwodGhpcykpe3ZhciB0PXRoaXMuZ2V0U3RhZ2UoKTtpZih0KXt2YXIgZT10LmNoaWxkcmVuO3QuY29udGVudCYmKHQuY29udGVudC5yZW1vdmVDaGlsZCh0aGlzLmdldE5hdGl2ZUNhbnZhc0VsZW1lbnQoKSksdC5jb250ZW50Lmluc2VydEJlZm9yZSh0aGlzLmdldE5hdGl2ZUNhbnZhc0VsZW1lbnQoKSxlW3RoaXMuaW5kZXgrMV0uZ2V0Q2FudmFzKCkuX2NhbnZhcykpfXJldHVybiEwfXJldHVybiExfW1vdmVUb0JvdHRvbSgpe2lmKEsucHJvdG90eXBlLm1vdmVUb0JvdHRvbS5jYWxsKHRoaXMpKXt2YXIgdD10aGlzLmdldFN0YWdlKCk7aWYodCl7dmFyIGU9dC5jaGlsZHJlbjt0LmNvbnRlbnQmJih0LmNvbnRlbnQucmVtb3ZlQ2hpbGQodGhpcy5nZXROYXRpdmVDYW52YXNFbGVtZW50KCkpLHQuY29udGVudC5pbnNlcnRCZWZvcmUodGhpcy5nZXROYXRpdmVDYW52YXNFbGVtZW50KCksZVsxXS5nZXRDYW52YXMoKS5fY2FudmFzKSl9cmV0dXJuITB9cmV0dXJuITF9Z2V0TGF5ZXIoKXtyZXR1cm4gdGhpc31yZW1vdmUoKXt2YXIgdD10aGlzLmdldE5hdGl2ZUNhbnZhc0VsZW1lbnQoKTtyZXR1cm4gSy5wcm90b3R5cGUucmVtb3ZlLmNhbGwodGhpcyksdCYmdC5wYXJlbnROb2RlJiZnLl9pc0luRG9jdW1lbnQodCkmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0aGlzfWdldFN0YWdlKCl7cmV0dXJuIHRoaXMucGFyZW50fXNldFNpemUoe3dpZHRoOnQsaGVpZ2h0OmV9KXtyZXR1cm4gdGhpcy5jYW52YXMuc2V0U2l6ZSh0LGUpLHRoaXMuaGl0Q2FudmFzLnNldFNpemUodCxlKSx0aGlzLl9zZXRTbW9vdGhFbmFibGVkKCksdGhpc31fdmFsaWRhdGVBZGQodCl7dmFyIGU9dC5nZXRUeXBlKCk7Ikdyb3VwIiE9PWUmJiJTaGFwZSIhPT1lJiZnLnRocm93KCJZb3UgbWF5IG9ubHkgYWRkIGdyb3VwcyBhbmQgc2hhcGVzIHRvIGEgbGF5ZXIuIil9X3RvS29udmFDYW52YXModCl7cmV0dXJuKHQ9dHx8e30pLndpZHRoPXQud2lkdGh8fHRoaXMuZ2V0V2lkdGgoKSx0LmhlaWdodD10LmhlaWdodHx8dGhpcy5nZXRIZWlnaHQoKSx0Lng9dm9pZCAwIT09dC54P3QueDp0aGlzLngoKSx0Lnk9dm9pZCAwIT09dC55P3QueTp0aGlzLnkoKSxLLnByb3RvdHlwZS5fdG9Lb252YUNhbnZhcy5jYWxsKHRoaXMsdCl9X2NoZWNrVmlzaWJpbGl0eSgpe2NvbnN0IHQ9dGhpcy52aXNpYmxlKCk7dGhpcy5jYW52YXMuX2NhbnZhcy5zdHlsZS5kaXNwbGF5PXQ/ImJsb2NrIjoibm9uZSJ9X3NldFNtb290aEVuYWJsZWQoKXt0aGlzLmdldENvbnRleHQoKS5fY29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQ9dGhpcy5pbWFnZVNtb290aGluZ0VuYWJsZWQoKX1nZXRXaWR0aCgpe2lmKHRoaXMucGFyZW50KXJldHVybiB0aGlzLnBhcmVudC53aWR0aCgpfXNldFdpZHRoKCl7Zy53YXJuKCdDYW4gbm90IGNoYW5nZSB3aWR0aCBvZiBsYXllci4gVXNlICJzdGFnZS53aWR0aCh2YWx1ZSkiIGZ1bmN0aW9uIGluc3RlYWQuJyl9Z2V0SGVpZ2h0KCl7aWYodGhpcy5wYXJlbnQpcmV0dXJuIHRoaXMucGFyZW50LmhlaWdodCgpfXNldEhlaWdodCgpe2cud2FybignQ2FuIG5vdCBjaGFuZ2UgaGVpZ2h0IG9mIGxheWVyLiBVc2UgInN0YWdlLmhlaWdodCh2YWx1ZSkiIGZ1bmN0aW9uIGluc3RlYWQuJyl9YmF0Y2hEcmF3KCl7cmV0dXJuIHRoaXMuX3dhaXRpbmdGb3JEcmF3fHwodGhpcy5fd2FpdGluZ0ZvckRyYXc9ITAsZy5yZXF1ZXN0QW5pbUZyYW1lKCgoKT0+e3RoaXMuZHJhdygpLHRoaXMuX3dhaXRpbmdGb3JEcmF3PSExfSkpKSx0aGlzfWdldEludGVyc2VjdGlvbih0KXtpZighdGhpcy5pc0xpc3RlbmluZygpfHwhdGhpcy5pc1Zpc2libGUoKSlyZXR1cm4gbnVsbDtmb3IodmFyIGU9MSxpPSExOzspe2ZvcihsZXQgcj0wO3I8SHQ7cisrKXtjb25zdCBhPVd0W3JdLG49dGhpcy5fZ2V0SW50ZXJzZWN0aW9uKHt4OnQueCthLngqZSx5OnQueSthLnkqZX0pLHM9bi5zaGFwZTtpZihzKXJldHVybiBzO2lmKGk9ISFuLmFudGlhbGlhc2VkLCFuLmFudGlhbGlhc2VkKWJyZWFrfWlmKCFpKXJldHVybiBudWxsO2UrPTF9fV9nZXRJbnRlcnNlY3Rpb24odCl7Y29uc3QgZT10aGlzLmhpdENhbnZhcy5waXhlbFJhdGlvLGk9dGhpcy5oaXRDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoTWF0aC5yb3VuZCh0LngqZSksTWF0aC5yb3VuZCh0LnkqZSksMSwxKS5kYXRhLHI9aVszXTtpZigyNTU9PT1yKXtjb25zdCB0PWcuX3JnYlRvSGV4KGlbMF0saVsxXSxpWzJdKSxlPUJ0WyIjIit0XTtyZXR1cm4gZT97c2hhcGU6ZX06e2FudGlhbGlhc2VkOiEwfX1yZXR1cm4gcj4wP3thbnRpYWxpYXNlZDohMH06e319ZHJhd1NjZW5lKHQsZSl7dmFyIGk9dGhpcy5nZXRMYXllcigpLHI9dHx8aSYmaS5nZXRDYW52YXMoKTtyZXR1cm4gdGhpcy5fZmlyZSgiYmVmb3JlRHJhdyIse25vZGU6dGhpc30pLHRoaXMuY2xlYXJCZWZvcmVEcmF3KCkmJnIuZ2V0Q29udGV4dCgpLmNsZWFyKCksSi5wcm90b3R5cGUuZHJhd1NjZW5lLmNhbGwodGhpcyxyLGUpLHRoaXMuX2ZpcmUoImRyYXciLHtub2RlOnRoaXN9KSx0aGlzfWRyYXdIaXQodCxlKXt2YXIgaT10aGlzLmdldExheWVyKCkscj10fHxpJiZpLmhpdENhbnZhcztyZXR1cm4gaSYmaS5jbGVhckJlZm9yZURyYXcoKSYmaS5nZXRIaXRDYW52YXMoKS5nZXRDb250ZXh0KCkuY2xlYXIoKSxKLnByb3RvdHlwZS5kcmF3SGl0LmNhbGwodGhpcyxyLGUpLHRoaXN9ZW5hYmxlSGl0R3JhcGgoKXtyZXR1cm4gdGhpcy5oaXRHcmFwaEVuYWJsZWQoITApLHRoaXN9ZGlzYWJsZUhpdEdyYXBoKCl7cmV0dXJuIHRoaXMuaGl0R3JhcGhFbmFibGVkKCExKSx0aGlzfXNldEhpdEdyYXBoRW5hYmxlZCh0KXtnLndhcm4oImhpdEdyYXBoRW5hYmxlZCBtZXRob2QgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBsYXllci5saXN0ZW5pbmcoKSBpbnN0ZWFkLiIpLHRoaXMubGlzdGVuaW5nKHQpfWdldEhpdEdyYXBoRW5hYmxlZCh0KXtyZXR1cm4gZy53YXJuKCJoaXRHcmFwaEVuYWJsZWQgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgbGF5ZXIubGlzdGVuaW5nKCkgaW5zdGVhZC4iKSx0aGlzLmxpc3RlbmluZygpfXRvZ2dsZUhpdENhbnZhcygpe2lmKHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5jb250ZW50KXt2YXIgdD10aGlzLnBhcmVudDshIXRoaXMuaGl0Q2FudmFzLl9jYW52YXMucGFyZW50Tm9kZT90LmNvbnRlbnQucmVtb3ZlQ2hpbGQodGhpcy5oaXRDYW52YXMuX2NhbnZhcyk6dC5jb250ZW50LmFwcGVuZENoaWxkKHRoaXMuaGl0Q2FudmFzLl9jYW52YXMpfX19WXQucHJvdG90eXBlLm5vZGVUeXBlPSJMYXllciIscihZdCksdy5hZGRHZXR0ZXJTZXR0ZXIoWXQsImltYWdlU21vb3RoaW5nRW5hYmxlZCIsITApLHcuYWRkR2V0dGVyU2V0dGVyKFl0LCJjbGVhckJlZm9yZURyYXciLCEwKSx3LmFkZEdldHRlclNldHRlcihZdCwiaGl0R3JhcGhFbmFibGVkIiwhMCx4KCkpO2NsYXNzIFh0IGV4dGVuZHMgWXR7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5saXN0ZW5pbmcoITEpLGcud2FybignS29udmEuRmFzdCBsYXllciBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICJuZXcgS29udmEuTGF5ZXIoeyBsaXN0ZW5pbmc6IGZhbHNlIH0pIiBpbnN0ZWFkLicpfX1YdC5wcm90b3R5cGUubm9kZVR5cGU9IkZhc3RMYXllciIscihYdCk7Y2xhc3MganQgZXh0ZW5kcyBKe192YWxpZGF0ZUFkZCh0KXt2YXIgZT10LmdldFR5cGUoKTsiR3JvdXAiIT09ZSYmIlNoYXBlIiE9PWUmJmcudGhyb3coIllvdSBtYXkgb25seSBhZGQgZ3JvdXBzIGFuZCBzaGFwZXMgdG8gZ3JvdXBzLiIpfX1qdC5wcm90b3R5cGUubm9kZVR5cGU9Ikdyb3VwIixyKGp0KTt2YXIgVXQ9ZS5wZXJmb3JtYW5jZSYmZS5wZXJmb3JtYW5jZS5ub3c/ZnVuY3Rpb24oKXtyZXR1cm4gZS5wZXJmb3JtYW5jZS5ub3coKX06ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX07Y2xhc3MgcXR7Y29uc3RydWN0b3IodCxlKXt0aGlzLmlkPXF0LmFuaW1JZENvdW50ZXIrKyx0aGlzLmZyYW1lPXt0aW1lOjAsdGltZURpZmY6MCxsYXN0VGltZTpVdCgpLGZyYW1lUmF0ZTowfSx0aGlzLmZ1bmM9dCx0aGlzLnNldExheWVycyhlKX1zZXRMYXllcnModCl7dmFyIGU9W107cmV0dXJuIGU9dD90Lmxlbmd0aD4wP3Q6W3RdOltdLHRoaXMubGF5ZXJzPWUsdGhpc31nZXRMYXllcnMoKXtyZXR1cm4gdGhpcy5sYXllcnN9YWRkTGF5ZXIodCl7dmFyIGUsaT10aGlzLmxheWVycyxyPWkubGVuZ3RoO2ZvcihlPTA7ZTxyO2UrKylpZihpW2VdLl9pZD09PXQuX2lkKXJldHVybiExO3JldHVybiB0aGlzLmxheWVycy5wdXNoKHQpLCEwfWlzUnVubmluZygpe3ZhciB0LGU9cXQuYW5pbWF0aW9ucyxpPWUubGVuZ3RoO2Zvcih0PTA7dDxpO3QrKylpZihlW3RdLmlkPT09dGhpcy5pZClyZXR1cm4hMDtyZXR1cm4hMX1zdGFydCgpe3JldHVybiB0aGlzLnN0b3AoKSx0aGlzLmZyYW1lLnRpbWVEaWZmPTAsdGhpcy5mcmFtZS5sYXN0VGltZT1VdCgpLHF0Ll9hZGRBbmltYXRpb24odGhpcyksdGhpc31zdG9wKCl7cmV0dXJuIHF0Ll9yZW1vdmVBbmltYXRpb24odGhpcyksdGhpc31fdXBkYXRlRnJhbWVPYmplY3QodCl7dGhpcy5mcmFtZS50aW1lRGlmZj10LXRoaXMuZnJhbWUubGFzdFRpbWUsdGhpcy5mcmFtZS5sYXN0VGltZT10LHRoaXMuZnJhbWUudGltZSs9dGhpcy5mcmFtZS50aW1lRGlmZix0aGlzLmZyYW1lLmZyYW1lUmF0ZT0xZTMvdGhpcy5mcmFtZS50aW1lRGlmZn1zdGF0aWMgX2FkZEFuaW1hdGlvbih0KXt0aGlzLmFuaW1hdGlvbnMucHVzaCh0KSx0aGlzLl9oYW5kbGVBbmltYXRpb24oKX1zdGF0aWMgX3JlbW92ZUFuaW1hdGlvbih0KXt2YXIgZSxpPXQuaWQscj10aGlzLmFuaW1hdGlvbnMsYT1yLmxlbmd0aDtmb3IoZT0wO2U8YTtlKyspaWYocltlXS5pZD09PWkpe3RoaXMuYW5pbWF0aW9ucy5zcGxpY2UoZSwxKTticmVha319c3RhdGljIF9ydW5GcmFtZXMoKXt2YXIgdCxlLGkscixhLG4scyxvLGg9e30sbD10aGlzLmFuaW1hdGlvbnM7Zm9yKHI9MDtyPGwubGVuZ3RoO3IrKylpZihlPSh0PWxbcl0pLmxheWVycyxpPXQuZnVuYyx0Ll91cGRhdGVGcmFtZU9iamVjdChVdCgpKSxuPWUubGVuZ3RoLCFpfHwhMSE9PWkuY2FsbCh0LHQuZnJhbWUpKWZvcihhPTA7YTxuO2ErKyl2b2lkIDAhPT0ocz1lW2FdKS5faWQmJihoW3MuX2lkXT1zKTtmb3IobyBpbiBoKWguaGFzT3duUHJvcGVydHkobykmJmhbb10uYmF0Y2hEcmF3KCl9c3RhdGljIF9hbmltYXRpb25Mb29wKCl7dmFyIHQ9cXQ7dC5hbmltYXRpb25zLmxlbmd0aD8odC5fcnVuRnJhbWVzKCksZy5yZXF1ZXN0QW5pbUZyYW1lKHQuX2FuaW1hdGlvbkxvb3ApKTp0LmFuaW1SdW5uaW5nPSExfXN0YXRpYyBfaGFuZGxlQW5pbWF0aW9uKCl7dGhpcy5hbmltUnVubmluZ3x8KHRoaXMuYW5pbVJ1bm5pbmc9ITAsZy5yZXF1ZXN0QW5pbUZyYW1lKHRoaXMuX2FuaW1hdGlvbkxvb3ApKX19cXQuYW5pbWF0aW9ucz1bXSxxdC5hbmltSWRDb3VudGVyPTAscXQuYW5pbVJ1bm5pbmc9ITE7dmFyIFZ0PXtub2RlOjEsZHVyYXRpb246MSxlYXNpbmc6MSxvbkZpbmlzaDoxLHlveW86MX0sS3Q9MCxRdD1bImZpbGwiLCJzdHJva2UiLCJzaGFkb3dDb2xvciJdO2NsYXNzIEp0e2NvbnN0cnVjdG9yKHQsZSxpLHIsYSxuLHMpe3RoaXMucHJvcD10LHRoaXMucHJvcEZ1bmM9ZSx0aGlzLmJlZ2luPXIsdGhpcy5fcG9zPXIsdGhpcy5kdXJhdGlvbj1uLHRoaXMuX2NoYW5nZT0wLHRoaXMucHJldlBvcz0wLHRoaXMueW95bz1zLHRoaXMuX3RpbWU9MCx0aGlzLl9wb3NpdGlvbj0wLHRoaXMuX3N0YXJ0VGltZT0wLHRoaXMuX2ZpbmlzaD0wLHRoaXMuZnVuYz1pLHRoaXMuX2NoYW5nZT1hLXRoaXMuYmVnaW4sdGhpcy5wYXVzZSgpfWZpcmUodCl7dmFyIGU9dGhpc1t0XTtlJiZlKCl9c2V0VGltZSh0KXt0PnRoaXMuZHVyYXRpb24/dGhpcy55b3lvPyh0aGlzLl90aW1lPXRoaXMuZHVyYXRpb24sdGhpcy5yZXZlcnNlKCkpOnRoaXMuZmluaXNoKCk6dDwwP3RoaXMueW95bz8odGhpcy5fdGltZT0wLHRoaXMucGxheSgpKTp0aGlzLnJlc2V0KCk6KHRoaXMuX3RpbWU9dCx0aGlzLnVwZGF0ZSgpKX1nZXRUaW1lKCl7cmV0dXJuIHRoaXMuX3RpbWV9c2V0UG9zaXRpb24odCl7dGhpcy5wcmV2UG9zPXRoaXMuX3Bvcyx0aGlzLnByb3BGdW5jKHQpLHRoaXMuX3Bvcz10fWdldFBvc2l0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD10aGlzLl90aW1lKSx0aGlzLmZ1bmModCx0aGlzLmJlZ2luLHRoaXMuX2NoYW5nZSx0aGlzLmR1cmF0aW9uKX1wbGF5KCl7dGhpcy5zdGF0ZT0yLHRoaXMuX3N0YXJ0VGltZT10aGlzLmdldFRpbWVyKCktdGhpcy5fdGltZSx0aGlzLm9uRW50ZXJGcmFtZSgpLHRoaXMuZmlyZSgib25QbGF5Iil9cmV2ZXJzZSgpe3RoaXMuc3RhdGU9Myx0aGlzLl90aW1lPXRoaXMuZHVyYXRpb24tdGhpcy5fdGltZSx0aGlzLl9zdGFydFRpbWU9dGhpcy5nZXRUaW1lcigpLXRoaXMuX3RpbWUsdGhpcy5vbkVudGVyRnJhbWUoKSx0aGlzLmZpcmUoIm9uUmV2ZXJzZSIpfXNlZWsodCl7dGhpcy5wYXVzZSgpLHRoaXMuX3RpbWU9dCx0aGlzLnVwZGF0ZSgpLHRoaXMuZmlyZSgib25TZWVrIil9cmVzZXQoKXt0aGlzLnBhdXNlKCksdGhpcy5fdGltZT0wLHRoaXMudXBkYXRlKCksdGhpcy5maXJlKCJvblJlc2V0Iil9ZmluaXNoKCl7dGhpcy5wYXVzZSgpLHRoaXMuX3RpbWU9dGhpcy5kdXJhdGlvbix0aGlzLnVwZGF0ZSgpLHRoaXMuZmlyZSgib25GaW5pc2giKX11cGRhdGUoKXt0aGlzLnNldFBvc2l0aW9uKHRoaXMuZ2V0UG9zaXRpb24odGhpcy5fdGltZSkpLHRoaXMuZmlyZSgib25VcGRhdGUiKX1vbkVudGVyRnJhbWUoKXt2YXIgdD10aGlzLmdldFRpbWVyKCktdGhpcy5fc3RhcnRUaW1lOzI9PT10aGlzLnN0YXRlP3RoaXMuc2V0VGltZSh0KTozPT09dGhpcy5zdGF0ZSYmdGhpcy5zZXRUaW1lKHRoaXMuZHVyYXRpb24tdCl9cGF1c2UoKXt0aGlzLnN0YXRlPTEsdGhpcy5maXJlKCJvblBhdXNlIil9Z2V0VGltZXIoKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX19Y2xhc3MgWnR7Y29uc3RydWN0b3IodCl7dmFyIGUscixhPXRoaXMsbj10Lm5vZGUscz1uLl9pZCxvPXQuZWFzaW5nfHwkdC5MaW5lYXIsaD0hIXQueW95bztlPXZvaWQgMD09PXQuZHVyYXRpb24/LjM6MD09PXQuZHVyYXRpb24/LjAwMTp0LmR1cmF0aW9uLHRoaXMubm9kZT1uLHRoaXMuX2lkPUt0Kys7dmFyIGw9bi5nZXRMYXllcigpfHwobiBpbnN0YW5jZW9mIGkuU3RhZ2U/bi5nZXRMYXllcnMoKTpudWxsKTtmb3IociBpbiBsfHxnLmVycm9yKCJUd2VlbiBjb25zdHJ1Y3RvciBoYXZlIGBub2RlYCB0aGF0IGlzIG5vdCBpbiBhIGxheWVyLiBQbGVhc2UgYWRkIG5vZGUgaW50byBsYXllciBmaXJzdC4iKSx0aGlzLmFuaW09bmV3IHF0KChmdW5jdGlvbigpe2EudHdlZW4ub25FbnRlckZyYW1lKCl9KSxsKSx0aGlzLnR3ZWVuPW5ldyBKdChyLChmdW5jdGlvbih0KXthLl90d2VlbkZ1bmModCl9KSxvLDAsMSwxZTMqZSxoKSx0aGlzLl9hZGRMaXN0ZW5lcnMoKSxadC5hdHRyc1tzXXx8KFp0LmF0dHJzW3NdPXt9KSxadC5hdHRyc1tzXVt0aGlzLl9pZF18fChadC5hdHRyc1tzXVt0aGlzLl9pZF09e30pLFp0LnR3ZWVuc1tzXXx8KFp0LnR3ZWVuc1tzXT17fSksdCl2b2lkIDA9PT1WdFtyXSYmdGhpcy5fYWRkQXR0cihyLHRbcl0pO3RoaXMucmVzZXQoKSx0aGlzLm9uRmluaXNoPXQub25GaW5pc2gsdGhpcy5vblJlc2V0PXQub25SZXNldCx0aGlzLm9uVXBkYXRlPXQub25VcGRhdGV9X2FkZEF0dHIodCxlKXt2YXIgaSxyLGEsbixzLG8saCxsLGQ9dGhpcy5ub2RlLGM9ZC5faWQ7aWYoKGE9WnQudHdlZW5zW2NdW3RdKSYmZGVsZXRlIFp0LmF0dHJzW2NdW2FdW3RdLGk9ZC5nZXRBdHRyKHQpLGcuX2lzQXJyYXkoZSkpaWYocj1bXSxzPU1hdGgubWF4KGUubGVuZ3RoLGkubGVuZ3RoKSwicG9pbnRzIj09PXQmJmUubGVuZ3RoIT09aS5sZW5ndGgmJihlLmxlbmd0aD5pLmxlbmd0aD8oaD1pLGk9Zy5fcHJlcGFyZUFycmF5Rm9yVHdlZW4oaSxlLGQuY2xvc2VkKCkpKToobz1lLGU9Zy5fcHJlcGFyZUFycmF5Rm9yVHdlZW4oZSxpLGQuY2xvc2VkKCkpKSksMD09PXQuaW5kZXhPZigiZmlsbCIpKWZvcihuPTA7bjxzO24rKylpZihuJTI9PTApci5wdXNoKGVbbl0taVtuXSk7ZWxzZXt2YXIgdT1nLmNvbG9yVG9SR0JBKGlbbl0pO2w9Zy5jb2xvclRvUkdCQShlW25dKSxpW25dPXUsci5wdXNoKHtyOmwuci11LnIsZzpsLmctdS5nLGI6bC5iLXUuYixhOmwuYS11LmF9KX1lbHNlIGZvcihuPTA7bjxzO24rKylyLnB1c2goZVtuXS1pW25dKTtlbHNlLTEhPT1RdC5pbmRleE9mKHQpPyhpPWcuY29sb3JUb1JHQkEoaSkscj17cjoobD1nLmNvbG9yVG9SR0JBKGUpKS5yLWkucixnOmwuZy1pLmcsYjpsLmItaS5iLGE6bC5hLWkuYX0pOnI9ZS1pO1p0LmF0dHJzW2NdW3RoaXMuX2lkXVt0XT17c3RhcnQ6aSxkaWZmOnIsZW5kOmUsdHJ1ZUVuZDpvLHRydWVTdGFydDpofSxadC50d2VlbnNbY11bdF09dGhpcy5faWR9X3R3ZWVuRnVuYyh0KXt2YXIgZSxpLHIsYSxuLHMsbyxoLGw9dGhpcy5ub2RlLGQ9WnQuYXR0cnNbbC5faWRdW3RoaXMuX2lkXTtmb3IoZSBpbiBkKXtpZihyPShpPWRbZV0pLnN0YXJ0LGE9aS5kaWZmLGg9aS5lbmQsZy5faXNBcnJheShyKSlpZihuPVtdLG89TWF0aC5tYXgoci5sZW5ndGgsaC5sZW5ndGgpLDA9PT1lLmluZGV4T2YoImZpbGwiKSlmb3Iocz0wO3M8bztzKyspcyUyPT0wP24ucHVzaCgocltzXXx8MCkrYVtzXSp0KTpuLnB1c2goInJnYmEoIitNYXRoLnJvdW5kKHJbc10ucithW3NdLnIqdCkrIiwiK01hdGgucm91bmQocltzXS5nK2Fbc10uZyp0KSsiLCIrTWF0aC5yb3VuZChyW3NdLmIrYVtzXS5iKnQpKyIsIisocltzXS5hK2Fbc10uYSp0KSsiKSIpO2Vsc2UgZm9yKHM9MDtzPG87cysrKW4ucHVzaCgocltzXXx8MCkrYVtzXSp0KTtlbHNlIG49LTEhPT1RdC5pbmRleE9mKGUpPyJyZ2JhKCIrTWF0aC5yb3VuZChyLnIrYS5yKnQpKyIsIitNYXRoLnJvdW5kKHIuZythLmcqdCkrIiwiK01hdGgucm91bmQoci5iK2EuYip0KSsiLCIrKHIuYSthLmEqdCkrIikiOnIrYSp0O2wuc2V0QXR0cihlLG4pfX1fYWRkTGlzdGVuZXJzKCl7dGhpcy50d2Vlbi5vblBsYXk9KCk9Pnt0aGlzLmFuaW0uc3RhcnQoKX0sdGhpcy50d2Vlbi5vblJldmVyc2U9KCk9Pnt0aGlzLmFuaW0uc3RhcnQoKX0sdGhpcy50d2Vlbi5vblBhdXNlPSgpPT57dGhpcy5hbmltLnN0b3AoKX0sdGhpcy50d2Vlbi5vbkZpbmlzaD0oKT0+e3ZhciB0PXRoaXMubm9kZSxlPVp0LmF0dHJzW3QuX2lkXVt0aGlzLl9pZF07ZS5wb2ludHMmJmUucG9pbnRzLnRydWVFbmQmJnQuc2V0QXR0cigicG9pbnRzIixlLnBvaW50cy50cnVlRW5kKSx0aGlzLm9uRmluaXNoJiZ0aGlzLm9uRmluaXNoLmNhbGwodGhpcyl9LHRoaXMudHdlZW4ub25SZXNldD0oKT0+e3ZhciB0PXRoaXMubm9kZSxlPVp0LmF0dHJzW3QuX2lkXVt0aGlzLl9pZF07ZS5wb2ludHMmJmUucG9pbnRzLnRydWVTdGFydCYmdC5wb2ludHMoZS5wb2ludHMudHJ1ZVN0YXJ0KSx0aGlzLm9uUmVzZXQmJnRoaXMub25SZXNldCgpfSx0aGlzLnR3ZWVuLm9uVXBkYXRlPSgpPT57dGhpcy5vblVwZGF0ZSYmdGhpcy5vblVwZGF0ZS5jYWxsKHRoaXMpfX1wbGF5KCl7cmV0dXJuIHRoaXMudHdlZW4ucGxheSgpLHRoaXN9cmV2ZXJzZSgpe3JldHVybiB0aGlzLnR3ZWVuLnJldmVyc2UoKSx0aGlzfXJlc2V0KCl7cmV0dXJuIHRoaXMudHdlZW4ucmVzZXQoKSx0aGlzfXNlZWsodCl7cmV0dXJuIHRoaXMudHdlZW4uc2VlaygxZTMqdCksdGhpc31wYXVzZSgpe3JldHVybiB0aGlzLnR3ZWVuLnBhdXNlKCksdGhpc31maW5pc2goKXtyZXR1cm4gdGhpcy50d2Vlbi5maW5pc2goKSx0aGlzfWRlc3Ryb3koKXt2YXIgdCxlPXRoaXMubm9kZS5faWQsaT10aGlzLl9pZCxyPVp0LnR3ZWVuc1tlXTtmb3IodCBpbiB0aGlzLnBhdXNlKCkscilkZWxldGUgWnQudHdlZW5zW2VdW3RdO2RlbGV0ZSBadC5hdHRyc1tlXVtpXX19WnQuYXR0cnM9e30sWnQudHdlZW5zPXt9LEsucHJvdG90eXBlLnRvPWZ1bmN0aW9uKHQpe3ZhciBlPXQub25GaW5pc2g7dC5ub2RlPXRoaXMsdC5vbkZpbmlzaD1mdW5jdGlvbigpe3RoaXMuZGVzdHJveSgpLGUmJmUoKX0sbmV3IFp0KHQpLnBsYXkoKX07Y29uc3QgJHQ9e0JhY2tFYXNlSW4odCxlLGkscil7dmFyIGE9MS43MDE1ODtyZXR1cm4gaSoodC89cikqdCooKGErMSkqdC1hKStlfSxCYWNrRWFzZU91dCh0LGUsaSxyKXt2YXIgYT0xLjcwMTU4O3JldHVybiBpKigodD10L3ItMSkqdCooKGErMSkqdCthKSsxKStlfSxCYWNrRWFzZUluT3V0KHQsZSxpLHIpe3ZhciBhPTEuNzAxNTg7cmV0dXJuKHQvPXIvMik8MT9pLzIqKHQqdCooKDErKGEqPTEuNTI1KSkqdC1hKSkrZTppLzIqKCh0LT0yKSp0KigoMSsoYSo9MS41MjUpKSp0K2EpKzIpK2V9LEVsYXN0aWNFYXNlSW4odCxlLGkscixhLG4pe3ZhciBzPTA7cmV0dXJuIDA9PT10P2U6MT09KHQvPXIpP2UraToobnx8KG49LjMqciksIWF8fGE8TWF0aC5hYnMoaSk/KGE9aSxzPW4vNCk6cz1uLygyKk1hdGguUEkpKk1hdGguYXNpbihpL2EpLC1hKk1hdGgucG93KDIsMTAqKHQtPTEpKSpNYXRoLnNpbigodCpyLXMpKigyKk1hdGguUEkpL24pK2UpfSxFbGFzdGljRWFzZU91dCh0LGUsaSxyLGEsbil7dmFyIHM9MDtyZXR1cm4gMD09PXQ/ZToxPT0odC89cik/ZStpOihufHwobj0uMypyKSwhYXx8YTxNYXRoLmFicyhpKT8oYT1pLHM9bi80KTpzPW4vKDIqTWF0aC5QSSkqTWF0aC5hc2luKGkvYSksYSpNYXRoLnBvdygyLC0xMCp0KSpNYXRoLnNpbigodCpyLXMpKigyKk1hdGguUEkpL24pK2krZSl9LEVsYXN0aWNFYXNlSW5PdXQodCxlLGkscixhLG4pe3ZhciBzPTA7cmV0dXJuIDA9PT10P2U6Mj09KHQvPXIvMik/ZStpOihufHwobj1yKiguMyoxLjUpKSwhYXx8YTxNYXRoLmFicyhpKT8oYT1pLHM9bi80KTpzPW4vKDIqTWF0aC5QSSkqTWF0aC5hc2luKGkvYSksdDwxP2EqTWF0aC5wb3coMiwxMCoodC09MSkpKk1hdGguc2luKCh0KnItcykqKDIqTWF0aC5QSSkvbikqLS41K2U6YSpNYXRoLnBvdygyLC0xMCoodC09MSkpKk1hdGguc2luKCh0KnItcykqKDIqTWF0aC5QSSkvbikqLjUraStlKX0sQm91bmNlRWFzZU91dDoodCxlLGkscik9Pih0Lz1yKTwxLzIuNzU/aSooNy41NjI1KnQqdCkrZTp0PDIvMi43NT9pKig3LjU2MjUqKHQtPTEuNS8yLjc1KSp0Ky43NSkrZTp0PDIuNS8yLjc1P2kqKDcuNTYyNSoodC09Mi4yNS8yLjc1KSp0Ky45Mzc1KStlOmkqKDcuNTYyNSoodC09Mi42MjUvMi43NSkqdCsuOTg0Mzc1KStlLEJvdW5jZUVhc2VJbjoodCxlLGkscik9PmktJHQuQm91bmNlRWFzZU91dChyLXQsMCxpLHIpK2UsQm91bmNlRWFzZUluT3V0Oih0LGUsaSxyKT0+dDxyLzI/LjUqJHQuQm91bmNlRWFzZUluKDIqdCwwLGkscikrZTouNSokdC5Cb3VuY2VFYXNlT3V0KDIqdC1yLDAsaSxyKSsuNSppK2UsRWFzZUluOih0LGUsaSxyKT0+aSoodC89cikqdCtlLEVhc2VPdXQ6KHQsZSxpLHIpPT4taSoodC89cikqKHQtMikrZSxFYXNlSW5PdXQ6KHQsZSxpLHIpPT4odC89ci8yKTwxP2kvMip0KnQrZTotaS8yKigtLXQqKHQtMiktMSkrZSxTdHJvbmdFYXNlSW46KHQsZSxpLHIpPT5pKih0Lz1yKSp0KnQqdCp0K2UsU3Ryb25nRWFzZU91dDoodCxlLGkscik9PmkqKCh0PXQvci0xKSp0KnQqdCp0KzEpK2UsU3Ryb25nRWFzZUluT3V0Oih0LGUsaSxyKT0+KHQvPXIvMik8MT9pLzIqdCp0KnQqdCp0K2U6aS8yKigodC09MikqdCp0KnQqdCsyKStlLExpbmVhcjoodCxlLGkscik9PmkqdC9yK2V9LHRlPWcuX2Fzc2lnbihpLHtVdGlsOmcsVHJhbnNmb3JtOmEsTm9kZTpLLENvbnRhaW5lcjpKLFN0YWdlOkV0LHN0YWdlczpHdCxMYXllcjpZdCxGYXN0TGF5ZXI6WHQsR3JvdXA6anQsREQ6TCxTaGFwZTp6dCxzaGFwZXM6QnQsQW5pbWF0aW9uOnF0LFR3ZWVuOlp0LEVhc2luZ3M6JHQsQ29udGV4dDpQLENhbnZhczpHfSk7Y2xhc3MgZWUgZXh0ZW5kcyB6dHtfc2NlbmVGdW5jKHQpe3ZhciBlPWkuZ2V0QW5nbGUodGhpcy5hbmdsZSgpKSxyPXRoaXMuY2xvY2t3aXNlKCk7dC5iZWdpblBhdGgoKSx0LmFyYygwLDAsdGhpcy5vdXRlclJhZGl1cygpLDAsZSxyKSx0LmFyYygwLDAsdGhpcy5pbm5lclJhZGl1cygpLGUsMCwhciksdC5jbG9zZVBhdGgoKSx0LmZpbGxTdHJva2VTaGFwZSh0aGlzKX1nZXRXaWR0aCgpe3JldHVybiAyKnRoaXMub3V0ZXJSYWRpdXMoKX1nZXRIZWlnaHQoKXtyZXR1cm4gMip0aGlzLm91dGVyUmFkaXVzKCl9c2V0V2lkdGgodCl7dGhpcy5vdXRlclJhZGl1cyh0LzIpfXNldEhlaWdodCh0KXt0aGlzLm91dGVyUmFkaXVzKHQvMil9fWZ1bmN0aW9uIGllKHQsZSxpLHIsYSxuLHMpe3ZhciBvPU1hdGguc3FydChNYXRoLnBvdyhpLXQsMikrTWF0aC5wb3coci1lLDIpKSxoPU1hdGguc3FydChNYXRoLnBvdyhhLWksMikrTWF0aC5wb3cobi1yLDIpKSxsPXMqby8obytoKSxkPXMqaC8obytoKTtyZXR1cm5baS1sKihhLXQpLHItbCoobi1lKSxpK2QqKGEtdCkscitkKihuLWUpXX1mdW5jdGlvbiByZSh0LGUpe3ZhciBpLHIsYT10Lmxlbmd0aCxuPVtdO2ZvcihpPTI7aTxhLTI7aSs9MilyPWllKHRbaS0yXSx0W2ktMV0sdFtpXSx0W2krMV0sdFtpKzJdLHRbaSszXSxlKSxpc05hTihyWzBdKXx8KG4ucHVzaChyWzBdKSxuLnB1c2goclsxXSksbi5wdXNoKHRbaV0pLG4ucHVzaCh0W2krMV0pLG4ucHVzaChyWzJdKSxuLnB1c2goclszXSkpO3JldHVybiBufWVlLnByb3RvdHlwZS5fY2VudHJvaWQ9ITAsZWUucHJvdG90eXBlLmNsYXNzTmFtZT0iQXJjIixlZS5wcm90b3R5cGUuX2F0dHJzQWZmZWN0aW5nU2l6ZT1bImlubmVyUmFkaXVzIiwib3V0ZXJSYWRpdXMiXSxyKGVlKSx3LmFkZEdldHRlclNldHRlcihlZSwiaW5uZXJSYWRpdXMiLDAscCgpKSx3LmFkZEdldHRlclNldHRlcihlZSwib3V0ZXJSYWRpdXMiLDAscCgpKSx3LmFkZEdldHRlclNldHRlcihlZSwiYW5nbGUiLDAscCgpKSx3LmFkZEdldHRlclNldHRlcihlZSwiY2xvY2t3aXNlIiwhMSx4KCkpO2NsYXNzIGFlIGV4dGVuZHMgenR7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5vbigicG9pbnRzQ2hhbmdlLmtvbnZhIHRlbnNpb25DaGFuZ2Uua29udmEgY2xvc2VkQ2hhbmdlLmtvbnZhIGJlemllckNoYW5nZS5rb252YSIsKGZ1bmN0aW9uKCl7dGhpcy5fY2xlYXJDYWNoZSgidGVuc2lvblBvaW50cyIpfSkpfV9zY2VuZUZ1bmModCl7dmFyIGUsaSxyLGE9dGhpcy5wb2ludHMoKSxuPWEubGVuZ3RoLHM9dGhpcy50ZW5zaW9uKCksbz10aGlzLmNsb3NlZCgpLGg9dGhpcy5iZXppZXIoKTtpZihuKXtpZih0LmJlZ2luUGF0aCgpLHQubW92ZVRvKGFbMF0sYVsxXSksMCE9PXMmJm4+NCl7Zm9yKGk9KGU9dGhpcy5nZXRUZW5zaW9uUG9pbnRzKCkpLmxlbmd0aCxyPW8/MDo0LG98fHQucXVhZHJhdGljQ3VydmVUbyhlWzBdLGVbMV0sZVsyXSxlWzNdKTtyPGktMjspdC5iZXppZXJDdXJ2ZVRvKGVbcisrXSxlW3IrK10sZVtyKytdLGVbcisrXSxlW3IrK10sZVtyKytdKTtvfHx0LnF1YWRyYXRpY0N1cnZlVG8oZVtpLTJdLGVbaS0xXSxhW24tMl0sYVtuLTFdKX1lbHNlIGlmKGgpZm9yKHI9MjtyPG47KXQuYmV6aWVyQ3VydmVUbyhhW3IrK10sYVtyKytdLGFbcisrXSxhW3IrK10sYVtyKytdLGFbcisrXSk7ZWxzZSBmb3Iocj0yO3I8bjtyKz0yKXQubGluZVRvKGFbcl0sYVtyKzFdKTtvPyh0LmNsb3NlUGF0aCgpLHQuZmlsbFN0cm9rZVNoYXBlKHRoaXMpKTp0LnN0cm9rZVNoYXBlKHRoaXMpfX1nZXRUZW5zaW9uUG9pbnRzKCl7cmV0dXJuIHRoaXMuX2dldENhY2hlKCJ0ZW5zaW9uUG9pbnRzIix0aGlzLl9nZXRUZW5zaW9uUG9pbnRzKX1fZ2V0VGVuc2lvblBvaW50cygpe3JldHVybiB0aGlzLmNsb3NlZCgpP3RoaXMuX2dldFRlbnNpb25Qb2ludHNDbG9zZWQoKTpyZSh0aGlzLnBvaW50cygpLHRoaXMudGVuc2lvbigpKX1fZ2V0VGVuc2lvblBvaW50c0Nsb3NlZCgpe3ZhciB0PXRoaXMucG9pbnRzKCksZT10Lmxlbmd0aCxpPXRoaXMudGVuc2lvbigpLHI9aWUodFtlLTJdLHRbZS0xXSx0WzBdLHRbMV0sdFsyXSx0WzNdLGkpLGE9aWUodFtlLTRdLHRbZS0zXSx0W2UtMl0sdFtlLTFdLHRbMF0sdFsxXSxpKSxuPXJlKHQsaSk7cmV0dXJuW3JbMl0sclszXV0uY29uY2F0KG4pLmNvbmNhdChbYVswXSxhWzFdLHRbZS0yXSx0W2UtMV0sYVsyXSxhWzNdLHJbMF0sclsxXSx0WzBdLHRbMV1dKX1nZXRXaWR0aCgpe3JldHVybiB0aGlzLmdldFNlbGZSZWN0KCkud2lkdGh9Z2V0SGVpZ2h0KCl7cmV0dXJuIHRoaXMuZ2V0U2VsZlJlY3QoKS5oZWlnaHR9Z2V0U2VsZlJlY3QoKXt2YXIgdD10aGlzLnBvaW50cygpO2lmKHQubGVuZ3RoPDQpcmV0dXJue3g6dFswXXx8MCx5OnRbMV18fDAsd2lkdGg6MCxoZWlnaHQ6MH07Zm9yKHZhciBlLGkscj0odD0wIT09dGhpcy50ZW5zaW9uKCk/W3RbMF0sdFsxXSwuLi50aGlzLl9nZXRUZW5zaW9uUG9pbnRzKCksdFt0Lmxlbmd0aC0yXSx0W3QubGVuZ3RoLTFdXTp0aGlzLnBvaW50cygpKVswXSxhPXRbMF0sbj10WzFdLHM9dFsxXSxvPTA7bzx0Lmxlbmd0aC8yO28rKyllPXRbMipvXSxpPXRbMipvKzFdLHI9TWF0aC5taW4ocixlKSxhPU1hdGgubWF4KGEsZSksbj1NYXRoLm1pbihuLGkpLHM9TWF0aC5tYXgocyxpKTtyZXR1cm57eDpyLHk6bix3aWR0aDphLXIsaGVpZ2h0OnMtbn19fWFlLnByb3RvdHlwZS5jbGFzc05hbWU9IkxpbmUiLGFlLnByb3RvdHlwZS5fYXR0cnNBZmZlY3RpbmdTaXplPVsicG9pbnRzIiwiYmV6aWVyIiwidGVuc2lvbiJdLHIoYWUpLHcuYWRkR2V0dGVyU2V0dGVyKGFlLCJjbG9zZWQiLCExKSx3LmFkZEdldHRlclNldHRlcihhZSwiYmV6aWVyIiwhMSksdy5hZGRHZXR0ZXJTZXR0ZXIoYWUsInRlbnNpb24iLDAscCgpKSx3LmFkZEdldHRlclNldHRlcihhZSwicG9pbnRzIixbXSxmdW5jdGlvbigpe2lmKGkuaXNVbm1pbmlmaWVkKXJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBnLl9pc0FycmF5KHQpP3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7Zy5faXNOdW1iZXIodCl8fGcud2FybignIicrZSsnIiBhdHRyaWJ1dGUgaGFzIG5vbiBudW1lcmljIGVsZW1lbnQgJyt0KyIuIE1ha2Ugc3VyZSB0aGF0IGFsbCBlbGVtZW50cyBhcmUgbnVtYmVycy4iKX0pKTpnLndhcm4odSh0KSsnIGlzIGEgbm90IHZhbGlkIHZhbHVlIGZvciAiJytlKyciIGF0dHJpYnV0ZS4gVGhlIHZhbHVlIHNob3VsZCBiZSBhIGFycmF5IG9mIG51bWJlcnMuJyksdH19KCkpO2NsYXNzIG5lIGV4dGVuZHMgenR7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5kYXRhQXJyYXk9W10sdGhpcy5wYXRoTGVuZ3RoPTAsdGhpcy5kYXRhQXJyYXk9bmUucGFyc2VQYXRoRGF0YSh0aGlzLmRhdGEoKSksdGhpcy5wYXRoTGVuZ3RoPTA7Zm9yKHZhciBlPTA7ZTx0aGlzLmRhdGFBcnJheS5sZW5ndGg7KytlKXRoaXMucGF0aExlbmd0aCs9dGhpcy5kYXRhQXJyYXlbZV0ucGF0aExlbmd0aDt0aGlzLm9uKCJkYXRhQ2hhbmdlLmtvbnZhIiwoZnVuY3Rpb24oKXt0aGlzLmRhdGFBcnJheT1uZS5wYXJzZVBhdGhEYXRhKHRoaXMuZGF0YSgpKSx0aGlzLnBhdGhMZW5ndGg9MDtmb3IodmFyIHQ9MDt0PHRoaXMuZGF0YUFycmF5Lmxlbmd0aDsrK3QpdGhpcy5wYXRoTGVuZ3RoKz10aGlzLmRhdGFBcnJheVt0XS5wYXRoTGVuZ3RofSkpfV9zY2VuZUZ1bmModCl7dmFyIGU9dGhpcy5kYXRhQXJyYXk7dC5iZWdpblBhdGgoKTtmb3IodmFyIGk9ITEscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgYT1lW3JdLmNvbW1hbmQsbj1lW3JdLnBvaW50cztzd2l0Y2goYSl7Y2FzZSJMIjp0LmxpbmVUbyhuWzBdLG5bMV0pO2JyZWFrO2Nhc2UiTSI6dC5tb3ZlVG8oblswXSxuWzFdKTticmVhaztjYXNlIkMiOnQuYmV6aWVyQ3VydmVUbyhuWzBdLG5bMV0sblsyXSxuWzNdLG5bNF0sbls1XSk7YnJlYWs7Y2FzZSJRIjp0LnF1YWRyYXRpY0N1cnZlVG8oblswXSxuWzFdLG5bMl0sblszXSk7YnJlYWs7Y2FzZSJBIjp2YXIgcz1uWzBdLG89blsxXSxoPW5bMl0sbD1uWzNdLGQ9bls0XSxjPW5bNV0sZz1uWzZdLHU9bls3XSxmPWg+bD9oOmwscD1oPmw/MTpoL2wsdj1oPmw/bC9oOjE7dC50cmFuc2xhdGUocyxvKSx0LnJvdGF0ZShnKSx0LnNjYWxlKHAsdiksdC5hcmMoMCwwLGYsZCxkK2MsMS11KSx0LnNjYWxlKDEvcCwxL3YpLHQucm90YXRlKC1nKSx0LnRyYW5zbGF0ZSgtcywtbyk7YnJlYWs7Y2FzZSJ6IjppPSEwLHQuY2xvc2VQYXRoKCl9fWl8fHRoaXMuaGFzRmlsbCgpP3QuZmlsbFN0cm9rZVNoYXBlKHRoaXMpOnQuc3Ryb2tlU2hhcGUodGhpcyl9Z2V0U2VsZlJlY3QoKXt2YXIgdD1bXTt0aGlzLmRhdGFBcnJheS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZigiQSI9PT1lLmNvbW1hbmQpe3ZhciBpPWUucG9pbnRzWzRdLHI9ZS5wb2ludHNbNV0sYT1lLnBvaW50c1s0XStyLG49TWF0aC5QSS8xODA7aWYoTWF0aC5hYnMoaS1hKTxuJiYobj1NYXRoLmFicyhpLWEpKSxyPDApZm9yKGxldCByPWktbjtyPmE7ci09bil7Y29uc3QgaT1uZS5nZXRQb2ludE9uRWxsaXB0aWNhbEFyYyhlLnBvaW50c1swXSxlLnBvaW50c1sxXSxlLnBvaW50c1syXSxlLnBvaW50c1szXSxyLDApO3QucHVzaChpLngsaS55KX1lbHNlIGZvcihsZXQgcj1pK247cjxhO3IrPW4pe2NvbnN0IGk9bmUuZ2V0UG9pbnRPbkVsbGlwdGljYWxBcmMoZS5wb2ludHNbMF0sZS5wb2ludHNbMV0sZS5wb2ludHNbMl0sZS5wb2ludHNbM10sciwwKTt0LnB1c2goaS54LGkueSl9fWVsc2UgaWYoIkMiPT09ZS5jb21tYW5kKWZvcihsZXQgaT0wO2k8PTE7aSs9LjAxKXtjb25zdCByPW5lLmdldFBvaW50T25DdWJpY0JlemllcihpLGUuc3RhcnQueCxlLnN0YXJ0LnksZS5wb2ludHNbMF0sZS5wb2ludHNbMV0sZS5wb2ludHNbMl0sZS5wb2ludHNbM10sZS5wb2ludHNbNF0sZS5wb2ludHNbNV0pO3QucHVzaChyLngsci55KX1lbHNlIHQ9dC5jb25jYXQoZS5wb2ludHMpfSkpO2Zvcih2YXIgZSxpLHI9dFswXSxhPXRbMF0sbj10WzFdLHM9dFsxXSxvPTA7bzx0Lmxlbmd0aC8yO28rKyllPXRbMipvXSxpPXRbMipvKzFdLGlzTmFOKGUpfHwocj1NYXRoLm1pbihyLGUpLGE9TWF0aC5tYXgoYSxlKSksaXNOYU4oaSl8fChuPU1hdGgubWluKG4saSkscz1NYXRoLm1heChzLGkpKTtyZXR1cm57eDpNYXRoLnJvdW5kKHIpLHk6TWF0aC5yb3VuZChuKSx3aWR0aDpNYXRoLnJvdW5kKGEtciksaGVpZ2h0Ok1hdGgucm91bmQocy1uKX19Z2V0TGVuZ3RoKCl7cmV0dXJuIHRoaXMucGF0aExlbmd0aH1nZXRQb2ludEF0TGVuZ3RoKHQpe3ZhciBlLGk9MCxyPXRoaXMuZGF0YUFycmF5Lmxlbmd0aDtpZighcilyZXR1cm4gbnVsbDtmb3IoO2k8ciYmdD50aGlzLmRhdGFBcnJheVtpXS5wYXRoTGVuZ3RoOyl0LT10aGlzLmRhdGFBcnJheVtpXS5wYXRoTGVuZ3RoLCsraTtpZihpPT09cilyZXR1cm57eDooZT10aGlzLmRhdGFBcnJheVtpLTFdLnBvaW50cy5zbGljZSgtMikpWzBdLHk6ZVsxXX07aWYodDwuMDEpcmV0dXJue3g6KGU9dGhpcy5kYXRhQXJyYXlbaV0ucG9pbnRzLnNsaWNlKDAsMikpWzBdLHk6ZVsxXX07dmFyIGE9dGhpcy5kYXRhQXJyYXlbaV0sbj1hLnBvaW50cztzd2l0Y2goYS5jb21tYW5kKXtjYXNlIkwiOnJldHVybiBuZS5nZXRQb2ludE9uTGluZSh0LGEuc3RhcnQueCxhLnN0YXJ0LnksblswXSxuWzFdKTtjYXNlIkMiOnJldHVybiBuZS5nZXRQb2ludE9uQ3ViaWNCZXppZXIodC9hLnBhdGhMZW5ndGgsYS5zdGFydC54LGEuc3RhcnQueSxuWzBdLG5bMV0sblsyXSxuWzNdLG5bNF0sbls1XSk7Y2FzZSJRIjpyZXR1cm4gbmUuZ2V0UG9pbnRPblF1YWRyYXRpY0Jlemllcih0L2EucGF0aExlbmd0aCxhLnN0YXJ0LngsYS5zdGFydC55LG5bMF0sblsxXSxuWzJdLG5bM10pO2Nhc2UiQSI6dmFyIHM9blswXSxvPW5bMV0saD1uWzJdLGw9blszXSxkPW5bNF0sYz1uWzVdLGc9bls2XTtyZXR1cm4gZCs9Yyp0L2EucGF0aExlbmd0aCxuZS5nZXRQb2ludE9uRWxsaXB0aWNhbEFyYyhzLG8saCxsLGQsZyl9cmV0dXJuIG51bGx9c3RhdGljIGdldExpbmVMZW5ndGgodCxlLGkscil7cmV0dXJuIE1hdGguc3FydCgoaS10KSooaS10KSsoci1lKSooci1lKSl9c3RhdGljIGdldFBvaW50T25MaW5lKHQsZSxpLHIsYSxuLHMpe3ZvaWQgMD09PW4mJihuPWUpLHZvaWQgMD09PXMmJihzPWkpO3ZhciBvPShhLWkpLyhyLWUrMWUtOCksaD1NYXRoLnNxcnQodCp0LygxK28qbykpO3I8ZSYmKGgqPS0xKTt2YXIgbCxkPW8qaDtpZihyPT09ZSlsPXt4Om4seTpzK2R9O2Vsc2UgaWYoKHMtaSkvKG4tZSsxZS04KT09PW8pbD17eDpuK2gseTpzK2R9O2Vsc2V7dmFyIGMsZyx1PXRoaXMuZ2V0TGluZUxlbmd0aChlLGkscixhKSxmPShuLWUpKihyLWUpKyhzLWkpKihhLWkpO2M9ZSsoZi89dSp1KSooci1lKSxnPWkrZiooYS1pKTt2YXIgcD10aGlzLmdldExpbmVMZW5ndGgobixzLGMsZyksdj1NYXRoLnNxcnQodCp0LXAqcCk7aD1NYXRoLnNxcnQodip2LygxK28qbykpLHI8ZSYmKGgqPS0xKSxsPXt4OmMraCx5OmcrKGQ9bypoKX19cmV0dXJuIGx9c3RhdGljIGdldFBvaW50T25DdWJpY0Jlemllcih0LGUsaSxyLGEsbixzLG8saCl7ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdCp0KnR9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gMyp0KnQqKDEtdCl9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gMyp0KigxLXQpKigxLXQpfWZ1bmN0aW9uIGcodCl7cmV0dXJuKDEtdCkqKDEtdCkqKDEtdCl9cmV0dXJue3g6bypsKHQpK24qZCh0KStyKmModCkrZSpnKHQpLHk6aCpsKHQpK3MqZCh0KSthKmModCkraSpnKHQpfX1zdGF0aWMgZ2V0UG9pbnRPblF1YWRyYXRpY0Jlemllcih0LGUsaSxyLGEsbixzKXtmdW5jdGlvbiBvKHQpe3JldHVybiB0KnR9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gMip0KigxLXQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuKDEtdCkqKDEtdCl9cmV0dXJue3g6bipvKHQpK3IqaCh0KStlKmwodCkseTpzKm8odCkrYSpoKHQpK2kqbCh0KX19c3RhdGljIGdldFBvaW50T25FbGxpcHRpY2FsQXJjKHQsZSxpLHIsYSxuKXt2YXIgcz1NYXRoLmNvcyhuKSxvPU1hdGguc2luKG4pLGg9aSpNYXRoLmNvcyhhKSxsPXIqTWF0aC5zaW4oYSk7cmV0dXJue3g6dCsoaCpzLWwqbykseTplKyhoKm8rbCpzKX19c3RhdGljIHBhcnNlUGF0aERhdGEodCl7aWYoIXQpcmV0dXJuW107dmFyIGU9dCxpPVsibSIsIk0iLCJsIiwiTCIsInYiLCJWIiwiaCIsIkgiLCJ6IiwiWiIsImMiLCJDIiwicSIsIlEiLCJ0IiwiVCIsInMiLCJTIiwiYSIsIkEiXTtlPWUucmVwbGFjZShuZXcgUmVnRXhwKCIgIiwiZyIpLCIsIik7Zm9yKHZhciByPTA7cjxpLmxlbmd0aDtyKyspZT1lLnJlcGxhY2UobmV3IFJlZ0V4cChpW3JdLCJnIiksInwiK2lbcl0pO3ZhciBhLG49ZS5zcGxpdCgifCIpLHM9W10sbz1bXSxoPTAsbD0wLGQ9LyhbLStdPygoXGQrXC5cZCspfCgoXGQrKXwoXC5cZCspKSkoPzplWy0rXT9cZCspPykvZ2k7Zm9yKHI9MTtyPG4ubGVuZ3RoO3IrKyl7dmFyIGM9bltyXSxnPWMuY2hhckF0KDApO2ZvcihjPWMuc2xpY2UoMSksby5sZW5ndGg9MDthPWQuZXhlYyhjKTspby5wdXNoKGFbMF0pO2Zvcih2YXIgdT1bXSxmPTAscD1vLmxlbmd0aDtmPHA7ZisrKWlmKCIwMCIhPT1vW2ZdKXt2YXIgdj1wYXJzZUZsb2F0KG9bZl0pO2lzTmFOKHYpP3UucHVzaCgwKTp1LnB1c2godil9ZWxzZSB1LnB1c2goMCwwKTtmb3IoO3UubGVuZ3RoPjAmJiFpc05hTih1WzBdKTspe3ZhciBtLF8seSx4LGIsUyx3LEMsayxQLFQ9bnVsbCxBPVtdLE09aCxHPWw7c3dpdGNoKGcpe2Nhc2UibCI6aCs9dS5zaGlmdCgpLGwrPXUuc2hpZnQoKSxUPSJMIixBLnB1c2goaCxsKTticmVhaztjYXNlIkwiOmg9dS5zaGlmdCgpLGw9dS5zaGlmdCgpLEEucHVzaChoLGwpO2JyZWFrO2Nhc2UibSI6dmFyIEU9dS5zaGlmdCgpLFI9dS5zaGlmdCgpO2lmKGgrPUUsbCs9UixUPSJNIixzLmxlbmd0aD4yJiYieiI9PT1zW3MubGVuZ3RoLTFdLmNvbW1hbmQpZm9yKHZhciBMPXMubGVuZ3RoLTI7TD49MDtMLS0paWYoIk0iPT09c1tMXS5jb21tYW5kKXtoPXNbTF0ucG9pbnRzWzBdK0UsbD1zW0xdLnBvaW50c1sxXStSO2JyZWFrfUEucHVzaChoLGwpLGc9ImwiO2JyZWFrO2Nhc2UiTSI6aD11LnNoaWZ0KCksbD11LnNoaWZ0KCksVD0iTSIsQS5wdXNoKGgsbCksZz0iTCI7YnJlYWs7Y2FzZSJoIjpoKz11LnNoaWZ0KCksVD0iTCIsQS5wdXNoKGgsbCk7YnJlYWs7Y2FzZSJIIjpoPXUuc2hpZnQoKSxUPSJMIixBLnB1c2goaCxsKTticmVhaztjYXNlInYiOmwrPXUuc2hpZnQoKSxUPSJMIixBLnB1c2goaCxsKTticmVhaztjYXNlIlYiOmw9dS5zaGlmdCgpLFQ9IkwiLEEucHVzaChoLGwpO2JyZWFrO2Nhc2UiQyI6QS5wdXNoKHUuc2hpZnQoKSx1LnNoaWZ0KCksdS5zaGlmdCgpLHUuc2hpZnQoKSksaD11LnNoaWZ0KCksbD11LnNoaWZ0KCksQS5wdXNoKGgsbCk7YnJlYWs7Y2FzZSJjIjpBLnB1c2goaCt1LnNoaWZ0KCksbCt1LnNoaWZ0KCksaCt1LnNoaWZ0KCksbCt1LnNoaWZ0KCkpLGgrPXUuc2hpZnQoKSxsKz11LnNoaWZ0KCksVD0iQyIsQS5wdXNoKGgsbCk7YnJlYWs7Y2FzZSJTIjpfPWgseT1sLCJDIj09PShtPXNbcy5sZW5ndGgtMV0pLmNvbW1hbmQmJihfPWgrKGgtbS5wb2ludHNbMl0pLHk9bCsobC1tLnBvaW50c1szXSkpLEEucHVzaChfLHksdS5zaGlmdCgpLHUuc2hpZnQoKSksaD11LnNoaWZ0KCksbD11LnNoaWZ0KCksVD0iQyIsQS5wdXNoKGgsbCk7YnJlYWs7Y2FzZSJzIjpfPWgseT1sLCJDIj09PShtPXNbcy5sZW5ndGgtMV0pLmNvbW1hbmQmJihfPWgrKGgtbS5wb2ludHNbMl0pLHk9bCsobC1tLnBvaW50c1szXSkpLEEucHVzaChfLHksaCt1LnNoaWZ0KCksbCt1LnNoaWZ0KCkpLGgrPXUuc2hpZnQoKSxsKz11LnNoaWZ0KCksVD0iQyIsQS5wdXNoKGgsbCk7YnJlYWs7Y2FzZSJRIjpBLnB1c2godS5zaGlmdCgpLHUuc2hpZnQoKSksaD11LnNoaWZ0KCksbD11LnNoaWZ0KCksQS5wdXNoKGgsbCk7YnJlYWs7Y2FzZSJxIjpBLnB1c2goaCt1LnNoaWZ0KCksbCt1LnNoaWZ0KCkpLGgrPXUuc2hpZnQoKSxsKz11LnNoaWZ0KCksVD0iUSIsQS5wdXNoKGgsbCk7YnJlYWs7Y2FzZSJUIjpfPWgseT1sLCJRIj09PShtPXNbcy5sZW5ndGgtMV0pLmNvbW1hbmQmJihfPWgrKGgtbS5wb2ludHNbMF0pLHk9bCsobC1tLnBvaW50c1sxXSkpLGg9dS5zaGlmdCgpLGw9dS5zaGlmdCgpLFQ9IlEiLEEucHVzaChfLHksaCxsKTticmVhaztjYXNlInQiOl89aCx5PWwsIlEiPT09KG09c1tzLmxlbmd0aC0xXSkuY29tbWFuZCYmKF89aCsoaC1tLnBvaW50c1swXSkseT1sKyhsLW0ucG9pbnRzWzFdKSksaCs9dS5zaGlmdCgpLGwrPXUuc2hpZnQoKSxUPSJRIixBLnB1c2goXyx5LGgsbCk7YnJlYWs7Y2FzZSJBIjp4PXUuc2hpZnQoKSxiPXUuc2hpZnQoKSxTPXUuc2hpZnQoKSx3PXUuc2hpZnQoKSxDPXUuc2hpZnQoKSxrPWgsUD1sLGg9dS5zaGlmdCgpLGw9dS5zaGlmdCgpLFQ9IkEiLEE9dGhpcy5jb252ZXJ0RW5kcG9pbnRUb0NlbnRlclBhcmFtZXRlcml6YXRpb24oayxQLGgsbCx3LEMseCxiLFMpO2JyZWFrO2Nhc2UiYSI6eD11LnNoaWZ0KCksYj11LnNoaWZ0KCksUz11LnNoaWZ0KCksdz11LnNoaWZ0KCksQz11LnNoaWZ0KCksaz1oLFA9bCxoKz11LnNoaWZ0KCksbCs9dS5zaGlmdCgpLFQ9IkEiLEE9dGhpcy5jb252ZXJ0RW5kcG9pbnRUb0NlbnRlclBhcmFtZXRlcml6YXRpb24oayxQLGgsbCx3LEMseCxiLFMpfXMucHVzaCh7Y29tbWFuZDpUfHxnLHBvaW50czpBLHN0YXJ0Ont4Ok0seTpHfSxwYXRoTGVuZ3RoOnRoaXMuY2FsY0xlbmd0aChNLEcsVHx8ZyxBKX0pfSJ6IiE9PWcmJiJaIiE9PWd8fHMucHVzaCh7Y29tbWFuZDoieiIscG9pbnRzOltdLHN0YXJ0OnZvaWQgMCxwYXRoTGVuZ3RoOjB9KX1yZXR1cm4gc31zdGF0aWMgY2FsY0xlbmd0aCh0LGUsaSxyKXt2YXIgYSxuLHMsbyxoPW5lO3N3aXRjaChpKXtjYXNlIkwiOnJldHVybiBoLmdldExpbmVMZW5ndGgodCxlLHJbMF0sclsxXSk7Y2FzZSJDIjpmb3IoYT0wLG49aC5nZXRQb2ludE9uQ3ViaWNCZXppZXIoMCx0LGUsclswXSxyWzFdLHJbMl0sclszXSxyWzRdLHJbNV0pLG89LjAxO288PTE7bys9LjAxKXM9aC5nZXRQb2ludE9uQ3ViaWNCZXppZXIobyx0LGUsclswXSxyWzFdLHJbMl0sclszXSxyWzRdLHJbNV0pLGErPWguZ2V0TGluZUxlbmd0aChuLngsbi55LHMueCxzLnkpLG49cztyZXR1cm4gYTtjYXNlIlEiOmZvcihhPTAsbj1oLmdldFBvaW50T25RdWFkcmF0aWNCZXppZXIoMCx0LGUsclswXSxyWzFdLHJbMl0sclszXSksbz0uMDE7bzw9MTtvKz0uMDEpcz1oLmdldFBvaW50T25RdWFkcmF0aWNCZXppZXIobyx0LGUsclswXSxyWzFdLHJbMl0sclszXSksYSs9aC5nZXRMaW5lTGVuZ3RoKG4ueCxuLnkscy54LHMueSksbj1zO3JldHVybiBhO2Nhc2UiQSI6YT0wO3ZhciBsPXJbNF0sZD1yWzVdLGM9cls0XStkLGc9TWF0aC5QSS8xODA7aWYoTWF0aC5hYnMobC1jKTxnJiYoZz1NYXRoLmFicyhsLWMpKSxuPWguZ2V0UG9pbnRPbkVsbGlwdGljYWxBcmMoclswXSxyWzFdLHJbMl0sclszXSxsLDApLGQ8MClmb3Iobz1sLWc7bz5jO28tPWcpcz1oLmdldFBvaW50T25FbGxpcHRpY2FsQXJjKHJbMF0sclsxXSxyWzJdLHJbM10sbywwKSxhKz1oLmdldExpbmVMZW5ndGgobi54LG4ueSxzLngscy55KSxuPXM7ZWxzZSBmb3Iobz1sK2c7bzxjO28rPWcpcz1oLmdldFBvaW50T25FbGxpcHRpY2FsQXJjKHJbMF0sclsxXSxyWzJdLHJbM10sbywwKSxhKz1oLmdldExpbmVMZW5ndGgobi54LG4ueSxzLngscy55KSxuPXM7cmV0dXJuIHM9aC5nZXRQb2ludE9uRWxsaXB0aWNhbEFyYyhyWzBdLHJbMV0sclsyXSxyWzNdLGMsMCksYSs9aC5nZXRMaW5lTGVuZ3RoKG4ueCxuLnkscy54LHMueSl9cmV0dXJuIDB9c3RhdGljIGNvbnZlcnRFbmRwb2ludFRvQ2VudGVyUGFyYW1ldGVyaXphdGlvbih0LGUsaSxyLGEsbixzLG8saCl7dmFyIGw9aCooTWF0aC5QSS8xODApLGQ9TWF0aC5jb3MobCkqKHQtaSkvMitNYXRoLnNpbihsKSooZS1yKS8yLGM9LTEqTWF0aC5zaW4obCkqKHQtaSkvMitNYXRoLmNvcyhsKSooZS1yKS8yLGc9ZCpkLyhzKnMpK2MqYy8obypvKTtnPjEmJihzKj1NYXRoLnNxcnQoZyksbyo9TWF0aC5zcXJ0KGcpKTt2YXIgdT1NYXRoLnNxcnQoKHMqcyoobypvKS1zKnMqKGMqYyktbypvKihkKmQpKS8ocypzKihjKmMpK28qbyooZCpkKSkpO2E9PT1uJiYodSo9LTEpLGlzTmFOKHUpJiYodT0wKTt2YXIgZj11KnMqYy9vLHA9dSotbypkL3Msdj0odCtpKS8yK01hdGguY29zKGwpKmYtTWF0aC5zaW4obCkqcCxtPShlK3IpLzIrTWF0aC5zaW4obCkqZitNYXRoLmNvcyhsKSpwLF89ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCh0WzBdKnRbMF0rdFsxXSp0WzFdKX0seT1mdW5jdGlvbih0LGUpe3JldHVybih0WzBdKmVbMF0rdFsxXSplWzFdKS8oXyh0KSpfKGUpKX0seD1mdW5jdGlvbih0LGUpe3JldHVybih0WzBdKmVbMV08dFsxXSplWzBdPy0xOjEpKk1hdGguYWNvcyh5KHQsZSkpfSxiPXgoWzEsMF0sWyhkLWYpL3MsKGMtcCkvb10pLFM9WyhkLWYpL3MsKGMtcCkvb10sdz1bKC0xKmQtZikvcywoLTEqYy1wKS9vXSxDPXgoUyx3KTtyZXR1cm4geShTLHcpPD0tMSYmKEM9TWF0aC5QSSkseShTLHcpPj0xJiYoQz0wKSwwPT09biYmQz4wJiYoQy09MipNYXRoLlBJKSwxPT09biYmQzwwJiYoQys9MipNYXRoLlBJKSxbdixtLHMsbyxiLEMsbCxuXX19bmUucHJvdG90eXBlLmNsYXNzTmFtZT0iUGF0aCIsbmUucHJvdG90eXBlLl9hdHRyc0FmZmVjdGluZ1NpemU9WyJkYXRhIl0scihuZSksdy5hZGRHZXR0ZXJTZXR0ZXIobmUsImRhdGEiKTtjbGFzcyBzZSBleHRlbmRzIGFle19zY2VuZUZ1bmModCl7c3VwZXIuX3NjZW5lRnVuYyh0KTt2YXIgZT0yKk1hdGguUEksaT10aGlzLnBvaW50cygpLHI9aSxhPTAhPT10aGlzLnRlbnNpb24oKSYmaS5sZW5ndGg+NDthJiYocj10aGlzLmdldFRlbnNpb25Qb2ludHMoKSk7dmFyIG4scyxvPXRoaXMucG9pbnRlckxlbmd0aCgpLGg9aS5sZW5ndGg7aWYoYSl7Y29uc3QgdD1bcltyLmxlbmd0aC00XSxyW3IubGVuZ3RoLTNdLHJbci5sZW5ndGgtMl0scltyLmxlbmd0aC0xXSxpW2gtMl0saVtoLTFdXSxlPW5lLmNhbGNMZW5ndGgocltyLmxlbmd0aC00XSxyW3IubGVuZ3RoLTNdLCJDIix0KSxhPW5lLmdldFBvaW50T25RdWFkcmF0aWNCZXppZXIoTWF0aC5taW4oMSwxLW8vZSksdFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0pO249aVtoLTJdLWEueCxzPWlbaC0xXS1hLnl9ZWxzZSBuPWlbaC0yXS1pW2gtNF0scz1pW2gtMV0taVtoLTNdO3ZhciBsPShNYXRoLmF0YW4yKHMsbikrZSklZSxkPXRoaXMucG9pbnRlcldpZHRoKCk7dGhpcy5wb2ludGVyQXRFbmRpbmcoKSYmKHQuc2F2ZSgpLHQuYmVnaW5QYXRoKCksdC50cmFuc2xhdGUoaVtoLTJdLGlbaC0xXSksdC5yb3RhdGUobCksdC5tb3ZlVG8oMCwwKSx0LmxpbmVUbygtbyxkLzIpLHQubGluZVRvKC1vLC1kLzIpLHQuY2xvc2VQYXRoKCksdC5yZXN0b3JlKCksdGhpcy5fX2ZpbGxTdHJva2UodCkpLHRoaXMucG9pbnRlckF0QmVnaW5uaW5nKCkmJih0LnNhdmUoKSx0LmJlZ2luUGF0aCgpLHQudHJhbnNsYXRlKGlbMF0saVsxXSksYT8obj0oclswXStyWzJdKS8yLWlbMF0scz0oclsxXStyWzNdKS8yLWlbMV0pOihuPWlbMl0taVswXSxzPWlbM10taVsxXSksdC5yb3RhdGUoKE1hdGguYXRhbjIoLXMsLW4pK2UpJWUpLHQubW92ZVRvKDAsMCksdC5saW5lVG8oLW8sZC8yKSx0LmxpbmVUbygtbywtZC8yKSx0LmNsb3NlUGF0aCgpLHQucmVzdG9yZSgpLHRoaXMuX19maWxsU3Ryb2tlKHQpKX1fX2ZpbGxTdHJva2UodCl7dmFyIGU9dGhpcy5kYXNoRW5hYmxlZCgpO2UmJih0aGlzLmF0dHJzLmRhc2hFbmFibGVkPSExLHQuc2V0TGluZURhc2goW10pKSx0LmZpbGxTdHJva2VTaGFwZSh0aGlzKSxlJiYodGhpcy5hdHRycy5kYXNoRW5hYmxlZD0hMCl9Z2V0U2VsZlJlY3QoKXtjb25zdCB0PXN1cGVyLmdldFNlbGZSZWN0KCksZT10aGlzLnBvaW50ZXJXaWR0aCgpLzI7cmV0dXJue3g6dC54LWUseTp0LnktZSx3aWR0aDp0LndpZHRoKzIqZSxoZWlnaHQ6dC5oZWlnaHQrMiplfX19c2UucHJvdG90eXBlLmNsYXNzTmFtZT0iQXJyb3ciLHIoc2UpLHcuYWRkR2V0dGVyU2V0dGVyKHNlLCJwb2ludGVyTGVuZ3RoIiwxMCxwKCkpLHcuYWRkR2V0dGVyU2V0dGVyKHNlLCJwb2ludGVyV2lkdGgiLDEwLHAoKSksdy5hZGRHZXR0ZXJTZXR0ZXIoc2UsInBvaW50ZXJBdEJlZ2lubmluZyIsITEpLHcuYWRkR2V0dGVyU2V0dGVyKHNlLCJwb2ludGVyQXRFbmRpbmciLCEwKTtjbGFzcyBvZSBleHRlbmRzIHp0e19zY2VuZUZ1bmModCl7dC5iZWdpblBhdGgoKSx0LmFyYygwLDAsdGhpcy5hdHRycy5yYWRpdXN8fDAsMCwyKk1hdGguUEksITEpLHQuY2xvc2VQYXRoKCksdC5maWxsU3Ryb2tlU2hhcGUodGhpcyl9Z2V0V2lkdGgoKXtyZXR1cm4gMip0aGlzLnJhZGl1cygpfWdldEhlaWdodCgpe3JldHVybiAyKnRoaXMucmFkaXVzKCl9c2V0V2lkdGgodCl7dGhpcy5yYWRpdXMoKSE9PXQvMiYmdGhpcy5yYWRpdXModC8yKX1zZXRIZWlnaHQodCl7dGhpcy5yYWRpdXMoKSE9PXQvMiYmdGhpcy5yYWRpdXModC8yKX19b2UucHJvdG90eXBlLl9jZW50cm9pZD0hMCxvZS5wcm90b3R5cGUuY2xhc3NOYW1lPSJDaXJjbGUiLG9lLnByb3RvdHlwZS5fYXR0cnNBZmZlY3RpbmdTaXplPVsicmFkaXVzIl0scihvZSksdy5hZGRHZXR0ZXJTZXR0ZXIob2UsInJhZGl1cyIsMCxwKCkpO2NsYXNzIGhlIGV4dGVuZHMgenR7X3NjZW5lRnVuYyh0KXt2YXIgZT10aGlzLnJhZGl1c1goKSxpPXRoaXMucmFkaXVzWSgpO3QuYmVnaW5QYXRoKCksdC5zYXZlKCksZSE9PWkmJnQuc2NhbGUoMSxpL2UpLHQuYXJjKDAsMCxlLDAsMipNYXRoLlBJLCExKSx0LnJlc3RvcmUoKSx0LmNsb3NlUGF0aCgpLHQuZmlsbFN0cm9rZVNoYXBlKHRoaXMpfWdldFdpZHRoKCl7cmV0dXJuIDIqdGhpcy5yYWRpdXNYKCl9Z2V0SGVpZ2h0KCl7cmV0dXJuIDIqdGhpcy5yYWRpdXNZKCl9c2V0V2lkdGgodCl7dGhpcy5yYWRpdXNYKHQvMil9c2V0SGVpZ2h0KHQpe3RoaXMucmFkaXVzWSh0LzIpfX1oZS5wcm90b3R5cGUuY2xhc3NOYW1lPSJFbGxpcHNlIixoZS5wcm90b3R5cGUuX2NlbnRyb2lkPSEwLGhlLnByb3RvdHlwZS5fYXR0cnNBZmZlY3RpbmdTaXplPVsicmFkaXVzWCIsInJhZGl1c1kiXSxyKGhlKSx3LmFkZENvbXBvbmVudHNHZXR0ZXJTZXR0ZXIoaGUsInJhZGl1cyIsWyJ4IiwieSJdKSx3LmFkZEdldHRlclNldHRlcihoZSwicmFkaXVzWCIsMCxwKCkpLHcuYWRkR2V0dGVyU2V0dGVyKGhlLCJyYWRpdXNZIiwwLHAoKSk7Y2xhc3MgbGUgZXh0ZW5kcyB6dHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLm9uKCJpbWFnZUNoYW5nZS5rb252YSIsKCgpPT57dGhpcy5fc2V0SW1hZ2VMb2FkKCl9KSksdGhpcy5fc2V0SW1hZ2VMb2FkKCl9X3NldEltYWdlTG9hZCgpe2NvbnN0IHQ9dGhpcy5pbWFnZSgpO3QmJnQuY29tcGxldGV8fHQmJjQ9PT10LnJlYWR5U3RhdGV8fHQmJnQuYWRkRXZlbnRMaXN0ZW5lciYmdC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoKCk9Pnt0aGlzLl9yZXF1ZXN0RHJhdygpfSkpfV91c2VCdWZmZXJDYW52YXMoKXtyZXR1cm4gc3VwZXIuX3VzZUJ1ZmZlckNhbnZhcyghMCl9X3NjZW5lRnVuYyh0KXtjb25zdCBlPXRoaXMuZ2V0V2lkdGgoKSxpPXRoaXMuZ2V0SGVpZ2h0KCkscj10aGlzLmF0dHJzLmltYWdlO2xldCBhO2lmKHIpe2NvbnN0IHQ9dGhpcy5hdHRycy5jcm9wV2lkdGgsbj10aGlzLmF0dHJzLmNyb3BIZWlnaHQ7YT10JiZuP1tyLHRoaXMuY3JvcFgoKSx0aGlzLmNyb3BZKCksdCxuLDAsMCxlLGldOltyLDAsMCxlLGldfSh0aGlzLmhhc0ZpbGwoKXx8dGhpcy5oYXNTdHJva2UoKSkmJih0LmJlZ2luUGF0aCgpLHQucmVjdCgwLDAsZSxpKSx0LmNsb3NlUGF0aCgpLHQuZmlsbFN0cm9rZVNoYXBlKHRoaXMpKSxyJiZ0LmRyYXdJbWFnZS5hcHBseSh0LGEpfV9oaXRGdW5jKHQpe3ZhciBlPXRoaXMud2lkdGgoKSxpPXRoaXMuaGVpZ2h0KCk7dC5iZWdpblBhdGgoKSx0LnJlY3QoMCwwLGUsaSksdC5jbG9zZVBhdGgoKSx0LmZpbGxTdHJva2VTaGFwZSh0aGlzKX1nZXRXaWR0aCgpe3ZhciB0LGU7cmV0dXJuIG51bGwhPT0odD10aGlzLmF0dHJzLndpZHRoKSYmdm9pZCAwIT09dD90Om51bGw9PT0oZT10aGlzLmltYWdlKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLndpZHRofWdldEhlaWdodCgpe3ZhciB0LGU7cmV0dXJuIG51bGwhPT0odD10aGlzLmF0dHJzLmhlaWdodCkmJnZvaWQgMCE9PXQ/dDpudWxsPT09KGU9dGhpcy5pbWFnZSgpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5oZWlnaHR9c3RhdGljIGZyb21VUkwodCxlKXt2YXIgaT1nLmNyZWF0ZUltYWdlRWxlbWVudCgpO2kub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGxlKHtpbWFnZTppfSk7ZSh0KX0saS5jcm9zc09yaWdpbj0iQW5vbnltb3VzIixpLnNyYz10fX1sZS5wcm90b3R5cGUuY2xhc3NOYW1lPSJJbWFnZSIscihsZSksdy5hZGRHZXR0ZXJTZXR0ZXIobGUsImltYWdlIiksdy5hZGRDb21wb25lbnRzR2V0dGVyU2V0dGVyKGxlLCJjcm9wIixbIngiLCJ5Iiwid2lkdGgiLCJoZWlnaHQiXSksdy5hZGRHZXR0ZXJTZXR0ZXIobGUsImNyb3BYIiwwLHAoKSksdy5hZGRHZXR0ZXJTZXR0ZXIobGUsImNyb3BZIiwwLHAoKSksdy5hZGRHZXR0ZXJTZXR0ZXIobGUsImNyb3BXaWR0aCIsMCxwKCkpLHcuYWRkR2V0dGVyU2V0dGVyKGxlLCJjcm9wSGVpZ2h0IiwwLHAoKSk7dmFyIGRlPVsiZm9udEZhbWlseSIsImZvbnRTaXplIiwiZm9udFN0eWxlIiwicGFkZGluZyIsImxpbmVIZWlnaHQiLCJ0ZXh0Iiwid2lkdGgiLCJoZWlnaHQiXSxjZT0idXAiLGdlPSJyaWdodCIsdWU9ImRvd24iLGZlPSJsZWZ0IixwZT1kZS5sZW5ndGg7Y2xhc3MgdmUgZXh0ZW5kcyBqdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLm9uKCJhZGQua29udmEiLChmdW5jdGlvbih0KXt0aGlzLl9hZGRMaXN0ZW5lcnModC5jaGlsZCksdGhpcy5fc3luYygpfSkpfWdldFRleHQoKXtyZXR1cm4gdGhpcy5maW5kKCJUZXh0IilbMF19Z2V0VGFnKCl7cmV0dXJuIHRoaXMuZmluZCgiVGFnIilbMF19X2FkZExpc3RlbmVycyh0KXt2YXIgZSxpPXRoaXMscj1mdW5jdGlvbigpe2kuX3N5bmMoKX07Zm9yKGU9MDtlPHBlO2UrKyl0Lm9uKGRlW2VdKyJDaGFuZ2Uua29udmEiLHIpfWdldFdpZHRoKCl7cmV0dXJuIHRoaXMuZ2V0VGV4dCgpLndpZHRoKCl9Z2V0SGVpZ2h0KCl7cmV0dXJuIHRoaXMuZ2V0VGV4dCgpLmhlaWdodCgpfV9zeW5jKCl7dmFyIHQsZSxpLHIsYSxuLHMsbz10aGlzLmdldFRleHQoKSxoPXRoaXMuZ2V0VGFnKCk7aWYobyYmaCl7c3dpdGNoKHQ9by53aWR0aCgpLGU9by5oZWlnaHQoKSxpPWgucG9pbnRlckRpcmVjdGlvbigpLHI9aC5wb2ludGVyV2lkdGgoKSxzPWgucG9pbnRlckhlaWdodCgpLGE9MCxuPTAsaSl7Y2FzZSBjZTphPXQvMixuPS0xKnM7YnJlYWs7Y2FzZSBnZTphPXQrcixuPWUvMjticmVhaztjYXNlIHVlOmE9dC8yLG49ZStzO2JyZWFrO2Nhc2UgZmU6YT0tMSpyLG49ZS8yfWguc2V0QXR0cnMoe3g6LTEqYSx5Oi0xKm4sd2lkdGg6dCxoZWlnaHQ6ZX0pLG8uc2V0QXR0cnMoe3g6LTEqYSx5Oi0xKm59KX19fXZlLnByb3RvdHlwZS5jbGFzc05hbWU9IkxhYmVsIixyKHZlKTtjbGFzcyBtZSBleHRlbmRzIHp0e19zY2VuZUZ1bmModCl7dmFyIGU9dGhpcy53aWR0aCgpLGk9dGhpcy5oZWlnaHQoKSxyPXRoaXMucG9pbnRlckRpcmVjdGlvbigpLGE9dGhpcy5wb2ludGVyV2lkdGgoKSxuPXRoaXMucG9pbnRlckhlaWdodCgpLHM9dGhpcy5jb3JuZXJSYWRpdXMoKTtsZXQgbz0wLGg9MCxsPTAsZD0wOyJudW1iZXIiPT10eXBlb2Ygcz9vPWg9bD1kPU1hdGgubWluKHMsZS8yLGkvMik6KG89TWF0aC5taW4oc1swXXx8MCxlLzIsaS8yKSxoPU1hdGgubWluKHNbMV18fDAsZS8yLGkvMiksZD1NYXRoLm1pbihzWzJdfHwwLGUvMixpLzIpLGw9TWF0aC5taW4oc1szXXx8MCxlLzIsaS8yKSksdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhvLDApLHI9PT1jZSYmKHQubGluZVRvKChlLWEpLzIsMCksdC5saW5lVG8oZS8yLC0xKm4pLHQubGluZVRvKChlK2EpLzIsMCkpLHQubGluZVRvKGUtaCwwKSx0LmFyYyhlLWgsaCxoLDMqTWF0aC5QSS8yLDAsITEpLHI9PT1nZSYmKHQubGluZVRvKGUsKGktbikvMiksdC5saW5lVG8oZSthLGkvMiksdC5saW5lVG8oZSwoaStuKS8yKSksdC5saW5lVG8oZSxpLWQpLHQuYXJjKGUtZCxpLWQsZCwwLE1hdGguUEkvMiwhMSkscj09PXVlJiYodC5saW5lVG8oKGUrYSkvMixpKSx0LmxpbmVUbyhlLzIsaStuKSx0LmxpbmVUbygoZS1hKS8yLGkpKSx0LmxpbmVUbyhsLGkpLHQuYXJjKGwsaS1sLGwsTWF0aC5QSS8yLE1hdGguUEksITEpLHI9PT1mZSYmKHQubGluZVRvKDAsKGkrbikvMiksdC5saW5lVG8oLTEqYSxpLzIpLHQubGluZVRvKDAsKGktbikvMikpLHQubGluZVRvKDAsbyksdC5hcmMobyxvLG8sTWF0aC5QSSwzKk1hdGguUEkvMiwhMSksdC5jbG9zZVBhdGgoKSx0LmZpbGxTdHJva2VTaGFwZSh0aGlzKX1nZXRTZWxmUmVjdCgpe3ZhciB0PTAsZT0wLGk9dGhpcy5wb2ludGVyV2lkdGgoKSxyPXRoaXMucG9pbnRlckhlaWdodCgpLGE9dGhpcy5wb2ludGVyRGlyZWN0aW9uKCksbj10aGlzLndpZHRoKCkscz10aGlzLmhlaWdodCgpO3JldHVybiBhPT09Y2U/KGUtPXIscys9cik6YT09PXVlP3MrPXI6YT09PWZlPyh0LT0xLjUqaSxuKz1pKTphPT09Z2UmJihuKz0xLjUqaSkse3g6dCx5OmUsd2lkdGg6bixoZWlnaHQ6c319fW1lLnByb3RvdHlwZS5jbGFzc05hbWU9IlRhZyIscihtZSksdy5hZGRHZXR0ZXJTZXR0ZXIobWUsInBvaW50ZXJEaXJlY3Rpb24iLCJub25lIiksdy5hZGRHZXR0ZXJTZXR0ZXIobWUsInBvaW50ZXJXaWR0aCIsMCxwKCkpLHcuYWRkR2V0dGVyU2V0dGVyKG1lLCJwb2ludGVySGVpZ2h0IiwwLHAoKSksdy5hZGRHZXR0ZXJTZXR0ZXIobWUsImNvcm5lclJhZGl1cyIsMCx2KDQpKTtjbGFzcyBfZSBleHRlbmRzIHp0e19zY2VuZUZ1bmModCl7dmFyIGU9dGhpcy5jb3JuZXJSYWRpdXMoKSxpPXRoaXMud2lkdGgoKSxyPXRoaXMuaGVpZ2h0KCk7aWYodC5iZWdpblBhdGgoKSxlKXtsZXQgYT0wLG49MCxzPTAsbz0wOyJudW1iZXIiPT10eXBlb2YgZT9hPW49cz1vPU1hdGgubWluKGUsaS8yLHIvMik6KGE9TWF0aC5taW4oZVswXXx8MCxpLzIsci8yKSxuPU1hdGgubWluKGVbMV18fDAsaS8yLHIvMiksbz1NYXRoLm1pbihlWzJdfHwwLGkvMixyLzIpLHM9TWF0aC5taW4oZVszXXx8MCxpLzIsci8yKSksdC5tb3ZlVG8oYSwwKSx0LmxpbmVUbyhpLW4sMCksdC5hcmMoaS1uLG4sbiwzKk1hdGguUEkvMiwwLCExKSx0LmxpbmVUbyhpLHItbyksdC5hcmMoaS1vLHItbyxvLDAsTWF0aC5QSS8yLCExKSx0LmxpbmVUbyhzLHIpLHQuYXJjKHMsci1zLHMsTWF0aC5QSS8yLE1hdGguUEksITEpLHQubGluZVRvKDAsYSksdC5hcmMoYSxhLGEsTWF0aC5QSSwzKk1hdGguUEkvMiwhMSl9ZWxzZSB0LnJlY3QoMCwwLGkscik7dC5jbG9zZVBhdGgoKSx0LmZpbGxTdHJva2VTaGFwZSh0aGlzKX19X2UucHJvdG90eXBlLmNsYXNzTmFtZT0iUmVjdCIscihfZSksdy5hZGRHZXR0ZXJTZXR0ZXIoX2UsImNvcm5lclJhZGl1cyIsMCx2KDQpKTtjbGFzcyB5ZSBleHRlbmRzIHp0e19zY2VuZUZ1bmModCl7Y29uc3QgZT10aGlzLl9nZXRQb2ludHMoKTt0LmJlZ2luUGF0aCgpLHQubW92ZVRvKGVbMF0ueCxlWzBdLnkpO2Zvcih2YXIgaT0xO2k8ZS5sZW5ndGg7aSsrKXQubGluZVRvKGVbaV0ueCxlW2ldLnkpO3QuY2xvc2VQYXRoKCksdC5maWxsU3Ryb2tlU2hhcGUodGhpcyl9X2dldFBvaW50cygpe2NvbnN0IHQ9dGhpcy5hdHRycy5zaWRlcyxlPXRoaXMuYXR0cnMucmFkaXVzfHwwLGk9W107Zm9yKHZhciByPTA7cjx0O3IrKylpLnB1c2goe3g6ZSpNYXRoLnNpbigyKnIqTWF0aC5QSS90KSx5Oi0xKmUqTWF0aC5jb3MoMipyKk1hdGguUEkvdCl9KTtyZXR1cm4gaX1nZXRTZWxmUmVjdCgpe2NvbnN0IHQ9dGhpcy5fZ2V0UG9pbnRzKCk7dmFyIGU9dFswXS54LGk9dFswXS55LHI9dFswXS54LGE9dFswXS55O3JldHVybiB0LmZvckVhY2goKHQ9PntlPU1hdGgubWluKGUsdC54KSxpPU1hdGgubWF4KGksdC54KSxyPU1hdGgubWluKHIsdC55KSxhPU1hdGgubWF4KGEsdC55KX0pKSx7eDplLHk6cix3aWR0aDppLWUsaGVpZ2h0OmEtcn19Z2V0V2lkdGgoKXtyZXR1cm4gMip0aGlzLnJhZGl1cygpfWdldEhlaWdodCgpe3JldHVybiAyKnRoaXMucmFkaXVzKCl9c2V0V2lkdGgodCl7dGhpcy5yYWRpdXModC8yKX1zZXRIZWlnaHQodCl7dGhpcy5yYWRpdXModC8yKX19eWUucHJvdG90eXBlLmNsYXNzTmFtZT0iUmVndWxhclBvbHlnb24iLHllLnByb3RvdHlwZS5fY2VudHJvaWQ9ITAseWUucHJvdG90eXBlLl9hdHRyc0FmZmVjdGluZ1NpemU9WyJyYWRpdXMiXSxyKHllKSx3LmFkZEdldHRlclNldHRlcih5ZSwicmFkaXVzIiwwLHAoKSksdy5hZGRHZXR0ZXJTZXR0ZXIoeWUsInNpZGVzIiwwLHAoKSk7dmFyIHhlPTIqTWF0aC5QSTtjbGFzcyBiZSBleHRlbmRzIHp0e19zY2VuZUZ1bmModCl7dC5iZWdpblBhdGgoKSx0LmFyYygwLDAsdGhpcy5pbm5lclJhZGl1cygpLDAseGUsITEpLHQubW92ZVRvKHRoaXMub3V0ZXJSYWRpdXMoKSwwKSx0LmFyYygwLDAsdGhpcy5vdXRlclJhZGl1cygpLHhlLDAsITApLHQuY2xvc2VQYXRoKCksdC5maWxsU3Ryb2tlU2hhcGUodGhpcyl9Z2V0V2lkdGgoKXtyZXR1cm4gMip0aGlzLm91dGVyUmFkaXVzKCl9Z2V0SGVpZ2h0KCl7cmV0dXJuIDIqdGhpcy5vdXRlclJhZGl1cygpfXNldFdpZHRoKHQpe3RoaXMub3V0ZXJSYWRpdXModC8yKX1zZXRIZWlnaHQodCl7dGhpcy5vdXRlclJhZGl1cyh0LzIpfX1iZS5wcm90b3R5cGUuY2xhc3NOYW1lPSJSaW5nIixiZS5wcm90b3R5cGUuX2NlbnRyb2lkPSEwLGJlLnByb3RvdHlwZS5fYXR0cnNBZmZlY3RpbmdTaXplPVsiaW5uZXJSYWRpdXMiLCJvdXRlclJhZGl1cyJdLHIoYmUpLHcuYWRkR2V0dGVyU2V0dGVyKGJlLCJpbm5lclJhZGl1cyIsMCxwKCkpLHcuYWRkR2V0dGVyU2V0dGVyKGJlLCJvdXRlclJhZGl1cyIsMCxwKCkpO2NsYXNzIFNlIGV4dGVuZHMgenR7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fdXBkYXRlZD0hMCx0aGlzLmFuaW09bmV3IHF0KCgoKT0+e3ZhciB0PXRoaXMuX3VwZGF0ZWQ7cmV0dXJuIHRoaXMuX3VwZGF0ZWQ9ITEsdH0pKSx0aGlzLm9uKCJhbmltYXRpb25DaGFuZ2Uua29udmEiLChmdW5jdGlvbigpe3RoaXMuZnJhbWVJbmRleCgwKX0pKSx0aGlzLm9uKCJmcmFtZUluZGV4Q2hhbmdlLmtvbnZhIiwoZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVkPSEwfSkpLHRoaXMub24oImZyYW1lUmF0ZUNoYW5nZS5rb252YSIsKGZ1bmN0aW9uKCl7dGhpcy5hbmltLmlzUnVubmluZygpJiYoY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKSx0aGlzLl9zZXRJbnRlcnZhbCgpKX0pKX1fc2NlbmVGdW5jKHQpe3ZhciBlPXRoaXMuYW5pbWF0aW9uKCksaT10aGlzLmZyYW1lSW5kZXgoKSxyPTQqaSxhPXRoaXMuYW5pbWF0aW9ucygpW2VdLG49dGhpcy5mcmFtZU9mZnNldHMoKSxzPWFbciswXSxvPWFbcisxXSxoPWFbcisyXSxsPWFbciszXSxkPXRoaXMuaW1hZ2UoKTtpZigodGhpcy5oYXNGaWxsKCl8fHRoaXMuaGFzU3Ryb2tlKCkpJiYodC5iZWdpblBhdGgoKSx0LnJlY3QoMCwwLGgsbCksdC5jbG9zZVBhdGgoKSx0LmZpbGxTdHJva2VTaGFwZSh0aGlzKSksZClpZihuKXt2YXIgYz1uW2VdLGc9MippO3QuZHJhd0ltYWdlKGQscyxvLGgsbCxjW2crMF0sY1tnKzFdLGgsbCl9ZWxzZSB0LmRyYXdJbWFnZShkLHMsbyxoLGwsMCwwLGgsbCl9X2hpdEZ1bmModCl7dmFyIGU9dGhpcy5hbmltYXRpb24oKSxpPXRoaXMuZnJhbWVJbmRleCgpLHI9NCppLGE9dGhpcy5hbmltYXRpb25zKClbZV0sbj10aGlzLmZyYW1lT2Zmc2V0cygpLHM9YVtyKzJdLG89YVtyKzNdO2lmKHQuYmVnaW5QYXRoKCksbil7dmFyIGg9bltlXSxsPTIqaTt0LnJlY3QoaFtsKzBdLGhbbCsxXSxzLG8pfWVsc2UgdC5yZWN0KDAsMCxzLG8pO3QuY2xvc2VQYXRoKCksdC5maWxsU2hhcGUodGhpcyl9X3VzZUJ1ZmZlckNhbnZhcygpe3JldHVybiBzdXBlci5fdXNlQnVmZmVyQ2FudmFzKCEwKX1fc2V0SW50ZXJ2YWwoKXt2YXIgdD10aGlzO3RoaXMuaW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCl7dC5fdXBkYXRlSW5kZXgoKX0pLDFlMy90aGlzLmZyYW1lUmF0ZSgpKX1zdGFydCgpe2lmKCF0aGlzLmlzUnVubmluZygpKXt2YXIgdD10aGlzLmdldExheWVyKCk7dGhpcy5hbmltLnNldExheWVycyh0KSx0aGlzLl9zZXRJbnRlcnZhbCgpLHRoaXMuYW5pbS5zdGFydCgpfX1zdG9wKCl7dGhpcy5hbmltLnN0b3AoKSxjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpfWlzUnVubmluZygpe3JldHVybiB0aGlzLmFuaW0uaXNSdW5uaW5nKCl9X3VwZGF0ZUluZGV4KCl7dmFyIHQ9dGhpcy5mcmFtZUluZGV4KCksZT10aGlzLmFuaW1hdGlvbigpO3Q8dGhpcy5hbmltYXRpb25zKClbZV0ubGVuZ3RoLzQtMT90aGlzLmZyYW1lSW5kZXgodCsxKTp0aGlzLmZyYW1lSW5kZXgoMCl9fVNlLnByb3RvdHlwZS5jbGFzc05hbWU9IlNwcml0ZSIscihTZSksdy5hZGRHZXR0ZXJTZXR0ZXIoU2UsImFuaW1hdGlvbiIpLHcuYWRkR2V0dGVyU2V0dGVyKFNlLCJhbmltYXRpb25zIiksdy5hZGRHZXR0ZXJTZXR0ZXIoU2UsImZyYW1lT2Zmc2V0cyIpLHcuYWRkR2V0dGVyU2V0dGVyKFNlLCJpbWFnZSIpLHcuYWRkR2V0dGVyU2V0dGVyKFNlLCJmcmFtZUluZGV4IiwwLHAoKSksdy5hZGRHZXR0ZXJTZXR0ZXIoU2UsImZyYW1lUmF0ZSIsMTcscCgpKSx3LmJhY2tDb21wYXQoU2Use2luZGV4OiJmcmFtZUluZGV4IixnZXRJbmRleDoiZ2V0RnJhbWVJbmRleCIsc2V0SW5kZXg6InNldEZyYW1lSW5kZXgifSk7Y2xhc3Mgd2UgZXh0ZW5kcyB6dHtfc2NlbmVGdW5jKHQpe3ZhciBlPXRoaXMuaW5uZXJSYWRpdXMoKSxpPXRoaXMub3V0ZXJSYWRpdXMoKSxyPXRoaXMubnVtUG9pbnRzKCk7dC5iZWdpblBhdGgoKSx0Lm1vdmVUbygwLDAtaSk7Zm9yKHZhciBhPTE7YTwyKnI7YSsrKXt2YXIgbj1hJTI9PTA/aTplLHM9bipNYXRoLnNpbihhKk1hdGguUEkvciksbz0tMSpuKk1hdGguY29zKGEqTWF0aC5QSS9yKTt0LmxpbmVUbyhzLG8pfXQuY2xvc2VQYXRoKCksdC5maWxsU3Ryb2tlU2hhcGUodGhpcyl9Z2V0V2lkdGgoKXtyZXR1cm4gMip0aGlzLm91dGVyUmFkaXVzKCl9Z2V0SGVpZ2h0KCl7cmV0dXJuIDIqdGhpcy5vdXRlclJhZGl1cygpfXNldFdpZHRoKHQpe3RoaXMub3V0ZXJSYWRpdXModC8yKX1zZXRIZWlnaHQodCl7dGhpcy5vdXRlclJhZGl1cyh0LzIpfX1mdW5jdGlvbiBDZSh0KXtyZXR1cm4gQXJyYXkuZnJvbSh0KX13ZS5wcm90b3R5cGUuY2xhc3NOYW1lPSJTdGFyIix3ZS5wcm90b3R5cGUuX2NlbnRyb2lkPSEwLHdlLnByb3RvdHlwZS5fYXR0cnNBZmZlY3RpbmdTaXplPVsiaW5uZXJSYWRpdXMiLCJvdXRlclJhZGl1cyJdLHIod2UpLHcuYWRkR2V0dGVyU2V0dGVyKHdlLCJudW1Qb2ludHMiLDUscCgpKSx3LmFkZEdldHRlclNldHRlcih3ZSwiaW5uZXJSYWRpdXMiLDAscCgpKSx3LmFkZEdldHRlclNldHRlcih3ZSwib3V0ZXJSYWRpdXMiLDAscCgpKTt2YXIga2UsUGU9ImF1dG8iLFRlPSJqdXN0aWZ5IixBZT0ibGVmdCIsTWU9Im1pZGRsZSIsR2U9Im5vcm1hbCIsRWU9IiAiLFJlPVsiZm9udEZhbWlseSIsImZvbnRTaXplIiwiZm9udFN0eWxlIiwiZm9udFZhcmlhbnQiLCJwYWRkaW5nIiwiYWxpZ24iLCJ2ZXJ0aWNhbEFsaWduIiwibGluZUhlaWdodCIsInRleHQiLCJ3aWR0aCIsImhlaWdodCIsIndyYXAiLCJlbGxpcHNpcyIsImxldHRlclNwYWNpbmciXSxMZT1SZS5sZW5ndGg7ZnVuY3Rpb24gRGUoKXtyZXR1cm4ga2V8fChrZT1nLmNyZWF0ZUNhbnZhc0VsZW1lbnQoKS5nZXRDb250ZXh0KCIyZCIpKX1jbGFzcyBPZSBleHRlbmRzIHp0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKGZ1bmN0aW9uKHQpe3JldHVybih0PXR8fHt9KS5maWxsTGluZWFyR3JhZGllbnRDb2xvclN0b3BzfHx0LmZpbGxSYWRpYWxHcmFkaWVudENvbG9yU3RvcHN8fHQuZmlsbFBhdHRlcm5JbWFnZXx8KHQuZmlsbD10LmZpbGx8fCJibGFjayIpLHR9KHQpKSx0aGlzLl9wYXJ0aWFsVGV4dFg9MCx0aGlzLl9wYXJ0aWFsVGV4dFk9MDtmb3IodmFyIGU9MDtlPExlO2UrKyl0aGlzLm9uKFJlW2VdKyJDaGFuZ2Uua29udmEiLHRoaXMuX3NldFRleHREYXRhKTt0aGlzLl9zZXRUZXh0RGF0YSgpfV9zY2VuZUZ1bmModCl7dmFyIGU9dGhpcy50ZXh0QXJyLGk9ZS5sZW5ndGg7aWYodGhpcy50ZXh0KCkpe3ZhciByLGE9dGhpcy5wYWRkaW5nKCksbj10aGlzLmZvbnRTaXplKCkscz10aGlzLmxpbmVIZWlnaHQoKSpuLG89dGhpcy52ZXJ0aWNhbEFsaWduKCksaD0wLGw9dGhpcy5hbGlnbigpLGQ9dGhpcy5nZXRXaWR0aCgpLGM9dGhpcy5sZXR0ZXJTcGFjaW5nKCksZz10aGlzLmZpbGwoKSx1PXRoaXMudGV4dERlY29yYXRpb24oKSxmPS0xIT09dS5pbmRleE9mKCJ1bmRlcmxpbmUiKSxwPS0xIT09dS5pbmRleE9mKCJsaW5lLXRocm91Z2giKSx2PTAsbT0odj1zLzIsMCksXz0wO2Zvcih0LnNldEF0dHIoImZvbnQiLHRoaXMuX2dldENvbnRleHRGb250KCkpLHQuc2V0QXR0cigidGV4dEJhc2VsaW5lIixNZSksdC5zZXRBdHRyKCJ0ZXh0QWxpZ24iLEFlKSxvPT09TWU/aD0odGhpcy5nZXRIZWlnaHQoKS1pKnMtMiphKS8yOiJib3R0b20iPT09byYmKGg9dGhpcy5nZXRIZWlnaHQoKS1pKnMtMiphKSx0LnRyYW5zbGF0ZShhLGgrYSkscj0wO3I8aTtyKyspe209MCxfPTA7dmFyIHkseCxiLFM9ZVtyXSx3PVMudGV4dCxDPVMud2lkdGgsaz1yIT09aS0xO2lmKHQuc2F2ZSgpLCJyaWdodCI9PT1sP20rPWQtQy0yKmE6ImNlbnRlciI9PT1sJiYobSs9KGQtQy0yKmEpLzIpLGYmJih0LnNhdmUoKSx0LmJlZ2luUGF0aCgpLHQubW92ZVRvKG0sditfK01hdGgucm91bmQobi8yKSkseD0wPT09KHk9dy5zcGxpdCgiICIpLmxlbmd0aC0xKSxiPWw9PT1UZSYmayYmIXg/ZC0yKmE6Qyx0LmxpbmVUbyhtK01hdGgucm91bmQoYiksditfK01hdGgucm91bmQobi8yKSksdC5saW5lV2lkdGg9bi8xNSx0LnN0cm9rZVN0eWxlPWcsdC5zdHJva2UoKSx0LnJlc3RvcmUoKSkscCYmKHQuc2F2ZSgpLHQuYmVnaW5QYXRoKCksdC5tb3ZlVG8obSx2K18pLHg9MD09PSh5PXcuc3BsaXQoIiAiKS5sZW5ndGgtMSksYj1sPT09VGUmJmsmJiF4P2QtMiphOkMsdC5saW5lVG8obStNYXRoLnJvdW5kKGIpLHYrXyksdC5saW5lV2lkdGg9bi8xNSx0LnN0cm9rZVN0eWxlPWcsdC5zdHJva2UoKSx0LnJlc3RvcmUoKSksMCE9PWN8fGw9PT1UZSl7eT13LnNwbGl0KCIgIikubGVuZ3RoLTE7Zm9yKHZhciBQPUNlKHcpLFQ9MDtUPFAubGVuZ3RoO1QrKyl7dmFyIEE9UFtUXTsiICI9PT1BJiZyIT09aS0xJiZsPT09VGUmJihtKz0oZC0yKmEtQykveSksdGhpcy5fcGFydGlhbFRleHRYPW0sdGhpcy5fcGFydGlhbFRleHRZPXYrXyx0aGlzLl9wYXJ0aWFsVGV4dD1BLHQuZmlsbFN0cm9rZVNoYXBlKHRoaXMpLG0rPXRoaXMubWVhc3VyZVNpemUoQSkud2lkdGgrY319ZWxzZSB0aGlzLl9wYXJ0aWFsVGV4dFg9bSx0aGlzLl9wYXJ0aWFsVGV4dFk9ditfLHRoaXMuX3BhcnRpYWxUZXh0PXcsdC5maWxsU3Ryb2tlU2hhcGUodGhpcyk7dC5yZXN0b3JlKCksaT4xJiYodis9cyl9fX1faGl0RnVuYyh0KXt2YXIgZT10aGlzLmdldFdpZHRoKCksaT10aGlzLmdldEhlaWdodCgpO3QuYmVnaW5QYXRoKCksdC5yZWN0KDAsMCxlLGkpLHQuY2xvc2VQYXRoKCksdC5maWxsU3Ryb2tlU2hhcGUodGhpcyl9c2V0VGV4dCh0KXt2YXIgZT1nLl9pc1N0cmluZyh0KT90Om51bGw9PXQ/IiI6dCsiIjtyZXR1cm4gdGhpcy5fc2V0QXR0cigidGV4dCIsZSksdGhpc31nZXRXaWR0aCgpe3JldHVybiB0aGlzLmF0dHJzLndpZHRoPT09UGV8fHZvaWQgMD09PXRoaXMuYXR0cnMud2lkdGg/dGhpcy5nZXRUZXh0V2lkdGgoKSsyKnRoaXMucGFkZGluZygpOnRoaXMuYXR0cnMud2lkdGh9Z2V0SGVpZ2h0KCl7cmV0dXJuIHRoaXMuYXR0cnMuaGVpZ2h0PT09UGV8fHZvaWQgMD09PXRoaXMuYXR0cnMuaGVpZ2h0P3RoaXMuZm9udFNpemUoKSp0aGlzLnRleHRBcnIubGVuZ3RoKnRoaXMubGluZUhlaWdodCgpKzIqdGhpcy5wYWRkaW5nKCk6dGhpcy5hdHRycy5oZWlnaHR9Z2V0VGV4dFdpZHRoKCl7cmV0dXJuIHRoaXMudGV4dFdpZHRofWdldFRleHRIZWlnaHQoKXtyZXR1cm4gZy53YXJuKCJ0ZXh0LmdldFRleHRIZWlnaHQoKSBtZXRob2QgaXMgZGVwcmVjYXRlZC4gVXNlIHRleHQuaGVpZ2h0KCkgLSBmb3IgZnVsbCBoZWlnaHQgYW5kIHRleHQuZm9udFNpemUoKSAtIGZvciBvbmUgbGluZSBoZWlnaHQuIiksdGhpcy50ZXh0SGVpZ2h0fW1lYXN1cmVTaXplKHQpe3ZhciBlLGk9RGUoKSxyPXRoaXMuZm9udFNpemUoKTtyZXR1cm4gaS5zYXZlKCksaS5mb250PXRoaXMuX2dldENvbnRleHRGb250KCksZT1pLm1lYXN1cmVUZXh0KHQpLGkucmVzdG9yZSgpLHt3aWR0aDplLndpZHRoLGhlaWdodDpyfX1fZ2V0Q29udGV4dEZvbnQoKXtyZXR1cm4gdGhpcy5mb250U3R5bGUoKStFZSt0aGlzLmZvbnRWYXJpYW50KCkrRWUrKHRoaXMuZm9udFNpemUoKSsicHggIikrdGhpcy5mb250RmFtaWx5KCkuc3BsaXQoIiwiKS5tYXAoKHQ9Pntjb25zdCBlPSh0PXQudHJpbSgpKS5pbmRleE9mKCIgIik+PTAsaT10LmluZGV4T2YoJyInKT49MHx8dC5pbmRleE9mKCInIik+PTA7cmV0dXJuIGUmJiFpJiYodD1gIiR7dH0iYCksdH0pKS5qb2luKCIsICIpfV9hZGRUZXh0TGluZSh0KXt0aGlzLmFsaWduKCk9PT1UZSYmKHQ9dC50cmltKCkpO3ZhciBlPXRoaXMuX2dldFRleHRXaWR0aCh0KTtyZXR1cm4gdGhpcy50ZXh0QXJyLnB1c2goe3RleHQ6dCx3aWR0aDplfSl9X2dldFRleHRXaWR0aCh0KXt2YXIgZT10aGlzLmxldHRlclNwYWNpbmcoKSxpPXQubGVuZ3RoO3JldHVybiBEZSgpLm1lYXN1cmVUZXh0KHQpLndpZHRoKyhpP2UqKGktMSk6MCl9X3NldFRleHREYXRhKCl7dmFyIHQ9dGhpcy50ZXh0KCkuc3BsaXQoIlxuIiksZT0rdGhpcy5mb250U2l6ZSgpLGk9MCxyPXRoaXMubGluZUhlaWdodCgpKmUsYT10aGlzLmF0dHJzLndpZHRoLG49dGhpcy5hdHRycy5oZWlnaHQscz1hIT09UGUmJnZvaWQgMCE9PWEsbz1uIT09UGUmJnZvaWQgMCE9PW4saD10aGlzLnBhZGRpbmcoKSxsPWEtMipoLGQ9bi0yKmgsYz0wLGc9dGhpcy53cmFwKCksdT0ibm9uZSIhPT1nLGY9ImNoYXIiIT09ZyYmdSxwPXRoaXMuZWxsaXBzaXMoKTt0aGlzLnRleHRBcnI9W10sRGUoKS5mb250PXRoaXMuX2dldENvbnRleHRGb250KCk7Zm9yKHZhciB2PXA/dGhpcy5fZ2V0VGV4dFdpZHRoKCLigKYiKTowLG09MCxfPXQubGVuZ3RoO208XzsrK20pe3ZhciB5PXRbbV0seD10aGlzLl9nZXRUZXh0V2lkdGgoeSk7aWYocyYmeD5sKWZvcig7eS5sZW5ndGg+MDspe2Zvcih2YXIgYj0wLFM9eS5sZW5ndGgsdz0iIixDPTA7YjxTOyl7dmFyIGs9YitTPj4+MSxQPXkuc2xpY2UoMCxrKzEpLFQ9dGhpcy5fZ2V0VGV4dFdpZHRoKFApK3Y7VDw9bD8oYj1rKzEsdz1QLEM9VCk6Uz1rfWlmKCF3KWJyZWFrO2lmKGYpe3ZhciBBLE09eVt3Lmxlbmd0aF07KEE9KE09PT1FZXx8Ii0iPT09TSkmJkM8PWw/dy5sZW5ndGg6TWF0aC5tYXgody5sYXN0SW5kZXhPZihFZSksdy5sYXN0SW5kZXhPZigiLSIpKSsxKT4wJiYoYj1BLHc9dy5zbGljZSgwLGIpLEM9dGhpcy5fZ2V0VGV4dFdpZHRoKHcpKX1pZih3PXcudHJpbVJpZ2h0KCksdGhpcy5fYWRkVGV4dExpbmUodyksaT1NYXRoLm1heChpLEMpLGMrPXIsIXV8fG8mJmMrcj5kKXt2YXIgRz10aGlzLnRleHRBcnJbdGhpcy50ZXh0QXJyLmxlbmd0aC0xXTtpZihHKWlmKHApdGhpcy5fZ2V0VGV4dFdpZHRoKEcudGV4dCsi4oCmIik8bHx8KEcudGV4dD1HLnRleHQuc2xpY2UoMCxHLnRleHQubGVuZ3RoLTMpKSx0aGlzLnRleHRBcnIuc3BsaWNlKHRoaXMudGV4dEFyci5sZW5ndGgtMSwxKSx0aGlzLl9hZGRUZXh0TGluZShHLnRleHQrIuKApiIpO2JyZWFrfWlmKCh5PSh5PXkuc2xpY2UoYikpLnRyaW1MZWZ0KCkpLmxlbmd0aD4wJiYoeD10aGlzLl9nZXRUZXh0V2lkdGgoeSkpPD1sKXt0aGlzLl9hZGRUZXh0TGluZSh5KSxjKz1yLGk9TWF0aC5tYXgoaSx4KTticmVha319ZWxzZSB0aGlzLl9hZGRUZXh0TGluZSh5KSxjKz1yLGk9TWF0aC5tYXgoaSx4KTtpZihvJiZjK3I+ZClicmVha310aGlzLnRleHRIZWlnaHQ9ZSx0aGlzLnRleHRXaWR0aD1pfWdldFN0cm9rZVNjYWxlRW5hYmxlZCgpe3JldHVybiEwfX1PZS5wcm90b3R5cGUuX2ZpbGxGdW5jPWZ1bmN0aW9uKHQpe3QuZmlsbFRleHQodGhpcy5fcGFydGlhbFRleHQsdGhpcy5fcGFydGlhbFRleHRYLHRoaXMuX3BhcnRpYWxUZXh0WSl9LE9lLnByb3RvdHlwZS5fc3Ryb2tlRnVuYz1mdW5jdGlvbih0KXt0LnN0cm9rZVRleHQodGhpcy5fcGFydGlhbFRleHQsdGhpcy5fcGFydGlhbFRleHRYLHRoaXMuX3BhcnRpYWxUZXh0WSl9LE9lLnByb3RvdHlwZS5jbGFzc05hbWU9IlRleHQiLE9lLnByb3RvdHlwZS5fYXR0cnNBZmZlY3RpbmdTaXplPVsidGV4dCIsImZvbnRTaXplIiwicGFkZGluZyIsIndyYXAiLCJsaW5lSGVpZ2h0IiwibGV0dGVyU3BhY2luZyJdLHIoT2UpLHcub3ZlcldyaXRlU2V0dGVyKE9lLCJ3aWR0aCIsbSgpKSx3Lm92ZXJXcml0ZVNldHRlcihPZSwiaGVpZ2h0IixtKCkpLHcuYWRkR2V0dGVyU2V0dGVyKE9lLCJmb250RmFtaWx5IiwiQXJpYWwiKSx3LmFkZEdldHRlclNldHRlcihPZSwiZm9udFNpemUiLDEyLHAoKSksdy5hZGRHZXR0ZXJTZXR0ZXIoT2UsImZvbnRTdHlsZSIsR2UpLHcuYWRkR2V0dGVyU2V0dGVyKE9lLCJmb250VmFyaWFudCIsR2UpLHcuYWRkR2V0dGVyU2V0dGVyKE9lLCJwYWRkaW5nIiwwLHAoKSksdy5hZGRHZXR0ZXJTZXR0ZXIoT2UsImFsaWduIixBZSksdy5hZGRHZXR0ZXJTZXR0ZXIoT2UsInZlcnRpY2FsQWxpZ24iLCJ0b3AiKSx3LmFkZEdldHRlclNldHRlcihPZSwibGluZUhlaWdodCIsMSxwKCkpLHcuYWRkR2V0dGVyU2V0dGVyKE9lLCJ3cmFwIiwid29yZCIpLHcuYWRkR2V0dGVyU2V0dGVyKE9lLCJlbGxpcHNpcyIsITEseCgpKSx3LmFkZEdldHRlclNldHRlcihPZSwibGV0dGVyU3BhY2luZyIsMCxwKCkpLHcuYWRkR2V0dGVyU2V0dGVyKE9lLCJ0ZXh0IiwiIixfKCkpLHcuYWRkR2V0dGVyU2V0dGVyKE9lLCJ0ZXh0RGVjb3JhdGlvbiIsIiIpO3ZhciBJZT0ibm9ybWFsIjtmdW5jdGlvbiBGZSh0KXt0LmZpbGxUZXh0KHRoaXMucGFydGlhbFRleHQsMCwwKX1mdW5jdGlvbiBOZSh0KXt0LnN0cm9rZVRleHQodGhpcy5wYXJ0aWFsVGV4dCwwLDApfWNsYXNzIEJlIGV4dGVuZHMgenR7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5kdW1teUNhbnZhcz1nLmNyZWF0ZUNhbnZhc0VsZW1lbnQoKSx0aGlzLmRhdGFBcnJheT1bXSx0aGlzLmRhdGFBcnJheT1uZS5wYXJzZVBhdGhEYXRhKHRoaXMuYXR0cnMuZGF0YSksdGhpcy5vbigiZGF0YUNoYW5nZS5rb252YSIsKGZ1bmN0aW9uKCl7dGhpcy5kYXRhQXJyYXk9bmUucGFyc2VQYXRoRGF0YSh0aGlzLmF0dHJzLmRhdGEpLHRoaXMuX3NldFRleHREYXRhKCl9KSksdGhpcy5vbigidGV4dENoYW5nZS5rb252YSBhbGlnbkNoYW5nZS5rb252YSBsZXR0ZXJTcGFjaW5nQ2hhbmdlLmtvbnZhIGtlcm5pbmdGdW5jQ2hhbmdlLmtvbnZhIGZvbnRTaXplQ2hhbmdlLmtvbnZhIix0aGlzLl9zZXRUZXh0RGF0YSksdGhpcy5fc2V0VGV4dERhdGEoKX1fc2NlbmVGdW5jKHQpe3Quc2V0QXR0cigiZm9udCIsdGhpcy5fZ2V0Q29udGV4dEZvbnQoKSksdC5zZXRBdHRyKCJ0ZXh0QmFzZWxpbmUiLHRoaXMudGV4dEJhc2VsaW5lKCkpLHQuc2V0QXR0cigidGV4dEFsaWduIiwibGVmdCIpLHQuc2F2ZSgpO3ZhciBlPXRoaXMudGV4dERlY29yYXRpb24oKSxpPXRoaXMuZmlsbCgpLHI9dGhpcy5mb250U2l6ZSgpLGE9dGhpcy5nbHlwaEluZm87InVuZGVybGluZSI9PT1lJiZ0LmJlZ2luUGF0aCgpO2Zvcih2YXIgbj0wO248YS5sZW5ndGg7bisrKXt0LnNhdmUoKTt2YXIgcz1hW25dLnAwO3QudHJhbnNsYXRlKHMueCxzLnkpLHQucm90YXRlKGFbbl0ucm90YXRpb24pLHRoaXMucGFydGlhbFRleHQ9YVtuXS50ZXh0LHQuZmlsbFN0cm9rZVNoYXBlKHRoaXMpLCJ1bmRlcmxpbmUiPT09ZSYmKDA9PT1uJiZ0Lm1vdmVUbygwLHIvMisxKSx0LmxpbmVUbyhyLHIvMisxKSksdC5yZXN0b3JlKCl9InVuZGVybGluZSI9PT1lJiYodC5zdHJva2VTdHlsZT1pLHQubGluZVdpZHRoPXIvMjAsdC5zdHJva2UoKSksdC5yZXN0b3JlKCl9X2hpdEZ1bmModCl7dC5iZWdpblBhdGgoKTt2YXIgZT10aGlzLmdseXBoSW5mbztpZihlLmxlbmd0aD49MSl7dmFyIGk9ZVswXS5wMDt0Lm1vdmVUbyhpLngsaS55KX1mb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGE9ZVtyXS5wMTt0LmxpbmVUbyhhLngsYS55KX10LnNldEF0dHIoImxpbmVXaWR0aCIsdGhpcy5mb250U2l6ZSgpKSx0LnNldEF0dHIoInN0cm9rZVN0eWxlIix0aGlzLmNvbG9yS2V5KSx0LnN0cm9rZSgpfWdldFRleHRXaWR0aCgpe3JldHVybiB0aGlzLnRleHRXaWR0aH1nZXRUZXh0SGVpZ2h0KCl7cmV0dXJuIGcud2FybigidGV4dC5nZXRUZXh0SGVpZ2h0KCkgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIFVzZSB0ZXh0LmhlaWdodCgpIC0gZm9yIGZ1bGwgaGVpZ2h0IGFuZCB0ZXh0LmZvbnRTaXplKCkgLSBmb3Igb25lIGxpbmUgaGVpZ2h0LiIpLHRoaXMudGV4dEhlaWdodH1zZXRUZXh0KHQpe3JldHVybiBPZS5wcm90b3R5cGUuc2V0VGV4dC5jYWxsKHRoaXMsdCl9X2dldENvbnRleHRGb250KCl7cmV0dXJuIE9lLnByb3RvdHlwZS5fZ2V0Q29udGV4dEZvbnQuY2FsbCh0aGlzKX1fZ2V0VGV4dFNpemUodCl7dmFyIGU9dGhpcy5kdW1teUNhbnZhcy5nZXRDb250ZXh0KCIyZCIpO2Uuc2F2ZSgpLGUuZm9udD10aGlzLl9nZXRDb250ZXh0Rm9udCgpO3ZhciBpPWUubWVhc3VyZVRleHQodCk7cmV0dXJuIGUucmVzdG9yZSgpLHt3aWR0aDppLndpZHRoLGhlaWdodDpwYXJzZUludCh0aGlzLmF0dHJzLmZvbnRTaXplLDEwKX19X3NldFRleHREYXRhKCl7dmFyIHQ9dGhpcyxlPXRoaXMuX2dldFRleHRTaXplKHRoaXMuYXR0cnMudGV4dCksaT10aGlzLmxldHRlclNwYWNpbmcoKSxyPXRoaXMuYWxpZ24oKSxhPXRoaXMua2VybmluZ0Z1bmMoKTt0aGlzLnRleHRXaWR0aD1lLndpZHRoLHRoaXMudGV4dEhlaWdodD1lLmhlaWdodDt2YXIgbj1NYXRoLm1heCh0aGlzLnRleHRXaWR0aCsoKHRoaXMuYXR0cnMudGV4dHx8IiIpLmxlbmd0aC0xKSppLDApO3RoaXMuZ2x5cGhJbmZvPVtdO2Zvcih2YXIgcz0wLG89MDtvPHQuZGF0YUFycmF5Lmxlbmd0aDtvKyspdC5kYXRhQXJyYXlbb10ucGF0aExlbmd0aD4wJiYocys9dC5kYXRhQXJyYXlbb10ucGF0aExlbmd0aCk7dmFyIGg9MDsiY2VudGVyIj09PXImJihoPU1hdGgubWF4KDAscy8yLW4vMikpLCJyaWdodCI9PT1yJiYoaD1NYXRoLm1heCgwLHMtbikpO2Zvcih2YXIgbCxkLGMsZz1DZSh0aGlzLnRleHQoKSksdT10aGlzLnRleHQoKS5zcGxpdCgiICIpLmxlbmd0aC0xLGY9LTEscD0wLHY9ZnVuY3Rpb24oKXtwPTA7Zm9yKHZhciBlPXQuZGF0YUFycmF5LGk9ZisxO2k8ZS5sZW5ndGg7aSsrKXtpZihlW2ldLnBhdGhMZW5ndGg+MClyZXR1cm4gZj1pLGVbaV07Ik0iPT09ZVtpXS5jb21tYW5kJiYobD17eDplW2ldLnBvaW50c1swXSx5OmVbaV0ucG9pbnRzWzFdfSl9cmV0dXJue319LG09ZnVuY3Rpb24oZSl7dmFyIGE9dC5fZ2V0VGV4dFNpemUoZSkud2lkdGgraTsiICI9PT1lJiYianVzdGlmeSI9PT1yJiYoYSs9KHMtbikvdSk7dmFyIG89MCxoPTA7Zm9yKGQ9dm9pZCAwO01hdGguYWJzKGEtbykvYT4uMDEmJmg8MjA7KXtoKys7Zm9yKHZhciBnPW87dm9pZCAwPT09YzspKGM9digpKSYmZytjLnBhdGhMZW5ndGg8YSYmKGcrPWMucGF0aExlbmd0aCxjPXZvaWQgMCk7aWYoYz09PXt9fHx2b2lkIDA9PT1sKXJldHVybjt2YXIgZj0hMTtzd2l0Y2goYy5jb21tYW5kKXtjYXNlIkwiOm5lLmdldExpbmVMZW5ndGgobC54LGwueSxjLnBvaW50c1swXSxjLnBvaW50c1sxXSk+YT9kPW5lLmdldFBvaW50T25MaW5lKGEsbC54LGwueSxjLnBvaW50c1swXSxjLnBvaW50c1sxXSxsLngsbC55KTpjPXZvaWQgMDticmVhaztjYXNlIkEiOnZhciBtPWMucG9pbnRzWzRdLF89Yy5wb2ludHNbNV0seT1jLnBvaW50c1s0XStfOzA9PT1wP3A9bSsxZS04OmE+bz9wKz1NYXRoLlBJLzE4MCpfL01hdGguYWJzKF8pOnAtPU1hdGguUEkvMzYwKl8vTWF0aC5hYnMoXyksKF88MCYmcDx5fHxfPj0wJiZwPnkpJiYocD15LGY9ITApLGQ9bmUuZ2V0UG9pbnRPbkVsbGlwdGljYWxBcmMoYy5wb2ludHNbMF0sYy5wb2ludHNbMV0sYy5wb2ludHNbMl0sYy5wb2ludHNbM10scCxjLnBvaW50c1s2XSk7YnJlYWs7Y2FzZSJDIjowPT09cD9wPWE+Yy5wYXRoTGVuZ3RoPzFlLTg6YS9jLnBhdGhMZW5ndGg6YT5vP3ArPShhLW8pL2MucGF0aExlbmd0aC8yOnA9TWF0aC5tYXgocC0oby1hKS9jLnBhdGhMZW5ndGgvMiwwKSxwPjEmJihwPTEsZj0hMCksZD1uZS5nZXRQb2ludE9uQ3ViaWNCZXppZXIocCxjLnN0YXJ0LngsYy5zdGFydC55LGMucG9pbnRzWzBdLGMucG9pbnRzWzFdLGMucG9pbnRzWzJdLGMucG9pbnRzWzNdLGMucG9pbnRzWzRdLGMucG9pbnRzWzVdKTticmVhaztjYXNlIlEiOjA9PT1wP3A9YS9jLnBhdGhMZW5ndGg6YT5vP3ArPShhLW8pL2MucGF0aExlbmd0aDpwLT0oby1hKS9jLnBhdGhMZW5ndGgscD4xJiYocD0xLGY9ITApLGQ9bmUuZ2V0UG9pbnRPblF1YWRyYXRpY0JlemllcihwLGMuc3RhcnQueCxjLnN0YXJ0LnksYy5wb2ludHNbMF0sYy5wb2ludHNbMV0sYy5wb2ludHNbMl0sYy5wb2ludHNbM10pfXZvaWQgMCE9PWQmJihvPW5lLmdldExpbmVMZW5ndGgobC54LGwueSxkLngsZC55KSksZiYmKGY9ITEsYz12b2lkIDApfX0sXz1oLyh0Ll9nZXRUZXh0U2l6ZSgiQyIpLndpZHRoK2kpLTEseT0wO3k8XyYmKG0oIkMiKSx2b2lkIDAhPT1sJiZ2b2lkIDAhPT1kKTt5KyspbD1kO2Zvcih2YXIgeD0wO3g8Zy5sZW5ndGgmJihtKGdbeF0pLHZvaWQgMCE9PWwmJnZvaWQgMCE9PWQpO3grKyl7dmFyIGI9bmUuZ2V0TGluZUxlbmd0aChsLngsbC55LGQueCxkLnkpLFM9MDtpZihhKXRyeXtTPWEoZ1t4LTFdLGdbeF0pKnRoaXMuZm9udFNpemUoKX1jYXRjaCh0KXtTPTB9bC54Kz1TLGQueCs9Uyx0aGlzLnRleHRXaWR0aCs9Uzt2YXIgdz1uZS5nZXRQb2ludE9uTGluZShTK2IvMixsLngsbC55LGQueCxkLnkpLEM9TWF0aC5hdGFuMihkLnktbC55LGQueC1sLngpO3RoaXMuZ2x5cGhJbmZvLnB1c2goe3RyYW5zcG9zZVg6dy54LHRyYW5zcG9zZVk6dy55LHRleHQ6Z1t4XSxyb3RhdGlvbjpDLHAwOmwscDE6ZH0pLGw9ZH19Z2V0U2VsZlJlY3QoKXtpZighdGhpcy5nbHlwaEluZm8ubGVuZ3RoKXJldHVybnt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9O3ZhciB0PVtdO3RoaXMuZ2x5cGhJbmZvLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaChlLnAwLngpLHQucHVzaChlLnAwLnkpLHQucHVzaChlLnAxLngpLHQucHVzaChlLnAxLnkpfSkpO2Zvcih2YXIgZSxpLHI9dFswXXx8MCxhPXRbMF18fDAsbj10WzFdfHwwLHM9dFsxXXx8MCxvPTA7bzx0Lmxlbmd0aC8yO28rKyllPXRbMipvXSxpPXRbMipvKzFdLHI9TWF0aC5taW4ocixlKSxhPU1hdGgubWF4KGEsZSksbj1NYXRoLm1pbihuLGkpLHM9TWF0aC5tYXgocyxpKTt2YXIgaD10aGlzLmZvbnRTaXplKCk7cmV0dXJue3g6ci1oLzIseTpuLWgvMix3aWR0aDphLXIraCxoZWlnaHQ6cy1uK2h9fX1CZS5wcm90b3R5cGUuX2ZpbGxGdW5jPUZlLEJlLnByb3RvdHlwZS5fc3Ryb2tlRnVuYz1OZSxCZS5wcm90b3R5cGUuX2ZpbGxGdW5jSGl0PUZlLEJlLnByb3RvdHlwZS5fc3Ryb2tlRnVuY0hpdD1OZSxCZS5wcm90b3R5cGUuY2xhc3NOYW1lPSJUZXh0UGF0aCIsQmUucHJvdG90eXBlLl9hdHRyc0FmZmVjdGluZ1NpemU9WyJ0ZXh0IiwiZm9udFNpemUiLCJkYXRhIl0scihCZSksdy5hZGRHZXR0ZXJTZXR0ZXIoQmUsImRhdGEiKSx3LmFkZEdldHRlclNldHRlcihCZSwiZm9udEZhbWlseSIsIkFyaWFsIiksdy5hZGRHZXR0ZXJTZXR0ZXIoQmUsImZvbnRTaXplIiwxMixwKCkpLHcuYWRkR2V0dGVyU2V0dGVyKEJlLCJmb250U3R5bGUiLEllKSx3LmFkZEdldHRlclNldHRlcihCZSwiYWxpZ24iLCJsZWZ0Iiksdy5hZGRHZXR0ZXJTZXR0ZXIoQmUsImxldHRlclNwYWNpbmciLDAscCgpKSx3LmFkZEdldHRlclNldHRlcihCZSwidGV4dEJhc2VsaW5lIiwibWlkZGxlIiksdy5hZGRHZXR0ZXJTZXR0ZXIoQmUsImZvbnRWYXJpYW50IixJZSksdy5hZGRHZXR0ZXJTZXR0ZXIoQmUsInRleHQiLCIiKSx3LmFkZEdldHRlclNldHRlcihCZSwidGV4dERlY29yYXRpb24iLG51bGwpLHcuYWRkR2V0dGVyU2V0dGVyKEJlLCJrZXJuaW5nRnVuYyIsbnVsbCk7dmFyIHplPSJ0ci1rb252YSIsV2U9WyJyZXNpemVFbmFibGVkQ2hhbmdlIiwicm90YXRlQW5jaG9yT2Zmc2V0Q2hhbmdlIiwicm90YXRlRW5hYmxlZENoYW5nZSIsImVuYWJsZWRBbmNob3JzQ2hhbmdlIiwiYW5jaG9yU2l6ZUNoYW5nZSIsImJvcmRlckVuYWJsZWRDaGFuZ2UiLCJib3JkZXJTdHJva2VDaGFuZ2UiLCJib3JkZXJTdHJva2VXaWR0aENoYW5nZSIsImJvcmRlckRhc2hDaGFuZ2UiLCJhbmNob3JTdHJva2VDaGFuZ2UiLCJhbmNob3JTdHJva2VXaWR0aENoYW5nZSIsImFuY2hvckZpbGxDaGFuZ2UiLCJhbmNob3JDb3JuZXJSYWRpdXNDaGFuZ2UiLCJpZ25vcmVTdHJva2VDaGFuZ2UiXS5tYXAoKHQ9PnQrIi50ci1rb252YSIpKS5qb2luKCIgIiksSGU9Im5vZGVzUmVjdCIsWWU9WyJ3aWR0aENoYW5nZSIsImhlaWdodENoYW5nZSIsInNjYWxlWENoYW5nZSIsInNjYWxlWUNoYW5nZSIsInNrZXdYQ2hhbmdlIiwic2tld1lDaGFuZ2UiLCJyb3RhdGlvbkNoYW5nZSIsIm9mZnNldFhDaGFuZ2UiLCJvZmZzZXRZQ2hhbmdlIiwidHJhbnNmb3Jtc0VuYWJsZWRDaGFuZ2UiLCJzdHJva2VXaWR0aENoYW5nZSJdLFhlPXsidG9wLWxlZnQiOi00NSwidG9wLWNlbnRlciI6MCwidG9wLXJpZ2h0Ijo0NSwibWlkZGxlLXJpZ2h0IjotOTAsIm1pZGRsZS1sZWZ0Ijo5MCwiYm90dG9tLWxlZnQiOi0xMzUsImJvdHRvbS1jZW50ZXIiOjE4MCwiYm90dG9tLXJpZ2h0IjoxMzV9O2NvbnN0IGplPSJvbnRvdWNoc3RhcnQiaW4gaS5fZ2xvYmFsO3ZhciBVZT1bInRvcC1sZWZ0IiwidG9wLWNlbnRlciIsInRvcC1yaWdodCIsIm1pZGRsZS1yaWdodCIsIm1pZGRsZS1sZWZ0IiwiYm90dG9tLWxlZnQiLCJib3R0b20tY2VudGVyIiwiYm90dG9tLXJpZ2h0Il07ZnVuY3Rpb24gcWUodCxlLGkpe2NvbnN0IHI9aS54Kyh0LngtaS54KSpNYXRoLmNvcyhlKS0odC55LWkueSkqTWF0aC5zaW4oZSksYT1pLnkrKHQueC1pLngpKk1hdGguc2luKGUpKyh0LnktaS55KSpNYXRoLmNvcyhlKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtyb3RhdGlvbjp0LnJvdGF0aW9uK2UseDpyLHk6YX0pfWZ1bmN0aW9uIFZlKHQsZSl7Y29uc3QgaT1mdW5jdGlvbih0KXtyZXR1cm57eDp0LngrdC53aWR0aC8yKk1hdGguY29zKHQucm90YXRpb24pK3QuaGVpZ2h0LzIqTWF0aC5zaW4oLXQucm90YXRpb24pLHk6dC55K3QuaGVpZ2h0LzIqTWF0aC5jb3ModC5yb3RhdGlvbikrdC53aWR0aC8yKk1hdGguc2luKHQucm90YXRpb24pfX0odCk7cmV0dXJuIHFlKHQsZSxpKX1jbGFzcyBLZSBleHRlbmRzIGp0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuX3RyYW5zZm9ybWluZz0hMSx0aGlzLl9jcmVhdGVFbGVtZW50cygpLHRoaXMuX2hhbmRsZU1vdXNlTW92ZT10aGlzLl9oYW5kbGVNb3VzZU1vdmUuYmluZCh0aGlzKSx0aGlzLl9oYW5kbGVNb3VzZVVwPXRoaXMuX2hhbmRsZU1vdXNlVXAuYmluZCh0aGlzKSx0aGlzLnVwZGF0ZT10aGlzLnVwZGF0ZS5iaW5kKHRoaXMpLHRoaXMub24oV2UsdGhpcy51cGRhdGUpLHRoaXMuZ2V0Tm9kZSgpJiZ0aGlzLnVwZGF0ZSgpfWF0dGFjaFRvKHQpe3JldHVybiB0aGlzLnNldE5vZGUodCksdGhpc31zZXROb2RlKHQpe3JldHVybiBnLndhcm4oInRyLnNldE5vZGUoc2hhcGUpLCB0ci5ub2RlKHNoYXBlKSBhbmQgdHIuYXR0YWNoVG8oc2hhcGUpIG1ldGhvZHMgYXJlIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgdHIubm9kZXMobm9kZXNBcnJheSkgaW5zdGVhZC4iKSx0aGlzLnNldE5vZGVzKFt0XSl9Z2V0Tm9kZSgpe3JldHVybiB0aGlzLl9ub2RlcyYmdGhpcy5fbm9kZXNbMF19X2dldEV2ZW50TmFtZXNwYWNlKCl7cmV0dXJuIHplK3RoaXMuX2lkfXNldE5vZGVzKHQ9W10pe3JldHVybiB0aGlzLl9ub2RlcyYmdGhpcy5fbm9kZXMubGVuZ3RoJiZ0aGlzLmRldGFjaCgpLHRoaXMuX25vZGVzPXQsMT09PXQubGVuZ3RoJiZ0aGlzLnVzZVNpbmdsZU5vZGVSb3RhdGlvbigpP3RoaXMucm90YXRpb24odFswXS5nZXRBYnNvbHV0ZVJvdGF0aW9uKCkpOnRoaXMucm90YXRpb24oMCksdGhpcy5fbm9kZXMuZm9yRWFjaCgodD0+e2NvbnN0IGU9KCk9PnsxPT09dGhpcy5ub2RlcygpLmxlbmd0aCYmdGhpcy51c2VTaW5nbGVOb2RlUm90YXRpb24oKSYmdGhpcy5yb3RhdGlvbih0aGlzLm5vZGVzKClbMF0uZ2V0QWJzb2x1dGVSb3RhdGlvbigpKSx0aGlzLl9yZXNldFRyYW5zZm9ybUNhY2hlKCksdGhpcy5fdHJhbnNmb3JtaW5nfHx0aGlzLmlzRHJhZ2dpbmcoKXx8dGhpcy51cGRhdGUoKX0saT10Ll9hdHRyc0FmZmVjdGluZ1NpemUubWFwKCh0PT50KyJDaGFuZ2UuIit0aGlzLl9nZXRFdmVudE5hbWVzcGFjZSgpKSkuam9pbigiICIpO3Qub24oaSxlKSx0Lm9uKFllLm1hcCgodD0+dCtgLiR7dGhpcy5fZ2V0RXZlbnROYW1lc3BhY2UoKX1gKSkuam9pbigiICIpLGUpLHQub24oYGFic29sdXRlVHJhbnNmb3JtQ2hhbmdlLiR7dGhpcy5fZ2V0RXZlbnROYW1lc3BhY2UoKX1gLGUpLHRoaXMuX3Byb3h5RHJhZyh0KX0pKSx0aGlzLl9yZXNldFRyYW5zZm9ybUNhY2hlKCksISF0aGlzLmZpbmRPbmUoIi50b3AtbGVmdCIpJiZ0aGlzLnVwZGF0ZSgpLHRoaXN9X3Byb3h5RHJhZyh0KXtsZXQgZTt0Lm9uKGBkcmFnc3RhcnQuJHt0aGlzLl9nZXRFdmVudE5hbWVzcGFjZSgpfWAsKGk9PntlPXQuZ2V0QWJzb2x1dGVQb3NpdGlvbigpLHRoaXMuaXNEcmFnZ2luZygpfHx0PT09dGhpcy5maW5kT25lKCIuYmFjayIpfHx0aGlzLnN0YXJ0RHJhZyhpLCExKX0pKSx0Lm9uKGBkcmFnbW92ZS4ke3RoaXMuX2dldEV2ZW50TmFtZXNwYWNlKCl9YCwoaT0+e2lmKCFlKXJldHVybjtjb25zdCByPXQuZ2V0QWJzb2x1dGVQb3NpdGlvbigpLGE9ci54LWUueCxuPXIueS1lLnk7dGhpcy5ub2RlcygpLmZvckVhY2goKGU9PntpZihlPT09dClyZXR1cm47aWYoZS5pc0RyYWdnaW5nKCkpcmV0dXJuO2NvbnN0IHI9ZS5nZXRBYnNvbHV0ZVBvc2l0aW9uKCk7ZS5zZXRBYnNvbHV0ZVBvc2l0aW9uKHt4OnIueCthLHk6ci55K259KSxlLnN0YXJ0RHJhZyhpKX0pKSxlPW51bGx9KSl9Z2V0Tm9kZXMoKXtyZXR1cm4gdGhpcy5fbm9kZXN8fFtdfWdldEFjdGl2ZUFuY2hvcigpe3JldHVybiB0aGlzLl9tb3ZpbmdBbmNob3JOYW1lfWRldGFjaCgpe3RoaXMuX25vZGVzJiZ0aGlzLl9ub2Rlcy5mb3JFYWNoKCh0PT57dC5vZmYoIi4iK3RoaXMuX2dldEV2ZW50TmFtZXNwYWNlKCkpfSkpLHRoaXMuX25vZGVzPVtdLHRoaXMuX3Jlc2V0VHJhbnNmb3JtQ2FjaGUoKX1fcmVzZXRUcmFuc2Zvcm1DYWNoZSgpe3RoaXMuX2NsZWFyQ2FjaGUoSGUpLHRoaXMuX2NsZWFyQ2FjaGUoInRyYW5zZm9ybSIpLHRoaXMuX2NsZWFyU2VsZkFuZERlc2NlbmRhbnRDYWNoZSgiYWJzb2x1dGVUcmFuc2Zvcm0iKX1fZ2V0Tm9kZVJlY3QoKXtyZXR1cm4gdGhpcy5fZ2V0Q2FjaGUoSGUsdGhpcy5fX2dldE5vZGVSZWN0KX1fX2dldE5vZGVTaGFwZSh0LGU9dGhpcy5yb3RhdGlvbigpLHIpe3ZhciBhPXQuZ2V0Q2xpZW50UmVjdCh7c2tpcFRyYW5zZm9ybTohMCxza2lwU2hhZG93OiEwLHNraXBTdHJva2U6dGhpcy5pZ25vcmVTdHJva2UoKX0pLG49dC5nZXRBYnNvbHV0ZVNjYWxlKHIpLHM9dC5nZXRBYnNvbHV0ZVBvc2l0aW9uKHIpLG89YS54Km4ueC10Lm9mZnNldFgoKSpuLngsaD1hLnkqbi55LXQub2Zmc2V0WSgpKm4ueTtjb25zdCBsPShpLmdldEFuZ2xlKHQuZ2V0QWJzb2x1dGVSb3RhdGlvbigpKSsyKk1hdGguUEkpJSgyKk1hdGguUEkpO3JldHVybiBxZSh7eDpzLngrbypNYXRoLmNvcyhsKStoKk1hdGguc2luKC1sKSx5OnMueStoKk1hdGguY29zKGwpK28qTWF0aC5zaW4obCksd2lkdGg6YS53aWR0aCpuLngsaGVpZ2h0OmEuaGVpZ2h0Km4ueSxyb3RhdGlvbjpsfSwtaS5nZXRBbmdsZShlKSx7eDowLHk6MH0pfV9fZ2V0Tm9kZVJlY3QoKXtpZighdGhpcy5nZXROb2RlKCkpcmV0dXJue3g6LTFlOCx5Oi0xZTgsd2lkdGg6MCxoZWlnaHQ6MCxyb3RhdGlvbjowfTtjb25zdCB0PVtdO3RoaXMubm9kZXMoKS5tYXAoKGU9Pntjb25zdCBpPWUuZ2V0Q2xpZW50UmVjdCh7c2tpcFRyYW5zZm9ybTohMCxza2lwU2hhZG93OiEwLHNraXBTdHJva2U6dGhpcy5pZ25vcmVTdHJva2UoKX0pO3ZhciByPVt7eDppLngseTppLnl9LHt4OmkueCtpLndpZHRoLHk6aS55fSx7eDppLngraS53aWR0aCx5OmkueStpLmhlaWdodH0se3g6aS54LHk6aS55K2kuaGVpZ2h0fV0sYT1lLmdldEFic29sdXRlVHJhbnNmb3JtKCk7ci5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgaT1hLnBvaW50KGUpO3QucHVzaChpKX0pKX0pKTtjb25zdCBlPW5ldyBhO3ZhciByLG4scyxvO2Uucm90YXRlKC1pLmdldEFuZ2xlKHRoaXMucm90YXRpb24oKSkpLHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9ZS5wb2ludCh0KTt2b2lkIDA9PT1yJiYocj1zPWkueCxuPW89aS55KSxyPU1hdGgubWluKHIsaS54KSxuPU1hdGgubWluKG4saS55KSxzPU1hdGgubWF4KHMsaS54KSxvPU1hdGgubWF4KG8saS55KX0pKSxlLmludmVydCgpO2NvbnN0IGg9ZS5wb2ludCh7eDpyLHk6bn0pO3JldHVybnt4OmgueCx5OmgueSx3aWR0aDpzLXIsaGVpZ2h0Om8tbixyb3RhdGlvbjppLmdldEFuZ2xlKHRoaXMucm90YXRpb24oKSl9fWdldFgoKXtyZXR1cm4gdGhpcy5fZ2V0Tm9kZVJlY3QoKS54fWdldFkoKXtyZXR1cm4gdGhpcy5fZ2V0Tm9kZVJlY3QoKS55fWdldFdpZHRoKCl7cmV0dXJuIHRoaXMuX2dldE5vZGVSZWN0KCkud2lkdGh9Z2V0SGVpZ2h0KCl7cmV0dXJuIHRoaXMuX2dldE5vZGVSZWN0KCkuaGVpZ2h0fV9jcmVhdGVFbGVtZW50cygpe3RoaXMuX2NyZWF0ZUJhY2soKSxVZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXMuX2NyZWF0ZUFuY2hvcih0KX0uYmluZCh0aGlzKSksdGhpcy5fY3JlYXRlQW5jaG9yKCJyb3RhdGVyIil9X2NyZWF0ZUFuY2hvcih0KXt2YXIgZT1uZXcgX2Uoe3N0cm9rZToicmdiKDAsIDE2MSwgMjU1KSIsZmlsbDoid2hpdGUiLHN0cm9rZVdpZHRoOjEsbmFtZTp0KyIgX2FuY2hvciIsZHJhZ0Rpc3RhbmNlOjAsZHJhZ2dhYmxlOiEwLGhpdFN0cm9rZVdpZHRoOmplPzEwOiJhdXRvIn0pLHI9dGhpcztlLm9uKCJtb3VzZWRvd24gdG91Y2hzdGFydCIsKGZ1bmN0aW9uKHQpe3IuX2hhbmRsZU1vdXNlRG93bih0KX0pKSxlLm9uKCJkcmFnc3RhcnQiLCh0PT57ZS5zdG9wRHJhZygpLHQuY2FuY2VsQnViYmxlPSEwfSkpLGUub24oImRyYWdlbmQiLCh0PT57dC5jYW5jZWxCdWJibGU9ITB9KSksZS5vbigibW91c2VlbnRlciIsKCgpPT57dmFyIHI9aS5nZXRBbmdsZSh0aGlzLnJvdGF0aW9uKCkpLGE9ZnVuY3Rpb24odCxlKXtpZigicm90YXRlciI9PT10KXJldHVybiJjcm9zc2hhaXIiO2UrPWcuZGVnVG9SYWQoWGVbdF18fDApO3ZhciBpPShnLnJhZFRvRGVnKGUpJTM2MCszNjApJTM2MDtyZXR1cm4gZy5faW5SYW5nZShpLDMzNy41LDM2MCl8fGcuX2luUmFuZ2UoaSwwLDIyLjUpPyJucy1yZXNpemUiOmcuX2luUmFuZ2UoaSwyMi41LDY3LjUpPyJuZXN3LXJlc2l6ZSI6Zy5faW5SYW5nZShpLDY3LjUsMTEyLjUpPyJldy1yZXNpemUiOmcuX2luUmFuZ2UoaSwxMTIuNSwxNTcuNSk/Im53c2UtcmVzaXplIjpnLl9pblJhbmdlKGksMTU3LjUsMjAyLjUpPyJucy1yZXNpemUiOmcuX2luUmFuZ2UoaSwyMDIuNSwyNDcuNSk/Im5lc3ctcmVzaXplIjpnLl9pblJhbmdlKGksMjQ3LjUsMjkyLjUpPyJldy1yZXNpemUiOmcuX2luUmFuZ2UoaSwyOTIuNSwzMzcuNSk/Im53c2UtcmVzaXplIjooZy5lcnJvcigiVHJhbnNmb3JtZXIgaGFzIHVua25vd24gYW5nbGUgZm9yIGN1cnNvciBkZXRlY3Rpb246ICIraSksInBvaW50ZXIiKX0odCxyKTtlLmdldFN0YWdlKCkuY29udGVudCYmKGUuZ2V0U3RhZ2UoKS5jb250ZW50LnN0eWxlLmN1cnNvcj1hKSx0aGlzLl9jdXJzb3JDaGFuZ2U9ITB9KSksZS5vbigibW91c2VvdXQiLCgoKT0+e2UuZ2V0U3RhZ2UoKS5jb250ZW50JiYoZS5nZXRTdGFnZSgpLmNvbnRlbnQuc3R5bGUuY3Vyc29yPSIiKSx0aGlzLl9jdXJzb3JDaGFuZ2U9ITF9KSksdGhpcy5hZGQoZSl9X2NyZWF0ZUJhY2soKXt2YXIgdD1uZXcgenQoe25hbWU6ImJhY2siLHdpZHRoOjAsaGVpZ2h0OjAsZHJhZ2dhYmxlOiEwLHNjZW5lRnVuYyh0KXt2YXIgZT10aGlzLmdldFBhcmVudCgpLGk9ZS5wYWRkaW5nKCk7dC5iZWdpblBhdGgoKSx0LnJlY3QoLWksLWksdGhpcy53aWR0aCgpKzIqaSx0aGlzLmhlaWdodCgpKzIqaSksdC5tb3ZlVG8odGhpcy53aWR0aCgpLzIsLWkpLGUucm90YXRlRW5hYmxlZCgpJiZ0LmxpbmVUbyh0aGlzLndpZHRoKCkvMiwtZS5yb3RhdGVBbmNob3JPZmZzZXQoKSpnLl9zaWduKHRoaXMuaGVpZ2h0KCkpLWkpLHQuZmlsbFN0cm9rZVNoYXBlKHRoaXMpfSxoaXRGdW5jOih0LGUpPT57aWYodGhpcy5zaG91bGRPdmVyZHJhd1dob2xlQXJlYSgpKXt2YXIgaT10aGlzLnBhZGRpbmcoKTt0LmJlZ2luUGF0aCgpLHQucmVjdCgtaSwtaSxlLndpZHRoKCkrMippLGUuaGVpZ2h0KCkrMippKSx0LmZpbGxTdHJva2VTaGFwZShlKX19fSk7dGhpcy5hZGQodCksdGhpcy5fcHJveHlEcmFnKHQpLHQub24oImRyYWdzdGFydCIsKHQ9Pnt0LmNhbmNlbEJ1YmJsZT0hMH0pKSx0Lm9uKCJkcmFnbW92ZSIsKHQ9Pnt0LmNhbmNlbEJ1YmJsZT0hMH0pKSx0Lm9uKCJkcmFnZW5kIiwodD0+e3QuY2FuY2VsQnViYmxlPSEwfSkpLHRoaXMub24oImRyYWdtb3ZlIiwodD0+e3RoaXMudXBkYXRlKCl9KSl9X2hhbmRsZU1vdXNlRG93bih0KXt0aGlzLl9tb3ZpbmdBbmNob3JOYW1lPXQudGFyZ2V0Lm5hbWUoKS5zcGxpdCgiICIpWzBdO3ZhciBlPXRoaXMuX2dldE5vZGVSZWN0KCksaT1lLndpZHRoLHI9ZS5oZWlnaHQsYT1NYXRoLnNxcnQoTWF0aC5wb3coaSwyKStNYXRoLnBvdyhyLDIpKTt0aGlzLnNpbj1NYXRoLmFicyhyL2EpLHRoaXMuY29zPU1hdGguYWJzKGkvYSksInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9oYW5kbGVNb3VzZU1vdmUpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX2hhbmRsZU1vdXNlTW92ZSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX2hhbmRsZU1vdXNlVXAsITApLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5faGFuZGxlTW91c2VVcCwhMCkpLHRoaXMuX3RyYW5zZm9ybWluZz0hMDt2YXIgbj10LnRhcmdldC5nZXRBYnNvbHV0ZVBvc2l0aW9uKCkscz10LnRhcmdldC5nZXRTdGFnZSgpLmdldFBvaW50ZXJQb3NpdGlvbigpO3RoaXMuX2FuY2hvckRyYWdPZmZzZXQ9e3g6cy54LW4ueCx5OnMueS1uLnl9LHRoaXMuX2ZpcmUoInRyYW5zZm9ybXN0YXJ0Iix7ZXZ0OnQsdGFyZ2V0OnRoaXMuZ2V0Tm9kZSgpfSksdGhpcy5fbm9kZXMuZm9yRWFjaCgoZT0+e2UuX2ZpcmUoInRyYW5zZm9ybXN0YXJ0Iix7ZXZ0OnQsdGFyZ2V0OmV9KX0pKX1faGFuZGxlTW91c2VNb3ZlKHQpe3ZhciBlLHIsYSxuPXRoaXMuZmluZE9uZSgiLiIrdGhpcy5fbW92aW5nQW5jaG9yTmFtZSkscz1uLmdldFN0YWdlKCk7cy5zZXRQb2ludGVyc1Bvc2l0aW9ucyh0KTtjb25zdCBvPXMuZ2V0UG9pbnRlclBvc2l0aW9uKCk7bGV0IGg9e3g6by54LXRoaXMuX2FuY2hvckRyYWdPZmZzZXQueCx5Om8ueS10aGlzLl9hbmNob3JEcmFnT2Zmc2V0Lnl9O2NvbnN0IGw9bi5nZXRBYnNvbHV0ZVBvc2l0aW9uKCk7dGhpcy5hbmNob3JEcmFnQm91bmRGdW5jKCkmJihoPXRoaXMuYW5jaG9yRHJhZ0JvdW5kRnVuYygpKGwsaCx0KSksbi5zZXRBYnNvbHV0ZVBvc2l0aW9uKGgpO2NvbnN0IGQ9bi5nZXRBYnNvbHV0ZVBvc2l0aW9uKCk7aWYobC54IT09ZC54fHxsLnkhPT1kLnkpaWYoInJvdGF0ZXIiIT09dGhpcy5fbW92aW5nQW5jaG9yTmFtZSl7dmFyIGM9dGhpcy5rZWVwUmF0aW8oKXx8dC5zaGlmdEtleSxnPXRoaXMuY2VudGVyZWRTY2FsaW5nKCl8fHQuYWx0S2V5O2lmKCJ0b3AtbGVmdCI9PT10aGlzLl9tb3ZpbmdBbmNob3JOYW1lKXtpZihjKXt2YXIgdT1nP3t4OnRoaXMud2lkdGgoKS8yLHk6dGhpcy5oZWlnaHQoKS8yfTp7eDp0aGlzLmZpbmRPbmUoIi5ib3R0b20tcmlnaHQiKS54KCkseTp0aGlzLmZpbmRPbmUoIi5ib3R0b20tcmlnaHQiKS55KCl9O2E9TWF0aC5zcXJ0KE1hdGgucG93KHUueC1uLngoKSwyKStNYXRoLnBvdyh1Lnktbi55KCksMikpO3ZhciBmPXRoaXMuZmluZE9uZSgiLnRvcC1sZWZ0IikueCgpPnUueD8tMToxLHA9dGhpcy5maW5kT25lKCIudG9wLWxlZnQiKS55KCk+dS55Py0xOjE7ZT1hKnRoaXMuY29zKmYscj1hKnRoaXMuc2luKnAsdGhpcy5maW5kT25lKCIudG9wLWxlZnQiKS54KHUueC1lKSx0aGlzLmZpbmRPbmUoIi50b3AtbGVmdCIpLnkodS55LXIpfX1lbHNlIGlmKCJ0b3AtY2VudGVyIj09PXRoaXMuX21vdmluZ0FuY2hvck5hbWUpdGhpcy5maW5kT25lKCIudG9wLWxlZnQiKS55KG4ueSgpKTtlbHNlIGlmKCJ0b3AtcmlnaHQiPT09dGhpcy5fbW92aW5nQW5jaG9yTmFtZSl7aWYoYyl7dT1nP3t4OnRoaXMud2lkdGgoKS8yLHk6dGhpcy5oZWlnaHQoKS8yfTp7eDp0aGlzLmZpbmRPbmUoIi5ib3R0b20tbGVmdCIpLngoKSx5OnRoaXMuZmluZE9uZSgiLmJvdHRvbS1sZWZ0IikueSgpfTthPU1hdGguc3FydChNYXRoLnBvdyhuLngoKS11LngsMikrTWF0aC5wb3codS55LW4ueSgpLDIpKTtmPXRoaXMuZmluZE9uZSgiLnRvcC1yaWdodCIpLngoKTx1Lng/LTE6MSxwPXRoaXMuZmluZE9uZSgiLnRvcC1yaWdodCIpLnkoKT51Lnk/LTE6MTtlPWEqdGhpcy5jb3MqZixyPWEqdGhpcy5zaW4qcCx0aGlzLmZpbmRPbmUoIi50b3AtcmlnaHQiKS54KHUueCtlKSx0aGlzLmZpbmRPbmUoIi50b3AtcmlnaHQiKS55KHUueS1yKX12YXIgdj1uLnBvc2l0aW9uKCk7dGhpcy5maW5kT25lKCIudG9wLWxlZnQiKS55KHYueSksdGhpcy5maW5kT25lKCIuYm90dG9tLXJpZ2h0IikueCh2LngpfWVsc2UgaWYoIm1pZGRsZS1sZWZ0Ij09PXRoaXMuX21vdmluZ0FuY2hvck5hbWUpdGhpcy5maW5kT25lKCIudG9wLWxlZnQiKS54KG4ueCgpKTtlbHNlIGlmKCJtaWRkbGUtcmlnaHQiPT09dGhpcy5fbW92aW5nQW5jaG9yTmFtZSl0aGlzLmZpbmRPbmUoIi5ib3R0b20tcmlnaHQiKS54KG4ueCgpKTtlbHNlIGlmKCJib3R0b20tbGVmdCI9PT10aGlzLl9tb3ZpbmdBbmNob3JOYW1lKXtpZihjKXt1PWc/e3g6dGhpcy53aWR0aCgpLzIseTp0aGlzLmhlaWdodCgpLzJ9Ont4OnRoaXMuZmluZE9uZSgiLnRvcC1yaWdodCIpLngoKSx5OnRoaXMuZmluZE9uZSgiLnRvcC1yaWdodCIpLnkoKX07YT1NYXRoLnNxcnQoTWF0aC5wb3codS54LW4ueCgpLDIpK01hdGgucG93KG4ueSgpLXUueSwyKSk7Zj11Lng8bi54KCk/LTE6MSxwPW4ueSgpPHUueT8tMToxO2U9YSp0aGlzLmNvcypmLHI9YSp0aGlzLnNpbipwLG4ueCh1LngtZSksbi55KHUueStyKX12PW4ucG9zaXRpb24oKSx0aGlzLmZpbmRPbmUoIi50b3AtbGVmdCIpLngodi54KSx0aGlzLmZpbmRPbmUoIi5ib3R0b20tcmlnaHQiKS55KHYueSl9ZWxzZSBpZigiYm90dG9tLWNlbnRlciI9PT10aGlzLl9tb3ZpbmdBbmNob3JOYW1lKXRoaXMuZmluZE9uZSgiLmJvdHRvbS1yaWdodCIpLnkobi55KCkpO2Vsc2UgaWYoImJvdHRvbS1yaWdodCI9PT10aGlzLl9tb3ZpbmdBbmNob3JOYW1lKXtpZihjKXt1PWc/e3g6dGhpcy53aWR0aCgpLzIseTp0aGlzLmhlaWdodCgpLzJ9Ont4OnRoaXMuZmluZE9uZSgiLnRvcC1sZWZ0IikueCgpLHk6dGhpcy5maW5kT25lKCIudG9wLWxlZnQiKS55KCl9O2E9TWF0aC5zcXJ0KE1hdGgucG93KG4ueCgpLXUueCwyKStNYXRoLnBvdyhuLnkoKS11LnksMikpO2Y9dGhpcy5maW5kT25lKCIuYm90dG9tLXJpZ2h0IikueCgpPHUueD8tMToxLHA9dGhpcy5maW5kT25lKCIuYm90dG9tLXJpZ2h0IikueSgpPHUueT8tMToxO2U9YSp0aGlzLmNvcypmLHI9YSp0aGlzLnNpbipwLHRoaXMuZmluZE9uZSgiLmJvdHRvbS1yaWdodCIpLngodS54K2UpLHRoaXMuZmluZE9uZSgiLmJvdHRvbS1yaWdodCIpLnkodS55K3IpfX1lbHNlIGNvbnNvbGUuZXJyb3IobmV3IEVycm9yKCJXcm9uZyBwb3NpdGlvbiBhcmd1bWVudCBvZiBzZWxlY3Rpb24gcmVzaXplcjogIit0aGlzLl9tb3ZpbmdBbmNob3JOYW1lKSk7aWYoZz10aGlzLmNlbnRlcmVkU2NhbGluZygpfHx0LmFsdEtleSl7dmFyIG09dGhpcy5maW5kT25lKCIudG9wLWxlZnQiKSxfPXRoaXMuZmluZE9uZSgiLmJvdHRvbS1yaWdodCIpLHk9bS54KCkseD1tLnkoKSxiPXRoaXMuZ2V0V2lkdGgoKS1fLngoKSxTPXRoaXMuZ2V0SGVpZ2h0KCktXy55KCk7Xy5tb3ZlKHt4Oi15LHk6LXh9KSxtLm1vdmUoe3g6Yix5OlN9KX12YXIgdz10aGlzLmZpbmRPbmUoIi50b3AtbGVmdCIpLmdldEFic29sdXRlUG9zaXRpb24oKTtlPXcueCxyPXcueTt2YXIgQz10aGlzLmZpbmRPbmUoIi5ib3R0b20tcmlnaHQiKS54KCktdGhpcy5maW5kT25lKCIudG9wLWxlZnQiKS54KCksaz10aGlzLmZpbmRPbmUoIi5ib3R0b20tcmlnaHQiKS55KCktdGhpcy5maW5kT25lKCIudG9wLWxlZnQiKS55KCk7dGhpcy5fZml0Tm9kZXNJbnRvKHt4OmUseTpyLHdpZHRoOkMsaGVpZ2h0Omsscm90YXRpb246aS5nZXRBbmdsZSh0aGlzLnJvdGF0aW9uKCkpfSx0KX1lbHNle3ZhciBQPXRoaXMuX2dldE5vZGVSZWN0KCk7ZT1uLngoKS1QLndpZHRoLzIscj0tbi55KCkrUC5oZWlnaHQvMjtsZXQgYT1NYXRoLmF0YW4yKC1yLGUpK01hdGguUEkvMjtQLmhlaWdodDwwJiYoYS09TWF0aC5QSSk7Y29uc3Qgcz1pLmdldEFuZ2xlKHRoaXMucm90YXRpb24oKSkrYSxvPWkuZ2V0QW5nbGUodGhpcy5yb3RhdGlvblNuYXBUb2xlcmFuY2UoKSksaD1mdW5jdGlvbih0LGUscil7bGV0IGE9ZTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7Y29uc3Qgcz1pLmdldEFuZ2xlKHRbbl0pLG89TWF0aC5hYnMocy1lKSUoMipNYXRoLlBJKTtNYXRoLm1pbihvLDIqTWF0aC5QSS1vKTxyJiYoYT1zKX1yZXR1cm4gYX0odGhpcy5yb3RhdGlvblNuYXBzKCkscyxvKSxsPVZlKFAsaC1QLnJvdGF0aW9uKTt0aGlzLl9maXROb2Rlc0ludG8obCx0KX19X2hhbmRsZU1vdXNlVXAodCl7dGhpcy5fcmVtb3ZlRXZlbnRzKHQpfWdldEFic29sdXRlVHJhbnNmb3JtKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNmb3JtKCl9X3JlbW92ZUV2ZW50cyh0KXtpZih0aGlzLl90cmFuc2Zvcm1pbmcpe3RoaXMuX3RyYW5zZm9ybWluZz0hMSwidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX2hhbmRsZU1vdXNlTW92ZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5faGFuZGxlTW91c2VNb3ZlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5faGFuZGxlTW91c2VVcCwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLl9oYW5kbGVNb3VzZVVwLCEwKSk7dmFyIGU9dGhpcy5nZXROb2RlKCk7dGhpcy5fZmlyZSgidHJhbnNmb3JtZW5kIix7ZXZ0OnQsdGFyZ2V0OmV9KSxlJiZ0aGlzLl9ub2Rlcy5mb3JFYWNoKChlPT57ZS5fZmlyZSgidHJhbnNmb3JtZW5kIix7ZXZ0OnQsdGFyZ2V0OmV9KX0pKSx0aGlzLl9tb3ZpbmdBbmNob3JOYW1lPW51bGx9fV9maXROb2Rlc0ludG8odCxlKXt2YXIgcj10aGlzLl9nZXROb2RlUmVjdCgpO2lmKGcuX2luUmFuZ2UodC53aWR0aCwyKi10aGlzLnBhZGRpbmcoKS0xLDEpKXJldHVybiB2b2lkIHRoaXMudXBkYXRlKCk7aWYoZy5faW5SYW5nZSh0LmhlaWdodCwyKi10aGlzLnBhZGRpbmcoKS0xLDEpKXJldHVybiB2b2lkIHRoaXMudXBkYXRlKCk7Y29uc3Qgbj10aGlzLmZsaXBFbmFibGVkKCk7dmFyIHM9bmV3IGE7aWYocy5yb3RhdGUoaS5nZXRBbmdsZSh0aGlzLnJvdGF0aW9uKCkpKSx0aGlzLl9tb3ZpbmdBbmNob3JOYW1lJiZ0LndpZHRoPDAmJnRoaXMuX21vdmluZ0FuY2hvck5hbWUuaW5kZXhPZigibGVmdCIpPj0wKXtjb25zdCBlPXMucG9pbnQoe3g6MiotdGhpcy5wYWRkaW5nKCkseTowfSk7aWYodC54Kz1lLngsdC55Kz1lLnksdC53aWR0aCs9Mip0aGlzLnBhZGRpbmcoKSx0aGlzLl9tb3ZpbmdBbmNob3JOYW1lPXRoaXMuX21vdmluZ0FuY2hvck5hbWUucmVwbGFjZSgibGVmdCIsInJpZ2h0IiksdGhpcy5fYW5jaG9yRHJhZ09mZnNldC54LT1lLngsdGhpcy5fYW5jaG9yRHJhZ09mZnNldC55LT1lLnksIW4pcmV0dXJuIHZvaWQgdGhpcy51cGRhdGUoKX1lbHNlIGlmKHRoaXMuX21vdmluZ0FuY2hvck5hbWUmJnQud2lkdGg8MCYmdGhpcy5fbW92aW5nQW5jaG9yTmFtZS5pbmRleE9mKCJyaWdodCIpPj0wKXtjb25zdCBlPXMucG9pbnQoe3g6Mip0aGlzLnBhZGRpbmcoKSx5OjB9KTtpZih0aGlzLl9tb3ZpbmdBbmNob3JOYW1lPXRoaXMuX21vdmluZ0FuY2hvck5hbWUucmVwbGFjZSgicmlnaHQiLCJsZWZ0IiksdGhpcy5fYW5jaG9yRHJhZ09mZnNldC54LT1lLngsdGhpcy5fYW5jaG9yRHJhZ09mZnNldC55LT1lLnksdC53aWR0aCs9Mip0aGlzLnBhZGRpbmcoKSwhbilyZXR1cm4gdm9pZCB0aGlzLnVwZGF0ZSgpfWlmKHRoaXMuX21vdmluZ0FuY2hvck5hbWUmJnQuaGVpZ2h0PDAmJnRoaXMuX21vdmluZ0FuY2hvck5hbWUuaW5kZXhPZigidG9wIik+PTApe2NvbnN0IGU9cy5wb2ludCh7eDowLHk6MiotdGhpcy5wYWRkaW5nKCl9KTtpZih0LngrPWUueCx0LnkrPWUueSx0aGlzLl9tb3ZpbmdBbmNob3JOYW1lPXRoaXMuX21vdmluZ0FuY2hvck5hbWUucmVwbGFjZSgidG9wIiwiYm90dG9tIiksdGhpcy5fYW5jaG9yRHJhZ09mZnNldC54LT1lLngsdGhpcy5fYW5jaG9yRHJhZ09mZnNldC55LT1lLnksdC5oZWlnaHQrPTIqdGhpcy5wYWRkaW5nKCksIW4pcmV0dXJuIHZvaWQgdGhpcy51cGRhdGUoKX1lbHNlIGlmKHRoaXMuX21vdmluZ0FuY2hvck5hbWUmJnQuaGVpZ2h0PDAmJnRoaXMuX21vdmluZ0FuY2hvck5hbWUuaW5kZXhPZigiYm90dG9tIik+PTApe2NvbnN0IGU9cy5wb2ludCh7eDowLHk6Mip0aGlzLnBhZGRpbmcoKX0pO2lmKHRoaXMuX21vdmluZ0FuY2hvck5hbWU9dGhpcy5fbW92aW5nQW5jaG9yTmFtZS5yZXBsYWNlKCJib3R0b20iLCJ0b3AiKSx0aGlzLl9hbmNob3JEcmFnT2Zmc2V0LngtPWUueCx0aGlzLl9hbmNob3JEcmFnT2Zmc2V0LnktPWUueSx0LmhlaWdodCs9Mip0aGlzLnBhZGRpbmcoKSwhbilyZXR1cm4gdm9pZCB0aGlzLnVwZGF0ZSgpfWlmKHRoaXMuYm91bmRCb3hGdW5jKCkpe2NvbnN0IGU9dGhpcy5ib3VuZEJveEZ1bmMoKShyLHQpO2U/dD1lOmcud2FybigiYm91bmRCb3hGdW5jIHJldHVybmVkIGZhbHN5LiBZb3Ugc2hvdWxkIHJldHVybiBuZXcgYm91bmQgcmVjdCBmcm9tIGl0ISIpfWNvbnN0IG89MWU3LGg9bmV3IGE7aC50cmFuc2xhdGUoci54LHIueSksaC5yb3RhdGUoci5yb3RhdGlvbiksaC5zY2FsZShyLndpZHRoL28sci5oZWlnaHQvbyk7Y29uc3QgbD1uZXcgYTtsLnRyYW5zbGF0ZSh0LngsdC55KSxsLnJvdGF0ZSh0LnJvdGF0aW9uKSxsLnNjYWxlKHQud2lkdGgvbyx0LmhlaWdodC9vKTtjb25zdCBkPWwubXVsdGlwbHkoaC5pbnZlcnQoKSk7dGhpcy5fbm9kZXMuZm9yRWFjaCgodD0+e3ZhciBpO2NvbnN0IHI9dC5nZXRQYXJlbnQoKS5nZXRBYnNvbHV0ZVRyYW5zZm9ybSgpLG49dC5nZXRUcmFuc2Zvcm0oKS5jb3B5KCk7bi50cmFuc2xhdGUodC5vZmZzZXRYKCksdC5vZmZzZXRZKCkpO2NvbnN0IHM9bmV3IGE7cy5tdWx0aXBseShyLmNvcHkoKS5pbnZlcnQoKSkubXVsdGlwbHkoZCkubXVsdGlwbHkocikubXVsdGlwbHkobik7Y29uc3Qgbz1zLmRlY29tcG9zZSgpO3Quc2V0QXR0cnMobyksdGhpcy5fZmlyZSgidHJhbnNmb3JtIix7ZXZ0OmUsdGFyZ2V0OnR9KSx0Ll9maXJlKCJ0cmFuc2Zvcm0iLHtldnQ6ZSx0YXJnZXQ6dH0pLG51bGw9PT0oaT10LmdldExheWVyKCkpfHx2b2lkIDA9PT1pfHxpLmJhdGNoRHJhdygpfSkpLHRoaXMucm90YXRpb24oZy5fZ2V0Um90YXRpb24odC5yb3RhdGlvbikpLHRoaXMuX3Jlc2V0VHJhbnNmb3JtQ2FjaGUoKSx0aGlzLnVwZGF0ZSgpLHRoaXMuZ2V0TGF5ZXIoKS5iYXRjaERyYXcoKX1mb3JjZVVwZGF0ZSgpe3RoaXMuX3Jlc2V0VHJhbnNmb3JtQ2FjaGUoKSx0aGlzLnVwZGF0ZSgpfV9iYXRjaENoYW5nZUNoaWxkKHQsZSl7dGhpcy5maW5kT25lKHQpLnNldEF0dHJzKGUpfXVwZGF0ZSgpe3ZhciB0LGU9dGhpcy5fZ2V0Tm9kZVJlY3QoKTt0aGlzLnJvdGF0aW9uKGcuX2dldFJvdGF0aW9uKGUucm90YXRpb24pKTt2YXIgaT1lLndpZHRoLHI9ZS5oZWlnaHQsYT10aGlzLmVuYWJsZWRBbmNob3JzKCksbj10aGlzLnJlc2l6ZUVuYWJsZWQoKSxzPXRoaXMucGFkZGluZygpLG89dGhpcy5hbmNob3JTaXplKCk7dGhpcy5maW5kKCIuX2FuY2hvciIpLmZvckVhY2goKHQ9Pnt0LnNldEF0dHJzKHt3aWR0aDpvLGhlaWdodDpvLG9mZnNldFg6by8yLG9mZnNldFk6by8yLHN0cm9rZTp0aGlzLmFuY2hvclN0cm9rZSgpLHN0cm9rZVdpZHRoOnRoaXMuYW5jaG9yU3Ryb2tlV2lkdGgoKSxmaWxsOnRoaXMuYW5jaG9yRmlsbCgpLGNvcm5lclJhZGl1czp0aGlzLmFuY2hvckNvcm5lclJhZGl1cygpfSl9KSksdGhpcy5fYmF0Y2hDaGFuZ2VDaGlsZCgiLnRvcC1sZWZ0Iix7eDowLHk6MCxvZmZzZXRYOm8vMitzLG9mZnNldFk6by8yK3MsdmlzaWJsZTpuJiZhLmluZGV4T2YoInRvcC1sZWZ0Iik+PTB9KSx0aGlzLl9iYXRjaENoYW5nZUNoaWxkKCIudG9wLWNlbnRlciIse3g6aS8yLHk6MCxvZmZzZXRZOm8vMitzLHZpc2libGU6biYmYS5pbmRleE9mKCJ0b3AtY2VudGVyIik+PTB9KSx0aGlzLl9iYXRjaENoYW5nZUNoaWxkKCIudG9wLXJpZ2h0Iix7eDppLHk6MCxvZmZzZXRYOm8vMi1zLG9mZnNldFk6by8yK3MsdmlzaWJsZTpuJiZhLmluZGV4T2YoInRvcC1yaWdodCIpPj0wfSksdGhpcy5fYmF0Y2hDaGFuZ2VDaGlsZCgiLm1pZGRsZS1sZWZ0Iix7eDowLHk6ci8yLG9mZnNldFg6by8yK3MsdmlzaWJsZTpuJiZhLmluZGV4T2YoIm1pZGRsZS1sZWZ0Iik+PTB9KSx0aGlzLl9iYXRjaENoYW5nZUNoaWxkKCIubWlkZGxlLXJpZ2h0Iix7eDppLHk6ci8yLG9mZnNldFg6by8yLXMsdmlzaWJsZTpuJiZhLmluZGV4T2YoIm1pZGRsZS1yaWdodCIpPj0wfSksdGhpcy5fYmF0Y2hDaGFuZ2VDaGlsZCgiLmJvdHRvbS1sZWZ0Iix7eDowLHk6cixvZmZzZXRYOm8vMitzLG9mZnNldFk6by8yLXMsdmlzaWJsZTpuJiZhLmluZGV4T2YoImJvdHRvbS1sZWZ0Iik+PTB9KSx0aGlzLl9iYXRjaENoYW5nZUNoaWxkKCIuYm90dG9tLWNlbnRlciIse3g6aS8yLHk6cixvZmZzZXRZOm8vMi1zLHZpc2libGU6biYmYS5pbmRleE9mKCJib3R0b20tY2VudGVyIik+PTB9KSx0aGlzLl9iYXRjaENoYW5nZUNoaWxkKCIuYm90dG9tLXJpZ2h0Iix7eDppLHk6cixvZmZzZXRYOm8vMi1zLG9mZnNldFk6by8yLXMsdmlzaWJsZTpuJiZhLmluZGV4T2YoImJvdHRvbS1yaWdodCIpPj0wfSksdGhpcy5fYmF0Y2hDaGFuZ2VDaGlsZCgiLnJvdGF0ZXIiLHt4OmkvMix5Oi10aGlzLnJvdGF0ZUFuY2hvck9mZnNldCgpKmcuX3NpZ24ociktcyx2aXNpYmxlOnRoaXMucm90YXRlRW5hYmxlZCgpfSksdGhpcy5fYmF0Y2hDaGFuZ2VDaGlsZCgiLmJhY2siLHt3aWR0aDppLGhlaWdodDpyLHZpc2libGU6dGhpcy5ib3JkZXJFbmFibGVkKCksc3Ryb2tlOnRoaXMuYm9yZGVyU3Ryb2tlKCksc3Ryb2tlV2lkdGg6dGhpcy5ib3JkZXJTdHJva2VXaWR0aCgpLGRhc2g6dGhpcy5ib3JkZXJEYXNoKCkseDowLHk6MH0pLG51bGw9PT0odD10aGlzLmdldExheWVyKCkpfHx2b2lkIDA9PT10fHx0LmJhdGNoRHJhdygpfWlzVHJhbnNmb3JtaW5nKCl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybWluZ31zdG9wVHJhbnNmb3JtKCl7aWYodGhpcy5fdHJhbnNmb3JtaW5nKXt0aGlzLl9yZW1vdmVFdmVudHMoKTt2YXIgdD10aGlzLmZpbmRPbmUoIi4iK3RoaXMuX21vdmluZ0FuY2hvck5hbWUpO3QmJnQuc3RvcERyYWcoKX19ZGVzdHJveSgpe3JldHVybiB0aGlzLmdldFN0YWdlKCkmJnRoaXMuX2N1cnNvckNoYW5nZSYmdGhpcy5nZXRTdGFnZSgpLmNvbnRlbnQmJih0aGlzLmdldFN0YWdlKCkuY29udGVudC5zdHlsZS5jdXJzb3I9IiIpLGp0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5kZXRhY2goKSx0aGlzLl9yZW1vdmVFdmVudHMoKSx0aGlzfXRvT2JqZWN0KCl7cmV0dXJuIEsucHJvdG90eXBlLnRvT2JqZWN0LmNhbGwodGhpcyl9fUtlLnByb3RvdHlwZS5jbGFzc05hbWU9IlRyYW5zZm9ybWVyIixyKEtlKSx3LmFkZEdldHRlclNldHRlcihLZSwiZW5hYmxlZEFuY2hvcnMiLFVlLChmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEFycmF5fHxnLndhcm4oImVuYWJsZWRBbmNob3JzIHZhbHVlIHNob3VsZCBiZSBhbiBhcnJheSIpLHQgaW5zdGFuY2VvZiBBcnJheSYmdC5mb3JFYWNoKChmdW5jdGlvbih0KXstMT09PVVlLmluZGV4T2YodCkmJmcud2FybigiVW5rbm93biBhbmNob3IgbmFtZTogIit0KyIuIEF2YWlsYWJsZSBuYW1lcyBhcmU6ICIrVWUuam9pbigiLCAiKSl9KSksdHx8W119KSksdy5hZGRHZXR0ZXJTZXR0ZXIoS2UsImZsaXBFbmFibGVkIiwhMCx4KCkpLHcuYWRkR2V0dGVyU2V0dGVyKEtlLCJyZXNpemVFbmFibGVkIiwhMCksdy5hZGRHZXR0ZXJTZXR0ZXIoS2UsImFuY2hvclNpemUiLDEwLHAoKSksdy5hZGRHZXR0ZXJTZXR0ZXIoS2UsInJvdGF0ZUVuYWJsZWQiLCEwKSx3LmFkZEdldHRlclNldHRlcihLZSwicm90YXRpb25TbmFwcyIsW10pLHcuYWRkR2V0dGVyU2V0dGVyKEtlLCJyb3RhdGVBbmNob3JPZmZzZXQiLDUwLHAoKSksdy5hZGRHZXR0ZXJTZXR0ZXIoS2UsInJvdGF0aW9uU25hcFRvbGVyYW5jZSIsNSxwKCkpLHcuYWRkR2V0dGVyU2V0dGVyKEtlLCJib3JkZXJFbmFibGVkIiwhMCksdy5hZGRHZXR0ZXJTZXR0ZXIoS2UsImFuY2hvclN0cm9rZSIsInJnYigwLCAxNjEsIDI1NSkiKSx3LmFkZEdldHRlclNldHRlcihLZSwiYW5jaG9yU3Ryb2tlV2lkdGgiLDEscCgpKSx3LmFkZEdldHRlclNldHRlcihLZSwiYW5jaG9yRmlsbCIsIndoaXRlIiksdy5hZGRHZXR0ZXJTZXR0ZXIoS2UsImFuY2hvckNvcm5lclJhZGl1cyIsMCxwKCkpLHcuYWRkR2V0dGVyU2V0dGVyKEtlLCJib3JkZXJTdHJva2UiLCJyZ2IoMCwgMTYxLCAyNTUpIiksdy5hZGRHZXR0ZXJTZXR0ZXIoS2UsImJvcmRlclN0cm9rZVdpZHRoIiwxLHAoKSksdy5hZGRHZXR0ZXJTZXR0ZXIoS2UsImJvcmRlckRhc2giKSx3LmFkZEdldHRlclNldHRlcihLZSwia2VlcFJhdGlvIiwhMCksdy5hZGRHZXR0ZXJTZXR0ZXIoS2UsImNlbnRlcmVkU2NhbGluZyIsITEpLHcuYWRkR2V0dGVyU2V0dGVyKEtlLCJpZ25vcmVTdHJva2UiLCExKSx3LmFkZEdldHRlclNldHRlcihLZSwicGFkZGluZyIsMCxwKCkpLHcuYWRkR2V0dGVyU2V0dGVyKEtlLCJub2RlIiksdy5hZGRHZXR0ZXJTZXR0ZXIoS2UsIm5vZGVzIiksdy5hZGRHZXR0ZXJTZXR0ZXIoS2UsImJvdW5kQm94RnVuYyIpLHcuYWRkR2V0dGVyU2V0dGVyKEtlLCJhbmNob3JEcmFnQm91bmRGdW5jIiksdy5hZGRHZXR0ZXJTZXR0ZXIoS2UsInNob3VsZE92ZXJkcmF3V2hvbGVBcmVhIiwhMSksdy5hZGRHZXR0ZXJTZXR0ZXIoS2UsInVzZVNpbmdsZU5vZGVSb3RhdGlvbiIsITApLHcuYmFja0NvbXBhdChLZSx7bGluZUVuYWJsZWQ6ImJvcmRlckVuYWJsZWQiLHJvdGF0ZUhhbmRsZXJPZmZzZXQ6InJvdGF0ZUFuY2hvck9mZnNldCIsZW5hYmxlZEhhbmRsZXJzOiJlbmFibGVkQW5jaG9ycyJ9KTtjbGFzcyBRZSBleHRlbmRzIHp0e19zY2VuZUZ1bmModCl7dC5iZWdpblBhdGgoKSx0LmFyYygwLDAsdGhpcy5yYWRpdXMoKSwwLGkuZ2V0QW5nbGUodGhpcy5hbmdsZSgpKSx0aGlzLmNsb2Nrd2lzZSgpKSx0LmxpbmVUbygwLDApLHQuY2xvc2VQYXRoKCksdC5maWxsU3Ryb2tlU2hhcGUodGhpcyl9Z2V0V2lkdGgoKXtyZXR1cm4gMip0aGlzLnJhZGl1cygpfWdldEhlaWdodCgpe3JldHVybiAyKnRoaXMucmFkaXVzKCl9c2V0V2lkdGgodCl7dGhpcy5yYWRpdXModC8yKX1zZXRIZWlnaHQodCl7dGhpcy5yYWRpdXModC8yKX19ZnVuY3Rpb24gSmUoKXt0aGlzLnI9MCx0aGlzLmc9MCx0aGlzLmI9MCx0aGlzLmE9MCx0aGlzLm5leHQ9bnVsbH1RZS5wcm90b3R5cGUuY2xhc3NOYW1lPSJXZWRnZSIsUWUucHJvdG90eXBlLl9jZW50cm9pZD0hMCxRZS5wcm90b3R5cGUuX2F0dHJzQWZmZWN0aW5nU2l6ZT1bInJhZGl1cyJdLHIoUWUpLHcuYWRkR2V0dGVyU2V0dGVyKFFlLCJyYWRpdXMiLDAscCgpKSx3LmFkZEdldHRlclNldHRlcihRZSwiYW5nbGUiLDAscCgpKSx3LmFkZEdldHRlclNldHRlcihRZSwiY2xvY2t3aXNlIiwhMSksdy5iYWNrQ29tcGF0KFFlLHthbmdsZURlZzoiYW5nbGUiLGdldEFuZ2xlRGVnOiJnZXRBbmdsZSIsc2V0QW5nbGVEZWc6InNldEFuZ2xlIn0pO3ZhciBaZT1bNTEyLDUxMiw0NTYsNTEyLDMyOCw0NTYsMzM1LDUxMiw0MDUsMzI4LDI3MSw0NTYsMzg4LDMzNSwyOTIsNTEyLDQ1NCw0MDUsMzY0LDMyOCwyOTgsMjcxLDQ5Niw0NTYsNDIwLDM4OCwzNjAsMzM1LDMxMiwyOTIsMjczLDUxMiw0ODIsNDU0LDQyOCw0MDUsMzgzLDM2NCwzNDUsMzI4LDMxMiwyOTgsMjg0LDI3MSwyNTksNDk2LDQ3NSw0NTYsNDM3LDQyMCw0MDQsMzg4LDM3NCwzNjAsMzQ3LDMzNSwzMjMsMzEyLDMwMiwyOTIsMjgyLDI3MywyNjUsNTEyLDQ5Nyw0ODIsNDY4LDQ1NCw0NDEsNDI4LDQxNyw0MDUsMzk0LDM4MywzNzMsMzY0LDM1NCwzNDUsMzM3LDMyOCwzMjAsMzEyLDMwNSwyOTgsMjkxLDI4NCwyNzgsMjcxLDI2NSwyNTksNTA3LDQ5Niw0ODUsNDc1LDQ2NSw0NTYsNDQ2LDQzNyw0MjgsNDIwLDQxMiw0MDQsMzk2LDM4OCwzODEsMzc0LDM2NywzNjAsMzU0LDM0NywzNDEsMzM1LDMyOSwzMjMsMzE4LDMxMiwzMDcsMzAyLDI5NywyOTIsMjg3LDI4MiwyNzgsMjczLDI2OSwyNjUsMjYxLDUxMiw1MDUsNDk3LDQ4OSw0ODIsNDc1LDQ2OCw0NjEsNDU0LDQ0Nyw0NDEsNDM1LDQyOCw0MjIsNDE3LDQxMSw0MDUsMzk5LDM5NCwzODksMzgzLDM3OCwzNzMsMzY4LDM2NCwzNTksMzU0LDM1MCwzNDUsMzQxLDMzNywzMzIsMzI4LDMyNCwzMjAsMzE2LDMxMiwzMDksMzA1LDMwMSwyOTgsMjk0LDI5MSwyODcsMjg0LDI4MSwyNzgsMjc0LDI3MSwyNjgsMjY1LDI2MiwyNTksMjU3LDUwNyw1MDEsNDk2LDQ5MSw0ODUsNDgwLDQ3NSw0NzAsNDY1LDQ2MCw0NTYsNDUxLDQ0Niw0NDIsNDM3LDQzMyw0MjgsNDI0LDQyMCw0MTYsNDEyLDQwOCw0MDQsNDAwLDM5NiwzOTIsMzg4LDM4NSwzODEsMzc3LDM3NCwzNzAsMzY3LDM2MywzNjAsMzU3LDM1NCwzNTAsMzQ3LDM0NCwzNDEsMzM4LDMzNSwzMzIsMzI5LDMyNiwzMjMsMzIwLDMxOCwzMTUsMzEyLDMxMCwzMDcsMzA0LDMwMiwyOTksMjk3LDI5NCwyOTIsMjg5LDI4NywyODUsMjgyLDI4MCwyNzgsMjc1LDI3MywyNzEsMjY5LDI2NywyNjUsMjYzLDI2MSwyNTldLCRlPVs5LDExLDEyLDEzLDEzLDE0LDE0LDE1LDE1LDE1LDE1LDE2LDE2LDE2LDE2LDE3LDE3LDE3LDE3LDE3LDE3LDE3LDE4LDE4LDE4LDE4LDE4LDE4LDE4LDE4LDE4LDE5LDE5LDE5LDE5LDE5LDE5LDE5LDE5LDE5LDE5LDE5LDE5LDE5LDE5LDIwLDIwLDIwLDIwLDIwLDIwLDIwLDIwLDIwLDIwLDIwLDIwLDIwLDIwLDIwLDIwLDIwLDIwLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIxLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIyLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDIzLDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0LDI0XTt3LmFkZEdldHRlclNldHRlcihLLCJibHVyUmFkaXVzIiwwLHAoKSx3LmFmdGVyU2V0RmlsdGVyKTt3LmFkZEdldHRlclNldHRlcihLLCJicmlnaHRuZXNzIiwwLHAoKSx3LmFmdGVyU2V0RmlsdGVyKTt3LmFkZEdldHRlclNldHRlcihLLCJjb250cmFzdCIsMCxwKCksdy5hZnRlclNldEZpbHRlcik7ZnVuY3Rpb24gdGkodCxlLGkscixhKXt2YXIgbj1pLWUscz1hLXI7cmV0dXJuIDA9PT1uP3Ircy8yOjA9PT1zP3I6cyooKHQtZSkvbikrcn13LmFkZEdldHRlclNldHRlcihLLCJlbWJvc3NTdHJlbmd0aCIsLjUscCgpLHcuYWZ0ZXJTZXRGaWx0ZXIpLHcuYWRkR2V0dGVyU2V0dGVyKEssImVtYm9zc1doaXRlTGV2ZWwiLC41LHAoKSx3LmFmdGVyU2V0RmlsdGVyKSx3LmFkZEdldHRlclNldHRlcihLLCJlbWJvc3NEaXJlY3Rpb24iLCJ0b3AtbGVmdCIsbnVsbCx3LmFmdGVyU2V0RmlsdGVyKSx3LmFkZEdldHRlclNldHRlcihLLCJlbWJvc3NCbGVuZCIsITEsbnVsbCx3LmFmdGVyU2V0RmlsdGVyKTt3LmFkZEdldHRlclNldHRlcihLLCJlbmhhbmNlIiwwLHAoKSx3LmFmdGVyU2V0RmlsdGVyKTt3LmFkZEdldHRlclNldHRlcihLLCJodWUiLDAscCgpLHcuYWZ0ZXJTZXRGaWx0ZXIpLHcuYWRkR2V0dGVyU2V0dGVyKEssInNhdHVyYXRpb24iLDAscCgpLHcuYWZ0ZXJTZXRGaWx0ZXIpLHcuYWRkR2V0dGVyU2V0dGVyKEssImx1bWluYW5jZSIsMCxwKCksdy5hZnRlclNldEZpbHRlcik7dy5hZGRHZXR0ZXJTZXR0ZXIoSywiaHVlIiwwLHAoKSx3LmFmdGVyU2V0RmlsdGVyKSx3LmFkZEdldHRlclNldHRlcihLLCJzYXR1cmF0aW9uIiwwLHAoKSx3LmFmdGVyU2V0RmlsdGVyKSx3LmFkZEdldHRlclNldHRlcihLLCJ2YWx1ZSIsMCxwKCksdy5hZnRlclNldEZpbHRlcik7ZnVuY3Rpb24gZWkodCxlLGkpe3ZhciByPTQqKGkqdC53aWR0aCtlKSxhPVtdO3JldHVybiBhLnB1c2godC5kYXRhW3IrK10sdC5kYXRhW3IrK10sdC5kYXRhW3IrK10sdC5kYXRhW3IrK10pLGF9ZnVuY3Rpb24gaWkodCxlKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHRbMF0tZVswXSwyKStNYXRoLnBvdyh0WzFdLWVbMV0sMikrTWF0aC5wb3codFsyXS1lWzJdLDIpKX13LmFkZEdldHRlclNldHRlcihLLCJrYWxlaWRvc2NvcGVQb3dlciIsMixwKCksdy5hZnRlclNldEZpbHRlciksdy5hZGRHZXR0ZXJTZXR0ZXIoSywia2FsZWlkb3Njb3BlQW5nbGUiLDAscCgpLHcuYWZ0ZXJTZXRGaWx0ZXIpO3cuYWRkR2V0dGVyU2V0dGVyKEssInRocmVzaG9sZCIsMCxwKCksdy5hZnRlclNldEZpbHRlcik7dy5hZGRHZXR0ZXJTZXR0ZXIoSywibm9pc2UiLC4yLHAoKSx3LmFmdGVyU2V0RmlsdGVyKTt3LmFkZEdldHRlclNldHRlcihLLCJwaXhlbFNpemUiLDgscCgpLHcuYWZ0ZXJTZXRGaWx0ZXIpO3cuYWRkR2V0dGVyU2V0dGVyKEssImxldmVscyIsLjUscCgpLHcuYWZ0ZXJTZXRGaWx0ZXIpO3cuYWRkR2V0dGVyU2V0dGVyKEssInJlZCIsMCwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ZpbHRlclVwVG9EYXRlPSExLHQ+MjU1PzI1NTp0PDA/MDpNYXRoLnJvdW5kKHQpfSkpLHcuYWRkR2V0dGVyU2V0dGVyKEssImdyZWVuIiwwLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZmlsdGVyVXBUb0RhdGU9ITEsdD4yNTU/MjU1OnQ8MD8wOk1hdGgucm91bmQodCl9KSksdy5hZGRHZXR0ZXJTZXR0ZXIoSywiYmx1ZSIsMCxmLHcuYWZ0ZXJTZXRGaWx0ZXIpO3cuYWRkR2V0dGVyU2V0dGVyKEssInJlZCIsMCwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ZpbHRlclVwVG9EYXRlPSExLHQ+MjU1PzI1NTp0PDA/MDpNYXRoLnJvdW5kKHQpfSkpLHcuYWRkR2V0dGVyU2V0dGVyKEssImdyZWVuIiwwLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZmlsdGVyVXBUb0RhdGU9ITEsdD4yNTU/MjU1OnQ8MD8wOk1hdGgucm91bmQodCl9KSksdy5hZGRHZXR0ZXJTZXR0ZXIoSywiYmx1ZSIsMCxmLHcuYWZ0ZXJTZXRGaWx0ZXIpLHcuYWRkR2V0dGVyU2V0dGVyKEssImFscGhhIiwxLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZmlsdGVyVXBUb0RhdGU9ITEsdD4xPzE6dDwwPzA6dH0pKTt3LmFkZEdldHRlclNldHRlcihLLCJ0aHJlc2hvbGQiLC41LHAoKSx3LmFmdGVyU2V0RmlsdGVyKTtyZXR1cm4gdGUuVXRpbC5fYXNzaWduKHRlLHtBcmM6ZWUsQXJyb3c6c2UsQ2lyY2xlOm9lLEVsbGlwc2U6aGUsSW1hZ2U6bGUsTGFiZWw6dmUsVGFnOm1lLExpbmU6YWUsUGF0aDpuZSxSZWN0Ol9lLFJlZ3VsYXJQb2x5Z29uOnllLFJpbmc6YmUsU3ByaXRlOlNlLFN0YXI6d2UsVGV4dDpPZSxUZXh0UGF0aDpCZSxUcmFuc2Zvcm1lcjpLZSxXZWRnZTpRZSxGaWx0ZXJzOntCbHVyOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucm91bmQodGhpcy5ibHVyUmFkaXVzKCkpO2U+MCYmZnVuY3Rpb24odCxlKXt2YXIgaSxyLGEsbixzLG8saCxsLGQsYyxnLHUsZixwLHYsbSxfLHkseCxiLFMsdyxDLGssUD10LmRhdGEsVD10LndpZHRoLEE9dC5oZWlnaHQsTT1lK2UrMSxHPVQtMSxFPUEtMSxSPWUrMSxMPVIqKFIrMSkvMixEPW5ldyBKZSxPPW51bGwsST1ELEY9bnVsbCxOPW51bGwsQj1aZVtlXSx6PSRlW2VdO2ZvcihhPTE7YTxNO2ErKylJPUkubmV4dD1uZXcgSmUsYT09PVImJihPPUkpO2ZvcihJLm5leHQ9RCxoPW89MCxyPTA7cjxBO3IrKyl7Zm9yKG09Xz15PXg9bD1kPWM9Zz0wLHU9UiooYj1QW29dKSxmPVIqKFM9UFtvKzFdKSxwPVIqKHc9UFtvKzJdKSx2PVIqKEM9UFtvKzNdKSxsKz1MKmIsZCs9TCpTLGMrPUwqdyxnKz1MKkMsST1ELGE9MDthPFI7YSsrKUkucj1iLEkuZz1TLEkuYj13LEkuYT1DLEk9SS5uZXh0O2ZvcihhPTE7YTxSO2ErKyluPW8rKChHPGE/RzphKTw8MiksbCs9KEkucj1iPVBbbl0pKihrPVItYSksZCs9KEkuZz1TPVBbbisxXSkqayxjKz0oSS5iPXc9UFtuKzJdKSprLGcrPShJLmE9Qz1QW24rM10pKmssbSs9YixfKz1TLHkrPXcseCs9QyxJPUkubmV4dDtmb3IoRj1ELE49TyxpPTA7aTxUO2krKylQW28rM109Qz1nKkI+PnosMCE9PUM/KEM9MjU1L0MsUFtvXT0obCpCPj56KSpDLFBbbysxXT0oZCpCPj56KSpDLFBbbysyXT0oYypCPj56KSpDKTpQW29dPVBbbysxXT1QW28rMl09MCxsLT11LGQtPWYsYy09cCxnLT12LHUtPUYucixmLT1GLmcscC09Ri5iLHYtPUYuYSxuPWgrKChuPWkrZSsxKTxHP246Ryk8PDIsbCs9bSs9Ri5yPVBbbl0sZCs9Xys9Ri5nPVBbbisxXSxjKz15Kz1GLmI9UFtuKzJdLGcrPXgrPUYuYT1QW24rM10sRj1GLm5leHQsdSs9Yj1OLnIsZis9Uz1OLmcscCs9dz1OLmIsdis9Qz1OLmEsbS09YixfLT1TLHktPXcseC09QyxOPU4ubmV4dCxvKz00O2grPVR9Zm9yKGk9MDtpPFQ7aSsrKXtmb3IoXz15PXg9bT1kPWM9Zz1sPTAsdT1SKihiPVBbbz1pPDwyXSksZj1SKihTPVBbbysxXSkscD1SKih3PVBbbysyXSksdj1SKihDPVBbbyszXSksbCs9TCpiLGQrPUwqUyxjKz1MKncsZys9TCpDLEk9RCxhPTA7YTxSO2ErKylJLnI9YixJLmc9UyxJLmI9dyxJLmE9QyxJPUkubmV4dDtmb3Iocz1ULGE9MTthPD1lO2ErKylvPXMraTw8MixsKz0oSS5yPWI9UFtvXSkqKGs9Ui1hKSxkKz0oSS5nPVM9UFtvKzFdKSprLGMrPShJLmI9dz1QW28rMl0pKmssZys9KEkuYT1DPVBbbyszXSkqayxtKz1iLF8rPVMseSs9dyx4Kz1DLEk9SS5uZXh0LGE8RSYmKHMrPVQpO2ZvcihvPWksRj1ELE49TyxyPTA7cjxBO3IrKylQWzMrKG49bzw8MildPUM9ZypCPj56LEM+MD8oQz0yNTUvQyxQW25dPShsKkI+PnopKkMsUFtuKzFdPShkKkI+PnopKkMsUFtuKzJdPShjKkI+PnopKkMpOlBbbl09UFtuKzFdPVBbbisyXT0wLGwtPXUsZC09ZixjLT1wLGctPXYsdS09Ri5yLGYtPUYuZyxwLT1GLmIsdi09Ri5hLG49aSsoKG49citSKTxFP246RSkqVDw8MixsKz1tKz1GLnI9UFtuXSxkKz1fKz1GLmc9UFtuKzFdLGMrPXkrPUYuYj1QW24rMl0sZys9eCs9Ri5hPVBbbiszXSxGPUYubmV4dCx1Kz1iPU4ucixmKz1TPU4uZyxwKz13PU4uYix2Kz1DPU4uYSxtLT1iLF8tPVMseS09dyx4LT1DLE49Ti5uZXh0LG8rPVR9fSh0LGUpfSxCcmlnaHRlbjpmdW5jdGlvbih0KXt2YXIgZSxpPTI1NSp0aGlzLmJyaWdodG5lc3MoKSxyPXQuZGF0YSxhPXIubGVuZ3RoO2ZvcihlPTA7ZTxhO2UrPTQpcltlXSs9aSxyW2UrMV0rPWkscltlKzJdKz1pfSxDb250cmFzdDpmdW5jdGlvbih0KXt2YXIgZSxpPU1hdGgucG93KCh0aGlzLmNvbnRyYXN0KCkrMTAwKS8xMDAsMikscj10LmRhdGEsYT1yLmxlbmd0aCxuPTE1MCxzPTE1MCxvPTE1MDtmb3IoZT0wO2U8YTtlKz00KW49cltlXSxzPXJbZSsxXSxvPXJbZSsyXSxuLz0yNTUsbi09LjUsbio9aSxuKz0uNSxzLz0yNTUscy09LjUscyo9aSxzKz0uNSxvLz0yNTUsby09LjUsbyo9aSxvKz0uNSxuPShuKj0yNTUpPDA/MDpuPjI1NT8yNTU6bixzPShzKj0yNTUpPDA/MDpzPjI1NT8yNTU6cyxvPShvKj0yNTUpPDA/MDpvPjI1NT8yNTU6byxyW2VdPW4scltlKzFdPXMscltlKzJdPW99LEVtYm9zczpmdW5jdGlvbih0KXt2YXIgZT0xMCp0aGlzLmVtYm9zc1N0cmVuZ3RoKCksaT0yNTUqdGhpcy5lbWJvc3NXaGl0ZUxldmVsKCkscj10aGlzLmVtYm9zc0RpcmVjdGlvbigpLGE9dGhpcy5lbWJvc3NCbGVuZCgpLG49MCxzPTAsbz10LmRhdGEsaD10LndpZHRoLGw9dC5oZWlnaHQsZD00KmgsYz1sO3N3aXRjaChyKXtjYXNlInRvcC1sZWZ0IjpuPS0xLHM9LTE7YnJlYWs7Y2FzZSJ0b3AiOm49LTEscz0wO2JyZWFrO2Nhc2UidG9wLXJpZ2h0IjpuPS0xLHM9MTticmVhaztjYXNlInJpZ2h0IjpuPTAscz0xO2JyZWFrO2Nhc2UiYm90dG9tLXJpZ2h0IjpuPTEscz0xO2JyZWFrO2Nhc2UiYm90dG9tIjpuPTEscz0wO2JyZWFrO2Nhc2UiYm90dG9tLWxlZnQiOm49MSxzPS0xO2JyZWFrO2Nhc2UibGVmdCI6bj0wLHM9LTE7YnJlYWs7ZGVmYXVsdDpnLmVycm9yKCJVbmtub3duIGVtYm9zcyBkaXJlY3Rpb246ICIrcil9ZG97dmFyIHU9KGMtMSkqZCxmPW47YytmPDEmJihmPTApLGMrZj5sJiYoZj0wKTt2YXIgcD0oYy0xK2YpKmgqNCx2PWg7ZG97dmFyIG09dSs0Kih2LTEpLF89czt2K188MSYmKF89MCksditfPmgmJihfPTApO3ZhciB5PXArNCoodi0xK18pLHg9b1ttXS1vW3ldLGI9b1ttKzFdLW9beSsxXSxTPW9bbSsyXS1vW3krMl0sdz14LEM9dz4wP3c6LXc7aWYoKGI+MD9iOi1iKT5DJiYodz1iKSwoUz4wP1M6LVMpPkMmJih3PVMpLHcqPWUsYSl7dmFyIGs9b1ttXSt3LFA9b1ttKzFdK3csVD1vW20rMl0rdztvW21dPWs+MjU1PzI1NTprPDA/MDprLG9bbSsxXT1QPjI1NT8yNTU6UDwwPzA6UCxvW20rMl09VD4yNTU/MjU1OlQ8MD8wOlR9ZWxzZXt2YXIgQT1pLXc7QTwwP0E9MDpBPjI1NSYmKEE9MjU1KSxvW21dPW9bbSsxXT1vW20rMl09QX19d2hpbGUoLS12KX13aGlsZSgtLWMpfSxFbmhhbmNlOmZ1bmN0aW9uKHQpe3ZhciBlLGkscixhLG49dC5kYXRhLHM9bi5sZW5ndGgsbz1uWzBdLGg9byxsPW5bMV0sZD1sLGM9blsyXSxnPWMsdT10aGlzLmVuaGFuY2UoKTtpZigwIT09dSl7Zm9yKGE9MDthPHM7YSs9NCkoZT1uW2ErMF0pPG8/bz1lOmU+aCYmKGg9ZSksKGk9blthKzFdKTxsP2w9aTppPmQmJihkPWkpLChyPW5bYSsyXSk8Yz9jPXI6cj5nJiYoZz1yKTt2YXIgZixwLHYsbSxfLHkseCxiLFM7Zm9yKGg9PT1vJiYoaD0yNTUsbz0wKSxkPT09bCYmKGQ9MjU1LGw9MCksZz09PWMmJihnPTI1NSxjPTApLHU+MD8ocD1oK3UqKDI1NS1oKSx2PW8tdSooby0wKSxfPWQrdSooMjU1LWQpLHk9bC11KihsLTApLGI9Zyt1KigyNTUtZyksUz1jLXUqKGMtMCkpOihwPWgrdSooaC0oZj0uNSooaCtvKSkpLHY9byt1KihvLWYpLF89ZCt1KihkLShtPS41KihkK2wpKSkseT1sK3UqKGwtbSksYj1nK3UqKGctKHg9LjUqKGcrYykpKSxTPWMrdSooYy14KSksYT0wO2E8czthKz00KW5bYSswXT10aShuW2ErMF0sbyxoLHYscCksblthKzFdPXRpKG5bYSsxXSxsLGQseSxfKSxuW2ErMl09dGkoblthKzJdLGMsZyxTLGIpfX0sR3JheXNjYWxlOmZ1bmN0aW9uKHQpe3ZhciBlLGkscj10LmRhdGEsYT1yLmxlbmd0aDtmb3IoZT0wO2U8YTtlKz00KWk9LjM0KnJbZV0rLjUqcltlKzFdKy4xNipyW2UrMl0scltlXT1pLHJbZSsxXT1pLHJbZSsyXT1pfSxIU0w6ZnVuY3Rpb24odCl7dmFyIGUsaSxyLGEsbixzPXQuZGF0YSxvPXMubGVuZ3RoLGg9TWF0aC5wb3coMix0aGlzLnNhdHVyYXRpb24oKSksbD1NYXRoLmFicyh0aGlzLmh1ZSgpKzM2MCklMzYwLGQ9MTI3KnRoaXMubHVtaW5hbmNlKCksYz0xKmgqTWF0aC5jb3MobCpNYXRoLlBJLzE4MCksZz0xKmgqTWF0aC5zaW4obCpNYXRoLlBJLzE4MCksdT0uMjk5Ky43MDEqYysuMTY3KmcsZj0uNTg3LS41ODcqYysuMzMqZyxwPS4xMTQtLjExNCpjLS40OTcqZyx2PS4yOTktLjI5OSpjLS4zMjgqZyxtPS41ODcrLjQxMypjKy4wMzUqZyxfPS4xMTQtLjExNCpjKy4yOTMqZyx5PS4yOTktLjMqYysxLjI1KmcseD0uNTg3LS41ODYqYy0xLjA1KmcsYj0uMTE0Ky44ODYqYy0uMipnO2ZvcihlPTA7ZTxvO2UrPTQpaT1zW2UrMF0scj1zW2UrMV0sYT1zW2UrMl0sbj1zW2UrM10sc1tlKzBdPXUqaStmKnIrcCphK2Qsc1tlKzFdPXYqaSttKnIrXyphK2Qsc1tlKzJdPXkqaSt4KnIrYiphK2Qsc1tlKzNdPW59LEhTVjpmdW5jdGlvbih0KXt2YXIgZSxpLHIsYSxuLHM9dC5kYXRhLG89cy5sZW5ndGgsaD1NYXRoLnBvdygyLHRoaXMudmFsdWUoKSksbD1NYXRoLnBvdygyLHRoaXMuc2F0dXJhdGlvbigpKSxkPU1hdGguYWJzKHRoaXMuaHVlKCkrMzYwKSUzNjAsYz1oKmwqTWF0aC5jb3MoZCpNYXRoLlBJLzE4MCksZz1oKmwqTWF0aC5zaW4oZCpNYXRoLlBJLzE4MCksdT0uMjk5KmgrLjcwMSpjKy4xNjcqZyxmPS41ODcqaC0uNTg3KmMrLjMzKmcscD0uMTE0KmgtLjExNCpjLS40OTcqZyx2PS4yOTkqaC0uMjk5KmMtLjMyOCpnLG09LjU4NypoKy40MTMqYysuMDM1KmcsXz0uMTE0KmgtLjExNCpjKy4yOTMqZyx5PS4yOTkqaC0uMypjKzEuMjUqZyx4PS41ODcqaC0uNTg2KmMtMS4wNSpnLGI9LjExNCpoKy44ODYqYy0uMipnO2ZvcihlPTA7ZTxvO2UrPTQpaT1zW2UrMF0scj1zW2UrMV0sYT1zW2UrMl0sbj1zW2UrM10sc1tlKzBdPXUqaStmKnIrcCphLHNbZSsxXT12KmkrbSpyK18qYSxzW2UrMl09eSppK3gqcitiKmEsc1tlKzNdPW59LEludmVydDpmdW5jdGlvbih0KXt2YXIgZSxpPXQuZGF0YSxyPWkubGVuZ3RoO2ZvcihlPTA7ZTxyO2UrPTQpaVtlXT0yNTUtaVtlXSxpW2UrMV09MjU1LWlbZSsxXSxpW2UrMl09MjU1LWlbZSsyXX0sS2FsZWlkb3Njb3BlOmZ1bmN0aW9uKHQpe3ZhciBlLGkscixhLG4scyxvLGgsbCxkPXQud2lkdGgsYz10LmhlaWdodCx1PU1hdGgucm91bmQodGhpcy5rYWxlaWRvc2NvcGVQb3dlcigpKSxmPU1hdGgucm91bmQodGhpcy5rYWxlaWRvc2NvcGVBbmdsZSgpKSxwPU1hdGguZmxvb3IoZCooZiUzNjApLzM2MCk7aWYoISh1PDEpKXt2YXIgdj1nLmNyZWF0ZUNhbnZhc0VsZW1lbnQoKTt2LndpZHRoPWQsdi5oZWlnaHQ9Yzt2YXIgbT12LmdldENvbnRleHQoIjJkIikuZ2V0SW1hZ2VEYXRhKDAsMCxkLGMpOyFmdW5jdGlvbih0LGUsaSl7dmFyIHIsYSxuLHMsbz10LmRhdGEsaD1lLmRhdGEsbD10LndpZHRoLGQ9dC5oZWlnaHQsYz1pLnBvbGFyQ2VudGVyWHx8bC8yLGc9aS5wb2xhckNlbnRlcll8fGQvMix1PTAsZj0wLHA9MCx2PTAsbT1NYXRoLnNxcnQoYypjK2cqZyk7YT1sLWMsbj1kLWcsbT0ocz1NYXRoLnNxcnQoYSphK24qbikpPm0/czptO3ZhciBfLHkseCxiLFM9ZCx3PWwsQz0zNjAvdypNYXRoLlBJLzE4MDtmb3IoeT0wO3k8dzt5Kz0xKWZvcih4PU1hdGguc2luKHkqQyksYj1NYXRoLmNvcyh5KkMpLF89MDtfPFM7Xys9MSlhPU1hdGguZmxvb3IoYyttKl8vUypiKSx1PW9bMCsocj00Kigobj1NYXRoLmZsb29yKGcrbSpfL1MqeCkpKmwrYSkpXSxmPW9bcisxXSxwPW9bcisyXSx2PW9bciszXSxoWzArKHI9NCooeStfKmwpKV09dSxoW3IrMV09ZixoW3IrMl09cCxoW3IrM109dn0odCxtLHtwb2xhckNlbnRlclg6ZC8yLHBvbGFyQ2VudGVyWTpjLzJ9KTtmb3IodmFyIF89ZC9NYXRoLnBvdygyLHUpO188PTg7KV8qPTIsdS09MTt2YXIgeT1fPU1hdGguY2VpbChfKSx4PTAsYj15LFM9MTtmb3IocCtfPmQmJih4PXksYj0wLFM9LTEpLGk9MDtpPGM7aSs9MSlmb3IoZT14O2UhPT1iO2UrPVMpaD00KihkKmkrTWF0aC5yb3VuZChlK3ApJWQpLGE9bS5kYXRhW2grMF0sbj1tLmRhdGFbaCsxXSxzPW0uZGF0YVtoKzJdLG89bS5kYXRhW2grM10sbD00KihkKmkrZSksbS5kYXRhW2wrMF09YSxtLmRhdGFbbCsxXT1uLG0uZGF0YVtsKzJdPXMsbS5kYXRhW2wrM109bztmb3IoaT0wO2k8YztpKz0xKWZvcih5PU1hdGguZmxvb3IoXykscj0wO3I8dTtyKz0xKXtmb3IoZT0wO2U8eSsxO2UrPTEpaD00KihkKmkrZSksYT1tLmRhdGFbaCswXSxuPW0uZGF0YVtoKzFdLHM9bS5kYXRhW2grMl0sbz1tLmRhdGFbaCszXSxsPTQqKGQqaSsyKnktZS0xKSxtLmRhdGFbbCswXT1hLG0uZGF0YVtsKzFdPW4sbS5kYXRhW2wrMl09cyxtLmRhdGFbbCszXT1vO3kqPTJ9IWZ1bmN0aW9uKHQsZSxpKXt2YXIgcixhLG4scyxvLGgsbD10LmRhdGEsZD1lLmRhdGEsYz10LndpZHRoLGc9dC5oZWlnaHQsdT1pLnBvbGFyQ2VudGVyWHx8Yy8yLGY9aS5wb2xhckNlbnRlcll8fGcvMixwPTAsdj0wLG09MCxfPTAseT1NYXRoLnNxcnQodSp1K2YqZik7YT1jLXUsbj1nLWYseT0oaD1NYXRoLnNxcnQoYSphK24qbikpPnk/aDp5O3ZhciB4LGIsUyx3PWcsQz1jLGs9aS5wb2xhclJvdGF0aW9ufHwwO2ZvcihhPTA7YTxjO2ErPTEpZm9yKG49MDtuPGc7bis9MSlzPWEtdSxvPW4tZix4PU1hdGguc3FydChzKnMrbypvKSp3L3ksYj0oYj0oMTgwKk1hdGguYXRhbjIobyxzKS9NYXRoLlBJKzM2MCtrKSUzNjApKkMvMzYwLFM9TWF0aC5mbG9vcihiKSxwPWxbMCsocj00KihNYXRoLmZsb29yKHgpKmMrUykpXSx2PWxbcisxXSxtPWxbcisyXSxfPWxbciszXSxkWzArKHI9NCoobipjK2EpKV09cCxkW3IrMV09dixkW3IrMl09bSxkW3IrM109X30obSx0LHtwb2xhclJvdGF0aW9uOjB9KX19LE1hc2s6ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCxlKXt2YXIgaT1laSh0LDAsMCkscj1laSh0LHQud2lkdGgtMSwwKSxhPWVpKHQsMCx0LmhlaWdodC0xKSxuPWVpKHQsdC53aWR0aC0xLHQuaGVpZ2h0LTEpLHM9ZXx8MTA7aWYoaWkoaSxyKTxzJiZpaShyLG4pPHMmJmlpKG4sYSk8cyYmaWkoYSxpKTxzKXtmb3IodmFyIG89ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVswLDAsMF0saT0wO2k8dC5sZW5ndGg7aSsrKWVbMF0rPXRbaV1bMF0sZVsxXSs9dFtpXVsxXSxlWzJdKz10W2ldWzJdO3JldHVybiBlWzBdLz10Lmxlbmd0aCxlWzFdLz10Lmxlbmd0aCxlWzJdLz10Lmxlbmd0aCxlfShbcixpLG4sYV0pLGg9W10sbD0wO2w8dC53aWR0aCp0LmhlaWdodDtsKyspe3ZhciBkPWlpKG8sW3QuZGF0YVs0KmxdLHQuZGF0YVs0KmwrMV0sdC5kYXRhWzQqbCsyXV0pO2hbbF09ZDxzPzA6MjU1fXJldHVybiBofX0odCx0aGlzLnRocmVzaG9sZCgpKTtyZXR1cm4gZSYmZnVuY3Rpb24odCxlKXtmb3IodmFyIGk9MDtpPHQud2lkdGgqdC5oZWlnaHQ7aSsrKXQuZGF0YVs0KmkrM109ZVtpXX0odCxlPWZ1bmN0aW9uKHQsZSxpKXtmb3IodmFyIHI9WzEvOSwxLzksMS85LDEvOSwxLzksMS85LDEvOSwxLzksMS85XSxhPU1hdGgucm91bmQoTWF0aC5zcXJ0KHIubGVuZ3RoKSksbj1NYXRoLmZsb29yKGEvMikscz1bXSxvPTA7bzxpO28rKylmb3IodmFyIGg9MDtoPGU7aCsrKXtmb3IodmFyIGw9byplK2gsZD0wLGM9MDtjPGE7YysrKWZvcih2YXIgZz0wO2c8YTtnKyspe3ZhciB1PW8rYy1uLGY9aCtnLW47aWYodT49MCYmdTxpJiZmPj0wJiZmPGUpe3ZhciBwPXJbYyphK2ddO2QrPXRbdSplK2ZdKnB9fXNbbF09ZH1yZXR1cm4gc30oZT1mdW5jdGlvbih0LGUsaSl7Zm9yKHZhciByPVsxLDEsMSwxLDEsMSwxLDEsMV0sYT1NYXRoLnJvdW5kKE1hdGguc3FydChyLmxlbmd0aCkpLG49TWF0aC5mbG9vcihhLzIpLHM9W10sbz0wO288aTtvKyspZm9yKHZhciBoPTA7aDxlO2grKyl7Zm9yKHZhciBsPW8qZStoLGQ9MCxjPTA7YzxhO2MrKylmb3IodmFyIGc9MDtnPGE7ZysrKXt2YXIgdT1vK2MtbixmPWgrZy1uO2lmKHU+PTAmJnU8aSYmZj49MCYmZjxlKXt2YXIgcD1yW2MqYStnXTtkKz10W3UqZStmXSpwfX1zW2xdPWQ+PTEwMjA/MjU1OjB9cmV0dXJuIHN9KGU9ZnVuY3Rpb24odCxlLGkpe2Zvcih2YXIgcj1bMSwxLDEsMSwwLDEsMSwxLDFdLGE9TWF0aC5yb3VuZChNYXRoLnNxcnQoci5sZW5ndGgpKSxuPU1hdGguZmxvb3IoYS8yKSxzPVtdLG89MDtvPGk7bysrKWZvcih2YXIgaD0wO2g8ZTtoKyspe2Zvcih2YXIgbD1vKmUraCxkPTAsYz0wO2M8YTtjKyspZm9yKHZhciBnPTA7ZzxhO2crKyl7dmFyIHU9bytjLW4sZj1oK2ctbjtpZih1Pj0wJiZ1PGkmJmY+PTAmJmY8ZSl7dmFyIHA9cltjKmErZ107ZCs9dFt1KmUrZl0qcH19c1tsXT0yMDQwPT09ZD8yNTU6MH1yZXR1cm4gc30oZSx0LndpZHRoLHQuaGVpZ2h0KSx0LndpZHRoLHQuaGVpZ2h0KSx0LndpZHRoLHQuaGVpZ2h0KSksdH0sTm9pc2U6ZnVuY3Rpb24odCl7dmFyIGUsaT0yNTUqdGhpcy5ub2lzZSgpLHI9dC5kYXRhLGE9ci5sZW5ndGgsbj1pLzI7Zm9yKGU9MDtlPGE7ZSs9NClyW2UrMF0rPW4tMipuKk1hdGgucmFuZG9tKCkscltlKzFdKz1uLTIqbipNYXRoLnJhbmRvbSgpLHJbZSsyXSs9bi0yKm4qTWF0aC5yYW5kb20oKX0sUGl4ZWxhdGU6ZnVuY3Rpb24odCl7dmFyIGUsaSxyLGEsbixzLG8saCxsLGQsYyx1LGYscCx2PU1hdGguY2VpbCh0aGlzLnBpeGVsU2l6ZSgpKSxtPXQud2lkdGgsXz10LmhlaWdodCx5PU1hdGguY2VpbChtL3YpLHg9TWF0aC5jZWlsKF8vdiksYj10LmRhdGE7aWYodjw9MClnLmVycm9yKCJwaXhlbFNpemUgdmFsdWUgY2FuIG5vdCBiZSA8PSAwIik7ZWxzZSBmb3IodT0wO3U8eTt1Kz0xKWZvcihmPTA7Zjx4O2YrPTEpe2ZvcihhPTAsbj0wLHM9MCxvPTAsbD0oaD11KnYpK3YsYz0oZD1mKnYpK3YscD0wLGU9aDtlPGw7ZSs9MSlpZighKGU+PW0pKWZvcihpPWQ7aTxjO2krPTEpaT49X3x8KGErPWJbKHI9NCoobSppK2UpKSswXSxuKz1iW3IrMV0scys9YltyKzJdLG8rPWJbciszXSxwKz0xKTtmb3IoYS89cCxuLz1wLHMvPXAsby89cCxlPWg7ZTxsO2UrPTEpaWYoIShlPj1tKSlmb3IoaT1kO2k8YztpKz0xKWk+PV98fChiWyhyPTQqKG0qaStlKSkrMF09YSxiW3IrMV09bixiW3IrMl09cyxiW3IrM109byl9fSxQb3N0ZXJpemU6ZnVuY3Rpb24odCl7dmFyIGUsaT1NYXRoLnJvdW5kKDI1NCp0aGlzLmxldmVscygpKSsxLHI9dC5kYXRhLGE9ci5sZW5ndGgsbj0yNTUvaTtmb3IoZT0wO2U8YTtlKz0xKXJbZV09TWF0aC5mbG9vcihyW2VdL24pKm59LFJHQjpmdW5jdGlvbih0KXt2YXIgZSxpLHI9dC5kYXRhLGE9ci5sZW5ndGgsbj10aGlzLnJlZCgpLHM9dGhpcy5ncmVlbigpLG89dGhpcy5ibHVlKCk7Zm9yKGU9MDtlPGE7ZSs9NClpPSguMzQqcltlXSsuNSpyW2UrMV0rLjE2KnJbZSsyXSkvMjU1LHJbZV09aSpuLHJbZSsxXT1pKnMscltlKzJdPWkqbyxyW2UrM109cltlKzNdfSxSR0JBOmZ1bmN0aW9uKHQpe3ZhciBlLGkscj10LmRhdGEsYT1yLmxlbmd0aCxuPXRoaXMucmVkKCkscz10aGlzLmdyZWVuKCksbz10aGlzLmJsdWUoKSxoPXRoaXMuYWxwaGEoKTtmb3IoZT0wO2U8YTtlKz00KWk9MS1oLHJbZV09bipoK3JbZV0qaSxyW2UrMV09cypoK3JbZSsxXSppLHJbZSsyXT1vKmgrcltlKzJdKml9LFNlcGlhOmZ1bmN0aW9uKHQpe3ZhciBlLGkscixhLG49dC5kYXRhLHM9bi5sZW5ndGg7Zm9yKGU9MDtlPHM7ZSs9NClpPW5bZSswXSxyPW5bZSsxXSxhPW5bZSsyXSxuW2UrMF09TWF0aC5taW4oMjU1LC4zOTMqaSsuNzY5KnIrLjE4OSphKSxuW2UrMV09TWF0aC5taW4oMjU1LC4zNDkqaSsuNjg2KnIrLjE2OCphKSxuW2UrMl09TWF0aC5taW4oMjU1LC4yNzIqaSsuNTM0KnIrLjEzMSphKX0sU29sYXJpemU6ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhLGk9dC53aWR0aCxyPTQqaSxhPXQuaGVpZ2h0O2Rve3ZhciBuPShhLTEpKnIscz1pO2Rve3ZhciBvPW4rNCoocy0xKSxoPWVbb10sbD1lW28rMV0sZD1lW28rMl07aD4xMjcmJihoPTI1NS1oKSxsPjEyNyYmKGw9MjU1LWwpLGQ+MTI3JiYoZD0yNTUtZCksZVtvXT1oLGVbbysxXT1sLGVbbysyXT1kfXdoaWxlKC0tcyl9d2hpbGUoLS1hKX0sVGhyZXNob2xkOmZ1bmN0aW9uKHQpe3ZhciBlLGk9MjU1KnRoaXMudGhyZXNob2xkKCkscj10LmRhdGEsYT1yLmxlbmd0aDtmb3IoZT0wO2U8YTtlKz0xKXJbZV09cltlXTxpPzA6MjU1fX19KX0pKTsK'></script>
<style id=style_kogo>
body {
margin: 5px;
padding: 5px;
}
</style>
<!-- id=geturlparameter('id'); -->
<script id="script_geturlvars" >
// var number = geturlvars()["x"];
// var mytext = geturlvars()["text"];
// var mytext = geturlparam('text','Empty');
function geturlvars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
vars[key] = value;
});
return vars;
}
</script>
<script id="script_geturlparam" >
function geturlparam(parameter, defaultvalue){
alert( "BUGS_520 geturlparam parameter="+parameter+" defaultvalue="+defaultvalue );
var urlparameter = defaultvalue;
if(window.location.href.indexOf(parameter) > -1) {
urlparameter = getUrlVars()[parameter];
}
return urlparameter;
}
// var mytext = getUrlParam('text','Empty');
</script>
<script id=script_isodd >
function isOdd(num) { return num % 2;}
function oddOrEven(x) {return ( x & 1 ) ? "odd" : "even";}
// var isOdd = function(x) { return x & 1; };
// var isEven = function(x) { return !( x & 1 ); };
</script>
<script id=script_startup>
function startup_kludge(args) {
var todo = geturlvars()['todo'];
// alert( "<h1>BUGS_31000 startup todo="+todo+" args="+args+"</h1>\n");
// ko_coffees(args);
// ko_media(args);
if( todo != "" ) {
divid="div_"+todo;
url="ka12:8000/ko.php?todo="+todo;
var jaxbak=""; var list="";
alert( "<h2>BUGS_29001 list="+list+" divid="+divid+" url="+url );
$( "#div_ajax_ko" ).load( url, function() {
jaxbak=$("#div_ajax_ko" ).html();
// htmout_ajax_ko = ajax_ko_htmout(list);
$( "#div_ajax_ko" ).html(jaxbak);
});
alert( "<h2>BUGS_29002 jaxbak="+jaxbak+"</h2>" );
// BUGS_40251 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
$.ajax({
url: url,
context: document.body,
success: function(responseText) {
// alert( "BUGS_19501 jax TXT URL="+jaxurl+" LEN="+responseText.split("\n").length+" responseText="+responseText );
jaxbak = responseText;
$("#div_ajax_ko").html(responseText);
return(jaxbak);
// alert( "BUGS_40200 responseText="+responseText );
// var scriptflag = "true";
// var scriptflag = "";
// if( scriptflag == "true" ) {
// $("#div_ajax_ko").find("script").each(function(i) {
// eval($(this).text());
// });
// }
}
});
// BUGS_40252 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// alert( "<h2>BUGS_40201 jaxbak="+jaxbak+" divid="+divid+" url="+url );
}
// return(htmout);
return(jaxbak);
}
</script>
<script id=script_ko_startup>
function ko_startup(args) {
htmout = "";
return(htmout);
}
</script>
<script id=script_ko_canvas>
function ko_canvas(args) {
htmout = "";
var canvas = document.getElementById('canvas_dgs');
if(canvas.getContext == null ) {return;}
var ctx = canvas.getContext('2d');
ctx.strokeStyle = "white";
ctx.strokeStyle = "black";
var title=document.title;
ctx.shadowOffsetX = 5;
ctx.shadow)ffsetY = 5;
ctx.shadowColor = "DarkGoldenRod";
ctx.fillRect(20, 50, 300,200);
ctx.fillText("-- == its about to go == ---", 20,20,maxwidth );
img = new Image();
img_ko = new Image();
img_koeye = new Image();
img_koeyeb = new Image();
img_koeyew = new Image();
img.src="/imgs/btn/ok.png";
img.src="/fb/jtfdcr/imgs/jtfdc_20200704_0000_gazibo_privatedrive_keepout_IMG_9434_800.png";
var token=random_int(000000,1);
var dt=dttm("");
img_ko.src="/ko.png";
img_koeye.src="/imgs/btn/koeye.png";
img_koeye.src="/imgs/btn/koeye.png";
img_koeyeb.src="/imgs/btn/koeyeb.png";
img_koeyew.src="/imgs/btn/koeyew.png";
// ctx.globalAlpha=0.5; // opacity
ctx.drawImage(img,10,10);
ctx.drawImage(img_ko,100,100);
ctx.drawImage(img_koeye,200,200);
ctx.drawImage(img_koeyeb,300,300);
ctx.drawImage(img_koeyew,400,400);
return(htmout);
}
</script>
<script id=script_toggle>
// $('#msform').fadeOut(50);
// $('#msform').fadeIn(50);
// $(body).html($(body).html().replace('lollypops', 'marshmellows'));
function toggle(divid, viewflag) {
// alert( "BUGS_10 BEG divid="+divid+" onoff="+onoff );
var imgid=divid.replace("div_","img_" );
if(! document.getElementById(divid)) {
// return;
}
if( viewflag == "off" ) {
document.getElementById(divid).style.display="none";
document.getElementById(imgid).innerHTML=img;
document.getElementById(imgid).src="/imgs/btn/koeyeb.png";
return("");
}
if( viewflag == "on" ) {
document.getElementById(divid).style.display="inline";
document.getElementById(imgid).innerHTML=img;
document.getElementById(imgid).src="/imgs/btn/koeyew.png";
return("");
}
var imgid=divid.replace("div_","img_" );
style_display=document.getElementById(divid).style.display;
// alert( "BUGS_37850 TOGGLE imgid="+imgid+" style_display="+style_display );
if( style_display == "none" ) {
img="<img src=/imgs/btn/koeyew.png id="+imgid+" height=50 onclick=\"toggle('"+divid+"'); return false;\" >";
// alert( "BUGS_37881 NONE img="+img );
document.getElementById(divid).style.display="inline";
document.getElementById(imgid).innerHTML=img;
document.getElementById(imgid).src="/imgs/btn/koeyew.png";
// $("#img_ajax_ko").html(img);
// $("#img_ajax_ko").attr("src","/imgs/btn/koeyew.png");
// htmimg=document.getElementById(imgid).innerHTML;
// alert( "BUGS_37884 NONE htmimg="+htmimg );
}
else {
img="<img src=/imgs/btn/koeyeb.png id="+imgid+" height=50 onclick=\"toggle('"+divid+"'); return false;\" >";
// alert( "BUGS_37891 INLINE img="+img );
document.getElementById(divid).style.display="none";
document.getElementById(imgid).innerHTML=img;
document.getElementById(imgid).src="/imgs/btn/koeyeb.png";
// $("#img_ajax_ko").html(img);
// $("#img_ajax_ko").attr("src","/imgs/btn/koeyeb.png");
// htmimg=document.getElementById(imgid).innerHTML;
// alert( "BUGS_37893 INLINE htmimg="+htmimg );
}
}
</script>
<script id="script_dttm" >
function dttm(args) {
// alert( "BUGS dttm args="+args );
// alert( "BUGS dttm now="+now );
// var today = new Date().toISOString().slice(0, 10);
var now = new Date();
var yyyy_mm_dd = new Date().toISOString().slice(0, 10);
var hh_mm_dd = new Date().toISOString().slice(11, 19);
var dt=yyyy_mm_dd+"_"+hh_mm_dd;
// const d = new Date('2010-08-05')
// const d = new Date();
// const ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(d)
// const mo = new Intl.DateTimeFormat('en', { month: 'short' }).format(d)
// const da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(d)
// var dt = `${da}-${mo}-${ye}`;
// var d = date.getDate();
// var m = date.getMonth() + 1; //Month from 0 to 11
// var y = date.getFullYear();
// var dt = '' + y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
// var strArray=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
// var mth = strArray[date.getMonth()];
// alert( "BUGS_1543 dt="+dt );
// console.log("1) "+ new Date().toDateString());
// console.log("2) "+ new Date().toISOString());
// console.log("3) "+ new Date().toJSON());
// alert( "BUGS_1560 dttm dt="+dt );
return( dt );
}
</script>
<script id=script_ko_canvas_dgs >
function ko_canvas_dgs(args) {
// alert( "BUGS_150 ko_canvas_dgs args="+args );
var canvas_dgs = document.getElementById('canvas_dgs');
if(canvas_dgs.getContext == null ) { return; }
var ctx = canvas_dgs.getContext('2d');
var title=document.title;
maxwidth=100;
# ctx.font = "50pt Ariel";
ctx.font = "40pt Montserrat";
# ctx.font = "50pt yokkmokkOT";
ctx.fillStyle = 'goldenrod';
ctx.fillStyle = 'black';
ctx.fillText("ko_go canvas",400,100, maxwidth );
ctx.fillText(title ,400,150, maxwidth );
var img = new Image();
var img_koeye = new Image();
var img_koeyeb = new Image();
var img_koeyew = new Image();
img.src = "/imgs/btn/ko.png";
img_koeye.src = "/imgs/btn/koeye.png";
img_koeyeb.src = "/imgs/btn/koeyeb.png";
img_koeyew.src = "/imgs/btn/koeyew.png";
img.onload = function(e) { ctx.drawImage(img, 10,10); }
img_koeye.onload = function(e) { ctx.drawImage(img_koeye, 100,100); }
img_koeyeb.onload = function(e) { ctx.drawImage(img_koeyeb, 200,200); }
img_koeyew.onload = function(e) { ctx.drawImage(img_koeyew, 300,300); }
// var gradient = ctx.createLinearGradient(0,0,c.width,0);
// gradient.addColorStop("0.5","blue" );
gradient.addColorStop("1.0","red" );
ctx.fillText("ko_go bottom canvas 400,400",400,400, maxwidth );
return(htmout);
}
</script>
<!-- casket2casket is_that_you_coffin -->
<script id=script_ajax_ko>
function ajax_ko(divid,url) {
htmout="";
$( "#div_ajax_ko" ).load( url, function() {
var list=$("#div_ajax_ko" ).html();
// htmout_ajax_ko = ajax_ko_htmout(list);
// $( "#div_ajax_ko" ).html(htmout_ajax_ko);
});
//
// htmout="";
// htmout += "<div id="+divid+" >\n";
// htmout += " <h1>"+divid+"</h1>\n";
// htmout += " <h2>"+url+"</h2>\n";
// htmout += " <img src=/imgs/btn/koeye.png ";
// htmout += "onclick=\"ajax_ko_htmout(list); return false;\"";
// htmout += "height=100>\n";
// htmout += ajax_ko_htmout;
// htmout += " </div>\n";
}
</script>
<script id=script_ajax_ko_htmout>
function ajax_ko_htmout(list) {
// htmout="";
// htmout += "<hr color=goldenrod>";
// for( j=0; j<list.split("\n").length; j++ ) {
// line=list[j];
// if( line == "" ) { continue;}
// k=j+1;
// htmout += "k="+k
// htmout += line+"<br>\n";
// }
// return(htmout);
}
</script>
<script id=script_ajax_pdfs>
function ajax_pdfs(divid,url) {
list="
ajax_pdf1
ajax_pdf2
ajax_pdf3
";
htmout = "";
htmout_ajax_pdfs=ajax_pdfs_htmout(list);
htmout +="<div id="+divid+" >\n";
htmout += " <h1>"+divid+"<h1>\n";
htmout += " <h2>"+url+"</h2>\n";
htmout += htmout_ajax_pdfs;
htmout += " </div>\n";
$("#div_ajax_pdfs").html(htmout);
return(htmout);
}
</script>
<script id=script_ajax_pdfs_htmout>
function ajax_pdfs_htmout(list) {
htmout="";
for(j=0;j<list.split("\n").length; j++ ) {
htmout += list.split("\n")[j]+"<br>\n";
}
return(htmout);
}
</script>
<script id=script_ajax_fbpages>
function ajax_fbpages(divid,url) {
list="
pages/1.jpg
pages/2.jpg
pages/3.jpg
";
htmout_ajax_fbpages=ajax_fbpages_htmout(list);
htmout=""
htmout += "<h1>"+divid+</h1>\n";
htmout += "<h2>"+url+</h1>\n";
htmout += htmout_ajax_fbpages;
$("#div_ajax_fbpages").html(htmout);
return(htmout)
}
</script>
<script id=script_ajax_fbpages_htmout>
function ajax_fbpages_htmout(list) {
htmout="";
for(j=0; j<list.split("\n").length; j++ ) {
line=list.split("\n")[j];
if( line == "" ) { continue; }
k=j+1;
htmout += k+" "+line+"<br>\n";
}
return(htmout);
}
</script>
<script id=script_ajax_fbd>
function ajax_fbd(divid,url) {
list="
fb/konet
fb/iperms
fb/jtfdc
fb/jtfdcr
fb/jtfinc
fb/kou
fb/royal1
fb/kt
fb/go
fb/kitiworks
fb/mars
";
htmout += "<div id=div_ajax_fbd>\n";
htmout += " <h1>"+divid_"<h1>\n";
htmout += htmout_ajax_fbd_htmout;
htmout += " </div>\n";
$("#div_ajax_fbd").html(htmout);
return(htmout);
}
</script>
<script id=script_ajax_fbd_htmout>
function ajax_fbd_htmout(list) {
for( j=0; j<list.split("\n"); j++; ) {
line=list.split("\n")[j];
if( line == "" ) { continue; }
htmout += k+" ";
htmout += "<img src=/"+line+"/pages/tn/tn_1.png";
htmout += " onclick=\"window.open('"+fbid+"'); return false;\"";
htmout += " height=100><br>\n";
}
return(htmout);
}
</script>
<!--
<style id=style_ko>
body { background:wheat }
</style>
-->
<!--
<iframe src="/index_neave_wobble.html" width=500 height=300 ></iframe>
<iframe src="/index_neave_im.html" width=500 height=300 ></iframe>
<iframe src="/index_neave_pi.html" width=500 height=300 ></iframe>
<img src=/imgs/btn/koeye.png id=img_kludge onclick="toggle('div_kludge','switch'); return false;" height=20>
<img src=/imgs/btn/koeyeb.png id=img_kludge_off onclick="toggle('div_kludge','off'); return false;" height=20>
<img src=/imgs/btn/koeyew.png id=img_kludge_on onclick="toggle('div_kludge','on'); return false;" height=20>
<div id=div_kludge>
<h1>div_kludge</h1>
</div>
-->
<!--
<div id=div_canvas >
<hr color=black>
<h1>canvas_dgs ko_script</h1>
<img src="/imgs/btn/koeye.png"
onclick="ko_canvas_dgs(''); return false;" height=50>
<hr color=black>
<hr color=white>
<canvas id=canvas_dgs height=400 width=800></canvas>
<hr color=white>
<hr color=black>
</div>
-->
<!-- <script id=script_konva src=konva.min.js></script> -->
<img src=/imgs/btn/ko.png id=img_ko onclick="window.open(('/go/kogo.html');return false;" height=50>kogo_home
<hr color=yellow>
<img src=/imgs/btn/koeyeb.png id=img_kogo_draw onclick="kogo('button');return false;" height=50>kogo_run
       
<hr color=yellow>
<img src=/imgs/btn/koeye.png id=img_msg onclick="toggle('div_msg');return false;" height=50>msg
<div id=div_msg >
<h3>div_msg</h3>
</div>
<hr color=black>
<hr color=white>
<img src=/go/imgs/kogo.png id=img_kogo_startup onclick="kogo('button');return false;" height=50>kogo_startup
<img src=/imgs/btn/koeye.png id=img_kogo onclick="toggle('div_kogo');return false;" height=25>kogo
<hr color=black>
<hr color=white>
<div id=div_kogo hidden >
<!-- <h1>kogo</h1> -->
<hr color=white>
<hr color=black>
<canvas id="canvas" hidden height=200 width=1100 style="border:10px solid #ffffff;">
NO_CANVAS
</canvas>
<canvas id="canvas_kogo" height=1100 width=1100 style="border:5px solid #000000;">
NO_KOGO_CANVAS
</canvas>
<hr color=black>
<hr color=white>
<script id=script_canvas_kogo_startup>
canvas_kogo_startup('');
function canvas_startups(canvas_id) {
if( document.getElementById(canvas_id)) {
var ctx = document.getElementById(canvas_id).getContext('2d');
}
if( ctx ) {
ctx.fillStyle='goldenrod';
ctx.fillRect(0,0,1100,300);
ctx.fillStyle='black';
ctx.textAlign='center';
ctx.textBaseline='middle';
ctx.font='14px arial';
ctx.font='100px Monserrat';
ctx.font='120px yokkmokkOT';
ctx.fillText(canvas_id,500,100);
ctx.stroke();
}
return("");
}
function canvas_kogo_startup(args) {
alert( "<h1>BUGS_2780 canvas_kogo_startup</h1>" );
$htmout = "";
htmout .= canvas_startups("canvas", "canvas" );
htmout .= canvas_startups("canvas_dgs", "dgs" );
htmout .= canvas_startups("canvas_dropzone", "dropzone" );
htmout .= canvas_startups("canvas_filecontainer", "filecontainer" );
htmout .= canvas_startups("canvas_work", "work" );
htmout .= canvas_startups("canvas_paste", "paste" );
htmout .= canvas_startups("canvas_ffpaste", "ffpaste" );
var ctx = document.getElementById('canvas_kogo').getContext('2d');
if (ctx) {
bgxlim=1100; bgylim=1100;
// stroke using a CSS color: named, RGB, HSL, etc
ctx.fillStyle='red';
ctx.fillRect(50,50,100,50);
// stroke using a linear gradient
var gradient = ctx.createLinearGradient(225,50,300,50);
gradient.addColorStop(0,'red');
gradient.addColorStop(1,'green');
ctx.fillStyle=gradient;
ctx.fillRect(200,50,100,50);
// stroke using a radial gradient
var gradient = ctx.createRadialGradient(100,175,5,100,175,30);
// gradient.addColorStop(0,'red');
// gradient.addColorStop(1,'green');
gradient.addColorStop(0,'black');
gradient.addColorStop(1,'white');
ctx.fillStyle=gradient;
// ctx.fillRect(50,150,100,50);
ctx.fillRect(50,50,100,100);
// stroke using a pattern
var patternImage=new Image();
patternImage.onload=function(){
var pattern = ctx.createPattern(patternImage,'repeat');
ctx.fillStyle=pattern;
ctx.fillRect(300,300,500,500);
}
var bgid_default=38;
var bgid=38;
var url_bgid=geturlvars()['bgid'];
if( geturlvars()['bgid'] != undefined ) {
// alert( "BUGS_2710 GETURLVARS BGID bgid="+bgid+" url_bgid="+url_bgid );
if(( url_bgid == undefined ) || ( url_bgid == 0 )) {
var bglim=60;
url_bgid = random_int(bglim,0);
bgid=url_bgid;
// alert( "BUGS_2711 GETURLVARS RANDOM bgid="+bgid+" url_bgid="+url_bgid );
}
else {
// alert( "BUGS_2712 GETURLVARS REQUEST bgid="+bgid+" url_bgid="+url_bgid );
bgid=url_bgid;
}
}
// patternImage.src='http://i.stack.imgur.com/ixrWe.png';
// patternImage.src='/imgs/btn/koeye.png';
// patternImage.src='/go/pages/zn/zn_'+bgid+'.jpg';
patternImage.src='/go/pages/'+bgid+'.jpg';
// for demo only, draw labels by each stroke
ctx.fillStyle='black';
ctx.textAlign='center';
ctx.textBaseline='middle';
ctx.font='14px arial';
ctx.fillText('CSS color',100,40);
ctx.fillText('Linear Gradient color',250,40);
ctx.fillText('Radial Gradient color',100,140);
ctx.fillText('Pattern color',250,140);
ctx.font='132px yokkmokkOT';
ctx.fillText('kogo',500,200);
ctx.font='72px Montserrat';
ctx.fillText('kogo',500,900);
// for (var i = 0;i<7;i++) {
// for (var j = 0;j<7;j++) {
// ctx.fillStyle = 'rgb(' + Math.floor(255-20.5*i)+ ','+
// Math.floor(255 - 42.5*j) + ',255)';
// ctx.fillRect( j*25, i* 25, 55, 55 );
// ctx.fillRect( j*25, i* 25, 1100, 1100 );
//
// ctx.fillStyle = 'rgb(' + Math.floor(255-100.5*i)+ ','+
// Math.floor(255 - 42.5*j) + ',255)';
// ctx.fillRect( j*25, i* 25, bgxlim, bgylim );
// ctx.fillStyle = rgb(i,j,255);
// }
// }
// Add behind elements.
// ctx.globalCompositeOperation = 'destination-over'
// ctx.fillStyle = "blue";
// ctx.fillRect(0, 0, canvas.width, canvas.height);
// kogo_circle(ctx);
kogo_change_color(ctx);
}
}
function kogo_circle(ctx) {
var centerX = 0;
var centerY = 0;
var radius = 78;
ctx.clearRect(0, 0, window.innerWidth,window.innerHeight);
ctx.fillStyle = 'rgba(0,0,0,0.5)';
ctx.fillRect(0,0,window.innerWidth,window.innerHeight);
ctx.translate(canvas.width / 2, canvas.height / 2);
ctx.scale(1.5, 2);
ctx.beginPath();
ctx.arc(centerX, centerY, radius, 0, 5 * Math.PI, false);
ctx.lineWidth = 5;
ctx.stroke();
ctx.fillStyle = 'rgba(0,0,0,1)';
ctx.globalCompositeOperation = 'destination-out';
ctx.fill();
ctx.globalCompositeOperation = 'source-over';
}
function kogo_change_color(ctx) {
ctx.fillStyle = 'rgba(0,255,0,1)';
ctx.fill();
}
</script>
<hr color=black>
<hr color=white>
<!--
<div id=layer1 hidden><h3>div_layer1</h3></div>
<div id=layer2 hidden><h3>div_layer2</h3></div>
<div id=layer3 hidden><h3>div_layer3</h3></div>
-->
<div id=pong_layer_bg hidden><h3>div_pong_layer_bg</h3></div>
<div id=pong_layer_square hidden><h3>div_pong_layer_square</h3></div>
<div id=pong_layer_circle hidden><h3>div_pong_layer_circle</h3></div>
<hr color=white>
<hr color=black>
<img src=/imgs/btn/koeye.png id=img_pages onclick="toggle('div_pages',''); return false;" height=25>pages
<div id=div_pages hidden>
<h1>div_pages</h1>
</div>
<hr color=white>
<hr color=black>
<img src=/imgs/btn/koeye.png id=img_imgs onclick="toggle('div_imgs',''); return false;" height=25>imgs
<div id=div_imgs hidden >
<h1>div_imgs</h1>
<img src=/imgs/btn/ko.png id=img_ko height=20>
<img src=/imgs/btn/ok.png id=img_ok height=20>
<img src=/imgs/btn/koeye.png id=img_koeye height=20>
<img src=/imgs/btn/koeyeb.png id=img_koeyeb height=20>
<img src=/imgs/btn/koeyew.png id=img_koeyew height=20>
<hr color=black>
<img src=/go/dgs/images/50/b.gif id=img_b height=20>
<img src=/go/dgs/images/50/b_b.gif id=img_b_b height=20>
<img src=/go/dgs/images/50/b_w.gif id=img_b_w height=20>
     
<img src=/go/dgs/images/50/w.gif id=img_w height=20>
<img src=/go/dgs/images/50/w_b.gif id=img_w_b height=20>
<img src=/go/dgs/images/50/w_w.gif id=img_w_w height=20>
<hr color=black>
<img src=/go/pages/1.jpg id=img_wood_1 height=200 onclick="window.open('/go/pages/1.jpg');return false;">1
<img src=/go/pages/tn/tn_1.png id=img_wood_1_tn height=150 onclick="window.open('/go/pages/tn/tn_1.png');return false;">1
<img src=/go/pages/zn/zn_1.jpg id=img_wood_1_zn height=250 onclick="window.open('/go/pages/zn/zn_1.jpg');return false;">1
<img src=/go/pages/zn/zn_2.jpg id=img_wood_2 height=200 onclick="window.open('/go/pages/zn/zn_2.jpg');return false;">2
<img src=/go/pages/zn/zn_3.jpg id=img_wood_3 height=200 onclick="window.open('/go/pages/zn/zn_3.jpg');return false;">3
<img src=/go/pages/zn/zn_4.jpg id=img_wood_4 height=200 onclick="window.open('/go/pages/zn/zn_4.jpg');return false;">4
<img src=/go/pages/zn/zn_5.jpg id=img_wood_5 height=200 onclick="window.open('/go/pages/zn/zn_5.jpg');return false;">5
<img src=/go/pages/zn/zn_6.jpg id=img_wood_6 height=200 onclick="window.open('/go/pages/zn/zn_6.jpg');return false;">6
<img src=/go/pages/zn/zn_7.jpg id=img_wood_7 height=200 onclick="window.open('/go/pages/zn/zn_7.jpg');return false;">7
<img src=/go/pages/zn/zn_8.jpg id=img_wood_8 height=200 onclick="window.open('/go/pages/zn/zn_8.jpg');return false;">8
<img src=/go/pages/zn/zn_9.jpg id=img_wood_9 height=200 onclick="window.open('/go/pageszn/zn_/9.jpg');return false;">9
<h3>img_wood_10-19</h3>
<img src=/go/pages/zn/zn_10.jpg id=img_wood_10 height=200 onclick="window.open('/go/pages/zn/zn_10.jpg');return false;">10
<img src=/go/pages/zn/zn_19.jpg id=img_wood_19 height=200 onclick="window.open('/go/pages/zn/zn_19.jpg');return false;">19
<h3>img_wood_20-29</h3>
<img src=/go/pages/zn/zn_20.jpg id=img_wood_20 height=200 onclick="window.open('/go/pages/zn/zn_20.jpg');return false;">20
<img src=/go/pages/zn/zn_29.jpg id=img_wood_29 height=200 onclick="window.open('/go/pages/zn/zn_29.jpg');return false;">29
<h3>img_wood_30-39</h3>
<img src=/go/pages/zn/zn_30.jpg id=img_wood_30 height=200 onclick="window.open('/go/pages/zn/zn_30.jpg');return false;">30
<img src=/go/pages/zn/zn_39.jpg id=img_wood_39 height=200 onclick="window.open('/go/pages/zn/zn_39.jpg');return false;">39
<h3>img_wood_50-59</h3>
<img src=/go/pages/zn/zn_50.jpg id=img_wood_50 height=200 onclick="window.open('/go/pages/zn/zn_50.jpg');return false;">50
<img src=/go/pages/zn/zn_59.jpg id=img_wood_59 height=200 onclick="window.open('/go/pages/zn/zn_59.jpg');return false;">59
<hr color=black>
<img src=/go/dgs/images/wood1.gif id=img_wood1 height=200>
<img src=/go/dgs/images/wood2.gif id=img_wood2 height=200>
<img src=/go/dgs/images/wood3.gif id=img_wood3 height=200>
<img src=/go/dgs/images/wood4.gif id=img_wood4 height=200>
<img src=/go/dgs/images/wood5.gif id=img_wood5 height=200>
<img src=/go/dgs/images/wood6.gif id=img_wood6 height=200>
<img src=/go/dgs/images/wood7.gif id=img_wood7 height=200>
<img src=/go/dgs/images/wood8.gif id=img_wood8 height=200>
<hr color=black>
<img src=/imgs/btn/ko.png id=img_ko height=20>
<img src=/imgs/btn/ko.png id=img_ko height=20>
<img src=/imgs/btn/ko.png id=img_ko height=20>
<img src=/imgs/btn/ko.png id=img_ko height=20>
<img src=/imgs/btn/ko.png id=img_ko height=20>
<img src=/imgs/btn/ko.png id=img_ko height=20>
</div>
<hr color=black>
<hr color=white>
<img src=/imgs/btn/koeye.png id="img_konva" onclick="toggle('div_konva');return false;" height=25>konva
<hr color=black>
<hr color=white>
<div id=div_konva hidden>
<h1>div_konva drag n drop</h1>
<div id="container_konva"></div>
<script id=script_konva>
var width = window.innerWidth;
var height = window.innerHeight;
function update(activeAnchor) {
var group = activeAnchor.getParent();
var topLeft = group.get('.topLeft')[0];
var topRight = group.get('.topRight')[0];
var bottomRight = group.get('.bottomRight')[0];
var bottomLeft = group.get('.bottomLeft')[0];
var image = group.get('Image')[0];
var anchorX = activeAnchor.getX();
var anchorY = activeAnchor.getY();
// update anchor positions
switch (activeAnchor.getName()) {
case 'topLeft':
topRight.y(anchorY);
bottomLeft.x(anchorX);
break;
case 'topRight':
topLeft.y(anchorY);
bottomRight.x(anchorX);
break;
case 'bottomRight':
bottomLeft.y(anchorY);
topRight.x(anchorX);
break;
case 'bottomLeft':
bottomRight.y(anchorY);
topLeft.x(anchorX);
break;
}
image.position(topLeft.position());
var width = topRight.getX() - topLeft.getX();
var height = bottomLeft.getY() - topLeft.getY();
if (width && height) {
image.width(width);
image.height(height);
}
}
function addAnchor(group, x, y, name) {
var stage = group.getStage();
var layer = group.getLayer();
var anchor = new Konva.Circle({
x: x,
y: y,
stroke: '#666',
fill: '#ddd',
strokeWidth: 2,
radius: 8,
name: name,
draggable: true,
dragOnTop: false,
});
anchor.on('dragmove', function () {
update(this);
});
anchor.on('mousedown touchstart', function () {
group.draggable(false);
this.moveToTop();
});
anchor.on('dragend', function () {
group.draggable(true);
});
// add hover styling
anchor.on('mouseover', function () {
var layer = this.getLayer();
document.body.style.cursor = 'pointer';
this.strokeWidth(4);
});
anchor.on('mouseout', function () {
var layer = this.getLayer();
document.body.style.cursor = 'default';
this.strokeWidth(2);
});
group.add(anchor);
}
var stage = new Konva.Stage({
container: 'container_konva',
width: width, height: height,
});
var layer = new Konva.Layer();
stage.add(layer);
// darth vader
// var darthVaderImg = new Konva.Image({ width: 200, height: 137, });
var darthVaderImg = new Konva.Image({ width: 50, height: 50, });
// yoda
// var yodaImg = new Konva.Image({ width: 93, height: 104, });
var yodaImg = new Konva.Image({ width: 50, height: 50, });
var darthVaderGroup = new Konva.Group({ x: 180, y: 50, draggable: true, });
layer.add(darthVaderGroup);
darthVaderGroup.add(darthVaderImg);
addAnchor(darthVaderGroup, 0, 0, 'topLeft');
addAnchor(darthVaderGroup, 200, 0, 'topRight');
addAnchor(darthVaderGroup, 200, 138, 'bottomRight');
addAnchor(darthVaderGroup, 0, 138, 'bottomLeft');
var yodaGroup = new Konva.Group({
x: 20,
y: 110,
draggable: true,
});
layer.add(yodaGroup);
yodaGroup.add(yodaImg);
addAnchor(yodaGroup, 0, 0, 'topLeft');
addAnchor(yodaGroup, 93, 0, 'topRight');
addAnchor(yodaGroup, 93, 104, 'bottomRight');
addAnchor(yodaGroup, 0, 104, 'bottomLeft');
var imageObj1 = new Image();
imageObj1.onload = function () {
darthVaderImg.image(imageObj1);
};
// imageObj1.src = '/assets/darth-vader.jpg';
imageObj1.src = '/imgs/btn/kob.png';
var imageObj2 = new Image();
imageObj2.onload = function () {
yodaImg.image(imageObj2);
};
// imageObj2.src = '/assets/yoda.jpg';
imageObj2.src = '/imgs/btn/kow.png';
</script>
</div>
<hr color=black>
<img src=/imgs/btn/koeye.png id=img_konva_demos onclick="toggle('div_konva_demos');return false;" height=25>konva_demos
<hr color=black>
<div id=div_konva_demos hidden>
<h1>div_konva_demos</h1>
<table id=table_konva>
<tr>
<td width=50 >j</td>
<td width=50>link</td>
<td width=100>label</td>
</tr>
// konva demo matrix
<tr>
<td>1</td>
<td>
<!-- <img src=/imgs/btn/koeyeb.png id=img_konva1 onclick="window.open('/go/konva1.html');return false;" height=25>redspot -->
<img src=/imgs/btn/koeye.png height=25>
</td>
<td>
offline
</td>
</tr>
<tr>
<td>2</td>
<td>
<img src=/imgs/btn/koeyeb.png id=img_konva2 onclick="window.open('/go/konva2.html');return false;" height=25>
</td>
<td>
dots
</td>
</tr>
<tr>
<td>3</td>
<td>
<img src=/imgs/btn/koeyeb.png id=img_konva3 onclick="window.open('/go/konva3.html');return false;" height=25>
</td>
<td>drop</td>
</tr>
<tr>
<td>4</td>
<td>
<img src=/imgs/btn/koeyeb.png id=img_konva4 onclick="window.open('/go/konva4.html');return false;" height=25>
</td>
<td>pdf</td>
</tr>
<tr>
<td>5</td>
<td><img src=/imgs/btn/koeye.png height=25></td>
<td>offline</td>
</tr>
<tr>
<td>6</td>
<td>
<img src=/imgs/btn/koeye.png height=25>
<!-- <img src=/imgs/btn/koeyeb.png id=img_konva5 onclick="window.open('/go/konva5.html');return false;" height=25> -->
<!-- <img src=/imgs/btn/koeyeb.png id=img_ko_konva6 onclick="window.open('/go/konva6.html');return false;" height=25> -->
</td>
<td>offline</td>
</tr>
<tr>
<td>7</td>
<td>
<img src=/imgs/btn/koeyeb.png id=img_ko_konva7 onclick="window.open('/go/konva7.html');return false;" height=25>
</td>
<td>text</td>
</tr>
<tr>
<td>8</td>
<td>
<img src=/imgs/btn/koeyeb.png id=img_ko_konva8 onclick="window.open('/go/konva8.html');return false;" height=25>
</td>
<td>video</td>
</tr>
<tr>
<td>9</td>
<td>
<img src=/imgs/btn/koeyeb.png id=img_ko_konva9 onclick="window.open('/go/konva9.html');return false;" height=25>
</td>
<td>dots</td>
</tr>
<tr>
<td>10</td>
<td>
<img src=/imgs/btn/koeyeb.png id=img_ko_konva10 onclick="window.open('/go/konva10.html');return false;" height=25>
</td>
<td>draw</td>
</tr>
<tr>
<td>11</td>
<td>
<img src=/imgs/btn/koeyeb.png id=img_ko_konva11 onclick="window.open('/go/konva11.html');return false;" height=25>
</td>
<td>dotts_tooltip</td>
</tr>
<tr>
<td>12</td>
<td>
<img src=/imgs/btn/koeyeb.png id=img_ko_konva12 onclick="window.open('/go/konva12.html');return false;" height=25>
</td>
<td>
spin_squares
</td>
</tr>
<tr>
<td>13</td>
<td>
<img src=/imgs/btn/koeyeb.png id=img_ko_konva13 onclick="window.open('/go/konva13.html');return false;" height=25>
</td>
<td>bouncers</td>
</tr>
<tr>
<td>14</td>
<td>
<img src=/imgs/btn/koeyeb.png id=img_ko_konva14 onclick="window.open('/go/konva14.html');return false;" height=25>
</td>
<td>collisions</td>
</tr>
<tr>
<td>15</td>
<td>
<img src=/imgs/btn/koeye.png height=25>
<!-- <img src=/imgs/btn/koeyeb.png id=img_ko_konva15 onclick="window.open('/go/konva15.html');return false;" height=25> zoom -->
</td>
<td>zoom</td>
</tr>
<tr>
<td>16</td>
<td>
<img src=/imgs/btn/koeyeb.png id=img_ko_konva16 onclick="window.open('/go/konva16.html');return false;" height=25>
</td>
<td>gestures</td>
</tr>
<tr>
<td>17</td>
<td>
<img src=/imgs/btn/koeyeb.png id=img_ko_konva17 onclick="window.open('/go/konva17.html');return false;" height=25>
</td>
<td>preview</td>
</tr>
</table>
<hr color=black>
<hr color=white>
</div>
</div>
</div id=div_ajax_kogo end>
<hr color=black>
<hr color=black>
<hr color=black>
<hr color=white>
<hr color=black>
<hr color=black>
<hr color=black>
<hr color=goldenrod>
<hr color=goldenrod>
<img src=/imgs/btn/tn_kogo.png alt=btn_kogo.png height=50
onclick="ajax_kogo('click','ka12:8000/ko.php?kogo_bxbys=1'); return false;" >
<img src=/imgs/btn/koeye.png id=img_ajax_kogo height=25 onclick="toggle('div_ajax_kogo');return false;">
<div id=div_ajax_kogo >
<h1>div_ajax_kogo</h1>
<script id=script_kogo>
function ajax_kogo(args) {
// url_kogo="ka12:8000/ko.php?find=\"find pdf -type f -maxdepth 1 -name '*.pdf'\"";
// url_kogo="ka12:8000/ko.php?find=pdf/*.pdf";
url_kogo="ka12:8000/ko.php?kogo_db3=game2";
// alert( "<h1>BUGS_40725 LOAD url_kogo="+url_kogo+"</h1><br>\n" );
$( "#div_ajax_kogo" ).load( url_kogo, function() {
list_kogo=$("#div_ajax_kogo").html();
// alert( "<h1>BUGS_36532 LOAD KOGO list_kogo="+list_kogo+"</h1><br>\n" );
list=list_kogo.split("\n");
progid="ko";
htmout = "";
htmout += "<html>\n";
htmout += "<head>\n";
htmout += " <title>"+progid+" kogo</title>\n";
htmout += " </head>\n";
htmout += "<body bgcolor=wheat>\n";
htmout += "<div id=div_ajax_kogo>\n";
htmout += "<hr color=goldenrod>\n";
htmout += "<h1>kogo</h1>\n";
htmout += "<h2>"+progid+" </h2>\n";
htmout += "<hr color=goldenrod>\n";
htmout += "<table id=table_kogo>\n";
htmout += "<tr>";
htmout += "<td>j</td>";
htmout += "<td >url</td>";
htmout += "<td >kogo</td>";
htmout += "</tr>\n";
// alert( "<h1>BUGS_36720 list="+list+"</h1>\n" );
for( j=0; j<list.length; j=j+1) {
k=j+1;
kogo=list[j];
url =
"<a href=/go/kogo.html?bxbys=/"+kogo+" target=_blank>\n";
url += "</a>\n";
htmout += "<tr>";
htmout += "<td>"+k+"</td>";
htmout += "<td>"+url+"</td>";
htmout += "<td><b>"+kogo+"</b></td>";
htmout += "</tr>\n";
}
htmout += " </table>\n";
htmout += "<hr color=goldenrod>\n";
htmout += " </div>\n";
// htmout += " </body>\n";
// htmout += " </html>\n";
// bugs $("#div_ajax_kogo").html(htmout).hide();
// alert( "<h1>BUGS_36740 htmout="+htmout+"</h1>\n" );
// print( htmout );
});
// .hide();
}
</script>
<img src=/imgs/btn/koeye_mp3.png id=img_ajax_mp3 height=30 onclick="toggle('div_ajax_mp3'); return false;" >
<div id=div_ajax_mp3 hidden>
<h2>div_ajax_mp3</h2>
<img src=/imgs/btn/koeye_mp3.png height=30 onclick="ajax_mp3('div_ajax_mp3','ka12:8000/ko.php?todo=mp3s'); return false;" >
<img src=/imgs/btn/koeye.png id=img_ajax_mp3 height=25 onclick="toggle('div_ajax_mp3');return false;">
</div>
<script id=script_ajax_mp3>
function ajax_mp3(divid,url) {
// alert( "BUGS_37210 divid="+divid+" url="+url );
if( divid == "" ) { return; }
if( url == "" ) { return; }
$( "#div_ajax_mp3" ).load( url, function() {
list_mp3=$("#div_ajax_mp3").html();
// alert( "BUGS_37211 LOAD url="+url+" list_mp3="+list_mp3+"\n" );
});
alert( "BUGS_37212 LOAD url="+url+" list_mp3="+list_mp3+"\n" );
}
</script>
<img src=/imgs/btn/koeye_mp4.png id=img_ajax_mp4 height=30 onclick="toggle('div_ajax_mp4'); return false;" >
<div id=div_ajax_mp4 hidden>
<h2>div_ajax_mp4</h2>
<img src=/imgs/btn/koeye_mp4.png height=30 onclick="ajax_mp4('div_ajax_mp4','ka12:8000/ko.php?todo=mp4'); return false;" >
<img src=/imgs/btn/koeye.png id=img_ajax_mp4 height=25 onclick="toggle('div_ajax_mp4');return false;">
</div>
<script id=script_ajax_mp4>
function ajax_mp4(divid,url) {
// alert( "BUGS_37210 divid="+divid+" url="+url );
if( divid == "" ) { return; }
if( url == "" ) { return; }
$( "#div_ajax_mp4" ).load( url, function() {
list_mp4=$("#div_ajax_mp4").html();
// alert( "BUGS_37211 LOAD url="+url+" list_mp4="+list_mp4+"\n" );
});
alert( "BUGS_37212 LOAD url="+url+" list_mp4="+list_mp4+"\n" );
}
</script>
<img src=/imgs/btn/koeye_pdf.png id=img_ajax_pdf height=30 onclick="toggle('div_ajax_pdf'); return false;" >
<div id=div_ajax_pdf hidden>
<h2>div_ajax_pdf</h2>
<img src=/imgs/btn/koeye_pdf.png height=30 onclick="ajax_pdf('div_ajax_pdf','ka12:8000/ko.php?todo=pdf'); return false;" >
<img src=/imgs/btn/koeye.png id=img_ajax_pdf height=25 onclick="toggle('div_ajax_pdf');return false;">
</div>
<script id=script_ajax_pdf>
function ajax_pdf(divid,url) {
// alert( "BUGS_37210 divid="+divid+" url="+url );
if( divid == "" ) { return; }
if( url == "" ) { return; }
$( "#div_ajax_pdf" ).load( url, function() {
list_pdf=$("#div_ajax_pdf").html();
// alert( "BUGS_37211 LOAD url="+url+" list_pdf="+list_pdf+"\n" );
});
alert( "BUGS_37212 LOAD url="+url+" list_pdf="+list_pdf+"\n" );
}
</script>
<img src=/imgs/btn/koeye_bitchute.png id=img_ajax_yt height=30 alt=youtube onclick="toggle('div_ajax_yt'); return false;" >
<div id=div_ajax_yt hidden>
<h2>div_ajax_yt</h2>
<img src=/imgs/btn/koeye_bitchute.png height=30 onclick="ajax_yt('div_ajax_yt','ka12:8000/ko.php?todo=yt'); return false;" >
<img src=/imgs/btn/koeye.png id=img_ajax_yt height=25 onclick="toggle('div_ajax_yt');return false;">
</div>
<script id=script_ajax_yt>
function ajax_yt(divid,url) {
// alert( "BUGS_37210 divid="+divid+" url="+url );
if( divid == "" ) { return; }
if( url == "" ) { return; }
$( "#div_ajax_yt" ).load( url, function() {
list_yt=$("#div_ajax_yt").html();
// alert( "BUGS_37211 LOAD url="+url+" list_yt="+list_yt+"\n" );
});
alert( "BUGS_37212 LOAD url="+url+" list_yt="+list_yt+"\n" );
}
</script>
<img src=/imgs/btn/koeye_html.png id=img_ajax_html height=30 alt=htm onclick="toggle('div_ajax_html'); return false;" >
<div id=div_ajax_html hidden>
<h2>div_ajax_html</h2>
<img src=/imgs/btn/koeye_html.png height=30 onclick="ajax_html('div_ajax_html','ka12:8000/ko.php?todo=htm'); return false;" >
<img src=/imgs/btn/koeye.png id=img_ajax_html height=25 onclick="toggle('div_ajax_html');return false;">
</div>
<script id=script_ajax_html>
function ajax_html(divid,url) {
// alert( "BUGS_37210 divid="+divid+" url="+url );
if( divid == "" ) { return; }
if( url == "" ) { return; }
$( "#div_ajax_htm" ).load( url, function() {
list_htm=$("#div_ajax_htm").html();
// alert( "BUGS_37211 LOAD url="+url+" list_htm="+list_htm+"\n" );
});
alert( "BUGS_37212 LOAD url="+url+" list_htm="+list_htm+"\n" );
}
</script>
</div id=div_ajax_kogo_end>
<hr color=white>
<hr color=white>
<hr color=white>
<hr color=black>
<hr color=black>
<hr color=black>
<img src=/imgs/btn/koeye.png id=img_kogo_form onclick="toggle('div_kogo_form',''); return false;" height=25>
kogo_form
<hr color=black>
<div id=div_kogo_form_progress hidden>
<h1>ko_form 20211204_1030</h1>
<h2>progress</h2>
<progress min="0" max="100" value="0">0% complete</progress>
</div>
<div id=div_kogo_form hidden>
<h2>div_kogo_form</h2>
<hr color=goldenrod>
<form id="myform" name="myform" action="ka12:8000/ko.php?todo">
<table id=table_htfiles>
<tr><td>fld</td><td>val</td><tr>
<tr><td>todo</td><td><input type="text" name="todo" value="mp3"></td><tr>
<tr><td>kogo</td><td><input type="text" name="kogo" value=""></td><tr>
<tr><td>kogo_db3</td><td><input type="text" name="kogo_db3" value="game1"></td><tr>
<tr><td>kogo_file</td><td><input type="text" name="kogo_file" value="kogo.txt"></td><tr>
<tr><td>kogo_list</td><td><input type="text" name="kogo_list" value="ko"></td><tr>
<tr><td>bgid</td><td><input type="text" name="bgid" value="27"></td><tr>
<tr><td>bid</td><td><input type="text" name="bid" value="38"></td><tr>
<tr><td>gid</td><td><input type="text" name="gid" value="game1"></td><tr>
<tr><td>bxlim</td><td><input type="text" name="bxlim" value="19"></td><tr>
<tr><td>bylim</td><td><input type="text" name="bylim" value="19"></td><tr>
<tr><td>bhandi</td><td><input type="text" name="bhandi" value="9"></td><tr>
<tr><td>t</td><td><input type="text" name="t" value="1"></td><tr>
<tr><td>x</td><td><input type="text" name="x" value="1"></td><tr>
<tr><td>y</td><td><input type="text" name="y" value="2"></td><tr>
<tr><td>td</td><td><input type="text" name="td" value="td"></td><tr>
<tr><td>tdx</td><td><input type="text" name="tdx" value="tdx"></td><tr>
<tr><td>tdy</td><td><input type="text" name="tdy" value="tdy"></td><tr>
<tr><td>notes</td><td><input type="text" name="notes" value="notes"></td><tr>
<tr><td>step</td><td><input type="text" name="step" value="step"></td><tr>
<tr><td>name</td><td><input type="text" name="name" value="johndoe"></td><tr>
<tr><td>id</td><td><input type="number" name="id" value="1213"></td><tr>
</table>
<input type="text" name="textField" pattern="[A-Z][0-9]">
<input type="text" name="textField" required>
<input type="text" name="textField" placeholder="Type in here">
<input type="text" name="comboBoxField" autofocus>
<input type="color" name="colorField"/>
<input type="week" name="weekField"/>
<input type="month" name="monthField"/>
<input type="datetime" name="datetimeField"/>
<input type="time" name="timeField"/>
<input type="date" name="dateField"/>
<input type="search" name="searchField"/>
<input type="tel" name="telField"/>
<input type="range" name="rangeField" min="100" max="200" step="2"/>
<input type="number" name="numberField" min="10" max="20" step="2" />
<input type="url" name="urlField"/>
<input type="email" name="emailField"/>
<!--
http://tutorials.jenkov.com/html5/form-fields.html
http://tutorials.jenkov.com/html5/form-fields.html
-->
<hr color=goldenrod>
<input type="submit" onclick="return sendForm(this.form);">kogo_form</input>
</form>
<hr color=goldenrod>
<script id=script_ko_form>
function ko_form(args) {
var xhr = new XMLHttpRequest();
// xhr.open('GET', '/path/to/image.png', true);
xhr.open('GET', 'ka12:8000/ko.php?todo', true);
// Hack to pass bytes through unprocessed.
xhr.overrideMimeType('text/plain; charset=x-user-defined');
xhr.onreadystatechange = function(e) {
if (this.readyState == 4 && this.status == 200) {
var binStr = this.responseText;
for (var i = 0, len = binStr.length; i < len; ++i) {
var c = binStr.charCodeAt(i);
// String.fromCharCode(c & 0xff);
var byte = c & 0xff; // byte at offset i
}
}
};
xhr.send();
var xhr = new XMLHttpRequest();
// xhr.open('GET', '/path/to/image.png', true);
xhr.open('GET', 'ka12:8000/ko.php?todo=mp3s', true);
xhr.responseType = 'blob';
xhr.onload = function(e) {
if (this.status == 200) {
// Note: .response instead of .responseText
// var blob = new Blob([this.response], {type: 'image/png'});
var blob = new Blob([this.response], {type: 'text/plain'});
}
};
xhr.send();
function sendForm() {
var formData = new FormData();
formData.append('username', 'johndoe');
formData.append('id', 123456);
var xhr = new XMLHttpRequest();
xhr.open('POST', 'ka12:8000/ko.php?form=form1', true);
// xhr.onload = function(e) { ... };
xhr.onload = function(e) { print( "<h1>MSG_101 ONLOAD</h1>"); };
xhr.send(formData);
}
function sendForm(form) {
var formData = new FormData(form);
formData.append('secret_token', '1234567890'); // Append extra data before send.
var xhr = new XMLHttpRequest();
xhr.open('POST', form.action, true);
xhr.onload = function(e) { print( "<h1>MSG_70 htfiles SENDFORM</h1>"; };
xhr.send(formData);
return false; // Prevent page from submitting.
}
function uploadFiles(url, files) {
var formData = new FormData();
for (var i = 0, file; file = files[i]; ++i) {
formData.append(file.name, file);
}
var xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.onload = function(e) { print( "<h1>MSG_80 UPLOADFILES url="+url+"</h1>"; };
xhr.send(formData); // multipart/form-data
}
document.querySelector('input[type="file"]').addEventListener('change', function(e) {
uploadFiles('/ko.us', this.files);
}, false);
function upload(blobOrFile) {
var xhr = new XMLHttpRequest();
xhr.open('POST', 'ka12:8000/ko.php', true);
xhr.onload = function(e) { print( "<h1>MSG_100 UPLOAD</h1>"; };
// Listen to the upload progress.
var progressBar = document.querySelector('progress');
xhr.upload.onprogress = function(e) {
if (e.lengthComputable) {
progressBar.value = (e.loaded / e.total) * 100;
progressBar.textContent = progressBar.value; // Fallback for unsupported browsers.
}
};
xhr.send(blobOrFile);
}
upload(new Blob(['jkwii is me'], {type: 'text/plain'}));
</script>
</div id=div_kogo_form_end>
<hr color=black>
<hr color=black>
<hr color=black>
<!--
<img src=/imgs/btn/koeye.png id=img_konva onclick="toggle('div_konva',''); return false;" height=25>
<div id=div_konva >
<h2>div_konva</h2>
</div id=div_konva_end>
<img src=/imgs/btn/koeye.png id=img_konva3 onclick="toggle('div_konva3',''); return false;" height=25>
konva3 drag_n_drop
<div id=div_konva3 hidden>
<h2>div_konva3</h2>
<div id="container_tooltip" hidden></div>
<img src=/imgs/btn/koeye_handhither.gif onclick="konva3('');return false;" height=50>
<p>Drag&drop yoda into the grey area.</p>
<div id="drag-items">
<img src="/imgs/btn/kob.png" id=imgs_b0 draggable="true" height=20 />
<img src="/imgs/btn/kob.png" id=imgs_b1 draggable="true" height=20 />
<img src="/imgs/btn/kob.png" id=imgs_b2 draggable="true" height=20 />
<img src="/imgs/btn/kob.png" id=imgs_b3 draggable="true" height=20 />
<img src="/imgs/btn/kob.png" id=imgs_b4 draggable="true" height=20 />
<img src="/imgs/btn/kob.png" id=imgs_b5 draggable="true" height=20 />
<img src="/imgs/btn/kob.png" id=imgs_b6 draggable="true" height=20 />
<img src="/imgs/btn/kow.png" id=imgs_w1 draggable="true" height=20 />
<img src="/imgs/btn/kow.png" id=imgs_w2 draggable="true" height=20 />
<img src="/imgs/btn/kow.png" id=imgs_w3 draggable="true" height=20 />
<img src="/imgs/btn/kow.png" id=imgs_w4 draggable="true" height=20 />
<img src="/imgs/btn/kow.png" id=imgs_w5 draggable="true" height=20 />
<img src="/imgs/btn/kow.png" id=imgs_w6 draggable="true" height=20 />
</div>
<div id="container_konva3"></div>
<style id=style_konva3>
#container_konva3 { background-color: rgba(0, 0, 0, 0.1); }
p { margin: 4px; }
# #drag-items img { height: 100px; }
#drag-items img { height: 10px; }
</style>
<script id=script_konva3>
function konva3(args) {
var width = window.innerWidth;
var height = window.innerHeight;
var stage = new Konva.Stage({
container: 'container_konva3',
width: width,
height: height,
});
var layer = new Konva.Layer();
stage.add(layer);
// what is url of dragging element?
var itemURL = '';
document
.getElementById('drag-items')
.addEventListener('dragstart', function (e) {
itemURL = e.target.src;
});
var con = stage.container();
var con = stage.container();
con.addEventListener('dragover', function (e) {
e.preventDefault(); // !important
});
// now we need to find pointer position
// we can't use stage.getPointerPosition() here, because that event
// is not registered by Konva.Stage
// we can register it manually:
con.addEventListener('drop', function (e) {
e.preventDefault();
stage.setPointersPositions(e);
Konva.Image.fromURL(itemURL, function (image) {
layer.add(image);
image.position(stage.getPointerPosition());
image.draggable(true);
});
});
}
</script>
</div id=div_konva3_end>
-->
<!--
<hr color=white>
<img src=/imgs/btn/koeye.png id=img_konva4 onclick="toggle('div_konva4',''); return false;" height=25>
konva4 savepdf
<div id=div_konva4 hidden>
<h2>div_konva4</h2>
<img src=/imgs/btn/koeye_handhither.gif onclick="konva4('');return false;" height=100>
<div id=container_konva4></div>
<button id="save">save pdf</button>
<style id=style_konva4>
// body {
// margin: 0;
// padding: 0;
// overflow: hidden;
// background-color: #FAF0E6; // linen
// background-color: #DAA520; // goldenrod
// background-color: #DEB887; // burlywood
// background-color: #f0f0f0; // white
// background-color: #000000; // black
// }
#save {
position: absolute;
top: 5px;
left: 5px;
}
</style>
<script id=script_jspdf_js src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.5.3/jspdf.debug.js" >
</script>
<script id=script_konva4>
function konva4(args) {
var width = window.innerWidth;
var height = window.innerHeight;
var stage = new Konva.Stage({
container: 'container_konva4',
width: width,
height: height,
});
var layer = new Konva.Layer();
stage.add(layer);
var back = new Konva.Rect({
width: stage.width(),
height: stage.height(),
fill: 'rgba(200, 200, 200)',
});
layer.add(back);
alert( "BUGS_40501 konva4" );
var text = new Konva.Text({
text: 'This is the Darth Vader',
x: 15,
y: 40,
rotation: -10,
filters: [Konva.Filters.Blur],
blurRadius: 4,
fontSize: 18,
});
text.cache();
layer.add(text);
var arrow = new Konva.Arrow({
points: [70, 50, 100, 80, 150, 100, 190, 100],
tension: 0.5,
stroke: 'black',
fill: 'black',
});
layer.add(arrow);
// alternative API:
// 'https://konvajs.org//assets/darth-vader.jpg',
Konva.Image.fromURL(
'/fb/go/pages/1.jpg',
function (darthNode) {
darthNode.setAttrs({
x: 200,
y: 50,
scaleX: 0.5,
scaleY: 0.5,
});
layer.add(darthNode);
}
);
alert( "BUGS_40505 konva4" );
document.getElementById('save').addEventListener('click', function () {
var pdf = new jsPDF('l', 'px', [stage.width(), stage.height()]);
pdf.setTextColor('#000000');
// first add texts
alert( "BUGS_40506 konva4" );
stage.find('Text').forEach((text) => {
const size = text.fontSize() / 0.75; // convert pixels to points
pdf.setFontSize(size);
pdf.text(text.text(), text.x(), text.y(), {
baseline: 'top',
angle: -text.getAbsoluteRotation(),
});
});
// then put image on top of texts (so texts are not visible)
alert( "BUGS_40507 konva4" );
pdf.addImage(
stage.toDataURL({ pixelRatio: 2 }),
0,
0,
stage.width(),
stage.height()
);
// pdf.save('canvas.pdf');
var pdffil="kogo.pdf";
alert( "BUGS_40507 konva4" );
pdf.save(pdffil);
});
}
</script>
</div id=div_konva4>
-->
<!--
<hr color=white>
<img src=/imgs/btn/koeye.png id=img_konva5 onclick="toggle('div_konva5',''); return false;" height=25>
konva5 gif
<div id=div_konva5 hidden>
<h2>div_konva5</h2>
<div id="container_konva5"></div>
<img src=/imgs/btn/koeye_handhither.gif onclick="konva5('');return false;" height=20>
<script id=script_gifler src=/go/js/gifler.js ></script>
<script id=script_konva5>
function konva5(args) {
alert( "BUGS_40700 konva5" );
var width = window.innerWidth;
var height = window.innerHeight;
var stage = new Konva.Stage({
container: 'container_konva5',
width: width,
height: height,
});
alert( "BUGS_40701 konva5" );
var layer = new Konva.Layer();
stage.add(layer);
// use external library to parse and draw gif animation
// update canvas size
// update canvas that we are using for Konva.Image
// redraw the layer
// draw resulted canvas into the stage as Konva.Image
print( "BUGS_40757 " );
var canvas = document.createElement('canvas');
print( "BUGS_40758 " );
function onDrawFrame(ctx, frame) {
canvas.width = frame.width;
canvas.height = frame.height;
ctx.drawImage(frame.buffer, 0, 0);
layer.draw();
}
print( "BUGS_40758 " );
// gifler('/go/imgs/yoda.gif').frames(canvas, onDrawFrame);
gifler('/imgs/btn/koeye_handhither.gif').frames(canvas, onDrawFrame);
var image = new Konva.Image({ image: canvas, });
print( "BUGS_40759 " );
layer.add(image);
}
</script>
</div id=div_konva5_end>
-->
<!--
<hr color=white>
<img src=/imgs/btn/koeye.png id=img_konva8 onclick="toggle('div_konva8',''); return false;" height=25>
konva8 video
<div id=div_konva8 hidden>
<h2>div_konva8</h2>
<div id="container_tooltip"></div>
<img src=/imgs/btn/tn_konva8.png onclick="konva8('');return false;" height=20>
<button id="play">Play</button><button id="pause">Pause</button>
<div id="container_konva8"></div>
<script id=script_konva8>
function konva8(args) {
var width = window.innerWidth;
var height = window.innerHeight;
var stage = new Konva.Stage({
container: 'container_konva8',
width: width,
height: height,
});
var layer = new Konva.Layer();
stage.add(layer);
var video = document.createElement('video');
video.src = '/kb/vid/kb/vid/jkwii/jtfdcchillicothe_ohio_the_good_old_days_1938_looking_back.mp4';
// 'https://upload.wikimedia.org/wikipedia/commons/transcoded/c/c4/Physicsworks.ogv/Physicsworks.ogv.240p.vp9.webm';
var image = new Konva.Image({
image: video,
draggable: true,
x: 50,
y: 20,
});
layer.add(image);
var text = new Konva.Text({
text: 'Loading video...',
width: stage.width(),
height: stage.height(),
align: 'center',
verticalAlign: 'middle',
});
layer.add(text);
// do nothing, animation just need to update the layer
var anim = new Konva.Animation(function () { }, layer);
// update Konva.Image size when meta is loaded
video.addEventListener('loadedmetadata', function (e) {
text.text('play...');
image.width(video.videoWidth);
image.height(video.videoHeight);
});
document.getElementById('play').addEventListener('click', function () {
text.destroy();
video.play();
anim.start();
});
document.getElementById('pause').addEventListener('click', function () {
video.pause();
anim.stop();
});
}
</script>
</div id=div_konva8_end>
-->
<!--
<hr color=white>
<img src=/imgs/btn/koeye.png id=img_konva9 onclick="toggle('div_konva9',''); return false;" height=25>
konva9 click
<div id=div_konva9 hidden>
<h2>div_konva9</h2>
<div id="container_konva9"></div>
<img src=/imgs/btn/koeye_handhither.gif onclick="konva9('');return false;" height=20>
<script id=script_konva9>
function konva9(args) {
alert( "BUGS_40800 konva9" );
var width = window.innerWidth;
var height = window.innerHeight;
var stage = new Konva.Stage({
container: 'container_konva9',
width: width,
height: height,
x: 20,
y: 50,
});
alert( "BUGS_40801 konva9" );
var layer = new Konva.Layer({
scaleX: 1.2,
scaleY: 0.8,
rotation: 5,
});
stage.add(layer);
var group = new Konva.Group({
x: 30,
rotation: 10,
scaleX: 1.5,
});
layer.add(group);
var text = new Konva.Text({
text: 'click',
fontSize: 20,
});
group.add(text);
alert( "BUGS_40803 konva9" );
stage.on('click', function () {
alert( "BUGS_40804 konva9" );
var pos = group.getRelativePointerPosition();
var shape = new Konva.Circle({
x: pos.x,
y: pos.y,
fill: 'black',
radius: 20,
});
group.add(shape);
});
alert( "BUGS_40805 konva9" );
}
</script>
</div id=div_konva9_end>
<hr color=white>
<img src=/imgs/btn/koeye.png id=img_konva10 onclick="toggle('div_konva10',''); return false;" height=25>
konva10 draw
<div id=div_konva10 hidden>
<h2>div_konva10</h2>
<div id="container_konva10"></div>
<img src=/imgs/btn/tn_konva10.png onclick="konva10('');return false;" height=20>
<script id=script_konva10>
function konva10(args) {
var width = window.innerWidth;
var height = window.innerHeight - 25;
// first we need Konva core things: stage and layer
var stage = new Konva.Stage({
container: 'container_konva10',
width: width,
height: height,
});
var layer = new Konva.Layer();
stage.add(layer);
// then we are going to draw into special canvas element
var canvas = document.createElement('canvas');
canvas.width = stage.width();
canvas.height = stage.height();
// created canvas we can add to layer as "Konva.Image" element
var image = new Konva.Image({
image: canvas,
x: 0,
y: 0,
});
layer.add(image);
// Good. Now we need to get access to context element
var context = canvas.getContext('2d');
context.strokeStyle = '#df4b26';
context.lineJoin = 'round';
context.lineWidth = 5;
var isPaint = false;
var lastPointerPosition;
var mode = 'brush';
// now we need to bind some events
// we need to start drawing on mousedown
// and stop drawing on mouseup
image.on('mousedown touchstart', function () {
isPaint = true;
lastPointerPosition = stage.getPointerPosition();
});
// will it be better to listen move/end events on the window?
stage.on('mouseup touchend', function () {
isPaint = false;
});
// and core function - drawing
stage.on('mousemove touchmove', function () {
if (!isPaint) {
return;
}
if (mode === 'brush') {
context.globalCompositeOperation = 'source-over';
}
if (mode === 'eraser') {
context.globalCompositeOperation = 'destination-out';
}
context.beginPath();
var localPos = {
x: lastPointerPosition.x - image.x(),
y: lastPointerPosition.y - image.y(),
};
context.moveTo(localPos.x, localPos.y);
var pos = stage.getPointerPosition();
localPos = {
x: pos.x - image.x(),
y: pos.y - image.y(),
};
context.lineTo(localPos.x, localPos.y);
context.closePath();
context.stroke();
lastPointerPosition = pos;
// redraw manually
layer.batchDraw();
});
var select = document.getElementById('tool');
select.addEventListener('change', function () {
mode = select.value;
});
}
</script>
</div id=div_konva10_end>
<hr color=white>
<img src=/imgs/btn/koeye.png id=img_konva11 onclick="toggle('div_konva11',''); return false;" height=25>
konva11 tooltip
<div id=div_konva11 hidden>
<h2>div_konva11</h2>
<div id="container_tooltip"></div>
<img src=/imgs/btn/tn_konva11.png onclick="konva11('');return false;" height=20>
<script id=script_konva11>
var width = window.innerWidth;
var height = window.innerHeight;
konva11(args);
function konva11(args) {
var width = window.innerWidth;
var height = window.innerHeight;
function addNode(obj, layer) {
var node = new Konva.Circle({
x: obj.x,
y: obj.y,
radius: 20,
// radius: 100,
fill: obj.color,
id: obj.id,
});
layer.add(node);
}
var stage = new Konva.Stage({
container: 'container_tooltip',
width: width,
height: height,
});
var tooltipLayer = new Konva.Layer();
var dragLayer = new Konva.Layer();
var tooltip = new Konva.Label({
opacity: 0.75,
visible: false,
listening: false,
});
tooltip.add(
new Konva.Tag({
fill: 'black',
pointerDirection: 'down',
pointerWidth: 10,
pointerHeight: 10,
lineJoin: 'round',
shadowColor: 'black',
shadowBlur: 10,
shadowOffsetX: 10,
shadowOffsetY: 10,
shadowOpacity: 0.2,
})
);
// fontFamily: 'Calibri',
// fontFamily: 'Monserrat',
tooltip.add(
new Konva.Text({
text: '',
fontFamily: 'yokkmokkOT',
fontSize: 18,
padding: 5,
fill: 'white',
})
);
tooltipLayer.add(tooltip);
// build data
var data = [];
// var colors = ['red', 'orange', 'cyan', 'green', 'blue', 'purple'];
// for (var n = 0; n < 1000; n++) {
// var x = Math.random() * width;
// var y = height + Math.random() * 200 - 100 + (height / width) * -1 * x;
// data.push({
// x: x,
// y: y,
// id: n,
// color: colors[Math.round(Math.random() * 5)],
// });
// }
var colors = ['red', 'orange', 'cyan', 'green', 'blue', 'purple'];
var colors = ['black', 'white', 'black', 'white', 'black', 'white'];
var t = 0;
var bx=0; var by=0; var bx0=100; var by0=100; var bdx=50; var bdy=50;
var bxlim = 19; var bylim = 19;
for (var n = 0; n < 500; n++) {
// var x = n * width;
// var y = n * height;
// bx=bx+1;
// if( bx > bxlim ) {
// by=by+1;
// }
// if( by > bylim ) {
// bx=0; by=0;
// }
// }
// x=(bx*bdx)+bx0;
// y=(by*bdy)+by0;
var t = n;
// var x = n * bdx;
// var y = n * bdy;
// if( isOdd(n)) { var color = 'black'; }
// if( bx < bxlim ) { bx=bx+1; }
// else {
// bx = 0;
// by=by+1;
// }
x = (bx * bdx) + bx0;
y = (by * bdy) + by0;
bx=bx+1; if( bx>bxlim ) { bx=0; by=by+1; }
// var x = Math.random() * width;
// var y = height + Math.random() * 200 - 100 + (height / width) * -1 * x;
// color: colors[Math.round(Math.random() * 5)],
data.push({
x: x,
y: y,
id: n,
color: colors[Math.round(Math.random() * 5)],
});
}
// render data
var nodeCount = 0;
var layer = new Konva.Layer();
for (var n = 0; n < data.length; n++) {
addNode(data[n], layer);
nodeCount++;
// if (nodeCount >= 1000) {
if (nodeCount >= 100) {
nodeCount = 0;
stage.add(layer);
layer = new Konva.Layer();
}
}
stage.add(dragLayer);
stage.add(tooltipLayer);
stage.on('mouseover mousemove dragmove', function (evt) {
var node = evt.target;
// update tooltip
if (node) {
var mousePos = node.getStage().getPointerPosition();
tooltip.position({
x: mousePos.x,
y: mousePos.y - 5,
});
tooltip
.getText()
.text('node: ' + node.id() + ', color: ' + node.fill() + ' t: '+t+' ('+bx+','+by+')'
);
tooltip.show();
}
});
stage.on('mouseout', function (evt) {
tooltip.hide();
});
var startLayer;
// manually trigger drag and drop
stage.on('mousedown', function (evt) {
var shape = evt.target;
if (shape) {
startLayer = shape.getLayer();
shape.moveTo(dragLayer);
shape.startDrag();
}
});
stage.on('mouseup', function (evt) {
var shape = evt.target;
if (shape) { shape.moveTo(startLayer); }
});
}
</script>
</div id=div_konva11>
<hr color=white>
<img src=/imgs/btn/koeye.png id=img_konva14 onclick="toggle('div_konva14',''); return false;" height=25>
konva14
<div id=div_konva14 hidden>
<h2>div_konva14</h2>
</div id=div_konva14_end>
<script id=script_konva14>
function konva14(args) {
var width = window.innerWidth;
var height = window.innerHeight;
var stage = new Konva.Stage({
container: 'container_collision',
width: width,
height: height,
});
var layer = new Konva.Layer();
stage.add(layer);
function createShape() {
var group = new Konva.Group({
x: Math.random() * width,
y: Math.random() * height,
draggable: true,
});
var shape = new Konva.Rect({
width: 30 + Math.random() * 30,
height: 30 + Math.random() * 30,
fill: 'grey',
rotation: 360 * Math.random(),
name: 'fillShape',
});
group.add(shape);
var board = new Konva.Rect({
width: 30 + Math.random() * 30,
height: 30 + Math.random() * 30,
fill: 'burleywood',
// rotation: 360 * Math.random(),
name: 'fillBoard',
});
group.add(board);
var stones = new Konva.Rect({
width: 30 + Math.random() * 30,
height: 30 + Math.random() * 30,
fill: 'white',
// rotation: 360 * Math.random(),
name: 'fillStones',
});
group.add(stones);
var boundingBox = shape.getClientRect({ relativeTo: group });
var box = new Konva.Rect({
x: boundingBox.x,
y: boundingBox.y,
width: boundingBox.width,
height: boundingBox.height,
stroke: 'black',
strokeWidth: 1,
});
group.add(box);
return group;
}
for (var i = 0; i < 10; i++) {layer.add(createShape());}
layer.on('dragmove', function (e) {
var target = e.target;
var targetRect = e.target.getClientRect();
// do not check intersection with itself
layer.children.forEach(function (group) {
if (group === target) { return; }
if (haveIntersection(group.getClientRect(), targetRect)) {
group.findOne('.fillShape').fill('red');
}
else {
group.findOne('.fillShape').fill('grey');
}
});
});
function haveIntersection(r1, r2) {
return !(
r2.x > r1.x + r1.width ||
r2.x + r2.width < r1.x ||
r2.y > r1.y + r1.height ||
r2.y + r2.height < r1.y
);
}
}
</script>
</div id=div_konva14_end>
-->
<!--
<hr color=white>
<img src=/imgs/btn/koeye.png id=img_konva16 onclick="toggle('div_konva16',''); return false;" height=25>
konva16 mobile gestures
<div id=div_konva16 hidden>konva16 mobile
<h3>div_konva16</h3>
<div id="container_konva16"></div>
<img src=/imgs/btn/koeye_handhither.gif id=img_konva16 onclick="konva16(''); return false;" height=25>
-->
<!-- <script src="https://unpkg.com/konva@8.3.0/konva.min.js"></script> -->
<script src="/go/js/konva_min.js"></script>
<!-- emulate touches on desktop -->
<!-- <script src="https://cdn.rawgit.com/hammerjs/touchemulator/master/touch-emulator.js"></script> -->
<script src="/go/js/hammer_touchemulator.js" ></script>
<!-- 3-rd party library for gesture events -->
<!-- <script src="/js/hammer-konva.js"></script> -->
<script src="/go/js/hammer_konva.js"></script>
<script id=script_konva16>
function konva16(args) {
TouchEmulator();
Konva.hitOnDragEnabled = true;
Konva.captureTouchEventsEnabled = true;
var width = window.innerWidth;
var height = window.innerHeight;
var stage = new Konva.Stage({
container: 'container_konva16',
width: width,
height: height,
});
var layer = new Konva.Layer();
stage.add(layer);
var originalAttrs = {
x: stage.width() / 2,
y: stage.height() / 2,
scaleX: 1,
scaleY: 1,
draggable: true,
rotation: 0,
};
var group = new Konva.Group(originalAttrs);
layer.add(group);
var size = 200;
var rect = new Konva.Rect({
width: size,
height: size,
fill: 'yellow',
offsetX: size / 2,
offsetY: size / 2,
cornerRadius: 5,
shadowBlur: 10,
shadowColor: 'grey',
});
group.add(rect);
var defaultText = 'Try\ndrag, swipe, pinch zoom, rotate, press...';
var text = new Konva.Text({
text: defaultText,
x: -size / 2,
width: size,
align: 'center',
});
group.add(text);
// attach modified version of Hammer.js
// "domEvents" property will allow triggering events on group
// instead of "hammertime" instance
var hammertime = new Hammer(group, { domEvents: true });
// add rotate gesture
hammertime.get('rotate').set({ enable: true });
// now attach all possible events
group.on('swipe', function (ev) {
text.text('swiping');
group.to({
x: group.x() + ev.evt.gesture.deltaX,
y: group.y() + ev.evt.gesture.deltaY,
onFinish: function () {
group.to(Object.assign({}, originalAttrs));
text.text(defaultText);
},
});
});
group.on('press', function (ev) {
text.text('Under press');
rect.to({
fill: 'green',
});
});
group.on('touchend', function (ev) {
rect.to({
fill: 'yellow',
});
setTimeout(() => {
text.text(defaultText);
}, 300);
});
group.on('dragend', () => {
group.to(Object.assign({}, originalAttrs));
});
var oldRotation = 0;
var startScale = 0;
group.on('rotatestart', function (ev) {
oldRotation = ev.evt.gesture.rotation;
startScale = rect.scaleX();
group.stopDrag();
group.draggable(false);
text.text('rotating...');
});
group.on('rotate', function (ev) {
var delta = oldRotation - ev.evt.gesture.rotation;
group.rotate(-delta);
oldRotation = ev.evt.gesture.rotation;
group.scaleX(startScale * ev.evt.gesture.scale);
group.scaleY(startScale * ev.evt.gesture.scale);
});
group.on('rotateend rotatecancel', function (ev) {
group.to(Object.assign({}, originalAttrs));
text.text(defaultText);
group.draggable(true);
});
}
</script>
</div id=div_konva16_end>
</div id=div_konva_end>
<!-- <h1>KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK</h1> -->
<script id=script_checkapi>
// Check for the various File API support.
// Great success! All the File APIs are supported.
if (window.File && window.FileReader && window.FileList && window.Blob) {
}
else {
alert('ERR_103 Unsupported browser');
}
</script>
<style id=style_canvas_files>
#canvas_files_txt{ border:2px solid white }
#canvas_files_info{ border:2px solid goldenrod }
#canvas_files_tn{ border:3px solid black }
#canvas_files_paste{ border:4px solid burleywood }
#canvas_files_ffpaste{ border:5px solid linen }
</style>
<style id=style_files_tn>
div.image {
width:100px;
height:100px;
// background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA...);
background-image:url(
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAHMAcwDASIAAhEBAxEB/8QAHAAAAgMBAQEBAAAAAAAAAAAABQYDBAcCAQgA/8QASRAAAgIBAwIFAgQEBAMHAgILAQIDESEEEjEFQQAGEyJRMmEHFHGBI0JSkRViobEWM/AIJHKCwdHhF0OSJVPxJzRjoiajssLS/8QAGQEAAwEBAQAAAAAAAAAAAAAAAAECAwQF/8QALhEBAQACAgIBAgQFBAMAAAAAAAECEQMhEjFBBCITUXGBMkJhodEzkbHBBRQj/9oADAMBAAIRAxEAPwDeGk6eemAGFAyoqDax2qwJNqO9AKtAg32uj4RtW2hTWakQLGZ42HsWYZBU2B3JI3rdV+48P2o1qP0M6ZtPIGTJayScm/gA/C/BJwfCfJJHrNVKkAdBHqVW7NUQiUNprle9C9uex8DGtUSKjauRl2kiRhvX2s1g+8nsLsk4xnca9sunSC2gb01DAjaWcUt03L2CLY1Qv3DBYgSJ7l42q1sFf/l2VpbvNfxVX9FHbxYVoWlFCt7qQDG1bRI236ufrW7r/wDDg1aCt5zZE0sBDkztMj+1yauRTVcD3E4oCwTVHA3r+qRB01ElX1HkyCXz7muuexHFUao34I/iENChSo3YmaJasbNvqURQ+4rNYA5JJADzA8IXSBVY/wARbt7DjIz2rIGQRn7140woXY+quvmpIVkBUaYM53AXnP2vP28FfL3W55PMskQ1CCMQhnoklQFe/bVjsCL4Iwb8KiahG83KZEDQLplY1Y2+4jmj2YjFjIvvRDy1qGPnAqJfTHot7vaa+sXtJzg38ZX25Xxe6WmrdC65KgG5NriMWCP5hROaoit3H9H6EsPUdVFqtN9PurugPIHY9hY7A57ZrP8ARusMriPZ6ntJRVUHdZNUDzvCD9T33AktptdtT00YtTLtAAexahDnjCji73hhdjw5zWTVGiZ+NWqgh8s6eQRo27WRIv8ADyt7s2Fx2IrAs/A8Zz1/WwpqenGKSpLdzIiiyBIADznI78V978O34865Y/J+iKq3pt1PSREOQRtqTB57C8UPcDiyTlvmrXL+d6RG8b7mjZVfaFNmQAg3dZrj/wBbFY947TTpodSB5yjjhcRkQBRm7NA1z9+Rf6nw0/h087ef5UhkCUwVRtsC4zd2D2H9yPt4Q+navf8AiMkBYIy6dXQ7doK7RggGgSD2xyft4a/wtaTUfiLqllmRKVWaiFx6BN1nIFfzVnuCD4jkx6/Y43bUSaw6iAgQo7Rhg0TgLVswx8UgHDfSuSDkokkrdYIKRKyooVdwNrm1BK/YjF9/m1Fal9Y3UIgWj9St4cKSAxDVdcHkirrdYsmjMp9PWht5eL0wVGxfccgcNTcAUMG+1A+OK+lxFp5ohK3rHTsQzXHI6Esbo37cE7QCa4JP3XBvM2t0w/E3qMQkd2AhLA5o7U+ki+3waFf33WHVel+aUsNwaQFQjbTQWjyMkJ/Nz3wST81+edTAfxv6z7FEgGmdm2tk7LGaywoVZrI+b8dH0+/Kpy9C3l3q+hk1nUYxIrIokJ91kqC3z2N3muRnwb6XroJPLckxYblEhD2Lsbsn9zf7DxlPlPXRNqurNGLRI52MZ3UpLNdG6/q5AFXeSQDvlzXSN5B1k0aiRZWkBywYUjA4C/I+BZ+CRfVd6KN5/DjStrOhr6bxSBnorKPlVujX7d+/3IIaby7JqC8hCUVo2Tzg/Byb/v4B/gc2oPlKORdSju5KkM+6gEj5AF4PesZ+LLpoXdo5XkZYwxY0IufYK72Rt4AqvuN1ceVsyqpANvLsGn0Amk9GiykgEdwOcE/zD78dhZA9cOmi05Rfy7MRZNixZHf9f7f6+OvN/UZPyTRHVRhmwbRcE44yBz+9dib8ZT52m1Uujd16kgwdhBHuOARW0Age3+x+aGvF2VOHWNbJLoyYoo633YYHFi77AZI93z9vAxINTO0JaBCriytDFHgj70OMA9uKWYtLI/TNMZdZu91qATXCYGDR757V+7FA0Wln0DNqg4WMkkDcKF+4ULI2/wD+NYIHja47Ja6qsEKK0sW4XW+wTzQzeOTk/OfsM1XUdF6m36Sysav6sst2Go9hk53DPNFdZqVfrCRRtJKDuBCDNqwH+554x9ifAPrk3oa2306MIwxPKg0aHbjGPjd258Z33o041+jOt9DcjO5pl9RAdxOQQTZbngc8HHiXTdQ0bs6o0dZZlDClAq77AX3+3fk0fzqp1JoDp5RtYcBlLc/y3V4FfIzfbx7oNeWm1KrAQylu9fzCzZOFN3Z+GsX4PEzr5N6hp9RptVAu40PaAbuwwIFH5FcHP3K27w6YyzIY0VgWUBd3JZu7Vg7h379sUM68ga2OSbUIdPtV2VTuxW0k5BuuVFEiq+dvjSOkzyanqEhBFt9T7jus0261YUfprdQqvm/HNyewvt0xJNbpzIqkb5CV9RA21drfbg424I9x748m02ghEc5lhb2lrRt20BVPfgWDzWAftV/pvqx+tqpJEPpOrBI0KjJ21V2oAHBAIxYO0HxUn6tp4+lJD6EkjhY4v4bLZBAtqAv20Bn+mzx4iZ2U3Gv12gk0ccbahNu4Kdx+/wCouzY5znwE1MPTZNUrFwARuUucLxRFdjwCB2/td1PUkc6U/kpCY2UWHBxd8Vjlefg4a6Ms3Uo218c/5WSwpIIkoA2Dz8/Ue4PJBo7tc+S5ey1oPOn6d+a9FAQoATLcU3+wQ/ByxwLNq/mc6Lp0aPBtQSTBVRXsk/A4BAIx++LFeHvT9Rhj6k0q6SZEYCP3S7iov6q+QOB2wbN+EH8Q9dBFHpl9OpZdagGcgbTwck1u+c0c4orjvZUtSdR0jTMkbRuoBNLIu01k0Lv/AEGLvHiTpWp0kykxlGVQMhhiyQBnHf8A17eA+j6kr6h4xpmVltapsYHI7D3EkD7fN+LnlzqfrQs507YKgisgG8c9qwO9gCr8dOg07yxNDqemKtFhvUAA8gEGu9cXx2PwfBvT6J5NbHsjV1L7QoNAUL5ogmjdZOfAvyRKH6cjbADu3qxN5Arv+hPN/wCvg5oC7SylUQKDfuBbixRCtRu2BB+aAs0c+bER+g6eonEkrRECEyMxlUi7ZQSRz/6UByBY7r3TOmhyzywkc7o2VhZcgAkmhgj72R35PQh4emTSzSrK53xEc3aFiSbPz/vgFj4g651XTvCqDTSzM8hDUykAKCQxI43HuPn9PHP5VRSOi6KkkOyaMxkWQas0OOfij3rHPHiaPQ9MfVU8hK2LZruiSCLBJsizQ+TjNsTl6kP8U0850TtIorcz37gtC8YHtJ+cigKsSxdQhHUjKNJMQVABD1YyKGL424GB25FG6QONJpJPUj7BcgtzS+4EgHllAH2HOBSvqdF07T9agS1YzvSDcdx9wAPa7o1X2Ix40HS9RhVtT/3SQLMMbpNxFKa4rkkWcUDXhR6jrYYupwxiOQuCS5I4O9CS1G+Iz/p28VjaEnRvyB82aMwR6b/nwqn8VSP5RZUAWMigOSt8A7XvR6fRjp8C6k6cB7Ys8qgFd6A1xWARXbtXZJ6drE/xyKRYZFkMkbN9QIJHLVRFeo18UAK4PjQdbql0GpVXBl9FGW8JZPpnk4oc44x8eFmcL8H+CQmOKYBCsQVlJ9oIv73VAng/zYziKL/CFWZSE3eqSSgBoCrLDdyOc8EjObF1upwv1KYw6aTalwo5cDcu0AEUKr3X8UK8dabUxppZ0/JvGrMRRbNdhdf0k545xVhnjLYKV9U2hUKkcax2pTkjaNpFfpe0m/5Qbvjws+atL+b0EiOrCRo2C7lshyRgrVnl+/KN9yzhrnjOl2GB422/1DBK7Sar5o0D2A+/gDrII9RppbH1g+wnLWKahWboYGPbWC1eHjdEWfKOiC9X6eVZRseZ1JNFrjkArjPuv9ufGj6iFw6kmJAxQncBmzZzm8n/AH+QQl9FihTqkberF7N5RmfFbHFlqrg/6N9x4dpvaRtn+opkNggnnjPP9/Bn7ErkDUjWw7SGjtgdxACcVyKH/iNUCeLHjXvGS9IiabzR0pI5VhWYyM7AZcCPFY59o/QgHBUXrXju+h95ft/2nNmmo/OHpS7IHaNB7BakAZ3A/wBILrz8HnjwldUhlmFmB1RJPaJwp3KU7D+qgboqckeG6FopNJMkjkkMAgDUO4IH9PH/AMXkCtd0yERPOkmwB9ykMSPpz7RdJjKgcXzwODCWqUfyc6tEzHDNISdqsDQeqFC/rLDAJIbkEHxcgglVx7UH0AnDFGtybIzYDD3Xfe8kEvD07bHCtFtlKDd2B2sY+MCqs9rB7m0TnWD6CNvta19q4JO7+UD7cC7+15Y9bLZE8++lKI4jBIzq8ZBsFgu680TYsjFY2mu9B/MulaVdGuyRWUlj/DCjcHkyRRAOOPsPDj5zhmM5ieOJYlmRpASQFG4jCuQvJyCRQ2k/Ci+taXf6Cato0973sckrbsSwBUE0SM4sqflSDG6MszdM1p80IyauQH04o23vQUgAZBQGhXPPIs+K/SukayLzOj/4w76J1tkMi7WG0kgAUo3XRqjTEGqpjmq0elfrnqNq5lAj3bVi3t/ywxXaAMY+OQMeB66fpUPW4tZJ1KWRY3W09FP4qgmhZs1djJFiiLNgaeQMfT9Iy6pYo5w5pRGFLqLUKxVScgcnFgHJF7fBPQQlZDtlOyOZn9rFgFAWqoHkBR7RVFuLAEWl0mmXrJiBb1FUCyMSFQva7umbNH6mJNg+C2hgEuo1CQyj1CLZwbogE7vabF5PYZ7WT4ytDKv+0b+a034fdNeN2cw9V0yOVa8BHDHPawOayOLycm85auVOo+Xy6KI2RwrFVo/xhu4J7g3x/bxt/wD2htJ/+z/p0hdFP+L6dk3GiR7wT8DOMYvi6bxifn/STf4n5feD3EI+8qLr+KvNYAssAc8Annx08N+1F9iuh1H/AO1KCM+oh/w6KmABwVWhuB+4HOea8Of4USwv+LuvSRiGRwxSwCbhU8/3NVg2cVXjK20urH4pwRo6iGTSIAzRbRZr/wBSD8Gv2Fz8OdHrD+K+rIZTEYyQwRgABBuwRfxj4rxpnjuX9DlfY8q7Op6etTJbApbOxYMQVJu8kmuDzYyKu0SDrzH6so9SMLiQ0QVAHNXQ/wDFd8twcdEWsTWxqyRM4WgvpMofBBXaBz29tmxQo58XtKmu/wARG2VC7oG3NYyWPur5DZo4ND/L44Lx7VK0uGYF5nAnJkMg9P1h6mdlAEnmxzXbvVr8yee9Qo/7QHXIW0qGQJoSRRbd/DTuLGTYxiuPGn6Aa14yjIoAUkgwvgBQaOKqjzyQbySobLOr6WV/xY1hZKcabREP6YDVsWqzm+PiyMjgdHBh42ppR8kaoP1LrZEaqVTUFgFJr/m3Y+OftgfHg55KlVvws1jLICgimoAWb2sTn75v7A8A4VfLUU8fVevhTGsiNOFZnIJJMgovgiwB+x7eIfLuq6m34XdQkiJQKkquBKy2Nrmj8k+79MeOmzcKPqr8BpIJvJKtHO5DuWUo5CmwAPbjuQa7kdgSQ7aIn8lqV9djW4+12o+36hyCaVuVvPArHzd+Bul6gPJkUh2syyuPdEff7FOcUL3AYPh/6PHqJIzGgUo7UxCljftIBr5IFX8GsbiePlwvlVbc+bvyckz75dVjsCw23eBn43d+M458Z95z0nSo9DIDJqBuLsW2EV9JJsi/jHa7J8aSei+XJ0jbVRS+5dpIQNj6s0L+eM2GzfCj+IHS/KY6FOsWm1l+kGJqiLYcADNEgGh2I4si+OyBQ1v5OLpWlLs606kgL7gTtAHc/wCgySPjwI65roV1GgVHk3ei5scZJ5Hbg1k9sXjwV6h0rozdG0cZGrHqToIwVogYIoUewPzx+3ij1fy/01uqdGEYnFxuFIFHhsHH3/pFftnbLKDQtp9Vt866TN3SsGAO4F2yKB++KN0ft4N+YU1SaxnjiLMAxBAVqIIrm6yb5PIyTyOm6E8PnPQgRrReioYe62FghvmyLOQSOKrw8anTK7Bn/ikrZcNycbiCO+C3bL9qPjHLIEYnUjrJQaeQRg7Q4RTtGfcDYHATnP3zkn5b02o1EupSTTFCrPiRQbyvtJvOKyav9vBoadP8Yb3i/WWiHFjDGx7rYisYN4Bya8TeXpo45dQSVolqAJ2gHN5JO0Zu7/28VjnLQk6Do9doZQRHIF3Cz6YyKNXWPkcjvmjgz02d3lZyZLdBkiz/ADNVC7G164/3AN3RamLUaGY2ewY1Zq2zjPa8ftnPgJ1GIlvUBUlS+ALIABwB9mjcY/SgOM+TCb9ibNWk1MSaOdC7EO1bA5UAgGm/ZiAK7jPjjVa3Vfl4UEUxVT7VV0axuzgkCtylq5ojmgfCJLpZ5dwVX9SmbKOwUbgxokce4d+3e80/yWsilEkUlsjqV2Bt12ApAqycCqs9xgHxl4a6G2oa+bVumm39OkIRbO1Y4yQHegB/KTmvmjjIBtCTWy9TUNpLmUgSGERn3/1WOO7Z4N5GAEM/mmXRlljCl49vpqxABkY7VFYH0nd22iu1F4JJG1MEkhViY7AKkA8XRPAJYDH9JuzQVXHRmVDrG6hKE00is3tKBloR7iGA43WxBxQu8Hxnf4lvqlh04bSybzrEVmYKPad14IBv6rAyAoJoHw4xSRnVjdIFRntvdnbYv5sUQKN/pfgL5lg0zzQngjUIANzK1E8CiCO9DNAk9yfCw9hlmkk1jaqbdpZQpDAEBVJoA1uB7nfwMX9qE/QZtd+Td207K6gCjGAWNtdC6BB/2us14Y9HBEkkr71faJAG3gbgAvZWsg3RrFWQfbZh6bEo6fKu4knJrkUeTnvYAvv358dMy+CO3k7q0i9PBdGUANY2qLPPbFkZ5+LuvBBZyZJSS3uYWawa2qb57r+/7Gl7y9ubppKMXZpaIAsE7V2gn9TWfk/y2Dbm0Go1G2eAiQkWNoJJz7cXeVcd/k88mV85oD8OoQdNEIcuSxZAHIWM4F13JAP2pj481Wt1Uk0C+hM1hfbaP7aJUsDg0GAwObxk2hajp+oIIG8MoXezIzEfUvJANYPJHP2xUh0+q088cgeNgrFWXNcEsCKuqu/sc4I8Y+Guj207UajXSa+F00EqvSbK9MAOUUAZNYtSV7D9yLOhfVS9SZodCRziL01VWB9wLcc/6d2ySiMdYutgeUpvQe5irNZEW4fpR3cGzuP38GtKxTqLs5DFVB9wogbiOeex4xla7kxlNAc051pWbZBL7xudRzW20AHJqj84rGB4VteZv8QjB02q27hbKRTEMpBOR2A+3ub+gjwa0jRjUFJGCpR3ZqztNWO5sc/2NC/AjqUEB1iSI+1mYLfqlcllqxYzx84FfBBh1QkgWZ+oozwTRMZFyxJ9P5JIYE7SXHFUw59oLDqNe41/5nTxyPIAbPq5askkn5GKBBsj48Ks2lSaG135CqAG3EYjNULBIKtkXxXFUC6joZztlBEKlVcWhAUED3ZHHAuq73nxrcei20Lo2p1TSSgaaSVArLvYIVr0yMPkgUO+eRVHBLTzzx6ecvpNi3b79g2twvtGQbBsDsf0Jzby1Hr4JZoRXtDmzZIOzI/1S7silvI8M2j9ZYZo1qMFiFAVxtFLVcEgA/vtwQBYJjqCi2vi1bdKJ/KSJbMpJCgA0dx2jPGDeKHJvAnWaacaVnfTzCM97DHbggWOWo/F+P2lcHRogCZojgD4ohcdxx/oPE0jaaTp5LurHdmyCAtDn5GeODY47432ZZi08n5uZzFqY3USLYPFo9jDURntXz/MaLz7ZUt9231Y7rJ/5gyPjtnmv0rwNaCCOTURksaDe1pd59wkoGz8327gYo2S9JGhO5UDK0bhe1hif2Ptejx+xxd7g09jaHT9a6ZOTJHJ/GoUEJ3Rnlj3yR+5vxsvjDPMOljKQVGRIGKqCpIVjJRNAG8gf28bn47/AKH+b9kZMh0OoDBVFgMFAbYTeL5oHt8AZH6A+sSnRO06lSLXaRkEA3dgjGeLx8mh4UOm6iX/ABBdMCFBaqNDmiaFXQ2kH44vFl5eQppJfVBQqMhDVYzfx/4ax/p45eHW+1UNYx+pGigGpAFBokNx+g5I5H+vj9JOsupDrL7SvutyfaKw3F8Dg5sZHah1GdINUjFC/qyCMBn9uTQHN57ADt2yfApvMU0OrWM6MsxiIVDNkMwsKKN0dxGMFiRXJMZ79HFzzTFrJeoMUkC3J6ikjJsFgTgcYJxRAFgVtIzqGmX0H9X0AsYbduBb23i69x5Oe3qWSSDYDrnnLUwTyJFpEQxQs9hwwsC7u6IwKsG6sjHikPPethR1PT4VCR0KIG0+4BTbfCHOcc4G7wfh32NmLUafooZNRPpYL9MO+1WAStpqr2r8c4xeCT4FvH5bg6lp5odIseqWaNUkiBJUl1WqvNAEYxW2s4FOXz1OwVB0XSu4eidoJ4sjaW59vxdqB2oc6Lze/UOs9O0+p6Rpwk+tgRpN4LgM6JvtSxwpU3nABzg+Kxxu+wddJPF+duLTyCMpuTDKhwDxxWeQDQsYAFlNGImkYEF/UZVUlCXa8Wqi8gDgkciqx4ozxac6ookC7pIhuJN3wPcQf5iBXN0c+IJNZPHHqUgghZIqZgRe8BGYe4jk0orgAgm+PGV9gp/jzEv/AAFpCAff1aJqVcEqrkgtWOeb7ZBsVjXn/TRSdS6DJG3/AC2cBTQv3oR2q7J447gd9X/FPW63XeVIY9bGFgj14JkRSrMQWoBiLqgw911k80PGeeddMkup6c0jPuRZFIVjkBqDbcV3x2DVxRPTxdYxN9l5dHG34laeWLVyWNHELUqSppcilsizeD9zz4n8iaLTJ+J+ok/MvtGwEIR7QYeMryAOSMHPajY1PTtO/wCIEYHqpIYEj91NtOAGvJPbtRB7ePPKek0EP4i6qUetTBQENGlMQxzk0Tih/wCg3yy9/oUaosEB1UcbaobXIU+meORi1/eqPbnI8Woo9OWcxayS2j3Gn9pwMZUWb/UYFcCxe3RsaCy7SoDM1MeK/fua+/3vxaZNH6juvrBzTJdFt1WQR3/1wpNfHIsR0sERgYjVBYvcV3ODVhRdbQRkEXzYvki8/wCoQJ/9R9a+4uv5eB47JJsANXY2Bgkrna36+HONNAqsFklUiwrKi8CqP1cZbv8AGa8K+pghHnXUyxoPTaKC1MdHO0EZJujRv7kgAgDxfHeypA6Dp506t1xV1J2D1/TerUC5dtUwFEn9CSe3ij0TRaj/AOnmsiOqAenIJ9pPscYLNeAW4PP6+GDQaBP8S6vv1DHeJgWKAn3ErnFAHcL5yb7nwK6V00N5B1sY1bbPSkulYi9rkH7AANePi+TXRvpMO/4PaSGLyeFbUMp9SyZCNuUUnhTxzg1W75Hh16VHpvVqWd2cMFAsEtg84OTQwPn+yR+GEWgh8sxJUxCs1MQo/lX7mq9prPHJqw49MOmSYbQ6nkC6HbteBgY+/es4cneSxyPrkIgdn0UsgDDJmRiSRggVfAJvIGcG68LfmfzDHP03Vg9DkUor3e1id2zcWOa+m7wST/cj07VdSWGcQkSLjHpK5N+3+a8War7ni/FSE9f1Wm1caRxlFtFKaa9oBJ5UmgazW0kk3ffPGaCvqNSW0Gmik0M24TbixH0ClokA4ojkEc8GqPes0876/QhFcsyElQ6kpW7kg4HtX44N0AGJZ9L1RNLFHM24F7BZFpdoXIJJIoV3FbSbGam1Gnkm/JzzOFRoiB/SKF0AWzmhS0RVUaKh2hQ1eikh8x6US6nc24twSDbgEnsQKPPNmvDBriU2JPI5K+0gi6IK0a4JsN+ueO1HqOkg1PXdJEszyLG1t/FVttSZGM5uhknnnJ8W+rTSL1FQqSyMVsAG6O4VQyR7r+CLrnmaSoZIk6w8hYhgfUQqhI4bOBZwQScY3HLEHxBGIRNq12043kBkYBBvQDIHtoWfpHweaEqOkfWIwx2+iy7W3haUAHcdoF520QbNUCQVPivAm38+np7SEOQb2gMtDAo5rNG6Ir4UMZ8pzJNp9VEXq2UdgfddZF2cWD2q8c+CGpWPdMrb1RU9Rj6e4q211oDaRQUV2wq1zfil5LCNFqMEkMARZa7thg4r965yfBoxxeo7MjEMNlYYUcsNvFHJ++f0Kt7AI2i0zq6euFMcrhRXfewLE7CB2IYDFH+m/A/VaNG0DTDVOFBTaXdRtsqbACk0BtHagowPpU5HpIfSZZi5aN12lse4ODxeCTwa/msXZPgJNo9GOgsYvzL/AMEOtIBnIz7rF3wCas1wQHjQhhaMJHFDOGX0bj3tRHuYgWFBqzXIrnAHgtpJlWXekrOq+5RtAOwkVdgkXS8mxQAxW5W076d5d1Sqqmji/gnut4+a/U9iXT5lKqEZQyoI0JVcWQKAqquweTnggt4rLHZG6LUfxmCH1BvWvZj4JIr7HJ7V9gavXpYhpNLPKZljM6PGdpyQbKnvdHPHP7eKen1MvoJLGrrvIFsKoMpokkYAsWfk3jdgn1j1tR5f00rRblmnBVlADUUYtmhiskHAoWaJvLWjK/TfTTWyr/8AcBZSPROyztBwFJq7HHJUVW4Gtphp26fJVEjYWZkusOTRyPtQwf2vxa04U9RmDqFepEwwQcbVFbRRPuHHeyMHxV077umzWCSJEYndyaav3rd9jd2PGnzsGLyosc3SwhFsJT7a4IAP3+aJPY18Dw69FMLxPG9sqttBYWbO0m8VkkH9Se3hR8oLGelg1VSFSDbZAAJzXf8A2Hhk6UwVWQBlL4Gbqiax9jVV2o18Vx5ayKgnmXp+lMTTtJQCURt/l2gkWUNEkfvuA/morPU9JHHCss2slYeoQ1yAtQVrwFPJvknLG7uy7eYtLppemySybkIRvdWa2N2B7DkY4rivCb5g0Wli6dvUTn02WuCq3Vgm/tzngcgjw8vYjiOSP1CralGVFT3WSSu1QeFF+0GrP25bwX6fKVnszMabY5oWOefbdgEn5N577U+FoWV22yqCpAUjjnByO/fjHB7mNLqVKvKlsTVewbiqgmqAwK4q6PxS1GWINcE+22VW2hmJ/hH2ir42+0/3Nj+00ocGNWQ7VZSCykXZoHvWT37gfr4FR6iTTbHA2UWskAXtIPcYuiAPtX8uWJlkGjh9RVIC2M8j/SxZ5ruR2FRrRh88UftClY7FAknHFWTm8Kf7ZzTB9foIl1ISDUOpNldgUE2wyRs+WFE3RXtttWmSO9PuIJugwvmyP/1f744B9Z0ej/xCNbkDlWYLV/yqM2ftm75zQHjW+iBtPpoNPrpQNUMKQlSAgjYMXs4/TijQNX4MLIqxbhOIyRusLYGeaIr+ihX2FkUVvqkmm0/VtqpqD6iqRvAu25xeRwe1X9r8W01EaQqys97CPpFkGu5v79vtkE+KnoC8E6x6Z42YqFoKNoNDBrA4AGCf6hg4JvwyySMYkRi+4lAEJLEUObFnOLrN/Nlbhk2SrGib1ChVVFsWCooGsg2CLIOSKBYnwY6JPqJOoDTIdzKx2rtVidrHgVm9wI+f3A8c9hu5PTZpC4VfaGLMGHtoi2FDFA/ayeOfHOoCxBAlgSEgAXQBViaFX2qufavF+CGqUieqXcb27G3D7BSSb+P7ffxBPGm9SUIVTZFkAUMXzZ5wec+FKAvXRwanUSwvqGUOTvYpR+txQG3m1W8cLd4BO6eMSGmiOv8A4kb7JKdkKha7Vg5913X9Xa2vbfHo/Q/zfsjJ8y6PzDrl66hkVRFJIGYKhKsxocDBqrr5zm2PjRo+rvPoFdzvWgwJvBF2pN3gLY+4BHI8ZoqSnWxuY42CCyN2O3wbyL5+e2PDTptVP+SmRkeJjIVcCOx7gxIy2fceOLBPN+ObWlVe6t1FvWhjgjVZg4UhvpskrRIBNWyknGDVjdXgZqNfqV6oZ4oLiZFwKAo7SSWF0SGAIsCtp+D486vPqdRI6owRElkVg0l0tZtVOMJJggYP3vxQnm1rdQaaPmKNK9SVvatgck2LJz+v6XOM+aC/5h6jrzq52Gitr2ilwrLYCgAGq4z34+QKOt6miqF0SFhGWG1hd7XNDnNgVnN/egS6nD16WWVlSYhI3F0WKEKKUm9wy4HPYfOI/wDDOvSR/wABJNpUjcVO02ZMAbhdkKATii3fxcmyVTreo+ksf5KIqtM3BBwLAPcEgkZrJuvdUnTNX1B+s9OSbRr6X5rTlyFvBnX545vdyDXGfBSPy75jnAVGbZvLKpFk9lN7hkghs19Ixknxb0flfr2n6l0+fUljGmqQkFSAV3redxxtN5/pF85uY09nSXUyjqsj+nvVySfZ9dEAkULyrLijlCMYPgeuq6i82pKBlZo7RGRpNrUcjkkDaOwvf39t9a1NTHJqpCrI0qgKSTW5ygHt22T7eLxRBGL8CNZHINRqX3xM8m8qmxaUspJ7WTmtxAPtOMUOeY9gG8wtqpPL6QyxNNAuojVCrb2VgWprBK2OfmgoyM+BPmTpvT9VqunCp8hyAV3MGJwLqr9oscUSTkUC0un1R0K+lLFKpAYpdNt3G+3Oc2RyO1Hxc10Wsl1WlMsLLI7bQyMgsk7hVGgKIHOL8ab1qAtSeWdFq/OIf0w/qQRqhNputRS3VAAH5qrxXH7y35W0S+d52/LiJ5OQQoXMTIcZJOGFe3vx2cvR1MvmKJ3eUB0QqxCg7OCdt0AWDdzzee8eh00g8ytqfUJcR+5gFWv4IFDhasY5BoE2M+Dyo06k8u6UIZo1t9m9drqzHBq/aBl6o8nJAx47n6Dp09dRCFTawFxqAFG9ReOMR3+oNVRBxkLMdOJrVm2FaU0Lku6s39ucG+WI/EtQ1AlKepExAKg0FaybBA7c1XySNvjLy7MG/wAGgiklZoktJbAYJahWsDbXxs9tEUVx7jtVl6Zof+LZ4fzUas0MSsKDEH2++7oKQCftS3g340FI5lKlZFsS+mD6YBBo2d2fl8gn7nDeFnUOw8xzPJpWlYxRepIEZ12gA7gwGRzRJsXzY8VhkCX0roOnk1PVGj1EVyJP7e1EEnk4vIA+1jnFLQeUIm8oalFad1lRlC2TtYqwF1ZJwcG+TYHh86RG0b61lhF7WUh9MWO+iFHByeKJ4sG/FjpumnPQtXGoVUZSp3RtYO1iDeAxtRtNmj/rfmWg7yL5a0f/AA+iRJgyHbuZQ24otAgA4tV9t/exTEmIugaaGSNolYrg4pwoJW81dZkIahYGDz4L+VtC0HTQGIWpt4Wlr+TsTY7/AB/fb4ubN3pqZCxpIlb24sA3wRWL/cXgA+Iz2bPo9NrdNFqZU1AjdlIrY2aK7gc45N8AUOTzF5V0fV5dJrll6nCQ8nuVo5KWi1YOTQuwONv+W1btRo9scg3K4thRXvu/U/IHc/oaqHpOj/JjUgGJR6hLAgJZIYnHyKXA/Wga8Hl0HCw6xV9OXqsUgEu5/UaQlm2VkgCxV2bFECznxbaOC0aXU6dtotyYnW2Bl91gjbW5mr5OKxUewMkiNL9RIJYN2Uijn5CE/oRVCvHZhRlFSXRrIrFncTihhjdg5B/TxNoWZtNppJw6BCgAGwKAGH8v9wa5/SgT4g6loZJdXGpYktGe1W5pQQDXevk3Ski1IuRRsqgpO6imG9qIH1VZo5BHzfybrxz1KLfKgWXYHjKqgVSD7gu2iME76s3yTYyCthTbSsOpswqvXVvbZqxkigMhmcgkZAJ7EGrDopYxrVeGFSN+FA2gKyFqNXQ7cCr+bJWSKRupoTOxdvaqlRhTu2gErz7nxZ5A/WtDppfU1LRSt6g3PRCqL3A4sc7lbJGNx7UXqAU8haHUCeeLKxiVQ1MLolrsg1t9rfPBwOx38kb1PrIlrEzlS1gCmr7nsQT8VRsWI8ixUdSVmH8P316ZUBtpJBI+QLx7gBfI8NPpEajUxfmtwVPTZVRQSWLccLgHd9lLCyM+Ms7ZRoGi0CmDUAwRK6qWIsKVIY8jm73HgdjeRYrqnSNGOiSudLCUKlUFAMCFsKOKsnt3b/MLYYQ5il2yAqTJ7lFAHYbrmgQ0dCjk8DN1epMU8uMZDGU9J+HK70sEr2xyTzVYo2fBMqdZgNCia/VLp9OSWJICKR7rwBt4u6HayOBnxTjmlii1CohB9OwALoWO2P7GuRV4pi1CgszqwLUTuO1iWsGzdivaOfueK8CpVkQ6lArxgq1rRO0bhd1gEX96oih26KlUPWNZD0+Mwxxhg5dCEIY2gHbN0PucbiCwrw7eVuov1bp2n0zkB1dZQCNu9lJ918E/J5O41dEFJYyfknRAgzxYsmuKLcV+wx4aPJRb1oYtixqhYgot78qxGTiqU4omh3Pg1Avz9MZNZ6caxsPeqh7oCvaeKAO0A44bvuwI0uilPTnjaNTboSDtyCzqORzfz8jAqgzaxJPzkgExaTYSfap91LwSovAT+xz8B4tNIujlMMrMq1QYLlSTgY/pYfBNAYJpVfZjvkXR6humMpYGIFxtD0pAUEbqNd14vkZ8GtHpnSOQslyKQu2xe4kACh3u+bu8DBIoeSIb6exXUrQcorMmCCwB+xANcYs0cE+DUAHpT1qQyeoqgFRVqFJJwAQCApoZpccA4+VmQ05n00cvTZN0Ue0AWARgEVx+lDtzWawreaOlaVNAJH0sO8sNhC0RRA+BgAccUK4U02x7m6dtu19M0aHG4YxfcN+3fignnNtvSRvZB9FlZCDyaOK4xX681jxpnldbDLdNpY1h1KwaY7A17VXgZsGuMAnPZT+njiPVPDo5DsOHVjQJvB7jv9+RXHNlFWyxjTecMqIFNnNjO6r3NX7cHxRl3pppUJJG5S1ZVvq7k1kj738/N3RJNX1vWwaeH0gkZRWUtGtUC1k44F/+UcYBJ8NvT+vyz9O2ptBCiovTIr22CovFsFXGf/xDwlTeq+mVVVWXd/UTuFi7zf8A138E+n6mWMRRtCsYdFRWolWIYjFtXLN8DkcE+FlJTaLodV+Yh2MwYKzJtq6UN+tiwb7Xf7eJeq9Nhm1aI0ERLqALG4e6geBkHihyMAm/Cz0TUzS63Tx6YMJZJ4zGrx99xPJvgEZI5BNZvw4hHfX6Zl2lSrUDf0FmPFEDDffBz38RcrrRM2849O0i6twNPEMrdBSN1txmryMj5HyN1fURuIIXETC1ByCCTQ+cEnDYOdwz4O+bjv6mAzKSEQmpCV4NDLCgpsd+/HioNK50yKEO32lvaoyABgAZuge/B758a8foFybXamDqcbpEppY2G9CRYog5+4Hx8DBNS9F8wa2Hq5SWItGAxjRQcnJsHsckbhkWRQABNnq0Mgljfbu9i1uBHYH5yD/1VYo6f8xH1QTLAkjqwIUE5ayKG0/O3PP6jwWQzqesamXUJMkschBWpVUqSCy+43m/c/ORs77SCxavQyfmog60WUDLAkuVP6nk8AWcYz4zzp+tX01jZTtUKlICDS8fzXW1KFcWPhfGp6iNhqIlfVqjO5JuPhVDBiaGK7gnbTkYAHjmyniNA8eijPUmCwRbfVpTdWLYWDm/5s22TXuJzqHjO5g51c5Q7meNiYyq7hubg55DMgs198gp40Tx6H/j/wCb9v8AtOb51g0esZy/qNuwQTY22LFX96z9v08cRvqgZoEZyA+7Eu3K3VmweQOCO1CwKc9Fpelxb1SOcbSBV4JAHF/buAfvZvwq9eXp8OvDRlwfTJ99sAQAcisiicckjPN+OSZbVpSl0fUJSNjzbb3qomAC8GwobFE88X+o8V5Ol9SaZjbEIfcWlAHHGDgVn5/bm+aSAAxgyLFgBd/vG5SLHFhfk/oBRWzDLB+Yk07+lSynbiiwIfgWefZwAQaBBNeH5XQnZZ/4f6g0EjvqdWoXeMy+0Gm/6waHzg1VOhlXpsusPVOpR1tIaPXSKACDZJBHx35HOb8NXUvyK6OW5UW7aIqckr6qgnsRYQWPsSRi1UNpz5aMhYfRG6Fm3EJsY2PntZxkiub8XjbrexpV1I1un6dopj1nzBFJLOEY/wCN6tKwLv8Ai1jJrmuTXifWpqkl0ix9b6/uLLv39Z1ZFhATzKe+3jNE0BRIq6toodH01o4QjGZVIbkC7I7Z3LR/UnbYF3OomL87pIhua2UtQBJIjN45sZBr+/NX5ZfmVMgeaeV4Y9ZK0R3oN8zsxRVG0kmzXfmxi+AfEUvS2kjkJ1UdMDu/iGye4OLu/wDb9PDN0bSpP1M+owZGmLH2iiLNGwMkAk2Mc0fB7W9DVNNuUPewCuSTuX9fiuDwO1ALwyvY2zlemazSOZV18Sylvegc3zkZr5GMZF9j4u6yXWSaXSzzGB9i7Tm1rdhh9vaOB2yTkeL/AJmWXS+X9dMummM0UJdVELCtqIDQ4r2m6xjti8zj8z6r/hqp4VZS0bOWio2GZTdYHI57njJHiJjaD+Z4hq4dXPISre0FZThgi8f0m3a8/wBWcm4tNNpoerCQSMVZAS5l9x/hr7sHP1X2ojm+U2brBk0vTCYdLZ1KsGki91sF/Ubv5u/cZvBLWzK3U9Lu02lEi5jG0HIA7cZwSbu+3xNx0bRdRpSI7fVTOA7DEgs4JBGcEZIPzntjiTTyJHv9V7BsbDgMLYkAnB2lhkE0RV7ctWu6eq6CHZo9NGVlKCwQaJFZIA5JH6fcGpZejwrp9M8elh2F12lQ39Nix3FgUfmuSSfGNyGidJpdkjK0khF7idwJweLBNmr4PKkjhdojUz6iHrzH8oZEDhGkkcMxU/Xm6NEnHGR40XW9I08XUPTXSwKiR+2o2Ju1AFVRNkYrhj85zb8Veqx9B63otOq7W1Eh9NUDKUVaztIvlr4q7z4vC7uoHOjl1Mes1L+k8c3vb1N1En3Mp9wHz8AUOxNH9Ehi0M0A1E0ZUSBlVRwqsO10Mc/F8nlXfzVp5uqRxLplV5I19oe8kE0DWDgmz2u+12dF1eHU9V6hWjJAa7MpJ4YXj4AN3yBznxpcbsG3y5I5hmjGsmBQkgCXBAKji6HY4sZ75Hgg6j1t66p3AbduZ9wrDWSD2BBBPI3ZG4EhfIEsM+u1MaxC1Bbaw3EGx8Enucc/p4P64aNdcUl2bgy37Sby3yP9x+h4Izu9hUaNy/pepqGJVbtkYvgVYJIJIKCji80VLeOYQFKgTTe8hAySWLvF5JyGU0fkXYLHxO0ugaYMWX1EBLboXZVrjFYrNC+5zk7qks2nMD4AJUjasMh2g4HbtVVx7RgCtoFPRbZIFUl9xAUAttslkYKSbNDdHRIOA3bafEi/lJNGVTVOXJHtL0foJJ+QKxm6217tu3wK0vU+mg6h9xEZYsu1aBW92fb3ZKrigaA79jquhOiMbyzIA0ey4qYBVCEg0bNe4G8Vf6vVA3LJoQo1KaxAN7KpWZWUi2bu1/Uyk/FrYGa71iwOqCRl3iPALBwrZClSSN30nmhk3WdwSfzBopNBHKwdX27SBpzuTD428EZwMYvJujN/xF01tk14CFbILAj4JIyO14b3Gru/C1QKTpoV1yO0sSENeZdpH8TjOasknHLHntCkeiUzXqgDl1dpQdqb94Jtu5IrORZBskeK6+YdAJiyy7Vc3gNz7RggfKkVZ+e9eIh1jQFZoCyoHDIqmNgADtXivtdZrjgeDsGryYuijfUvJqJFlBIKmYMThqwTzZ7VZLEEAeGbXJCJZ9uplZ/SiffYpT6tk3i+QRVBjnmj4S/KPW9Dt1UJc+pOhBLAihtl5sDksrHnm8ADw0y9U0k2omdXkVGkUBkBBUCViSMX898DPwPEZbOV6iOGlheSVnYzK9t7QKsAkAE3uN1m6BA4NXqJI6Eojkl3iFnZRaknco7G7Br+3baPHRkiVk1JUbWlb2lCUohQCKAYC7r+mhiyLp9QmhPSRAJWbdFtFKQLYJ2Avgc18/F+JmxSdrI90mwlQdyjaW4BjUGhXfgGgLHC14HTiUeqTKzqUbd7gAAVFcHAK7QDgZC4zRudFaEhSfVSpEG1ssNxX+QVd33Hbgiq0+mq3QoylGUfwyLWxgZF2QbNCxu5sgdG/wA0gs0OskCgyvQUEhixr28HHtwp+3NmrIKeRzOOrLHqA1hMHK7WDrgriuW5yKwC2PHb9N3IUyb9je0Nn5FkHAx8khQeQE58uwjpHWZJpmKKYj7CMHKkZrtRz8nnxUspmTVfkU1at+YRLUGxPtNFTXe8DA4P6ckdpItMsOxdQVmVkDfxArXRVVycN9RrtuAyAPE2q61oPchlJR7IBRjuvcQO12GArPFdr8D4ur6JoDGZQGsEe1rWiXH8vuPIvPzz4i72Rx8kjRR6AuuoaNiwBAlFKfZ/mJGB+wAvmiZeNEnkjh1E+8amMby2w0YyKPe7BxRocDkeAnlDqmi/KiFcH1lc+34MVcgcbSBz+tnwQXX6VlVtzBC4YGiFAEQAU4ujgHn4zd+M85dqlWYC35EjfIx9Lcc0pIaqFc0BYwRj+w3zmhPSmSNndVijGzgG7o1mhXyDzm7IMqzwQoWYkepE171JIJYkZAHurNm7sjgHxU81zxNopIPUYMu3b7DXtLE4qqz3HxxZBr4KkXVx1qpC8qWJJSzM/YSEg0br3djyCc5rxR1A1CpJGZJZHsX7rO7cT2Js3uNd6Jz3M6gIWUo4Vo2ohtwCqQqsCdg4A7j/AFBBqy6ZjuSlKyBdw2MhqzigSQoBHbnb7Tgm9kFaqDWyM7BzJssjcGYMSQea/qbjHbuRcEU2oi16AuWAqypyaYcdhQA7cn4Hg1J05pUwu/ddkKuGHJuxgn9QPceQWIPW6X8v1CIzs9C9+Da++/0+AMdhx4qXZj/TtQF1ukBdlVZI6zQUCjjgA3fY3k/q+wdQSSeORp5SwRDasDW44H+/+nOPGftDp0TSSiWVd4PuMe0KwC4GDYvnJqj9/Dj0vo0T6yWWf1AkkMLKGBsqVWht2/O0Xnvg1mMtDQD5g6jHNqN41moDhUp0fgWpwSeBjvVjP0gCoJHTVLBFq9VGBdKJBwpx37HvnAH2o1/gXQnaeOaLUOPXGNgsgIQQcXkFRg96vjx1L0rov521TU7Nu4lkGSeT2UYo4r7c34JkNALid2cetqgyRr9Tla4YD79r/wDF4Ca2LVxNuaRgpJJLKVIs0e3P1fN//iActRoekxrKscU6HdQXaeSowbA+RxRGeMkK/XOnkxNIopVb3kAbSL5oWKN1wBVY9w8PHLYUOjauf03aZmRxe037Vcb/AJByCause44x43NvyjzaWRdTI6NqtgVCMj3ZH3sjjIBsVYA+bejSrBo9YuqkZdjHc4U2V3MSwGfgnn9u5+iD1LpyvCUkLKkrlgFYBhcu1Tg/1V85zd4nlnRxAokRFYzahz+XXYqMrE+7bg8ACzRs/bPt8NHkXUy6zytpNRNNNM7GS3mILNUjDJGO3bt4TtZqNCdKpEspZNOoUshtmLLiitg8jHYKoPbw1fhvpfyXkzQ6YgjYZeecyuc/BzxmuLPJ6PoLfxLv8k5lnTanXGXUOsS/w6kJ3J7SqlVYA2PufvwfCb17UzDWo6wsUAcszFKUgrRFkdyB3A3VkWQ56SfqgaeRTGA23eFVVyVIWtubGKA4IznAUOqy6ldeIpI0ECxvGxW9xsjAAsnhb9pwTg8eOSGHxIzRIhJMaxNkMMgWRYuvpVRWbKtixuF1TMJloStbbWSORlU3ZNCxX0sR8ijzhY49smnXeSUKBWMisx4pv1OJr+e3I8XN00jnfDK5JKlWYsV3bywAoi6YijZI2/YG7QFdd1Ag6c8jervmAAeQUG9q+77d8Z+ocbRSbFq1j8nOioSTGpI37aIVhWRX8x55+Dfh78zPKvSVZYIiwjAdiQxWwwObsUSRZvLHvwjRrrD5TjcwFQdOAWYVypGG57H+3BoDxeAD+puR0rpiIkhT1lLnBJULyPnAOar4vHi91eTfrNGrBgqvu3grtA2MLo8cE47WcGvA3Xw6qXQdGOI71SUWdRkC629z7vsTnv4tdZaWTqOhV/TjYujKjMgLe0j25AYnH0jdhuCADd9hpWkkl0vUjEkDKvrb1UA0aoAXXuBAOScbx+7X0vqRl0ogLiQtYwLLD20axj3A1+gvgBEj1OkM22EoDvY7gcLasN+W4F7iRYAPII9xTTaz+INhQ+3eENe0WCMA2aJRaBztYYoEqclxLT3ziWHQeqGOFAw0spUWFO70ibOLrIyeCF4wPGCjVyjyWHMTbnMKOQLyXOe2M1x3vnxtfm+SUeTusAflwkfT56Fiv+Qec5GVz2F2ayfntptYv4exyKu4qdMGLW2+yVyBgmwTiu/B8acf3S0qYZtQy9A6Ruj2xmU443URYFn9cihd48NPUwP8e6ZG3uBWQqpNgmga4P8Al/t38Z7qtVJF0Hy+6rQk1HpyIowL2k2OMA4PGBfYht63JAvmnpQkZmidXobt6hdqKD7rHPcVx2IBLyx9CPo/0BF0ZZINRMEIsA7WUgK4vFY3EqRdHccHBa9KiwR6aMyuVjL2Cqihk3eDg5ORz8glRmqfT/kgYdQQS5JQtWM8gEkE0PirJod7cq6dUhCSx+2Y0/qk2wF8hskbl5N4H1VZ8/4XEutUDqlIskgKpsKoi5FCr9tn3JWfiqoEYn/2idUkPXPLqSwWskkhVqA2hVQUCuKrF0uKxnOx6mZv8SDR+mxaMAL61bTv45x2+1WRQ5w3/tOaqdOv+VkC+p6mo1VD1CxoKKN0fdZ5x/NgceNeCbzLL0SNfrUPmjRxkG108N2csG3Hg0SD3FE3fc+DnQZvU8zdUjBZbHBGGUWCSfsKz9+2B4Tuoa+RfPWjjkVwvpwSK5Yq22mINjF4Juqsn7Ub8q6iSTzj5ghJdZ4VYArQJJsUfafi7onP/l8dlx9ojSPwchh1vmDXrI53tNMtqwDBt64+2SfjNZHbUn6DDJ1MI889BQ4scUEBOB9yOBdfIPjJvwGbTv5h6sJ5CZTJJTgILHqoL/l42k9wMAYOdiU6c6+TfqI3jCbgGlFGtpI/lBB7A9h2+ocnJj964pTdJ6TpzqGnL7QG2howw20o4Ao8m6FH5oncg+ZNXoIdK5aaeFvpdyK25VT+uf0+3e2Pzv1HSaXUaoSsAxbIMpJwO5Jv+rIHf9vGQdd1nSZIJA6yttXc/phSSC20jAIFbjf7V2p8ePlexVXTajSn15U6o4VAbtaq2XN5NWewz4/aWfTDpLSDXEKhUAqhAFDNjntd4IAvkHwrdFn6Yel6iRUZxb4BrG8btuDR5/1+aMwm6cvl12K2fUjbKgfpVDg8H4NHPHjouJH6JmTTrGkuSoUYqwDxzY7ffHiHUavXw6ONn0+0HbwaAJBs2GyASPizY54Grq4l6do6U0WRVYksGYOQe1/SpP2uhi/B3rmn1Z00Pp5ZxHe0X3u6q/6T/ri/EWBSl12pCxt+WYM7FveFNZPtIZxbfuRxgC6lOs1P5hIhCzexc2ooGrsX2zdXV/uaWobqkcMBpluw44PJABoVY3LVd+R8TE9SPVYQACihLCMfad1ftg/qDkXnxWjHfK+s1S+YY4UhwbXJC37T3B+3J+bo7SDpWhjEsUAmHpiRmZQaUAEmrxamwBkfvWRlfl9Oqp12M0QFum217hY73XLVg3jG6x40qGdo5tOjP6IGRsxtIGDasawGrB4NdvHPyTvQMP5WFtAoaXe7wKQVjQcMpObAO22scYu7U1e1em3pNFHp5pChEasu1Ur+GcZ9uAP98VivoX0UnV09SZ2JvdvdiGoEnJIv3AHAIJyKsjxxF1HUbZZ4fSdWIDM+0gsVATLEH2kNePm+9YbpwM1YIhnI6aEXeVVo2AprNUt3Xasci+MQMk40UMp0HpqwUoWYFqoGzTZFfc1Y7FSLJ/xpunszoArgbiIaVm2myLF8b80f7+PWPWD0/Ts0aslK6t6IKmjmhnNg8/JuwTdlXExlX8uqaZFsqy7pFNnkAkEWp33+gGe3gP5t9TS6TUL+WkMkMBO1Nu6wt5ofYnNG8fNMMz9Y9XThmQOrKUJRbLWaJPejfOLJ3UeV/wA/T68dK1bmIyyHSPHSkMTjJBNiydxuqvsfDxvYZtqOoznYnoNe0EkBTuxeAX7Xmyc9/nrTanUP1BomhNb6MntorRzV3V8HHH7AU8nVRqIEK2rom4ZrdizX/lbg1V8HmxoJOoN1l9xRkY+1gx2k7ft/m+PuP165CjQ/JE2oOokHonaEJKir7EjB5/67+G6XT+1FlYLIkVgmlUGrxjOLwavvk5Vfw/XWvKzOGIK0LUDcDVjPfGQOM5rhwd2j6nHcxjI4KsV759wJrkduD+tTy49BbfQ6dpxH6xdvUj3MIlGKYbuc37eR/MCL3Z76jpfWhLJo5XYyG/U27DtL2MEnvx8fr4j0M2iE2pk9RmKwsyq7sMgALVm7pjxnNWceOdRrtZ+QnOmMBMnqCORwteoSTu/QjaOO4GcXy7vpUL+pXZ071G6Y6KSdpV13Y+oH3GjmvjB5PifVQyxSxifp4jJNlSQDt4JI3YvAs/BBNhrm146wuh3BfTQ2yBogtCx+4GEGOcix2m1P+Mb4F9MjIZCYhmwQNtCgcgY4AGLA8BVWn007auKAaUeptIA3gknaAcjk+2wPk96vwveZ4CszehpS8iSKqKrR93AF1S/0qOLz2Fltkfq7a5KeFZNh2FVQUCoN7h9u/wDlNeF/zXN1Azs8UUReSRXG4+1aawPq4wB+nh43d0ArUSyfl9EPSYD0g5ISN1b2A2bOaAfGLIrsCNF6Mpi0q6giRmZNMr+5WYmlBO6+zCjwMH4xnpl1S6XSlzG8ez6vUsbAgok/cK9YPtsd8Pum1SR9B6eWkjkmkRWmIk3BirLgfbFi+w+58PL0cR9Rl1OlZSvT3dSyBBJQYFYwKw2Lod+w/pxA2p1j9TdYtA7y+mQw3Bk5F8N3wRX7e6vHWu1HVdRrI4dkbMqsJhGily9qbxfY1+3zfj1f8YPUCWUPIVa1EYBYgksBijZLCxd8ccrH0KCdUm1L+siwUFUj+GwOKokdjd2Kxnt2A9S97u0qKW3CQpQP84BXIwLLC/8AOt/zeGjUxdTkM3qxKwb3NujGbFG7GTgnGeTzfgHJp5nkdpIgwMjZUqCXYEN9s54PcUGoAPG6qWetooYU1isjbXDLKEu2+on7/wAxA7fFivGrGONoxukYn1G7lT/e6/6FdvCR1GBYtQzPGKzgMq7rvP8AuM8GskHw6QtEYwoBZ/UdTe07juPYWDwfv/r4rPsINXBF+WVd5iYIoD7QNlEXkClGee1X/LXjU/KsRg6BpYiCCoYEEAV7jigcVx8/IBx4yLqcsEnQZCPU9Mxx/TkkGj8VeOP0wRg7R04Qroo104AiWwoBsYPjp+i/1P2/wWXpnenCyLLeshDMrEEoacsvuJIyQCFOARZ/cqXW/TM8sU2pg9P03GwR+5lxVXg0QFusbRn6qY9FNs1AYxswogj70e/aub7dj8Uep16byMjUEYUtCztv54xxxiz8jix9qC9J02OXp0gXa5KiMDZuL5uueCpA5IvbRXaLIjRYEilnDuSpUbgwIYAYs53sbojJHAHi50WCEdPcGH0iN2+PbYqyDQrPtqgRgADPglqtLE8MBLqGLbKYihxRJJvH3od+3jWzc2Wyz5hXUJ0wJC6AFWyxq7UgnLe7G/5/0JCkNFIvlgq8cC7kjYhgR2lHBH+gxX9/GheZtKzaKJY9TKkbRm3VvpX3KWAI4vIBr22Tn6VgaVR0UC5TcSAogUhcMR80KO4ncTbKRXtHhY5GUupdM0J6XoRMI1HqMQzIvchaIKYGM819s1X8wdJ6HMYCYpA6kKXEQJY7BnAxjsaoKMkWCwdVGnOm0wfp1ybnFent3n2gg0AaLbgQOLoVVAf1/UdKaQCXoiyRZCkJI4KnhrYYFEdjduPuukyA8W0UZ08kUcqoh3RBnIGAtKAbo7QDz8EZIHgwumjGpihjaQgxbUIHG0j3Ac4FCzkFVvcdt09I7voenyfk4obRWaO6G3cuwL7v6VsZOVquaNlFTUwxpHir+aIAFnN8ULq+fEXIAnnXTxt5L8wRpSKem6kja1qP4JRaocAL8WDj58fMUyzw/hem+QKytp6AU09s2fqocDkd+3j6x82Q6b/hjzFGokb/ALjqNoAJLfw3skkdq4xjFCyR8wdT08J/C4I25LbSne4wRv71dgUcj+o3dDxtwXpND+p6rb5d8so20MNYAwZT9NJRDDnO7PPzXho6917p8Xmzy8ztujp96iM+wn0yP1uq+DQyeAkeZtDC/lry4N1MNSosF7cbVJxXNd/7jIqz500mlPmXoridkZVJJLn6ikZwQCOSf7+OnxlsKV9fajzH0STpEQbU12VhCyi6o/y0cAWecDuGu/qvMfSSsN6ipC3vV0a1zZU2P6gxosB7TisnLJ4tLGh9Kd8ubFsNwyO6jND5Bz83VojSOYV/OEsZBTF6pKoEkgBapRwRzyBnzrxxcrSNT17px1xb8z7dq7SsLg3Yc/BJ5PJIx3yMR/7TPUJNV1nyfJo5mmRdZqhMI4miCMUiI/XA5r+rtZ8Ne2I62WSLVsQVBY+oyMTaXftPcni6vOAAyJ+LsMTdT6AYpkpNdOpst7f4aAYP6VRsgCjfPjXhwkzlK1nfW9TOnn/SK7hl/KQMQpsKPTbDAAV/1yLIPeU9ZAPxB8x+rLHsWQ7X9YbW5733CnuP9B4D+ZtKv/1C0MkTkRjRw+3eAco5/UnAyMWPggeKvQ9NIv4geYlOscR7GZfcrFQFJ4HwABfwRxfjrmrihrX4CeY+lafzV1uDUOg26iZWqMyIymTNAD7kUKuu1Ctog8x9JbrDsupl3sLfDghiQQeABbbR8WcEA4+VPwP0mmHmnrqSaksWeXG9jdSqFugboEjFZA7+NhhMA1bBdW4BB2tuPGMGhfFi6z9hZPLzYfcvYx5063oZNU35ZBMnqexhE9HFrQ2gZ/b6snuc6671CA9OfboIzIAAoaJ8ENQq1/XHGOLx40zTBVjf0tHBqBW9dyg7qrBNbubAxyVofFTrMuoaFoYOiaTaSo3JGGOwkJ8diRjsGWqGfCwslNhXlvX6PU9C1BSBEVndaVW2gbxisA3V3R4GAQfHs+vgTymZDp0RWeI0UO2tpPdcdq2gd+ePDz5e0mpj6Lq5JOjaJdR/EHpqACTvuuBycdv35EOt6aJPKTRRaDTB39OlShvwL3UB8nm+D9/G9yhAup1CL0HR2oAEoZyBRB3SUd37cH9eAfGh6zSy6ro+jP8A9wxICGTn3U3axdXgdzg7rIfrPTNIegaXbLFGQQ20BSi2/ewBnuOeMm68O3T9PFD0nSiKlVVQDcAvCr7eTZwmTztGTu8ZZZAka3perMcHpzQrW/3AVWX7g9g3B4+/cj0/p2obrkLGXTlDGhZRYoE7s5NXk9+KwMeDfUvTVdPIQzVC1MUOaBIxuGeD/lu82APZpGg61HvWVqRRGGJJY84F4JYmwvctzWTHPvs17TeXHef1ImjJYEZu6rFnPFV+4+BVtmfTThnZRtYAUDeBtC1nFs44xXGK8WOi9TEuvKXuuyWqhdNm+wJIo8gEY8R9TUSpKAGJ9JyKv+WiSB9iifB91A+00ckxqYuabrXT4JSPUU+2lAUtRYkKSoFkVuP6kZPPjibzJoZPXl/xGmktmX0CSbNmyBnITHHNd/C/q9OV1MofCo3DMw2pvIBFoe2/j74xRpydO0pcqzuKJDHJK552sLr7XyCDwSMfGGd9JrIT0kqvUtIodoxSQOAbD1g3XwKujd/SR4sJqIm0cFa9JFkO+vyxSq4FC2sqBeCARZurCV0oQt05kXVOdtKyK5IVWjc19OBRazWCDnA8FtC8b9PjQO0m30lYK5NE7FrjAvdXGciyMK4mbNU0bTQg66B12gMw05XZdh2r/WzXYCh4X/PSE9M1QTVxOX0zAkxFibQgGm7n6fq2nf8AVdDxeEpYRk7ztAo8bRf60KBOOcd/HPWZg2hY+kyhIKIFBvpu6FfF0PnnuYnsMabpmtSbTsNRpwIolthwT7CTYOfoGTxf9rGk6bq063qQ0sRiJyENcKVAu6xj9dwyTXhon2/noWCzK3oQkMiFjdoAQdwBIGL+RXyWiFxdbnYoVk/l5YBQpz8lApJ7igPnx0zLQXvJLaqGaRS8Ul+40CLpu9k5N1RrIPc5aNR1FPVEs0i7TeaJ9pzeL7KpvvY7NhZ8t7G1WpQIRUTKN4JoErQ+SaVjVe6vjwRmX12OHJLRsKbdVt2v/wAbjg/TZwRZcvilJsU03X9Do3dhNUqAUVTdsIG4kgCgcDOKo8+IJ+vaBtM8SdQQEkrtbTsVGPaT/V9T/evt4XBp95VZCcsqWN7MpK4UAru59P57djinPo9IIWk3kAKWB3Xkds55AN/cHFqDl4yHs+za2H/D4lPUoNm9/akDNjavGck8jsRVG2B8WWnBaBTroXNCQ1pm2217htFmgSavFkgAXfhI2xP0ptmqkkFSK3uJW19PbmsDCkcXYHz4NwyRu8LJulAmYYLPVbz/AHrb/wCWxVGzOWIM2qMTa5/+/oyEbRIsJXaAAQBfBLChm+c+AHmclNQwGr0q3IDZjat27HNVnse6VkbiLjyMzgEuxAotzeKrmiTQ4P7AWT71dvXaRhCyAEEgV7KN/Io1jBFUOK8TjPkBCSH09O41umsbUj2q1KTtoA3ZIYAgmzRbBqvBF/MOij6bBCuqCBFDW8TMC4A9xsEkW3Bv7k+KunVjGgZGsAEjbWT6bbWye4+1WK48CNfo4NlPIqqpG1gWVQCMMTtAGd12Sfqxgnxv49Fsbh6rpdTrysXUIWVFIuWFwduAosZFCrFdrsAWGBdQj9SkvqUYO9jv/LGxWfkUb28YonimvMtPptNpdZGfWeA0dwyGUWARgX/MT2oX3sBug2R60s0rY3KLYggeoDVUMfVkk3x28KYga08iONSx1kURKlgDAT7hjaDVD4xYHFWMU49Km2RhqYxV49Nha7rDYzkk1f8Ap4raVtmonoOGLAMc01qObo9/twB2rxZ0c231D6bNcZ9zV7brJ/24F8cGjlTLWu2HV7DqdNYjIK7TZFMAaujYs39zRPtPgppXUyFc7fUeqDDJZvnNGj/bHiPqQYSq5jYKVbdYFKArWW93yR3xdYBI8SaSQI7s6mhIzemcAbia/wBQosHv/lsVvcGlbXTJ/wAOMXiibdDFS7WoWVIwavOav9fGteTtUmt8t6XVR3sl3sLTbje3bxmGqKR6IQlt17QjMubBZT9uBZ/v2xoX4ZBR5G6dt+JN32b1G3Dgd77f358df0X8d/ROTO9JLK7H00QPuJ27jkmh8A/VjNkURWMWdcjx6YzEKV9Mui+pXzVlhRoqTfHIzV+AG5gsRB2qfUreAuFcKPqrhqBvPuXuxtrRAvTYmWQSIEJeNjSpYAyMEduwFV+3Heqqh/TdWq6cIyRR2SQEICn3c4ulzdZrd9ROfBV9QZIFQnKhb4FE84ySARz9qza+A+6VtK80aLvXdX8LdyW7AjJz7bsE5OT4p9Tn6wiwGORy5KttZQ22gvtJBGPrsjsMY3HwdjY55ijh1OlCl29gaMqHGQPpJbgc8gkAA/y0AMTSRqhRXcixuIAoHdvvNd2DZvAPcnws+atZ5kVo/wDvMrF5NxJCggjJyCLoH/8AEOSB4XV6h5kSRjHrJ1KyM9LZwS5ArcCSTtPI5F0bu5x9ey20JRrNPpjEummUiX2AzFgFBUDOSbz2GLvN+Kes1nVYlEi9MlKi3pqNBSMEf1fSbIBok1xSanVPNaxzLBrJgKctta1AJwD7gP3x9S3RNCL/ABHzURjqOo22oBCkFieDl+Td4739izmNlM+9Pn1jdO6cDFHC2yNWRSzWaTHwDngn45Fgm9FO006uis7Dcx9O7agcg1QAO2scDwP6VPq5fLXRXmBE8mjheQslWwRRIxqjyD2sHkHJ8d6yOc6hIEmeMOr2DIu4NtwQKyw3cHAAJ/p8Rn7DvzWA/lLrsnpo+3pcpPIA/h0bsY5PNCzg4Xx84dWjjP4dPFOsey4wTjNSXYBOTSkAmrrkmx42vrkWskh6vGutddsDgIJvefa7Ioxdla/X6s0QMp1sBXyWV9EKhSJgqKKX31uA5GNn+/N3tw9RNhI6+mibofQo5oI3K6oWwRHIO1PtkDtxeT8eJfNr9OPmDo4aCMvtfJAI+hDVFbyb5seC/mGFh0bo27TKVOpLJ/Db2kHn9KrP2IrxH5l9MdY6O0eiDhUdv+UaOELVVA+7cO4xjtXT5bsJqM0+iMdLpzuF2AoAFA3ihk4yTm/lh4tHW6H2A6VMEFiUWuAGNbbBsNm+/fvSaaRKhl06KytRPpGyRg2f/L/v9ibUU7bYidFe3ccQkbxQLc0OCT2rPG3HKtagn0B1JLQsADS1EpsWGGdtiq+f5vtXhS/ER9NN1LobwRsrR6pzjFrQr3AjbktkluVF4vwzwzbGA/IK3INxPRp7vJ+nkfHP7gfNtT6vo8TQPERqGdQC4amVc0TXw1/YXjAML2VIXmzSx/8AHOklI2MNMincCK+oXQo1lQcA2VwBV1OmQaL/AI56+xEgDM+6N5GJOCapjR+5vN/p4P8AXtPBJ5p0ZkgQOdPDvAUqALI45rt+gr4JGaCHRL5t616kCRlbaVDJ7QyqTWKxePuDfx46d6iY7/CI9Oi8ydYIQTD1JtzNH7j717kNwcg8AgHt40+HUaX80a097wfa6jLUBu4+ar4qufGdfhoix9b6uNNo1aL1pSW2E2PVAsnHd8YA47m/Ggxat2mZvQUMWBKiI8nIofr2r4xnOXLd1Y/p9V1B9YY9EqBChcJHCjtVAj45NC/mqvB8U9fN5sl1Jg/hEMaMPo4d73f+YYDYBNVZANmqwin6wiSS+lv4DE9wBnPA7/3/AFrJ08T9dEA6lFHIYySnrMq4DE2ASCK5O2vbjg+Mpj2EfQ9L109M1K+pp5J5PVRgoDYDjJAJx9JwO4+/ibVaGeXoVSFROzKqDuDTDu2454NXdZwwJHp/RdMuklK6xJWVHcKZWYhQ2aDEcAmlIHb7EWholXpc0LSllQ7lolkICtZAvaR7JK3Vx8kbXb2FHqej0q9IinQiVldQxVtorcxFCroUp4zjA8GtKIk6TpZIdpMkaVRo7gR2/VO1cgdsRdSiWfQxRR6Rx/EH8RoQ20bmvJJOAeP6jV3Z8WOokL0vSrEVjVNoG7+QChyf/D2B7kXnxNJQ17ERQS/l/ap9NqOASCQAeA3u73VcCvH55SOracCKIl/SBCyEJtLhqBAFCqoGyoFcrQ41qSelA5RLMbbv4YAF2KyLNBSK+V4wC0sqyydb0zKktsqK1x9rAv2/+hwSFBxhQ3nl+U/45HgvamzY3ElWN1YBJPGB9/uy6wX6S7VuRwTZALEq4q9uck5AJpzxY8APLG89bqqUhmYkhRmyDkYBJOR/8+G3UI4lztarvbm77WScHt+nx4WVAHL+XGslEmjjCXRRaAZt0gutubUgj7lAMG/A+N+ltqHLwoBEPUJWFCw9qkH6QKy3Kg/OaCsCRsvUPUEQBaizBGonI78fTYyTz8g+BygDUSg9PC067QYncgemARQ5rCmu4UGy1+DGgtQ6nRrCq+kFKOoLgIeAbN7c5vB5x4K6eeGUB/RL+8xAsC/1Zrj3D3bcDiiQLpl6XVFdf6ZiTaSzJ7GAIDHAJF1yMk8fNeLui1SHUqCqrRALAXgCuWJxjIsYLCx2uyWEbtPOf4SrGNyAgEH7focUFyL57g5uzpqD0zUuYhIYoixHuIcDBxmjuJ5vgDOAFrQSh4JwNqoiOWwxC0BdnbwGezm6zeF8HOmK0nSupEsBKsElLQ9zFDuTGLssNpPF+26ByuJladymo08r6aLYyhQXJZLXaKBAyAFBNXYNfzGuzI69TnUL7qd2ZpsgiM3kABiDZuheBm9zeapZF1kbLTkoluI1O87g1gEAsTa/ruztsqvQ9Q9Z1LIrBSrO1gHb7CRnvxV/zUSbHi4Fryo9dQ1ContCHYA1Fciq+CeeO37A/LGn52KIRxBfdakbAcrgiuKBzj6ACceA3ktZDrZkZdihceoQtEkCsgdq70bP6BklVxIxoAUBkYvINknP2z3P28LK9gvXpfRcyaJACgIQ8KfTSwQEJsFa44D2MV4oyt01tPqmESB1DxqREhIYkgWQKz7SQv3OaJLGkVS6n/u5KOrMyBW99rZoms2xz3AGfaR4HyCop3bRqW3y5MTsCNx/pzROQR8mq2+DGgvQ63RboXjg2AMcAqtrjb7tvccnkEk/Hglo5YHSImIOrLtDuthgl5bGPp3WDtFH3Y9q5BO5n9JowSqjbaEWCPmqPOCLOfBHQaoPMzBEJG4j/MeckkmjjhrsKc14uyEbopZJH2LHUmzZ7rBuxz7bUk7rArj5GCHoyyQlyUVAdrW54IJBvgWBwBef1Phb0ZZtGwjohCoX2nkuQvK/C18bsd2Hhl8vx+r09vTlIJOxQte8WKqj7h9N0Sbr9srNdm/FJZNOisjFyAKYg0TyMAC7vPejg8ER1p9AkSySwL9QLMQrHLC7x8E8G+KPcM2jjMkbMKI3ADvnti81XHbHfwL64jjp0f8A3YzOCAKUk0XXGCLNi8VdfGBrPRE/WydP076YCAWFJZQiAWSOPb8BsmuxFXfgvoNVAQVRCN0m0IBXNjgD7/fgYNnwN8zOYoovS0yKVkcrtic7hRuiaDD9uACKvMOg1gbQhzGlMBYIYWcYrGPsex4GKrADmmnRNSXihFqxXbtrOCPcAcWVOLywF5993RO7KhiQGMYK7iLsnuOTtBPyb5+VwTgmHjcZMA4ySAQKHcE4q7vNnxdhcmWBmIIaONjSgGmsgUebS6ABNg1YAHjLLHZj2pinhlQn3HBwSMFdwJBF9xkfYjGPFfU2ullIQb0VwvqMGv2nN0AAb4+GP6AprIimnjdJfUVQFsH2oSSa+xu8Hvu5u/EOogkSJVsUVtdpBIBz96avtzz4iUA2tZAyIYCQ62ZQfcyESDkqM5XHFsB+uq+QDEfKOhMMaxIfUIVeB/Ea6wMeM010ZYqWjW0YjcEJKrWcDH8uc8Gski9S8n7v+G9JvXa1NY/8x8dn0V++/onL0+ZNb+cGljdZm9JMEF8Ef0/p8D7mjw3hx6J1DVy6ZFmZTIihiGmJVlIYFWz/AFDk0Mi/5bX5dLIURDNTh6oODtIYWBTf9Vnxf6d6wmEDapJFOnYU8jXGu0gA5AGLOeL70axym4owaiademtFLIrRe5GaZgp22UPJ74PDcEZwPAjqUsr6TRFtYgeKUUGKkrJ7cgC8qd4GNu0fpu6m1cTaYD87HEDAXGx9u5t5b6ma7tQODVng+BmrOmkGliXqAECOQrhroGvd89hj9sEV4nHEKnmFOoSGIproWMcajDBtuPpwTQqjYFGxVG/ABtLrRBLXUQCHa6ZaWwwAvjmuAMjvg+CnU9LpNUwWTrESFUGZWJ2iwKNGzjfkcj7gVXTR9NYymTzBo9MS7+99Qdy/XQBJxRYEdwaNV41k2lB+T1p9YDqS0HkJYlRS7hirr44qjfINiJtNq6DHqiqm4btz37eM1Rogi/tfF14Kw6LyeRs1PnPoUKfTtPVI12gkk59T+lto5wDwK8XDofIpjZj588uyuVFqOrJZzkf8w4IYj+5+3jSYUGnpG8eXugxO6h00enwCfcQFQkH9GI5+D8+POoSSfmYZJtQXCAFCqtkUQMhaPuUNVHg0KHu/dOl6XNoemto+t6DWrBHGnqRTRy/Sikm80fb845se6hepk0RMTvIHnCtZLbgpLcE4AyXybzWa4wuFmRotfGG1fUI4dVIrAPakMAzENg9yf1AxuF/zELLpNQ3lQRy6SGRnZW9RFC7iGYkg1yWGLoWO9YvbdBPqJAZ5N0khKOrAHbZBORijz9u/c2l6TqY+jbl1COdwVF9NSWYEBQpvP1HgDjt4fqCA/UOjpJ03pkjaPToomZtsbiiKBoWOxsWe4yRg+PfNHRoo9boJpI45I3VqJj+VWytmjRoWQcEG8YN6rRxDp+iYSRLTYVUJY7lBJokk1tUADmxjIv3rOn0JngjRoFO0h3Q3XtQEHJwK7sMsb+55dmOP0vTSM6LECd23EaUQy83WarFZsgChVw/4XE6ptjhT1HKp7MAkyDHzW5TzkJd4BNyddOwcn0WJ3HJAo/xOffz7j27nizt8b0Askh9I7CjJZ2EkWWsiiTYJr/L9Ptznb+QVhoIfWMyREYNenHv2klzyK/lYEUb2/BK0t+bdCkOs6YPyJlH5lj7GVQrBVwxU8EADbjlu9W2PDAHkVttiNiLe82aBybwCcleWsZag3mKCczaJtHKjFXO7e/uQ7QLFAmrB5Apr+fDxvYK+u6dBN5khKaCZika0ovDgWccg5OOTfArHWh8uQnzJ1KoArBmaJ5RW0USpJugSao4BsGz4Oy6PUp1nTxajYG2DaVla/bYFWDk7cYrI8WNHo5B1nUs7iN2DuhWU+0spYcA7qDLfH/vdyAL5G6Pp4up9QjOnjQ/xZAViVj7mujuAyDftoDBBxZLhL0qAkMNMpBkUDcgP1FWK4AwBYsgnLYA4r+XYNFH1bUsZoraR6WSQEn+KDkk5zWc5z9vBWT8ugXaYDS4+kgnaoWxuOCQuMdq/zTkClrulqvUt7AtsWOx6hVSQFB/TCk5HDceAPSuhQnzPu1A1iusW6/WYbQLFgMPkUbPxxkjQJ4NO8yFGQM0asSstURV8EV9YPA5ByTXgfBoohqlkwhKNe1gCDtO3BwPqUj7bckVamXQVYuldPgJhEU5Yhtw/MCzkCja3R+/Av4rxcSTSLpn9mokW9zF9U3u9rj6hnsOOQBdceOpQjaiRBta/ZhxXvwO9CxRB70ucHx6jwMzuFGSZKMnN2bur4J/UAfBpWhaDx6pFR4i2x6JkIJBz7j8WLwKwR2rx+6hpkk0I3hhcihrvH+U1+gBAPIBAvBhg/KGH090Jwqbm25+ujwRypPAHck58WdX+VfSByloHDAUGIBa2oZINNwObUEG68IKur0cWyKQq9XIj0gDZtiMC8bHrlSTQ9prxHNo1TqunaSRmkWOPcCLG7eFNGu9EgmzZ/QN7OuiGigYwR3tG1do9gNsKtbORV2MGyfdR6lXQnqENGFrEYDAAsN2RjsbC/OWHANPUvYd9B0cSdeQtM67EYltmwkUayOe2BRF/Y7XjU6FDqIfczKQsX0UAdrAhb4sggckG6F48JXQRooevQgemyncy+7adpBIXaOSaIz+p+rw+aiDSLqIA0JdSzbiHAYqu4Bb5qgvJAXaLI5OfJuUaUBCF6nK7yN9bOSF3EJvIJPznaP5ue/BiXRjfqgTRiJSzQFk1ntXa7of2BtPGsuoZkaIGSPdvBO0s1gmrsCmY1g+zNbtvjzTrGZdbJGzBfVzUiAEFvnAH81mxi+RfiZadZh1iMydXX0zHu9VjZ/k/iVRAJN5o1nGPkj5YJ4+oxsrEbmR13naVBoiyQM9rog7TVY8GuqFxqZDKxpXJBJBBCkAYuqyoqu2fpPijLpyuoj2+mtP9H0bfeAQKyTZPFE18ghd5ftSD6ddWv5hA7AgMu1H5UZvPGbrtd/sR8p6nXQtLpZS0oaQKyq5tiTtwDg0SvOcAE0S3iFIXQvcq0CwOyQHcVwRW4WCTyPHXTh6QZHn3QswDxtIVWQbsLzXfn/4Hir6Mz6rRKXjMDOPUhRY2Ubcg+0nFjLoKNmgTyL8cHSQjrGoqVwG9oBWyoMbGgKHHtAoE0v8AbvWDQxyxMyRkgC5NgUqoC8YxYYGieQB2Hj0poB1KRXEFDerbBzSklccYLji/a3wAsQLPk/RRf4pMpkKMUCbQlKWsDIBs8kWCBjveXT8mp6t6is5DlnViu00Cpwb/APCfbVgVYFkKXktNKvW207bGO0KTurfZUC1U1jcL+OF48N9aZdSsnpqCIWlLtIp95C0WI5ok5NXZA/p8ZZ7lORS6dpyWIaR13VZCWBvW1sGvubo/Tj+rxAsH/cJZyDYJVR2JFnN12F85472LsMMY1UmwxxrvXO8VtwSb3EcqoGaF/wAxBPivGijpM21mVWZloFQPpJGDVjK4zZAFcWt0MynXd1ESBkZVjJLIbsbSWyP0NY75HAFT0NTFrpImYbgGVtxK37SMXng8EX7uc+Ck5d9QhlAZ2IKqzbg5ax/UcGjRA73ncPFQ6c+ovpSxMGTBLbAAUasLR4AsY5sgggt0S/bEqET6x9DLGspDEgsN5oHgH54rN3Rx8kt5T6hq103oPI3uLqhEp3BiCQ2KsWDwMk4F0vgasbCC2kpCoIUMDak4sBvgH7f7nvQSTQQRr+bbaXX+GzsN5qjX7Yz/AO58O9w2gdI1w9U+o5Kutr7rAG9myb/pKjFjHwV8MGpA/wAMgaQsGtcMpGGFjmzwP2vI7nOdLrZUiSRyrYFbpGVnJQnBvJt24+RxgeHnTCEdC0hScOjRxbGBAJG0sWoi8FiO30n58ZZZXGEE+dNMsGmiQso4B3MOdp4yMZwarsLoblXRQSN05lT2iy1AEdlv5H8y9+2eR4cvPKyCCOJGdjv2uN4wNg+KIo2ScdyeDStojDJdyxLbA72rFrdWTQtRjIIrtRrTiooJ1SDVflUKsAolP8xUiwLNdsVj7YqgRR1h6gmo004lkNbaDMfdnFfPHGOxBoEFo1umR9KoWfTgh6UiXvtB+aGP0IrPbwE1emzGDM1bQSVbd7aOAQfjtX9vF0zNoNfNOkZkkbcr0xWW1K+xlOeKW1zjJ/z7WzpWmE/lbTO8jSNtd5AqkgkAg2bvlW5zyCSfGcwa3UrqGJ1Ymce/cZSw3BSQDZo5UD70KvF6T0SNB5XheSINKkbBRurYNzqD7rIalXPPtrmwebklk2NJddpWOp04UkhgAoFe5mLkAUKAv44vFi2Lv5c2/wCC6faxYUckUSdxvH/6/wBTyU/WxaeSRI1CKquITTAlVo3YJ7EsRj7USdqsvROo6DS9Lhi1fUNHDNbMyPMFK2xNZN9+T46vobrO7/Is/TEF6dFLLV7WYGrwRhSaxX814vm/FDqOlTTdQW3CJtP8oNEgk4+crn4rPjSIIdTCYgug06ptZgLAvbRoC84zz373fgJ5vh1cXsfp8fqIyMFO0YwVFVefcK5vvd+OeZbplt9JDLvdp3G0nPoNYT2kYs0o/fAxdeOZuiwO+xp802/dEc5ojJzwcfYk0B4swK8aEkUVmEgV3AAx88i7jbG2r5FWO1MsaLRCRtG6NcgVSDvA+ogEZ/pxtsVx4ruFOw2XoOiOokM8m4BT7pYLJ2jIzeazzx85IoQabpy6/UkBWEbPttLyULD72Cw+4vPIHht1cpt2WLLrSgOpBtZQdw4IFjnuG+oA2qaaZm6t1NhpzEwkl9ntGwGK+f3IPehQrHise/kwyCWNND1IpuDFWCKEIskrYqq5zRwLzR8deo//AA4EJfc0bMWyWvatkC6v+YDBNcjtXWWQdM6mEAUp6m1gcrXBvixzf3FEi18fppHPlNWWK/4DE4uxsAqibxXycHuc+L3/AFKmLTB36Zph6UgiEBKkMKw5JOQMe0qFx9OMmiROk00k7K6Sf8ygAVqyaqjRH2scDttIFHQxpLoIbjWo4mDkKQNoc8Y5ogZzdCqHgtbmeMb1YmSIgZyaFG7Ao7Ce3+gKxlvYiqOkaJ4/UePVH1AWX6eLAsAj3YYfbPPNcaSKJtPqtMk0+0AMVPuA2Bjdg5HzZIsjBsUR6WH0/wBJj2KCxw4C3sySEA/konvk5o3mME/UdP5i6tp/zChxqnFqzKPpZSDfGKxXwPsDHHZ3o7prY26dI7/mZPQUyZTdutkBrBokbv7j5JPfUuqB9NFq5IJY1J3WIT7twSv1FXiuO2c5/wBF6pq5ei625ZgypThHKkj2nm8nFX2oE5N+DK68/wDDOnnOokZQqhhfckA/3zdVxz38O4E1LpqrrumHWflJmLR5uE5ayVJs96HFfHxUkUCgPKkbhkYlW2GrHBvtdi80bN1uPgh+HskU3k2NG1kqkwudtlWFSM9ixZoA1nF1/Ng50+FH6RqF9eQNDGVc8rkYB5G36s/GcX45sstHCf8AlUjhiKQMApAG2AixyALOSRXPcoDZW/A3zBpdSsUDRSDSwxr7iE22P5TnmgLs4ANfrpGtgT8npT6k6gSXIylhVEE2dvI+/wDSR2PhH/GWebp3kqXqOnjcSINqqpLbLdN+Co43VQvIqrB8Vhluil7VfmBLDK2pDB41R6FlmCn7EbjZybOTjO3x5qJdJHqpC/pyfmVZhSEEncxPc1iiB9/1tC1vmbqcXSNNKxJj31grQtAausZzxQJB4NEi/XNY3VOnKdQArowFIBusMSL57iv6rN343uFBu6VPph11kSNSjOSUjS1Klzn54rjsOCc+D+pESKu+LaSpBJFWLvkEkYLGyCbW8ke5M6b1N182aaHUSbnZwdwQ/wD6QgnngkHFf+3h/wCqagJFHIlyBlNkS0cA4GAQRYwPvxV+MsuqA+YJsT+HRZ/peAkkgbQxW84YigBdquDt8cFUVqEe3hgskZIo/Nm8hjZ4O1zg2fEsupkUJH+RBWQKoG6gBjAG3I+wxZGMm4dRq5Flb1YZEBb2h52ofc+35799wI4FAUllH+JkGKi+xiNpxZUH4AG5pDY/mUHFUe9JONjsujMyiJm3IigA7ENV2A3HsQQQaJJIAazr6J1hkCRb049+73tZLfTggirrv2GPEcPmWH81I402mMaFqUYADAX22kbdvx9+9142g1RzKdG4bTTvEEZFbZuDE7rIG4G8984YFi1eJBqQ2kMjRtmW69pMbZNAg5vGTd7hyDXhU6f16doZok00ZBIRdrkHdtIIaxXJJyMEkkA34l0vmHXGFgdPGArFrEtr3Y8/f3EG6PBGPC8KDW+4bYjp5fU3liF5HvJbk/JUk5vtXaFZd00TLpZAwjSMEhTtBobsNVU7AV3u75C8PMc+xK0ygRgFAJF9q3iqBqtood880D47PXpzIk/5W1AAoy5yRnIzwp5+M2fBcaDP5fkQ9YRU0jCNwyBSq+yt/NtXCE5OaW6Avw8iVWl00i6FFk/NbjuW6A9QDjmqNG+VwKrxk/SevTafXiYafaWDKX3gkFlIY3Q7m8EcCz4fl6vPNMsiwbREzOG3BqZi/GCOSP8Ac8YjKWHKlZYYowyrGS2nW2dLCjeBZq7vIOccA/yiYvHes3q2xp1tnJDKu5b5rIsWP0u6PitE76rTBjpkCiMRIaO1WABJDVailOSbFk548cxSaqWL8yuldnkdTueT3Gtm0Amjzi/tzyTElHsl9TjLSyPlmUyi1GASBxxikYXzgDjAGT6ZD6fpxkb9ioWQ5utv0kXd5oXjjPhiOj1JkY/kt/qWzKHFHB3Z2A/IwcbTwR4gHTJXjdhG9Kx3OsuQC27tQGAMn4+wK7TLoi1JplmWQbi253AAINgC6JUZ4BwaIF4AJFXTIkPW9L+XnYudSm2ybNMuL2ir4BA/mugTQcI+i6mSJmbThu5Ja6IsqLwQKBPzQOSQu2l1Dy9KkkGt/LiZUkQ2xoMbDiybGTk578VV1MoBOViqLH6ElpGN1bcLswSGcUL3ijZ59xFg+epu1czHRybHJEhIHtAWyDmtx2J/loDi7IKfzFKkxB03ujO2/UAPBzgc+4jkduL8eHr866j100xDt/yyJAClAkYKnuW/T9B4m42g3eS5b6mwXRmRSgdbQUB7LBtqv3Ad8sTk48NUkkbRRSLplTdpZVdyM5Rex75Ws8MbzdZx5V8wPpuqKsWlCK1Ktvft9RSBdA8r88k4Phw/xOZ4mb0FVUhMCsTdjalgUL+xIP8AbxnlKcq6PRj1dCMMDJESRHZPtb2rXc1g3Z5zhvER2t0zYwDXK9uSfedrUe1g5FDvd3Y8Rz6hnRtWNNRLh4yMFVW7G4DF2AKPZReb8QzzaoaTfHpCWk9Rjuk9zXvyTXxf65+w8Tqgk62MGJpSzlTGAzqR/WSTZGPrXNUbs2RipqNOq6oAL6bMzHKgYAazd1wOarOao+DQ0s4uP8ozKLNhlwL5+i/hrzznBoRDps5hWQRyYIQsJCdxUVRogVbdgWIODfO8y6IvflI5Yo/UYlcu5FhfrAJsKaqyMg1u72LC69odOUI1BFupYnF22B9hdWMj2VdDw9jo85hLspUqQ3rFrKsKUkkEHgjmskZyxZZ85eX9RFB6sUDqS6FSAwCkE4GbNWQM3z3FBzIOI9YsUUCqPcY8ELtLLQF2ADYxk4JPHzq/TniPRtOY1OItMVSijEemuCe5P1CrqjRN5xDqUup02m0jpondNttsbJG2wLqhyDdAY4xfjXOg9TMnStKn5Q+nJFplkCzbQ5ASyV20bNm/m+KyuXE4tecTGXQnam2YbwoJpQoIIXJHc5r6ebF+EieMRqsckbbliC0VB/npiM3QPfBzm+fDT1zUS6lEX0FKJIGUh8XtXgBSPpo3/vRArRaeVxC7aKIAv/O6rvFkVgAcn7fGKHicbqAFBj9VFVFWib9hBUCqGR/V/t2J8Duq6XThmZmCG/bgj2gntXGKwa7fO1+1MU8VLJoNOAisrBqHwMj/APF3oV24C71bQmVmV0WIvkqqE0wJFgDmqK/TeTX8oLxy7IkaKZV6oUSYswVSFYXimHwBfLX91PYDxsnkmeCfyah/KAr6U21qWtxaUmsDgA9hgZ/l8Yg0LaPzL7ImAaJSUJOKVqPwMD9fvzer+RusqPJUenOmRP4ckbMZcELNNng4JN/vd3nxXJ/CIbNWIn1CySwIWEsKmIJYPsUbRVnbXFc0cMBYzzzJ1aLT9Xlj/wC4s1KzMYGFkqPi/wDf/wBy5y9bjlZnl0kZQ6kMwIvcABS1t7VVjj3Yu/C5N0mPqkh1h3Iz4ISOM1Q4O9DkcUMCq5snCbns6apena5uoQwtPIisrKHaPaKAG7k0ARtBx2qiQfC35s0uqeSWFJY4z6yAOYgdpZx2DCjkWARwAKOfB2Xp8K6xY31Emz0wxYxn2qQALF1W418DByKoD5pgmmkpdXqFJlXey3e/cMWSM2wz3rHhwgKNHZJZCdreoGYKbtl3sOGyaLUQQT7TYu/F14zHHK0bIArOQCQCaL0AoojMdiv8x7ArX0upDSOdgRlksqtrRwaPtG3MdWexay20k2YXqL2y7RGrgHaQwChxmwSMq5AGMm7wDpaHWqXVQaeeVNkjw2t024sAvuOcH2DvnaOdwtI6b+ah6j1EekysrlWBq1qMBgaGOT/8V40GaGb8hqYhqQpXcWce1V9vyCCuRux34vnwhaHQagdQ6pHNNsYSsxUgk0sdsRWMbT+uPg+HhQBKZV6J1bcUQkyBmCBST+2O3yT/ALmWUOvlKOwghaFl3bLV8ci+9bSO9mzfjh9K56Z1jeZiaYjbAW3WQMn9yQc9s9/EOtaHTeWo1/736ax7Ci6ZhIPaFPcDkkAE1dVYBHjag79MZD0fRsskatFE25dm3YPUJJA2kUSFwcgAjvRLQaVfUMex23hISAasBkG0/wA1BQRV17CaJql/y71JG8vQLp9zQpEyBsoRkXSFrr3Lm6FEUwvcwK5kUMykXKELjhGNGwCcUHdqwQNt4DjxllsJhE0g9ZZfUISyQlgsypQphwQxxk1x2UYwkjx+dPM6rrK//MJzvYbWBVW+KwLvvd/ceNrVRMD6kk6l1cHHb2CgCe28+3+UigMHdgCPC3njzgp1Xpq3VNX6g+nNNj7m1AHfA+KGnBN2pr95enceWuoCWRY6jQlWsAnFgbsdueRWDg+D8uqjHkTT+pInq+1QhIDMAy4AN9jfhC8szN/wN1gmYufRUg2a3AIQp+eTXx2qh4Z21Jk/DHRMzFiqxIzZo7pFs/c/ci8k8WPGlx6hR9H/AIcnSzeU4w6RK5SQq0ke02WYbuLG0is54o87jsLaE9OmGyHcd2Tkp7iVybo8GrvGDmwtfhvqfV8g6SSTR7UMLEMkfsFsbYAmr961Q4o328M2hl3dNZY0mzGykAgmi5AF3wLbJFfpuJbgzmrVxPrXimg0bqsAf1MGrLA4wOeDjIrbXt48Z/8Aj680X4ZdQ1Gnlg9YRxH2e00XXGCRjPY9wMbR4edXI0un08imcD1UZXNELe7uWOc3znF4q86/7Rqzn8HesSLK+dLFRbaq5mQGjxY3AcXe39A+OS5QViXXNTMvl/QMQio09NkYqI0e2OQRfwefBOSd/wDEuhbwrI0aiuxskZrA5BrnFZoeFTzTJqYvL3TJ450UnUOtoQu7+HuvAA+BfOB8AglqdSI/NHlqypjeEiQUDhSRRFd6B++bvt6Hj2zjQekMsf4j6SEozEpEFISwf41UfgEir+9c8blqoemtFpZvT0w3FWYsNmCUstisUw780BWB88+Xp44Pxc0Pp6eOQtsYjYDdysSRVX9NE3dA8kEn6E1EqrPow0EkcoZbNKjE7wpzd8hqs8kmx44+bHuNI91cnS9JJA40+nrZW3bRYWCTQA7A88g1RH1IXmjzDpItVOBDEqk7t2xjV4J+muEJvPcceGvzlr5INPE0ccrr6Z2LQoi7AoGjgCwCQOKH0+Mi6xr9Y+qa+nl1ZxvLKL20M2LPYZr/AFHhceO6KW5utdP1fXfRk6cUdWQMtNYbcBgDkWDxZ7fHjnpnVNJJrZmOhcAKzHlgSF92Kr9P1NnNgJo9fqm8ySibQJFSxC9uxTZGVvA+eKznjxN0TV6h9ZqK0aNKVdVIiFnauCBWe4Izd/OfHX4pNHQdZpp+nerHHtAwVDMSBkCrojnA72O+PF0aed9M08WsIST6AWYAWoAyDwCSeL4+cLPlXqEx6LMyxMBF/FaIrdinsXWLAUZzQ58NXSIk1flOGUSOzEUCPfkLtxi/5h/pfa4sNR051z6Qu2pQM4sFwRYolsbhR54IoCr+JSupj08b+uisJDuZgTihzbnPznj+xHto4k0OpB1QRCqFyiNtAF5bGf5iD2oZ4rqaENpNKG1jBjMDd2tktgnuSbvsf9fD0YpImoT0duoQFU9zAUSQLNZqhV8Y4PJ8avoEaOGV9RIGYKq+9SBtokkk5wT8m8X7r8Y2Yomm0inWre1CQWY7qAsH4FZB+7XfbTunzxQdKQRSl63ELRjNi2N0RXBzxfO6iTjyfkDvo5dFp9k7JCZHmjcW62Rih7SBasG5oZAIzYvaGFlTSRacQWUcndG7AlWVrA3e2xmsXQvkAA4uoImnWEQ2E3XZ28g2cV2++bo3S0S6pMdV1Vt3qxRuoIYrZ22oF0RQ3qBkgZH7c1l+BFSbQ9Qi1fpJq9iRw7gDDYsAtVE1WBeM88nFfRaHqDw6iRp9jJKwWNYze7GD7sndQIFdu4XdHp9Mus1WolbWMZHLSlJA1lggYhewHtOb+fuPH7Q9OX0NTt1VbWJG4NTKK3EGqFWCRWASfkmp6Op49DrT0kyBmKBbNRD6Ks2buipPPGMZW4Os6KeDp8DtIkjyiyrKLNqKU5JIoDGaFcWK7/w+NOmiZtQ5QEUabPO02eTff9TnI8RdV0/paIRpqJCwJYptYFXFFhV32Azn4rw5eyY91qPWrr9Yn5iMn8zIDgrYDUNvuFc5qu2D3rzJqQsKjUxKXQqbQkMbIByxx/c3/pB1rSsmq1gl1lSJ1B2Zgm0BiwHcVd7c/LE5F3W1enQ/lANaQfSaifpf2gmvsBRo8duCPHXjOig/ol1H+N6X0ZxTSLQUk3kD+qzk9v05A8aloahh3zMkjmXIbBIGF7VZA+D3IsY8Y/p44ZOuxE6q7csyZY5x+lggCjjC96J03SaiNNNpFjl9Qe2q3IKJC1givqBAqvsLFY8pnBPyMMawqIfUb1RvLgnKtTe1iOCMC7pqAoXeGmZ43g08enVRpx7fRZmBO9GAIbBv5vk80SRWh6mn5jSgQnYGQX3HuBwMA5/2GLu5dVPK+t1ErM8LqRIm4XuamZASDj2ng2faQM889lvo4gk0XUV1GpVNSWEdBF9Infe1f6sEWaoYx/ST4rQ6LWnpPrtql+lgERDQXIv6sii3F98H3VxpdBDNp9RINa9LZqUPvovm/sN94J7c8+PYOnqOmsfzZjAJ3hrVgu5gGBqqB3AcUaArA8VBVnV9P1q9PWRt5ANOPSwDYWibybC89x2z4oeZumSRNHB6kbswI3GNeQTls2as/uKugbuT9NC6aBvUkd2YKihCPcaoDvwSP7fr4pde05/LrHpdXI3tIjYKQAtnFA4yTjkd/DnsifH0v1OhEsNPqHVlcK8diiiMB9X3r/MSK8O/kTQQfko45DExWZ1B2VYAVUOG+wOce4BfsoQaRx0uR49VOxtVRnoWWCMubsXSqLOOeOG7yNMdP0PqEMfqyszo9gphAAe30gqB7SLtj4rLejgprOmTTdLj1MZjQmL1F2QtliFFE3m6xxivnA+XRdTjGk2agMXkU7jGfadzAAENZNLjFiiaz4914DaKJX1Mqb2R2AQjaU27bze0qb47/wBotV0tANMU1HqMxG30wwJ92wqBWeKPBskZzec2EnU9Jrlljj/NPKoWywTHYGhZxWzF3xVjaSua2KSBts4JKDe1x4CbzZIrItSSMEgv84Y9V0xG1KAasSKyFlKqTcdc1VGqrOLv70J1vTyurdDK1xnNpjf2BvAvb3+KxQPi5Ukbq2kki1itJCyhFAthhSoKgXXIC85s3x3b/KJ9PoaK8QDbX+kkf/daj8Xgf9cjeu6Tb/FHp13OwAXRI5P98mx8nJJ9CkeDRtDIgEixkvcYDX6knOaPHwLs57+LvcAmpG5gkQ3eoMFNhN0PveM/+/a35Z0mk1XRoZoNKskZsCoXaqNEWJExeRgkggk2SANid2nlURptEhUHABtFN3XN4ziu47svkLqwg8paFDo3Y/xD7EIGZG+1k9yTmz+/jPKdHFGebSNrWc6VxGTbIZy92vN3nPuJJ5x+oTzVApnd/wAvqaB99aiiPdZJusLbXfG43ZyLDOdxTACjNqfaOACe3z+3Hfx31FnnMjtIrEU37gWO4ofHHPbwpOwXulFPzsu7TekUZnCjChsgG/gg0SKvaQQQCDf0WniXTOjrtWMNEQ9ml5N5xjaNxxgECs+JOmRyjVzPMisrHcLj27cubBI4IPe6N4BPi/oYidPqPUh3ANSd8hvae1E0Twc38X4u5BXnhvpksm/08bjtcggkbsAlbqqzXJzknwp9O0Kx6vXj8xIf47KSH7+i9n9cWM4zx4f5k08nQ2oMptRuoFrKkkjmqobfkgnt7VXQRaUyTehDpyDITH7f4YJWsE3QZh2C4FG7UExyBY/KiHQa/wBTSyG6u4d1guQQfbjIrkYFc3VR9RCnQTEvToipVy0fp2WahYFDigQBRBBNjI8Mq6bVtp9RDpPyrbgGCAqpyUNhT/lCnngjm8QajTeZv8PjhhKUq7VT80Atg7lorRFbuAeVWvkazII/L008/QU9DRqqozIqFCCx3gmt4xZcZqjkmyB4OaYb+nwyrEjMhUgkCyARtHevawxk+6xZwaXl3T9Wbpuoj6iQshmQNCCAEGGoVQ926qAXkfqGCOOf/DdOhkLyMBtd8lhxZps4JPJs/p4nLIPyxRiRIFAYhc+0fTZJz9WTzuJv758fN0ulCfiB5yYbyJOpavdGJGFtsY2CCB8Hj+9+PqJyIzpw0KOqpZUvg3dXjtj71fuHb571kUg8++b2EaEnqepVqjI3Gjjbx9QB2kYoUMeL4L3U1lPl/WJB5D60Wk3K8GwtZUrlGwRzwMHOb4x4Ka/zIsH4WaRQQzARbJTJxtdCcVnIP9+O4rdFVB5D6yF0+o2GCmVba62V/LgfHcCjd14/dQVF/C3TRflZCBs3fwyDl49o+m/5Scj/AH8dmpdbLb6J/C7z2F8k6JTo4i7wEi5r3/UKraR3zf6cMQGjS+do16W0b6JGLFtqiYErnIypzfBH9XIpvGXfh/JCnkXQqdBKqCJlO6Mf/pGP9FE+5f2r+oUxaeUflHC6CZyVKWqWDmgeLJFjAPZcAc8WeE8qqU7Seco2TRkwj1Ad6kzsLyK/SyD3FZOCfCL+PHWYeqfhV13RRokUjaaPZKJ2IGyWIgbeMjP/ALAHxd3wyHTouhnFOA7LEDZbbdgqQfpJ++CbyCA/E6RJfw/6mnozKDowu8fyn1A+cCsAmvvd7ibMMJLKKxrzrG0flbpVuTJ+ZKlqBQgwiuACfnH+nPix1TqSx+Z/LD7/AKIX3AsrBjuYij3B9oyP9j4t/iJFA3lHpaTRkL+aYqRT2TD27ck55FDnb4E+aI9G/mry05eMzKj1W0EizVndk9/nnnHjsmrtBm0/muPTfjL05YVZ1aJFZJSoyJG7i6oV+tj9B9AyeeROmm26SIe4e/1idhwtn238YHwABgePmWD8mv4waJ4NKXUNF7VHtAE7EE2Dgj5HBxx42yaZBLD/ANzcOoFiRKJFjDAgVkkVzyOAbw5sJ0qGfzN1/XdXBXpuhIb0yGKygi+clVI5xd17SRjHhN1Gj80OXZen6goSGA3ZWhfdOe18X81StPSlkkSP0YJ4Sppd6E/zDmlWqrOLq+Kxa1Ok6rKqRL1KaNWOy2IBAZq5/qHtxzg/IvHGzG6UwTQweZdL5x1cE/T9VuCxhT3JJO7gX2IJv5yQcTdO0/WhP1BJNFKqKsiDeCU/5YrJFXeRZOawfDroek61fNbSydRctqI4NiKKAc0O4GLOP1xQ8d9N0c2nm1rzaiRzufhBgECgf5gQMc5x82N/ME3ytH1CTy9qmkglXcNoLH49QCj/ADdsDFHOCSXn8PojqvK5jkjO5p/pIIzQFnizTIQbOGsVkGLy7p4NP0CXTzgzs7bQ7KAoy1/fBNZxzeeD/kVdOOhLCsRQNuoUdxBA9vND6m/a+6+IyzII1XQYl6e/qNIqlYxu30PpJ+cYJ5FfvzBrOiRDRadWecn8waBmyb+rG7cQaIIHGL58Neucf4dMy0ASpsmiQRd4xeP09vNgeK3UEkfRwkgIfzLbkO7knBJc80pBJP8ALXIaomVhgWq6VEradw8w2wqyMHw1cMaOSCo7WaPeh4cNPAum26dXegdgXcBuLMPbWB2I47j4YAPqDIZtOXMalwGDFiRbKcXzgHjJGSDnw062OQM0ipIF+q9t1g2PjG0Gsk7FHLWFlZfZK0PXDDHCyw7mBBoMG4tgKIsixR54+eYtR5qUz1qNCHfnE5sEiieLNFif2HbxzrNOE1K2jhA7fSvtUB3NjcpBsCq/QcAjxRljWOJEl0k2F2k+gWBZbvG0dgxoZ4z9RE6gGuh9f0MwmeaCZCd9odUdv0MQdp5GCSBQ+k5BNENF1DQGLU1pWSSN9ttqmdl2AlskgWLILcYB5JPhS0skcGsnR+nyqNjg/wAPC3HYH03n3X+oIAArwV6dqooJW9hVC4YEKCAPbtoBbr2Yx3HHILiDVHPpH6apXTOreofd+YOPaQRRANYFmrNEE3456kkM3TAItPMtH6vVxvoe+iCBmjY4wCpx4GaCatEgIIKhUYFWyRQr75PbBu/v4u+q35UxerGBuvAA923k/wBrAvt/fLXZsr6t0OL8xM38aL1Na7qqy3TWtLe4m/ox88V2q67omnH5K5JlqIg/xrpeRkEmhggnGCKvHhv6s83rEFR/+/H2kOLA2haAz/MLHPuoYsGjrlkVNBN7WqLcFs1Yzdk5u75s7iRgrfRMtAL/AMJj/wAbQ3Ir+qgredtnH0gkA7WPY838+GmOtPHhnkVEpQzkFlUM2aOPkkf0/wDgJH6f1E67AjFWKuATuJ30Q1ji7I/1AOAfDE8LjULuVinqAFmXcCCRR7X9TAj/ADt2TKy1LoogXzBJp5A0UHqSLZNuDmgAWx3Bu6r9KPitN5qhEjh9CHYAgETkV7gb4zYFZ7E3XiCbSsSqFZATFtDBCclUXaLW8l7NHOTzR8Qz7WbOinG6mVREWu6sD2DhitkCuTkbQ06hjnRus6KfSOvoT+rICAn5xlIYut1eV5AB/ltsYF3dF1LQS9O9WLTnLk41Dm1raBV+267Am7C2MeFTp8kCfmYn0LRqW228Z2qRKCVNAmttc3x9x4JaPUgaZ4AjqzBgoNYY7zRoYNNziqORwVcSNsk2mk0enMcDh9hHqHUF91kUar74AAFm+PFfrscE+ljaHSTKhB2p61DbZsDvxuGDRJxtyRVjm9SFdv8APjMbAnkfSc9vtVc1zZkmaSGKL1Y6G7atWBRyKPJz2+f28ZyGW9OsZg2tDrA+BbakbhuK4Bugd+bx7gboXXmn6++i0jxNo3Ee5ZWMkpNMyqWFkHi2wSf3LWbr6eZAzKUKB6BtitApQI3GzaXwcDtfgXOi71kEMj0le0XtFKVohScbKqxeMgEnxrrZPf8AifSyNEjaKWMbh6jR6hrrdd2Kzk44NAHwa1HVNC8cG2ByTURb82T7yzAcAWQAdpwAFoj3EeFXUiP02d9DMQrKZP4JGy2AbNVk3XJGLsn23Ip4tmmdtK0UkKpvBSiu2Qkj3Lhf0INsB8+DxgOUOu0L9STZpz6ZIdEXUsPb/wCLJN1d2OMd6k2aV9d7dM4BbbGokJKncaqvtgDJ/XwA0WpV5YVCk0NjAoSLO0DgVmucgY43AArDMfXDhkFMtsymshSAf/bJ/wBB4iww3zBDtk9kGpI3CjHPkYNHte6lAPcjAH83ml3A7VWkVNygyYPvf9q/Qnm+BYudUR9TDKFkQuSdu6zTN7STR73x8Dv4gKyetI7BuCMWzILYg1ZvNHkdhjw5etDSxpzMmpmcmQBZTVPkARqSarnHHbJ7+A+j6xNo9Mmm1mnjMqWfezk+4luwPcnwXk1Qj3zGJt92yrZxtcbcCqAAomrAGePC9qJzptRIp0LT7m3bgiVdAEDdGbFg5Brw5B6EdNP6ixkyMI9oRSqj2g1W32gjtjBtl4JwX06xanRtKZmbbTgGgNp9xABFGjtzyKsdz4TNHr9G+hkkaeOMWgveLALsTkKMAEZ7qSBk14avLet6bN0xi0sSbnJVyQoTObF2Ko0bbAPyKMpoI4PzUGonkcSsN/HpgD6m4o8cY477bayShbbAN4ABLWKDHgALt4AsYIF5xkeKq75tTPIzg1g7jZsAnNZzYxxXu7nwL1kMP5DVSvqATGzklixIWwCCSbcnYy3ebKigL8L2NmOaaAdMMcpieJ49xO4Ve6y3fkfpwOdoJBR63phkv8zpg7HfvMig5Jraecgt3sYJot4Xes6CBeiiU6xDJsCrYayKUhQCb20e/baKBB8KWp0UXqGJuoAsYTHuZmOKcFsnOW7cUfmvF44TXZbagskB1O6Lqmij3RhdhZFAtrYizRPJAN0TnnxQmjkKGNeuaKNlASlcHaAfdkEAEXa0P5QLGPCB+TjabaOo7N9AbnchV3mh9VnJAJ7e6v5QsX5DTMSDrrTc2DK5B/bd8Gv2HGQ1eGg0jomi6g2h1ZfV/mIvWOYnHpBQIxV0aofy1wc13J6f1I9P6crH0xEpkZpcnGbPOM1ZNm/C7+GyppvK3UtuojmVdczkgFv/ALMW6/mqurPIo58HuoJCvSlaSb2qVHqimYEMBe5u/Pu7WLyPE8nsxT89pk1kay6uEXOxsEKnALe3b7cLZNHgWPnCJVd/N/mSaFpJA2rlZGAB3gEkV/LQDL2NFsj407rJ6b+fgYyAKyGU7FUVlmH1d2Lmh3Iz2IRG6VIev9XaBS8P5tmiKpuVV2yAG+9W1/NE5vN8U1sqyzQRTR+Uur+lpiB6Au1HFrQIs/F0bz+g8RdVl1S/hzEE0gACJkqNo3MnFjBO1u+KPx4aNN0zX/8AC/UmEbq/prsosASTntxV/cUPjxX6j0zq6eSFVISjhlO8yFWJLx5HfGzubz9r8dHn6To4eSp9YPK2kC6UD2M1sgOy2IyaxyMjPfmvByLU6xYGUQDYCSSYwcE/cGvo7ffjNivLHTerx+X9KBHPZVrWnWveygGxyaX9/wBDZaKDqKRSBkdVGHQluxFittH6Dz/T/bDL3VJfzWqMkavpo2eMbSjrdkGwcg/zc/pRu/Azz7qJdR5V18RhhVPQRKY0AC6kUfq7cCsXzZJKlOqRNl39hXhpOVLVirAAU/f7DI8UPNsXUU8va6KdpHX0SroGYjYCgYmxW3IFc2tGsVM9hnXnZS/lfpqtb3KtHaScRkZI7ANnkkA0Qfb4Edcnvrfl9THJtEDbc5HuY8kUfmx2/QeHDzRBOei6TAkBnV2Ia/8A7eWF85DHGc33Nh+uafWDq3RNqNJUF2qglDxQ7/fHF54HjpmXSQ1dS0/4oaT0tMSCiNvF5X1SbokiqH/V+NZeXWSFAdMi7jYpMk3tJ4F/qc3nknxn66HqWq/ETTelppooiseKP0mZgDSA4C47kZGLrxoB0XVQFMkMzLtFk33wD+hNgfNn5A8Z8l3Ipc1MxkigbUTeizEkGqAsg2dpuhf3xwPmt12HpW5TL1pY4STtXe6ADICDcRY4/m/qOeG86g8kWlhOrG4knDHnIObq8sDXBvF96fmLqXRoGg9R5CzMtqJeDs45FggnnkMBVZ8ZSG50eh6ZB13UO3WHlZ0jDNuO282SLBK0f6a9pq+fBPpmi0un/Nj836oCSFfVY17lN4JX25OM9xkE1c0c3Qoeot6Q1DqpQhtwwu67JAFD4u+90fFzp66SOd30rK5VZDRk2s+26bkkA7V5H8xYYAKu3QUui6eOLpOpiWCVm2szuQXYWHORyBZ55NcmwPFzysXHSNRvRw8c2CALY7RyuBzs7fpnxa00Uw0EsemfTNCN/pm2YMoLi6Uk5ySBjGBZau9DG0HSW0x3ABcHcQawCxzjNHnbn4z4nfyFKYu2jkHqsEK7wdp9uF4IGDRIvA+9cVtQdSnT9PIxlSX1SotQu0j4NWLN4Jq1JySSJI9P6nTH2ozWY6sFhywHah71Yf8Am5+oHnUwf/l0QLQlfXPvN5JNWavmlsdhtqyb8KBFqkmOphjQsZDEgJAFkhAM1VgFSM3VZ5y56qJ308oGHcMvtrcAwoD+9cnkHsAPChq4SNVp7IC7IlLMt1SDmx+o+2aoeHyeJW0gcMxjsqQ1UPlQAaI7cc8+FlQCa9ZElgUBQpG4IyKQppwVwoG071H3AP2ujrpdUmtUPptxbdvbCsQvpt7ioF1YsZoknsNrDrdJqQVU2DuJKtIRVbgVNZBsDFjPu/Wr1LR9QGtQq42iMrRciwQAt12vdnsG9ufClBS1+p1Eev1FaSOKPabAiUAAigfsPaDnGT470GskNJsRP4Z9oQElhx7QM/Uxz/UwyKXxF5vg6hFr/WO5imwX65Ynng1jvYFZOPFN5p4lRXkb09t5kwLrtdDgduw5rGvuFTVpNQxjMQYBmVd6/UAaJqyOOT+ik55Yz094pJqeeQKSTKCCKBNE2Fta2kY7nufCdp9ZB+ejgllSMEKCNwQKpKnAo1VFgMDkUCAvgz5d1+gbrADSxk72LKpAo2MKSMHFqKBAYWcV4zuJh/Wo9Us+pRpnkdNQQpC/V7iNqsB3oGyReebU+Keu/MbNKA0nqSxtbbVBYGvbYA7AGjZCtQofVf61AkuomeH/AJb62R1k22KPuBzge1gef5clvbVHWwM0WiX+GpKFVIBJHcD7myeP5r4C+HPQSwrK/mNWjLkLOXLqACwL3uNVkgj/AK4atXG7QqKWQkgsFqjTbttEUAQD8897PhagiA8zxsSAvrkg1ZIB+SOeDd5wD2p0mgL+jsLSCTKA5LEnb9IJ71X3A+D4WVAHqhOmv9OzIyqdm5EsjauMrhgUcgdsHgEChLLqF6gyy6VCuGalXaSGkXIAG7uASAKFfJLDLpJ2miAYbQP/ANLQAO2sjArPfHBFE1V1Wj6kOoy7Xq1Cgbiu07if29u3JzuA7E+FMgTp9VqUfUK+mSNd20rsHsbduIGPk1XOB9vFvTauRkkURoCoWowoq/pIIA9tAKLPG1SQaLAd5hi10HVWlkHtZqYeuW9tCs1ZX44I2/HjwzTRzLHM+5VoU7BhYzVZBGTis2fmzp7hU26WdmPpI24LJZULeQQLNrd4AHYbgKF0pbpgi1C+kupk2stX9IDVa5oY9wGcUOws+FDQa2A9QaOWZPYxsyPY9gagcEnlVIs2CK3djXk/qHTG1Lb5kdUiG7cRuGSTm6ashvp+k/N+M7PkxKSAD1AjLRJr2raqAL/sAaPa64B8DXXUxoyrEkq7ku4xZLEYN2xy3z82f5vBsyaY6qhqFNKK2m/dRNZODYIPYUea8V008j/mpNM6lPbuKtYAxeP7UT8gcAUpQUptTOejCY6ONiBGxZlDbQKAINUASB+zVigPFGPVzCREmgitYthDKqgDIyTwCCRYrk8Hww6/SdVXosgdyziDa5GoZSSbvtnFjJySwGAB4UdGNZFqJkLsDE25WSUjFjjiuxq/3wPGuPYMWl1bSKHmIZTFueRgfqJAayBbAk5r+zX7zMepJYyTyOATd7c2ATtwOO3x7SMgG0/Rav00lklZfYgLW2dt0Rf9NGqyMA1jBLT67SJoYnlnSxIoILA4VAKYAAZNrXFqvYX4m47Bwk06S6Et6zM4BjO4A3gBTtYfqMcjB5Fx7HO4qVIrAofVeKarPbH2zeK66PqunydFh2zxB9vse6uhgYyrHFjOSM2CTPpVim0rPFIXkQW4FbdtWLN85/tXjP10AfVpPHoZWj3KHlYUUGQ24A0ATfvUc3S/sZdN+faMtCsPpliVLFBf34N3yT3Nnxcl0sv5ZmjLAMrKCG23ZYXxk7l5Axnuc2+n6LW/l/4SuVDEewMwH+hr5q8X4coZFFpEfSujTWf6ifcc3+t/+ov7kt5WZtPpQDql9J2aMqZEAClMYBxVKbAxdAY2mq/oxw7n37mAwV4NkFR7s8fpnxFBPpoVTY7rIGRdyNQGeL5JJ7f5fuSNr2DvC0ck02zUuGwjMD7xuZkIJv4AAz2U1fgQ2o0jaLVu25xSyuy7Ad1ptum5xgndRY3dHd1qNWibw7TsPzO5Q7tu70wFg/VncSOO5sAZq9bpXikjSBo1JJUbRi2wTXFChn473QjHEK3UR0z/AAoB5XSyd+1sE7QSDRBzzdWMjI8LrQdI3uPVLbo2UkkABfd2FY9pyRjFVXg3rNZ03bGToZWAIDCOyaXaWsfqAQe19+fA8ydMAMY0esCLCIyrbyaO5R/LdGyQPigCDXjSJUxH0VXdmcx0NslVa27EggNV5II/y4pl8Rv/AIDbKZgFpkBVlJxYJ5+x/wBP8oBH83031jImh1ikFnQENYIayOxJ9739+eM8wavpiLGTo9Xh0oIzblFKBYXcONw4ybGarxXqg1fh4+lTy1qvQLvEeoLaBgxBCRoa59vau4avjwT6m+ni0Kev6iuERXBJDDfGb7E3SVk5rOLBXvKc0UvQtSNPp5QDqAqK5AJZo4wpo32AA+QTzkpfn16xM5h06FG2BHraoQVi6DEWueLvgVjPKfcp+6vrIG1GnM0ILFWaTaxuyWwAAM577qx/m3D+n6eP891GTS6lw0rMVTLXaG6AGAAB2oEigO3Oo6golEjaW9se0hqJIN2fsV/6GSCQ6LD0fVyTM+xGK7nRR6Y3KLagCFAK3z2I/Tw71CgZ0/SRnomvhl1MrFo9oT0wbUspH+pyflr+3iXV6TTSeVxGrOs6EKCiFTVpX0+0BbU3gdqyKI9Ohhbo2ojUmfehdUjkYhiaC+0nO124A/0oGfVK6dARFhk2kFwS1rt3pfJNZAJoVfBPdeXZrHQRp16DpzJBCB6UpcNGSvLHNfULTI70PkAkJYYD624StGq7S1EWKkB7UMs3wtk4oG4+nH0tBBCI5EZgdgBJvL5w45u74r9Btmj1CessojkbazyABRuewQKH9XA/8yiwCV8RlfyCJ/yz7SHR2IWTvg0WNVkZkO3jaSD/AEgjPNEQfoerOklhWfZaEIdgIYAHJuqIOQQPb2wS76gBV3s8gRltjRVgAWGSSuVKnuQMluSKfXYU1fTNXCyvGSx/i7QNpJBFk8A0BRBuxVEUCW7BV6vDqD0zRRNLAxjcOAw4oJQIuxQAND4AvsJOo6GMa/p0raiA7ISrMLoCzTN9+wFGqIrg+CGq6asfTNOYNVLIzSYTcpBeiTwALIC1i+fnxPrtLENbowryM5QhV2LhLofy7Wsl7JGa++dLloBU+i00XnGAwlZEdkDIzBgAXNBq5IN8k4IOAa8OKegZN6qquCzKRGdxBZCATgi2YHkZrIAoB5CsvmOEwxO+0gqCCD/zSTzV0WJPFDkGvBdplaPaPUokLbXQNKcncRVA8g2Mm790ZXcAV1bSRKukBBWqYbhXCLxYH9Az9s1Y8LvVun3rNLKDE5V1AYopKgKcjHauAb+rve13aeMxElZEuRpSCAKXFg55Ubse76GA4FU9VCjtIrLJde4FM0BkEGz3+Tg8e4blLqBDIsMBUxxQICRRWGP2+4AgWPjt+uALC+pPJGZIo44VUK1hIVFYYEAD4qheSLJseLGuYLqEUxtH6jMSGTaCPcT3Ng2RY+91uvxHvltd8MjCrO6MHjLf2JI55JBrdhbCWDV6qSVw7Xva7EfLiyLrB9oX9ua724jGYZAoY/wrC+md3BA9pU2TTdqr5rFWNpFeYGFztYh29oLNseq7E0FoEHBus34uaaXergwWqk7kYA53EEGu+6+14J5PgAepgk6fKqwGQhVCD0ncs1bkTgmiVTIJwVGaBPGo/KnTQP6XrXqQwYxmyD7edv8AN7CfknNg0bERn/Kybo1eQRrsa1OCp2tkEZaz3rcxyAL4meRdDH/3d0YyOAy1X0Ej7mr7dgQR/KzlCpMdMTpyUHuSMOzK3G0Ux7Nytg3wM5BGhudM/TwViCld7qSWbbYrkcLVC8DI+4CNq2l9dPS0rxzgKjAEEnG6iSauy2c/zNmvGgO7t0pyI5Fb0rBMVkKPUGSf8pIvjkizY8Tyf0GlPXDTetp2SlHpqq+0jatuCa5tccG7H83J/GOJ+padVjVQVohVLDcGIwc3x9zn+bvZ18pfUrFLHKSJUBjCEhlKClA/ltQVqs2SRjasSKj9S0oZfUBQ2zqCzGySc2eeL7HsM+M5syN52iDawqpCqQoBDDaACSwFsbA3HPcc8N4WtZpkaCFlMgdQFBs2AUBBuhn66IN1XZfDX5tXdrvWVvYY4waQ5yFFU2ecDvt+7BV+cRbF9dWB3BMe6vdkZwcUe/Nd7XfDrFIRNp4/zceyYlfTXBKgA4zQ4quB9v1H7p2lRetj09UFDWjtvVfabGLPFWec5Iok3cljjZ4yXmYekhJKg7jhTeRQoc9sgY8VhLpfzHqNZVroDcCwBOBZNdhf++PF/BmyOeKfpkU8o3TeoGaSOJjbD6mvbjbukOKWwWxfiLXjSiLS3BR2SAlYyCu5WbbwMD30LxX7ifRvKekQlYgz0o3FlxhTXcC1NY/pXua8dzNN6emRdNKXMZxuChqdVHfvfPFsvxa571Q8gOk/4ggLwoFOo3ENuCghqqjjkN7q7muDbxqPy76eEtGQVUB7DsctZU9r5oE2arvfhNgYnrULQwuqmUeoEAXcBQBF/wCWrxwFHJvw9zvK0MRaJgxkj3j0fn0/beT9VVg/yjIrxHJOzkUdUkDdT5QlxtUmwNu1dvFUCSVsEAXwo8eJHDJ1CVljSvSEiowpSStnkYGeRVfarFnVyltb7vWVg8oa1OGBu7DEUv1fahXJYwqsR1U5EYCLpiV3qCwAWs9/mzd4B70YGmd+b4r6hKAzUHLWxA3ChRoG+VH71WKHgP1TSoZQ6+oPqUkgkgA/oLxtJGRkk5I8MfmRC3VNQyHcssp2ptoMSjMSaav5QTzV3wFLBNWIGjDN6gkZSVfbusBDRz8E7e91zj3dGH8CQ06eI9RlInuMtQcstKPsfjPI+/F5/dDjbTa2d4NSEKrvFuq+9aIwTkA7QOTVDIAAuahYRq5pZHlYB9xLgmxRNk7ubx88fvThl0yyEsGthdISGJqrs8Dk5+DxnxXwZxh1CCb1w6MUk3D3e0YkPY2Pqfg4rvQLM/Rmgl0epsrMwLJWWIKpYPxkjIHGM2SDnXTNSH0vqJJMyAHKX7rWPaPg9rOMHuKBe/J0yz9K1LvGzv8AmJF32CJDsULZ+kbQxHfLCvGOc12FjqcCP5efYBvdX+mgTgAi8Yrk5rAqr3Z2Y0fWyyOzFXvhiSF3AHHu4tv0PckG9H6ssR8ulKRWkjfIjU3RXPI+L71xjshTBxK24M7A7DzlioIWiSTdkVQIwTV4fFSoK+mRBqEeVoyqsBtwd1i6B4P6Vxng+KsukiPTiryKNvIBW625IxVcDIqrBHbwYcQXMkLy0EZQnAYrtIuzm6rOODiqFLUDTpD6duxavqUg0V7Ub79/j9vG0vZivl2SXT6RFbVI25SKeRTTI4KnLbhRLcnNfBtXjyb+X9DXIULhliVBZNgqtABc3hDx/NdfVtzFdVpkRPSdlY7gGBG00poV+lkn4PwLOmfh49x9Q3CeQFgdjoxAU+tWCDnkYuvv7qyzx62BbUpp26fINwoTtZ2kXSuV5v8ASj9x7cluo9RpoI1X8tHJuG7CA7b/AJco1VxigRRrNmaaWRdGVmEpLetn0qDMGtrAIPwbF7cmyaKQNHpJAjTwa6Y7BRjSShjOAaBJtu/1cnnxjN6UyxIokRA8a0tiyRkgqa3FSCKIIJ+c/DLnWdTDpxGTCq+9ACWqixPBOBQ3Z+T9yfDpo0gKyx2pVF2kLQ+kjPtNAsCx5BAD5olvALzjoHl07NErbt6Frdg24sQW3bcUVa/0NAEUOmVJkig0rSbH0ESoHKN/3mQCg5JzQFDYx7Z+CT4lHSunegg1HT1UlCzj1ZDYBPAOaPt543ZqhY7VjXr0uFpjCivNy+VCqgFkEEE+0ihWL53Yumb09TpYtQkfpyZlHpbgbLA2SaJJKGyD2Nk0TG6Hur6H0Y6pIl0ZY4G0O1t85s5CnnmieCCR3N0HowVj+UIiAkJNv3urP6g9u4sbs+IdRqIZOvxLsKMGUnfBbX6j0aIu/cGu8EWd1AkoWqQv+UKjcAu9KEYBv4wthTxxnke1dgOTonQrkL6ePYGYP/Ff6eASN3HFk8ff6vHDdG6S0akQR90ZWnkLEirBFmj2rsXqgfaSKyVD7YZVNDaSoBH0lVNqaYkgdlW2x7R48LGM7RFL/DGQyAHgViqHAFm6CC7O4qbtAYukOkYpp4YG0soDsJIxIu7cowST/Ibq9pAsHlvFqBYDMFmi6esqOpdX06qVU+4gmyR9a1R+o8d/FLqek1D9TRYNWYfVjCbZlI3MbBaje72kAHmiQbrxJD6y+YZb1cjLvtUybT2kte6gTuJFUDZFcKbu9gRjTpoY+po9GXVCygQqCCDtIAzktj4vaLPPgVp5NAdZuMWliCuQDEyrtAABcMTiy7GxRpBXBPi30nVzxxzI8cskiSpjcuACEYA0LNrx9+CKuqup1q6XTRad3jUw0oYKwU7VfJyQNmQDQ4uwC3hBP07S6ePTsgOlZpR6hStwYhhzZPD2KzfC5Ju7LBKOnLDFsEKOqx0CLAKFTYIGSKPB9/am8AZOr9YR98bOgkFrcK5W7BsKAQBn7g/rVLUdc68UljErAU1D00BXt2X6iazwL++S47gNuhRounQxAxqkVkkKQoYGiSC36X35POR3IZjLRVFBui7EBRzeCSuH22CB/dR4Qx5m66FQH8wFBobolG26U1kkUCccgAgEZviTzP10ElI9Qdm6qjiOQpFCuKo/oePqyvChoDCf8xIR/D3ZBkkZaySnHHuqwe17R7mAH9Wh082gdNRIY9OFDERvuYKKIrNWbjBI4ycA5UX8y9b9SSIrNSr6f/IQALRsKdvOK7XagiuJel9b1+v6vp9Hr9PKNNM5LlkVUYU5olfuAeQPcbNcuYWUDr9Lik035aKJ9yT2QDtBaqNMQRloyO31LeQACI0whMU0aBjCCygSOqtRYGxWD7ySCCRXuPusjG1xh/iDQaH+G+3EBG1i2AfcCMD7ZFcA+K6+YZ4IUWHR6OkChQsbfJoGjjk3fyfBq6A5rIHbqiSuqCJJBu3Hdm3IIAIFkPzVqQc39V1zMGeSg0jLuZTYLbTnO7jDfI9w5G7ckdS8zdXlkjnhiMbqChMKfUeQSGOKPGci+Q3iu/mbrh3kibddgmOMG2JF3fOB3+ANox4UxoPkfrsjpQLXQqVgWYEAsSKsYAvJHckkgxgssMbM0YUZ2mUqaq7qwASvqZF9q9ovwiJ5o69bOseoA90gJgjPwoxwTn7VkDivHh8y9bKITHMTwtxRg3YJJBUd6+5IIOBfivCg260yRywWAwVwGFnIJAK0BZHsYbfqzVUCvj8H1MciMzGJwqFpHVm3V6Q/U0SeDeWGCQfGc9V82dTXUadZItRGN9srRIADsG2sC6bt3AH6Cx/xXrW1encyziN49w4pvddce8e44I5/XJ4UNIgk1I106yPFGY2YuWRksAkimBGwC77gFlbJPiXTHVtNqDI0ayxoafaVEe7cKssSFJF/Ao9gtoGh8x9SPVJb1MyPEDuUgAE7QKYVZwLv9DdmgY6L1TqE+o1aLqnJSNyLVaDbQSBQ5zmqsgXZu14UGuNdR6BcAqTQKFGtA1jI5sBgSwNmiCcYiYahEjAk0+0shFREC/ZtJG7IF8YolTjnwD/O9SWN1WQsysoFxKcB227c5ztIFWCMcHx+bqHUpNMi7z7JMfw1NWhIxtqhd/FXjI8Tq6AvM2rEkKCnkSJHT2OSzEMWDZ5LVxWLJoXehSHVRabVo8yuFhZSQpJN+pu7m7KmyKOQcAV4x/UdQ6obLMgpfd/BUgErW0+0i67HvePD+/Utbsmi/MFtyW1BCxJLHBPOWJF9/wDRZY2Ac1QmSYsUkaWOaIFyrEg7Fs9yb9oOO6imJsV9HIRJomVtto0ZptzfVkN3Bs8E8Y7nwJPUeoF91ncuoEigqoAJANi1+c7Rgkgn7UdF1DXnTwESO0ZhfIhHtFoeTTbcEjN7ee5MeB7V/MY9XW4QtIdMjk1YNUTddiVF2e+arAKZBGJNzRptlZbJKFs0LII59wIJsAXft8Sdf1mr9eNpUuUwB13xIduAKyDwAVybs3ge3xXg1ckkqGPY0rOsZKABjj+GAVF8t2FilyMeNcdyJVWijYBlUS3DVAhvdRZh96FgHFbSLobvFLqvpxkGOJXNjawYZJbF0oPYZORR/wAoUwuwBHKslr/D9u1iqm12g+62xxgHPIpZuqaNJFeNACwkUIbbaLKjAyNuUA4xtqsb7mRr3SA//DmiMDfwZNMoXdGx2LsUiwCMe0jaMHdm7JM+qGrBCpNECC+xlRvqprNBid1A0bx7h9ivwazqEOghSJvalLRiW8RjPBFbdwur2nk2B4lm6h1SSOJ9xd0VhmINhWF4II5oX8kDFHxFm6DFohrG8xwxwlUkXUIikK1bWKUTTciyb4Bqxfh2LaltDJGJTtZ4lQopJH/KK4snG7BvBGSScZRouodTXq2lJeMAToAREu0+8Gw23OazzwceHcdR1oT01nJEci7RSk2NoBzfZecGvnvGWNEGNd6oZpUhcMZJ1JUMW/msAi+/6ZuttEmL1TunKOAJNIpHptv4U7bI7gLRBPIscDwE1PUdcukLE7fTjmUeqg9q01g4s0CRXYXXa4JNf1A6aQn1pAdOm0GNVc/VSnHNBftdYoACZjT2p9cjE3WdUETInQliN4uiF45reSMnK4uwfC/PS6JT/CQspAW9ltRPYgGxRvnjm/E/XNbqU6pOZKkcEBpGiQ2CbPbF2OD278iKPUNIWBr+KsnrNGnuYge+9gthQv8AlF7geTeuO5EoHhhE0u0B0DKd9g0FIs2ASMkH72DVnaQ/WWgjjbdAtFKYqVNqIyTkAdt363Rs7iWWAKNVGJkWKR9rMjKMXjbXIQDObAFgY9zV+s6RZdMQisHG4XIzMapibsHNq5/UH7halMtdL1u7pImVV99bvcK4BJBqhRzYzj9vGo/hxPJN0ZPVUMHnnUMzbQ25EBDE4JIsVfNEjucali1un8taqJC6Oo+kWxK0LyMkgFh3rgEDw9/hR1PqX+CxxSuY5BrZiQIFo+yO7G3gigSck0cgkF8mO4caD1SZn8vkSPI6/l3HNcFTi+5BrAPc/J8JWpiAMcjIoRnQ+5DRG0i7OK9m6qsG6ojwW1uu17aJQwkBXSgyAoouglLwQLz2/lP2IV01jGoZfTSGRVVwYkBYHB4Av+U/PGe5ywmhXU6ozvG7x7hGQQJKpvbYom+5zjbnJqvFeWOJIrMK0EpVNC6v5WiQQeKJPFn6byNJqlqSM2WkViikrGLskH6RgqDmqJBIrE+kCSwMyZbchAjNbSbAUFcHIUnHJQVgKdd6Ij9T1MMOuhi9Gi0jIoJAJG0GuMmwnH6VwPGpfhNPqDP1BYilKYiSwFsdkrAbj+hNtdE2ew8Z35x0DERvpUARZG2hTQFRg5xkHcuM89xktf4cazX6XW9QWPUMsT+jtO0CmqUGr+xXH348GWvENMkWVgwdHmVn1JAKMLphY23wTn/xVW36vAuaZTJeoXUlyiZGoKAjYOxA/uB/fk0x1DXbmALhDG4wq0RuusCsE44qxxmhet18z6t/XGuZ0CpWmjVlUBRQJZTZr47V3vxz+NMv9PHpr6hQPsTam9iVK2pIog/ylxj+x3e73qejkn0nu9xDbFZkPuXcKOAefp+CVYre6/FDp8kbQSMxVcxrzYZSTdgdgCR7eBwLN+DXSo49V007ShAAsbwF+gE2BwSQM0D39xG7xv6ID1j6penwLNqWYMQVVQgtasEcV9RHH+3i51CbVjV6Issx3IWCDZZZj7tp20tgKarFj91Xr3UNFB0bRNIJ8zKXDPV7kBrBz9LVWeDdcQdU8yaKHqnSkd3CvASfcSXtuQL7E8Uc5qyD4rx3Ng6arVsPNGlj2bWkdeSCGBlcYC4qq7DIPzZP07KQISGAAzstSvp3gUcZqiODX8pGXN5r0k/nvTo+pWSSTYwraVBeQAWG44Uc4FDHZ2/4m0JYCwQbbaqAE7jbZutuyuQbwaB8K40Dm9iUCRlld2mB3VTFbr23d89ifvbeOB6pR4hEilyAAZQu1wQOwHyuaB+D9NhoeuwkxB52alUH+KAT/wAtWoWaY1IB3ok4zXkfXdO6MzzQ7TEhUlUINKFoZ7HdgVVsMWSucnQQ+YPV/wCIIb1TaWUwOyoHMa4YngEVmrJsbjfHiDpxU9fkhSTeh9jCWZspdKpqibI73wOa8Ceu6/Rt5m06vCrumnlDPvA2qC1UVFGyNx/81cmxkPXdKPOuojTSRbjLuGPpJUHaaGQeCOPb+vjeYg4eX5p2fVBpIpazK0kxIIDAtdWNpogtRHf9SmljdtJ0icCRbhid/pUIx2Afy88kjn4I58ZZ5b82RNBrYtkoX1juZVuveKBFZshaP6ZA8av0B/z/AJT8t6zeQ0/T4H9y8ewMP/ExO0kk4AbODedmoFLWafU6cxQbA0e02PTKkWwAqhRalT5Nn7ggZKnUU12rhibayOZXb0zuFA09bfvQPYkZ7ln1XTQddEmnlUqyn1CWXC7dpoUOzkg0aJ4AY+Bj9P1svUNUw1axqjlg1DYMM1gX7aJIJrJs8gkKZbhUn6iXriF4WDiNdqiInaAfUBIIC3w5F/Gfion1PWHK7/UkjG0sHosAQg5rJww/deBx11XpvUElmRdVtdG2BTXs+b7H9aPLc9q0ui6md5TWxgkWF23eUJv5+k3jgn5AGuySHUdcRo2li3WDue8PWHOE4bcScX7T834IeWZOr6zzLoYtaJAGEu5mc8+nITnZQJZuR/Td2bI6bQ9RUKRrY9r5FmjgmuOLrjHIrgbSnknR65fOfTPzOoEsbzXsRgtn0HAGRwb+cZJHh7BsSCSZ3ZSGcagFWZKABZo2IIa6oDFi6Az4E6uVptJqJvTjjJXef4incpcHHzRIH7Dmq8NMOl1Ek05XUUVFbxk4BzQN7bJFXVLx38D54NfHo9dIAxCkgFiSWUbRgHmtrUDuDBzzm8MclFbVy9ROnWXSwJG0ZRqQ1e0AgnlVo8Ei7Zib7iTP1sYZ5Gf0Cm8t/MPUBJO2qIC/pjk+GPqmg6m3RBun9NIcBQSGGBZ2nAotkV9Ra78K8vT+orM6rrEoxkAsA3u5sXeOO4qhd1nWJStqetPO0mxnMj7gDW6QFjg2p9wO0fql45PEWr69CwVImsSWQj7dxFA//b4JVDzixVe4+PI9D1JtRt/Op78cBcljyfsD3PYciweTouqNuX87HuKsDRINVYPP/vxi7JNbBe611DrcGv08exhG8lXVEkAbuwsEqGxVbh3HjrU6/qw18BMY2sikjZd0qkgkLZrmrof2Pgf5oh6knXdEra1GX1FDIpu/YK2gAAWQMc4+/iOddYvWUZdQoZY03MJFsOAvusGsd2vjPJPjTQM/S9ZrpOu62CVTUf0kHiu9gA5sHHyTVHDB5Wk9bW678wDvjQpXLEDa1UPgE2M4LVfhE6aZh5o1kUkkbJudaA2FR6b2Mi1+o44/08N3kKVX6j1VJCrIA21wBtCDaoo1wBX+lA4UxlOgaBptllo/TVAhcmwAdwAWqPcHFXg/FGBoZodMrBKZZyVSroDaSftQx+xPK+LEKKkMgLIo+mil0wIdlogEkXZycijXtPjgQIYNhIjV9hZVsbqjOfpAwD2rgE4O7xipX1UGoD0sMsm5di/w2ZsMFPK4I9ox9hzxoCNMGkVQwBiG5c5FnH00e2f0+3hCngjOjDVFGSTtBtRWSPiwQxN+41QG0EAu+oMi6uWMsigxrtAfduNseAavjP257+Jyuw7UyMXUWh9TDLf2Jv5+D/8AJ8UdHqNTN0+CT0PTV92+xx7wATVcgEk1nkEc+LMMbvq5FMmfVG1TtJAKLyCKrIP79u4/osc3+GxEalSyF7O4Had4I93xg/IvsfE/ABPMsvUPUiM4cBoEchwDsu7uxg5H71xgCnHNOUT143dCxYIF2kgckCj2LVxtx/SR4880QyRnSv8AmoTIYowfToAi6IFVi+3HAwCR4oMxBUK20Mliru6PxxeM8HN/PjXH0BZVd9sVWyxJGacrbAFl+nA9wbmv6jWSCMiGZ3SNQYzuQBFulyUOAORSgcg7SMoQAqUutgjc1vEWWfbtHto8YA2r2IA/SwR6SYpNeIyw952/Dke4EZPwAKBIIqw1YVnYRPpdhcGLaN/pgG/cxU8AgnFjiqxfNiAwShNIhVnYhlb+ahuZeQCeT2vtXPi1rdpj1DOyAtIzBWAO6tyHkcCiLO7mxZ3eOJ4YtpWQIqK7sYxYWwQLIKigSBxx8A0PC32HGjj1A6tp2MLv6s0Uhb0ybBzdkdyGJPGGPHL1G05EqqHKiQAqdwAx+n6/9XSTo4EXXdPP8OOQyoSGO2/coIIxdUBxRNksaNNxaT8xPGSLEqhYw+6gFW8XQ/mvjnHx4nK7DyaSVNG7qXQxhyAO4UGqsdzn9aPAPitLPrPyKSJAV/gq4VRRD7WJWjdG6ABH63x46eORtDqqnUv6cw+sDgtVmqFcfb/TxVSKY9FUxzxkjSqoLUVBCNe4kUR7lNURXYHPhSdAB8xy66Pq04lpvTkWmZAwHtBF2DyVOMnnnJNYnUNGIpUkLBPbYspeLNgm72ZvIB/qHiPzRGydYJGpRgze4A8jaDf/AFnvZNHxVc/xCoO3GFUfcWMY75GBx41k6A3p9sus3sv8EyKzAHHt2g4W1+lvpuhwOQGtNHLqEIdQSQNwALDePqFgZvL2M4fkNZExFf8AFXjlNEM5Zmck/SxPNHNkZq+AQDkj0IxyysNwLlS5UNtJNIwB4JIbJ5F3W08qwF3WaGdtHPDGHdvTB9i1usA1xi89uPDB+H0urTQQQSwDdJqZS5ABohEYsSAOTj4yebHjzqHS2l1R08Lx2Wpc+2iQK59o+1ULr+Zb78u6PUaQ6NZtRGANTISQ60R6KMMDkEEk3wDQ+PBbuFBfXydSbSTiMMjfl2ZgCaul7m+5av0P2KqcU2qOqKqpBLK9bAvtqwTjgg98cGqqmbqunnMDJJqIgBpnDK1bmalBoUayDfHOADTeEqEFZZ1MqSBWIVt2Bwb+1cY/uSTZiYqsh2yPKjAmNgzMQC24gEg0KOHyM0QPnwQ0gKI5ce8kI7Fzx7lJpgKo+mfi642naD0pJhmKu21YySMgWGFiqr+nB+2fFmF0OgvcoYuw2liwwgz+5Ao8XxtArw7AtdY0csunSR1AcZIMbD6QbAFYug1YoMoOBXgh5GSeHVTuvq3IY9oo1j1M4/Uf6fv2mnTU9N3o67BuYN6gAUA4r3UDljgKALwLN/vLkb6eWSRXREd1Y+4rtpZbFbqIGPmqo5B8T7hUw7pPVBZSfaSxF8WORxn/ANP38AuqdQ1un1rwx9MTXBFUGWTTPIb2ixaCh80c5J4I8FJVdp0twg2SYNCzuSiP0+eM8dvCz5pRl61L6mrSK1VlUyKMFQeKxm/EQ1LQ6DUr0vVSbWYb0SwBZIY44yRjm7x9iHfyJ0uebpeduwykBVZ7+nsDV0ewoWD8EhO0U99M1H5iOE/w0pTRx6pJGD7APigOM9/Dp+Hv5c9DkeR9IrixZmOaRNpycEe3GeAKUqaefoPnfzXqIoug6ByrnfMuyo7IHpqoNi6vHHdtvY2F65rNL/i/QkYy2+nNEgUii1oYo5Bo/JN8+JfPupig8qdOIBctOoNUQP4R3cd8jOSPkVXgZ1/WRp5g8vp6Db2jYFgEq7YWBu5rHF/t47cZ0iiMmv0c34l6ONlmSV0Q5r2kysSCKzRPN8dsgDTQdERH6byhSMhqPwP/ADCqP7j9fGUHXQj8VdJF+VkQuFDGyOZj9XuvBHaseNfmkgeQFdNtBN7to3c4BonN5/uPio5JrSo6SXQiqE1CO6r+YnH7Z5+3a8SQtomJ9sm7ixILNLnNd8fsPE0U2kOqVotE9qTIRtFj6jm2NV8jsOT3m0M0QLXprVWCMzxqNpIJyxJo+1e1Uoxkg432CX5lm0//ABNooo7VW0blgzi0DFroFaX2j9LIvAI8Lk+tVvPmphkicrvAP8SjRUAkZxyT9+/I8G/OepRPO3Tf4XpouikY0pB3biTRsmxdDI+kHHIVE1E//wBTtYggJjjlCqB9JIEYYYHPzWe9k58dGHwlF5P6lf8AiciaVwBM17SRQ3KQcfesY+31WPoLyJrYdX+HnllnRww6do1IUkqNsMW0EnisGgSMUOK8fOHkvVzmLrO/TJ7ZztUmxW5eAy1zt4B8fQnkKaDU+QvKs86NHKvS9MbwpFRx7hkigK4FWfkYMc86OGQ6cauRT67xPGkgG6Me0kEWMfUQa+D3FURWfy3PJPqZ11YicoJAG092CbbFXR3CrPFLnFloXgj1UUYpbDBFoHFEEbe591VVcH7+L+hjDdS9A6ek3rGylWFMLrJ/mx8gmyKXkcm9VTM+qeTNWNRO0euUqSrhyAKprJwMVtNk5IH2xCnkHXFGB18S5XaASFGFBI9uD7Bn5ruAQ7dT1OrXqas6BvULMWC57FsDHAY38il+9DqE8TRJFqH0oEm1nZpKyLNmr4sGjYG67IGb878EV5fIcysoTrGlUtuBQADBwBmPm1qsggEHGPFny55YPSfM+g1eq6nBqBCZaiWMFmJidOyg4ZiTk8V7u5fV6voUmpkWXVwJtP0gn2lSxLZG3kc4GW/XwP0I8uT9bgg02oR9QjMWjQ7QimN1a7GRxd13PyPFY5X5Bqkk0w1UzpOkgDBCSvfI/wDxV9+KHxdabQ6ttKyxzwFZJXYncw91qRtANjhhQPJJXivE2hiRtTM5llcHgNuyNxO2yK71XAsWuCSS0jRrEx30ykge7axsbdvwVvJsXn4OMjK+s8tdS1PTF0+o1kKqsY2LW8hsDbZugMY4ODXhbbyPrZW9MayJS0JUFxdmmFil5G/nvY/XxqZeRuhvJB/li3YIo2wobubrsM0b5te0+pmZmjmVIkEpGcr/ADMaJxwVYGq5wM1WOdBUPkHVSOS/UYVDgElwCN1kn+Q2c1x/N33N4gPkXU+5k61piFclWpa9xFWNvcn9T7QflWgarQrNNPrDpY9kaoVEhsUQKAAsbWxgjOT9WB+pm8uPp98uugI2qrML7DkWLsbqHYe0diDfndhknnnyjqNP5j6dNp+s6NysrFvaBgLQF1XbJ+SO4Pj9rPK/UD1rS3r4HKwWwydv0ce0ntXbvx4aPMUflibqXTtRFqIpG9YyRFmoWY1DkCqALA981QxXiWfSdJ/xiKaMQM408dowwvBAr5DWLW7+2PG0z6BU6P0HWr5u6k35lWUFiSFBYEq9nGDzyT8/uz/hvppYvMfVPUYhCGJN0Vvk5GcMxsUDtIOCB4t9IhMXmPWS6eFG1RwTe43TBaIwDQLAj5BFiqM+UV1cfWtc7RlVZDdPswCm73XXPHHb5PiLnSon6DJRayxUhgFstQCsoNG6LSDNmlJHfxxJAI0EbBgqTs7ECq2AWfg4D1zZUZu95Ny5Uq0MaXCSQoVSVAjJ+o9gSKODgEEY8e7piW3QU3qAj3FSGZMDmxj5NrvHZfGPlowdtJMmnVCwDKRJewHcQr1wBuBC0D3wfuXPUaKQa6dWmkZvSVVEaDsSbPx9f9x9ySCHqhVAR/dIcFihdrN98Amv/M4vIrw3tLK0s0gRZo104U2wAoljkWRm6IFZ9oC4uMqA2PpzprdVGzRhhKzUwABqIE0ayDXeiDg1Xip0Xo0q6KNWnDvCMNIKFB1Z6v8AYk4AAsVnw16eXWjWTpGjErqCXk2mi+yiMbQT2wBzd4HiDo51v+HIgVigDMt//dO9KPIs3YHFZo2MKXUDLPNHQZlXRLuk9unQAsKD9ia7LTi7rDAj+aqEvSNS4067msqHO0EhwaO6wM/6irPh387S65fyW3TCNDFEATaggNQb6rAJOcD6s55A9Q1E4g0DiOBf4QZQ0ldlAq2PwBYvGbu62xvQDoemakdT0saqWZlSwRhuPd9NVnteL5rwZ8raHUS+ZSopS0khJk3Amt3cA3m+bzjJNGlqZivUogF04T0Id30AUWXJzbGqNMcAk558EPLbQSebpEZdOqNJIT6jsjWBILIBzgkH7e2xuFq0PeoaWROo6nTtYLyupH1WWckGxhqCx2bsWMjHijLCGjjy0SKrNZpQm4lRdihlo+AMMe1bTvUnf/EdW2xGqYMfS2nd/Ek2n6rayF7nucMB4iQz+2oiHVnUOpJYZG6tpG6iTnltlGi1eJxpB+g0sv8AiWjTd6bJMoZWSssY91gAEZYN84PHHhrh0MsmtlQyu0jzoKC2ijaqkEjke3iuCRggeA3Ty6avRDYyIpUrHu+kWOBe08tQ4IVjWfDdC2ofUyMiqwkmijV/UtQ1Jtqy15AI54JyAVE5U/gBPTJX6fq4klVZAs31BQw3SEWCB2JBBBzzyfEJ6NJJ0OQrMAV0/p7nUKdnpuqkA2aF83ZJ28UPDPHJqm6dKI1aOARTKH2kAgkFq4/2FVwbI8fo31h6QQ0RCpAoVCM0Q/uFHOMmqJHyOVvoMo839FmTrEj7pIyAKEh20K5YnAyhrvYA4rxW1XRtV+ZKgshjBtSpAU/PFVX/AKZ8NvnyfXR9YctpREhs7HYoAPS4sPwQMA1ZH6+BXWdRMvUV9RYF/hC7cAgGyaF9rP2FVZuzvjdwKfT+nakdeZY1f2EuVNqy4OboG8ciu2Rd+DP4f6CeXWSFdqD0dx3FlJyK7AcCweMdtpqjFMf+I3SRYPT/ADK2BRshWNAAi2vF83WB4Jfhy0TdTlJOli2JuDNIy0bQE0CMYHxZqyQrATlboGDqPlWWfq5K6kQbk3rvXaVANmibPzzdg5F34GSdA1ek6jAkmqLvG38kYLMWRVqhQtaYC8ZN3V+GmBdAeroHOkMNFa9T2VbDPawKH3oHFmoonmOv0cmmjViHJAXK7jHHuNGgKFWBVWRdcZeVGtFrq/QpWj2wkOp0knpJEQcFY1Fk9gQRnBNjPhG0nR5V1EpVw8e0mzZJBINgEXtBa88e4HxsXUDrfyrhYJJmfRNbAmwdqAkmx7qq7o55IAAz/QanWnqeo3xpupm/5hBFBDgb6AJo4sG6sc+NOO0AOl6RqFimdy7XGbJU/IzwTQJz8E9vFiPQ6gdGhZkYrJPYoXdKSSRWe/a/q44M+j1En5HVWumsQ+0llbNqOCSL+kEc2ecAeOJJVPRGWVI2PqoK59vomrIN2DkA5uwPFW0j55Y6RPqegxhmXc6uyBS7FTuOSP5hWb54IyRuqw9CfQrp3bVH02lorGAzDaHX6fn+ID24+/gj5S/LHy/C8jaDcxLMpnLKW3kE5JsEFvmyxYGiAbEAH5bSx6dFdzPvYBvc21CoxjuMD5B/RsvKzatBc2gkSWGV22gxS7bQYO9RmxyKx2P6g+A3Xeif/m+p9bVmM7gAqB6oAD+UgZIJ/f8Abw7CXUl12Q+o0sEo2pn2FiMsvILXZsizYAwPAzrh1B6pMZFkmckWwk2Dgdv9fjOKHhSlpn+jmb/B9RKASNka7aOSCRf1cBWA7dgRWC5fh08LdEDASmULIE99jCGzd2RzV4okUTyidPYnoWvFzMAYhZbk7jz88fpZ+a8PP4bayRuhtHWp9RpJGTZIbrZ+tm9oNH+kfr41yD5U/EDWSDyr0tYaSQ6thg0T/Br+1UDyeTZvwN8yanUy+aPLcSKfTSN/UDSiyCWJxwBV4Hwee1vzho5z5T6XFvpF1RsbwDu9IHJAGa7f7HwQ1+lU+Z/KgIYosLqsa0L97XQHfND9vHdjdRFD4Oo60/jH091SNF3RudshCkiZj2I5qr+3jc2m1UjaYyCOhQUO+4HIrcWPtqu+Bto4vwm9IhQfjFodRLGXcRRJuIytu/8Aevabv744H0Zq1R30scenk2MwBZoyCc7aFDuovH27glufn5PSpGZK+sbVQByp2qx9RixFEAsxvNUQa72bB91zw/4gNbJI4CuHPtEzArRNqCMcsRn54okNqUw9bVQb4piSLKrGWOGJ3e4MbDA5ock558QCMS66Vdr7ZGVyWiAwVf5BwKNG818ZHN+J2enzJ+JWqki8/dKaSRCP8MlMYMhoj13wBzRyOeD3yPCZ6szfit1Q+1yZtojYG2IVKFCr+kkVQN/bxoP/AGgoFf8AGPpUsupLSL0VrDqUcD1pKwtAk47mzdnv4SOlaXZ+K+ukEwlc6itwJZj/AMs5JJscd+1Ht49Djs1KihH4fRdVEfXWhBlkfUkkLAxIognHYfT/APHj6A/D/Von4e+VBJpyxg6XpGIA27QIo2JbgZILD77b58ZR+FmnSODrOxLUaprIck39r5Jx/YZF+NT8kSzL5W8uRFFCroYPTBKE16aABc3TMpsYBv3EBr8Zc12cPf5hm1UMchG4KAeaFCwK7X8Ed1s3QJHQauZde4Zoo3YgkEACiTRKrkVV4wKBFEYW4tRPI0ZLEH0MMSpo+0mu7WHVtubAFlibBHTSyO9Haql7CIVsWqk8YNM3Nfe6OeWxQd1iSdesaX3R7JZ7BKWd4ACmz2F8LVndwcCh1DVL+c0xmXcXiRv4YIJJAr37hgWaz2GeSIPNRjh65o2TUP6kk/0hgn8tqCSBtNbgLv6R2yBPWdY8HVtGY3dmMce1g+MIpNEEHtyDfOc+NJOgtHXaP/FNcknT5ShJwsvp437sgYo1VfY4yKg6Hq+mS+YEiHT5keJmcOJVa2ABUEDmxQ4BLE5wAKkPUtUnmDqMa9Pdooi6mN4wtgiyLL8/HxjPjjy31jWT9W1sk/SjFpAhAlkQKoOKN5wTa2oFbqwcmpiD50nU6ca/UeiplJYgXkAAsxAxTZZTzwR/R4J6DUCPTaj0UDB22sBjdkGzVXYz7gByfg+F/p+oC6h2/LbULFaKEjZ7m/mqgbHO0DkWAw8XdHqJkgJ9Ji5jdsKy2ysxJ7GrB+1MoAF14ysA9rNTJL0h0td5UAVvEjrtPbnAujVixXx4VdDPqBqtZGTAziZkcLHQYCN9o2ijVKRR3WMijkmNUobQ6iF/YqA0ooDbyLsEAYIuuPkcpnTZIxrepRx6iSSNGkUEyBb/AITV7PvYrGO98+DCBO2r0/5DV1p2lb2kbVCgAMKxuxQHI5si6PuoavX9PPR0km6fM2yM5/MA4yzbVYUAbNX9uaN0Y+oSp0zqu2KSURgnA3e8MMn3D5JyLqhyT4j1PWddB5cVh0ySWQ79lRjfwDt2hrGKNA2MixfjXxDr1NDNJo9VD0STesrMSZAw4IAvd9NX7izdjjwUiTSjXQyfkhHJsAdhIDdgZxRA71uwD2Isfuiavqsmh0Mg6F/FW9zehZNk0Sy5xfY4Iz3ANA66d1L9N1ELCNBvjjol1H1j3DtsNDkoBigQZXQVNDDOesaxl2o7lt5kPuohsMbJrnAJyRYBAHi50PTSxde18itEDJvD7M0SwAOaNZB5wOPF+LSytr5GZNTGnuChCqqwBcWtEV7SqA0CR+5EWj0skfUJZDM0uGZfeX3mwVbIx9N4zSgDIYmd7C5GZRNEB6SGiCFPCgo1UDYG0tzg4GRVxxeuMKkakt7bBJtQdxIBJyTZ+Tf81EytHJGl79QxjPs3kEH3AZrgkDhbxfc148bSuJiiSTMgstuVSH/hqF3EKTnaRkcfFgGPkIXLKsylYXaORiV2k2aNA9iTxXfNiiQrtEHCykSRybtJ75NzO1BnDAFiuSNzUbBK2McKE0DmSvUmYOrJlVG7ao7AZBbdwALJxxua1QzaeZl1Mn/7rbXbg+5nAvNk1eKrN5B3RmF6FZQ7RFo1Q6ofUh3ltu45HJBTBAFlSbvxH01JE6fATJCIhFIytsJJqVC11djA9wAqv0PjuOJvXLCcrG2qz71I3sLUkAXkhQTz9RBprH7p+nDxaRDqm27XYfxbKANG+3/xDnK3+nIj4Okv8QvVhOlB1CRiJITaxlWAVqVjZ+obQPkFXF1gA9aZxptHbhh6Sr7A9lgrDDWAeBgG9w7ckv8AiRpzENOTqZR/Cg9m4UBlqBA4+MVSn4AK51gRRNopHmkttOpJL2RagD574y32+PG+M6JNPJIvWIIyyiQRQOTtG1WBBJ9pAoe7NVRrAs+LnliWJvNsqyLKiKSh2miFWxwTVmlAPAqgKAoS7lfMWkQNqDJUIYmRXBIA9wo1kEc2MeCHlHU+j52P8OYory7l3te02Ks0QTxZzV3nPigOapnfXag6chUIJChiSKLqB9V39AFnseGsiCD19yhEhQWWXaCQqGlAxdd6+xugLXxPrEaTUtIZdQS8hBYteGLXRNtYwTYIsLyAajXTSmZtkkqqCyj2rQJkJNHa2RYbNcdxdRPYcaBiZtLtMVrKEVk3Y9wJIo9gN2LzRskAs6aYSj1/T9Mh5IPdGx3MGCbQpNYDbFyCVD/3UYY3GtVvUmpmE1EAH6yQSM8CqvjbfI9rbGj+6RdTJsSaAng2QEBpjdmm+q647EBYy9nHbK50AiEkIj9Kf06jKtQ/mrth+KUAMexNyelJ+QCvJGEOmiWPZGWLKVkAxk2Sxzi8DFkGMQtHpQHmbYY5VRFcfUCSVFC1sFjR7gAjAuU6bfAytqfUePSKQyS4bMi0Dkbc1YA+9cGSpB/EN5j1tmbUQqd1ExLQDFDwSaN7jnBord4JH9XOq/OWHDFhaEBwpNLZtjRAN0aICk/FeLf4kwvD112bVzuwmbLNRwoAuvse5HIqsnwH62kcPXHVZ5FkIChw6imv2gnAvg8miATwfG2M6C1G+7zJqIVOFmYMNnYoQRV0ScKLBsjPAHi35Amhm6hq3mEgBXeQjkXwAPqsG7Bo3XFdxOicf8VTIo1IBdwyGSzW02ARxxwM5xkDwR/DbWND1LVh/XKjTncVY2DYoj3CqOcf0jjNvKdHGiNPDH1zYySPuf3Kr7tx9QgAgH+m8HJxzz456eJJNdo5IvTWQO21XJdS/ppZ55GbzYqzZA8Q6qRl623q6adhbIwcszlSx3EZ4KAj9s44s9Nink18Mk7PppPWJbc+1j7YwRnuQV4IP1Y4Aw1oPNYGXpzsskPt0V08RIUFEF3gGtt/cA5G0Vm2gM/+I62JdSCdr+3a1sdq7TtBsk7V3A3e0g58aNrdIW6C7pqnTfoWYsj2BYReDmsfONo4wBmmjjDdR6nG88xUIxIL1QtRtI4+mwaBHxVZ040vA035XXu5BQQMGtN1tvAApmxXHahtsHFV9ROw6E7k7hLMMsDi0FsTuvJU54+rFjFfTFD07WKJJ9qxUyrIqlSXFHOavgAY3ffx+Mrf8OJIBN7dXa5qrWyMcfrzg1/N40DSvJz6Y9DjYiXeIxu3yVtT1FFE3V18/attYvaB1mj0rgVsnVW9VjtW1cWAD/Kow1isnwN8k6qSTyxpoli1ZkWJvaj8r6i4rcRYs9uW4oV4v9LeSSOCNS0OzUBlKg0WCksbNgACrsEgX9w2GXtS8h1KySzFo0k9KZpS6XtIYn2kHsQ1ZJG0nBbwM6nFENdIJdQkZpaXgAbRxYBr4x4vw6eRS0cMzF0jlXlV3BZCdu0i6xdfPOGB8R6nSNLqHaDqOnjT27fX1BUsNo2kAr8UP1B8IMF6LG0/RpSbG7BIOcSOc3zhTzYObHFt3lCb8p5fCyWHZhus4sxrn/S7P27+Bnl7prp0kLtViXGxgcck0M33qiL+a4Jv8o2n6UqGM2u4NlTZzdX3vPb9qF9OVlJmI8qafqXTodO4fbDICBgiyrDjHwf+iD4u9Q8rEdb6Lq/TDjTx7UFjmzg4oDJ/0u8U9+WtLpt7JIuFkUYdCD7ZM5zWDxeK8E9dpdP+Zh9gLBWr/wArC81k545/fw/xLKnTP+h6PUaX8VNFqWhRwuwjG7aPWJBPB4LDF9/lj43jULqDFo3KxIvsoFgDTMtWaIAFKb28ng3lC6D0xZvN80iqWdGhXP0nJPev6f8ArvofUV1qJAx9IFGZwqqWP8rZNnNq18fS2TycuW26qo7Ys88AeL2UfUBcGzYJsEG8rV5PcnnxGmmLdUldqdgyOH9VmwFbkjNnZ8ZHFY8X2i1Eer0hfYzmPaAVF7gVPdjkUB2vAvutOZFPU52kWJ/4htmAUjGM7zVhSQcE2PkMuMvZ185/jrpdPH+K/TvUdPUTpVbWYkV6jGzVX/8AJ8KHS9HDF+IOrKNb+uyu7FqvapF1nmu/P24f/wAZl0qfiTA6qpZdIwMqqEjYb3oiqBOL78V9ir6GGI+dZpI48A7vcKN7VDUPjuf1PPjvwt8Gd9vPIOk26TqsOnkRd0qyFyu7cd13QIFV24PBFYOkeU5A3lzpUXqUp0kYeQq4omLZyPgXzmg303lO8paZkh14bEbTY3ckYo5+xU1/t4bvLq//AJf09XjDTiONWUxjICoCti6BIRT8buBm55O4Zgi2vKGkDIr8+oSoU7xuqs3crAfDA3k14m0foiWKV9qkGnYuaP8ADvF5Apm+98m/qF6V402gShqtgwJtice6qP01kZ9t2KpZ4PSMZeo9z0qnYbIr20So2/UpsED6fpsAY2aUWPN50X+M6NkZ1ZNQVKtxXpkBQRzxRvNiwax4EdWjhfq+k2lje62K/aqPbk9yefv4N+a2gk6n0+WJQHeS3VUYD/luR8YqhxkDuceBfWVh/wAd0TpGliKiDuJPsXi+fcT8jJP058aYgP6XCn/EHVFlIaM0yqo3AsEN8/O4LfGTQPgt5Ijki6v1KRRuKxgh8KVoIN24izk3WO/Nt4H9OWNfMPVG9vpsEO6vpO0nHxz2/wBK8EfKxMOt6t6cIQEEAhTGVNIQxyLonvgs18mvDoNunbTe+RUhWMSN9O18AAkYq7CyA82Gu2uzZEapAzOStbjMwIFsN4b2sLP0nPfexNiwR6WRII5PaHUAhzlbs8tivbQsV6dAir8WHlUqS7AF7LKzqm0MWFZK3ksbFckHsVzsC7rhBF03VRztISjMBkFh7aNX83k1XvBzyc/0Q0v57qYSVyvrFlxmtigWDhfnvxQ4Hh3laJIyHCyKR7wX9SxtB3EWaJ2tmsK2DYop/TFiXqPUMF0V2Kkggk+iKI5Pxnj9Rfh4gAeGM9L6tswf4lKQVJA4rg/y/piuAfEskKt5WjbdunEJViFF+1KFHvVWOPpGe49jjiHR+qwhY1QNJs2g4OD34ODgAWOcV47kRP8AhFbjBddPYqImvaM44P3PBOK8ag4+XlZOhaMbRujGKTsGcMQuK+gkAEfTyRsqyYJ1ihRYyD6fpvVcguu0Z+UsCqZmHBx4g6RtPQ9NG+1F2lSAzABQX+lQaP1uAOBsb5I8WWX2K1RbwKNBqUgmge9C0x2ugLvxiHMxZdVI4JAFygkHa4BObv3XvHPc97oyRV62pVyVWJpKJdsi7IJ7nahrN+3n6T48ZANS1uELGMMQSDQAAP2JI3cni+BmTRhvzc0gUswQPgkoRakLZ4474wt5UEgRPFTFE2Kyt6RXdgjNWKoAMu66927seIZIjNHucxMACxyTiiTY2XkbSf1P3Iv7Iowjqq+wepGdiqMG8Ej2jn/8bfD3XaBYYmDyB1VgAWVVztVRlltTg/uc2VamFeWOZhKNspYAO3uNg8CiKypYWM7ScWNw8OMMTyRs0jojAYIFH5sDafgUPnjgnwmyxxOHqfTkbfc5sYIIU5U8isNfFD48N20SQagmZQ30kEWFwb4xYrOf/iMwneM7lb1NxsMu2RjQrtn44I4N8EjxJpkP8NrjbchLUCQoF2cC8ZP9zV3UMyDcG3g7gGb4J5zf6jxa0aodVpUV5JGy7VRYkH/MNtkVzfP7DOhnv4pCK0NU4SGvg7XwLPbcDdnkmh4V+rsVi0pRs01bl7FCTj5JUGjj4Hbw0fisVi10Tqm1hDpyBs2knfYoE1We5HfA8KnVmAGjYFVai2bBNrQ9xGR7gTea4zXjow9FU0p3eYIIkZXUwIQNwIB3rQF4vnNdhmhfgn5RGzzp79yoSWWyAFYiT22c9wP7n4HgYxU+Y4HYbl9Ndyry67rGLH6YN45yD4veVdq+bwQ6mMRspO8hThuTd0MA47H9BWXozRrgRrJXRqPqOxBYmiK2mq9vsaqAHGN2PFUwFqkIR2TsjbjutfaPZjJNZqwv7kdXGrvLuZgzAje8dNTewni77VgnaoGCtVZY1VN00iC3b3ELS7mLEWVtu2ByBigy3nA400cv5mHaGYJOvuFsCzN9XYOpoi6N1RxsIbUiJh3vLGrA/wBR3MO/K0Lv+3NWB4UdJGp1sLK8N+shejkuWBIvbRPNdyTk1nw1ABtMsizp7pAxNEihtIo8UeBR7f3jP2EksbKxcPb5JIkPf/X4znF18eJ1Sg62jKyBtwBxdVx/+H+3Y+IJY9spAkAFn3AV9r/vkjxbgCGSRYi0ipASygBhdEEHcOA14APB/XxnQzD8RjD/AI6rrat+ZB+RlGBq/gGwDZNZ8BOpEr1GDIrZRBHIDIKz8bz9V/tz4NfiRUPmiRlQrWqCj2bTXpG8XeP1JGK7eAevYJ1mAgqpCbWFUWG4f3oqfuSfgnx1Y+iqfSHd5k1SrtlVGQrbH3DaxNfGLxQzffHgx+Gv8PreqSRnYhHCk0N9bCR983/8m/ATR7T5g1RkAZStFVs0Qh95BN85xjvR9wJb8PWrrGuPqWpjG0hiQfpIIFm8gkWMkqfv4eVmjaNEmnOsDyLSWAzC+CTY+CcVn4/Tx3GA8+xCiKN2LoA1dAdv9L73ZPiCAqNZ6qIGcEEF4icKw+RnkfrnHfxY0+xpbkPpqqnb2BrjgXgivv8AbkctCLqwU9H1BkTnTvYW7qrsX7eARmxQOMZyfTbR1bXBGsbgwscEKBWeMDlsndXOfGt9YVW8rahzG7A6aVgTGKW9q18gX882Md/GRaNweo62LbahgbA/yLeP0qrrJNcnxrx+iqvomA0WuBYALFIUAO0na7AgX9hxgD7d/XDt5ZVxhiA25f6tgABH6kfPAo3xxoZAen65C8bDYzctQBZjx9VDcPvg1wt9kA+WlXc3re8BixqSkoZDUaI+2LPxt360bTPJxiPlyBaBy24NXtO5jRo1m/8AX4rwU0sSlEjULGKshiQF77QKx2+AL7UfALye6r0DS7mevTP0qXatxN9yByRRGdx7X4NaWJA0YxGApAoNRIBwaHGDn7jjxy5ewnaEbGQzBkW7VXOewoCgKAFYGB38cpIYwQ35dvguATxXc8ePBH/3e/UVnDPQrjntx3z+njtIywtWZxxdt/6f3/fxIJvlXXwavqY6M4WJkBDSiMuBaEn2gc5/uf7POt6HHsSI9RiZXQDesRcZIWwN1ke1xY+3yPGVfhvq4H/ECcqFnQMrAqAytUTEi6qxk5+PsQds1Q0CaqAg6cRkUWUbQ2G91Xm9y0DZNZPc6cm5kA3TeTWg1qQN1NDIADvOmYHd76H1ZFsTzWGqgMex9AaTUKqTrvpkAlicXuK0Pt/MCP8AKTdA+Denm0w6mwWKBQ6gsnFUOT+mLsE4use2ppwgE6htMsYL4KYIsEgncL+og0Dxgk7fGflT0zlPNidG896rSr0n1fTMJLertaT2AAg0f6vtwPnwS/8AqAOrau/8JlhOkBpRrbJIYmwdvt4XOR2z4y3zjqtZH+MHVdMzh4l9AI266G1Sebzi6sk/ofAbyv1nWN1Lqas6CRVnJFj+pgCM3V8AAH+w8dswxuMliN9voTp3nOHVpDrzop40jDY/Mbqok0BtpR7T/wDiAzQ8Fuk9bg1WtfVRpq9sjqADICTtyALx8Dvjcb7+MG6B1qV/KGsmxvi9Rc8tgtwarGP2/fxrP4Qa6DXeX1knjBFg/wAWOrpUJH9jfx3+CMeTixx3YcoB5u6JH1rzGmu9CSQpEU3NIQ5UsTW4cn3fsbP38C4fK4XrUmoi0IbTtMDW9gCtjkjihX67vub1rRxdPX1d8end1sC842rk2MAm6v8AtePAbrvWdBoul3HDAxSiGCnO0foe4P6WT9ypn6hs30XQ/wAno9Vv0SLvkLD+L8kZoisi/bxRxVeJ9Kv+HxQO6RR+m2FS9pbbQP7Hbkc9yK8VvOHnXT6aFmbTB1WwaRhVVzi6NOP2PfwvzeYYdVoIyuiZmd6NE0WAXvm+eBX7WPG8wlhGhuox7VjA3Wixi2GfcpHINk7e4PA7YW6eqflogI9MSm9Nv8SmtdnxVklfgc4AojwvaB9M0ujVtOy74z7mJBo82ao5Hf7cZq11Vd+oXTxu0chINgHIsEir+O1g5H28TeOfI2967rJNRLpQY0AgLOGMlsfYqlibybT/AKPijr71HUYJBET6SAUzbuEVb+113sZA7DwP1qa5NXHGmr3WDeWOe5u7ApqH6A4oeOlTVNrUJmjaMMNqi+AarDgbsHJXnJ+Ae4a5o9O0fVdZqtvvl9pAPNqRgjPBHzx9zZDy10yVT1B4yiBwNu2P3A+3iiOykf3HfwG0S6kySh9RE2zcAoSybIr+bIxxg3fPPhm8hx6ll1imfcpCAhbK0Sy/fsDk/A7FvCtshC0PS9Sp9J19QtKG27ewBpa+bYk1tJJ5v3Dr/CdVHIiFG3COXYFjItjuX7UPcBe3gEYrw2aRNK2peKRY5EXa5HtUuqtmwx5K3gHtxXBbRLo9RrI0jWBhHK43IxNsVUBgQw+AO12CALO3nuf5nCNqtNqvWk9LTkhlYVdBiA5rFWD6gPyKOb5Xx0nqI1+v1MsC1K8rFQ1XuQ39u5Hx+vjWptHqJenR6lDGh9GxshYZIAo5+RWKuvvgZq9HrgdPtlRvVcHcYjgklaFGzgGv0NA2B40wzmhWOHpWsGi6hFLpGp9282AaNKcXzjP6WATnx5N0rUt5fTTNpyzCNmzGL3FVU0K+cACua4x41uboeoGtWFZQ4dfc3p2OQDi64K+3nIrdak8jy3PJq5NNIFjVY9/uT+W6A+4u6+T8c+D8QiT0xSnRoIZwg9rBlC4xuY9//AfuMcqD49kljEcZ3ZDNWLoWvAuhYUiuP2Iqx5s0+r0mjiRHiEY1AjYqxNimsAjFD9SDf7eFNZtbLKTLLCbVj7WNXRNj3YGfi8/v4qY+XYM+9W1AMZJKsALLYIZc4IvKqT85zfF7p2keaR5I1Pvi2DFsPaqgDHwTkgiwKHACl0YzyKxbURO2FFYqjZ7/AP6sceNF8n6SR+nqZJBsMgDEjtQb7/b/AKrxX4fQUx0+aXVMoSnIIAWyBZU/Ob+3IO3NC+IejahjsjkmDe5ixOQCLJsAHJUMci7ze7DbpY9M2oudYajksgyBQLBAu/dYNXzzkYzb0n5eSJ5oY4BtgkCA3W4FzxuPIuxmqPbBw8tezZ/r+kauKJoyZmWjVkWPpByB8qB9iFIruRDzFREdK++Sgn8XIsdhXf7fbw4dd0OqMZlheND7QAkLKGBYt83efkC89siZdD1Btfp4Tql2MpBlaEgkFAzY3Z5z9qBoA+FctgJllnlkRE0bnaeGlyzEY/0I+/8Apc3rSiQMujldlX6PUB3WLF+3Aq8/H70Ug0GuPUtnrM1AU3p7rNlsWaywb+xtRnx5D0vUM2rErbfTAG2SMU1qaHuPIWueBm+3g6DNvNkWs651ARDTNpgoRQC+76SCb+k2TznFjjxE3k3V6/qel0MmpTTiwpm9O0QOu0kg1Xf4sjjsGHXaaZuq6Sb1kRN+4+wBmHqRg5uh9VC7wouyfFrpMEsfmjTzS+idmojcsqUTX6vQ+haB43g80RpMugHR/hlPqNTB1NepIVI2rG2movTAYJbglhyLBGSPHvQPIvUNF1teqLqUkleHdsMVCyG77sgbs9/aeKrxqOjidV00OnMG7YzMTGxBZWRrrdeQR+uPmgLbS9Si1fopq2SNIr2mIkAgFttEixwf/TOI/EtujLA6HqZFmkDKlOFDRuPaAGr9PaQf/Et9rFF+mTxQBGLpSEERsoq7YLgcVv8AtgEA1Xhx0+k6m0U8h1TRusjbURTZfHPuondV1k44IUFf12l1aQLMzFkRWajGSNuwtz9xY7YNdx4e7sir1vVP02Iaz05NSkJMpJbbYViRbAEfzcj5PZhdjo/mn8/qdJp36bJE88jgv+ZsqEV24Kg/yVyOfH7rGnZ9PKqxOaUjItmU0Vs132c1YKvf1eBvluNoeraYGJfYZC+4UQdj5rsbFf8AWaslgPU7xnUg3xVLvvk8mh9if73deJI5YG1QjYyEspQ2bo8YJBz8DFUb4z5M6Eg+kaUp9SlhyOb47f8AXPEQgk6xo4ZY13OXEVW10oJFCscjBHbIskZ9aMtfjj5f/wAD6l03XHVDUrrtRJSbNnp7UwoyS17jjn9boonVcdXitlBIXDWL968CrFY74sAjk+N+/GLym3mjT9NKa9dJ+Ud2Nxb94YpjkfHwf08ZZ5i8nPpo36gNejHTRswQxMofbTEWR7SNvbAzeAR47uXj8M+p0mXZV0e1fMep3AWEB4G5fZj/AP2vjk5yPBb8O5AvVuobSH3R0Qwxkpdm8jk7s1d5Phdh6isDzdbWAEHb6kPrHghkFErRwb4GB8EgkOg9bHS3XqX5dZotaBCVacqVPtslipJIII4DGyc8+K/BmU/ik/3/AMDbUIC5aVhC3udiCUB5UEE/ABBX9R2GBd0m52l3xlWz32FhtNY/9Of3OFJOq6pNTBDBo9G3qD2bte44VFuhCaNCrFUCars66bpPWY4A8idJkQnadutkBFg9vRAvBNVnFVfiP/U+fPH+/wDgbVeqIU8vallR7Gnf+IaodrGM5BWzjnxkmjJPVOoRlNpFE9yvtTnnbdfb9+24S9Cnn6J6M7aSIahCqupdgmCCbKiwAOMcXdXao/4YHTdUmf8Axu1kRQofRMoW6N3eBWSR/Sb4BGePHhj1eSf3/wAGy7Q2dDrgpFrE2KBKm3oHAs5rAHx9z0BG/llVAADg5VbBXb7cHmh+uBiiMHfOXl4eUtVF0+SdtUOoB1DqhiEQJ3V3N1IeQK4+AKeiQQxQ9KK4dFYSE3grXA5+kGu9jsBW/wCFPHczn9/8Fs0+Xtao6BBpBHucQsQKAu3JoDvdAUcXX1DHhl0k8Mwce4hGYFR7Q95xyD/8HwjdOgdtVNCZL/Lx7SP6hRz37BR/ofnwe8nAydS1kcj5UuWLggb7INkdhffsvjDk4dTcs/v/AIGzGQn5R1DOGLEXuOMkE/pZH/t4/KYiiksFwfqkKnk9u3j2fTa7e2n0mi0srbvY0mpZALz2Vj8ePV6N+IbqG0/RvLJTsX65qFP9vyjf7+MsODPLuDcjIvwo1Dr+KurgjhEsmFU0SwIhADfPLZzd0CQbJ3WSaD/E4ydPJGvpm1pQSpVmyLokg9zwADeQflb8MvNv5f8AFnqCrp0dGpvT9XgiIDBrN1f/AKCxW9nzwsuv00iaSKh9L+vg8krZUHNnLCs7jyfD5sbufocPUk0n5o7hqBJ6QognNCzXu+WoH3ZyCTg1IxKZ9XEjTKS0xWMIu68YAB5zeP6b+SFqDzrA3US40oWMLuP8WgVHJwBeLNHcSCAe9Q6fzXC0LKYVKkkEHUsGzVi+QcLmu95oVhMKdrE/PKz/AP1361GJYyCmjCglSaMY93BII3A3zVHwpeUJpW1nWYZJlKrHOqEsKWi5/UfSM4NVwODvmxl1n43dV16OqQTwaJmiDbin8NAa3A/Ff72cBM8mS/l+p9c3s22p1AsBx/zKJBwaJHfFfsPSxx6jI3+VZkn/AA11EkyKXjEr/Su4AK20cUKGccUfuDvP4GzD/gmPdpA0cbsNyxjaaRcmzVUrXYu7GMePm7yl1WLT/hfrY3LsxjlAKBRkq1A5scL8/tz41z8CfOrx+ToN+mjYu9ep6uyyNpuguDYx8c1YHjPlxvjaqNq6dqNmkl9JZty78CifpW8A3ZJGKPP2BXM/OPVNTRjTSvIq1k0wNEd7+w+Ku+OTuh83g6SdG0Ma+oaCeoMEjmttAZuhj28C18KPW18xaxy8Wim9ygrchsZqja/pk4wf/EObGXe6oi+btZrf8PkY9LUmmBqPJQFQCCBgduf9PFotJF0vTj8uhtwrAKCeFN1Ro/6f2Pjzz5ofNKdJl1B6fqRs3NXyTQuio7Antj4PNfqUvWx0TTGPQ6kbZEQckjK3WM981yf28duOtFoQ1/XZtLLoHEHpgxsUdFAUEHtiqujX61g+CA17arzVp9JIWX1FYoRakgvgAAWa2/rZx4ROtjrB6j01G0kwLwsjBQd38x9wrcewF0OP0LAqaoec9GGiPvcAX7gG3nb2NWSo7gE/c1OV2NC3mLQxPrGYyqiEMbMdjLWSNoo4Pz8EHg+KjwKOsyFtY6sfe4J9woHjAJP1AH4HwR4ausdIj1szTKr7WVshiCwbabNnmmHNHsbAyOHRY/8AG2cSThhJZCyH2nNmr+7YvPbvecyhhnS+n75dVWoBBZ1KOSNp3KdprgfYfJoi8MnkbTJptSXk1RYs9qzIbyCMk1R5yKH1X3UyeVOlaeOfUhWcj3gAy7gADZog1QyQVPfw06fo+kijfURtJaEMAWyTVcnjAHft8ZDzx8sei2vdG1yxax5NrOFplNnn3LxkjK4K0aI4Iyw6HqBOh1ipA++lPtIyqszNzgcNgBQTdV4QxqPyUgsmQAFCxf8ApUWM3fO6jn/+YHt/M0kMDr+W/hBySTJi72gAgEEbRizj+3jluF2NmrWkHRRI+plQMyMwVSKK7Qvc+3aQcLWf1qLVdNUDTFNSZS7Ar6Yb3HcVoAiz9P2uyDfdOPmfTOY0bQyxpvt2i1DXzZIqs+6qujQur8GtV1TQSJAPy8jlj6Rb84TbM7jBAF4BrgDbR+o+F46PY7L05DrI1GsEilNylVY7o6vdtP8A6n+oWM16miWLXSf94kV4mB37T/zLwM4sgcnOKqxZpwa7Qt1KPZpj6ZYOiJqGA57HPJUm/bwaxdW4X0v54gaWVhuIjRZjatvwQRn5Hc5Jz4mgh/iTDIYtJINSfRXWIw3Ix3GiBRN19PP3PzXhC0cCLrZlXVu5BJ2Ae8k7au6u7Um/kdwT40bz50xdY+nQRSLWrRgfWWywuu6g37PtSmgvJTNB0WBppWV5trK+65qUWAKILAV9Nk2R+nHRx5ahK3ltIo9Kf+/b0IVlbcbO0t+5Io1fdRz317yQkMfTkrUKzEHIU5H6n9sccV2rK+j9Khi6dNteZgdvMh3VZCkHt2GMHb2HLx5Yf0enttmk+pkFse4BJJ5uzd2fjmgdvKegbtLq0hlmIVmNlVNknIBzd1hv0xxWPF5NeZeiyqkLIPUuSj7QNqqMk5yQa+32yoTdSEMhJFo1GzIKHuIB+MEbbus/FVUl80PFAgk0dIuRufabIJPauaF2T27HxzZ4204burKJmiifUyqd7PVMAGYMrq1WccAc39q3V9V02FOoRA6q0AtmVWI2FCxNd1onH+XjApTg8y6WfU6dG0bxKKojVMBu27bJrgmyeRkkWRXgseq9NbW6Y+hIY22e5tYwsKqsxxwTYs3RB/ygmbiNjsXTd3UWjk1ZZhW4oGbBODVDm7s9qonFx6bSRx+qw1DowtAQp9x2+8Xf3uhZII448Q9N1ekPUSraZ3ABGz8yyij2P6X3IJvIyPE2kbTsWQ6aRiUpSstEDabzXcVyCABR+fGdBX6pp5W6nE/5qcLY2LWK3r9VnNFlx9q58S6bTmDqqfxpCsTxiiVBG3aM2e/ssCrDfbHnUYhH1FZDDqgLJDLqKHORVj5c47Fv0XoSjSSJLHptQREVYKZrAI2AKRmztb4yAB/UPG+PYPPVpTqepFX9SKJ1G0kXS2oAoEUCw7n+bwJ0WmXWaueY6smSQmQrIrWW2AkLyK9p78X+nhW6h5njScjU6LcclqnIItavAsmyf7eLPl3reinMrzQSox3AodQdv0GvaRxgmgawpzeJ8exs26bp6fl5guooA2NwJDLgmscZBP2JJ+fAjX9NWLRGcTEqBYbaaIF7TuweQf05F8eJ4NdpRptRcJWRCQS2oLFdtlrsgE5onjAPJPjxptLN04Vpn3lzTHUE8qcEED98AmqNVXh5kA6jQbNO8THcaoq0YDhhivsRjkH9awQmjikg1zuVRkRZN/8ACBF7XqxusD2/PdhxXhx1UMJ6cWhikQg7d3qkAMKtuD3on4vKmwCuINkkxGn1MbDfSvNe32sOxJGK/Yr9rWN2BnVztalUVmDx0NozbAWBn9f/AF+JekahoPNHSZGhD1690NxwhyMYORm+5onN0maQRgLyZYzYb5cX/wDq+5GKrxF1PV6rSy6OVEZ4ot5cNISKI2WSOcX2PH9kbSPOmpaCXRLZVXDgtmgd0YAx3ya/+PGaecGL+WeqSiVgr6KVgVjB9ohJ3DF8tXAFE8YBd/xSkZJembbX2zHeLGbjFbr9oyWujW2+x8Zx5yK/8GdcleWcBen6hiGFEXpySaJwac/uBZ7ns58r+JpM9MRE8o8kIF1CNtaAFbPuXcWPHJ/mwO3x4tSamQdF6OwkDSCU7UN7hRFYNHtwMfuPC08iH8OISur27G03pqCVr3EEgDgUBx3qqqvFjX6hk8u+W2EnGpAN3RUhTYxgE3Y4P+vi/Hsml67qMcfmHpojnDWjltnuKWgIYgAkcn/fxv00unfpIYLEkgtSK2kUCNtg/JDc1XYn6vmjrmrI819Gf09/qeowDiySfTWgP3sVi+Mg39G62ZToI2k0rxsWJDVXAsAEknaAy9gDQwM+OTl60qL88+kB07xCAEOdrjlr+DjHFGwMXg/T5qvTPVSYhp4tyrfsvbTAZoih7uLsFcC6Pj3UzeyP2T+n6zfSe/F2GySWPBvuQ1kmtq2k/wAQVjJLFvjALsFoj1KsWeM/tWDXu8c3tTHf+0RqNTpOu+XPQkjaN5ZTIqVVjbmsjkdqUEn5FoOq6rq4fNWjgLIo9GAINwqzusXjg37qOM9h4bf+1CuoXzB5THqmPdqtXYl2qQdiUKN+33DtX08ceMv6lPPB570oMgCGCCUxggD6WNUf0GOOPgV38c/+bO+2j+X+sSyeZ+pQyEYDOCbwFJ4vBsEZ4x+nhy/B7qS6jr2vgmQgJLKrFk9oG9Bu/axgZF9sVkHlSRT508x6WRo2jG5UZgCATdtkfFDNjBHGPGjf9n+ZV691iNNJuQPKWAjtlAkAIIBB4UgDP82SfD5fk43HTfko+o1shor9KjuNooCucE4H/qAxQavTIlb057cf6eFLTzonVZlWN0YAqVBQZBUC6IH1ckHk3irEmp6xJBqZUIkvcecH+2K/t4X0/L49HY+OPI5UfixqS2gleTaU9se4AmCqA2k9xQHJx38a608Tay10TsWXaVCgswINV7cn9Qc5rNeMo8oSaxfxN1aHS7WjCitoFVERRAHJJ5558ah+Z1aTJL+WVdlOF2BcUW4Ar4+b+KA8HL3Z+hQUi1Ma6v1penykIq1cdhiDd3WMGsZ4v6j4/aN44UbdpdQpAdadAOFUVezPJFcdiaLFqaarWxyN6kFKB6bHYFrFA0O9A/J5zz4l0utnhgZjpYQdts4T9AcAAEUFHwf3IOW9GQepKD+Kesf05VYQ6UFHemUqNpIvPY8ZFckDwi+W00SdU6+W2KrGb1FdBt5lNci+ecEXXIzomrEj+f8AWbhGjHTwxsqtd0q1YAoHjgXd3XITukuY+r9amRH3ONQRhgDYe8ZNZruQbycE9WFTVHydL0iP8NtWsqLIn8UA2LAKvfBr4Gaz+3jX/wAItT00+UV26KXYZGssuDaJydvwCcn5rjxj3R9YI/IGsqBmJjkbYSTYCuMbTeMc/HjQPwl1OtXynFs0121gMoegqLkWM8HP7cE+Hnl9tORqnSm0TOhXSyNnBC1gjg4Nfbg88nINwaOUIpg1M0YU4tKvHwbs3WObDfp4ROlarViWmXahayQAbxVgnn6uSPj7eJtHJppYJQ3UhC+KJEhJFEngkbT7b54P781yPQn5s6DPq+nSRy9VevTZRZsrtKEfIFg0b7/OD4qzdASTpul//MHaNZhvZqO4gKSLPfKnP2Hhc10fTp9BrFXr2VX3ASliCT7QbPA73tHP1VZJA6WTTRPD1KW4nBALEk4ANnII+ocjg+NJnqAQ1flvSS67Qb9UxECsK2j3WPjgdz/1izq+g9OfzHpdQiICrH7YsXdcAg9hV3WB4q6qWIarSU/qLHFZ2vg2W5NnGTV7Sc8Fj4udT1+oj6zpGjhkXcy+xk2izIdtE8/tzyfCuUGhbXaADY6mztB+AKIOMkggteP9hgYdPKvWGwAizKSQWpKDUaurFXmwNuPaPBPX64rqhHGzKB7gavFiqPf2lTk/2x4ojWSP1KMe8BwN+2P6LFmwwA/qJ7EYvJ8Z3x2FDQJqtNLqVpSVLFs1uKkCtvJFnggXRzd+DnQtZLNotQFJZlNgIbawSaz3+BzYo48CF1TMNXuVgiBrjKggHcrEEV2AugOAP08XPKnqsk7MfYzLReiDRa8kn+/xdZz4LlqdBNrYXYOCpUoWqlawNkgsYJxQGf6A2LFDG09HOnmbLgoEus4/kuzsODXOT9Vn5YZmllMZZCIdkb0pCn3bRkE/zLwB9IGe9KNp3jZo4VkSSWyhjQ/VISF4s/Vxjl88HxnswHUrGI2lbRTGmUuRDRX3U1ErRN7gAc/Iv6bcWoiMWnY6RopIlQuuwKRtkYkZWgtj55IHY+I59TO3RvVbRozbY3DMA1KAKonAU7QK4zWAB4oLqphKqTQRkiPY25ABRJGfgEGsfJIzkXJsjVpNUryxLtbAMbjYTk7ABgVRC4yRwMXt8FYpz6+8PGCrA26kgHBF3/tR+ofp4VNLq3kUSSsKMW53IP1nnNe4ZzVV9795mHUW5lmZgN27C0SV3GsDgUR/5WHF3llibvr7yMYSpLbtUgcAWw9xBusXwKIr9x4WdB6s2olW03N6p3gyEAkLkX2yPk+8/wAzC2bzBG46TDJDqnLrKFYVllCkqdpAq6OR81/SCuaVJ118y27xe40I1K4A9m1lr4FVywIugPFY+gp6L1F0EhG2hmt2SWvNC+KPwRuvgeGLy0Hk6Uo27h6uVU4K0FI75oduAxPNjwA07Snp0jGRnAZAgIBAADjdmzYLDvyxs8HwyeUklXpoWQ0u8sFc9ioFd+c/F2OPFW9EYtH0ldXpwZAS+dxC7WslSfmrz+lkfPhX6p086WQiPTvIdoKBU4N3tG1D2ftVUa/lHhz6NLJGkrtuGQSSBkCrHF/ytV1d/v4EeaPXGhciJHXY2SiHIRs0RyKPxVDmiDtdXEEnUemFSSPQzMC4CN6FXakqBijyt1fBA+WIGeEzLLFAYjQFFaIPpBQCSPkmqJ4J+PFbrU+pGlVxpBG5lNuRbKzAgCzZP1Mf2BGb8Uk106yyP6McbgKLCqu1hRAB7ZUEAZsDkYOWgb9Hqlk1RdQwVlwCjEggsxugBYvk81y1eCOllZZxIrKpJKqSCbwcA9zk5/XJOQs6TUFZS1KAGUIdhtjyMbc5GDxwKXadhfSsGI9SZlLnDbQd17RZ9tHkN8ZGBfjK46pptRG0zwyLJGxaQHg5FhjkHJ9v35HzZjkiZIwsymwBuo2wAC4JN3W0ck5H3HgjLp0dI5vUJdyCRIQaINkG8ixX755BA8lgagV2mh7QUFHNZHHds/H7g6YFSlroxGqI+mlG0DIhLDcMcbRyAcDPFt9RHPSfTh1syt0+VAUZTaHFoKB9vf3fF2MADwV6q0665Q+nBDAhjQBx6bZoZHHANE38UKl1MsXUJwNNDGCDuHpgABgKOOAQAf3P6+KnsGKCeKFWBUqt7rCg0PbRAC8e3GM2O5seaWUjSLuUArQcFTkgrjIs84ObuxXgbFrXMYUAITGSBtBJN3lQP8zc82efpPOn1D7WjUhGZV3qMgYsC6qsk4r6ST8uuSCDolcaX0zMi09/G0gcnPxwL/8AkXPp5FaYoVEZFckbcMTef89cGjZrxc6c8Ms4V5pFVmqRaYbRu7ELYrb2733u+pdOY5nAkXdQBJVWO4Xn2/ULIOO+Qc+MZ7NXJZI2jeKhWRWDW6s9waGf8q/I8Vety+opURO4iYso2klhvJr3LxSsOCOObxd1UMjtCqg2HFlQpztIJ+LFrwD9Ix4pltUeoyKlPIr0oKrj3M12RV04BP8A4r5BNbB6/ExA+p6WhUFGWYNYxVxn9e1fGc9gUDzjGs3k7zD7S6np+pBwoJJjYHgUTVDg/wBzXjSfxCjkk1PTAm0KPV3Ems+ys3j9wfCZ5rYHy55g/gp7un6iiRu2qInsAAfA+1ZNCgR0fUf63+yZ6fJGsgWD8LQu92CtpSrb29gLN2Jo9v8A48Ves9Ri0/l7y0ry7QusEgdWI3AqnIquF5GDeKz4Y+sxsn4Y08O5A2naowQR78kc0b2ZGMDPI8L/AJlRT5a8uodPqGC6pSu1WZR7VJyFP9uDzQoeOjHshvzJ5r/L+b+gMI0Eih1cGQnffp32xRH6/c9voxvPCN0wRfkUO2gy+vZUAHNlcc9j3/zEePmDzpsfzD0UHRyuAjBdkfNJGCaog5H7+N01U8RVT+UeM7y6ErxdnHsBqqojnkfVjDmwmocp71XnWMmFTpkLqQGdZRkkV/SDX2JFbgDkMfHsvm+JuoSFYU3UoYNqGyQReaF+4V3zZ5z4TxKpESnps4T1NzVFuod1AoCjeLsYAs2Set8T6lnGinRSi1tjDIcol+5DV0fm6ri92E45tWyT/wBoXWJ1jq/lGTTbYWh1eoDAzM/qBo4zeRQv4/YcEjM+t/wvxA0bRuQPykJO4hbOxgdpHH78135Gm/iuY9R1ToBMcqA62ZrZ6VwyAXuIH9JycnuL8IvmqGE/iFopXXZMNHF/LYHsfkngZquKx2rx18WpjIipPKvV4YPxA8xS7nKM5KLS71GT89qXuPDR+BXndNL5r64I4hLFFqJGQtJsZQXsZAJ+TY4+3jP+jRdPX8QPMjgRuCjblWgCdpqtpJy1fbBo8eD/AOB/oJ5o62Y9JK6F56dUsC5lJqlaqo8diSePFZ4yynH0ZpfOat1Pd+ViRQgXd6oAIoDjb2u/kAUDe3xK/V+qaiV5tLpZoonawqyGh/ZK+37eE3TSR/mpCNG+SbULkHBsYPfnFAE5GT4aNNNN6dqDHuN7ZI7PFfK/Hx45MZMTYf5e6X1cee9UaYIgFFWYqCIbvj2klRz8fArw9HSdUjfdJDMoU/Wd1qRmqIwaF/sP18E9BpodN5zLhS8IFgsGNVGTYB+2LAztwM+GJ49OYGjCKJPS2ERoQT9a1uzjapAHAyfdYus8vzBSaDqS+puvcF2t7nsgLxe3gFCM/HHNTxR9XMr1K6kSUzbpPqJosMWQNhOM+28c+GeZNMNRKrsUYox945tiOCASP4jWO9ivcD4526Z2JBjCyMXumZ8kn/wk8Z4ylE7VJz8jZhPHqJPNU7S7g35fTsu5rJQUVrHFFh+jVwfC7oNPqR1DqzBdrVMRRB3+44vuDRHz88eNOMWqTzXPNFPCIfTiZQVK2TtJBJJwTtqjVAZFFjR6JpC0uuEs2lCujk7gfduWrNXxQwPi8nHjaZaLTK+lwa1fJOujGjlZvSkNBF21sa/kHO2wL+n7X4cvw/6b1iPy4ruJid7Ft284CoSxJ5GWzf8Aup8Meh6bpT5Z1Mc0q7o1JosLIprvddsQccixVLfhh8laaNOkIkqI7CemdgSSu0LZP33c/c98hXPcBf0Wn6jFqAssUiHh1e+ePjvu+w93fFw6HVaELqRqSVWgdyuLORX6A9r4JBF34evy8bLEyK1JGHASNgFPsIAUA4oLwL4Fm8LT6KM6eWON0G7dj2ncLAzXP00SOfkC/GeORgfRdd0HV6fXsXkLxtj+INpstdlt2Lz25uuaYmk6TLDH6YlUrKdqSnbjaCGNtS5UA57mqxVbypoo4odSjR6e/VPpn0lxzn6QLNZBHIPGCpUyKEd44tONje1TCgr23tvsDRJ7+0DBseDLIIyq7dGsMkRdUbYxkrcu1wWUEisKvNj3UQAtCfUQak9Yi1DiJmUEps3gZbPuOPkZ+5I4HjttXqtoC17uB6Qydz7SQBZIasDg9vFpZt4Mk2+iCxJQ4r6sjjjGavuavxO9AL61tfWoxLspjJADZKgbic3yoPAr/UCJtO8fWWbCsJuCh+oDBo0TjaQDyWFkm9xfqTxx6mMsjE+nVBWond9IKjJus5pjeOGjcQDqZCRsvuVrWAgb0xQ9pBoLGMdnPyPBsAmng92vCiMUpTatkD3p8jIrIv4Jr6fBzyLGCNQrOyyM4UBVAa8irwaPNjPP7VIRpN+rjSAJGTIAFjYqAWQrQA7WpAHzzZtj/kKTTDUTsIlDeqrUHOALqyclfpGTQrkA+0y6gWjppS8hjsMvLbq4BIW7PwSBmxfN+KyaXU+lqCpBW7a2J9m7IIoDihxWQDdA+GALpgdQqKFLaZ9g2MOdxNXXPIxkXnBBghXT+jOqorLTqgyTwWBFYN1WADgfPuymQ0TdfpOqL0WVJHaRhDsf/vDAseT2zg9z3YcBfClpRrIdRMhZlaJiVZJKv9OKzR7Hi+PGq9SgVvL7FQC8iuuMEmgCLsYrO7NGrABJZBl08f5qWWQt6bg2AchCy3dBiOT+hF5I8b4XZVR0Ws9NJXlZf4agsSe1jFn+UjHxxjFglp9fo10MLyzxn+IoNsCTtQUCKHJtaBGQtYF+AraVUGoV5HQqrAAY9wYXXwcdh8Xx4qS6WNunVJMv34Jb25PxWAMgisGuA9bEaUBpNd5f0McT75BqEYlTyKIsgZDbipPfimByQEeieHXOdsY3b7V1oUcMMV8kXQACsQMCrHkVjFHp4ppVlR7Uxlt3B7VkYZ+cHIzYIM6waU65meO0BZyGiIDbhTWNvBtga/oGcHwePQJ+lgc9Mm2kEtIgAo4I3X854qrIx3umrySgPSgsch3l2dQoCjAHORVAc18eBOlGmGjdHgI2kAgqwplaSwKGOGF4AA+1Bq8jNpl6e9xplnLklq3FQPd3P8xznt2zGd1DXOmow963tBPuvnjGeaDDGaFfHiTqml1UnS5BE9Ntq910duD+t12yO3Pi3AunEeoSmQ7kUghgwSxYJIvFnBHwaNipgY26YxAUsUsUDanj+1G7+5+MVhnvHRaZ95m0PUD051sbLUGp2oAUDakZF13ugp5vwn6P82sMgYsrp/DIEt7rsAE4sdv2zd0dV83RInSlKL/S5C0GI3Wb4wCP3yLBAAzqLTqwlRmZi5C2pLf1VwGvhB2wa4N+Hhd7hvNJqf8AurtI+XbaxsAsSDgnvkWAbo8EXkzLrtEkMUkmoQbxI3tO7JNDHt7e4cV7rGQPCw0Cfk5FEzI7FQgxRBv9TXzVgfv441sKPpkIlCtftW1wbFXmq73zYBBsDw9bDVU1WhbQR7JYUdY7O1sH/wAJsYoNg1wxvxcCxSaZVSRS2ME17rqr/tnFHjPhB6TOy6MRSapWRkV/+YpOVZTkHHtrBH7WKdp6T1BVkEMkojBnq7Ngs5s0LuiCKA+3GfET7aVS9a0uvGrVkf2LGwKlyAbA2kmuObPYEkZrwk+Z4+ow9SWQszGPYMzk2LN1jBvJFd8ffUZhHL1DTqI1AYfyrYLBiKFg39I+f/N3SPOUSnWhQaVwu07wFoXYHuyMnPcc1RsmW8gEyyTLp0RnbaVvL4ogduPjtyB8Y/DUw/n0illWMEKCdwUKpKnGDVAMQMAVxivEkumV9JC1vYCi891BsGhm93zx8CyH6no4xqo2WXhFsGgAcf2/bjH7a5TYhn6Br9A3WArSoTufcgIBAJHtUnF8bRVBW55Hg9PNoZNSmzUxei3IT+UE19N4ORVE8r9vGXaHRqvVqj1WxXJViJAoIN9yR2s1xd1RJ8MkEjzqJHlV5CEYhSBbEoDwayQo7A2cC6XHPEzdqYD6yhTuJBZbFmqJus8AH473z4hTSaj88m0n20g/iliKuqrBsUO93jgXc1MEZljbAS1SyGIIC/JxgVjNDlcEGVUjTUt6mxnFl7BslWI2/a6vN2R3uvGewYPP8qLL09mkijAE1M+Re0Y25BxfbsPCL5j1umfyz1qMauNZf8OZV3SAncUpQCRWduAawOSBll/EgQfnOmR6p9qyLPGFKinsICp71ngd6JwPGcdVTp0w6shlG9o5VQnaFLFWYn5IDGj9wBkGh1c3fNb+iZ6Y71SKT/gBgsUjqXj9rL8uGG6yKuwTVfVeRjwu9eSdOh9CX8sGjGroB1FE0oJNHBJGSKrHx4fuo9L1i+UWJiYvUasXQi6laxf/AJmpvsc1fgL13pXUT0npIRJdxmYyKWYYHHbnkfFV8HxtjnotF7zXNrD1/oy/lGpg4yoDEhET4BNEHH2PjYWn1bR//u6qLI37K3UMZ78jH/st535m6b1j/Ful+nCUKxv7VY3hYwLUDj233H6140htB1SJtvpTPHGTR9wpVNXRHAxfxweD4zzu5FRZ/M66krT4Xj2AH24IurIpe+ObvJPsOrnOpaT8rFIS2Pblbontd7gtfp8Gj6sPUVjj5BS2S9x2ED4of0EYI+nJGa/JH1QShFd1qxZd6Chicmqu0J+B88+MqZV8+TS6jqHRZGESEaqR1YEBrpFPByLAyxN+7Nk+FzzLGP8AivTOY2O3ToPbYwdxAuhn3YoDAYUDy4eaE1jazpS6ksUGpN7y20MY1taYA3tO09jxxVCeqwagde0lru2wxKW3Wbs3k5F0Tffnm73470mk7Rarb5165K6Nu3sN1GiSDWMEXQwPj48EPwm1Mw671iSPRhVWWYUbYfUAR7r7A4798HxJoYtavm7qrCGSQ+4K6KoLnbSsT2zTWaoj4Hi/+HXT+qt1jqkohnjQTS7V2tj+KBtAAq8tgVZPyRdXLqnD1HqNb+aIMCofoIVeOFqsZz++Dz4l1U0bah2klO40SAQKND4IH/XfnxV/KdUWSnhksmgTu938pHHYmjj+Y44vjqEsw1bCi7EAsQe5AP3+Qf38cxm+WMjzBJI0DH2e3NED08HBHagCT8Z7+L7zgssgjmdd5YLs5ILE8sRusihQz8UNovzHJqNP1SGZWgIJ/wCYzsNpoUf9CT/v4bdZoNUmmR5DAhldrqVgwPFc9rU/p+x8RnewCLJsgjjUyhQpDFRYbcxAIzbGyvGfcDuBJJ/esp3fwXYicOQQPuAD37VZJzeRR2GZel6s6dNyRLvbaxWTCkqTnt3J+DxVEHxzqemaxdTtdYUfZZHrFtgxfNn+km+ab58RuAmzdLifzA8gnk07FV2Idq7HC0vtywBwQLsXXx446dpIln1ivPOISXX1CqswS2D2KJ3UOcc/ceLnmDQ6bQ9Y9afd6vqqx2OTsIyKN2TVWe5/Q+KJjh02ukVYwS64G/i1PG0D5BxyMDFg6+4HegeCLpEqssrMwO0Km7lGsAgWR7jyfvnwb8u6zTroAqQ6hRvsMBgn2/Df7AcVWaIT8xMZ9ZpUjYIhkomUXRDXyeBwa7d80b3lJpp5tXFtjBbd6gLWTkEk5z+/Yi/C3ZAJtqEMyhkcVIpO9R/Lgg2Tjk9x7WIIIs1dQVmjfE3vojcpOGP81E5sMtUTYoDIBvagar162oxJFHcSCfmrJwVJFfPP1ExSRyfmFYioyuXMz1VAMQbPbg8Em8kKWnYUtPGlSssUjB6cN6e8qKajanIFni77A3mCGSSRNyK7Ft1LtDd6o1zy5sXfu47Xn9RP4jFC0ZLNtksNRthyeSr/AH4NWMDdF64V4GjMoRgjL7mDANHg0OMOa5G42LJJAmLv+XLmB2sg0UX3k/ST82R25JFc7RcMzRyDfE1hmG4kMoO57vN3tskX9gBZ8UE1GpOgJaQTKGQuojJb3RDBPBJsWP5iaOGA8WdRqdUukDjU6YjLu6BwACG7bsKaOeCKoDatgTdQaQMrCICoyZt2CUtSbObIBK4z7j/lvx/V/wASjX8ruUMFYDaSTZF4FmwVN5zYAwT47k9XfHEpSJFSgM/wySfb7T7b3AbhxTUQB46k9VtRl4RsNKGiuxuU2MgfzV9yODx4QUonLDUGTSu8RBVg7ChcjKfpNcXkYw39W5jvklp9+rV4pthVlBdVoAK12LObrmhyuK8BxJqwk8glhLqjscMQZNq5J3ZwSB3o1ngHfJ7alIda8UoSNRuSwwN7ZODu5Cqci6LHk5BcutCGLUTPFqdVKySCP2MfZsKqZD3wfqybNnI/zilHRjmtJGcGRaaPaCaqiCaAFsfsXqsZIa15vzE1uzbEiSo1NA+qQpFEAkEYF4uiTR8UQxXVCIRqiF5FjUttjyo4JFG+QPk3SjxkpS6isR8vFaVTJE4sRrmiueRxQJyf1GdqPq9wZlILNe0/VyVBC5zm6qgR3ok+HjqUzN0HaxkdVgYAX8FCKJ75rjuT3NJuqhICOYwIyyfUhoLtIsX2AWwALya4rxtx5IoNIunLTiJpR7GAWhkrtIu8nI71jOMKKcwgSL07kYvwWUqSNtkWG4s848FdRGGZ0d03BGAHqGg2BtoniyT2og5JUDxBLCiRljCBSWA4A3VuBs1kgjkZxg3e3SGJeSJojrVEJYgr7mU0KJAFfoaOPt2yWPVNIdYQdMxQqy7UK+322RyKyCASe94FHwq+Rto8wMgRoykTUWzYDJuBIA/y/ANVxgtesbUb94khDqAAJEPIDC/qoDBNAGruufDy6hBWnYyaQmXTuyyGOmGW+kN7R2o7COBlfgqGjyO840LepG5tw1hQw+paAo8Zbk5NEEceFyJp1gdi6PGGUFSrWAXYPm8uSRZHP3GfDV5PXWL0wBpkA9YKAQxsXGCTbZFsMjkLQoXeVu4cEIpJESQMku1tQqDbF/8Aw/atWLFdrN4sC6b9CyvobO9iUwSMHOTn9KHJO3+3cryvM7vucPqEsEYB9Ik5FA4NE0RQ4OB4rwyN6DxOpUeiwAclRQcmgCKJ4Pc1ebx4nC9nQvzmgPSlVAokKxyKFTk2fg2ckjAs55NbkCVFLuj73jYsm4HLhXIJ5bge4HtRA4o6L5ycSdKkEu5lZYwwPF2wODyPtWMD4tH1kL/mdzRqGd5G90ZJVzRzfJtgtijVdj40xvdSCyiFtPMY3lCsQ2wLS/UwugcmjjJo/Pevqfy6j0y10SxLCsA4JyRVC8/OfnwR1Ecc3qgMr5CqFlsk21gbj9gASM3x7ifEWoji2yEwo28WFwtqdtEAr3Hwb+fblqho9FqIE1MKxtICSLFk7vet0vPJAv5+/hh6NqUj12jSYSzIZYhJGSKfPAuieQeOf7lOZh/iKBYTuYGqwcOQKHPO44+x8HNK00M+nmVXKhg2EJBoDOBRoY+cHnu7A1JZIG1cDFHkAX3MYwSzE2T3Jsnv8jjnwm+aXi/xD1/4nplEDbI6vhbw2cH5zWBk7SGh1nUJNU0UenluKOFQV3Czglaybyf7d78ANbB5g1bSSRaaUsHSOlLC224yOASp79yQewzk1SdrqdIAiTQapZPpFJe3ORd0aqxzz+u2j1BNPqCrbdSdqLuJQGuARk8Dn7duL8XX0XVV1/u0sgHuNOWFjkE3kChWaqu3Pj8+g10ZmabRy4XbTNe2l5uu+cn96rN3MaLLNo11BZlYqSRS2CRZwL4+MfPc82ulahZA2yWbapJLICdoHqAj2/7fINkUfEPWNsWRDbBgAxINndWaUG8DkXjjig3QtZG+jlkhjtFJULYYEAkBa4uq/virsv2b6DmEv53T+nG4IlYAGEHc3v22T+/ccmypB8UA8csgsagoYB/K26gaOQc43LYr6iPaAF8FFbWO+lVpLc6sklF5YGQEH4wtXkUaAO02K1DOmmjYRSBJNOpYqWUkBlxeaA7Wfpqyb2jlvVqlT8TOp6bW6LoetgjlCTHUemkgKtikJK0RVE85GPuPGc6/UaOTW61GTaGDKrKxwab3XVAZxgHg3dktHXtXJ/wT5beSOTc/5skFixH8UEEfOOL7X+vhOOsh9Z1m0alHkLMpjD7cm1HzYsj79wSb7s7vLyv9P+GcVl0d+Wl08GpdltAVK7tv1BQ2KzyRjkWb4m1emil6b05vzEksizM/viDU1LZOMm6P79iPBBdH0l+iM0Uo3Bwiks1KGPtNX8b/AKR/bxY1cUMnT9L7JJXRqzIXVPb7hdkiyVNj9gcbsvJQP5i0+mM+im04YjZbr7tp9q3fZibDUL4+CKdWGk9Rg6RqA+D6RJA2sGqrr6KsduOQSF61uk1cCvp5WVSykOQS7BUujZJJAXuO3B5PNLYkAE1qCGoE8lgK9/Fn4+eK9qtgRSRQVGJ/UX1JdrFrHLODkjkh24JIPfBPiEmBnMoMTtRstuySS2CnGWF82xVgBS3b3keoIldXcoibKFFQaF4ABxXb3L7fcbi9ZXkJVZXEkTBCVNndZsXngdtt0TWDtjd0C95k08p1vTDoZ41AmIY+nWKUqVyQKNHsaCn/AMVfVQSy9Zicz6df4SoH+KAIyOAaGSLFcDwV65o4tW2ikO+AAnsqiQFQO4NnAyAMEA0R47n0SRdSiAnkmjEYNna1D3bKsGxQHAokn5HjbG9AC0fT9N/xD1BZZYxHMz1sxWDhbNULs5HeiQR4m8m6KJOqa5CEmRhJt/mG4sFIXbQ2kk8DIa8ZPi/Cmmi6prTI8sgIf1CUF7ivu/lNHczDHYfezd6Bq9OvU9S/oaje0jbmVOCXByLH60bwK+3iZdheMMTm0UbnkQkJGRZ9jFsDJvbiqwBQyQtdagji120PGlIoqRLOBQ+DwB2+/BHhp1GpTB2ygbME3gEbQbLHjJvmgSLH1QzPp3ZQ+tGkZEVSjsUsgZIAdRzYOOQR2rxHqgN8zojT6cx6c25YElzxXBwD2Pbt2PjQJJ9M3TE9TRtEBJuO9KUki/qAHYKPkBjQoDwk9TjMsEMnpglBtdSpycYyM8/e78OX5lh0oRsHDbiu9eNxBA74wT7b5ye9zn3oCjSQSabRl4Nsu47jsqtqmxZXbVZ5+Owsca5kPU2YRBSEUNSZUHJ+pALoMM9jmskcanUylIZWQxgSGiZVtOc8jPJwaNij9NftW4k6tbmQkIpYrJtsBwMFSODuz2vIsZysUx78fWnTr/Rjp5RXrOJFAAf1KTttHBsZUHN9/GfzameHr2jhMm5JYIzt21ghh9yBzZHwwAySW/8A7Smwde8sFHkVllnjCH3AlVHtAs0QB9II4o8ZzfXN/wD1hpY1kc2kCMtUwbN+2xZODto5B+D47cJ9jO3s3dH1N9d6lExYvgg7uWG6r5qjQ/Ra8N/4Zayafq2ujSKSWOMyKKJJwy2aYEcZzQH28Z95b1APmnqxBkkjAcsFUsSwJIxV9yKz8Xfh6/AuaR/MHUZETfFHLKQ1MpZd6YzWaqiM4HGB4OXHUpynnWR61+olYY5V9wLL6GVHN1V3bDsOxzz4jXR9ZMsgVmX0wxG+MAK1WSfbfcWaxfyRbd6x/wASIWJgyp9MlKAfbTGxwAt4HyTjgZ13qmq0cmpjhV0a/wCtbvFGs5HtGb55u75paol9Rm1Gj0zlzNsRR9MSX259vxt+MgHGPCLp/MU++aNnl9Rg5b+GDZypNVxtIx9jzfgl5j6z1ZtMfy8Upo/wclgM4FbR2AH/AJs8GkXpfVesajSag7NzZCitwJDqAAKo8cEf3oA9GGCdmqDzHq20Xq+vMRuUuTT7SSCBuIxkVn55F34tJ1LVtoIkPUZkKAFGsFwbI+ogcZz8CuL8JsPUuqDoUktAtvQBiKwbA/loixt+O3xTGupk/JwSuhVJNlhmr6jizx/t34NDw/HQ2Jr1TUDTr/8AmSEqtUoSlWmJxfFA44/Wr8dv1jVRkSNr40G8oWbaBYxROcgAAiyaAsXjwI6vpdJBoowDIFAjKncxXBofsPdj55xjxXf8miQ/951Cmio97gtRawQCDusHkWewxhSSmYl6pqd9prNwf3EGNTkkH4+4v/YY8F/KXVtQvUfy35xTvBFbVyaOOBf1kV/mx8+Et/yTdSiRpndisfEhN5oE+6mBIo/J+OST8tyaFvMULvK0gN2ts9inBAAs1mqHO6uCD4WWM0GsRanWykSrM8kzSFvaufaxOMZxY+KH6+LLCT8kJI5AQq+saSrtlVrBXigoxfasX4oaCaGH8rCKc/U6gh/UybasbjmsVfJqsMUT6mSaPQosoBjCglgm4qRtbDWKCZOTYKmvbXNboKGt6dq30YX8yWVUVTsjBDUUBUduT8c3wTYBT9CmXTz7pomiCkSCNENi/cbA+a5+3cHw6u+jnm1I1OoZd7btjyuAyqiFrA+O36muB4XdQvSpNPLKmpuR23oys5LKQTQrHdf7g8AeDHLZg83SXeBGfUqNw93A2bq4ANDsP0weDtmbogiEfqT+nudcfQUGc8gBRsBvjC/FeCJh6V/h2nMWqBY7N0jSObus3km7BrN1g3l5poulBtLWqjC2N4qSwv8ANefsMAk57gWa3SK+s6a3TWfVaeQj+FbKIza4BzdHgA389/ADU9d1AVJPzyKJBz7Ru+SCOc2e+T4bvPUOiOj1ojkcR/lGZVDHd9FhRyb+kkADOKNDxlEkmlaVduqmBaNWtZWAqlo3uxyCbzm8A52w7hGGDqeoDFF1SFB7QfTXB2kc1/vn/Xw5eTOo6hnaIakEj3AAAWbX9P6R/bxmeibRnrTlZHLqxb6yAPbfBNAUbAxi89vD75Fh0sk8myRjceDbHkCiTmv1PG35HjSYQU1erqUjR0lMhC7pG9MUAVo7hWR838d+8zjUBFWGXAVYwduSGtsgiyd11X3+3iVvS/NJp1utm0KqhytigQtijYvFVX6gk4JtTqNY4KyARkTV6gABAO7vVHdXwQQSTTXzZfbTgP17QaueN1WfajMF9yKFP1gG6wBX6V+mVuXo0/5cvugeMMNqCONgD/IDQr5HY1fI8PmpPT20cr6nUnZG0khEkzkBdzBTtOAc19/C3rIemJoNv5xlkBIdvVkJYe0XZNUKb3YwpzmvC8rT0Ey9Cd3QNOslqq2SGJAyBnFXeAKsA3n3SP0HbsVnJJDGgStAqGo5yCGIGc23zYP6lOlo0PpTbFLZ3M5JajnNWcHFA+67Aws0p6SuujBnQxBTuVQ9gVgZ72T9sWftRM7655emg1auspjEbVew0h3AZsA4PixqtO6w6IvrLcK1GRNwVNq84wOAcm7/APwsHmcaETSrLNGIxMikiUqPrAOd10Bur9SefAmYQyR6Ro9RJG/pKAodh7gi1wex2Nj4J58Xb0IcejaWMSl13Rs8EC28amR7C3eKGC2Ocn7jxB+UmEsh/wARZS8qM1sFPuS+TyQWbJ7kHuaI6NQOjaeSMusUvo+kQ5AIUqBwTQruOaJ+AKPWI+mO8SjVtI0gLqfVcuyD2Z/c/wDWKxt7NHJpJRrzfU5ARFYdiADmxmwec89rPdvAvqMTxLKPz0jAAGlAJ+kEDHJNfGCeARglHB0tupMDqWaIg7UWSQDLY5u+x+wIGfpI3XQaKR9RsmWyTtALjbYDD5r4FkgfPBNUqWus6RJA8S0zCXYjZKglgMCjiig/Qr/50HSwayCLXeiXSQ20XDEnc9foL2mvvx40jVQ+ozpCQU9yrtU3tu0PF5FLXa1PK0FbV6KQPPFHf8QMVMakUMgdh8V/7m/GmN6DR5+tat4w7TGQBnAAVO+6/vkNxxdY7+K2o6rrH0w3SMfUhVWO0Fiu4cDaLOBkj4vgjwA61PrV6TI6s1ASMLDH98Z/6v8AW10aeVotP6yMAyMUU2S1OAAbHyQM18VZ8LHCX2NmHqOjabpXToBDGVhZ73Luy7hie19ySck5+aX10KlAF0+l3uDuDRfBTBuqsMMi+Oc4fum6vS6jTKu6gqqQ18AgEfvVY/6ADqemWGdjEZLzhGFkiiaG3n2/PIrNnx0Z8f2ylKQ9D1Lpsk+t02/TK6BleyVJKqTt/XGBdYIyQPFWHqUR6XqHVtCPRi3R73Ar3IeSOKAOPlj9/Ci0Maeaes6dNRLsj1joS0gwabiwARWOP/QeB/QdUz9B1rGUH003Kb3WMEHb2AOfg2bIrxFwLbQNZr9RJ0yLUb9NMa3bTK2BSE3iqFYNUc4+dC8tafV63y8msZtNXpEBvVbALEYP2NA/t4xhdRt8p6af0huVI6obsBhRHxQBOM5/fxuH4dyovlKJZtE1+k4Zwu5T7ixs7b52gnj5IoeMs5pT8vTtVJp5ZQkZG1mFSW1V/rVnH+3t8RTdL1a6eMssADv7d05IJJHN8gNQx8MeTli0cumPStSjw7kRSEYISfgtwQGBHc0CewAPiXqDRDT6ZGhVirkkFb3bcn+Sq+oZIrF0bAxt7PTP/M/TESOHUavO1WpA9k59wN/GBXyCfAzVx6cRaedRY2+n7mFYFZHcDHN4rFY8Gvxp9QeR9QYpVXUBV3bwBa70uiFU5O4ZusWATXjHeqajVQ9E02oEtfxFFMgz/CsfY47VxYuueninljtNrQtVqZI9UnpRMBOjE7pcD3MRyTzdfeuDfjrp8048yKGVQ5kNGR7P1klbBPckHtZvJ8IE2qK9W6Wz7vejVZJIsHNfc8iuVxdeGDpGskj84aXTQB3U7Gou30+pQHxdAdu5H28K4agaJqk1EIA9tCySHqv5jySCfa12O+f5r70okWOnhLEYpC9IKFLW01jtj5rPjrqY1RSERQTRSZUK0QyRiroWLb70QODfiF+n9RkCM0Jb2gDfprofb2HHjKXZhKTs0TRAhGKruUZAxYF1xknFcEn5dnSWZ+mh9wkUE7gVJ23fN/uOKF/JygS6yIaoRvKsdqv8wAVSynGCRQDEDAFHAqvE0vXtbGrR6aZgQ7Y2KQOfbZGOcXij+3irjsNT1MkyiN/4Y/inJVgM13s1jc2GzfB5NbViNteu8wSKqqCF+N4IBJbJ2m7s4PP83hAn8y9YP5cK0pRTtTdEu/7iwLJ44q6J5bEjeZerSa9yG1V0AGSMWR7aNACrJVu+aHPjOcdPZD/7T/5OTzB5RX1UkJ1WrBES7gfbH/V393Ff1fp4y/qzRR+fdIUdt/5aEncuC2xieaxx+tc+NB/G6SfrnVvK415d202rnERJSlBjjNYGRgm+/Iu8Jvmro7wec9HKIijflYlAjXvtYZ7E84/9ePQ4sd4SVnV/yi1+fPMsaozRvaMuMLnBvHes9q/QaP8A9n+TUf8AEXVykqJcs3LMqMwlvkVQ9ou88WefGK+X+rtp/wAQfMjiMLLuZnBjbaObxdjJ7HsePB78DPMfWV829fk0gliqeSTaiLSkSAHm9tGgP7+DkxtlOPrGN5x1SRNqraEqwiK+219wAYEUBdXjaRgjCV58fVmeZI5oYVLmwR9P7GvtyB/7i9N5m6sOoM7SzkLjYIlsEUDeP2vkYNmgDF1Hp/UesytNP1GOKQyDcCip9m/lwckijYscZ8cUxu+1bI3XNN1MaSWQ65EUxgYb6acZs2TxVYJxjwl9Ij13+C6oTahGbc4NMK3bxVX3A7gYwDg+NL675JmXp8izdZ0oGPaVW7w1YUdtufjmgaCH5U8ra+Lo2ojPVdKVUyHcorl8Cq4wOe3ahjrw1otKkg1q+W3B1CA74+bIJIo9sAj5qyPt4NNO6dJ0UwZd7SAFVq2T1HbAqh7q4wcfbwK13lrXQeTSPzcQNxsvtwTtIFgqM57Bu/6eCvVek6rT9B0oeXIcEEq20e9xd1f8xs8YNWaPgtg0cOsrpn0Wkl9NaMcTLXtJvgcd7OCBgHB5YBrT09INOPTShuAIkBYKC2c1f0ms43DGBbtotGNR0bRxSqFGxFKkhu4Yg4o/z3ijs+5urr+nwgafesVbWfc9AAmzmzyc/qbGKPjOZa6ADp4dFN1uKIJGXpNmxxm2x+tgXfHY5rwa6doYIOqGc6feQpsGQGwALBAHbAF9gMUCBe0ulhj6xBcSkekmWWryD3Of5TmqNgeHDp8WknnEbJHLRPI+oUa5+f8Aaj4vUygtVodZ/wB5jEbBFDBWG/f7ipsEE5o7KvOfuR4ZemdS1Saz1i6qqqXZSaVQFIBwBgAqAc9h28KXU1MQkeIYVdxIAPt9lr8VtrkVg8WQKTdQ6muoIjdwyEBisQ3E7juAoHklbFDJ/vy5cd2DnJq9PCNRFI6SMG9p9yAqDWVBAAZRnn6TgYIhhm6S3SS38PcdoG2ZWRgQwoALVbgvIycDuPCI/W+vJCVEkgjIsn01rHBsA9t39zz4NaHr/UW6aVaJg5K7h+WX3sFkxxm/k4UsSKxS8D2ZVfpcuih9Mh5RSkpJYa+GFjm7Bruoq7sWJ26eskRi9JlA3PUjZoEgcXkfHHytkeAkXVtfP0/TmRpZCFAO5V92+iTnGSQLIySeOVLS9Q1EskEvqKzIq7SI1xRNV/lB44BNfHib0ADz/wDkH6LrA+2OH8q7D+IQNtcXkDJUfsT28ZE03TvzOkZ40W40N+oAVHsq7rs33NKfk+Nt81xTanQuXkVWkgLlljAYWlXeD9LH3HP3I5znUdMgj1UaskKARIQQo9oO2wBuvk8Ai8HuvjXjuoAHp82k/wAalUQo0ymtqEUw2GxXwOO4N2MX40X8PtfoS8m0BzYsmYG8kbjXDGs/v9j4WotDCvXNQWijSj7jQABps3d0DYu7IIsdiZ8sps1Eu6NbSNyQSBRtb/cXyOD2N146JmVPk+uX86piZCvu9rEEGiOR8/Vx8EdvFjp2v1DNP6022Jo9ruwJCbyLIAq2NE5Gf72pazU6lT/DLBwwBO0GyWYA1m6cD9Tt5oEjZOqdTp2hkdAQQAqCz7T3yGGGNgjg9yawzx8qJ0ddVr9N+Qk/MGFnG5pN7ME2kHcG7AC93ce4X3Bi1k3Sz05ACvqMWB3zBrNAjgAHF45HN0L8Is3XevLGQzuEDlhcakA4uqB+F/tX3BlvMPUD04MiyRsu9xthUZpLINGq5Dc+0CzZuPE9mZ5OkyGF42UgnaxEoK4/mB22ARms1ZwO8kzaBNVuWKN40X3BS1MSFBH/AK8gGjZPYYep615dOXJFbYrZVxtuhkEYotQF0Cfsb8/UtQ+q/NmUM54YxgZKgdsg198fv4zoA/NA0RkqYw7VdQA0hphZzjnAY4+MXfil6ejaHTKH06sFO9lqg9LeN1McqQBf0UPsa8zRT+u7B4QVcbqhWjbC/gAkqtcZonNbR0LTvDCBLA1FVbbGK2goKOcAq5q8USCM41w7mgZxqQvQ9AjvFCscYIUIaWMkNusXQwtBbxx4pyavp0nUFDJGAFO1fW2utBbA3XgEc4F/bhT1nUerxQIFlZiBRqJa4U4BAs1XF/V9vEWg6/1f/ECdYGk3g+1olb3c5BFWazxgnggHwXHsbP7N0ldcwYqYhuWt9NV422LwM0T9+4uq8PTS0wO1SuBbnJr6lFfpz27DtDpesa49QaQGQWXN+mAN27bzjdQa93w5rtXWh6hqUOpjDbFZTGbRTYOQGxYvnJ7j/wAIMoQWNPpmdiVUOSSac3RJUrZPxR72Ku/C71XTQyTuqyxAspc+680TkXefbZA5z2Ph608skiTIWVVCtIdyAUbF4Ix2+KrBvHhT6uZklkYSQsFjJzHkXuJz9yb+RmyTzOF7NB1+RT0+XewJ3yGt5OLasknHb9qr4i6fUnSNPIVVtsVlg609E0CCOfcM4yRjsRvXJta/TJZYIBKd7g3u2sfigATjsM1jN4k6Iepz9Fhk/LulIVEakvY3bbJvdm3ocEDO7JOslBx0es9Cce9VpgrEi6AfJJ5AtH/ut8Y61k8MqMZCilUqi4YggJfA5WjzZHwRQIiITskWGdWkQVTNuUqpOb7qGF4PuYkAOatwo5jR5YVdGRiGpiGygGcWD7wPkG6JJBVzs6LTD5ptKPOXmqkKImv1KyKrbRgEEgYvmu9EfbwF8uamIeWOpSGQyqscfuV7yP5iDVnH7d+9SDV6dfPnnFZo0DRdU1e4FwCTTCyCe+Ca5+OwX/LGoiHkXrNHaogBtmzYMYDA/rQr7jx1+O9JaBLqfT8haYFSxanRwQRXqLRybrNYHcfIv6B/DmV08oRerC9PHISEuwNzBsEX99xArN8m/mhZz/8ATLQjcoH8FVG4GwZFBB7cfp8VRNfR/wCGzax/IWkBkWZvQNxnczHJxzWdzWcknHcDxz8s6/dUMcWoll6fN7GZSrOxLj35JxngX87hYObU+OtVMZdNo1dmb+KoFSCls1RYG+Awxz2rjxBpHlfprE7Cu1rPpkj6zuJokYH2H1cjk+atvVh0/qvpyzSKSCSTYsNndgAEWL79rtuS3tXwS/x6EQ/DHqILzRlYopG3Pde9QSQScWKujVV/LnEfMDFOidPJkZXEzGmG2wE+bHfN3/V2B8bH+PY0rfhP1VTJEjflobVRbA+sgNgmqNn9rx2GEec/y8flrpx3SIfXcgbeB6d/7m/0z47vp59iMvYvLMU6z0NUaTf6KErtNgG7oZuwSAbs/Bo+Grokxk/EnSwwIxWowd0bArUvIx+h+DgizQ8Z9rJSPNvlho1Jb02NCvcdzAV+xz+g+MO3QHkT8U9E0R2ELG+4c5kcm6zk5/Wrzfis8f8AgR9CS6i4tIGhkViVsggKaK7gCcfyjk0Af0qzK85EZEW32DAEZA+3uyK4IoZv9SP1LzpLpSTGyh1X1FUkWGFWSbJoA8g4Kj6T446mdT66UkIOzIaN8GzgUrYHHPbtwOHqLfPvmDrUOn6jpVUNUqALuA23SnFD4IOPtyfB4waiFi6KNpPIFDNkUaGebA7g14yLzRpNa3X+jt+ZhW1cEGgKKoBg1dijxefsa1cxu0at+cjIbChXyAQKv+/+g+DfZnJqJgxt6jULn8uyGQObQhXagRZC5JD5HJ3E2SfHQGsl1JMsWnlZl220W4imRedlGuMmvdXJNjV08zNG41cW5iQGvII4v4sFR25zm/FjTJqfVLrrEUvTEmVaOdhvnHu/sfivGW9Au/iU2o/xfy+06od+tlKEqLJKrYzStjYcGjuGB4WPOHUpT5w0sMkasBpIxvJoig4Pcd/n7fPhj88wTvqukO0jPu1L7lRwbNA5prJIB/cAA3gKfmWDUP5u0kkQRl/Lx7G3Bhm/tQGTgAA4YDBvo470mgvTF1KfiD5iddKyPtdAS45ClcnceP0+BeD4KfgqusPmjrDxx6ejJMAm3cxPqKxH0tk0KGbNcWfFbp0PUE85dbPpj3MQpLVggjD4wAcn4/Qnxc/C+HXDr/WH1WpQSGWYBXYbvr4PxYXg5z2wfF5XqnGpwnWnWPfpBtpPuXBWgQSCPtYx2uwcg2sugVm0+u1ECOV2MoDAngDG2sD7dlJ4wtRxMNSQdYrAE53YIvJFdqvt+nYG6uojg6jsk07yAoVPpy+mTagE3ZFZ/vRs9+Ozak/VJvLLSFPz0Xrkq6hDt4dW3XRr27roEVXJolV6DB5fHRNZDA0I0+2Qgg5ouLGMri812+48FNRrOkt1P8uekyurUxCzIQFs0K5qweVasDF2f3SU0w0UsMnSAkQLsVaQCiX+5axd9s7h8YudQB2r0ujHl14hHE8Pt9UKQC2MXRrO0DBr3DOV8FOoRax+kaeGOFNisFUqpotu9xrBOAf7AV4uemjdC9JIWWNHUupb21R+DxRNe09+wpbnW4Jj0SNZ209B1q6taL1QFrVnA447AWrQv6R5D0uESJYCR2WctS0g4xRrOeQB3vxU6iJiNMokkDmNltW5LBgQK5Y/A5sAgUT4tzbtP0jQpqWTeEQN/VV8Cj/m+P5f08DNcImgjUFL9xBDHbSgbgcdz3v+b6aYeIvsJ9RAz9Zj2symQIGIey+5gtqTVhhZ3Ubu6yQLfl/Vu3V9hYsCrEBsCiDgryAQeMDI8Dp44R1jTKViKVG9CParHB4IobrvOKNY4E/lyEv1xctakgUrAnDCx8YIOaq/3L3oGDWwOSQSzF98agAh7KuRisUDnFHcxJ9oAH6rp00mrmRNPCz3uQFAwHudrJKdygFcZN8+DGp08bvElxsqmipAbABFULGQxFm6wBk+KB0atr2UNGiOdyMCp9pJc1kCrYkc/SD/ACkmNgMMGtGqpViEgewfcJF73QQHsDwBZYg49tbp8mrh0ISSKL0mK0FiI2jYwyNmQfaxr5NHJ8XotLro5pwNZFFVJ9YXYxjH+ns4xhQR7fC6okjkMaaiMMJcUcKQSAR80O4P9ufGk7Iz6aSdIlhMS0pAFrtK7WC7TQJo7FHbm6NqPBqKZnWFjuIYE3uJyK+BnI/Q13x4T9DJ9KGRa3hjtZW2qFAIoAjaBYO6wADgUQS+mnBVneMWAxKnN0CSLriiTmx7hk0x8RliBnWkS6FjGxUvH/DcvRvaaNjJObHPb7+FOSOYa2ALK8X8KNb9XYBt2k0a4GSa4KsecFoSXT6npXUAYaV4XBYfIFqTa/AUYzWarBUNQkAmhK+nGAoO4qSu3fQFbTwRkEt9NH6fCxNKdMB1XUFRJEoJJQqAwqMvlT2FKdtHFZ4JueVY2Ou1CMzbtmVNEjjgHlrrkYo89qTRxDrGpjZET0w6KpXC+0gY+V5+5Fizze8pRB9bOzWCUYMpBGLW7vByKP6EV4r40Qv+UcSLGaYtWELUNpS7xVe0CyOynlj4oJ0zVBrj06b0IJIjHAVcXsq/c3bsDkjJuVE/NrIxjYILpwDjBAJGALVT/fI7DU0LfxtMpRXVSqAhCZAq7VsHF0F7VTGvqwpTCp9LrhDNiEbInDMA9haNCguOWGaoAdiS3caa1oE0k0alnd1UJGaBYra1t7EECiKPfHid4NZ6GpX85CEZ5AC0gA+q6NnN7uSf5jfyF+GdyI1E6PzYPyRlSPv/AGzz83NUjVppJ2WNyqjHqKQdmG3GidpqtzHOMEUPcfBg7t+8hwNm4ZIwT98jn+Y4v9wpaLUtvT+KCyl2Z9wIJJNFiLAFgZ3XdU1MNpbS6lNnqPGKH1Iyi6sA37cmwBdDII7qPEZY9ga1Eatu+sOR7BvpuO9EHnua/wDeBtOIo1p5WVVCDeSMUBRvua7V25IF2OnzRS6JnMKrncKWwGr3c0OSftiu9iSOCJkAUDagAOf5eDn4rH755w8b2AHqek1USl0jhUOwPujpTWM0vBx/MFyfmwI9HXxzQ7EVRTBLVmqivcoATYA471gUPB/rWlmGjWaLULGQQdxIG0hk5s/Y8/0gZIFLvW4poPQMmqiRVJj27xa1njmsdhihdYJr5Bi08srStMI1D7iL297LAbqFj24HPfuPHellb82yMoXcQVUNwABZACgVWbGM18WD0MzemWMqMC4OWX3CwTZPb9jxkY8SLMd21gXWSQ+37HjBFsCdws8EnJAO58k6A3p5DQWm3lcLfFUMjH2HxdZ+QvU4NTJp5WhpjfsJY83Rs1zn5GSP0FvS6mIMkZRZS20g5uyWrFE/Vwf25uiev0sEwVthQsoJO0WTVc43AjPHzzQJx9UyLq9J1pejAs8SbkIDNMqDJFFgb7iyCDVE4rxe6No9c3RXXXTrHLE5BUuJPSG4UWUgZPuNEZKjtyR6j0OKeChrJIGo2yILX5++Du/SzXyIujdKi6boJI/zQm/iqWksCyFUr7exBN4r55rxp5dAUi0046VD6jqAx3od4ZSSQ2MkN3ybPtuiCQb/AKLerGwjpSu4N3YZGTyQPk8fftZ1GjSDyz025AkZD7nVyoADDij8AjvQ8SyJPHPCI2dZUJUDYAwbvivlhR54IOMRn1Q+Z5tJMn4hecFRGSYdS1anFE2rL9PBNtxXzeBfjO+gSzx+QetyQRGjB/EUMPcvsNkH9BZHFEHHjWNVpy3nvzWiPW/qM4RN5IIIZRis4+wI7rnxnHRYtU/knq4CwmT0bFrV5QAily3f55JwM9+DNzqeo9RH4W6VYopVgYRDaFUWA8dC6+ynGM/PG8/h75j65H5G0Kl9QUMB/wDsqaO5l42knuMcZ+3jEZ9Lrf8A6aacLHHtUAkCyv1R2T7aFADsOfGs+SDrx5M0a7IDtjcUsYoUzH+igMk3fY9gp8TyyeP7qh00/mXrI6c6iWRrtnLQoVu8EY/SxkijkFjVhvMvV2TSR3qbBsERiw1iqxbVYIoi92OK8ANKvUH0rmIxbaZLKElVuiCQpIFP+244F2b2nXWTy6ZHTTSRqyEL6ZcEMQL+knNV9yTWLHjl8YraH8Ttdr+o/h51XR6lpm08unU7W2jiSMg39h/pR4a/GOfiRpk03lXpv8OlGpNFV99el/l4Ao9uQa4vxvHmjQ6hvJmsVo49h0wBGwV9QbkDGa5zZu8+Mg/F2KWPy3oV2LKPzF0RQzEaOD9jx355PjrwnjjpFJPXOoPB5s8tLJGwcQsEPp1YLNRNHack/wBvv4LReYeoP+L3TTpo2RtipcceTcjVgk3Zx9q/YDvMUcr+YvLjDTEr6bsH3A1bEY9+OK4/Y0fF0HVv+LGkkCRKQUc7qY16xIAwRYsdhn58XdWiN2bzJ1qQ6dJpZwRhl2JbLYACkLjiuDWMXzfm6t1PWFZpWZrWlJijXH6EHvZq8cdvC1OdajRBwiBfpZFIFivp9osVm/gj5Pg5ojrooNolijJY2I4RtsGsez7fbjt44bIpkvmXytNL1Tp3/fbKJIKNKD7UA2iiSaArnjnnxok3lzULI7RykAFzt2scD3Ufb8MMn96JPjvzJFLK2jmMSoY1NusoYEhEoYFABXq7JN/YeGySRg7kqjgNv2+sABtEgGM5tRjsc9iTVyuoNFH/AAWWNMzH2h9xVwPp35BC/wD8Mkkf1cjBEh6NImoKSTOqqWLHcBwzgAe0CvZxjuboGmhbUxgRI+yVC/AItiRe4CjTfJamo/VfjlTIAxSORNimzHIBtrJvng8WcAEAVe7Py3DZ95j6RqPz/S9lvsn943DdwnuJIFLuxRqhfxfgD1joOtPmfSbVNJDHzRoA3d8HlbB+T9/D95sg02o1fTvWSWERTM+wM/0lB2s3gnIrO4dzdGTRwy9bhk/7xKCiKVRwWraNooWCR2FAfYeNsctQtM+0Pl7Wp5n6vJH6ccfuUhhZiXaVAq8kCxmuBnxf/D7yvqI+qdUlnlUMZJm2rYC1KrWVC4FDjByK7Bn7RQxp5g6hL+XllUNIZQTuCmmDM2e4sAggjGTi5/KGhbT9a1qxxmLdvQLYU36gXd7cbuOP5uOb8HnaFD/hzVRSbTNQ9TYAw2ncGC4tc3uBFA1XGCPEJGrh6zF6ULP9DZAIawtWbz9QFd88eHsIpRbCAHYSxlsbFVDRoVt5PwPgEggRr9CDq2Z4F2lUx7eM1YJH25r4zV+M5bsyZoOqdQl8xhF6I0mmWM2GiDLwRjNMBgn9yTkEMmil6r+Vkifo7qCrBQsRUhiwKvjAo1le1XnxDoOm/l+tfmkjehEaI+wY2CADwPtftojFFZIgJGCxqUVH2gYu81ji6IwAKI+QA7fgPE02qk0kqx6TUI0hwu1VztaiLb2gEJgEf8tfmhLquns8ERWWdyrBwHkK43EhiM5s3mssD/lHB0szB4iCSSQLGKG4A1x3Hfiq58WNKsoj9TaGOJQGdiRus5wT+mO2L5Mb0FfqcUv+GoFUuEdVG6gC1gAnIHytn7XzYp6zRMU06CNmpJFSlOdrUMUOdymu5DCrLAndYsg0qqkY3LKFBLXQyozRskUc82MH6TV1X5l9NGRCLSy7GQkpllC3tINEqb5Oy7OLAGNCD1rSkidhUbqXPywIokG73DufcecAHry3Aq9cT+H6lo3bIwd24YoH7kZ781e1Jm/Pw7YkSPYihdwBADggAbbP1duCK/mAafy8+qk64hVDY3IPeCEY7gTwDkluP24U+HfQMGq0pedEAy6AgLde4WFXm7wB8Xn58VxoE/xJlErin2XtA3e41YAzkjgnjHe2GcaqSaE/lne3CgbufawI4qqBo2Ri9oVq8U5XaLWTSKQoIdw6yCmy7Bj8itynd3NX/KcfISFpejqJZXSWZVu7ABK7QqjJB5oE/cKccFE6j08QdVB/MBlLMjnatfUR24AoXmvvmvGwx7vzGuDQuCZKHtajbVtJxgg0cg1eexzbqoR+oiRmWTa+NwvG6yTZJNZFkZsGrPjTDLdFBoJjD1FUZ3BEgGQQVINcXdjOBnB4HE+g6xFHHqAYm3GNglKjC/aBeCTgV9wSMZPj2WNDrI7jRipQOtgix7cmlHYHPzybPijFHAGmuOhISaGMkYJNgjAH/wA4rXUtKGzyz13T6zp+u06QsPzEbRBSbOwoRYPNhQci1IGAd1Gpq9O35iOeRXBEUb7owQQLo7eBja1HOKqlWwE6CunSZzHE3qPKvpom1bYPZAcH28HIHJvBHhv1BnkkhkaFJFKqJG3/APMsL220cBhzXvquai9UwkQFOr6gOkgZIyo3AjPpsMCrIwa4wDkk4veTI1j6jqNsSvUY9xNqBfDEbaP+v6ivEu7Vf4pIyIhLVtCuNxIVlrj7DJFZPwdpHyW+ofqTOi2rINhL4Cgg7TeRhRyL+asjwsvQF30e7XvAC3taiSM4PYfABY2SBQOc+KsGhikM1ySKHVgdq0LC8ihdgA5zzk1VMoOo/PJJJC5FOzFnIKgbSWOBRBIPerq9wFUdCzwTVt2kGNQVcZ+kHA53WGHc7bzdjHyGi63RwdPKVmlRWLsSFUqCxJIyCKHu/wD58/CCdEIuo+mJS6yIBt2jJrArnN4Bvng1jWUpelT7onVrayFPuwTzQNAi8ZsLg9s5njVtZashZ12AgBVFqQpqzV2KHyDVVnbjy3dChujmCTyAuXJRj8Xa/rxwL4/WskIOs6aPQStJGze5TVIAQGJbNVmx3wQGugB4rlYW1TyiJNlM200Ap2ni9oB5HbgUDi60MUKwMhQHGABgZsg54snH975OmoDv5V8wwSdPfdFITbSSqDTKAQTVmx9w15IsYwd6Xq4pN0YUlw13dH6mXGTyQc/bAHHjNvL/AOVgjjADKxfC7QLBQir3cZoCiKHcGiy6HqAikBjcm1yNwF8tkXnNHJ5YZu7jXjdgydS6bHqenwhZJFBYVswVoqRRFi6ocnwp+bOlbNLHundLJYptVatTW3FgABaBvFA55b49f+Y6NAQr1tjcqfcRhr7Vk5ogDmgO47zhJHJAoT27bABBArZZAJIAwx5ySTZYEkry3SI+gQp0z/mbip2kqoNiscV2Bx9sfPiPUa5IYoWK+ovqklaBBAIaxeLsfGOTiwCkCRR6WRWAYKSoJqyaWiDV9vmvcOLNj+qRaU6NWkRCfU3szUTwMm8n9cd+/G11YH4+YNNFqdPGY5P+XGpY+0ivqb45IIvAJo2Wrw7T9Y0+pgiBif3EBWUe0gMFYEXzuIuquiaznMdadGTEGRtyC882AeO4+L+OfB/p2s0SttRmCBwxJXYBgAmr/wApOM4Hwu3PPHZmyZ9FrNBDqAmJB7VDc0AbOazfP9j46/w2JCPTaQFmLqwTN5o2RecHNdu3NroQkm8vw7ImZFjcnY3H1fF2wo9xx8MB4JaxGR4WfTjdSh135unJTuRuB+5ObBYE+MfLV0JEfmARaPy90aS22BZdu1OQSCBfABHJOKzdZ8A5etaXS62NDptRs9U42DcMsOSM2UYAEEHJoCyS3nrWQr5d6d6u2c3PYb3Bgsi3ZBonAwTk4s3lP65ro49dp2k0Qv02sSKGts4HFgG7PexWaPjbObs/Sf8AEJmLxrN5m6/MiKianVylFKnBbcw3KLB+12CF4Fr4R9Lopj5W6qh1Eas0VhdxybHyewWrPYfr41WPp8Gs6/1maF0BfUyO6MSHHtYstDigST8FqPB8K+n8tTnyt1NWkBLQqbsErTVu4yfg9wbrPjomWqWib1PR6uT8PYh+YiwI1DFhZO5L9xoEClzfcfetH8nxS/8ADOlDa2JTsJamAJYtdjtdN3xj7UQfVfKs48nLp31TIfZggLXvQncW+aX4445Phy8ueWZ06BpQsxsK2VDNu/iMPb7cj3DHccXbeJyylx/cRJFBLJExGojYL7gpNnJyADzyvz+3u8Mvlzp2pm1cQ/MLJt9quHHDYH/X3zXgbB0CeMyB5QWTOCO245G3/wDhnGD7h9qffLfTV6dGZXaypKjc18FuTXI2/YAdgOFhN06sebtH+W8samaSQ7hDZojdVgn/AKHfxgH4pLLqOkaVY1U1qKcbuPZzQHwTRzVqb2mvG2fiHrJtR0XUxwuN22kB/mNqAtVzzn/YjxkfnHpWrn6VozGre6ZCASCT7AADXByo/UkHF+N8s58J0z7rcGvPW+hMUUp6DXdFQbbkYCn9/wD18TGPqDfiRpH1MqxRemj7JHv/AO4xIF5xWfjg0a8Gut+XNa/WOjrGqqRBlW/nPBPPwADg/Tms+J4fLmrm8/6fVTzR7ajYhAV3fxmLAUCWI4vPbAwDNzhw3NE4K79ahvLENj6u9Vnvj5/QeDGj2JABKkUzHljGHz3F573/ANZMC+W9SpULMBQo2Co+rZyRQIIs5rGLA8EOmdH1EmmG18LXIvlQwrisEY/1PPjm3FJesFzq4JfzEJKkrGVUkgAKF7k8ngfqB8m3/MSxsVaNo9m5SZGFiyLNNQIB71wPj2qPUoZIuh6eRNXqA7hSTuGCY42OKrJ7cY8PvlnQiXy4Hk1WpZtii94H1Fr7fOfEZdAIdJ2DodgV6DNV0o3URmrHccYfGcz7pmKyH0RuUoPfu22bod+SPpxlawQVutAo0c029yfcavHEf/8A1/oPE76QGGG55vfKo5GNxAJGMG3J/WvEbBU8xHS1o/z6wyFSWQBN+3AsZxVVhR2vF14r6hunnqcE0UUYRogyL6V79241+oJAoA1VcivB7zRBHpunpqVG+QRBgW/ltd5Ariyf7eAWpO5NO+1QzP6RIUXW2uf2/T9vGkvQSQbE6jqJINNpW2KwRQVNittjBIs7j9yf3Nnour1cfVZoK0255GBFswY7uNwP2POTzkeA+v1mobV6ZS//ADQyuavdgtefux+2fHfQZpdR5gTdIyblWT2GqJYt/a+3g3oGqebVPtP8JiwwA53G/awALckYBGLYcgkmCSVwULNphtUAAuVAUKDZANiqyKHtdb4I8SdSLRxkKzFQpsMxYNhjkHH8g/u3yfHepjdJ4NONRMQZQNzMCbLoL4rG6xjBA7WDGwoxoY5AT6KMtrbPRFg3ZU83uB7jNkgbmifc3UJFf073oOSN10Tybza5NEFlBvB8XtSrRTtGJJGAgWT3Hk7Sa/8A7Q+/ubOcDPT9Pqm1XYKNPG9ChdShQuBxSL/r8nw4E2lglkRgrwMCh7GmIFk1ixddrrsQFImT1/y3qepCx2mbbIAFr+JxZ7ihuGKBpiBYqdPgXUaeWSSSXd6Fe1yLHowmj8/V35pbuh4t6aFjoGmGo1KPJIwYrMwGHK2BwD7QbA+RwSPBsJ5fUbTOvrUyyKrN3sMNpGfcbBNC+wzVGCbTSNpIY/VG2Ntg9oORuTH6rd1kbQLGT4ihZj040zrsnSNadsK4Fiybx6hr9B4JT6WNNf8Alw8oRdxFOQfa4CjHxZ8KdhTdNSddDK80SgRxSMwSiaDA3myTuIBqzeLpt0vRYNTJ1xHeaD1Y42LWb/lIYg3V8GwMUtckeIYIgxiYvN9MUgHqsckjFk2R7bz3JPi15dQnq6O0s7GNnyZWtqSWQWbs5A/SsZz4PKg9T6aVtVp3ZoUUah4g4kIoneW4/wDTN8FDfgXFJKW9eRYABAjMSxCkblAxwBYTjAArGV8EooE36dbchZbFm6zLjPI9q4P/AKnwKlldtF+YJ90el9VQfcN3rBTd2c1Z7/tjxlapPHG6fniUBb1VABJUklh23X8d8iuSRWddVjrUSlGI3GQk21WCvAJ+S329x4NKND1JMA1kisWZZzROMoy0cVnJv/8AV4R9agf1Sce6SgvtAH8TGO38NcH48acd7TQTUsVkj9SGIKhBAdgGUlgao1RAWrrsbwABTkLRiYxQAHc6e3etXXt5oUAcHPz4NPFf+Hje9aiSFHBNgBgliuKOMGxjjxQ0dahULAKJHawM8wvJ3smitC7wfmiNoFHRzP8An49LLEyGWZImLoScsBQXkZIGSDg/Btv1cc0ghn/MIGMe9CQDyAxawciwDuGCW/QFQicv1rRxuEKPqY1ZdigEF0HAHYHHxQHArw7apAs2rXfN/AjWQVM67mKuCTRFmkH+vhZhG8Wp/wAQ1DLLEtFto287kUAGyc4v59psUwoh5NilfrrzrNpwxKhgzZ+pe5JOTzj3EtyAPFFdOgOom9SbdC7hf4h//Rk2fk+6r5oD72Q8kQiTqLM8s5qGiPVYBswrZzk0xz9/jHjPfwDRLBLHsnPoqp0cmwliQQqrS5J5zwcgHkYMELS/mXcpDbyxqN7sQzspqrP3bvkm7oWJnXbpopNzF1070xOcxx5v/wAx/S8cCoF3yamKT1HRpJdNHa8qHViaJyCO2fubOfGW1IArJ0dioB3yNVtsO3ac1Y72c9ycEA3neoTY3tRygQMUpiXBd1Iok9gBVHgVvFk6HuK9MhkAFzTEkAUBuDKar7djf+/hE1Yvpkk38ywq4AwDlDRA7De39/08acd7TQ+SRhqFE0ULstLfJJ2sCdvIstxXx3JJp+pN6KLBp2keQAArvJchuec2SuB989yV6kPR1KKCzKY5ZdrMa9okIH6Y/UXgjFVoYw2kMh22kMjgFFKkrKi8Edw5v5r7m9gEDqDRIiGH2s4ALLZaicj4ApjY+3ciikU4eCMsE/iJRuyfbGo2i6znIJOcAfKt17WTR7aKk70BJHPubJ+/t5+58EJHcNp03mm0+9sDJG0Afp7j4dm4Gr6WCeTpOk37Wl2QFtgzbRjbiwBiq7Egi85r+YoxDKPUVChkVRT2vc4o8UfsM/HF/p25ulaSCR2dZYdLuLVdtEGJ+5scm+Tz4q+b5G9eRQQDE4kVqzuMRY/plRxXjnns9FFNXNHCzLHHbIGpgas1yb70Dk0aPNk+PJWkbTpE0Onw+au72i+DzQv9uO/jrXxhNSIkZwvpkj3ZG2baAPtR48fmDLqAC5bZe0lRi3Vfj4r/APVjxt5aIC1olhJrTKEVaOywt5/t/wC1/fxxotbu1JieFUpdpsFRkN977j9yObPgn1x2gYFNpLI7klFuxI6jNfAB/X9BSxo9bOeutCSu30lP00fpJ5/81fNAeLnYbb5d08mo8qKRDHsEcjFWJulkkzwLsj4H7iwCGr9YapUj9FyJk2lXNe5QwBrBGB2F7QACBtAT8P2L+Ro52J3ETLQJqlExFDtkDj4+5strJG9f8uMIZYFHegyXWew2/wCpJs0Rz5fxHC15u6nPqtLFpooYJI9IR6bI1gqwzuLCudooUSCaxfhY1+q1frwrErOUjJfApjbZNL7hng39R/qze6zrJz1aRAwUu6AuophSk4PbKg+F2fX6jdvBUFdiChwGJDD9D8cZPjfGbnaakgfSHV65Z9P6EkhNhxsI9p5WrNmgMVj+3PToNKnR9aq6fTtdAe/3AllBG27NEYxjb8Y8MPQZAdLqZTGpMUdUSabawonOTjxAp/LdMmiT3KyfzZrekYav/wAZ/sO1gq3umoSwGXyt+WTTxlATWyT6QWRW9oF2d1VgUAew8G+gvJH0TTjcCyxyC/W2FifU/t9PI+/YGxGu1sp6dDpiEKNFHNZBJBdlFDtgGgefknPgt07XzDQRqQCNjfzMODIKwePaP+gKVy6Azp7EzBYY7JKIlWPbYNCvpogVYGdt2T4tvrZAiRxxkMUUja4JJqgcXebs1RAzgUwf85JH6sqqlxRySqCMXUor9PYB80SLrx5NqXWBaVaBeQA2RabyuCaPHJz98ClLZKSv5wkTUdC1kM6zIrqyFjISTTDFjBIBqq7Nnm1jqOkhl0GmSJ5bRyaD0d21dxGbo8XX78ANPWWWWCbRSxpJFLIUYMP87i64v2KQSMdsY8ca7p2ij6LCyaaJT6m32oBwCboY7/6DxeN3DAeoaSL8705U0+qLCA1Huyykn2qK455GRtxeTYn0Ybzfp9RHAYmMiF2ACkn1CrDBJq1wCedwwK8FurabTJ6DrpobJJYbBTZjHH23NVfPiDqmul0nXVaJIyQ6LkdmkN8VX7Y8EoHNrD3MFJyy1Ne1mEdVWcA4qjVAEWAOE00hFRQxsBSsd5XIFHiOj/72O3jiPqEuqSFXRFEuGot8Rngkjljz/wC92ei6qWXR+vexptsrBCQNzIpPf79/t4zy9h//2Q==);
}
#byte_content {
margin: 5px 0;
max-height: 100px;
overflow-y: auto;
overflow-x: hidden;
}
#byte_range { margin-top: 5px; }
.thumb {
height: 75px;
border: 1px solid #000;
margin: 10px 5px 0 0;
}
.example {
padding: 10px;
border: 1px solid #ccc;
}
#drop_zone {
border: 2px dashed #bbb;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
padding: 25px;
text-align: center;
font: 20pt bold 'Times New Roman';
font: 20pt 'Arial';
font: 120pt 'yokkmokkOT';
font: 20pt 'Montserrat';
color: #bbb;
}
.thumb {
height: 75px;
border: 1px solid #000;
margin: 10px 5px 0 0;
}
#progress_bar {
margin: 10px 0;
padding: 3px;
border: 1px solid #000;
font-size: 14px;
clear: both;
opacity: 0;
-o-transition: opacity 1s linear;
-moz-transition: opacity 1s linear;
-webkit-transition: opacity 1s linear;
-ms-transition: opacity 1s linear;
}
#progress_bar.loading {opacity: 1.0;}
#progress_bar .percent {
background-color: #ccccff;
height: auto;
width: 0;
}
#byte_content {
margin: 5px 0;
max-height: 100px;
overflow-y: auto;
overflow-x: hidden;
}
#byte_range {
margin-top: 5px;
}
</style>
<script id=script_toggle>
// $('#msform').fadeOut(50);
// $('#msform').fadeIn(50);
// $(body).html($(body).html().replace('lollypops', 'marshmellows'));
function toggle(divid, viewflag) {
// alert( "BUGS_10 BEG divid="+divid+" onoff="+onoff );
var imgid=divid.replace("div_","img_" );
if(! document.getElementById(divid)) {
// return;
}
if( viewflag == "off" ) {
document.getElementById(divid).style.display="none";
document.getElementById(imgid).innerHTML=img;
document.getElementById(imgid).src="/imgs/btn/koeyeb.png";
return("");
}
if( viewflag == "on" ) {
document.getElementById(divid).style.display="inline";
document.getElementById(imgid).innerHTML=img;
document.getElementById(imgid).src="/imgs/btn/koeyew.png";
return("");
}
var imgid=divid.replace("div_","img_" );
style_display=document.getElementById(divid).style.display;
// alert( "BUGS_37850 TOGGLE imgid="+imgid+" style_display="+style_display );
if( style_display == "none" ) {
img="<img src=/imgs/btn/koeyew.png id="+imgid+" height=50 onclick=\"toggle('"+divid+"'); return false;\" >";
// alert( "BUGS_37881 NONE img="+img );
document.getElementById(divid).style.display="inline";
document.getElementById(imgid).innerHTML=img;
document.getElementById(imgid).src="/imgs/btn/koeyew.png";
// $("#img_ajax_ko").html(img);
// $("#img_ajax_ko").attr("src","/imgs/btn/koeyew.png");
// htmimg=document.getElementById(imgid).innerHTML;
// alert( "BUGS_37884 NONE htmimg="+htmimg );
}
else {
img="<img src=/imgs/btn/koeyeb.png id="+imgid+" height=50 onclick=\"toggle('"+divid+"'); return false;\" >";
// alert( "BUGS_37891 INLINE img="+img );
document.getElementById(divid).style.display="none";
document.getElementById(imgid).innerHTML=img;
document.getElementById(imgid).src="/imgs/btn/koeyeb.png";
// $("#img_ajax_ko").html(img);
// $("#img_ajax_ko").attr("src","/imgs/btn/koeyeb.png");
// htmimg=document.getElementById(imgid).innerHTML;
// alert( "BUGS_37893 INLINE htmimg="+htmimg );
}
}
</script>
<script id="script_dttm" >
function dttm(args) {
// alert( "BUGS dttm args="+args );
// alert( "BUGS dttm now="+now );
// var today = new Date().toISOString().slice(0, 10);
var now = new Date();
var yyyy_mm_dd = new Date().toISOString().slice(0, 10);
var hh_mm_dd = new Date().toISOString().slice(11, 19);
var dt=yyyy_mm_dd+"_"+hh_mm_dd;
// const d = new Date('2010-08-05')
// const d = new Date();
// const ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(d)
// const mo = new Intl.DateTimeFormat('en', { month: 'short' }).format(d)
// const da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(d)
// var dt = `${da}-${mo}-${ye}`;
// var d = date.getDate();
// var m = date.getMonth() + 1; //Month from 0 to 11
// var y = date.getFullYear();
// var dt = '' + y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
// var strArray=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
// var mth = strArray[date.getMonth()];
// alert( "BUGS_1543 dt="+dt );
// console.log("1) "+ new Date().toDateString());
// console.log("2) "+ new Date().toISOString());
// console.log("3) "+ new Date().toJSON());
// alert( "BUGS_1560 dttm dt="+dt );
return( dt );
}
</script>
<!--
<hr color=goldenrod>
<a href=/index.html ><img src=./ko.png height=20></a>
<hr color=goldenrod>
<hr color=goldenrod>
<hr color=black>
<hr color=white>
-->
<!-- div_pong -->
<hr color=black>
<hr color=white>
<hr color=goldenrod>
<hr color=goldenrod>
<hr color=goldenrod>
<hr color=black>
<hr color=black>
<h1>files</h1>
<img src=/imgs/btn/koeye.png id=img_files onclick="toggle('div_files');return false;" height=20>
files
<div id="div_files" hidden>
<h1>div_files</h1>
<!-- </div id=div_files_end> -->
<img src=/imgs/btn/koeye.png id=img_filesimgs onclick="toggle('div_filesimgs');return false;" height=20>
filesimgs
<hr color=white>
<div id=div_filesimgs hidden>
<h3>div_filesimgs</h3>
<div id="drop_zone">drophere</div>
<output id="list"></output>
<output id="output_filesimgs"></output>
<hr color=goldenrod>
<hr color=goldenrod>
<hr color=black>
<hr color=white>
<input type="file" id="files" name="files[]" multiple />
<h3>list</h3>
<output id="list"></output>
<h3>list_filestext</h3>
<output id="list_filestext"></output>
<hr color=white>
<hr color=black>
<hr color=goldenrod>
<hr color=goldenrod>
</div id=div_files_tn_end>
<hr color=black>
<script id=script_handleFileSelect>
// files is a FileList of File objects. List some properties.
function handleFileSelect(evt) {
evt.stopPropagation();
evt.preventDefault();
var files = evt.dataTransfer.files; // FileList object.
var output = [];
var output_filestext = [];
for (var i = 0, f; f = files[i]; i++) {
output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
f.size, ' bytes, last modified: ',
f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
'</li>');
output_filestext.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
f.size, ' bytes, last modified: ',
f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
'</li>');
}
document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
document.getElementById('list_filestext').innerHTML = '<ul>' + output_filestext.join('') + '</ul>';
}
function handleDragOver(evt) {
evt.stopPropagation();
evt.preventDefault();
evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.
}
// Setup the dnd listeners.
var dropZone = document.getElementById('drop_zone');
dropZone.addEventListener('dragover', handleDragOver, false);
dropZone.addEventListener('drop', handleFileSelect, false);
</script>
<script id=script_handleFileSelect>
// files is a FileList of File objects. List some properties.
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
var output = [];
for (var i = 0, f; f = files[i]; i++) {
output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
f.size, ' bytes, last modified: ',
f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
'</li>');
}
document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>
<script id=script_handleFileSelect>
// Loop through the FileList and render image files as thumbnails.
// Closure to capture the file information.
// Render thumbnail.
// Read in the image file as a data URL.
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
for (var i = 0, f; f = files[i]; i++) {
if (!f.type.match('image.*')) {
continue;
}
var reader = new FileReader();
reader.onload = (function(theFile) {
return function(e) {
var span = document.createElement('span');
span.innerHTML = ['<img class="thumb" src="', e.target.result,
'" title="', escape(theFile.name), '"/>'].join('');
document.getElementById('list').insertBefore(span, null);
};
})(f);
reader.readAsDataURL(f);
}
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>
<script id=script_filesloop>
filesloop('');
function filesloop(args) {
// alert( "BUGS_20 filesloop" );
// if( document.getElementById('filestext').files[0] ) {
// var file = document.getElementById('filestext').files[0];
// fname=files.name;
// }
if( document.querySelector('files')) {
input = document.querySelector('files');
for (let i=0; i < files.length; i++) {
let file = files.item(i);
alert( "MSG_25 LOOP files" );
}
const files = input.files;
for(j=0; j<file.length; j++ ) {
filnam=file[j].name;
alert( "BUGS_11 j="+j+" filnam="+filnam );
}
for(j=0; j<file.length; j++ ) {
fname=files[j].name;
alert( "BUGS_12 j="+j+" fname="+fname );
}
}
if( document.querySelector('filestext')) {
input_filestext = document.querySelector('filestext');
for (let i=0; i < filestext.length; i++) {
let file = filestext.item(i);
alert( "MSG_21 LOOP filestext" );
}
const filestext = input_filestext.files;
for(j=0; j<file.length; j++ ) {
fname=filestext[j].name;
alert( "BUGS_22 j="+j+" fname="+fname );
}
// arr.forEach(file => console.log(file.name)
}
}
</script>
<hr color=goldenrod>
<hr color=goldenrod>
<hr color=goldenrod>
<img src=/imgs/btn/koeye.png id=img_filestext onclick="toggle('div_filestext','');return false;" height=20>
filestext
<hr color=white>
<div id=div_filestext hidden>
<h2>div_filestext</h2>
<hr color=white>
<h3>filestext</h3>
<input type="file" id="filestext" name="filestext[]" multiple />
<h3>outputTable_filestext</h3>
<table id="outputTable_filestext"></table>
</div id=div_filestext_end>
<script id=script_parse>
// var table = document.getElementById('outputTable');
var table = document.getElementById('outputTable_filestext');
// var table_filestext = document.getElementById('outputTable_filestext');
//break the lines apart
function parseCSV(text, lineTerminator, cellTerminator) {
var lines = text.split(lineTerminator);
for(var j = 0; j<lines.length; j++) {
if(lines[j] != "") {
// alert( "BUGS_40 ko_filestext j="+j+" line="+lines[j] );
var tableRow = table.appendChild(document.createElement('tr'));
var information = lines[j].split(cellTerminator);
//append the cell to the row
for(var k = 0; k < information.length; k++){
var cell = tableRow.appendChild(document.createElement('td'));
cell.appendChild(document.createTextNode(information[k]));
}
}
}
}
// Loop through the FileList and populate the 'outputTable' with the data
// Closure to capture the file information.
// call the parse function with the proper line terminator and cell terminator
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
for (var i = 0, f; f = files[i]; i++) {
// alert( "BUGS_60 ko_filestext i="+i+" files.name="+files[i].name );
var reader = new FileReader();
reader.onload = (function(theFile) {
return function(e) {
parseCSV(e.target.result, '\n', ';');
};
})(f);
// Read the file as text
reader.readAsText(f);
}
}
if( document.getElementById('files')) {
document.getElementById('files').addEventListener('change', handleFileSelect, false);
}
if (document.getElementById('filestext')) {
document.getElementById('filestext').addEventListener('change', handleFileSelect, false);
}
</script>
<style id=style_canvas_files>
#canvas_files_txt{ border:2px solid white }
#canvas_files_info{ border:2px solid goldenrod }
#canvas_files_tn{ border:3px solid black }
#canvas_files_paste{ border:4px solid burleywood }
#canvas_files_ffpaste{ border:5px solid linen }
</style>
<hr color=goldenrod>
<hr color=goldenrod>
<hr color=goldenrod>
<img src=/imgs/btn/koeye.png id=img_filespaste onclick="toggle('div_filespaste','');return false;" height=20>
filespaste
<div id=div_filespaste hidden>
<hr color=black>
<hr color=white>
<h2>div_filespaste</h2>
<div id='editableDiv' contenteditable='true'>
<hr color=white>
filespaste
<canvas id=canvas_filespaste height=50 width=1100></canvas>
<hr color=white>
<hr color=black>
</div id=editableDiv_end>
<hr color=goldenrod>
<hr color=goldenrod>
<hr color=white>
<script id="script_clipboard" >
function handlePaste (e) {
var clipboardData, pastedData;
// Stop data actually being pasted into div
e.stopPropagation();
e.preventDefault();
// Get pasted data via clipboard API
clipboardData = e.clipboardData || window.clipboardData;
pastedData = clipboardData.getData('Text');
// Do whatever with pasteddata
alert(pastedData);
}
document.getElementById('editableDiv').addEventListener('paste', handlePaste);
</script>
<script id="script_clipboard_ff" >
function handlepaste_ff (e) {
var types, pastedData, savedContent;
// Browsers that support the 'text/html' type in the Clipboard API (Chrome, Firefox 22+)
if (e && e.clipboardData && e.clipboardData.types && e.clipboardData.getData) {
// Check for 'text/html' in types list. See abligh's answer below for deatils on
// why the DOMStringList bit is needed. We cannot fall back to 'text/plain' as
// Safari/Edge don't advertise HTML data even if it is available
types = e.clipboardData.types;
if (((types instanceof DOMStringList) && types.contains("text/html")) || (types.indexOf && types.indexOf('text/html') !== -1)) {
// Extract data and pass it to callback
pastedData = e.clipboardData.getData('text/html');
// processPaste(editableDiv, pastedData);
processPaste_ff(editableDiv, pastedData);
// Stop the data from actually being pasted
e.stopPropagation();
e.preventDefault();
return false;
}
}
// Everything else: Move existing element contents to a DocumentFragment for safekeeping
savedContent = document.createDocumentFragment();
while(editableDiv.childNodes.length > 0) {
savedContent.appendChild(editableDiv.childNodes[0]);
}
// Then wait for browser to paste content into it and cleanup
waitForPastedData(editableDiv, savedContent);
return true;
}
function waitForPastedData (elem, savedContent) {
// If data has been processes by browser, process it
if (elem.childNodes && elem.childNodes.length > 0) {
// Retrieve pasted content via innerHTML
// (Alternatively loop through elem.childNodes or elem.getElementsByTagName here)
var pastedData = elem.innerHTML;
// Restore saved content
elem.innerHTML = "";
elem.appendChild(savedContent);
// Call callback
processPaste_ff(elem, pastedData);
}
// Else wait 20ms and try again
else {
setTimeout(function () {
waitForPastedData(elem, savedContent)
}, 20);
}
}
function processPaste_ff (elem, pastedData) {
// Do whatever with gathered data;
alert(pastedData);
elem.focus();
}
// Modern browsers. Note: 3rd argument is required for Firefox <= 6
if (editableDiv.addEventListener) {
editableDiv.addEventListener('paste', handlepaste, false);
}
// IE <= 8
else {
editableDiv.attachEvent('onpaste', handlepaste);
}
$(document).on('paste','[contenteditable]',function(e) {
e.preventDefault();
var text = (e.originalEvent || e).clipboardData.getData('text/plain');
window.document.execCommand('insertText', false, text);
});
</script>
<script id="script_clipboard_jskit" >
function getSelectionText(){
var selectedText = ""
if (window.getSelection){ // all modern browsers and IE9+
selectedText = window.getSelection().toString()
}
return selectedText
}
document.addEventListener('mouseup', function(){
var thetext = getSelectionText()
if (thetext.length > 0){ // check there's some text selected
console.log(thetext) // logs whatever textual content the user has selected on the page
}
}, false)
function copySelectionText(){
var copysuccess // var to check whether execCommand successfully executed
try{
copysuccess = document.execCommand("copy") // run command to copy selected text to clipboard
}
catch(e){
copysuccess = false
}
return copysuccess
}
</script>
</div id=div_filespaste_end>
<hr color=goldenrod>
<hr color=goldenrod>
<hr color=goldenrod>
<img src=/imgs/btn/koeye.png id=img_filesffpaste onclick="toggle('div_filesffpaste','');return false;" height=20>
filesffpaste
<div id=div_filesffpaste hidden>
<hr color=black>
<hr color=white>
<h2>div_filesffpaste</h2>
<hr color=white>
<div id='div' contenteditable='true'>
<hr color=black>
ffpaste
<canvas id=canvas_files_ffpaste height=100 width=1100></canvas>
<hr color=black>
</div id=div_end>
<hr color=white>
<hr color=black>
</div id=div_files_ffpaste_end>
</div id=div_files_end>
<hr color=goldenrod>
<hr color=goldenrod>
<!-- <img src=/imgs/btn/koeye.png id=img_files onclick="toggle('div_files','');return false;" height=20> -->
<hr color=goldenrod>
<hr color=white>
<hr color=black>
<!--
<img src=/imgs/btn/koeye.png id=img_fbpages onclick="toggle('div_fbpages','');return false;" height=20>
<div id=div_fbpages >
<img src=/imgs/globes/globe.png id=img_globe1 onclick="ajax_ko(div_fbpages,'ka12:8000/ko.php?todo=pages');return false;" height=100>
<img src=/imgs/globes/globe1.png id=img_globe1 onclick="ajax_ko(div_fbpages,'ka12:8000/ko.php?todo=pages');return false;" height=100>
<img src=/imgs/globes/globe2.png id=img_globe1 onclick="ajax_ko(div_fbpages,'ka12:8000/ko.php?todo=pages');return false;" height=100>
<img src=/imgs/globes/globe3.png id=img_globe1 onclick="ajax_ko(div_fbpages,'ka12:8000/ko.php?todo=pages');return false;" height=100>
<img src=/imgs/globes/globe6.png id=img_globe1 onclick="ajax_ko(div_fbpages,'ka12:8000/ko.php?todo=pages');return false;" height=100>
<img src=/imgs/globes/globeback.png id=img_globe1 onclick="ajax_ko(div_fbpages,'ka12:8000/ko.php?todo=pages');return false;" height=100>
<img src=/imgs/globes/globedragon.png id=img_globe1 onclick="ajax_ko(div_fbpages,'ka12:8000/ko.php?todo=pages');return false;" height=100>
<img src=/imgs/globes/globegirl.png id=img_globe1 onclick="ajax_ko(div_fbpages,'ka12:8000/ko.php?todo=pages');return false;" height=10>
<img src=/imgs/globes/globehands_greek.png id=img_globe1 onclick="ajax_ko(div_fbpages,'ka12:8000/ko.php?todo=pages');return false;" height=100>
<img src=/imgs/globes/globehands10.png id=img_globe1 onclick="ajax_ko(div_fbpages,'ka12:8000/ko.php?todo=pages');return false;" height=100>
<img src=/imgs/globes/blobehead.png id=img_globe1 onclick="ajax_ko(div_fbpages,'ka12:8000/ko.php?todo=pages');return false;" height=100>
<img src=/imgs/globes/globereader2.png id=img_globe1 onclick="ajax_ko(div_fbpages,'ka12:8000/ko.php?todo=pages');return false;" height=100>
<img src=/imgs/globes/snow-globe.png id=img_globe1 onclick="ajax_ko(div_fbpages,'ka12:8000/ko.php?todo=pages');return false;" height=100>
<img src=/imgs/globes/koh5_globe_move.png id=img_globe1 onclick="ajax_ko(div_fbpages,'ka12:8000/ko.php?todo=pages');return false;" height=100>
<img src=/imgs/globes/globewrap.png id=img_globe1 onclick="ajax_ko(div_fbpages,'ka12:8000/ko.php?todo=pages');return false;" height=100>
<hr color=black>
<a href=./index.html?gif=firebubbles_bd target=_blank class=popover >
<img src=/imgs/gif/firebubblesb.gif id=img_firebubblesb height=100 onclick="test('');return false;" >
<span><img src=/imgs/gif/firebubblesd.gif id=img_firebubblesd height=100></span>
</a>
<a href=./index.html?gif=firebubbles_qp target=_blank class=popover>
<img src=/imgs/gif/firebubblesq.gif id=img_firebubblesq height=100>
<span><img src=/imgs/gif/firebubblesp.gif id=img_firebubblesp height=100></span>
</a>
<a href=./index.html?gif=new target=_blank class=popover>
<img src=/imgs/gif/new.gif id=img_new height=100>
<span><img src=/imgs/gif/giphy_view30.gif id=img_giphy_view30 height=100></span>
</a>
<a href=./index.html?gif=ring_bp target=_blank class=popover>
<img src=/imgs/gif/ringb.gif id=img_ringb height=100>
<span><img src=/imgs/gif/ringp.gif id=img_ringp height=100></span>
</a>
<a href=./index.html?gif=ring_dq target=_blank class=popover>
<img src=/imgs/gif/ringd.gif id=img_ringd height=100>
</span><img src=/imgs/gif/ringq.gif id=img_ringq height=100></span>
</a>
<a href=./index.html?gif=ring_db target=_blank class=popover>
<img src=/imgs/gif/ringd.gif id=img_ringd height=100>
<span><img src=/imgs/gif/ringb.gif id=img_ringb height=100></span>
</a>
-->
<!--
<a href=./index.html?gif=rings_bd target=_blank class=popover>
<img src=/imgs/gif/ringsb.gif id=img_ringsb height=100>
<span><img src=/imgs/gif/ringsd.gif id=img_ringsd height=100></span>
</a>
<a href=./index.html?gif=rings_pq target=_blank class=popover>
<img src=/imgs/gif/ringsp.gif id=img_ringsp height=100>
<span><img src=/imgs/gif/ringsq.gif id=img_ringsq height=100></span>
</a>
-->
<!--
<hr color=black>
<hr color=black>
<hr color=black>
<a href=./index.html?gif=firebubbles_bd target=_blank class=popover>
<img src=/imgs/gif/new.gif id=img_new height=100>
<span><img src=/imgs/gif/giphy_view10.gif id=img_new height=100></span>
</a>
<hr color=black>
<hr color=black>
<img src=/imgs/btn/koeye.png id=img_fbpages_form onclick="toggle('div_fbpages_form','');return false;" height=100>
<h2>div_fbpages</h2>
<div id=div_fbpages_form>
<style id=style_fbpages>
.div_fbpages{
background-color: burleywood;
font-family: "Montserrat";
font-family: "yokkmokkOt";
font-size: 120px
// font-style:
// font-weight:
}
</style>
<h3>div_fbpages_form</h3>
<h3>url=ka12:8000/ko.php?todo=pages</h3>
<hr color=white>
-->
<!--
<form id=form_fbpages_form action="./index.html?todo=pages" type="GET">
-->
<!--
<form id=form_fbpages_form action="ka12:8000/ko.php?todo=pages" type="GET">
<table id=table_fbpages>
<tr><td>fld</td><td>val</td></tr>
<tr><td>todo</td><td><input type=text id=todo name=todo value=pages></td></tr>
<tr><td>fbid</td><td><input type=text id=fbid name=fbid value=1></td></tr>
<tr><td>date</td><td><input type=date id=dttm name=date value=""></td></tr>
<tr><td>time</td><td><input type=time id=dttm name=time value=""></td></tr>
<tr><td>url</td><td><input type=time id=dttm name=dttm value=./></td></tr>
<tr><td>color</td><td><input type=color id=dttm name=dttm value="black"></td></tr>
</table>
<input type=submit>
</form>
<hr color=white>
</div id=div_fbpages_form_end>
-->
<br>
<hr color=goldenrod>
<img src=/imgs/btn/koeye.png id=img_lb onclick="toggle('div_lb'); return false;" height=20>div_lb
<hr color=goldenrod>
<div id=div_lb hidden>
<h1>div_lb in-progress</h1>
<br>
<hr color=goldenrod>
<img src=/imgs/btn/koeye.png id=img_lb_docs onclick="toggle('div_lb_docs'); return false;" height=20>div_lb_docs
<hr color=goldenrod>
<div id=div_lb_docs hidden>
<h1>div_lb_docs inprogress</h1>
<a href=/lb/docs target=_blank><img src=/lb/docs/pics/cover_doc.jpg alt=/lb/docs/pics/cover_doc.jpg height=50></a> lb/docs<br>
</div id=div_lb_doc_end>
<br>
<hr color=goldenrod>
<img src=/imgs/btn/koeye.png id=img_lb_basic onclick="toggle('div_lb_basic'); return false;" height=20>div_lb_basic
<hr color=goldenrod>
<div id=div_lb_basic hidden>
<h1>div_lb_basic</h1>
<a href=/lb/basic target=_blank><img src=/lb/basic/pages/1.jpg alt=/lb/basic/pages/1.jpg height=50></a><br>
</div id=div_lb_basic>
<br>
<hr color=goldenrod>
<img src=/imgs/btn/koeye.png id=img_lb_books onclick="toggle('div_lb_books'); return false;" height=20>div_lb_books
<hr color=goldenrod>
<div id=div_lb_books hidden>
<h1>div_lb_books inprogress</h1>
<a href=/lb/steve-jobs target=_blank><img src=/lb/steve-jobs/pics/cover_book.jpg alt=/lb/steve-jobs/pics/cover_book.jpg height=50>/lb/book/steve-jobs</a><br>
<a href=/lb/books/konet target=_blank><img src=/lb/books/konet/pics/cover_book.jpg alt=/lb/books/konet/pics/cover_book.jpg height=50>/lb/books/konet</a><br>
<a href=/lb/books/iperms target=_blank><img src=/lb/books/iperms/pics/cover_book.jpg alt=/lb/books/iperms/pics/cover_book.jpg height=50>/lb/books/iperms</a><br>
<a href=/lb/books/jtfdc target=_blank><img src=/lb/books/jtfdc/pics/cover_book.jpg alt=/lb/books/jtfdc/pics/cover_book.jpg height=50>/lb/books/jtfdc</a><br>
<a href=/lb/books/jtfdcr target=_blank><img src=/lb/books/jtfdcr/pics/cover_book.jpg alt=/lb/books/jtfdcr/pics/cover_book.jpg height=50>/lb/books/jtfdcr</a><br>
<a href=/lb/books/kou target=_blank><img src=/lb/books/kou/pics/cover_book.jpg alt=/lb/books/kou/pics/cover_book.jpg height=50>/lb/books/kou</a><br>
<a href=/lb/books/ka target=_blank><img src=/lb/books/ka/pics/cover_book.jpg alt=/lb/books/ka/pics/cover_book.jpg height=50>/lb/books/ka</a><br>
<br>
</div id=div_lb_books_end>
<br>
<hr color=goldenrod>
<img src=/imgs/btn/koeye.png id=img_lib_bibles onclick="toggle('div_lib_bibles'); return false;" height=20>div_lib_bibles
<hr color=goldenrod>
<div id=div_lib_bibles hidden>
<h1>div_lib_bibles inprogress</h1>
<a href=/lb/bibles-jobs target=_blank><img src=/lb/bibles/pics/cover_bibles.jpg alt=/lb/bibles/pics/cover_bibles.jpg height=50>/lb/bibles/</a><br>
</div id=div_lib_bibbles_end>
</div id=div_lib_end>
<br>
<hr color=goldenrod>
<hr color=goldenrod>
<!--
<hr color=black>
<hr color=goldenrod>
<hr color=goldenrod>
<img src=/imgs/btn/koeye_handhither.gif id=img_startup_fb
onclick("startup_fb('click');return false;" height=50>
<hr color=goldenrod>
<hr color=goldenrod>
<hr color=black>
</div id=div_fbpages_end>
-->
<!-- <script src='/fb/extras/jquery.min.1.7.js'></script> -->
<!-- <script src='/fb/extras/modnizr.2.5.3.min.js'></script> -->
<!-- <script src='/fb/lib/hash.js'></script> -->
<!-- <script src='/fb/lib/turn_html4.js'></script> -->
<!-- <script src='/fb/lib/zoom.js'></script> -->
<!-- <script src='/fb/html/magazine/js/magazine.js'></script> -->
<!-- <script src='data:/text/plain;base64,LyoKICogTWFnYXppbmUgc2FtcGxlCiovCgpmdW5jdGlvbiBhZGRQYWdlKHBhZ2UsIGJvb2spIHsKCgl2YXIgaWQsIHBhZ2VzID0gYm9vay50dXJuKCdwYWdlcycpOwoKCS8vIENyZWF0ZSBhIG5ldyBlbGVtZW50IGZvciB0aGlzIHBhZ2UKCXZhciBlbGVtZW50ID0gJCgnPGRpdiAvPicsIHt9KTsKCgkvLyBBZGQgdGhlIHBhZ2UgdG8gdGhlIGZsaXBib29rCglpZiAoYm9vay50dXJuKCdhZGRQYWdlJywgZWxlbWVudCwgcGFnZSkpIHsKCgkJLy8gQWRkIHRoZSBpbml0aWFsIEhUTUwKCQkvLyBJdCB3aWxsIGNvbnRhaW4gYSBsb2FkZXIgaW5kaWNhdG9yIGFuZCBhIGdyYWRpZW50CgkJZWxlbWVudC5odG1sKCc8ZGl2IGNsYXNzPSJncmFkaWVudCI+PC9kaXY+PGRpdiBjbGFzcz0ibG9hZGVyIj48L2Rpdj4nKTsKCgkJLy8gTG9hZCB0aGUgcGFnZQoJCWxvYWRQYWdlKHBhZ2UsIGVsZW1lbnQpOwoJfQoKfQoKZnVuY3Rpb24gbG9hZFBhZ2UocGFnZSwgcGFnZUVsZW1lbnQpIHsKCgkvLyBDcmVhdGUgYW4gaW1hZ2UgZWxlbWVudAoKCXZhciBpbWcgPSAkKCc8aW1nIC8+Jyk7CgoJaW1nLm1vdXNlZG93bihmdW5jdGlvbihlKSB7CgkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJfSk7CgoJaW1nLmxvYWQoZnVuY3Rpb24oKSB7CgkJCgkJLy8gU2V0IHRoZSBzaXplCgkJJCh0aGlzKS5jc3Moe3dpZHRoOiAnMTAwJScsIGhlaWdodDogJzEwMCUnfSk7CgoJCS8vIEFkZCB0aGUgaW1hZ2UgdG8gdGhlIHBhZ2UgYWZ0ZXIgbG9hZGVkCgoJCSQodGhpcykuYXBwZW5kVG8ocGFnZUVsZW1lbnQpOwoKCQkvLyBSZW1vdmUgdGhlIGxvYWRlciBpbmRpY2F0b3IKCQkKCQlwYWdlRWxlbWVudC5maW5kKCcubG9hZGVyJykucmVtb3ZlKCk7Cgl9KTsKCgkvLyBMb2FkIHRoZSBwYWdlCgoJaW1nLmF0dHIoJ3NyYycsICdwYWdlcy8nICsgIHBhZ2UgKyAnLmpwZycpOwoKCWxvYWRSZWdpb25zKHBhZ2UsIHBhZ2VFbGVtZW50KTsKCn0KCi8vIFpvb20gaW4gLyBab29tIG91dAoKZnVuY3Rpb24gem9vbVRvKGV2ZW50KSB7CgoJCXNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CgkJCWlmICgkKCcubWFnYXppbmUtdmlld3BvcnQnKS5kYXRhKCkucmVnaW9uQ2xpY2tlZCkgewoJCQkJJCgnLm1hZ2F6aW5lLXZpZXdwb3J0JykuZGF0YSgpLnJlZ2lvbkNsaWNrZWQgPSBmYWxzZTsKCQkJfSBlbHNlIHsKCQkJCWlmICgkKCcubWFnYXppbmUtdmlld3BvcnQnKS56b29tKCd2YWx1ZScpPT0xKSB7CgkJCQkJJCgnLm1hZ2F6aW5lLXZpZXdwb3J0Jykuem9vbSgnem9vbUluJywgZXZlbnQpOwoJCQkJfSBlbHNlIHsKCQkJCQkkKCcubWFnYXppbmUtdmlld3BvcnQnKS56b29tKCd6b29tT3V0Jyk7CgkJCQl9CgkJCX0KCQl9LCAxKTsKCn0KCgoKLy8gTG9hZCByZWdpb25zCgpmdW5jdGlvbiBsb2FkUmVnaW9ucyhwYWdlLCBlbGVtZW50KSB7CgoJJC5nZXRKU09OKCdwYWdlcy8nK3BhZ2UrJy1yZWdpb25zLmpzb24nKS4KCQlkb25lKGZ1bmN0aW9uKGRhdGEpIHsKCgkJCSQuZWFjaChkYXRhLCBmdW5jdGlvbihrZXksIHJlZ2lvbikgewoJCQkJYWRkUmVnaW9uKHJlZ2lvbiwgZWxlbWVudCk7CgkJCX0pOwoJCX0pOwp9CgovLyBBZGQgcmVnaW9uCgpmdW5jdGlvbiBhZGRSZWdpb24ocmVnaW9uLCBwYWdlRWxlbWVudCkgewoJCgl2YXIgcmVnID0gJCgnPGRpdiAvPicsIHsnY2xhc3MnOiAncmVnaW9uICAnICsgcmVnaW9uWydjbGFzcyddfSksCgkJb3B0aW9ucyA9ICQoJy5tYWdhemluZScpLnR1cm4oJ29wdGlvbnMnKSwKCQlwYWdlV2lkdGggPSBvcHRpb25zLndpZHRoLzIsCgkJcGFnZUhlaWdodCA9IG9wdGlvbnMuaGVpZ2h0OwoKCXJlZy5jc3MoewoJCXRvcDogTWF0aC5yb3VuZChyZWdpb24ueS9wYWdlSGVpZ2h0KjEwMCkrJyUnLAoJCWxlZnQ6IE1hdGgucm91bmQocmVnaW9uLngvcGFnZVdpZHRoKjEwMCkrJyUnLAoJCXdpZHRoOiBNYXRoLnJvdW5kKHJlZ2lvbi53aWR0aC9wYWdlV2lkdGgqMTAwKSsnJScsCgkJaGVpZ2h0OiBNYXRoLnJvdW5kKHJlZ2lvbi5oZWlnaHQvcGFnZUhlaWdodCoxMDApKyclJwoJfSkuYXR0cigncmVnaW9uLWRhdGEnLCAkLnBhcmFtKHJlZ2lvbi5kYXRhfHwnJykpOwoKCglyZWcuYXBwZW5kVG8ocGFnZUVsZW1lbnQpOwp9CgovLyBQcm9jZXNzIGNsaWNrIG9uIGEgcmVnaW9uCgpmdW5jdGlvbiByZWdpb25DbGljayhldmVudCkgewoKCXZhciByZWdpb24gPSAkKGV2ZW50LnRhcmdldCk7CgoJaWYgKHJlZ2lvbi5oYXNDbGFzcygncmVnaW9uJykpIHsKCgkJJCgnLm1hZ2F6aW5lLXZpZXdwb3J0JykuZGF0YSgpLnJlZ2lvbkNsaWNrZWQgPSB0cnVlOwoJCQoJCXNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CgkJCSQoJy5tYWdhemluZS12aWV3cG9ydCcpLmRhdGEoKS5yZWdpb25DbGlja2VkID0gZmFsc2U7CgkJfSwgMTAwKTsKCQkKCQl2YXIgcmVnaW9uVHlwZSA9ICQudHJpbShyZWdpb24uYXR0cignY2xhc3MnKS5yZXBsYWNlKCdyZWdpb24nLCAnJykpOwoKCQlyZXR1cm4gcHJvY2Vzc1JlZ2lvbihyZWdpb24sIHJlZ2lvblR5cGUpOwoKCX0KCn0KCi8vIFByb2Nlc3MgdGhlIGRhdGEgb2YgZXZlcnkgcmVnaW9uCgpmdW5jdGlvbiBwcm9jZXNzUmVnaW9uKHJlZ2lvbiwgcmVnaW9uVHlwZSkgewoKCWRhdGEgPSBkZWNvZGVQYXJhbXMocmVnaW9uLmF0dHIoJ3JlZ2lvbi1kYXRhJykpOwoKCXN3aXRjaCAocmVnaW9uVHlwZSkgewoJCWNhc2UgJ2xpbmsnIDoKCgkJCXdpbmRvdy5vcGVuKGRhdGEudXJsKTsKCgkJYnJlYWs7CgkJY2FzZSAnem9vbScgOgoKCQkJdmFyIHJlZ2lvbk9mZnNldCA9IHJlZ2lvbi5vZmZzZXQoKSwKCQkJCXZpZXdwb3J0T2Zmc2V0ID0gJCgnLm1hZ2F6aW5lLXZpZXdwb3J0Jykub2Zmc2V0KCksCgkJCQlwb3MgPSB7CgkJCQkJeDogcmVnaW9uT2Zmc2V0LmxlZnQtdmlld3BvcnRPZmZzZXQubGVmdCwKCQkJCQl5OiByZWdpb25PZmZzZXQudG9wLXZpZXdwb3J0T2Zmc2V0LnRvcAoJCQkJfTsKCgkJCSQoJy5tYWdhemluZS12aWV3cG9ydCcpLnpvb20oJ3pvb21JbicsIHBvcyk7CgoJCWJyZWFrOwoJCWNhc2UgJ3RvLXBhZ2UnIDoKCgkJCSQoJy5tYWdhemluZScpLnR1cm4oJ3BhZ2UnLCBkYXRhLnBhZ2UpOwoKCQlicmVhazsKCX0KCn0KCi8vIExvYWQgbGFyZ2UgcGFnZQoKZnVuY3Rpb24gbG9hZExhcmdlUGFnZShwYWdlLCBwYWdlRWxlbWVudCkgewoJCgl2YXIgaW1nID0gJCgnPGltZyAvPicpOwoKCWltZy5sb2FkKGZ1bmN0aW9uKCkgewoKCQl2YXIgcHJldkltZyA9IHBhZ2VFbGVtZW50LmZpbmQoJ2ltZycpOwoJCSQodGhpcykuY3NzKHt3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJ30pOwoJCSQodGhpcykuYXBwZW5kVG8ocGFnZUVsZW1lbnQpOwoJCXByZXZJbWcucmVtb3ZlKCk7CgkJCgl9KTsKCgkvLyBMb2FkbmV3IHBhZ2UKCQoJaW1nLmF0dHIoJ3NyYycsICdwYWdlcy8nICsgIHBhZ2UgKyAnLWxhcmdlLmpwZycpOwp9CgovLyBMb2FkIHNtYWxsIHBhZ2UKCmZ1bmN0aW9uIGxvYWRTbWFsbFBhZ2UocGFnZSwgcGFnZUVsZW1lbnQpIHsKCQoJdmFyIGltZyA9IHBhZ2VFbGVtZW50LmZpbmQoJ2ltZycpOwoKCWltZy5jc3Moe3dpZHRoOiAnMTAwJScsIGhlaWdodDogJzEwMCUnfSk7CgoJaW1nLnVuYmluZCgnbG9hZCcpOwoJLy8gTG9hZG5ldyBwYWdlCgoJaW1nLmF0dHIoJ3NyYycsICdwYWdlcy8nICsgIHBhZ2UgKyAnLmpwZycpOwp9CgovLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMjg0ODgKCmZ1bmN0aW9uIGlzQ2hyb21lKCkgewoKCXJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZScpIT0tMTsKCn0KCmZ1bmN0aW9uIGRpc2FibGVDb250cm9scyhwYWdlKSB7CgkJaWYgKHBhZ2U9PTEpCgkJCSQoJy5wcmV2aW91cy1idXR0b24nKS5oaWRlKCk7CgkJZWxzZQoJCQkkKCcucHJldmlvdXMtYnV0dG9uJykuc2hvdygpOwoJCQkJCQoJCWlmIChwYWdlPT0kKCcubWFnYXppbmUnKS50dXJuKCdwYWdlcycpKQoJCQkkKCcubmV4dC1idXR0b24nKS5oaWRlKCk7CgkJZWxzZQoJCQkkKCcubmV4dC1idXR0b24nKS5zaG93KCk7Cn0KCi8vIFNldCB0aGUgd2lkdGggYW5kIGhlaWdodCBmb3IgdGhlIHZpZXdwb3J0CgpmdW5jdGlvbiByZXNpemVWaWV3cG9ydCgpIHsKCgl2YXIgd2lkdGggPSAkKHdpbmRvdykud2lkdGgoKSwKCQloZWlnaHQgPSAkKHdpbmRvdykuaGVpZ2h0KCksCgkJb3B0aW9ucyA9ICQoJy5tYWdhemluZScpLnR1cm4oJ29wdGlvbnMnKTsKCgkkKCcubWFnYXppbmUnKS5yZW1vdmVDbGFzcygnYW5pbWF0ZWQnKTsKCgkkKCcubWFnYXppbmUtdmlld3BvcnQnKS5jc3MoewoJCXdpZHRoOiB3aWR0aCwKCQloZWlnaHQ6IGhlaWdodAoJfSkuCgl6b29tKCdyZXNpemUnKTsKCgoJaWYgKCQoJy5tYWdhemluZScpLnR1cm4oJ3pvb20nKT09MSkgewoJCXZhciBib3VuZCA9IGNhbGN1bGF0ZUJvdW5kKHsKCQkJd2lkdGg6IG9wdGlvbnMud2lkdGgsCgkJCWhlaWdodDogb3B0aW9ucy5oZWlnaHQsCgkJCWJvdW5kV2lkdGg6IE1hdGgubWluKG9wdGlvbnMud2lkdGgsIHdpZHRoKSwKCQkJYm91bmRIZWlnaHQ6IE1hdGgubWluKG9wdGlvbnMuaGVpZ2h0LCBoZWlnaHQpCgkJfSk7CgoJCWlmIChib3VuZC53aWR0aCUyIT09MCkKCQkJYm91bmQud2lkdGgtPTE7CgoJCQkKCQlpZiAoYm91bmQud2lkdGghPSQoJy5tYWdhemluZScpLndpZHRoKCkgfHwgYm91bmQuaGVpZ2h0IT0kKCcubWFnYXppbmUnKS5oZWlnaHQoKSkgewoKCQkJJCgnLm1hZ2F6aW5lJykudHVybignc2l6ZScsIGJvdW5kLndpZHRoLCBib3VuZC5oZWlnaHQpOwoKCQkJaWYgKCQoJy5tYWdhemluZScpLnR1cm4oJ3BhZ2UnKT09MSkKCQkJCSQoJy5tYWdhemluZScpLnR1cm4oJ3BlZWwnLCAnYnInKTsKCgkJCSQoJy5uZXh0LWJ1dHRvbicpLmNzcyh7aGVpZ2h0OiBib3VuZC5oZWlnaHQsIGJhY2tncm91bmRQb3NpdGlvbjogJy0zOHB4ICcrKGJvdW5kLmhlaWdodC8yLTMyLzIpKydweCd9KTsKCQkJJCgnLnByZXZpb3VzLWJ1dHRvbicpLmNzcyh7aGVpZ2h0OiBib3VuZC5oZWlnaHQsIGJhY2tncm91bmRQb3NpdGlvbjogJy00cHggJysoYm91bmQuaGVpZ2h0LzItMzIvMikrJ3B4J30pOwoJCX0KCgkJJCgnLm1hZ2F6aW5lJykuY3NzKHt0b3A6IC1ib3VuZC5oZWlnaHQvMiwgbGVmdDogLWJvdW5kLndpZHRoLzJ9KTsKCX0KCgl2YXIgbWFnYXppbmVPZmZzZXQgPSAkKCcubWFnYXppbmUnKS5vZmZzZXQoKSwKCQlib3VuZEggPSBoZWlnaHQgLSBtYWdhemluZU9mZnNldC50b3AgLSAkKCcubWFnYXppbmUnKS5oZWlnaHQoKSwKCQltYXJnaW5Ub3AgPSAoYm91bmRIIC0gJCgnLnRodW1ibmFpbHMgPiBkaXYnKS5oZWlnaHQoKSkgLyAyOwoKCWlmIChtYXJnaW5Ub3A8MCkgewoJCSQoJy50aHVtYm5haWxzJykuY3NzKHtoZWlnaHQ6MX0pOwoJfSBlbHNlIHsKCQkkKCcudGh1bWJuYWlscycpLmNzcyh7aGVpZ2h0OiBib3VuZEh9KTsKCQkkKCcudGh1bWJuYWlscyA+IGRpdicpLmNzcyh7bWFyZ2luVG9wOiBtYXJnaW5Ub3B9KTsKCX0KCglpZiAobWFnYXppbmVPZmZzZXQudG9wPCQoJy5tYWRlJykuaGVpZ2h0KCkpCgkJJCgnLm1hZGUnKS5oaWRlKCk7CgllbHNlCgkJJCgnLm1hZGUnKS5zaG93KCk7CgoJJCgnLm1hZ2F6aW5lJykuYWRkQ2xhc3MoJ2FuaW1hdGVkJyk7CgkKfQoKCi8vIE51bWJlciBvZiB2aWV3cyBpbiBhIGZsaXBib29rCgpmdW5jdGlvbiBudW1iZXJPZlZpZXdzKGJvb2spIHsKCXJldHVybiBib29rLnR1cm4oJ3BhZ2VzJykgLyAyICsgMTsKfQoKLy8gQ3VycmVudCB2aWV3IGluIGEgZmxpcGJvb2sKCmZ1bmN0aW9uIGdldFZpZXdOdW1iZXIoYm9vaywgcGFnZSkgewoJcmV0dXJuIHBhcnNlSW50KChwYWdlIHx8IGJvb2sudHVybigncGFnZScpKS8yICsgMSwgMTApOwp9CgpmdW5jdGlvbiBtb3ZlQmFyKHllcykgewoJaWYgKE1vZGVybml6ciAmJiBNb2Rlcm5penIuY3NzdHJhbnNmb3JtcykgewoJCSQoJyNzbGlkZXIgLnVpLXNsaWRlci1oYW5kbGUnKS5jc3Moe3pJbmRleDogeWVzID8gLTEgOiAxMDAwMH0pOwoJfQp9CgpmdW5jdGlvbiBzZXRQcmV2aWV3KHZpZXcpIHsKCgl2YXIgcHJldmlld1dpZHRoID0gMTEyLAoJCXByZXZpZXdIZWlnaHQgPSA3MywKCQlwcmV2aWV3U3JjID0gJ3BhZ2VzL3ByZXZpZXcuanBnJywKCQlwcmV2aWV3ID0gJChfdGh1bWJQcmV2aWV3LmNoaWxkcmVuKCc6Zmlyc3QnKSksCgkJbnVtUGFnZXMgPSAodmlldz09MSB8fCB2aWV3PT0kKCcjc2xpZGVyJykuc2xpZGVyKCdvcHRpb24nLCAnbWF4JykpID8gMSA6IDIsCgkJd2lkdGggPSAobnVtUGFnZXM9PTEpID8gcHJldmlld1dpZHRoLzIgOiBwcmV2aWV3V2lkdGg7CgoJX3RodW1iUHJldmlldy4KCQlhZGRDbGFzcygnbm8tdHJhbnNpdGlvbicpLgoJCWNzcyh7d2lkdGg6IHdpZHRoICsgMTUsCgkJCWhlaWdodDogcHJldmlld0hlaWdodCArIDE1LAoJCQl0b3A6IC1wcmV2aWV3SGVpZ2h0IC0gMzAsCgkJCWxlZnQ6ICgkKCQoJyNzbGlkZXInKS5jaGlsZHJlbignOmZpcnN0JykpLndpZHRoKCkgLSB3aWR0aCAtIDE1KS8yCgkJfSk7CgoJcHJldmlldy5jc3MoewoJCXdpZHRoOiB3aWR0aCwKCQloZWlnaHQ6IHByZXZpZXdIZWlnaHQKCX0pOwoKCWlmIChwcmV2aWV3LmNzcygnYmFja2dyb3VuZC1pbWFnZScpPT09JycgfHwKCQlwcmV2aWV3LmNzcygnYmFja2dyb3VuZC1pbWFnZScpPT0nbm9uZScpIHsKCgkJcHJldmlldy5jc3Moe2JhY2tncm91bmRJbWFnZTogJ3VybCgnICsgcHJldmlld1NyYyArICcpJ30pOwoKCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CgkJCV90aHVtYlByZXZpZXcucmVtb3ZlQ2xhc3MoJ25vLXRyYW5zaXRpb24nKTsKCQl9LCAwKTsKCgl9CgoJcHJldmlldy5jc3Moe2JhY2tncm91bmRQb3NpdGlvbjoKCQknMHB4IC0nKygodmlldy0xKSpwcmV2aWV3SGVpZ2h0KSsncHgnCgl9KTsKfQoKLy8gV2lkdGggb2YgdGhlIGZsaXBib29rIHdoZW4gem9vbWVkIGluCgpmdW5jdGlvbiBsYXJnZU1hZ2F6aW5lV2lkdGgoKSB7CgkKCXJldHVybiAyMjE0OwoKfQoKLy8gZGVjb2RlIFVSTCBQYXJhbWV0ZXJzCgpmdW5jdGlvbiBkZWNvZGVQYXJhbXMoZGF0YSkgewoKCXZhciBwYXJ0cyA9IGRhdGEuc3BsaXQoJyYnKSwgZCwgb2JqID0ge307CgoJZm9yICh2YXIgaSA9MDsgaTxwYXJ0cy5sZW5ndGg7IGkrKykgewoJCWQgPSBwYXJ0c1tpXS5zcGxpdCgnPScpOwoJCW9ialtkZWNvZGVVUklDb21wb25lbnQoZFswXSldID0gZGVjb2RlVVJJQ29tcG9uZW50KGRbMV0pOwoJfQoKCXJldHVybiBvYmo7Cn0KCi8vIENhbGN1bGF0ZSB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiBhIHNxdWFyZSB3aXRoaW4gYW5vdGhlciBzcXVhcmUKCmZ1bmN0aW9uIGNhbGN1bGF0ZUJvdW5kKGQpIHsKCQoJdmFyIGJvdW5kID0ge3dpZHRoOiBkLndpZHRoLCBoZWlnaHQ6IGQuaGVpZ2h0fTsKCglpZiAoYm91bmQud2lkdGg+ZC5ib3VuZFdpZHRoIHx8IGJvdW5kLmhlaWdodD5kLmJvdW5kSGVpZ2h0KSB7CgkJCgkJdmFyIHJlbCA9IGJvdW5kLndpZHRoL2JvdW5kLmhlaWdodDsKCgkJaWYgKGQuYm91bmRXaWR0aC9yZWw+ZC5ib3VuZEhlaWdodCAmJiBkLmJvdW5kSGVpZ2h0KnJlbDw9ZC5ib3VuZFdpZHRoKSB7CgkJCQoJCQlib3VuZC53aWR0aCA9IE1hdGgucm91bmQoZC5ib3VuZEhlaWdodCpyZWwpOwoJCQlib3VuZC5oZWlnaHQgPSBkLmJvdW5kSGVpZ2h0OwoKCQl9IGVsc2UgewoJCQkKCQkJYm91bmQud2lkdGggPSBkLmJvdW5kV2lkdGg7CgkJCWJvdW5kLmhlaWdodCA9IE1hdGgucm91bmQoZC5ib3VuZFdpZHRoL3JlbCk7CgkJCgkJfQoJfQoJCQoJcmV0dXJuIGJvdW5kOwp9'></script> -->
<script id="fb_extras_jquery_min_17_js" src='data:/text/plain;base64,LyohIGpRdWVyeSB2MS43IGpxdWVyeS5jb20gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8KKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gY0EoYSl7cmV0dXJuIGYuaXNXaW5kb3coYSk/YTphLm5vZGVUeXBlPT09OT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1mdW5jdGlvbiBjeChhKXtpZighY21bYV0pe3ZhciBiPWMuYm9keSxkPWYoIjwiK2ErIj4iKS5hcHBlbmRUbyhiKSxlPWQuY3NzKCJkaXNwbGF5Iik7ZC5yZW1vdmUoKTtpZihlPT09Im5vbmUifHxlPT09IiIpe2NufHwoY249Yy5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSxjbi5mcmFtZUJvcmRlcj1jbi53aWR0aD1jbi5oZWlnaHQ9MCksYi5hcHBlbmRDaGlsZChjbik7aWYoIWNvfHwhY24uY3JlYXRlRWxlbWVudCljbz0oY24uY29udGVudFdpbmRvd3x8Y24uY29udGVudERvY3VtZW50KS5kb2N1bWVudCxjby53cml0ZSgoYy5jb21wYXRNb2RlPT09IkNTUzFDb21wYXQiPyI8IWRvY3R5cGUgaHRtbD4iOiIiKSsiPGh0bWw+PGJvZHk+IiksY28uY2xvc2UoKTtkPWNvLmNyZWF0ZUVsZW1lbnQoYSksY28uYm9keS5hcHBlbmRDaGlsZChkKSxlPWYuY3NzKGQsImRpc3BsYXkiKSxiLnJlbW92ZUNoaWxkKGNuKX1jbVthXT1lfXJldHVybiBjbVthXX1mdW5jdGlvbiBjdyhhLGIpe3ZhciBjPXt9O2YuZWFjaChjcy5jb25jYXQuYXBwbHkoW10sY3Muc2xpY2UoMCxiKSksZnVuY3Rpb24oKXtjW3RoaXNdPWF9KTtyZXR1cm4gY31mdW5jdGlvbiBjdigpe2N0PWJ9ZnVuY3Rpb24gY3UoKXtzZXRUaW1lb3V0KGN2LDApO3JldHVybiBjdD1mLm5vdygpfWZ1bmN0aW9uIGNsKCl7dHJ5e3JldHVybiBuZXcgYS5BY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKGIpe319ZnVuY3Rpb24gY2soKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gY2UoYSxjKXthLmRhdGFGaWx0ZXImJihjPWEuZGF0YUZpbHRlcihjLGEuZGF0YVR5cGUpKTt2YXIgZD1hLmRhdGFUeXBlcyxlPXt9LGcsaCxpPWQubGVuZ3RoLGosaz1kWzBdLGwsbSxuLG8scDtmb3IoZz0xO2c8aTtnKyspe2lmKGc9PT0xKWZvcihoIGluIGEuY29udmVydGVycyl0eXBlb2YgaD09InN0cmluZyImJihlW2gudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2hdKTtsPWssaz1kW2ddO2lmKGs9PT0iKiIpaz1sO2Vsc2UgaWYobCE9PSIqIiYmbCE9PWspe209bCsiICIrayxuPWVbbV18fGVbIiogIitrXTtpZighbil7cD1iO2ZvcihvIGluIGUpe2o9by5zcGxpdCgiICIpO2lmKGpbMF09PT1sfHxqWzBdPT09IioiKXtwPWVbalsxXSsiICIra107aWYocCl7bz1lW29dLG89PT0hMD9uPXA6cD09PSEwJiYobj1vKTticmVha319fX0hbiYmIXAmJmYuZXJyb3IoIk5vIGNvbnZlcnNpb24gZnJvbSAiK20ucmVwbGFjZSgiICIsIiB0byAiKSksbiE9PSEwJiYoYz1uP24oYyk6cChvKGMpKSl9fXJldHVybiBjfWZ1bmN0aW9uIGNkKGEsYyxkKXt2YXIgZT1hLmNvbnRlbnRzLGY9YS5kYXRhVHlwZXMsZz1hLnJlc3BvbnNlRmllbGRzLGgsaSxqLGs7Zm9yKGkgaW4gZylpIGluIGQmJihjW2dbaV1dPWRbaV0pO3doaWxlKGZbMF09PT0iKiIpZi5zaGlmdCgpLGg9PT1iJiYoaD1hLm1pbWVUeXBlfHxjLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSk7aWYoaClmb3IoaSBpbiBlKWlmKGVbaV0mJmVbaV0udGVzdChoKSl7Zi51bnNoaWZ0KGkpO2JyZWFrfWlmKGZbMF1pbiBkKWo9ZlswXTtlbHNle2ZvcihpIGluIGQpe2lmKCFmWzBdfHxhLmNvbnZlcnRlcnNbaSsiICIrZlswXV0pe2o9aTticmVha31rfHwoaz1pKX1qPWp8fGt9aWYoail7aiE9PWZbMF0mJmYudW5zaGlmdChqKTtyZXR1cm4gZFtqXX19ZnVuY3Rpb24gY2MoYSxiLGMsZCl7aWYoZi5pc0FycmF5KGIpKWYuZWFjaChiLGZ1bmN0aW9uKGIsZSl7Y3x8YkcudGVzdChhKT9kKGEsZSk6Y2MoYSsiWyIrKHR5cGVvZiBlPT0ib2JqZWN0Inx8Zi5pc0FycmF5KGUpP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKCFjJiZiIT1udWxsJiZ0eXBlb2YgYj09Im9iamVjdCIpZm9yKHZhciBlIGluIGIpY2MoYSsiWyIrZSsiXSIsYltlXSxjLGQpO2Vsc2UgZChhLGIpfWZ1bmN0aW9uIGNiKGEsYyl7dmFyIGQsZSxnPWYuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IoZCBpbiBjKWNbZF0hPT1iJiYoKGdbZF0/YTplfHwoZT17fSkpW2RdPWNbZF0pO2UmJmYuZXh0ZW5kKCEwLGEsZSl9ZnVuY3Rpb24gY2EoYSxjLGQsZSxmLGcpe2Y9Znx8Yy5kYXRhVHlwZXNbMF0sZz1nfHx7fSxnW2ZdPSEwO3ZhciBoPWFbZl0saT0wLGo9aD9oLmxlbmd0aDowLGs9YT09PWJWLGw7Zm9yKDtpPGomJihrfHwhbCk7aSsrKWw9aFtpXShjLGQsZSksdHlwZW9mIGw9PSJzdHJpbmciJiYoIWt8fGdbbF0/bD1iOihjLmRhdGFUeXBlcy51bnNoaWZ0KGwpLGw9Y2EoYSxjLGQsZSxsLGcpKSk7KGt8fCFsKSYmIWdbIioiXSYmKGw9Y2EoYSxjLGQsZSwiKiIsZykpO3JldHVybiBsfWZ1bmN0aW9uIGJfKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe3R5cGVvZiBiIT0ic3RyaW5nIiYmKGM9YixiPSIqIik7aWYoZi5pc0Z1bmN0aW9uKGMpKXt2YXIgZD1iLnRvTG93ZXJDYXNlKCkuc3BsaXQoYlIpLGU9MCxnPWQubGVuZ3RoLGgsaSxqO2Zvcig7ZTxnO2UrKyloPWRbZV0saj0vXlwrLy50ZXN0KGgpLGomJihoPWguc3Vic3RyKDEpfHwiKiIpLGk9YVtoXT1hW2hdfHxbXSxpW2o/InVuc2hpZnQiOiJwdXNoIl0oYyl9fX1mdW5jdGlvbiBiRShhLGIsYyl7dmFyIGQ9Yj09PSJ3aWR0aCI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxlPWI9PT0id2lkdGgiP2J6OmJBO2lmKGQ+MCl7YyE9PSJib3JkZXIiJiZmLmVhY2goZSxmdW5jdGlvbigpe2N8fChkLT1wYXJzZUZsb2F0KGYuY3NzKGEsInBhZGRpbmciK3RoaXMpKXx8MCksYz09PSJtYXJnaW4iP2QrPXBhcnNlRmxvYXQoZi5jc3MoYSxjK3RoaXMpKXx8MDpkLT1wYXJzZUZsb2F0KGYuY3NzKGEsImJvcmRlciIrdGhpcysiV2lkdGgiKSl8fDB9KTtyZXR1cm4gZCsicHgifWQ9YkIoYSxiLGIpO2lmKGQ8MHx8ZD09bnVsbClkPWEuc3R5bGVbYl18fDA7ZD1wYXJzZUZsb2F0KGQpfHwwLGMmJmYuZWFjaChlLGZ1bmN0aW9uKCl7ZCs9cGFyc2VGbG9hdChmLmNzcyhhLCJwYWRkaW5nIit0aGlzKSl8fDAsYyE9PSJwYWRkaW5nIiYmKGQrPXBhcnNlRmxvYXQoZi5jc3MoYSwiYm9yZGVyIit0aGlzKyJXaWR0aCIpKXx8MCksYz09PSJtYXJnaW4iJiYoZCs9cGFyc2VGbG9hdChmLmNzcyhhLGMrdGhpcykpfHwwKX0pO3JldHVybiBkKyJweCJ9ZnVuY3Rpb24gYnIoYSxiKXtiLnNyYz9mLmFqYXgoe3VybDpiLnNyYyxhc3luYzohMSxkYXRhVHlwZToic2NyaXB0In0pOmYuZ2xvYmFsRXZhbCgoYi50ZXh0fHxiLnRleHRDb250ZW50fHxiLmlubmVySFRNTHx8IiIpLnJlcGxhY2UoYmksIi8qJDAqLyIpKSxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBicShhKXt2YXIgYj0oYS5ub2RlTmFtZXx8IiIpLnRvTG93ZXJDYXNlKCk7Yj09PSJpbnB1dCI/YnAoYSk6YiE9PSJzY3JpcHQiJiZ0eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCImJmYuZ3JlcChhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLGJwKX1mdW5jdGlvbiBicChhKXtpZihhLnR5cGU9PT0iY2hlY2tib3gifHxhLnR5cGU9PT0icmFkaW8iKWEuZGVmYXVsdENoZWNrZWQ9YS5jaGVja2VkfWZ1bmN0aW9uIGJvKGEpe3JldHVybiB0eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCI/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOnR5cGVvZiBhLnF1ZXJ5U2VsZWN0b3JBbGwhPSJ1bmRlZmluZWQiP2EucXVlcnlTZWxlY3RvckFsbCgiKiIpOltdfWZ1bmN0aW9uIGJuKGEsYil7dmFyIGM7aWYoYi5ub2RlVHlwZT09PTEpe2IuY2xlYXJBdHRyaWJ1dGVzJiZiLmNsZWFyQXR0cmlidXRlcygpLGIubWVyZ2VBdHRyaWJ1dGVzJiZiLm1lcmdlQXR0cmlidXRlcyhhKSxjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihjPT09Im9iamVjdCIpYi5vdXRlckhUTUw9YS5vdXRlckhUTUw7ZWxzZSBpZihjIT09ImlucHV0Inx8YS50eXBlIT09ImNoZWNrYm94IiYmYS50eXBlIT09InJhZGlvIil7aWYoYz09PSJvcHRpb24iKWIuc2VsZWN0ZWQ9YS5kZWZhdWx0U2VsZWN0ZWQ7ZWxzZSBpZihjPT09ImlucHV0Inx8Yz09PSJ0ZXh0YXJlYSIpYi5kZWZhdWx0VmFsdWU9YS5kZWZhdWx0VmFsdWV9ZWxzZSBhLmNoZWNrZWQmJihiLmRlZmF1bHRDaGVja2VkPWIuY2hlY2tlZD1hLmNoZWNrZWQpLGIudmFsdWUhPT1hLnZhbHVlJiYoYi52YWx1ZT1hLnZhbHVlKTtiLnJlbW92ZUF0dHJpYnV0ZShmLmV4cGFuZG8pfX1mdW5jdGlvbiBibShhLGIpe2lmKGIubm9kZVR5cGU9PT0xJiYhIWYuaGFzRGF0YShhKSl7dmFyIGMsZCxlLGc9Zi5fZGF0YShhKSxoPWYuX2RhdGEoYixnKSxpPWcuZXZlbnRzO2lmKGkpe2RlbGV0ZSBoLmhhbmRsZSxoLmV2ZW50cz17fTtmb3IoYyBpbiBpKWZvcihkPTAsZT1pW2NdLmxlbmd0aDtkPGU7ZCsrKWYuZXZlbnQuYWRkKGIsYysoaVtjXVtkXS5uYW1lc3BhY2U/Ii4iOiIiKStpW2NdW2RdLm5hbWVzcGFjZSxpW2NdW2RdLGlbY11bZF0uZGF0YSl9aC5kYXRhJiYoaC5kYXRhPWYuZXh0ZW5kKHt9LGguZGF0YSkpfX1mdW5jdGlvbiBibChhLGIpe3JldHVybiBmLm5vZGVOYW1lKGEsInRhYmxlIik/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6YX1mdW5jdGlvbiBYKGEpe3ZhciBiPVkuc3BsaXQoIiAiKSxjPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2lmKGMuY3JlYXRlRWxlbWVudCl3aGlsZShiLmxlbmd0aCljLmNyZWF0ZUVsZW1lbnQoYi5wb3AoKSk7cmV0dXJuIGN9ZnVuY3Rpb24gVyhhLGIsYyl7Yj1ifHwwO2lmKGYuaXNGdW5jdGlvbihiKSlyZXR1cm4gZi5ncmVwKGEsZnVuY3Rpb24oYSxkKXt2YXIgZT0hIWIuY2FsbChhLGQsYSk7cmV0dXJuIGU9PT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gZi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4gYT09PWI9PT1jfSk7aWYodHlwZW9mIGI9PSJzdHJpbmciKXt2YXIgZD1mLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlVHlwZT09PTF9KTtpZihSLnRlc3QoYikpcmV0dXJuIGYuZmlsdGVyKGIsZCwhYyk7Yj1mLmZpbHRlcihiLGQpfXJldHVybiBmLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiBmLmluQXJyYXkoYSxiKT49MD09PWN9KX1mdW5jdGlvbiBWKGEpe3JldHVybiFhfHwhYS5wYXJlbnROb2RlfHxhLnBhcmVudE5vZGUubm9kZVR5cGU9PT0xMX1mdW5jdGlvbiBOKCl7cmV0dXJuITB9ZnVuY3Rpb24gTSgpe3JldHVybiExfWZ1bmN0aW9uIG4oYSxiLGMpe3ZhciBkPWIrImRlZmVyIixlPWIrInF1ZXVlIixnPWIrIm1hcmsiLGg9Zi5fZGF0YShhLGQpO2gmJihjPT09InF1ZXVlInx8IWYuX2RhdGEoYSxlKSkmJihjPT09Im1hcmsifHwhZi5fZGF0YShhLGcpKSYmc2V0VGltZW91dChmdW5jdGlvbigpeyFmLl9kYXRhKGEsZSkmJiFmLl9kYXRhKGEsZykmJihmLnJlbW92ZURhdGEoYSxkLCEwKSxoLmZpcmUoKSl9LDApfWZ1bmN0aW9uIG0oYSl7Zm9yKHZhciBiIGluIGEpe2lmKGI9PT0iZGF0YSImJmYuaXNFbXB0eU9iamVjdChhW2JdKSljb250aW51ZTtpZihiIT09InRvSlNPTiIpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gbChhLGMsZCl7aWYoZD09PWImJmEubm9kZVR5cGU9PT0xKXt2YXIgZT0iZGF0YS0iK2MucmVwbGFjZShrLCItJDEiKS50b0xvd2VyQ2FzZSgpO2Q9YS5nZXRBdHRyaWJ1dGUoZSk7aWYodHlwZW9mIGQ9PSJzdHJpbmciKXt0cnl7ZD1kPT09InRydWUiPyEwOmQ9PT0iZmFsc2UiPyExOmQ9PT0ibnVsbCI/bnVsbDpmLmlzTnVtZXJpYyhkKT9wYXJzZUZsb2F0KGQpOmoudGVzdChkKT9mLnBhcnNlSlNPTihkKTpkfWNhdGNoKGcpe31mLmRhdGEoYSxjLGQpfWVsc2UgZD1ifXJldHVybiBkfWZ1bmN0aW9uIGgoYSl7dmFyIGI9Z1thXT17fSxjLGQ7YT1hLnNwbGl0KC9ccysvKTtmb3IoYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKyliW2FbY11dPSEwO3JldHVybiBifXZhciBjPWEuZG9jdW1lbnQsZD1hLm5hdmlnYXRvcixlPWEubG9jYXRpb24sZj1mdW5jdGlvbigpe2Z1bmN0aW9uIEsoKXtpZighZS5pc1JlYWR5KXt0cnl7Yy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwoImxlZnQiKX1jYXRjaChhKXtzZXRUaW1lb3V0KEssMSk7cmV0dXJufWUucmVhZHkoKX19dmFyIGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IGUuZm4uaW5pdChhLGIsaCl9LGY9YS5qUXVlcnksZz1hLiQsaCxpPS9eKD86W14jPF0qKDxbXHdcV10rPilbXj5dKiR8IyhbXHdcLV0qKSQpLyxqPS9cUy8saz0vXlxzKy8sbD0vXHMrJC8sbT0vXGQvLG49L148KFx3KylccypcLz8+KD86PFwvXDE+KT8kLyxvPS9eW1xdLDp7fVxzXSokLyxwPS9cXCg/OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2cscT0vIlteIlxcXG5ccl0qInx0cnVlfGZhbHNlfG51bGx8LT9cZCsoPzpcLlxkKik/KD86W2VFXVsrXC1dP1xkKyk/L2cscj0vKD86Xnw6fCwpKD86XHMqXFspKy9nLHM9Lyh3ZWJraXQpWyBcL10oW1x3Ll0rKS8sdD0vKG9wZXJhKSg/Oi4qdmVyc2lvbik/WyBcL10oW1x3Ll0rKS8sdT0vKG1zaWUpIChbXHcuXSspLyx2PS8obW96aWxsYSkoPzouKj8gcnY6KFtcdy5dKykpPy8sdz0vLShbYS16XXxbMC05XSkvaWcseD0vXi1tcy0vLHk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYisiIikudG9VcHBlckNhc2UoKX0sej1kLnVzZXJBZ2VudCxBLEIsQyxEPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsRT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEY9QXJyYXkucHJvdG90eXBlLnB1c2gsRz1BcnJheS5wcm90b3R5cGUuc2xpY2UsSD1TdHJpbmcucHJvdG90eXBlLnRyaW0sST1BcnJheS5wcm90b3R5cGUuaW5kZXhPZixKPXt9O2UuZm49ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmUsaW5pdDpmdW5jdGlvbihhLGQsZil7dmFyIGcsaCxqLGs7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYS5ub2RlVHlwZSl7dGhpcy5jb250ZXh0PXRoaXNbMF09YSx0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKGE9PT0iYm9keSImJiFkJiZjLmJvZHkpe3RoaXMuY29udGV4dD1jLHRoaXNbMF09Yy5ib2R5LHRoaXMuc2VsZWN0b3I9YSx0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKHR5cGVvZiBhPT0ic3RyaW5nIil7YS5jaGFyQXQoMCkhPT0iPCJ8fGEuY2hhckF0KGEubGVuZ3RoLTEpIT09Ij4ifHxhLmxlbmd0aDwzP2c9aS5leGVjKGEpOmc9W251bGwsYSxudWxsXTtpZihnJiYoZ1sxXXx8IWQpKXtpZihnWzFdKXtkPWQgaW5zdGFuY2VvZiBlP2RbMF06ZCxrPWQ/ZC5vd25lckRvY3VtZW50fHxkOmMsaj1uLmV4ZWMoYSksaj9lLmlzUGxhaW5PYmplY3QoZCk/KGE9W2MuY3JlYXRlRWxlbWVudChqWzFdKV0sZS5mbi5hdHRyLmNhbGwoYSxkLCEwKSk6YT1bay5jcmVhdGVFbGVtZW50KGpbMV0pXTooaj1lLmJ1aWxkRnJhZ21lbnQoW2dbMV1dLFtrXSksYT0oai5jYWNoZWFibGU/ZS5jbG9uZShqLmZyYWdtZW50KTpqLmZyYWdtZW50KS5jaGlsZE5vZGVzKTtyZXR1cm4gZS5tZXJnZSh0aGlzLGEpfWg9Yy5nZXRFbGVtZW50QnlJZChnWzJdKTtpZihoJiZoLnBhcmVudE5vZGUpe2lmKGguaWQhPT1nWzJdKXJldHVybiBmLmZpbmQoYSk7dGhpcy5sZW5ndGg9MSx0aGlzWzBdPWh9dGhpcy5jb250ZXh0PWMsdGhpcy5zZWxlY3Rvcj1hO3JldHVybiB0aGlzfXJldHVybiFkfHxkLmpxdWVyeT8oZHx8ZikuZmluZChhKTp0aGlzLmNvbnN0cnVjdG9yKGQpLmZpbmQoYSl9aWYoZS5pc0Z1bmN0aW9uKGEpKXJldHVybiBmLnJlYWR5KGEpO2Euc2VsZWN0b3IhPT1iJiYodGhpcy5zZWxlY3Rvcj1hLnNlbGVjdG9yLHRoaXMuY29udGV4dD1hLmNvbnRleHQpO3JldHVybiBlLm1ha2VBcnJheShhLHRoaXMpfSxzZWxlY3RvcjoiIixqcXVlcnk6IjEuNyIsbGVuZ3RoOjAsc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBHLmNhbGwodGhpcywwKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP3RoaXMudG9BcnJheSgpOmE8MD90aGlzW3RoaXMubGVuZ3RoK2FdOnRoaXNbYV19LHB1c2hTdGFjazpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5jb25zdHJ1Y3RvcigpO2UuaXNBcnJheShhKT9GLmFwcGx5KGQsYSk6ZS5tZXJnZShkLGEpLGQucHJldk9iamVjdD10aGlzLGQuY29udGV4dD10aGlzLmNvbnRleHQsYj09PSJmaW5kIj9kLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrKHRoaXMuc2VsZWN0b3I/IiAiOiIiKStjOmImJihkLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrIi4iK2IrIigiK2MrIikiKTtyZXR1cm4gZH0sZWFjaDpmdW5jdGlvbihhLGIpe3JldHVybiBlLmVhY2godGhpcyxhLGIpfSxyZWFkeTpmdW5jdGlvbihhKXtlLmJpbmRSZWFkeSgpLEIuYWRkKGEpO3JldHVybiB0aGlzfSxlcTpmdW5jdGlvbihhKXtyZXR1cm4gYT09PS0xP3RoaXMuc2xpY2UoYSk6dGhpcy5zbGljZShhLCthKzEpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhHLmFwcGx5KHRoaXMsYXJndW1lbnRzKSwic2xpY2UiLEcuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9LG1hcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZS5tYXAodGhpcyxmdW5jdGlvbihiLGMpe3JldHVybiBhLmNhbGwoYixjLGIpfSkpfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKG51bGwpfSxwdXNoOkYsc29ydDpbXS5zb3J0LHNwbGljZTpbXS5zcGxpY2V9LGUuZm4uaW5pdC5wcm90b3R5cGU9ZS5mbixlLmV4dGVuZD1lLmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBhLGMsZCxmLGcsaCxpPWFyZ3VtZW50c1swXXx8e30saj0xLGs9YXJndW1lbnRzLmxlbmd0aCxsPSExO3R5cGVvZiBpPT0iYm9vbGVhbiImJihsPWksaT1hcmd1bWVudHNbMV18fHt9LGo9MiksdHlwZW9mIGkhPSJvYmplY3QiJiYhZS5pc0Z1bmN0aW9uKGkpJiYoaT17fSksaz09PWomJihpPXRoaXMsLS1qKTtmb3IoO2o8aztqKyspaWYoKGE9YXJndW1lbnRzW2pdKSE9bnVsbClmb3IoYyBpbiBhKXtkPWlbY10sZj1hW2NdO2lmKGk9PT1mKWNvbnRpbnVlO2wmJmYmJihlLmlzUGxhaW5PYmplY3QoZil8fChnPWUuaXNBcnJheShmKSkpPyhnPyhnPSExLGg9ZCYmZS5pc0FycmF5KGQpP2Q6W10pOmg9ZCYmZS5pc1BsYWluT2JqZWN0KGQpP2Q6e30saVtjXT1lLmV4dGVuZChsLGgsZikpOmYhPT1iJiYoaVtjXT1mKX1yZXR1cm4gaX0sZS5leHRlbmQoe25vQ29uZmxpY3Q6ZnVuY3Rpb24oYil7YS4kPT09ZSYmKGEuJD1nKSxiJiZhLmpRdWVyeT09PWUmJihhLmpRdWVyeT1mKTtyZXR1cm4gZX0saXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oYSl7YT9lLnJlYWR5V2FpdCsrOmUucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihhKXtpZihhPT09ITAmJiEtLWUucmVhZHlXYWl0fHxhIT09ITAmJiFlLmlzUmVhZHkpe2lmKCFjLmJvZHkpcmV0dXJuIHNldFRpbWVvdXQoZS5yZWFkeSwxKTtlLmlzUmVhZHk9ITA7aWYoYSE9PSEwJiYtLWUucmVhZHlXYWl0PjApcmV0dXJuO0IuZmlyZVdpdGgoYyxbZV0pLGUuZm4udHJpZ2dlciYmZShjKS50cmlnZ2VyKCJyZWFkeSIpLnVuYmluZCgicmVhZHkiKX19LGJpbmRSZWFkeTpmdW5jdGlvbigpe2lmKCFCKXtCPWUuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpO2lmKGMucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpcmV0dXJuIHNldFRpbWVvdXQoZS5yZWFkeSwxKTtpZihjLmFkZEV2ZW50TGlzdGVuZXIpYy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixDLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGUucmVhZHksITEpO2Vsc2UgaWYoYy5hdHRhY2hFdmVudCl7Yy5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixDKSxhLmF0dGFjaEV2ZW50KCJvbmxvYWQiLGUucmVhZHkpO3ZhciBiPSExO3RyeXtiPWEuZnJhbWVFbGVtZW50PT1udWxsfWNhdGNoKGQpe31jLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCYmYiYmSygpfX19LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuIGUudHlwZShhKT09PSJmdW5jdGlvbiJ9LGlzQXJyYXk6QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oYSl7cmV0dXJuIGUudHlwZShhKT09PSJhcnJheSJ9LGlzV2luZG93OmZ1bmN0aW9uKGEpe3JldHVybiBhJiZ0eXBlb2YgYT09Im9iamVjdCImJiJzZXRJbnRlcnZhbCJpbiBhfSxpc051bWVyaWM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPW51bGwmJm0udGVzdChhKSYmIWlzTmFOKGEpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP1N0cmluZyhhKTpKW0QuY2FsbChhKV18fCJvYmplY3QifSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe2lmKCFhfHxlLnR5cGUoYSkhPT0ib2JqZWN0Inx8YS5ub2RlVHlwZXx8ZS5pc1dpbmRvdyhhKSlyZXR1cm4hMTt0cnl7aWYoYS5jb25zdHJ1Y3RvciYmIUUuY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhRS5jYWxsKGEuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2goYyl7cmV0dXJuITF9dmFyIGQ7Zm9yKGQgaW4gYSk7cmV0dXJuIGQ9PT1ifHxFLmNhbGwoYSxkKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgYX0scGFyc2VKU09OOmZ1bmN0aW9uKGIpe2lmKHR5cGVvZiBiIT0ic3RyaW5nInx8IWIpcmV0dXJuIG51bGw7Yj1lLnRyaW0oYik7aWYoYS5KU09OJiZhLkpTT04ucGFyc2UpcmV0dXJuIGEuSlNPTi5wYXJzZShiKTtpZihvLnRlc3QoYi5yZXBsYWNlKHAsIkAiKS5yZXBsYWNlKHEsIl0iKS5yZXBsYWNlKHIsIiIpKSlyZXR1cm4obmV3IEZ1bmN0aW9uKCJyZXR1cm4gIitiKSkoKTtlLmVycm9yKCJJbnZhbGlkIEpTT046ICIrYil9LHBhcnNlWE1MOmZ1bmN0aW9uKGMpe3ZhciBkLGY7dHJ5e2EuRE9NUGFyc2VyPyhmPW5ldyBET01QYXJzZXIsZD1mLnBhcnNlRnJvbVN0cmluZyhjLCJ0ZXh0L3htbCIpKTooZD1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLGQuYXN5bmM9ImZhbHNlIixkLmxvYWRYTUwoYykpfWNhdGNoKGcpe2Q9Yn0oIWR8fCFkLmRvY3VtZW50RWxlbWVudHx8ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGgpJiZlLmVycm9yKCJJbnZhbGlkIFhNTDogIitjKTtyZXR1cm4gZH0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbihiKXtiJiZqLnRlc3QoYikmJihhLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGIpe2EuZXZhbC5jYWxsKGEsYil9KShiKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoeCwibXMtIikucmVwbGFjZSh3LHkpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PT1iLnRvVXBwZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxjLGQpe3ZhciBmLGc9MCxoPWEubGVuZ3RoLGk9aD09PWJ8fGUuaXNGdW5jdGlvbihhKTtpZihkKXtpZihpKXtmb3IoZiBpbiBhKWlmKGMuYXBwbHkoYVtmXSxkKT09PSExKWJyZWFrfWVsc2UgZm9yKDtnPGg7KWlmKGMuYXBwbHkoYVtnKytdLGQpPT09ITEpYnJlYWt9ZWxzZSBpZihpKXtmb3IoZiBpbiBhKWlmKGMuY2FsbChhW2ZdLGYsYVtmXSk9PT0hMSlicmVha31lbHNlIGZvcig7ZzxoOylpZihjLmNhbGwoYVtnXSxnLGFbZysrXSk9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTpIP2Z1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOkguY2FsbChhKX06ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6KGErIiIpLnJlcGxhY2UoaywiIikucmVwbGFjZShsLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8W107aWYoYSE9bnVsbCl7dmFyIGQ9ZS50eXBlKGEpO2EubGVuZ3RoPT1udWxsfHxkPT09InN0cmluZyJ8fGQ9PT0iZnVuY3Rpb24ifHxkPT09InJlZ2V4cCJ8fGUuaXNXaW5kb3coYSk/Ri5jYWxsKGMsYSk6ZS5tZXJnZShjLGEpfXJldHVybiBjfSxpbkFycmF5OmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtpZihiKXtpZihJKXJldHVybiBJLmNhbGwoYixhLGMpO2Q9Yi5sZW5ndGgsYz1jP2M8MD9NYXRoLm1heCgwLGQrYyk6YzowO2Zvcig7YzxkO2MrKylpZihjIGluIGImJmJbY109PT1hKXJldHVybiBjfXJldHVybi0xfSxtZXJnZTpmdW5jdGlvbihhLGMpe3ZhciBkPWEubGVuZ3RoLGU9MDtpZih0eXBlb2YgYy5sZW5ndGg9PSJudW1iZXIiKWZvcih2YXIgZj1jLmxlbmd0aDtlPGY7ZSsrKWFbZCsrXT1jW2VdO2Vsc2Ugd2hpbGUoY1tlXSE9PWIpYVtkKytdPWNbZSsrXTthLmxlbmd0aD1kO3JldHVybiBhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlO2M9ISFjO2Zvcih2YXIgZj0wLGc9YS5sZW5ndGg7ZjxnO2YrKyllPSEhYihhW2ZdLGYpLGMhPT1lJiZkLnB1c2goYVtmXSk7cmV0dXJuIGR9LG1hcDpmdW5jdGlvbihhLGMsZCl7dmFyIGYsZyxoPVtdLGk9MCxqPWEubGVuZ3RoLGs9YSBpbnN0YW5jZW9mIGV8fGohPT1iJiZ0eXBlb2Ygaj09Im51bWJlciImJihqPjAmJmFbMF0mJmFbai0xXXx8aj09PTB8fGUuaXNBcnJheShhKSk7aWYoaylmb3IoO2k8ajtpKyspZj1jKGFbaV0saSxkKSxmIT1udWxsJiYoaFtoLmxlbmd0aF09Zik7ZWxzZSBmb3IoZyBpbiBhKWY9YyhhW2ddLGcsZCksZiE9bnVsbCYmKGhbaC5sZW5ndGhdPWYpO3JldHVybiBoLmNvbmNhdC5hcHBseShbXSxoKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGEsYyl7aWYodHlwZW9mIGM9PSJzdHJpbmciKXt2YXIgZD1hW2NdO2M9YSxhPWR9aWYoIWUuaXNGdW5jdGlvbihhKSlyZXR1cm4gYjt2YXIgZj1HLmNhbGwoYXJndW1lbnRzLDIpLGc9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShjLGYuY29uY2F0KEcuY2FsbChhcmd1bWVudHMpKSl9O2cuZ3VpZD1hLmd1aWQ9YS5ndWlkfHxnLmd1aWR8fGUuZ3VpZCsrO3JldHVybiBnfSxhY2Nlc3M6ZnVuY3Rpb24oYSxjLGQsZixnLGgpe3ZhciBpPWEubGVuZ3RoO2lmKHR5cGVvZiBjPT0ib2JqZWN0Iil7Zm9yKHZhciBqIGluIGMpZS5hY2Nlc3MoYSxqLGNbal0sZixnLGQpO3JldHVybiBhfWlmKGQhPT1iKXtmPSFoJiZmJiZlLmlzRnVuY3Rpb24oZCk7Zm9yKHZhciBrPTA7azxpO2srKylnKGFba10sYyxmP2QuY2FsbChhW2tdLGssZyhhW2tdLGMpKTpkLGgpO3JldHVybiBhfXJldHVybiBpP2coYVswXSxjKTpifSxub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX0sdWFNYXRjaDpmdW5jdGlvbihhKXthPWEudG9Mb3dlckNhc2UoKTt2YXIgYj1zLmV4ZWMoYSl8fHQuZXhlYyhhKXx8dS5leGVjKGEpfHxhLmluZGV4T2YoImNvbXBhdGlibGUiKTwwJiZ2LmV4ZWMoYSl8fFtdO3JldHVybnticm93c2VyOmJbMV18fCIiLHZlcnNpb246YlsyXXx8IjAifX0sc3ViOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiLGMpe3JldHVybiBuZXcgYS5mbi5pbml0KGIsYyl9ZS5leHRlbmQoITAsYSx0aGlzKSxhLnN1cGVyY2xhc3M9dGhpcyxhLmZuPWEucHJvdG90eXBlPXRoaXMoKSxhLmZuLmNvbnN0cnVjdG9yPWEsYS5zdWI9dGhpcy5zdWIsYS5mbi5pbml0PWZ1bmN0aW9uKGQsZil7ZiYmZiBpbnN0YW5jZW9mIGUmJiEoZiBpbnN0YW5jZW9mIGEpJiYoZj1hKGYpKTtyZXR1cm4gZS5mbi5pbml0LmNhbGwodGhpcyxkLGYsYil9LGEuZm4uaW5pdC5wcm90b3R5cGU9YS5mbjt2YXIgYj1hKGMpO3JldHVybiBhfSxicm93c2VyOnt9fSksZS5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7SlsiW29iamVjdCAiK2IrIl0iXT1iLnRvTG93ZXJDYXNlKCl9KSxBPWUudWFNYXRjaCh6KSxBLmJyb3dzZXImJihlLmJyb3dzZXJbQS5icm93c2VyXT0hMCxlLmJyb3dzZXIudmVyc2lvbj1BLnZlcnNpb24pLGUuYnJvd3Nlci53ZWJraXQmJihlLmJyb3dzZXIuc2FmYXJpPSEwKSxqLnRlc3QoIsKgIikmJihrPS9eW1xzXHhBMF0rLyxsPS9bXHNceEEwXSskLyksaD1lKGMpLGMuYWRkRXZlbnRMaXN0ZW5lcj9DPWZ1bmN0aW9uKCl7Yy5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixDLCExKSxlLnJlYWR5KCl9OmMuYXR0YWNoRXZlbnQmJihDPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIiYmKGMuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsQyksZS5yZWFkeSgpKX0pLHR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQmJmRlZmluZS5hbWQualF1ZXJ5JiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gZX0pO3JldHVybiBlfSgpLGc9e307Zi5DYWxsYmFja3M9ZnVuY3Rpb24oYSl7YT1hP2dbYV18fGgoYSk6e307dmFyIGM9W10sZD1bXSxlLGksaixrLGwsbT1mdW5jdGlvbihiKXt2YXIgZCxlLGcsaCxpO2ZvcihkPTAsZT1iLmxlbmd0aDtkPGU7ZCsrKWc9YltkXSxoPWYudHlwZShnKSxoPT09ImFycmF5Ij9tKGcpOmg9PT0iZnVuY3Rpb24iJiYoIWEudW5pcXVlfHwhby5oYXMoZykpJiZjLnB1c2goZyl9LG49ZnVuY3Rpb24oYixmKXtmPWZ8fFtdLGU9IWEubWVtb3J5fHxbYixmXSxpPSEwLGw9anx8MCxqPTAsaz1jLmxlbmd0aDtmb3IoO2MmJmw8aztsKyspaWYoY1tsXS5hcHBseShiLGYpPT09ITEmJmEuc3RvcE9uRmFsc2Upe2U9ITA7YnJlYWt9aT0hMSxjJiYoYS5vbmNlP2U9PT0hMD9vLmRpc2FibGUoKTpjPVtdOmQmJmQubGVuZ3RoJiYoZT1kLnNoaWZ0KCksby5maXJlV2l0aChlWzBdLGVbMV0pKSl9LG89e2FkZDpmdW5jdGlvbigpe2lmKGMpe3ZhciBhPWMubGVuZ3RoO20oYXJndW1lbnRzKSxpP2s9Yy5sZW5ndGg6ZSYmZSE9PSEwJiYoaj1hLG4oZVswXSxlWzFdKSl9cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe2lmKGMpe3ZhciBiPWFyZ3VtZW50cyxkPTAsZT1iLmxlbmd0aDtmb3IoO2Q8ZTtkKyspZm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspaWYoYltkXT09PWNbZl0pe2kmJmY8PWsmJihrLS0sZjw9bCYmbC0tKSxjLnNwbGljZShmLS0sMSk7aWYoYS51bmlxdWUpYnJlYWt9fXJldHVybiB0aGlzfSxoYXM6ZnVuY3Rpb24oYSl7aWYoYyl7dmFyIGI9MCxkPWMubGVuZ3RoO2Zvcig7YjxkO2IrKylpZihhPT09Y1tiXSlyZXR1cm4hMH1yZXR1cm4hMX0sZW1wdHk6ZnVuY3Rpb24oKXtjPVtdO3JldHVybiB0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7Yz1kPWU9YjtyZXR1cm4gdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hY30sbG9jazpmdW5jdGlvbigpe2Q9YiwoIWV8fGU9PT0hMCkmJm8uZGlzYWJsZSgpO3JldHVybiB0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hZH0sZmlyZVdpdGg6ZnVuY3Rpb24oYixjKXtkJiYoaT9hLm9uY2V8fGQucHVzaChbYixjXSk6KCFhLm9uY2V8fCFlKSYmbihiLGMpKTtyZXR1cm4gdGhpc30sZmlyZTpmdW5jdGlvbigpe28uZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpO3JldHVybiB0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhZX19O3JldHVybiBvfTt2YXIgaT1bXS5zbGljZTtmLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksYz1mLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxkPWYuQ2FsbGJhY2tzKCJtZW1vcnkiKSxlPSJwZW5kaW5nIixnPXtyZXNvbHZlOmIscmVqZWN0OmMsbm90aWZ5OmR9LGg9e2RvbmU6Yi5hZGQsZmFpbDpjLmFkZCxwcm9ncmVzczpkLmFkZCxzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBlfSxpc1Jlc29sdmVkOmIuZmlyZWQsaXNSZWplY3RlZDpjLmZpcmVkLHRoZW46ZnVuY3Rpb24oYSxiLGMpe2kuZG9uZShhKS5mYWlsKGIpLnByb2dyZXNzKGMpO3JldHVybiB0aGlzfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kb25lLmFwcGx5KGksYXJndW1lbnRzKS5mYWlsLmFwcGx5KGksYXJndW1lbnRzKX0scGlwZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuRGVmZXJyZWQoZnVuY3Rpb24oZCl7Zi5lYWNoKHtkb25lOlthLCJyZXNvbHZlIl0sZmFpbDpbYiwicmVqZWN0Il0scHJvZ3Jlc3M6W2MsIm5vdGlmeSJdfSxmdW5jdGlvbihhLGIpe3ZhciBjPWJbMF0sZT1iWzFdLGc7Zi5pc0Z1bmN0aW9uKGMpP2lbYV0oZnVuY3Rpb24oKXtnPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpLGcmJmYuaXNGdW5jdGlvbihnLnByb21pc2UpP2cucHJvbWlzZSgpLnRoZW4oZC5yZXNvbHZlLGQucmVqZWN0LGQubm90aWZ5KTpkW2UrIldpdGgiXSh0aGlzPT09aT9kOnRoaXMsW2ddKX0pOmlbYV0oZFtlXSl9KX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtpZihhPT1udWxsKWE9aDtlbHNlIGZvcih2YXIgYiBpbiBoKWFbYl09aFtiXTtyZXR1cm4gYX19LGk9aC5wcm9taXNlKHt9KSxqO2ZvcihqIGluIGcpaVtqXT1nW2pdLmZpcmUsaVtqKyJXaXRoIl09Z1tqXS5maXJlV2l0aDtpLmRvbmUoZnVuY3Rpb24oKXtlPSJyZXNvbHZlZCJ9LGMuZGlzYWJsZSxkLmxvY2spLmZhaWwoZnVuY3Rpb24oKXtlPSJyZWplY3RlZCJ9LGIuZGlzYWJsZSxkLmxvY2spLGEmJmEuY2FsbChpLGkpO3JldHVybiBpfSx3aGVuOmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIG0oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2VbYV09YXJndW1lbnRzLmxlbmd0aD4xP2kuY2FsbChhcmd1bWVudHMsMCk6YixqLm5vdGlmeVdpdGgoayxlKX19ZnVuY3Rpb24gbChhKXtyZXR1cm4gZnVuY3Rpb24oYyl7YlthXT1hcmd1bWVudHMubGVuZ3RoPjE/aS5jYWxsKGFyZ3VtZW50cywwKTpjLC0tZ3x8ai5yZXNvbHZlV2l0aChqLGIpfX12YXIgYj1pLmNhbGwoYXJndW1lbnRzLDApLGM9MCxkPWIubGVuZ3RoLGU9QXJyYXkoZCksZz1kLGg9ZCxqPWQ8PTEmJmEmJmYuaXNGdW5jdGlvbihhLnByb21pc2UpP2E6Zi5EZWZlcnJlZCgpLGs9ai5wcm9taXNlKCk7aWYoZD4xKXtmb3IoO2M8ZDtjKyspYltjXSYmYltjXS5wcm9taXNlJiZmLmlzRnVuY3Rpb24oYltjXS5wcm9taXNlKT9iW2NdLnByb21pc2UoKS50aGVuKGwoYyksai5yZWplY3QsbShjKSk6LS1nO2d8fGoucmVzb2x2ZVdpdGgoaixiKX1lbHNlIGohPT1hJiZqLnJlc29sdmVXaXRoKGosZD9bYV06W10pO3JldHVybiBrfX0pLGYuc3VwcG9ydD1mdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksYj1jLmRvY3VtZW50RWxlbWVudCxkLGUsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU7YS5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxhLmlubmVySFRNTD0iICAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJyBzdHlsZT0ndG9wOjFweDtmbG9hdDpsZWZ0O29wYWNpdHk6LjU1Oyc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz48bmF2PjwvbmF2PiIsZD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIiksZT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF07aWYoIWR8fCFkLmxlbmd0aHx8IWUpcmV0dXJue307Zz1jLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLGg9Zy5hcHBlbmRDaGlsZChjLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxpPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0saz17bGVhZGluZ1doaXRlc3BhY2U6YS5maXJzdENoaWxkLm5vZGVUeXBlPT09Myx0Ym9keTohYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsaHRtbFNlcmlhbGl6ZTohIWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsc3R5bGU6L3RvcC8udGVzdChlLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksaHJlZk5vcm1hbGl6ZWQ6ZS5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIvYSIsb3BhY2l0eTovXjAuNTUvLnRlc3QoZS5zdHlsZS5vcGFjaXR5KSxjc3NGbG9hdDohIWUuc3R5bGUuY3NzRmxvYXQsdW5rbm93bkVsZW1zOiEhYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgibmF2IikubGVuZ3RoLGNoZWNrT246aS52YWx1ZT09PSJvbiIsb3B0U2VsZWN0ZWQ6aC5zZWxlY3RlZCxnZXRTZXRBdHRyaWJ1dGU6YS5jbGFzc05hbWUhPT0idCIsZW5jdHlwZTohIWMuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsc3VibWl0QnViYmxlczohMCxjaGFuZ2VCdWJibGVzOiEwLGZvY3VzaW5CdWJibGVzOiExLGRlbGV0ZUV4cGFuZG86ITAsbm9DbG9uZUV2ZW50OiEwLGlubGluZUJsb2NrTmVlZHNMYXlvdXQ6ITEsc2hyaW5rV3JhcEJsb2NrczohMSxyZWxpYWJsZU1hcmdpblJpZ2h0OiEwfSxpLmNoZWNrZWQ9ITAsay5ub0Nsb25lQ2hlY2tlZD1pLmNsb25lTm9kZSghMCkuY2hlY2tlZCxnLmRpc2FibGVkPSEwLGsub3B0RGlzYWJsZWQ9IWguZGlzYWJsZWQ7dHJ5e2RlbGV0ZSBhLnRlc3R9Y2F0Y2godil7ay5kZWxldGVFeHBhbmRvPSExfSFhLmFkZEV2ZW50TGlzdGVuZXImJmEuYXR0YWNoRXZlbnQmJmEuZmlyZUV2ZW50JiYoYS5hdHRhY2hFdmVudCgib25jbGljayIsZnVuY3Rpb24oKXtrLm5vQ2xvbmVFdmVudD0hMX0pLGEuY2xvbmVOb2RlKCEwKS5maXJlRXZlbnQoIm9uY2xpY2siKSksaT1jLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksaS52YWx1ZT0idCIsaS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGsucmFkaW9WYWx1ZT1pLnZhbHVlPT09InQiLGkuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLGEuYXBwZW5kQ2hpbGQoaSksbD1jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxsLmFwcGVuZENoaWxkKGEubGFzdENoaWxkKSxrLmNoZWNrQ2xvbmU9bC5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsYS5pbm5lckhUTUw9IiIsYS5zdHlsZS53aWR0aD1hLnN0eWxlLnBhZGRpbmdMZWZ0PSIxcHgiLG09Yy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLG89Yy5jcmVhdGVFbGVtZW50KG0/ImRpdiI6ImJvZHkiKSxwPXt2aXNpYmlsaXR5OiJoaWRkZW4iLHdpZHRoOjAsaGVpZ2h0OjAsYm9yZGVyOjAsbWFyZ2luOjAsYmFja2dyb3VuZDoibm9uZSJ9LG0mJmYuZXh0ZW5kKHAse3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiLTk5OXB4Iix0b3A6Ii05OTlweCJ9KTtmb3IodCBpbiBwKW8uc3R5bGVbdF09cFt0XTtvLmFwcGVuZENoaWxkKGEpLG49bXx8YixuLmluc2VydEJlZm9yZShvLG4uZmlyc3RDaGlsZCksay5hcHBlbmRDaGVja2VkPWkuY2hlY2tlZCxrLmJveE1vZGVsPWEub2Zmc2V0V2lkdGg9PT0yLCJ6b29tImluIGEuc3R5bGUmJihhLnN0eWxlLmRpc3BsYXk9ImlubGluZSIsYS5zdHlsZS56b29tPTEsay5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PWEub2Zmc2V0V2lkdGg9PT0yLGEuc3R5bGUuZGlzcGxheT0iIixhLmlubmVySFRNTD0iPGRpdiBzdHlsZT0nd2lkdGg6NHB4Oyc+PC9kaXY+IixrLnNocmlua1dyYXBCbG9ja3M9YS5vZmZzZXRXaWR0aCE9PTIpLGEuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZCBzdHlsZT0ncGFkZGluZzowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSc+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIscT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLHU9cVswXS5vZmZzZXRIZWlnaHQ9PT0wLHFbMF0uc3R5bGUuZGlzcGxheT0iIixxWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGsucmVsaWFibGVIaWRkZW5PZmZzZXRzPXUmJnFbMF0ub2Zmc2V0SGVpZ2h0PT09MCxhLmlubmVySFRNTD0iIixjLmRlZmF1bHRWaWV3JiZjLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihqPWMuY3JlYXRlRWxlbWVudCgiZGl2Iiksai5zdHlsZS53aWR0aD0iMCIsai5zdHlsZS5tYXJnaW5SaWdodD0iMCIsYS5hcHBlbmRDaGlsZChqKSxrLnJlbGlhYmxlTWFyZ2luUmlnaHQ9KHBhcnNlSW50KChjLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoaixudWxsKXx8e21hcmdpblJpZ2h0OjB9KS5tYXJnaW5SaWdodCwxMCl8fDApPT09MCk7aWYoYS5hdHRhY2hFdmVudClmb3IodCBpbntzdWJtaXQ6MSxjaGFuZ2U6MSxmb2N1c2luOjF9KXM9Im9uIit0LHU9cyBpbiBhLHV8fChhLnNldEF0dHJpYnV0ZShzLCJyZXR1cm47IiksdT10eXBlb2YgYVtzXT09ImZ1bmN0aW9uIiksa1t0KyJCdWJibGVzIl09dTtmKGZ1bmN0aW9uKCl7dmFyIGEsYixkLGUsZyxoLGk9MSxqPSJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7bWFyZ2luOjA7IixsPSJ2aXNpYmlsaXR5OmhpZGRlbjtib3JkZXI6MDsiLG49InN0eWxlPSciK2orImJvcmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7JyIscD0iPGRpdiAiK24rIj48ZGl2PjwvZGl2PjwvZGl2PiIrIjx0YWJsZSAiK24rIiBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnPiIrIjx0cj48dGQ+PC90ZD48L3RyPjwvdGFibGU+IjttPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTshbXx8KGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxhLnN0eWxlLmNzc1RleHQ9bCsid2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlvbjpzdGF0aWM7dG9wOjA7bWFyZ2luLXRvcDoiK2krInB4IixtLmluc2VydEJlZm9yZShhLG0uZmlyc3RDaGlsZCksbz1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLG8uc3R5bGUuY3NzVGV4dD1qK2wsby5pbm5lckhUTUw9cCxhLmFwcGVuZENoaWxkKG8pLGI9by5maXJzdENoaWxkLGQ9Yi5maXJzdENoaWxkLGc9Yi5uZXh0U2libGluZy5maXJzdENoaWxkLmZpcnN0Q2hpbGQsaD17ZG9lc05vdEFkZEJvcmRlcjpkLm9mZnNldFRvcCE9PTUsZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHM6Zy5vZmZzZXRUb3A9PT01fSxkLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsZC5zdHlsZS50b3A9IjIwcHgiLGguZml4ZWRQb3NpdGlvbj1kLm9mZnNldFRvcD09PTIwfHxkLm9mZnNldFRvcD09PTE1LGQuc3R5bGUucG9zaXRpb249ZC5zdHlsZS50b3A9IiIsYi5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixiLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsaC5zdWJ0cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGU9ZC5vZmZzZXRUb3A9PT0tNSxoLmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0PW0ub2Zmc2V0VG9wIT09aSxtLnJlbW92ZUNoaWxkKGEpLG89YT1udWxsLGYuZXh0ZW5kKGssaCkpfSksby5pbm5lckhUTUw9IiIsbi5yZW1vdmVDaGlsZChvKSxvPWw9Zz1oPW09aj1hPWk9bnVsbDtyZXR1cm4ga30oKSxmLmJveE1vZGVsPWYuc3VwcG9ydC5ib3hNb2RlbDt2YXIgaj0vXig/Olx7LipcfXxcWy4qXF0pJC8saz0vKFtBLVpdKS9nO2YuZXh0ZW5kKHtjYWNoZTp7fSx1dWlkOjAsZXhwYW5kbzoialF1ZXJ5IisoZi5mbi5qcXVlcnkrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksbm9EYXRhOntlbWJlZDohMCxvYmplY3Q6ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIsYXBwbGV0OiEwfSxoYXNEYXRhOmZ1bmN0aW9uKGEpe2E9YS5ub2RlVHlwZT9mLmNhY2hlW2FbZi5leHBhbmRvXV06YVtmLmV4cGFuZG9dO3JldHVybiEhYSYmIW0oYSl9LGRhdGE6ZnVuY3Rpb24oYSxjLGQsZSl7aWYoISFmLmFjY2VwdERhdGEoYSkpe3ZhciBnLGgsaSxqPWYuZXhwYW5kbyxrPXR5cGVvZiBjPT0ic3RyaW5nIixsPWEubm9kZVR5cGUsbT1sP2YuY2FjaGU6YSxuPWw/YVtmLmV4cGFuZG9dOmFbZi5leHBhbmRvXSYmZi5leHBhbmRvLG89Yz09PSJldmVudHMiO2lmKCghbnx8IW1bbl18fCFvJiYhZSYmIW1bbl0uZGF0YSkmJmsmJmQ9PT1iKXJldHVybjtufHwobD9hW2YuZXhwYW5kb109bj0rK2YudXVpZDpuPWYuZXhwYW5kbyksbVtuXXx8KG1bbl09e30sbHx8KG1bbl0udG9KU09OPWYubm9vcCkpO2lmKHR5cGVvZiBjPT0ib2JqZWN0Inx8dHlwZW9mIGM9PSJmdW5jdGlvbiIpZT9tW25dPWYuZXh0ZW5kKG1bbl0sYyk6bVtuXS5kYXRhPWYuZXh0ZW5kKG1bbl0uZGF0YSxjKTtnPWg9bVtuXSxlfHwoaC5kYXRhfHwoaC5kYXRhPXt9KSxoPWguZGF0YSksZCE9PWImJihoW2YuY2FtZWxDYXNlKGMpXT1kKTtpZihvJiYhaFtjXSlyZXR1cm4gZy5ldmVudHM7az8oaT1oW2NdLGk9PW51bGwmJihpPWhbZi5jYW1lbENhc2UoYyldKSk6aT1oO3JldHVybiBpfX0scmVtb3ZlRGF0YTpmdW5jdGlvbihhLGIsYyl7aWYoISFmLmFjY2VwdERhdGEoYSkpe3ZhciBkLGUsZyxoPWYuZXhwYW5kbyxpPWEubm9kZVR5cGUsaj1pP2YuY2FjaGU6YSxrPWk/YVtmLmV4cGFuZG9dOmYuZXhwYW5kbztpZighaltrXSlyZXR1cm47aWYoYil7ZD1jP2pba106altrXS5kYXRhO2lmKGQpe2YuaXNBcnJheShiKT9iPWI6YiBpbiBkP2I9W2JdOihiPWYuY2FtZWxDYXNlKGIpLGIgaW4gZD9iPVtiXTpiPWIuc3BsaXQoIiAiKSk7Zm9yKGU9MCxnPWIubGVuZ3RoO2U8ZztlKyspZGVsZXRlIGRbYltlXV07aWYoIShjP206Zi5pc0VtcHR5T2JqZWN0KShkKSlyZXR1cm59fWlmKCFjKXtkZWxldGUgaltrXS5kYXRhO2lmKCFtKGpba10pKXJldHVybn1mLnN1cHBvcnQuZGVsZXRlRXhwYW5kb3x8IWouc2V0SW50ZXJ2YWw/ZGVsZXRlIGpba106altrXT1udWxsLGkmJihmLnN1cHBvcnQuZGVsZXRlRXhwYW5kbz9kZWxldGUgYVtmLmV4cGFuZG9dOmEucmVtb3ZlQXR0cmlidXRlP2EucmVtb3ZlQXR0cmlidXRlKGYuZXhwYW5kbyk6YVtmLmV4cGFuZG9dPW51bGwpfX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRhdGEoYSxiLGMsITApfSxhY2NlcHREYXRhOmZ1bmN0aW9uKGEpe2lmKGEubm9kZU5hbWUpe3ZhciBiPWYubm9EYXRhW2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07aWYoYilyZXR1cm4gYiE9PSEwJiZhLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpPT09Yn1yZXR1cm4hMH19KSxmLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGMpe3ZhciBkLGUsZyxoPW51bGw7aWYodHlwZW9mIGE9PSJ1bmRlZmluZWQiKXtpZih0aGlzLmxlbmd0aCl7aD1mLmRhdGEodGhpc1swXSk7aWYodGhpc1swXS5ub2RlVHlwZT09PTEmJiFmLl9kYXRhKHRoaXNbMF0sInBhcnNlZEF0dHJzIikpe2U9dGhpc1swXS5hdHRyaWJ1dGVzO2Zvcih2YXIgaT0wLGo9ZS5sZW5ndGg7aTxqO2krKylnPWVbaV0ubmFtZSxnLmluZGV4T2YoImRhdGEtIik9PT0wJiYoZz1mLmNhbWVsQ2FzZShnLnN1YnN0cmluZyg1KSksbCh0aGlzWzBdLGcsaFtnXSkpO2YuX2RhdGEodGhpc1swXSwicGFyc2VkQXR0cnMiLCEwKX19cmV0dXJuIGh9aWYodHlwZW9mIGE9PSJvYmplY3QiKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmRhdGEodGhpcyxhKX0pO2Q9YS5zcGxpdCgiLiIpLGRbMV09ZFsxXT8iLiIrZFsxXToiIjtpZihjPT09Yil7aD10aGlzLnRyaWdnZXJIYW5kbGVyKCJnZXREYXRhIitkWzFdKyIhIixbZFswXV0pLGg9PT1iJiZ0aGlzLmxlbmd0aCYmKGg9Zi5kYXRhKHRoaXNbMF0sYSksaD1sKHRoaXNbMF0sYSxoKSk7cmV0dXJuIGg9PT1iJiZkWzFdP3RoaXMuZGF0YShkWzBdKTpofXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1mKHRoaXMpLGU9W2RbMF0sY107Yi50cmlnZ2VySGFuZGxlcigic2V0RGF0YSIrZFsxXSsiISIsZSksZi5kYXRhKHRoaXMsYSxjKSxiLnRyaWdnZXJIYW5kbGVyKCJjaGFuZ2VEYXRhIitkWzFdKyIhIixlKX0pfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLGYuZXh0ZW5kKHtfbWFyazpmdW5jdGlvbihhLGIpe2EmJihiPShifHwiZngiKSsibWFyayIsZi5fZGF0YShhLGIsKGYuX2RhdGEoYSxiKXx8MCkrMSkpfSxfdW5tYXJrOmZ1bmN0aW9uKGEsYixjKXthIT09ITAmJihjPWIsYj1hLGE9ITEpO2lmKGIpe2M9Y3x8ImZ4Ijt2YXIgZD1jKyJtYXJrIixlPWE/MDooZi5fZGF0YShiLGQpfHwxKS0xO2U/Zi5fZGF0YShiLGQsZSk6KGYucmVtb3ZlRGF0YShiLGQsITApLG4oYixjLCJtYXJrIikpfX0scXVldWU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKGEpe2I9KGJ8fCJmeCIpKyJxdWV1ZSIsZD1mLl9kYXRhKGEsYiksYyYmKCFkfHxmLmlzQXJyYXkoYyk/ZD1mLl9kYXRhKGEsYixmLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKTtyZXR1cm4gZHx8W119fSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPWYucXVldWUoYSxiKSxkPWMuc2hpZnQoKSxlPXt9O2Q9PT0iaW5wcm9ncmVzcyImJihkPWMuc2hpZnQoKSksZCYmKGI9PT0iZngiJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxmLl9kYXRhKGEsYisiLnJ1biIsZSksZC5jYWxsKGEsZnVuY3Rpb24oKXtmLmRlcXVldWUoYSxiKX0sZSkpLGMubGVuZ3RofHwoZi5yZW1vdmVEYXRhKGEsYisicXVldWUgIitiKyIucnVuIiwhMCksbihhLGIsInF1ZXVlIikpfX0pLGYuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGMpe3R5cGVvZiBhIT0ic3RyaW5nIiYmKGM9YSxhPSJmeCIpO2lmKGM9PT1iKXJldHVybiBmLnF1ZXVlKHRoaXNbMF0sYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWYucXVldWUodGhpcyxhLGMpO2E9PT0iZngiJiZiWzBdIT09ImlucHJvZ3Jlc3MiJiZmLmRlcXVldWUodGhpcyxhKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmRlcXVldWUodGhpcyxhKX0pfSxkZWxheTpmdW5jdGlvbihhLGIpe2E9Zi5meD9mLmZ4LnNwZWVkc1thXXx8YTphLGI9Ynx8ImZ4IjtyZXR1cm4gdGhpcy5xdWV1ZShiLGZ1bmN0aW9uKGIsYyl7dmFyIGQ9c2V0VGltZW91dChiLGEpO2Muc3RvcD1mdW5jdGlvbigpe2NsZWFyVGltZW91dChkKX19KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5xdWV1ZShhfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihhLGMpe2Z1bmN0aW9uIG0oKXstLWh8fGQucmVzb2x2ZVdpdGgoZSxbZV0pfXR5cGVvZiBhIT0ic3RyaW5nIiYmKGM9YSxhPWIpLGE9YXx8ImZ4Ijt2YXIgZD1mLkRlZmVycmVkKCksZT10aGlzLGc9ZS5sZW5ndGgsaD0xLGk9YSsiZGVmZXIiLGo9YSsicXVldWUiLGs9YSsibWFyayIsbDt3aGlsZShnLS0paWYobD1mLmRhdGEoZVtnXSxpLGIsITApfHwoZi5kYXRhKGVbZ10saixiLCEwKXx8Zi5kYXRhKGVbZ10sayxiLCEwKSkmJmYuZGF0YShlW2ddLGksZi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksITApKWgrKyxsLmFkZChtKTttKCk7cmV0dXJuIGQucHJvbWlzZSgpfX0pO3ZhciBvPS9bXG5cdFxyXS9nLHA9L1xzKy8scT0vXHIvZyxyPS9eKD86YnV0dG9ufGlucHV0KSQvaSxzPS9eKD86YnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpJC9pLHQ9L15hKD86cmVhKT8kL2ksdT0vXig/OmF1dG9mb2N1c3xhdXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQvaSx2PWYuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGUsdyx4LHk7Zi5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZi5hY2Nlc3ModGhpcyxhLGIsITAsZi5hdHRyKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5yZW1vdmVBdHRyKHRoaXMsYSl9KX0scHJvcDpmdW5jdGlvbihhLGIpe3JldHVybiBmLmFjY2Vzcyh0aGlzLGEsYiwhMCxmLnByb3ApfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGEpe2E9Zi5wcm9wRml4W2FdfHxhO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0cnl7dGhpc1thXT1iLGRlbGV0ZSB0aGlzW2FdfWNhdGNoKGMpe319KX0sYWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZyxoLGk7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS5hZGRDbGFzcyhhLmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZihhJiZ0eXBlb2YgYT09InN0cmluZyIpe2I9YS5zcGxpdChwKTtmb3IoYz0wLGQ9dGhpcy5sZW5ndGg7YzxkO2MrKyl7ZT10aGlzW2NdO2lmKGUubm9kZVR5cGU9PT0xKWlmKCFlLmNsYXNzTmFtZSYmYi5sZW5ndGg9PT0xKWUuY2xhc3NOYW1lPWE7ZWxzZXtnPSIgIitlLmNsYXNzTmFtZSsiICI7Zm9yKGg9MCxpPWIubGVuZ3RoO2g8aTtoKyspfmcuaW5kZXhPZigiICIrYltoXSsiICIpfHwoZys9YltoXSsiICIpO2UuY2xhc3NOYW1lPWYudHJpbShnKX19fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZyxoLGksajtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRoaXMpLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGEmJnR5cGVvZiBhPT0ic3RyaW5nInx8YT09PWIpe2M9KGF8fCIiKS5zcGxpdChwKTtmb3IoZD0wLGU9dGhpcy5sZW5ndGg7ZDxlO2QrKyl7Zz10aGlzW2RdO2lmKGcubm9kZVR5cGU9PT0xJiZnLmNsYXNzTmFtZSlpZihhKXtoPSgiICIrZy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKG8sIiAiKTtmb3IoaT0wLGo9Yy5sZW5ndGg7aTxqO2krKyloPWgucmVwbGFjZSgiICIrY1tpXSsiICIsIiAiKTtnLmNsYXNzTmFtZT1mLnRyaW0oaCl9ZWxzZSBnLmNsYXNzTmFtZT0iIn19cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGEsZD10eXBlb2YgYj09ImJvb2xlYW4iO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe2YodGhpcykudG9nZ2xlQ2xhc3MoYS5jYWxsKHRoaXMsYyx0aGlzLmNsYXNzTmFtZSxiKSxiKX0pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihjPT09InN0cmluZyIpe3ZhciBlLGc9MCxoPWYodGhpcyksaT1iLGo9YS5zcGxpdChwKTt3aGlsZShlPWpbZysrXSlpPWQ/aTohaC5oYXNDbGFzcyhlKSxoW2k/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXShlKX1lbHNlIGlmKGM9PT0idW5kZWZpbmVkInx8Yz09PSJib29sZWFuIil0aGlzLmNsYXNzTmFtZSYmZi5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT0hMT8iIjpmLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiJ9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGI9IiAiK2ErIiAiLGM9MCxkPXRoaXMubGVuZ3RoO2Zvcig7YzxkO2MrKylpZih0aGlzW2NdLm5vZGVUeXBlPT09MSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UobywiICIpLmluZGV4T2YoYik+LTEpcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZz10aGlzWzBdO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtpZihnKXtjPWYudmFsSG9va3NbZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXXx8Zi52YWxIb29rc1tnLnR5cGVdO2lmKGMmJiJnZXQiaW4gYyYmKGQ9Yy5nZXQoZywidmFsdWUiKSkhPT1iKXJldHVybiBkO2Q9Zy52YWx1ZTtyZXR1cm4gdHlwZW9mIGQ9PSJzdHJpbmciP2QucmVwbGFjZShxLCIiKTpkPT1udWxsPyIiOmR9cmV0dXJuIGJ9ZT1mLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihkKXt2YXIgZz1mKHRoaXMpLGg7aWYodGhpcy5ub2RlVHlwZT09PTEpe2U/aD1hLmNhbGwodGhpcyxkLGcudmFsKCkpOmg9YSxoPT1udWxsP2g9IiI6dHlwZW9mIGg9PSJudW1iZXIiP2grPSIiOmYuaXNBcnJheShoKSYmKGg9Zi5tYXAoaCxmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8iIjphKyIifSkpLGM9Zi52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldfHxmLnZhbEhvb2tzW3RoaXMudHlwZV07aWYoIWN8fCEoInNldCJpbiBjKXx8Yy5zZXQodGhpcyxoLCJ2YWx1ZSIpPT09Yil0aGlzLnZhbHVlPWh9fSl9fSksZi5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLmF0dHJpYnV0ZXMudmFsdWU7cmV0dXJuIWJ8fGIuc3BlY2lmaWVkP2EudmFsdWU6YS50ZXh0fX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZz1hLnNlbGVjdGVkSW5kZXgsaD1bXSxpPWEub3B0aW9ucyxqPWEudHlwZT09PSJzZWxlY3Qtb25lIjtpZihnPDApcmV0dXJuIG51bGw7Yz1qP2c6MCxkPWo/ZysxOmkubGVuZ3RoO2Zvcig7YzxkO2MrKyl7ZT1pW2NdO2lmKGUuc2VsZWN0ZWQmJihmLnN1cHBvcnQub3B0RGlzYWJsZWQ/IWUuZGlzYWJsZWQ6ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIik9PT1udWxsKSYmKCFlLnBhcmVudE5vZGUuZGlzYWJsZWR8fCFmLm5vZGVOYW1lKGUucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2I9ZihlKS52YWwoKTtpZihqKXJldHVybiBiO2gucHVzaChiKX19aWYoaiYmIWgubGVuZ3RoJiZpLmxlbmd0aClyZXR1cm4gZihpW2ddKS52YWwoKTtyZXR1cm4gaH0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9Zi5tYWtlQXJyYXkoYik7ZihhKS5maW5kKCJvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD1mLmluQXJyYXkoZih0aGlzKS52YWwoKSxjKT49MH0pLGMubGVuZ3RofHwoYS5zZWxlY3RlZEluZGV4PS0xKTtyZXR1cm4gY319fSxhdHRyRm46e3ZhbDohMCxjc3M6ITAsaHRtbDohMCx0ZXh0OiEwLGRhdGE6ITAsd2lkdGg6ITAsaGVpZ2h0OiEwLG9mZnNldDohMH0sYXR0cjpmdW5jdGlvbihhLGMsZCxlKXt2YXIgZyxoLGksaj1hLm5vZGVUeXBlO2lmKCFhfHxqPT09M3x8aj09PTh8fGo9PT0yKXJldHVybiBiO2lmKGUmJmMgaW4gZi5hdHRyRm4pcmV0dXJuIGYoYSlbY10oZCk7aWYoISgiZ2V0QXR0cmlidXRlImluIGEpKXJldHVybiBmLnByb3AoYSxjLGQpO2k9aiE9PTF8fCFmLmlzWE1MRG9jKGEpLGkmJihjPWMudG9Mb3dlckNhc2UoKSxoPWYuYXR0ckhvb2tzW2NdfHwodS50ZXN0KGMpP3g6dykpO2lmKGQhPT1iKXtpZihkPT09bnVsbCl7Zi5yZW1vdmVBdHRyKGEsYyk7cmV0dXJuIGJ9aWYoaCYmInNldCJpbiBoJiZpJiYoZz1oLnNldChhLGQsYykpIT09YilyZXR1cm4gZzthLnNldEF0dHJpYnV0ZShjLCIiK2QpO3JldHVybiBkfWlmKGgmJiJnZXQiaW4gaCYmaSYmKGc9aC5nZXQoYSxjKSkhPT1udWxsKXJldHVybiBnO2c9YS5nZXRBdHRyaWJ1dGUoYyk7cmV0dXJuIGc9PT1udWxsP2I6Z30scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxnLGg9MDtpZihhLm5vZGVUeXBlPT09MSl7ZD0oYnx8IiIpLnNwbGl0KHApLGc9ZC5sZW5ndGg7Zm9yKDtoPGc7aCsrKWU9ZFtoXS50b0xvd2VyQ2FzZSgpLGM9Zi5wcm9wRml4W2VdfHxlLGYuYXR0cihhLGUsIiIpLGEucmVtb3ZlQXR0cmlidXRlKHY/ZTpjKSx1LnRlc3QoZSkmJmMgaW4gYSYmKGFbY109ITEpfX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oYSxiKXtpZihyLnRlc3QoYS5ub2RlTmFtZSkmJmEucGFyZW50Tm9kZSlmLmVycm9yKCJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiKTtlbHNlIGlmKCFmLnN1cHBvcnQucmFkaW9WYWx1ZSYmYj09PSJyYWRpbyImJmYubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52YWx1ZTthLnNldEF0dHJpYnV0ZSgidHlwZSIsYiksYyYmKGEudmFsdWU9Yyk7cmV0dXJuIGJ9fX0sdmFsdWU6e2dldDpmdW5jdGlvbihhLGIpe2lmKHcmJmYubm9kZU5hbWUoYSwiYnV0dG9uIikpcmV0dXJuIHcuZ2V0KGEsYik7cmV0dXJuIGIgaW4gYT9hLnZhbHVlOm51bGx9LHNldDpmdW5jdGlvbihhLGIsYyl7aWYodyYmZi5ub2RlTmFtZShhLCJidXR0b24iKSlyZXR1cm4gdy5zZXQoYSxiLGMpO2EudmFsdWU9Yn19fSxwcm9wRml4Ont0YWJpbmRleDoidGFiSW5kZXgiLHJlYWRvbmx5OiJyZWFkT25seSIsImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSIsbWF4bGVuZ3RoOiJtYXhMZW5ndGgiLGNlbGxzcGFjaW5nOiJjZWxsU3BhY2luZyIsY2VsbHBhZGRpbmc6ImNlbGxQYWRkaW5nIixyb3dzcGFuOiJyb3dTcGFuIixjb2xzcGFuOiJjb2xTcGFuIix1c2VtYXA6InVzZU1hcCIsZnJhbWVib3JkZXI6ImZyYW1lQm9yZGVyIixjb250ZW50ZWRpdGFibGU6ImNvbnRlbnRFZGl0YWJsZSJ9LHByb3A6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlLGcsaCxpPWEubm9kZVR5cGU7aWYoIWF8fGk9PT0zfHxpPT09OHx8aT09PTIpcmV0dXJuIGI7aD1pIT09MXx8IWYuaXNYTUxEb2MoYSksaCYmKGM9Zi5wcm9wRml4W2NdfHxjLGc9Zi5wcm9wSG9va3NbY10pO3JldHVybiBkIT09Yj9nJiYic2V0ImluIGcmJihlPWcuc2V0KGEsZCxjKSkhPT1iP2U6YVtjXT1kOmcmJiJnZXQiaW4gZyYmKGU9Zy5nZXQoYSxjKSkhPT1udWxsP2U6YVtjXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBjPWEuZ2V0QXR0cmlidXRlTm9kZSgidGFiaW5kZXgiKTtyZXR1cm4gYyYmYy5zcGVjaWZpZWQ/cGFyc2VJbnQoYy52YWx1ZSwxMCk6cy50ZXN0KGEubm9kZU5hbWUpfHx0LnRlc3QoYS5ub2RlTmFtZSkmJmEuaHJlZj8wOmJ9fX19KSxmLmF0dHJIb29rcy50YWJpbmRleD1mLnByb3BIb29rcy50YWJJbmRleCx4PXtnZXQ6ZnVuY3Rpb24oYSxjKXt2YXIgZCxlPWYucHJvcChhLGMpO3JldHVybiBlPT09ITB8fHR5cGVvZiBlIT0iYm9vbGVhbiImJihkPWEuZ2V0QXR0cmlidXRlTm9kZShjKSkmJmQubm9kZVZhbHVlIT09ITE/Yy50b0xvd2VyQ2FzZSgpOmJ9LHNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7Yj09PSExP2YucmVtb3ZlQXR0cihhLGMpOihkPWYucHJvcEZpeFtjXXx8YyxkIGluIGEmJihhW2RdPSEwKSxhLnNldEF0dHJpYnV0ZShjLGMudG9Mb3dlckNhc2UoKSkpO3JldHVybiBjfX0sdnx8KHk9e25hbWU6ITAsaWQ6ITB9LHc9Zi52YWxIb29rcy5idXR0b249e2dldDpmdW5jdGlvbihhLGMpe3ZhciBkO2Q9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpO3JldHVybiBkJiYoeVtjXT9kLm5vZGVWYWx1ZSE9PSIiOmQuc3BlY2lmaWVkKT9kLm5vZGVWYWx1ZTpifSxzZXQ6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWEuZ2V0QXR0cmlidXRlTm9kZShkKTtlfHwoZT1jLmNyZWF0ZUF0dHJpYnV0ZShkKSxhLnNldEF0dHJpYnV0ZU5vZGUoZSkpO3JldHVybiBlLm5vZGVWYWx1ZT1iKyIifX0sZi5hdHRySG9va3MudGFiaW5kZXguc2V0PXcuc2V0LGYuZWFjaChbIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYSxiKXtmLmF0dHJIb29rc1tiXT1mLmV4dGVuZChmLmF0dHJIb29rc1tiXSx7c2V0OmZ1bmN0aW9uKGEsYyl7aWYoYz09PSIiKXthLnNldEF0dHJpYnV0ZShiLCJhdXRvIik7cmV0dXJuIGN9fX0pfSksZi5hdHRySG9va3MuY29udGVudGVkaXRhYmxlPXtnZXQ6dy5nZXQsc2V0OmZ1bmN0aW9uKGEsYixjKXtiPT09IiImJihiPSJmYWxzZSIpLHcuc2V0KGEsYixjKX19KSxmLnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWR8fGYuZWFjaChbImhyZWYiLCJzcmMiLCJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYyl7Zi5hdHRySG9va3NbY109Zi5leHRlbmQoZi5hdHRySG9va3NbY10se2dldDpmdW5jdGlvbihhKXt2YXIgZD1hLmdldEF0dHJpYnV0ZShjLDIpO3JldHVybiBkPT09bnVsbD9iOmR9fSl9KSxmLnN1cHBvcnQuc3R5bGV8fChmLmF0dHJIb29rcy5zdHlsZT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLnN0eWxlLmNzc1RleHQudG9Mb3dlckNhc2UoKXx8Yn0sc2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dD0iIitifX0pLGYuc3VwcG9ydC5vcHRTZWxlY3RlZHx8KGYucHJvcEhvb2tzLnNlbGVjdGVkPWYuZXh0ZW5kKGYucHJvcEhvb2tzLnNlbGVjdGVkLHtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO2ImJihiLnNlbGVjdGVkSW5kZXgsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCk7cmV0dXJuIG51bGx9fSkpLGYuc3VwcG9ydC5lbmN0eXBlfHwoZi5wcm9wRml4LmVuY3R5cGU9ImVuY29kaW5nIiksZi5zdXBwb3J0LmNoZWNrT258fGYuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe2YudmFsSG9va3NbdGhpc109e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoInZhbHVlIik9PT1udWxsPyJvbiI6YS52YWx1ZX19fSksZi5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7Zi52YWxIb29rc1t0aGlzXT1mLmV4dGVuZChmLnZhbEhvb2tzW3RoaXNdLHtzZXQ6ZnVuY3Rpb24oYSxiKXtpZihmLmlzQXJyYXkoYikpcmV0dXJuIGEuY2hlY2tlZD1mLmluQXJyYXkoZihhKS52YWwoKSxiKT49MH19KX0pO3ZhciB6PS9cLiguKikkLyxBPS9eKD86dGV4dGFyZWF8aW5wdXR8c2VsZWN0KSQvaSxCPS9cLi9nLEM9LyAvZyxEPS9bXlx3XHMufGBdL2csRT0vXihbXlwuXSopPyg/OlwuKC4rKSk/JC8sRj0vXGJob3ZlcihcLlxTKyk/LyxHPS9ea2V5LyxIPS9eKD86bW91c2V8Y29udGV4dG1lbnUpfGNsaWNrLyxJPS9eKFx3KikoPzojKFtcd1wtXSspKT8oPzpcLihbXHdcLV0rKSk/JC8sSj1mdW5jdGlvbihhKXt2YXIgYj1JLmV4ZWMoYSk7YiYmCihiWzFdPShiWzFdfHwiIikudG9Mb3dlckNhc2UoKSxiWzNdPWJbM10mJm5ldyBSZWdFeHAoIig/Ol58XFxzKSIrYlszXSsiKD86XFxzfCQpIikpO3JldHVybiBifSxLPWZ1bmN0aW9uKGEsYil7cmV0dXJuKCFiWzFdfHxhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iWzFdKSYmKCFiWzJdfHxhLmlkPT09YlsyXSkmJighYlszXXx8YlszXS50ZXN0KGEuY2xhc3NOYW1lKSl9LEw9ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZXZlbnQuc3BlY2lhbC5ob3Zlcj9hOmEucmVwbGFjZShGLCJtb3VzZWVudGVyJDEgbW91c2VsZWF2ZSQxIil9O2YuZXZlbnQ9e2FkZDpmdW5jdGlvbihhLGMsZCxlLGcpe3ZhciBoLGksaixrLGwsbSxuLG8scCxxLHIscztpZighKGEubm9kZVR5cGU9PT0zfHxhLm5vZGVUeXBlPT09OHx8IWN8fCFkfHwhKGg9Zi5fZGF0YShhKSkpKXtkLmhhbmRsZXImJihwPWQsZD1wLmhhbmRsZXIpLGQuZ3VpZHx8KGQuZ3VpZD1mLmd1aWQrKyksaj1oLmV2ZW50cyxqfHwoaC5ldmVudHM9aj17fSksaT1oLmhhbmRsZSxpfHwoaC5oYW5kbGU9aT1mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGYhPSJ1bmRlZmluZWQiJiYoIWF8fGYuZXZlbnQudHJpZ2dlcmVkIT09YS50eXBlKT9mLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGkuZWxlbSxhcmd1bWVudHMpOmJ9LGkuZWxlbT1hKSxjPUwoYykuc3BsaXQoIiAiKTtmb3Ioaz0wO2s8Yy5sZW5ndGg7aysrKXtsPUUuZXhlYyhjW2tdKXx8W10sbT1sWzFdLG49KGxbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxzPWYuZXZlbnQuc3BlY2lhbFttXXx8e30sbT0oZz9zLmRlbGVnYXRlVHlwZTpzLmJpbmRUeXBlKXx8bSxzPWYuZXZlbnQuc3BlY2lhbFttXXx8e30sbz1mLmV4dGVuZCh7dHlwZTptLG9yaWdUeXBlOmxbMV0sZGF0YTplLGhhbmRsZXI6ZCxndWlkOmQuZ3VpZCxzZWxlY3RvcjpnLG5hbWVzcGFjZTpuLmpvaW4oIi4iKX0scCksZyYmKG8ucXVpY2s9SihnKSwhby5xdWljayYmZi5leHByLm1hdGNoLlBPUy50ZXN0KGcpJiYoby5pc1Bvc2l0aW9uYWw9ITApKSxyPWpbbV07aWYoIXIpe3I9alttXT1bXSxyLmRlbGVnYXRlQ291bnQ9MDtpZighcy5zZXR1cHx8cy5zZXR1cC5jYWxsKGEsZSxuLGkpPT09ITEpYS5hZGRFdmVudExpc3RlbmVyP2EuYWRkRXZlbnRMaXN0ZW5lcihtLGksITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9uIittLGkpfXMuYWRkJiYocy5hZGQuY2FsbChhLG8pLG8uaGFuZGxlci5ndWlkfHwoby5oYW5kbGVyLmd1aWQ9ZC5ndWlkKSksZz9yLnNwbGljZShyLmRlbGVnYXRlQ291bnQrKywwLG8pOnIucHVzaChvKSxmLmV2ZW50Lmdsb2JhbFttXT0hMH1hPW51bGx9fSxnbG9iYWw6e30scmVtb3ZlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWYuaGFzRGF0YShhKSYmZi5fZGF0YShhKSxnLGgsaSxqLGssbCxtLG4sbyxwLHE7aWYoISFlJiYhIShtPWUuZXZlbnRzKSl7Yj1MKGJ8fCIiKS5zcGxpdCgiICIpO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe2g9RS5leGVjKGJbZ10pfHxbXSxpPWhbMV0saj1oWzJdO2lmKCFpKXtqPWo/Ii4iK2o6IiI7Zm9yKGwgaW4gbSlmLmV2ZW50LnJlbW92ZShhLGwraixjLGQpO3JldHVybn1uPWYuZXZlbnQuc3BlY2lhbFtpXXx8e30saT0oZD9uLmRlbGVnYXRlVHlwZTpuLmJpbmRUeXBlKXx8aSxwPW1baV18fFtdLGs9cC5sZW5ndGgsaj1qP25ldyBSZWdFeHAoIihefFxcLikiK2ouc3BsaXQoIi4iKS5zb3J0KCkuam9pbigiXFwuKD86LipcXC4pPyIpKyIoXFwufCQpIik6bnVsbDtpZihjfHxqfHxkfHxuLnJlbW92ZSlmb3IobD0wO2w8cC5sZW5ndGg7bCsrKXtxPXBbbF07aWYoIWN8fGMuZ3VpZD09PXEuZ3VpZClpZighanx8ai50ZXN0KHEubmFtZXNwYWNlKSlpZighZHx8ZD09PXEuc2VsZWN0b3J8fGQ9PT0iKioiJiZxLnNlbGVjdG9yKXAuc3BsaWNlKGwtLSwxKSxxLnNlbGVjdG9yJiZwLmRlbGVnYXRlQ291bnQtLSxuLnJlbW92ZSYmbi5yZW1vdmUuY2FsbChhLHEpfWVsc2UgcC5sZW5ndGg9MDtwLmxlbmd0aD09PTAmJmshPT1wLmxlbmd0aCYmKCghbi50ZWFyZG93bnx8bi50ZWFyZG93bi5jYWxsKGEsaik9PT0hMSkmJmYucmVtb3ZlRXZlbnQoYSxpLGUuaGFuZGxlKSxkZWxldGUgbVtpXSl9Zi5pc0VtcHR5T2JqZWN0KG0pJiYobz1lLmhhbmRsZSxvJiYoby5lbGVtPW51bGwpLGYucmVtb3ZlRGF0YShhLFsiZXZlbnRzIiwiaGFuZGxlIl0sITApKX19LGN1c3RvbUV2ZW50OntnZXREYXRhOiEwLHNldERhdGE6ITAsY2hhbmdlRGF0YTohMH0sdHJpZ2dlcjpmdW5jdGlvbihjLGQsZSxnKXtpZighZXx8ZS5ub2RlVHlwZSE9PTMmJmUubm9kZVR5cGUhPT04KXt2YXIgaD1jLnR5cGV8fGMsaT1bXSxqLGssbCxtLG4sbyxwLHEscixzO2guaW5kZXhPZigiISIpPj0wJiYoaD1oLnNsaWNlKDAsLTEpLGs9ITApLGguaW5kZXhPZigiLiIpPj0wJiYoaT1oLnNwbGl0KCIuIiksaD1pLnNoaWZ0KCksaS5zb3J0KCkpO2lmKCghZXx8Zi5ldmVudC5jdXN0b21FdmVudFtoXSkmJiFmLmV2ZW50Lmdsb2JhbFtoXSlyZXR1cm47Yz10eXBlb2YgYz09Im9iamVjdCI/Y1tmLmV4cGFuZG9dP2M6bmV3IGYuRXZlbnQoaCxjKTpuZXcgZi5FdmVudChoKSxjLnR5cGU9aCxjLmlzVHJpZ2dlcj0hMCxjLmV4Y2x1c2l2ZT1rLGMubmFtZXNwYWNlPWkuam9pbigiLiIpLGMubmFtZXNwYWNlX3JlPWMubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK2kuam9pbigiXFwuKD86LipcXC4pPyIpKyIoXFwufCQpIik6bnVsbCxvPWguaW5kZXhPZigiOiIpPDA/Im9uIitoOiIiLChnfHwhZSkmJmMucHJldmVudERlZmF1bHQoKTtpZighZSl7aj1mLmNhY2hlO2ZvcihsIGluIGopaltsXS5ldmVudHMmJmpbbF0uZXZlbnRzW2hdJiZmLmV2ZW50LnRyaWdnZXIoYyxkLGpbbF0uaGFuZGxlLmVsZW0sITApO3JldHVybn1jLnJlc3VsdD1iLGMudGFyZ2V0fHwoYy50YXJnZXQ9ZSksZD1kIT1udWxsP2YubWFrZUFycmF5KGQpOltdLGQudW5zaGlmdChjKSxwPWYuZXZlbnQuc3BlY2lhbFtoXXx8e307aWYocC50cmlnZ2VyJiZwLnRyaWdnZXIuYXBwbHkoZSxkKT09PSExKXJldHVybjtyPVtbZSxwLmJpbmRUeXBlfHxoXV07aWYoIWcmJiFwLm5vQnViYmxlJiYhZi5pc1dpbmRvdyhlKSl7cz1wLmRlbGVnYXRlVHlwZXx8aCxuPW51bGw7Zm9yKG09ZS5wYXJlbnROb2RlO207bT1tLnBhcmVudE5vZGUpci5wdXNoKFttLHNdKSxuPW07biYmbj09PWUub3duZXJEb2N1bWVudCYmci5wdXNoKFtuLmRlZmF1bHRWaWV3fHxuLnBhcmVudFdpbmRvd3x8YSxzXSl9Zm9yKGw9MDtsPHIubGVuZ3RoO2wrKyl7bT1yW2xdWzBdLGMudHlwZT1yW2xdWzFdLHE9KGYuX2RhdGEobSwiZXZlbnRzIil8fHt9KVtjLnR5cGVdJiZmLl9kYXRhKG0sImhhbmRsZSIpLHEmJnEuYXBwbHkobSxkKSxxPW8mJm1bb10scSYmZi5hY2NlcHREYXRhKG0pJiZxLmFwcGx5KG0sZCk7aWYoYy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrfWMudHlwZT1oLGMuaXNEZWZhdWx0UHJldmVudGVkKCl8fCghcC5fZGVmYXVsdHx8cC5fZGVmYXVsdC5hcHBseShlLm93bmVyRG9jdW1lbnQsZCk9PT0hMSkmJihoIT09ImNsaWNrInx8IWYubm9kZU5hbWUoZSwiYSIpKSYmZi5hY2NlcHREYXRhKGUpJiZvJiZlW2hdJiYoaCE9PSJmb2N1cyImJmghPT0iYmx1ciJ8fGMudGFyZ2V0Lm9mZnNldFdpZHRoIT09MCkmJiFmLmlzV2luZG93KGUpJiYobj1lW29dLG4mJihlW29dPW51bGwpLGYuZXZlbnQudHJpZ2dlcmVkPWgsZVtoXSgpLGYuZXZlbnQudHJpZ2dlcmVkPWIsbiYmKGVbb109bikpO3JldHVybiBjLnJlc3VsdH19LGRpc3BhdGNoOmZ1bmN0aW9uKGMpe2M9Zi5ldmVudC5maXgoY3x8YS5ldmVudCk7dmFyIGQ9KGYuX2RhdGEodGhpcywiZXZlbnRzIil8fHt9KVtjLnR5cGVdfHxbXSxlPWQuZGVsZWdhdGVDb3VudCxnPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApLGg9IWMuZXhjbHVzaXZlJiYhYy5uYW1lc3BhY2UsaT0oZi5ldmVudC5zcGVjaWFsW2MudHlwZV18fHt9KS5oYW5kbGUsaj1bXSxrLGwsbSxuLG8scCxxLHIscyx0LHU7Z1swXT1jLGMuZGVsZWdhdGVUYXJnZXQ9dGhpcztpZihlJiYhYy50YXJnZXQuZGlzYWJsZWQmJighYy5idXR0b258fGMudHlwZSE9PSJjbGljayIpKWZvcihtPWMudGFyZ2V0O20hPXRoaXM7bT1tLnBhcmVudE5vZGV8fHRoaXMpe289e30scT1bXTtmb3Ioaz0wO2s8ZTtrKyspcj1kW2tdLHM9ci5zZWxlY3Rvcix0PW9bc10sci5pc1Bvc2l0aW9uYWw/dD0odHx8KG9bc109ZihzKSkpLmluZGV4KG0pPj0wOnQ9PT1iJiYodD1vW3NdPXIucXVpY2s/SyhtLHIucXVpY2spOmYobSkuaXMocykpLHQmJnEucHVzaChyKTtxLmxlbmd0aCYmai5wdXNoKHtlbGVtOm0sbWF0Y2hlczpxfSl9ZC5sZW5ndGg+ZSYmai5wdXNoKHtlbGVtOnRoaXMsbWF0Y2hlczpkLnNsaWNlKGUpfSk7Zm9yKGs9MDtrPGoubGVuZ3RoJiYhYy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO2srKyl7cD1qW2tdLGMuY3VycmVudFRhcmdldD1wLmVsZW07Zm9yKGw9MDtsPHAubWF0Y2hlcy5sZW5ndGgmJiFjLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7bCsrKXtyPXAubWF0Y2hlc1tsXTtpZihofHwhYy5uYW1lc3BhY2UmJiFyLm5hbWVzcGFjZXx8Yy5uYW1lc3BhY2VfcmUmJmMubmFtZXNwYWNlX3JlLnRlc3Qoci5uYW1lc3BhY2UpKWMuZGF0YT1yLmRhdGEsYy5oYW5kbGVPYmo9cixuPShpfHxyLmhhbmRsZXIpLmFwcGx5KHAuZWxlbSxnKSxuIT09YiYmKGMucmVzdWx0PW4sbj09PSExJiYoYy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCkpKX19cmV0dXJuIGMucmVzdWx0fSxwcm9wczoiYXR0ckNoYW5nZSBhdHRyTmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7YS53aGljaD09bnVsbCYmKGEud2hpY2g9Yi5jaGFyQ29kZSE9bnVsbD9iLmNoYXJDb2RlOmIua2V5Q29kZSk7cmV0dXJuIGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50IHdoZWVsRGVsdGEiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsZCl7dmFyIGUsZixnLGg9ZC5idXR0b24saT1kLmZyb21FbGVtZW50O2EucGFnZVg9PW51bGwmJmQuY2xpZW50WCE9bnVsbCYmKGU9YS50YXJnZXQub3duZXJEb2N1bWVudHx8YyxmPWUuZG9jdW1lbnRFbGVtZW50LGc9ZS5ib2R5LGEucGFnZVg9ZC5jbGllbnRYKyhmJiZmLnNjcm9sbExlZnR8fGcmJmcuc2Nyb2xsTGVmdHx8MCktKGYmJmYuY2xpZW50TGVmdHx8ZyYmZy5jbGllbnRMZWZ0fHwwKSxhLnBhZ2VZPWQuY2xpZW50WSsoZiYmZi5zY3JvbGxUb3B8fGcmJmcuc2Nyb2xsVG9wfHwwKS0oZiYmZi5jbGllbnRUb3B8fGcmJmcuY2xpZW50VG9wfHwwKSksIWEucmVsYXRlZFRhcmdldCYmaSYmKGEucmVsYXRlZFRhcmdldD1pPT09YS50YXJnZXQ/ZC50b0VsZW1lbnQ6aSksIWEud2hpY2gmJmghPT1iJiYoYS53aGljaD1oJjE/MTpoJjI/MzpoJjQ/MjowKTtyZXR1cm4gYX19LGZpeDpmdW5jdGlvbihhKXtpZihhW2YuZXhwYW5kb10pcmV0dXJuIGE7dmFyIGQsZSxnPWEsaD1mLmV2ZW50LmZpeEhvb2tzW2EudHlwZV18fHt9LGk9aC5wcm9wcz90aGlzLnByb3BzLmNvbmNhdChoLnByb3BzKTp0aGlzLnByb3BzO2E9Zi5FdmVudChnKTtmb3IoZD1pLmxlbmd0aDtkOyllPWlbLS1kXSxhW2VdPWdbZV07YS50YXJnZXR8fChhLnRhcmdldD1nLnNyY0VsZW1lbnR8fGMpLGEudGFyZ2V0Lm5vZGVUeXBlPT09MyYmKGEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGUpLGEubWV0YUtleT09PWImJihhLm1ldGFLZXk9YS5jdHJsS2V5KTtyZXR1cm4gaC5maWx0ZXI/aC5maWx0ZXIoYSxnKTphfSxzcGVjaWFsOntyZWFkeTp7c2V0dXA6Zi5iaW5kUmVhZHl9LGZvY3VzOntkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4iLG5vQnViYmxlOiEwfSxibHVyOntkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0Iixub0J1YmJsZTohMH0sYmVmb3JldW5sb2FkOntzZXR1cDpmdW5jdGlvbihhLGIsYyl7Zi5pc1dpbmRvdyh0aGlzKSYmKHRoaXMub25iZWZvcmV1bmxvYWQ9Yyl9LHRlYXJkb3duOmZ1bmN0aW9uKGEsYil7dGhpcy5vbmJlZm9yZXVubG9hZD09PWImJih0aGlzLm9uYmVmb3JldW5sb2FkPW51bGwpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWYuZXh0ZW5kKG5ldyBmLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7ZD9mLmV2ZW50LnRyaWdnZXIoZSxudWxsLGIpOmYuZXZlbnQuZGlzcGF0Y2guY2FsbChiLGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCkmJmMucHJldmVudERlZmF1bHQoKX19LGYuZXZlbnQuaGFuZGxlPWYuZXZlbnQuZGlzcGF0Y2gsZi5yZW1vdmVFdmVudD1jLnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSl9OmZ1bmN0aW9uKGEsYixjKXthLmRldGFjaEV2ZW50JiZhLmRldGFjaEV2ZW50KCJvbiIrYixjKX0sZi5FdmVudD1mdW5jdGlvbihhLGIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGYuRXZlbnQpKXJldHVybiBuZXcgZi5FdmVudChhLGIpO2EmJmEudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWEsdGhpcy50eXBlPWEudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLmRlZmF1bHRQcmV2ZW50ZWR8fGEucmV0dXJuVmFsdWU9PT0hMXx8YS5nZXRQcmV2ZW50RGVmYXVsdCYmYS5nZXRQcmV2ZW50RGVmYXVsdCgpP046TSk6dGhpcy50eXBlPWEsYiYmZi5leHRlbmQodGhpcyxiKSx0aGlzLnRpbWVTdGFtcD1hJiZhLnRpbWVTdGFtcHx8Zi5ub3coKSx0aGlzW2YuZXhwYW5kb109ITB9LGYuRXZlbnQucHJvdG90eXBlPXtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPU47dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50OyFhfHwoYS5wcmV2ZW50RGVmYXVsdD9hLnByZXZlbnREZWZhdWx0KCk6YS5yZXR1cm5WYWx1ZT0hMSl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9Tjt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7IWF8fChhLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9wUHJvcGFnYXRpb24oKSxhLmNhbmNlbEJ1YmJsZT0hMCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9Tix0aGlzLnN0b3BQcm9wYWdhdGlvbigpfSxpc0RlZmF1bHRQcmV2ZW50ZWQ6TSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpNLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOk19LGYuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGEsYil7Zi5ldmVudC5zcGVjaWFsW2FdPWYuZXZlbnQuc3BlY2lhbFtiXT17ZGVsZWdhdGVUeXBlOmIsYmluZFR5cGU6YixoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPWEucmVsYXRlZFRhcmdldCxkPWEuaGFuZGxlT2JqLGU9ZC5zZWxlY3RvcixnLGg7aWYoIWN8fGQub3JpZ1R5cGU9PT1hLnR5cGV8fGMhPT1iJiYhZi5jb250YWlucyhiLGMpKWc9YS50eXBlLGEudHlwZT1kLm9yaWdUeXBlLGg9ZC5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhLnR5cGU9ZztyZXR1cm4gaH19fSksZi5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXN8fChmLmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbigpe2lmKGYubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO2YuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGM9YS50YXJnZXQsZD1mLm5vZGVOYW1lKGMsImlucHV0Iil8fGYubm9kZU5hbWUoYywiYnV0dG9uIik/Yy5mb3JtOmI7ZCYmIWQuX3N1Ym1pdF9hdHRhY2hlZCYmKGYuZXZlbnQuYWRkKGQsInN1Ym1pdC5fc3VibWl0IixmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJmYuZXZlbnQuc2ltdWxhdGUoInN1Ym1pdCIsdGhpcy5wYXJlbnROb2RlLGEsITApfSksZC5fc3VibWl0X2F0dGFjaGVkPSEwKX0pfSx0ZWFyZG93bjpmdW5jdGlvbigpe2lmKGYubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO2YuZXZlbnQucmVtb3ZlKHRoaXMsIi5fc3VibWl0Iil9fSksZi5zdXBwb3J0LmNoYW5nZUJ1YmJsZXN8fChmLmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe2lmKEEudGVzdCh0aGlzLm5vZGVOYW1lKSl7aWYodGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBlPT09InJhZGlvIilmLmV2ZW50LmFkZCh0aGlzLCJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXthLm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lPT09ImNoZWNrZWQiJiYodGhpcy5fanVzdF9jaGFuZ2VkPSEwKX0pLGYuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMuX2p1c3RfY2hhbmdlZCYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMSxmLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsYSwhMCkpfSk7cmV0dXJuITF9Zi5ldmVudC5hZGQodGhpcywiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7QS50ZXN0KGIubm9kZU5hbWUpJiYhYi5fY2hhbmdlX2F0dGFjaGVkJiYoZi5ldmVudC5hZGQoYiwiY2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmIWEuaXNTaW11bGF0ZWQmJmYuZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcy5wYXJlbnROb2RlLGEsITApfSksYi5fY2hhbmdlX2F0dGFjaGVkPSEwKX0pfSxoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7aWYodGhpcyE9PWJ8fGEuaXNTaW11bGF0ZWR8fGEuaXNUcmlnZ2VyfHxiLnR5cGUhPT0icmFkaW8iJiZiLnR5cGUhPT0iY2hlY2tib3giKXJldHVybiBhLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtmLmV2ZW50LnJlbW92ZSh0aGlzLCIuX2NoYW5nZSIpO3JldHVybiBBLnRlc3QodGhpcy5ub2RlTmFtZSl9fSksZi5zdXBwb3J0LmZvY3VzaW5CdWJibGVzfHxmLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGQ9MCxlPWZ1bmN0aW9uKGEpe2YuZXZlbnQuc2ltdWxhdGUoYixhLnRhcmdldCxmLmV2ZW50LmZpeChhKSwhMCl9O2YuZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXtkKys9PT0wJiZjLmFkZEV2ZW50TGlzdGVuZXIoYSxlLCEwKX0sdGVhcmRvd246ZnVuY3Rpb24oKXstLWQ9PT0wJiZjLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxlLCEwKX19fSksZi5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKGEsYyxkLGUsZyl7dmFyIGgsaTtpZih0eXBlb2YgYT09Im9iamVjdCIpe3R5cGVvZiBjIT0ic3RyaW5nIiYmKGQ9YyxjPWIpO2ZvcihpIGluIGEpdGhpcy5vbihpLGMsZCxhW2ldLGcpO3JldHVybiB0aGlzfWQ9PW51bGwmJmU9PW51bGw/KGU9YyxkPWM9Yik6ZT09bnVsbCYmKHR5cGVvZiBjPT0ic3RyaW5nIj8oZT1kLGQ9Yik6KGU9ZCxkPWMsYz1iKSk7aWYoZT09PSExKWU9TTtlbHNlIGlmKCFlKXJldHVybiB0aGlzO2c9PT0xJiYoaD1lLGU9ZnVuY3Rpb24oYSl7ZigpLm9mZihhKTtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUuZ3VpZD1oLmd1aWR8fChoLmd1aWQ9Zi5ndWlkKyspKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5ldmVudC5hZGQodGhpcyxhLGUsZCxjKX0pfSxvbmU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24uY2FsbCh0aGlzLGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGMsZCl7aWYoYSYmYS5wcmV2ZW50RGVmYXVsdCYmYS5oYW5kbGVPYmope3ZhciBlPWEuaGFuZGxlT2JqO2YoYS5kZWxlZ2F0ZVRhcmdldCkub2ZmKGUubmFtZXNwYWNlP2UudHlwZSsiLiIrZS5uYW1lc3BhY2U6ZS50eXBlLGUuc2VsZWN0b3IsZS5oYW5kbGVyKTtyZXR1cm4gdGhpc31pZih0eXBlb2YgYT09Im9iamVjdCIpe2Zvcih2YXIgZyBpbiBhKXRoaXMub2ZmKGcsYyxhW2ddKTtyZXR1cm4gdGhpc31pZihjPT09ITF8fHR5cGVvZiBjPT0iZnVuY3Rpb24iKWQ9YyxjPWI7ZD09PSExJiYoZD1NKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5ldmVudC5yZW1vdmUodGhpcyxhLGQsYyl9KX0sYmluZDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYSxudWxsLGIsYyl9LHVuYmluZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9mZihhLG51bGwsYil9LGxpdmU6ZnVuY3Rpb24oYSxiLGMpe2YodGhpcy5jb250ZXh0KS5vbihhLHRoaXMuc2VsZWN0b3IsYixjKTtyZXR1cm4gdGhpc30sZGllOmZ1bmN0aW9uKGEsYil7Zih0aGlzLmNvbnRleHQpLm9mZihhLHRoaXMuc2VsZWN0b3J8fCIqKiIsYik7cmV0dXJuIHRoaXN9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGIsYSxjLGQpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09MT90aGlzLm9mZihhLCIqKiIpOnRoaXMub2ZmKGIsYSxjKX0sdHJpZ2dlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGEsYil7aWYodGhpc1swXSlyZXR1cm4gZi5ldmVudC50cmlnZ2VyKGEsYix0aGlzWzBdLCEwKX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3ZhciBiPWFyZ3VtZW50cyxjPWEuZ3VpZHx8Zi5ndWlkKyssZD0wLGU9ZnVuY3Rpb24oYyl7dmFyIGU9KGYuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkKXx8MCklZDtmLl9kYXRhKHRoaXMsImxhc3RUb2dnbGUiK2EuZ3VpZCxlKzEpLGMucHJldmVudERlZmF1bHQoKTtyZXR1cm4gYltlXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fCExfTtlLmd1aWQ9Yzt3aGlsZShkPGIubGVuZ3RoKWJbZCsrXS5ndWlkPWM7cmV0dXJuIHRoaXMuY2xpY2soZSl9LGhvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfX0pLGYuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe2YuZm5bYl09ZnVuY3Rpb24oYSxjKXtjPT1udWxsJiYoYz1hLGE9bnVsbCk7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLmJpbmQoYixhLGMpOnRoaXMudHJpZ2dlcihiKX0sZi5hdHRyRm4mJihmLmF0dHJGbltiXT0hMCksRy50ZXN0KGIpJiYoZi5ldmVudC5maXhIb29rc1tiXT1mLmV2ZW50LmtleUhvb2tzKSxILnRlc3QoYikmJihmLmV2ZW50LmZpeEhvb2tzW2JdPWYuZXZlbnQubW91c2VIb29rcyl9KSxmdW5jdGlvbigpe2Z1bmN0aW9uIHgoYSxiLGMsZSxmLGcpe2Zvcih2YXIgaD0wLGk9ZS5sZW5ndGg7aDxpO2grKyl7dmFyIGo9ZVtoXTtpZihqKXt2YXIgaz0hMTtqPWpbYV07d2hpbGUoail7aWYoaltkXT09PWMpe2s9ZVtqLnNpenNldF07YnJlYWt9aWYoai5ub2RlVHlwZT09PTEpe2d8fChqW2RdPWMsai5zaXpzZXQ9aCk7aWYodHlwZW9mIGIhPSJzdHJpbmciKXtpZihqPT09Yil7az0hMDticmVha319ZWxzZSBpZihtLmZpbHRlcihiLFtqXSkubGVuZ3RoPjApe2s9ajticmVha319aj1qW2FdfWVbaF09a319fWZ1bmN0aW9uIHcoYSxiLGMsZSxmLGcpe2Zvcih2YXIgaD0wLGk9ZS5sZW5ndGg7aDxpO2grKyl7dmFyIGo9ZVtoXTtpZihqKXt2YXIgaz0hMTtqPWpbYV07d2hpbGUoail7aWYoaltkXT09PWMpe2s9ZVtqLnNpenNldF07YnJlYWt9ai5ub2RlVHlwZT09PTEmJiFnJiYoaltkXT1jLGouc2l6c2V0PWgpO2lmKGoubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWIpe2s9ajticmVha31qPWpbYV19ZVtoXT1rfX19dmFyIGE9LygoPzpcKCg/OlwoW14oKV0rXCl8W14oKV0rKStcKXxcWyg/OlxbW15cW1xdXSpcXXxbJyJdW14nIl0qWyciXXxbXlxbXF0nIl0rKStcXXxcXC58W14gPit+LChcW1xcXSspK3xbPit+XSkoXHMqLFxzKik/KCg/Oi58XHJ8XG4pKikvZyxkPSJzaXpjYWNoZSIrKE1hdGgucmFuZG9tKCkrIiIpLnJlcGxhY2UoIi4iLCIiKSxlPTAsZz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGg9ITEsaT0hMCxqPS9cXC9nLGs9L1xyXG4vZyxsPS9cVy87WzAsMF0uc29ydChmdW5jdGlvbigpe2k9ITE7cmV0dXJuIDB9KTt2YXIgbT1mdW5jdGlvbihiLGQsZSxmKXtlPWV8fFtdLGQ9ZHx8Yzt2YXIgaD1kO2lmKGQubm9kZVR5cGUhPT0xJiZkLm5vZGVUeXBlIT09OSlyZXR1cm5bXTtpZighYnx8dHlwZW9mIGIhPSJzdHJpbmciKXJldHVybiBlO3ZhciBpLGosayxsLG4scSxyLHQsdT0hMCx2PW0uaXNYTUwoZCksdz1bXSx4PWI7ZG97YS5leGVjKCIiKSxpPWEuZXhlYyh4KTtpZihpKXt4PWlbM10sdy5wdXNoKGlbMV0pO2lmKGlbMl0pe2w9aVszXTticmVha319fXdoaWxlKGkpO2lmKHcubGVuZ3RoPjEmJnAuZXhlYyhiKSlpZih3Lmxlbmd0aD09PTImJm8ucmVsYXRpdmVbd1swXV0paj15KHdbMF0rd1sxXSxkLGYpO2Vsc2V7aj1vLnJlbGF0aXZlW3dbMF1dP1tkXTptKHcuc2hpZnQoKSxkKTt3aGlsZSh3Lmxlbmd0aCliPXcuc2hpZnQoKSxvLnJlbGF0aXZlW2JdJiYoYis9dy5zaGlmdCgpKSxqPXkoYixqLGYpfWVsc2V7IWYmJncubGVuZ3RoPjEmJmQubm9kZVR5cGU9PT05JiYhdiYmby5tYXRjaC5JRC50ZXN0KHdbMF0pJiYhby5tYXRjaC5JRC50ZXN0KHdbdy5sZW5ndGgtMV0pJiYobj1tLmZpbmQody5zaGlmdCgpLGQsdiksZD1uLmV4cHI/bS5maWx0ZXIobi5leHByLG4uc2V0KVswXTpuLnNldFswXSk7aWYoZCl7bj1mP3tleHByOncucG9wKCksc2V0OnMoZil9Om0uZmluZCh3LnBvcCgpLHcubGVuZ3RoPT09MSYmKHdbMF09PT0ifiJ8fHdbMF09PT0iKyIpJiZkLnBhcmVudE5vZGU/ZC5wYXJlbnROb2RlOmQsdiksaj1uLmV4cHI/bS5maWx0ZXIobi5leHByLG4uc2V0KTpuLnNldCx3Lmxlbmd0aD4wP2s9cyhqKTp1PSExO3doaWxlKHcubGVuZ3RoKXE9dy5wb3AoKSxyPXEsby5yZWxhdGl2ZVtxXT9yPXcucG9wKCk6cT0iIixyPT1udWxsJiYocj1kKSxvLnJlbGF0aXZlW3FdKGsscix2KX1lbHNlIGs9dz1bXX1rfHwoaz1qKSxrfHxtLmVycm9yKHF8fGIpO2lmKGcuY2FsbChrKT09PSJbb2JqZWN0IEFycmF5XSIpaWYoIXUpZS5wdXNoLmFwcGx5KGUsayk7ZWxzZSBpZihkJiZkLm5vZGVUeXBlPT09MSlmb3IodD0wO2tbdF0hPW51bGw7dCsrKWtbdF0mJihrW3RdPT09ITB8fGtbdF0ubm9kZVR5cGU9PT0xJiZtLmNvbnRhaW5zKGQsa1t0XSkpJiZlLnB1c2goalt0XSk7ZWxzZSBmb3IodD0wO2tbdF0hPW51bGw7dCsrKWtbdF0mJmtbdF0ubm9kZVR5cGU9PT0xJiZlLnB1c2goalt0XSk7ZWxzZSBzKGssZSk7bCYmKG0obCxoLGUsZiksbS51bmlxdWVTb3J0KGUpKTtyZXR1cm4gZX07bS51bmlxdWVTb3J0PWZ1bmN0aW9uKGEpe2lmKHUpe2g9aSxhLnNvcnQodSk7aWYoaClmb3IodmFyIGI9MTtiPGEubGVuZ3RoO2IrKylhW2JdPT09YVtiLTFdJiZhLnNwbGljZShiLS0sMSl9cmV0dXJuIGF9LG0ubWF0Y2hlcz1mdW5jdGlvbihhLGIpe3JldHVybiBtKGEsbnVsbCxudWxsLGIpfSxtLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihhLGIpe3JldHVybiBtKGIsbnVsbCxudWxsLFthXSkubGVuZ3RoPjB9LG0uZmluZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2lmKCFhKXJldHVybltdO2ZvcihlPTAsZj1vLm9yZGVyLmxlbmd0aDtlPGY7ZSsrKXtoPW8ub3JkZXJbZV07aWYoZz1vLmxlZnRNYXRjaFtoXS5leGVjKGEpKXtpPWdbMV0sZy5zcGxpY2UoMSwxKTtpZihpLnN1YnN0cihpLmxlbmd0aC0xKSE9PSJcXCIpe2dbMV09KGdbMV18fCIiKS5yZXBsYWNlKGosIiIpLGQ9by5maW5kW2hdKGcsYixjKTtpZihkIT1udWxsKXthPWEucmVwbGFjZShvLm1hdGNoW2hdLCIiKTticmVha319fX1kfHwoZD10eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCI/Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOltdKTtyZXR1cm57c2V0OmQsZXhwcjphfX0sbS5maWx0ZXI9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbixwLHE9YSxyPVtdLHM9Yyx0PWMmJmNbMF0mJm0uaXNYTUwoY1swXSk7d2hpbGUoYSYmYy5sZW5ndGgpe2ZvcihoIGluIG8uZmlsdGVyKWlmKChmPW8ubGVmdE1hdGNoW2hdLmV4ZWMoYSkpIT1udWxsJiZmWzJdKXtrPW8uZmlsdGVyW2hdLGw9ZlsxXSxnPSExLGYuc3BsaWNlKDEsMSk7aWYobC5zdWJzdHIobC5sZW5ndGgtMSk9PT0iXFwiKWNvbnRpbnVlO3M9PT1yJiYocj1bXSk7aWYoby5wcmVGaWx0ZXJbaF0pe2Y9by5wcmVGaWx0ZXJbaF0oZixzLGQscixlLHQpO2lmKCFmKWc9aT0hMDtlbHNlIGlmKGY9PT0hMCljb250aW51ZX1pZihmKWZvcihuPTA7KGo9c1tuXSkhPW51bGw7bisrKWomJihpPWsoaixmLG4scykscD1lXmksZCYmaSE9bnVsbD9wP2c9ITA6c1tuXT0hMTpwJiYoci5wdXNoKGopLGc9ITApKTtpZihpIT09Yil7ZHx8KHM9ciksYT1hLnJlcGxhY2Uoby5tYXRjaFtoXSwiIik7aWYoIWcpcmV0dXJuW107YnJlYWt9fWlmKGE9PT1xKWlmKGc9PW51bGwpbS5lcnJvcihhKTtlbHNlIGJyZWFrO3E9YX1yZXR1cm4gc30sbS5lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK2F9O3ZhciBuPW0uZ2V0VGV4dD1mdW5jdGlvbihhKXt2YXIgYixjLGQ9YS5ub2RlVHlwZSxlPSIiO2lmKGQpe2lmKGQ9PT0xKXtpZih0eXBlb2YgYS50ZXh0Q29udGVudD09InN0cmluZyIpcmV0dXJuIGEudGV4dENvbnRlbnQ7aWYodHlwZW9mIGEuaW5uZXJUZXh0PT0ic3RyaW5nIilyZXR1cm4gYS5pbm5lclRleHQucmVwbGFjZShrLCIiKTtmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpZSs9bihhKX1lbHNlIGlmKGQ9PT0zfHxkPT09NClyZXR1cm4gYS5ub2RlVmFsdWV9ZWxzZSBmb3IoYj0wO2M9YVtiXTtiKyspYy5ub2RlVHlwZSE9PTgmJihlKz1uKGMpKTtyZXR1cm4gZX0sbz1tLnNlbGVjdG9ycz17b3JkZXI6WyJJRCIsIk5BTUUiLCJUQUciXSxtYXRjaDp7SUQ6LyMoKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLENMQVNTOi9cLigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKS8sTkFNRTovXFtuYW1lPVsnIl0qKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspWyciXSpcXS8sQVRUUjovXFtccyooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylccyooPzooXFM/PSlccyooPzooWyciXSkoLio/KVwzfCgjPyg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSopfCl8KVxzKlxdLyxUQUc6L14oKD86W1x3XHUwMGMwLVx1RkZGRlwqXC1dfFxcLikrKS8sQ0hJTEQ6Lzoob25seXxudGh8bGFzdHxmaXJzdCktY2hpbGQoPzpcKFxzKihldmVufG9kZHwoPzpbK1wtXT9cZCt8KD86WytcLV0/XGQqKT9uXHMqKD86WytcLV1ccypcZCspPykpXHMqXCkpPy8sUE9TOi86KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W15cLV18JCkvLFBTRVVETzovOigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKSg/OlwoKFsnIl0/KSgoPzpcKFteXCldK1wpfFteXChcKV0qKSspXDJcKSk/L30sbGVmdE1hdGNoOnt9LGF0dHJNYXA6eyJjbGFzcyI6ImNsYXNzTmFtZSIsImZvciI6Imh0bWxGb3IifSxhdHRySGFuZGxlOntocmVmOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgidHlwZSIpfX0scmVsYXRpdmU6eyIrIjpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBiPT0ic3RyaW5nIixkPWMmJiFsLnRlc3QoYiksZT1jJiYhZDtkJiYoYj1iLnRvTG93ZXJDYXNlKCkpO2Zvcih2YXIgZj0wLGc9YS5sZW5ndGgsaDtmPGc7ZisrKWlmKGg9YVtmXSl7d2hpbGUoKGg9aC5wcmV2aW91c1NpYmxpbmcpJiZoLm5vZGVUeXBlIT09MSk7YVtmXT1lfHxoJiZoLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iP2h8fCExOmg9PT1ifWUmJm0uZmlsdGVyKGIsYSwhMCl9LCI+IjpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9dHlwZW9mIGI9PSJzdHJpbmciLGU9MCxmPWEubGVuZ3RoO2lmKGQmJiFsLnRlc3QoYikpe2I9Yi50b0xvd2VyQ2FzZSgpO2Zvcig7ZTxmO2UrKyl7Yz1hW2VdO2lmKGMpe3ZhciBnPWMucGFyZW50Tm9kZTthW2VdPWcubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWI/ZzohMX19fWVsc2V7Zm9yKDtlPGY7ZSsrKWM9YVtlXSxjJiYoYVtlXT1kP2MucGFyZW50Tm9kZTpjLnBhcmVudE5vZGU9PT1iKTtkJiZtLmZpbHRlcihiLGEsITApfX0sIiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9ZSsrLGc9eDt0eXBlb2YgYj09InN0cmluZyImJiFsLnRlc3QoYikmJihiPWIudG9Mb3dlckNhc2UoKSxkPWIsZz13KSxnKCJwYXJlbnROb2RlIixiLGYsYSxkLGMpfSwifiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9ZSsrLGc9eDt0eXBlb2YgYj09InN0cmluZyImJiFsLnRlc3QoYikmJihiPWIudG9Mb3dlckNhc2UoKSxkPWIsZz13KSxnKCJwcmV2aW91c1NpYmxpbmciLGIsZixhLGQsYyl9fSxmaW5kOntJRDpmdW5jdGlvbihhLGIsYyl7aWYodHlwZW9mIGIuZ2V0RWxlbWVudEJ5SWQhPSJ1bmRlZmluZWQiJiYhYyl7dmFyIGQ9Yi5nZXRFbGVtZW50QnlJZChhWzFdKTtyZXR1cm4gZCYmZC5wYXJlbnROb2RlP1tkXTpbXX19LE5BTUU6ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5TmFtZSE9InVuZGVmaW5lZCIpe3ZhciBjPVtdLGQ9Yi5nZXRFbGVtZW50c0J5TmFtZShhWzFdKTtmb3IodmFyIGU9MCxmPWQubGVuZ3RoO2U8ZjtlKyspZFtlXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKT09PWFbMV0mJmMucHVzaChkW2VdKTtyZXR1cm4gYy5sZW5ndGg9PT0wP251bGw6Y319LFRBRzpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIilyZXR1cm4gYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhWzFdKX19LHByZUZpbHRlcjp7Q0xBU1M6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2E9IiAiK2FbMV0ucmVwbGFjZShqLCIiKSsiICI7aWYoZilyZXR1cm4gYTtmb3IodmFyIGc9MCxoOyhoPWJbZ10pIT1udWxsO2crKyloJiYoZV4oaC5jbGFzc05hbWUmJigiICIraC5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKC9bXHRcblxyXS9nLCIgIikuaW5kZXhPZihhKT49MCk/Y3x8ZC5wdXNoKGgpOmMmJihiW2ddPSExKSk7cmV0dXJuITF9LElEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdLnJlcGxhY2UoaiwiIil9LFRBRzpmdW5jdGlvbihhLGIpe3JldHVybiBhWzFdLnJlcGxhY2UoaiwiIikudG9Mb3dlckNhc2UoKX0sQ0hJTEQ6ZnVuY3Rpb24oYSl7aWYoYVsxXT09PSJudGgiKXthWzJdfHxtLmVycm9yKGFbMF0pLGFbMl09YVsyXS5yZXBsYWNlKC9eXCt8XHMqL2csIiIpO3ZhciBiPS8oLT8pKFxkKikoPzpuKFsrXC1dP1xkKikpPy8uZXhlYyhhWzJdPT09ImV2ZW4iJiYiMm4ifHxhWzJdPT09Im9kZCImJiIybisxInx8IS9cRC8udGVzdChhWzJdKSYmIjBuKyIrYVsyXXx8YVsyXSk7YVsyXT1iWzFdKyhiWzJdfHwxKS0wLGFbM109YlszXS0wfWVsc2UgYVsyXSYmbS5lcnJvcihhWzBdKTthWzBdPWUrKztyZXR1cm4gYX0sQVRUUjpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9YVsxXT1hWzFdLnJlcGxhY2UoaiwiIik7IWYmJm8uYXR0ck1hcFtnXSYmKGFbMV09by5hdHRyTWFwW2ddKSxhWzRdPShhWzRdfHxhWzVdfHwiIikucmVwbGFjZShqLCIiKSxhWzJdPT09In49IiYmKGFbNF09IiAiK2FbNF0rIiAiKTtyZXR1cm4gYX0sUFNFVURPOmZ1bmN0aW9uKGIsYyxkLGUsZil7aWYoYlsxXT09PSJub3QiKWlmKChhLmV4ZWMoYlszXSl8fCIiKS5sZW5ndGg+MXx8L15cdy8udGVzdChiWzNdKSliWzNdPW0oYlszXSxudWxsLG51bGwsYyk7ZWxzZXt2YXIgZz1tLmZpbHRlcihiWzNdLGMsZCwhMF5mKTtkfHxlLnB1c2guYXBwbHkoZSxnKTtyZXR1cm4hMX1lbHNlIGlmKG8ubWF0Y2guUE9TLnRlc3QoYlswXSl8fG8ubWF0Y2guQ0hJTEQudGVzdChiWzBdKSlyZXR1cm4hMDtyZXR1cm4gYn0sUE9TOmZ1bmN0aW9uKGEpe2EudW5zaGlmdCghMCk7cmV0dXJuIGF9fSxmaWx0ZXJzOntlbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITEmJmEudHlwZSE9PSJoaWRkZW4ifSxkaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmNoZWNrZWQ9PT0hMH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7YS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtyZXR1cm4gYS5zZWxlY3RlZD09PSEwfSxwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuISFhLmZpcnN0Q2hpbGR9LGVtcHR5OmZ1bmN0aW9uKGEpe3JldHVybiFhLmZpcnN0Q2hpbGR9LGhhczpmdW5jdGlvbihhLGIsYyl7cmV0dXJuISFtKGNbM10sYSkubGVuZ3RofSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuL2hcZC9pLnRlc3QoYS5ub2RlTmFtZSl9LHRleHQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKSxjPWEudHlwZTtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmInRleHQiPT09YyYmKGI9PT1jfHxiPT09bnVsbCl9LHJhZGlvOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYicmFkaW8iPT09YS50eXBlfSxjaGVja2JveDpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImNoZWNrYm94Ij09PWEudHlwZX0sZmlsZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImZpbGUiPT09YS50eXBlfSxwYXNzd29yZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmInBhc3N3b3JkIj09PWEudHlwZX0sc3VibWl0OmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oYj09PSJpbnB1dCJ8fGI9PT0iYnV0dG9uIikmJiJzdWJtaXQiPT09YS50eXBlfSxpbWFnZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImltYWdlIj09PWEudHlwZX0scmVzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybihiPT09ImlucHV0Inx8Yj09PSJidXR0b24iKSYmInJlc2V0Ij09PWEudHlwZX0sYnV0dG9uOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gYj09PSJpbnB1dCImJiJidXR0b24iPT09YS50eXBlfHxiPT09ImJ1dHRvbiJ9LGlucHV0OmZ1bmN0aW9uKGEpe3JldHVybi9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2kudGVzdChhLm5vZGVOYW1lKX0sZm9jdXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1hLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudH19LHNldEZpbHRlcnM6e2ZpcnN0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9PT0wfSxsYXN0OmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBiPT09ZC5sZW5ndGgtMX0sZXZlbjpmdW5jdGlvbihhLGIpe3JldHVybiBiJTI9PT0wfSxvZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYiUyPT09MX0sbHQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPGNbM10tMH0sZ3Q6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPmNbM10tMH0sbnRoOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gY1szXS0wPT09Yn0sZXE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjWzNdLTA9PT1ifX0sZmlsdGVyOntQU0VVRE86ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YlsxXSxmPW8uZmlsdGVyc1tlXTtpZihmKXJldHVybiBmKGEsYyxiLGQpO2lmKGU9PT0iY29udGFpbnMiKXJldHVybihhLnRleHRDb250ZW50fHxhLmlubmVyVGV4dHx8bihbYV0pfHwiIikuaW5kZXhPZihiWzNdKT49MDtpZihlPT09Im5vdCIpe3ZhciBnPWJbM107Zm9yKHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKWlmKGdbaF09PT1hKXJldHVybiExO3JldHVybiEwfW0uZXJyb3IoZSl9LENISUxEOmZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmLGcsaCxpLGosaz1iWzFdLGw9YTtzd2l0Y2goayl7Y2FzZSJvbmx5IjpjYXNlImZpcnN0Ijp3aGlsZShsPWwucHJldmlvdXNTaWJsaW5nKWlmKGwubm9kZVR5cGU9PT0xKXJldHVybiExO2lmKGs9PT0iZmlyc3QiKXJldHVybiEwO2w9YTtjYXNlImxhc3QiOndoaWxlKGw9bC5uZXh0U2libGluZylpZihsLm5vZGVUeXBlPT09MSlyZXR1cm4hMTtyZXR1cm4hMDtjYXNlIm50aCI6Yz1iWzJdLGU9YlszXTtpZihjPT09MSYmZT09PTApcmV0dXJuITA7Zj1iWzBdLGc9YS5wYXJlbnROb2RlO2lmKGcmJihnW2RdIT09Znx8IWEubm9kZUluZGV4KSl7aT0wO2ZvcihsPWcuZmlyc3RDaGlsZDtsO2w9bC5uZXh0U2libGluZylsLm5vZGVUeXBlPT09MSYmKGwubm9kZUluZGV4PSsraSk7Z1tkXT1mfWo9YS5ub2RlSW5kZXgtZTtyZXR1cm4gYz09PTA/aj09PTA6aiVjPT09MCYmai9jPj0wfX0sSUQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlVHlwZT09PTEmJmEuZ2V0QXR0cmlidXRlKCJpZCIpPT09Yn0sVEFHOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9PT0iKiImJmEubm9kZVR5cGU9PT0xfHwhIWEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWJ9LENMQVNTOmZ1bmN0aW9uKGEsYil7cmV0dXJuKCIgIisoYS5jbGFzc05hbWV8fGEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSsiICIpLmluZGV4T2YoYik+LTF9LEFUVFI6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iWzFdLGQ9bS5hdHRyP20uYXR0cihhLGMpOm8uYXR0ckhhbmRsZVtjXT9vLmF0dHJIYW5kbGVbY10oYSk6YVtjXSE9bnVsbD9hW2NdOmEuZ2V0QXR0cmlidXRlKGMpLGU9ZCsiIixmPWJbMl0sZz1iWzRdO3JldHVybiBkPT1udWxsP2Y9PT0iIT0iOiFmJiZtLmF0dHI/ZCE9bnVsbDpmPT09Ij0iP2U9PT1nOmY9PT0iKj0iP2UuaW5kZXhPZihnKT49MDpmPT09In49Ij8oIiAiK2UrIiAiKS5pbmRleE9mKGcpPj0wOmc/Zj09PSIhPSI/ZSE9PWc6Zj09PSJePSI/ZS5pbmRleE9mKGcpPT09MDpmPT09IiQ9Ij9lLnN1YnN0cihlLmxlbmd0aC1nLmxlbmd0aCk9PT1nOmY9PT0ifD0iP2U9PT1nfHxlLnN1YnN0cigwLGcubGVuZ3RoKzEpPT09ZysiLSI6ITE6ZSYmZCE9PSExfSxQT1M6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YlsyXSxmPW8uc2V0RmlsdGVyc1tlXTtpZihmKXJldHVybiBmKGEsYyxiLGQpfX19LHA9by5tYXRjaC5QT1MscT1mdW5jdGlvbihhLGIpe3JldHVybiJcXCIrKGItMCsxKX07Zm9yKHZhciByIGluIG8ubWF0Y2gpby5tYXRjaFtyXT1uZXcgUmVnRXhwKG8ubWF0Y2hbcl0uc291cmNlKy8oPyFbXlxbXSpcXSkoPyFbXlwoXSpcKSkvLnNvdXJjZSksby5sZWZ0TWF0Y2hbcl09bmV3IFJlZ0V4cCgvKF4oPzoufFxyfFxuKSo/KS8uc291cmNlK28ubWF0Y2hbcl0uc291cmNlLnJlcGxhY2UoL1xcKFxkKykvZyxxKSk7dmFyIHM9ZnVuY3Rpb24oYSxiKXthPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEsMCk7aWYoYil7Yi5wdXNoLmFwcGx5KGIsYSk7cmV0dXJuIGJ9cmV0dXJuIGF9O3RyeXtBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLDApWzBdLm5vZGVUeXBlfWNhdGNoKHQpe3M9ZnVuY3Rpb24oYSxiKXt2YXIgYz0wLGQ9Ynx8W107aWYoZy5jYWxsKGEpPT09IltvYmplY3QgQXJyYXldIilBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShkLGEpO2Vsc2UgaWYodHlwZW9mIGEubGVuZ3RoPT0ibnVtYmVyIilmb3IodmFyIGU9YS5sZW5ndGg7YzxlO2MrKylkLnB1c2goYVtjXSk7ZWxzZSBmb3IoO2FbY107YysrKWQucHVzaChhW2NdKTtyZXR1cm4gZH19dmFyIHUsdjtjLmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj91PWZ1bmN0aW9uKGEsYil7aWYoYT09PWIpe2g9ITA7cmV0dXJuIDB9aWYoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb258fCFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uPy0xOjE7cmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmND8tMToxfToodT1mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXtoPSEwO3JldHVybiAwfWlmKGEuc291cmNlSW5kZXgmJmIuc291cmNlSW5kZXgpcmV0dXJuIGEuc291cmNlSW5kZXgtYi5zb3VyY2VJbmRleDt2YXIgYyxkLGU9W10sZj1bXSxnPWEucGFyZW50Tm9kZSxpPWIucGFyZW50Tm9kZSxqPWc7aWYoZz09PWkpcmV0dXJuIHYoYSxiKTtpZighZylyZXR1cm4tMTtpZighaSlyZXR1cm4gMTt3aGlsZShqKWUudW5zaGlmdChqKSxqPWoucGFyZW50Tm9kZTtqPWk7d2hpbGUoailmLnVuc2hpZnQoaiksaj1qLnBhcmVudE5vZGU7Yz1lLmxlbmd0aCxkPWYubGVuZ3RoO2Zvcih2YXIgaz0wO2s8YyYmazxkO2srKylpZihlW2tdIT09ZltrXSlyZXR1cm4gdihlW2tdLGZba10pO3JldHVybiBrPT09Yz92KGEsZltrXSwtMSk6dihlW2tdLGIsMSl9LHY9ZnVuY3Rpb24oYSxiLGMpe2lmKGE9PT1iKXJldHVybiBjO3ZhciBkPWEubmV4dFNpYmxpbmc7d2hpbGUoZCl7aWYoZD09PWIpcmV0dXJuLTE7ZD1kLm5leHRTaWJsaW5nfXJldHVybiAxfSksZnVuY3Rpb24oKXt2YXIgYT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9InNjcmlwdCIrKG5ldyBEYXRlKS5nZXRUaW1lKCksZT1jLmRvY3VtZW50RWxlbWVudDthLmlubmVySFRNTD0iPGEgbmFtZT0nIitkKyInLz4iLGUuaW5zZXJ0QmVmb3JlKGEsZS5maXJzdENoaWxkKSxjLmdldEVsZW1lbnRCeUlkKGQpJiYoby5maW5kLklEPWZ1bmN0aW9uKGEsYyxkKXtpZih0eXBlb2YgYy5nZXRFbGVtZW50QnlJZCE9InVuZGVmaW5lZCImJiFkKXt2YXIgZT1jLmdldEVsZW1lbnRCeUlkKGFbMV0pO3JldHVybiBlP2UuaWQ9PT1hWzFdfHx0eXBlb2YgZS5nZXRBdHRyaWJ1dGVOb2RlIT0idW5kZWZpbmVkIiYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpLm5vZGVWYWx1ZT09PWFbMV0/W2VdOmI6W119fSxvLmZpbHRlci5JRD1mdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhLmdldEF0dHJpYnV0ZU5vZGUhPSJ1bmRlZmluZWQiJiZhLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGEubm9kZVR5cGU9PT0xJiZjJiZjLm5vZGVWYWx1ZT09PWJ9KSxlLnJlbW92ZUNoaWxkKGEpLGU9YT1udWxsfSgpLGZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmFwcGVuZENoaWxkKGMuY3JlYXRlQ29tbWVudCgiIikpLGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg+MCYmKG8uZmluZC5UQUc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGFbMV0pO2lmKGFbMV09PT0iKiIpe3ZhciBkPVtdO2Zvcih2YXIgZT0wO2NbZV07ZSsrKWNbZV0ubm9kZVR5cGU9PT0xJiZkLnB1c2goY1tlXSk7Yz1kfXJldHVybiBjfSksYS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLGEuZmlyc3RDaGlsZCYmdHlwZW9mIGEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUhPSJ1bmRlZmluZWQiJiZhLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikhPT0iIyImJihvLmF0dHJIYW5kbGUuaHJlZj1mdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImhyZWYiLDIpfSksYT1udWxsfSgpLGMucXVlcnlTZWxlY3RvckFsbCYmZnVuY3Rpb24oKXt2YXIgYT1tLGI9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPSJfX3NpenpsZV9fIjtiLmlubmVySFRNTD0iPHAgY2xhc3M9J1RFU1QnPjwvcD4iO2lmKCFiLnF1ZXJ5U2VsZWN0b3JBbGx8fGIucXVlcnlTZWxlY3RvckFsbCgiLlRFU1QiKS5sZW5ndGghPT0wKXttPWZ1bmN0aW9uKGIsZSxmLGcpe2U9ZXx8YztpZighZyYmIW0uaXNYTUwoZSkpe3ZhciBoPS9eKFx3KyQpfF5cLihbXHdcLV0rJCl8XiMoW1x3XC1dKyQpLy5leGVjKGIpO2lmKGgmJihlLm5vZGVUeXBlPT09MXx8ZS5ub2RlVHlwZT09PTkpKXtpZihoWzFdKXJldHVybiBzKGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYiksZik7aWYoaFsyXSYmby5maW5kLkNMQVNTJiZlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIHMoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGhbMl0pLGYpfWlmKGUubm9kZVR5cGU9PT05KXtpZihiPT09ImJvZHkiJiZlLmJvZHkpcmV0dXJuIHMoW2UuYm9keV0sZik7aWYoaCYmaFszXSl7dmFyIGk9ZS5nZXRFbGVtZW50QnlJZChoWzNdKTtpZighaXx8IWkucGFyZW50Tm9kZSlyZXR1cm4gcyhbXSxmKTtpZihpLmlkPT09aFszXSlyZXR1cm4gcyhbaV0sZil9dHJ5e3JldHVybiBzKGUucXVlcnlTZWxlY3RvckFsbChiKSxmKX1jYXRjaChqKXt9fWVsc2UgaWYoZS5ub2RlVHlwZT09PTEmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJvYmplY3QiKXt2YXIgaz1lLGw9ZS5nZXRBdHRyaWJ1dGUoImlkIiksbj1sfHxkLHA9ZS5wYXJlbnROb2RlLHE9L15ccypbK35dLy50ZXN0KGIpO2w/bj1uLnJlcGxhY2UoLycvZywiXFwkJiIpOmUuc2V0QXR0cmlidXRlKCJpZCIsbikscSYmcCYmKGU9ZS5wYXJlbnROb2RlKTt0cnl7aWYoIXF8fHApcmV0dXJuIHMoZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWQ9JyIrbisiJ10gIitiKSxmKX1jYXRjaChyKXt9ZmluYWxseXtsfHxrLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBhKGIsZSxmLGcpfTtmb3IodmFyIGUgaW4gYSltW2VdPWFbZV07Yj1udWxsfX0oKSxmdW5jdGlvbigpe3ZhciBhPWMuZG9jdW1lbnRFbGVtZW50LGI9YS5tYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8YS5tc01hdGNoZXNTZWxlY3RvcjtpZihiKXt2YXIgZD0hYi5jYWxsKGMuY3JlYXRlRWxlbWVudCgiZGl2IiksImRpdiIpLGU9ITE7dHJ5e2IuY2FsbChjLmRvY3VtZW50RWxlbWVudCwiW3Rlc3QhPScnXTpzaXp6bGUiKX1jYXRjaChmKXtlPSEwfW0ubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYyl7Yz1jLnJlcGxhY2UoL1w9XHMqKFteJyJcXV0qKVxzKlxdL2csIj0nJDEnXSIpO2lmKCFtLmlzWE1MKGEpKXRyeXtpZihlfHwhby5tYXRjaC5QU0VVRE8udGVzdChjKSYmIS8hPS8udGVzdChjKSl7dmFyIGY9Yi5jYWxsKGEsYyk7aWYoZnx8IWR8fGEuZG9jdW1lbnQmJmEuZG9jdW1lbnQubm9kZVR5cGUhPT0xMSlyZXR1cm4gZn19Y2F0Y2goZyl7fXJldHVybiBtKGMsbnVsbCxudWxsLFthXSkubGVuZ3RoPjB9fX0oKSxmdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5pbm5lckhUTUw9IjxkaXYgY2xhc3M9J3Rlc3QgZSc+PC9kaXY+PGRpdiBjbGFzcz0ndGVzdCc+PC9kaXY+IjtpZighIWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoIT09MCl7YS5sYXN0Q2hpbGQuY2xhc3NOYW1lPSJlIjtpZihhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGg9PT0xKXJldHVybjtvLm9yZGVyLnNwbGljZSgxLDAsIkNMQVNTIiksby5maW5kLkNMQVNTPWZ1bmN0aW9uKGEsYixjKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIT0idW5kZWZpbmVkIiYmIWMpcmV0dXJuIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhWzFdKX0sYT1udWxsfX0oKSxjLmRvY3VtZW50RWxlbWVudC5jb250YWlucz9tLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEhPT1iJiYoYS5jb250YWlucz9hLmNvbnRhaW5zKGIpOiEwKX06Yy5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/bS5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiEhKGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmMTYpfTptLmNvbnRhaW5zPWZ1bmN0aW9uKCl7cmV0dXJuITF9LG0uaXNYTUw9ZnVuY3Rpb24oYSl7dmFyIGI9KGE/YS5vd25lckRvY3VtZW50fHxhOjApLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj9iLm5vZGVOYW1lIT09IkhUTUwiOiExfTt2YXIgeT1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZT1bXSxmPSIiLGc9Yi5ub2RlVHlwZT9bYl06Yjt3aGlsZShkPW8ubWF0Y2guUFNFVURPLmV4ZWMoYSkpZis9ZFswXSxhPWEucmVwbGFjZShvLm1hdGNoLlBTRVVETywiIik7YT1vLnJlbGF0aXZlW2FdP2ErIioiOmE7Zm9yKHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKW0oYSxnW2hdLGUsYyk7cmV0dXJuIG0uZmlsdGVyKGYsZSl9O20uYXR0cj1mLmF0dHIsbS5zZWxlY3RvcnMuYXR0ck1hcD17fSxmLmZpbmQ9bSxmLmV4cHI9bS5zZWxlY3RvcnMsZi5leHByWyI6Il09Zi5leHByLmZpbHRlcnMsZi51bmlxdWU9bS51bmlxdWVTb3J0LGYudGV4dD1tLmdldFRleHQsZi5pc1hNTERvYz1tLmlzWE1MLGYuY29udGFpbnM9bS5jb250YWluc30oKTt2YXIgTz0vVW50aWwkLyxQPS9eKD86cGFyZW50c3xwcmV2VW50aWx8cHJldkFsbCkvLFE9LywvLFI9L14uW146I1xbXC4sXSokLyxTPUFycmF5LnByb3RvdHlwZS5zbGljZSxUPWYuZXhwci5tYXRjaC5QT1MsVT17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtmLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLGMsZDtpZih0eXBlb2YgYSE9InN0cmluZyIpcmV0dXJuIGYoYSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKGM9MCxkPWIubGVuZ3RoO2M8ZDtjKyspaWYoZi5jb250YWlucyhiW2NdLHRoaXMpKXJldHVybiEwfSk7dmFyIGU9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGEpLGcsaCxpO2ZvcihjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKXtnPWUubGVuZ3RoLGYuZmluZChhLHRoaXNbY10sZSk7aWYoYz4wKWZvcihoPWc7aDxlLmxlbmd0aDtoKyspZm9yKGk9MDtpPGc7aSsrKWlmKGVbaV09PT1lW2hdKXtlLnNwbGljZShoLS0sMSk7YnJlYWt9fXJldHVybiBlfSxoYXM6ZnVuY3Rpb24oYSl7dmFyIGI9ZihhKTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxjPWIubGVuZ3RoO2E8YzthKyspaWYoZi5jb250YWlucyh0aGlzLGJbYV0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soVyh0aGlzLGEsITEpLCJub3QiLGEpfSxmaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFcodGhpcyxhLCEwKSwiZmlsdGVyIixhKX0saXM6ZnVuY3Rpb24oYSl7cmV0dXJuISFhJiYodHlwZW9mIGE9PSJzdHJpbmciP1QudGVzdChhKT9mKGEsdGhpcy5jb250ZXh0KS5pbmRleCh0aGlzWzBdKT49MDpmLmZpbHRlcihhLHRoaXMpLmxlbmd0aD4wOnRoaXMuZmlsdGVyKGEpLmxlbmd0aD4wKX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQsZSxnPXRoaXNbMF07aWYoZi5pc0FycmF5KGEpKXt2YXIgaD0xO3doaWxlKGcmJmcub3duZXJEb2N1bWVudCYmZyE9PWIpe2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspZihnKS5pcyhhW2RdKSYmYy5wdXNoKHtzZWxlY3RvcjphW2RdLGVsZW06ZyxsZXZlbDpofSk7Zz1nLnBhcmVudE5vZGUsaCsrfXJldHVybiBjfXZhciBpPVQudGVzdChhKXx8dHlwZW9mIGEhPSJzdHJpbmciP2YoYSxifHx0aGlzLmNvbnRleHQpOjA7Zm9yKGQ9MCxlPXRoaXMubGVuZ3RoO2Q8ZTtkKyspe2c9dGhpc1tkXTt3aGlsZShnKXtpZihpP2kuaW5kZXgoZyk+LTE6Zi5maW5kLm1hdGNoZXNTZWxlY3RvcihnLGEpKXtjLnB1c2goZyk7YnJlYWt9Zz1nLnBhcmVudE5vZGU7aWYoIWd8fCFnLm93bmVyRG9jdW1lbnR8fGc9PT1ifHxnLm5vZGVUeXBlPT09MTEpYnJlYWt9fWM9Yy5sZW5ndGg+MT9mLnVuaXF1ZShjKTpjO3JldHVybiB0aGlzLnB1c2hTdGFjayhjLCJjbG9zZXN0IixhKX0saW5kZXg6ZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuIHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLnByZXZBbGwoKS5sZW5ndGg6LTE7aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBmLmluQXJyYXkodGhpc1swXSxmKGEpKTtyZXR1cm4gZi5pbkFycmF5KGEuanF1ZXJ5P2FbMF06YSx0aGlzKX0sYWRkOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGE9PSJzdHJpbmciP2YoYSxiKTpmLm1ha2VBcnJheShhJiZhLm5vZGVUeXBlP1thXTphKSxkPWYubWVyZ2UodGhpcy5nZXQoKSxjKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soVihjWzBdKXx8VihkWzBdKT9kOmYudW5pcXVlKGQpKX0sYW5kU2VsZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFkZCh0aGlzLnByZXZPYmplY3QpfX0pLGYuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmYi5ub2RlVHlwZSE9PTExP2I6bnVsbH0scGFyZW50czpmdW5jdGlvbihhKXtyZXR1cm4gZi5kaXIoYSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJwYXJlbnROb2RlIixjKX0sbmV4dDpmdW5jdGlvbihhKXtyZXR1cm4gZi5udGgoYSwyLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGEpe3JldHVybiBmLm50aChhLDIsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kaXIoYSwibmV4dFNpYmxpbmciLGMpfSxwcmV2VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJwcmV2aW91c1NpYmxpbmciLGMpfSxzaWJsaW5nczpmdW5jdGlvbihhKXtyZXR1cm4gZi5zaWJsaW5nKGEucGFyZW50Tm9kZS5maXJzdENoaWxkLGEpfSxjaGlsZHJlbjpmdW5jdGlvbihhKXtyZXR1cm4gZi5zaWJsaW5nKGEuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBmLm5vZGVOYW1lKGEsImlmcmFtZSIpP2EuY29udGVudERvY3VtZW50fHxhLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ6Zi5tYWtlQXJyYXkoYS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGEsYil7Zi5mblthXT1mdW5jdGlvbihjLGQpe3ZhciBlPWYubWFwKHRoaXMsYixjKSxnPVMuY2FsbChhcmd1bWVudHMpO08udGVzdChhKXx8KGQ9YyksZCYmdHlwZW9mIGQ9PSJzdHJpbmciJiYoZT1mLmZpbHRlcihkLGUpKSxlPXRoaXMubGVuZ3RoPjEmJiFVW2FdP2YudW5pcXVlKGUpOmUsKHRoaXMubGVuZ3RoPjF8fFEudGVzdChkKSkmJlAudGVzdChhKSYmKGU9ZS5yZXZlcnNlKCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhlLGEsZy5qb2luKCIsIikpfX0pLGYuZXh0ZW5kKHtmaWx0ZXI6ZnVuY3Rpb24oYSxiLGMpe2MmJihhPSI6bm90KCIrYSsiKSIpO3JldHVybiBiLmxlbmd0aD09PTE/Zi5maW5kLm1hdGNoZXNTZWxlY3RvcihiWzBdLGEpP1tiWzBdXTpbXTpmLmZpbmQubWF0Y2hlcyhhLGIpfSxkaXI6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPVtdLGc9YVtjXTt3aGlsZShnJiZnLm5vZGVUeXBlIT09OSYmKGQ9PT1ifHxnLm5vZGVUeXBlIT09MXx8IWYoZykuaXMoZCkpKWcubm9kZVR5cGU9PT0xJiZlLnB1c2goZyksZz1nW2NdO3JldHVybiBlfSxudGg6ZnVuY3Rpb24oYSxiLGMsZCl7Yj1ifHwxO3ZhciBlPTA7Zm9yKDthO2E9YVtjXSlpZihhLm5vZGVUeXBlPT09MSYmKytlPT09YilicmVhaztyZXR1cm4gYX0sc2libGluZzpmdW5jdGlvbihhLGIpe3ZhciBjPVtdO2Zvcig7YTthPWEubmV4dFNpYmxpbmcpYS5ub2RlVHlwZT09PTEmJmEhPT1iJiZjLnB1c2goYSk7cmV0dXJuIGN9fSk7dmFyIFk9ImFiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBjYW52YXMgZGF0YWxpc3QgZGV0YWlscyBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgaGVhZGVyIGhncm91cCBtYXJrIG1ldGVyIG5hdiBvdXRwdXQgcHJvZ3Jlc3Mgc2VjdGlvbiBzdW1tYXJ5IHRpbWUgdmlkZW8iLFo9LyBqUXVlcnlcZCs9Iig/OlxkK3xudWxsKSIvZywkPS9eXHMrLyxfPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vaWcsYmE9LzwoW1x3Ol0rKS8sYmI9Lzx0Ym9keS9pLGJjPS88fCYjP1x3KzsvLGJkPS88KD86c2NyaXB0fHN0eWxlKS9pLGJlPS88KD86c2NyaXB0fG9iamVjdHxlbWJlZHxvcHRpb258c3R5bGUpL2ksYmY9bmV3IFJlZ0V4cCgiPCg/OiIrWS5yZXBsYWNlKCIgIiwifCIpKyIpIiwiaSIpLGJnPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGJoPS9cLyhqYXZhfGVjbWEpc2NyaXB0L2ksYmk9L15ccyo8ISg/OlxbQ0RBVEFcW3xcLVwtKS8sYmo9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0OlswLCIiLCIiXX0sYms9WChjKTtiai5vcHRncm91cD1iai5vcHRpb24sYmoudGJvZHk9YmoudGZvb3Q9YmouY29sZ3JvdXA9YmouY2FwdGlvbj1iai50aGVhZCxiai50aD1iai50ZCxmLnN1cHBvcnQuaHRtbFNlcmlhbGl6ZXx8KGJqLl9kZWZhdWx0PVsxLCJkaXY8ZGl2PiIsIjwvZGl2PiJdKSxmLmZuLmV4dGVuZCh7dGV4dDpmdW5jdGlvbihhKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1mKHRoaXMpO2MudGV4dChhLmNhbGwodGhpcyxiLGMudGV4dCgpKSl9KTtpZih0eXBlb2YgYSE9Im9iamVjdCImJmEhPT1iKXJldHVybiB0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGMpLmNyZWF0ZVRleHROb2RlKGEpKTtyZXR1cm4gZi50ZXh0KHRoaXMpfSx3cmFwQWxsOmZ1bmN0aW9uKGEpe2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2YodGhpcykud3JhcEFsbChhLmNhbGwodGhpcyxiKSl9KTtpZih0aGlzWzBdKXt2YXIgYj1mKGEsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCk7dGhpc1swXS5wYXJlbnROb2RlJiZiLmluc2VydEJlZm9yZSh0aGlzWzBdKSxiLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXM7d2hpbGUoYS5maXJzdENoaWxkJiZhLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0xKWE9YS5maXJzdENoaWxkO3JldHVybiBhfSkuYXBwZW5kKHRoaXMpfXJldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS53cmFwSW5uZXIoYS5jYWxsKHRoaXMsYikpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWYodGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YodGhpcykud3JhcEFsbChhKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7Zi5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fGYodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oYSl7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMuYXBwZW5kQ2hpbGQoYSl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMCxmdW5jdGlvbihhKXt0aGlzLm5vZGVUeXBlPT09MSYmdGhpcy5pbnNlcnRCZWZvcmUoYSx0aGlzLmZpcnN0Q2hpbGQpfSl9LGJlZm9yZTpmdW5jdGlvbigpe2lmKHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZSlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITEsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMpfSk7aWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGE9Zihhcmd1bWVudHNbMF0pO2EucHVzaC5hcHBseShhLHRoaXMudG9BcnJheSgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYSwiYmVmb3JlIixhcmd1bWVudHMpfX0sYWZ0ZXI6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCExLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzLm5leHRTaWJsaW5nKX0pO2lmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPXRoaXMucHVzaFN0YWNrKHRoaXMsImFmdGVyIgosYXJndW1lbnRzKTthLnB1c2guYXBwbHkoYSxmKGFyZ3VtZW50c1swXSkudG9BcnJheSgpKTtyZXR1cm4gYX19LHJlbW92ZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wLGQ7KGQ9dGhpc1tjXSkhPW51bGw7YysrKWlmKCFhfHxmLmZpbHRlcihhLFtkXSkubGVuZ3RoKSFiJiZkLm5vZGVUeXBlPT09MSYmKGYuY2xlYW5EYXRhKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSksZi5jbGVhbkRhdGEoW2RdKSksZC5wYXJlbnROb2RlJiZkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZCk7cmV0dXJuIHRoaXN9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsYjsoYj10aGlzW2FdKSE9bnVsbDthKyspe2Iubm9kZVR5cGU9PT0xJiZmLmNsZWFuRGF0YShiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpO3doaWxlKGIuZmlyc3RDaGlsZCliLnJlbW92ZUNoaWxkKGIuZmlyc3RDaGlsZCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7YT1hPT1udWxsPyExOmEsYj1iPT1udWxsP2E6YjtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZi5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtpZihhPT09YilyZXR1cm4gdGhpc1swXSYmdGhpc1swXS5ub2RlVHlwZT09PTE/dGhpc1swXS5pbm5lckhUTUwucmVwbGFjZShaLCIiKTpudWxsO2lmKHR5cGVvZiBhPT0ic3RyaW5nIiYmIWJkLnRlc3QoYSkmJihmLnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2V8fCEkLnRlc3QoYSkpJiYhYmpbKGJhLmV4ZWMoYSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXthPWEucmVwbGFjZShfLCI8JDE+PC8kMj4iKTt0cnl7Zm9yKHZhciBjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKXRoaXNbY10ubm9kZVR5cGU9PT0xJiYoZi5jbGVhbkRhdGEodGhpc1tjXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKSx0aGlzW2NdLmlubmVySFRNTD1hKX1jYXRjaChlKXt0aGlzLmVtcHR5KCkuYXBwZW5kKGEpfX1lbHNlIGYuaXNGdW5jdGlvbihhKT90aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9Zih0aGlzKTtjLmh0bWwoYS5jYWxsKHRoaXMsYixjLmh0bWwoKSkpfSk6dGhpcy5lbXB0eSgpLmFwcGVuZChhKTtyZXR1cm4gdGhpc30scmVwbGFjZVdpdGg6ZnVuY3Rpb24oYSl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1mKHRoaXMpLGQ9Yy5odG1sKCk7Yy5yZXBsYWNlV2l0aChhLmNhbGwodGhpcyxiLGQpKX0pO3R5cGVvZiBhIT0ic3RyaW5nIiYmKGE9ZihhKS5kZXRhY2goKSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPXRoaXMubmV4dFNpYmxpbmcsYz10aGlzLnBhcmVudE5vZGU7Zih0aGlzKS5yZW1vdmUoKSxiP2YoYikuYmVmb3JlKGEpOmYoYykuYXBwZW5kKGEpfSl9cmV0dXJuIHRoaXMubGVuZ3RoP3RoaXMucHVzaFN0YWNrKGYoZi5pc0Z1bmN0aW9uKGEpP2EoKTphKSwicmVwbGFjZVdpdGgiLGEpOnRoaXN9LGRldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW1vdmUoYSwhMCl9LGRvbU1hbmlwOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxnLGgsaSxqPWFbMF0saz1bXTtpZighZi5zdXBwb3J0LmNoZWNrQ2xvbmUmJmFyZ3VtZW50cy5sZW5ndGg9PT0zJiZ0eXBlb2Ygaj09InN0cmluZyImJmJnLnRlc3QoaikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YodGhpcykuZG9tTWFuaXAoYSxjLGQsITApfSk7aWYoZi5pc0Z1bmN0aW9uKGopKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7dmFyIGc9Zih0aGlzKTthWzBdPWouY2FsbCh0aGlzLGUsYz9nLmh0bWwoKTpiKSxnLmRvbU1hbmlwKGEsYyxkKX0pO2lmKHRoaXNbMF0pe2k9aiYmai5wYXJlbnROb2RlLGYuc3VwcG9ydC5wYXJlbnROb2RlJiZpJiZpLm5vZGVUeXBlPT09MTEmJmkuY2hpbGROb2Rlcy5sZW5ndGg9PT10aGlzLmxlbmd0aD9lPXtmcmFnbWVudDppfTplPWYuYnVpbGRGcmFnbWVudChhLHRoaXMsayksaD1lLmZyYWdtZW50LGguY2hpbGROb2Rlcy5sZW5ndGg9PT0xP2c9aD1oLmZpcnN0Q2hpbGQ6Zz1oLmZpcnN0Q2hpbGQ7aWYoZyl7Yz1jJiZmLm5vZGVOYW1lKGcsInRyIik7Zm9yKHZhciBsPTAsbT10aGlzLmxlbmd0aCxuPW0tMTtsPG07bCsrKWQuY2FsbChjP2JsKHRoaXNbbF0sZyk6dGhpc1tsXSxlLmNhY2hlYWJsZXx8bT4xJiZsPG4/Zi5jbG9uZShoLCEwLCEwKTpoKX1rLmxlbmd0aCYmZi5lYWNoKGssYnIpfXJldHVybiB0aGlzfX0pLGYuYnVpbGRGcmFnbWVudD1mdW5jdGlvbihhLGIsZCl7dmFyIGUsZyxoLGksaj1hWzBdO2ImJmJbMF0mJihpPWJbMF0ub3duZXJEb2N1bWVudHx8YlswXSksaS5jcmVhdGVEb2N1bWVudEZyYWdtZW50fHwoaT1jKSxhLmxlbmd0aD09PTEmJnR5cGVvZiBqPT0ic3RyaW5nIiYmai5sZW5ndGg8NTEyJiZpPT09YyYmai5jaGFyQXQoMCk9PT0iPCImJiFiZS50ZXN0KGopJiYoZi5zdXBwb3J0LmNoZWNrQ2xvbmV8fCFiZy50ZXN0KGopKSYmIWYuc3VwcG9ydC51bmtub3duRWxlbXMmJmJmLnRlc3QoaikmJihnPSEwLGg9Zi5mcmFnbWVudHNbal0saCYmaCE9PTEmJihlPWgpKSxlfHwoZT1pLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxmLmNsZWFuKGEsaSxlLGQpKSxnJiYoZi5mcmFnbWVudHNbal09aD9lOjEpO3JldHVybntmcmFnbWVudDplLGNhY2hlYWJsZTpnfX0sZi5mcmFnbWVudHM9e30sZi5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXtmLmZuW2FdPWZ1bmN0aW9uKGMpe3ZhciBkPVtdLGU9ZihjKSxnPXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO2lmKGcmJmcubm9kZVR5cGU9PT0xMSYmZy5jaGlsZE5vZGVzLmxlbmd0aD09PTEmJmUubGVuZ3RoPT09MSl7ZVtiXSh0aGlzWzBdKTtyZXR1cm4gdGhpc31mb3IodmFyIGg9MCxpPWUubGVuZ3RoO2g8aTtoKyspe3ZhciBqPShoPjA/dGhpcy5jbG9uZSghMCk6dGhpcykuZ2V0KCk7ZihlW2hdKVtiXShqKSxkPWQuY29uY2F0KGopfXJldHVybiB0aGlzLnB1c2hTdGFjayhkLGEsZS5zZWxlY3Rvcil9fSksZi5leHRlbmQoe2Nsb25lOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmNsb25lTm9kZSghMCksZSxnLGg7aWYoKCFmLnN1cHBvcnQubm9DbG9uZUV2ZW50fHwhZi5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSYmKGEubm9kZVR5cGU9PT0xfHxhLm5vZGVUeXBlPT09MTEpJiYhZi5pc1hNTERvYyhhKSl7Ym4oYSxkKSxlPWJvKGEpLGc9Ym8oZCk7Zm9yKGg9MDtlW2hdOysraClnW2hdJiZibihlW2hdLGdbaF0pfWlmKGIpe2JtKGEsZCk7aWYoYyl7ZT1ibyhhKSxnPWJvKGQpO2ZvcihoPTA7ZVtoXTsrK2gpYm0oZVtoXSxnW2hdKX19ZT1nPW51bGw7cmV0dXJuIGR9LGNsZWFuOmZ1bmN0aW9uKGEsYixkLGUpe3ZhciBnO2I9Ynx8Yyx0eXBlb2YgYi5jcmVhdGVFbGVtZW50PT0idW5kZWZpbmVkIiYmKGI9Yi5vd25lckRvY3VtZW50fHxiWzBdJiZiWzBdLm93bmVyRG9jdW1lbnR8fGMpO3ZhciBoPVtdLGk7Zm9yKHZhciBqPTAsazsoaz1hW2pdKSE9bnVsbDtqKyspe3R5cGVvZiBrPT0ibnVtYmVyIiYmKGsrPSIiKTtpZighayljb250aW51ZTtpZih0eXBlb2Ygaz09InN0cmluZyIpaWYoIWJjLnRlc3Qoaykpaz1iLmNyZWF0ZVRleHROb2RlKGspO2Vsc2V7az1rLnJlcGxhY2UoXywiPCQxPjwvJDI+Iik7dmFyIGw9KGJhLmV4ZWMoayl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksbT1ialtsXXx8YmouX2RlZmF1bHQsbj1tWzBdLG89Yi5jcmVhdGVFbGVtZW50KCJkaXYiKTtiPT09Yz9iay5hcHBlbmRDaGlsZChvKTpYKGIpLmFwcGVuZENoaWxkKG8pLG8uaW5uZXJIVE1MPW1bMV0rayttWzJdO3doaWxlKG4tLSlvPW8ubGFzdENoaWxkO2lmKCFmLnN1cHBvcnQudGJvZHkpe3ZhciBwPWJiLnRlc3QoaykscT1sPT09InRhYmxlIiYmIXA/by5maXJzdENoaWxkJiZvLmZpcnN0Q2hpbGQuY2hpbGROb2RlczptWzFdPT09Ijx0YWJsZT4iJiYhcD9vLmNoaWxkTm9kZXM6W107Zm9yKGk9cS5sZW5ndGgtMTtpPj0wOy0taSlmLm5vZGVOYW1lKHFbaV0sInRib2R5IikmJiFxW2ldLmNoaWxkTm9kZXMubGVuZ3RoJiZxW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocVtpXSl9IWYuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSYmJC50ZXN0KGspJiZvLmluc2VydEJlZm9yZShiLmNyZWF0ZVRleHROb2RlKCQuZXhlYyhrKVswXSksby5maXJzdENoaWxkKSxrPW8uY2hpbGROb2Rlc312YXIgcjtpZighZi5zdXBwb3J0LmFwcGVuZENoZWNrZWQpaWYoa1swXSYmdHlwZW9mIChyPWsubGVuZ3RoKT09Im51bWJlciIpZm9yKGk9MDtpPHI7aSsrKWJxKGtbaV0pO2Vsc2UgYnEoayk7ay5ub2RlVHlwZT9oLnB1c2goayk6aD1mLm1lcmdlKGgsayl9aWYoZCl7Zz1mdW5jdGlvbihhKXtyZXR1cm4hYS50eXBlfHxiaC50ZXN0KGEudHlwZSl9O2ZvcihqPTA7aFtqXTtqKyspaWYoZSYmZi5ub2RlTmFtZShoW2pdLCJzY3JpcHQiKSYmKCFoW2pdLnR5cGV8fGhbal0udHlwZS50b0xvd2VyQ2FzZSgpPT09InRleHQvamF2YXNjcmlwdCIpKWUucHVzaChoW2pdLnBhcmVudE5vZGU/aFtqXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGhbal0pOmhbal0pO2Vsc2V7aWYoaFtqXS5ub2RlVHlwZT09PTEpe3ZhciBzPWYuZ3JlcChoW2pdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxnKTtoLnNwbGljZS5hcHBseShoLFtqKzEsMF0uY29uY2F0KHMpKX1kLmFwcGVuZENoaWxkKGhbal0pfX1yZXR1cm4gaH0sY2xlYW5EYXRhOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1mLmNhY2hlLGU9Zi5ldmVudC5zcGVjaWFsLGc9Zi5zdXBwb3J0LmRlbGV0ZUV4cGFuZG87Zm9yKHZhciBoPTAsaTsoaT1hW2hdKSE9bnVsbDtoKyspe2lmKGkubm9kZU5hbWUmJmYubm9EYXRhW2kubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pY29udGludWU7Yz1pW2YuZXhwYW5kb107aWYoYyl7Yj1kW2NdO2lmKGImJmIuZXZlbnRzKXtmb3IodmFyIGogaW4gYi5ldmVudHMpZVtqXT9mLmV2ZW50LnJlbW92ZShpLGopOmYucmVtb3ZlRXZlbnQoaSxqLGIuaGFuZGxlKTtiLmhhbmRsZSYmKGIuaGFuZGxlLmVsZW09bnVsbCl9Zz9kZWxldGUgaVtmLmV4cGFuZG9dOmkucmVtb3ZlQXR0cmlidXRlJiZpLnJlbW92ZUF0dHJpYnV0ZShmLmV4cGFuZG8pLGRlbGV0ZSBkW2NdfX19fSk7dmFyIGJzPS9hbHBoYVwoW14pXSpcKS9pLGJ0PS9vcGFjaXR5PShbXildKikvLGJ1PS8oW0EtWl18Xm1zKS9nLGJ2PS9eLT9cZCsoPzpweCk/JC9pLGJ3PS9eLT9cZC8sYng9L14oW1wtK10pPShbXC0rLlxkZV0rKS8sYnk9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LGJ6PVsiTGVmdCIsIlJpZ2h0Il0sYkE9WyJUb3AiLCJCb3R0b20iXSxiQixiQyxiRDtmLmZuLmNzcz1mdW5jdGlvbihhLGMpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yJiZjPT09YilyZXR1cm4gdGhpcztyZXR1cm4gZi5hY2Nlc3ModGhpcyxhLGMsITAsZnVuY3Rpb24oYSxjLGQpe3JldHVybiBkIT09Yj9mLnN0eWxlKGEsYyxkKTpmLmNzcyhhLGMpfSl9LGYuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9YkIoYSwib3BhY2l0eSIsIm9wYWNpdHkiKTtyZXR1cm4gYz09PSIiPyIxIjpjfXJldHVybiBhLnN0eWxlLm9wYWNpdHl9fX0sY3NzTnVtYmVyOntmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6Zi5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihhLGMsZCxlKXtpZighIWEmJmEubm9kZVR5cGUhPT0zJiZhLm5vZGVUeXBlIT09OCYmISFhLnN0eWxlKXt2YXIgZyxoLGk9Zi5jYW1lbENhc2UoYyksaj1hLnN0eWxlLGs9Zi5jc3NIb29rc1tpXTtjPWYuY3NzUHJvcHNbaV18fGk7aWYoZD09PWIpe2lmKGsmJiJnZXQiaW4gayYmKGc9ay5nZXQoYSwhMSxlKSkhPT1iKXJldHVybiBnO3JldHVybiBqW2NdfWg9dHlwZW9mIGQsaD09PSJzdHJpbmciJiYoZz1ieC5leGVjKGQpKSYmKGQ9KyhnWzFdKzEpKitnWzJdK3BhcnNlRmxvYXQoZi5jc3MoYSxjKSksaD0ibnVtYmVyIik7aWYoZD09bnVsbHx8aD09PSJudW1iZXIiJiZpc05hTihkKSlyZXR1cm47aD09PSJudW1iZXIiJiYhZi5jc3NOdW1iZXJbaV0mJihkKz0icHgiKTtpZigha3x8ISgic2V0ImluIGspfHwoZD1rLnNldChhLGQpKSE9PWIpdHJ5e2pbY109ZH1jYXRjaChsKXt9fX0sY3NzOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxnO2M9Zi5jYW1lbENhc2UoYyksZz1mLmNzc0hvb2tzW2NdLGM9Zi5jc3NQcm9wc1tjXXx8YyxjPT09ImNzc0Zsb2F0IiYmKGM9ImZsb2F0Iik7aWYoZyYmImdldCJpbiBnJiYoZT1nLmdldChhLCEwLGQpKSE9PWIpcmV0dXJuIGU7aWYoYkIpcmV0dXJuIGJCKGEsYyl9LHN3YXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9O2Zvcih2YXIgZSBpbiBiKWRbZV09YS5zdHlsZVtlXSxhLnN0eWxlW2VdPWJbZV07Yy5jYWxsKGEpO2ZvcihlIGluIGIpYS5zdHlsZVtlXT1kW2VdfX0pLGYuY3VyQ1NTPWYuY3NzLGYuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oYSxiKXtmLmNzc0hvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlO2lmKGMpe2lmKGEub2Zmc2V0V2lkdGghPT0wKXJldHVybiBiRShhLGIsZCk7Zi5zd2FwKGEsYnksZnVuY3Rpb24oKXtlPWJFKGEsYixkKX0pO3JldHVybiBlfX0sc2V0OmZ1bmN0aW9uKGEsYil7aWYoIWJ2LnRlc3QoYikpcmV0dXJuIGI7Yj1wYXJzZUZsb2F0KGIpO2lmKGI+PTApcmV0dXJuIGIrInB4In19fSksZi5zdXBwb3J0Lm9wYWNpdHl8fChmLmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBidC50ZXN0KChiJiZhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZS5maWx0ZXI6YS5zdHlsZS5maWx0ZXIpfHwiIik/cGFyc2VGbG9hdChSZWdFeHAuJDEpLzEwMCsiIjpiPyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zdHlsZSxkPWEuY3VycmVudFN0eWxlLGU9Zi5pc051bWVyaWMoYik/ImFscGhhKG9wYWNpdHk9IitiKjEwMCsiKSI6IiIsZz1kJiZkLmZpbHRlcnx8Yy5maWx0ZXJ8fCIiO2Muem9vbT0xO2lmKGI+PTEmJmYudHJpbShnLnJlcGxhY2UoYnMsIiIpKT09PSIiKXtjLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIik7aWYoZCYmIWQuZmlsdGVyKXJldHVybn1jLmZpbHRlcj1icy50ZXN0KGcpP2cucmVwbGFjZShicyxlKTpnKyIgIitlfX0pLGYoZnVuY3Rpb24oKXtmLnN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodHx8KGYuY3NzSG9va3MubWFyZ2luUmlnaHQ9e2dldDpmdW5jdGlvbihhLGIpe3ZhciBjO2Yuc3dhcChhLHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSxmdW5jdGlvbigpe2I/Yz1iQihhLCJtYXJnaW4tcmlnaHQiLCJtYXJnaW5SaWdodCIpOmM9YS5zdHlsZS5tYXJnaW5SaWdodH0pO3JldHVybiBjfX0pfSksYy5kZWZhdWx0VmlldyYmYy5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYoYkM9ZnVuY3Rpb24oYSxjKXt2YXIgZCxlLGc7Yz1jLnJlcGxhY2UoYnUsIi0kMSIpLnRvTG93ZXJDYXNlKCk7aWYoIShlPWEub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykpcmV0dXJuIGI7aWYoZz1lLmdldENvbXB1dGVkU3R5bGUoYSxudWxsKSlkPWcuZ2V0UHJvcGVydHlWYWx1ZShjKSxkPT09IiImJiFmLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYSkmJihkPWYuc3R5bGUoYSxjKSk7cmV0dXJuIGR9KSxjLmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUmJihiRD1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPWEuY3VycmVudFN0eWxlJiZhLmN1cnJlbnRTdHlsZVtiXSxnPWEuc3R5bGU7Zj09PW51bGwmJmcmJihlPWdbYl0pJiYoZj1lKSwhYnYudGVzdChmKSYmYncudGVzdChmKSYmKGM9Zy5sZWZ0LGQ9YS5ydW50aW1lU3R5bGUmJmEucnVudGltZVN0eWxlLmxlZnQsZCYmKGEucnVudGltZVN0eWxlLmxlZnQ9YS5jdXJyZW50U3R5bGUubGVmdCksZy5sZWZ0PWI9PT0iZm9udFNpemUiPyIxZW0iOmZ8fDAsZj1nLnBpeGVsTGVmdCsicHgiLGcubGVmdD1jLGQmJihhLnJ1bnRpbWVTdHlsZS5sZWZ0PWQpKTtyZXR1cm4gZj09PSIiPyJhdXRvIjpmfSksYkI9YkN8fGJELGYuZXhwciYmZi5leHByLmZpbHRlcnMmJihmLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7dmFyIGI9YS5vZmZzZXRXaWR0aCxjPWEub2Zmc2V0SGVpZ2h0O3JldHVybiBiPT09MCYmYz09PTB8fCFmLnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzJiYoYS5zdHlsZSYmYS5zdHlsZS5kaXNwbGF5fHxmLmNzcyhhLCJkaXNwbGF5IikpPT09Im5vbmUifSxmLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFmLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9KTt2YXIgYkY9LyUyMC9nLGJHPS9cW1xdJC8sYkg9L1xyP1xuL2csYkk9LyMuKiQvLGJKPS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcsYks9L14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGRhdGV0aW1lLWxvY2FsfGVtYWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pLGJMPS9eKD86YWJvdXR8YXBwfGFwcFwtc3RvcmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sYk09L14oPzpHRVR8SEVBRCkkLyxiTj0vXlwvXC8vLGJPPS9cPy8sYlA9LzxzY3JpcHRcYltePF0qKD86KD8hPFwvc2NyaXB0Pik8W148XSopKjxcL3NjcmlwdD4vZ2ksYlE9L14oPzpzZWxlY3R8dGV4dGFyZWEpL2ksYlI9L1xzKy8sYlM9LyhbPyZdKV89W14mXSovLGJUPS9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKykpPyk/LyxiVT1mLmZuLmxvYWQsYlY9e30sYlc9e30sYlgsYlksYlo9WyIqLyJdK1siKiJdO3RyeXtiWD1lLmhyZWZ9Y2F0Y2goYiQpe2JYPWMuY3JlYXRlRWxlbWVudCgiYSIpLGJYLmhyZWY9IiIsYlg9YlguaHJlZn1iWT1iVC5leGVjKGJYLnRvTG93ZXJDYXNlKCkpfHxbXSxmLmZuLmV4dGVuZCh7bG9hZDpmdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGEhPSJzdHJpbmciJiZiVSlyZXR1cm4gYlUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZT1hLmluZGV4T2YoIiAiKTtpZihlPj0wKXt2YXIgZz1hLnNsaWNlKGUsYS5sZW5ndGgpO2E9YS5zbGljZSgwLGUpfXZhciBoPSJHRVQiO2MmJihmLmlzRnVuY3Rpb24oYyk/KGQ9YyxjPWIpOnR5cGVvZiBjPT0ib2JqZWN0IiYmKGM9Zi5wYXJhbShjLGYuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSxoPSJQT1NUIikpO3ZhciBpPXRoaXM7Zi5hamF4KHt1cmw6YSx0eXBlOmgsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Yyxjb21wbGV0ZTpmdW5jdGlvbihhLGIsYyl7Yz1hLnJlc3BvbnNlVGV4dCxhLmlzUmVzb2x2ZWQoKSYmKGEuZG9uZShmdW5jdGlvbihhKXtjPWF9KSxpLmh0bWwoZz9mKCI8ZGl2PiIpLmFwcGVuZChjLnJlcGxhY2UoYlAsIiIpKS5maW5kKGcpOmMpKSxkJiZpLmVhY2goZCxbYyxiLGFdKX19KTtyZXR1cm4gdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGYucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cz9mLm1ha2VBcnJheSh0aGlzLmVsZW1lbnRzKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLmNoZWNrZWR8fGJRLnRlc3QodGhpcy5ub2RlTmFtZSl8fGJLLnRlc3QodGhpcy50eXBlKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1mKHRoaXMpLnZhbCgpO3JldHVybiBjPT1udWxsP251bGw6Zi5pc0FycmF5KGMpP2YubWFwKGMsZnVuY3Rpb24oYSxjKXtyZXR1cm57bmFtZTpiLm5hbWUsdmFsdWU6YS5yZXBsYWNlKGJILCJcclxuIil9fSk6e25hbWU6Yi5uYW1lLHZhbHVlOmMucmVwbGFjZShiSCwiXHJcbiIpfX0pLmdldCgpfX0pLGYuZWFjaCgiYWpheFN0YXJ0IGFqYXhTdG9wIGFqYXhDb21wbGV0ZSBhamF4RXJyb3IgYWpheFN1Y2Nlc3MgYWpheFNlbmQiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtmLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmJpbmQoYixhKX19KSxmLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oYSxjKXtmW2NdPWZ1bmN0aW9uKGEsZCxlLGcpe2YuaXNGdW5jdGlvbihkKSYmKGc9Z3x8ZSxlPWQsZD1iKTtyZXR1cm4gZi5hamF4KHt0eXBlOmMsdXJsOmEsZGF0YTpkLHN1Y2Nlc3M6ZSxkYXRhVHlwZTpnfSl9fSksZi5leHRlbmQoe2dldFNjcmlwdDpmdW5jdGlvbihhLGMpe3JldHVybiBmLmdldChhLGIsYywic2NyaXB0Iil9LGdldEpTT046ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmdldChhLGIsYywianNvbiIpfSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtiP2NiKGEsZi5hamF4U2V0dGluZ3MpOihiPWEsYT1mLmFqYXhTZXR0aW5ncyksY2IoYSxiKTtyZXR1cm4gYX0sYWpheFNldHRpbmdzOnt1cmw6YlgsaXNMb2NhbDpiTC50ZXN0KGJZWzFdKSxnbG9iYWw6ITAsdHlwZToiR0VUIixjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixwcm9jZXNzRGF0YTohMCxhc3luYzohMCxhY2NlcHRzOnt4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGh0bWw6InRleHQvaHRtbCIsdGV4dDoidGV4dC9wbGFpbiIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiwiKiI6Ylp9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjphLlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpmLnBhcnNlSlNPTiwidGV4dCB4bWwiOmYucGFyc2VYTUx9LGZsYXRPcHRpb25zOntjb250ZXh0OiEwLHVybDohMH19LGFqYXhQcmVmaWx0ZXI6Yl8oYlYpLGFqYXhUcmFuc3BvcnQ6Yl8oYlcpLGFqYXg6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiB3KGEsYyxsLG0pe2lmKHMhPT0yKXtzPTIscSYmY2xlYXJUaW1lb3V0KHEpLHA9YixuPW18fCIiLHYucmVhZHlTdGF0ZT1hPjA/NDowO3ZhciBvLHIsdSx3PWMseD1sP2NkKGQsdixsKTpiLHksejtpZihhPj0yMDAmJmE8MzAwfHxhPT09MzA0KXtpZihkLmlmTW9kaWZpZWQpe2lmKHk9di5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpKWYubGFzdE1vZGlmaWVkW2tdPXk7aWYoej12LmdldFJlc3BvbnNlSGVhZGVyKCJFdGFnIikpZi5ldGFnW2tdPXp9aWYoYT09PTMwNCl3PSJub3Rtb2RpZmllZCIsbz0hMDtlbHNlIHRyeXtyPWNlKGQseCksdz0ic3VjY2VzcyIsbz0hMH1jYXRjaChBKXt3PSJwYXJzZXJlcnJvciIsdT1BfX1lbHNle3U9dztpZighd3x8YSl3PSJlcnJvciIsYTwwJiYoYT0wKX12LnN0YXR1cz1hLHYuc3RhdHVzVGV4dD0iIisoY3x8dyksbz9oLnJlc29sdmVXaXRoKGUsW3Isdyx2XSk6aC5yZWplY3RXaXRoKGUsW3Ysdyx1XSksdi5zdGF0dXNDb2RlKGopLGo9Yix0JiZnLnRyaWdnZXIoImFqYXgiKyhvPyJTdWNjZXNzIjoiRXJyb3IiKSxbdixkLG8/cjp1XSksaS5maXJlV2l0aChlLFt2LHddKSx0JiYoZy50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFt2LGRdKSwtLWYuYWN0aXZlfHxmLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpfX10eXBlb2YgYT09Im9iamVjdCImJihjPWEsYT1iKSxjPWN8fHt9O3ZhciBkPWYuYWpheFNldHVwKHt9LGMpLGU9ZC5jb250ZXh0fHxkLGc9ZSE9PWQmJihlLm5vZGVUeXBlfHxlIGluc3RhbmNlb2YgZik/ZihlKTpmLmV2ZW50LGg9Zi5EZWZlcnJlZCgpLGk9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iiksaj1kLnN0YXR1c0NvZGV8fHt9LGssbD17fSxtPXt9LG4sbyxwLHEscixzPTAsdCx1LHY9e3JlYWR5U3RhdGU6MCxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7aWYoIXMpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTthPW1bY109bVtjXXx8YSxsW2FdPWJ9cmV0dXJuIHRoaXN9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiBzPT09Mj9uOm51bGx9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBjO2lmKHM9PT0yKXtpZighbyl7bz17fTt3aGlsZShjPWJKLmV4ZWMobikpb1tjWzFdLnRvTG93ZXJDYXNlKCldPWNbMl19Yz1vW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIGM9PT1iP251bGw6Y30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihhKXtzfHwoZC5taW1lVHlwZT1hKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7YT1hfHwiYWJvcnQiLHAmJnAuYWJvcnQoYSksdygwLGEpO3JldHVybiB0aGlzfX07aC5wcm9taXNlKHYpLHYuc3VjY2Vzcz12LmRvbmUsdi5lcnJvcj12LmZhaWwsdi5jb21wbGV0ZT1pLmFkZCx2LnN0YXR1c0NvZGU9ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI7aWYoczwyKWZvcihiIGluIGEpaltiXT1baltiXSxhW2JdXTtlbHNlIGI9YVt2LnN0YXR1c10sdi50aGVuKGIsYil9cmV0dXJuIHRoaXN9LGQudXJsPSgoYXx8ZC51cmwpKyIiKS5yZXBsYWNlKGJJLCIiKS5yZXBsYWNlKGJOLGJZWzFdKyIvLyIpLGQuZGF0YVR5cGVzPWYudHJpbShkLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkuc3BsaXQoYlIpLGQuY3Jvc3NEb21haW49PW51bGwmJihyPWJULmV4ZWMoZC51cmwudG9Mb3dlckNhc2UoKSksZC5jcm9zc0RvbWFpbj0hKCFyfHxyWzFdPT1iWVsxXSYmclsyXT09YllbMl0mJihyWzNdfHwoclsxXT09PSJodHRwOiI/ODA6NDQzKSk9PShiWVszXXx8KGJZWzFdPT09Imh0dHA6Ij84MDo0NDMpKSkpLGQuZGF0YSYmZC5wcm9jZXNzRGF0YSYmdHlwZW9mIGQuZGF0YSE9InN0cmluZyImJihkLmRhdGE9Zi5wYXJhbShkLmRhdGEsZC50cmFkaXRpb25hbCkpLGNhKGJWLGQsYyx2KTtpZihzPT09MilyZXR1cm4hMTt0PWQuZ2xvYmFsLGQudHlwZT1kLnR5cGUudG9VcHBlckNhc2UoKSxkLmhhc0NvbnRlbnQ9IWJNLnRlc3QoZC50eXBlKSx0JiZmLmFjdGl2ZSsrPT09MCYmZi5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTtpZighZC5oYXNDb250ZW50KXtkLmRhdGEmJihkLnVybCs9KGJPLnRlc3QoZC51cmwpPyImIjoiPyIpK2QuZGF0YSxkZWxldGUgZC5kYXRhKSxrPWQudXJsO2lmKGQuY2FjaGU9PT0hMSl7dmFyIHg9Zi5ub3coKSx5PWQudXJsLnJlcGxhY2UoYlMsIiQxXz0iK3gpO2QudXJsPXkrKHk9PT1kLnVybD8oYk8udGVzdChkLnVybCk/IiYiOiI/IikrIl89Iit4OiIiKX19KGQuZGF0YSYmZC5oYXNDb250ZW50JiZkLmNvbnRlbnRUeXBlIT09ITF8fGMuY29udGVudFR5cGUpJiZ2LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsZC5jb250ZW50VHlwZSksZC5pZk1vZGlmaWVkJiYoaz1rfHxkLnVybCxmLmxhc3RNb2RpZmllZFtrXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsZi5sYXN0TW9kaWZpZWRba10pLGYuZXRhZ1trXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixmLmV0YWdba10pKSx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsZC5kYXRhVHlwZXNbMF0mJmQuYWNjZXB0c1tkLmRhdGFUeXBlc1swXV0/ZC5hY2NlcHRzW2QuZGF0YVR5cGVzWzBdXSsoZC5kYXRhVHlwZXNbMF0hPT0iKiI/IiwgIitiWisiOyBxPTAuMDEiOiIiKTpkLmFjY2VwdHNbIioiXSk7Zm9yKHUgaW4gZC5oZWFkZXJzKXYuc2V0UmVxdWVzdEhlYWRlcih1LGQuaGVhZGVyc1t1XSk7aWYoZC5iZWZvcmVTZW5kJiYoZC5iZWZvcmVTZW5kLmNhbGwoZSx2LGQpPT09ITF8fHM9PT0yKSl7di5hYm9ydCgpO3JldHVybiExfWZvcih1IGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXZbdV0oZFt1XSk7cD1jYShiVyxkLGMsdik7aWYoIXApdygtMSwiTm8gVHJhbnNwb3J0Iik7ZWxzZXt2LnJlYWR5U3RhdGU9MSx0JiZnLnRyaWdnZXIoImFqYXhTZW5kIixbdixkXSksZC5hc3luYyYmZC50aW1lb3V0PjAmJihxPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2LmFib3J0KCJ0aW1lb3V0Iil9LGQudGltZW91dCkpO3RyeXtzPTEscC5zZW5kKGwsdyl9Y2F0Y2goeil7czwyP3coLTEseik6Zi5lcnJvcih6KX19cmV0dXJuIHZ9LHBhcmFtOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9Zi5pc0Z1bmN0aW9uKGIpP2IoKTpiLGRbZC5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtjPT09YiYmKGM9Zi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpO2lmKGYuaXNBcnJheShhKXx8YS5qcXVlcnkmJiFmLmlzUGxhaW5PYmplY3QoYSkpZi5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKHZhciBnIGluIGEpY2MoZyxhW2ddLGMsZSk7cmV0dXJuIGQuam9pbigiJiIpLnJlcGxhY2UoYkYsIisiKX19KSxmLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e319KTt2YXIgY2Y9Zi5ub3coKSxjZz0vKFw9KVw/KCZ8JCl8XD9cPy9pO2YuYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZi5leHBhbmRvKyJfIitjZisrfX0pLGYuYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlPWIuY29udGVudFR5cGU9PT0iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiYmdHlwZW9mIGIuZGF0YT09InN0cmluZyI7aWYoYi5kYXRhVHlwZXNbMF09PT0ianNvbnAifHxiLmpzb25wIT09ITEmJihjZy50ZXN0KGIudXJsKXx8ZSYmY2cudGVzdChiLmRhdGEpKSl7dmFyIGcsaD1iLmpzb25wQ2FsbGJhY2s9Zi5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/Yi5qc29ucENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGk9YVtoXSxqPWIudXJsLGs9Yi5kYXRhLGw9IiQxIitoKyIkMiI7Yi5qc29ucCE9PSExJiYoaj1qLnJlcGxhY2UoY2csbCksYi51cmw9PT1qJiYoZSYmKGs9ay5yZXBsYWNlKGNnLGwpKSxiLmRhdGE9PT1rJiYoais9KC9cPy8udGVzdChqKT8iJiI6Ij8iKStiLmpzb25wKyI9IitoKSkpLGIudXJsPWosYi5kYXRhPWssYVtoXT1mdW5jdGlvbihhKXtnPVthXX0sZC5hbHdheXMoZnVuY3Rpb24oKXthW2hdPWksZyYmZi5pc0Z1bmN0aW9uKGkpJiZhW2hdKGdbMF0pfSksYi5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7Z3x8Zi5lcnJvcihoKyIgd2FzIG5vdCBjYWxsZWQiKTtyZXR1cm4gZ1swXX0sYi5kYXRhVHlwZXNbMF09Impzb24iO3JldHVybiJzY3JpcHQifX0pLGYuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovamF2YXNjcmlwdHxlY21hc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihhKXtmLmdsb2JhbEV2YWwoYSk7cmV0dXJuIGF9fX0pLGYuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihhKXthLmNhY2hlPT09YiYmKGEuY2FjaGU9ITEpLGEuY3Jvc3NEb21haW4mJihhLnR5cGU9IkdFVCIsYS5nbG9iYWw9ITEpfSksZi5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2lmKGEuY3Jvc3NEb21haW4pe3ZhciBkLGU9Yy5oZWFkfHxjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGMuZG9jdW1lbnRFbGVtZW50O3JldHVybntzZW5kOmZ1bmN0aW9uKGYsZyl7ZD1jLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGQuYXN5bmM9ImFzeW5jIixhLnNjcmlwdENoYXJzZXQmJihkLmNoYXJzZXQ9YS5zY3JpcHRDaGFyc2V0KSxkLnNyYz1hLnVybCxkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihhLGMpe2lmKGN8fCFkLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZC5yZWFkeVN0YXRlKSlkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGUmJmQucGFyZW50Tm9kZSYmZS5yZW1vdmVDaGlsZChkKSxkPWIsY3x8ZygyMDAsInN1Y2Nlc3MiKX0sZS5pbnNlcnRCZWZvcmUoZCxlLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2QmJmQub25sb2FkKDAsMSl9fX19KTt2YXIgY2g9YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7Zm9yKHZhciBhIGluIGNqKWNqW2FdKDAsMSl9OiExLGNpPTAsY2o7Zi5hamF4U2V0dGluZ3MueGhyPWEuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzTG9jYWwmJmNrKCl8fGNsKCl9OmNrLGZ1bmN0aW9uKGEpe2YuZXh0ZW5kKGYuc3VwcG9ydCx7YWpheDohIWEsY29yczohIWEmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gYX0pfShmLmFqYXhTZXR0aW5ncy54aHIoKSksZi5zdXBwb3J0LmFqYXgmJmYuYWpheFRyYW5zcG9ydChmdW5jdGlvbihjKXtpZighYy5jcm9zc0RvbWFpbnx8Zi5zdXBwb3J0LmNvcnMpe3ZhciBkO3JldHVybntzZW5kOmZ1bmN0aW9uKGUsZyl7dmFyIGg9Yy54aHIoKSxpLGo7Yy51c2VybmFtZT9oLm9wZW4oYy50eXBlLGMudXJsLGMuYXN5bmMsYy51c2VybmFtZSxjLnBhc3N3b3JkKTpoLm9wZW4oYy50eXBlLGMudXJsLGMuYXN5bmMpO2lmKGMueGhyRmllbGRzKWZvcihqIGluIGMueGhyRmllbGRzKWhbal09Yy54aHJGaWVsZHNbal07Yy5taW1lVHlwZSYmaC5vdmVycmlkZU1pbWVUeXBlJiZoLm92ZXJyaWRlTWltZVR5cGUoYy5taW1lVHlwZSksIWMuY3Jvc3NEb21haW4mJiFlWyJYLVJlcXVlc3RlZC1XaXRoIl0mJihlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7dHJ5e2ZvcihqIGluIGUpaC5zZXRSZXF1ZXN0SGVhZGVyKGosZVtqXSl9Y2F0Y2goayl7fWguc2VuZChjLmhhc0NvbnRlbnQmJmMuZGF0YXx8bnVsbCksZD1mdW5jdGlvbihhLGUpe3ZhciBqLGssbCxtLG47dHJ5e2lmKGQmJihlfHxoLnJlYWR5U3RhdGU9PT00KSl7ZD1iLGkmJihoLm9ucmVhZHlzdGF0ZWNoYW5nZT1mLm5vb3AsY2gmJmRlbGV0ZSBjaltpXSk7aWYoZSloLnJlYWR5U3RhdGUhPT00JiZoLmFib3J0KCk7ZWxzZXtqPWguc3RhdHVzLGw9aC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSxtPXt9LG49aC5yZXNwb25zZVhNTCxuJiZuLmRvY3VtZW50RWxlbWVudCYmKG0ueG1sPW4pLG0udGV4dD1oLnJlc3BvbnNlVGV4dDt0cnl7az1oLnN0YXR1c1RleHR9Y2F0Y2gobyl7az0iIn0haiYmYy5pc0xvY2FsJiYhYy5jcm9zc0RvbWFpbj9qPW0udGV4dD8yMDA6NDA0Omo9PT0xMjIzJiYoaj0yMDQpfX19Y2F0Y2gocCl7ZXx8ZygtMSxwKX1tJiZnKGosayxtLGwpfSwhYy5hc3luY3x8aC5yZWFkeVN0YXRlPT09ND9kKCk6KGk9KytjaSxjaCYmKGNqfHwoY2o9e30sZihhKS51bmxvYWQoY2gpKSxjaltpXT1kKSxoLm9ucmVhZHlzdGF0ZWNoYW5nZT1kKX0sYWJvcnQ6ZnVuY3Rpb24oKXtkJiZkKDAsMSl9fX19KTt2YXIgY209e30sY24sY28sY3A9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLGNxPS9eKFsrXC1dPSk/KFtcZCsuXC1dKykoW2EteiVdKikkL2ksY3IsY3M9W1siaGVpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxbIndpZHRoIiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiXSxbIm9wYWNpdHkiXV0sY3Q7Zi5mbi5leHRlbmQoe3Nob3c6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU7aWYoYXx8YT09PTApcmV0dXJuIHRoaXMuYW5pbWF0ZShjdygic2hvdyIsMyksYSxiLGMpO2Zvcih2YXIgZz0wLGg9dGhpcy5sZW5ndGg7ZzxoO2crKylkPXRoaXNbZ10sZC5zdHlsZSYmKGU9ZC5zdHlsZS5kaXNwbGF5LCFmLl9kYXRhKGQsIm9sZGRpc3BsYXkiKSYmZT09PSJub25lIiYmKGU9ZC5zdHlsZS5kaXNwbGF5PSIiKSxlPT09IiImJmYuY3NzKGQsImRpc3BsYXkiKT09PSJub25lIiYmZi5fZGF0YShkLCJvbGRkaXNwbGF5IixjeChkLm5vZGVOYW1lKSkpO2ZvcihnPTA7ZzxoO2crKyl7ZD10aGlzW2ddO2lmKGQuc3R5bGUpe2U9ZC5zdHlsZS5kaXNwbGF5O2lmKGU9PT0iInx8ZT09PSJub25lIilkLnN0eWxlLmRpc3BsYXk9Zi5fZGF0YShkLCJvbGRkaXNwbGF5Iil8fCIifX1yZXR1cm4gdGhpc30saGlkZTpmdW5jdGlvbihhLGIsYyl7aWYoYXx8YT09PTApcmV0dXJuIHRoaXMuYW5pbWF0ZShjdygiaGlkZSIsMyksYSxiLGMpO3ZhciBkLGUsZz0wLGg9dGhpcy5sZW5ndGg7Zm9yKDtnPGg7ZysrKWQ9dGhpc1tnXSxkLnN0eWxlJiYoZT1mLmNzcyhkLCJkaXNwbGF5IiksZSE9PSJub25lIiYmIWYuX2RhdGEoZCwib2xkZGlzcGxheSIpJiZmLl9kYXRhKGQsIm9sZGRpc3BsYXkiLGUpKTtmb3IoZz0wO2c8aDtnKyspdGhpc1tnXS5zdHlsZSYmKHRoaXNbZ10uc3R5bGUuZGlzcGxheT0ibm9uZSIpO3JldHVybiB0aGlzfSxfdG9nZ2xlOmYuZm4udG9nZ2xlLHRvZ2dsZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dHlwZW9mIGE9PSJib29sZWFuIjtmLmlzRnVuY3Rpb24oYSkmJmYuaXNGdW5jdGlvbihiKT90aGlzLl90b2dnbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpOmE9PW51bGx8fGQ/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9ZD9hOmYodGhpcykuaXMoIjpoaWRkZW4iKTtmKHRoaXMpW2I/InNob3ciOiJoaWRlIl0oKX0pOnRoaXMuYW5pbWF0ZShjdygidG9nZ2xlIiwzKSxhLGIsYyk7cmV0dXJuIHRoaXN9LGZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5maWx0ZXIoIjpoaWRkZW4iKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OmJ9LGEsYyxkKX0sYW5pbWF0ZTpmdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBnKCl7ZS5xdWV1ZT09PSExJiZmLl9tYXJrKHRoaXMpO3ZhciBiPWYuZXh0ZW5kKHt9LGUpLGM9dGhpcy5ub2RlVHlwZT09PTEsZD1jJiZmKHRoaXMpLmlzKCI6aGlkZGVuIiksZyxoLGksaixrLGwsbSxuLG87Yi5hbmltYXRlZFByb3BlcnRpZXM9e307Zm9yKGkgaW4gYSl7Zz1mLmNhbWVsQ2FzZShpKSxpIT09ZyYmKGFbZ109YVtpXSxkZWxldGUgYVtpXSksaD1hW2ddLGYuaXNBcnJheShoKT8oYi5hbmltYXRlZFByb3BlcnRpZXNbZ109aFsxXSxoPWFbZ109aFswXSk6Yi5hbmltYXRlZFByb3BlcnRpZXNbZ109Yi5zcGVjaWFsRWFzaW5nJiZiLnNwZWNpYWxFYXNpbmdbZ118fGIuZWFzaW5nfHwic3dpbmciO2lmKGg9PT0iaGlkZSImJmR8fGg9PT0ic2hvdyImJiFkKXJldHVybiBiLmNvbXBsZXRlLmNhbGwodGhpcyk7YyYmKGc9PT0iaGVpZ2h0Inx8Zz09PSJ3aWR0aCIpJiYoYi5vdmVyZmxvdz1bdGhpcy5zdHlsZS5vdmVyZmxvdyx0aGlzLnN0eWxlLm92ZXJmbG93WCx0aGlzLnN0eWxlLm92ZXJmbG93WV0sZi5jc3ModGhpcywiZGlzcGxheSIpPT09ImlubGluZSImJmYuY3NzKHRoaXMsImZsb2F0Iik9PT0ibm9uZSImJighZi5zdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXR8fGN4KHRoaXMubm9kZU5hbWUpPT09ImlubGluZSI/dGhpcy5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siOnRoaXMuc3R5bGUuem9vbT0xKSl9Yi5vdmVyZmxvdyE9bnVsbCYmKHRoaXMuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIpO2ZvcihpIGluIGEpaj1uZXcgZi5meCh0aGlzLGIsaSksaD1hW2ldLGNwLnRlc3QoaCk/KG89Zi5fZGF0YSh0aGlzLCJ0b2dnbGUiK2kpfHwoaD09PSJ0b2dnbGUiP2Q/InNob3ciOiJoaWRlIjowKSxvPyhmLl9kYXRhKHRoaXMsInRvZ2dsZSIraSxvPT09InNob3ciPyJoaWRlIjoic2hvdyIpLGpbb10oKSk6altoXSgpKTooaz1jcS5leGVjKGgpLGw9ai5jdXIoKSxrPyhtPXBhcnNlRmxvYXQoa1syXSksbj1rWzNdfHwoZi5jc3NOdW1iZXJbaV0/IiI6InB4IiksbiE9PSJweCImJihmLnN0eWxlKHRoaXMsaSwobXx8MSkrbiksbD0obXx8MSkvai5jdXIoKSpsLGYuc3R5bGUodGhpcyxpLGwrbikpLGtbMV0mJihtPShrWzFdPT09Ii09Ij8tMToxKSptK2wpLGouY3VzdG9tKGwsbSxuKSk6ai5jdXN0b20obCxoLCIiKSk7cmV0dXJuITB9dmFyIGU9Zi5zcGVlZChiLGMsZCk7aWYoZi5pc0VtcHR5T2JqZWN0KGEpKXJldHVybiB0aGlzLmVhY2goZS5jb21wbGV0ZSxbITFdKTthPWYuZXh0ZW5kKHt9LGEpO3JldHVybiBlLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGcpOnRoaXMucXVldWUoZS5xdWV1ZSxnKX0sc3RvcDpmdW5jdGlvbihhLGMsZCl7dHlwZW9mIGEhPSJzdHJpbmciJiYoZD1jLGM9YSxhPWIpLGMmJmEhPT0hMSYmdGhpcy5xdWV1ZShhfHwiZngiLFtdKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gaChhLGIsYyl7dmFyIGU9YltjXTtmLnJlbW92ZURhdGEoYSxjLCEwKSxlLnN0b3AoZCl9dmFyIGIsYz0hMSxlPWYudGltZXJzLGc9Zi5fZGF0YSh0aGlzKTtkfHxmLl91bm1hcmsoITAsdGhpcyk7aWYoYT09bnVsbClmb3IoYiBpbiBnKWdbYl0uc3RvcCYmYi5pbmRleE9mKCIucnVuIik9PT1iLmxlbmd0aC00JiZoKHRoaXMsZyxiKTtlbHNlIGdbYj1hKyIucnVuIl0mJmdbYl0uc3RvcCYmaCh0aGlzLGcsYik7Zm9yKGI9ZS5sZW5ndGg7Yi0tOyllW2JdLmVsZW09PT10aGlzJiYoYT09bnVsbHx8ZVtiXS5xdWV1ZT09PWEpJiYoZD9lW2JdKCEwKTplW2JdLnNhdmVTdGF0ZSgpLGM9ITAsZS5zcGxpY2UoYiwxKSk7KCFkfHwhYykmJmYuZGVxdWV1ZSh0aGlzLGEpfSl9fSksZi5lYWNoKHtzbGlkZURvd246Y3coInNob3ciLDEpLHNsaWRlVXA6Y3coImhpZGUiLDEpLHNsaWRlVG9nZ2xlOmN3KCJ0b2dnbGUiLDEpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oYSxiKXtmLmZuW2FdPWZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsYSxjLGQpfX0pLGYuZXh0ZW5kKHtzcGVlZDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSYmdHlwZW9mIGE9PSJvYmplY3QiP2YuZXh0ZW5kKHt9LGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8Zi5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0aW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFmLmlzRnVuY3Rpb24oYikmJmJ9O2QuZHVyYXRpb249Zi5meC5vZmY/MDp0eXBlb2YgZC5kdXJhdGlvbj09Im51bWJlciI/ZC5kdXJhdGlvbjpkLmR1cmF0aW9uIGluIGYuZnguc3BlZWRzP2YuZnguc3BlZWRzW2QuZHVyYXRpb25dOmYuZnguc3BlZWRzLl9kZWZhdWx0O2lmKGQucXVldWU9PW51bGx8fGQucXVldWU9PT0hMClkLnF1ZXVlPSJmeCI7ZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKGEpe2YuaXNGdW5jdGlvbihkLm9sZCkmJmQub2xkLmNhbGwodGhpcyksZC5xdWV1ZT9mLmRlcXVldWUodGhpcyxkLnF1ZXVlKTphIT09ITEmJmYuX3VubWFyayh0aGlzKX07cmV0dXJuIGR9LGVhc2luZzp7bGluZWFyOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjK2QqYX0sc3dpbmc6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKC1NYXRoLmNvcyhhKk1hdGguUEkpLzIrLjUpKmQrY319LHRpbWVyczpbXSxmeDpmdW5jdGlvbihhLGIsYyl7dGhpcy5vcHRpb25zPWIsdGhpcy5lbGVtPWEsdGhpcy5wcm9wPWMsYi5vcmlnPWIub3JpZ3x8e319fSksZi5meC5wcm90b3R5cGU9e3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSwoZi5meC5zdGVwW3RoaXMucHJvcF18fGYuZnguc3RlcC5fZGVmYXVsdCkodGhpcyl9LGN1cjpmdW5jdGlvbigpe2lmKHRoaXMuZWxlbVt0aGlzLnByb3BdIT1udWxsJiYoIXRoaXMuZWxlbS5zdHlsZXx8dGhpcy5lbGVtLnN0eWxlW3RoaXMucHJvcF09PW51bGwpKXJldHVybiB0aGlzLmVsZW1bdGhpcy5wcm9wXTt2YXIgYSxiPWYuY3NzKHRoaXMuZWxlbSx0aGlzLnByb3ApO3JldHVybiBpc05hTihhPXBhcnNlRmxvYXQoYikpPyFifHxiPT09ImF1dG8iPzA6YjphfSxjdXN0b206ZnVuY3Rpb24oYSxjLGQpe2Z1bmN0aW9uIGgoYSl7cmV0dXJuIGUuc3RlcChhKX12YXIgZT10aGlzLGc9Zi5meDt0aGlzLnN0YXJ0VGltZT1jdHx8Y3UoKSx0aGlzLmVuZD1jLHRoaXMubm93PXRoaXMuc3RhcnQ9YSx0aGlzLnBvcz10aGlzLnN0YXRlPTAsdGhpcy51bml0PWR8fHRoaXMudW5pdHx8KGYuY3NzTnVtYmVyW3RoaXMucHJvcF0/IiI6InB4IiksaC5xdWV1ZT10aGlzLm9wdGlvbnMucXVldWUsaC5lbGVtPXRoaXMuZWxlbSxoLnNhdmVTdGF0ZT1mdW5jdGlvbigpe2Uub3B0aW9ucy5oaWRlJiZmLl9kYXRhKGUuZWxlbSwiZnhzaG93IitlLnByb3ApPT09YiYmZi5fZGF0YShlLmVsZW0sImZ4c2hvdyIrZS5wcm9wLGUuc3RhcnQpfSxoKCkmJmYudGltZXJzLnB1c2goaCkmJiFjciYmKGNyPXNldEludGVydmFsKGcudGljayxnLmludGVydmFsKSl9LHNob3c6ZnVuY3Rpb24oKXt2YXIgYT1mLl9kYXRhKHRoaXMuZWxlbSwiZnhzaG93Iit0aGlzLnByb3ApO3RoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF09YXx8Zi5zdHlsZSh0aGlzLmVsZW0sdGhpcy5wcm9wKSx0aGlzLm9wdGlvbnMuc2hvdz0hMCxhIT09Yj90aGlzLmN1c3RvbSh0aGlzLmN1cigpLGEpOnRoaXMuY3VzdG9tKHRoaXMucHJvcD09PSJ3aWR0aCJ8fHRoaXMucHJvcD09PSJoZWlnaHQiPzE6MCx0aGlzLmN1cigpKSxmKHRoaXMuZWxlbSkuc2hvdygpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1mLl9kYXRhKHRoaXMuZWxlbSwiZnhzaG93Iit0aGlzLnByb3ApfHxmLnN0eWxlKHRoaXMuZWxlbSx0aGlzLnByb3ApLHRoaXMub3B0aW9ucy5oaWRlPSEwLHRoaXMuY3VzdG9tKHRoaXMuY3VyKCksMCl9LHN0ZXA6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU9Y3R8fGN1KCksZz0hMCxoPXRoaXMuZWxlbSxpPXRoaXMub3B0aW9ucztpZihhfHxlPj1pLmR1cmF0aW9uK3RoaXMuc3RhcnRUaW1lKXt0aGlzLm5vdz10aGlzLmVuZCx0aGlzLnBvcz10aGlzLnN0YXRlPTEsdGhpcy51cGRhdGUoKSxpLmFuaW1hdGVkUHJvcGVydGllc1t0aGlzLnByb3BdPSEwO2ZvcihiIGluIGkuYW5pbWF0ZWRQcm9wZXJ0aWVzKWkuYW5pbWF0ZWRQcm9wZXJ0aWVzW2JdIT09ITAmJihnPSExKTtpZihnKXtpLm92ZXJmbG93IT1udWxsJiYhZi5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3MmJmYuZWFjaChbIiIsIlgiLCJZIl0sZnVuY3Rpb24oYSxiKXtoLnN0eWxlWyJvdmVyZmxvdyIrYl09aS5vdmVyZmxvd1thXX0pLGkuaGlkZSYmZihoKS5oaWRlKCk7aWYoaS5oaWRlfHxpLnNob3cpZm9yKGIgaW4gaS5hbmltYXRlZFByb3BlcnRpZXMpZi5zdHlsZShoLGIsaS5vcmlnW2JdKSxmLnJlbW92ZURhdGEoaCwiZnhzaG93IitiLCEwKSxmLnJlbW92ZURhdGEoaCwidG9nZ2xlIitiLCEwKTtkPWkuY29tcGxldGUsZCYmKGkuY29tcGxldGU9ITEsZC5jYWxsKGgpKX1yZXR1cm4hMX1pLmR1cmF0aW9uPT1JbmZpbml0eT90aGlzLm5vdz1lOihjPWUtdGhpcy5zdGFydFRpbWUsdGhpcy5zdGF0ZT1jL2kuZHVyYXRpb24sdGhpcy5wb3M9Zi5lYXNpbmdbaS5hbmltYXRlZFByb3BlcnRpZXNbdGhpcy5wcm9wXV0odGhpcy5zdGF0ZSxjLDAsMSxpLmR1cmF0aW9uKSx0aGlzLm5vdz10aGlzLnN0YXJ0Kyh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0aGlzLnBvcyksdGhpcy51cGRhdGUoKTtyZXR1cm4hMH19LGYuZXh0ZW5kKGYuZngse3RpY2s6ZnVuY3Rpb24oKXt2YXIgYSxiPWYudGltZXJzLGM9MDtmb3IoO2M8Yi5sZW5ndGg7YysrKWE9YltjXSwhYSgpJiZiW2NdPT09YSYmYi5zcGxpY2UoYy0tLDEpO2IubGVuZ3RofHxmLmZ4LnN0b3AoKX0saW50ZXJ2YWw6MTMsc3RvcDpmdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoY3IpLGNyPW51bGx9LHNwZWVkczp7c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxzdGVwOntvcGFjaXR5OmZ1bmN0aW9uKGEpe2Yuc3R5bGUoYS5lbGVtLCJvcGFjaXR5IixhLm5vdyl9LF9kZWZhdWx0OmZ1bmN0aW9uKGEpe2EuZWxlbS5zdHlsZSYmYS5lbGVtLnN0eWxlW2EucHJvcF0hPW51bGw/YS5lbGVtLnN0eWxlW2EucHJvcF09YS5ub3crYS51bml0OmEuZWxlbVthLnByb3BdPWEubm93fX19KSxmLmVhY2goWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYil7Zi5meC5zdGVwW2JdPWZ1bmN0aW9uKGEpe2Yuc3R5bGUoYS5lbGVtLGIsTWF0aC5tYXgoMCxhLm5vdykpfX0pLGYuZXhwciYmZi5leHByLmZpbHRlcnMmJihmLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gZi5ncmVwKGYudGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofSk7dmFyIGN5PS9edCg/OmFibGV8ZHxoKSQvaSxjej0vXig/OmJvZHl8aHRtbCkkL2k7ImdldEJvdW5kaW5nQ2xpZW50UmVjdCJpbiBjLmRvY3VtZW50RWxlbWVudD9mLmZuLm9mZnNldD1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdLGM7aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2Yub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTtpZighYnx8IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJuIGYub2Zmc2V0LmJvZHlPZmZzZXQoYik7dHJ5e2M9Yi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jYXRjaChkKXt9dmFyIGU9Yi5vd25lckRvY3VtZW50LGc9ZS5kb2N1bWVudEVsZW1lbnQ7aWYoIWN8fCFmLmNvbnRhaW5zKGcsYikpcmV0dXJuIGM/e3RvcDpjLnRvcCxsZWZ0OmMubGVmdH06e3RvcDowLGxlZnQ6MH07dmFyIGg9ZS5ib2R5LGk9Y0EoZSksaj1nLmNsaWVudFRvcHx8aC5jbGllbnRUb3B8fDAsaz1nLmNsaWVudExlZnR8fGguY2xpZW50TGVmdHx8MCxsPWkucGFnZVlPZmZzZXR8fGYuc3VwcG9ydC5ib3hNb2RlbCYmZy5zY3JvbGxUb3B8fGguc2Nyb2xsVG9wLG09aS5wYWdlWE9mZnNldHx8Zi5zdXBwb3J0LmJveE1vZGVsJiZnLnNjcm9sbExlZnR8fGguc2Nyb2xsTGVmdCxuPWMudG9wK2wtaixvPWMubGVmdCttLWs7cmV0dXJue3RvcDpuLGxlZnQ6b319OmYuZm4ub2Zmc2V0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF07aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2Yub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTtpZighYnx8IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJuIGYub2Zmc2V0LmJvZHlPZmZzZXQoYik7dmFyIGMsZD1iLm9mZnNldFBhcmVudCxlPWIsZz1iLm93bmVyRG9jdW1lbnQsaD1nLmRvY3VtZW50RWxlbWVudCxpPWcuYm9keSxqPWcuZGVmYXVsdFZpZXcsaz1qP2ouZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlLGw9Yi5vZmZzZXRUb3AsbT1iLm9mZnNldExlZnQ7d2hpbGUoKGI9Yi5wYXJlbnROb2RlKSYmYiE9PWkmJmIhPT1oKXtpZihmLnN1cHBvcnQuZml4ZWRQb3NpdGlvbiYmay5wb3NpdGlvbj09PSJmaXhlZCIpYnJlYWs7Yz1qP2ouZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlLGwtPWIuc2Nyb2xsVG9wLG0tPWIuc2Nyb2xsTGVmdCxiPT09ZCYmKGwrPWIub2Zmc2V0VG9wLG0rPWIub2Zmc2V0TGVmdCxmLnN1cHBvcnQuZG9lc05vdEFkZEJvcmRlciYmKCFmLnN1cHBvcnQuZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHN8fCFjeS50ZXN0KGIubm9kZU5hbWUpKSYmKGwrPXBhcnNlRmxvYXQoYy5ib3JkZXJUb3BXaWR0aCl8fDAsbSs9cGFyc2VGbG9hdChjLmJvcmRlckxlZnRXaWR0aCl8fDApLGU9ZCxkPWIub2Zmc2V0UGFyZW50KSxmLnN1cHBvcnQuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlJiZjLm92ZXJmbG93IT09InZpc2libGUiJiYobCs9cGFyc2VGbG9hdChjLmJvcmRlclRvcFdpZHRoKXx8MCxtKz1wYXJzZUZsb2F0KGMuYm9yZGVyTGVmdFdpZHRoKXx8MCksaz1jfWlmKGsucG9zaXRpb249PT0icmVsYXRpdmUifHxrLnBvc2l0aW9uPT09InN0YXRpYyIpbCs9aS5vZmZzZXRUb3AsbSs9aS5vZmZzZXRMZWZ0O2Yuc3VwcG9ydC5maXhlZFBvc2l0aW9uJiZrLnBvc2l0aW9uPT09ImZpeGVkIiYmKGwrPU1hdGgubWF4KGguc2Nyb2xsVG9wLGkuc2Nyb2xsVG9wKSxtKz1NYXRoLm1heChoLnNjcm9sbExlZnQsaS5zY3JvbGxMZWZ0KSk7cmV0dXJue3RvcDpsLGxlZnQ6bX19LGYub2Zmc2V0PXtib2R5T2Zmc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEub2Zmc2V0VG9wLGM9YS5vZmZzZXRMZWZ0O2Yuc3VwcG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCYmKGIrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCk7cmV0dXJue3RvcDpiLGxlZnQ6Y319LHNldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9Zi5jc3MoYSwicG9zaXRpb24iKTtkPT09InN0YXRpYyImJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpO3ZhciBlPWYoYSksZz1lLm9mZnNldCgpLGg9Zi5jc3MoYSwidG9wIiksaT1mLmNzcyhhLCJsZWZ0Iiksaj0oZD09PSJhYnNvbHV0ZSJ8fGQ9PT0iZml4ZWQiKSYmZi5pbkFycmF5KCJhdXRvIixbaCxpXSk+LTEsaz17fSxsPXt9LG0sbjtqPyhsPWUucG9zaXRpb24oKSxtPWwudG9wLG49bC5sZWZ0KToobT1wYXJzZUZsb2F0KGgpfHwwLG49cGFyc2VGbG9hdChpKXx8MCksZi5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGcpKSxiLnRvcCE9bnVsbCYmKGsudG9wPWIudG9wLWcudG9wK20pLGIubGVmdCE9bnVsbCYmKGsubGVmdD1iLmxlZnQtZy5sZWZ0K24pLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLGspOmUuY3NzKGspfX0sZi5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0pcmV0dXJuIG51bGw7dmFyIGE9dGhpc1swXSxiPXRoaXMub2Zmc2V0UGFyZW50KCksYz10aGlzLm9mZnNldCgpLGQ9Y3oudGVzdChiWzBdLm5vZGVOYW1lKT97dG9wOjAsbGVmdDowfTpiLm9mZnNldCgpO2MudG9wLT1wYXJzZUZsb2F0KGYuY3NzKGEsIm1hcmdpblRvcCIpKXx8MCxjLmxlZnQtPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCxkLnRvcCs9cGFyc2VGbG9hdChmLmNzcyhiWzBdLCJib3JkZXJUb3BXaWR0aCIpKXx8MCxkLmxlZnQrPXBhcnNlRmxvYXQoZi5jc3MoYlswXSwiYm9yZGVyTGVmdFdpZHRoIikpfHwwO3JldHVybnt0b3A6Yy50b3AtZC50b3AsbGVmdDpjLmxlZnQtZC5sZWZ0fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXRQYXJlbnR8fGMuYm9keTt3aGlsZShhJiYhY3oudGVzdChhLm5vZGVOYW1lKSYmZi5jc3MoYSwicG9zaXRpb24iKT09PSJzdGF0aWMiKWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF9KX19KSxmLmVhY2goWyJMZWZ0IiwiVG9wIl0sZnVuY3Rpb24oYSxjKXt2YXIgZD0ic2Nyb2xsIitjO2YuZm5bZF09ZnVuY3Rpb24oYyl7dmFyIGUsZztpZihjPT09Yil7ZT10aGlzWzBdO2lmKCFlKXJldHVybiBudWxsO2c9Y0EoZSk7cmV0dXJuIGc/InBhZ2VYT2Zmc2V0ImluIGc/Z1thPyJwYWdlWU9mZnNldCI6InBhZ2VYT2Zmc2V0Il06Zi5zdXBwb3J0LmJveE1vZGVsJiZnLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXXx8Zy5kb2N1bWVudC5ib2R5W2RdOmVbZF19cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2c9Y0EodGhpcyksZz9nLnNjcm9sbFRvKGE/ZihnKS5zY3JvbGxMZWZ0KCk6YyxhP2M6ZihnKS5zY3JvbGxUb3AoKSk6dGhpc1tkXT1jfSl9fSksZi5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5jdGlvbihhLGMpe3ZhciBkPWMudG9Mb3dlckNhc2UoKTtmLmZuWyJpbm5lciIrY109ZnVuY3Rpb24oKXt2YXIgYT10aGlzWzBdO3JldHVybiBhP2Euc3R5bGU/cGFyc2VGbG9hdChmLmNzcyhhLGQsInBhZGRpbmciKSk6dGhpc1tkXSgpOm51bGx9LGYuZm5bIm91dGVyIitjXT1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdO3JldHVybiBiP2Iuc3R5bGU/cGFyc2VGbG9hdChmLmNzcyhiLGQsYT8ibWFyZ2luIjoiYm9yZGVyIikpOnRoaXNbZF0oKTpudWxsfSxmLmZuW2RdPWZ1bmN0aW9uKGEpe3ZhciBlPXRoaXNbMF07aWYoIWUpcmV0dXJuIGE9PW51bGw/bnVsbDp0aGlzO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyk7Y1tkXShhLmNhbGwodGhpcyxiLGNbZF0oKSkpfSk7aWYoZi5pc1dpbmRvdyhlKSl7dmFyIGc9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrY10saD1lLmRvY3VtZW50LmJvZHk7cmV0dXJuIGUuZG9jdW1lbnQuY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0IiYmZ3x8aCYmaFsiY2xpZW50IitjXXx8Z31pZihlLm5vZGVUeXBlPT09OSlyZXR1cm4gTWF0aC5tYXgoZS5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrY10sZS5ib2R5WyJzY3JvbGwiK2NdLGUuZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwiK2NdLGUuYm9keVsib2Zmc2V0IitjXSxlLmRvY3VtZW50RWxlbWVudFsib2Zmc2V0IitjXSk7aWYoYT09PWIpe3ZhciBpPWYuY3NzKGUsZCksaj1wYXJzZUZsb2F0KGkpO3JldHVybiBmLmlzTnVtZXJpYyhqKT9qOml9cmV0dXJuIHRoaXMuY3NzKGQsdHlwZW9mIGE9PSJzdHJpbmciP2E6YSsicHgiKX19KSxhLmpRdWVyeT1hLiQ9Zn0pKHdpbmRvdyk7'></script>
<script id="fb_extras_modnizr_253_min_js" src='data:/text/plain;base64,LyogTW9kZXJuaXpyIDIuNS4zIChDdXN0b20gQnVpbGQpIHwgTUlUICYgQlNECiAqIEJ1aWxkOiBodHRwOi8vd3d3Lm1vZGVybml6ci5jb20vZG93bmxvYWQvIy1jc3N0cmFuc2Zvcm1zLWNzc3RyYW5zZm9ybXMzZC1zaGl2LWNzc2NsYXNzZXMtdGVzdHN0eWxlcy10ZXN0cHJvcC10ZXN0YWxscHJvcHMtcHJlZml4ZXMtZG9tcHJlZml4ZXMtbG9hZAogKi8KO3dpbmRvdy5Nb2Rlcm5penI9ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIHooYSl7ai5jc3NUZXh0PWF9ZnVuY3Rpb24gQShhLGIpe3JldHVybiB6KG0uam9pbihhKyI7IikrKGJ8fCIiKSl9ZnVuY3Rpb24gQihhLGIpe3JldHVybiB0eXBlb2YgYT09PWJ9ZnVuY3Rpb24gQyhhLGIpe3JldHVybiEhfigiIithKS5pbmRleE9mKGIpfWZ1bmN0aW9uIEQoYSxiKXtmb3IodmFyIGQgaW4gYSlpZihqW2FbZF1dIT09YylyZXR1cm4gYj09InBmeCI/YVtkXTohMDtyZXR1cm4hMX1mdW5jdGlvbiBFKGEsYixkKXtmb3IodmFyIGUgaW4gYSl7dmFyIGY9YlthW2VdXTtpZihmIT09YylyZXR1cm4gZD09PSExP2FbZV06QihmLCJmdW5jdGlvbiIpP2YuYmluZChkfHxiKTpmfXJldHVybiExfWZ1bmN0aW9uIEYoYSxiLGMpe3ZhciBkPWEuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYS5zdWJzdHIoMSksZT0oYSsiICIrby5qb2luKGQrIiAiKStkKS5zcGxpdCgiICIpO3JldHVybiBCKGIsInN0cmluZyIpfHxCKGIsInVuZGVmaW5lZCIpP0QoZSxiKTooZT0oYSsiICIrcC5qb2luKGQrIiAiKStkKS5zcGxpdCgiICIpLEUoZSxiLGMpKX12YXIgZD0iMi41LjMiLGU9e30sZj0hMCxnPWIuZG9jdW1lbnRFbGVtZW50LGg9Im1vZGVybml6ciIsaT1iLmNyZWF0ZUVsZW1lbnQoaCksaj1pLnN0eWxlLGssbD17fS50b1N0cmluZyxtPSIgLXdlYmtpdC0gLW1vei0gLW8tIC1tcy0gIi5zcGxpdCgiICIpLG49IldlYmtpdCBNb3ogTyBtcyIsbz1uLnNwbGl0KCIgIikscD1uLnRvTG93ZXJDYXNlKCkuc3BsaXQoIiAiKSxxPXt9LHI9e30scz17fSx0PVtdLHU9dC5zbGljZSx2LHc9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGYsaSxqLGs9Yi5jcmVhdGVFbGVtZW50KCJkaXYiKSxsPWIuYm9keSxtPWw/bDpiLmNyZWF0ZUVsZW1lbnQoImJvZHkiKTtpZihwYXJzZUludChkLDEwKSl3aGlsZShkLS0paj1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGouaWQ9ZT9lW2RdOmgrKGQrMSksay5hcHBlbmRDaGlsZChqKTtyZXR1cm4gZj1bIiYjMTczOyIsIjxzdHlsZT4iLGEsIjwvc3R5bGU+Il0uam9pbigiIiksay5pZD1oLChsP2s6bSkuaW5uZXJIVE1MKz1mLG0uYXBwZW5kQ2hpbGQoayksbHx8KG0uc3R5bGUuYmFja2dyb3VuZD0iIixnLmFwcGVuZENoaWxkKG0pKSxpPWMoayxhKSxsP2sucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChrKTptLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobSksISFpfSx4PXt9Lmhhc093blByb3BlcnR5LHk7IUIoeCwidW5kZWZpbmVkIikmJiFCKHguY2FsbCwidW5kZWZpbmVkIik/eT1mdW5jdGlvbihhLGIpe3JldHVybiB4LmNhbGwoYSxiKX06eT1mdW5jdGlvbihhLGIpe3JldHVybiBiIGluIGEmJkIoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGVbYl0sInVuZGVmaW5lZCIpfSxGdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8KEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7aWYodHlwZW9mIGMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcjt2YXIgZD11LmNhbGwoYXJndW1lbnRzLDEpLGU9ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgZSl7dmFyIGE9ZnVuY3Rpb24oKXt9O2EucHJvdG90eXBlPWMucHJvdG90eXBlO3ZhciBmPW5ldyBhLGc9Yy5hcHBseShmLGQuY29uY2F0KHUuY2FsbChhcmd1bWVudHMpKSk7cmV0dXJuIE9iamVjdChnKT09PWc/ZzpmfXJldHVybiBjLmFwcGx5KGIsZC5jb25jYXQodS5jYWxsKGFyZ3VtZW50cykpKX07cmV0dXJuIGV9KTt2YXIgRz1mdW5jdGlvbihhLGMpe3ZhciBkPWEuam9pbigiIiksZj1jLmxlbmd0aDt3KGQsZnVuY3Rpb24oYSxjKXt2YXIgZD1iLnN0eWxlU2hlZXRzW2Iuc3R5bGVTaGVldHMubGVuZ3RoLTFdLGc9ZD9kLmNzc1J1bGVzJiZkLmNzc1J1bGVzWzBdP2QuY3NzUnVsZXNbMF0uY3NzVGV4dDpkLmNzc1RleHR8fCIiOiIiLGg9YS5jaGlsZE5vZGVzLGk9e307d2hpbGUoZi0tKWlbaFtmXS5pZF09aFtmXTtlLmNzc3RyYW5zZm9ybXMzZD0oaS5jc3N0cmFuc2Zvcm1zM2QmJmkuY3NzdHJhbnNmb3JtczNkLm9mZnNldExlZnQpPT09OSYmaS5jc3N0cmFuc2Zvcm1zM2Qub2Zmc2V0SGVpZ2h0PT09M30sZixjKX0oWyxbIkBtZWRpYSAoIixtLmpvaW4oInRyYW5zZm9ybS0zZCksKCIpLGgsIikiLCJ7I2Nzc3RyYW5zZm9ybXMzZHtsZWZ0OjlweDtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6M3B4O319Il0uam9pbigiIildLFssImNzc3RyYW5zZm9ybXMzZCJdKTtxLmNzc3RyYW5zZm9ybXM9ZnVuY3Rpb24oKXtyZXR1cm4hIUYoInRyYW5zZm9ybSIpfSxxLmNzc3RyYW5zZm9ybXMzZD1mdW5jdGlvbigpe3ZhciBhPSEhRigicGVyc3BlY3RpdmUiKTtyZXR1cm4gYSYmIndlYmtpdFBlcnNwZWN0aXZlImluIGcuc3R5bGUmJihhPWUuY3NzdHJhbnNmb3JtczNkKSxhfTtmb3IodmFyIEggaW4gcSl5KHEsSCkmJih2PUgudG9Mb3dlckNhc2UoKSxlW3ZdPXFbSF0oKSx0LnB1c2goKGVbdl0/IiI6Im5vLSIpK3YpKTtyZXR1cm4geigiIiksaT1rPW51bGwsZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBnKGEsYil7dmFyIGM9YS5jcmVhdGVFbGVtZW50KCJwIiksZD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGEuZG9jdW1lbnRFbGVtZW50O3JldHVybiBjLmlubmVySFRNTD0ieDxzdHlsZT4iK2IrIjwvc3R5bGU+IixkLmluc2VydEJlZm9yZShjLmxhc3RDaGlsZCxkLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGgoKXt2YXIgYT1rLmVsZW1lbnRzO3JldHVybiB0eXBlb2YgYT09InN0cmluZyI/YS5zcGxpdCgiICIpOmF9ZnVuY3Rpb24gaShhKXt2YXIgYj17fSxjPWEuY3JlYXRlRWxlbWVudCxlPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCxmPWUoKTthLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oYSl7dmFyIGU9KGJbYV18fChiW2FdPWMoYSkpKS5jbG9uZU5vZGUoKTtyZXR1cm4gay5zaGl2TWV0aG9kcyYmZS5jYW5IYXZlQ2hpbGRyZW4mJiFkLnRlc3QoYSk/Zi5hcHBlbmRDaGlsZChlKTplfSxhLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQ9RnVuY3Rpb24oImgsZiIsInJldHVybiBmdW5jdGlvbigpe3ZhciBuPWYuY2xvbmVOb2RlKCksYz1uLmNyZWF0ZUVsZW1lbnQ7aC5zaGl2TWV0aG9kcyYmKCIraCgpLmpvaW4oKS5yZXBsYWNlKC9cdysvZyxmdW5jdGlvbihhKXtyZXR1cm4gYlthXT1jKGEpLGYuY3JlYXRlRWxlbWVudChhKSwnYygiJythKyciKSd9KSsiKTtyZXR1cm4gbn0iKShrLGYpfWZ1bmN0aW9uIGooYSl7dmFyIGI7cmV0dXJuIGEuZG9jdW1lbnRTaGl2ZWQ/YTooay5zaGl2Q1NTJiYhZSYmKGI9ISFnKGEsImFydGljbGUsYXNpZGUsZGV0YWlscyxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsaGVhZGVyLGhncm91cCxuYXYsc2VjdGlvbntkaXNwbGF5OmJsb2NrfWF1ZGlve2Rpc3BsYXk6bm9uZX1jYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lOyp6b29tOjF9W2hpZGRlbl17ZGlzcGxheTpub25lfWF1ZGlvW2NvbnRyb2xzXXtkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7Knpvb206MX1tYXJre2JhY2tncm91bmQ6I0ZGMDtjb2xvcjojMDAwfSIpKSxmfHwoYj0haShhKSksYiYmKGEuZG9jdW1lbnRTaGl2ZWQ9YiksYSl9dmFyIGM9YS5odG1sNXx8e30sZD0vXjx8Xig/OmJ1dHRvbnxmb3JtfG1hcHxzZWxlY3R8dGV4dGFyZWEpJC9pLGUsZjsoZnVuY3Rpb24oKXt2YXIgYT1iLmNyZWF0ZUVsZW1lbnQoImEiKTthLmlubmVySFRNTD0iPHh5ej48L3h5ej4iLGU9ImhpZGRlbiJpbiBhLGY9YS5jaGlsZE5vZGVzLmxlbmd0aD09MXx8ZnVuY3Rpb24oKXt0cnl7Yi5jcmVhdGVFbGVtZW50KCJhIil9Y2F0Y2goYSl7cmV0dXJuITB9dmFyIGM9Yi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7cmV0dXJuIHR5cGVvZiBjLmNsb25lTm9kZT09InVuZGVmaW5lZCJ8fHR5cGVvZiBjLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQ9PSJ1bmRlZmluZWQifHx0eXBlb2YgYy5jcmVhdGVFbGVtZW50PT0idW5kZWZpbmVkIn0oKX0pKCk7dmFyIGs9e2VsZW1lbnRzOmMuZWxlbWVudHN8fCJhYmJyIGFydGljbGUgYXNpZGUgYXVkaW8gYmRpIGNhbnZhcyBkYXRhIGRhdGFsaXN0IGRldGFpbHMgZmlnY2FwdGlvbiBmaWd1cmUgZm9vdGVyIGhlYWRlciBoZ3JvdXAgbWFyayBtZXRlciBuYXYgb3V0cHV0IHByb2dyZXNzIHNlY3Rpb24gc3VtbWFyeSB0aW1lIHZpZGVvIixzaGl2Q1NTOmMuc2hpdkNTUyE9PSExLHNoaXZNZXRob2RzOmMuc2hpdk1ldGhvZHMhPT0hMSx0eXBlOiJkZWZhdWx0IixzaGl2RG9jdW1lbnQ6an07YS5odG1sNT1rLGooYil9KHRoaXMsYiksZS5fdmVyc2lvbj1kLGUuX3ByZWZpeGVzPW0sZS5fZG9tUHJlZml4ZXM9cCxlLl9jc3NvbVByZWZpeGVzPW8sZS50ZXN0UHJvcD1mdW5jdGlvbihhKXtyZXR1cm4gRChbYV0pfSxlLnRlc3RBbGxQcm9wcz1GLGUudGVzdFN0eWxlcz13LGcuY2xhc3NOYW1lPWcuY2xhc3NOYW1lLnJlcGxhY2UoLyhefFxzKW5vLWpzKFxzfCQpLywiJDEkMiIpKyhmPyIganMgIit0LmpvaW4oIiAiKToiIiksZX0odGhpcyx0aGlzLmRvY3VtZW50KSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXtyZXR1cm4gby5jYWxsKGEpPT0iW29iamVjdCBGdW5jdGlvbl0ifWZ1bmN0aW9uIGUoYSl7cmV0dXJuIHR5cGVvZiBhPT0ic3RyaW5nIn1mdW5jdGlvbiBmKCl7fWZ1bmN0aW9uIGcoYSl7cmV0dXJuIWF8fGE9PSJsb2FkZWQifHxhPT0iY29tcGxldGUifHxhPT0idW5pbml0aWFsaXplZCJ9ZnVuY3Rpb24gaCgpe3ZhciBhPXAuc2hpZnQoKTtxPTEsYT9hLnQ/bShmdW5jdGlvbigpeyhhLnQ9PSJjIj9CLmluamVjdENzczpCLmluamVjdEpzKShhLnMsMCxhLmEsYS54LGEuZSwxKX0sMCk6KGEoKSxoKCkpOnE9MH1mdW5jdGlvbiBpKGEsYyxkLGUsZixpLGope2Z1bmN0aW9uIGsoYil7aWYoIW8mJmcobC5yZWFkeVN0YXRlKSYmKHUucj1vPTEsIXEmJmgoKSxsLm9ubG9hZD1sLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGIpKXthIT0iaW1nIiYmbShmdW5jdGlvbigpe3QucmVtb3ZlQ2hpbGQobCl9LDUwKTtmb3IodmFyIGQgaW4geVtjXSl5W2NdLmhhc093blByb3BlcnR5KGQpJiZ5W2NdW2RdLm9ubG9hZCgpfX12YXIgaj1qfHxCLmVycm9yVGltZW91dCxsPXt9LG89MCxyPTAsdT17dDpkLHM6YyxlOmYsYTppLHg6an07eVtjXT09PTEmJihyPTEseVtjXT1bXSxsPWIuY3JlYXRlRWxlbWVudChhKSksYT09Im9iamVjdCI/bC5kYXRhPWM6KGwuc3JjPWMsbC50eXBlPWEpLGwud2lkdGg9bC5oZWlnaHQ9IjAiLGwub25lcnJvcj1sLm9ubG9hZD1sLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2suY2FsbCh0aGlzLHIpfSxwLnNwbGljZShlLDAsdSksYSE9ImltZyImJihyfHx5W2NdPT09Mj8odC5pbnNlcnRCZWZvcmUobCxzP251bGw6biksbShrLGopKTp5W2NdLnB1c2gobCkpfWZ1bmN0aW9uIGooYSxiLGMsZCxmKXtyZXR1cm4gcT0wLGI9Ynx8ImoiLGUoYSk/aShiPT0iYyI/djp1LGEsYix0aGlzLmkrKyxjLGQsZik6KHAuc3BsaWNlKHRoaXMuaSsrLDAsYSkscC5sZW5ndGg9PTEmJmgoKSksdGhpc31mdW5jdGlvbiBrKCl7dmFyIGE9QjtyZXR1cm4gYS5sb2FkZXI9e2xvYWQ6aixpOjB9LGF9dmFyIGw9Yi5kb2N1bWVudEVsZW1lbnQsbT1hLnNldFRpbWVvdXQsbj1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKVswXSxvPXt9LnRvU3RyaW5nLHA9W10scT0wLHI9Ik1vekFwcGVhcmFuY2UiaW4gbC5zdHlsZSxzPXImJiEhYi5jcmVhdGVSYW5nZSgpLmNvbXBhcmVOb2RlLHQ9cz9sOm4ucGFyZW50Tm9kZSxsPWEub3BlcmEmJm8uY2FsbChhLm9wZXJhKT09IltvYmplY3QgT3BlcmFdIixsPSEhYi5hdHRhY2hFdmVudCYmIWwsdT1yPyJvYmplY3QiOmw/InNjcmlwdCI6ImltZyIsdj1sPyJzY3JpcHQiOnUsdz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4gby5jYWxsKGEpPT0iW29iamVjdCBBcnJheV0ifSx4PVtdLHk9e30sej17dGltZW91dDpmdW5jdGlvbihhLGIpe3JldHVybiBiLmxlbmd0aCYmKGEudGltZW91dD1iWzBdKSxhfX0sQSxCO0I9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt2YXIgYT1hLnNwbGl0KCIhIiksYj14Lmxlbmd0aCxjPWEucG9wKCksZD1hLmxlbmd0aCxjPXt1cmw6YyxvcmlnVXJsOmMscHJlZml4ZXM6YX0sZSxmLGc7Zm9yKGY9MDtmPGQ7ZisrKWc9YVtmXS5zcGxpdCgiPSIpLChlPXpbZy5zaGlmdCgpXSkmJihjPWUoYyxnKSk7Zm9yKGY9MDtmPGI7ZisrKWM9eFtmXShjKTtyZXR1cm4gY31mdW5jdGlvbiBnKGEsZSxmLGcsaSl7dmFyIGo9YihhKSxsPWouYXV0b0NhbGxiYWNrO2oudXJsLnNwbGl0KCIuIikucG9wKCkuc3BsaXQoIj8iKS5zaGlmdCgpLGouYnlwYXNzfHwoZSYmKGU9ZChlKT9lOmVbYV18fGVbZ118fGVbYS5zcGxpdCgiLyIpLnBvcCgpLnNwbGl0KCI/IilbMF1dfHxoKSxqLmluc3RlYWQ/ai5pbnN0ZWFkKGEsZSxmLGcsaSk6KHlbai51cmxdP2oubm9leGVjPSEwOnlbai51cmxdPTEsZi5sb2FkKGoudXJsLGouZm9yY2VDU1N8fCFqLmZvcmNlSlMmJiJjc3MiPT1qLnVybC5zcGxpdCgiLiIpLnBvcCgpLnNwbGl0KCI/Iikuc2hpZnQoKT8iYyI6YyxqLm5vZXhlYyxqLmF0dHJzLGoudGltZW91dCksKGQoZSl8fGQobCkpJiZmLmxvYWQoZnVuY3Rpb24oKXtrKCksZSYmZShqLm9yaWdVcmwsaSxnKSxsJiZsKGoub3JpZ1VybCxpLGcpLHlbai51cmxdPTJ9KSkpfWZ1bmN0aW9uIGkoYSxiKXtmdW5jdGlvbiBjKGEsYyl7aWYoYSl7aWYoZShhKSljfHwoaj1mdW5jdGlvbigpe3ZhciBhPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtrLmFwcGx5KHRoaXMsYSksbCgpfSksZyhhLGosYiwwLGgpO2Vsc2UgaWYoT2JqZWN0KGEpPT09YSlmb3IobiBpbiBtPWZ1bmN0aW9uKCl7dmFyIGI9MCxjO2ZvcihjIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShjKSYmYisrO3JldHVybiBifSgpLGEpYS5oYXNPd25Qcm9wZXJ0eShuKSYmKCFjJiYhLS1tJiYoZChqKT9qPWZ1bmN0aW9uKCl7dmFyIGE9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpO2suYXBwbHkodGhpcyxhKSxsKCl9Ompbbl09ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpO2EmJmEuYXBwbHkodGhpcyxiKSxsKCl9fShrW25dKSksZyhhW25dLGosYixuLGgpKX1lbHNlIWMmJmwoKX12YXIgaD0hIWEudGVzdCxpPWEubG9hZHx8YS5ib3RoLGo9YS5jYWxsYmFja3x8ZixrPWosbD1hLmNvbXBsZXRlfHxmLG0sbjtjKGg/YS55ZXA6YS5ub3BlLCEhaSksaSYmYyhpKX12YXIgaixsLG09dGhpcy55ZXBub3BlLmxvYWRlcjtpZihlKGEpKWcoYSwwLG0sMCk7ZWxzZSBpZih3KGEpKWZvcihqPTA7ajxhLmxlbmd0aDtqKyspbD1hW2pdLGUobCk/ZyhsLDAsbSwwKTp3KGwpP0IobCk6T2JqZWN0KGwpPT09bCYmaShsLG0pO2Vsc2UgT2JqZWN0KGEpPT09YSYmaShhLG0pfSxCLmFkZFByZWZpeD1mdW5jdGlvbihhLGIpe3pbYV09Yn0sQi5hZGRGaWx0ZXI9ZnVuY3Rpb24oYSl7eC5wdXNoKGEpfSxCLmVycm9yVGltZW91dD0xZTQsYi5yZWFkeVN0YXRlPT1udWxsJiZiLmFkZEV2ZW50TGlzdGVuZXImJihiLnJlYWR5U3RhdGU9ImxvYWRpbmciLGIuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQT1mdW5jdGlvbigpe2IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQSwwKSxiLnJlYWR5U3RhdGU9ImNvbXBsZXRlIn0sMCkpLGEueWVwbm9wZT1rKCksYS55ZXBub3BlLmV4ZWN1dGVTdGFjaz1oLGEueWVwbm9wZS5pbmplY3RKcz1mdW5jdGlvbihhLGMsZCxlLGksail7dmFyIGs9Yi5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxsLG8sZT1lfHxCLmVycm9yVGltZW91dDtrLnNyYz1hO2ZvcihvIGluIGQpay5zZXRBdHRyaWJ1dGUobyxkW29dKTtjPWo/aDpjfHxmLGsub25yZWFkeXN0YXRlY2hhbmdlPWsub25sb2FkPWZ1bmN0aW9uKCl7IWwmJmcoay5yZWFkeVN0YXRlKSYmKGw9MSxjKCksay5vbmxvYWQ9ay5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCl9LG0oZnVuY3Rpb24oKXtsfHwobD0xLGMoMSkpfSxlKSxpP2sub25sb2FkKCk6bi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShrLG4pfSxhLnllcG5vcGUuaW5qZWN0Q3NzPWZ1bmN0aW9uKGEsYyxkLGUsZyxpKXt2YXIgZT1iLmNyZWF0ZUVsZW1lbnQoImxpbmsiKSxqLGM9aT9oOmN8fGY7ZS5ocmVmPWEsZS5yZWw9InN0eWxlc2hlZXQiLGUudHlwZT0idGV4dC9jc3MiO2ZvcihqIGluIGQpZS5zZXRBdHRyaWJ1dGUoaixkW2pdKTtnfHwobi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLG4pLG0oYywwKSl9fSh0aGlzLGRvY3VtZW50KSxNb2Rlcm5penIubG9hZD1mdW5jdGlvbigpe3llcG5vcGUuYXBwbHkod2luZG93LFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKX07'></script>
<script id="fb_lib_hash_js" src='data:/text/plain;base64,LyoqCiAqIGhhc2guanMKICoKICogQ29weXJpZ2h0IChDKSAyMDEyIEVtbWFudWVsIEdhcmNpYQogKiBNSVQgTGljZW5zZWQKICoKICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBIYXNoLnB1c2hTdGF0ZSh0cnVlKTsKICoKICogSGFzaC5vbignL3BhZ2UvKFswLTldKykkJywKICoJe3llcDogZnVuY3Rpb24ocGF0aCwgcGFydHMpIHsgfSwgbm9wOiBmdW5jdGlvbigpIHsgfX0sCiAqCSdQYWdlICQxJyk7CiAqCiAqIEhhc2guZ28oJy9wYWdlLzEnKTsKICoqLwoKKGZ1bmN0aW9uKCkgewoKJ3VzZSBzdHJpY3QnOwoKdmFyIGhhc2hlcyA9IHt9LAoJcmVnZXhwID0ge30sCgloaXN0b3J5ID0gW10sCglmcmVxID0gMTAwLAoJbnVtID0gMCwKCXB1c2hTdGF0ZSA9IGZhbHNlLAoJdGltZXIgPSBudWxsLAoJY3VycmVudFVybCA9IG51bGwsCgoJZnJlZXplID0gZnVuY3Rpb24ob2JqKSB7CgkJaWYgKE9iamVjdC5mcmVlemUpIHJldHVybiBPYmplY3QuZnJlZXplKG9iaik7CgkJcmV0dXJuIG9iajsKCX0sCgoJZ2V0SGFzaFBhcnRzID0gZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCcjJyk7Cgl9LAoKCXN0YXJ0VGltZXIgPSBmdW5jdGlvbigpIHsKCQkKCQlpZiAoIXRpbWVyKQoJCQl0aW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgewoJCQkJaWYgKG51bT4wICYmIGN1cnJlbnRVcmwhPXdpbmRvdy5sb2NhdGlvbi5ocmVmKSB7CgkJCQkJY3VycmVudFVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwoJCQkJCXdpbmRvdy5IYXNoLmNoZWNrKCk7CgkJCQl9CgkJCX0sIGZyZXEpOwoKCX0sCgoJc3RvcFRpbWVyID0gZnVuY3Rpb24oKSB7CgoJCWlmICh0aW1lcikgewoJCQljbGVhckludGVydmFsKHRpbWVyKTsKCQkJdGltZXIgPSBudWxsOwoJCX0KCgl9OwoKd2luZG93Lkhhc2ggPSBmcmVlemUoewoKCQlwdXNoU3RhdGU6IGZ1bmN0aW9uKHllcykgewoKCQkJaWYgKHdpbmRvdy5oaXN0b3J5ICYmIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSkKCQkJCXB1c2hTdGF0ZSA9IHllczsKCgkJCXJldHVybiB0aGlzOwoJCX0sCgoJCWZyYWdtZW50OiBmdW5jdGlvbigpIHsKCQkJCgkJCXZhciBoYXNoID0gZ2V0SGFzaFBhcnRzKCk7CgkJCXJldHVybiAocHVzaFN0YXRlKSA/CgkJCQl3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyAoKGhhc2hbMV0pID8gJyMnICsgaGFzaFsxXSA6ICcnKQoJCQkJOiBoYXNoWzFdIHx8ICcnOwoKCQl9LAoJCQoJCWdldDogZnVuY3Rpb24ocGF0aCwgcGFyYW1zKSB7CgkJCQoJCQl2YXIgcCwgZnJhZ21lbnQgPSAnJywgcGFyYW1ldGVycyA9IFtdOwoKCQkJZm9yKHAgaW4gcGFyYW1zKSB7CgkJCQlpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkocCkpCgkJCQkJY29udGludWU7CgkJCQlwYXJhbWV0ZXJzLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KHApICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtc1twXSkpOwoJCQl9CgoJCQlpZiAocGFyYW1ldGVycy5sZW5ndGg+MCkKCQkJCXBhcmFtZXRlcnMgPSAnPycgKyBwYXJhbWV0ZXJzLmpvaW4oJyYnKTsKCQkKCQkJcmV0dXJuIChwdXNoU3RhdGUpID8gcGF0aCArIHBhcmFtZXRlcnMgOgoJCQkJZ2V0SGFzaFBhcnRzKClbMF0gKyAnIycgKyBwYXRoICsgcGFyYW1ldGVyczsKCgkJfSwKCgkJZ286IGZ1bmN0aW9uKGhhc2gsIHBhcmFtcykgewoKCQkJaWYgKHRoaXMuZnJhZ21lbnQoKSE9aGFzaCkgewoJCQkJdmFyIHRvID0gdGhpcy5nZXQoaGFzaCwgcGFyYW1zKTsKCgkJCQlpZiAocHVzaFN0YXRlKQoJCQkJCXdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShudWxsLCBkb2N1bWVudC50aXRsZSwgdG8pOwoJCQkJZWxzZQoJCQkJCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdG87CgkJCQl9CgkJCQoJCQlyZXR1cm4gdGhpczsKCQl9LAoKCQl1cGRhdGU6IGZ1bmN0aW9uICgpIHsKCQkJCgkJCWN1cnJlbnRVcmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjsKCQkJcmV0dXJuIHRoaXM7CgoJCX0sCgoJCW9uOiBmdW5jdGlvbihoYXNoLCBjYWxsYmFjaywgdGl0bGUpIHsKCgkJCWlmICghaGFzaGVzW2hhc2hdKQoJCQkJaGFzaGVzW2hhc2hdID0ge3RpdGxlOiB0aXRsZSwgbGlzdGVuZXJzOiBbXX07CgkJCQoJCQloYXNoZXNbaGFzaF0ubGlzdGVuZXJzLnB1c2goY2FsbGJhY2spOwoJCQludW0rKzsKCQkJc3RhcnRUaW1lcigpOwoKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCgkJY2hlY2s6IGZ1bmN0aW9uKCkgewoKCQkJdmFyIGksCgkJCQloYXNoLAoJCQkJcGFydHMsCgkJCQlmcmFnbWVudCA9IHRoaXMuZnJhZ21lbnQoKTsKCgoJCQlmb3IgKGhhc2ggaW4gaGFzaGVzKSB7CgkJCQlpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChoYXNoZXMsIGhhc2gpKQoJCQkJCWNvbnRpbnVlOwoKCQkJCWhhc2hlc1toYXNoXS5yZWdleHAgPSBoYXNoZXNbaGFzaF0ucmVnZXhwIHx8IG5ldyBSZWdFeHAoaGFzaCk7CgoJCQkJaWYgKChwYXJ0cyA9IGhhc2hlc1toYXNoXS5yZWdleHAuZXhlYyhmcmFnbWVudCkpKSB7CgkJCQkJaWYgKGhhc2hlc1toYXNoXS50aXRsZSkKCQkJCQkJZG9jdW1lbnQudGl0bGUgPSBoYXNoZXNbaGFzaF0udGl0bGU7CgoJCQkJCWZvciAoaSA9IDA7IGk8aGFzaGVzW2hhc2hdLmxpc3RlbmVycy5sZW5ndGg7IGkrKykKCQkJCQkJaWYgKGhhc2hlc1toYXNoXS5saXN0ZW5lcnNbaV0ueWVwKQoJCQkJCQkJaGFzaGVzW2hhc2hdLmxpc3RlbmVyc1tpXS55ZXAoZnJhZ21lbnQsIHBhcnRzKTsKCQkJCX0gZWxzZSB7CgkJCQkJZm9yIChpID0gMDsgaTxoYXNoZXNbaGFzaF0ubGlzdGVuZXJzLmxlbmd0aDsgaSsrKQoJCQkJCQlpZiAoaGFzaGVzW2hhc2hdLmxpc3RlbmVyc1tpXS5ub3ApCgkJCQkJCQloYXNoZXNbaGFzaF0ubGlzdGVuZXJzW2ldLm5vcChmcmFnbWVudCk7CgkJCQl9CgoJCQl9CgoJCQlyZXR1cm4gdGhpczsKCQl9Cn0pOwoKfSkoKTsK'></script>
<script id="fb_lib_turn_html4_js" src='data:/text/plain;base64,LyoqCiAqIHR1cm4uanMgNHRoIHJlbGVhc2UgSFRNTDQgdmVyc2lvbgogKiB0dXJuanMuY29tCiAqIHR1cm5qcy5jb20vbGljZW5zZS50eHQKICoKICogQ29weXJpZ2h0IChDKSAyMDEyIEVtbWFudWVsIEdhcmNpYQogKiBBbGwgcmlnaHRzIHJlc2VydmVkCiAqKi8KCihmdW5jdGlvbigkKSB7CgondXNlIHN0cmljdCc7Cgp2YXIgaGFzM2QsCgogIHZlbmRvciA9ICcnLAogIAogIHZlcnNpb24gPSAnNC4xLjAnLAoKICBpc1RvdWNoID0gZmFsc2UsCgogIG1vdXNlRXZlbnRzID0KICAgIHsKICAgICAgZG93bjogJ21vdXNlZG93bicsCiAgICAgIG1vdmU6ICdtb3VzZW1vdmUnLAogICAgICB1cDogJ21vdXNldXAnLAogICAgICBvdmVyOiAnbW91c2VvdmVyJywKICAgICAgb3V0OiAnbW91c2VvdXQnCiAgICB9LAoKICBjb3JuZXJzID0gewogICAgYmFja3dhcmQ6IFsnbCddLAogICAgZm9yd2FyZDogWydyJ10sCiAgICBhbGw6IFsnbCcsICdyJ10KICB9LAoKICAvLyBEaXNwbGF5IHZhbHVlcwoKICBkaXNwbGF5cyA9IFsnc2luZ2xlJywgJ2RvdWJsZSddLAoKICAvLyBEaXJlY3Rpb24gdmFsdWVzCgogIGRpcmVjdGlvbnMgPSBbJ2x0cicsICdydGwnXSwKCiAgLy8gRGVmYXVsdCBvcHRpb25zCgogIHR1cm5PcHRpb25zID0gewoKICAgIC8vIEVuYWJsZXMgaGFyZHdhcmUgYWNjZWxlcmF0aW9uCgogICAgYWNjZWxlcmF0aW9uOiB0cnVlLAoKICAgIC8vIERpc3BsYXkKCiAgICBkaXNwbGF5OiAnZG91YmxlJywKCiAgICAvLyBEdXJhdGlvbiBvZiB0cmFuc2l0aW9uIGluIG1pbGxpc2Vjb25kcwoKICAgIGR1cmF0aW9uOiA2MDAsCgogICAgLy8gRmlyc3QgcGFnZQoKICAgIHBhZ2U6IDEsCiAgICAKICAgIC8vIEVuYWJsZXMgZ3JhZGllbnRzCgogICAgZ3JhZGllbnRzOiB0cnVlLAoKICAgIC8vIEV2ZW50cwoKICAgIHdoZW46IG51bGwKICB9LAoKICBmbGlwT3B0aW9ucyA9IHsKCiAgICAvLyBFbmFibGVzIGhhcmR3YXJlIGFjY2VsZXJhdGlvbgoKICAgIGFjY2VsZXJhdGlvbjogdHJ1ZSwKICAgIAogICAgLy8gQ29ybmVycwogICAgLy8gYmFja3dhcmQ6IEFjdGl2YXRlcyBib3RoIHRsIGFuZCBibCBjb3JuZXJzCiAgICAvLyBmb3J3YXJkOiBBY3RpdmF0ZXMgYm90aCB0ciBhbmQgYnIgY29ybmVycwogICAgLy8gYWxsOiBBY3RpdmF0ZXMgYWxsIHRoZSBjb3JuZXJzCgogICAgY29ybmVyczogJ2ZvcndhcmQnLAogICAgCiAgICAvLyBTaXplIG9mIHRoZSBhY3RpdmUgem9uZSBvZiBlYWNoIGNvcm5lcgoKICAgIGNvcm5lclNpemU6IDEwMCwKCgogICAgLy8gRHVyYXRpb24gb2YgdHJhbnNpdGlvbiBpbiBtaWxsaXNlY29uZHMKCiAgICBkdXJhdGlvbjogNjAwLAogICAgCiAgICAvLyBFbmFibGVzIGdyYWRpZW50cwoKICAgIGdyYWRpZW50czogdHJ1ZQoKICB9LAoKICAvLyBOdW1iZXIgb2YgcGFnZXMgaW4gdGhlIERPTSwgbWluaW11bSB2YWx1ZTogNgoKICBwYWdlc0luRE9NID0gNiwKICAKCnR1cm5NZXRob2RzID0gewoKICAvLyBTaW5nbGV0b24gY29uc3RydWN0b3IKICAvLyAkKCcjc2VsZWN0b3InKS50dXJuKFtvcHRpb25zXSk7CgogIGluaXQ6IGZ1bmN0aW9uKG9wdHMpIHsKCiAgICBpZiAodGhpcy5sZW5ndGg+MSkKICAgICAgdGhyb3cgdHVybkVycm9yKCdUaGlzIHNlbGVjdG9yIGhhcyBtb3JlIHRoYW4gMSBlbGVtZW50Jyk7CiAgICAKICAgIC8vIERlZmluZSBjb25zdGFudHMKICAgIAogICAgdmVuZG9yID0gZ2V0UHJlZml4KCk7CgogICAgdmFyIGksIHBhZ2VOdW0gPSAwLCBkYXRhID0gdGhpcy5kYXRhKCksIGNoID0gdGhpcy5jaGlsZHJlbigpOwoKICAgIC8vIFNldCBpbml0aWFsIGNvbmZpZ3VyYXRpb24KCiAgICBvcHRzID0gJC5leHRlbmQoewogICAgICB3aWR0aDogdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0KCksCiAgICAgIGRpcmVjdGlvbjogdGhpcy5hdHRyKCdkaXInKSB8fCB0aGlzLmNzcygnZGlyZWN0aW9uJykgfHwgJ2x0cicKICAgIH0sIHR1cm5PcHRpb25zLCBvcHRzKTsKCiAgICBkYXRhLm9wdHMgPSBvcHRzOwogICAgZGF0YS5wYWdlT2JqcyA9IHt9OwogICAgZGF0YS5wYWdlcyA9IHt9OwogICAgZGF0YS5wYWdlV3JhcCA9IHt9OwogICAgZGF0YS5wYWdlUGxhY2UgPSB7fTsKICAgIGRhdGEucGFnZU12ID0gW107CiAgICBkYXRhLnpvb20gPSAxOwogICAgZGF0YS50b3RhbFBhZ2VzID0gb3B0cy5wYWdlcyB8fCAwOwogICAgZGF0YS5kb2NFdmVudHMgPSB7CiAgICAgIG1vdXNlU3RhcnQ6IGZ1bmN0aW9uKGUpIHsKICAgICAgICBmb3IgKHZhciBwYWdlIGluIGRhdGEucGFnZXMpCiAgICAgICAgICBpZiAoaGFzKHBhZ2UsIGRhdGEucGFnZXMpICYmCiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9ldmVudFN0YXJ0LmNhbGwoZGF0YS5wYWdlc1twYWdlXSwgZSk9PT1mYWxzZSkKICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0sCgogICAgICBtb3VzZU1vdmU6IGZ1bmN0aW9uKGUpIHsKICAgICAgICBmb3IgKHZhciBwYWdlIGluIGRhdGEucGFnZXMpCiAgICAgICAgICBpZiAoaGFzKHBhZ2UsIGRhdGEucGFnZXMpKQogICAgICAgICAgICBmbGlwTWV0aG9kcy5fZXZlbnRNb3ZlLmNhbGwoZGF0YS5wYWdlc1twYWdlXSwgZSk7CiAgICAgIH0sCgogICAgICBtb3VzZUVuZDogZnVuY3Rpb24oZSkgewogICAgICAgIGZvciAodmFyIHBhZ2UgaW4gZGF0YS5wYWdlcykKICAgICAgICAgIGlmIChoYXMocGFnZSwgZGF0YS5wYWdlcykpCiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9ldmVudEVuZC5jYWxsKGRhdGEucGFnZXNbcGFnZV0sIGUpOwogICAgICB9CiAgICB9OwoKICAgIC8vIEFkZCBldmVudCBsaXN0ZW5lcnMKCiAgICBpZiAob3B0cy53aGVuKQogICAgICBmb3IgKGkgaW4gb3B0cy53aGVuKQogICAgICAgIGlmIChoYXMoaSwgb3B0cy53aGVuKSkKICAgICAgICAgIHRoaXMuYmluZChpLCBvcHRzLndoZW5baV0pOwoKICAgIC8vIFNldCB0aGUgY3NzCgogICAgdGhpcy5jc3Moe3Bvc2l0aW9uOiAncmVsYXRpdmUnLCB3aWR0aDogb3B0cy53aWR0aCwgaGVpZ2h0OiBvcHRzLmhlaWdodH0pOwoKICAgIC8vIFNldCB0aGUgaW5pdGlhbCBkaXNwbGF5CgogICAgdGhpcy50dXJuKCdkaXNwbGF5Jywgb3B0cy5kaXNwbGF5KTsKCiAgICAvLyBTZXQgdGhlIGRpcmVjdGlvbgoKICAgIGlmIChvcHRzLmRpcmVjdGlvbiE9PScnKQogICAgICB0aGlzLnR1cm4oJ2RpcmVjdGlvbicsIG9wdHMuZGlyZWN0aW9uKTsKCgogICAgLy8gQWRkIHBhZ2VzIGZyb20gdGhlIERPTQoKICAgIGZvciAoaSA9IDA7IGk8Y2gubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCQoY2hbaV0pLmF0dHIoJ2lnbm9yZScpIT0nMScpIHsKICAgICAgICB0aGlzLnR1cm4oJ2FkZFBhZ2UnLCBjaFtpXSwgKytwYWdlTnVtKTsKICAgICAgfQogICAgfQoKICAgIC8vIEV2ZW50IGxpc3RlbmVycwoKICAgICQodGhpcykuYmluZChtb3VzZUV2ZW50cy5kb3duLCBkYXRhLmRvY0V2ZW50cy5tb3VzZVN0YXJ0KS4KICAgICAgYmluZCgnc3RhcnQnLCB0dXJuTWV0aG9kcy5fc3RhcnQpLgogICAgICBiaW5kKCdlbmQnLCB0dXJuTWV0aG9kcy5fZW5kKS4KICAgICAgYmluZCgncHJlc3NlZCcsIHR1cm5NZXRob2RzLl9wcmVzc2VkKS4KICAgICAgYmluZCgncmVsZWFzZWQnLCB0dXJuTWV0aG9kcy5fcmVsZWFzZWQpLgogICAgICBiaW5kKCdmbGlwJywgdHVybk1ldGhvZHMuX2ZsaXApOwoKICAgICQoZG9jdW1lbnQpLmJpbmQobW91c2VFdmVudHMubW92ZSwgZGF0YS5kb2NFdmVudHMubW91c2VNb3ZlKS4KICAgICAgYmluZChtb3VzZUV2ZW50cy51cCwgZGF0YS5kb2NFdmVudHMubW91c2VFbmQpOwoKICAgIC8vIFNldCB0aGUgaW5pdGlhbCBwYWdlCgogICAgdGhpcy50dXJuKCdwYWdlJywgb3B0cy5wYWdlKTsKCiAgICBkYXRhLmRvbmUgPSB0cnVlOwoKICAgIHJldHVybiB0aGlzOwogIH0sCgogIC8vIEFkZHMgYSBwYWdlIGZyb20gZXh0ZXJuYWwgZGF0YQoKICBhZGRQYWdlOiBmdW5jdGlvbihlbGVtZW50LCBwYWdlKSB7CgogICAgdmFyIGN1cnJlbnRQYWdlLAogICAgICBjbGFzc05hbWUsCiAgICAgIGluY1BhZ2VzID0gZmFsc2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgbGFzdFBhZ2UgPSBkYXRhLnRvdGFsUGFnZXMrMTsKCiAgICBpZiAoZGF0YS5kZXN0cm95aW5nKQogICAgICByZXR1cm4gZmFsc2U7CgogICAgLy8gUmVhZCB0aGUgcGFnZSBudW1iZXIgZnJvbSB0aGUgY2xhc3NOYW1lIG9mIGBlbGVtZW50YCAtIGZvcm1hdDogcFswLTldKwoKICAgIGlmICgoY3VycmVudFBhZ2UgPSAvXGJwKFswLTldKylcYi8uZXhlYygkKGVsZW1lbnQpLmF0dHIoJ2NsYXNzJykpKSkKICAgICAgcGFnZSA9IHBhcnNlSW50KGN1cnJlbnRQYWdlWzFdLCAxMCk7CgogICAgaWYgKHBhZ2UpIHsKICAgICAgCiAgICAgIGlmIChwYWdlPT1sYXN0UGFnZSkKICAgICAgICBpbmNQYWdlcyA9IHRydWU7CiAgICAgIGVsc2UgaWYgKHBhZ2U+bGFzdFBhZ2UpCiAgICAgICAgdGhyb3cgdHVybkVycm9yKCdQYWdlICInK3BhZ2UrJyIgY2Fubm90IGJlIGluc2VydGVkJyk7CgogICAgfSBlbHNlIHsKICAgICAgCiAgICAgIHBhZ2UgPSBsYXN0UGFnZTsKICAgICAgaW5jUGFnZXMgPSB0cnVlOwoKICAgIH0KCiAgICBpZiAocGFnZT49MSAmJiBwYWdlPD1sYXN0UGFnZSkgewoKICAgICAgaWYgKGRhdGEuZGlzcGxheT09J2RvdWJsZScpCiAgICAgICAgY2xhc3NOYW1lID0gKHBhZ2UlMikgPyAnIG9kZCcgOiAnIGV2ZW4nOwogICAgICBlbHNlCiAgICAgICAgY2xhc3NOYW1lID0gJyc7CgogICAgICAvLyBTdG9wIGFuaW1hdGlvbnMKICAgICAgaWYgKGRhdGEuZG9uZSkKICAgICAgICB0aGlzLnR1cm4oJ3N0b3AnKTsKCiAgICAgIC8vIE1vdmUgcGFnZXMgaWYgaXQncyBuZWNlc3NhcnkKICAgICAgaWYgKHBhZ2UgaW4gZGF0YS5wYWdlT2JqcykKICAgICAgICB0dXJuTWV0aG9kcy5fbW92ZVBhZ2VzLmNhbGwodGhpcywgcGFnZSwgMSk7CgogICAgICAvLyBJbmNyZWFzZSB0aGUgbnVtYmVyIG9mIHBhZ2VzCiAgICAgIGlmIChpbmNQYWdlcykKICAgICAgICBkYXRhLnRvdGFsUGFnZXMgPSBsYXN0UGFnZTsKCiAgICAgIC8vIEFkZCBlbGVtZW50CiAgICAgIGRhdGEucGFnZU9ianNbcGFnZV0gPSAkKGVsZW1lbnQpLgogICAgICAgIGNzcyh7J2Zsb2F0JzogJ2xlZnQnfSkuCiAgICAgICAgYWRkQ2xhc3MoJ3BhZ2UgcCcgKyBwYWdlICsgY2xhc3NOYW1lKTsKCiAgICAgIC8vIEFkZCBwYWdlCiAgICAgIHR1cm5NZXRob2RzLl9hZGRQYWdlLmNhbGwodGhpcywgcGFnZSk7CgoKICAgICAgLy8gVXBkYXRlIHZpZXcKICAgICAgaWYgKGRhdGEuZG9uZSkKICAgICAgICB0aGlzLnR1cm4oJ3VwZGF0ZScpOwoKCiAgICAgIC8vIFJlbW92ZSBwYWdlcyBvdXQgb2YgcmFuZ2UKICAgICAgdHVybk1ldGhvZHMuX3JlbW92ZUZyb21ET00uY2FsbCh0aGlzKTsKICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9LAoKICAvLyBBZGRzIGEgcGFnZQoKICBfYWRkUGFnZTogZnVuY3Rpb24ocGFnZSkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBlbGVtZW50ID0gZGF0YS5wYWdlT2Jqc1twYWdlXTsKCiAgICBpZiAoZWxlbWVudCkKICAgICAgaWYgKHR1cm5NZXRob2RzLl9uZWNlc3NQYWdlLmNhbGwodGhpcywgcGFnZSkpIHsKCiAgICAgICAgaWYgKCFkYXRhLnBhZ2VXcmFwW3BhZ2VdKSB7CgogICAgICAgICAgdmFyIHByb3AgPSB0dXJuTWV0aG9kcy5fcGFnZVNpemUuY2FsbCh0aGlzLCBwYWdlLCB0cnVlKTsKCiAgICAgICAgICBlbGVtZW50LmNzcyh7d2lkdGg6IHByb3Aud2lkdGgsIGhlaWdodDogcHJvcC5oZWlnaHR9KTsKCiAgICAgICAgICAvLyBQbGFjZQogICAgICAgICAgZGF0YS5wYWdlUGxhY2VbcGFnZV0gPSBwYWdlOwoKICAgICAgICAgIC8vIFdyYXBwZXIKICAgICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0gPSAkKCc8ZGl2Lz4nLAogICAgICAgICAgICB7J2NsYXNzJzogJ3R1cm4tcGFnZS13cmFwcGVyJywKICAgICAgICAgICAgICBwYWdlOiBwYWdlLAogICAgICAgICAgICAgIGNzczoge3Bvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ319KS4KICAgICAgICAgICAgY3NzKHByb3ApOwoKICAgICAgICAgIC8vIEFwcGVuZCB0byB0aGlzCiAgICAgICAgICB0aGlzLmFwcGVuZChkYXRhLnBhZ2VXcmFwW3BhZ2VdKTsKCiAgICAgICAgICAvLyBNb3ZlIGVsZW1lbnQgdG8gd3JhcHBlcgogICAgICAgICAgZGF0YS5wYWdlV3JhcFtwYWdlXS5wcmVwZW5kKGRhdGEucGFnZU9ianNbcGFnZV0pOwoKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBwYWdlIGlzIGluIHRoZSBjdXJyZW50IHZpZXcsIGNyZWF0ZSB0aGUgZmxpcCBlZmZlY3QKICAgICAgICBpZiAoIXBhZ2UgfHwgdHVybk1ldGhvZHMuX3NldFBhZ2VMb2MuY2FsbCh0aGlzLCBwYWdlKT09MSkKICAgICAgICAgIHR1cm5NZXRob2RzLl9tYWtlRmxpcC5jYWxsKHRoaXMsIHBhZ2UpOwogICAgICAgIAogICAgICB9IGVsc2UgewoKICAgICAgICAvLyBQbGFjZQogICAgICAgIGRhdGEucGFnZVBsYWNlW3BhZ2VdID0gMDsKCiAgICAgICAgLy8gUmVtb3ZlIGVsZW1lbnQgZnJvbSB0aGUgRE9NCiAgICAgICAgaWYgKGRhdGEucGFnZU9ianNbcGFnZV0pCiAgICAgICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdLnJlbW92ZSgpOwoKICAgICAgfQoKICB9LAoKICAvLyBDaGVja3MgaWYgYSBwYWdlIGlzIGluIG1lbW9yeQogIAogIGhhc1BhZ2U6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICByZXR1cm4gaGFzKHBhZ2UsIHRoaXMuZGF0YSgpLnBhZ2VPYmpzKTsKICAKICB9LAoKICAvLyBDZW50ZXJzIHRoZSBmbGlwYm9vawoKICBjZW50ZXI6IGZ1bmN0aW9uKHBhZ2UpIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgc2l6ZSA9ICQodGhpcykudHVybignc2l6ZScpLAogICAgICBsZWZ0ID0gc2l6ZS53aWR0aC8oZGF0YS56b29tKjIpIC1zaXplLndpZHRoLzI7CgogICAgaWYgKGRhdGEuZGlzcGxheT09J2RvdWJsZScpIHsKICAgICAgdmFyIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnLCBwYWdlIHx8IGRhdGEudHBhZ2UgfHwgZGF0YS5wYWdlKTsKCiAgICAgIGlmIChkYXRhLmRpcmVjdGlvbj09J2x0cicpIHsKICAgICAgICBpZiAoIXZpZXdbMF0pCiAgICAgICAgICBsZWZ0IC09IHNpemUud2lkdGgvNDsKICAgICAgICBlbHNlIGlmICghdmlld1sxXSkKICAgICAgICAgIGxlZnQgKz0gc2l6ZS53aWR0aC80OwogICAgICB9IGVsc2UgewogICAgICAgIGlmICghdmlld1swXSkKICAgICAgICAgIGxlZnQgKz0gc2l6ZS53aWR0aC80OwogICAgICAgIGVsc2UgaWYgKCF2aWV3WzFdKQogICAgICAgICAgbGVmdCAtPSBzaXplLndpZHRoLzQ7CiAgICAgIH0KICAgIH0KCiAgICAkKHRoaXMpLmNzcyh7bWFyZ2luTGVmdDogbGVmdH0pOwoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBEZXN0cm95cyB0aGUgZmxpcGJvb2sKCiAgZGVzdHJveTogZnVuY3Rpb24gKCkgewoKICAgIHZhciBwYWdlLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgZGF0YS5kZXN0cm95aW5nID0gdHJ1ZTsKCiAgICAkKHRoaXMpLnVuYmluZChtb3VzZUV2ZW50cy5kb3duKQogICAgICAudW5iaW5kKCdlbmQnKQogICAgICAudW5iaW5kKCdmaXJzdCcpCiAgICAgIC51bmJpbmQoJ2ZsaXAnKQogICAgICAudW5iaW5kKCdsYXN0JykKICAgICAgLnVuYmluZCgncHJlc3NlZCcpCiAgICAgIC51bmJpbmQoJ3JlbGVhc2VkJykKICAgICAgLnVuYmluZCgnc3RhcnQnKQogICAgICAudW5iaW5kKCd0dXJuaW5nJykKICAgICAgLnVuYmluZCgndHVybmVkJykKICAgICAgLnVuYmluZCgnem9vbWluZycpOwoKICAgICQoZG9jdW1lbnQpLnVuYmluZChtb3VzZUV2ZW50cy5tb3ZlLCBkYXRhLmRvY0V2ZW50cy5tb3VzZU1vdmUpLgogICAgICB1bmJpbmQobW91c2VFdmVudHMudXAsIGRhdGEuZG9jRXZlbnRzLm1vdXNlRW5kKTsKICAgIAogICAgd2hpbGUgKGRhdGEudG90YWxQYWdlcyE9PTApIHsKICAgICAgdGhpcy50dXJuKCdyZW1vdmVQYWdlJywgZGF0YS50b3RhbFBhZ2VzKTsKICAgIH0KCiAgICBpZiAoZGF0YS5mcGFyZW50KQogICAgICBkYXRhLmZwYXJlbnQucmVtb3ZlKCk7CgogICAgaWYgKGRhdGEuc2hhZG93KQogICAgICBkYXRhLnNoYWRvdy5yZW1vdmUoKTsKCiAgICB0aGlzLnJlbW92ZURhdGEoKTsKICAgIGRhdGEgPSBudWxsOwoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBDaGVja3MgaWYgdGhpcyBlbGVtZW50IGlzIGEgZmxpcGJvb2sKCiAgaXM6IGZ1bmN0aW9uKCkgewoKICAgIHJldHVybiB0eXBlb2YodGhpcy5kYXRhKCkucGFnZXMpPT0nb2JqZWN0JzsKCiAgfSwKCiAgLy8gU2V0cyBhbmQgZ2V0cyB0aGUgem9vbSB2YWx1ZQoKICB6b29tOiBmdW5jdGlvbihuZXdab29tKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKHR5cGVvZihuZXdab29tKT09J251bWJlcicpIHsKCiAgICAgIGlmIChuZXdab29tPDAuMDAxIHx8IG5ld1pvb20+MTAwKQogICAgICAgIHRocm93IHR1cm5FcnJvcihuZXdab29tKyAnIGlzIG5vdCBhIHZhbHVlIGZvciB6b29tJyk7CiAgICAKICAgICAgdmFyIGV2ZW50ID0gJC5FdmVudCgnem9vbWluZycpOwogICAgICB0aGlzLnRyaWdnZXIoZXZlbnQsIFtuZXdab29tLCBkYXRhLnpvb21dKTsKCiAgICAgIGlmIChldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgCiAgICAgIHZhciBzaXplID0gJCh0aGlzKS50dXJuKCdzaXplJyksCiAgICAgICAgaXogPSAxL2RhdGEuem9vbSwKICAgICAgICBuZXdXaWR0aCA9IE1hdGgucm91bmQoc2l6ZS53aWR0aCAqIGl6ICogbmV3Wm9vbSksCiAgICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5yb3VuZChzaXplLmhlaWdodCAqIGl6ICogbmV3Wm9vbSk7CiAgICAKICAgICAgZGF0YS56b29tID0gbmV3Wm9vbTsKCiAgICAgICQodGhpcykudHVybignc3RvcCcpLgogICAgICAgIHR1cm4oJ3NpemUnLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KS4KICAgICAgICBjc3Moe21hcmdpblRvcDogc2l6ZS5oZWlnaHQgKiBpeiAvIDIgLSBuZXdIZWlnaHQgLyAyfSk7CgogICAgICBpZiAoZGF0YS5vcHRzLmF1dG9DZW50ZXIpCiAgICAgICAgdGhpcy50dXJuKCdjZW50ZXInKTsKICAgICAgZWxzZQogICAgICAgICQodGhpcykuY3NzKHttYXJnaW5MZWZ0OiBzaXplLndpZHRoICogaXogLyAyIC0gbmV3V2lkdGggLyAyfSk7CiAgICAgIAogICAgICB0dXJuTWV0aG9kcy5fdXBkYXRlU2hhZG93LmNhbGwodGhpcyk7CiAgCiAgICAgIHJldHVybiB0aGlzOwoKICAgIH0gZWxzZQogICAgICByZXR1cm4gZGF0YS56b29tOwoKICB9LAoKICAvLyBHZXRzIHRoZSBzaXplIG9mIGEgcGFnZQoKICBfcGFnZVNpemU6IGZ1bmN0aW9uKHBhZ2UsIHBvc2l0aW9uKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgcHJvcCA9IHt9OwoKICAgIGlmIChkYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CgogICAgICBwcm9wLndpZHRoID0gdGhpcy53aWR0aCgpOwogICAgICBwcm9wLmhlaWdodCA9IHRoaXMuaGVpZ2h0KCk7CgogICAgICBpZiAocG9zaXRpb24pIHsKICAgICAgICBwcm9wLnRvcCA9IDA7CiAgICAgICAgcHJvcC5sZWZ0ID0gMDsKICAgICAgICBwcm9wLnJpZ2h0ID0gJ2F1dG8nOwogICAgICB9CgogICAgfSBlbHNlIHsKCiAgICAgIHZhciBwYWdlV2lkdGggPSB0aGlzLndpZHRoKCkvMiwKICAgICAgICBwYWdlSGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTsKCiAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW3BhZ2VdLmhhc0NsYXNzKCdvd24tc2l6ZScpKSB7CiAgICAgICAgcHJvcC53aWR0aCA9IGRhdGEucGFnZU9ianNbcGFnZV0ud2lkdGgoKTsKICAgICAgICBwcm9wLmhlaWdodCA9IGRhdGEucGFnZU9ianNbcGFnZV0uaGVpZ2h0KCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcHJvcC53aWR0aCA9IHBhZ2VXaWR0aDsKICAgICAgICBwcm9wLmhlaWdodCA9IHBhZ2VIZWlnaHQ7CiAgICAgIH0KCiAgICAgIGlmIChwb3NpdGlvbikgewogICAgICAgIHZhciBvZGQgPSBwYWdlJTI7CiAgICAgICAgcHJvcC50b3AgPSAocGFnZUhlaWdodC1wcm9wLmhlaWdodCkvMjsKCiAgICAgICAgaWYgKGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgewogICAgICAgICAgCiAgICAgICAgICBwcm9wWyhvZGQpID8gJ3JpZ2h0JyA6ICdsZWZ0J10gPSBwYWdlV2lkdGgtcHJvcC53aWR0aDsKICAgICAgICAgIHByb3BbKG9kZCkgPyAnbGVmdCcgOiAncmlnaHQnXSA9ICdhdXRvJzsKCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIAogICAgICAgICAgcHJvcFsob2RkKSA/ICdsZWZ0JyA6ICdyaWdodCddID0gcGFnZVdpZHRoLXByb3Aud2lkdGg7CiAgICAgICAgICBwcm9wWyhvZGQpID8gJ3JpZ2h0JyA6ICdsZWZ0J10gPSAnYXV0byc7CgogICAgICAgIH0KCiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gcHJvcDsKCiAgfSwKCiAgLy8gUHJlcGFyZXMgdGhlIGZsaXAgZWZmZWN0IGZvciBhIHBhZ2UKCiAgX21ha2VGbGlwOiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoIWRhdGEucGFnZXNbcGFnZV0gJiYgZGF0YS5wYWdlUGxhY2VbcGFnZV09PXBhZ2UpIHsKICAgICAgdmFyIGNvcm5lciwKICAgICAgICBzaW5nbGUgPSBkYXRhLmRpc3BsYXk9PSdzaW5nbGUnLAogICAgICAgIG9kZCA9IHBhZ2UlMjsKCiAgICAgIGRhdGEucGFnZXNbcGFnZV0gPSBkYXRhLnBhZ2VPYmpzW3BhZ2VdLgogICAgICAgIGNzcyh0dXJuTWV0aG9kcy5fcGFnZVNpemUuY2FsbCh0aGlzLCBwYWdlKSkuCiAgICAgICAgZmxpcCh7cGFnZTogcGFnZSwKICAgICAgICAgIG5leHQ6IChvZGQgfHwgc2luZ2xlKSA/IHBhZ2UrMSA6IHBhZ2UtMSwKICAgICAgICAgIHR1cm46IHRoaXMsCiAgICAgICAgICBkdXJhdGlvbjogZGF0YS5vcHRzLmR1cmF0aW9uLAogICAgICAgICAgYWNjZWxlcmF0aW9uIDogZGF0YS5vcHRzLmFjY2VsZXJhdGlvbiwKICAgICAgICAgIGdyYWRpZW50czogZGF0YS5vcHRzLmdyYWRpZW50cwogICAgICAgICAgfSkuCiAgICAgICAgICBmbGlwKCdkaXNhYmxlJywgZGF0YS5kaXNhYmxlZCk7CiAgICB9CgogICAgcmV0dXJuIGRhdGEucGFnZXNbcGFnZV07CiAgfSwKCiAgLy8gTWFrZXMgcGFnZXMgd2l0aGluIGEgcmFuZ2UKCiAgX21ha2VSYW5nZTogZnVuY3Rpb24oKSB7CgogICAgdmFyIHBhZ2UsIHJhbmdlLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKGRhdGEudG90YWxQYWdlczwxKQogICAgICByZXR1cm47CgogICAgcmFuZ2UgPSB0aGlzLnR1cm4oJ3JhbmdlJyk7CgogICAgZm9yIChwYWdlID0gcmFuZ2VbMF07IHBhZ2U8PXJhbmdlWzFdOyBwYWdlKyspCiAgICAgIHR1cm5NZXRob2RzLl9hZGRQYWdlLmNhbGwodGhpcywgcGFnZSk7CgogIH0sCgogIC8vIFJldHVybnMgYSByYW5nZSBvZiBwYWdlcyB0aGF0IHNob3VsZCBiZSBpbiB0aGUgRE9NCiAgLy8gRXhhbXBsZToKICAvLyAtIHBhZ2UgaW4gdGhlIGN1cnJlbnQgdmlldywgcmV0dXJuIHRydWUKICAvLyAqIHBhZ2UgaXMgaW4gdGhlIHJhbmdlLCByZXR1cm4gdHJ1ZQogIC8vIE90aGVyd2lzZSwgcmV0dXJuIGZhbHNlCiAgLy8KICAvLyAxIDItMyA0LTUgNi03IDgtOSAxMC0xMSAxMi0xMwogIC8vICAgKiogICoqICAtLSAgICoqICAqKgoKICByYW5nZTogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciByZW1haW5pbmdQYWdlcywgbGVmdCwgcmlnaHQsIHZpZXcsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCgogICAgICBwYWdlID0gcGFnZSB8fCBkYXRhLnRwYWdlIHx8IGRhdGEucGFnZSB8fCAxOwogICAgICB2aWV3ID0gdHVybk1ldGhvZHMuX3ZpZXcuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgIGlmIChwYWdlPDEgfHwgcGFnZT5kYXRhLnRvdGFsUGFnZXMpCiAgICAgICAgdGhyb3cgdHVybkVycm9yKCciJytwYWdlKyciIGlzIG5vdCBhIHBhZ2UgZm9yIHJhbmdlJyk7CiAgICAKICAgICAgdmlld1sxXSA9IHZpZXdbMV0gfHwgdmlld1swXTsKICAgICAgCiAgICAgIGlmICh2aWV3WzBdPj0xICYmIHZpZXdbMV08PWRhdGEudG90YWxQYWdlcykgewoKICAgICAgICByZW1haW5pbmdQYWdlcyA9IE1hdGguZmxvb3IoKHBhZ2VzSW5ET00tMikvMik7CgogICAgICAgIGlmIChkYXRhLnRvdGFsUGFnZXMtdmlld1sxXSA+IHZpZXdbMF0pIHsKICAgICAgICAgIGxlZnQgPSBNYXRoLm1pbih2aWV3WzBdLTEsIHJlbWFpbmluZ1BhZ2VzKTsKICAgICAgICAgIHJpZ2h0ID0gMipyZW1haW5pbmdQYWdlcy1sZWZ0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByaWdodCA9IE1hdGgubWluKGRhdGEudG90YWxQYWdlcy12aWV3WzFdLCByZW1haW5pbmdQYWdlcyk7CiAgICAgICAgICBsZWZ0ID0gMipyZW1haW5pbmdQYWdlcy1yaWdodDsKICAgICAgICB9CgogICAgICB9IGVsc2UgewogICAgICAgIGxlZnQgPSBwYWdlc0luRE9NLTE7CiAgICAgICAgcmlnaHQgPSBwYWdlc0luRE9NLTE7CiAgICAgIH0KCiAgICAgIHJldHVybiBbTWF0aC5tYXgoMSwgdmlld1swXS1sZWZ0KSwKICAgICAgICAgIE1hdGgubWluKGRhdGEudG90YWxQYWdlcywgdmlld1sxXStyaWdodCldOwoKICB9LAoKICAvLyBEZXRlY3RzIGlmIGEgcGFnZSBpcyB3aXRoaW4gdGhlIHJhbmdlIG9mIGBwYWdlc0luRE9NYCBmcm9tIHRoZSBjdXJyZW50IHZpZXcKCiAgX25lY2Vzc1BhZ2U6IGZ1bmN0aW9uKHBhZ2UpIHsKICAgIAogICAgaWYgKHBhZ2U9PT0wKQogICAgICByZXR1cm4gdHJ1ZTsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICByYW5nZSA9IHRoaXMudHVybigncmFuZ2UnKTsKCiAgICByZXR1cm4gZGF0YS5wYWdlT2Jqc1twYWdlXS5oYXNDbGFzcygnZml4ZWQnKSB8fAogICAgICAocGFnZT49cmFuZ2VbMF0gJiYgcGFnZTw9cmFuZ2VbMV0pOwogICAgCiAgfSwKCiAgLy8gUmVsZWFzZXMgbWVtb3J5IGJ5IHJlbW92aW5nIHBhZ2VzIGZyb20gdGhlIERPTQoKICBfcmVtb3ZlRnJvbURPTTogZnVuY3Rpb24oKSB7CgogICAgdmFyIHBhZ2UsIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VXcmFwKSAmJgogICAgICAgICF0dXJuTWV0aG9kcy5fbmVjZXNzUGFnZS5jYWxsKHRoaXMsIHBhZ2UpKQogICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlUGFnZUZyb21ET00uY2FsbCh0aGlzLCBwYWdlKTsKICAgIAogIH0sCgogIC8vIFJlbW92ZXMgYSBwYWdlIGZyb20gRE9NIGFuZCBpdHMgaW50ZXJuYWwgcmVmZXJlbmNlcwoKICBfcmVtb3ZlUGFnZUZyb21ET006IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKSB7CiAgICAgIHZhciBkZCA9IGRhdGEucGFnZXNbcGFnZV0uZGF0YSgpOwoKICAgICAgZmxpcE1ldGhvZHMuX21vdmVGb2xkaW5nUGFnZS5jYWxsKGRhdGEucGFnZXNbcGFnZV0sIGZhbHNlKTsKCiAgICAgIGlmIChkZC5mICYmIGRkLmYuZndyYXBwZXIpCiAgICAgICAgZGQuZi5md3JhcHBlci5yZW1vdmUoKTsKCiAgICAgIGRhdGEucGFnZXNbcGFnZV0ucmVtb3ZlRGF0YSgpOwogICAgICBkYXRhLnBhZ2VzW3BhZ2VdLnJlbW92ZSgpOwogICAgICBkZWxldGUgZGF0YS5wYWdlc1twYWdlXTsKICAgIH0KCiAgICBpZiAoZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgZGF0YS5wYWdlT2Jqc1twYWdlXS5yZW1vdmUoKTsKCiAgICBpZiAoZGF0YS5wYWdlV3JhcFtwYWdlXSkgewogICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLnJlbW92ZSgpOwogICAgICBkZWxldGUgZGF0YS5wYWdlV3JhcFtwYWdlXTsKICAgIH0KCiAgICBkZWxldGUgZGF0YS5wYWdlUGxhY2VbcGFnZV07CgogIH0sCgogIC8vIFJlbW92ZXMgYSBwYWdlCgogIHJlbW92ZVBhZ2U6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChwYWdlPDEgfHwgcGFnZT5kYXRhLnRvdGFsUGFnZXMpCiAgICAgIHRocm93IHR1cm5FcnJvcignVGhlIHBhZ2UgJysgcGFnZSArICcgZG9lc25cJ3QgZXhpc3QnKTsKICAgICAgCiAgICBpZiAoZGF0YS5wYWdlT2Jqc1twYWdlXSkgewoKICAgICAgLy8gU3RvcCBhbmltYXRpb25zCiAgICAgIHRoaXMudHVybignc3RvcCcpOwoKICAgICAgLy8gUmVtb3ZlIGBwYWdlYAogICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlUGFnZUZyb21ET00uY2FsbCh0aGlzLCBwYWdlKTsKICAgICAgZGVsZXRlIGRhdGEucGFnZU9ianNbcGFnZV07CgogICAgfQoKICAgIC8vIE1vdmUgdGhlIHBhZ2VzIGJlaGluZCBgcGFnZWAKICAgIHR1cm5NZXRob2RzLl9tb3ZlUGFnZXMuY2FsbCh0aGlzLCBwYWdlLCAtMSk7CgogICAgLy8gUmVzaXplIHRoZSBzaXplIG9mIHRoaXMgZmxpcGJvb2sKICAgIGRhdGEudG90YWxQYWdlcyA9IGRhdGEudG90YWxQYWdlcy0xOwoKICAgIC8vIENoZWNrIHRoZSBjdXJyZW50IHZpZXcKCiAgICBpZiAoZGF0YS5wYWdlPmRhdGEudG90YWxQYWdlcykKICAgICAgdGhpcy50dXJuKCdwYWdlJywgZGF0YS50b3RhbFBhZ2VzKTsKICAgIGVsc2UKICAgICAgdHVybk1ldGhvZHMuX21ha2VSYW5nZS5jYWxsKHRoaXMpOwoKICAgIHJldHVybiB0aGlzOwogIAogIH0sCgogIC8vIE1vdmVzIHBhZ2VzCgogIF9tb3ZlUGFnZXM6IGZ1bmN0aW9uKGZyb20sIGNoYW5nZSkgewoKICAgIHZhciBwYWdlLAogICAgICB0aGF0ID0gdGhpcywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBzaW5nbGUgPSBkYXRhLmRpc3BsYXk9PSdzaW5nbGUnLAogICAgICBtb3ZlID0gZnVuY3Rpb24ocGFnZSkgewoKICAgICAgICB2YXIgbmV4dCA9IHBhZ2UgKyBjaGFuZ2UsCiAgICAgICAgICBvZGQgPSBuZXh0JTIsCiAgICAgICAgICBjbGFzc05hbWUgPSAob2RkKSA/ICcgb2RkICcgOiAnIGV2ZW4gJzsKCiAgICAgICAgaWYgKGRhdGEucGFnZU9ianNbcGFnZV0pCiAgICAgICAgICBkYXRhLnBhZ2VPYmpzW25leHRdID0gZGF0YS5wYWdlT2Jqc1twYWdlXQogICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3AnICsgcGFnZSArICcgb2RkIGV2ZW4nKQogICAgICAgICAgICAuYWRkQ2xhc3MoJ3AnICsgbmV4dCArIGNsYXNzTmFtZSk7CgogICAgICAgIGlmIChkYXRhLnBhZ2VQbGFjZVtwYWdlXSAmJiBkYXRhLnBhZ2VXcmFwW3BhZ2VdKSB7CiAgICAgICAgICBkYXRhLnBhZ2VQbGFjZVtuZXh0XSA9IG5leHQ7CiAgICAgICAgCiAgICAgICAgaWYgKGRhdGEucGFnZU9ianNbbmV4dF0uaGFzQ2xhc3MoJ2ZpeGVkJykpCiAgICAgICAgICBkYXRhLnBhZ2VXcmFwW25leHRdID0gZGF0YS5wYWdlV3JhcFtwYWdlXQogICAgICAgICAgICAuYXR0cigncGFnZScsIG5leHQpOwogICAgICAgIGVsc2UKICAgICAgICAgIGRhdGEucGFnZVdyYXBbbmV4dF0gPSBkYXRhLnBhZ2VXcmFwW3BhZ2VdLgogICAgICAgICAgICBjc3ModHVybk1ldGhvZHMuX3BhZ2VTaXplLmNhbGwodGhhdCwgbmV4dCwgdHJ1ZSkpLgogICAgICAgICAgICBhdHRyKCdwYWdlJywgbmV4dCk7CiAgICAKICAgICAgICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKQogICAgICAgICAgICBkYXRhLnBhZ2VzW25leHRdID0gZGF0YS5wYWdlc1twYWdlXQogICAgICAgICAgICAgIC5mbGlwKCdvcHRpb25zJywgewogICAgICAgICAgICAgICAgcGFnZTogbmV4dCwKICAgICAgICAgICAgICAgIG5leHQ6IChzaW5nbGUgfHwgb2RkKSA/IG5leHQrMSA6IG5leHQtMSwKICAgICAgICAgICAgICAgIGNvcm5lcnM6IChzaW5nbGUpID8gJ2FsbCcgOgogICAgICAgICAgICAgICAgICAoKG9kZCkgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnKQogICAgICAgICAgICAgIH0pOwoKICAgICAgICAgIGlmIChjaGFuZ2UpIHsKICAgICAgICAgICAgZGVsZXRlIGRhdGEucGFnZXNbcGFnZV07CiAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBhZ2VQbGFjZVtwYWdlXTsKICAgICAgICAgICAgZGVsZXRlIGRhdGEucGFnZU9ianNbcGFnZV07CiAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBhZ2VXcmFwW3BhZ2VdOwogICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlT2Jqc1twYWdlXTsKICAgICAgICAgIH0KICAgICAgfQogICAgfTsKCiAgICBpZiAoY2hhbmdlPjApCiAgICAgIGZvciAocGFnZT1kYXRhLnRvdGFsUGFnZXM7IHBhZ2U+PWZyb207IHBhZ2UtLSkKICAgICAgICBtb3ZlKHBhZ2UpOwogICAgZWxzZQogICAgICBmb3IgKHBhZ2U9ZnJvbTsgcGFnZTw9ZGF0YS50b3RhbFBhZ2VzOyBwYWdlKyspCiAgICAgICAgbW92ZShwYWdlKTsKCiAgfSwKCiAgLy8gU2V0cyBvciBHZXRzIHRoZSBkaXNwbGF5IG1vZGUKCiAgZGlzcGxheTogZnVuY3Rpb24oZGlzcGxheSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIGN1cnJlbnREaXNwbGF5ID0gZGF0YS5kaXNwbGF5OwoKICAgIGlmIChkaXNwbGF5KSB7CgogICAgICBpZiAoJC5pbkFycmF5KGRpc3BsYXksIGRpc3BsYXlzKT09LTEpCiAgICAgICAgdGhyb3cgdHVybkVycm9yKCciJytkaXNwbGF5ICsgJyIgaXMgbm90IGEgdmFsdWUgZm9yIGRpc3BsYXknKTsKICAgICAgCiAgICAgIGlmIChkaXNwbGF5PT0nc2luZ2xlJykgewogICAgICAgIGlmICghZGF0YS5wYWdlT2Jqc1swXSkgewoKICAgICAgICAgIHRoaXMudHVybignc3RvcCcpLgogICAgICAgICAgICBjc3MoeydvdmVyZmxvdyc6ICdoaWRkZW4nfSk7CgogICAgICAgICAgZGF0YS5wYWdlT2Jqc1swXSA9ICQoJzxkaXYgLz4nLAogICAgICAgICAgICAgIHsnY2xhc3MnOiAncGFnZSBwLXRlbXBvcmFsJ30pLgogICAgICAgICAgICBjc3Moe3dpZHRoOiB0aGlzLndpZHRoKCksIGhlaWdodDogdGhpcy5oZWlnaHQoKX0pLgogICAgICAgICAgICBhcHBlbmRUbyh0aGlzKTsKCiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzWzBdKSB7CiAgICAgICAgICB0aGlzLnR1cm4oJ3N0b3AnKS5jc3MoeydvdmVyZmxvdyc6ICcnfSk7CiAgICAgICAgICBkYXRhLnBhZ2VPYmpzWzBdLnJlbW92ZSgpOwogICAgICAgICAgZGVsZXRlIGRhdGEucGFnZU9ianNbMF07CiAgICAgICAgfQogICAgICB9CgogICAgICBkYXRhLmRpc3BsYXkgPSBkaXNwbGF5OwoKICAgICAgaWYgKGN1cnJlbnREaXNwbGF5KSB7CiAgICAgICAgdmFyIHNpemUgPSB0aGlzLnR1cm4oJ3NpemUnKTsKICAgICAgICB0dXJuTWV0aG9kcy5fbW92ZVBhZ2VzLmNhbGwodGhpcywgMSwgMCk7CiAgICAgICAgdGhpcy50dXJuKCdzaXplJywgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpLgogICAgICAgICAgdHVybigndXBkYXRlJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzOwoKICAgIH0gZWxzZQogICAgICByZXR1cm4gY3VycmVudERpc3BsYXk7CiAgCiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBmbGlwYm9vawoKICBkaXJlY3Rpb246IGZ1bmN0aW9uKGRpcikgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKHR5cGVvZihkaXIpPT0ndW5kZWZpbmVkJykgewoKICAgICAgcmV0dXJuIGRhdGEuZGlyZWN0aW9uOwoKICAgIH0gZWxzZSB7CgogICAgICBkaXIgPSBkaXIudG9Mb3dlckNhc2UoKTsKCiAgICAgIGlmICgkLmluQXJyYXkoZGlyLCBkaXJlY3Rpb25zKT09LTEpCiAgICAgICAgdGhyb3cgdHVybkVycm9yKCciJyArIGRpciArICciIGlzIG5vdCBhIHZhbHVlIGZvciBkaXJlY3Rpb24nKTsKCiAgICAgIGlmIChkaXI9PSdydGwnKSB7CiAgICAgICAgJCh0aGlzKS5hdHRyKCdkaXInLCAnbHRyJykuCiAgICAgICAgICBjc3Moe2RpcmVjdGlvbjogJ2x0cid9KTsKICAgICAgfQoKICAgICAgZGF0YS5kaXJlY3Rpb24gPSBkaXI7CgogICAgICBpZiAoZGF0YS5kb25lKQogICAgICAgIHRoaXMudHVybignc2l6ZScsICQodGhpcykud2lkdGgoKSwgJCh0aGlzKS5oZWlnaHQoKSk7CgogICAgICByZXR1cm4gdGhpczsKICAgIH0KCiAgfSwKCiAgLy8gRGV0ZWN0cyBpZiB0aGUgcGFnZXMgYXJlIGJlaW5nIGFuaW1hdGVkCgogIGFuaW1hdGluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMuZGF0YSgpLnBhZ2VNdi5sZW5ndGg+MDsKCiAgfSwKCiAgLy8gRGlzYWJsZXMgYW5kIGVuYWJsZXMgdGhlIGVmZmVjdAoKICBkaXNhYmxlOiBmdW5jdGlvbihib29sKSB7CgogICAgdmFyIHBhZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpOwoKICAgICAgZGF0YS5kaXNhYmxlZCA9IGJvb2w9PT11bmRlZmluZWQgfHwgYm9vbD09PXRydWU7CgogICAgZm9yIChwYWdlIGluIGRhdGEucGFnZXMpCiAgICAgIGlmIChoYXMocGFnZSwgZGF0YS5wYWdlcykpCiAgICAgICAgZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdkaXNhYmxlJywgKGJvb2wpID8gJC5pbkFycmF5KHBhZ2UsIHZpZXcpIDogZmFsc2UpOwoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBEaXNhYmxlcyBhbmQgZW5hYmxlcyB0aGUgZWZmZWN0CgogIGRpc2FibGVkOiBmdW5jdGlvbihkaXNhYmxlKSB7CgogICAgaWYgKGRpc2FibGU9PT11bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIHRoaXMuZGF0YSgpLmRpc2FibGVkPT09dHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB0aGlzLnR1cm4oJ2Rpc2FibGUnLCBkaXNhYmxlKTsKICAgIH0KCiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgc2l6ZQoKICBzaXplOiBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7CgogICAgaWYgKHdpZHRoICYmIGhlaWdodCkgewoKICAgICAgdmFyIHBhZ2UsIHByb3AsCiAgICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICAgIHBhZ2VXaWR0aCA9IChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKSA/IHdpZHRoLzIgOiB3aWR0aDsKCiAgICAgIHRoaXMuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CgogICAgICBpZiAoZGF0YS5wYWdlT2Jqc1swXSkKICAgICAgICBkYXRhLnBhZ2VPYmpzWzBdLmNzcyh7d2lkdGg6IHBhZ2VXaWR0aCwgaGVpZ2h0OiBoZWlnaHR9KTsKICAgICAgCiAgICAgIGZvciAocGFnZSBpbiBkYXRhLnBhZ2VXcmFwKSB7CiAgICAgICAgaWYgKCFoYXMocGFnZSwgZGF0YS5wYWdlV3JhcCkpIGNvbnRpbnVlOwoKICAgICAgICBwcm9wID0gdHVybk1ldGhvZHMuX3BhZ2VTaXplLmNhbGwodGhpcywgcGFnZSwgdHJ1ZSk7CgogICAgICAgIGRhdGEucGFnZU9ianNbcGFnZV0uY3NzKHt3aWR0aDogcHJvcC53aWR0aCwgaGVpZ2h0OiBwcm9wLmhlaWdodH0pOwogICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKHByb3ApOwoKICAgICAgICBpZiAoZGF0YS5wYWdlc1twYWdlXSkKICAgICAgICAgIGRhdGEucGFnZXNbcGFnZV0uY3NzKHt3aWR0aDogcHJvcC53aWR0aCwgaGVpZ2h0OiBwcm9wLmhlaWdodH0pOwogICAgICB9CgogICAgICB0aGlzLnR1cm4oJ3Jlc2l6ZScpOwoKICAgICAgcmV0dXJuIHRoaXM7CgogICAgfSBlbHNlIHsKICAgICAgCiAgICAgIHJldHVybiB7d2lkdGg6IHRoaXMud2lkdGgoKSwgaGVpZ2h0OiB0aGlzLmhlaWdodCgpfTsKCiAgICB9CiAgfSwKCiAgLy8gUmVzaXplcyBlYWNoIHBhZ2UKCiAgcmVzaXplOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgcGFnZSwgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkYXRhLnBhZ2VzWzBdKSB7CiAgICAgIGRhdGEucGFnZVdyYXBbMF0uY3NzKHtsZWZ0OiAtdGhpcy53aWR0aCgpfSk7CiAgICAgIGRhdGEucGFnZXNbMF0uZmxpcCgncmVzaXplJywgdHJ1ZSk7CiAgICB9CgogICAgZm9yIChwYWdlID0gMTsgcGFnZSA8PSBkYXRhLnRvdGFsUGFnZXM7IHBhZ2UrKykKICAgICAgaWYgKGRhdGEucGFnZXNbcGFnZV0pCiAgICAgICAgZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdyZXNpemUnLCB0cnVlKTsKCgogIH0sCgogIC8vIFJlbW92ZXMgYW4gYW5pbWF0aW9uIGZyb20gdGhlIGNhY2hlCgogIF9yZW1vdmVNdjogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBpLCBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICAgIAogICAgZm9yIChpPTA7IGk8ZGF0YS5wYWdlTXYubGVuZ3RoOyBpKyspCiAgICAgIGlmIChkYXRhLnBhZ2VNdltpXT09cGFnZSkgewogICAgICAgIGRhdGEucGFnZU12LnNwbGljZShpLCAxKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQoKICAgIHJldHVybiBmYWxzZTsKCiAgfSwKCiAgLy8gQWRkcyBhbiBhbmltYXRpb24gdG8gdGhlIGNhY2hlCiAgCiAgX2FkZE12OiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlTXYuY2FsbCh0aGlzLCBwYWdlKTsKICAgIGRhdGEucGFnZU12LnB1c2gocGFnZSk7CgogIH0sCgogIC8vIEdldHMgaW5kZXhlcyBmb3IgYSB2aWV3CgogIF92aWV3OiBmdW5jdGlvbihwYWdlKSB7CiAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwogICAgCiAgICBwYWdlID0gcGFnZSB8fCBkYXRhLnBhZ2U7CgogICAgaWYgKGRhdGEuZGlzcGxheT09J2RvdWJsZScpCiAgICAgIHJldHVybiAocGFnZSUyKSA/IFtwYWdlLTEsIHBhZ2VdIDogW3BhZ2UsIHBhZ2UrMV07CiAgICBlbHNlCiAgICAgIHJldHVybiBbcGFnZV07CgogIH0sCgogIC8vIEdldHMgYSB2aWV3CgogIHZpZXc6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICB2aWV3ID0gdHVybk1ldGhvZHMuX3ZpZXcuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJykKICAgICAgcmV0dXJuIFsodmlld1swXT4wKSA/IHZpZXdbMF0gOiAwLAogICAgICAgICh2aWV3WzFdPD1kYXRhLnRvdGFsUGFnZXMpID8gdmlld1sxXSA6IDBdOwogICAgZWxzZQogICAgICByZXR1cm4gWyh2aWV3WzBdPjAgJiYgdmlld1swXTw9ZGF0YS50b3RhbFBhZ2VzKSA/IHZpZXdbMF0gOiAwXTsKCiAgfSwKCiAgLy8gU3RvcHMgYW5pbWF0aW9ucwoKICBzdG9wOiBmdW5jdGlvbihpZ25vcmUsIGFuaW1hdGUpIHsKCiAgICBpZiAodGhpcy50dXJuKCdhbmltYXRpbmcnKSkgewogICAgICB2YXIgaSwgb3B0cywgcGFnZSwKICAgICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgICAgcGFnZXMgPSBkYXRhLnBhZ2VNdjsKCiAgICAgIGRhdGEucGFnZU12ID0gW107CgogICAgICBpZiAoZGF0YS50cGFnZSkgewogICAgICAgIGRhdGEucGFnZSA9IGRhdGEudHBhZ2U7CiAgICAgICAgZGVsZXRlIGRhdGFbJ3RwYWdlJ107CiAgICAgIH0KCiAgICAgIGZvciAoaSA9IDA7IGk8cGFnZXMubGVuZ3RoOyBpKyspIHsKCiAgICAgICAgcGFnZSA9IGRhdGEucGFnZXNbcGFnZXNbaV1dOwogICAgICAgIG9wdHMgPSBwYWdlLmRhdGEoKS5mLm9wdHM7CgogICAgICAgIHBhZ2UuZmxpcCgnaGlkZUZvbGRlZFBhZ2UnLCBmYWxzZSk7CgogICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbChwYWdlLCBmYWxzZSk7CgogICAgICAgIGRhdGEucGFnZVBsYWNlW29wdHMubmV4dF0gPSBvcHRzLm5leHQ7CgogICAgICAgIGlmIChvcHRzLmZvcmNlKSB7CiAgICAgICAgICBvcHRzLm5leHQgPSAob3B0cy5wYWdlJTI9PT0wKSA/IG9wdHMucGFnZS0xIDogb3B0cy5wYWdlKzE7CiAgICAgICAgICBkZWxldGUgb3B0c1snZm9yY2UnXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICB0aGlzLnR1cm4oJ3VwZGF0ZScpOwoKICAgIHJldHVybiB0aGlzOwogIAogIH0sCgogIC8vIEdldHMgYW5kIHNldHMgdGhlIG51bWJlciBvZiBwYWdlcwoKICBwYWdlczogZnVuY3Rpb24ocGFnZXMpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChwYWdlcykgewogICAgICBpZiAocGFnZXM8ZGF0YS50b3RhbFBhZ2VzKSB7CgogICAgICAgIGZvciAodmFyIHBhZ2UgPSBwYWdlcysxOyBwYWdlPD1kYXRhLnRvdGFsUGFnZXM7IHBhZ2UrKykKICAgICAgICAgIHRoaXMudHVybigncmVtb3ZlUGFnZScsIHBhZ2UpOwoKICAgICAgICBpZiAodGhpcy50dXJuKCdwYWdlJyk+cGFnZXMpCiAgICAgICAgICB0aGlzLnR1cm4oJ3BhZ2UnLCBwYWdlcyk7CiAgICAgIH0KCiAgICAgIGRhdGEudG90YWxQYWdlcyA9IHBhZ2VzOwoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGRhdGEudG90YWxQYWdlczsKCiAgfSwKCiAgLy8gQ2hlY2tzIG1pc3NpbmcgcGFnZXMKCiAgX21pc3NpbmcgOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIHZhciBwLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHJhbmdlID0gdGhpcy50dXJuKCdyYW5nZScsIHBhZ2UpLAogICAgICBtaXNzaW5nID0gW107CgogICAgZm9yIChwID0gcmFuZ2VbMF07IHA8PXJhbmdlWzFdOyBwKyspIHsKICAgICAgaWYgKCFkYXRhLnBhZ2VPYmpzW3BdKQogICAgICAgIG1pc3NpbmcucHVzaChwKTsKICAgIH0KCiAgICBpZiAobWlzc2luZy5sZW5ndGg+MCkKICAgICAgdGhpcy50cmlnZ2VyKCdtaXNzaW5nJywgW21pc3NpbmddKTsKICAgIAogIH0sCgogIC8vIFNldHMgYSBwYWdlIHdpdGhvdXQgZWZmZWN0CgogIF9maXRQYWdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIHBhZ2UpOwogICAgCiAgICB0dXJuTWV0aG9kcy5fbWlzc2luZy5jYWxsKHRoaXMsIHBhZ2UpOwoKICAgIGlmICghZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgcmV0dXJuOwoKICAgIGRhdGEucGFnZSA9IHBhZ2U7CgogICAgdGhpcy50dXJuKCdzdG9wJyk7CiAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlRnJvbURPTS5jYWxsKHRoaXMpOwogICAgdHVybk1ldGhvZHMuX21ha2VSYW5nZS5jYWxsKHRoaXMpOwogICAgdHVybk1ldGhvZHMuX3VwZGF0ZVNoYWRvdy5jYWxsKHRoaXMpOwogICAgdGhpcy50cmlnZ2VyKCd0dXJuZWQnLCBbcGFnZSwgbmV3Vmlld10pOwoKICAgIGlmIChkYXRhLm9wdHMuYXV0b0NlbnRlcikKICAgICAgdGhpcy50dXJuKCdjZW50ZXInKTsKCiAgfSwKICAKICAvLyBUdXJucyB0byBhIHBhZ2UKCiAgX3R1cm5QYWdlOiBmdW5jdGlvbihwYWdlLCBmcm9tTW91c2VBY3Rpb24pIHsKCiAgICB2YXIgY3VycmVudCwgbmV4dCwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBwbGFjZSA9IGRhdGEucGFnZVBsYWNlW3BhZ2VdLAogICAgICB2aWV3ID0gdGhpcy50dXJuKCd2aWV3JyksCiAgICAgIG5ld1ZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnLCBwYWdlKTsKICAKICAgIGlmIChkYXRhLnBhZ2UhPXBhZ2UpIHsKCiAgICAgIHZhciBldmVudCA9ICQuRXZlbnQoJ3R1cm5pbmcnKTsKICAgICAgdGhpcy50cmlnZ2VyKGV2ZW50LCBbcGFnZSwgbmV3Vmlld10pOwoKICAgICAgaWYgKGV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKQogICAgICAgIHJldHVybjsKCiAgICAgIGlmICgkLmluQXJyYXkoMSwgbmV3VmlldykhPS0xKQogICAgICAgIHRoaXMudHJpZ2dlcignZmlyc3QnKTsKICAgICAgaWYgKCQuaW5BcnJheShkYXRhLnRvdGFsUGFnZXMsIG5ld1ZpZXcpIT0tMSkKICAgICAgICB0aGlzLnRyaWdnZXIoJ2xhc3QnKTsKCiAgICB9CgoKCiAgICBpZiAoZnJvbU1vdXNlQWN0aW9uKSB7CgogICAgICB0aGlzLnR1cm4oJ3N0b3AnLCBwbGFjZSk7CgogICAgfSBlbHNlIHsKCiAgICAgIHR1cm5NZXRob2RzLl9taXNzaW5nLmNhbGwodGhpcywgcGFnZSk7CiAgICAgIAogICAgICBpZiAoIWRhdGEucGFnZU9ianNbcGFnZV0pCiAgICAgICAgcmV0dXJuOwoKICAgICAgdGhpcy50dXJuKCdzdG9wJyk7CiAgICAgIGRhdGEucGFnZSA9IHBhZ2U7CiAgICB9CiAgICAKCiAgICB0dXJuTWV0aG9kcy5fbWFrZVJhbmdlLmNhbGwodGhpcyk7CgogICAgaWYgKGRhdGEuZGlzcGxheT09J3NpbmdsZScpIHsKICAgICAgY3VycmVudCA9IHZpZXdbMF07CiAgICAgIG5leHQgPSBuZXdWaWV3WzBdOwogICAgfSBlbHNlIGlmICh2aWV3WzFdICYmIHBhZ2U+dmlld1sxXSkgewogICAgICBjdXJyZW50ID0gdmlld1sxXTsKICAgICAgbmV4dCA9IG5ld1ZpZXdbMF07CiAgICB9IGVsc2UgaWYgKHZpZXdbMF0gJiYgcGFnZTx2aWV3WzBdKSB7CiAgICAgIGN1cnJlbnQgPSB2aWV3WzBdOwogICAgICBuZXh0ID0gbmV3Vmlld1sxXTsKICAgIH0KCiAgICBpZiAoZGF0YS5wYWdlc1tjdXJyZW50XSkgewoKICAgICAgdmFyIG9wdHMgPSBkYXRhLnBhZ2VzW2N1cnJlbnRdLmRhdGEoKS5mLm9wdHM7CiAgICAgIGRhdGEudHBhZ2UgPSBuZXh0OwogICAgICAKICAgICAgaWYgKG9wdHMubmV4dCE9bmV4dCkgewogICAgICAgIG9wdHMubmV4dCA9IG5leHQ7CiAgICAgICAgZGF0YS5wYWdlUGxhY2VbbmV4dF0gPSBvcHRzLnBhZ2U7CiAgICAgICAgb3B0cy5mb3JjZSA9IHRydWU7CiAgICAgIH0KCiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CgogICAgICAgIGlmIChkYXRhLmRpcmVjdGlvbj09J2x0cicpIHsKICAgICAgICAgIGRhdGEucGFnZXNbY3VycmVudF0uZmxpcCgndHVyblBhZ2UnLAogICAgICAgICAgICAobmV3Vmlld1swXSA+IHZpZXdbMF0pID8gJ3InIDogJ2wnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0YS5wYWdlc1tjdXJyZW50XS5mbGlwKCd0dXJuUGFnZScsCiAgICAgICAgICAgIChuZXdWaWV3WzBdID4gdmlld1swXSkgPyAnbCcgOiAncicpOwogICAgICAgIH0KCiAgICAgIH0gZWxzZSB7CiAgICAgICAgCiAgICAgICAgZGF0YS5wYWdlc1tjdXJyZW50XS5mbGlwKCd0dXJuUGFnZScpOwoKICAgICAgfQogICAgfQoKICB9LAoKICAvLyBHZXRzIGFuZCBzZXRzIGEgcGFnZQoKICBwYWdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgcGFnZSA9IHBhcnNlSW50KHBhZ2UsIDEwKTsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChwYWdlPjAgJiYgcGFnZTw9ZGF0YS50b3RhbFBhZ2VzKSB7CiAgICAgIGlmICghZGF0YS5kb25lIHx8ICQuaW5BcnJheShwYWdlLCB0aGlzLnR1cm4oJ3ZpZXcnKSkhPS0xKQogICAgICAgIHR1cm5NZXRob2RzLl9maXRQYWdlLmNhbGwodGhpcywgcGFnZSk7CiAgICAgIGVsc2UKICAgICAgICB0dXJuTWV0aG9kcy5fdHVyblBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKICAgIAogICAgICByZXR1cm4gdGhpczsKCiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGRhdGEucGFnZTsKICAKICB9LAoKICAvLyBUdXJucyB0byB0aGUgbmV4dCB2aWV3CgogIG5leHQ6IGZ1bmN0aW9uKCkgewoKICAgIHJldHVybiB0aGlzLnR1cm4oJ3BhZ2UnLAogICAgICB0dXJuTWV0aG9kcy5fdmlldy5jYWxsKHRoaXMsIHRoaXMuZGF0YSgpLnBhZ2UpLnBvcCgpICsgMSk7CiAgCiAgfSwKCiAgLy8gVHVybnMgdG8gdGhlIHByZXZpb3VzIHZpZXcKCiAgcHJldmlvdXM6IGZ1bmN0aW9uKCkgewogICAgCiAgICByZXR1cm4gdGhpcy50dXJuKCdwYWdlJywKICAgICAgdHVybk1ldGhvZHMuX3ZpZXcuY2FsbCh0aGlzLCB0aGlzLmRhdGEoKS5wYWdlKS5zaGlmdCgpIC0gMSk7CgogIH0sCgogIHBlZWw6IGZ1bmN0aW9uKGNvcm5lciwgYW5pbWF0ZSkgewogICAgCiAgICByZXR1cm4gdGhpczsKCiAgfSwKCiAgLy8gQWRkcyBhIG1vdGlvbiB0byB0aGUgaW50ZXJuYWwgbGlzdAogIC8vIFRoaXMgZXZlbnQgaXMgY2FsbGVkIGluIGNvbnRleHQgb2YgZmxpcAoKICBfYWRkTW90aW9uUGFnZTogZnVuY3Rpb24oKSB7CgogICAgdmFyIG9wdHMgPSAkKHRoaXMpLmRhdGEoKS5mLm9wdHMsCiAgICAgIHR1cm4gPSBvcHRzLnR1cm4sCiAgICAgIGRkID0gdHVybi5kYXRhKCk7CgogICAgdHVybk1ldGhvZHMuX2FkZE12LmNhbGwodHVybiwgb3B0cy5wYWdlKTsKICAgIGRkLnBhZ2VQbGFjZVtvcHRzLm5leHRdID0gb3B0cy5wYWdlOwogICAgdHVybi50dXJuKCd1cGRhdGUnKTsKCiAgfSwKCiAgLy8gVGhpcyBldmVudCBpcyBjYWxsZWQgaW4gY29udGV4dCBvZiBmbGlwCgogIF9zdGFydDogZnVuY3Rpb24oZSwgb3B0cywgY29ybmVyKSB7CgogICAgdmFyIGRhdGEgPSBvcHRzLnR1cm4uZGF0YSgpOwoKICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7CiAgICAgIHR1cm5NZXRob2RzLl91cGRhdGVTaGFkb3cuY2FsbChvcHRzLnR1cm4pOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGRhdGEuZGlzcGxheT09J3NpbmdsZScgJiYgY29ybmVyKSB7CgogICAgICBpZiAoKGNvcm5lcj09J2wnICYmIGRhdGEuZGlyZWN0aW9uPT0nbHRyJykKICAgICAgICB8fAogICAgICAgIChjb3JuZXI9PSdyJyAmJiBkYXRhLmRpcmVjdGlvbj09J3J0bCcpKQogICAgICB7CiAgICAgICAgCiAgICAgICAgb3B0cy5uZXh0ID0gKG9wdHMubmV4dDxvcHRzLnBhZ2UpID8gb3B0cy5uZXh0IDogb3B0cy5wYWdlLTE7CiAgICAgICAgb3B0cy5mb3JjZSA9IHRydWU7CgogICAgICB9IGVsc2UgewoKICAgICAgICBvcHRzLm5leHQgPSAob3B0cy5uZXh0Pm9wdHMucGFnZSkgPyBvcHRzLm5leHQgOiBvcHRzLnBhZ2UrMTsKCiAgICAgIH0KCiAgICB9CgogICAgdHVybk1ldGhvZHMuX2FkZE1vdGlvblBhZ2UuY2FsbChlLnRhcmdldCk7CiAgICB0dXJuTWV0aG9kcy5fdXBkYXRlU2hhZG93LmNhbGwob3B0cy50dXJuKTsKICB9LAoKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2VuZDogZnVuY3Rpb24oZSwgb3B0cywgdHVybmVkKSB7CgogICAgdmFyIHRoYXQgPSAkKGUudGFyZ2V0KSwKICAgICAgZGF0YSA9IHRoYXQuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBvcHRzLnR1cm4sCiAgICAgIGRkID0gdHVybi5kYXRhKCk7CgogICAgaWYgKHR1cm5lZCB8fCBkZC50cGFnZSkgewoKICAgICAgaWYgKGRkLnRwYWdlPT1vcHRzLm5leHQgfHwgZGQudHBhZ2U9PW9wdHMucGFnZSkgewogICAgICAgIGRlbGV0ZSBkZFsndHBhZ2UnXTsKICAgICAgICB0dXJuTWV0aG9kcy5fZml0UGFnZS5jYWxsKHR1cm4sIGRkLnRwYWdlIHx8IG9wdHMubmV4dCwgdHJ1ZSk7CiAgICAgIH0KCiAgICB9IGVsc2UgewoKICAgICAgdHVybk1ldGhvZHMuX3JlbW92ZU12LmNhbGwodHVybiwgb3B0cy5wYWdlKTsKICAgICAgdHVybk1ldGhvZHMuX3VwZGF0ZVNoYWRvdy5jYWxsKHR1cm4pOwogICAgICB0dXJuLnR1cm4oJ3VwZGF0ZScpOwoKICAgIH0KICAgIAogIH0sCiAgCiAgLy8gVGhpcyBldmVudCBpcyBjYWxsZWQgaW4gY29udGV4dCBvZiBmbGlwCgogIF9wcmVzc2VkOiBmdW5jdGlvbihlKSB7CgogICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKCiAgICB2YXIgcGFnZSwKICAgICAgZGF0YSA9ICQoZS50YXJnZXQpLmRhdGEoKS5mLAogICAgICBwYWdlcyA9IGRhdGEub3B0cy50dXJuLmRhdGEoKS5wYWdlczsKCiAgICBmb3IgKHBhZ2UgaW4gcGFnZXMpCiAgICAgIGlmIChwYWdlIT1kYXRhLm9wdHMucGFnZSkKICAgICAgICBwYWdlc1twYWdlXS5mbGlwKCdkaXNhYmxlJywgdHJ1ZSk7CgogICAgcmV0dXJuIGRhdGEudGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwoKICB9LAoKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX3JlbGVhc2VkOiBmdW5jdGlvbihlLCBwb2ludCkgewoKICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CgogICAgdmFyIG91dEFyZWEsCiAgICAgIHBhZ2UgPSAkKGUudGFyZ2V0KSwKICAgICAgZGF0YSA9IHBhZ2UuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKTsKICAgIAogICAgaWYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CiAgICAgIG91dEFyZWEgPSAocG9pbnQuY29ybmVyPT0ncicpID8KICAgICAgICBwb2ludC54PHBhZ2Uud2lkdGgoKS8yOgogICAgICAgIHBvaW50Lng+cGFnZS53aWR0aCgpLzI7CiAgICB9IGVsc2UgewogICAgICBvdXRBcmVhID0gcG9pbnQueDwwIHx8IHBvaW50Lng+cGFnZS53aWR0aCgpOwogICAgfQoKICAgIGlmICgobmV3IERhdGUoKSkuZ2V0VGltZSgpLWRhdGEudGltZTwyMDAgfHwgb3V0QXJlYSkgewoKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgdHVybk1ldGhvZHMuX3R1cm5QYWdlLmNhbGwoCiAgICAgICAgdHVybiwKICAgICAgICBkYXRhLm9wdHMubmV4dCwKICAgICAgICBmbGlwTWV0aG9kcy5fY29ybmVyQWN0aXZhdGVkLmNhbGwocGFnZSwgcG9pbnQsIDEpID09PSBmYWxzZQogICAgICApOwoKICAgIH0KCiAgICB0dXJuRGF0YS5tb3VzZUFjdGlvbiA9IGZhbHNlOwoKICB9LAoKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKICAKICBfZmxpcDogZnVuY3Rpb24oZSkgewoKICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CgogICAgdmFyIG9wdHMgPSAkKGUudGFyZ2V0KS5kYXRhKCkuZi5vcHRzOwoKICAgIG9wdHMudHVybi50cmlnZ2VyKCd0dXJuJywgW29wdHMubmV4dF0pOwoKICAgIGlmIChvcHRzLnR1cm4uZGF0YSgpLm9wdHMuYXV0b0NlbnRlcikKICAgICAgb3B0cy50dXJuLnR1cm4oJ2NlbnRlcicsIG9wdHMubmV4dCk7CgogIH0sCgogIC8vIENhbGN1bGF0ZSB0aGUgei1pbmRleCB2YWx1ZSBmb3IgcGFnZXMgZHVyaW5nIHRoZSBhbmltYXRpb24KCiAgY2FsY3VsYXRlWjogZnVuY3Rpb24obXYpIHsKCiAgICB2YXIgaSwgcGFnZSwgbmV4dFBhZ2UsIHBsYWNlUGFnZSwgZHBhZ2UsCiAgICAgIHRoYXQgPSB0aGlzLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKSwKICAgICAgY3VycmVudFBhZ2UgPSB2aWV3WzBdIHx8IHZpZXdbMV0sCiAgICAgIHIgPSB7cGFnZVo6IHt9LCBwYXJ0Wjoge30sIHBhZ2VWOiB7fX0sCgogICAgICBhZGRWaWV3ID0gZnVuY3Rpb24ocGFnZSkgewogICAgICAgIHZhciB2aWV3ID0gdGhhdC50dXJuKCd2aWV3JywgcGFnZSk7CiAgICAgICAgaWYgKHZpZXdbMF0pIHIucGFnZVZbdmlld1swXV0gPSB0cnVlOwogICAgICAgIGlmICh2aWV3WzFdKSByLnBhZ2VWW3ZpZXdbMV1dID0gdHJ1ZTsKICAgICAgfTsKICAgIAogICAgZm9yIChpID0gMDsgaTxtdi5sZW5ndGg7IGkrKykgewogICAgICBwYWdlID0gbXZbaV07CiAgICAgIG5leHRQYWdlID0gZGF0YS5wYWdlc1twYWdlXS5kYXRhKCkuZi5vcHRzLm5leHQ7CiAgICAgIHBsYWNlUGFnZSA9IGRhdGEucGFnZVBsYWNlW3BhZ2VdOwogICAgICBhZGRWaWV3KHBhZ2UpOwogICAgICBhZGRWaWV3KG5leHRQYWdlKTsKICAgICAgZHBhZ2UgPSAoZGF0YS5wYWdlUGxhY2VbbmV4dFBhZ2VdPT1uZXh0UGFnZSkgPyBuZXh0UGFnZSA6IHBhZ2U7CiAgICAgIHIucGFnZVpbZHBhZ2VdID0gZGF0YS50b3RhbFBhZ2VzIC0gTWF0aC5hYnMoY3VycmVudFBhZ2UtZHBhZ2UpOwogICAgICByLnBhcnRaW3BsYWNlUGFnZV0gPSBkYXRhLnRvdGFsUGFnZXMqMiArIE1hdGguYWJzKGN1cnJlbnRQYWdlLWRwYWdlKTsKICAgIH0KCiAgICByZXR1cm4gcjsKICB9LAoKICAvLyBVcGRhdGVzIHRoZSB6LWluZGV4IGFuZCBkaXNwbGF5IHByb3BlcnR5IG9mIGV2ZXJ5IHBhZ2UKCiAgdXBkYXRlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgcGFnZSwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkYXRhLnBhZ2VNdi5sZW5ndGggJiYgZGF0YS5wYWdlTXZbMF0hPT0wKSB7CgogICAgICAvLyBVcGRhdGUgbW90aW9uCgogICAgICB2YXIgcCwKICAgICAgICBmaXhlZCwKICAgICAgICBwb3MgPSB0aGlzLnR1cm4oJ2NhbGN1bGF0ZVonLCBkYXRhLnBhZ2VNdiksCiAgICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycsIGRhdGEudHBhZ2UpOwogICAgCiAgICAgIGZvciAocGFnZSBpbiBkYXRhLnBhZ2VXcmFwKSB7CgogICAgICAgIGlmICghaGFzKHBhZ2UsIGRhdGEucGFnZVdyYXApKQogICAgICAgICAgY29udGludWU7CgogICAgICAgIGZpeGVkID0gZGF0YS5wYWdlT2Jqc1twYWdlXS5oYXNDbGFzcygnZml4ZWQnKTsKCiAgICAgICAgZGF0YS5wYWdlV3JhcFtwYWdlXS5jc3MoewogICAgICAgICAgZGlzcGxheTogKHBvcy5wYWdlVltwYWdlXSB8fCBmaXhlZCkgPyAnJyA6ICdub25lJywKICAgICAgICAgICd6LWluZGV4JzogcG9zLnBhZ2VaW3BhZ2VdIHx8ICgoZml4ZWQpID8gLTEgOiAwKQogICAgICAgIH0pOwoKICAgICAgICBpZiAoKHAgPSBkYXRhLnBhZ2VzW3BhZ2VdKSkgewogICAgICAgICAgcC5mbGlwKCd6JywgcG9zLnBhcnRaW3BhZ2VdIHx8IG51bGwpOwoKICAgICAgICAgIGlmIChwb3MucGFnZVZbcGFnZV0pCiAgICAgICAgICAgIHAuZmxpcCgncmVzaXplJyk7CgogICAgICAgICAgaWYgKGRhdGEudHBhZ2UpCiAgICAgICAgICAgIHAuZmxpcCgnZGlzYWJsZScsIHRydWUpOyAvLyBkYXRhLmRpc2FibGVkIHx8IHBhZ2UhPWFwYWdlCiAgICAgICAgfQogICAgICB9CiAgCiAgICB9IGVsc2UgewoKICAgICAgLy8gVXBkYXRlIHN0YXRpYyBwYWdlcwoKICAgICAgZm9yIChwYWdlIGluIGRhdGEucGFnZVdyYXApIHsKCiAgICAgICAgaWYgKCFoYXMocGFnZSwgZGF0YS5wYWdlV3JhcCkpCiAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgdmFyIHBhZ2VMb2NhdGlvbiA9IHR1cm5NZXRob2RzLl9zZXRQYWdlTG9jLmNhbGwodGhpcywgcGFnZSk7CgogICAgICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKQogICAgICAgICAgZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdkaXNhYmxlJywKICAgICAgICAgICAgZGF0YS5kaXNhYmxlZCB8fCBwYWdlTG9jYXRpb24hPTEpLmZsaXAoJ3onLCBudWxsKTsKCiAgICAgIH0KICAgIH0KICB9LAoKICAvLyBVcGRhdGVzIHRoZSBwb3NpdGlvbiBhbmQgc2l6ZSBvZiB0aGUgZmxpcGJvb2sncyBzaGFkb3cKCiAgX3VwZGF0ZVNoYWRvdzogZnVuY3Rpb24oKSB7CiAgICAKICAgIHZhciB2aWV3LCB2aWV3Miwgc2hhZG93LAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHdpZHRoID0gdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodCgpLAogICAgICBwYWdlV2lkdGggPSAoZGF0YS5kaXNwbGF5PT0nc2luZ2xlJykgPyB3aWR0aCA6IHdpZHRoLzI7CgogICAgdmlldyA9IHRoaXMudHVybigndmlldycpOwoKICAgIGlmICghZGF0YS5zaGFkb3cpIHsKICAgICAgZGF0YS5zaGFkb3cgPSAkKCc8ZGl2IC8+JywKICAgICAgewogICAgICAgICdjbGFzcyc6ICdzaGFkb3cnLAogICAgICAgICdjc3MnOiBkaXZBdHQoMCwgMCwgMCkuY3NzCiAgICAgIH0pLgogICAgICBhcHBlbmRUbyh0aGlzKTsKICAgIH0KCiAgICBmb3IgKHZhciBpID0gMDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykgewogICAgICBpZiAoIXZpZXdbMF0gfHwgIXZpZXdbMV0pCiAgICAgICAgYnJlYWs7CiAgICAKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycsIGRhdGEucGFnZXNbZGF0YS5wYWdlTXZbaV1dLmRhdGEoKS5mLm9wdHMubmV4dCk7CiAgICAgIHZpZXcyID0gdGhpcy50dXJuKCd2aWV3JywgZGF0YS5wYWdlTXZbaV0pOwoKICAgICAgdmlld1swXSA9IHZpZXdbMF0gJiYgdmlldzJbMF07CiAgICAgIHZpZXdbMV0gPSB2aWV3WzFdICYmIHZpZXcyWzFdOwogICAgfQoKICAgIGlmICghdmlld1swXSkgc2hhZG93ID0gKGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPyAxIDogMjsKICAgIGVsc2UgaWYgKCF2aWV3WzFdKSBzaGFkb3cgPSAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSA/IDIgOiAxOwogICAgZWxzZSBzaGFkb3cgPSAzOwoKICAgIHN3aXRjaCAoc2hhZG93KSB7CiAgICAgIGNhc2UgMToKICAgICAgICBkYXRhLnNoYWRvdy5jc3MoewogICAgICAgICAgd2lkdGg6IHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogcGFnZVdpZHRoCiAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjoKICAgICAgICBkYXRhLnNoYWRvdy5jc3MoewogICAgICAgICAgd2lkdGg6IHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogMAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDM6CiAgICAgICAgZGF0YS5zaGFkb3cuY3NzKHsKICAgICAgICAgIHdpZHRoOiB3aWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogMAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgfQoKICB9LAoKICAvLyBTZXRzIHRoZSB6LWluZGV4IGFuZCBkaXNwbGF5IHByb3BlcnR5IG9mIGEgcGFnZQogIC8vIEl0IGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgdmlldwoKICBfc2V0UGFnZUxvYzogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKTsKCiAgICBpZiAocGFnZT09dmlld1swXSB8fCBwYWdlPT12aWV3WzFdKSB7CiAgICAgIAogICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcyh7ekluZGV4OiBkYXRhLnRvdGFsUGFnZXMsIGRpc3BsYXk6ICcnfSk7CiAgICAgIHJldHVybiAxOwoKICAgIH0gZWxzZSBpZiAoKGRhdGEuZGlzcGxheT09J3NpbmdsZScgJiYgcGFnZT09dmlld1swXSsxKSB8fAogICAgICAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJyAmJiBwYWdlPT12aWV3WzBdLTIgfHwKICAgICAgcGFnZT09dmlld1sxXSsyKSkgewogICAgICAKICAgICAgZGF0YS5wYWdlV3JhcFtwYWdlXS5jc3Moe3pJbmRleDogZGF0YS50b3RhbFBhZ2VzLTEsIGRpc3BsYXk6ICcnfSk7CiAgICAgIHJldHVybiAyOwoKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcyh7ekluZGV4OiAwLAogICAgICAgIGRpc3BsYXk6IChkYXRhLnBhZ2VPYmpzW3BhZ2VdLmhhc0NsYXNzKCdmaXhlZCcpKSA/ICcnIDogJ25vbmUnfQogICAgICApOwoKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgb3B0aW9ucwoKICBvcHRpb25zOiBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAKICAgIGlmIChvcHRpb25zPT09dW5kZWZpbmVkKSB7CiAgICAgIAogICAgICByZXR1cm4gdGhpcy5kYXRhKCkub3B0czsKCiAgICB9IGVsc2UgewoKICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICAgIC8vIFNldCBuZXcgdmFsdWVzCgogICAgICAkLmV4dGVuZChkYXRhLm9wdHMsIG9wdGlvbnMpOwogICAgICAKICAgICAgLy8gU2V0IHBhZ2VzCgogICAgICBpZiAob3B0aW9ucy5wYWdlcykKICAgICAgICB0aGlzLnR1cm4oJ3BhZ2VzJywgb3B0aW9ucy5wYWdlcyk7CgogICAgICAvLyBTZXQgcGFnZQoKICAgICAgaWYgKG9wdGlvbnMucGFnZSkKICAgICAgICB0aGlzLnR1cm4oJ3BhZ2UnLCBvcHRpb25zLnBhZ2UpOwoKICAgICAgLy8gU2V0IGRpc3BsYXkKCiAgICAgIGlmIChvcHRpb25zLmRpc3BsYXkpCiAgICAgICAgdGhpcy50dXJuKCdkaXNwbGF5Jywgb3B0aW9ucy5kaXNwbGF5KTsKICAgICAgCiAgICAgIC8vIFNldCBkaXJlY3Rpb24KCiAgICAgIGlmIChvcHRpb25zLmRpcmVjdGlvbikKICAgICAgICB0aGlzLnR1cm4oJ2RpcmVjdGlvbicsIG9wdGlvbnMuZGlyZWN0aW9uKTsKCiAgICAgIC8vIFNldCBzaXplCgogICAgICBpZiAob3B0aW9ucy53aWR0aCAmJiBvcHRpb25zLmhlaWdodCkKICAgICAgICB0aGlzLnR1cm4oJ3NpemUnLCBvcHRpb25zLndpZHRoLCBvcHRpb25zLmhlaWdodCk7CiAgICAgIAogICAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXJzCgogICAgICBpZiAob3B0aW9ucy53aGVuKQogICAgICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiBvcHRpb25zLndoZW4pCiAgICAgICAgICBpZiAoaGFzKGV2ZW50TmFtZSwgb3B0aW9ucy53aGVuKSkgewogICAgICAgICAgICB0aGlzLnVuYmluZChldmVudE5hbWUpLgogICAgICAgICAgICAgIGJpbmQoZXZlbnROYW1lLCBvcHRpb25zLndoZW5bZXZlbnROYW1lXSk7CiAgICAgICAgICB9CgogICAgICByZXR1cm4gdGhpczsKICAgIH0KCiAgfSwKCiAgLy8gR2V0cyB0aGUgY3VycmVudCB2ZXJzaW9uCgogIHZlcnNpb246IGZ1bmN0aW9uKCkgewoKICAgIHJldHVybiB2ZXJzaW9uOwoKICB9Cn0sCgovLyBNZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGZvciB0aGUgZmxpcCBwYWdlIGVmZmVjdAoKZmxpcE1ldGhvZHMgPSB7CgogIC8vIENvbnN0cnVjdG9yCgogIGluaXQ6IGZ1bmN0aW9uKG9wdHMpIHsKCiAgICB0aGlzLmRhdGEoe2Y6CiAgICAgIHtlZmZlY3Q6IChvcHRzLmNvcm5lcnM9PSdyJyB8fCBvcHRzLmNvcm5lcnM9PSdsJykgPyAnaGFyZCcgOiAnc2hlZXQnfX0KICAgICk7CgogICAgdGhpcy5mbGlwKCdvcHRpb25zJywgb3B0cyk7CgogICAgZmxpcE1ldGhvZHMuX2FkZFBhZ2VXcmFwcGVyLmNhbGwodGhpcyk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgc2V0RGF0YTogZnVuY3Rpb24oZCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGRhdGEuZiA9ICQuZXh0ZW5kKGRhdGEuZiwgZCk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgb3B0aW9uczogZnVuY3Rpb24ob3B0cykgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKG9wdHMpIHsKICAgICAgZmxpcE1ldGhvZHMuc2V0RGF0YS5jYWxsKHRoaXMsCiAgICAgICAge29wdHM6ICQuZXh0ZW5kKHt9LCBkYXRhLm9wdHMgfHwgZmxpcE9wdGlvbnMsIG9wdHMpfSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlCiAgICAgIHJldHVybiBkYXRhLm9wdHM7CgogIH0sCgogIHo6IGZ1bmN0aW9uKHopIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKGRhdGEuZndyYXBwZXIpIHsKICAgICAgZGF0YS5vcHRzWyd6LWluZGV4J10gPSB6OwogICAgICBkYXRhLmZ3cmFwcGVyLmNzcygKICAgICAgICB7J3otaW5kZXgnOiB6IHx8IHBhcnNlSW50KGRhdGEucGFyZW50LmNzcygnei1pbmRleCcpLCAxMCkgfHwgMH0KICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9LAoKICBfY0FsbG93ZWQ6IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICB0dXJuRGF0YSA9IGRhdGEub3B0cy50dXJuLmRhdGEoKSwKICAgIHBhZ2UgPSBkYXRhLm9wdHMucGFnZSwKICAgIG9kZCA9IHBhZ2UlMjsKCiAgICBpZiAodHVybkRhdGEuZGlzcGxheT09J3NpbmdsZScpIHsKICAgICAgaWYgKHBhZ2U9PTEpCiAgICAgICAgcmV0dXJuICh0dXJuRGF0YS5kaXJlY3Rpb249PSdsdHInKSA/CiAgICAgICAgICBjb3JuZXJzWydmb3J3YXJkJ10gOiBjb3JuZXJzWydiYWNrd2FyZCddOwogICAgICBlbHNlIGlmIChwYWdlPT10dXJuRGF0YS50b3RhbFBhZ2VzKQogICAgICAgIHJldHVybiAodHVybkRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPwogICAgICAgICAgY29ybmVyc1snYmFja3dhcmQnXSA6IGNvcm5lcnNbJ2ZvcndhcmQnXTsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBjb3JuZXJzWydhbGwnXTsKICAgIH0gZWxzZSB7CgogICAgICByZXR1cm4gKHR1cm5EYXRhLmRpcmVjdGlvbj09J2x0cicpID8KICAgICAgICBjb3JuZXJzWyhvZGQpID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJ10KICAgICAgICA6CiAgICAgICAgY29ybmVyc1sob2RkKSA/ICdiYWNrd2FyZCcgOiAnZm9yd2FyZCddOwoKICAgIH0KCiAgfSwKCiAgX2Nvcm5lckFjdGl2YXRlZDogZnVuY3Rpb24oZSkgewogIAogIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICBwb3MgPSBkYXRhLnBhcmVudC5vZmZzZXQoKSwKICAgICAgd2lkdGggPSB0aGlzLndpZHRoKCksCiAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0KCksCiAgICAgIGMgPSB7eDogTWF0aC5tYXgoMCwgZS5wYWdlWC1wb3MubGVmdCksIHk6IE1hdGgubWF4KDAsIGUucGFnZVktcG9zLnRvcCl9LAogICAgICBjc3ogPSBkYXRhLm9wdHMuY29ybmVyU2l6ZTsKCiAgICBpZiAoYy54PD0wIHx8IGMueTw9MCB8fCBjLng+PXdpZHRoIHx8IGMueT49aGVpZ2h0KQogICAgICByZXR1cm4gZmFsc2U7CgogICAgdmFyIGFsbG93ZWRDb3JuZXJzID0gZmxpcE1ldGhvZHMuX2NBbGxvd2VkLmNhbGwodGhpcyk7CgogICAgaWYgKGMueD53aWR0aC1jc3opCiAgICAgIGMuY29ybmVyID0gJ3InOwogICAgZWxzZSBpZiAoYy54PGNzeikKICAgICAgYy5jb3JuZXIgPSAnbCc7CiAgICBlbHNlCiAgICAgIHJldHVybiBmYWxzZTsKCgogICAgcmV0dXJuICgkLmluQXJyYXkoYy5jb3JuZXIsIGFsbG93ZWRDb3JuZXJzKT09LTEpID8gZmFsc2UgOiBjOwoKICB9LAoKICBfYzogZnVuY3Rpb24oY29ybmVyLCBvcHRzKSB7CgogICAgb3B0cyA9IG9wdHMgfHwgMDsKCiAgICBzd2l0Y2ggKGNvcm5lcikgewogICAgICBjYXNlICdsJzoKICAgICAgICByZXR1cm4gcG9pbnQyRChvcHRzLCAwKTsKICAgICAgY2FzZSAncic6CiAgICAgICAgcmV0dXJuIHBvaW50MkQodGhpcy53aWR0aCgpLW9wdHMsIDApOwogICAgfQoKICB9LAoKICBfYzI6IGZ1bmN0aW9uKGNvcm5lcikgewoKICAgIHN3aXRjaCAoY29ybmVyKSB7CiAgICAgIGNhc2UgJ2wnOgogICAgICAgIHJldHVybiBwb2ludDJEKHRoaXMud2lkdGgoKSoyLCAwKTsKICAgICAgY2FzZSAncic6CiAgICAgICAgcmV0dXJuIHBvaW50MkQoLXRoaXMud2lkdGgoKSwgMCk7CiAgICB9CgogIH0sCgogIF9mb2xkaW5nUGFnZTogZnVuY3Rpb24oY29ybmVyKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICBvcHRzID0gZGF0YS5vcHRzOwoKICAgIGlmIChkYXRhLmZvbGRpbmcpIHJldHVybiBkYXRhLmZvbGRpbmc7CiAgICBlbHNlIGlmKG9wdHMudHVybikgewoKICAgICAgZGF0YSA9IG9wdHMudHVybi5kYXRhKCk7CiAgICAgIGlmIChkYXRhLmRpc3BsYXkgPT0gJ3NpbmdsZScpCiAgICAgICAgcmV0dXJuIChkYXRhLnBhZ2VPYmpzW29wdHMubmV4dF0pID8gZGF0YS5wYWdlT2Jqc1swXSA6IG51bGw7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gZGF0YS5wYWdlT2Jqc1tvcHRzLm5leHRdOwogICAgfQoKICB9LAoKICBfYmFja0dyYWRpZW50OiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgZ3JhZGllbnQgPSBkYXRhLm9wdHMuZ3JhZGllbnRzICYmCiAgICAgICAgKCF0dXJuIHx8CiAgICAgICAgdHVybi5kYXRhKCkuZGlzcGxheT09J3NpbmdsZScgfHwKICAgICAgICAoZGF0YS5vcHRzLnBhZ2UhPTIgJiYgZGF0YS5vcHRzLnBhZ2UhPXR1cm4uZGF0YSgpLnRvdGFsUGFnZXMtMSkpOwoKCiAgICByZXR1cm4gZ3JhZGllbnQ7CgogIH0sCgogIHJlc2l6ZTogZnVuY3Rpb24oZnVsbCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHdpZHRoID0gdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodCgpOwoKCiAgICBpZiAoZnVsbCkgewogICAgICBkYXRhLndyYXBwZXIuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICAgIGRhdGEuZnBhZ2UuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICB9CgogIH0sCgogIC8vIFByZXBhcmVzIHRoZSBwYWdlIGJ5IGFkZGluZyBhIGdlbmVyYWwgd3JhcHBlciBhbmQgYW5vdGhlciBvYmplY3RzCgogIF9hZGRQYWdlV3JhcHBlcjogZnVuY3Rpb24oKSB7CgogICAgdmFyIGF0dCwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHBhcmVudCA9IHRoaXMucGFyZW50KCk7CgogICAgZGF0YS5wYXJlbnQgPSBwYXJlbnQ7CgogICAgaWYgKCFkYXRhLndyYXBwZXIpIHsKICAgICAgICAKICAgICAgdmFyIGNzc1Byb3BlcnRpZXMgPSB7fTsKCiAgICAgIGRhdGEud3JhcHBlciA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAyKSkuCiAgICAgICAgY3NzKGNzc1Byb3BlcnRpZXMpLgogICAgICAgIGFwcGVuZFRvKHBhcmVudCkuCiAgICAgICAgcHJlcGVuZCh0aGlzKTsKCiAgICAgIGRhdGEuZnBhZ2UgPSAkKCc8ZGl2Lz4nLCBkaXZBdHQoMCwgMCwgMSkpLgogICAgICAgIGNzcyhjc3NQcm9wZXJ0aWVzKS4KICAgICAgICBhcHBlbmRUbyhwYXJlbnQpOwoKICAgIH0KCiAgICAvLyBTZXQgc2l6ZQogICAgZmxpcE1ldGhvZHMucmVzaXplLmNhbGwodGhpcywgdHJ1ZSk7CgogIH0sCgogIC8vIFRha2VzIGEgMlAgcG9pbnQgZnJvbSB0aGUgc2NyZWVuIGFuZCBhcHBsaWVzIHRoZSB0cmFuc2Zvcm1hdGlvbgoKICBfZm9sZDogZnVuY3Rpb24ocG9pbnQpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIG8gPSBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsIHBvaW50LmNvcm5lciksCiAgICAgIHJlbFggPSAoby54KSA/IG8ueCAtIHBvaW50LnggOiAgcG9pbnQueCwKICAgICAgd2lkdGggPSB0aGlzLndpZHRoKCksCiAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0KCk7CgogICAgICByZWxYID0gTWF0aC5taW4od2lkdGgqMiwgTWF0aC5tYXgoMCwgcmVsWCkpOwoKCiAgICAgIHN3aXRjaChwb2ludC5jb3JuZXIpIHsKICAgICAgICBjYXNlICdyJyA6CiAgICAgICAgICBkYXRhLndyYXBwZXIuY3NzKHsKICAgICAgICAgICAgd2lkdGg6IE1hdGgubWF4KDAsIHdpZHRoLXJlbFgpCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuY3NzKHsKICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsCiAgICAgICAgICAgIGxlZnQ6IC1yZWxYCiAgICAgICAgICB9KTsKCiAgICAgICAgICBkYXRhLmZwYWdlLmNzcyh7CiAgICAgICAgICAgIGxlZnQ6IC1yZWxYICsgd2lkdGgsCiAgICAgICAgICAgIHdpZHRoOiBNYXRoLm1heCgwLCByZWxYLXdpZHRoKQogICAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnbCcgOgoKICAgICAgICAgIGRhdGEud3JhcHBlci5jc3MoewogICAgICAgICAgICB3aWR0aDogd2lkdGgKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5jc3MoewogICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJywKICAgICAgICAgICAgbGVmdDogcmVsWAogICAgICAgICAgfSk7CgogICAgICAgICAgZGF0YS5mcGFnZS5jc3MoewogICAgICAgICAgICBsZWZ0OiB3aWR0aCwKICAgICAgICAgICAgd2lkdGg6IE1hdGgubWF4KDAsIHJlbFgtd2lkdGgpCiAgICAgICAgICB9KTsKCiAgICAgICAgICBpZiAoZGF0YS5mb2xkaW5nKQogICAgICAgICAgICBkYXRhLmZvbGRpbmcuY3NzKHsKICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJywKICAgICAgICAgICAgICBsZWZ0OiAtd2lkdGgqMiArIHJlbFgKICAgICAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIGRhdGEucGFyZW50LmNzcyh7J292ZXJmbG93JzogJ3Zpc2libGUnfSk7CgogICAgZGF0YS5wb2ludCA9IHBvaW50OwogIAogIH0sCgogIF9tb3ZlRm9sZGluZ1BhZ2U6IGZ1bmN0aW9uKGJvb2wpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CiAgICAgIAogICAgaWYgKGJvb2wpIHsKICAgICAgCiAgICAgIHZhciBmb2xkaW5nID0gZmxpcE1ldGhvZHMuX2ZvbGRpbmdQYWdlLmNhbGwodGhpcyksCiAgICAgICAgdHVybiA9IGRhdGEub3B0cy50dXJuOwogICAgICAKICAgICAgaWYgKGZvbGRpbmcpIHsKCiAgICAgICAgaWYgKGRhdGEuZm9sZGluZykgewogICAgICAgICAgaWYgKGRhdGEuZm9sZGluZz09PWZvbGRpbmcpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbCh0aGlzLCBmYWxzZSk7CiAgICAgICAgfQogICAgICAKICAgICAgICBmbGlwTWV0aG9kcy5zZXREYXRhLmNhbGwodGhpcywKICAgICAgICAgIHtiYWNrUGFyZW50OiBmb2xkaW5nLnBhcmVudCgpLAogICAgICAgICAgZm9sZGluZzogZm9sZGluZ30pOwoKICAgICAgICBkYXRhLmZwYWdlLnByZXBlbmQoZm9sZGluZyk7CgogICAgICB9CgogICAgICB0dXJuLnR1cm4oJ3VwZGF0ZScpOwoKICAgIH0gZWxzZSB7CiAgICAgIGlmIChkYXRhLmJhY2tQYXJlbnQpIHsKICAgICAgICBkYXRhLmJhY2tQYXJlbnQucHJlcGVuZChkYXRhLmZvbGRpbmcpOwogICAgICAgIGRlbGV0ZSBkYXRhLmJhY2tQYXJlbnQ7CiAgICAgICAgZGVsZXRlIGRhdGEuZm9sZGluZzsKICAgICAgfQogICAgfQogIH0sCgogIF9zaG93Rm9sZGVkUGFnZTogZnVuY3Rpb24oYywgYW5pbWF0ZSkgewoKICAgIHZhciBmb2xkaW5nID0gZmxpcE1ldGhvZHMuX2ZvbGRpbmdQYWdlLmNhbGwodGhpcyksCiAgICAgIGRkID0gdGhpcy5kYXRhKCksCiAgICAgIGRhdGEgPSBkZC5mLAogICAgICB2aXNpYmxlID0gZGF0YS52aXNpYmxlOwoKICAgIGlmICghdmlzaWJsZSB8fCAhZGF0YS5wb2ludCB8fCBkYXRhLnBvaW50LmNvcm5lciE9Yy5jb3JuZXIpIHsKICAgICAgCiAgICAgIHZhciBtQWN0aW9uID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLm1vdXNlQWN0aW9uOwoKICAgICAgdmFyIGV2ZW50ID0gJC5FdmVudCgnc3RhcnQnKTsKICAgICAgdGhpcy50cmlnZ2VyKGV2ZW50LCBbZGF0YS5vcHRzLCBjLmNvcm5lcl0pOwogICAgICB2aXNpYmxlID0gZmFsc2U7CgogICAgICBpZiAoZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpCiAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIH0KCiAgICBpZiAoZm9sZGluZykgewoKICAgICAgaWYgKGFuaW1hdGUpIHsKICAgICAgICAKICAgICAgICB2YXIgdGhhdCA9IHRoaXMsCiAgICAgICAgICBwb2ludCA9IChkYXRhLnBvaW50ICYmIGRhdGEucG9pbnQuY29ybmVyPT1jLmNvcm5lcikgPwogICAgICAgICAgZGF0YS5wb2ludCA6IGZsaXBNZXRob2RzLl9jLmNhbGwodGhpcywgYy5jb3JuZXIsIDEpOwogICAgICAKICAgICAgICB0aGlzLmFuaW1hdGVmKHtmcm9tOiBbcG9pbnQueCwgcG9pbnQueV0sCiAgICAgICAgICB0bzogW2MueCwgYy55XSwKICAgICAgICAgIGR1cmF0aW9uOiA1MDAsCiAgICAgICAgICBmcmFtZTogZnVuY3Rpb24odikgewogICAgICAgICAgICBjLnggPSBNYXRoLnJvdW5kKHZbMF0pOwogICAgICAgICAgICBjLnkgPSBNYXRoLnJvdW5kKHZbMV0pOwogICAgICAgICAgICBmbGlwTWV0aG9kcy5fZm9sZC5jYWxsKHRoYXQsIGMpOwogICAgICAgICAgfX0pOwoKICAgICAgfSBlbHNlICB7CgogICAgICAgIGZsaXBNZXRob2RzLl9mb2xkLmNhbGwodGhpcywgYyk7CiAgICAgICAgaWYgKGRkLmVmZmVjdCAmJiAhZGQuZWZmZWN0LnR1cm5pbmcpCiAgICAgICAgICB0aGlzLmFuaW1hdGVmKGZhbHNlKTsKCiAgICAgIH0KCiAgICAgIGlmICghdmlzaWJsZSkgewoKICAgICAgICBkYXRhLnZpc2libGUgPSB0cnVlOwogICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgICBkYXRhLmZwYWdlLnNob3coKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0sCgogIGhpZGU6IGZ1bmN0aW9uKCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgZm9sZGluZyA9IGZsaXBNZXRob2RzLl9mb2xkaW5nUGFnZS5jYWxsKHRoaXMpOwoKICAgIHRoaXMuY3NzKHsKICAgICAgcG9zaXRpb246ICcnLAogICAgICBsZWZ0OiAnYXV0bycKICAgIH0pOwoKICAgIGRhdGEud3JhcHBlci5jc3MoewogICAgICB3aWR0aDogdGhpcy53aWR0aCgpCiAgICB9KTsKCiAgICBkYXRhLmZwYWdlLmNzcyh7CiAgICAgIHdpZHRoOiB0aGlzLndpZHRoKCkKICAgIH0pOwoKICAgIGlmIChkYXRhLmZvbGRpbmcpCiAgICAgIGRhdGEuZm9sZGluZy5jc3MoewogICAgICAgIHBvc2l0aW9uOiAnJywKICAgICAgICBsZWZ0OiAnYXV0bycKICAgICAgfSk7CgogICAgZGF0YS5mcGFnZS5oaWRlKCk7CgogICAgZGF0YS52aXNpYmxlID0gZmFsc2U7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgaGlkZUZvbGRlZFBhZ2U6IGZ1bmN0aW9uKGFuaW1hdGUpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhLnBvaW50KSByZXR1cm47CgogICAgdmFyIHRoYXQgPSB0aGlzLAogICAgICBwMSA9IGRhdGEucG9pbnQsCiAgICAgIGhpZGUgPSBmdW5jdGlvbigpIHsKICAgICAgICBkYXRhLnBvaW50ID0gbnVsbDsKICAgICAgICB0aGF0LmZsaXAoJ2hpZGUnKTsKICAgICAgICB0aGF0LnRyaWdnZXIoJ2VuZCcsIFtkYXRhLm9wdHMsIGZhbHNlXSk7CiAgICAgIH07CgogICAgaWYgKGFuaW1hdGUpIHsKICAgICAgdmFyIHA0ID0gZmxpcE1ldGhvZHMuX2MuY2FsbCh0aGlzLCBwMS5jb3JuZXIpLAogICAgICAgIHRvcCA9IChwMS5jb3JuZXIuc3Vic3RyKDAsMSk9PSd0JyksCiAgICAgICAgZGVsdGEgPSAodG9wKSA/IE1hdGgubWluKDAsIHAxLnktcDQueSkvMiA6IE1hdGgubWF4KDAsIHAxLnktcDQueSkvMiwKICAgICAgICBwMiA9IHBvaW50MkQocDEueCwgcDEueStkZWx0YSksCiAgICAgICAgcDMgPSBwb2ludDJEKHA0LngsIHA0LnktZGVsdGEpOwogICAgCiAgICAgIHRoaXMuYW5pbWF0ZWYoewogICAgICAgIGZyb206IDAsCiAgICAgICAgdG86IDEsCiAgICAgICAgZnJhbWU6IGZ1bmN0aW9uKHYpIHsKICAgICAgICAgIHZhciBucCA9IGJlemllcihwMSwgcDIsIHAzLCBwNCwgdik7CiAgICAgICAgICBwMS54ID0gbnAueDsKICAgICAgICAgIHAxLnkgPSBucC55OwogICAgICAgICAgZmxpcE1ldGhvZHMuX2ZvbGQuY2FsbCh0aGF0LCBwMSk7CiAgICAgICAgfSwKICAgICAgICBjb21wbGV0ZTogaGlkZSwKICAgICAgICBkdXJhdGlvbjogODAwLAogICAgICAgIGhpZGluZzogdHJ1ZQogICAgICAgIH0pOwoKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuYW5pbWF0ZWYoZmFsc2UpOwogICAgICBoaWRlKCk7CiAgICB9CiAgfSwKCiAgdHVyblBhZ2U6IGZ1bmN0aW9uKGNvcm5lcikgewoKICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgY29ybmVyID0ge2Nvcm5lcjogKGRhdGEuY29ybmVyKSA/CiAgICAgIGRhdGEuY29ybmVyLmNvcm5lciA6CiAgICAgIGNvcm5lciB8fCBmbGlwTWV0aG9kcy5fY0FsbG93ZWQuY2FsbCh0aGlzKVswXX07CgogICAgdmFyIHAxID0gZGF0YS5wb2ludCB8fAogICAgICBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsCiAgICAgICAgY29ybmVyLmNvcm5lciwKICAgICAgICAoZGF0YS5vcHRzLnR1cm4pID8gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLm9wdHMuZWxldmF0aW9uIDogMCksCiAgICAgIHA0ID0gZmxpcE1ldGhvZHMuX2MyLmNhbGwodGhpcywgY29ybmVyLmNvcm5lcik7CgogICAgICB0aGlzLnRyaWdnZXIoJ2ZsaXAnKS4KICAgICAgICBhbmltYXRlZih7CiAgICAgICAgICBmcm9tOiAwLAogICAgICAgICAgdG86IDEsCiAgICAgICAgICBmcmFtZTogZnVuY3Rpb24odikgewogICAgICAgICAgICB2YXIgbnAgPSBiZXppZXIocDEsIHAxLCBwNCwgcDQsIHYpOwogICAgICAgICAgICBjb3JuZXIueCA9IG5wLng7CiAgICAgICAgICAgIGNvcm5lci55ID0gbnAueTsKCiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9zaG93Rm9sZGVkUGFnZS5jYWxsKHRoYXQsIGNvcm5lcik7CiAgICAgICAgICB9LAogICAgICAgICAgCiAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoYXQudHJpZ2dlcignZW5kJywgW2RhdGEub3B0cywgdHJ1ZV0pOwogICAgICAgICAgfSwKICAgICAgICAgIGR1cmF0aW9uOiBkYXRhLm9wdHMuZHVyYXRpb24sCiAgICAgICAgICB0dXJuaW5nOiB0cnVlCiAgICAgICAgfSk7CgogICAgICBkYXRhLmNvcm5lciA9IG51bGw7CiAgfSwKCiAgbW92aW5nOiBmdW5jdGlvbigpIHsKCiAgICByZXR1cm4gJ2VmZmVjdCcgaW4gdGhpcy5kYXRhKCk7CiAgCiAgfSwKCiAgaXNUdXJuaW5nOiBmdW5jdGlvbigpIHsKCiAgICByZXR1cm4gdGhpcy5mbGlwKCdtb3ZpbmcnKSAmJiB0aGlzLmRhdGEoKS5lZmZlY3QudHVybmluZzsKICAKICB9LAoKICBfZXZlbnRTdGFydDogZnVuY3Rpb24oZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZjsKCiAgICBpZiAoIWRhdGEuZGlzYWJsZWQgJiYgIXRoaXMuZmxpcCgnaXNUdXJuaW5nJykpIHsKCiAgICAgIGRhdGEuY29ybmVyID0gZmxpcE1ldGhvZHMuX2Nvcm5lckFjdGl2YXRlZC5jYWxsKHRoaXMsIGUpOwogICAgCiAgICAgIGlmIChkYXRhLmNvcm5lciAmJiBmbGlwTWV0aG9kcy5fZm9sZGluZ1BhZ2UuY2FsbCh0aGlzLCBkYXRhLmNvcm5lcikpIHsKICAgICAgCiAgICAgICAgaWYgKGZsaXBNZXRob2RzLl9zaG93Rm9sZGVkUGFnZS5jYWxsKHRoaXMsIGRhdGEuY29ybmVyKSkKICAgICAgICAgIHRoaXMudHJpZ2dlcigncHJlc3NlZCcsIFtkYXRhLnBvaW50XSk7CgogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgIH0gZWxzZQogICAgICAgIGRhdGEuY29ybmVyID0gbnVsbDsKCiAgICB9CgogIH0sCgogIF9ldmVudE1vdmU6IGZ1bmN0aW9uKGUpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhLmRpc2FibGVkKSB7CgogICAgICBlID0gKGlzVG91Y2gpID8gZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMgOiBbZV07CiAgICAKICAgICAgaWYgKGRhdGEuY29ybmVyKSB7CgogICAgICAgIHZhciBwb3MgPSBkYXRhLnBhcmVudC5vZmZzZXQoKTsKICAgICAgICBkYXRhLmNvcm5lci54ID0gZVswXS5wYWdlWC1wb3MubGVmdDsKICAgICAgICBkYXRhLmNvcm5lci55ID0gZVswXS5wYWdlWS1wb3MudG9wOwogICAgICAgIGZsaXBNZXRob2RzLl9zaG93Rm9sZGVkUGFnZS5jYWxsKHRoaXMsIGRhdGEuY29ybmVyKTsKCiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZGF0YSgpLmVmZmVjdCAmJiB0aGlzLmlzKCc6dmlzaWJsZScpKSB7CiAgICAKCiAgICAgICAgdmFyIGNvcm5lciA9IGZsaXBNZXRob2RzLl9jb3JuZXJBY3RpdmF0ZWQuY2FsbCh0aGlzLCBlWzBdKTsKCiAgICAgICAgaWYgKGNvcm5lcikgewogICAgICAgICAgdmFyIG9yaWdpbiA9IGZsaXBNZXRob2RzLl9jLmNhbGwodGhpcywgY29ybmVyLmNvcm5lciwgZGF0YS5vcHRzLmNvcm5lclNpemUvMik7CiAgICAgICAgICBjb3JuZXIueCA9IG9yaWdpbi54OwogICAgICAgICAgY29ybmVyLnkgPSBvcmlnaW4ueTsKICAgICAgICAgIGZsaXBNZXRob2RzLl9zaG93Rm9sZGVkUGFnZS5jYWxsKHRoaXMsIGNvcm5lciwgdHJ1ZSk7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICBmbGlwTWV0aG9kcy5oaWRlRm9sZGVkUGFnZS5jYWxsKHRoaXMsIHRydWUpOwogICAgICAgICAgICAgICAKCiAgICAgIH0KICAgIH0KICB9LAoKICBfZXZlbnRFbmQ6IGZ1bmN0aW9uKCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZjsKCiAgICBpZiAoIWRhdGEuZGlzYWJsZWQgJiYgZGF0YS5wb2ludCkgewogICAgICB2YXIgZXZlbnQgPSAkLkV2ZW50KCdyZWxlYXNlZCcpOwogICAgICB0aGlzLnRyaWdnZXIoZXZlbnQsIFtkYXRhLnBvaW50XSk7CiAgICAgIGlmICghZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpCiAgICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgIH0KCiAgICBkYXRhLmNvcm5lciA9IG51bGw7CgogIH0sCgogIGRpc2FibGU6IGZ1bmN0aW9uKGRpc2FibGUpIHsKCiAgICBmbGlwTWV0aG9kcy5zZXREYXRhLmNhbGwodGhpcywgeydkaXNhYmxlZCc6IGRpc2FibGV9KTsKICAgIHJldHVybiB0aGlzOwoKICB9Cn07CgoKCi8vIFByb2Nlc3NlcyBjbGFzc2VzCgpmdW5jdGlvbiBkZWNvcmF0b3IodGhhdCwgbWV0aG9kcywgYXJncykgewoKICBpZiAoIWFyZ3NbMF0gfHwgdHlwZW9mKGFyZ3NbMF0pPT0nb2JqZWN0JykKICAgIHJldHVybiBtZXRob2RzLmluaXQuYXBwbHkodGhhdCwgYXJncyk7CgogIGVsc2UgaWYgKG1ldGhvZHNbYXJnc1swXV0pCiAgICByZXR1cm4gbWV0aG9kc1thcmdzWzBdXS5hcHBseSh0aGF0LCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7CgogIGVsc2UKICAgIHRocm93IHR1cm5FcnJvcihhcmdzWzBdICsgJyBpcyBhbiBpbnZhbGlkIHZhbHVlJyk7Cn0KCgovLyBBdHRyaWJ1dGVzIGZvciBhIGxheWVyCgpmdW5jdGlvbiBkaXZBdHQodG9wLCBsZWZ0LCB6SW5kZXgsIG92ZXJmKSB7CiAgICAKICByZXR1cm4geydjc3MnOiB7CiAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsCiAgICAgICAgdG9wOiB0b3AsCiAgICAgICAgbGVmdDogbGVmdCwKICAgICAgICAnb3ZlcmZsb3cnOiBvdmVyZiB8fCAnaGlkZGVuJywKICAgICAgICAnei1pbmRleCc6IHpJbmRleCB8fCAnYXV0bycKICAgICAgICB9CiAgICB9OwogICAgICAKfQoKLy8gR2V0cyBhIDJEIHBvaW50IGZyb20gYSBiZXppZXIgY3VydmUgb2YgZm91ciBwb2ludHMKCmZ1bmN0aW9uIGJlemllcihwMSwgcDIsIHAzLCBwNCwgdCkgewoKICB2YXIgYSA9IDEgLSB0LAogICAgYiA9IGEgKiBhICogYSwKICAgIGMgPSB0ICogdCAqIHQ7CiAgICAKICByZXR1cm4gcG9pbnQyRChNYXRoLnJvdW5kKGIqcDEueCArIDMqdCphKmEqcDIueCArIDMqdCp0KmEqcDMueCArIGMqcDQueCksCiAgICBNYXRoLnJvdW5kKGIqcDEueSArIDMqdCphKmEqcDIueSArIDMqdCp0KmEqcDMueSArIGMqcDQueSkpOwoKfQoKLy8gR2V0cyBhIDJEIHBvaW50CgpmdW5jdGlvbiBwb2ludDJEKHgsIHkpIHsKICAKICByZXR1cm4ge3g6IHgsIHk6IHl9OwoKfQoKLy8gQ2hlY2tzIGlmIGEgcHJvcGVydHkgYmVsb25ncyB0byBhbiBvYmplY3QKCmZ1bmN0aW9uIGhhcyhwcm9wZXJ0eSwgb2JqZWN0KSB7CiAgCiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsKCn0KCi8vIEdldHMgdGhlIENTUzMgdmVuZG9yIHByZWZpeAoKZnVuY3Rpb24gZ2V0UHJlZml4KCkgewoKICB2YXIgdmVuZG9yUHJlZml4ZXMgPSBbJ01veicsJ1dlYmtpdCcsJ0todG1sJywnTycsJ21zJ10sCiAgbGVuID0gdmVuZG9yUHJlZml4ZXMubGVuZ3RoLAogIHZlbmRvciA9ICcnOwoKICB3aGlsZSAobGVuLS0pCiAgICBpZiAoKHZlbmRvclByZWZpeGVzW2xlbl0gKyAnVHJhbnNmb3JtJykgaW4gZG9jdW1lbnQuYm9keS5zdHlsZSkKICAgICAgdmVuZG9yPSctJyt2ZW5kb3JQcmVmaXhlc1tsZW5dLnRvTG93ZXJDYXNlKCkrJy0nOwoKICByZXR1cm4gdmVuZG9yOwoKfQoKLy8gSlMgRXJyb3JzCgpmdW5jdGlvbiB0dXJuRXJyb3IobWVzc2FnZSkgewoKICBmdW5jdGlvbiBUdXJuSnNFcnJvcihtZXNzYWdlKSB7CiAgICB0aGlzLm5hbWUgPSAiVHVybkpzRXJyb3IiOwogICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKICB9CgogIFR1cm5Kc0Vycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpOwogIFR1cm5Kc0Vycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR1cm5Kc0Vycm9yOwoKICByZXR1cm4gbmV3IFR1cm5Kc0Vycm9yKG1lc3NhZ2UpOwp9CgovLyBGaW5kIHRoZSBvZmZzZXQgb2YgYW4gZWxlbWVudCBkaXNjYXJkaW5nIGl0cyB0cmFuc2Zvcm1hdGlvbgoKZnVuY3Rpb24gZmluZFBvcyhvYmopIHsKICB2YXIgb2Zmc2V0ID0ge3RvcDogMCwgbGVmdDogMH07CgogIGRvewogICAgb2Zmc2V0LmxlZnQgKz0gb2JqLm9mZnNldExlZnQ7CiAgICBvZmZzZXQudG9wICs9IG9iai5vZmZzZXRUb3A7CiAgfSB3aGlsZSAoKG9iaiA9IG9iai5vZmZzZXRQYXJlbnQpKTsKCiAgcmV0dXJuIG9mZnNldDsKfQoKCi8vIFJlcXVlc3QgYW4gYW5pbWF0aW9uCgp3aW5kb3cucmVxdWVzdEFuaW0gPSBmdW5jdGlvbihjYWxsYmFjaykgewogIHdpbmRvdy5zZXRUaW1lb3V0KGNhbGxiYWNrLCAxMDAwIC8gNjApOwp9CgoKZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHsKICByZXR1cm4gJyc7Cn0KCgovLyBFeHRlbmQgJC5mbgoKJC5leHRlbmQoJC5mbiwgewoKICBmbGlwOiBmdW5jdGlvbihyZXEsIG9wdHMpIHsKICAgIHJldHVybiBkZWNvcmF0b3IodGhpcywgZmxpcE1ldGhvZHMsIGFyZ3VtZW50cyk7CiAgfSwKCiAgdHVybjogZnVuY3Rpb24ocmVxKSB7CiAgICByZXR1cm4gZGVjb3JhdG9yKHRoaXMsIHR1cm5NZXRob2RzLCBhcmd1bWVudHMpOwogIH0sCgogIHRyYW5zZm9ybTogZnVuY3Rpb24odHJhbnNmb3JtLCBvcmlnaW4pIHsKCiAgICB2YXIgcHJvcGVydGllcyA9IHt9OwogICAgCiAgICBpZiAob3JpZ2luKQogICAgICBwcm9wZXJ0aWVzW3ZlbmRvcisndHJhbnNmb3JtLW9yaWdpbiddID0gb3JpZ2luOwogICAgCiAgICBwcm9wZXJ0aWVzW3ZlbmRvcisndHJhbnNmb3JtJ10gPSB0cmFuc2Zvcm07CiAgCiAgICByZXR1cm4gdGhpcy5jc3MocHJvcGVydGllcyk7CgogIH0sCgogIGFuaW1hdGVmOiBmdW5jdGlvbihwb2ludCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKGRhdGEuZWZmZWN0KQogICAgICBkYXRhLmVmZmVjdC5zdG9wKCk7CgogICAgaWYgKHBvaW50KSB7CgogICAgICBpZiAoIXBvaW50LnRvLmxlbmd0aCkgcG9pbnQudG8gPSBbcG9pbnQudG9dOwogICAgICBpZiAoIXBvaW50LmZyb20ubGVuZ3RoKSBwb2ludC5mcm9tID0gW3BvaW50LmZyb21dOwoKICAgICAgdmFyIGRpZmYgPSBbXSwKICAgICAgICBsZW4gPSBwb2ludC50by5sZW5ndGgsCiAgICAgICAgYW5pbWF0aW5nID0gdHJ1ZSwKICAgICAgICB0aGF0ID0gdGhpcywKICAgICAgICB0aW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKSwKICAgICAgICBmcmFtZSA9IGZ1bmN0aW9uKCkgewoKICAgICAgICAgIGlmICghZGF0YS5lZmZlY3QgfHwgIWFuaW1hdGluZykKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgIHZhciB2ID0gW10sCiAgICAgICAgICAgIHRpbWVEaWZmID0gTWF0aC5taW4ocG9pbnQuZHVyYXRpb24sIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLSB0aW1lKTsKCiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKQogICAgICAgICAgICB2LnB1c2goZGF0YS5lZmZlY3QuZWFzaW5nKDEsIHRpbWVEaWZmLCBwb2ludC5mcm9tW2ldLCBkaWZmW2ldLCBwb2ludC5kdXJhdGlvbikpOwoKICAgICAgICAgIHBvaW50LmZyYW1lKChsZW49PTEpID8gdlswXSA6IHYpOwoKICAgICAgICAgIGlmICh0aW1lRGlmZj09cG9pbnQuZHVyYXRpb24pIHsKICAgICAgICAgICAgZGVsZXRlIGRhdGFbJ2VmZmVjdCddOwogICAgICAgICAgICB0aGF0LmRhdGEoZGF0YSk7CiAgICAgICAgICAgIGlmIChwb2ludC5jb21wbGV0ZSkKICAgICAgICAgICAgICBwb2ludC5jb21wbGV0ZSgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltKGZyYW1lKTsKICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykKICAgICAgICBkaWZmLnB1c2gocG9pbnQudG9baV0gLSBwb2ludC5mcm9tW2ldKTsKCiAgICAgIGRhdGEuZWZmZWN0ID0gJC5leHRlbmQoewogICAgICAgIHN0b3A6IGZ1bmN0aW9uKCkgewogICAgICAgICAgYW5pbWF0aW5nID0gZmFsc2U7CiAgICAgICAgfSwKICAgICAgICBlYXNpbmc6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkYXRhKSB7CiAgICAgICAgICByZXR1cm4gYyAqIE1hdGguc3FydCgxIC0gKHQ9dC9kYXRhLTEpKnQpICsgYjsKICAgICAgICB9CiAgICAgIH0sIHBvaW50KTsKCiAgICAgIHRoaXMuZGF0YShkYXRhKTsKCiAgICAgIGZyYW1lKCk7CgogICAgfSBlbHNlIHsKICAgICAgCiAgICAgIGRlbGV0ZSBkYXRhWydlZmZlY3QnXTsKCiAgICB9CiAgfQp9KTsKCi8vIEV4cG9ydCBzb21lIGdsb2JhbHMKCiQuaXNUb3VjaCA9IGlzVG91Y2g7CiQubW91c2VFdmVudHMgPSBtb3VzZUV2ZW50czsKJC5jc3NQcmVmaXggPSBlbXB0eUZ1bmN0aW9uOwokLmNzc1RyYW5zaXRpb25FbmQgPSBlbXB0eUZ1bmN0aW9uOwokLmZpbmRQb3MgPSBmaW5kUG9zOwoKfSkoalF1ZXJ5KTs='></script>
<script id="fb_lib_zoom_js" src='data:/text/plain;base64,LyoqCiAqIHpvb20uanMKICogd3d3LnR1cm5qcy5jb20KICogdHVybmpzLmNvbS9saWNlbnNlLnR4dAogKgogKiBDb3B5cmlnaHQgKEMpIDIwMTIgRW1tYW51ZWwgR2FyY2lhCiAqKi8KCihmdW5jdGlvbigkKSB7CgondXNlIHN0cmljdCc7Cgp2YXIgaGFzM2QsCgp6b29tT3B0aW9ucyA9IHsKICBtYXg6IDIsCiAgZmxpcGJvb2s6IG51bGwsCiAgZWFzZUZ1bmN0aW9uOiAnZWFzZS1pbi1vdXQnLAogIGR1cmF0aW9uOiA1MDAsCiAgd2hlbjoge30KfSwKCnpvb21NZXRob2RzID0gewogIGluaXQ6IGZ1bmN0aW9uKG9wdHMpIHsKCiAgICB2YXIgdGhhdCA9IHRoaXMsCiAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICBvcHRpb25zID0gJC5leHRlbmQoe30sIHpvb21PcHRpb25zLCBvcHRzKTsKCiAgICBpZiAoIW9wdGlvbnMuZmxpcGJvb2sgfHwgIW9wdGlvbnMuZmxpcGJvb2sudHVybignaXMnKSkgewogICAgICB0aHJvdyBlcnJvcignb3B0aW9ucy5mbGlwYm9vayBpcyByZXF1aXJlZCcpOwogICAgfQoKICAgIGhhczNkID0gJ1dlYktpdENTU01hdHJpeCcgaW4gd2luZG93IHx8ICdNb3pQZXJzcGVjdGl2ZScgaW4gZG9jdW1lbnQuYm9keS5zdHlsZTsKCiAgICBpZiAodHlwZW9mKG9wdGlvbnMubWF4KSE9J2Z1bmN0aW9uJykgewogICAgICB2YXIgbWF4ID0gb3B0aW9ucy5tYXg7CiAgICAgIG9wdGlvbnMubWF4ID0gZnVuY3Rpb24oKSB7IHJldHVybiBtYXg7IH07CiAgICB9CgogICAgZGF0YS56b29tID0gewogICAgICBvcHRzOiBvcHRpb25zLAogICAgICBheGlzOiBwb2ludDJEKDAsIDApLAogICAgICBzY3JvbGxQb3M6IHBvaW50MkQoMCwgMCksCiAgICAgIGV2ZW50UXVldWU6IFtdLAogICAgICBtb3VzZXVwRXZlbnQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB6b29tTWV0aG9kcy5fZU1vdXNlVXAuYXBwbHkodGhhdCwgYXJndW1lbnRzKTsKICAgICAgfSwKICAgICAgZXZlbnRUb3VjaFN0YXJ0OiBiaW5kKHpvb21NZXRob2RzLl9lVG91Y2hTdGFydCwgdGhhdCksCiAgICAgIGV2ZW50VG91Y2hNb3ZlOiBiaW5kKHpvb21NZXRob2RzLl9lVG91Y2hNb3ZlLCB0aGF0KSwKICAgICAgZXZlbnRUb3VjaEVuZDogYmluZCh6b29tTWV0aG9kcy5fZVRvdWNoRW5kLCB0aGF0KSwKICAgICAgZmxpcGJvb2tFdmVudHM6IHsKICAgICAgICB6b29taW5nOiBiaW5kKHpvb21NZXRob2RzLl9lWm9vbSwgdGhhdCksCiAgICAgICAgcHJlc3NlZDogYmluZCh6b29tTWV0aG9kcy5fZVByZXNzZWQsIHRoYXQpLAogICAgICAgIHJlbGVhc2VkOiBiaW5kKHpvb21NZXRob2RzLl9lUmVsZWFzZWQsIHRoYXQpLAogICAgICAgIHN0YXJ0OiBiaW5kKHpvb21NZXRob2RzLl9lU3RhcnQsIHRoYXQpLAogICAgICAgIHR1cm5pbmc6IGJpbmQoem9vbU1ldGhvZHMuX2VUdXJuaW5nLCB0aGF0KSwKICAgICAgICB0dXJuZWQ6IGJpbmQoem9vbU1ldGhvZHMuX2VUdXJuZWQsIHRoYXQpLAogICAgICAgIGRlc3Ryb3lpbmc6IGJpbmQoem9vbU1ldGhvZHMuX2VEZXN0cm95aW5nLCB0aGF0KQogICAgICB9CiAgICB9OwoKICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiBvcHRpb25zLndoZW4pIHsKICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLndoZW4sIGV2ZW50TmFtZSkpIHsKICAgICAgICB0aGlzLmJpbmQoJ3pvb20uJytldmVudE5hbWUsIG9wdGlvbnMud2hlbltldmVudE5hbWVdKTsKICAgICAgfQogICAgfQoKICAgIGZvciAoZXZlbnROYW1lIGluIGRhdGEuem9vbS5mbGlwYm9va0V2ZW50cykgewogICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEuem9vbS5mbGlwYm9va0V2ZW50cywgZXZlbnROYW1lKSkgewogICAgICAgIG9wdGlvbnMuZmxpcGJvb2suYmluZChldmVudE5hbWUsIGRhdGEuem9vbS5mbGlwYm9va0V2ZW50c1tldmVudE5hbWVdKTsKICAgICAgfQogICAgfQoKICAgIHRoaXMuY3NzKHsKICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsCiAgICAgIG92ZXJmbG93IDogJ2hpZGRlbicKICAgIH0pOwoKICAgIGlmICgkLmlzVG91Y2gpIHsKCiAgICAgIG9wdGlvbnMuZmxpcGJvb2suCiAgICAgICAgYmluZCgndG91Y2hzdGFydCcsIGRhdGEuem9vbS5ldmVudFRvdWNoU3RhcnQgKS4KICAgICAgICBiaW5kKCd0b3VjaG1vdmUnLCBkYXRhLnpvb20uZXZlbnRUb3VjaE1vdmUpLgogICAgICAgIGJpbmQoJ3RvdWNoZW5kJywgZGF0YS56b29tLmV2ZW50VG91Y2hFbmQpOwoKICAgICAgdGhpcy5iaW5kKCd0b3VjaHN0YXJ0Jywgem9vbU1ldGhvZHMuX3RhcCk7CgogICAgfSBlbHNlIHsKICAgICAgdGhpcy5tb3VzZWRvd24oem9vbU1ldGhvZHMuX21vdXNlZG93bikuCiAgICAgICAgY2xpY2soem9vbU1ldGhvZHMuX3RhcCk7CiAgICB9CiAgfSwKCiAgX3RhcDogZnVuY3Rpb24oZXZlbnQpIHsKICAgIAogICAgdmFyIHRoYXQgPSAkKHRoaXMpLAogICAgICBkYXRhID0gdGhhdC5kYXRhKCkuem9vbSwKICAgICAgZmxpcCA9IGRhdGEub3B0cy5mbGlwYm9vazsKCiAgICBpZiAoZGF0YS5kcmFnZ2luZ0Nvcm5lciB8fCBkYXRhLmRyYWdnaW5nKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoaXNQYWdlKCQoZXZlbnQudGFyZ2V0KSwgdGhhdCkpIHsKCiAgICAgIHpvb21NZXRob2RzLl9hZGRFdmVudC5jYWxsKHRoYXQsICd0YXAnLCBldmVudCk7CiAgICAgIAogICAgICB2YXIgc2VjdWVuY2UgPSB6b29tTWV0aG9kcy5fZXZlbnRTZXEuY2FsbCh0aGF0KTsKCiAgICAgIGlmIChzZWN1ZW5jZSkKICAgICAgICB0aGF0LnRyaWdnZXIoc2VjdWVuY2UpOwoKICAgIH0KCiAgfSwKCiAgX2FkZEV2ZW50OiBmdW5jdGlvbihldmVudE5hbWUsIGV2ZW50KSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuem9vbSwKICAgICAgdGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCksCiAgICAgIGV2ZW50T2JqZWN0ID0ge25hbWU6IGV2ZW50TmFtZSwgdGltZXN0YW1wOiB0aW1lLCBldmVudDogZXZlbnR9OwoKICAgIGRhdGEuZXZlbnRRdWV1ZS5wdXNoKGV2ZW50T2JqZWN0KTsKCiAgICBpZiAoZGF0YS5ldmVudFF1ZXVlLmxlbmd0aD4xMCkKICAgICAgZGF0YS5ldmVudFF1ZXVlLnNwbGljZSgwLCAxKTsKCiAgfSwKCiAgX2V2ZW50U2VxOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGxpc3QgPSBkYXRhLmV2ZW50UXVldWUsCiAgICAgIGxhc3RFdmVudCA9IGxpc3QubGVuZ3RoLTE7CgogICAgaWYgKGxhc3RFdmVudD4wICYmCiAgICAgIGxpc3RbbGFzdEV2ZW50XS5uYW1lPT0ndGFwJyAmJgogICAgICBsaXN0W2xhc3RFdmVudC0xXS5uYW1lPT0ndGFwJyAmJgogICAgICBsaXN0W2xhc3RFdmVudF0uZXZlbnQucGFnZVggPT0gbGlzdFtsYXN0RXZlbnQtMV0uZXZlbnQucGFnZVggJiYKICAgICAgbGlzdFtsYXN0RXZlbnRdLmV2ZW50LnBhZ2VZID09IGxpc3RbbGFzdEV2ZW50LTFdLmV2ZW50LnBhZ2VZICYmCiAgICAgIGxpc3RbbGFzdEV2ZW50XS50aW1lc3RhbXAtbGlzdFtsYXN0RXZlbnQtMV0udGltZXN0YW1wIDwgMjAwICYmCiAgICAgIGxpc3RbbGFzdEV2ZW50XS50aW1lc3RhbXAtbGlzdFtsYXN0RXZlbnQtMV0udGltZXN0YW1wID4gNTApCiAgICB7CiAgCiAgICAgIHJldHVybiAkLmV4dGVuZChsaXN0W2xhc3RFdmVudF0uZXZlbnQsIHt0eXBlOiAnem9vbS5kb3VibGVUYXAnfSk7CgogICAgfSBlbHNlIGlmIChsaXN0W2xhc3RFdmVudF0ubmFtZT09J3RhcCcpIHsKICAgICAgCiAgICAgIHJldHVybiAkLmV4dGVuZChsaXN0W2xhc3RFdmVudF0uZXZlbnQsIHt0eXBlOiAnem9vbS50YXAnfSk7CgogICAgfQogICAgICAKICB9LAoKICBfcHJlcGFyZVpvb206IGZ1bmN0aW9uICgpIHsKICAgIAogICAgdmFyIGZsaXBQb3MsIG9mZnNldExlZnQgPSAwLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCkuem9vbSwKICAgICAgaW52eiA9IDEvdGhpcy56b29tKCd2YWx1ZScpLAogICAgICBmbGlwID0gZGF0YS5vcHRzLmZsaXBib29rLAogICAgICBkaXIgPSBmbGlwLnR1cm4oJ2RpcmVjdGlvbicpLAogICAgICBmbGlwRGF0YSA9IGZsaXAuZGF0YSgpLAogICAgICBmbGlwT2Zmc2V0ID0gZmxpcC5vZmZzZXQoKSwKICAgICAgdGhpc09mZnNldCA9IHRoaXMub2Zmc2V0KCksCiAgICAgIGZsaXBTaXplID0ge2hlaWdodDogZmxpcC5oZWlnaHQoKX0sCiAgICAgIHZpZXcgPSBmbGlwLnR1cm4oJ3ZpZXcnKTsKCiAgICAgIGlmIChmbGlwLnR1cm4oJ2Rpc3BsYXknKT09J2RvdWJsZScgJiYgZmxpcC5kYXRhKCkub3B0cy5hdXRvQ2VudGVyKSB7CiAgICAgICAgaWYgKCF2aWV3WzBdKSB7CiAgICAgICAgICBmbGlwU2l6ZS53aWR0aCA9IGZsaXAud2lkdGgoKS8yOwogICAgICAgICAgb2Zmc2V0TGVmdCA9IChkaXI9PSdsdHInKSA/IGZsaXBTaXplLndpZHRoIDogMDsKICAgICAgICAgIGZsaXBQb3MgPSBwb2ludDJEKAogICAgICAgICAgICAoZGlyPT0nbHRyJykgPyBmbGlwT2Zmc2V0LmxlZnQtdGhpc09mZnNldC5sZWZ0K2ZsaXBTaXplLndpZHRoIDogZmxpcE9mZnNldC5sZWZ0LXRoaXNPZmZzZXQubGVmdCwKICAgICAgICAgICAgZmxpcE9mZnNldC50b3AtdGhpc09mZnNldC50b3AKICAgICAgICAgICk7CgogICAgICAgIH0gZWxzZSBpZiAoIXZpZXdbMV0pIHsKICAgICAgICAgIGZsaXBTaXplLndpZHRoID0gZmxpcC53aWR0aCgpLzI7CiAgICAgICAgICBvZmZzZXRMZWZ0ID0gKGRpcj09J2x0cicpID8gMCA6IGZsaXBTaXplLndpZHRoOwogICAgICAgICAgZmxpcFBvcyA9IHBvaW50MkQoCiAgICAgICAgICAgIChkaXI9PSdsdHInKSA/IGZsaXBPZmZzZXQubGVmdC10aGlzT2Zmc2V0LmxlZnQgOiBmbGlwT2Zmc2V0LmxlZnQtdGhpc09mZnNldC5sZWZ0K2ZsaXBTaXplLndpZHRoLAogICAgICAgICAgICBmbGlwT2Zmc2V0LnRvcC10aGlzT2Zmc2V0LnRvcAogICAgICAgICAgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZmxpcFNpemUud2lkdGggPSBmbGlwLndpZHRoKCk7CiAgICAgICAgICBmbGlwUG9zID0gcG9pbnQyRCgKICAgICAgICAgICAgZmxpcE9mZnNldC5sZWZ0LXRoaXNPZmZzZXQubGVmdCwKICAgICAgICAgICAgZmxpcE9mZnNldC50b3AtdGhpc09mZnNldC50b3AKICAgICAgICAgICk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGZsaXBTaXplLndpZHRoID0gZmxpcC53aWR0aCgpOwogICAgICAgIGZsaXBQb3MgPSBwb2ludDJEKAogICAgICAgICAgZmxpcE9mZnNldC5sZWZ0LXRoaXNPZmZzZXQubGVmdCwKICAgICAgICAgIGZsaXBPZmZzZXQudG9wLXRoaXNPZmZzZXQudG9wCiAgICAgICAgKTsKICAgICAgfQoKICAgIGlmICghZGF0YS56b29tZXIpIHsKICAgICAgZGF0YS56b29tZXIgPSAkKCc8ZGl2IC8+JywKICAgICAgICB7J2NsYXNzJzogJ3pvb21lcicsCiAgICAgICAgICBjc3M6IHsKICAgICAgICAgICAgb3ZlcmZsb3c6J2hpZGRlbicsCiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgICAgICB6SW5kZXg6ICcxMDAwMDAwJwogICAgICAgICAgfQogICAgICAgIH0pLgogICAgICBtb3VzZWRvd24oZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9KS5hcHBlbmRUbyh0aGlzKTsKICAgIH0KCgogICAgZGF0YS56b29tZXIuY3NzKHsKICAgICAgdG9wOiBmbGlwUG9zLnksCiAgICAgIGxlZnQ6IGZsaXBQb3MueCwKICAgICAgd2lkdGg6IGZsaXBTaXplLndpZHRoLAogICAgICBoZWlnaHQ6IGZsaXBTaXplLmhlaWdodAogICAgfSk7CiAgICAKICAgIHZhciB6b29tZXJWaWV3ID0gdmlldy5qb2luKCcsJyk7CgogICAgaWYgKHpvb21lclZpZXchPWRhdGEuem9vbWVyVmlldykgewoKICAgICAgZGF0YS56b29tZXJWaWV3ID0gem9vbWVyVmlldzsKICAgICAgZGF0YS56b29tZXIuZmluZCgnKicpLnJlbW92ZSgpOwoKICAgICAgZm9yICh2YXIgcCA9IDA7IHA8dmlldy5sZW5ndGg7IHArKykgewoKICAgICAgICBpZiAoIXZpZXdbcF0pCiAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgdmFyIHBvcyA9IGZsaXBEYXRhLnBhZ2VPYmpzW3ZpZXdbcF1dLm9mZnNldCgpLAogICAgICAgICAgcGFnZUVsZW1lbnQgPSAkKGZsaXBEYXRhLnBhZ2VPYmpzW3ZpZXdbcF1dKTsKICAgICAgICAgIAogICAgICAgIHBhZ2VFbGVtZW50LgogICAgICAgICAgY2xvbmUoKS4KICAgICAgICAgIHRyYW5zZm9ybSgnJykuCiAgICAgICAgICBjc3MoewogICAgICAgICAgICB3aWR0aDogcGFnZUVsZW1lbnQud2lkdGgoKSppbnZ6LAogICAgICAgICAgICBoZWlnaHQ6IHBhZ2VFbGVtZW50LmhlaWdodCgpKmludnosCiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgICAgICBkaXNwbGF5OiAnJywKICAgICAgICAgICAgdG9wOiAocG9zLnRvcCAtIGZsaXBPZmZzZXQudG9wKSppbnZ6LAogICAgICAgICAgICBsZWZ0OiAocG9zLmxlZnQgLSBmbGlwT2Zmc2V0LmxlZnQgLSBvZmZzZXRMZWZ0KSppbnZ6CiAgICAgICAgICB9KS4KICAgICAgICAgIGFwcGVuZFRvKGRhdGEuem9vbWVyKTsKICAgICAgfQogICAgfQogICAgCiAgICAKICAgIHJldHVybiB7cG9zOiBmbGlwUG9zLCBzaXplOiBmbGlwU2l6ZX07CgogIH0sCgogIHZhbHVlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb207CgogICAgcmV0dXJuIGRhdGEub3B0cy5mbGlwYm9vay50dXJuKCd6b29tJyk7CiAgfSwKCiAgem9vbUluOiBmdW5jdGlvbihldmVudCkgewoKICAgIHZhciBwb3MsCiAgICAgIHRoYXQgPSB0aGlzLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCkuem9vbSwKICAgICAgZmxpcCA9IGRhdGEub3B0cy5mbGlwYm9vaywKICAgICAgem9vbSA9IGRhdGEub3B0cy5tYXgoKSwKICAgICAgZmxpcE9mZnNldCA9IGZsaXAub2Zmc2V0KCksCiAgICAgIHRoaXNPZmZzZXQgPSB0aGlzLm9mZnNldCgpOwoKICAgIGlmIChkYXRhLnpvb21JbikKICAgICAgcmV0dXJuIHRoaXM7CgogICAgZmxpcC50dXJuKCdzdG9wJyk7CiAgICAKICAgIHZhciBldiA9ICQuRXZlbnQoJ3pvb20uY2hhbmdlJyk7CiAgICB0aGlzLnRyaWdnZXIoZXYsIFt6b29tXSk7CgogICAgaWYgKGV2LmlzRGVmYXVsdFByZXZlbnRlZCgpKQogICAgICByZXR1cm4gdGhpczsKCiAgICB2YXIgYm91bmQgPSB6b29tTWV0aG9kcy5fcHJlcGFyZVpvb20uY2FsbCh0aGlzKSwKICAgICAgZmxpcFBvcyA9IGJvdW5kLnBvcywKICAgICAgY2VudGVyID0gcG9pbnQyRChib3VuZC5zaXplLndpZHRoLzIsIGJvdW5kLnNpemUuaGVpZ2h0LzIpLAogICAgICBwcmVmaXggPSAkLmNzc1ByZWZpeCgpLAogICAgICB0cmFuc2l0aW9uRW5kID0gJC5jc3NUcmFuc2l0aW9uRW5kKCksCiAgICAgIGF1dG9DZW50ZXIgPSBmbGlwLmRhdGEoKS5vcHRzLmF1dG9DZW50ZXI7CgogICAgZGF0YS5zY2FsZSA9IHpvb207CiAgICBmbGlwLmRhdGEoKS5ub0NlbnRlciA9IHRydWU7CgogICAgaWYgKHR5cGVvZihldmVudCkhPSd1bmRlZmluZWQnKSB7CgogICAgICBpZiAoJ3gnIGluIGV2ZW50ICYmICd5JyBpbiBldmVudCkgewogICAgICAgIAogICAgICAgIHBvcyA9IHBvaW50MkQoZXZlbnQueC1mbGlwUG9zLngsIGV2ZW50LnktZmxpcFBvcy55KTsKICAgICAgCiAgICAgIH0gZWxzZSB7CgogICAgICAgIHBvcyA9ICgkLmlzVG91Y2gpID8KICAgICAgICAgIHBvaW50MkQoCiAgICAgICAgICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5wYWdlWC1mbGlwUG9zLngtdGhpc09mZnNldC5sZWZ0LAogICAgICAgICAgICBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0ucGFnZVktZmxpcFBvcy55LXRoaXNPZmZzZXQudG9wCiAgICAgICAgICApCiAgICAgICAgICA6CiAgICAgICAgICBwb2ludDJEKAogICAgICAgICAgICBldmVudC5wYWdlWC1mbGlwUG9zLngtdGhpc09mZnNldC5sZWZ0LAogICAgICAgICAgICBldmVudC5wYWdlWS1mbGlwUG9zLnktdGhpc09mZnNldC50b3AKICAgICAgICAgICk7CgogICAgICB9CgogICAgfSBlbHNlIHsKICAgICAgcG9zID0gcG9pbnQyRChjZW50ZXIueCwgY2VudGVyLnkpOwogICAgfQoKCgogICAgaWYgKHBvcy54PDAgfHwgcG9zLnk8MCB8fCBwb3MueD5ib3VuZC53aWR0aCB8fCBwb3MueT5ib3VuZC5oZWlnaHQpIHsKICAgICAgcG9zLnggPSBjZW50ZXIueDsKICAgICAgcG9zLnkgPSBjZW50ZXIueTsKICAgIH0KCgogICAgdmFyIGNvbXBvc2UgPSBwb2ludDJEKAogICAgICAgIChwb3MueC1jZW50ZXIueCkqem9vbSArIGNlbnRlci54LAogICAgICAgIChwb3MueS1jZW50ZXIueSkqem9vbSArIGNlbnRlci55CiAgICAgICksCiAgICAgIG1vdmUgPSBwb2ludDJEKAogICAgICAgIChib3VuZC5zaXplLndpZHRoKnpvb20+dGhpcy53aWR0aCgpKSA/IHBvcy54LWNvbXBvc2UueCA6IDAsCiAgICAgICAgKGJvdW5kLnNpemUuaGVpZ2h0Knpvb20+dGhpcy5oZWlnaHQoKSkgPyBwb3MueS1jb21wb3NlLnkgOiAwCiAgICAgICksCiAgICAgIG1heE1vdmUgPSBwb2ludDJEKAogICAgICAgIE1hdGguYWJzKGJvdW5kLnNpemUud2lkdGgqem9vbS10aGlzLndpZHRoKCkpLAogICAgICAgIE1hdGguYWJzKGJvdW5kLnNpemUuaGVpZ2h0Knpvb20tdGhpcy5oZWlnaHQoKSkKICAgICAgKSwKICAgICAgbWluTW92ZSA9IHBvaW50MkQoCiAgICAgICAgTWF0aC5taW4oMCwgYm91bmQuc2l6ZS53aWR0aCp6b29tLXRoaXMud2lkdGgoKSksCiAgICAgICAgTWF0aC5taW4oMCwgYm91bmQuc2l6ZS5oZWlnaHQqem9vbS10aGlzLmhlaWdodCgpKQogICAgICApLAogICAgICByZWFsUG9zID0gcG9pbnQyRCgKICAgICAgICBjZW50ZXIueCp6b29tIC0gY2VudGVyLnggLSBmbGlwUG9zLnggLSBtb3ZlLngsCiAgICAgICAgY2VudGVyLnkqem9vbSAtIGNlbnRlci55IC0gZmxpcFBvcy55IC0gbW92ZS55CiAgICAgICk7CgogICAgaWYgKHJlYWxQb3MueT5tYXhNb3ZlLnkpCiAgICAgIG1vdmUueSA9IHJlYWxQb3MueSAtIG1heE1vdmUueSArICBtb3ZlLnk7CiAgICBlbHNlIGlmIChyZWFsUG9zLnk8bWluTW92ZS55KQogICAgICBtb3ZlLnkgPSByZWFsUG9zLnkgLSBtaW5Nb3ZlLnkgKyAgbW92ZS55OwoKICAgIGlmIChyZWFsUG9zLng+bWF4TW92ZS54KQogICAgICBtb3ZlLnggPSByZWFsUG9zLnggLSBtYXhNb3ZlLnggKyAgbW92ZS54OwogICAgZWxzZSBpZiAocmVhbFBvcy54PG1pbk1vdmUueCkKICAgICAgbW92ZS54ID0gcmVhbFBvcy54IC0gbWluTW92ZS54ICsgIG1vdmUueDsKCiAgICByZWFsUG9zID0gcG9pbnQyRCgKICAgICAgY2VudGVyLngqem9vbSAtIGNlbnRlci54IC0gZmxpcFBvcy54IC0gbW92ZS54LAogICAgICBjZW50ZXIueSp6b29tIC0gY2VudGVyLnkgLSBmbGlwUG9zLnkgLSBtb3ZlLnkKICAgICk7CgogICAgdmFyIGNzcyA9IHt9OwoKICAgIGNzc1twcmVmaXgrJ3RyYW5zaXRpb24nXSA9IHByZWZpeCArCiAgICAgICd0cmFuc2Zvcm0gJyArCiAgICAgIGRhdGEub3B0cy5lYXNlRnVuY3Rpb24gKwogICAgICAnICcgKwogICAgICBkYXRhLm9wdHMuZHVyYXRpb24gKwogICAgICAnbXMnOwoKICAgIHZhciB0cmFuc2l0aW9uRW5kQ2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKCiAgICAgIHRoYXQudHJpZ2dlcignem9vbS56b29tSW4nKTsKCiAgICAgIGRhdGEuem9vbUluID0gdHJ1ZTsKCiAgICAgIGRhdGEuZmxpcFBvc2l0aW9uID0gcG9pbnQyRChmbGlwLmNzcygnbGVmdCcpLCBmbGlwLmNzcygndG9wJykpOwoKICAgICAgZmxpcC50dXJuKCd6b29tJywgem9vbSkuY3NzKHsKICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJywKICAgICAgICBtYXJnaW46ICcnLAogICAgICAgIHRvcDowLAogICAgICAgIGxlZnQ6MAogICAgICB9KTsKCiAgICAgIHZhciBmbGlwT2Zmc2V0ID0gZmxpcC5vZmZzZXQoKTsKICAgICAgCiAgICAgIGRhdGEuYXhpcyA9IHBvaW50MkQoCiAgICAgICAgZmxpcE9mZnNldC5sZWZ0IC0gdGhpc09mZnNldC5sZWZ0LAogICAgICAgIGZsaXBPZmZzZXQudG9wIC0gdGhpc09mZnNldC50b3AKICAgICAgKTsKCgogICAgICBpZiAoYXV0b0NlbnRlciAmJiBmbGlwLnR1cm4oJ2Rpc3BsYXknKT09J2RvdWJsZScpCiAgICAgICAgaWYgKChmbGlwLnR1cm4oJ2RpcmVjdGlvbicpPT0nbHRyJyAmJiAhZmxpcC50dXJuKCd2aWV3JylbMF0pIHx8CiAgICAgICAgICAoZmxpcC50dXJuKCdkaXJlY3Rpb24nKT09J3J0bCcgJiYgIWZsaXAudHVybigndmlldycpWzFdKQogICAgICAgICkKICAgICAgICAgIGRhdGEuYXhpcy54ID0gZGF0YS5heGlzLnggKyBmbGlwLndpZHRoKCkvMjsKCiAgICAgIHRoYXQuem9vbSgnc2Nyb2xsJywgcmVhbFBvcyk7CiAgICAgIHRoYXQuYmluZCgkLm1vdXNlRXZlbnRzLmRvd24sIHpvb21NZXRob2RzLl9lTW91c2VEb3duKTsKICAgICAgdGhhdC5iaW5kKCQubW91c2VFdmVudHMubW92ZSwgem9vbU1ldGhvZHMuX2VNb3VzZU1vdmUpOwogICAgICAkKGRvY3VtZW50KS5iaW5kKCQubW91c2VFdmVudHMudXAsIGRhdGEubW91c2V1cEV2ZW50KTsKICAgICAgdGhhdC5iaW5kKCdtb3VzZXdoZWVsJywgem9vbU1ldGhvZHMuX2VNb3VzZVdoZWVsKTsKCiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgZGF0YS56b29tZXIuaGlkZSgpOwogICAgICAgIGRhdGEuem9vbWVyLnJlbW92ZSgpOwogICAgICAgIGRhdGEuem9vbWVyID0gbnVsbDsKICAgICAgICBkYXRhLnpvb21lclZpZXcgPSBudWxsOwogICAgICB9LCA1MCk7CgogICAgfTsKCiAgICBkYXRhLnpvb21lci5jc3MoY3NzKS5zaG93KCk7CgogICAgaWYgKHRyYW5zaXRpb25FbmQpCiAgICAgIGRhdGEuem9vbWVyLmJpbmQodHJhbnNpdGlvbkVuZCwgZnVuY3Rpb24oKSB7CiAgICAgICAgJCh0aGlzKS51bmJpbmQodHJhbnNpdGlvbkVuZCk7CiAgICAgICAgdHJhbnNpdGlvbkVuZENhbGxiYWNrKCk7CiAgICAgIH0pOwogICAgZWxzZQogICAgICBzZXRUaW1lb3V0KHRyYW5zaXRpb25FbmRDYWxsYmFjaywgZGF0YS5vcHRzLmR1cmF0aW9uKTsKCiAgICBkYXRhLnpvb21lci50cmFuc2Zvcm0odHJhbnNsYXRlKG1vdmUueCwgbW92ZS55LCB0cnVlKSArIHNjYWxlKHpvb20sIHRydWUpKTsKICAgIAogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgem9vbU91dDogZnVuY3Rpb24oZHVyYXRpb24pIHsKCiAgICB2YXIgcG9zLCBtb3ZlLAogICAgICB0aGF0ID0gdGhpcywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGZsaXAgPSBkYXRhLm9wdHMuZmxpcGJvb2ssCiAgICAgIHpvb20gPSAxLAogICAgICBzY2FsaW5nID0gem9vbS9kYXRhLnNjYWxlLAogICAgICBwcmVmaXggPSAkLmNzc1ByZWZpeCgpLAogICAgICB0cmFuc2l0aW9uRW5kID0gJC5jc3NUcmFuc2l0aW9uRW5kKCksCiAgICAgIHRoaXNPZmZzZXQgPSB0aGlzLm9mZnNldCgpOwoKICAgIGR1cmF0aW9uID0gKHR5cGVvZihkdXJhdGlvbikhPSd1bmRlZmluZWQnKSA/IGR1cmF0aW9uIDogZGF0YS5vcHRzLmR1cmF0aW9uOwoKICAgIGlmICghZGF0YS56b29tSW4pCiAgICAgIHJldHVybjsKICAgICAgCiAgICB2YXIgZXYgPSAkLkV2ZW50KCd6b29tLmNoYW5nZScpOwogICAgdGhpcy50cmlnZ2VyKGV2LCBbem9vbV0pOwoKICAgIGlmIChldi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkKICAgICAgcmV0dXJuIHRoaXM7CgogICAgZGF0YS56b29tSW4gPSBmYWxzZTsKICAgIGRhdGEuc2NhbGUgPSB6b29tOwoKICAgIGZsaXAuZGF0YSgpLm5vQ2VudGVyID0gZmFsc2U7CgogICAgdGhhdC51bmJpbmQoJC5tb3VzZUV2ZW50cy5kb3duLCB6b29tTWV0aG9kcy5fZU1vdXNlRG93bik7CiAgICB0aGF0LnVuYmluZCgkLm1vdXNlRXZlbnRzLm1vdmUsIHpvb21NZXRob2RzLl9lTW91c2VNb3ZlKTsKICAgICQoZG9jdW1lbnQpLnVuYmluZCgkLm1vdXNlRXZlbnRzLnVwLCBkYXRhLm1vdXNldXBFdmVudCk7CiAgICB0aGF0LnVuYmluZCgnbW91c2V3aGVlbCcsIHpvb21NZXRob2RzLl9lTW91c2VXaGVlbCk7CgogICAgdmFyIGNzcyA9IHt9OwoKICAgIGNzc1twcmVmaXgrJ3RyYW5zaXRpb24nXSA9IHByZWZpeCArCiAgICAgICd0cmFuc2Zvcm0gJyArCiAgICAgIGRhdGEub3B0cy5lYXNlRnVuY3Rpb24gKwogICAgICAnICcgKwogICAgICBkdXJhdGlvbiArCiAgICAgICdtcyc7CgogICAgZmxpcC5jc3MoY3NzKTsKCiAgICB2YXIgZmxpcERlc1BvcywKICAgICAgdG1wID0gJCgnPGRpdiAvPicsIHsKICAgICAgICBjc3M6IHsKICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLAogICAgICAgICAgdG9wOiBkYXRhLmZsaXBQb3NpdGlvbi55LAogICAgICAgICAgbGVmdDogZGF0YS5mbGlwUG9zaXRpb24ueCwKICAgICAgICAgIHdpZHRoOiBmbGlwLndpZHRoKCkqc2NhbGluZywKICAgICAgICAgIGhlaWdodDogZmxpcC5oZWlnaHQoKSpzY2FsaW5nLAogICAgICAgICAgYmFja2dyb3VuZDogJ2JsdWUnCiAgICAgICAgfQogICAgICB9KS5hcHBlbmRUbyhmbGlwLnBhcmVudCgpKTsKCiAgICBmbGlwRGVzUG9zID0gcG9pbnQyRCgKICAgICAgdG1wLm9mZnNldCgpLmxlZnQtdGhpc09mZnNldC5sZWZ0LAogICAgICB0bXAub2Zmc2V0KCkudG9wLXRoaXNPZmZzZXQudG9wCiAgICApOwogICAgCgogICAgdG1wLnJlbW92ZSgpOwoKICAgIHZhciBhdXRvQ2VudGVyID0gZmxpcC5kYXRhKCkub3B0cy5hdXRvQ2VudGVyOwoKICAgIGlmIChhdXRvQ2VudGVyICYmIGZsaXAudHVybignZGlzcGxheScpPT0nZG91YmxlJykgewoKICAgICAgaWYgKCFmbGlwLnR1cm4oJ3ZpZXcnKVswXSkKICAgICAgICBmbGlwRGVzUG9zLnggPSAoZmxpcC50dXJuKCdkaXJlY3Rpb24nKT09J2x0cicpID8KICAgICAgICAgIGZsaXBEZXNQb3MueC10bXAud2lkdGgoKS80IDoKICAgICAgICAgIGZsaXBEZXNQb3MueCt0bXAud2lkdGgoKS80OwogICAgICBlbHNlIGlmICghZmxpcC50dXJuKCd2aWV3JylbMV0pCiAgICAgICAgZmxpcERlc1Bvcy54ID0gKGZsaXAudHVybignZGlyZWN0aW9uJyk9PSdsdHInKSA/CiAgICAgICAgICBmbGlwRGVzUG9zLngrdG1wLndpZHRoKCkvNCA6CiAgICAgICAgICBmbGlwRGVzUG9zLngtdG1wLndpZHRoKCkvNDsKICAgIH0KCiAgICB2YXIgZmxpcFJlYWxQb3MgPSAkLmZpbmRQb3MoZmxpcFswXSk7CiAgICAgIAogICAgbW92ZSA9IHBvaW50MkQoCiAgICAgIC1mbGlwLndpZHRoKCkvMiAtIGZsaXBSZWFsUG9zLmxlZnQgKyB0bXAud2lkdGgoKS8yICsgZmxpcERlc1Bvcy54ICsgdGhpc09mZnNldC5sZWZ0LAogICAgICAtZmxpcC5oZWlnaHQoKS8yIC0gZmxpcFJlYWxQb3MudG9wICsgdG1wLmhlaWdodCgpLzIgKyBmbGlwRGVzUG9zLnkgKyB0aGlzT2Zmc2V0LnRvcCk7CgogICAgdmFyIHRyYW5zaXRpb25FbmRDYWxsYmFjayA9IGZ1bmN0aW9uKCkgewogICAgCiAgICAgIGlmIChmbGlwWzBdLnN0eWxlLnJlbW92ZVByb3BlcnR5KSB7CiAgICAgICAgCiAgICAgICAgZmxpcFswXS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShwcmVmaXgrJ3RyYW5zaXRpb24nKTsKICAgICAgICBmbGlwLnRyYW5zZm9ybSgKICAgICAgICAgIChmbGlwLnR1cm4oJ29wdGlvbnMnKS5hY2NlbGVyYXRpb24pID8gdHJhbnNsYXRlKDAsIDAsIHRydWUpIDogJycpLnR1cm4oJ3pvb20nLCAxKTsKICAgICAgICBmbGlwWzBdLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdtYXJnaW4nKTsKICAgICAgICBmbGlwLmNzcyh7CiAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJywKICAgICAgICAgIHRvcDogZGF0YS5mbGlwUG9zaXRpb24ueSwKICAgICAgICAgIGxlZnQ6IGRhdGEuZmxpcFBvc2l0aW9uLngKICAgICAgICB9KTsKCiAgICAgIH0gZWxzZSB7CiAgICAgICAgCiAgICAgICAgZmxpcC50cmFuc2Zvcm0oJ25vbmUnKS4KICAgICAgICAgIHR1cm4oJ3pvb20nLCAxKS4KICAgICAgICAgIGNzcyh7CiAgICAgICAgICAgIG1hcmdpbjogJycsCiAgICAgICAgICAgIHRvcDogZGF0YS5mbGlwUG9zaXRpb24ueSwKICAgICAgICAgICAgbGVmdDogZGF0YS5mbGlwUG9zaXRpb24ueCwKICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScKICAgICAgICB9KTsKCiAgICAgIH0KCiAgICAgIGlmIChhdXRvQ2VudGVyKQogICAgICAgIGZsaXAudHVybignY2VudGVyJyk7CgogICAgICB0aGF0LnRyaWdnZXIoJ3pvb20uem9vbU91dCcpOwoKICAgIH07CgogICAgaWYgKGR1cmF0aW9uPT09MCkgewogIAogICAgICB0cmFuc2l0aW9uRW5kQ2FsbGJhY2soKTsKCiAgICB9IGVsc2UgaWYgKHRyYW5zaXRpb25FbmQpIHsKCiAgICAgIGZsaXAuYmluZCh0cmFuc2l0aW9uRW5kLCBmdW5jdGlvbigpIHsKCiAgICAgICAgJCh0aGlzKS51bmJpbmQodHJhbnNpdGlvbkVuZCk7CiAgICAgICAgdHJhbnNpdGlvbkVuZENhbGxiYWNrKCk7CgogICAgICB9KTsKCiAgICAgIGZsaXAudHJhbnNmb3JtKHRyYW5zbGF0ZShtb3ZlLngsIG1vdmUueSwgdHJ1ZSkgKyBzY2FsZShzY2FsaW5nLCB0cnVlKSk7CgogICAgfSBlbHNlIHsKCiAgICAgIHNldFRpbWVvdXQodHJhbnNpdGlvbkVuZENhbGxiYWNrLCBkdXJhdGlvbik7CiAgICAgIGZsaXAudHJhbnNmb3JtKHRyYW5zbGF0ZShtb3ZlLngsIG1vdmUueSwgdHJ1ZSkgKyBzY2FsZShzY2FsaW5nLCB0cnVlKSk7CgogICAgfQoKICAgIHJldHVybiB0aGlzOwogIH0sCgogIGZsaXBib29rV2lkdGg6IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGZsaXBib29rID0gZGF0YS5vcHRzLmZsaXBib29rLAogICAgICB2aWV3ID0gZmxpcGJvb2sudHVybigndmlldycpOwoKICAgIHJldHVybiAoZmxpcGJvb2sudHVybignZGlzcGxheScpPT0nZG91YmxlJyAmJiAoIXZpZXdbMF0gfHwgIXZpZXdbMV0pKSA/CiAgICAgIGZsaXBib29rLndpZHRoKCkvMgogICAgICA6CiAgICAgIGZsaXBib29rLndpZHRoKCk7CgogIH0sCgogIHNjcm9sbDogZnVuY3Rpb24odG8sIHVubGltaXRlZCwgYW5pbWF0ZSkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGZsaXAgPSBkYXRhLm9wdHMuZmxpcGJvb2ssCiAgICAgIGZsaXBXaWR0aCA9IHRoaXMuem9vbSgnZmxpcGJvb2tXaWR0aCcpLAogICAgICBwcmVmaXggPSAkLmNzc1ByZWZpeCgpOwogICAgCiAgICBpZiAoaGFzM2QpIHsKCiAgICAgIHZhciBjc3MgPSB7fTsKCiAgICAgIGlmIChhbmltYXRlKSB7CiAgICAgICAgY3NzW3ByZWZpeCsndHJhbnNpdGlvbiddID0gcHJlZml4ICsgJ3RyYW5zZm9ybSAyMDBtcyc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3NzW3ByZWZpeCsndHJhbnNpdGlvbiddID0gJ25vbmUnOwogICAgICB9CgogICAgICBmbGlwLmNzcyhjc3MpOwogICAgICBmbGlwLnRyYW5zZm9ybSh0cmFuc2xhdGUoLWRhdGEuYXhpcy54IC0gdG8ueCwgLWRhdGEuYXhpcy55IC0gdG8ueSwgdHJ1ZSkpOwoKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICBmbGlwLmNzcyh7dG9wOiAtZGF0YS5heGlzLnkgLSB0by55LCBsZWZ0OiAtZGF0YS5heGlzLnggLSB0by54fSk7CgogICAgfQoKICAgIGlmICghdW5saW1pdGVkKSB7CgogICAgICB2YXIgb3V0LAogICAgICAgIG1pbkJvdW5kID0gcG9pbnQyRCgKICAgICAgICAgIE1hdGgubWluKDAsIChmbGlwV2lkdGgtdGhpcy53aWR0aCgpKS8yKSwKICAgICAgICAgIE1hdGgubWluKDAsIChmbGlwLmhlaWdodCgpLXRoaXMuaGVpZ2h0KCkpLzIpKSwKICAgICAgICBtYXhCb3VuZCA9IHBvaW50MkQoCiAgICAgICAgICAoZmxpcFdpZHRoPnRoaXMud2lkdGgoKSkgPyBmbGlwV2lkdGgtdGhpcy53aWR0aCgpIDogKGZsaXBXaWR0aC10aGlzLndpZHRoKCkpLzIsCiAgICAgICAgICAoZmxpcC5oZWlnaHQoKT50aGlzLmhlaWdodCgpKSA/IGZsaXAuaGVpZ2h0KCktdGhpcy5oZWlnaHQoKSA6IChmbGlwLmhlaWdodCgpLXRoaXMuaGVpZ2h0KCkpLzIKICAgICAgICApOwoKICAgICAgaWYgKHRvLnk8bWluQm91bmQueSkgewogICAgICAgIHRvLnkgPSBtaW5Cb3VuZC55OwogICAgICAgIG91dCA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAodG8ueT5tYXhCb3VuZC55KSB7CiAgICAgICAgdG8ueSA9IG1heEJvdW5kLnk7CiAgICAgICAgb3V0ID0gdHJ1ZTsKICAgICAgfQoKICAgICAgaWYgKHRvLng8bWluQm91bmQueCkgewogICAgICAgIHRvLnggPSBtaW5Cb3VuZC54OwogICAgICAgIG91dCA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAodG8ueD5tYXhCb3VuZC54KSB7CiAgICAgICAgdG8ueCA9IG1heEJvdW5kLng7CiAgICAgICAgb3V0ID0gdHJ1ZTsKICAgICAgfQoKICAgICAgaWYgKG91dCkgewogICAgICAgIHRoaXMuem9vbSgnc2Nyb2xsJywgdG8sIHRydWUsIHRydWUpOwogICAgICB9CgogICAgfQoKICAgIGRhdGEuc2Nyb2xsUG9zID0gcG9pbnQyRCh0by54LCB0by55KTsKCiAgfSwKCiAgcmVzaXplOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGZsaXAgPSBkYXRhLm9wdHMuZmxpcGJvb2s7CiAgICAKICAgIGlmICh0aGlzLnpvb20oJ3ZhbHVlJyk+MSkgewoKICAgICAgdmFyICBmbGlwT2Zmc2V0ID0gZmxpcC5vZmZzZXQoKSwKICAgICAgICB0aGlzT2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTsKCiAgICAgIGRhdGEuYXhpcyA9ICBwb2ludDJEKAogICAgICAgIChmbGlwT2Zmc2V0LmxlZnQgLSB0aGlzT2Zmc2V0LmxlZnQpICsgKGRhdGEuYXhpcy54ICsgZGF0YS5zY3JvbGxQb3MueCksCiAgICAgICAgKGZsaXBPZmZzZXQudG9wIC0gdGhpc09mZnNldC50b3ApICsgKGRhdGEuYXhpcy55ICsgZGF0YS5zY3JvbGxQb3MueSkKICAgICAgKTsKCiAgICAgIGlmIChmbGlwLnR1cm4oJ2Rpc3BsYXknKT09J2RvdWJsZScgJiYKICAgICAgICBmbGlwLnR1cm4oJ2RpcmVjdGlvbicpPT0nbHRyJyAmJgogICAgICAgICFmbGlwLnR1cm4oJ3ZpZXcnKVswXSkKICAgICAgICAgIGRhdGEuYXhpcy54ID0gZGF0YS5heGlzLnggKyBmbGlwLndpZHRoKCkvMjsKCiAgICAgIHRoaXMuem9vbSgnc2Nyb2xsJywgZGF0YS5zY3JvbGxQb3MpOwogICAgfQoKICB9LAoKICBfZVpvb206IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgZmxpcFBvcywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGZsaXAgPSBkYXRhLm9wdHMuZmxpcGJvb2ssCiAgICAgIHZpZXcgPSBmbGlwLnR1cm4oJ3ZpZXcnKTsKCiAgICBmb3IgKHZhciBwID0gMDsgcDx2aWV3Lmxlbmd0aDsgcCsrKSB7CiAgICAgIGlmICh2aWV3W3BdKQogICAgICAgIHRoaXMudHJpZ2dlcignem9vbS5yZXNpemUnLAogICAgICAgICAgW2RhdGEuc2NhbGUsIHZpZXdbcF0sIGZsaXAuZGF0YSgpLnBhZ2VPYmpzW3ZpZXdbcF1dXQogICAgICAgICk7CiAgICB9CiAgfSwKCiAgX2VTdGFydDogZnVuY3Rpb24oZXZlbnQsIHBhZ2VPYmopIHsKCiAgICBpZiAodGhpcy56b29tKCd2YWx1ZScpIT0xKSB7CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICB9CgoKICB9LAoKICBfZVR1cm5pbmc6IGZ1bmN0aW9uKGV2ZW50LCBwYWdlLCB2aWV3KSB7CgogICAgdmFyIHRoYXQgPSB0aGlzLAogICAgICB6b29tID0gdGhpcy56b29tKCd2YWx1ZScpLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCkuem9vbSwKICAgICAgZmxpcCA9IGRhdGEub3B0cy5mbGlwYm9vazsKCiAgICBkYXRhLnBhZ2UgPSBmbGlwLnR1cm4oJ3BhZ2UnKTsKCiAgICBpZiAoem9vbSE9MSkgewogICAgICBmb3IgKHZhciBwID0gMDsgcDx2aWV3Lmxlbmd0aDsgcCsrKSB7CiAgICAgICAgaWYgKHZpZXdbcF0pCiAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3pvb20ucmVzaXplJywKICAgICAgICAgICAgW3pvb20sIHZpZXdbcF0sIGZsaXAuZGF0YSgpLnBhZ2VPYmpzW3ZpZXdbcF1dXQogICAgICAgICAgKTsKICAgICAgfQoKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICB0aGF0Lnpvb20oJ3Jlc2l6ZScpOwogICAgICB9LCAwKTsKICAgIH0KCiAgfSwKCiAgX2VUdXJuZWQ6IGZ1bmN0aW9uIChldmVudCwgcGFnZSkgewogICAgCiAgICBpZiAodGhpcy56b29tKCd2YWx1ZScpIT0xKSB7CiAgICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgICBkYXRhID0gdGhpcy5kYXRhKCkuem9vbSwKICAgICAgICBmbGlwID0gZGF0YS5vcHRzLmZsaXBib29rOwoKICAgICAgaWYgKHBhZ2U+ZGF0YS5wYWdlKQogICAgICAgIHRoaXMuem9vbSgnc2Nyb2xsJywKICAgICAgICAgIHBvaW50MkQoMCwgZGF0YS5zY3JvbGxQb3MueSksIGZhbHNlLCB0cnVlKTsKICAgICAgICAKICAgICAgZWxzZSBpZiAocGFnZTxkYXRhLnBhZ2UpCiAgICAgICAgdGhpcy56b29tKCdzY3JvbGwnLAogICAgICAgICAgcG9pbnQyRChmbGlwLndpZHRoKCksIGRhdGEuc2Nyb2xsUG9zLnkpLCBmYWxzZSwgdHJ1ZSk7CiAgICAKICAgIH0KICB9LAoKICBfZVByZXNzZWQ6IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YSgpLnpvb207CiAgICBkYXRhLmRyYWdnaW5nQ29ybmVyID0gdHJ1ZTsKCiAgfSwKCiAgX2VSZWxlYXNlZDogZnVuY3Rpb24oKSB7CgogICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoKS56b29tOwoKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgIGRhdGEuZHJhZ2dpbmdDb3JuZXIgPSBmYWxzZTsKICAgIH0sIDEpOwoKICB9LAoKICBfZU1vdXNlRG93bjogZnVuY3Rpb24oZXZlbnQpIHsKICAgIAogICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoKS56b29tOwoKICAgIGRhdGEuZHJhZ2dpbmdDdXIgPSAoJC5pc1RvdWNoKSA/CiAgICAgIHBvaW50MkQoCiAgICAgICAgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VYLAogICAgICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5wYWdlWQogICAgICApCiAgICAgIDoKICAgICAgcG9pbnQyRChldmVudC5wYWdlWCwgZXZlbnQucGFnZVkpOwogICAgCiAgICByZXR1cm4gZmFsc2U7CiAgfSwKCiAgX2VNb3VzZU1vdmU6IGZ1bmN0aW9uKGV2ZW50KSB7CgogICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoKS56b29tOwogICAgICAgIAogICAgaWYgKGRhdGEuZHJhZ2dpbmdDdXIpIHsKCiAgICAgIGRhdGEuZHJhZ2dpbmcgPSB0cnVlOwoKICAgICAgdmFyIGN1ciA9ICgkLmlzVG91Y2gpID8KICAgICAgICBwb2ludDJEKAogICAgICAgICAgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VYLAogICAgICAgICAgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VZCiAgICAgICAgKQogICAgICAgIDoKICAgICAgICBwb2ludDJEKGV2ZW50LnBhZ2VYLCBldmVudC5wYWdlWSksCiAgICAgICAgbW90aW9uID0gcG9pbnQyRCgKICAgICAgICAgIGN1ci54LSBkYXRhLmRyYWdnaW5nQ3VyLngsCiAgICAgICAgICBjdXIueS1kYXRhLmRyYWdnaW5nQ3VyLnkKICAgICAgICApOwoKICAgICAgJCh0aGlzKS56b29tKCdzY3JvbGwnLAogICAgICAgIHBvaW50MkQoCiAgICAgICAgICBkYXRhLnNjcm9sbFBvcy54LW1vdGlvbi54LAogICAgICAgICAgZGF0YS5zY3JvbGxQb3MueS1tb3Rpb24ueQogICAgICAgICksIHRydWUKICAgICAgKTsKCiAgICAgIGRhdGEuZHJhZ2dpbmdDdXIgPSBjdXI7CgogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogIH0sCgogIF9lTW91c2VVcDogZnVuY3Rpb24oZXZlbnQpIHsKCiAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YSgpLnpvb207CgogICAgaWYgKGRhdGEuZHJhZ2dpbmcpIHsKICAgICAgJCh0aGlzKS56b29tKCdzY3JvbGwnLCBkYXRhLnNjcm9sbFBvcyk7CiAgICB9CgogICAgZGF0YS5kcmFnZ2luZ0N1ciA9IG51bGw7CgogICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgZGF0YS5kcmFnZ2luZyA9IGZhbHNlOwogICAgfSwgMSk7CgogIH0sCgogIF9lTW91c2VXaGVlbDogZnVuY3Rpb24oZXZlbnQsIGRlbHRhLCBkZWx0YVgsIGRlbHRhWSkgewogICAgCiAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YSgpLnpvb20sCiAgICAgIGN1ciA9IHBvaW50MkQoCiAgICAgICAgZGF0YS5zY3JvbGxQb3MueCArIGRlbHRhWCoxMCwKICAgICAgICBkYXRhLnNjcm9sbFBvcy55IC0gZGVsdGFZKjEwCiAgICAgICk7CiAgICAKICAgICQodGhpcykuem9vbSgnc2Nyb2xsJywgY3VyLCBmYWxzZSwgdHJ1ZSk7CiAgICAKICB9LAoKICBfZVRvdWNoU3RhcnQ6IGZ1bmN0aW9uKGV2ZW50LCBwYWdlKSB7CgogICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoKS56b29tLAogICAgICBmbGlwID0gZGF0YS5vcHRzLmZsaXBib29rLAogICAgICBmaW5nZXIgPSBwb2ludDJEKAogICAgICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5wYWdlWCwKICAgICAgICBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0ucGFnZVkKICAgICAgKTsKCiAgICBkYXRhLnRvdWNoID0ge307CiAgICBkYXRhLnRvdWNoLmluaXRpYWwgPSBmaW5nZXI7CiAgICBkYXRhLnRvdWNoLmxhc3QgPSBmaW5nZXI7CiAgICBkYXRhLnRvdWNoLnRpbWVzdGFtcCA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CiAgICBkYXRhLnRvdWNoLnNwZWVkID0gcG9pbnQyRCgwLCAwKTsKCiAgfSwKCiAgX2VUb3VjaE1vdmU6IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAKICAgIHZhciBkYXRhID0gJCh0aGlzKS5kYXRhKCkuem9vbSwKICAgICAgem9vbSA9ICQodGhpcykuem9vbSgndmFsdWUnKSwKICAgICAgZmxpcCA9IGRhdGEub3B0cy5mbGlwYm9vaywKICAgICAgdGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCksCiAgICAgIGZpbmdlciA9IHBvaW50MkQoCiAgICAgICAgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VYLAogICAgICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5wYWdlWQogICAgICApOwogICAgCiAgICBpZiAoZGF0YS50b3VjaCAmJiB6b29tPT0xICYmICFmbGlwLmRhdGEoKS5tb3VzZUFjdGlvbikgewogICAgICBkYXRhLnRvdWNoLm1vdGlvbiA9IHBvaW50MkQoCiAgICAgICAgZmluZ2VyLngtZGF0YS50b3VjaC5sYXN0LngsCiAgICAgICAgZmluZ2VyLnktZGF0YS50b3VjaC5sYXN0LnkpOwoKICAgIAogICAgICBkYXRhLnRvdWNoLnNwZWVkLnggPSAoZGF0YS50b3VjaC5zcGVlZC54PT09MCkgPwogICAgICAgIGRhdGEudG91Y2gubW90aW9uLnggLyAodGltZS1kYXRhLnRvdWNoLnRpbWVzdGFtcCkgOgogICAgICAgIChkYXRhLnRvdWNoLnNwZWVkLnggKyAoZGF0YS50b3VjaC5tb3Rpb24ueCAvICh0aW1lLWRhdGEudG91Y2gudGltZXN0YW1wKSkpLzI7CgogICAgICBkYXRhLnRvdWNoLmxhc3QgPSBmaW5nZXI7CiAgICAgIGRhdGEudG91Y2gudGltZXN0YW1wID0gdGltZTsKICAgIH0KCiAgfSwKCiAgX2VUb3VjaEVuZDogZnVuY3Rpb24oZXZlbnQpIHsKCiAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YSgpLnpvb207CgogICAgaWYgKGRhdGEudG91Y2ggJiYgJCh0aGlzKS56b29tKCd2YWx1ZScpPT0xKSB7CgogICAgICB2YXIgeSA9IE1hdGguYWJzKGRhdGEudG91Y2guaW5pdGlhbC55IC0gZGF0YS50b3VjaC5sYXN0LnkpOwoKICAgICAgaWYgKHk8NTAgJiYgKGRhdGEudG91Y2guc3BlZWQueDwtMSB8fCBkYXRhLnRvdWNoLmxhc3QueC1kYXRhLnRvdWNoLmluaXRpYWwueDwtMTAwKSkgewogICAgICAgIAogICAgICAgIHRoaXMudHJpZ2dlcignem9vbS5zd2lwZUxlZnQnKTsKCiAgICAgIH0gZWxzZSBpZih5PDUwICYmIChkYXRhLnRvdWNoLnNwZWVkLng+MSB8fCBkYXRhLnRvdWNoLmxhc3QueC1kYXRhLnRvdWNoLmluaXRpYWwueD4xMDApKXsKICAgICAgICAKICAgICAgICB0aGlzLnRyaWdnZXIoJ3pvb20uc3dpcGVSaWdodCcpOwoKICAgICAgfQoKICAgIH0KICB9LAoKICBfZURlc3Ryb3lpbmc6IGZ1bmN0aW9uKCkgewoKICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGZsaXAgPSBkYXRhLm9wdHMuZmxpcGJvb2ssCiAgICAgIGV2ZW50cyA9IFsKICAgICAgICAndGFwJywKICAgICAgICAnZG91YmxlVGFwJywKICAgICAgICAncmVzaXplJywKICAgICAgICAnem9vbUluJywKICAgICAgICAnem9vbU91dCcsCiAgICAgICAgJ3N3aXBlTGVmdCcsCiAgICAgICAgJ3N3aXBlUmlnaHQnCiAgICAgIF07CgogICAgdGhpcy56b29tKCd6b29tT3V0JywgMCk7CgogICAgJC5lYWNoKGV2ZW50cywgZnVuY3Rpb24oaW5kZXgsIGV2ZW50TmFtZSkgewogICAgICB0aGF0LnVuYmluZCgnem9vbS4nICsgZXZlbnROYW1lKTsKICAgIH0pOwogICAgCiAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gZGF0YS5mbGlwYm9va0V2ZW50cykgewogICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEuZmxpcGJvb2tFdmVudHMsIGV2ZW50TmFtZSkpIHsKICAgICAgICBmbGlwLnVuYmluZChldmVudE5hbWUsIGRhdGEuZmxpcGJvb2tFdmVudHNbZXZlbnROYW1lXSk7CiAgICAgIH0KICAgIH0KCiAgICBmbGlwLnVuYmluZCgndG91Y2hzdGFydCcsIGRhdGEuZXZlbnRUb3VjaFN0YXJ0ICkuCiAgICAgIHVuYmluZCgndG91Y2htb3ZlJywgZGF0YS5ldmVudFRvdWNoTW92ZSkuCiAgICAgIHVuYmluZCgndG91Y2hlbmQnLCBkYXRhLmV2ZW50VG91Y2hFbmQpOwogICAgICAgIAogICAgdGhpcy51bmJpbmQoJ3RvdWNoc3RhcnQnLCB6b29tTWV0aG9kcy5fdGFwKS4KICAgICAgdW5iaW5kKCdjbGljaycsIHpvb21NZXRob2RzLl90YXApOwoKICAgIGRhdGEgPSBudWxsOwogICAgdGhpcy5kYXRhKCkuem9vbSA9IG51bGw7CgogIH0KfTsKCmZ1bmN0aW9uIGlzUGFnZShlbGVtZW50LCBsYXN0KSB7CgogIGlmIChlbGVtZW50WzBdPT1sYXN0WzBdKQogICAgcmV0dXJuIGZhbHNlOwoKICBpZiAoZWxlbWVudC5hdHRyKCdwYWdlJykpCiAgICByZXR1cm4gdHJ1ZTsKICAKICByZXR1cm4gKGVsZW1lbnQucGFyZW50KClbMF0pID8KICAgIGlzUGFnZShlbGVtZW50LnBhcmVudCgpLCBsYXN0KQogICAgOgogIGZhbHNlOwoKfQoKZnVuY3Rpb24gZXJyb3IobWVzc2FnZSkgewoKICBmdW5jdGlvbiBUdXJuSnNFcnJvcihtZXNzYWdlKSB7CiAgICB0aGlzLm5hbWUgPSAiVHVybkpzRXJyb3IiOwogICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKICB9CgogIFR1cm5Kc0Vycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpOwogIFR1cm5Kc0Vycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR1cm5Kc0Vycm9yOwogIHJldHVybiBuZXcgVHVybkpzRXJyb3IobWVzc2FnZSk7Cgp9CgpmdW5jdGlvbiB0cmFuc2xhdGUoeCwgeSwgdXNlM2QpIHsKICAKICByZXR1cm4gKGhhczNkICYmIHVzZTNkKSA/ICcgdHJhbnNsYXRlM2QoJyArIHggKyAncHgsJyArIHkgKyAncHgsIDBweCkgJwogIDogJyB0cmFuc2xhdGUoJyArIHggKyAncHgsICcgKyB5ICsgJ3B4KSAnOwoKfQoKZnVuY3Rpb24gc2NhbGUodiwgdXNlM2QpIHsKICAKICByZXR1cm4gKGhhczNkICYmIHVzZTNkKSA/ICcgc2NhbGUzZCgnICsgdiArICcsICcgKyB2ICsgJywgMSkgJwogIDogJyBzY2FsZSgnICsgdiArICcpICc7Cgp9CgpmdW5jdGlvbiBwb2ludDJEKHgsIHkpIHsKICAKICByZXR1cm4ge3g6IHgsIHk6IHl9OwoKfQoKZnVuY3Rpb24gYmluZChmdW5jLCBjb250ZXh0KSB7CgogIHJldHVybiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7CiAgfTsKCn0KCiQuZXh0ZW5kKCQuZm4sIHsKICB6b29tOiBmdW5jdGlvbigpIHsKICAgIAogICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7CgogICAgaWYgKCFhcmdzWzBdIHx8IHR5cGVvZihhcmdzWzBdKT09J29iamVjdCcpCiAgICAgIHJldHVybiB6b29tTWV0aG9kcy5pbml0LmFwcGx5KCQodGhpc1swXSksIGFyZ3MpOwogICAgZWxzZSBpZiAoem9vbU1ldGhvZHNbYXJnc1swXV0pCiAgICAgIHJldHVybiB6b29tTWV0aG9kc1thcmdzWzBdXS5hcHBseSgkKHRoaXNbMF0pLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7CiAgICBlbHNlCiAgICAgIHRocm93IGVycm9yKGFyZ3NbMF0gKyAnIGlzIG5vdCBhIG1ldGhvZCcpOwoKICB9Cn0pOwoKfSkoalF1ZXJ5KTsK'></script>
<script id="fb_html_magazine_js_magazine_js" src='data:/text/plain;base64,LyohCiAqIFZ1ZS5qcyB2Mi41LjE3CiAqIChjKSAyMDE0LTIwMTggRXZhbiBZb3UKICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgogKi8KIWZ1bmN0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUodCk6ZS5WdWU9dCgpfSh0aGlzLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB5PU9iamVjdC5mcmVlemUoe30pO2Z1bmN0aW9uIE0oZSl7cmV0dXJuIG51bGw9PWV9ZnVuY3Rpb24gRChlKXtyZXR1cm4gbnVsbCE9ZX1mdW5jdGlvbiBTKGUpe3JldHVybiEwPT09ZX1mdW5jdGlvbiBUKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlfHwic3ltYm9sIj09dHlwZW9mIGV8fCJib29sZWFuIj09dHlwZW9mIGV9ZnVuY3Rpb24gUChlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZX12YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1yLmNhbGwoZSl9ZnVuY3Rpb24gaShlKXt2YXIgdD1wYXJzZUZsb2F0KFN0cmluZyhlKSk7cmV0dXJuIDA8PXQmJk1hdGguZmxvb3IodCk9PT10JiZpc0Zpbml0ZShlKX1mdW5jdGlvbiB0KGUpe3JldHVybiBudWxsPT1lPyIiOiJvYmplY3QiPT10eXBlb2YgZT9KU09OLnN0cmluZ2lmeShlLG51bGwsMik6U3RyaW5nKGUpfWZ1bmN0aW9uIEYoZSl7dmFyIHQ9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4odCk/ZTp0fWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPWUuc3BsaXQoIiwiKSxpPTA7aTxyLmxlbmd0aDtpKyspbltyW2ldXT0hMDtyZXR1cm4gdD9mdW5jdGlvbihlKXtyZXR1cm4gbltlLnRvTG93ZXJDYXNlKCldfTpmdW5jdGlvbihlKXtyZXR1cm4gbltlXX19dmFyIGM9cygic2xvdCxjb21wb25lbnQiLCEwKSx1PXMoImtleSxyZWYsc2xvdCxzbG90LXNjb3BlLGlzIik7ZnVuY3Rpb24gZihlLHQpe2lmKGUubGVuZ3RoKXt2YXIgbj1lLmluZGV4T2YodCk7aWYoLTE8bilyZXR1cm4gZS5zcGxpY2UobiwxKX19dmFyIG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBwKGUsdCl7cmV0dXJuIG4uY2FsbChlLHQpfWZ1bmN0aW9uIGUodCl7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV18fChuW2VdPXQoZSkpfX12YXIgbz0vLShcdykvZyxnPWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShvLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/dC50b1VwcGVyQ2FzZSgpOiIifSl9KSxkPWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKX0pLGE9L1xCKFtBLVpdKS9nLF89ZShmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKGEsIi0kMSIpLnRvTG93ZXJDYXNlKCl9KTt2YXIgdj1GdW5jdGlvbi5wcm90b3R5cGUuYmluZD9mdW5jdGlvbihlLHQpe3JldHVybiBlLmJpbmQodCl9OmZ1bmN0aW9uKG4scil7ZnVuY3Rpb24gZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoO3JldHVybiB0PzE8dD9uLmFwcGx5KHIsYXJndW1lbnRzKTpuLmNhbGwocixlKTpuLmNhbGwocil9cmV0dXJuIGUuX2xlbmd0aD1uLmxlbmd0aCxlfTtmdW5jdGlvbiBoKGUsdCl7dD10fHwwO2Zvcih2YXIgbj1lLmxlbmd0aC10LHI9bmV3IEFycmF5KG4pO24tLTspcltuXT1lW24rdF07cmV0dXJuIHJ9ZnVuY3Rpb24gbShlLHQpe2Zvcih2YXIgbiBpbiB0KWVbbl09dFtuXTtyZXR1cm4gZX1mdW5jdGlvbiBiKGUpe2Zvcih2YXIgdD17fSxuPTA7bjxlLmxlbmd0aDtuKyspZVtuXSYmbSh0LGVbbl0pO3JldHVybiB0fWZ1bmN0aW9uICQoZSx0LG4pe312YXIgTz1mdW5jdGlvbihlLHQsbil7cmV0dXJuITF9LHc9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9O2Z1bmN0aW9uIEModCxuKXtpZih0PT09bilyZXR1cm4hMDt2YXIgZT1QKHQpLHI9UChuKTtpZighZXx8IXIpcmV0dXJuIWUmJiFyJiZTdHJpbmcodCk9PT1TdHJpbmcobik7dHJ5e3ZhciBpPUFycmF5LmlzQXJyYXkodCksbz1BcnJheS5pc0FycmF5KG4pO2lmKGkmJm8pcmV0dXJuIHQubGVuZ3RoPT09bi5sZW5ndGgmJnQuZXZlcnkoZnVuY3Rpb24oZSx0KXtyZXR1cm4gQyhlLG5bdF0pfSk7aWYoaXx8bylyZXR1cm4hMTt2YXIgYT1PYmplY3Qua2V5cyh0KSxzPU9iamVjdC5rZXlzKG4pO3JldHVybiBhLmxlbmd0aD09PXMubGVuZ3RoJiZhLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBDKHRbZV0sbltlXSl9KX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24geChlLHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKEMoZVtuXSx0KSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBSKGUpe3ZhciB0PSExO3JldHVybiBmdW5jdGlvbigpe3R8fCh0PSEwLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dmFyIEU9ImRhdGEtc2VydmVyLXJlbmRlcmVkIixrPVsiY29tcG9uZW50IiwiZGlyZWN0aXZlIiwiZmlsdGVyIl0sQT1bImJlZm9yZUNyZWF0ZSIsImNyZWF0ZWQiLCJiZWZvcmVNb3VudCIsIm1vdW50ZWQiLCJiZWZvcmVVcGRhdGUiLCJ1cGRhdGVkIiwiYmVmb3JlRGVzdHJveSIsImRlc3Ryb3llZCIsImFjdGl2YXRlZCIsImRlYWN0aXZhdGVkIiwiZXJyb3JDYXB0dXJlZCJdLGo9e29wdGlvbk1lcmdlU3RyYXRlZ2llczpPYmplY3QuY3JlYXRlKG51bGwpLHNpbGVudDohMSxwcm9kdWN0aW9uVGlwOiExLGRldnRvb2xzOiExLHBlcmZvcm1hbmNlOiExLGVycm9ySGFuZGxlcjpudWxsLHdhcm5IYW5kbGVyOm51bGwsaWdub3JlZEVsZW1lbnRzOltdLGtleUNvZGVzOk9iamVjdC5jcmVhdGUobnVsbCksaXNSZXNlcnZlZFRhZzpPLGlzUmVzZXJ2ZWRBdHRyOk8saXNVbmtub3duRWxlbWVudDpPLGdldFRhZ05hbWVzcGFjZTokLHBhcnNlUGxhdGZvcm1UYWdOYW1lOncsbXVzdFVzZVByb3A6TyxfbGlmZWN5Y2xlSG9va3M6QX07ZnVuY3Rpb24gTihlLHQsbixyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ISFyLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfXZhciBMPS9bXlx3LiRdLzt2YXIgSSxIPSJfX3Byb3RvX18iaW57fSxCPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LFU9InVuZGVmaW5lZCIhPXR5cGVvZiBXWEVudmlyb25tZW50JiYhIVdYRW52aXJvbm1lbnQucGxhdGZvcm0sVj1VJiZXWEVudmlyb25tZW50LnBsYXRmb3JtLnRvTG93ZXJDYXNlKCksej1CJiZ3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLEs9eiYmL21zaWV8dHJpZGVudC8udGVzdCh6KSxKPXomJjA8ei5pbmRleE9mKCJtc2llIDkuMCIpLHE9eiYmMDx6LmluZGV4T2YoImVkZ2UvIiksVz0oeiYmei5pbmRleE9mKCJhbmRyb2lkIikseiYmL2lwaG9uZXxpcGFkfGlwb2R8aW9zLy50ZXN0KHopfHwiaW9zIj09PVYpLEc9KHomJi9jaHJvbWVcL1xkKy8udGVzdCh6KSx7fS53YXRjaCksWj0hMTtpZihCKXRyeXt2YXIgWD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe1o9ITB9fSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QtcGFzc2l2ZSIsbnVsbCxYKX1jYXRjaChlKXt9dmFyIFk9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09SSYmKEk9IUImJiFVJiYidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmInNlcnZlciI9PT1nbG9iYWwucHJvY2Vzcy5lbnYuVlVFX0VOViksSX0sUT1CJiZ3aW5kb3cuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztmdW5jdGlvbiBlZShlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmL25hdGl2ZSBjb2RlLy50ZXN0KGUudG9TdHJpbmcoKSl9dmFyIHRlLG5lPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlZShTeW1ib2wpJiYidW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJmVlKFJlZmxlY3Qub3duS2V5cyk7dGU9InVuZGVmaW5lZCIhPXR5cGVvZiBTZXQmJmVlKFNldCk/U2V0OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuc2V0PU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4hMD09PXRoaXMuc2V0W2VdfSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5zZXRbZV09ITB9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZXQ9T2JqZWN0LmNyZWF0ZShudWxsKX0sZX0oKTt2YXIgcmU9JCxpZT0wLG9lPWZ1bmN0aW9uKCl7dGhpcy5pZD1pZSsrLHRoaXMuc3Vicz1bXX07b2UucHJvdG90eXBlLmFkZFN1Yj1mdW5jdGlvbihlKXt0aGlzLnN1YnMucHVzaChlKX0sb2UucHJvdG90eXBlLnJlbW92ZVN1Yj1mdW5jdGlvbihlKXtmKHRoaXMuc3VicyxlKX0sb2UucHJvdG90eXBlLmRlcGVuZD1mdW5jdGlvbigpe29lLnRhcmdldCYmb2UudGFyZ2V0LmFkZERlcCh0aGlzKX0sb2UucHJvdG90eXBlLm5vdGlmeT1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnN1YnMuc2xpY2UoKSx0PTAsbj1lLmxlbmd0aDt0PG47dCsrKWVbdF0udXBkYXRlKCl9LG9lLnRhcmdldD1udWxsO3ZhciBhZT1bXTtmdW5jdGlvbiBzZShlKXtvZS50YXJnZXQmJmFlLnB1c2gob2UudGFyZ2V0KSxvZS50YXJnZXQ9ZX1mdW5jdGlvbiBjZSgpe29lLnRhcmdldD1hZS5wb3AoKX12YXIgbGU9ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzKXt0aGlzLnRhZz1lLHRoaXMuZGF0YT10LHRoaXMuY2hpbGRyZW49bix0aGlzLnRleHQ9cix0aGlzLmVsbT1pLHRoaXMubnM9dm9pZCAwLHRoaXMuY29udGV4dD1vLHRoaXMuZm5Db250ZXh0PXZvaWQgMCx0aGlzLmZuT3B0aW9ucz12b2lkIDAsdGhpcy5mblNjb3BlSWQ9dm9pZCAwLHRoaXMua2V5PXQmJnQua2V5LHRoaXMuY29tcG9uZW50T3B0aW9ucz1hLHRoaXMuY29tcG9uZW50SW5zdGFuY2U9dm9pZCAwLHRoaXMucGFyZW50PXZvaWQgMCx0aGlzLnJhdz0hMSx0aGlzLmlzU3RhdGljPSExLHRoaXMuaXNSb290SW5zZXJ0PSEwLHRoaXMuaXNDb21tZW50PSExLHRoaXMuaXNDbG9uZWQ9ITEsdGhpcy5pc09uY2U9ITEsdGhpcy5hc3luY0ZhY3Rvcnk9cyx0aGlzLmFzeW5jTWV0YT12b2lkIDAsdGhpcy5pc0FzeW5jUGxhY2Vob2xkZXI9ITF9LHVlPXtjaGlsZDp7Y29uZmlndXJhYmxlOiEwfX07dWUuY2hpbGQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29tcG9uZW50SW5zdGFuY2V9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxlLnByb3RvdHlwZSx1ZSk7dmFyIGZlPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPSIiKTt2YXIgdD1uZXcgbGU7cmV0dXJuIHQudGV4dD1lLHQuaXNDb21tZW50PSEwLHR9O2Z1bmN0aW9uIHBlKGUpe3JldHVybiBuZXcgbGUodm9pZCAwLHZvaWQgMCx2b2lkIDAsU3RyaW5nKGUpKX1mdW5jdGlvbiBkZShlKXt2YXIgdD1uZXcgbGUoZS50YWcsZS5kYXRhLGUuY2hpbGRyZW4sZS50ZXh0LGUuZWxtLGUuY29udGV4dCxlLmNvbXBvbmVudE9wdGlvbnMsZS5hc3luY0ZhY3RvcnkpO3JldHVybiB0Lm5zPWUubnMsdC5pc1N0YXRpYz1lLmlzU3RhdGljLHQua2V5PWUua2V5LHQuaXNDb21tZW50PWUuaXNDb21tZW50LHQuZm5Db250ZXh0PWUuZm5Db250ZXh0LHQuZm5PcHRpb25zPWUuZm5PcHRpb25zLHQuZm5TY29wZUlkPWUuZm5TY29wZUlkLHQuaXNDbG9uZWQ9ITAsdH12YXIgdmU9QXJyYXkucHJvdG90eXBlLGhlPU9iamVjdC5jcmVhdGUodmUpO1sicHVzaCIsInBvcCIsInNoaWZ0IiwidW5zaGlmdCIsInNwbGljZSIsInNvcnQiLCJyZXZlcnNlIl0uZm9yRWFjaChmdW5jdGlvbihvKXt2YXIgYT12ZVtvXTtOKGhlLG8sZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD1hcmd1bWVudHMubGVuZ3RoO3QtLTspZVt0XT1hcmd1bWVudHNbdF07dmFyIG4scj1hLmFwcGx5KHRoaXMsZSksaT10aGlzLl9fb2JfXztzd2l0Y2gobyl7Y2FzZSJwdXNoIjpjYXNlInVuc2hpZnQiOm49ZTticmVhaztjYXNlInNwbGljZSI6bj1lLnNsaWNlKDIpfXJldHVybiBuJiZpLm9ic2VydmVBcnJheShuKSxpLmRlcC5ub3RpZnkoKSxyfSl9KTt2YXIgbWU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGUpLHllPSEwO2Z1bmN0aW9uIGdlKGUpe3llPWV9dmFyIF9lPWZ1bmN0aW9uKGUpeyh0aGlzLnZhbHVlPWUsdGhpcy5kZXA9bmV3IG9lLHRoaXMudm1Db3VudD0wLE4oZSwiX19vYl9fIix0aGlzKSxBcnJheS5pc0FycmF5KGUpKT8oKEg/YmU6JGUpKGUsaGUsbWUpLHRoaXMub2JzZXJ2ZUFycmF5KGUpKTp0aGlzLndhbGsoZSl9O2Z1bmN0aW9uIGJlKGUsdCxuKXtlLl9fcHJvdG9fXz10fWZ1bmN0aW9uICRlKGUsdCxuKXtmb3IodmFyIHI9MCxpPW4ubGVuZ3RoO3I8aTtyKyspe3ZhciBvPW5bcl07TihlLG8sdFtvXSl9fWZ1bmN0aW9uIHdlKGUsdCl7dmFyIG47aWYoUChlKSYmIShlIGluc3RhbmNlb2YgbGUpKXJldHVybiBwKGUsIl9fb2JfXyIpJiZlLl9fb2JfXyBpbnN0YW5jZW9mIF9lP249ZS5fX29iX186eWUmJiFZKCkmJihBcnJheS5pc0FycmF5KGUpfHxsKGUpKSYmT2JqZWN0LmlzRXh0ZW5zaWJsZShlKSYmIWUuX2lzVnVlJiYobj1uZXcgX2UoZSkpLHQmJm4mJm4udm1Db3VudCsrLG59ZnVuY3Rpb24gQ2UobixlLHIsdCxpKXt2YXIgbz1uZXcgb2UsYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSk7aWYoIWF8fCExIT09YS5jb25maWd1cmFibGUpe3ZhciBzPWEmJmEuZ2V0O3N8fDIhPT1hcmd1bWVudHMubGVuZ3RofHwocj1uW2VdKTt2YXIgYz1hJiZhLnNldCxsPSFpJiZ3ZShyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1zP3MuY2FsbChuKTpyO3JldHVybiBvZS50YXJnZXQmJihvLmRlcGVuZCgpLGwmJihsLmRlcC5kZXBlbmQoKSxBcnJheS5pc0FycmF5KGUpJiZmdW5jdGlvbiBlKHQpe2Zvcih2YXIgbj12b2lkIDAscj0wLGk9dC5sZW5ndGg7cjxpO3IrKykobj10W3JdKSYmbi5fX29iX18mJm4uX19vYl9fLmRlcC5kZXBlbmQoKSxBcnJheS5pc0FycmF5KG4pJiZlKG4pfShlKSkpLGV9LHNldDpmdW5jdGlvbihlKXt2YXIgdD1zP3MuY2FsbChuKTpyO2U9PT10fHxlIT1lJiZ0IT10fHwoYz9jLmNhbGwobixlKTpyPWUsbD0haSYmd2UoZSksby5ub3RpZnkoKSl9fSl9fWZ1bmN0aW9uIHhlKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpJiZpKHQpKXJldHVybiBlLmxlbmd0aD1NYXRoLm1heChlLmxlbmd0aCx0KSxlLnNwbGljZSh0LDEsbiksbjtpZih0IGluIGUmJiEodCBpbiBPYmplY3QucHJvdG90eXBlKSlyZXR1cm4gZVt0XT1uO3ZhciByPWUuX19vYl9fO3JldHVybiBlLl9pc1Z1ZXx8ciYmci52bUNvdW50P246cj8oQ2Uoci52YWx1ZSx0LG4pLHIuZGVwLm5vdGlmeSgpLG4pOmVbdF09bn1mdW5jdGlvbiBrZShlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkmJmkodCkpZS5zcGxpY2UodCwxKTtlbHNle3ZhciBuPWUuX19vYl9fO2UuX2lzVnVlfHxuJiZuLnZtQ291bnR8fHAoZSx0KSYmKGRlbGV0ZSBlW3RdLG4mJm4uZGVwLm5vdGlmeSgpKX19X2UucHJvdG90eXBlLndhbGs9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PU9iamVjdC5rZXlzKGUpLG49MDtuPHQubGVuZ3RoO24rKylDZShlLHRbbl0pfSxfZS5wcm90b3R5cGUub2JzZXJ2ZUFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl3ZShlW3RdKX07dmFyIEFlPWoub3B0aW9uTWVyZ2VTdHJhdGVnaWVzO2Z1bmN0aW9uIE9lKGUsdCl7aWYoIXQpcmV0dXJuIGU7Zm9yKHZhciBuLHIsaSxvPU9iamVjdC5rZXlzKHQpLGE9MDthPG8ubGVuZ3RoO2ErKylyPWVbbj1vW2FdXSxpPXRbbl0scChlLG4pP2wocikmJmwoaSkmJk9lKHIsaSk6eGUoZSxuLGkpO3JldHVybiBlfWZ1bmN0aW9uIFNlKG4scixpKXtyZXR1cm4gaT9mdW5jdGlvbigpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiByP3IuY2FsbChpLGkpOnIsdD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmNhbGwoaSxpKTpuO3JldHVybiBlP09lKGUsdCk6dH06cj9uP2Z1bmN0aW9uKCl7cmV0dXJuIE9lKCJmdW5jdGlvbiI9PXR5cGVvZiByP3IuY2FsbCh0aGlzLHRoaXMpOnIsImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5jYWxsKHRoaXMsdGhpcyk6bil9OnI6bn1mdW5jdGlvbiBUZShlLHQpe3JldHVybiB0P2U/ZS5jb25jYXQodCk6QXJyYXkuaXNBcnJheSh0KT90Olt0XTplfWZ1bmN0aW9uIEVlKGUsdCxuLHIpe3ZhciBpPU9iamVjdC5jcmVhdGUoZXx8bnVsbCk7cmV0dXJuIHQ/bShpLHQpOml9QWUuZGF0YT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4/U2UoZSx0LG4pOnQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6U2UoZSx0KX0sQS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0FlW2VdPVRlfSksay5mb3JFYWNoKGZ1bmN0aW9uKGUpe0FlW2UrInMiXT1FZX0pLEFlLndhdGNoPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9PT1HJiYoZT12b2lkIDApLHQ9PT1HJiYodD12b2lkIDApLCF0KXJldHVybiBPYmplY3QuY3JlYXRlKGV8fG51bGwpO2lmKCFlKXJldHVybiB0O3ZhciBpPXt9O2Zvcih2YXIgbyBpbiBtKGksZSksdCl7dmFyIGE9aVtvXSxzPXRbb107YSYmIUFycmF5LmlzQXJyYXkoYSkmJihhPVthXSksaVtvXT1hP2EuY29uY2F0KHMpOkFycmF5LmlzQXJyYXkocyk/czpbc119cmV0dXJuIGl9LEFlLnByb3BzPUFlLm1ldGhvZHM9QWUuaW5qZWN0PUFlLmNvbXB1dGVkPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCFlKXJldHVybiB0O3ZhciBpPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIG0oaSxlKSx0JiZtKGksdCksaX0sQWUucHJvdmlkZT1TZTt2YXIgamU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD9lOnR9O2Z1bmN0aW9uIE5lKG4scixpKXsiZnVuY3Rpb24iPT10eXBlb2YgciYmKHI9ci5vcHRpb25zKSxmdW5jdGlvbihlLHQpe3ZhciBuPWUucHJvcHM7aWYobil7dmFyIHIsaSxvPXt9O2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHI9bi5sZW5ndGg7ci0tOykic3RyaW5nIj09dHlwZW9mKGk9bltyXSkmJihvW2coaSldPXt0eXBlOm51bGx9KTtlbHNlIGlmKGwobikpZm9yKHZhciBhIGluIG4paT1uW2FdLG9bZyhhKV09bChpKT9pOnt0eXBlOml9O2UucHJvcHM9b319KHIpLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5pbmplY3Q7aWYobil7dmFyIHI9ZS5pbmplY3Q9e307aWYoQXJyYXkuaXNBcnJheShuKSlmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKylyW25baV1dPXtmcm9tOm5baV19O2Vsc2UgaWYobChuKSlmb3IodmFyIG8gaW4gbil7dmFyIGE9bltvXTtyW29dPWwoYSk/bSh7ZnJvbTpvfSxhKTp7ZnJvbTphfX19fShyKSxmdW5jdGlvbihlKXt2YXIgdD1lLmRpcmVjdGl2ZXM7aWYodClmb3IodmFyIG4gaW4gdCl7dmFyIHI9dFtuXTsiZnVuY3Rpb24iPT10eXBlb2YgciYmKHRbbl09e2JpbmQ6cix1cGRhdGU6cn0pfX0ocik7dmFyIGU9ci5leHRlbmRzO2lmKGUmJihuPU5lKG4sZSxpKSksci5taXhpbnMpZm9yKHZhciB0PTAsbz1yLm1peGlucy5sZW5ndGg7dDxvO3QrKyluPU5lKG4sci5taXhpbnNbdF0saSk7dmFyIGEscz17fTtmb3IoYSBpbiBuKWMoYSk7Zm9yKGEgaW4gcilwKG4sYSl8fGMoYSk7ZnVuY3Rpb24gYyhlKXt2YXIgdD1BZVtlXXx8amU7c1tlXT10KG5bZV0scltlXSxpLGUpfXJldHVybiBzfWZ1bmN0aW9uIExlKGUsdCxuLHIpe2lmKCJzdHJpbmciPT10eXBlb2Ygbil7dmFyIGk9ZVt0XTtpZihwKGksbikpcmV0dXJuIGlbbl07dmFyIG89ZyhuKTtpZihwKGksbykpcmV0dXJuIGlbb107dmFyIGE9ZChvKTtyZXR1cm4gcChpLGEpP2lbYV06aVtuXXx8aVtvXXx8aVthXX19ZnVuY3Rpb24gSWUoZSx0LG4scil7dmFyIGk9dFtlXSxvPSFwKG4sZSksYT1uW2VdLHM9UGUoQm9vbGVhbixpLnR5cGUpO2lmKC0xPHMpaWYobyYmIXAoaSwiZGVmYXVsdCIpKWE9ITE7ZWxzZSBpZigiIj09PWF8fGE9PT1fKGUpKXt2YXIgYz1QZShTdHJpbmcsaS50eXBlKTsoYzwwfHxzPGMpJiYoYT0hMCl9aWYodm9pZCAwPT09YSl7YT1mdW5jdGlvbihlLHQsbil7aWYoIXAodCwiZGVmYXVsdCIpKXJldHVybjt2YXIgcj10LmRlZmF1bHQ7aWYoZSYmZS4kb3B0aW9ucy5wcm9wc0RhdGEmJnZvaWQgMD09PWUuJG9wdGlvbnMucHJvcHNEYXRhW25dJiZ2b2lkIDAhPT1lLl9wcm9wc1tuXSlyZXR1cm4gZS5fcHJvcHNbbl07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHImJiJGdW5jdGlvbiIhPT1NZSh0LnR5cGUpP3IuY2FsbChlKTpyfShyLGksZSk7dmFyIGw9eWU7Z2UoITApLHdlKGEpLGdlKGwpfXJldHVybiBhfWZ1bmN0aW9uIE1lKGUpe3ZhciB0PWUmJmUudG9TdHJpbmcoKS5tYXRjaCgvXlxzKmZ1bmN0aW9uIChcdyspLyk7cmV0dXJuIHQ/dFsxXToiIn1mdW5jdGlvbiBEZShlLHQpe3JldHVybiBNZShlKT09PU1lKHQpfWZ1bmN0aW9uIFBlKGUsdCl7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIERlKHQsZSk/MDotMTtmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjtuKyspaWYoRGUodFtuXSxlKSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBGZShlLHQsbil7aWYodClmb3IodmFyIHI9dDtyPXIuJHBhcmVudDspe3ZhciBpPXIuJG9wdGlvbnMuZXJyb3JDYXB0dXJlZDtpZihpKWZvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKXRyeXtpZighMT09PWlbb10uY2FsbChyLGUsdCxuKSlyZXR1cm59Y2F0Y2goZSl7UmUoZSxyLCJlcnJvckNhcHR1cmVkIGhvb2siKX19UmUoZSx0LG4pfWZ1bmN0aW9uIFJlKGUsdCxuKXtpZihqLmVycm9ySGFuZGxlcil0cnl7cmV0dXJuIGouZXJyb3JIYW5kbGVyLmNhbGwobnVsbCxlLHQsbil9Y2F0Y2goZSl7SGUoZSxudWxsLCJjb25maWcuZXJyb3JIYW5kbGVyIil9SGUoZSx0LG4pfWZ1bmN0aW9uIEhlKGUsdCxuKXtpZighQiYmIVV8fCJ1bmRlZmluZWQiPT10eXBlb2YgY29uc29sZSl0aHJvdyBlO2NvbnNvbGUuZXJyb3IoZSl9dmFyIEJlLFVlLFZlPVtdLHplPSExO2Z1bmN0aW9uIEtlKCl7emU9ITE7Zm9yKHZhciBlPVZlLnNsaWNlKDApLHQ9VmUubGVuZ3RoPTA7dDxlLmxlbmd0aDt0KyspZVt0XSgpfXZhciBKZT0hMTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHNldEltbWVkaWF0ZSYmZWUoc2V0SW1tZWRpYXRlKSlVZT1mdW5jdGlvbigpe3NldEltbWVkaWF0ZShLZSl9O2Vsc2UgaWYoInVuZGVmaW5lZCI9PXR5cGVvZiBNZXNzYWdlQ2hhbm5lbHx8IWVlKE1lc3NhZ2VDaGFubmVsKSYmIltvYmplY3QgTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcl0iIT09TWVzc2FnZUNoYW5uZWwudG9TdHJpbmcoKSlVZT1mdW5jdGlvbigpe3NldFRpbWVvdXQoS2UsMCl9O2Vsc2V7dmFyIHFlPW5ldyBNZXNzYWdlQ2hhbm5lbCxXZT1xZS5wb3J0MjtxZS5wb3J0MS5vbm1lc3NhZ2U9S2UsVWU9ZnVuY3Rpb24oKXtXZS5wb3N0TWVzc2FnZSgxKX19aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBQcm9taXNlJiZlZShQcm9taXNlKSl7dmFyIEdlPVByb21pc2UucmVzb2x2ZSgpO0JlPWZ1bmN0aW9uKCl7R2UudGhlbihLZSksVyYmc2V0VGltZW91dCgkKX19ZWxzZSBCZT1VZTtmdW5jdGlvbiBaZShlLHQpe3ZhciBuO2lmKFZlLnB1c2goZnVuY3Rpb24oKXtpZihlKXRyeXtlLmNhbGwodCl9Y2F0Y2goZSl7RmUoZSx0LCJuZXh0VGljayIpfWVsc2UgbiYmbih0KX0pLHplfHwoemU9ITAsSmU/VWUoKTpCZSgpKSwhZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBQcm9taXNlKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtuPWV9KX12YXIgWGU9bmV3IHRlO2Z1bmN0aW9uIFllKGUpeyFmdW5jdGlvbiBlKHQsbil7dmFyIHIsaTt2YXIgbz1BcnJheS5pc0FycmF5KHQpO2lmKCFvJiYhUCh0KXx8T2JqZWN0LmlzRnJvemVuKHQpfHx0IGluc3RhbmNlb2YgbGUpcmV0dXJuO2lmKHQuX19vYl9fKXt2YXIgYT10Ll9fb2JfXy5kZXAuaWQ7aWYobi5oYXMoYSkpcmV0dXJuO24uYWRkKGEpfWlmKG8pZm9yKHI9dC5sZW5ndGg7ci0tOyllKHRbcl0sbik7ZWxzZSBmb3IoaT1PYmplY3Qua2V5cyh0KSxyPWkubGVuZ3RoO3ItLTspZSh0W2lbcl1dLG4pfShlLFhlKSxYZS5jbGVhcigpfXZhciBRZSxldD1lKGZ1bmN0aW9uKGUpe3ZhciB0PSImIj09PWUuY2hhckF0KDApLG49In4iPT09KGU9dD9lLnNsaWNlKDEpOmUpLmNoYXJBdCgwKSxyPSIhIj09PShlPW4/ZS5zbGljZSgxKTplKS5jaGFyQXQoMCk7cmV0dXJue25hbWU6ZT1yP2Uuc2xpY2UoMSk6ZSxvbmNlOm4sY2FwdHVyZTpyLHBhc3NpdmU6dH19KTtmdW5jdGlvbiB0dChlKXtmdW5jdGlvbiBpKCl7dmFyIGU9YXJndW1lbnRzLHQ9aS5mbnM7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQuYXBwbHkobnVsbCxhcmd1bWVudHMpO2Zvcih2YXIgbj10LnNsaWNlKCkscj0wO3I8bi5sZW5ndGg7cisrKW5bcl0uYXBwbHkobnVsbCxlKX1yZXR1cm4gaS5mbnM9ZSxpfWZ1bmN0aW9uIG50KGUsdCxuLHIsaSl7dmFyIG8sYSxzLGM7Zm9yKG8gaW4gZSlhPWVbb10scz10W29dLGM9ZXQobyksTShhKXx8KE0ocyk/KE0oYS5mbnMpJiYoYT1lW29dPXR0KGEpKSxuKGMubmFtZSxhLGMub25jZSxjLmNhcHR1cmUsYy5wYXNzaXZlLGMucGFyYW1zKSk6YSE9PXMmJihzLmZucz1hLGVbb109cykpO2ZvcihvIGluIHQpTShlW29dKSYmcigoYz1ldChvKSkubmFtZSx0W29dLGMuY2FwdHVyZSl9ZnVuY3Rpb24gcnQoZSx0LG4pe3ZhciByO2UgaW5zdGFuY2VvZiBsZSYmKGU9ZS5kYXRhLmhvb2t8fChlLmRhdGEuaG9vaz17fSkpO3ZhciBpPWVbdF07ZnVuY3Rpb24gbygpe24uYXBwbHkodGhpcyxhcmd1bWVudHMpLGYoci5mbnMsbyl9TShpKT9yPXR0KFtvXSk6RChpLmZucykmJlMoaS5tZXJnZWQpPyhyPWkpLmZucy5wdXNoKG8pOnI9dHQoW2ksb10pLHIubWVyZ2VkPSEwLGVbdF09cn1mdW5jdGlvbiBpdChlLHQsbixyLGkpe2lmKEQodCkpe2lmKHAodCxuKSlyZXR1cm4gZVtuXT10W25dLGl8fGRlbGV0ZSB0W25dLCEwO2lmKHAodCxyKSlyZXR1cm4gZVtuXT10W3JdLGl8fGRlbGV0ZSB0W3JdLCEwfXJldHVybiExfWZ1bmN0aW9uIG90KGUpe3JldHVybiBUKGUpP1twZShlKV06QXJyYXkuaXNBcnJheShlKT9mdW5jdGlvbiBlKHQsbil7dmFyIHI9W107dmFyIGksbyxhLHM7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylNKG89dFtpXSl8fCJib29sZWFuIj09dHlwZW9mIG98fChhPXIubGVuZ3RoLTEscz1yW2FdLEFycmF5LmlzQXJyYXkobyk/MDxvLmxlbmd0aCYmKGF0KChvPWUobywobnx8IiIpKyJfIitpKSlbMF0pJiZhdChzKSYmKHJbYV09cGUocy50ZXh0K29bMF0udGV4dCksby5zaGlmdCgpKSxyLnB1c2guYXBwbHkocixvKSk6VChvKT9hdChzKT9yW2FdPXBlKHMudGV4dCtvKToiIiE9PW8mJnIucHVzaChwZShvKSk6YXQobykmJmF0KHMpP3JbYV09cGUocy50ZXh0K28udGV4dCk6KFModC5faXNWTGlzdCkmJkQoby50YWcpJiZNKG8ua2V5KSYmRChuKSYmKG8ua2V5PSJfX3ZsaXN0IituKyJfIitpKyJfXyIpLHIucHVzaChvKSkpO3JldHVybiByfShlKTp2b2lkIDB9ZnVuY3Rpb24gYXQoZSl7cmV0dXJuIEQoZSkmJkQoZS50ZXh0KSYmITE9PT1lLmlzQ29tbWVudH1mdW5jdGlvbiBzdChlLHQpe3JldHVybihlLl9fZXNNb2R1bGV8fG5lJiYiTW9kdWxlIj09PWVbU3ltYm9sLnRvU3RyaW5nVGFnXSkmJihlPWUuZGVmYXVsdCksUChlKT90LmV4dGVuZChlKTplfWZ1bmN0aW9uIGN0KGUpe3JldHVybiBlLmlzQ29tbWVudCYmZS5hc3luY0ZhY3Rvcnl9ZnVuY3Rpb24gbHQoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIG49ZVt0XTtpZihEKG4pJiYoRChuLmNvbXBvbmVudE9wdGlvbnMpfHxjdChuKSkpcmV0dXJuIG59fWZ1bmN0aW9uIHV0KGUsdCxuKXtuP1FlLiRvbmNlKGUsdCk6UWUuJG9uKGUsdCl9ZnVuY3Rpb24gZnQoZSx0KXtRZS4kb2ZmKGUsdCl9ZnVuY3Rpb24gcHQoZSx0LG4pe1FlPWUsbnQodCxufHx7fSx1dCxmdCksUWU9dm9pZCAwfWZ1bmN0aW9uIGR0KGUsdCl7dmFyIG49e307aWYoIWUpcmV0dXJuIG47Zm9yKHZhciByPTAsaT1lLmxlbmd0aDtyPGk7cisrKXt2YXIgbz1lW3JdLGE9by5kYXRhO2lmKGEmJmEuYXR0cnMmJmEuYXR0cnMuc2xvdCYmZGVsZXRlIGEuYXR0cnMuc2xvdCxvLmNvbnRleHQhPT10JiZvLmZuQ29udGV4dCE9PXR8fCFhfHxudWxsPT1hLnNsb3QpKG4uZGVmYXVsdHx8KG4uZGVmYXVsdD1bXSkpLnB1c2gobyk7ZWxzZXt2YXIgcz1hLnNsb3QsYz1uW3NdfHwobltzXT1bXSk7InRlbXBsYXRlIj09PW8udGFnP2MucHVzaC5hcHBseShjLG8uY2hpbGRyZW58fFtdKTpjLnB1c2gobyl9fWZvcih2YXIgbCBpbiBuKW5bbF0uZXZlcnkodnQpJiZkZWxldGUgbltsXTtyZXR1cm4gbn1mdW5jdGlvbiB2dChlKXtyZXR1cm4gZS5pc0NvbW1lbnQmJiFlLmFzeW5jRmFjdG9yeXx8IiAiPT09ZS50ZXh0fWZ1bmN0aW9uIGh0KGUsdCl7dD10fHx7fTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylBcnJheS5pc0FycmF5KGVbbl0pP2h0KGVbbl0sdCk6dFtlW25dLmtleV09ZVtuXS5mbjtyZXR1cm4gdH12YXIgbXQ9bnVsbDtmdW5jdGlvbiB5dChlKXtmb3IoO2UmJihlPWUuJHBhcmVudCk7KWlmKGUuX2luYWN0aXZlKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGd0KGUsdCl7aWYodCl7aWYoZS5fZGlyZWN0SW5hY3RpdmU9ITEseXQoZSkpcmV0dXJufWVsc2UgaWYoZS5fZGlyZWN0SW5hY3RpdmUpcmV0dXJuO2lmKGUuX2luYWN0aXZlfHxudWxsPT09ZS5faW5hY3RpdmUpe2UuX2luYWN0aXZlPSExO2Zvcih2YXIgbj0wO248ZS4kY2hpbGRyZW4ubGVuZ3RoO24rKylndChlLiRjaGlsZHJlbltuXSk7X3QoZSwiYWN0aXZhdGVkIil9fWZ1bmN0aW9uIF90KHQsbil7c2UoKTt2YXIgZT10LiRvcHRpb25zW25dO2lmKGUpZm9yKHZhciByPTAsaT1lLmxlbmd0aDtyPGk7cisrKXRyeXtlW3JdLmNhbGwodCl9Y2F0Y2goZSl7RmUoZSx0LG4rIiBob29rIil9dC5faGFzSG9va0V2ZW50JiZ0LiRlbWl0KCJob29rOiIrbiksY2UoKX12YXIgYnQ9W10sJHQ9W10sd3Q9e30sQ3Q9ITEseHQ9ITEsa3Q9MDtmdW5jdGlvbiBBdCgpe3ZhciBlLHQ7Zm9yKHh0PSEwLGJ0LnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5pZC10LmlkfSksa3Q9MDtrdDxidC5sZW5ndGg7a3QrKyl0PShlPWJ0W2t0XSkuaWQsd3RbdF09bnVsbCxlLnJ1bigpO3ZhciBuPSR0LnNsaWNlKCkscj1idC5zbGljZSgpO2t0PWJ0Lmxlbmd0aD0kdC5sZW5ndGg9MCx3dD17fSxDdD14dD0hMSxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLl9pbmFjdGl2ZT0hMCxndChlW3RdLCEwKX0obiksZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7Zm9yKDt0LS07KXt2YXIgbj1lW3RdLHI9bi52bTtyLl93YXRjaGVyPT09biYmci5faXNNb3VudGVkJiZfdChyLCJ1cGRhdGVkIil9fShyKSxRJiZqLmRldnRvb2xzJiZRLmVtaXQoImZsdXNoIil9dmFyIE90PTAsU3Q9ZnVuY3Rpb24oZSx0LG4scixpKXt0aGlzLnZtPWUsaSYmKGUuX3dhdGNoZXI9dGhpcyksZS5fd2F0Y2hlcnMucHVzaCh0aGlzKSxyPyh0aGlzLmRlZXA9ISFyLmRlZXAsdGhpcy51c2VyPSEhci51c2VyLHRoaXMubGF6eT0hIXIubGF6eSx0aGlzLnN5bmM9ISFyLnN5bmMpOnRoaXMuZGVlcD10aGlzLnVzZXI9dGhpcy5sYXp5PXRoaXMuc3luYz0hMSx0aGlzLmNiPW4sdGhpcy5pZD0rK090LHRoaXMuYWN0aXZlPSEwLHRoaXMuZGlydHk9dGhpcy5sYXp5LHRoaXMuZGVwcz1bXSx0aGlzLm5ld0RlcHM9W10sdGhpcy5kZXBJZHM9bmV3IHRlLHRoaXMubmV3RGVwSWRzPW5ldyB0ZSx0aGlzLmV4cHJlc3Npb249IiIsImZ1bmN0aW9uIj09dHlwZW9mIHQ/dGhpcy5nZXR0ZXI9dDoodGhpcy5nZXR0ZXI9ZnVuY3Rpb24oZSl7aWYoIUwudGVzdChlKSl7dmFyIG49ZS5zcGxpdCgiLiIpO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PG4ubGVuZ3RoO3QrKyl7aWYoIWUpcmV0dXJuO2U9ZVtuW3RdXX1yZXR1cm4gZX19fSh0KSx0aGlzLmdldHRlcnx8KHRoaXMuZ2V0dGVyPWZ1bmN0aW9uKCl7fSkpLHRoaXMudmFsdWU9dGhpcy5sYXp5P3ZvaWQgMDp0aGlzLmdldCgpfTtTdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7dmFyIGU7c2UodGhpcyk7dmFyIHQ9dGhpcy52bTt0cnl7ZT10aGlzLmdldHRlci5jYWxsKHQsdCl9Y2F0Y2goZSl7aWYoIXRoaXMudXNlcil0aHJvdyBlO0ZlKGUsdCwnZ2V0dGVyIGZvciB3YXRjaGVyICInK3RoaXMuZXhwcmVzc2lvbisnIicpfWZpbmFsbHl7dGhpcy5kZWVwJiZZZShlKSxjZSgpLHRoaXMuY2xlYW51cERlcHMoKX1yZXR1cm4gZX0sU3QucHJvdG90eXBlLmFkZERlcD1mdW5jdGlvbihlKXt2YXIgdD1lLmlkO3RoaXMubmV3RGVwSWRzLmhhcyh0KXx8KHRoaXMubmV3RGVwSWRzLmFkZCh0KSx0aGlzLm5ld0RlcHMucHVzaChlKSx0aGlzLmRlcElkcy5oYXModCl8fGUuYWRkU3ViKHRoaXMpKX0sU3QucHJvdG90eXBlLmNsZWFudXBEZXBzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuZGVwcy5sZW5ndGg7ZS0tOyl7dmFyIHQ9dGhpcy5kZXBzW2VdO3RoaXMubmV3RGVwSWRzLmhhcyh0LmlkKXx8dC5yZW1vdmVTdWIodGhpcyl9dmFyIG49dGhpcy5kZXBJZHM7dGhpcy5kZXBJZHM9dGhpcy5uZXdEZXBJZHMsdGhpcy5uZXdEZXBJZHM9bix0aGlzLm5ld0RlcElkcy5jbGVhcigpLG49dGhpcy5kZXBzLHRoaXMuZGVwcz10aGlzLm5ld0RlcHMsdGhpcy5uZXdEZXBzPW4sdGhpcy5uZXdEZXBzLmxlbmd0aD0wfSxTdC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5sYXp5P3RoaXMuZGlydHk9ITA6dGhpcy5zeW5jP3RoaXMucnVuKCk6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pZDtpZihudWxsPT13dFt0XSl7aWYod3RbdF09ITAseHQpe2Zvcih2YXIgbj1idC5sZW5ndGgtMTtrdDxuJiZidFtuXS5pZD5lLmlkOyluLS07YnQuc3BsaWNlKG4rMSwwLGUpfWVsc2UgYnQucHVzaChlKTtDdHx8KEN0PSEwLFplKEF0KSl9fSh0aGlzKX0sU3QucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe2lmKHRoaXMuYWN0aXZlKXt2YXIgZT10aGlzLmdldCgpO2lmKGUhPT10aGlzLnZhbHVlfHxQKGUpfHx0aGlzLmRlZXApe3ZhciB0PXRoaXMudmFsdWU7aWYodGhpcy52YWx1ZT1lLHRoaXMudXNlcil0cnl7dGhpcy5jYi5jYWxsKHRoaXMudm0sZSx0KX1jYXRjaChlKXtGZShlLHRoaXMudm0sJ2NhbGxiYWNrIGZvciB3YXRjaGVyICInK3RoaXMuZXhwcmVzc2lvbisnIicpfWVsc2UgdGhpcy5jYi5jYWxsKHRoaXMudm0sZSx0KX19fSxTdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXt0aGlzLnZhbHVlPXRoaXMuZ2V0KCksdGhpcy5kaXJ0eT0hMX0sU3QucHJvdG90eXBlLmRlcGVuZD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmRlcHMubGVuZ3RoO2UtLTspdGhpcy5kZXBzW2VdLmRlcGVuZCgpfSxTdC5wcm90b3R5cGUudGVhcmRvd249ZnVuY3Rpb24oKXtpZih0aGlzLmFjdGl2ZSl7dGhpcy52bS5faXNCZWluZ0Rlc3Ryb3llZHx8Zih0aGlzLnZtLl93YXRjaGVycyx0aGlzKTtmb3IodmFyIGU9dGhpcy5kZXBzLmxlbmd0aDtlLS07KXRoaXMuZGVwc1tlXS5yZW1vdmVTdWIodGhpcyk7dGhpcy5hY3RpdmU9ITF9fTt2YXIgVHQ9e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDokLHNldDokfTtmdW5jdGlvbiBFdChlLHQsbil7VHQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbdF1bbl19LFR0LnNldD1mdW5jdGlvbihlKXt0aGlzW3RdW25dPWV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4sVHQpfWZ1bmN0aW9uIGp0KGUpe2UuX3dhdGNoZXJzPVtdO3ZhciB0PWUuJG9wdGlvbnM7dC5wcm9wcyYmZnVuY3Rpb24obixyKXt2YXIgaT1uLiRvcHRpb25zLnByb3BzRGF0YXx8e30sbz1uLl9wcm9wcz17fSxhPW4uJG9wdGlvbnMuX3Byb3BLZXlzPVtdO24uJHBhcmVudCYmZ2UoITEpO3ZhciBlPWZ1bmN0aW9uKGUpe2EucHVzaChlKTt2YXIgdD1JZShlLHIsaSxuKTtDZShvLGUsdCksZSBpbiBufHxFdChuLCJfcHJvcHMiLGUpfTtmb3IodmFyIHQgaW4gcillKHQpO2dlKCEwKX0oZSx0LnByb3BzKSx0Lm1ldGhvZHMmJmZ1bmN0aW9uKGUsdCl7ZS4kb3B0aW9ucy5wcm9wcztmb3IodmFyIG4gaW4gdCllW25dPW51bGw9PXRbbl0/JDp2KHRbbl0sZSl9KGUsdC5tZXRob2RzKSx0LmRhdGE/ZnVuY3Rpb24oZSl7dmFyIHQ9ZS4kb3B0aW9ucy5kYXRhO2wodD1lLl9kYXRhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCl7c2UoKTt0cnl7cmV0dXJuIGUuY2FsbCh0LHQpfWNhdGNoKGUpe3JldHVybiBGZShlLHQsImRhdGEoKSIpLHt9fWZpbmFsbHl7Y2UoKX19KHQsZSk6dHx8e30pfHwodD17fSk7dmFyIG49T2JqZWN0LmtleXModCkscj1lLiRvcHRpb25zLnByb3BzLGk9KGUuJG9wdGlvbnMubWV0aG9kcyxuLmxlbmd0aCk7Zm9yKDtpLS07KXt2YXIgbz1uW2ldO3ImJnAocixvKXx8KHZvaWQgMCwzNiE9PShhPShvKyIiKS5jaGFyQ29kZUF0KDApKSYmOTUhPT1hJiZFdChlLCJfZGF0YSIsbykpfXZhciBhO3dlKHQsITApfShlKTp3ZShlLl9kYXRhPXt9LCEwKSx0LmNvbXB1dGVkJiZmdW5jdGlvbihlLHQpe3ZhciBuPWUuX2NvbXB1dGVkV2F0Y2hlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSxyPVkoKTtmb3IodmFyIGkgaW4gdCl7dmFyIG89dFtpXSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBvP286by5nZXQ7cnx8KG5baV09bmV3IFN0KGUsYXx8JCwkLE50KSksaSBpbiBlfHxMdChlLGksbyl9fShlLHQuY29tcHV0ZWQpLHQud2F0Y2gmJnQud2F0Y2ghPT1HJiZmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXt2YXIgcj10W25dO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspTXQoZSxuLHJbaV0pO2Vsc2UgTXQoZSxuLHIpfX0oZSx0LndhdGNoKX12YXIgTnQ9e2xhenk6ITB9O2Z1bmN0aW9uIEx0KGUsdCxuKXt2YXIgcj0hWSgpOyJmdW5jdGlvbiI9PXR5cGVvZiBuPyhUdC5nZXQ9cj9JdCh0KTpuLFR0LnNldD0kKTooVHQuZ2V0PW4uZ2V0P3ImJiExIT09bi5jYWNoZT9JdCh0KTpuLmdldDokLFR0LnNldD1uLnNldD9uLnNldDokKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LFR0KX1mdW5jdGlvbiBJdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jb21wdXRlZFdhdGNoZXJzJiZ0aGlzLl9jb21wdXRlZFdhdGNoZXJzW3RdO2lmKGUpcmV0dXJuIGUuZGlydHkmJmUuZXZhbHVhdGUoKSxvZS50YXJnZXQmJmUuZGVwZW5kKCksZS52YWx1ZX19ZnVuY3Rpb24gTXQoZSx0LG4scil7cmV0dXJuIGwobikmJihuPShyPW4pLmhhbmRsZXIpLCJzdHJpbmciPT10eXBlb2YgbiYmKG49ZVtuXSksZS4kd2F0Y2godCxuLHIpfWZ1bmN0aW9uIER0KHQsZSl7aWYodCl7Zm9yKHZhciBuPU9iamVjdC5jcmVhdGUobnVsbCkscj1uZT9SZWZsZWN0Lm93bktleXModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pOk9iamVjdC5rZXlzKHQpLGk9MDtpPHIubGVuZ3RoO2krKyl7Zm9yKHZhciBvPXJbaV0sYT10W29dLmZyb20scz1lO3M7KXtpZihzLl9wcm92aWRlZCYmcChzLl9wcm92aWRlZCxhKSl7bltvXT1zLl9wcm92aWRlZFthXTticmVha31zPXMuJHBhcmVudH1pZighcyYmImRlZmF1bHQiaW4gdFtvXSl7dmFyIGM9dFtvXS5kZWZhdWx0O25bb109ImZ1bmN0aW9uIj09dHlwZW9mIGM/Yy5jYWxsKGUpOmN9fXJldHVybiBufX1mdW5jdGlvbiBQdChlLHQpe3ZhciBuLHIsaSxvLGE7aWYoQXJyYXkuaXNBcnJheShlKXx8InN0cmluZyI9PXR5cGVvZiBlKWZvcihuPW5ldyBBcnJheShlLmxlbmd0aCkscj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyluW3JdPXQoZVtyXSxyKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobj1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspbltyXT10KHIrMSxyKTtlbHNlIGlmKFAoZSkpZm9yKG89T2JqZWN0LmtleXMoZSksbj1uZXcgQXJyYXkoby5sZW5ndGgpLHI9MCxpPW8ubGVuZ3RoO3I8aTtyKyspYT1vW3JdLG5bcl09dChlW2FdLGEscik7cmV0dXJuIEQobikmJihuLl9pc1ZMaXN0PSEwKSxufWZ1bmN0aW9uIEZ0KGUsdCxuLHIpe3ZhciBpLG89dGhpcy4kc2NvcGVkU2xvdHNbZV07aWYobyluPW58fHt9LHImJihuPW0obSh7fSxyKSxuKSksaT1vKG4pfHx0O2Vsc2V7dmFyIGE9dGhpcy4kc2xvdHNbZV07YSYmKGEuX3JlbmRlcmVkPSEwKSxpPWF8fHR9dmFyIHM9biYmbi5zbG90O3JldHVybiBzP3RoaXMuJGNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIix7c2xvdDpzfSxpKTppfWZ1bmN0aW9uIFJ0KGUpe3JldHVybiBMZSh0aGlzLiRvcHRpb25zLCJmaWx0ZXJzIixlKXx8d31mdW5jdGlvbiBIdChlLHQpe3JldHVybiBBcnJheS5pc0FycmF5KGUpPy0xPT09ZS5pbmRleE9mKHQpOmUhPT10fWZ1bmN0aW9uIEJ0KGUsdCxuLHIsaSl7dmFyIG89ai5rZXlDb2Rlc1t0XXx8bjtyZXR1cm4gaSYmciYmIWoua2V5Q29kZXNbdF0/SHQoaSxyKTpvP0h0KG8sZSk6cj9fKHIpIT09dDp2b2lkIDB9ZnVuY3Rpb24gVXQobixyLGksbyxhKXtpZihpKWlmKFAoaSkpe3ZhciBzO0FycmF5LmlzQXJyYXkoaSkmJihpPWIoaSkpO3ZhciBlPWZ1bmN0aW9uKHQpe2lmKCJjbGFzcyI9PT10fHwic3R5bGUiPT09dHx8dSh0KSlzPW47ZWxzZXt2YXIgZT1uLmF0dHJzJiZuLmF0dHJzLnR5cGU7cz1vfHxqLm11c3RVc2VQcm9wKHIsZSx0KT9uLmRvbVByb3BzfHwobi5kb21Qcm9wcz17fSk6bi5hdHRyc3x8KG4uYXR0cnM9e30pfXQgaW4gc3x8KHNbdF09aVt0XSxhJiYoKG4ub258fChuLm9uPXt9KSlbInVwZGF0ZToiK3RdPWZ1bmN0aW9uKGUpe2lbdF09ZX0pKX07Zm9yKHZhciB0IGluIGkpZSh0KX1lbHNlO3JldHVybiBufWZ1bmN0aW9uIFZ0KGUsdCl7dmFyIG49dGhpcy5fc3RhdGljVHJlZXN8fCh0aGlzLl9zdGF0aWNUcmVlcz1bXSkscj1uW2VdO3JldHVybiByJiYhdHx8S3Qocj1uW2VdPXRoaXMuJG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zW2VdLmNhbGwodGhpcy5fcmVuZGVyUHJveHksbnVsbCx0aGlzKSwiX19zdGF0aWNfXyIrZSwhMSkscn1mdW5jdGlvbiB6dChlLHQsbil7cmV0dXJuIEt0KGUsIl9fb25jZV9fIit0KyhuPyJfIituOiIiKSwhMCksZX1mdW5jdGlvbiBLdChlLHQsbil7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdJiYic3RyaW5nIiE9dHlwZW9mIGVbcl0mJkp0KGVbcl0sdCsiXyIrcixuKTtlbHNlIEp0KGUsdCxuKX1mdW5jdGlvbiBKdChlLHQsbil7ZS5pc1N0YXRpYz0hMCxlLmtleT10LGUuaXNPbmNlPW59ZnVuY3Rpb24gcXQoZSx0KXtpZih0KWlmKGwodCkpe3ZhciBuPWUub249ZS5vbj9tKHt9LGUub24pOnt9O2Zvcih2YXIgciBpbiB0KXt2YXIgaT1uW3JdLG89dFtyXTtuW3JdPWk/W10uY29uY2F0KGksbyk6b319ZWxzZTtyZXR1cm4gZX1mdW5jdGlvbiBXdChlKXtlLl9vPXp0LGUuX249RixlLl9zPXQsZS5fbD1QdCxlLl90PUZ0LGUuX3E9QyxlLl9pPXgsZS5fbT1WdCxlLl9mPVJ0LGUuX2s9QnQsZS5fYj1VdCxlLl92PXBlLGUuX2U9ZmUsZS5fdT1odCxlLl9nPXF0fWZ1bmN0aW9uIEd0KGUsdCxuLG8scil7dmFyIGEscz1yLm9wdGlvbnM7cChvLCJfdWlkIik/KGE9T2JqZWN0LmNyZWF0ZShvKSkuX29yaWdpbmFsPW86bz0oYT1vKS5fb3JpZ2luYWw7dmFyIGk9UyhzLl9jb21waWxlZCksYz0haTt0aGlzLmRhdGE9ZSx0aGlzLnByb3BzPXQsdGhpcy5jaGlsZHJlbj1uLHRoaXMucGFyZW50PW8sdGhpcy5saXN0ZW5lcnM9ZS5vbnx8eSx0aGlzLmluamVjdGlvbnM9RHQocy5pbmplY3QsbyksdGhpcy5zbG90cz1mdW5jdGlvbigpe3JldHVybiBkdChuLG8pfSxpJiYodGhpcy4kb3B0aW9ucz1zLHRoaXMuJHNsb3RzPXRoaXMuc2xvdHMoKSx0aGlzLiRzY29wZWRTbG90cz1lLnNjb3BlZFNsb3RzfHx5KSxzLl9zY29wZUlkP3RoaXMuX2M9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9cm4oYSxlLHQsbixyLGMpO3JldHVybiBpJiYhQXJyYXkuaXNBcnJheShpKSYmKGkuZm5TY29wZUlkPXMuX3Njb3BlSWQsaS5mbkNvbnRleHQ9byksaX06dGhpcy5fYz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gcm4oYSxlLHQsbixyLGMpfX1mdW5jdGlvbiBadChlLHQsbixyKXt2YXIgaT1kZShlKTtyZXR1cm4gaS5mbkNvbnRleHQ9bixpLmZuT3B0aW9ucz1yLHQuc2xvdCYmKChpLmRhdGF8fChpLmRhdGE9e30pKS5zbG90PXQuc2xvdCksaX1mdW5jdGlvbiBYdChlLHQpe2Zvcih2YXIgbiBpbiB0KWVbZyhuKV09dFtuXX1XdChHdC5wcm90b3R5cGUpO3ZhciBZdD17aW5pdDpmdW5jdGlvbihlLHQsbixyKXtpZihlLmNvbXBvbmVudEluc3RhbmNlJiYhZS5jb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQmJmUuZGF0YS5rZWVwQWxpdmUpe3ZhciBpPWU7WXQucHJlcGF0Y2goaSxpKX1lbHNleyhlLmNvbXBvbmVudEluc3RhbmNlPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXtfaXNDb21wb25lbnQ6ITAscGFyZW50OnQsX3BhcmVudFZub2RlOmUsX3BhcmVudEVsbTpufHxudWxsLF9yZWZFbG06cnx8bnVsbH0sbz1lLmRhdGEuaW5saW5lVGVtcGxhdGU7RChvKSYmKGkucmVuZGVyPW8ucmVuZGVyLGkuc3RhdGljUmVuZGVyRm5zPW8uc3RhdGljUmVuZGVyRm5zKTtyZXR1cm4gbmV3IGUuY29tcG9uZW50T3B0aW9ucy5DdG9yKGkpfShlLG10LG4scikpLiRtb3VudCh0P2UuZWxtOnZvaWQgMCx0KX19LHByZXBhdGNoOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5jb21wb25lbnRPcHRpb25zOyFmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPSEhKGl8fGUuJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVufHxyLmRhdGEuc2NvcGVkU2xvdHN8fGUuJHNjb3BlZFNsb3RzIT09eSk7aWYoZS4kb3B0aW9ucy5fcGFyZW50Vm5vZGU9cixlLiR2bm9kZT1yLGUuX3Zub2RlJiYoZS5fdm5vZGUucGFyZW50PXIpLGUuJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuPWksZS4kYXR0cnM9ci5kYXRhLmF0dHJzfHx5LGUuJGxpc3RlbmVycz1ufHx5LHQmJmUuJG9wdGlvbnMucHJvcHMpe2dlKCExKTtmb3IodmFyIGE9ZS5fcHJvcHMscz1lLiRvcHRpb25zLl9wcm9wS2V5c3x8W10sYz0wO2M8cy5sZW5ndGg7YysrKXt2YXIgbD1zW2NdLHU9ZS4kb3B0aW9ucy5wcm9wczthW2xdPUllKGwsdSx0LGUpfWdlKCEwKSxlLiRvcHRpb25zLnByb3BzRGF0YT10fW49bnx8eTt2YXIgZj1lLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7ZS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzPW4scHQoZSxuLGYpLG8mJihlLiRzbG90cz1kdChpLHIuY29udGV4dCksZS4kZm9yY2VVcGRhdGUoKSl9KHQuY29tcG9uZW50SW5zdGFuY2U9ZS5jb21wb25lbnRJbnN0YW5jZSxuLnByb3BzRGF0YSxuLmxpc3RlbmVycyx0LG4uY2hpbGRyZW4pfSxpbnNlcnQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLmNvbnRleHQscj1lLmNvbXBvbmVudEluc3RhbmNlO3IuX2lzTW91bnRlZHx8KHIuX2lzTW91bnRlZD0hMCxfdChyLCJtb3VudGVkIikpLGUuZGF0YS5rZWVwQWxpdmUmJihuLl9pc01vdW50ZWQ/KCh0PXIpLl9pbmFjdGl2ZT0hMSwkdC5wdXNoKHQpKTpndChyLCEwKSl9LGRlc3Ryb3k6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb21wb25lbnRJbnN0YW5jZTt0Ll9pc0Rlc3Ryb3llZHx8KGUuZGF0YS5rZWVwQWxpdmU/ZnVuY3Rpb24gZSh0LG4pe2lmKCEobiYmKHQuX2RpcmVjdEluYWN0aXZlPSEwLHl0KHQpKXx8dC5faW5hY3RpdmUpKXt0Ll9pbmFjdGl2ZT0hMDtmb3IodmFyIHI9MDtyPHQuJGNoaWxkcmVuLmxlbmd0aDtyKyspZSh0LiRjaGlsZHJlbltyXSk7X3QodCwiZGVhY3RpdmF0ZWQiKX19KHQsITApOnQuJGRlc3Ryb3koKSl9fSxRdD1PYmplY3Qua2V5cyhZdCk7ZnVuY3Rpb24gZW4oZSx0LG4scixpKXtpZighTShlKSl7dmFyIG89bi4kb3B0aW9ucy5fYmFzZTtpZihQKGUpJiYoZT1vLmV4dGVuZChlKSksImZ1bmN0aW9uIj09dHlwZW9mIGUpe3ZhciBhLHMsYyxsLHUsZixwO2lmKE0oZS5jaWQpJiZ2b2lkIDA9PT0oZT1mdW5jdGlvbih0LG4sZSl7aWYoUyh0LmVycm9yKSYmRCh0LmVycm9yQ29tcCkpcmV0dXJuIHQuZXJyb3JDb21wO2lmKEQodC5yZXNvbHZlZCkpcmV0dXJuIHQucmVzb2x2ZWQ7aWYoUyh0LmxvYWRpbmcpJiZEKHQubG9hZGluZ0NvbXApKXJldHVybiB0LmxvYWRpbmdDb21wO2lmKCFEKHQuY29udGV4dHMpKXt2YXIgcj10LmNvbnRleHRzPVtlXSxpPSEwLG89ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspcltlXS4kZm9yY2VVcGRhdGUoKX0sYT1SKGZ1bmN0aW9uKGUpe3QucmVzb2x2ZWQ9c3QoZSxuKSxpfHxvKCl9KSxzPVIoZnVuY3Rpb24oZSl7RCh0LmVycm9yQ29tcCkmJih0LmVycm9yPSEwLG8oKSl9KSxjPXQoYSxzKTtyZXR1cm4gUChjKSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBjLnRoZW4/TSh0LnJlc29sdmVkKSYmYy50aGVuKGEscyk6RChjLmNvbXBvbmVudCkmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLmNvbXBvbmVudC50aGVuJiYoYy5jb21wb25lbnQudGhlbihhLHMpLEQoYy5lcnJvcikmJih0LmVycm9yQ29tcD1zdChjLmVycm9yLG4pKSxEKGMubG9hZGluZykmJih0LmxvYWRpbmdDb21wPXN0KGMubG9hZGluZyxuKSwwPT09Yy5kZWxheT90LmxvYWRpbmc9ITA6c2V0VGltZW91dChmdW5jdGlvbigpe00odC5yZXNvbHZlZCkmJk0odC5lcnJvcikmJih0LmxvYWRpbmc9ITAsbygpKX0sYy5kZWxheXx8MjAwKSksRChjLnRpbWVvdXQpJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7TSh0LnJlc29sdmVkKSYmcyhudWxsKX0sYy50aW1lb3V0KSkpLGk9ITEsdC5sb2FkaW5nP3QubG9hZGluZ0NvbXA6dC5yZXNvbHZlZH10LmNvbnRleHRzLnB1c2goZSl9KGE9ZSxvLG4pKSlyZXR1cm4gcz1hLGM9dCxsPW4sdT1yLGY9aSwocD1mZSgpKS5hc3luY0ZhY3Rvcnk9cyxwLmFzeW5jTWV0YT17ZGF0YTpjLGNvbnRleHQ6bCxjaGlsZHJlbjp1LHRhZzpmfSxwO3Q9dHx8e30sZG4oZSksRCh0Lm1vZGVsKSYmZnVuY3Rpb24oZSx0KXt2YXIgbj1lLm1vZGVsJiZlLm1vZGVsLnByb3B8fCJ2YWx1ZSIscj1lLm1vZGVsJiZlLm1vZGVsLmV2ZW50fHwiaW5wdXQiOyh0LnByb3BzfHwodC5wcm9wcz17fSkpW25dPXQubW9kZWwudmFsdWU7dmFyIGk9dC5vbnx8KHQub249e30pO0QoaVtyXSk/aVtyXT1bdC5tb2RlbC5jYWxsYmFja10uY29uY2F0KGlbcl0pOmlbcl09dC5tb2RlbC5jYWxsYmFja30oZS5vcHRpb25zLHQpO3ZhciBkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10Lm9wdGlvbnMucHJvcHM7aWYoIU0ocikpe3ZhciBpPXt9LG89ZS5hdHRycyxhPWUucHJvcHM7aWYoRChvKXx8RChhKSlmb3IodmFyIHMgaW4gcil7dmFyIGM9XyhzKTtpdChpLGEscyxjLCEwKXx8aXQoaSxvLHMsYywhMSl9cmV0dXJuIGl9fSh0LGUpO2lmKFMoZS5vcHRpb25zLmZ1bmN0aW9uYWwpKXJldHVybiBmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPWUub3B0aW9ucyxhPXt9LHM9by5wcm9wcztpZihEKHMpKWZvcih2YXIgYyBpbiBzKWFbY109SWUoYyxzLHR8fHkpO2Vsc2UgRChuLmF0dHJzKSYmWHQoYSxuLmF0dHJzKSxEKG4ucHJvcHMpJiZYdChhLG4ucHJvcHMpO3ZhciBsPW5ldyBHdChuLGEsaSxyLGUpLHU9by5yZW5kZXIuY2FsbChudWxsLGwuX2MsbCk7aWYodSBpbnN0YW5jZW9mIGxlKXJldHVybiBadCh1LG4sbC5wYXJlbnQsbyk7aWYoQXJyYXkuaXNBcnJheSh1KSl7Zm9yKHZhciBmPW90KHUpfHxbXSxwPW5ldyBBcnJheShmLmxlbmd0aCksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXBbZF09WnQoZltkXSxuLGwucGFyZW50LG8pO3JldHVybiBwfX0oZSxkLHQsbixyKTt2YXIgdj10Lm9uO2lmKHQub249dC5uYXRpdmVPbixTKGUub3B0aW9ucy5hYnN0cmFjdCkpe3ZhciBoPXQuc2xvdDt0PXt9LGgmJih0LnNsb3Q9aCl9IWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmhvb2t8fChlLmhvb2s9e30pLG49MDtuPFF0Lmxlbmd0aDtuKyspe3ZhciByPVF0W25dO3Rbcl09WXRbcl19fSh0KTt2YXIgbT1lLm9wdGlvbnMubmFtZXx8aTtyZXR1cm4gbmV3IGxlKCJ2dWUtY29tcG9uZW50LSIrZS5jaWQrKG0/Ii0iK206IiIpLHQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsbix7Q3RvcjplLHByb3BzRGF0YTpkLGxpc3RlbmVyczp2LHRhZzppLGNoaWxkcmVuOnJ9LGEpfX19dmFyIHRuPTEsbm49MjtmdW5jdGlvbiBybihlLHQsbixyLGksbyl7cmV0dXJuKEFycmF5LmlzQXJyYXkobil8fFQobikpJiYoaT1yLHI9bixuPXZvaWQgMCksUyhvKSYmKGk9bm4pLGZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoRChuKSYmRChuLl9fb2JfXykpcmV0dXJuIGZlKCk7RChuKSYmRChuLmlzKSYmKHQ9bi5pcyk7aWYoIXQpcmV0dXJuIGZlKCk7QXJyYXkuaXNBcnJheShyKSYmImZ1bmN0aW9uIj09dHlwZW9mIHJbMF0mJigobj1ufHx7fSkuc2NvcGVkU2xvdHM9e2RlZmF1bHQ6clswXX0sci5sZW5ndGg9MCk7aT09PW5uP3I9b3Qocik6aT09PXRuJiYocj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKylpZihBcnJheS5pc0FycmF5KGVbdF0pKXJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpO3JldHVybiBlfShyKSk7dmFyIG8sYTtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBzO2E9ZS4kdm5vZGUmJmUuJHZub2RlLm5zfHxqLmdldFRhZ05hbWVzcGFjZSh0KSxvPWouaXNSZXNlcnZlZFRhZyh0KT9uZXcgbGUoai5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0KSxuLHIsdm9pZCAwLHZvaWQgMCxlKTpEKHM9TGUoZS4kb3B0aW9ucywiY29tcG9uZW50cyIsdCkpP2VuKHMsbixlLHIsdCk6bmV3IGxlKHQsbixyLHZvaWQgMCx2b2lkIDAsZSl9ZWxzZSBvPWVuKHQsbixlLHIpO3JldHVybiBBcnJheS5pc0FycmF5KG8pP286RChvKT8oRChhKSYmZnVuY3Rpb24gZSh0LG4scil7dC5ucz1uOyJmb3JlaWduT2JqZWN0Ij09PXQudGFnJiYobj12b2lkIDAscj0hMCk7aWYoRCh0LmNoaWxkcmVuKSlmb3IodmFyIGk9MCxvPXQuY2hpbGRyZW4ubGVuZ3RoO2k8bztpKyspe3ZhciBhPXQuY2hpbGRyZW5baV07RChhLnRhZykmJihNKGEubnMpfHxTKHIpJiYic3ZnIiE9PWEudGFnKSYmZShhLG4scil9fShvLGEpLEQobikmJmZ1bmN0aW9uKGUpe1AoZS5zdHlsZSkmJlllKGUuc3R5bGUpO1AoZS5jbGFzcykmJlllKGUuY2xhc3MpfShuKSxvKTpmZSgpfShlLHQsbixyLGkpfXZhciBvbixhbixzbixjbixsbix1bixmbixwbj0wO2Z1bmN0aW9uIGRuKGUpe3ZhciB0PWUub3B0aW9ucztpZihlLnN1cGVyKXt2YXIgbj1kbihlLnN1cGVyKTtpZihuIT09ZS5zdXBlck9wdGlvbnMpe2Uuc3VwZXJPcHRpb25zPW47dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLm9wdGlvbnMscj1lLmV4dGVuZE9wdGlvbnMsaT1lLnNlYWxlZE9wdGlvbnM7Zm9yKHZhciBvIGluIG4pbltvXSE9PWlbb10mJih0fHwodD17fSksdFtvXT12bihuW29dLHJbb10saVtvXSkpO3JldHVybiB0fShlKTtyJiZtKGUuZXh0ZW5kT3B0aW9ucyxyKSwodD1lLm9wdGlvbnM9TmUobixlLmV4dGVuZE9wdGlvbnMpKS5uYW1lJiYodC5jb21wb25lbnRzW3QubmFtZV09ZSl9fXJldHVybiB0fWZ1bmN0aW9uIHZuKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgcj1bXTtuPUFycmF5LmlzQXJyYXkobik/bjpbbl0sdD1BcnJheS5pc0FycmF5KHQpP3Q6W3RdO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKSgwPD10LmluZGV4T2YoZVtpXSl8fG4uaW5kZXhPZihlW2ldKTwwKSYmci5wdXNoKGVbaV0pO3JldHVybiByfXJldHVybiBlfWZ1bmN0aW9uIGhuKGUpe3RoaXMuX2luaXQoZSl9ZnVuY3Rpb24gbW4oZSl7ZS5jaWQ9MDt2YXIgYT0xO2UuZXh0ZW5kPWZ1bmN0aW9uKGUpe2U9ZXx8e307dmFyIHQ9dGhpcyxuPXQuY2lkLHI9ZS5fQ3Rvcnx8KGUuX0N0b3I9e30pO2lmKHJbbl0pcmV0dXJuIHJbbl07dmFyIGk9ZS5uYW1lfHx0Lm9wdGlvbnMubmFtZSxvPWZ1bmN0aW9uKGUpe3RoaXMuX2luaXQoZSl9O3JldHVybigoby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPW8pLmNpZD1hKyssby5vcHRpb25zPU5lKHQub3B0aW9ucyxlKSxvLnN1cGVyPXQsby5vcHRpb25zLnByb3BzJiZmdW5jdGlvbihlKXt2YXIgdD1lLm9wdGlvbnMucHJvcHM7Zm9yKHZhciBuIGluIHQpRXQoZS5wcm90b3R5cGUsIl9wcm9wcyIsbil9KG8pLG8ub3B0aW9ucy5jb21wdXRlZCYmZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vcHRpb25zLmNvbXB1dGVkO2Zvcih2YXIgbiBpbiB0KUx0KGUucHJvdG90eXBlLG4sdFtuXSl9KG8pLG8uZXh0ZW5kPXQuZXh0ZW5kLG8ubWl4aW49dC5taXhpbixvLnVzZT10LnVzZSxrLmZvckVhY2goZnVuY3Rpb24oZSl7b1tlXT10W2VdfSksaSYmKG8ub3B0aW9ucy5jb21wb25lbnRzW2ldPW8pLG8uc3VwZXJPcHRpb25zPXQub3B0aW9ucyxvLmV4dGVuZE9wdGlvbnM9ZSxvLnNlYWxlZE9wdGlvbnM9bSh7fSxvLm9wdGlvbnMpLHJbbl09b319ZnVuY3Rpb24geW4oZSl7cmV0dXJuIGUmJihlLkN0b3Iub3B0aW9ucy5uYW1lfHxlLnRhZyl9ZnVuY3Rpb24gZ24oZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8tMTxlLmluZGV4T2YodCk6InN0cmluZyI9PXR5cGVvZiBlPy0xPGUuc3BsaXQoIiwiKS5pbmRleE9mKHQpOihuPWUsIltvYmplY3QgUmVnRXhwXSI9PT1yLmNhbGwobikmJmUudGVzdCh0KSk7dmFyIG59ZnVuY3Rpb24gX24oZSx0KXt2YXIgbj1lLmNhY2hlLHI9ZS5rZXlzLGk9ZS5fdm5vZGU7Zm9yKHZhciBvIGluIG4pe3ZhciBhPW5bb107aWYoYSl7dmFyIHM9eW4oYS5jb21wb25lbnRPcHRpb25zKTtzJiYhdChzKSYmYm4obixvLHIsaSl9fX1mdW5jdGlvbiBibihlLHQsbixyKXt2YXIgaT1lW3RdOyFpfHxyJiZpLnRhZz09PXIudGFnfHxpLmNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCksZVt0XT1udWxsLGYobix0KX1obi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbz10aGlzO28uX3VpZD1wbisrLG8uX2lzVnVlPSEwLGUmJmUuX2lzQ29tcG9uZW50P2Z1bmN0aW9uKGUsdCl7dmFyIG49ZS4kb3B0aW9ucz1PYmplY3QuY3JlYXRlKGUuY29uc3RydWN0b3Iub3B0aW9ucykscj10Ll9wYXJlbnRWbm9kZTtuLnBhcmVudD10LnBhcmVudCxuLl9wYXJlbnRWbm9kZT1yLG4uX3BhcmVudEVsbT10Ll9wYXJlbnRFbG0sbi5fcmVmRWxtPXQuX3JlZkVsbTt2YXIgaT1yLmNvbXBvbmVudE9wdGlvbnM7bi5wcm9wc0RhdGE9aS5wcm9wc0RhdGEsbi5fcGFyZW50TGlzdGVuZXJzPWkubGlzdGVuZXJzLG4uX3JlbmRlckNoaWxkcmVuPWkuY2hpbGRyZW4sbi5fY29tcG9uZW50VGFnPWkudGFnLHQucmVuZGVyJiYobi5yZW5kZXI9dC5yZW5kZXIsbi5zdGF0aWNSZW5kZXJGbnM9dC5zdGF0aWNSZW5kZXJGbnMpfShvLGUpOm8uJG9wdGlvbnM9TmUoZG4oby5jb25zdHJ1Y3RvciksZXx8e30sbyksZnVuY3Rpb24oZSl7dmFyIHQ9ZS4kb3B0aW9ucyxuPXQucGFyZW50O2lmKG4mJiF0LmFic3RyYWN0KXtmb3IoO24uJG9wdGlvbnMuYWJzdHJhY3QmJm4uJHBhcmVudDspbj1uLiRwYXJlbnQ7bi4kY2hpbGRyZW4ucHVzaChlKX1lLiRwYXJlbnQ9bixlLiRyb290PW4/bi4kcm9vdDplLGUuJGNoaWxkcmVuPVtdLGUuJHJlZnM9e30sZS5fd2F0Y2hlcj1udWxsLGUuX2luYWN0aXZlPW51bGwsZS5fZGlyZWN0SW5hY3RpdmU9ITEsZS5faXNNb3VudGVkPSExLGUuX2lzRGVzdHJveWVkPSExLGUuX2lzQmVpbmdEZXN0cm95ZWQ9ITF9KChvLl9yZW5kZXJQcm94eT1vKS5fc2VsZj1vKSxmdW5jdGlvbihlKXtlLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxlLl9oYXNIb29rRXZlbnQ9ITE7dmFyIHQ9ZS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO3QmJnB0KGUsdCl9KG8pLGZ1bmN0aW9uKGkpe2kuX3Zub2RlPW51bGwsaS5fc3RhdGljVHJlZXM9bnVsbDt2YXIgZT1pLiRvcHRpb25zLHQ9aS4kdm5vZGU9ZS5fcGFyZW50Vm5vZGUsbj10JiZ0LmNvbnRleHQ7aS4kc2xvdHM9ZHQoZS5fcmVuZGVyQ2hpbGRyZW4sbiksaS4kc2NvcGVkU2xvdHM9eSxpLl9jPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBybihpLGUsdCxuLHIsITEpfSxpLiRjcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBybihpLGUsdCxuLHIsITApfTt2YXIgcj10JiZ0LmRhdGE7Q2UoaSwiJGF0dHJzIixyJiZyLmF0dHJzfHx5LG51bGwsITApLENlKGksIiRsaXN0ZW5lcnMiLGUuX3BhcmVudExpc3RlbmVyc3x8eSxudWxsLCEwKX0obyksX3QobywiYmVmb3JlQ3JlYXRlIiksKG49RHQoKHQ9bykuJG9wdGlvbnMuaW5qZWN0LHQpKSYmKGdlKCExKSxPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0NlKHQsZSxuW2VdKX0pLGdlKCEwKSksanQobyksKGk9KHI9bykuJG9wdGlvbnMucHJvdmlkZSkmJihyLl9wcm92aWRlZD0iZnVuY3Rpb24iPT10eXBlb2YgaT9pLmNhbGwocik6aSksX3QobywiY3JlYXRlZCIpLG8uJG9wdGlvbnMuZWwmJm8uJG1vdW50KG8uJG9wdGlvbnMuZWwpfSxvbj1obixhbj17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RhdGF9fSxzbj17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Byb3BzfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KG9uLnByb3RvdHlwZSwiJGRhdGEiLGFuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkob24ucHJvdG90eXBlLCIkcHJvcHMiLHNuKSxvbi5wcm90b3R5cGUuJHNldD14ZSxvbi5wcm90b3R5cGUuJGRlbGV0ZT1rZSxvbi5wcm90b3R5cGUuJHdhdGNoPWZ1bmN0aW9uKGUsdCxuKXtpZihsKHQpKXJldHVybiBNdCh0aGlzLGUsdCxuKTsobj1ufHx7fSkudXNlcj0hMDt2YXIgcj1uZXcgU3QodGhpcyxlLHQsbik7cmV0dXJuIG4uaW1tZWRpYXRlJiZ0LmNhbGwodGhpcyxyLnZhbHVlKSxmdW5jdGlvbigpe3IudGVhcmRvd24oKX19LGxuPS9eaG9vazovLChjbj1obikucHJvdG90eXBlLiRvbj1mdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXRoaXMuJG9uKGVbbl0sdCk7ZWxzZSh0aGlzLl9ldmVudHNbZV18fCh0aGlzLl9ldmVudHNbZV09W10pKS5wdXNoKHQpLGxuLnRlc3QoZSkmJih0aGlzLl9oYXNIb29rRXZlbnQ9ITApO3JldHVybiB0aGlzfSxjbi5wcm90b3R5cGUuJG9uY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2Z1bmN0aW9uIHIoKXtuLiRvZmYoZSxyKSx0LmFwcGx5KG4sYXJndW1lbnRzKX1yZXR1cm4gci5mbj10LG4uJG9uKGUsciksbn0sY24ucHJvdG90eXBlLiRvZmY9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxuO2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl0aGlzLiRvZmYoZVtyXSx0KTtyZXR1cm4gbn12YXIgbz1uLl9ldmVudHNbZV07aWYoIW8pcmV0dXJuIG47aWYoIXQpcmV0dXJuIG4uX2V2ZW50c1tlXT1udWxsLG47aWYodClmb3IodmFyIGEscz1vLmxlbmd0aDtzLS07KWlmKChhPW9bc10pPT09dHx8YS5mbj09PXQpe28uc3BsaWNlKHMsMSk7YnJlYWt9cmV0dXJuIG59LGNuLnByb3RvdHlwZS4kZW1pdD1mdW5jdGlvbih0KXt2YXIgbj10aGlzLGU9bi5fZXZlbnRzW3RdO2lmKGUpe2U9MTxlLmxlbmd0aD9oKGUpOmU7Zm9yKHZhciByPWgoYXJndW1lbnRzLDEpLGk9MCxvPWUubGVuZ3RoO2k8bztpKyspdHJ5e2VbaV0uYXBwbHkobixyKX1jYXRjaChlKXtGZShlLG4sJ2V2ZW50IGhhbmRsZXIgZm9yICInK3QrJyInKX19cmV0dXJuIG59LCh1bj1obikucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO24uX2lzTW91bnRlZCYmX3QobiwiYmVmb3JlVXBkYXRlIik7dmFyIHI9bi4kZWwsaT1uLl92bm9kZSxvPW10OyhtdD1uKS5fdm5vZGU9ZSxpP24uJGVsPW4uX19wYXRjaF9fKGksZSk6KG4uJGVsPW4uX19wYXRjaF9fKG4uJGVsLGUsdCwhMSxuLiRvcHRpb25zLl9wYXJlbnRFbG0sbi4kb3B0aW9ucy5fcmVmRWxtKSxuLiRvcHRpb25zLl9wYXJlbnRFbG09bi4kb3B0aW9ucy5fcmVmRWxtPW51bGwpLG10PW8sciYmKHIuX192dWVfXz1udWxsKSxuLiRlbCYmKG4uJGVsLl9fdnVlX189biksbi4kdm5vZGUmJm4uJHBhcmVudCYmbi4kdm5vZGU9PT1uLiRwYXJlbnQuX3Zub2RlJiYobi4kcGFyZW50LiRlbD1uLiRlbCl9LHVuLnByb3RvdHlwZS4kZm9yY2VVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl93YXRjaGVyJiZ0aGlzLl93YXRjaGVyLnVwZGF0ZSgpfSx1bi5wcm90b3R5cGUuJGRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCFlLl9pc0JlaW5nRGVzdHJveWVkKXtfdChlLCJiZWZvcmVEZXN0cm95IiksZS5faXNCZWluZ0Rlc3Ryb3llZD0hMDt2YXIgdD1lLiRwYXJlbnQ7IXR8fHQuX2lzQmVpbmdEZXN0cm95ZWR8fGUuJG9wdGlvbnMuYWJzdHJhY3R8fGYodC4kY2hpbGRyZW4sZSksZS5fd2F0Y2hlciYmZS5fd2F0Y2hlci50ZWFyZG93bigpO2Zvcih2YXIgbj1lLl93YXRjaGVycy5sZW5ndGg7bi0tOyllLl93YXRjaGVyc1tuXS50ZWFyZG93bigpO2UuX2RhdGEuX19vYl9fJiZlLl9kYXRhLl9fb2JfXy52bUNvdW50LS0sZS5faXNEZXN0cm95ZWQ9ITAsZS5fX3BhdGNoX18oZS5fdm5vZGUsbnVsbCksX3QoZSwiZGVzdHJveWVkIiksZS4kb2ZmKCksZS4kZWwmJihlLiRlbC5fX3Z1ZV9fPW51bGwpLGUuJHZub2RlJiYoZS4kdm5vZGUucGFyZW50PW51bGwpfX0sV3QoKGZuPWhuKS5wcm90b3R5cGUpLGZuLnByb3RvdHlwZS4kbmV4dFRpY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIFplKGUsdGhpcyl9LGZuLnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzLGU9bi4kb3B0aW9ucyxyPWUucmVuZGVyLGk9ZS5fcGFyZW50Vm5vZGU7aSYmKG4uJHNjb3BlZFNsb3RzPWkuZGF0YS5zY29wZWRTbG90c3x8eSksbi4kdm5vZGU9aTt0cnl7dD1yLmNhbGwobi5fcmVuZGVyUHJveHksbi4kY3JlYXRlRWxlbWVudCl9Y2F0Y2goZSl7RmUoZSxuLCJyZW5kZXIiKSx0PW4uX3Zub2RlfXJldHVybiB0IGluc3RhbmNlb2YgbGV8fCh0PWZlKCkpLHQucGFyZW50PWksdH07dmFyICRuLHduLENuLHhuPVtTdHJpbmcsUmVnRXhwLEFycmF5XSxrbj17S2VlcEFsaXZlOntuYW1lOiJrZWVwLWFsaXZlIixhYnN0cmFjdDohMCxwcm9wczp7aW5jbHVkZTp4bixleGNsdWRlOnhuLG1heDpbU3RyaW5nLE51bWJlcl19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5rZXlzPVtdfSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5jYWNoZSlibih0aGlzLmNhY2hlLGUsdGhpcy5rZXlzKX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kd2F0Y2goImluY2x1ZGUiLGZ1bmN0aW9uKHQpe19uKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGduKHQsZSl9KX0pLHRoaXMuJHdhdGNoKCJleGNsdWRlIixmdW5jdGlvbih0KXtfbihlLGZ1bmN0aW9uKGUpe3JldHVybiFnbih0LGUpfSl9KX0scmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kc2xvdHMuZGVmYXVsdCx0PWx0KGUpLG49dCYmdC5jb21wb25lbnRPcHRpb25zO2lmKG4pe3ZhciByPXluKG4pLGk9dGhpcy5pbmNsdWRlLG89dGhpcy5leGNsdWRlO2lmKGkmJighcnx8IWduKGkscikpfHxvJiZyJiZnbihvLHIpKXJldHVybiB0O3ZhciBhPXRoaXMuY2FjaGUscz10aGlzLmtleXMsYz1udWxsPT10LmtleT9uLkN0b3IuY2lkKyhuLnRhZz8iOjoiK24udGFnOiIiKTp0LmtleTthW2NdPyh0LmNvbXBvbmVudEluc3RhbmNlPWFbY10uY29tcG9uZW50SW5zdGFuY2UsZihzLGMpLHMucHVzaChjKSk6KGFbY109dCxzLnB1c2goYyksdGhpcy5tYXgmJnMubGVuZ3RoPnBhcnNlSW50KHRoaXMubWF4KSYmYm4oYSxzWzBdLHMsdGhpcy5fdm5vZGUpKSx0LmRhdGEua2VlcEFsaXZlPSEwfXJldHVybiB0fHxlJiZlWzBdfX19OyRuPWhuLENuPXtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gan19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkbiwiY29uZmlnIixDbiksJG4udXRpbD17d2FybjpyZSxleHRlbmQ6bSxtZXJnZU9wdGlvbnM6TmUsZGVmaW5lUmVhY3RpdmU6Q2V9LCRuLnNldD14ZSwkbi5kZWxldGU9a2UsJG4ubmV4dFRpY2s9WmUsJG4ub3B0aW9ucz1PYmplY3QuY3JlYXRlKG51bGwpLGsuZm9yRWFjaChmdW5jdGlvbihlKXskbi5vcHRpb25zW2UrInMiXT1PYmplY3QuY3JlYXRlKG51bGwpfSksbSgoJG4ub3B0aW9ucy5fYmFzZT0kbikub3B0aW9ucy5jb21wb25lbnRzLGtuKSwkbi51c2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW5zdGFsbGVkUGx1Z2luc3x8KHRoaXMuX2luc3RhbGxlZFBsdWdpbnM9W10pO2lmKC0xPHQuaW5kZXhPZihlKSlyZXR1cm4gdGhpczt2YXIgbj1oKGFyZ3VtZW50cywxKTtyZXR1cm4gbi51bnNoaWZ0KHRoaXMpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmluc3RhbGw/ZS5pbnN0YWxsLmFwcGx5KGUsbik6ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuYXBwbHkobnVsbCxuKSx0LnB1c2goZSksdGhpc30sJG4ubWl4aW49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub3B0aW9ucz1OZSh0aGlzLm9wdGlvbnMsZSksdGhpc30sbW4oJG4pLHduPSRuLGsuZm9yRWFjaChmdW5jdGlvbihuKXt3bltuXT1mdW5jdGlvbihlLHQpe3JldHVybiB0PygiY29tcG9uZW50Ij09PW4mJmwodCkmJih0Lm5hbWU9dC5uYW1lfHxlLHQ9dGhpcy5vcHRpb25zLl9iYXNlLmV4dGVuZCh0KSksImRpcmVjdGl2ZSI9PT1uJiYiZnVuY3Rpb24iPT10eXBlb2YgdCYmKHQ9e2JpbmQ6dCx1cGRhdGU6dH0pLHRoaXMub3B0aW9uc1tuKyJzIl1bZV09dCk6dGhpcy5vcHRpb25zW24rInMiXVtlXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaG4ucHJvdG90eXBlLCIkaXNTZXJ2ZXIiLHtnZXQ6WX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShobi5wcm90b3R5cGUsIiRzc3JDb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHZub2RlJiZ0aGlzLiR2bm9kZS5zc3JDb250ZXh0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShobiwiRnVuY3Rpb25hbFJlbmRlckNvbnRleHQiLHt2YWx1ZTpHdH0pLGhuLnZlcnNpb249IjIuNS4xNyI7dmFyIEFuPXMoInN0eWxlLGNsYXNzIiksT249cygiaW5wdXQsdGV4dGFyZWEsb3B0aW9uLHNlbGVjdCxwcm9ncmVzcyIpLFNuPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4idmFsdWUiPT09biYmT24oZSkmJiJidXR0b24iIT09dHx8InNlbGVjdGVkIj09PW4mJiJvcHRpb24iPT09ZXx8ImNoZWNrZWQiPT09biYmImlucHV0Ij09PWV8fCJtdXRlZCI9PT1uJiYidmlkZW8iPT09ZX0sVG49cygiY29udGVudGVkaXRhYmxlLGRyYWdnYWJsZSxzcGVsbGNoZWNrIiksRW49cygiYWxsb3dmdWxsc2NyZWVuLGFzeW5jLGF1dG9mb2N1cyxhdXRvcGxheSxjaGVja2VkLGNvbXBhY3QsY29udHJvbHMsZGVjbGFyZSxkZWZhdWx0LGRlZmF1bHRjaGVja2VkLGRlZmF1bHRtdXRlZCxkZWZhdWx0c2VsZWN0ZWQsZGVmZXIsZGlzYWJsZWQsZW5hYmxlZCxmb3Jtbm92YWxpZGF0ZSxoaWRkZW4saW5kZXRlcm1pbmF0ZSxpbmVydCxpc21hcCxpdGVtc2NvcGUsbG9vcCxtdWx0aXBsZSxtdXRlZCxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3ZhbGlkYXRlLG5vd3JhcCxvcGVuLHBhdXNlb25leGl0LHJlYWRvbmx5LHJlcXVpcmVkLHJldmVyc2VkLHNjb3BlZCxzZWFtbGVzcyxzZWxlY3RlZCxzb3J0YWJsZSx0cmFuc2xhdGUsdHJ1ZXNwZWVkLHR5cGVtdXN0bWF0Y2gsdmlzaWJsZSIpLGpuPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIixObj1mdW5jdGlvbihlKXtyZXR1cm4iOiI9PT1lLmNoYXJBdCg1KSYmInhsaW5rIj09PWUuc2xpY2UoMCw1KX0sTG49ZnVuY3Rpb24oZSl7cmV0dXJuIE5uKGUpP2Uuc2xpY2UoNixlLmxlbmd0aCk6IiJ9LEluPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfHwhMT09PWV9O2Z1bmN0aW9uIE1uKGUpe2Zvcih2YXIgdD1lLmRhdGEsbj1lLHI9ZTtEKHIuY29tcG9uZW50SW5zdGFuY2UpOykocj1yLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSkmJnIuZGF0YSYmKHQ9RG4oci5kYXRhLHQpKTtmb3IoO0Qobj1uLnBhcmVudCk7KW4mJm4uZGF0YSYmKHQ9RG4odCxuLmRhdGEpKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZihEKGUpfHxEKHQpKXJldHVybiBQbihlLEZuKHQpKTtyZXR1cm4iIn0odC5zdGF0aWNDbGFzcyx0LmNsYXNzKX1mdW5jdGlvbiBEbihlLHQpe3JldHVybntzdGF0aWNDbGFzczpQbihlLnN0YXRpY0NsYXNzLHQuc3RhdGljQ2xhc3MpLGNsYXNzOkQoZS5jbGFzcyk/W2UuY2xhc3MsdC5jbGFzc106dC5jbGFzc319ZnVuY3Rpb24gUG4oZSx0KXtyZXR1cm4gZT90P2UrIiAiK3Q6ZTp0fHwiIn1mdW5jdGlvbiBGbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9mdW5jdGlvbihlKXtmb3IodmFyIHQsbj0iIixyPTAsaT1lLmxlbmd0aDtyPGk7cisrKUQodD1GbihlW3JdKSkmJiIiIT09dCYmKG4mJihuKz0iICIpLG4rPXQpO3JldHVybiBufShlKTpQKGUpP2Z1bmN0aW9uKGUpe3ZhciB0PSIiO2Zvcih2YXIgbiBpbiBlKWVbbl0mJih0JiYodCs9IiAiKSx0Kz1uKTtyZXR1cm4gdH0oZSk6InN0cmluZyI9PXR5cGVvZiBlP2U6IiJ9dmFyIFJuPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixtYXRoOiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIn0sSG49cygiaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGZvb3RlcixoZWFkZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGdyb3VwLG5hdixzZWN0aW9uLGRpdixkZCxkbCxkdCxmaWdjYXB0aW9uLGZpZ3VyZSxwaWN0dXJlLGhyLGltZyxsaSxtYWluLG9sLHAscHJlLHVsLGEsYixhYmJyLGJkaSxiZG8sYnIsY2l0ZSxjb2RlLGRhdGEsZGZuLGVtLGksa2JkLG1hcmsscSxycCxydCxydGMscnVieSxzLHNhbXAsc21hbGwsc3BhbixzdHJvbmcsc3ViLHN1cCx0aW1lLHUsdmFyLHdicixhcmVhLGF1ZGlvLG1hcCx0cmFjayx2aWRlbyxlbWJlZCxvYmplY3QscGFyYW0sc291cmNlLGNhbnZhcyxzY3JpcHQsbm9zY3JpcHQsZGVsLGlucyxjYXB0aW9uLGNvbCxjb2xncm91cCx0YWJsZSx0aGVhZCx0Ym9keSx0ZCx0aCx0cixidXR0b24sZGF0YWxpc3QsZmllbGRzZXQsZm9ybSxpbnB1dCxsYWJlbCxsZWdlbmQsbWV0ZXIsb3B0Z3JvdXAsb3B0aW9uLG91dHB1dCxwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWEsZGV0YWlscyxkaWFsb2csbWVudSxtZW51aXRlbSxzdW1tYXJ5LGNvbnRlbnQsZWxlbWVudCxzaGFkb3csdGVtcGxhdGUsYmxvY2txdW90ZSxpZnJhbWUsdGZvb3QiKSxCbj1zKCJzdmcsYW5pbWF0ZSxjaXJjbGUsY2xpcHBhdGgsY3Vyc29yLGRlZnMsZGVzYyxlbGxpcHNlLGZpbHRlcixmb250LWZhY2UsZm9yZWlnbk9iamVjdCxnLGdseXBoLGltYWdlLGxpbmUsbWFya2VyLG1hc2ssbWlzc2luZy1nbHlwaCxwYXRoLHBhdHRlcm4scG9seWdvbixwb2x5bGluZSxyZWN0LHN3aXRjaCxzeW1ib2wsdGV4dCx0ZXh0cGF0aCx0c3Bhbix1c2UsdmlldyIsITApLFVuPWZ1bmN0aW9uKGUpe3JldHVybiBIbihlKXx8Qm4oZSl9O2Z1bmN0aW9uIFZuKGUpe3JldHVybiBCbihlKT8ic3ZnIjoibWF0aCI9PT1lPyJtYXRoIjp2b2lkIDB9dmFyIHpuPU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIEtuPXMoInRleHQsbnVtYmVyLHBhc3N3b3JkLHNlYXJjaCxlbWFpbCx0ZWwsdXJsIik7ZnVuY3Rpb24gSm4oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpO3JldHVybiB0fHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKX1yZXR1cm4gZX12YXIgcW49T2JqZWN0LmZyZWV6ZSh7Y3JlYXRlRWxlbWVudDpmdW5jdGlvbihlLHQpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuInNlbGVjdCIhPT1lfHx0LmRhdGEmJnQuZGF0YS5hdHRycyYmdm9pZCAwIT09dC5kYXRhLmF0dHJzLm11bHRpcGxlJiZuLnNldEF0dHJpYnV0ZSgibXVsdGlwbGUiLCJtdWx0aXBsZSIpLG59LGNyZWF0ZUVsZW1lbnROUzpmdW5jdGlvbihlLHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoUm5bZV0sdCl9LGNyZWF0ZVRleHROb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKX0sY3JlYXRlQ29tbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudChlKX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCxuKXtlLmluc2VydEJlZm9yZSh0LG4pfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihlLHQpe2UucmVtb3ZlQ2hpbGQodCl9LGFwcGVuZENoaWxkOmZ1bmN0aW9uKGUsdCl7ZS5hcHBlbmRDaGlsZCh0KX0scGFyZW50Tm9kZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlfSxuZXh0U2libGluZzpmdW5jdGlvbihlKXtyZXR1cm4gZS5uZXh0U2libGluZ30sdGFnTmFtZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50YWdOYW1lfSxzZXRUZXh0Q29udGVudDpmdW5jdGlvbihlLHQpe2UudGV4dENvbnRlbnQ9dH0sc2V0U3R5bGVTY29wZTpmdW5jdGlvbihlLHQpe2Uuc2V0QXR0cmlidXRlKHQsIiIpfX0pLFduPXtjcmVhdGU6ZnVuY3Rpb24oZSx0KXtHbih0KX0sdXBkYXRlOmZ1bmN0aW9uKGUsdCl7ZS5kYXRhLnJlZiE9PXQuZGF0YS5yZWYmJihHbihlLCEwKSxHbih0KSl9LGRlc3Ryb3k6ZnVuY3Rpb24oZSl7R24oZSwhMCl9fTtmdW5jdGlvbiBHbihlLHQpe3ZhciBuPWUuZGF0YS5yZWY7aWYoRChuKSl7dmFyIHI9ZS5jb250ZXh0LGk9ZS5jb21wb25lbnRJbnN0YW5jZXx8ZS5lbG0sbz1yLiRyZWZzO3Q/QXJyYXkuaXNBcnJheShvW25dKT9mKG9bbl0saSk6b1tuXT09PWkmJihvW25dPXZvaWQgMCk6ZS5kYXRhLnJlZkluRm9yP0FycmF5LmlzQXJyYXkob1tuXSk/b1tuXS5pbmRleE9mKGkpPDAmJm9bbl0ucHVzaChpKTpvW25dPVtpXTpvW25dPWl9fXZhciBabj1uZXcgbGUoIiIse30sW10pLFhuPVsiY3JlYXRlIiwiYWN0aXZhdGUiLCJ1cGRhdGUiLCJyZW1vdmUiLCJkZXN0cm95Il07ZnVuY3Rpb24gWW4oZSx0KXtyZXR1cm4gZS5rZXk9PT10LmtleSYmKGUudGFnPT09dC50YWcmJmUuaXNDb21tZW50PT09dC5pc0NvbW1lbnQmJkQoZS5kYXRhKT09PUQodC5kYXRhKSYmZnVuY3Rpb24oZSx0KXtpZigiaW5wdXQiIT09ZS50YWcpcmV0dXJuITA7dmFyIG4scj1EKG49ZS5kYXRhKSYmRChuPW4uYXR0cnMpJiZuLnR5cGUsaT1EKG49dC5kYXRhKSYmRChuPW4uYXR0cnMpJiZuLnR5cGU7cmV0dXJuIHI9PT1pfHxLbihyKSYmS24oaSl9KGUsdCl8fFMoZS5pc0FzeW5jUGxhY2Vob2xkZXIpJiZlLmFzeW5jRmFjdG9yeT09PXQuYXN5bmNGYWN0b3J5JiZNKHQuYXN5bmNGYWN0b3J5LmVycm9yKSl9ZnVuY3Rpb24gUW4oZSx0LG4pe3ZhciByLGksbz17fTtmb3Iocj10O3I8PW47KytyKUQoaT1lW3JdLmtleSkmJihvW2ldPXIpO3JldHVybiBvfXZhciBlcj17Y3JlYXRlOnRyLHVwZGF0ZTp0cixkZXN0cm95OmZ1bmN0aW9uKGUpe3RyKGUsWm4pfX07ZnVuY3Rpb24gdHIoZSx0KXsoZS5kYXRhLmRpcmVjdGl2ZXN8fHQuZGF0YS5kaXJlY3RpdmVzKSYmZnVuY3Rpb24odCxuKXt2YXIgZSxyLGksbz10PT09Wm4sYT1uPT09Wm4scz1ycih0LmRhdGEuZGlyZWN0aXZlcyx0LmNvbnRleHQpLGM9cnIobi5kYXRhLmRpcmVjdGl2ZXMsbi5jb250ZXh0KSxsPVtdLHU9W107Zm9yKGUgaW4gYylyPXNbZV0saT1jW2VdLHI/KGkub2xkVmFsdWU9ci52YWx1ZSxpcihpLCJ1cGRhdGUiLG4sdCksaS5kZWYmJmkuZGVmLmNvbXBvbmVudFVwZGF0ZWQmJnUucHVzaChpKSk6KGlyKGksImJpbmQiLG4sdCksaS5kZWYmJmkuZGVmLmluc2VydGVkJiZsLnB1c2goaSkpO2lmKGwubGVuZ3RoKXt2YXIgZj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8bC5sZW5ndGg7ZSsrKWlyKGxbZV0sImluc2VydGVkIixuLHQpfTtvP3J0KG4sImluc2VydCIsZik6ZigpfXUubGVuZ3RoJiZydChuLCJwb3N0cGF0Y2giLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx1Lmxlbmd0aDtlKyspaXIodVtlXSwiY29tcG9uZW50VXBkYXRlZCIsbix0KX0pO2lmKCFvKWZvcihlIGluIHMpY1tlXXx8aXIoc1tlXSwidW5iaW5kIix0LHQsYSl9KGUsdCl9dmFyIG5yPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gcnIoZSx0KXt2YXIgbixyLGksbz1PYmplY3QuY3JlYXRlKG51bGwpO2lmKCFlKXJldHVybiBvO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspKHI9ZVtuXSkubW9kaWZpZXJzfHwoci5tb2RpZmllcnM9bnIpLChvWyhpPXIsaS5yYXdOYW1lfHxpLm5hbWUrIi4iK09iamVjdC5rZXlzKGkubW9kaWZpZXJzfHx7fSkuam9pbigiLiIpKV09cikuZGVmPUxlKHQuJG9wdGlvbnMsImRpcmVjdGl2ZXMiLHIubmFtZSk7cmV0dXJuIG99ZnVuY3Rpb24gaXIodCxuLHIsZSxpKXt2YXIgbz10LmRlZiYmdC5kZWZbbl07aWYobyl0cnl7byhyLmVsbSx0LHIsZSxpKX1jYXRjaChlKXtGZShlLHIuY29udGV4dCwiZGlyZWN0aXZlICIrdC5uYW1lKyIgIituKyIgaG9vayIpfX12YXIgb3I9W1duLGVyXTtmdW5jdGlvbiBhcihlLHQpe3ZhciBuPXQuY29tcG9uZW50T3B0aW9ucztpZighKEQobikmJiExPT09bi5DdG9yLm9wdGlvbnMuaW5oZXJpdEF0dHJzfHxNKGUuZGF0YS5hdHRycykmJk0odC5kYXRhLmF0dHJzKSkpe3ZhciByLGksbz10LmVsbSxhPWUuZGF0YS5hdHRyc3x8e30scz10LmRhdGEuYXR0cnN8fHt9O2ZvcihyIGluIEQocy5fX29iX18pJiYocz10LmRhdGEuYXR0cnM9bSh7fSxzKSkscylpPXNbcl0sYVtyXSE9PWkmJnNyKG8scixpKTtmb3IociBpbihLfHxxKSYmcy52YWx1ZSE9PWEudmFsdWUmJnNyKG8sInZhbHVlIixzLnZhbHVlKSxhKU0oc1tyXSkmJihObihyKT9vLnJlbW92ZUF0dHJpYnV0ZU5TKGpuLExuKHIpKTpUbihyKXx8by5yZW1vdmVBdHRyaWJ1dGUocikpfX1mdW5jdGlvbiBzcihlLHQsbil7LTE8ZS50YWdOYW1lLmluZGV4T2YoIi0iKT9jcihlLHQsbik6RW4odCk/SW4obik/ZS5yZW1vdmVBdHRyaWJ1dGUodCk6KG49ImFsbG93ZnVsbHNjcmVlbiI9PT10JiYiRU1CRUQiPT09ZS50YWdOYW1lPyJ0cnVlIjp0LGUuc2V0QXR0cmlidXRlKHQsbikpOlRuKHQpP2Uuc2V0QXR0cmlidXRlKHQsSW4obil8fCJmYWxzZSI9PT1uPyJmYWxzZSI6InRydWUiKTpObih0KT9JbihuKT9lLnJlbW92ZUF0dHJpYnV0ZU5TKGpuLExuKHQpKTplLnNldEF0dHJpYnV0ZU5TKGpuLHQsbik6Y3IoZSx0LG4pfWZ1bmN0aW9uIGNyKHQsZSxuKXtpZihJbihuKSl0LnJlbW92ZUF0dHJpYnV0ZShlKTtlbHNle2lmKEsmJiFKJiYiVEVYVEFSRUEiPT09dC50YWdOYW1lJiYicGxhY2Vob2xkZXIiPT09ZSYmIXQuX19pZXBoKXt2YXIgcj1mdW5jdGlvbihlKXtlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW5wdXQiLHIpfTt0LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixyKSx0Ll9faWVwaD0hMH10LnNldEF0dHJpYnV0ZShlLG4pfX12YXIgbHI9e2NyZWF0ZTphcix1cGRhdGU6YXJ9O2Z1bmN0aW9uIHVyKGUsdCl7dmFyIG49dC5lbG0scj10LmRhdGEsaT1lLmRhdGE7aWYoIShNKHIuc3RhdGljQ2xhc3MpJiZNKHIuY2xhc3MpJiYoTShpKXx8TShpLnN0YXRpY0NsYXNzKSYmTShpLmNsYXNzKSkpKXt2YXIgbz1Nbih0KSxhPW4uX3RyYW5zaXRpb25DbGFzc2VzO0QoYSkmJihvPVBuKG8sRm4oYSkpKSxvIT09bi5fcHJldkNsYXNzJiYobi5zZXRBdHRyaWJ1dGUoImNsYXNzIixvKSxuLl9wcmV2Q2xhc3M9byl9fXZhciBmcixwcixkcix2cixocixtcix5cj17Y3JlYXRlOnVyLHVwZGF0ZTp1cn0sZ3I9L1tcdykuK1wtXyRcXV0vO2Z1bmN0aW9uIF9yKGUpe3ZhciB0LG4scixpLG8sYT0hMSxzPSExLGM9ITEsbD0hMSx1PTAsZj0wLHA9MCxkPTA7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylpZihuPXQsdD1lLmNoYXJDb2RlQXQociksYSkzOT09PXQmJjkyIT09biYmKGE9ITEpO2Vsc2UgaWYocykzND09PXQmJjkyIT09biYmKHM9ITEpO2Vsc2UgaWYoYyk5Nj09PXQmJjkyIT09biYmKGM9ITEpO2Vsc2UgaWYobCk0Nz09PXQmJjkyIT09biYmKGw9ITEpO2Vsc2UgaWYoMTI0IT09dHx8MTI0PT09ZS5jaGFyQ29kZUF0KHIrMSl8fDEyND09PWUuY2hhckNvZGVBdChyLTEpfHx1fHxmfHxwKXtzd2l0Y2godCl7Y2FzZSAzNDpzPSEwO2JyZWFrO2Nhc2UgMzk6YT0hMDticmVhaztjYXNlIDk2OmM9ITA7YnJlYWs7Y2FzZSA0MDpwKys7YnJlYWs7Y2FzZSA0MTpwLS07YnJlYWs7Y2FzZSA5MTpmKys7YnJlYWs7Y2FzZSA5MzpmLS07YnJlYWs7Y2FzZSAxMjM6dSsrO2JyZWFrO2Nhc2UgMTI1OnUtLX1pZig0Nz09PXQpe2Zvcih2YXIgdj1yLTEsaD12b2lkIDA7MDw9diYmIiAiPT09KGg9ZS5jaGFyQXQodikpO3YtLSk7aCYmZ3IudGVzdChoKXx8KGw9ITApfX1lbHNlIHZvaWQgMD09PWk/KGQ9cisxLGk9ZS5zbGljZSgwLHIpLnRyaW0oKSk6bSgpO2Z1bmN0aW9uIG0oKXsob3x8KG89W10pKS5wdXNoKGUuc2xpY2UoZCxyKS50cmltKCkpLGQ9cisxfWlmKHZvaWQgMD09PWk/aT1lLnNsaWNlKDAscikudHJpbSgpOjAhPT1kJiZtKCksbylmb3Iocj0wO3I8by5sZW5ndGg7cisrKWk9YnIoaSxvW3JdKTtyZXR1cm4gaX1mdW5jdGlvbiBicihlLHQpe3ZhciBuPXQuaW5kZXhPZigiKCIpO2lmKG48MClyZXR1cm4nX2YoIicrdCsnIikoJytlKyIpIjt2YXIgcj10LnNsaWNlKDAsbiksaT10LnNsaWNlKG4rMSk7cmV0dXJuJ19mKCInK3IrJyIpKCcrZSsoIikiIT09aT8iLCIraTppKX1mdW5jdGlvbiAkcihlKXtjb25zb2xlLmVycm9yKCJbVnVlIGNvbXBpbGVyXTogIitlKX1mdW5jdGlvbiB3cihlLHQpe3JldHVybiBlP2UubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlW3RdfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlfSk6W119ZnVuY3Rpb24gQ3IoZSx0LG4peyhlLnByb3BzfHwoZS5wcm9wcz1bXSkpLnB1c2goe25hbWU6dCx2YWx1ZTpufSksZS5wbGFpbj0hMX1mdW5jdGlvbiB4cihlLHQsbil7KGUuYXR0cnN8fChlLmF0dHJzPVtdKSkucHVzaCh7bmFtZTp0LHZhbHVlOm59KSxlLnBsYWluPSExfWZ1bmN0aW9uIGtyKGUsdCxuKXtlLmF0dHJzTWFwW3RdPW4sZS5hdHRyc0xpc3QucHVzaCh7bmFtZTp0LHZhbHVlOm59KX1mdW5jdGlvbiBBcihlLHQsbixyLGksbyl7dmFyIGE7KHI9cnx8eSkuY2FwdHVyZSYmKGRlbGV0ZSByLmNhcHR1cmUsdD0iISIrdCksci5vbmNlJiYoZGVsZXRlIHIub25jZSx0PSJ+Iit0KSxyLnBhc3NpdmUmJihkZWxldGUgci5wYXNzaXZlLHQ9IiYiK3QpLCJjbGljayI9PT10JiYoci5yaWdodD8odD0iY29udGV4dG1lbnUiLGRlbGV0ZSByLnJpZ2h0KTpyLm1pZGRsZSYmKHQ9Im1vdXNldXAiKSksci5uYXRpdmU/KGRlbGV0ZSByLm5hdGl2ZSxhPWUubmF0aXZlRXZlbnRzfHwoZS5uYXRpdmVFdmVudHM9e30pKTphPWUuZXZlbnRzfHwoZS5ldmVudHM9e30pO3ZhciBzPXt2YWx1ZTpuLnRyaW0oKX07ciE9PXkmJihzLm1vZGlmaWVycz1yKTt2YXIgYz1hW3RdO0FycmF5LmlzQXJyYXkoYyk/aT9jLnVuc2hpZnQocyk6Yy5wdXNoKHMpOmFbdF09Yz9pP1tzLGNdOltjLHNdOnMsZS5wbGFpbj0hMX1mdW5jdGlvbiBPcihlLHQsbil7dmFyIHI9U3IoZSwiOiIrdCl8fFNyKGUsInYtYmluZDoiK3QpO2lmKG51bGwhPXIpcmV0dXJuIF9yKHIpO2lmKCExIT09bil7dmFyIGk9U3IoZSx0KTtpZihudWxsIT1pKXJldHVybiBKU09OLnN0cmluZ2lmeShpKX19ZnVuY3Rpb24gU3IoZSx0LG4pe3ZhciByO2lmKG51bGwhPShyPWUuYXR0cnNNYXBbdF0pKWZvcih2YXIgaT1lLmF0dHJzTGlzdCxvPTAsYT1pLmxlbmd0aDtvPGE7bysrKWlmKGlbb10ubmFtZT09PXQpe2kuc3BsaWNlKG8sMSk7YnJlYWt9cmV0dXJuIG4mJmRlbGV0ZSBlLmF0dHJzTWFwW3RdLHJ9ZnVuY3Rpb24gVHIoZSx0LG4pe3ZhciByPW58fHt9LGk9ci5udW1iZXIsbz0iJCR2IixhPW87ci50cmltJiYoYT0iKHR5cGVvZiAkJHYgPT09ICdzdHJpbmcnPyAkJHYudHJpbSgpOiAkJHYpIiksaSYmKGE9Il9uKCIrYSsiKSIpO3ZhciBzPUVyKHQsYSk7ZS5tb2RlbD17dmFsdWU6IigiK3QrIikiLGV4cHJlc3Npb246JyInK3QrJyInLGNhbGxiYWNrOiJmdW5jdGlvbiAoJCR2KSB7IitzKyJ9In19ZnVuY3Rpb24gRXIoZSx0KXt2YXIgbj1mdW5jdGlvbihlKXtpZihlPWUudHJpbSgpLGZyPWUubGVuZ3RoLGUuaW5kZXhPZigiWyIpPDB8fGUubGFzdEluZGV4T2YoIl0iKTxmci0xKXJldHVybi0xPCh2cj1lLmxhc3RJbmRleE9mKCIuIikpP3tleHA6ZS5zbGljZSgwLHZyKSxrZXk6JyInK2Uuc2xpY2UodnIrMSkrJyInfTp7ZXhwOmUsa2V5Om51bGx9O3ByPWUsdnI9aHI9bXI9MDtmb3IoOyFOcigpOylMcihkcj1qcigpKT9Ncihkcik6OTE9PT1kciYmSXIoZHIpO3JldHVybntleHA6ZS5zbGljZSgwLGhyKSxrZXk6ZS5zbGljZShocisxLG1yKX19KGUpO3JldHVybiBudWxsPT09bi5rZXk/ZSsiPSIrdDoiJHNldCgiK24uZXhwKyIsICIrbi5rZXkrIiwgIit0KyIpIn1mdW5jdGlvbiBqcigpe3JldHVybiBwci5jaGFyQ29kZUF0KCsrdnIpfWZ1bmN0aW9uIE5yKCl7cmV0dXJuIGZyPD12cn1mdW5jdGlvbiBMcihlKXtyZXR1cm4gMzQ9PT1lfHwzOT09PWV9ZnVuY3Rpb24gSXIoZSl7dmFyIHQ9MTtmb3IoaHI9dnI7IU5yKCk7KWlmKExyKGU9anIoKSkpTXIoZSk7ZWxzZSBpZig5MT09PWUmJnQrKyw5Mz09PWUmJnQtLSwwPT09dCl7bXI9dnI7YnJlYWt9fWZ1bmN0aW9uIE1yKGUpe2Zvcih2YXIgdD1lOyFOcigpJiYoZT1qcigpKSE9PXQ7KTt9dmFyIERyLFByPSJfX3IiLEZyPSJfX2MiO2Z1bmN0aW9uIFJyKGUsdCxuLHIsaSl7dmFyIG8sYSxzLGMsbDt0PShvPXQpLl93aXRoVGFza3x8KG8uX3dpdGhUYXNrPWZ1bmN0aW9uKCl7SmU9ITA7dmFyIGU9by5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIEplPSExLGV9KSxuJiYoYT10LHM9ZSxjPXIsbD1Ecix0PWZ1bmN0aW9uIGUoKXtudWxsIT09YS5hcHBseShudWxsLGFyZ3VtZW50cykmJkhyKHMsZSxjLGwpfSksRHIuYWRkRXZlbnRMaXN0ZW5lcihlLHQsWj97Y2FwdHVyZTpyLHBhc3NpdmU6aX06cil9ZnVuY3Rpb24gSHIoZSx0LG4scil7KHJ8fERyKS5yZW1vdmVFdmVudExpc3RlbmVyKGUsdC5fd2l0aFRhc2t8fHQsbil9ZnVuY3Rpb24gQnIoZSx0KXtpZighTShlLmRhdGEub24pfHwhTSh0LmRhdGEub24pKXt2YXIgbj10LmRhdGEub258fHt9LHI9ZS5kYXRhLm9ufHx7fTtEcj10LmVsbSxmdW5jdGlvbihlKXtpZihEKGVbUHJdKSl7dmFyIHQ9Sz8iY2hhbmdlIjoiaW5wdXQiO2VbdF09W10uY29uY2F0KGVbUHJdLGVbdF18fFtdKSxkZWxldGUgZVtQcl19RChlW0ZyXSkmJihlLmNoYW5nZT1bXS5jb25jYXQoZVtGcl0sZS5jaGFuZ2V8fFtdKSxkZWxldGUgZVtGcl0pfShuKSxudChuLHIsUnIsSHIsdC5jb250ZXh0KSxEcj12b2lkIDB9fXZhciBVcj17Y3JlYXRlOkJyLHVwZGF0ZTpCcn07ZnVuY3Rpb24gVnIoZSx0KXtpZighTShlLmRhdGEuZG9tUHJvcHMpfHwhTSh0LmRhdGEuZG9tUHJvcHMpKXt2YXIgbixyLGksbyxhPXQuZWxtLHM9ZS5kYXRhLmRvbVByb3BzfHx7fSxjPXQuZGF0YS5kb21Qcm9wc3x8e307Zm9yKG4gaW4gRChjLl9fb2JfXykmJihjPXQuZGF0YS5kb21Qcm9wcz1tKHt9LGMpKSxzKU0oY1tuXSkmJihhW25dPSIiKTtmb3IobiBpbiBjKXtpZihyPWNbbl0sInRleHRDb250ZW50Ij09PW58fCJpbm5lckhUTUwiPT09bil7aWYodC5jaGlsZHJlbiYmKHQuY2hpbGRyZW4ubGVuZ3RoPTApLHI9PT1zW25dKWNvbnRpbnVlOzE9PT1hLmNoaWxkTm9kZXMubGVuZ3RoJiZhLnJlbW92ZUNoaWxkKGEuY2hpbGROb2Rlc1swXSl9aWYoInZhbHVlIj09PW4pe3ZhciBsPU0oYS5fdmFsdWU9cik/IiI6U3RyaW5nKHIpO289bCwoaT1hKS5jb21wb3Npbmd8fCJPUFRJT04iIT09aS50YWdOYW1lJiYhZnVuY3Rpb24oZSx0KXt2YXIgbj0hMDt0cnl7bj1kb2N1bWVudC5hY3RpdmVFbGVtZW50IT09ZX1jYXRjaChlKXt9cmV0dXJuIG4mJmUudmFsdWUhPT10fShpLG8pJiYhZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnZhbHVlLHI9ZS5fdk1vZGlmaWVycztpZihEKHIpKXtpZihyLmxhenkpcmV0dXJuITE7aWYoci5udW1iZXIpcmV0dXJuIEYobikhPT1GKHQpO2lmKHIudHJpbSlyZXR1cm4gbi50cmltKCkhPT10LnRyaW0oKX1yZXR1cm4gbiE9PXR9KGksbyl8fChhLnZhbHVlPWwpfWVsc2UgYVtuXT1yfX19dmFyIHpyPXtjcmVhdGU6VnIsdXBkYXRlOlZyfSxLcj1lKGZ1bmN0aW9uKGUpe3ZhciBuPXt9LHI9LzooLispLztyZXR1cm4gZS5zcGxpdCgvOyg/IVteKF0qXCkpL2cpLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9ZS5zcGxpdChyKTsxPHQubGVuZ3RoJiYoblt0WzBdLnRyaW0oKV09dFsxXS50cmltKCkpfX0pLG59KTtmdW5jdGlvbiBKcihlKXt2YXIgdD1xcihlLnN0eWxlKTtyZXR1cm4gZS5zdGF0aWNTdHlsZT9tKGUuc3RhdGljU3R5bGUsdCk6dH1mdW5jdGlvbiBxcihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9iKGUpOiJzdHJpbmciPT10eXBlb2YgZT9LcihlKTplfXZhciBXcixHcj0vXi0tLyxacj0vXHMqIWltcG9ydGFudCQvLFhyPWZ1bmN0aW9uKGUsdCxuKXtpZihHci50ZXN0KHQpKWUuc3R5bGUuc2V0UHJvcGVydHkodCxuKTtlbHNlIGlmKFpyLnRlc3QobikpZS5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4ucmVwbGFjZShaciwiIiksImltcG9ydGFudCIpO2Vsc2V7dmFyIHI9UXIodCk7aWYoQXJyYXkuaXNBcnJheShuKSlmb3IodmFyIGk9MCxvPW4ubGVuZ3RoO2k8bztpKyspZS5zdHlsZVtyXT1uW2ldO2Vsc2UgZS5zdHlsZVtyXT1ufX0sWXI9WyJXZWJraXQiLCJNb3oiLCJtcyJdLFFyPWUoZnVuY3Rpb24oZSl7aWYoV3I9V3J8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlLCJmaWx0ZXIiIT09KGU9ZyhlKSkmJmUgaW4gV3IpcmV0dXJuIGU7Zm9yKHZhciB0PWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSxuPTA7bjxZci5sZW5ndGg7bisrKXt2YXIgcj1ZcltuXSt0O2lmKHIgaW4gV3IpcmV0dXJuIHJ9fSk7ZnVuY3Rpb24gZWkoZSx0KXt2YXIgbj10LmRhdGEscj1lLmRhdGE7aWYoIShNKG4uc3RhdGljU3R5bGUpJiZNKG4uc3R5bGUpJiZNKHIuc3RhdGljU3R5bGUpJiZNKHIuc3R5bGUpKSl7dmFyIGksbyxhPXQuZWxtLHM9ci5zdGF0aWNTdHlsZSxjPXIubm9ybWFsaXplZFN0eWxlfHxyLnN0eWxlfHx7fSxsPXN8fGMsdT1xcih0LmRhdGEuc3R5bGUpfHx7fTt0LmRhdGEubm9ybWFsaXplZFN0eWxlPUQodS5fX29iX18pP20oe30sdSk6dTt2YXIgZj1mdW5jdGlvbihlLHQpe3ZhciBuLHI9e307aWYodClmb3IodmFyIGk9ZTtpLmNvbXBvbmVudEluc3RhbmNlOykoaT1pLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSkmJmkuZGF0YSYmKG49SnIoaS5kYXRhKSkmJm0ocixuKTsobj1KcihlLmRhdGEpKSYmbShyLG4pO2Zvcih2YXIgbz1lO289by5wYXJlbnQ7KW8uZGF0YSYmKG49SnIoby5kYXRhKSkmJm0ocixuKTtyZXR1cm4gcn0odCwhMCk7Zm9yKG8gaW4gbClNKGZbb10pJiZYcihhLG8sIiIpO2ZvcihvIGluIGYpKGk9ZltvXSkhPT1sW29dJiZYcihhLG8sbnVsbD09aT8iIjppKX19dmFyIHRpPXtjcmVhdGU6ZWksdXBkYXRlOmVpfTtmdW5jdGlvbiBuaSh0LGUpe2lmKGUmJihlPWUudHJpbSgpKSlpZih0LmNsYXNzTGlzdCktMTxlLmluZGV4T2YoIiAiKT9lLnNwbGl0KC9ccysvKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNsYXNzTGlzdC5hZGQoZSl9KTp0LmNsYXNzTGlzdC5hZGQoZSk7ZWxzZXt2YXIgbj0iICIrKHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIikrIiAiO24uaW5kZXhPZigiICIrZSsiICIpPDAmJnQuc2V0QXR0cmlidXRlKCJjbGFzcyIsKG4rZSkudHJpbSgpKX19ZnVuY3Rpb24gcmkodCxlKXtpZihlJiYoZT1lLnRyaW0oKSkpaWYodC5jbGFzc0xpc3QpLTE8ZS5pbmRleE9mKCIgIik/ZS5zcGxpdCgvXHMrLykuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5jbGFzc0xpc3QucmVtb3ZlKGUpfSk6dC5jbGFzc0xpc3QucmVtb3ZlKGUpLHQuY2xhc3NMaXN0Lmxlbmd0aHx8dC5yZW1vdmVBdHRyaWJ1dGUoImNsYXNzIik7ZWxzZXtmb3IodmFyIG49IiAiKyh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpKyIgIixyPSIgIitlKyIgIjswPD1uLmluZGV4T2Yocik7KW49bi5yZXBsYWNlKHIsIiAiKTsobj1uLnRyaW0oKSk/dC5zZXRBdHRyaWJ1dGUoImNsYXNzIixuKTp0LnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKX19ZnVuY3Rpb24gaWkoZSl7aWYoZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXt2YXIgdD17fTtyZXR1cm4hMSE9PWUuY3NzJiZtKHQsb2koZS5uYW1lfHwidiIpKSxtKHQsZSksdH1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/b2koZSk6dm9pZCAwfX12YXIgb2k9ZShmdW5jdGlvbihlKXtyZXR1cm57ZW50ZXJDbGFzczplKyItZW50ZXIiLGVudGVyVG9DbGFzczplKyItZW50ZXItdG8iLGVudGVyQWN0aXZlQ2xhc3M6ZSsiLWVudGVyLWFjdGl2ZSIsbGVhdmVDbGFzczplKyItbGVhdmUiLGxlYXZlVG9DbGFzczplKyItbGVhdmUtdG8iLGxlYXZlQWN0aXZlQ2xhc3M6ZSsiLWxlYXZlLWFjdGl2ZSJ9fSksYWk9QiYmIUosc2k9InRyYW5zaXRpb24iLGNpPSJhbmltYXRpb24iLGxpPSJ0cmFuc2l0aW9uIix1aT0idHJhbnNpdGlvbmVuZCIsZmk9ImFuaW1hdGlvbiIscGk9ImFuaW1hdGlvbmVuZCI7YWkmJih2b2lkIDA9PT13aW5kb3cub250cmFuc2l0aW9uZW5kJiZ2b2lkIDAhPT13aW5kb3cub253ZWJraXR0cmFuc2l0aW9uZW5kJiYobGk9IldlYmtpdFRyYW5zaXRpb24iLHVpPSJ3ZWJraXRUcmFuc2l0aW9uRW5kIiksdm9pZCAwPT09d2luZG93Lm9uYW5pbWF0aW9uZW5kJiZ2b2lkIDAhPT13aW5kb3cub253ZWJraXRhbmltYXRpb25lbmQmJihmaT0iV2Via2l0QW5pbWF0aW9uIixwaT0id2Via2l0QW5pbWF0aW9uRW5kIikpO3ZhciBkaT1CP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6c2V0VGltZW91dDpmdW5jdGlvbihlKXtyZXR1cm4gZSgpfTtmdW5jdGlvbiB2aShlKXtkaShmdW5jdGlvbigpe2RpKGUpfSl9ZnVuY3Rpb24gaGkoZSx0KXt2YXIgbj1lLl90cmFuc2l0aW9uQ2xhc3Nlc3x8KGUuX3RyYW5zaXRpb25DbGFzc2VzPVtdKTtuLmluZGV4T2YodCk8MCYmKG4ucHVzaCh0KSxuaShlLHQpKX1mdW5jdGlvbiBtaShlLHQpe2UuX3RyYW5zaXRpb25DbGFzc2VzJiZmKGUuX3RyYW5zaXRpb25DbGFzc2VzLHQpLHJpKGUsdCl9ZnVuY3Rpb24geWkodCxlLG4pe3ZhciByPV9pKHQsZSksaT1yLnR5cGUsbz1yLnRpbWVvdXQsYT1yLnByb3BDb3VudDtpZighaSlyZXR1cm4gbigpO3ZhciBzPWk9PT1zaT91aTpwaSxjPTAsbD1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihzLHUpLG4oKX0sdT1mdW5jdGlvbihlKXtlLnRhcmdldD09PXQmJisrYz49YSYmbCgpfTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YzxhJiZsKCl9LG8rMSksdC5hZGRFdmVudExpc3RlbmVyKHMsdSl9dmFyIGdpPS9cYih0cmFuc2Zvcm18YWxsKSgsfCQpLztmdW5jdGlvbiBfaShlLHQpe3ZhciBuLHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSksaT1yW2xpKyJEZWxheSJdLnNwbGl0KCIsICIpLG89cltsaSsiRHVyYXRpb24iXS5zcGxpdCgiLCAiKSxhPWJpKGksbykscz1yW2ZpKyJEZWxheSJdLnNwbGl0KCIsICIpLGM9cltmaSsiRHVyYXRpb24iXS5zcGxpdCgiLCAiKSxsPWJpKHMsYyksdT0wLGY9MDtyZXR1cm4gdD09PXNpPzA8YSYmKG49c2ksdT1hLGY9by5sZW5ndGgpOnQ9PT1jaT8wPGwmJihuPWNpLHU9bCxmPWMubGVuZ3RoKTpmPShuPTA8KHU9TWF0aC5tYXgoYSxsKSk/bDxhP3NpOmNpOm51bGwpP249PT1zaT9vLmxlbmd0aDpjLmxlbmd0aDowLHt0eXBlOm4sdGltZW91dDp1LHByb3BDb3VudDpmLGhhc1RyYW5zZm9ybTpuPT09c2kmJmdpLnRlc3QocltsaSsiUHJvcGVydHkiXSl9fWZ1bmN0aW9uIGJpKG4sZSl7Zm9yKDtuLmxlbmd0aDxlLmxlbmd0aDspbj1uLmNvbmNhdChuKTtyZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCxlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiAkaShlKSskaShuW3RdKX0pKX1mdW5jdGlvbiAkaShlKXtyZXR1cm4gMWUzKk51bWJlcihlLnNsaWNlKDAsLTEpKX1mdW5jdGlvbiB3aShuLGUpe3ZhciByPW4uZWxtO0Qoci5fbGVhdmVDYikmJihyLl9sZWF2ZUNiLmNhbmNlbGxlZD0hMCxyLl9sZWF2ZUNiKCkpO3ZhciB0PWlpKG4uZGF0YS50cmFuc2l0aW9uKTtpZighTSh0KSYmIUQoci5fZW50ZXJDYikmJjE9PT1yLm5vZGVUeXBlKXtmb3IodmFyIGk9dC5jc3Msbz10LnR5cGUsYT10LmVudGVyQ2xhc3Mscz10LmVudGVyVG9DbGFzcyxjPXQuZW50ZXJBY3RpdmVDbGFzcyxsPXQuYXBwZWFyQ2xhc3MsdT10LmFwcGVhclRvQ2xhc3MsZj10LmFwcGVhckFjdGl2ZUNsYXNzLHA9dC5iZWZvcmVFbnRlcixkPXQuZW50ZXIsdj10LmFmdGVyRW50ZXIsaD10LmVudGVyQ2FuY2VsbGVkLG09dC5iZWZvcmVBcHBlYXIseT10LmFwcGVhcixnPXQuYWZ0ZXJBcHBlYXIsXz10LmFwcGVhckNhbmNlbGxlZCxiPXQuZHVyYXRpb24sJD1tdCx3PW10LiR2bm9kZTt3JiZ3LnBhcmVudDspJD0odz13LnBhcmVudCkuY29udGV4dDt2YXIgQz0hJC5faXNNb3VudGVkfHwhbi5pc1Jvb3RJbnNlcnQ7aWYoIUN8fHl8fCIiPT09eSl7dmFyIHg9QyYmbD9sOmEsaz1DJiZmP2Y6YyxBPUMmJnU/dTpzLE89QyYmbXx8cCxTPUMmJiJmdW5jdGlvbiI9PXR5cGVvZiB5P3k6ZCxUPUMmJmd8fHYsRT1DJiZffHxoLGo9RihQKGIpP2IuZW50ZXI6YiksTj0hMSE9PWkmJiFKLEw9a2koUyksST1yLl9lbnRlckNiPVIoZnVuY3Rpb24oKXtOJiYobWkocixBKSxtaShyLGspKSxJLmNhbmNlbGxlZD8oTiYmbWkocix4KSxFJiZFKHIpKTpUJiZUKHIpLHIuX2VudGVyQ2I9bnVsbH0pO24uZGF0YS5zaG93fHxydChuLCJpbnNlcnQiLGZ1bmN0aW9uKCl7dmFyIGU9ci5wYXJlbnROb2RlLHQ9ZSYmZS5fcGVuZGluZyYmZS5fcGVuZGluZ1tuLmtleV07dCYmdC50YWc9PT1uLnRhZyYmdC5lbG0uX2xlYXZlQ2ImJnQuZWxtLl9sZWF2ZUNiKCksUyYmUyhyLEkpfSksTyYmTyhyKSxOJiYoaGkocix4KSxoaShyLGspLHZpKGZ1bmN0aW9uKCl7bWkocix4KSxJLmNhbmNlbGxlZHx8KGhpKHIsQSksTHx8KHhpKGopP3NldFRpbWVvdXQoSSxqKTp5aShyLG8sSSkpKX0pKSxuLmRhdGEuc2hvdyYmKGUmJmUoKSxTJiZTKHIsSSkpLE58fEx8fEkoKX19fWZ1bmN0aW9uIENpKGUsdCl7dmFyIG49ZS5lbG07RChuLl9lbnRlckNiKSYmKG4uX2VudGVyQ2IuY2FuY2VsbGVkPSEwLG4uX2VudGVyQ2IoKSk7dmFyIHI9aWkoZS5kYXRhLnRyYW5zaXRpb24pO2lmKE0ocil8fDEhPT1uLm5vZGVUeXBlKXJldHVybiB0KCk7aWYoIUQobi5fbGVhdmVDYikpe3ZhciBpPXIuY3NzLG89ci50eXBlLGE9ci5sZWF2ZUNsYXNzLHM9ci5sZWF2ZVRvQ2xhc3MsYz1yLmxlYXZlQWN0aXZlQ2xhc3MsbD1yLmJlZm9yZUxlYXZlLHU9ci5sZWF2ZSxmPXIuYWZ0ZXJMZWF2ZSxwPXIubGVhdmVDYW5jZWxsZWQsZD1yLmRlbGF5TGVhdmUsdj1yLmR1cmF0aW9uLGg9ITEhPT1pJiYhSixtPWtpKHUpLHk9RihQKHYpP3YubGVhdmU6diksZz1uLl9sZWF2ZUNiPVIoZnVuY3Rpb24oKXtuLnBhcmVudE5vZGUmJm4ucGFyZW50Tm9kZS5fcGVuZGluZyYmKG4ucGFyZW50Tm9kZS5fcGVuZGluZ1tlLmtleV09bnVsbCksaCYmKG1pKG4scyksbWkobixjKSksZy5jYW5jZWxsZWQ/KGgmJm1pKG4sYSkscCYmcChuKSk6KHQoKSxmJiZmKG4pKSxuLl9sZWF2ZUNiPW51bGx9KTtkP2QoXyk6XygpfWZ1bmN0aW9uIF8oKXtnLmNhbmNlbGxlZHx8KGUuZGF0YS5zaG93fHwoKG4ucGFyZW50Tm9kZS5fcGVuZGluZ3x8KG4ucGFyZW50Tm9kZS5fcGVuZGluZz17fSkpW2Uua2V5XT1lKSxsJiZsKG4pLGgmJihoaShuLGEpLGhpKG4sYyksdmkoZnVuY3Rpb24oKXttaShuLGEpLGcuY2FuY2VsbGVkfHwoaGkobixzKSxtfHwoeGkoeSk/c2V0VGltZW91dChnLHkpOnlpKG4sbyxnKSkpfSkpLHUmJnUobixnKSxofHxtfHxnKCkpfX1mdW5jdGlvbiB4aShlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGUmJiFpc05hTihlKX1mdW5jdGlvbiBraShlKXtpZihNKGUpKXJldHVybiExO3ZhciB0PWUuZm5zO3JldHVybiBEKHQpP2tpKEFycmF5LmlzQXJyYXkodCk/dFswXTp0KToxPChlLl9sZW5ndGh8fGUubGVuZ3RoKX1mdW5jdGlvbiBBaShlLHQpeyEwIT09dC5kYXRhLnNob3cmJndpKHQpfXZhciBPaT1mdW5jdGlvbihlKXt2YXIgcix0LGc9e30sbj1lLm1vZHVsZXMsXz1lLm5vZGVPcHM7Zm9yKHI9MDtyPFhuLmxlbmd0aDsrK3IpZm9yKGdbWG5bcl1dPVtdLHQ9MDt0PG4ubGVuZ3RoOysrdClEKG5bdF1bWG5bcl1dKSYmZ1tYbltyXV0ucHVzaChuW3RdW1huW3JdXSk7ZnVuY3Rpb24gbyhlKXt2YXIgdD1fLnBhcmVudE5vZGUoZSk7RCh0KSYmXy5yZW1vdmVDaGlsZCh0LGUpfWZ1bmN0aW9uIGIoZSx0LG4scixpLG8sYSl7aWYoRChlLmVsbSkmJkQobykmJihlPW9bYV09ZGUoZSkpLGUuaXNSb290SW5zZXJ0PSFpLCFmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1lLmRhdGE7aWYoRChpKSl7dmFyIG89RChlLmNvbXBvbmVudEluc3RhbmNlKSYmaS5rZWVwQWxpdmU7aWYoRChpPWkuaG9vaykmJkQoaT1pLmluaXQpJiZpKGUsITEsbixyKSxEKGUuY29tcG9uZW50SW5zdGFuY2UpKXJldHVybiBkKGUsdCksUyhvKSYmZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBpLG89ZTtvLmNvbXBvbmVudEluc3RhbmNlOylpZihvPW8uY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlLEQoaT1vLmRhdGEpJiZEKGk9aS50cmFuc2l0aW9uKSl7Zm9yKGk9MDtpPGcuYWN0aXZhdGUubGVuZ3RoOysraSlnLmFjdGl2YXRlW2ldKFpuLG8pO3QucHVzaChvKTticmVha311KG4sZS5lbG0scil9KGUsdCxuLHIpLCEwfX0oZSx0LG4scikpe3ZhciBzPWUuZGF0YSxjPWUuY2hpbGRyZW4sbD1lLnRhZztEKGwpPyhlLmVsbT1lLm5zP18uY3JlYXRlRWxlbWVudE5TKGUubnMsbCk6Xy5jcmVhdGVFbGVtZW50KGwsZSksZihlKSx2KGUsYyx0KSxEKHMpJiZoKGUsdCkpOlMoZS5pc0NvbW1lbnQpP2UuZWxtPV8uY3JlYXRlQ29tbWVudChlLnRleHQpOmUuZWxtPV8uY3JlYXRlVGV4dE5vZGUoZS50ZXh0KSx1KG4sZS5lbG0scil9fWZ1bmN0aW9uIGQoZSx0KXtEKGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSYmKHQucHVzaC5hcHBseSh0LGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSxlLmRhdGEucGVuZGluZ0luc2VydD1udWxsKSxlLmVsbT1lLmNvbXBvbmVudEluc3RhbmNlLiRlbCwkKGUpPyhoKGUsdCksZihlKSk6KEduKGUpLHQucHVzaChlKSl9ZnVuY3Rpb24gdShlLHQsbil7RChlKSYmKEQobik/bi5wYXJlbnROb2RlPT09ZSYmXy5pbnNlcnRCZWZvcmUoZSx0LG4pOl8uYXBwZW5kQ2hpbGQoZSx0KSl9ZnVuY3Rpb24gdihlLHQsbil7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrciliKHRbcl0sbixlLmVsbSxudWxsLCEwLHQscik7ZWxzZSBUKGUudGV4dCkmJl8uYXBwZW5kQ2hpbGQoZS5lbG0sXy5jcmVhdGVUZXh0Tm9kZShTdHJpbmcoZS50ZXh0KSkpfWZ1bmN0aW9uICQoZSl7Zm9yKDtlLmNvbXBvbmVudEluc3RhbmNlOyllPWUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO3JldHVybiBEKGUudGFnKX1mdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciBuPTA7bjxnLmNyZWF0ZS5sZW5ndGg7KytuKWcuY3JlYXRlW25dKFpuLGUpO0Qocj1lLmRhdGEuaG9vaykmJihEKHIuY3JlYXRlKSYmci5jcmVhdGUoWm4sZSksRChyLmluc2VydCkmJnQucHVzaChlKSl9ZnVuY3Rpb24gZihlKXt2YXIgdDtpZihEKHQ9ZS5mblNjb3BlSWQpKV8uc2V0U3R5bGVTY29wZShlLmVsbSx0KTtlbHNlIGZvcih2YXIgbj1lO247KUQodD1uLmNvbnRleHQpJiZEKHQ9dC4kb3B0aW9ucy5fc2NvcGVJZCkmJl8uc2V0U3R5bGVTY29wZShlLmVsbSx0KSxuPW4ucGFyZW50O0QodD1tdCkmJnQhPT1lLmNvbnRleHQmJnQhPT1lLmZuQ29udGV4dCYmRCh0PXQuJG9wdGlvbnMuX3Njb3BlSWQpJiZfLnNldFN0eWxlU2NvcGUoZS5lbG0sdCl9ZnVuY3Rpb24geShlLHQsbixyLGksbyl7Zm9yKDtyPD1pOysrciliKG5bcl0sbyxlLHQsITEsbixyKX1mdW5jdGlvbiB3KGUpe3ZhciB0LG4scj1lLmRhdGE7aWYoRChyKSlmb3IoRCh0PXIuaG9vaykmJkQodD10LmRlc3Ryb3kpJiZ0KGUpLHQ9MDt0PGcuZGVzdHJveS5sZW5ndGg7Kyt0KWcuZGVzdHJveVt0XShlKTtpZihEKHQ9ZS5jaGlsZHJlbikpZm9yKG49MDtuPGUuY2hpbGRyZW4ubGVuZ3RoOysrbil3KGUuY2hpbGRyZW5bbl0pfWZ1bmN0aW9uIEMoZSx0LG4scil7Zm9yKDtuPD1yOysrbil7dmFyIGk9dFtuXTtEKGkpJiYoRChpLnRhZyk/KGEoaSksdyhpKSk6byhpLmVsbSkpfX1mdW5jdGlvbiBhKGUsdCl7aWYoRCh0KXx8RChlLmRhdGEpKXt2YXIgbixyPWcucmVtb3ZlLmxlbmd0aCsxO2ZvcihEKHQpP3QubGlzdGVuZXJzKz1yOnQ9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7MD09LS1uLmxpc3RlbmVycyYmbyhlKX1yZXR1cm4gbi5saXN0ZW5lcnM9dCxufShlLmVsbSxyKSxEKG49ZS5jb21wb25lbnRJbnN0YW5jZSkmJkQobj1uLl92bm9kZSkmJkQobi5kYXRhKSYmYShuLHQpLG49MDtuPGcucmVtb3ZlLmxlbmd0aDsrK24pZy5yZW1vdmVbbl0oZSx0KTtEKG49ZS5kYXRhLmhvb2spJiZEKG49bi5yZW1vdmUpP24oZSx0KTp0KCl9ZWxzZSBvKGUuZWxtKX1mdW5jdGlvbiB4KGUsdCxuLHIpe2Zvcih2YXIgaT1uO2k8cjtpKyspe3ZhciBvPXRbaV07aWYoRChvKSYmWW4oZSxvKSlyZXR1cm4gaX19ZnVuY3Rpb24gayhlLHQsbixyKXtpZihlIT09dCl7dmFyIGk9dC5lbG09ZS5lbG07aWYoUyhlLmlzQXN5bmNQbGFjZWhvbGRlcikpRCh0LmFzeW5jRmFjdG9yeS5yZXNvbHZlZCk/TyhlLmVsbSx0LG4pOnQuaXNBc3luY1BsYWNlaG9sZGVyPSEwO2Vsc2UgaWYoUyh0LmlzU3RhdGljKSYmUyhlLmlzU3RhdGljKSYmdC5rZXk9PT1lLmtleSYmKFModC5pc0Nsb25lZCl8fFModC5pc09uY2UpKSl0LmNvbXBvbmVudEluc3RhbmNlPWUuY29tcG9uZW50SW5zdGFuY2U7ZWxzZXt2YXIgbyxhPXQuZGF0YTtEKGEpJiZEKG89YS5ob29rKSYmRChvPW8ucHJlcGF0Y2gpJiZvKGUsdCk7dmFyIHM9ZS5jaGlsZHJlbixjPXQuY2hpbGRyZW47aWYoRChhKSYmJCh0KSl7Zm9yKG89MDtvPGcudXBkYXRlLmxlbmd0aDsrK28pZy51cGRhdGVbb10oZSx0KTtEKG89YS5ob29rKSYmRChvPW8udXBkYXRlKSYmbyhlLHQpfU0odC50ZXh0KT9EKHMpJiZEKGMpP3MhPT1jJiZmdW5jdGlvbihlLHQsbixyLGkpe2Zvcih2YXIgbyxhLHMsYz0wLGw9MCx1PXQubGVuZ3RoLTEsZj10WzBdLHA9dFt1XSxkPW4ubGVuZ3RoLTEsdj1uWzBdLGg9bltkXSxtPSFpO2M8PXUmJmw8PWQ7KU0oZik/Zj10WysrY106TShwKT9wPXRbLS11XTpZbihmLHYpPyhrKGYsdixyKSxmPXRbKytjXSx2PW5bKytsXSk6WW4ocCxoKT8oayhwLGgscikscD10Wy0tdV0saD1uWy0tZF0pOlluKGYsaCk/KGsoZixoLHIpLG0mJl8uaW5zZXJ0QmVmb3JlKGUsZi5lbG0sXy5uZXh0U2libGluZyhwLmVsbSkpLGY9dFsrK2NdLGg9blstLWRdKTooWW4ocCx2KT8oayhwLHYsciksbSYmXy5pbnNlcnRCZWZvcmUoZSxwLmVsbSxmLmVsbSkscD10Wy0tdV0pOihNKG8pJiYobz1Rbih0LGMsdSkpLE0oYT1EKHYua2V5KT9vW3Yua2V5XTp4KHYsdCxjLHUpKT9iKHYscixlLGYuZWxtLCExLG4sbCk6WW4ocz10W2FdLHYpPyhrKHMsdixyKSx0W2FdPXZvaWQgMCxtJiZfLmluc2VydEJlZm9yZShlLHMuZWxtLGYuZWxtKSk6Yih2LHIsZSxmLmVsbSwhMSxuLGwpKSx2PW5bKytsXSk7dTxjP3koZSxNKG5bZCsxXSk/bnVsbDpuW2QrMV0uZWxtLG4sbCxkLHIpOmQ8bCYmQygwLHQsYyx1KX0oaSxzLGMsbixyKTpEKGMpPyhEKGUudGV4dCkmJl8uc2V0VGV4dENvbnRlbnQoaSwiIikseShpLG51bGwsYywwLGMubGVuZ3RoLTEsbikpOkQocyk/QygwLHMsMCxzLmxlbmd0aC0xKTpEKGUudGV4dCkmJl8uc2V0VGV4dENvbnRlbnQoaSwiIik6ZS50ZXh0IT09dC50ZXh0JiZfLnNldFRleHRDb250ZW50KGksdC50ZXh0KSxEKGEpJiZEKG89YS5ob29rKSYmRChvPW8ucG9zdHBhdGNoKSYmbyhlLHQpfX19ZnVuY3Rpb24gQShlLHQsbil7aWYoUyhuKSYmRChlLnBhcmVudCkpZS5wYXJlbnQuZGF0YS5wZW5kaW5nSW5zZXJ0PXQ7ZWxzZSBmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil0W3JdLmRhdGEuaG9vay5pbnNlcnQodFtyXSl9dmFyIG09cygiYXR0cnMsY2xhc3Msc3RhdGljQ2xhc3Msc3RhdGljU3R5bGUsa2V5Iik7ZnVuY3Rpb24gTyhlLHQsbixyKXt2YXIgaSxvPXQudGFnLGE9dC5kYXRhLHM9dC5jaGlsZHJlbjtpZihyPXJ8fGEmJmEucHJlLHQuZWxtPWUsUyh0LmlzQ29tbWVudCkmJkQodC5hc3luY0ZhY3RvcnkpKXJldHVybiB0LmlzQXN5bmNQbGFjZWhvbGRlcj0hMDtpZihEKGEpJiYoRChpPWEuaG9vaykmJkQoaT1pLmluaXQpJiZpKHQsITApLEQoaT10LmNvbXBvbmVudEluc3RhbmNlKSkpcmV0dXJuIGQodCxuKSwhMDtpZihEKG8pKXtpZihEKHMpKWlmKGUuaGFzQ2hpbGROb2RlcygpKWlmKEQoaT1hKSYmRChpPWkuZG9tUHJvcHMpJiZEKGk9aS5pbm5lckhUTUwpKXtpZihpIT09ZS5pbm5lckhUTUwpcmV0dXJuITF9ZWxzZXtmb3IodmFyIGM9ITAsbD1lLmZpcnN0Q2hpbGQsdT0wO3U8cy5sZW5ndGg7dSsrKXtpZighbHx8IU8obCxzW3VdLG4scikpe2M9ITE7YnJlYWt9bD1sLm5leHRTaWJsaW5nfWlmKCFjfHxsKXJldHVybiExfWVsc2Ugdih0LHMsbik7aWYoRChhKSl7dmFyIGY9ITE7Zm9yKHZhciBwIGluIGEpaWYoIW0ocCkpe2Y9ITAsaCh0LG4pO2JyZWFrfSFmJiZhLmNsYXNzJiZZZShhLmNsYXNzKX19ZWxzZSBlLmRhdGEhPT10LnRleHQmJihlLmRhdGE9dC50ZXh0KTtyZXR1cm4hMH1yZXR1cm4gZnVuY3Rpb24oZSx0LG4scixpLG8pe2lmKCFNKHQpKXt2YXIgYSxzPSExLGM9W107aWYoTShlKSlzPSEwLGIodCxjLGksbyk7ZWxzZXt2YXIgbD1EKGUubm9kZVR5cGUpO2lmKCFsJiZZbihlLHQpKWsoZSx0LGMscik7ZWxzZXtpZihsKXtpZigxPT09ZS5ub2RlVHlwZSYmZS5oYXNBdHRyaWJ1dGUoRSkmJihlLnJlbW92ZUF0dHJpYnV0ZShFKSxuPSEwKSxTKG4pJiZPKGUsdCxjKSlyZXR1cm4gQSh0LGMsITApLGU7YT1lLGU9bmV3IGxlKF8udGFnTmFtZShhKS50b0xvd2VyQ2FzZSgpLHt9LFtdLHZvaWQgMCxhKX12YXIgdT1lLmVsbSxmPV8ucGFyZW50Tm9kZSh1KTtpZihiKHQsYyx1Ll9sZWF2ZUNiP251bGw6ZixfLm5leHRTaWJsaW5nKHUpKSxEKHQucGFyZW50KSlmb3IodmFyIHA9dC5wYXJlbnQsZD0kKHQpO3A7KXtmb3IodmFyIHY9MDt2PGcuZGVzdHJveS5sZW5ndGg7Kyt2KWcuZGVzdHJveVt2XShwKTtpZihwLmVsbT10LmVsbSxkKXtmb3IodmFyIGg9MDtoPGcuY3JlYXRlLmxlbmd0aDsrK2gpZy5jcmVhdGVbaF0oWm4scCk7dmFyIG09cC5kYXRhLmhvb2suaW5zZXJ0O2lmKG0ubWVyZ2VkKWZvcih2YXIgeT0xO3k8bS5mbnMubGVuZ3RoO3krKyltLmZuc1t5XSgpfWVsc2UgR24ocCk7cD1wLnBhcmVudH1EKGYpP0MoMCxbZV0sMCwwKTpEKGUudGFnKSYmdyhlKX19cmV0dXJuIEEodCxjLHMpLHQuZWxtfUQoZSkmJncoZSl9fSh7bm9kZU9wczpxbixtb2R1bGVzOltscix5cixVcix6cix0aSxCP3tjcmVhdGU6QWksYWN0aXZhdGU6QWkscmVtb3ZlOmZ1bmN0aW9uKGUsdCl7ITAhPT1lLmRhdGEuc2hvdz9DaShlLHQpOnQoKX19Ont9XS5jb25jYXQob3IpfSk7SiYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIixmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7ZSYmZS52bW9kZWwmJk1pKGUsImlucHV0Iil9KTt2YXIgU2k9e2luc2VydGVkOmZ1bmN0aW9uKGUsdCxuLHIpeyJzZWxlY3QiPT09bi50YWc/KHIuZWxtJiYhci5lbG0uX3ZPcHRpb25zP3J0KG4sInBvc3RwYXRjaCIsZnVuY3Rpb24oKXtTaS5jb21wb25lbnRVcGRhdGVkKGUsdCxuKX0pOlRpKGUsdCxuLmNvbnRleHQpLGUuX3ZPcHRpb25zPVtdLm1hcC5jYWxsKGUub3B0aW9ucyxOaSkpOigidGV4dGFyZWEiPT09bi50YWd8fEtuKGUudHlwZSkpJiYoZS5fdk1vZGlmaWVycz10Lm1vZGlmaWVycyx0Lm1vZGlmaWVycy5sYXp5fHwoZS5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbnN0YXJ0IixMaSksZS5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbmVuZCIsSWkpLGUuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixJaSksSiYmKGUudm1vZGVsPSEwKSkpfSxjb21wb25lbnRVcGRhdGVkOmZ1bmN0aW9uKGUsdCxuKXtpZigic2VsZWN0Ij09PW4udGFnKXtUaShlLHQsbi5jb250ZXh0KTt2YXIgcj1lLl92T3B0aW9ucyxpPWUuX3ZPcHRpb25zPVtdLm1hcC5jYWxsKGUub3B0aW9ucyxOaSk7aWYoaS5zb21lKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIUMoZSxyW3RdKX0pKShlLm11bHRpcGxlP3QudmFsdWUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gamkoZSxpKX0pOnQudmFsdWUhPT10Lm9sZFZhbHVlJiZqaSh0LnZhbHVlLGkpKSYmTWkoZSwiY2hhbmdlIil9fX07ZnVuY3Rpb24gVGkoZSx0LG4pe0VpKGUsdCxuKSwoS3x8cSkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtFaShlLHQsbil9LDApfWZ1bmN0aW9uIEVpKGUsdCxuKXt2YXIgcj10LnZhbHVlLGk9ZS5tdWx0aXBsZTtpZighaXx8QXJyYXkuaXNBcnJheShyKSl7Zm9yKHZhciBvLGEscz0wLGM9ZS5vcHRpb25zLmxlbmd0aDtzPGM7cysrKWlmKGE9ZS5vcHRpb25zW3NdLGkpbz0tMTx4KHIsTmkoYSkpLGEuc2VsZWN0ZWQhPT1vJiYoYS5zZWxlY3RlZD1vKTtlbHNlIGlmKEMoTmkoYSkscikpcmV0dXJuIHZvaWQoZS5zZWxlY3RlZEluZGV4IT09cyYmKGUuc2VsZWN0ZWRJbmRleD1zKSk7aXx8KGUuc2VsZWN0ZWRJbmRleD0tMSl9fWZ1bmN0aW9uIGppKHQsZSl7cmV0dXJuIGUuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIUMoZSx0KX0pfWZ1bmN0aW9uIE5pKGUpe3JldHVybiJfdmFsdWUiaW4gZT9lLl92YWx1ZTplLnZhbHVlfWZ1bmN0aW9uIExpKGUpe2UudGFyZ2V0LmNvbXBvc2luZz0hMH1mdW5jdGlvbiBJaShlKXtlLnRhcmdldC5jb21wb3NpbmcmJihlLnRhcmdldC5jb21wb3Npbmc9ITEsTWkoZS50YXJnZXQsImlucHV0IikpfWZ1bmN0aW9uIE1pKGUsdCl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkhUTUxFdmVudHMiKTtuLmluaXRFdmVudCh0LCEwLCEwKSxlLmRpc3BhdGNoRXZlbnQobil9ZnVuY3Rpb24gRGkoZSl7cmV0dXJuIWUuY29tcG9uZW50SW5zdGFuY2V8fGUuZGF0YSYmZS5kYXRhLnRyYW5zaXRpb24/ZTpEaShlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSl9dmFyIFBpPXttb2RlbDpTaSxzaG93OntiaW5kOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LnZhbHVlLGk9KG49RGkobikpLmRhdGEmJm4uZGF0YS50cmFuc2l0aW9uLG89ZS5fX3ZPcmlnaW5hbERpc3BsYXk9Im5vbmUiPT09ZS5zdHlsZS5kaXNwbGF5PyIiOmUuc3R5bGUuZGlzcGxheTtyJiZpPyhuLmRhdGEuc2hvdz0hMCx3aShuLGZ1bmN0aW9uKCl7ZS5zdHlsZS5kaXNwbGF5PW99KSk6ZS5zdHlsZS5kaXNwbGF5PXI/bzoibm9uZSJ9LHVwZGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dC52YWx1ZTshciE9IXQub2xkVmFsdWUmJigobj1EaShuKSkuZGF0YSYmbi5kYXRhLnRyYW5zaXRpb24/KG4uZGF0YS5zaG93PSEwLHI/d2kobixmdW5jdGlvbigpe2Uuc3R5bGUuZGlzcGxheT1lLl9fdk9yaWdpbmFsRGlzcGxheX0pOkNpKG4sZnVuY3Rpb24oKXtlLnN0eWxlLmRpc3BsYXk9Im5vbmUifSkpOmUuc3R5bGUuZGlzcGxheT1yP2UuX192T3JpZ2luYWxEaXNwbGF5OiJub25lIil9LHVuYmluZDpmdW5jdGlvbihlLHQsbixyLGkpe2l8fChlLnN0eWxlLmRpc3BsYXk9ZS5fX3ZPcmlnaW5hbERpc3BsYXkpfX19LEZpPXtuYW1lOlN0cmluZyxhcHBlYXI6Qm9vbGVhbixjc3M6Qm9vbGVhbixtb2RlOlN0cmluZyx0eXBlOlN0cmluZyxlbnRlckNsYXNzOlN0cmluZyxsZWF2ZUNsYXNzOlN0cmluZyxlbnRlclRvQ2xhc3M6U3RyaW5nLGxlYXZlVG9DbGFzczpTdHJpbmcsZW50ZXJBY3RpdmVDbGFzczpTdHJpbmcsbGVhdmVBY3RpdmVDbGFzczpTdHJpbmcsYXBwZWFyQ2xhc3M6U3RyaW5nLGFwcGVhckFjdGl2ZUNsYXNzOlN0cmluZyxhcHBlYXJUb0NsYXNzOlN0cmluZyxkdXJhdGlvbjpbTnVtYmVyLFN0cmluZyxPYmplY3RdfTtmdW5jdGlvbiBSaShlKXt2YXIgdD1lJiZlLmNvbXBvbmVudE9wdGlvbnM7cmV0dXJuIHQmJnQuQ3Rvci5vcHRpb25zLmFic3RyYWN0P1JpKGx0KHQuY2hpbGRyZW4pKTplfWZ1bmN0aW9uIEhpKGUpe3ZhciB0PXt9LG49ZS4kb3B0aW9ucztmb3IodmFyIHIgaW4gbi5wcm9wc0RhdGEpdFtyXT1lW3JdO3ZhciBpPW4uX3BhcmVudExpc3RlbmVycztmb3IodmFyIG8gaW4gaSl0W2cobyldPWlbb107cmV0dXJuIHR9ZnVuY3Rpb24gQmkoZSx0KXtpZigvXGQta2VlcC1hbGl2ZSQvLnRlc3QodC50YWcpKXJldHVybiBlKCJrZWVwLWFsaXZlIix7cHJvcHM6dC5jb21wb25lbnRPcHRpb25zLnByb3BzRGF0YX0pfXZhciBVaT17bmFtZToidHJhbnNpdGlvbiIscHJvcHM6RmksYWJzdHJhY3Q6ITAscmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLiRzbG90cy5kZWZhdWx0O2lmKG4mJihuPW4uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhZ3x8Y3QoZSl9KSkubGVuZ3RoKXt2YXIgcj10aGlzLm1vZGUsaT1uWzBdO2lmKGZ1bmN0aW9uKGUpe2Zvcig7ZT1lLnBhcmVudDspaWYoZS5kYXRhLnRyYW5zaXRpb24pcmV0dXJuITB9KHRoaXMuJHZub2RlKSlyZXR1cm4gaTt2YXIgbz1SaShpKTtpZighbylyZXR1cm4gaTtpZih0aGlzLl9sZWF2aW5nKXJldHVybiBCaShlLGkpO3ZhciBhPSJfX3RyYW5zaXRpb24tIit0aGlzLl91aWQrIi0iO28ua2V5PW51bGw9PW8ua2V5P28uaXNDb21tZW50P2ErImNvbW1lbnQiOmErby50YWc6VChvLmtleSk/MD09PVN0cmluZyhvLmtleSkuaW5kZXhPZihhKT9vLmtleTphK28ua2V5Om8ua2V5O3ZhciBzLGMsbD0oby5kYXRhfHwoby5kYXRhPXt9KSkudHJhbnNpdGlvbj1IaSh0aGlzKSx1PXRoaXMuX3Zub2RlLGY9UmkodSk7aWYoby5kYXRhLmRpcmVjdGl2ZXMmJm8uZGF0YS5kaXJlY3RpdmVzLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuInNob3ciPT09ZS5uYW1lfSkmJihvLmRhdGEuc2hvdz0hMCksZiYmZi5kYXRhJiYocz1vLChjPWYpLmtleSE9PXMua2V5fHxjLnRhZyE9PXMudGFnKSYmIWN0KGYpJiYoIWYuY29tcG9uZW50SW5zdGFuY2V8fCFmLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZS5pc0NvbW1lbnQpKXt2YXIgcD1mLmRhdGEudHJhbnNpdGlvbj1tKHt9LGwpO2lmKCJvdXQtaW4iPT09cilyZXR1cm4gdGhpcy5fbGVhdmluZz0hMCxydChwLCJhZnRlckxlYXZlIixmdW5jdGlvbigpe3QuX2xlYXZpbmc9ITEsdC4kZm9yY2VVcGRhdGUoKX0pLEJpKGUsaSk7aWYoImluLW91dCI9PT1yKXtpZihjdChvKSlyZXR1cm4gdTt2YXIgZCx2PWZ1bmN0aW9uKCl7ZCgpfTtydChsLCJhZnRlckVudGVyIix2KSxydChsLCJlbnRlckNhbmNlbGxlZCIsdikscnQocCwiZGVsYXlMZWF2ZSIsZnVuY3Rpb24oZSl7ZD1lfSl9fXJldHVybiBpfX19LFZpPW0oe3RhZzpTdHJpbmcsbW92ZUNsYXNzOlN0cmluZ30sRmkpO2Z1bmN0aW9uIHppKGUpe2UuZWxtLl9tb3ZlQ2ImJmUuZWxtLl9tb3ZlQ2IoKSxlLmVsbS5fZW50ZXJDYiYmZS5lbG0uX2VudGVyQ2IoKX1mdW5jdGlvbiBLaShlKXtlLmRhdGEubmV3UG9zPWUuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWZ1bmN0aW9uIEppKGUpe3ZhciB0PWUuZGF0YS5wb3Msbj1lLmRhdGEubmV3UG9zLHI9dC5sZWZ0LW4ubGVmdCxpPXQudG9wLW4udG9wO2lmKHJ8fGkpe2UuZGF0YS5tb3ZlZD0hMDt2YXIgbz1lLmVsbS5zdHlsZTtvLnRyYW5zZm9ybT1vLldlYmtpdFRyYW5zZm9ybT0idHJhbnNsYXRlKCIrcisicHgsIitpKyJweCkiLG8udHJhbnNpdGlvbkR1cmF0aW9uPSIwcyJ9fWRlbGV0ZSBWaS5tb2RlO3ZhciBxaT17VHJhbnNpdGlvbjpVaSxUcmFuc2l0aW9uR3JvdXA6e3Byb3BzOlZpLHJlbmRlcjpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50YWd8fHRoaXMuJHZub2RlLmRhdGEudGFnfHwic3BhbiIsbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9dGhpcy5wcmV2Q2hpbGRyZW49dGhpcy5jaGlsZHJlbixpPXRoaXMuJHNsb3RzLmRlZmF1bHR8fFtdLG89dGhpcy5jaGlsZHJlbj1bXSxhPUhpKHRoaXMpLHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGM9aVtzXTtjLnRhZyYmbnVsbCE9Yy5rZXkmJjAhPT1TdHJpbmcoYy5rZXkpLmluZGV4T2YoIl9fdmxpc3QiKSYmKG8ucHVzaChjKSwoKG5bYy5rZXldPWMpLmRhdGF8fChjLmRhdGE9e30pKS50cmFuc2l0aW9uPWEpfWlmKHIpe2Zvcih2YXIgbD1bXSx1PVtdLGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIHA9cltmXTtwLmRhdGEudHJhbnNpdGlvbj1hLHAuZGF0YS5wb3M9cC5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbltwLmtleV0/bC5wdXNoKHApOnUucHVzaChwKX10aGlzLmtlcHQ9ZSh0LG51bGwsbCksdGhpcy5yZW1vdmVkPXV9cmV0dXJuIGUodCxudWxsLG8pfSxiZWZvcmVVcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9fcGF0Y2hfXyh0aGlzLl92bm9kZSx0aGlzLmtlcHQsITEsITApLHRoaXMuX3Zub2RlPXRoaXMua2VwdH0sdXBkYXRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJldkNoaWxkcmVuLHI9dGhpcy5tb3ZlQ2xhc3N8fCh0aGlzLm5hbWV8fCJ2IikrIi1tb3ZlIjtlLmxlbmd0aCYmdGhpcy5oYXNNb3ZlKGVbMF0uZWxtLHIpJiYoZS5mb3JFYWNoKHppKSxlLmZvckVhY2goS2kpLGUuZm9yRWFjaChKaSksdGhpcy5fcmVmbG93PWRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0LGUuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLmRhdGEubW92ZWQpe3ZhciBuPWUuZWxtLHQ9bi5zdHlsZTtoaShuLHIpLHQudHJhbnNmb3JtPXQuV2Via2l0VHJhbnNmb3JtPXQudHJhbnNpdGlvbkR1cmF0aW9uPSIiLG4uYWRkRXZlbnRMaXN0ZW5lcih1aSxuLl9tb3ZlQ2I9ZnVuY3Rpb24gZSh0KXt0JiYhL3RyYW5zZm9ybSQvLnRlc3QodC5wcm9wZXJ0eU5hbWUpfHwobi5yZW1vdmVFdmVudExpc3RlbmVyKHVpLGUpLG4uX21vdmVDYj1udWxsLG1pKG4scikpfSl9fSkpfSxtZXRob2RzOntoYXNNb3ZlOmZ1bmN0aW9uKGUsdCl7aWYoIWFpKXJldHVybiExO2lmKHRoaXMuX2hhc01vdmUpcmV0dXJuIHRoaXMuX2hhc01vdmU7dmFyIG49ZS5jbG9uZU5vZGUoKTtlLl90cmFuc2l0aW9uQ2xhc3NlcyYmZS5fdHJhbnNpdGlvbkNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbihlKXtyaShuLGUpfSksbmkobix0KSxuLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuJGVsLmFwcGVuZENoaWxkKG4pO3ZhciByPV9pKG4pO3JldHVybiB0aGlzLiRlbC5yZW1vdmVDaGlsZChuKSx0aGlzLl9oYXNNb3ZlPXIuaGFzVHJhbnNmb3JtfX19fTtobi5jb25maWcubXVzdFVzZVByb3A9U24saG4uY29uZmlnLmlzUmVzZXJ2ZWRUYWc9VW4saG4uY29uZmlnLmlzUmVzZXJ2ZWRBdHRyPUFuLGhuLmNvbmZpZy5nZXRUYWdOYW1lc3BhY2U9Vm4saG4uY29uZmlnLmlzVW5rbm93bkVsZW1lbnQ9ZnVuY3Rpb24oZSl7aWYoIUIpcmV0dXJuITA7aWYoVW4oZSkpcmV0dXJuITE7aWYoZT1lLnRvTG93ZXJDYXNlKCksbnVsbCE9em5bZV0pcmV0dXJuIHpuW2VdO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuLTE8ZS5pbmRleE9mKCItIik/em5bZV09dC5jb25zdHJ1Y3Rvcj09PXdpbmRvdy5IVE1MVW5rbm93bkVsZW1lbnR8fHQuY29uc3RydWN0b3I9PT13aW5kb3cuSFRNTEVsZW1lbnQ6em5bZV09L0hUTUxVbmtub3duRWxlbWVudC8udGVzdCh0LnRvU3RyaW5nKCkpfSxtKGhuLm9wdGlvbnMuZGlyZWN0aXZlcyxQaSksbShobi5vcHRpb25zLmNvbXBvbmVudHMscWkpLGhuLnByb3RvdHlwZS5fX3BhdGNoX189Qj9PaTokLGhuLnByb3RvdHlwZS4kbW91bnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1lJiZCP0puKGUpOnZvaWQgMCxyPWUsaT10LChuPXRoaXMpLiRlbD1yLG4uJG9wdGlvbnMucmVuZGVyfHwobi4kb3B0aW9ucy5yZW5kZXI9ZmUpLF90KG4sImJlZm9yZU1vdW50IiksbmV3IFN0KG4sZnVuY3Rpb24oKXtuLl91cGRhdGUobi5fcmVuZGVyKCksaSl9LCQsbnVsbCwhMCksaT0hMSxudWxsPT1uLiR2bm9kZSYmKG4uX2lzTW91bnRlZD0hMCxfdChuLCJtb3VudGVkIikpLG47dmFyIG4scixpfSxCJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ai5kZXZ0b29scyYmUSYmUS5lbWl0KCJpbml0Iixobil9LDApO3ZhciBXaT0vXHtceygoPzoufFxuKSs/KVx9XH0vZyxHaT0vWy0uKis/XiR7fSgpfFtcXVwvXFxdL2csWmk9ZShmdW5jdGlvbihlKXt2YXIgdD1lWzBdLnJlcGxhY2UoR2ksIlxcJCYiKSxuPWVbMV0ucmVwbGFjZShHaSwiXFwkJiIpO3JldHVybiBuZXcgUmVnRXhwKHQrIigoPzoufFxcbikrPykiK24sImciKX0pO3ZhciBYaT17c3RhdGljS2V5czpbInN0YXRpY0NsYXNzIl0sdHJhbnNmb3JtTm9kZTpmdW5jdGlvbihlLHQpe3Qud2Fybjt2YXIgbj1TcihlLCJjbGFzcyIpO24mJihlLnN0YXRpY0NsYXNzPUpTT04uc3RyaW5naWZ5KG4pKTt2YXIgcj1PcihlLCJjbGFzcyIsITEpO3ImJihlLmNsYXNzQmluZGluZz1yKX0sZ2VuRGF0YTpmdW5jdGlvbihlKXt2YXIgdD0iIjtyZXR1cm4gZS5zdGF0aWNDbGFzcyYmKHQrPSJzdGF0aWNDbGFzczoiK2Uuc3RhdGljQ2xhc3MrIiwiKSxlLmNsYXNzQmluZGluZyYmKHQrPSJjbGFzczoiK2UuY2xhc3NCaW5kaW5nKyIsIiksdH19O3ZhciBZaSxRaT17c3RhdGljS2V5czpbInN0YXRpY1N0eWxlIl0sdHJhbnNmb3JtTm9kZTpmdW5jdGlvbihlLHQpe3Qud2Fybjt2YXIgbj1TcihlLCJzdHlsZSIpO24mJihlLnN0YXRpY1N0eWxlPUpTT04uc3RyaW5naWZ5KEtyKG4pKSk7dmFyIHI9T3IoZSwic3R5bGUiLCExKTtyJiYoZS5zdHlsZUJpbmRpbmc9cil9LGdlbkRhdGE6ZnVuY3Rpb24oZSl7dmFyIHQ9IiI7cmV0dXJuIGUuc3RhdGljU3R5bGUmJih0Kz0ic3RhdGljU3R5bGU6IitlLnN0YXRpY1N0eWxlKyIsIiksZS5zdHlsZUJpbmRpbmcmJih0Kz0ic3R5bGU6KCIrZS5zdHlsZUJpbmRpbmcrIiksIiksdH19LGVvPWZ1bmN0aW9uKGUpe3JldHVybihZaT1ZaXx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD1lLFlpLnRleHRDb250ZW50fSx0bz1zKCJhcmVhLGJhc2UsYnIsY29sLGVtYmVkLGZyYW1lLGhyLGltZyxpbnB1dCxpc2luZGV4LGtleWdlbixsaW5rLG1ldGEscGFyYW0sc291cmNlLHRyYWNrLHdiciIpLG5vPXMoImNvbGdyb3VwLGRkLGR0LGxpLG9wdGlvbnMscCx0ZCx0Zm9vdCx0aCx0aGVhZCx0cixzb3VyY2UiKSxybz1zKCJhZGRyZXNzLGFydGljbGUsYXNpZGUsYmFzZSxibG9ja3F1b3RlLGJvZHksY2FwdGlvbixjb2wsY29sZ3JvdXAsZGQsZGV0YWlscyxkaWFsb2csZGl2LGRsLGR0LGZpZWxkc2V0LGZpZ2NhcHRpb24sZmlndXJlLGZvb3Rlcixmb3JtLGgxLGgyLGgzLGg0LGg1LGg2LGhlYWQsaGVhZGVyLGhncm91cCxocixodG1sLGxlZ2VuZCxsaSxtZW51aXRlbSxtZXRhLG9wdGdyb3VwLG9wdGlvbixwYXJhbSxycCxydCxzb3VyY2Usc3R5bGUsc3VtbWFyeSx0Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCx0aXRsZSx0cix0cmFjayIpLGlvPS9eXHMqKFteXHMiJzw+XC89XSspKD86XHMqKD0pXHMqKD86IihbXiJdKikiK3wnKFteJ10qKScrfChbXlxzIic9PD5gXSspKSk/Lyxvbz0iW2EtekEtWl9dW1xcd1xcLVxcLl0qIixhbz0iKCg/OiIrb28rIlxcOik/IitvbysiKSIsc289bmV3IFJlZ0V4cCgiXjwiK2FvKSxjbz0vXlxzKihcLz8pPi8sbG89bmV3IFJlZ0V4cCgiXjxcXC8iK2FvKyJbXj5dKj4iKSx1bz0vXjwhRE9DVFlQRSBbXj5dKz4vaSxmbz0vXjwhXC0tLyxwbz0vXjwhXFsvLHZvPSExOyJ4Ii5yZXBsYWNlKC94KC4pPy9nLGZ1bmN0aW9uKGUsdCl7dm89IiI9PT10fSk7dmFyIGhvPXMoInNjcmlwdCxzdHlsZSx0ZXh0YXJlYSIsITApLG1vPXt9LHlvPXsiJmx0OyI6IjwiLCImZ3Q7IjoiPiIsIiZxdW90OyI6JyInLCImYW1wOyI6IiYiLCImIzEwOyI6IlxuIiwiJiM5OyI6Ilx0In0sZ289LyYoPzpsdHxndHxxdW90fGFtcCk7L2csX289LyYoPzpsdHxndHxxdW90fGFtcHwjMTB8IzkpOy9nLGJvPXMoInByZSx0ZXh0YXJlYSIsITApLCRvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmJvKGUpJiYiXG4iPT09dFswXX07dmFyIHdvLENvLHhvLGtvLEFvLE9vLFNvLFRvLEVvPS9eQHxedi1vbjovLGpvPS9edi18XkB8XjovLE5vPS8oW15dKj8pXHMrKD86aW58b2YpXHMrKFteXSopLyxMbz0vLChbXixcfVxdXSopKD86LChbXixcfVxdXSopKT8kLyxJbz0vXlwofFwpJC9nLE1vPS86KC4qKSQvLERvPS9eOnxedi1iaW5kOi8sUG89L1wuW14uXSsvZyxGbz1lKGVvKTtmdW5jdGlvbiBSbyhlLHQsbil7cmV0dXJue3R5cGU6MSx0YWc6ZSxhdHRyc0xpc3Q6dCxhdHRyc01hcDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9e30sbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0W2Vbbl0ubmFtZV09ZVtuXS52YWx1ZTtyZXR1cm4gdH0odCkscGFyZW50Om4sY2hpbGRyZW46W119fWZ1bmN0aW9uIEhvKGUscCl7d289cC53YXJufHwkcixPbz1wLmlzUHJlVGFnfHxPLFNvPXAubXVzdFVzZVByb3B8fE8sVG89cC5nZXRUYWdOYW1lc3BhY2V8fE8seG89d3IocC5tb2R1bGVzLCJ0cmFuc2Zvcm1Ob2RlIiksa289d3IocC5tb2R1bGVzLCJwcmVUcmFuc2Zvcm1Ob2RlIiksQW89d3IocC5tb2R1bGVzLCJwb3N0VHJhbnNmb3JtTm9kZSIpLENvPXAuZGVsaW1pdGVyczt2YXIgZCx2LGg9W10saT0hMSE9PXAucHJlc2VydmVXaGl0ZXNwYWNlLG09ITEseT0hMTtmdW5jdGlvbiBnKGUpe2UucHJlJiYobT0hMSksT28oZS50YWcpJiYoeT0hMSk7Zm9yKHZhciB0PTA7dDxBby5sZW5ndGg7dCsrKUFvW3RdKGUscCl9cmV0dXJuIGZ1bmN0aW9uKGksZCl7Zm9yKHZhciBlLHYsaD1bXSxtPWQuZXhwZWN0SFRNTCx5PWQuaXNVbmFyeVRhZ3x8TyxnPWQuY2FuQmVMZWZ0T3BlblRhZ3x8TyxhPTA7aTspe2lmKGU9aSx2JiZobyh2KSl7dmFyIHI9MCxvPXYudG9Mb3dlckNhc2UoKSx0PW1vW29dfHwobW9bb109bmV3IFJlZ0V4cCgiKFtcXHNcXFNdKj8pKDwvIitvKyJbXj5dKj4pIiwiaSIpKSxuPWkucmVwbGFjZSh0LGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcj1uLmxlbmd0aCxobyhvKXx8Im5vc2NyaXB0Ij09PW98fCh0PXQucmVwbGFjZSgvPCFcLS0oW1xzXFNdKj8pLS0+L2csIiQxIikucmVwbGFjZSgvPCFcW0NEQVRBXFsoW1xzXFNdKj8pXV0+L2csIiQxIikpLCRvKG8sdCkmJih0PXQuc2xpY2UoMSkpLGQuY2hhcnMmJmQuY2hhcnModCksIiJ9KTthKz1pLmxlbmd0aC1uLmxlbmd0aCxpPW4sQShvLGEtcixhKX1lbHNle3ZhciBzPWkuaW5kZXhPZigiPCIpO2lmKDA9PT1zKXtpZihmby50ZXN0KGkpKXt2YXIgYz1pLmluZGV4T2YoIi0tXHgzZSIpO2lmKDA8PWMpe2Quc2hvdWxkS2VlcENvbW1lbnQmJmQuY29tbWVudChpLnN1YnN0cmluZyg0LGMpKSxDKGMrMyk7Y29udGludWV9fWlmKHBvLnRlc3QoaSkpe3ZhciBsPWkuaW5kZXhPZigiXT4iKTtpZigwPD1sKXtDKGwrMik7Y29udGludWV9fXZhciB1PWkubWF0Y2godW8pO2lmKHUpe0ModVswXS5sZW5ndGgpO2NvbnRpbnVlfXZhciBmPWkubWF0Y2gobG8pO2lmKGYpe3ZhciBwPWE7QyhmWzBdLmxlbmd0aCksQShmWzFdLHAsYSk7Y29udGludWV9dmFyIF89eCgpO2lmKF8pe2soXyksJG8odixpKSYmQygxKTtjb250aW51ZX19dmFyIGI9dm9pZCAwLCQ9dm9pZCAwLHc9dm9pZCAwO2lmKDA8PXMpe2ZvcigkPWkuc2xpY2Uocyk7IShsby50ZXN0KCQpfHxzby50ZXN0KCQpfHxmby50ZXN0KCQpfHxwby50ZXN0KCQpfHwodz0kLmluZGV4T2YoIjwiLDEpKTwwKTspcys9dywkPWkuc2xpY2Uocyk7Yj1pLnN1YnN0cmluZygwLHMpLEMocyl9czwwJiYoYj1pLGk9IiIpLGQuY2hhcnMmJmImJmQuY2hhcnMoYil9aWYoaT09PWUpe2QuY2hhcnMmJmQuY2hhcnMoaSk7YnJlYWt9fWZ1bmN0aW9uIEMoZSl7YSs9ZSxpPWkuc3Vic3RyaW5nKGUpfWZ1bmN0aW9uIHgoKXt2YXIgZT1pLm1hdGNoKHNvKTtpZihlKXt2YXIgdCxuLHI9e3RhZ05hbWU6ZVsxXSxhdHRyczpbXSxzdGFydDphfTtmb3IoQyhlWzBdLmxlbmd0aCk7ISh0PWkubWF0Y2goY28pKSYmKG49aS5tYXRjaChpbykpOylDKG5bMF0ubGVuZ3RoKSxyLmF0dHJzLnB1c2gobik7aWYodClyZXR1cm4gci51bmFyeVNsYXNoPXRbMV0sQyh0WzBdLmxlbmd0aCksci5lbmQ9YSxyfX1mdW5jdGlvbiBrKGUpe3ZhciB0PWUudGFnTmFtZSxuPWUudW5hcnlTbGFzaDttJiYoInAiPT09diYmcm8odCkmJkEodiksZyh0KSYmdj09PXQmJkEodCkpO2Zvcih2YXIgcixpLG8sYT15KHQpfHwhIW4scz1lLmF0dHJzLmxlbmd0aCxjPW5ldyBBcnJheShzKSxsPTA7bDxzO2wrKyl7dmFyIHU9ZS5hdHRyc1tsXTt2byYmLTE9PT11WzBdLmluZGV4T2YoJyIiJykmJigiIj09PXVbM10mJmRlbGV0ZSB1WzNdLCIiPT09dVs0XSYmZGVsZXRlIHVbNF0sIiI9PT11WzVdJiZkZWxldGUgdVs1XSk7dmFyIGY9dVszXXx8dVs0XXx8dVs1XXx8IiIscD0iYSI9PT10JiYiaHJlZiI9PT11WzFdP2Quc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOmQuc2hvdWxkRGVjb2RlTmV3bGluZXM7Y1tsXT17bmFtZTp1WzFdLHZhbHVlOihyPWYsaT1wLG89aT9fbzpnbyxyLnJlcGxhY2UobyxmdW5jdGlvbihlKXtyZXR1cm4geW9bZV19KSl9fWF8fChoLnB1c2goe3RhZzp0LGxvd2VyQ2FzZWRUYWc6dC50b0xvd2VyQ2FzZSgpLGF0dHJzOmN9KSx2PXQpLGQuc3RhcnQmJmQuc3RhcnQodCxjLGEsZS5zdGFydCxlLmVuZCl9ZnVuY3Rpb24gQShlLHQsbil7dmFyIHIsaTtpZihudWxsPT10JiYodD1hKSxudWxsPT1uJiYobj1hKSxlJiYoaT1lLnRvTG93ZXJDYXNlKCkpLGUpZm9yKHI9aC5sZW5ndGgtMTswPD1yJiZoW3JdLmxvd2VyQ2FzZWRUYWchPT1pO3ItLSk7ZWxzZSByPTA7aWYoMDw9cil7Zm9yKHZhciBvPWgubGVuZ3RoLTE7cjw9bztvLS0pZC5lbmQmJmQuZW5kKGhbb10udGFnLHQsbik7aC5sZW5ndGg9cix2PXImJmhbci0xXS50YWd9ZWxzZSJiciI9PT1pP2Quc3RhcnQmJmQuc3RhcnQoZSxbXSwhMCx0LG4pOiJwIj09PWkmJihkLnN0YXJ0JiZkLnN0YXJ0KGUsW10sITEsdCxuKSxkLmVuZCYmZC5lbmQoZSx0LG4pKX1BKCl9KGUse3dhcm46d28sZXhwZWN0SFRNTDpwLmV4cGVjdEhUTUwsaXNVbmFyeVRhZzpwLmlzVW5hcnlUYWcsY2FuQmVMZWZ0T3BlblRhZzpwLmNhbkJlTGVmdE9wZW5UYWcsc2hvdWxkRGVjb2RlTmV3bGluZXM6cC5zaG91bGREZWNvZGVOZXdsaW5lcyxzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWY6cC5zaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYsc2hvdWxkS2VlcENvbW1lbnQ6cC5jb21tZW50cyxzdGFydDpmdW5jdGlvbihlLHQsbil7dmFyIHI9diYmdi5uc3x8VG8oZSk7SyYmInN2ZyI9PT1yJiYodD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO0tvLnRlc3Qoci5uYW1lKXx8KHIubmFtZT1yLm5hbWUucmVwbGFjZShKbywiIiksdC5wdXNoKHIpKX1yZXR1cm4gdH0odCkpO3ZhciBpLG8sYSxzLGMsbD1SbyhlLHQsdik7ciYmKGwubnM9ciksInN0eWxlIiE9PShpPWwpLnRhZyYmKCJzY3JpcHQiIT09aS50YWd8fGkuYXR0cnNNYXAudHlwZSYmInRleHQvamF2YXNjcmlwdCIhPT1pLmF0dHJzTWFwLnR5cGUpfHxZKCl8fChsLmZvcmJpZGRlbj0hMCk7Zm9yKHZhciB1PTA7dTxrby5sZW5ndGg7dSsrKWw9a29bdV0obCxwKXx8bDtpZihtfHwobnVsbCE9U3Iobz1sLCJ2LXByZSIpJiYoby5wcmU9ITApLGwucHJlJiYobT0hMCkpLE9vKGwudGFnKSYmKHk9ITApLG0/ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hdHRyc0xpc3QubGVuZ3RoO2lmKHQpZm9yKHZhciBuPWUuYXR0cnM9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09e25hbWU6ZS5hdHRyc0xpc3Rbcl0ubmFtZSx2YWx1ZTpKU09OLnN0cmluZ2lmeShlLmF0dHJzTGlzdFtyXS52YWx1ZSl9O2Vsc2UgZS5wcmV8fChlLnBsYWluPSEwKX0obCk6bC5wcm9jZXNzZWR8fChVbyhsKSxmdW5jdGlvbihlKXt2YXIgdD1TcihlLCJ2LWlmIik7aWYodCllLmlmPXQsVm8oZSx7ZXhwOnQsYmxvY2s6ZX0pO2Vsc2V7bnVsbCE9U3IoZSwidi1lbHNlIikmJihlLmVsc2U9ITApO3ZhciBuPVNyKGUsInYtZWxzZS1pZiIpO24mJihlLmVsc2VpZj1uKX19KGwpLG51bGwhPVNyKGE9bCwidi1vbmNlIikmJihhLm9uY2U9ITApLEJvKGwscCkpLGQ/aC5sZW5ndGh8fGQuaWYmJihsLmVsc2VpZnx8bC5lbHNlKSYmVm8oZCx7ZXhwOmwuZWxzZWlmLGJsb2NrOmx9KTpkPWwsdiYmIWwuZm9yYmlkZGVuKWlmKGwuZWxzZWlmfHxsLmVsc2Upcz1sLChjPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2Zvcig7dC0tOyl7aWYoMT09PWVbdF0udHlwZSlyZXR1cm4gZVt0XTtlLnBvcCgpfX0odi5jaGlsZHJlbikpJiZjLmlmJiZWbyhjLHtleHA6cy5lbHNlaWYsYmxvY2s6c30pO2Vsc2UgaWYobC5zbG90U2NvcGUpe3YucGxhaW49ITE7dmFyIGY9bC5zbG90VGFyZ2V0fHwnImRlZmF1bHQiJzsodi5zY29wZWRTbG90c3x8KHYuc2NvcGVkU2xvdHM9e30pKVtmXT1sfWVsc2Ugdi5jaGlsZHJlbi5wdXNoKGwpLGwucGFyZW50PXY7bj9nKGwpOih2PWwsaC5wdXNoKGwpKX0sZW5kOmZ1bmN0aW9uKCl7dmFyIGU9aFtoLmxlbmd0aC0xXSx0PWUuY2hpbGRyZW5bZS5jaGlsZHJlbi5sZW5ndGgtMV07dCYmMz09PXQudHlwZSYmIiAiPT09dC50ZXh0JiYheSYmZS5jaGlsZHJlbi5wb3AoKSxoLmxlbmd0aC09MSx2PWhbaC5sZW5ndGgtMV0sZyhlKX0sY2hhcnM6ZnVuY3Rpb24oZSl7aWYodiYmKCFLfHwidGV4dGFyZWEiIT09di50YWd8fHYuYXR0cnNNYXAucGxhY2Vob2xkZXIhPT1lKSl7dmFyIHQsbixyPXYuY2hpbGRyZW47aWYoZT15fHxlLnRyaW0oKT8ic2NyaXB0Ij09PSh0PXYpLnRhZ3x8InN0eWxlIj09PXQudGFnP2U6Rm8oZSk6aSYmci5sZW5ndGg/IiAiOiIiKSFtJiYiICIhPT1lJiYobj1mdW5jdGlvbihlLHQpe3ZhciBuPXQ/WmkodCk6V2k7aWYobi50ZXN0KGUpKXtmb3IodmFyIHIsaSxvLGE9W10scz1bXSxjPW4ubGFzdEluZGV4PTA7cj1uLmV4ZWMoZSk7KXtjPChpPXIuaW5kZXgpJiYocy5wdXNoKG89ZS5zbGljZShjLGkpKSxhLnB1c2goSlNPTi5zdHJpbmdpZnkobykpKTt2YXIgbD1fcihyWzFdLnRyaW0oKSk7YS5wdXNoKCJfcygiK2wrIikiKSxzLnB1c2goeyJAYmluZGluZyI6bH0pLGM9aStyWzBdLmxlbmd0aH1yZXR1cm4gYzxlLmxlbmd0aCYmKHMucHVzaChvPWUuc2xpY2UoYykpLGEucHVzaChKU09OLnN0cmluZ2lmeShvKSkpLHtleHByZXNzaW9uOmEuam9pbigiKyIpLHRva2VuczpzfX19KGUsQ28pKT9yLnB1c2goe3R5cGU6MixleHByZXNzaW9uOm4uZXhwcmVzc2lvbix0b2tlbnM6bi50b2tlbnMsdGV4dDplfSk6IiAiPT09ZSYmci5sZW5ndGgmJiIgIj09PXJbci5sZW5ndGgtMV0udGV4dHx8ci5wdXNoKHt0eXBlOjMsdGV4dDplfSl9fSxjb21tZW50OmZ1bmN0aW9uKGUpe3YuY2hpbGRyZW4ucHVzaCh7dHlwZTozLHRleHQ6ZSxpc0NvbW1lbnQ6ITB9KX19KSxkfWZ1bmN0aW9uIEJvKGUsdCl7dmFyIG4scixpLG87KHI9T3Iobj1lLCJrZXkiKSkmJihuLmtleT1yKSxlLnBsYWluPSFlLmtleSYmIWUuYXR0cnNMaXN0Lmxlbmd0aCwobz1PcihpPWUsInJlZiIpKSYmKGkucmVmPW8saS5yZWZJbkZvcj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZTt0Oyl7aWYodm9pZCAwIT09dC5mb3IpcmV0dXJuITA7dD10LnBhcmVudH1yZXR1cm4hMX0oaSkpLGZ1bmN0aW9uKGUpe2lmKCJzbG90Ij09PWUudGFnKWUuc2xvdE5hbWU9T3IoZSwibmFtZSIpO2Vsc2V7dmFyIHQ7InRlbXBsYXRlIj09PWUudGFnPyh0PVNyKGUsInNjb3BlIiksZS5zbG90U2NvcGU9dHx8U3IoZSwic2xvdC1zY29wZSIpKToodD1TcihlLCJzbG90LXNjb3BlIikpJiYoZS5zbG90U2NvcGU9dCk7dmFyIG49T3IoZSwic2xvdCIpO24mJihlLnNsb3RUYXJnZXQ9JyIiJz09PW4/JyJkZWZhdWx0Iic6biwidGVtcGxhdGUiPT09ZS50YWd8fGUuc2xvdFNjb3BlfHx4cihlLCJzbG90IixuKSl9fShlKSxmdW5jdGlvbihlKXt2YXIgdDsodD1PcihlLCJpcyIpKSYmKGUuY29tcG9uZW50PXQpO251bGwhPVNyKGUsImlubGluZS10ZW1wbGF0ZSIpJiYoZS5pbmxpbmVUZW1wbGF0ZT0hMCl9KGUpO2Zvcih2YXIgYT0wO2E8eG8ubGVuZ3RoO2ErKyllPXhvW2FdKGUsdCl8fGU7IWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYSxzLGM9ZS5hdHRyc0xpc3Q7Zm9yKHQ9MCxuPWMubGVuZ3RoO3Q8bjt0KyspaWYocj1pPWNbdF0ubmFtZSxvPWNbdF0udmFsdWUsam8udGVzdChyKSlpZihlLmhhc0JpbmRpbmdzPSEwLChhPXpvKHIpKSYmKHI9ci5yZXBsYWNlKFBvLCIiKSksRG8udGVzdChyKSlyPXIucmVwbGFjZShEbywiIiksbz1fcihvKSxzPSExLGEmJihhLnByb3AmJihzPSEwLCJpbm5lckh0bWwiPT09KHI9ZyhyKSkmJihyPSJpbm5lckhUTUwiKSksYS5jYW1lbCYmKHI9ZyhyKSksYS5zeW5jJiZBcihlLCJ1cGRhdGU6IitnKHIpLEVyKG8sIiRldmVudCIpKSksc3x8IWUuY29tcG9uZW50JiZTbyhlLnRhZyxlLmF0dHJzTWFwLnR5cGUscik/Q3IoZSxyLG8pOnhyKGUscixvKTtlbHNlIGlmKEVvLnRlc3Qocikpcj1yLnJlcGxhY2UoRW8sIiIpLEFyKGUscixvLGEsITEpO2Vsc2V7dmFyIGw9KHI9ci5yZXBsYWNlKGpvLCIiKSkubWF0Y2goTW8pLHU9bCYmbFsxXTt1JiYocj1yLnNsaWNlKDAsLSh1Lmxlbmd0aCsxKSkpLHA9cixkPWksdj1vLGg9dSxtPWEsKChmPWUpLmRpcmVjdGl2ZXN8fChmLmRpcmVjdGl2ZXM9W10pKS5wdXNoKHtuYW1lOnAscmF3TmFtZTpkLHZhbHVlOnYsYXJnOmgsbW9kaWZpZXJzOm19KSxmLnBsYWluPSExfWVsc2UgeHIoZSxyLEpTT04uc3RyaW5naWZ5KG8pKSwhZS5jb21wb25lbnQmJiJtdXRlZCI9PT1yJiZTbyhlLnRhZyxlLmF0dHJzTWFwLnR5cGUscikmJkNyKGUsciwidHJ1ZSIpO3ZhciBmLHAsZCx2LGgsbX0oZSl9ZnVuY3Rpb24gVW8oZSl7dmFyIHQ7aWYodD1TcihlLCJ2LWZvciIpKXt2YXIgbj1mdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKE5vKTtpZighdClyZXR1cm47dmFyIG49e307bi5mb3I9dFsyXS50cmltKCk7dmFyIHI9dFsxXS50cmltKCkucmVwbGFjZShJbywiIiksaT1yLm1hdGNoKExvKTtpPyhuLmFsaWFzPXIucmVwbGFjZShMbywiIiksbi5pdGVyYXRvcjE9aVsxXS50cmltKCksaVsyXSYmKG4uaXRlcmF0b3IyPWlbMl0udHJpbSgpKSk6bi5hbGlhcz1yO3JldHVybiBufSh0KTtuJiZtKGUsbil9fWZ1bmN0aW9uIFZvKGUsdCl7ZS5pZkNvbmRpdGlvbnN8fChlLmlmQ29uZGl0aW9ucz1bXSksZS5pZkNvbmRpdGlvbnMucHVzaCh0KX1mdW5jdGlvbiB6byhlKXt2YXIgdD1lLm1hdGNoKFBvKTtpZih0KXt2YXIgbj17fTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe25bZS5zbGljZSgxKV09ITB9KSxufX12YXIgS289L154bWxuczpOU1xkKy8sSm89L15OU1xkKzovO2Z1bmN0aW9uIHFvKGUpe3JldHVybiBSbyhlLnRhZyxlLmF0dHJzTGlzdC5zbGljZSgpLGUucGFyZW50KX12YXIgV289W1hpLFFpLHtwcmVUcmFuc2Zvcm1Ob2RlOmZ1bmN0aW9uKGUsdCl7aWYoImlucHV0Ij09PWUudGFnKXt2YXIgbixyPWUuYXR0cnNNYXA7aWYoIXJbInYtbW9kZWwiXSlyZXR1cm47aWYoKHJbIjp0eXBlIl18fHJbInYtYmluZDp0eXBlIl0pJiYobj1PcihlLCJ0eXBlIikpLHIudHlwZXx8bnx8IXJbInYtYmluZCJdfHwobj0iKCIrclsidi1iaW5kIl0rIikudHlwZSIpLG4pe3ZhciBpPVNyKGUsInYtaWYiLCEwKSxvPWk/IiYmKCIraSsiKSI6IiIsYT1udWxsIT1TcihlLCJ2LWVsc2UiLCEwKSxzPVNyKGUsInYtZWxzZS1pZiIsITApLGM9cW8oZSk7VW8oYyksa3IoYywidHlwZSIsImNoZWNrYm94IiksQm8oYyx0KSxjLnByb2Nlc3NlZD0hMCxjLmlmPSIoIituKyIpPT09J2NoZWNrYm94JyIrbyxWbyhjLHtleHA6Yy5pZixibG9jazpjfSk7dmFyIGw9cW8oZSk7U3IobCwidi1mb3IiLCEwKSxrcihsLCJ0eXBlIiwicmFkaW8iKSxCbyhsLHQpLFZvKGMse2V4cDoiKCIrbisiKT09PSdyYWRpbyciK28sYmxvY2s6bH0pO3ZhciB1PXFvKGUpO3JldHVybiBTcih1LCJ2LWZvciIsITApLGtyKHUsIjp0eXBlIixuKSxCbyh1LHQpLFZvKGMse2V4cDppLGJsb2NrOnV9KSxhP2MuZWxzZT0hMDpzJiYoYy5lbHNlaWY9cyksY319fX1dO3ZhciBHbyxabyxYbyxZbz17ZXhwZWN0SFRNTDohMCxtb2R1bGVzOldvLGRpcmVjdGl2ZXM6e21vZGVsOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLGMsbCx1LGYscCxkLHYsaCxtLHksZyxfPXQudmFsdWUsYj10Lm1vZGlmaWVycywkPWUudGFnLHc9ZS5hdHRyc01hcC50eXBlO2lmKGUuY29tcG9uZW50KXJldHVybiBUcihlLF8sYiksITE7aWYoInNlbGVjdCI9PT0kKWg9ZSxtPV8sZz0oZz0ndmFyICQkc2VsZWN0ZWRWYWwgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoJGV2ZW50LnRhcmdldC5vcHRpb25zLGZ1bmN0aW9uKG8pe3JldHVybiBvLnNlbGVjdGVkfSkubWFwKGZ1bmN0aW9uKG8pe3ZhciB2YWwgPSAiX3ZhbHVlIiBpbiBvID8gby5fdmFsdWUgOiBvLnZhbHVlO3JldHVybiAnKygoeT1iKSYmeS5udW1iZXI/Il9uKHZhbCkiOiJ2YWwiKSsifSk7IikrIiAiK0VyKG0sIiRldmVudC50YXJnZXQubXVsdGlwbGUgPyAkJHNlbGVjdGVkVmFsIDogJCRzZWxlY3RlZFZhbFswXSIpLEFyKGgsImNoYW5nZSIsZyxudWxsLCEwKTtlbHNlIGlmKCJpbnB1dCI9PT0kJiYiY2hlY2tib3giPT09dyljPWUsbD1fLGY9KHU9YikmJnUubnVtYmVyLHA9T3IoYywidmFsdWUiKXx8Im51bGwiLGQ9T3IoYywidHJ1ZS12YWx1ZSIpfHwidHJ1ZSIsdj1PcihjLCJmYWxzZS12YWx1ZSIpfHwiZmFsc2UiLENyKGMsImNoZWNrZWQiLCJBcnJheS5pc0FycmF5KCIrbCsiKT9faSgiK2wrIiwiK3ArIik+LTEiKygidHJ1ZSI9PT1kPyI6KCIrbCsiKSI6IjpfcSgiK2wrIiwiK2QrIikiKSksQXIoYywiY2hhbmdlIiwidmFyICQkYT0iK2wrIiwkJGVsPSRldmVudC50YXJnZXQsJCRjPSQkZWwuY2hlY2tlZD8oIitkKyIpOigiK3YrIik7aWYoQXJyYXkuaXNBcnJheSgkJGEpKXt2YXIgJCR2PSIrKGY/Il9uKCIrcCsiKSI6cCkrIiwkJGk9X2koJCRhLCQkdik7aWYoJCRlbC5jaGVja2VkKXskJGk8MCYmKCIrRXIobCwiJCRhLmNvbmNhdChbJCR2XSkiKSsiKX1lbHNleyQkaT4tMSYmKCIrRXIobCwiJCRhLnNsaWNlKDAsJCRpKS5jb25jYXQoJCRhLnNsaWNlKCQkaSsxKSkiKSsiKX19ZWxzZXsiK0VyKGwsIiQkYyIpKyJ9IixudWxsLCEwKTtlbHNlIGlmKCJpbnB1dCI9PT0kJiYicmFkaW8iPT09dylyPWUsaT1fLGE9KG89YikmJm8ubnVtYmVyLHM9T3IociwidmFsdWUiKXx8Im51bGwiLENyKHIsImNoZWNrZWQiLCJfcSgiK2krIiwiKyhzPWE/Il9uKCIrcysiKSI6cykrIikiKSxBcihyLCJjaGFuZ2UiLEVyKGkscyksbnVsbCwhMCk7ZWxzZSBpZigiaW5wdXQiPT09JHx8InRleHRhcmVhIj09PSQpIWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmF0dHJzTWFwLnR5cGUsaT1ufHx7fSxvPWkubGF6eSxhPWkubnVtYmVyLHM9aS50cmltLGM9IW8mJiJyYW5nZSIhPT1yLGw9bz8iY2hhbmdlIjoicmFuZ2UiPT09cj9QcjoiaW5wdXQiLHU9IiRldmVudC50YXJnZXQudmFsdWUiO3MmJih1PSIkZXZlbnQudGFyZ2V0LnZhbHVlLnRyaW0oKSIpLGEmJih1PSJfbigiK3UrIikiKTt2YXIgZj1Fcih0LHUpO2MmJihmPSJpZigkZXZlbnQudGFyZ2V0LmNvbXBvc2luZylyZXR1cm47IitmKSxDcihlLCJ2YWx1ZSIsIigiK3QrIikiKSxBcihlLGwsZixudWxsLCEwKSwoc3x8YSkmJkFyKGUsImJsdXIiLCIkZm9yY2VVcGRhdGUoKSIpfShlLF8sYik7ZWxzZSBpZighai5pc1Jlc2VydmVkVGFnKCQpKXJldHVybiBUcihlLF8sYiksITE7cmV0dXJuITB9LHRleHQ6ZnVuY3Rpb24oZSx0KXt0LnZhbHVlJiZDcihlLCJ0ZXh0Q29udGVudCIsIl9zKCIrdC52YWx1ZSsiKSIpfSxodG1sOmZ1bmN0aW9uKGUsdCl7dC52YWx1ZSYmQ3IoZSwiaW5uZXJIVE1MIiwiX3MoIit0LnZhbHVlKyIpIil9fSxpc1ByZVRhZzpmdW5jdGlvbihlKXtyZXR1cm4icHJlIj09PWV9LGlzVW5hcnlUYWc6dG8sbXVzdFVzZVByb3A6U24sY2FuQmVMZWZ0T3BlblRhZzpubyxpc1Jlc2VydmVkVGFnOlVuLGdldFRhZ05hbWVzcGFjZTpWbixzdGF0aWNLZXlzOihHbz1XbyxHby5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb25jYXQodC5zdGF0aWNLZXlzfHxbXSl9LFtdKS5qb2luKCIsIikpfSxRbz1lKGZ1bmN0aW9uKGUpe3JldHVybiBzKCJ0eXBlLHRhZyxhdHRyc0xpc3QsYXR0cnNNYXAscGxhaW4scGFyZW50LGNoaWxkcmVuLGF0dHJzIisoZT8iLCIrZToiIikpfSk7ZnVuY3Rpb24gZWEoZSx0KXtlJiYoWm89UW8odC5zdGF0aWNLZXlzfHwiIiksWG89dC5pc1Jlc2VydmVkVGFnfHxPLGZ1bmN0aW9uIGUodCl7dC5zdGF0aWM9ZnVuY3Rpb24oZSl7aWYoMj09PWUudHlwZSlyZXR1cm4hMTtpZigzPT09ZS50eXBlKXJldHVybiEwO3JldHVybiEoIWUucHJlJiYoZS5oYXNCaW5kaW5nc3x8ZS5pZnx8ZS5mb3J8fGMoZS50YWcpfHwhWG8oZS50YWcpfHxmdW5jdGlvbihlKXtmb3IoO2UucGFyZW50Oyl7aWYoInRlbXBsYXRlIiE9PShlPWUucGFyZW50KS50YWcpcmV0dXJuITE7aWYoZS5mb3IpcmV0dXJuITB9cmV0dXJuITF9KGUpfHwhT2JqZWN0LmtleXMoZSkuZXZlcnkoWm8pKSl9KHQpO2lmKDE9PT10LnR5cGUpe2lmKCFYbyh0LnRhZykmJiJzbG90IiE9PXQudGFnJiZudWxsPT10LmF0dHJzTWFwWyJpbmxpbmUtdGVtcGxhdGUiXSlyZXR1cm47Zm9yKHZhciBuPTAscj10LmNoaWxkcmVuLmxlbmd0aDtuPHI7bisrKXt2YXIgaT10LmNoaWxkcmVuW25dO2UoaSksaS5zdGF0aWN8fCh0LnN0YXRpYz0hMSl9aWYodC5pZkNvbmRpdGlvbnMpZm9yKHZhciBvPTEsYT10LmlmQ29uZGl0aW9ucy5sZW5ndGg7bzxhO28rKyl7dmFyIHM9dC5pZkNvbmRpdGlvbnNbb10uYmxvY2s7ZShzKSxzLnN0YXRpY3x8KHQuc3RhdGljPSExKX19fShlKSxmdW5jdGlvbiBlKHQsbil7aWYoMT09PXQudHlwZSl7aWYoKHQuc3RhdGljfHx0Lm9uY2UpJiYodC5zdGF0aWNJbkZvcj1uKSx0LnN0YXRpYyYmdC5jaGlsZHJlbi5sZW5ndGgmJigxIT09dC5jaGlsZHJlbi5sZW5ndGh8fDMhPT10LmNoaWxkcmVuWzBdLnR5cGUpKXJldHVybiB2b2lkKHQuc3RhdGljUm9vdD0hMCk7aWYodC5zdGF0aWNSb290PSExLHQuY2hpbGRyZW4pZm9yKHZhciByPTAsaT10LmNoaWxkcmVuLmxlbmd0aDtyPGk7cisrKWUodC5jaGlsZHJlbltyXSxufHwhIXQuZm9yKTtpZih0LmlmQ29uZGl0aW9ucylmb3IodmFyIG89MSxhPXQuaWZDb25kaXRpb25zLmxlbmd0aDtvPGE7bysrKWUodC5pZkNvbmRpdGlvbnNbb10uYmxvY2ssbil9fShlLCExKSl9dmFyIHRhPS9eKFtcdyRfXSt8XChbXildKj9cKSlccyo9PnxeZnVuY3Rpb25ccypcKC8sbmE9L15bQS1aYS16XyRdW1x3JF0qKD86XC5bQS1aYS16XyRdW1x3JF0qfFxbJ1teJ10qPyddfFxbIlteIl0qPyJdfFxbXGQrXXxcW1tBLVphLXpfJF1bXHckXSpdKSokLyxyYT17ZXNjOjI3LHRhYjo5LGVudGVyOjEzLHNwYWNlOjMyLHVwOjM4LGxlZnQ6MzcscmlnaHQ6MzksZG93bjo0MCxkZWxldGU6WzgsNDZdfSxpYT17ZXNjOiJFc2NhcGUiLHRhYjoiVGFiIixlbnRlcjoiRW50ZXIiLHNwYWNlOiIgIix1cDpbIlVwIiwiQXJyb3dVcCJdLGxlZnQ6WyJMZWZ0IiwiQXJyb3dMZWZ0Il0scmlnaHQ6WyJSaWdodCIsIkFycm93UmlnaHQiXSxkb3duOlsiRG93biIsIkFycm93RG93biJdLGRlbGV0ZTpbIkJhY2tzcGFjZSIsIkRlbGV0ZSJdfSxvYT1mdW5jdGlvbihlKXtyZXR1cm4iaWYoIitlKyIpcmV0dXJuIG51bGw7In0sYWE9e3N0b3A6IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsiLHByZXZlbnQ6IiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyIsc2VsZjpvYSgiJGV2ZW50LnRhcmdldCAhPT0gJGV2ZW50LmN1cnJlbnRUYXJnZXQiKSxjdHJsOm9hKCIhJGV2ZW50LmN0cmxLZXkiKSxzaGlmdDpvYSgiISRldmVudC5zaGlmdEtleSIpLGFsdDpvYSgiISRldmVudC5hbHRLZXkiKSxtZXRhOm9hKCIhJGV2ZW50Lm1ldGFLZXkiKSxsZWZ0Om9hKCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMCIpLG1pZGRsZTpvYSgiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDEiKSxyaWdodDpvYSgiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDIiKX07ZnVuY3Rpb24gc2EoZSx0LG4pe3ZhciByPXQ/Im5hdGl2ZU9uOnsiOiJvbjp7Ijtmb3IodmFyIGkgaW4gZSlyKz0nIicraSsnIjonK2NhKGksZVtpXSkrIiwiO3JldHVybiByLnNsaWNlKDAsLTEpKyJ9In1mdW5jdGlvbiBjYSh0LGUpe2lmKCFlKXJldHVybiJmdW5jdGlvbigpe30iO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIlsiK2UubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBjYSh0LGUpfSkuam9pbigiLCIpKyJdIjt2YXIgbj1uYS50ZXN0KGUudmFsdWUpLHI9dGEudGVzdChlLnZhbHVlKTtpZihlLm1vZGlmaWVycyl7dmFyIGk9IiIsbz0iIixhPVtdO2Zvcih2YXIgcyBpbiBlLm1vZGlmaWVycylpZihhYVtzXSlvKz1hYVtzXSxyYVtzXSYmYS5wdXNoKHMpO2Vsc2UgaWYoImV4YWN0Ij09PXMpe3ZhciBjPWUubW9kaWZpZXJzO28rPW9hKFsiY3RybCIsInNoaWZ0IiwiYWx0IiwibWV0YSJdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hY1tlXX0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iJGV2ZW50LiIrZSsiS2V5In0pLmpvaW4oInx8IikpfWVsc2UgYS5wdXNoKHMpO3JldHVybiBhLmxlbmd0aCYmKGkrPSJpZighKCdidXR0b24nIGluICRldmVudCkmJiIrYS5tYXAobGEpLmpvaW4oIiYmIikrIilyZXR1cm4gbnVsbDsiKSxvJiYoaSs9byksImZ1bmN0aW9uKCRldmVudCl7IitpKyhuPyJyZXR1cm4gIitlLnZhbHVlKyIoJGV2ZW50KSI6cj8icmV0dXJuICgiK2UudmFsdWUrIikoJGV2ZW50KSI6ZS52YWx1ZSkrIn0ifXJldHVybiBufHxyP2UudmFsdWU6ImZ1bmN0aW9uKCRldmVudCl7IitlLnZhbHVlKyJ9In1mdW5jdGlvbiBsYShlKXt2YXIgdD1wYXJzZUludChlLDEwKTtpZih0KXJldHVybiIkZXZlbnQua2V5Q29kZSE9PSIrdDt2YXIgbj1yYVtlXSxyPWlhW2VdO3JldHVybiJfaygkZXZlbnQua2V5Q29kZSwiK0pTT04uc3RyaW5naWZ5KGUpKyIsIitKU09OLnN0cmluZ2lmeShuKSsiLCRldmVudC5rZXksIitKU09OLnN0cmluZ2lmeShyKSsiKSJ9dmFyIHVhPXtvbjpmdW5jdGlvbihlLHQpe2Uud3JhcExpc3RlbmVycz1mdW5jdGlvbihlKXtyZXR1cm4iX2coIitlKyIsIit0LnZhbHVlKyIpIn19LGJpbmQ6ZnVuY3Rpb24odCxuKXt0LndyYXBEYXRhPWZ1bmN0aW9uKGUpe3JldHVybiJfYigiK2UrIiwnIit0LnRhZysiJywiK24udmFsdWUrIiwiKyhuLm1vZGlmaWVycyYmbi5tb2RpZmllcnMucHJvcD8idHJ1ZSI6ImZhbHNlIikrKG4ubW9kaWZpZXJzJiZuLm1vZGlmaWVycy5zeW5jPyIsdHJ1ZSI6IiIpKyIpIn19LGNsb2FrOiR9LGZhPWZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucz1lLHRoaXMud2Fybj1lLndhcm58fCRyLHRoaXMudHJhbnNmb3Jtcz13cihlLm1vZHVsZXMsInRyYW5zZm9ybUNvZGUiKSx0aGlzLmRhdGFHZW5GbnM9d3IoZS5tb2R1bGVzLCJnZW5EYXRhIiksdGhpcy5kaXJlY3RpdmVzPW0obSh7fSx1YSksZS5kaXJlY3RpdmVzKTt2YXIgdD1lLmlzUmVzZXJ2ZWRUYWd8fE87dGhpcy5tYXliZUNvbXBvbmVudD1mdW5jdGlvbihlKXtyZXR1cm4hdChlLnRhZyl9LHRoaXMub25jZUlkPTAsdGhpcy5zdGF0aWNSZW5kZXJGbnM9W119O2Z1bmN0aW9uIHBhKGUsdCl7dmFyIG49bmV3IGZhKHQpO3JldHVybntyZW5kZXI6IndpdGgodGhpcyl7cmV0dXJuICIrKGU/ZGEoZSxuKTonX2MoImRpdiIpJykrIn0iLHN0YXRpY1JlbmRlckZuczpuLnN0YXRpY1JlbmRlckZuc319ZnVuY3Rpb24gZGEoZSx0KXtpZihlLnN0YXRpY1Jvb3QmJiFlLnN0YXRpY1Byb2Nlc3NlZClyZXR1cm4gdmEoZSx0KTtpZihlLm9uY2UmJiFlLm9uY2VQcm9jZXNzZWQpcmV0dXJuIGhhKGUsdCk7aWYoZS5mb3ImJiFlLmZvclByb2Nlc3NlZClyZXR1cm4gZj10LHY9KHU9ZSkuZm9yLGg9dS5hbGlhcyxtPXUuaXRlcmF0b3IxPyIsIit1Lml0ZXJhdG9yMToiIix5PXUuaXRlcmF0b3IyPyIsIit1Lml0ZXJhdG9yMjoiIix1LmZvclByb2Nlc3NlZD0hMCwoZHx8Il9sIikrIigoIit2KyIpLGZ1bmN0aW9uKCIraCttK3krIil7cmV0dXJuICIrKHB8fGRhKSh1LGYpKyJ9KSI7aWYoZS5pZiYmIWUuaWZQcm9jZXNzZWQpcmV0dXJuIG1hKGUsdCk7aWYoInRlbXBsYXRlIiE9PWUudGFnfHxlLnNsb3RUYXJnZXQpe2lmKCJzbG90Ij09PWUudGFnKXJldHVybiBmdW5jdGlvbihlLHQpe3ZhciBuPWUuc2xvdE5hbWV8fCciZGVmYXVsdCInLHI9X2EoZSx0KSxpPSJfdCgiK24rKHI/IiwiK3I6IiIpLG89ZS5hdHRycyYmInsiK2UuYXR0cnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBnKGUubmFtZSkrIjoiK2UudmFsdWV9KS5qb2luKCIsIikrIn0iLGE9ZS5hdHRyc01hcFsidi1iaW5kIl07IW8mJiFhfHxyfHwoaSs9IixudWxsIik7byYmKGkrPSIsIitvKTthJiYoaSs9KG8/IiI6IixudWxsIikrIiwiK2EpO3JldHVybiBpKyIpIn0oZSx0KTt2YXIgbjtpZihlLmNvbXBvbmVudClhPWUuY29tcG9uZW50LGM9dCxsPShzPWUpLmlubGluZVRlbXBsYXRlP251bGw6X2EocyxjLCEwKSxuPSJfYygiK2ErIiwiK3lhKHMsYykrKGw/IiwiK2w6IiIpKyIpIjtlbHNle3ZhciByPWUucGxhaW4/dm9pZCAwOnlhKGUsdCksaT1lLmlubGluZVRlbXBsYXRlP251bGw6X2EoZSx0LCEwKTtuPSJfYygnIitlLnRhZysiJyIrKHI/IiwiK3I6IiIpKyhpPyIsIitpOiIiKSsiKSJ9Zm9yKHZhciBvPTA7bzx0LnRyYW5zZm9ybXMubGVuZ3RoO28rKyluPXQudHJhbnNmb3Jtc1tvXShlLG4pO3JldHVybiBufXJldHVybiBfYShlLHQpfHwidm9pZCAwIjt2YXIgYSxzLGMsbCx1LGYscCxkLHYsaCxtLHl9ZnVuY3Rpb24gdmEoZSx0KXtyZXR1cm4gZS5zdGF0aWNQcm9jZXNzZWQ9ITAsdC5zdGF0aWNSZW5kZXJGbnMucHVzaCgid2l0aCh0aGlzKXtyZXR1cm4gIitkYShlLHQpKyJ9IiksIl9tKCIrKHQuc3RhdGljUmVuZGVyRm5zLmxlbmd0aC0xKSsoZS5zdGF0aWNJbkZvcj8iLHRydWUiOiIiKSsiKSJ9ZnVuY3Rpb24gaGEoZSx0KXtpZihlLm9uY2VQcm9jZXNzZWQ9ITAsZS5pZiYmIWUuaWZQcm9jZXNzZWQpcmV0dXJuIG1hKGUsdCk7aWYoZS5zdGF0aWNJbkZvcil7Zm9yKHZhciBuPSIiLHI9ZS5wYXJlbnQ7cjspe2lmKHIuZm9yKXtuPXIua2V5O2JyZWFrfXI9ci5wYXJlbnR9cmV0dXJuIG4/Il9vKCIrZGEoZSx0KSsiLCIrdC5vbmNlSWQrKysiLCIrbisiKSI6ZGEoZSx0KX1yZXR1cm4gdmEoZSx0KX1mdW5jdGlvbiBtYShlLHQsbixyKXtyZXR1cm4gZS5pZlByb2Nlc3NlZD0hMCxmdW5jdGlvbiBlKHQsbixyLGkpe2lmKCF0Lmxlbmd0aClyZXR1cm4gaXx8Il9lKCkiO3ZhciBvPXQuc2hpZnQoKTtyZXR1cm4gby5leHA/IigiK28uZXhwKyIpPyIrYShvLmJsb2NrKSsiOiIrZSh0LG4scixpKToiIithKG8uYmxvY2spO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIHI/cihlLG4pOmUub25jZT9oYShlLG4pOmRhKGUsbil9fShlLmlmQ29uZGl0aW9ucy5zbGljZSgpLHQsbixyKX1mdW5jdGlvbiB5YShlLHQpe3ZhciBuLHIsaT0ieyIsbz1mdW5jdGlvbihlLHQpe3ZhciBuPWUuZGlyZWN0aXZlcztpZighbilyZXR1cm47dmFyIHIsaSxvLGEscz0iZGlyZWN0aXZlczpbIixjPSExO2ZvcihyPTAsaT1uLmxlbmd0aDtyPGk7cisrKXtvPW5bcl0sYT0hMDt2YXIgbD10LmRpcmVjdGl2ZXNbby5uYW1lXTtsJiYoYT0hIWwoZSxvLHQud2FybikpLGEmJihjPSEwLHMrPSd7bmFtZToiJytvLm5hbWUrJyIscmF3TmFtZToiJytvLnJhd05hbWUrJyInKyhvLnZhbHVlPyIsdmFsdWU6KCIrby52YWx1ZSsiKSxleHByZXNzaW9uOiIrSlNPTi5zdHJpbmdpZnkoby52YWx1ZSk6IiIpKyhvLmFyZz8nLGFyZzoiJytvLmFyZysnIic6IiIpKyhvLm1vZGlmaWVycz8iLG1vZGlmaWVyczoiK0pTT04uc3RyaW5naWZ5KG8ubW9kaWZpZXJzKToiIikrIn0sIil9aWYoYylyZXR1cm4gcy5zbGljZSgwLC0xKSsiXSJ9KGUsdCk7byYmKGkrPW8rIiwiKSxlLmtleSYmKGkrPSJrZXk6IitlLmtleSsiLCIpLGUucmVmJiYoaSs9InJlZjoiK2UucmVmKyIsIiksZS5yZWZJbkZvciYmKGkrPSJyZWZJbkZvcjp0cnVlLCIpLGUucHJlJiYoaSs9InByZTp0cnVlLCIpLGUuY29tcG9uZW50JiYoaSs9J3RhZzoiJytlLnRhZysnIiwnKTtmb3IodmFyIGE9MDthPHQuZGF0YUdlbkZucy5sZW5ndGg7YSsrKWkrPXQuZGF0YUdlbkZuc1thXShlKTtpZihlLmF0dHJzJiYoaSs9ImF0dHJzOnsiK3dhKGUuYXR0cnMpKyJ9LCIpLGUucHJvcHMmJihpKz0iZG9tUHJvcHM6eyIrd2EoZS5wcm9wcykrIn0sIiksZS5ldmVudHMmJihpKz1zYShlLmV2ZW50cywhMSx0Lndhcm4pKyIsIiksZS5uYXRpdmVFdmVudHMmJihpKz1zYShlLm5hdGl2ZUV2ZW50cywhMCx0Lndhcm4pKyIsIiksZS5zbG90VGFyZ2V0JiYhZS5zbG90U2NvcGUmJihpKz0ic2xvdDoiK2Uuc2xvdFRhcmdldCsiLCIpLGUuc2NvcGVkU2xvdHMmJihpKz0obj1lLnNjb3BlZFNsb3RzLHI9dCwic2NvcGVkU2xvdHM6X3UoWyIrT2JqZWN0LmtleXMobikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBnYShlLG5bZV0scil9KS5qb2luKCIsIikrIl0pLCIpKSxlLm1vZGVsJiYoaSs9Im1vZGVsOnt2YWx1ZToiK2UubW9kZWwudmFsdWUrIixjYWxsYmFjazoiK2UubW9kZWwuY2FsbGJhY2srIixleHByZXNzaW9uOiIrZS5tb2RlbC5leHByZXNzaW9uKyJ9LCIpLGUuaW5saW5lVGVtcGxhdGUpe3ZhciBzPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5jaGlsZHJlblswXTtpZigxPT09bi50eXBlKXt2YXIgcj1wYShuLHQub3B0aW9ucyk7cmV0dXJuImlubGluZVRlbXBsYXRlOntyZW5kZXI6ZnVuY3Rpb24oKXsiK3IucmVuZGVyKyJ9LHN0YXRpY1JlbmRlckZuczpbIityLnN0YXRpY1JlbmRlckZucy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uKCl7IitlKyJ9In0pLmpvaW4oIiwiKSsiXX0ifX0oZSx0KTtzJiYoaSs9cysiLCIpfXJldHVybiBpPWkucmVwbGFjZSgvLCQvLCIiKSsifSIsZS53cmFwRGF0YSYmKGk9ZS53cmFwRGF0YShpKSksZS53cmFwTGlzdGVuZXJzJiYoaT1lLndyYXBMaXN0ZW5lcnMoaSkpLGl9ZnVuY3Rpb24gZ2EoZSx0LG4pe3JldHVybiB0LmZvciYmIXQuZm9yUHJvY2Vzc2VkPyhyPWUsbz1uLGE9KGk9dCkuZm9yLHM9aS5hbGlhcyxjPWkuaXRlcmF0b3IxPyIsIitpLml0ZXJhdG9yMToiIixsPWkuaXRlcmF0b3IyPyIsIitpLml0ZXJhdG9yMjoiIixpLmZvclByb2Nlc3NlZD0hMCwiX2woKCIrYSsiKSxmdW5jdGlvbigiK3MrYytsKyIpe3JldHVybiAiK2dhKHIsaSxvKSsifSkiKToie2tleToiK2UrIixmbjoiKygiZnVuY3Rpb24oIitTdHJpbmcodC5zbG90U2NvcGUpKyIpe3JldHVybiAiKygidGVtcGxhdGUiPT09dC50YWc/dC5pZj90LmlmKyI/IisoX2EodCxuKXx8InVuZGVmaW5lZCIpKyI6dW5kZWZpbmVkIjpfYSh0LG4pfHwidW5kZWZpbmVkIjpkYSh0LG4pKSsifSIpKyJ9Ijt2YXIgcixpLG8sYSxzLGMsbH1mdW5jdGlvbiBfYShlLHQsbixyLGkpe3ZhciBvPWUuY2hpbGRyZW47aWYoby5sZW5ndGgpe3ZhciBhPW9bMF07aWYoMT09PW8ubGVuZ3RoJiZhLmZvciYmInRlbXBsYXRlIiE9PWEudGFnJiYic2xvdCIhPT1hLnRhZylyZXR1cm4ocnx8ZGEpKGEsdCk7dmFyIHM9bj9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpZigxPT09aS50eXBlKXtpZihiYShpKXx8aS5pZkNvbmRpdGlvbnMmJmkuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGJhKGUuYmxvY2spfSkpe249MjticmVha30odChpKXx8aS5pZkNvbmRpdGlvbnMmJmkuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQoZS5ibG9jayl9KSkmJihuPTEpfX1yZXR1cm4gbn0obyx0Lm1heWJlQ29tcG9uZW50KTowLGM9aXx8JGE7cmV0dXJuIlsiK28ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBjKGUsdCl9KS5qb2luKCIsIikrIl0iKyhzPyIsIitzOiIiKX19ZnVuY3Rpb24gYmEoZSl7cmV0dXJuIHZvaWQgMCE9PWUuZm9yfHwidGVtcGxhdGUiPT09ZS50YWd8fCJzbG90Ij09PWUudGFnfWZ1bmN0aW9uICRhKGUsdCl7cmV0dXJuIDE9PT1lLnR5cGU/ZGEoZSx0KTozPT09ZS50eXBlJiZlLmlzQ29tbWVudD8ocj1lLCJfZSgiK0pTT04uc3RyaW5naWZ5KHIudGV4dCkrIikiKToiX3YoIisoMj09PShuPWUpLnR5cGU/bi5leHByZXNzaW9uOkNhKEpTT04uc3RyaW5naWZ5KG4udGV4dCkpKSsiKSI7dmFyIG4scn1mdW5jdGlvbiB3YShlKXtmb3IodmFyIHQ9IiIsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3QrPSciJytyLm5hbWUrJyI6JytDYShyLnZhbHVlKSsiLCJ9cmV0dXJuIHQuc2xpY2UoMCwtMSl9ZnVuY3Rpb24gQ2EoZSl7cmV0dXJuIGUucmVwbGFjZSgvXHUyMDI4L2csIlxcdTIwMjgiKS5yZXBsYWNlKC9cdTIwMjkvZywiXFx1MjAyOSIpfW5ldyBSZWdFeHAoIlxcYiIrImRvLGlmLGZvcixsZXQsbmV3LHRyeSx2YXIsY2FzZSxlbHNlLHdpdGgsYXdhaXQsYnJlYWssY2F0Y2gsY2xhc3MsY29uc3Qsc3VwZXIsdGhyb3csd2hpbGUseWllbGQsZGVsZXRlLGV4cG9ydCxpbXBvcnQscmV0dXJuLHN3aXRjaCxkZWZhdWx0LGV4dGVuZHMsZmluYWxseSxjb250aW51ZSxkZWJ1Z2dlcixmdW5jdGlvbixhcmd1bWVudHMiLnNwbGl0KCIsIikuam9pbigiXFxifFxcYiIpKyJcXGIiKSxuZXcgUmVnRXhwKCJcXGIiKyJkZWxldGUsdHlwZW9mLHZvaWQiLnNwbGl0KCIsIikuam9pbigiXFxzKlxcKFteXFwpXSpcXCl8XFxiIikrIlxccypcXChbXlxcKV0qXFwpIik7ZnVuY3Rpb24geGEodCxuKXt0cnl7cmV0dXJuIG5ldyBGdW5jdGlvbih0KX1jYXRjaChlKXtyZXR1cm4gbi5wdXNoKHtlcnI6ZSxjb2RlOnR9KSwkfX12YXIga2EsQWEsT2E9KGthPWZ1bmN0aW9uKGUsdCl7dmFyIG49SG8oZS50cmltKCksdCk7ITEhPT10Lm9wdGltaXplJiZlYShuLHQpO3ZhciByPXBhKG4sdCk7cmV0dXJue2FzdDpuLHJlbmRlcjpyLnJlbmRlcixzdGF0aWNSZW5kZXJGbnM6ci5zdGF0aWNSZW5kZXJGbnN9fSxmdW5jdGlvbihzKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG49T2JqZWN0LmNyZWF0ZShzKSxyPVtdLGk9W107aWYobi53YXJuPWZ1bmN0aW9uKGUsdCl7KHQ/aTpyKS5wdXNoKGUpfSx0KWZvcih2YXIgbyBpbiB0Lm1vZHVsZXMmJihuLm1vZHVsZXM9KHMubW9kdWxlc3x8W10pLmNvbmNhdCh0Lm1vZHVsZXMpKSx0LmRpcmVjdGl2ZXMmJihuLmRpcmVjdGl2ZXM9bShPYmplY3QuY3JlYXRlKHMuZGlyZWN0aXZlc3x8bnVsbCksdC5kaXJlY3RpdmVzKSksdCkibW9kdWxlcyIhPT1vJiYiZGlyZWN0aXZlcyIhPT1vJiYobltvXT10W29dKTt2YXIgYT1rYShlLG4pO3JldHVybiBhLmVycm9ycz1yLGEudGlwcz1pLGF9cmV0dXJue2NvbXBpbGU6ZSxjb21waWxlVG9GdW5jdGlvbnM6KGM9ZSxsPU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oZSx0LG4peyh0PW0oe30sdCkpLndhcm4sZGVsZXRlIHQud2Fybjt2YXIgcj10LmRlbGltaXRlcnM/U3RyaW5nKHQuZGVsaW1pdGVycykrZTplO2lmKGxbcl0pcmV0dXJuIGxbcl07dmFyIGk9YyhlLHQpLG89e30sYT1bXTtyZXR1cm4gby5yZW5kZXI9eGEoaS5yZW5kZXIsYSksby5zdGF0aWNSZW5kZXJGbnM9aS5zdGF0aWNSZW5kZXJGbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB4YShlLGEpfSksbFtyXT1vfSl9O3ZhciBjLGx9KShZbykuY29tcGlsZVRvRnVuY3Rpb25zO2Z1bmN0aW9uIFNhKGUpe3JldHVybihBYT1BYXx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD1lPyc8YSBocmVmPSJcbiIvPic6JzxkaXYgYT0iXG4iLz4nLDA8QWEuaW5uZXJIVE1MLmluZGV4T2YoIiYjMTA7Iil9dmFyIFRhPSEhQiYmU2EoITEpLEVhPSEhQiYmU2EoITApLGphPWUoZnVuY3Rpb24oZSl7dmFyIHQ9Sm4oZSk7cmV0dXJuIHQmJnQuaW5uZXJIVE1MfSksTmE9aG4ucHJvdG90eXBlLiRtb3VudDtyZXR1cm4gaG4ucHJvdG90eXBlLiRtb3VudD1mdW5jdGlvbihlLHQpe2lmKChlPWUmJkpuKGUpKT09PWRvY3VtZW50LmJvZHl8fGU9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy4kb3B0aW9ucztpZighbi5yZW5kZXIpe3ZhciByPW4udGVtcGxhdGU7aWYocilpZigic3RyaW5nIj09dHlwZW9mIHIpIiMiPT09ci5jaGFyQXQoMCkmJihyPWphKHIpKTtlbHNle2lmKCFyLm5vZGVUeXBlKXJldHVybiB0aGlzO3I9ci5pbm5lckhUTUx9ZWxzZSBlJiYocj1mdW5jdGlvbihlKXt7aWYoZS5vdXRlckhUTUwpcmV0dXJuIGUub3V0ZXJIVE1MO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LmFwcGVuZENoaWxkKGUuY2xvbmVOb2RlKCEwKSksdC5pbm5lckhUTUx9fShlKSk7aWYocil7dmFyIGk9T2Eocix7c2hvdWxkRGVjb2RlTmV3bGluZXM6VGEsc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOkVhLGRlbGltaXRlcnM6bi5kZWxpbWl0ZXJzLGNvbW1lbnRzOm4uY29tbWVudHN9LHRoaXMpLG89aS5yZW5kZXIsYT1pLnN0YXRpY1JlbmRlckZucztuLnJlbmRlcj1vLG4uc3RhdGljUmVuZGVyRm5zPWF9fXJldHVybiBOYS5jYWxsKHRoaXMsZSx0KX0saG4uY29tcGlsZT1PYSxobn0pOw=='></script>
<style id="style_yokkmokk">
@font-face {
font-family: yokkmokkOT;
src: url("data:font/ttf;base64,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AEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgCjAFcAWABZAJYAWgChAFsAXABdAF4AXwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQByAHMAdAB1AHYAdwB4AHkAegB7AHwAfQB+AH8AgACBAIIAgwCEAIUAhgCHAIgAiQCKAIsAjACNAI4AjwCQAJEAkgCTAJQAlQCWAJcAmACZAJoAmwANAJwAnQCeAJ8AoAChAAAAAAAQAAAAqAkIBQABAQMCAwQFAwMEAgQCBQQCAwMDAwQDAgQCAgMEAwIGAwgFBAQEBAIEBAMGBQQEBQQCAwMEBgUEAwICAgQDBgQEAgQFAgQEAgYEAwQEBAICAwMGBQQDAwMFAgICBgYGBgYGCAgEBAQCAgIFBAQEBAQEAwMDAwMEBAQEBAQHBgQEBAICAgQDAwMDAwMDAwMDCAYCAgICAgIBAgIEAgICBgUBBQUAAAoJBQABAQMCBAUGAwMFAgQCBQUCBAMDBAUDAgQCAgMEAwMHAwkGBAQFBAIEBAMHBgUEBgQCBAQEBwUEAwICAwUDBwUEAgUGAgQEAgYFAwUFBQICAwMGBQQDAwMGAwIDBwcHBwcHCQkEBAQCAgIGBQUFBQUFBAQEBAMFBQUFBQUIBwQEBAICAgUDAwMDAwQDAwMDCAcDAwICAgIBAgIEAgICBwUBBQUAAAsKBgACAgQCBAUGAwMFAgQCBgUDBAQEBAUEAwUDAgMEAwMIAwoGBQUFBQIEBQMHBgUEBgUDBAQECAYFAwIDAwUDCAUFAwUGAgQEAgcFBAUFBQMDAwMHBgUDBAQGAwIDCAgICAgICQoFBQUCAgIGBQUFBQUFBAQEBAMFBQUFBQUJCAUFBQICAgUEBAQEBAQDAwMDCQgDAwICAwIBAgIEAgICBwYBBgYAAAwLBgACAgQDBAYHBAQGAgUDBgYDBQQEBAUEAwUDAwQFBAMIAwsHBQUFBQIFBQQIBwYFBwUDBQUFCAYFAwMDAwYDCQYFAwUHAgUFAggGBAYGBgMDBAQHBgUDBAQHAwMDCAgICAgICgsFBQUCAgIHBgYGBgYGBQUFBQMGBgYGBgYJCQUFBQICAgYEBAQEBAQEBAQECggDAwMDAwIBAwMFAwMDCAYBBgYAAA0MBwACAgQDBQYHBAQGAwUDBwYDBQQFBQYEAwYDAwQFBAMJBAwIBgYGBQMFBgQJBwYFCAUDBQUFCQcFBAMDAwYECQYGAwYIAwUFAggGBQYGBgMDBAQIBwYEBAQHAwMDCQkJCQkJCwwGBgYDAwMHBgYGBgYGBQUFBQQGBgYGBgYKCQYGBgMDAwYFBQUFBQUEBAQECwkDAwMDAwIBAwMFAwMDCQcCBwcAAA4NBwACAgUDBQcIBAQHAwUDBwcDBQUFBQYFAwYDAwQFBAQKBAwIBgYGBgMGBgQJCAcGCAYDBQUGCggGBAMDBAcECgcGAwYIAwYGAwkHBQcHBwMDBAQJBwYEBQUIBAMECgoKCgoKDA0GBgYDAwMIBwcHBwcHBQUFBQQHBwcHBwcLCgYGBgMDAwcFBQUFBQUEBAQEDAoEBAMDAwMBAwMGAwMDCQcCBwcAAA8OCAACAgUDBgcIBQUHAwYDCAcDBgUFBQcFBAcEAwUGBQQLBA0JBwcHBgMGBwUKCAcGCQYEBgYGCggGBAMEBAcECwcHBAcJAwYGAwkHBQcHBwQDBQUJCAYEBQUJBAMECwsLCwsLDQ4HBwcDAwMIBwcHBwcHBgYGBgQHBwcHBwcMCwcHBwMDAwcFBQUFBQUFBQUFDQoEBAMDBAMCAwMGAwMDCggCCAgAABAPCAACAgUEBggJBQUIAwYECAgEBgUGBgcFBAcEBAUGBQQLBQ4JBwcHBwMGBwULCQgGCQcEBgYGCwkHBAQEBAgFCwgHBAcJAwcGAwoHBggIBwQEBQUKCAcEBQUJBAMECwsLCwsLDg8HBwcDAwMJCAgICAgIBgYGBgUICAgICAgNCwcHBwMDAwcGBgYGBgYFBQUFDgsEBAQEBAMCAwMGBAQECwgCCAgAABEQCQACAgYEBggJBQUIAwcECQgEBwYGBggGBAcEBAUHBQUMBQ8KBwcIBwMHCAULCggHCgcEBgYHDAkHBQQEBAgFDAgHBAgKAwcHAwsIBggICAQEBQUKCQcFBgYKBAQFDAwMDAwMDxAHCAcDAwMKCAgICAgIBgYGBgUICAgICAgNDAcHBwMDAwgGBgYGBgYFBQUFDgwFBQQEBAMCBAQHBAQECwkCCQkAABIQCQADAwYEBwkKBgYJBAcECQkEBwYGBggGBAgEBAYHBgUNBRAKCAgICAQHCAUMCgkHCwcEBwcHDQoIBQQEBQkFDQkIBAgKBAcHAwsIBgkJCAQEBQYLCQgFBgYKBQQFDQ0NDQ0NDxAICAgEBAQKCQkJCQkJBwcHBwUJCQkJCQkODQgICAQEBAgGBgYGBgYFBQUFDwwFBQQEBAMCBAQHBAQEDAkCCQkAABMRCgADAwYEBwkLBgYJBAcECgkEBwYHBwkGBAgFBAYHBgUNBhELCAgJCAQICAYNCwkICwgEBwcIDQoIBQQFBQkFDQkIBAkLBAgIBAwJBwkJCQQEBgYMCggFBgYLBQQFDQ0NDQ0NEBEICAgEBAQLCQkJCQkJBwcHBwUJCQkJCQkPDQgICAQEBAkHBwcHBwcGBgYGEA0FBQQEBQQCBAQIBAQEDQoCCgoAABQSCgADAwcEBwoLBgYKBAgECgoFCAcHBwkHBQkFBAYIBgUOBhIMCQkJCAQICQYNCwoIDAgFCAgIDgsIBgUFBQoGDgoJBQkMBAgIBA0JBwoKCQUFBgYMCgkGBwcLBQQFDg4ODg4OERIJCQkEBAQLCgoKCgoKCAgICAYKCgoKCgoQDgkJCQQEBAkHBwcHBwcGBgYGEQ4FBQUFBQQCBAQIBQUEDgoCCgoAABUTCwADAwcFCAoMBgYKBAgFCwoFCAcHBwoHBQkFBQYIBgYPBhMMCQkJCQQJCQYODAoIDAkFCAgIDwsJBgUFBQoGDwoJBQoMBAkIBA0KBwoKCgUFBgcNCwkGBwcMBQQGDw8PDw8PEhMJCQkEBAQMCgoKCgoKCAgICAYKCgoKCgoRDwkJCQQEBAoHBwcHBwcGBgYGEg4GBgUFBQQCBAQIBQUFDgsDCwsAABYUCwADAwcFCAsMBwcLBAkFCwoFCAcICAoHBQoFBQcJBwYPBhQNCgoKCQQJCgcPDAoJDQkFCAgJDwwJBgUFBgsGEAsKBQoNBAkJBA4KCAsLCgUFBwcOCwkGBwcNBgUGDw8PDw8PExQKCgoEBAQMCgoKCgoLCAgICAYLCwsLCwsREAoKCgQEBAoICAgICAgHBwcHEw8GBgUFBQQCBQUJBQUFDwsDCwsAABcVDAADAwcFCQsNBwcLBQkFDAsFCQcICAsIBQoGBQcJBwYQBxQNCgoKCgUJCgcPDQsJDQoFCQkJEAwKBgUGBgsHEAsKBQoNBQkJBA4LCAsLCwUFBwcODAoGBwgNBgUGEBAQEBAQFBUKCgoFBQUNCwsLCwsLCQkJCQcLCwsLCwsSEAoKCgUFBQsICAgICAgHBwcHFBAGBgUFBgQCBQUJBQUFEAwDDAwAABgWDAADAwgFCQwNBwcMBQkFDAsGCQgICAsIBgoGBQcJBwYRBxUOCgoLCgUKCwcQDgsKDgoGCQkKEQ0KBwUGBgsHEQwKBgsOBQoKBA8LCAwMCwYGBwgPDAoHCAgOBgUGERERERERFRYKCwoFBQUOCwsLCwsMCQkJCQcLCwsLCwsTEQoKCgUFBQsICAgICAgHBwcHFBEGBgUFBgQCBQUKBQUFEAwDDAwAAAABAV0BkAAFAAICvAKKAAAAjwK8AooAAAHFADIBAwAAAAAEAAAAAAAAAAAAAAMAAAAAAAAAAAAAAABNQUNSAEAAICIZAyH/OQAAAyEAxwAAAAEAAAAAAAAAAQAAgAAAAACLAT8AAGAAAbQCdVlva2ttb2trICAgICAgICD/////N////llPS1IwMAAAAAAAAAABAAAAAQAAmJpL9V8PPPUAAAPoAAAAALfnFZIAAAAAt+cVkv+2/zkDawMhAAAAAwACAAEAAAAAAAEAAAMh/zkAAAOQ/7b/uANrAAEAAAAAAAAAAAAAAAAAAACkAAEAAACkAJgADQAAAAAAAgAIAEAACgAAAF0AvgABAAE=");
}
@font-face {
font-family: 'yokkmokkOT_file';
src: url('./fonts/yokkmokkOT.otf'); /* IE 5-8 */
src: local('?'), /* sneakily trick IE */
url('./fonts/yokkmokk.ttf') format('truetype'), /* Opera, Safari */
url('./fonts/yokkmokkOT.woff') format('woff'), /* FF 3.6, Chrome 5, IE9 */
url('./fonts/yokkmokkOT.svg#font') format('svg'); /* iOS */
}
body {
// font-family: yokkmokkOT;
// document.getElementById("body").style.font = "italic bold 20px arial,serif";
// background: url("data:font/ttf;base64,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AEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgCjAFcAWABZAJYAWgChAFsAXABdAF4AXwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQByAHMAdAB1AHYAdwB4AHkAegB7AHwAfQB+AH8AgACBAIIAgwCEAIUAhgCHAIgAiQCKAIsAjACNAI4AjwCQAJEAkgCTAJQAlQCWAJcAmACZAJoAmwANAJwAnQCeAJ8AoAChAAAAAAAQAAAAqAkIBQABAQMCAwQFAwMEAgQCBQQCAwMDAwQDAgQCAgMEAwIGAwgFBAQEBAIEBAMGBQQEBQQCAwMEBgUEAwICAgQDBgQEAgQFAgQEAgYEAwQEBAICAwMGBQQDAwMFAgICBgYGBgYGCAgEBAQCAgIFBAQEBAQEAwMDAwMEBAQEBAQHBgQEBAICAgQDAwMDAwMDAwMDCAYCAgICAgIBAgIEAgICBgUBBQUAAAoJBQABAQMCBAUGAwMFAgQCBQUCBAMDBAUDAgQCAgMEAwMHAwkGBAQFBAIEBAMHBgUEBgQCBAQEBwUEAwICAwUDBwUEAgUGAgQEAgYFAwUFBQICAwMGBQQDAwMGAwIDBwcHBwcHCQkEBAQCAgIGBQUFBQUFBAQEBAMFBQUFBQUIBwQEBAICAgUDAwMDAwQDAwMDCAcDAwICAgIBAgIEAgICBwUBBQUAAAsKBgACAgQCBAUGAwMFAgQCBgUDBAQEBAUEAwUDAgMEAwMIAwoGBQUFBQIEBQMHBgUEBgUDBAQECAYFAwIDAwUDCAUFAwUGAgQEAgcFBAUFBQMDAwMHBgUDBAQGAwIDCAgICAgICQoFBQUCAgIGBQUFBQUFBAQEBAMFBQUFBQUJCAUFBQICAgUEBAQEBAQDAwMDCQgDAwICAwIBAgIEAgICBwYBBgYAAAwLBgACAgQDBAYHBAQGAgUDBgYDBQQEBAUEAwUDAwQFBAMIAwsHBQUFBQIFBQQIBwYFBwUDBQUFCAYFAwMDAwYDCQYFAwUHAgUFAggGBAYGBgMDBAQHBgUDBAQHAwMDCAgICAgICgsFBQUCAgIHBgYGBgYGBQUFBQMGBgYGBgYJCQUFBQICAgYEBAQEBAQEBAQECggDAwMDAwIBAwMFAwMDCAYBBgYAAA0MBwACAgQDBQYHBAQGAwUDBwYDBQQFBQYEAwYDAwQFBAMJBAwIBgYGBQMFBgQJBwYFCAUDBQUFCQcFBAMDAwYECQYGAwYIAwUFAggGBQYGBgMDBAQIBwYEBAQHAwMDCQkJCQkJCwwGBgYDAwMHBgYGBgYGBQUFBQQGBgYGBgYKCQYGBgMDAwYFBQUFBQUEBAQECwkDAwMDAwIBAwMFAwMDCQcCBwcAAA4NBwACAgUDBQcIBAQHAwUDBwcDBQUFBQYFAwYDAwQFBAQKBAwIBgYGBgMGBgQJCAcGCAYDBQUGCggGBAMDBAcECgcGAwYIAwYGAwkHBQcHBwMDBAQJBwYEBQUIBAMECgoKCgoKDA0GBgYDAwMIBwcHBwcHBQUFBQQHBwcHBwcLCgYGBgMDAwcFBQUFBQUEBAQEDAoEBAMDAwMBAwMGAwMDCQcCBwcAAA8OCAACAgUDBgcIBQUHAwYDCAcDBgUFBQcFBAcEAwUGBQQLBA0JBwcHBgMGBwUKCAcGCQYEBgYGCggGBAMEBAcECwcHBAcJAwYGAwkHBQcHBwQDBQUJCAYEBQUJBAMECwsLCwsLDQ4HBwcDAwMIBwcHBwcHBgYGBgQHBwcHBwcMCwcHBwMDAwcFBQUFBQUFBQUFDQoEBAMDBAMCAwMGAwMDCggCCAgAABAPCAACAgUEBggJBQUIAwYECAgEBgUGBgcFBAcEBAUGBQQLBQ4JBwcHBwMGBwULCQgGCQcEBgYGCwkHBAQEBAgFCwgHBAcJAwcGAwoHBggIBwQEBQUKCAcEBQUJBAMECwsLCwsLDg8HBwcDAwMJCAgICAgIBgYGBgUICAgICAgNCwcHBwMDAwcGBgYGBgYFBQUFDgsEBAQEBAMCAwMGBAQECwgCCAgAABEQCQACAgYEBggJBQUIAwcECQgEBwYGBggGBAcEBAUHBQUMBQ8KBwcIBwMHCAULCggHCgcEBgYHDAkHBQQEBAgFDAgHBAgKAwcHAwsIBggICAQEBQUKCQcFBgYKBAQFDAwMDAwMDxAHCAcDAwMKCAgICAgIBgYGBgUICAgICAgNDAcHBwMDAwgGBgYGBgYFBQUFDgwFBQQEBAMCBAQHBAQECwkCCQkAABIQCQADAwYEBwkKBgYJBAcECQkEBwYGBggGBAgEBAYHBgUNBRAKCAgICAQHCAUMCgkHCwcEBwcHDQoIBQQEBQkFDQkIBAgKBAcHAwsIBgkJCAQEBQYLCQgFBgYKBQQFDQ0NDQ0NDxAICAgEBAQKCQkJCQkJBwcHBwUJCQkJCQkODQgICAQEBAgGBgYGBgYFBQUFDwwFBQQEBAMCBAQHBAQEDAkCCQkAABMRCgADAwYEBwkLBgYJBAcECgkEBwYHBwkGBAgFBAYHBgUNBhELCAgJCAQICAYNCwkICwgEBwcIDQoIBQQFBQkFDQkIBAkLBAgIBAwJBwkJCQQEBgYMCggFBgYLBQQFDQ0NDQ0NEBEICAgEBAQLCQkJCQkJBwcHBwUJCQkJCQkPDQgICAQEBAkHBwcHBwcGBgYGEA0FBQQEBQQCBAQIBAQEDQoCCgoAABQSCgADAwcEBwoLBgYKBAgECgoFCAcHBwkHBQkFBAYIBgUOBhIMCQkJCAQICQYNCwoIDAgFCAgIDgsIBgUFBQoGDgoJBQkMBAgIBA0JBwoKCQUFBgYMCgkGBwcLBQQFDg4ODg4OERIJCQkEBAQLCgoKCgoKCAgICAYKCgoKCgoQDgkJCQQEBAkHBwcHBwcGBgYGEQ4FBQUFBQQCBAQIBQUEDgoCCgoAABUTCwADAwcFCAoMBgYKBAgFCwoFCAcHBwoHBQkFBQYIBgYPBhMMCQkJCQQJCQYODAoIDAkFCAgIDwsJBgUFBQoGDwoJBQoMBAkIBA0KBwoKCgUFBgcNCwkGBwcMBQQGDw8PDw8PEhMJCQkEBAQMCgoKCgoKCAgICAYKCgoKCgoRDwkJCQQEBAoHBwcHBwcGBgYGEg4GBgUFBQQCBAQIBQUFDgsDCwsAABYUCwADAwcFCAsMBwcLBAkFCwoFCAcICAoHBQoFBQcJBwYPBhQNCgoKCQQJCgcPDAoJDQkFCAgJDwwJBgUFBgsGEAsKBQoNBAkJBA4KCAsLCgUFBwcOCwkGBwcNBgUGDw8PDw8PExQKCgoEBAQMCgoKCgoLCAgICAYLCwsLCwsREAoKCgQEBAoICAgICAgHBwcHEw8GBgUFBQQCBQUJBQUFDwsDCwsAABcVDAADAwcFCQsNBwcLBQkFDAsFCQcICAsIBQoGBQcJBwYQBxQNCgoKCgUJCgcPDQsJDQoFCQkJEAwKBgUGBgsHEAsKBQoNBQkJBA4LCAsLCwUFBwcODAoGBwgNBgUGEBAQEBAQFBUKCgoFBQUNCwsLCwsLCQkJCQcLCwsLCwsSEAoKCgUFBQsICAgICAgHBwcHFBAGBgUFBgQCBQUJBQUFEAwDDAwAABgWDAADAwgFCQwNBwcMBQkFDAsGCQgICAsIBgoGBQcJBwYRBxUOCgoLCgUKCwcQDgsKDgoGCQkKEQ0KBwUGBgsHEQwKBgsOBQoKBA8LCAwMCwYGBwgPDAoHCAgOBgUGERERERERFRYKCwoFBQUOCwsLCwsMCQkJCQcLCwsLCwsTEQoKCgUFBQsICAgICAgHBwcHFBEGBgUFBgQCBQUKBQUFEAwDDAwAAAABAV0BkAAFAAICvAKKAAAAjwK8AooAAAHFADIBAwAAAAAEAAAAAAAAAAAAAAMAAAAAAAAAAAAAAABNQUNSAEAAICIZAyH/OQAAAyEAxwAAAAEAAAAAAAAAAQAAgAAAAACLAT8AAGAAAbQCdVlva2ttb2trICAgICAgICD/////N////llPS1IwMAAAAAAAAAABAAAAAQAAmJpL9V8PPPUAAAPoAAAAALfnFZIAAAAAt+cVkv+2/zkDawMhAAAAAwACAAEAAAAAAAEAAAMh/zkAAAOQ/7b/uANrAAEAAAAAAAAAAAAAAAAAAACkAAEAAACkAJgADQAAAAAAAgAIAEAACgAAAF0AvgABAAE=");
// color: black;
// background-color: lightblue;
url_bgimg: "/imgs/bg/bg_frax_ribbon.jpg";
background: url(url_bgimg) darkslategrey;
color: ivory;
// color: white;
font-size:62.5%;
font-family: yokkmokkOT;
font-family: Montserrat;
font-size: 32pt;
}
// h1 { font-size: 2.4em; } /* =24px */
// h1 { font-size: 64pt; color: ivory; font-family: yokkmokkOT; } /* =24px */
h1 { font-size: 32pt; color: ivory; font-family: yokkmokkOT; } /* =24px */
h2 { font-size: 28pt; color: ivory; font-family: yokkmokkOT } /* =24px */
h3 { font-size: 18pt; color: grey; font-family: "times new roman"; } /* =24px */
h4 { font-size: 14pt; color: grey; font-family: "times new roman"; } /* =24px */
p { font-size: 10pt; } /* =14px */
dl { font-size: 20pt; color: ivory; font-family: arial; } /* =14px? */
dd { font-size: 18pt; color: ivory; font-family: arial; } /* =14px? */
ol { font-size: 20pt; color: ivory; font-family: "times new roman"; } /* =14px? */
li { font-size: 18pt; color: ivory; font-family: "times new roman"; } /* =14px? */
h1 { font-size: 32pt; color: ivory; font-family: Montserrat; } /* =32px */
h2 { font-size: 22pt; color: ivory; font-family: Montserrat; } /* =22px */
h3 { font-size: 12pt; color: ivory; font-family: Montserrat; } /* =12px */
h4 { font-size: 10pt; color: ivory; font-family: Montserrat; } /* =32px */
p { font-size: 8pt; color: black; font-family: Montserrat; } /* =32px */
ol { font-size: 12pt; color: black; font-family: Montserrat; } /* =32px */
li { font-size: 12pt; color: black; font-family: Montserrat; } /* =32px */
.detail {
background: darkslategrey;
width: 35%;
padding: 20px;
border: 1px solid black;
font-family: yokkmokkOT;
font-family: Montserrat;
color: ivory;
}
</style>
<style id='style_magazine_css'>
body{
overflow:hidden;
// background-color:#fcfcfc;
// background-color:darkslategray;
background-color:wheat;
margin:0;
padding:0;
}
.magazine-viewport .container{
position:absolute;
top:50%;
left:50%;
width:922px;
height:600px;
margin:auto;
}
.magazine-viewport .magazine{
width:922px;
height:600px;
left:-461px;
top:-300px;
}
.magazine-viewport .page{
width:461px;
height:600px;
background-color:white;
background-repeat:no-repeat;
background-size:100% 100%;
}
.magazine-viewport .zoomer .region{
display:none;
}
.magazine .region{
position:absolute;
overflow:hidden;
background:#0066FF;
opacity:0.2;
-webkit-border-radius:10px;
-moz-border-radius:10px;
-ms-border-radius:10px;
-o-border-radius:10px;
border-radius:10px;
cursor:pointer;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";
filter: alpha(opacity=20);
}
.magazine .region:hover{
opacity:0.5;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
filter: alpha(opacity=50);
}
.magazine .region.zoom{
opacity:0.01;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=1)";
filter: alpha(opacity=1);
}
.magazine .region.zoom:hover{
opacity:0.2;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";
filter: alpha(opacity=20);
}
.magazine .page{
-webkit-box-shadow:0 0 20px rgba(0,0,0,0.2);
-moz-box-shadow:0 0 20px rgba(0,0,0,0.2);
-ms-box-shadow:0 0 20px rgba(0,0,0,0.2);
-o-box-shadow:0 0 20px rgba(0,0,0,0.2);
box-shadow:0 0 20px rgba(0,0,0,0.2);
}
.magazine-viewport .page img{
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
margin:0;
}
.magazine .even .gradient{
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
background:-webkit-gradient(linear, left top, right top, color-stop(0.95, rgba(0,0,0,0)), color-stop(1, rgba(0,0,0,0.2)));
background-image:-webkit-linear-gradient(left, rgba(0,0,0,0) 95%, rgba(0,0,0,0.2) 100%);
background-image:-moz-linear-gradient(left, rgba(0,0,0,0) 95%, rgba(0,0,0,0.2) 100%);
background-image:-ms-linear-gradient(left, rgba(0,0,0,0) 95%, rgba(0,0,0,0.2) 100%);
background-image:-o-linear-gradient(left, rgba(0,0,0,0) 95%, rgba(0,0,0,0.2) 100%);
background-image:linear-gradient(left, rgba(0,0,0,0) 95%, rgba(0,0,0,0.2) 100%);
}
.magazine .odd .gradient{
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
background:-webkit-gradient(linear, right top, left top, color-stop(0.95, rgba(0,0,0,0)), color-stop(1, rgba(0,0,0,0.15)));
background-image:-webkit-linear-gradient(right, rgba(0,0,0,0) 95%, rgba(0,0,0,0.15) 100%);
background-image:-moz-linear-gradient(right, rgba(0,0,0,0) 95%, rgba(0,0,0,0.15) 100%);
background-image:-ms-linear-gradient(right, rgba(0,0,0,0) 95%, rgba(0,0,0,0.15) 100%);
background-image:-o-linear-gradient(right, rgba(0,0,0,0) 95%, rgba(0,0,0,0.15) 100%);
background-image:linear-gradient(right, rgba(0,0,0,0) 95%, rgba(0,0,0,0.15) 100%);
}
.magazine-viewport .zoom-in .even .gradient,
.magazine-viewport .zoom-in .odd .gradient{
display:none;
}
.magazine-viewport .loader{
background-image:url(../pics/loader.gif);
width:22px;
height:22px;
position:absolute;
top:280px;
left:219px;
}
.magazine-viewport .shadow{
-webkit-transition: -webkit-box-shadow 0.5s;
-moz-transition: -moz-box-shadow 0.5s;
-o-transition: -webkit-box-shadow 0.5s;
-ms-transition: -ms-box-shadow 0.5s;
-webkit-box-shadow:0 0 20px #ccc;
-moz-box-shadow:0 0 20px #ccc;
-o-box-shadow:0 0 20px #ccc;
-ms-box-shadow:0 0 20px #ccc;
box-shadow:0 0 20px #ccc;
}
.magazine-viewport .next-button,
.magazine-viewport .previous-button{
width:22px;
height:600px;
position:absolute;
top:0;
}
.magazine-viewport .next-button{
right:-22px;
-webkit-border-radius:0 15px 15px 0;
-moz-border-radius:0 15px 15px 0;
-ms-border-radius:0 15px 15px 0;
-o-border-radius:0 15px 15px 0;
border-radius:0 15px 15px 0;
}
.magazine-viewport .previous-button{
left:-22px;
-webkit-border-radius:15px 0 0 15px;
-moz-border-radius:15px 0 0 15px;
-ms-border-radius:15px 0 0 15px;
-o-border-radius:15px 0 0 15px;
border-radius:15px 0 0 15px;
}
.magazine-viewport .previous-button-hover,
.magazine-viewport .next-button-hover{
background-color:rgba(0,0,0, 0.2);
}
.magazine-viewport .previous-button-hover,
.magazine-viewport .previous-button-down{
background-image:url(../pics/arrows.png);
background-position:-4px 284px;
background-repeat:no-repeat;
}
.magazine-viewport .previous-button-down,
.magazine-viewport .next-button-down{
background-color:rgba(0,0,0, 0.4);
}
.magazine-viewport .next-button-hover,
.magazine-viewport .next-button-down{
background-image:url(../pics/arrows.png);
background-position:-38px 284px;
background-repeat:no-repeat;
}
.magazine-viewport .zoom-in .next-button,
.magazine-viewport .zoom-in .previous-button{
display:none;
}
.animated{
-webkit-transition:margin-left 0.5s;
-moz-transition:margin-left 0.5s;
-ms-transition:margin-left 0.5s;
-o-transition:margin-left 0.5s;
transition:margin-left 0.5s;
}
.thumbnails{
// position:absolute;
bottom:0;
left:0;
width:100%;
height:140px;
z-index:1;
}
.thumbnails > div{
width:1050px;
height:100px;
margin:20px auto;
}
.thumbnails ul{
margin:0;
padding:0;
text-align:center;
-webkit-transform:scale3d(0.5, 0.5, 1);
-moz-transform:scale3d(0.5, 0.5, 1);
-o-transform:scale3d(0.5, 0.5, 1);
-ms-transform:scale3d(0.5, 0.5, 1);
transform:scale3d(0.5, 0.5, 1);
-webkit-transition:-webkit-transform ease-in-out 100ms;
-moz-transition:-moz-transform ease-in-out 100ms;
-ms-transition:-ms-transform ease-in-out 100ms;
-o-transition:-o-transform ease-in-out 100ms;
transition:transform ease-in-out 100ms;
}
.thumbanils-touch ul{
-webkit-transform:none;
-moz-transform:none;
-o-transform:none;
-ms-transform:none;
transform:none;
}
.thumbnails-hover ul{
-webkit-transform:scale3d(0.6, 0.6, 1);
-moz-transform:scale3d(0.6, 0.6, 1);
-o-transform:scale3d(0.6, 0.6, 1);
-ms-transform:scale3d(0.6, 0.6, 1);
transform:scale3d(0.6, 0.6, 1);
}
.thumbnails li{
list-style:none;
display:inline-block;
margin:0 5px;
-webkit-box-shadow:0 0 10px #ccc;
-moz-box-shadow:0 0 10px #ccc;
-ms-box-shadow:0 0 10px #ccc;
-o-box-shadow:0 0 10px #ccc;
box-shadow:0 0 10px #ccc;
-webkit-transition:-webkit-transform 60ms;
-moz-transition:-webkit-transform 60ms;
-o-transition:-webkit-transform 60ms;
-ms-transition:-webkit-transform 60ms;
transition:-webkit-transform 60ms;
}
.thumbnails li span{
display:none;
}
.thumbnails .current{
-webkit-box-shadow:0 0 10px red;
-moz-box-shadow:0 0 10px red;
-ms-box-shadow:0 0 10px red;
-o-box-shadow:0 0 10px red;
box-shadow:0 0 10px red;
}
.thumbnails .thumb-hover{
-webkit-transform:scale3d(1.3, 1.3, 1);
-moz-transform:scale3d(1.3, 1.3, 1);
-o-transform:scale3d(1.3, 1.3, 1);
-ms-transform:scale3d(1.3, 1.3, 1);
transform:scale3d(1.3, 1.3, 1);
-webkit-box-shadow:0 0 10px #666;
-moz-box-shadow:0 0 10px #666;
-ms-box-shadow:0 0 10px #666;
-o-box-shadow:0 0 10px #666;
box-shadow:0 0 10px #666;
}
.thumbanils-touch .thumb-hover{
-webkit-transform:none;
-moz-transform:none;
-o-transform:none;
-ms-transform:none;
transform:none;
}
.thumbnails .thumb-hover span{
position:absolute;
bottom:-30px;
left:0;
z-index:2;
width:100%;
height:30px;
font:bold 15px arial;
line-height:30px;
color:#666;
display:block;
cursor:default;
}
.thumbnails img{
float:left;
}
.exit-message{
position: absolute;
top:10px;
left:0;
width:100%;
height:40px;
z-index:10000;
}
.exit-message > div{
width:140px;
height:30px;
margin:auto;
background:rgba(0,0,0,0.5);
text-align:center;
font:12px arial;
line-height:30px;
color:white;
-webkit-border-radius:10px;
-moz-border-radius:10px;
-ms-border-radius:10px;
-o-border-radius:10px;
border-radius:10px;
}
.zoom-icon{
position:absolute;
z-index:1000;
width:22px;
height:22px;
top:10px;
right:10px;
// background-image:url(../pics/zoom-icons.png);
background-image:url(fb/html/magazine/pics/zoom-icons.png);
background-size:88px 22px;
}
.zoom-icon-in{
background-position:0 0;
cursor: pointer;
}
.zoom-icon-in.zoom-icon-in-hover{
background-position:-22px 0;
cursor: pointer;
}
.zoom-icon-out{
background-position:-44px 0;
}
.zoom-icon-out.zoom-icon-out-hover{
background-position:-66px 0;
cursor: pointer;
}
.bottom{
position:absolute;
left:0;
bottom:0;
width:100%;
}
</style>
<!-- BUGS_34000 FB_MAGAZINE_JS_BEG KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK -->
<script id="fb_magazine_js">
/*
* Magazine sample
*/
function addPage(page, book) {
var id, pages = book.turn('pages');
// Create a new element for this page
var element = $('<div />', {});
// Add the page to the flipbook
// Add the initial HTML
// It will contain a loader indicator and a gradient
if (book.turn('addPage', element, page)) {
element.html('<div class="gradient"></div><div class="loader"></div>');
// Load the page
loadPage(page, element);
}
}
// Create an image element
function loadPage(page, pageElement) {
var img = $('<img />');
img.mousedown(function(e) {
e.preventDefault();
});
img.load(function() {
// Set the size
// Add the image to the page after loaded
// Remove the loader indicator
$(this).css({width: '100%', height: '100%'});
$(this).appendTo(pageElement);
pageElement.find('.loader').remove();
});
// Load the page
var pagelist = new Array();
var pagelist_len = 0;
var src = "";
var ajaks = "";
pagelist = load_pagelist();
pagelist_len = pagelist.length;
// alert( "BUGS_470 pageslist="+pageslist+" page="+page+" pages_len="+pages_len );
var splitlim = pagelist[page].split("|").length;
src = pagelist[page].split("|")[splitlim-1];
// src = pagelist[page].split("|")[12];
// alert( "BUGS_490 page="+page+" pages_len="+pages_len+" src="+src );
// img.attr('src', 'pages/' + page + '.jpg');
img.attr('src', src );
loadRegions(page, pageElement);
}
// Zoom in / Zoom out
function zoomTo(event) {
setTimeout(function() {
if ($('.magazine-viewport').data().regionClicked) {
$('.magazine-viewport').data().regionClicked = false;
} else {
if ($('.magazine-viewport').zoom('value')==1) {
$('.magazine-viewport').zoom('zoomIn', event);
} else {
$('.magazine-viewport').zoom('zoomOut');
}
}
}, 1);
}
// Load regions
function loadRegions(page, element) {
var fp_js = "pages/js/"+page+"-regions.json";
// $.getJSON('pages/'+page+'-regions.json').
// $.getJSON('pages/js/'+page+'-regions.json').
$.getJSON(fp_js).
done(function(data) {
$.each(data, function(key, region) {
addRegion(region, element);
});
});
}
// Add region
function addRegion(region, pageElement) {
var reg = $('<div />', {'class': 'region ' + region['class']}),
options = $('.magazine').turn('options'),
pageWidth = options.width/2,
pageHeight = options.height;
reg.css({
top: Math.round(region.y/pageHeight*100)+'%',
left: Math.round(region.x/pageWidth*100)+'%',
width: Math.round(region.width/pageWidth*100)+'%',
height: Math.round(region.height/pageHeight*100)+'%'
}).attr('region-data', $.param(region.data||''));
reg.appendTo(pageElement);
}
// Process click on a region
function regionClick(event) {
var region = $(event.target);
if (region.hasClass('region')) {
$('.magazine-viewport').data().regionClicked = true;
setTimeout(function() {
$('.magazine-viewport').data().regionClicked = false;
}, 100);
var regionType = $.trim(region.attr('class').replace('region', ''));
return processRegion(region, regionType);
}
}
// Process the data of every region
function processRegion(region, regionType) {
data = decodeParams(region.attr('region-data'));
switch (regionType) {
case 'link' :
window.open(data.url);
break;
case 'zoom' :
var regionOffset = region.offset(),
viewportOffset = $('.magazine-viewport').offset(),
pos = {
x: regionOffset.left-viewportOffset.left,
y: regionOffset.top-viewportOffset.top
};
$('.magazine-viewport').zoom('zoomIn', pos);
break;
case 'to-page' :
$('.magazine').turn('page', data.page);
break;
}
}
// Load large page
function loadLargePage(page, pageElement) {
var img = $('<img />');
img.load(function() {
var prevImg = pageElement.find('img');
$(this).css({width: '100%', height: '100%'});
$(this).appendTo(pageElement);
prevImg.remove();
});
// Loadnew page
var pagelist = new Array();
var pagelist_len = pagelist.length;
var j=0;
var src = "";
// alert("BUGS_610 loadSmallPage page="+page+" pagelist="+pagelist );
pagelist = load_pagelist();
pagelist_len = pagelist.length;
// src = "pages/"+page+".jpg";
var splitlim=pagelist[page].split("|").length;
// src = pagelist[page].split( "|" )[12];
src = pagelist[page].split( "|" )[splitlim-1];
var zn_src_path = execTest(src);
var zn_src_file = splitTest(src);
var zn_src = zn_src_path.replace( zn_src_file, "zn/zn_"+zn_src_file );
var tn_src = zn_src_path.replace( zn_src_file, "tn/tn_"+zn_src_file ).replace(".jpg",".png");
// var zn_src = zn_src_path + "zn/zn_"+zn_src_file;
// alert( "BUGS_685 src="+src );
// alert( "BUGS_687 zn_src="+zn_src );
// alert( "BUGS_688 tn_src="+tn_src );
// alert("BUGS_620 loadLargePage page="+page+" pages_len="+pages_len+" src="+src );
// alert("BUGS_621 loadLargePage pages="+pages+" pages_len="+pages_len );
// alert("BUGS_622 loadLargePage window.pages="+window.pages+" pages_len="+pages_len );
// img.attr('src', 'pages/' + page + '.jpg');
// img.attr('src', 'pages/' + page + '-large.jpg');
// img.attr('src', 'pages/zn/zn_' + page + '.jpg');
img.attr('src', zn_src );
}
// Load small page
function loadSmallPage(page, pageElement) {
var img = pageElement.find('img');
img.css({width: '100%', height: '100%'});
img.unbind('load');
// Loadnew page
var pagelist = new Array();
var pagelist_len = pagelist.length;
var j=0;
var src = "";
// alert("BUGS_610 loadSmallPage page="+page+" pagelist="+pagelist );
pagelist = load_pagelist();
pagelist_len = pagelist.length;
var splitlim=pagelist[page].split("|").length;
src = "pages/"+page+".jpg";
src = pagelist[page].split( "|" )[splitlim-1];
// src = pagelist[page].split( "|" )[12];
// alert("BUGS_650 loadSmallPage page="+page+" pages_len="+pages_len+" src="+src );
// alert("BUGS_651 loadSmallPage pages="+pages+" pages_len="+pages_len );
// alert("BUGS_652 loadSmallPage window.pages="+window.pages+" pages_len="+pages_len );
// img.attr('src', 'pages/' + page + '.jpg');
img.attr('src', src );
}
// http://code.google.com/p/chromium/issues/detail?id=128488
function isChrome() {
return navigator.userAgent.indexOf('Chrome')!=-1;
}
function disableControls(page) {
if (page==1)
$('.previous-button').hide();
else
$('.previous-button').show();
if (page==$('.magazine').turn('pages'))
$('.next-button').hide();
else
$('.next-button').show();
}
// Set the width and height for the viewport
function resizeViewport() {
var width = $(window).width(),
height = $(window).height(),
options = $('.magazine').turn('options');
$('.magazine').removeClass('animated');
$('.magazine-viewport').css({
width: width,
height: height
}).
zoom('resize');
if ($('.magazine').turn('zoom')==1) {
var bound = calculateBound({
width: options.width,
height: options.height,
boundWidth: Math.min(options.width, width),
boundHeight: Math.min(options.height, height)
});
if (bound.width%2!==0)
bound.width-=1;
if (bound.width!=$('.magazine').width() || bound.height!=$('.magazine').height()) {
$('.magazine').turn('size', bound.width, bound.height);
if ($('.magazine').turn('page')==1)
$('.magazine').turn('peel', 'br');
$('.next-button').css({height: bound.height, backgroundPosition: '-38px '+(bound.height/2-32/2)+'px'});
$('.previous-button').css({height: bound.height, backgroundPosition: '-4px '+(bound.height/2-32/2)+'px'});
}
$('.magazine').css({top: -bound.height/2, left: -bound.width/2});
}
var magazineOffset = $('.magazine').offset(),
boundH = height - magazineOffset.top - $('.magazine').height(),
marginTop = (boundH - $('.thumbnails > div').height()) / 2;
if (marginTop<0) {
$('.thumbnails').css({height:1});
} else {
$('.thumbnails').css({height: boundH});
$('.thumbnails > div').css({marginTop: marginTop});
}
if (magazineOffset.top<$('.made').height())
$('.made').hide();
else
$('.made').show();
$('.magazine').addClass('animated');
}
// Number of views in a flipbook
function numberOfViews(book) {
return book.turn('pages') / 2 + 1;
}
// Current view in a flipbook
function getViewNumber(book, page) {
return parseInt((page || book.turn('page'))/2 + 1, 10);
}
function moveBar(yes) {
if (Modernizr && Modernizr.csstransforms) {
$('#slider .ui-slider-handle').css({zIndex: yes ? -1 : 10000});
}
}
function setPreview(view) {
var previewWidth = 112,
previewHeight = 73,
// previewSrc = 'pages/preview.jpg',
previewSrc = 'imgs/preview.jpg',
preview = $(_thumbPreview.children(':first')),
numPages = (view==1 || view==$('#slider').slider('option', 'max')) ? 1 : 2,
width = (numPages==1) ? previewWidth/2 : previewWidth;
_thumbPreview.
addClass('no-transition').
css({width: width + 15,
height: previewHeight + 15,
top: -previewHeight - 30,
left: ($($('#slider').children(':first')).width() - width - 15)/2
});
preview.css({
width: width,
height: previewHeight
});
if (preview.css('background-image')==='' ||
preview.css('background-image')=='none') {
preview.css({backgroundImage: 'url(' + previewSrc + ')'});
setTimeout(function(){
_thumbPreview.removeClass('no-transition');
}, 0);
}
preview.css({backgroundPosition:
'0px -'+((view-1)*previewHeight)+'px'
});
}
// Width of the flipbook when zoomed in
function largeMagazineWidth() {
return 2214;
}
// decode URL Parameters
function decodeParams(data) {
var parts = data.split('&'), d, obj = {};
for (var i =0; i<parts.length; i++) {
d = parts[i].split('=');
obj[decodeURIComponent(d[0])] = decodeURIComponent(d[1]);
}
return obj;
}
// Calculate the width and height of a square within another square
function calculateBound(d) {
var bound = {width: d.width, height: d.height};
if (bound.width>d.boundWidth || bound.height>d.boundHeight) {
var rel = bound.width/bound.height;
if (d.boundWidth/rel>d.boundHeight && d.boundHeight*rel<=d.boundWidth) {
bound.width = Math.round(d.boundHeight*rel);
bound.height = d.boundHeight;
} else {
bound.width = d.boundWidth;
bound.height = Math.round(d.boundWidth/rel);
}
}
return bound;
}
</script>
<script id="script_load_pagelist_head" >
function load_pagelist_head() {
var pagelist_head_jtfdcr=
`||||||||/fb/jtfdcr/pages/0.jpg
||||||||/fb/jtfdcr/pages/1.jpg
||||||||/fb/jtfdcr/pages/10.jpg
||||||||/fb/jtfdcr/pages/11.jpg
||||||||/fb/jtfdcr/pages/12.jpg
||||||||/fb/jtfdcr/pages/13.jpg
||||||||/fb/jtfdcr/pages/14.jpg`;
var pagelist_head_pages=``;
var pagelist_head=
`pages/1.jpg
pages/2.jpg
pages/3.jpg
pages/4.jpg
pages/5.jpg
pages/6.jpg
pages/7.jpg
pages/8.jpg
pages/9.jpg
pages/10.jpg
pages/11.jpg
pages/12.jpg
pages/13.jpg
pages/14.jpg
pages/15.jpg
pages/16.jpg
pages/17.jpg
pages/18.jpg
pages/19.jpg
pages/20.jpg
pages/21.jpg
pages/22.jpg
pages/23.jpg
pages/24.jpg
pages/25.jpg
pages/26.jpg
pages/27.jpg
pages/28.jpg
pages/29.jpg
pages/30.jpg
pages/31.jpg
pages/32.jpg
pages/33.jpg
pages/34.jpg
pages/35.jpg
pages/36.jpg
pages/37.jpg
pages/38.jpg
pages/39.jpg
pages/40.jpg
pages/41.jpg
pages/42.jpg
pages/43.jpg
pages/44.jpg
pages/45.jpg
pages/46.jpg
pages/47.jpg
pages/48.jpg
pages/49.jpg
pages/50.jpg
pages/51.jpg
pages/52.jpg
pages/53.jpg
pages/54.jpg
pages/55.jpg
pages/56.jpg
pages/57.jpg
pages/58.jpg
pages/59.jpg
pages/60.jpg
pages/61.jpg
pages/62.jpg
pages/63.jpg
pages/64.jpg`;
return( pagelist_head.split("\n"));
}
</script>
<script id="script_load_pagelist_pages" >
function load_pagelist_pages() {
var pagelist_pages=
`pages/1.jpg
pages/2.jpg
pages/3.jpg
pages/4.jpg
pages/5.jpg
pages/6.jpg
pages/7.jpg
pages/8.jpg
pages/9.jpg
pages/10.jpg
pages/11.jpg
pages/12.jpg
pages/13.jpg
pages/14.jpg
pages/15.jpg
pages/16.jpg
pages/17.jpg
pages/18.jpg
pages/19.jpg
pages/20.jpg
pages/21.jpg
pages/22.jpg
pages/23.jpg
pages/24.jpg
pages/25.jpg
pages/26.jpg
pages/27.jpg
pages/28.jpg
pages/29.jpg
pages/30.jpg
pages/31.jpg
pages/32.jpg
pages/33.jpg
pages/34.jpg
pages/35.jpg
pages/36.jpg
pages/37.jpg
pages/38.jpg
pages/39.jpg
pages/40.jpg
pages/41.jpg
pages/42.jpg
pages/43.jpg
pages/44.jpg
pages/45.jpg
pages/46.jpg
pages/47.jpg
pages/48.jpg
pages/49.jpg
pages/50.jpg
pages/51.jpg
pages/52.jpg
pages/53.jpg
pages/54.jpg
pages/55.jpg
pages/56.jpg
pages/57.jpg
pages/58.jpg
pages/59.jpg
pages/60.jpg
pages/61.jpg
pages/62.jpg
pages/63.jpg
pages/64.jpg`;
return(pagelist_pages.split("\n"));
}
function load_pagelist_chap01() {
// alert( "BUGS_1000 load_pagelist_chap01" );
var pagelist_chap01 =
`chap01/1.jpg
chap01/2.jpg
chap01/3.jpg
chap01/4.jpg
chap01/5.jpg
chap01/6.jpg
chap01/7.jpg
chap01/8.jpg
chap01/9.jpg
chap01/10.jpg
chap01/11.jpg
chap01/12.jpg
chap01/13.jpg
chap01/14.jpg
chap01/15.jpg
chap01/16.jpg`;
return( pagelist_chap01.split("\n") );
}
function load_pagelist_chap02() {
// alert( "BUGS_1000 load_pagelist_chap02" );
var pagelist_chap02 =
`chap02/1.jpg
chap02/2.jpg
chap02/3.jpg
chap02/4.jpg
chap02/5.jpg
chap02/6.jpg
chap02/7.jpg
chap02/8.jpg
chap02/9.jpg
chap02/10.jpg
chap02/11.jpg
chap02/12.jpg
chap02/13.jpg
chap02/14.jpg
chap02/16.jpg`;
return( pagelist_chap02.split("\n") );
}
function load_pagelist_chap03() {
// alert( "BUGS_1000 load_pagelist_chap03" );
var pagelist_chap03 =
`chap03/1.jpg
chap03/2.jpg
chap03/3.jpg
chap03/4.jpg
chap03/5.jpg
chap03/6.jpg
chap03/7.jpg
chap03/8.jpg
chap03/9.jpg
chap03/10.jpg
chap03/11.jpg
chap03/12.jpg
chap03/13.jpg
chap03/14.jpg
chap03/16.jpg`;
return( pagelist_chap03.split("\n") );
}
function load_pagelist_shoebox() {
// alert( "BUGS_1000 load_shoebox" );
var pagelist_shoebox=
`shoebox/1.jpg
shoebox/2.jpg
shoebox/3.jpg
shoebox/4.jpg
shoebox/5.jpg
shoebox/6.jpg
shoebox/7.jpg
shoebox/8.jpg
shoebox/9.jpg
shoebox/10.jpg
shoebox/11.jpg
shoebox/12.jpg
shoebox/13.jpg
shoebox/14.jpg
/fb/jtfdcr/shoebox/10.jpg
/fb/jtfdcr/shoebox/2.jpg
/fb/jtfdcr/shoebox/20020322_090201_1414191.jpg
/fb/jtfdcr/shoebox/20020322_090301_1414194.jpg
/fb/jtfdcr/shoebox/20020323_182401_1424206.jpg
/fb/jtfdcr/shoebox/20020527_093501_1010103.jpg
/fb/jtfdcr/shoebox/20020527_093501_1010104.jpg
/fb/jtfdcr/shoebox/20020527_095501_1070715.jpg
/fb/jtfdcr/shoebox/20020527_095601_1070717.jpg
/fb/jtfdcr/shoebox/20020527_123401_1070728.jpg
/fb/jtfdcr/shoebox/20020527_123401_1070730.jpg
/fb/jtfdcr/shoebox/20020527_132401_1070735.jpg
/fb/jtfdcr/shoebox/20020527_140901_1070743.jpg
/fb/jtfdcr/shoebox/20020527_140901_1070744.jpg
/fb/jtfdcr/shoebox/20020527_140901_1070745.jpg
/fb/jtfdcr/shoebox/20020527_140901_1070746.jpg
/fb/jtfdcr/shoebox/20020623_180601_1090984.jpg
/fb/jtfdcr/shoebox/20021118_093601_1252573(1).jpg
/fb/jtfdcr/shoebox/20021118_093601_1252573.jpg
/fb/jtfdcr/shoebox/20021118_093601_1252574.jpg
/fb/jtfdcr/shoebox/20021118_093601_1252575.jpg
/fb/jtfdcr/shoebox/20021120_084701_1252600.jpg
/fb/jtfdcr/shoebox/20021122_113301_1272744.jpg
/fb/jtfdcr/shoebox/20021122_113301_1272746.jpg
/fb/jtfdcr/shoebox/20021130_100801_1282877.jpg
/fb/jtfdcr/shoebox/20021201_132601_1292972.jpg
/fb/jtfdcr/shoebox/20021201_132701_1292974.jpg
/fb/jtfdcr/shoebox/20021201_132701_jtfin.jpg
/fb/jtfdcr/shoebox/20021201_132801_1292980.jpg
/fb/jtfdcr/shoebox/20021201_132901_1292986.jpg
/fb/jtfdcr/shoebox/20021204_090301_1292995.jpg
/fb/jtfdcr/shoebox/20021204_104701_1303005.jpg
/fb/jtfdcr/shoebox/20021204_105501_1303010.jpg
/fb/jtfdcr/shoebox/20021204_161501_1303018.jpg
/fb/jtfdcr/shoebox/20021204_161501_1303019.jpg
/fb/jtfdcr/shoebox/20021204_163301_1303026.jpg
/fb/jtfdcr/shoebox/20021207_104801_1303064.jpg
/fb/jtfdcr/shoebox/20021207_105001_1303067.jpg
/fb/jtfdcr/shoebox/20021214_105101_1303095.jpg
/fb/jtfdcr/shoebox/20021215_150101_1313120.jpg
/fb/jtfdcr/shoebox/20021215_150101_1313121.jpg
/fb/jtfdcr/shoebox/20021215_150701_1313125.jpg
/fb/jtfdcr/shoebox/20021215_150801_1313128.jpg
/fb/jtfdcr/shoebox/20021225_105901_1313160.jpg
/fb/jtfdcr/shoebox/20050105_054001_1858560.jpg
/fb/jtfdcr/shoebox/20050105_054001_1858561.jpg
/fb/jtfdcr/shoebox/20050107_052201_1858570.jpg
/fb/jtfdcr/shoebox/20050107_052401_1858581.jpg
/fb/jtfdcr/shoebox/20050107_052401_1858585.jpg
/fb/jtfdcr/shoebox/20050107_052701_1858593.jpg
/fb/jtfdcr/shoebox/20050107_052701_1858594.jpg
/fb/jtfdcr/shoebox/20050107_052701_1858597.jpg
/fb/jtfdcr/shoebox/20050107_053401_1868638.jpg
/fb/jtfdcr/shoebox/20050108_044601_1868681.jpg
/fb/jtfdcr/shoebox/20050108_044601_1868684.jpg
/fb/jtfdcr/shoebox/20050109_031201_1878702.jpg
/fb/jtfdcr/shoebox/20070507_185501_1010108.jpg
/fb/jtfdcr/shoebox/20080905_182801_1373709.jpg
/fb/jtfdcr/shoebox/20080914_094801_1373727.jpg
/fb/jtfdcr/shoebox/20080927_092701_1373761.jpg
/fb/jtfdcr/shoebox/20080927_092701_1373762.jpg
/fb/jtfdcr/shoebox/20080927_092801_1373763.jpg
/fb/jtfdcr/shoebox/20080927_092801_1373764.jpg
/fb/jtfdcr/shoebox/20080927_092801_1373765.jpg
/fb/jtfdcr/shoebox/20080927_092801_1373766.jpg
/fb/jtfdcr/shoebox/20080927_092901_1373768.jpg
/fb/jtfdcr/shoebox/20080927_092901_1373769.jpg
/fb/jtfdcr/shoebox/20080927_095601_1373770.jpg
/fb/jtfdcr/shoebox/20090322_241401_1404085.jpg
/fb/jtfdcr/shoebox/20090322_241401_1404088.jpg
/fb/jtfdcr/shoebox/20090322_241401_1404089.jpg
/fb/jtfdcr/shoebox/20090425_142201_2464664.jpg
/fb/jtfdcr/shoebox/20090425_142301_2464670.jpg
/fb/jtfdcr/shoebox/20091002_160801_1474760.jpg
/fb/jtfdcr/shoebox/20091002_160801_1474761.jpg
/fb/jtfdcr/shoebox/20091002_160901_1474763.jpg
/fb/jtfdcr/shoebox/20091003_142401_1474777.jpg
/fb/jtfdcr/shoebox/20151221_011.jpg
/fb/jtfdcr/shoebox/20161007_jtflaw_001.jpg
/fb/jtfdcr/shoebox/20161007_jtflaw_064.jpg
/fb/jtfdcr/shoebox/20161007_jtflaw_065.jpg
/fb/jtfdcr/shoebox/20161007_jtflaw_066.jpg
/fb/jtfdcr/shoebox/220px-Once_Upon_A_Time_In_America1.jpg
/fb/jtfdcr/shoebox/220px-Uncle_Sam's_Thanksgiving_Dinner_(November_1869),_by_Thomas_Nast.jpg
/fb/jtfdcr/shoebox/220px-Uncle_Sam_Memorial_Statue,_Arlington,_MA_-_Samuel_Wilson.jpg
/fb/jtfdcr/shoebox/220px-Uncle_Sam_needs_that_extra_shovelful.jpg
/fb/jtfdcr/shoebox/3.jpg
/fb/jtfdcr/shoebox/4.jpg
/fb/jtfdcr/shoebox/5 not-so-obvious Finder features new Mac users might not know %7C MacYourself.jpg
/fb/jtfdcr/shoebox/5.jpg
/fb/jtfdcr/shoebox/5_yard_wagon.jpg
/fb/jtfdcr/shoebox/5hiMs.jpg
/fb/jtfdcr/shoebox/6.jpg
/fb/jtfdcr/shoebox/673120.jpg
/fb/jtfdcr/shoebox/6_driveway.jpg
/fb/jtfdcr/shoebox/7.jpg
/fb/jtfdcr/shoebox/7_court.jpg
/fb/jtfdcr/shoebox/8.jpg
/fb/jtfdcr/shoebox/9.jpg
/fb/jtfdcr/shoebox/9557_fiona_runs_201506_001.jpg
/fb/jtfdcr/shoebox/9557_fiona_runs_201506_002.jpg
/fb/jtfdcr/shoebox/9558_byrd_trustee_threat_201505_001.jpg
/fb/jtfdcr/shoebox/9558_byrd_trustee_threat_201505_002.jpg
/fb/jtfdcr/shoebox/9558_byrd_trustee_threat_201505_003.jpg
/fb/jtfdcr/shoebox/Create a thumbnail image every X seconds of the video – FFmpeg.jpg
/fb/jtfdcr/shoebox/Dragon-1.jpg
/fb/jtfdcr/shoebox/FL000001.jpg
/fb/jtfdcr/shoebox/FL000002.jpg
/fb/jtfdcr/shoebox/Hessian_jager.jpg
/fb/jtfdcr/shoebox/IMG_0001.jpg
/fb/jtfdcr/shoebox/IMG_0002.jpg
/fb/jtfdcr/shoebox/IMG_0004.jpg
/fb/jtfdcr/shoebox/IMG_0006.jpg
/fb/jtfdcr/shoebox/IMG_0007.jpg
/fb/jtfdcr/shoebox/IMG_0013.jpg
/fb/jtfdcr/shoebox/IMG_0080.jpg
/fb/jtfdcr/shoebox/IMG_0081.jpg
/fb/jtfdcr/shoebox/IMG_0120.jpg
/fb/jtfdcr/shoebox/IMG_0210.jpg
/fb/jtfdcr/shoebox/IMG_0212.jpg
/fb/jtfdcr/shoebox/IMG_3968.jpg
/fb/jtfdcr/shoebox/IMG_3969.jpg
/fb/jtfdcr/shoebox/IMG_3970_20150716_0618.jpg
/fb/jtfdcr/shoebox/IMG_3971_20150716_0623.jpg
/fb/jtfdcr/shoebox/IMG_3972.jpg
/fb/jtfdcr/shoebox/IMG_3972_20150716_0625.jpg
/fb/jtfdcr/shoebox/IMG_3973.jpg
/fb/jtfdcr/shoebox/IMG_3973_20150716_0630.jpg
/fb/jtfdcr/shoebox/IMG_3974.jpg
/fb/jtfdcr/shoebox/IMG_3974_20150716_0631.jpg
/fb/jtfdcr/shoebox/IMG_3975.jpg
/fb/jtfdcr/shoebox/IMG_3975_20150716_0631.jpg
/fb/jtfdcr/shoebox/IMG_3976.jpg
/fb/jtfdcr/shoebox/IMG_3976_20150716_0634.jpg
/fb/jtfdcr/shoebox/IMG_3977_20150716_0636.jpg
/fb/jtfdcr/shoebox/IMG_3978.jpg
/fb/jtfdcr/shoebox/IMG_3978_20150716_0636.jpg
/fb/jtfdcr/shoebox/IMG_3979.jpg
/fb/jtfdcr/shoebox/IMG_3979_20150716_0636.jpg
/fb/jtfdcr/shoebox/IMG_3980_20150716_0637.jpg
/fb/jtfdcr/shoebox/IMG_3981.jpg
/fb/jtfdcr/shoebox/IMG_3981_20150716_0637.jpg
/fb/jtfdcr/shoebox/IMG_3982.jpg
/fb/jtfdcr/shoebox/IMG_3982_20150716_0637.jpg
/fb/jtfdcr/shoebox/IMG_3983.jpg
/fb/jtfdcr/shoebox/IMG_3983_20150716_0637.jpg
/fb/jtfdcr/shoebox/IMG_3984.jpg
/fb/jtfdcr/shoebox/IMG_3984_20150716_0637.jpg
/fb/jtfdcr/shoebox/IMG_3985_20150716_0637.jpg
/fb/jtfdcr/shoebox/IMG_3986_20150716_0637.jpg
/fb/jtfdcr/shoebox/IMG_3987_20150716_0638.jpg
/fb/jtfdcr/shoebox/IMG_3988.jpg
/fb/jtfdcr/shoebox/IMG_3988_20150716_0644.jpg
/fb/jtfdcr/shoebox/IMG_3989.jpg
/fb/jtfdcr/shoebox/IMG_3989_20150716_0708.jpg
/fb/jtfdcr/shoebox/IMG_3994.jpg
/fb/jtfdcr/shoebox/IMG_5605.jpg
/fb/jtfdcr/shoebox/IMG_5611.jpg
/fb/jtfdcr/shoebox/IMG_5611_jtfdc_original_notrespassing_willbeprosecuted.jpg
/fb/jtfdcr/shoebox/IMG_9900.jpg
/fb/jtfdcr/shoebox/IS137avbnxkbpu0000000000.jpg
/fb/jtfdcr/shoebox/IS13v82nj0zuax0000000000.jpg
/fb/jtfdcr/shoebox/ISxrzpc0f6eb4x0000000000.jpg
/fb/jtfdcr/shoebox/Img_0033.jpg
/fb/jtfdcr/shoebox/Img_0034.jpg
/fb/jtfdcr/shoebox/JKassil-R1-010-3A.jpg
/fb/jtfdcr/shoebox/JULIA3.jpg
/fb/jtfdcr/shoebox/Michael_clayton.jpg
/fb/jtfdcr/shoebox/OLDPHONE.jpg
/fb/jtfdcr/shoebox/PASA01_1.jpg
/fb/jtfdcr/shoebox/PASA01_2.jpg
/fb/jtfdcr/shoebox/PASA01_3.jpg
/fb/jtfdcr/shoebox/Scan 1.jpg
/fb/jtfdcr/shoebox/Scan 2.jpg
/fb/jtfdcr/shoebox/Scan 3.jpg
/fb/jtfdcr/shoebox/Scan 4.jpg
/fb/jtfdcr/shoebox/Scan 5.jpg
/fb/jtfdcr/shoebox/Scan 6.jpg
/fb/jtfdcr/shoebox/Scan 7.jpg
/fb/jtfdcr/shoebox/adam_carshow_2012.jpg
/fb/jtfdcr/shoebox/adma_flash_20130420_162341.jpg
/fb/jtfdcr/shoebox/adma_flash_20130420_164330.jpg
/fb/jtfdcr/shoebox/adma_flash_20130420_164331.jpg
/fb/jtfdcr/shoebox/adma_flash_20130420_164333.jpg
/fb/jtfdcr/shoebox/alan_cohen_police_20151221_010.jpg
/fb/jtfdcr/shoebox/alan_w_cohen.jpg
/fb/jtfdcr/shoebox/amsterdam_bridges.jpg
/fb/jtfdcr/shoebox/amsterdam_rooftops.jpg
/fb/jtfdcr/shoebox/argonne.jpg
/fb/jtfdcr/shoebox/arrows.jpg
/fb/jtfdcr/shoebox/austrian.jpg
/fb/jtfdcr/shoebox/avatar5688_8.jpg
/fb/jtfdcr/shoebox/bavaria_lake_mountain.jpg
/fb/jtfdcr/shoebox/bavarian.jpg
/fb/jtfdcr/shoebox/bethany_english__cle.jpg
/fb/jtfdcr/shoebox/bethany_english_lutheran_cle_001.jpg
/fb/jtfdcr/shoebox/bethany_english_lutheran_cle_002.jpg
/fb/jtfdcr/shoebox/bethany_english_lutheran_cle_003.jpg
/fb/jtfdcr/shoebox/bethany_english_lutheran_cle_004.jpg
/fb/jtfdcr/shoebox/bethany_english_lutheran_cle_005.jpg
/fb/jtfdcr/shoebox/bethany_english_lutheran_cle_006.jpg
/fb/jtfdcr/shoebox/bethany_english_lutheran_cle_01.jpg
/fb/jtfdcr/shoebox/bg_noise1.jpg
/fb/jtfdcr/shoebox/bg_noise2.jpg
/fb/jtfdcr/shoebox/bg_noise3.jpg
/fb/jtfdcr/shoebox/bg_swoorl1.jpg
/fb/jtfdcr/shoebox/bg_swoorl2.jpg
/fb/jtfdcr/shoebox/big_snow.jpg
/fb/jtfdcr/shoebox/bigturtle.jpg
/fb/jtfdcr/shoebox/bigturtle_save.jpg
/fb/jtfdcr/shoebox/blackforest.jpg
/fb/jtfdcr/shoebox/blackforest_stroll.jpg
/fb/jtfdcr/shoebox/blurred.jpg
/fb/jtfdcr/shoebox/brothers4.jpg
/fb/jtfdcr/shoebox/cage.jpg
/fb/jtfdcr/shoebox/call_summary_29jamestown.jpg
/fb/jtfdcr/shoebox/call_summary_jamestown_pg1.jpg
/fb/jtfdcr/shoebox/call_summary_jamestown_pg2.jpg
/fb/jtfdcr/shoebox/call_summary_jamestown_pg3.jpg
/fb/jtfdcr/shoebox/castle.jpg
/fb/jtfdcr/shoebox/cfaa.jpg
/fb/jtfdcr/shoebox/chapel.jpg
/fb/jtfdcr/shoebox/code cartooning — Converting HTML5 Canvas Animation to GIF Animation....jpg
/fb/jtfdcr/shoebox/cohen_15403521_15445941_comb_151203.jpg
/fb/jtfdcr/shoebox/cohen_15403521_15445941_cont_160121.jpg
/fb/jtfdcr/shoebox/cohen_15403521_continued_151203.jpg
/fb/jtfdcr/shoebox/cohen_affidavit_records_151030.jpg
/fb/jtfdcr/shoebox/columbia.jpg
/fb/jtfdcr/shoebox/columbia_pw_adminiwii_ko2us.jpg
/fb/jtfdcr/shoebox/columbia_templet.jpg
/fb/jtfdcr/shoebox/columbiastahrartwork.jpg
/fb/jtfdcr/shoebox/danish_woman.jpg
/fb/jtfdcr/shoebox/defford_boat.jpg
/fb/jtfdcr/shoebox/defford_snow_fairy.jpg
/fb/jtfdcr/shoebox/denmark_window_view.jpg
/fb/jtfdcr/shoebox/doghead_video_003.jpg
/fb/jtfdcr/shoebox/doghead_video_005.jpg
/fb/jtfdcr/shoebox/doghead_video_012.jpg
/fb/jtfdcr/shoebox/doghead_video_015.jpg
/fb/jtfdcr/shoebox/door_locks_vienna.jpg
/fb/jtfdcr/shoebox/drinks.jpg
/fb/jtfdcr/shoebox/drinks2.jpg
/fb/jtfdcr/shoebox/emh_20160911_056.jpg
/fb/jtfdcr/shoebox/emh_20160911_057.jpg
/fb/jtfdcr/shoebox/emh_20160911_058.jpg
/fb/jtfdcr/shoebox/emh_20160911_059.jpg
/fb/jtfdcr/shoebox/emh_20160911_060.jpg
/fb/jtfdcr/shoebox/emma_and_dexter.jpg
/fb/jtfdcr/shoebox/family_est_-_with_birds_ce50b229-338b-4198-8722-3b4efff3aacf_grande.jpg
/fb/jtfdcr/shoebox/farkas_neopolean.jpg
/fb/jtfdcr/shoebox/fb_1.jpg
/fb/jtfdcr/shoebox/fb_byrdpucker_pages_1.jpg
/fb/jtfdcr/shoebox/fb_focus_pages_1.jpg
/fb/jtfdcr/shoebox/fb_gifs_pages_1.jpg
/fb/jtfdcr/shoebox/fb_go_pages_1.jpg
/fb/jtfdcr/shoebox/fb_gofunwii_pages_1.jpg
/fb/jtfdcr/shoebox/fb_imgs_1.jpg
/fb/jtfdcr/shoebox/fb_iperms_pages_1.jpg
/fb/jtfdcr/shoebox/fb_jak1_pages_1.jpg
/fb/jtfdcr/shoebox/fb_jak2_pages_1.jpg
/fb/jtfdcr/shoebox/fb_jtfdcr_pages_1.jpg
/fb/jtfdcr/shoebox/fb_kitiworks_maga_pages_zn1_1.jpg
/fb/jtfdcr/shoebox/fb_kitiworks_pages_1.jpg
/fb/jtfdcr/shoebox/fb_kitiworks_pages_orig_1.jpg
/fb/jtfdcr/shoebox/fb_kitiworks_pages_orig_zn1_1.jpg
/fb/jtfdcr/shoebox/fb_konabus_pages_1.jpg
/fb/jtfdcr/shoebox/fb_konet_pages_1.jpg
/fb/jtfdcr/shoebox/fb_law_law_law501_pages_1.jpg
/fb/jtfdcr/shoebox/fb_law_pages_1.jpg
/fb/jtfdcr/shoebox/fb_med_pages_1.jpg
/fb/jtfdcr/shoebox/fb_pages_1.jpg
/fb/jtfdcr/shoebox/fb_pages_broke_1.jpg
/fb/jtfdcr/shoebox/fb_pastryroad_athensfood_imgs_1.jpg
/fb/jtfdcr/shoebox/fb_smileworthy_wimsy_pages_1.jpg
/fb/jtfdcr/shoebox/fb_soul.jpg
/fb/jtfdcr/shoebox/fb_templets_basic_pages_1.jpg
/fb/jtfdcr/shoebox/fb_templets_maga_pages_1.jpg
/fb/jtfdcr/shoebox/fb_us_kdar_hotmax_pages_1.jpg
/fb/jtfdcr/shoebox/flagged_coffins.jpg
/fb/jtfdcr/shoebox/floyd_trouten.jpg
/fb/jtfdcr/shoebox/gavel.jpg
/fb/jtfdcr/shoebox/gavel_band.jpg
/fb/jtfdcr/shoebox/gold_frame.jpg
/fb/jtfdcr/shoebox/hall_guards.jpg
/fb/jtfdcr/shoebox/hall_window_watcher.jpg
/fb/jtfdcr/shoebox/hall_woman_park_knitting.jpg
/fb/jtfdcr/shoebox/heidleberg_tibet_painting.jpg
/fb/jtfdcr/shoebox/heidleberg_tibet_panel.jpg
/fb/jtfdcr/shoebox/history2.jpg
/fb/jtfdcr/shoebox/hrc2011a.jpg
/fb/jtfdcr/shoebox/hrc2011b.jpg
/fb/jtfdcr/shoebox/http___ko2.jpg
/fb/jtfdcr/shoebox/img001.jpg
/fb/jtfdcr/shoebox/img002.jpg
/fb/jtfdcr/shoebox/img375_rotkappechen_und_der_wolf.jpg
/fb/jtfdcr/shoebox/img376_dornroschen.jpg
/fb/jtfdcr/shoebox/img377_frau_holle.jpg
/fb/jtfdcr/shoebox/img378_madchen_mit_den_schwefelholzern.jpg
/fb/jtfdcr/shoebox/img381_otannenbaum.jpg
/fb/jtfdcr/shoebox/img_8262_2.jpg
/fb/jtfdcr/shoebox/img_8283_2.jpg
/fb/jtfdcr/shoebox/incrpt_1530736_citincident_150526_pg1.jpg
/fb/jtfdcr/shoebox/incrpt_1530736_citincident_150526_pg2.jpg
/fb/jtfdcr/shoebox/incrpt_1530736_citincident_150526_pg3.jpg
/fb/jtfdcr/shoebox/incrpt_1530736_citincident_150526_pg4.jpg
/fb/jtfdcr/shoebox/incrpt_1530736_citincident_150526_pg5.jpg
/fb/jtfdcr/shoebox/incrpt_1530736_citincident_150526_pg6.jpg
/fb/jtfdcr/shoebox/incrpt_1530736_citincident_150526_pg7.jpg
/fb/jtfdcr/shoebox/incrpt_1530736_citincident_150526_pg8.jpg
/fb/jtfdcr/shoebox/incrpt_1540352_martin_150716_pg1.jpg
/fb/jtfdcr/shoebox/incrpt_1540352_martin_150716_pg2.jpg
/fb/jtfdcr/shoebox/incrpt_1540352_martin_150716_pg3.jpg
/fb/jtfdcr/shoebox/incrpt_1544594_gardner_150807_pg1.jpg
/fb/jtfdcr/shoebox/incrpt_1544594_gardner_150807_pg2.jpg
/fb/jtfdcr/shoebox/incrpt_1552246_gardner_150919_pg1.jpg
/fb/jtfdcr/shoebox/incrpt_1552246_gardner_150919_pg2.jpg
/fb/jtfdcr/shoebox/incrpt_1552246_supplement1_gardner_150919_pg1.jpg
/fb/jtfdcr/shoebox/incrpt_1552326_gardner_150919_pg1.jpg
/fb/jtfdcr/shoebox/incrpt_1552326_gardner_150919_pg2.jpg
/fb/jtfdcr/shoebox/incrpt_1553710_martin_150928_pg1.jpg
/fb/jtfdcr/shoebox/incrpt_1553710_martin_150928_pg2.jpg
/fb/jtfdcr/shoebox/incrpt_1558386_gardner_151023_pg1.jpg
/fb/jtfdcr/shoebox/incrpt_1558386_gardner_151023_pg2.jpg
/fb/jtfdcr/shoebox/incrpt_descriptions_pg1.jpg
/fb/jtfdcr/shoebox/incrpt_descriptions_pg2.jpg
/fb/jtfdcr/shoebox/incrpt_descriptions_pg3.jpg
/fb/jtfdcr/shoebox/incrpt_descriptions_pg4.jpg
/fb/jtfdcr/shoebox/index.jpg
/fb/jtfdcr/shoebox/jaam.jpg
/fb/jtfdcr/shoebox/jak2b.jpg
/fb/jtfdcr/shoebox/jak3.jpg
/fb/jtfdcr/shoebox/jam_200710_07.jpg
/fb/jtfdcr/shoebox/jam_200710_08.jpg
/fb/jtfdcr/shoebox/jam_200710_10.jpg
/fb/jtfdcr/shoebox/jam_200710_11.jpg
/fb/jtfdcr/shoebox/jam_200710_12.jpg
/fb/jtfdcr/shoebox/jam_200710_24.jpg
/fb/jtfdcr/shoebox/jam_200710_25.jpg
/fb/jtfdcr/shoebox/jam_200710_26.jpg
/fb/jtfdcr/shoebox/jam_200710_27.jpg
/fb/jtfdcr/shoebox/jam_200710_28.jpg
/fb/jtfdcr/shoebox/jam_200710_29.jpg
/fb/jtfdcr/shoebox/jam_200710_30.jpg
/fb/jtfdcr/shoebox/jam_200710_31.jpg
/fb/jtfdcr/shoebox/jam_200710_32.jpg
/fb/jtfdcr/shoebox/jam_200710_33.jpg
/fb/jtfdcr/shoebox/jam_200710_34.jpg
/fb/jtfdcr/shoebox/jam_200710_40.jpg
/fb/jtfdcr/shoebox/jenna_and_josh.jpg
/fb/jtfdcr/shoebox/jenna_and_mom.jpg
/fb/jtfdcr/shoebox/jessie.jpg
/fb/jtfdcr/shoebox/jing2.jpg
/fb/jtfdcr/shoebox/jk_goodhair2.jpg
/fb/jtfdcr/shoebox/jk_ts_20120411_001.jpg
/fb/jtfdcr/shoebox/jk_ts_20120411_002.jpg
/fb/jtfdcr/shoebox/jk_ts_20120411_003.jpg
/fb/jtfdcr/shoebox/jk_ts_20120411_004.jpg
/fb/jtfdcr/shoebox/jk_ts_20120411_005.jpg
/fb/jtfdcr/shoebox/jk_ts_20120411_006.jpg
/fb/jtfdcr/shoebox/jk_ts_20120411_007.jpg
/fb/jtfdcr/shoebox/jk_ts_20120411_008.jpg
/fb/jtfdcr/shoebox/jk_ts_20120411_009.jpg
/fb/jtfdcr/shoebox/jk_ts_20120411_010.jpg
/fb/jtfdcr/shoebox/jk_ts_20120411_011.jpg
/fb/jtfdcr/shoebox/jk_ts_20120411_012.jpg
/fb/jtfdcr/shoebox/jk_ts_20120411_013.jpg
/fb/jtfdcr/shoebox/jk_ts_20120411_014.jpg
/fb/jtfdcr/shoebox/jk_ts_20120411_015.jpg
/fb/jtfdcr/shoebox/jk_ts_20120411_016.jpg
/fb/jtfdcr/shoebox/jk_ts_20120411_017.jpg
/fb/jtfdcr/shoebox/jkresume_1990_01.jpg
/fb/jtfdcr/shoebox/jkresume_1990_02.jpg
/fb/jtfdcr/shoebox/jkresume_1990_skillset.jpg
/fb/jtfdcr/shoebox/jkresume_2000_01.jpg
/fb/jtfdcr/shoebox/jkresume_2000_02.jpg
/fb/jtfdcr/shoebox/jkresume_2000_03.jpg
/fb/jtfdcr/shoebox/jkresume_2000_04.jpg
/fb/jtfdcr/shoebox/jkresume_2000_05.jpg
/fb/jtfdcr/shoebox/jkresume_2000_06.jpg
/fb/jtfdcr/shoebox/jkresume_2000_07.jpg
/fb/jtfdcr/shoebox/jkresume_2000_08.jpg
/fb/jtfdcr/shoebox/jkresume_2000_detail_buie.jpg
/fb/jtfdcr/shoebox/jkresume_2000_detail_bw.jpg
/fb/jtfdcr/shoebox/jkresume_2000_detail_konet.jpg
/fb/jtfdcr/shoebox/jkresume_2000_detail_preview.jpg
/fb/jtfdcr/shoebox/jkresume_2000_detail_sasc.jpg
/fb/jtfdcr/shoebox/jkwii4trusstee_tyipty.jpg
/fb/jtfdcr/shoebox/jkwii4trustee_byrdpucker_dog_n_pony_club.jpg
/fb/jtfdcr/shoebox/jkwii4trustee_dispute.jpg
/fb/jtfdcr/shoebox/jkwii4trustee_frontpage.jpg
/fb/jtfdcr/shoebox/jkwii4trustee_gallery.jpg
/fb/jtfdcr/shoebox/jkwii4trustee_greatmeet.jpg
/fb/jtfdcr/shoebox/jkwii4trustee_hero.jpg
/fb/jtfdcr/shoebox/jkwii4trustee_jkwii4trustee.jpg
/fb/jtfdcr/shoebox/jkwii4trustee_jskwiis.jpg
/fb/jtfdcr/shoebox/jkwii4trustee_meet.jpg
/fb/jtfdcr/shoebox/jkwii4trustee_portrait.jpg
/fb/jtfdcr/shoebox/jkwii4trustee_rightman_rightplace.jpg
/fb/jtfdcr/shoebox/jkwii4trustee_sheet_001.jpg
/fb/jtfdcr/shoebox/jkwii4trustee_sheet_002.jpg
/fb/jtfdcr/shoebox/jkwii4trustee_tippicanoe.jpg
/fb/jtfdcr/shoebox/jkwii4trustee_tyler2.jpg
/fb/jtfdcr/shoebox/jsk_jak1_bivins_visit.jpg
/fb/jtfdcr/shoebox/jsk_winecellar_Image395.jpg
/fb/jtfdcr/shoebox/jsk_winecellar_Image402.jpg
/fb/jtfdcr/shoebox/jskfam_shimfam_priest.jpg
/fb/jtfdcr/shoebox/jt38f_seagrists.jpg
/fb/jtfdcr/shoebox/jtf.jpg
/fb/jtfdcr/shoebox/jtf07.jpg
/fb/jtfdcr/shoebox/jtf08.jpg
/fb/jtfdcr/shoebox/jtf09.jpg
/fb/jtfdcr/shoebox/jtf10.jpg
/fb/jtfdcr/shoebox/jtf11.jpg
/fb/jtfdcr/shoebox/jtf14.jpg
/fb/jtfdcr/shoebox/jtf16.jpg
/fb/jtfdcr/shoebox/jtf17510.jpg
/fb/jtfdcr/shoebox/jtf17570.jpg
/fb/jtfdcr/shoebox/jtf21.jpg
/fb/jtfdcr/shoebox/jtf22.jpg
/fb/jtfdcr/shoebox/jtf23.jpg
/fb/jtfdcr/shoebox/jtf28.jpg
/fb/jtfdcr/shoebox/jtf28_defford_francis_20020527_140901.jpg
/fb/jtfdcr/shoebox/jtf28_defford_john_20020527_140901.jpg
/fb/jtfdcr/shoebox/jtf28_deffords_20020527_1324015.jpg
/fb/jtfdcr/shoebox/jtf28_desc_zillow.jpg
/fb/jtfdcr/shoebox/jtf28_desc_zillow2.jpg
/fb/jtfdcr/shoebox/jtf28_tractor_ongrass_parking.jpg
/fb/jtfdcr/shoebox/jtf28_zillow.jpg
/fb/jtfdcr/shoebox/jtf29.jpg
/fb/jtfdcr/shoebox/jtf29_door.jpg
/fb/jtfdcr/shoebox/jtf29_eagle_north.jpg
/fb/jtfdcr/shoebox/jtf29_eagle_south.jpg
/fb/jtfdcr/shoebox/jtf29_fencelet1.jpg
/fb/jtfdcr/shoebox/jtf29_fencelet2.jpg
/fb/jtfdcr/shoebox/jtf29_fencelet3.jpg
/fb/jtfdcr/shoebox/jtf29_fencelet3r.jpg
/fb/jtfdcr/shoebox/jtf29_fencelets.jpg
/fb/jtfdcr/shoebox/jtf29_fenclet2.jpg
/fb/jtfdcr/shoebox/jtf29_fiona_inyard_damage.jpg
/fb/jtfdcr/shoebox/jtf29_fiona_inyard_damage2.jpg
/fb/jtfdcr/shoebox/jtf29_frisbee.jpg
/fb/jtfdcr/shoebox/jtf29_highschool_frisbee.jpg
/fb/jtfdcr/shoebox/jtf29_jak1_carter.jpg
/fb/jtfdcr/shoebox/jtf29_kali.jpg
/fb/jtfdcr/shoebox/jtf29_logging01.jpg
/fb/jtfdcr/shoebox/jtf29_logging02.jpg
/fb/jtfdcr/shoebox/jtf29_logging03.jpg
/fb/jtfdcr/shoebox/jtf29_logging05.jpg
/fb/jtfdcr/shoebox/jtf29_mailbox.jpg
/fb/jtfdcr/shoebox/jtf29_saic_check.jpg
/fb/jtfdcr/shoebox/jtf29_sawhorse_stop.jpg
/fb/jtfdcr/shoebox/jtf29_sawhorsea.jpg
/fb/jtfdcr/shoebox/jtf29_soccerball1.jpg
/fb/jtfdcr/shoebox/jtf29_soccerball3.jpg
/fb/jtfdcr/shoebox/jtf29_soccerball4.jpg
/fb/jtfdcr/shoebox/jtf29_soccerball5.jpg
/fb/jtfdcr/shoebox/jtf29_soccerball_big.jpg
/fb/jtfdcr/shoebox/jtf29_umbrella.jpg
/fb/jtfdcr/shoebox/jtf29_valintines_invoice_day_find.jpg
/fb/jtfdcr/shoebox/jtf29_van.jpg
/fb/jtfdcr/shoebox/jtf29_wagon.jpg
/fb/jtfdcr/shoebox/jtf29_wagon1.jpg
/fb/jtfdcr/shoebox/jtf29_wagon_jtf30_logging.jpg
/fb/jtfdcr/shoebox/jtf29_webcam1.jpg
/fb/jtfdcr/shoebox/jtf29_webcam1b.jpg
/fb/jtfdcr/shoebox/jtf29_webcam1c.jpg
/fb/jtfdcr/shoebox/jtf29_webcam2.jpg
/fb/jtfdcr/shoebox/jtf30..jpg
/fb/jtfdcr/shoebox/jtf30_cliffshed_sinkhole_drain.jpg
/fb/jtfdcr/shoebox/jtf30_jackie_martin.jpg
/fb/jtfdcr/shoebox/jtf30_jackie_martin2.jpg
/fb/jtfdcr/shoebox/jtf30_jackie_martin3.jpg
/fb/jtfdcr/shoebox/jtf30_jackie_martin4.jpg
/fb/jtfdcr/shoebox/jtf30_sinkhole_draine.jpg
/fb/jtfdcr/shoebox/jtf30_zillow_bar.jpg
/fb/jtfdcr/shoebox/jtf30_zillow_desc.jpg
/fb/jtfdcr/shoebox/jtf30_zillow_desc1.jpg
/fb/jtfdcr/shoebox/jtf30_zillow_desc2.jpg
/fb/jtfdcr/shoebox/jtf30_zillow_desc4.jpg
/fb/jtfdcr/shoebox/jtf30_zillow_desc_sunroom.jpg
/fb/jtfdcr/shoebox/jtf30_zillow_kitchen.jpg
/fb/jtfdcr/shoebox/jtf31-32.jpg
/fb/jtfdcr/shoebox/jtf31.jpg
/fb/jtfdcr/shoebox/jtf31_fiona_autonoumus_patrol.jpg
/fb/jtfdcr/shoebox/jtf31_fiona_lease_waiver.jpg
/fb/jtfdcr/shoebox/jtf31_fiona_runs_201506_001.jpg
/fb/jtfdcr/shoebox/jtf31_fiona_runs_201506_002.jpg
/fb/jtfdcr/shoebox/jtf31_snap_20170123_187589_noparking_party_sign.jpg
/fb/jtfdcr/shoebox/jtf31_snap_20170123_187593_party_whitevan_stalker.jpg
/fb/jtfdcr/shoebox/jtf31_snap_20170123_187594+party_whitevan_stalker_9uv667_plates.jpg
/fb/jtfdcr/shoebox/jtf31_snap_20170123_187594+party_whitevan_stalker_middlefingure.jpg
/fb/jtfdcr/shoebox/jtf31_snap_20170123_187594+party_whitevan_stalker_profile2.jpg
/fb/jtfdcr/shoebox/jtf31_snap_20170123_187600_clownporch_partygame_harrassment.jpg
/fb/jtfdcr/shoebox/jtf31_snap_20170123_187600_clownporch_partygame_harrassment2.jpg
/fb/jtfdcr/shoebox/jtf31_takings.jpg
/fb/jtfdcr/shoebox/jtf32.jpg
/fb/jtfdcr/shoebox/jtf32_doberwatchers_2of4.jpg
/fb/jtfdcr/shoebox/jtf32_donovan_doberhome.jpg
/fb/jtfdcr/shoebox/jtf32_pre_jtf3120021201_132901_1292986.jpg
/fb/jtfdcr/shoebox/jtf32_snap_20170123_187587.jpg
/fb/jtfdcr/shoebox/jtf32_snap_20170123_187588.jpg
/fb/jtfdcr/shoebox/jtf35.jpg
/fb/jtfdcr/shoebox/jtf36.jpg
/fb/jtfdcr/shoebox/jtf37.jpg
/fb/jtfdcr/shoebox/jtf38.jpg
/fb/jtfdcr/shoebox/jtf38_elvis2_autonomous_patrol.jpg
/fb/jtfdcr/shoebox/jtf39.jpg
/fb/jtfdcr/shoebox/jtf39_baily_autonomous_patrol.jpg
/fb/jtfdcr/shoebox/jtf44.jpg
/fb/jtfdcr/shoebox/jtf44_front.jpg
/fb/jtfdcr/shoebox/jtf_29-30.jpg
/fb/jtfdcr/shoebox/jtf_34509.jpg
/fb/jtfdcr/shoebox/jtf_35155.jpg
/fb/jtfdcr/shoebox/jtf_601jtfdc_courtcircle.jpg
/fb/jtfdcr/shoebox/jtf_byrd.jpg
/fb/jtfdcr/shoebox/jtf_byrd_coral.jpg
/fb/jtfdcr/shoebox/jtf_byrd_north.jpg
/fb/jtfdcr/shoebox/jtf_corner_ne.jpg
/fb/jtfdcr/shoebox/jtf_mental_1_001.jpg
/fb/jtfdcr/shoebox/jtf_mental_1_002.jpg
/fb/jtfdcr/shoebox/jtf_mental_1_003.jpg
/fb/jtfdcr/shoebox/jtf_n.jpg
/fb/jtfdcr/shoebox/jtf_ne.jpg
/fb/jtfdcr/shoebox/jtf_ne_zillow.jpg
/fb/jtfdcr/shoebox/jtf_north_zillow.jpg
/fb/jtfdcr/shoebox/jtf_nw_31-34.jpg
/fb/jtfdcr/shoebox/jtf_right.jpg
/fb/jtfdcr/shoebox/jtf_topus_001.jpg
/fb/jtfdcr/shoebox/jtf_topus_002.jpg
/fb/jtfdcr/shoebox/jtfarms_contacts_01.jpg
/fb/jtfdcr/shoebox/jtfarms_contacts_02.jpg
/fb/jtfdcr/shoebox/jtfarms_contacts_03.jpg
/fb/jtfdcr/shoebox/jtfd_north.jpg
/fb/jtfdcr/shoebox/jtfdc-north.jpg
/fb/jtfdcr/shoebox/jtfdc-north_medow.jpg
/fb/jtfdcr/shoebox/jtfdc.jpg
/fb/jtfdcr/shoebox/jtfdc28_gazebo_lights_nocam.jpg
/fb/jtfdcr/shoebox/jtfdc29_backyard_logging.jpg
/fb/jtfdcr/shoebox/jtfdc29_eagle_north.jpg
/fb/jtfdcr/shoebox/jtfdc29_fenclet1_auctiontape.jpg
/fb/jtfdcr/shoebox/jtfdc29_fenclet2_auctiontape.jpg
/fb/jtfdcr/shoebox/jtfdc29_fenclets12_seazed.jpg
/fb/jtfdcr/shoebox/jtfdc29_log5463.jpg
/fb/jtfdcr/shoebox/jtfdc29_log5474.jpg
/fb/jtfdcr/shoebox/jtfdc_1of100_manufactured_police_calls.jpg
/fb/jtfdcr/shoebox/jtfdc_2001.jpg
/fb/jtfdcr/shoebox/jtfdc_29-30.jpg
/fb/jtfdcr/shoebox/jtfdc_29-30_topos.jpg
/fb/jtfdcr/shoebox/jtfdc_300.jpg
/fb/jtfdcr/shoebox/jtfdc_barn.jpg
/fb/jtfdcr/shoebox/jtfdc_barn_jtfdc29.jpg
/fb/jtfdcr/shoebox/jtfdc_before_jtf31.jpg
/fb/jtfdcr/shoebox/jtfdc_corner.jpg
/fb/jtfdcr/shoebox/jtfdc_corner_wide.jpg
/fb/jtfdcr/shoebox/jtfdc_courtcircle.jpg
/fb/jtfdcr/shoebox/jtfdc_eagles_sawhorse_fencelets.jpg
/fb/jtfdcr/shoebox/jtfdc_easment.jpg
/fb/jtfdcr/shoebox/jtfdc_gazebo_e.jpg
/fb/jtfdcr/shoebox/jtfdc_gazebo_n_jtf30.jpg
/fb/jtfdcr/shoebox/jtfdc_gazebo_ne.jpg
/fb/jtfdcr/shoebox/jtfdc_gazebo_ne_jtf31.jpg
/fb/jtfdcr/shoebox/jtfdc_gazebo_nw_jtf30.jpg
/fb/jtfdcr/shoebox/jtfdc_gazebo_se_jtf28.jpg
/fb/jtfdcr/shoebox/jtfdc_gazebo_sse_jtf28.jpg
/fb/jtfdcr/shoebox/jtfdc_gazebo_sw.jpg
/fb/jtfdcr/shoebox/jtfdc_greater.jpg
/fb/jtfdcr/shoebox/jtfdc_imgmap.jpg
/fb/jtfdcr/shoebox/jtfdc_jtf28_property_stake.jpg
/fb/jtfdcr/shoebox/jtfdc_jtf30-28_scheming.jpg
/fb/jtfdcr/shoebox/jtfdc_jtf30_heirloom_mowerer_midnight_stalkaroundIMG_9408.jpg
/fb/jtfdcr/shoebox/jtfdc_jtf30_shed_sinkhole_drain.jpg
/fb/jtfdcr/shoebox/jtfdc_jtf31_easment_blockade.jpg
/fb/jtfdcr/shoebox/jtfdc_jtf31_fiona_fleefall.jpg
/fb/jtfdcr/shoebox/jtfdc_jtf31_party_entertainment_jkwii_ngcupIMG_9409.jpg
/fb/jtfdcr/shoebox/jtfdc_kidb_back.jpg
/fb/jtfdcr/shoebox/jtfdc_kidb_front.jpg
/fb/jtfdcr/shoebox/jtfdc_kidc_back.jpg
/fb/jtfdcr/shoebox/jtfdc_kidc_front.jpg
/fb/jtfdcr/shoebox/jtfdc_kidp_back.jpg
/fb/jtfdcr/shoebox/jtfdc_kidp_front.jpg
/fb/jtfdcr/shoebox/jtfdc_kids3_back.jpg
/fb/jtfdcr/shoebox/jtfdc_kids3_front.jpg
/fb/jtfdcr/shoebox/jtfdc_kids_IMG_8424.jpg
/fb/jtfdcr/shoebox/jtfdc_kouIMG_8561.jpg
/fb/jtfdcr/shoebox/jtfdc_mailman_refused_deliver.jpg
/fb/jtfdcr/shoebox/jtfdc_meados_souixpassage.jpg
/fb/jtfdcr/shoebox/jtfdc_meadow.jpg
/fb/jtfdcr/shoebox/jtfdc_parcels copy.jpg
/fb/jtfdcr/shoebox/jtfdc_parcels.jpg
/fb/jtfdcr/shoebox/jtfdc_police.jpg
/fb/jtfdcr/shoebox/jtfdc_police_straf_20170123_16224.jpg
/fb/jtfdcr/shoebox/jtfdc_pre_jtf31.jpg
/fb/jtfdcr/shoebox/jtfdc_private_court_since_1979_viewin.jpg
/fb/jtfdcr/shoebox/jtfdc_sawhorse.jpg
/fb/jtfdcr/shoebox/jtfdc_sawhorse2.jpg
/fb/jtfdcr/shoebox/jtfdc_sawhorse_a.jpg
/fb/jtfdcr/shoebox/jtfdc_sawhorse_exit.jpg
/fb/jtfdcr/shoebox/jtfdc_sawhorse_jak3.jpg
/fb/jtfdcr/shoebox/jtfdc_sawhorse_stop_out.jpg
/fb/jtfdcr/shoebox/jtfdc_sawhorse_stopsign.jpg
/fb/jtfdcr/shoebox/jtfdc_sawhorse_winter.jpg
/fb/jtfdcr/shoebox/jtfdc_shared_barn.jpg
/fb/jtfdcr/shoebox/jtfdc_souixpassage.jpg
/fb/jtfdcr/shoebox/jtfdc_south.jpg
/fb/jtfdcr/shoebox/jtfdc_sw_jtf21.jpg
/fb/jtfdcr/shoebox/jtfdc_theater.jpg
/fb/jtfdcr/shoebox/jtfdc_townhall_noticeIMG_8560.jpg
/fb/jtfdcr/shoebox/jtfdc_updown_passage.jpg
/fb/jtfdcr/shoebox/jtfdc_updown_passage_jtf31.jpg
/fb/jtfdcr/shoebox/jtfdcr2.jpg
/fb/jtfdcr/shoebox/jtfdcr_page_001.jpg
/fb/jtfdcr/shoebox/jtfdcr_page_002.jpg
/fb/jtfdcr/shoebox/jtfdcr_page_003.jpg
/fb/jtfdcr/shoebox/jtfdcr_page_003b.jpg
/fb/jtfdcr/shoebox/jtfdcr_page_004.jpg
/fb/jtfdcr/shoebox/jtfdcr_page_005.jpg
/fb/jtfdcr/shoebox/jtfdcr_page_006.jpg
/fb/jtfdcr/shoebox/jtfdcr_page_007.jpg
/fb/jtfdcr/shoebox/jtfdcr_page_008.jpg
/fb/jtfdcr/shoebox/jtfdcr_page_008b.jpg
/fb/jtfdcr/shoebox/jtfdcr_page_009.jpg
/fb/jtfdcr/shoebox/jtfdcr_page_010.jpg
/fb/jtfdcr/shoebox/jtfdcr_page_011.jpg
/fb/jtfdcr/shoebox/jtfdcr_page_011b.jpg
/fb/jtfdcr/shoebox/jtfdcr_page_012.jpg
/fb/jtfdcr/shoebox/jtfdcr_page_013.jpg
/fb/jtfdcr/shoebox/jtfdcsouth.jpg
/fb/jtfdcr/shoebox/jtfinc.jpg
/fb/jtfdcr/shoebox/jtfinc_potholes.jpg
/fb/jtfdcr/shoebox/jtfinc_vs_jtf29jk_ 2.jpg
/fb/jtfdcr/shoebox/jtfinc_vs_jtf29jk_ 3.jpg
/fb/jtfdcr/shoebox/jtfinc_vs_jtf29jk_ 4.jpg
/fb/jtfdcr/shoebox/jtfinc_vs_jtf29jk_ 5.jpg
/fb/jtfdcr/shoebox/jtfinc_vs_jtf29jk_ 6.jpg
/fb/jtfdcr/shoebox/jtfinc_vs_jtf29jk_.jpg
/fb/jtfdcr/shoebox/julius_mocsari_001.jpg
/fb/jtfdcr/shoebox/ka_cornelia_harry_63.jpg
/fb/jtfdcr/shoebox/ka_jtfd29_title_01.jpg
/fb/jtfdcr/shoebox/ka_jtfd29_title_02.jpg
/fb/jtfdcr/shoebox/ka_jtfd29_title_03.jpg
/fb/jtfdcr/shoebox/ka_jtfd29_title_04.jpg
/fb/jtfdcr/shoebox/ka_jtfd29_title_05.jpg
/fb/jtfdcr/shoebox/ka_jtfd29_title_06.jpg
/fb/jtfdcr/shoebox/ka_jtfd29_title_07.jpg
/fb/jtfdcr/shoebox/ka_jtfd29_title_08.jpg
/fb/jtfdcr/shoebox/ka_jtfd29_title_09.jpg
/fb/jtfdcr/shoebox/ka_jtfd29_title_10.jpg
/fb/jtfdcr/shoebox/ka_jtfd29_title_11.jpg
/fb/jtfdcr/shoebox/karl_smekal_.jpg
/fb/jtfdcr/shoebox/karl_smekal_001.jpg
/fb/jtfdcr/shoebox/karl_smekal_002.jpg
/fb/jtfdcr/shoebox/karl_smekal_003.jpg
/fb/jtfdcr/shoebox/karl_smekal_004.jpg
/fb/jtfdcr/shoebox/karl_smekal_005.jpg
/fb/jtfdcr/shoebox/karl_smekal_006.jpg
/fb/jtfdcr/shoebox/karl_smekal_007.jpg
/fb/jtfdcr/shoebox/karl_smekal_008.jpg
/fb/jtfdcr/shoebox/karl_smekal_009.jpg
/fb/jtfdcr/shoebox/karl_smekal_010.jpg
/fb/jtfdcr/shoebox/karl_smekal_011.jpg
/fb/jtfdcr/shoebox/karl_smekal_012.jpg
/fb/jtfdcr/shoebox/karl_smekal_013.jpg
/fb/jtfdcr/shoebox/karl_smekal_014.jpg
/fb/jtfdcr/shoebox/karl_smekal_015.jpg
/fb/jtfdcr/shoebox/karl_smekal_016.jpg
/fb/jtfdcr/shoebox/karl_smekal_017.jpg
/fb/jtfdcr/shoebox/karl_smekal_018.jpg
/fb/jtfdcr/shoebox/karl_smekal_019.jpg
/fb/jtfdcr/shoebox/karl_smekal_020.jpg
/fb/jtfdcr/shoebox/karl_smekal_021.jpg
/fb/jtfdcr/shoebox/karl_smekal_022.jpg
/fb/jtfdcr/shoebox/karl_smekal_023.jpg
/fb/jtfdcr/shoebox/karl_smekal_024.jpg
/fb/jtfdcr/shoebox/karl_smekal_025.jpg
/fb/jtfdcr/shoebox/karl_smekal_026.jpg
/fb/jtfdcr/shoebox/karl_smekal_027.jpg
/fb/jtfdcr/shoebox/karl_smekal_028.jpg
/fb/jtfdcr/shoebox/karl_smekal_029.jpg
/fb/jtfdcr/shoebox/karl_smekal_030.jpg
/fb/jtfdcr/shoebox/karl_smekal_031.jpg
/fb/jtfdcr/shoebox/karl_smekal_032.jpg
/fb/jtfdcr/shoebox/karl_smekal_033.jpg
/fb/jtfdcr/shoebox/karl_smekal_034.jpg
/fb/jtfdcr/shoebox/karl_smekal_035.jpg
/fb/jtfdcr/shoebox/karl_smekal_036.jpg
/fb/jtfdcr/shoebox/karl_smekal_037.jpg
/fb/jtfdcr/shoebox/karl_smekal_038.jpg
/fb/jtfdcr/shoebox/karl_smekal_039.jpg
/fb/jtfdcr/shoebox/karl_smekal_040.jpg
/fb/jtfdcr/shoebox/karl_smekal_041.jpg
/fb/jtfdcr/shoebox/karl_smekal_042.jpg
/fb/jtfdcr/shoebox/karl_smekal_043.jpg
/fb/jtfdcr/shoebox/karl_smekal_044.jpg
/fb/jtfdcr/shoebox/karl_smekal_045.jpg
/fb/jtfdcr/shoebox/karl_smekal_046.jpg
/fb/jtfdcr/shoebox/karl_smekal_047.jpg
/fb/jtfdcr/shoebox/karl_smekal_048.jpg
/fb/jtfdcr/shoebox/karl_smekal_049.jpg
/fb/jtfdcr/shoebox/karl_smekal_050.jpg
/fb/jtfdcr/shoebox/karl_smekal_051.jpg
/fb/jtfdcr/shoebox/karl_smekal_052.jpg
/fb/jtfdcr/shoebox/karl_smekal_053.jpg
/fb/jtfdcr/shoebox/karl_smekal_054.jpg
/fb/jtfdcr/shoebox/karl_smekal_055.jpg
/fb/jtfdcr/shoebox/karl_smekal_056.jpg
/fb/jtfdcr/shoebox/karl_smekal_057.jpg
/fb/jtfdcr/shoebox/karl_smekal_058.jpg
/fb/jtfdcr/shoebox/karl_smekal_059.jpg
/fb/jtfdcr/shoebox/karl_smekal_060.jpg
/fb/jtfdcr/shoebox/karl_smekal_061.jpg
/fb/jtfdcr/shoebox/karl_smekal_062.jpg
/fb/jtfdcr/shoebox/karl_smekal_063.jpg
/fb/jtfdcr/shoebox/karl_smekal_064.jpg
/fb/jtfdcr/shoebox/karl_smekal_065.jpg
/fb/jtfdcr/shoebox/karl_smekal_066.jpg
/fb/jtfdcr/shoebox/karl_smekal_067.jpg
/fb/jtfdcr/shoebox/karl_smekal_068.jpg
/fb/jtfdcr/shoebox/karl_smekal_069.jpg
/fb/jtfdcr/shoebox/karl_smekal_070.jpg
/fb/jtfdcr/shoebox/karl_smekal_071.jpg
/fb/jtfdcr/shoebox/karl_smekal_072.jpg
/fb/jtfdcr/shoebox/karl_smekal_073.jpg
/fb/jtfdcr/shoebox/karl_smekal_074.jpg
/fb/jtfdcr/shoebox/karl_smekal_075.jpg
/fb/jtfdcr/shoebox/karl_smekal_076.jpg
/fb/jtfdcr/shoebox/karl_smekal_077.jpg
/fb/jtfdcr/shoebox/karl_smekal_078.jpg
/fb/jtfdcr/shoebox/karl_smekal_079.jpg
/fb/jtfdcr/shoebox/karl_smekal_080.jpg
/fb/jtfdcr/shoebox/karl_smekal_081.jpg
/fb/jtfdcr/shoebox/karl_smekal_082.jpg
/fb/jtfdcr/shoebox/karl_smekal_083.jpg
/fb/jtfdcr/shoebox/karl_smekal_084.jpg
/fb/jtfdcr/shoebox/karl_smekal_085.jpg
/fb/jtfdcr/shoebox/karl_smekal_086.jpg
/fb/jtfdcr/shoebox/karl_smekal_087.jpg
/fb/jtfdcr/shoebox/karl_smekal_088.jpg
/fb/jtfdcr/shoebox/karl_smekal_089.jpg
/fb/jtfdcr/shoebox/karl_smekal_090.jpg
/fb/jtfdcr/shoebox/karl_smekal_091.jpg
/fb/jtfdcr/shoebox/karl_smekal_092.jpg
/fb/jtfdcr/shoebox/karl_smekal_093.jpg
/fb/jtfdcr/shoebox/karl_smekal_094.jpg
/fb/jtfdcr/shoebox/karl_smekal_095.jpg
/fb/jtfdcr/shoebox/karl_smekal_096.jpg
/fb/jtfdcr/shoebox/karl_smekal_097.jpg
/fb/jtfdcr/shoebox/karl_smekal_098.jpg
/fb/jtfdcr/shoebox/karl_smekal_099.jpg
/fb/jtfdcr/shoebox/karl_smekal_100.jpg
/fb/jtfdcr/shoebox/karl_smekal_101.jpg
/fb/jtfdcr/shoebox/karl_smekal_102.jpg
/fb/jtfdcr/shoebox/karl_smekal_103.jpg
/fb/jtfdcr/shoebox/karl_smekal_104.jpg
/fb/jtfdcr/shoebox/karl_smekal_105.jpg
/fb/jtfdcr/shoebox/karl_smekal_106.jpg
/fb/jtfdcr/shoebox/karl_smekal_107.jpg
/fb/jtfdcr/shoebox/karl_smekal_108.jpg
/fb/jtfdcr/shoebox/karl_smekal_109.jpg
/fb/jtfdcr/shoebox/karl_smekal_110.jpg
/fb/jtfdcr/shoebox/karl_smekal_111.jpg
/fb/jtfdcr/shoebox/karl_smekal_112.jpg
/fb/jtfdcr/shoebox/karl_smekal_113.jpg
/fb/jtfdcr/shoebox/karl_smekal_114.jpg
/fb/jtfdcr/shoebox/karl_smekal_115.jpg
/fb/jtfdcr/shoebox/karl_smekal_116.jpg
/fb/jtfdcr/shoebox/karl_smekal_117.jpg
/fb/jtfdcr/shoebox/karl_smekal_118.jpg
/fb/jtfdcr/shoebox/karl_smekal_119.jpg
/fb/jtfdcr/shoebox/karl_smekal_120.jpg
/fb/jtfdcr/shoebox/karl_smekal_121.jpg
/fb/jtfdcr/shoebox/karl_smekal_122.jpg
/fb/jtfdcr/shoebox/karl_smekal_123.jpg
/fb/jtfdcr/shoebox/karl_smekal_124.jpg
/fb/jtfdcr/shoebox/karl_smekal_125.jpg
/fb/jtfdcr/shoebox/karl_smekal_126.jpg
/fb/jtfdcr/shoebox/karl_smekal_127.jpg
/fb/jtfdcr/shoebox/karl_smekal_128.jpg
/fb/jtfdcr/shoebox/karl_smekal_129.jpg
/fb/jtfdcr/shoebox/karl_smekal_130.jpg
/fb/jtfdcr/shoebox/karl_smekal_131.jpg
/fb/jtfdcr/shoebox/karl_smekal_132.jpg
/fb/jtfdcr/shoebox/karl_smekal_133.jpg
/fb/jtfdcr/shoebox/karl_smekal_134.jpg
/fb/jtfdcr/shoebox/karl_smekal_135.jpg
/fb/jtfdcr/shoebox/karl_smekal_136.jpg
/fb/jtfdcr/shoebox/karl_smekal_137.jpg
/fb/jtfdcr/shoebox/karl_smekal_138.jpg
/fb/jtfdcr/shoebox/karl_smekal_139.jpg
/fb/jtfdcr/shoebox/karl_smekal_140.jpg
/fb/jtfdcr/shoebox/karl_smekal_141.jpg
/fb/jtfdcr/shoebox/karl_smekal_142.jpg
/fb/jtfdcr/shoebox/karl_smekal_143.jpg
/fb/jtfdcr/shoebox/karl_smekal_144.jpg
/fb/jtfdcr/shoebox/karl_smekal_145.jpg
/fb/jtfdcr/shoebox/karl_smekal_146.jpg
/fb/jtfdcr/shoebox/karl_smekal_147.jpg
/fb/jtfdcr/shoebox/karl_smekal_148.jpg
/fb/jtfdcr/shoebox/karl_smekal_149.jpg
/fb/jtfdcr/shoebox/karl_smekal_150.jpg
/fb/jtfdcr/shoebox/ko.jpg
/fb/jtfdcr/shoebox/ko0_us_down.jpg
/fb/jtfdcr/shoebox/ko_mo_labor_201302a.jpg
/fb/jtfdcr/shoebox/ko_mo_labor_201302b.jpg
/fb/jtfdcr/shoebox/ko_saic_check_20130215.jpg
/fb/jtfdcr/shoebox/konet_hack_screen.jpg
/fb/jtfdcr/shoebox/konet_inv_saic2.jpg
/fb/jtfdcr/shoebox/konet_invoice_fy-pp_yyyymmdd-yyyymmdd-1.jpg
/fb/jtfdcr/shoebox/konet_invoice_fy-pp_yyyymmdd-yyyymmdd.jpg
/fb/jtfdcr/shoebox/konet_invoice_saic.jpg
/fb/jtfdcr/shoebox/ky_pineville_forestry_camp.jpg
/fb/jtfdcr/shoebox/ky_pineville_forestry_camp_desc.jpg
/fb/jtfdcr/shoebox/ladyj_alabaster.jpg
/fb/jtfdcr/shoebox/ladyj_amazon.jpg
/fb/jtfdcr/shoebox/ladyj_brass.jpg
/fb/jtfdcr/shoebox/ladyj_bronze.jpg
/fb/jtfdcr/shoebox/ladyj_clingyclothes.jpg
/fb/jtfdcr/shoebox/ladyj_glide.jpg
/fb/jtfdcr/shoebox/ladyj_horns.jpg
/fb/jtfdcr/shoebox/ladyj_onhi.jpg
/fb/jtfdcr/shoebox/ladyj_silouette.jpg
/fb/jtfdcr/shoebox/ladyj_statue.jpg
/fb/jtfdcr/shoebox/ladyj_sword.jpg
/fb/jtfdcr/shoebox/ladyj_zen.jpg
/fb/jtfdcr/shoebox/loader.jpg
/fb/jtfdcr/shoebox/logo_jtf.jpg
/fb/jtfdcr/shoebox/marlins_jacket.jpg
/fb/jtfdcr/shoebox/mocsari_julius_memorial.jpg
/fb/jtfdcr/shoebox/mozart_aviary.jpg
/fb/jtfdcr/shoebox/mrs_ford_psychicreader.jpg
/fb/jtfdcr/shoebox/mrs_ford_psychicreader2.jpg
/fb/jtfdcr/shoebox/oldpeople1.jpg
/fb/jtfdcr/shoebox/unclesam.jpg
/fb/jtfdcr/shoebox/unclesam_templet.jpg
/fb/jtfdcr/shoebox/waxpaper.jpg
/fb/jtfdcr/shoebox/wood_posters.jpg
/fb/jtfdcr/shoebox/woodcarver_blackforest.jpg
/fb/jtfdcr/shoebox/woodcarvershop_blackforest.jpg `;
return(pagelist_shoebox.split("\n"));
}
function load_pagelist_imgs() {
// alert( "BUGS_1000 load_page_list_jtfdcr_imgs" );
var pagelist_imgs=
`imgs/1.jpg
imgs/2.jpg
imgs/3.jpg
imgs/4.jpg
imgs/5.jpg
imgs/6.jpg
imgs/7.jpg
imgs/8.jpg
imgs/9.jpg
imgs/10.jpg
imgs/11.jpg
imgs/12.jpg
imgs/13.jpg
imgs/14.jpg
imgs/15.jpg
imgs/16.jpg `;
return(pagelist_imgs.split("\n"));
}
</script>
<script id="script load_pagelist_i" >
function load_pagelist_i() {
var pagelist_i = `
i/1.jpg
i/2.jpg
i/3.jpg
i/4.jpg
i/5.jpg
i/6.jpg
i/7.jpg
i/8.jpg
i/9.jpg
i/10.jpg
i/11.jpg
i/12.jpg
i/13.jpg
i/14.jpg
i/15.jpg
i/16.jpg`;
return(pagelist_i.split("\n"));
}
</script>
<script id="script_load_pagelist_ajaks" >
function load_pagelist_ajaks(ajaks) {
alert( "BUGS_1212 load_pagelist_ajaks ajaks="+ajaks );
ajaks="fb.txt";
if(! linkcheck(ajaks)) { return(""); }
alert( "BUGS_1213 load_pagelist_ajaks ajaks="+ajaks );
var pages = new Array();
var pages_len=0;
var j=0;
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var ajaxtext=this.responseText;
var j=0;
var htmout = "";
var pagelist = new Array();
pagelist = ajaxtext.split("\n");
alert( "BUGS_1710 load_ajaks() ajaks="+ajaks+" pagelist="+pagelist);
var pagelist_len = pagelist.length;
// document.getElementById("div_load_ajaks").innerHTML = this.responseText;
document.getElementById("div_load_ajaks").innerHTML = ajaxtext;
// document.getElementById("div_load_ajaks").innerHTML = pagelist;
// document.getElementById("div_load_ajaks").innerHTML = htmout+ajaxtext;
// loadApp();
// fbload();
alert( "BUGS_1580 ajaxlines="+ajaxlines pagelist_len="+pagelist_len );
return( ajaxlines );
}
};
xhttp.open("GET", ajaks, true);
xhttp.send();
}
</script>
<script id="script_load_pagelist_default">
function load_pagelist_default() {
var pages = new Array();
var pages_len=0;
var j=0;
// alert( "BUGS_1250 load_pages_default pages_len="+pages_len+" href="+href );
var pagelist_default =`
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages_default/0.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages_default/1.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages_default/2.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages_default/3.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages_default/4.jpg
pages_default/5.jpg
pages_default/6.jpg
pages_default/7.jpg
pages_default/8.jpg
pages_default/9.jpg
pages_default/10.jpg
pages_default/11.jpg
pages_default/12.jpg
pages_default/13.jpg
pages_default/14.jpg
pages_default/15.jpg
pages_default/16.jpg`;
`;
return( pagelist_default.split("\n"));
}
</script>
<script id="script_load_pagelist" >
function load_pagelist() {
var pages = new Array();
var pages_len=0;
var j=0; var k=0;
var pages_default = new Array();
var pages_go = new Array();
var pages_jtfdcr_pages = new Array();
var pages_jtfdcr_imgs = new Array();
// var ajaks = "fb_imgs.txt";
// pages = load_pagelist_ajaks(ajaks);
// pages = load_pagelist_default();
// pages= load_pagelist_head();
// pages= load_pagelist_pages();
// pages= load_pagelist_imgs();
// pages= load_pagelist_i();
// pages= load_pagelist_go();
// pages= load_pagelist_tail();
pagelist_head = load_pagelist_head();
pagelist_pages = load_pagelist_pages();
pagelist_chap01 = load_pagelist_chap01();
pagelist_chap02 = load_pagelist_chap02();
pagelist_chap03 = load_pagelist_chap03();
pagelist_shoebox = load_pagelist_shoebox();
// pagelist_imgs = load_pagelist_imgs();
pagelist_i = load_pagelist_i();
pagelist_go = load_pagelist_go();
pagelist_tail = load_pagelist_tail();
// var ajaks="fb.txt";
// var pagelist_ajaks = load_pagelist_ajaks(ajaks);
// pages = pagelist_head.concat(pagelist_pages, pagelist_chap01, pagelist_chap02, pagelist_chap03, pagelist_imgs, pagelist_i, pagelist_go,pagelist_tail );
pages = pagelist_head.concat(pagelist_pages, pagelist_chap01, pagelist_chap02, pagelist_chap03, pagelist_go,pagelist_tail );
pages_len=pages.length;
// alert( "BUGS_1290 pages_len="+pages_len+" pages="+pages );
// alert( "BUGS_1180 load_pagelist_default len="+pages_len+" pages="+pages )
// alert( "BUGS_1180 load_pagelist_go len="+pages_len+" pages="+pages )
// alert( "BUGS_1180 load_pagelist_pages len="+pages_len+" pages="+pages )
// alert( "BUGS_1180 load_pagelist_default len="+pages_len+" pages="+pages )
// var htmout="";
// for( j=0;j<pages_len;j++) {
// htmout += "bugs_1100 j="+j+" len="+pages_len+" page="+pages[j]+"<br>\n";
// }
// document.write(htmout);
// alert( "BUGS_1200 ="+htmout );
// alert( "BUGS_1200 load_pagelist pages_len="+pages_len+" pages="+pages );
return( pages );
}
</script>
<script id="script_load_pagelist_go" >
function load_pagelist_go(args) {
var j=0;
// var href = window.location.href;
// alert( "BUGS_825 load_pages pages_len="+pages_len+" href="+href );
var pagelist_go = `
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/0.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/1.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/2.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/3.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/4.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/5.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/6.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/7.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/8.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/9.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/10.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/11.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/12.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/13.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/14.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/15.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/16.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/18.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/19.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/20.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/21.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/22.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/23.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/24.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/25.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|pages/26.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img357.jpg
-rw-r--r--||1|konet||staff||306856|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img358.jpg
-rw-r--r--||1|konet||staff||199193|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img359.jpg
-rw-r--r--||1|konet||staff||443996|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img360.jpg
-rw-r--r--||1|konet||staff||629176|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img361.jpg
-rw-r--r--||1|konet||staff||544038|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img362.jpg
-rw-r--r--||1|konet||staff||941797|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img363.jpg
-rw-r--r--||1|konet||staff||850031|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img364.jpg
-rw-r--r--||1|konet||staff||876319|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img365.jpg
-rw-r--r--||1|konet||staff||880519|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img366.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img357.jpg
-rw-r--r--||1|konet||staff||306856|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img358.jpg
-rw-r--r--||1|konet||staff||199193|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img359.jpg
-rw-r--r--||1|konet||staff||443996|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img360.jpg
-rw-r--r--||1|konet||staff||629176|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img361.jpg
-rw-r--r--||1|konet||staff||544038|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img362.jpg
-rw-r--r--||1|konet||staff||941797|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img363.jpg
-rw-r--r--||1|konet||staff||850031|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img364.jpg
-rw-r--r--||1|konet||staff||876319|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img365.jpg
-rw-r--r--||1|konet||staff||880519|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img366.jpg
-rw-r--r--||1|konet||staff||896620|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img367.jpg
-rw-r--r--||1|konet||staff||730786|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img368.jpg
-rw-r--r--||1|konet||staff||801242|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img369.jpg
-rw-r--r--||1|konet||staff||883588|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img370.jpg
-rw-r--r--||1|konet||staff||845856|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img371.jpg
-rw-r--r--||1|konet||staff||784457|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img372.jpg
-rw-r--r--||1|konet||staff||843127|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img373.jpg
-rw-r--r--||1|konet||staff||906461|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img374.jpg
-rw-r--r--||1|konet||staff||752928|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img375.jpg
-rw-r--r--||1|konet||staff||791260|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img376.jpg
-rw-r--r--||1|konet||staff||964508|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img377.jpg
-rw-r--r--||1|konet||staff||828964|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img378.jpg
-rw-r--r--||1|konet||staff||873941|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img379.jpg
-rw-r--r--||1|konet||staff||915688|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img380.jpg
-rw-r--r--||1|konet||staff||761790|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img381.jpg
-rw-r--r--||1|konet||staff||845370|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img382.jpg
-rw-r--r--||1|konet||staff||856490|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img383.jpg
-rw-r--r--||1|konet||staff||671068|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img384.jpg
-rw-r--r--||1|konet||staff||743307|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img385.jpg
-rw-r--r--||1|konet||staff||792125|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img386.jpg
-rw-r--r--||1|konet||staff||851995|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img387.jpg
-rw-r--r--||1|konet||staff||817621|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img388.jpg
-rw-r--r--||1|konet||staff||899107|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img389.jpg
-rw-r--r--||1|konet||staff||945623|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img390.jpg
-rw-r--r--||1|konet||staff||956754|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img391.jpg
-rw-r--r--||1|konet||staff||995889|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img392.jpg
-rw-r--r--||1|konet||staff||924368|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img393.jpg
-rw-r--r--||1|konet||staff||824827|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img394.jpg
-rw-r--r--||1|konet||staff||862378|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img395.jpg
-rw-r--r--||1|konet||staff||883043|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img396.jpg
-rw-r--r--||1|konet||staff||834414|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img397.jpg
-rw-r--r--||1|konet||staff||772918|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img398.jpg
-rw-r--r--||1|konet||staff||699001|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img399.jpg
-rw-r--r--||1|konet||staff||862577|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img400.jpg
-rw-r--r--||1|konet||staff||859470|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img401.jpg
-rw-r--r--||1|konet||staff||898820|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img402.jpg
-rw-r--r--||1|konet||staff||911795|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img403.jpg
-rw-r--r--||1|konet||staff||682827|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img404.jpg
-rw-r--r--||1|konet||staff||748989|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img405.jpg
-rw-r--r--||1|konet||staff||756089|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img406.jpg
-rw-r--r--||1|konet||staff||947742|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img407.jpg
-rw-r--r--||1|konet||staff||876865|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img408.jpg
-rw-r--r--||1|konet||staff||939929|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img409.jpg
-rw-r--r--||1|konet||staff||857484|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img410.jpg
-rw-r--r--||1|konet||staff||856924|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img411.jpg
-rw-r--r--||1|konet||staff||869657|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img412.jpg
-rw-r--r--||1|konet||staff||890809|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img413.jpg
-rw-r--r--||1|konet||staff||881101|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img414.jpg
-rw-r--r--||1|konet||staff||860242|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img415.jpg
-rw-r--r--||1|konet||staff||867133|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img416.jpg
-rw-r--r--||1|konet||staff||831861|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img417.jpg
-rw-r--r--||1|konet||staff||825595|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img418.jpg
-rw-r--r--||1|konet||staff||679496|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img419.jpg
-rw-r--r--||1|konet||staff||810751|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img420.jpg
-rw-r--r--||1|konet||staff||790732|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img421.jpg
-rw-r--r--||1|konet||staff||845998|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img422.jpg
-rw-r--r--||1|konet||staff||745726|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img423.jpg
-rw-r--r--||1|konet||staff||794258|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img424.jpg
-rw-r--r--||1|konet||staff||620484|Jul|26||2013|/kb/books/go/go_attack_defense/pages/index.jpg
-rw-r--r--||1|konet||staff||376756|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img357.jpg
-rw-r--r--||1|konet||staff||306856|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img358.jpg
-rw-r--r--||1|konet||staff||199193|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img359.jpg
-rw-r--r--||1|konet||staff||443996|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img360.jpg
-rw-r--r--||1|konet||staff||629176|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img361.jpg
-rw-r--r--||1|konet||staff||544038|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img362.jpg
-rw-r--r--||1|konet||staff||941797|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img363.jpg
-rw-r--r--||1|konet||staff||850031|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img364.jpg
-rw-r--r--||1|konet||staff||876319|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img365.jpg
-rw-r--r--||1|konet||staff||880519|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img366.jpg
-rw-r--r--||1|konet||staff||896620|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img367.jpg
-rw-r--r--||1|konet||staff||730786|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img368.jpg
-rw-r--r--||1|konet||staff||801242|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img369.jpg
-rw-r--r--||1|konet||staff||883588|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img370.jpg
-rw-r--r--||1|konet||staff||845856|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img371.jpg
-rw-r--r--||1|konet||staff||784457|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img372.jpg
-rw-r--r--||1|konet||staff||843127|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img373.jpg
-rw-r--r--||1|konet||staff||906461|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img374.jpg
-rw-r--r--||1|konet||staff||752928|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img375.jpg
-rw-r--r--||1|konet||staff||791260|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img376.jpg
-rw-r--r--||1|konet||staff||964508|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img377.jpg
-rw-r--r--||1|konet||staff||828964|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img378.jpg
-rw-r--r--||1|konet||staff||873941|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img379.jpg
-rw-r--r--||1|konet||staff||915688|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img380.jpg
-rw-r--r--||1|konet||staff||761790|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img381.jpg
-rw-r--r--||1|konet||staff||845370|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img382.jpg
-rw-r--r--||1|konet||staff||856490|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img383.jpg
-rw-r--r--||1|konet||staff||671068|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img384.jpg
-rw-r--r--||1|konet||staff||743307|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img385.jpg
-rw-r--r--||1|konet||staff||792125|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img386.jpg
-rw-r--r--||1|konet||staff||851995|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img387.jpg
-rw-r--r--||1|konet||staff||817621|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img388.jpg
-rw-r--r--||1|konet||staff||899107|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img389.jpg
-rw-r--r--||1|konet||staff||945623|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img390.jpg
-rw-r--r--||1|konet||staff||956754|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img391.jpg
-rw-r--r--||1|konet||staff||995889|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img392.jpg
-rw-r--r--||1|konet||staff||924368|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img393.jpg
-rw-r--r--||1|konet||staff||824827|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img394.jpg
-rw-r--r--||1|konet||staff||862378|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img395.jpg
-rw-r--r--||1|konet||staff||883043|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img396.jpg
-rw-r--r--||1|konet||staff||834414|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img397.jpg
-rw-r--r--||1|konet||staff||772918|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img398.jpg
-rw-r--r--||1|konet||staff||699001|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img399.jpg
-rw-r--r--||1|konet||staff||862577|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img400.jpg
-rw-r--r--||1|konet||staff||859470|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img401.jpg
-rw-r--r--||1|konet||staff||898820|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img402.jpg
-rw-r--r--||1|konet||staff||911795|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img403.jpg
-rw-r--r--||1|konet||staff||682827|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img404.jpg
-rw-r--r--||1|konet||staff||748989|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img405.jpg
-rw-r--r--||1|konet||staff||756089|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img406.jpg
-rw-r--r--||1|konet||staff||947742|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img407.jpg
-rw-r--r--||1|konet||staff||876865|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img408.jpg
-rw-r--r--||1|konet||staff||939929|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img409.jpg
-rw-r--r--||1|konet||staff||857484|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img410.jpg
-rw-r--r--||1|konet||staff||856924|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img411.jpg
-rw-r--r--||1|konet||staff||869657|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img412.jpg
-rw-r--r--||1|konet||staff||890809|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img413.jpg
-rw-r--r--||1|konet||staff||881101|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img414.jpg
-rw-r--r--||1|konet||staff||860242|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img415.jpg
-rw-r--r--||1|konet||staff||867133|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img416.jpg
-rw-r--r--||1|konet||staff||831861|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img417.jpg
-rw-r--r--||1|konet||staff||825595|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img418.jpg
-rw-r--r--||1|konet||staff||679496|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img419.jpg
-rw-r--r--||1|konet||staff||810751|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img420.jpg
-rw-r--r--||1|konet||staff||790732|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img421.jpg
-rw-r--r--||1|konet||staff||845998|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img422.jpg
-rw-r--r--||1|konet||staff||745726|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img423.jpg
-rw-r--r--||1|konet||staff||794258|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img424.jpg
-rw-r--r--||1|konet||staff||620484|Jul|26||2013|/kb/books/go/go_attack_defense/pages/tn/tn_index.jpg
-rw-r--r--||1|konet||staff||1006441|Jul|26||2013|/kb/books/go/go_basics/pages/img023.jpg
-rw-r--r--||1|konet||staff||1047128|Jul|26||2013|/kb/books/go/go_basics/pages/img024.jpg
-rw-r--r--||1|konet||staff||1053967|Jul|26||2013|/kb/books/go/go_basics/pages/img025.jpg
-rw-r--r--||1|konet||staff||1014446|Jul|26||2013|/kb/books/go/go_basics/pages/img026.jpg
-rw-r--r--||1|konet||staff||1026767|Jul|26||2013|/kb/books/go/go_basics/pages/img027.jpg
-rw-r--r--||1|konet||staff||791176|Jul|26||2013|/kb/books/go/go_basics/pages/img028.jpg
-rw-r--r--||1|konet||staff||813175|Jul|26||2013|/kb/books/go/go_basics/pages/img029.jpg
-rw-r--r--||1|konet||staff||924714|Jul|26||2013|/kb/books/go/go_basics/pages/img030.jpg
-rw-r--r--||1|konet||staff||905403|Jul|26||2013|/kb/books/go/go_basics/pages/img031.jpg
-rw-r--r--||1|konet||staff||888119|Jul|26||2013|/kb/books/go/go_basics/pages/img032.jpg
-rw-r--r--||1|konet||staff||1055638|Jul|26||2013|/kb/books/go/go_basics/pages/img033.jpg
-rw-r--r--||1|konet||staff||915998|Jul|26||2013|/kb/books/go/go_basics/pages/img034.jpg
-rw-r--r--||1|konet||staff||837152|Jul|26||2013|/kb/books/go/go_basics/pages/img035.jpg
-rw-r--r--||1|konet||staff||837128|Jul|26||2013|/kb/books/go/go_basics/pages/img036.jpg
-rw-r--r--||1|konet||staff||1089939|Jul|26||2013|/kb/books/go/go_basics/pages/img037.jpg
-rw-r--r--||1|konet||staff||784389|Jul|26||2013|/kb/books/go/go_basics/pages/img038.jpg
-rw-r--r--||1|konet||staff||889289|Jul|26||2013|/kb/books/go/go_basics/pages/img039.jpg
-rw-r--r--||1|konet||staff||969966|Jul|26||2013|/kb/books/go/go_basics/pages/img040.jpg
-rw-r--r--||1|konet||staff||919829|Jul|26||2013|/kb/books/go/go_basics/pages/img041.jpg
-rw-r--r--||1|konet||staff||1002672|Jul|26||2013|/kb/books/go/go_basics/pages/img042.jpg
-rw-r--r--||1|konet||staff||717797|Jul|26||2013|/kb/books/go/go_basics/pages/img043.jpg
-rw-r--r--||1|konet||staff||768692|Jul|26||2013|/kb/books/go/go_basics/pages/img044.jpg
-rw-r--r--||1|konet||staff||952072|Jul|26||2013|/kb/books/go/go_basics/pages/img045.jpg
-rw-r--r--||1|konet||staff||696825|Jul|26||2013|/kb/books/go/go_basics/pages/img046.jpg
-rw-r--r--||1|konet||staff||332310|Jul|26||2013|/kb/books/go/go_basics/pages/img047.jpg
-rw-r--r--||1|konet||staff||445300|Jul|26||2013|/kb/books/go/go_basics/pages/img048.jpg
-rw-r--r--||1|konet||staff||620484|Jul|26||2013|/kb/books/go/go_basics/pages/img049.jpg
-rw-r--r--||1|konet||staff||1006441|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img023.jpg
-rw-r--r--||1|konet||staff||1047128|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img024.jpg
-rw-r--r--||1|konet||staff||1053967|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img025.jpg
-rw-r--r--||1|konet||staff||1014446|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img026.jpg
-rw-r--r--||1|konet||staff||1026767|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img027.jpg
-rw-r--r--||1|konet||staff||791176|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img028.jpg
-rw-r--r--||1|konet||staff||813175|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img029.jpg
-rw-r--r--||1|konet||staff||924714|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img030.jpg
-rw-r--r--||1|konet||staff||905403|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img031.jpg
-rw-r--r--||1|konet||staff||888119|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img032.jpg
-rw-r--r--||1|konet||staff||1055638|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img033.jpg
-rw-r--r--||1|konet||staff||915998|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img034.jpg
-rw-r--r--||1|konet||staff||837152|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img035.jpg
-rw-r--r--||1|konet||staff||837128|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img036.jpg
-rw-r--r--||1|konet||staff||1089939|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img037.jpg
-rw-r--r--||1|konet||staff||784389|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img038.jpg
-rw-r--r--||1|konet||staff||889289|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img039.jpg
-rw-r--r--||1|konet||staff||969966|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img040.jpg
-rw-r--r--||1|konet||staff||919829|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img041.jpg
-rw-r--r--||1|konet||staff||1002672|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img042.jpg
-rw-r--r--||1|konet||staff||717797|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img043.jpg
-rw-r--r--||1|konet||staff||768692|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img044.jpg
-rw-r--r--||1|konet||staff||952072|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img045.jpg
-rw-r--r--||1|konet||staff||696825|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img046.jpg
-rw-r--r--||1|konet||staff||332310|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img047.jpg
-rw-r--r--||1|konet||staff||445300|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img048.jpg
-rw-r--r--||1|konet||staff||620484|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img049.jpg
-rw-r--r--||1|konet||staff||358516|Jul|26||2013|/kb/books/go/go_equipment/pages/img050.jpg
-rw-r--r--||1|konet||staff||516648|Jul|26||2013|/kb/books/go/go_equipment/pages/img051.jpg
-rw-r--r--||1|konet||staff||791156|Jul|26||2013|/kb/books/go/go_equipment/pages/img052.jpg
-rw-r--r--||1|konet||staff||486725|Jul|26||2013|/kb/books/go/go_equipment/pages/img053.jpg
-rw-r--r--||1|konet||staff||948089|Jul|26||2013|/kb/books/go/go_equipment/pages/img054.jpg
-rw-r--r--||1|konet||staff||1033406|Jul|26||2013|/kb/books/go/go_equipment/pages/img055.jpg
-rw-r--r--||1|konet||staff||687569|Jul|26||2013|/kb/books/go/go_equipment/pages/img056.jpg
-rw-r--r--||1|konet||staff||1065658|Jul|26||2013|/kb/books/go/go_equipment/pages/img057.jpg
-rw-r--r--||1|konet||staff||857686|Jul|26||2013|/kb/books/go/go_equipment/pages/img058.jpg
-rw-r--r--||1|konet||staff||603590|Apr|14||2013|/kb/books/go/go_equipment/pages/img061.jpg
-rw-r--r--||1|konet||staff||1374190|Apr|14||2013|/kb/books/go/go_equipment/pages/img062.jpg
-rw-r--r--||1|konet||staff||976954|Apr|14||2013|/kb/books/go/go_equipment/pages/img063.jpg
-rw-r--r--||1|konet||staff||592214|Apr|14||2013|/kb/books/go/go_equipment/pages/img064.jpg
-rw-r--r--||1|konet||staff||390273|Apr|14||2013|/kb/books/go/go_equipment/pages/img065.jpg
-rw-r--r--||1|konet||staff||1340886|Apr|14||2013|/kb/books/go/go_equipment/pages/img066.jpg
-rw-r--r--||1|konet||staff||807810|Apr|14||2013|/kb/books/go/go_equipment/pages/img067.jpg
-rw-r--r--||1|konet||staff||537637|Apr|14||2013|/kb/books/go/go_equipment/pages/img068.jpg
-rw-r--r--||1|konet||staff||358516|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img050.jpg
-rw-r--r--||1|konet||staff||516648|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img051.jpg
-rw-r--r--||1|konet||staff||791156|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img052.jpg
-rw-r--r--||1|konet||staff||486725|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img053.jpg
-rw-r--r--||1|konet||staff||948089|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img054.jpg
-rw-r--r--||1|konet||staff||1033406|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img055.jpg
-rw-r--r--||1|konet||staff||687569|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img056.jpg
-rw-r--r--||1|konet||staff||1065658|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img057.jpg
-rw-r--r--||1|konet||staff||857686|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img058.jpg
-rw-r--r--||1|konet||staff||603590|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img061.jpg
-rw-r--r--||1|konet||staff||1374190|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img062.jpg
-rw-r--r--||1|konet||staff||976954|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img063.jpg
-rw-r--r--||1|konet||staff||592214|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img064.jpg
-rw-r--r--||1|konet||staff||390273|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img065.jpg
-rw-r--r--||1|konet||staff||1340886|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img066.jpg
-rw-r--r--||1|konet||staff||807810|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img067.jpg
-rw-r--r--||1|konet||staff||537637|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img068.jpg
-rw-r--r--||1|konet||staff||964295|Jul|26||2013|/kb/books/go/go_joseki/pages/img070.jpg
-rw-r--r--||1|konet||staff||951817|Jul|26||2013|/kb/books/go/go_joseki/pages/img071.jpg
-rw-r--r--||1|konet||staff||854354|Jul|26||2013|/kb/books/go/go_joseki/pages/img072.jpg
-rw-r--r--||1|konet||staff||904237|Jul|26||2013|/kb/books/go/go_joseki/pages/img073.jpg
-rw-r--r--||1|konet||staff||808049|Jul|26||2013|/kb/books/go/go_joseki/pages/img074.jpg
-rw-r--r--||1|konet||staff||899297|Jul|26||2013|/kb/books/go/go_joseki/pages/img075.jpg
-rw-r--r--||1|konet||staff||907623|Jul|26||2013|/kb/books/go/go_joseki/pages/img076.jpg
-rw-r--r--||1|konet||staff||759807|Jul|26||2013|/kb/books/go/go_joseki/pages/img077.jpg
-rw-r--r--||1|konet||staff||1058618|Jul|26||2013|/kb/books/go/go_joseki/pages/img078.jpg
-rw-r--r--||1|konet||staff||1097406|Jul|26||2013|/kb/books/go/go_joseki/pages/img079.jpg
-rw-r--r--||1|konet||staff||1071509|Jul|26||2013|/kb/books/go/go_joseki/pages/img080.jpg
-rw-r--r--||1|konet||staff||1222293|Jul|26||2013|/kb/books/go/go_joseki/pages/img081.jpg
-rw-r--r--||1|konet||staff||809594|Jul|26||2013|/kb/books/go/go_joseki/pages/img082.jpg
-rw-r--r--||1|konet||staff||976407|Jul|26||2013|/kb/books/go/go_joseki/pages/img083.jpg
-rw-r--r--||1|konet||staff||1107226|Jul|26||2013|/kb/books/go/go_joseki/pages/img084.jpg
-rw-r--r--||1|konet||staff||1026899|Jul|26||2013|/kb/books/go/go_joseki/pages/img085.jpg
-rw-r--r--||1|konet||staff||1024022|Jul|26||2013|/kb/books/go/go_joseki/pages/img086.jpg
-rw-r--r--||1|konet||staff||1029782|Jul|26||2013|/kb/books/go/go_joseki/pages/img087.jpg
-rw-r--r--||1|konet||staff||1051070|Jul|26||2013|/kb/books/go/go_joseki/pages/img088.jpg
-rw-r--r--||1|konet||staff||956297|Jul|26||2013|/kb/books/go/go_joseki/pages/img089.jpg
-rw-r--r--||1|konet||staff||1037967|Jul|26||2013|/kb/books/go/go_joseki/pages/img090.jpg
-rw-r--r--||1|konet||staff||1019427|Jul|26||2013|/kb/books/go/go_joseki/pages/img091.jpg
-rw-r--r--||1|konet||staff||1106972|Jul|26||2013|/kb/books/go/go_joseki/pages/img092.jpg
-rw-r--r--||1|konet||staff||1110897|Jul|26||2013|/kb/books/go/go_joseki/pages/img093.jpg
-rw-r--r--||1|konet||staff||1073256|Jul|26||2013|/kb/books/go/go_joseki/pages/img094.jpg
-rw-r--r--||1|konet||staff||867457|Jul|27||2013|/kb/books/go/go_joseki/pages/img095.jpg
-rw-r--r--||1|konet||staff||1093950|Jul|27||2013|/kb/books/go/go_joseki/pages/img096.jpg
-rw-r--r--||1|konet||staff||1215177|Jul|27||2013|/kb/books/go/go_joseki/pages/img097.jpg
-rw-r--r--||1|konet||staff||1126591|Jul|27||2013|/kb/books/go/go_joseki/pages/img098.jpg
-rw-r--r--||1|konet||staff||1146058|Jul|27||2013|/kb/books/go/go_joseki/pages/img099.jpg
-rw-r--r--||1|konet||staff||998658|Jul|27||2013|/kb/books/go/go_joseki/pages/img100.jpg
-rw-r--r--||1|konet||staff||950064|Jul|27||2013|/kb/books/go/go_joseki/pages/img101.jpg
-rw-r--r--||1|konet||staff||1113709|Jul|27||2013|/kb/books/go/go_joseki/pages/img102.jpg
-rw-r--r--||1|konet||staff||1073193|Jul|27||2013|/kb/books/go/go_joseki/pages/img103.jpg
-rw-r--r--||1|konet||staff||965100|Jul|27||2013|/kb/books/go/go_joseki/pages/img104.jpg
-rw-r--r--||1|konet||staff||967947|Jul|27||2013|/kb/books/go/go_joseki/pages/img105.jpg
-rw-r--r--||1|konet||staff||1053408|Jul|27||2013|/kb/books/go/go_joseki/pages/img106.jpg
-rw-r--r--||1|konet||staff||1108979|Jul|27||2013|/kb/books/go/go_joseki/pages/img107.jpg
-rw-r--r--||1|konet||staff||993497|Jul|27||2013|/kb/books/go/go_joseki/pages/img108.jpg
-rw-r--r--||1|konet||staff||970885|Jul|27||2013|/kb/books/go/go_joseki/pages/img109.jpg
-rw-r--r--||1|konet||staff||1053854|Jul|27||2013|/kb/books/go/go_joseki/pages/img110.jpg
-rw-r--r--||1|konet||staff||984744|Jul|27||2013|/kb/books/go/go_joseki/pages/img111.jpg
-rw-r--r--||1|konet||staff||1053819|Jul|27||2013|/kb/books/go/go_joseki/pages/img112.jpg
-rw-r--r--||1|konet||staff||1187421|Jul|27||2013|/kb/books/go/go_joseki/pages/img113.jpg
-rw-r--r--||1|konet||staff||964581|Jul|27||2013|/kb/books/go/go_joseki/pages/img114.jpg
-rw-r--r--||1|konet||staff||978287|Jul|27||2013|/kb/books/go/go_joseki/pages/img115.jpg
-rw-r--r--||1|konet||staff||917482|Jul|27||2013|/kb/books/go/go_joseki/pages/img116.jpg
-rw-r--r--||1|konet||staff||991987|Jul|27||2013|/kb/books/go/go_joseki/pages/img117.jpg
-rw-r--r--||1|konet||staff||898921|Jul|27||2013|/kb/books/go/go_joseki/pages/img118.jpg
-rw-r--r--||1|konet||staff||1012220|Jul|27||2013|/kb/books/go/go_joseki/pages/img119.jpg
-rw-r--r--||1|konet||staff||1072925|Jul|27||2013|/kb/books/go/go_joseki/pages/img120.jpg
-rw-r--r--||1|konet||staff||872746|Jul|27||2013|/kb/books/go/go_joseki/pages/img121.jpg
-rw-r--r--||1|konet||staff||866500|Jul|27||2013|/kb/books/go/go_joseki/pages/img122.jpg
-rw-r--r--||1|konet||staff||1009773|Jul|27||2013|/kb/books/go/go_joseki/pages/img123.jpg
-rw-r--r--||1|konet||staff||968391|Jul|27||2013|/kb/books/go/go_joseki/pages/img124.jpg
-rw-r--r--||1|konet||staff||703303|Jul|27||2013|/kb/books/go/go_joseki/pages/img125.jpg
-rw-r--r--||1|konet||staff||950503|Jul|27||2013|/kb/books/go/go_joseki/pages/img126.jpg
-rw-r--r--||1|konet||staff||998706|Jul|27||2013|/kb/books/go/go_joseki/pages/img127.jpg
-rw-r--r--||1|konet||staff||873116|Jul|27||2013|/kb/books/go/go_joseki/pages/img128.jpg
-rw-r--r--||1|konet||staff||821432|Jul|27||2013|/kb/books/go/go_joseki/pages/img129.jpg
-rw-r--r--||1|konet||staff||825088|Jul|27||2013|/kb/books/go/go_joseki/pages/img130.jpg
-rw-r--r--||1|konet||staff||896338|Jul|27||2013|/kb/books/go/go_joseki/pages/img131.jpg
-rw-r--r--||1|konet||staff||963585|Jul|27||2013|/kb/books/go/go_joseki/pages/img132.jpg
-rw-r--r--||1|konet||staff||983883|Jul|27||2013|/kb/books/go/go_joseki/pages/img133.jpg
-rw-r--r--||1|konet||staff||873892|Jul|27||2013|/kb/books/go/go_joseki/pages/img134.jpg
-rw-r--r--||1|konet||staff||769739|Jul|27||2013|/kb/books/go/go_joseki/pages/img135.jpg
-rw-r--r--||1|konet||staff||713637|Jul|27||2013|/kb/books/go/go_joseki/pages/img136.jpg
-rw-r--r--||1|konet||staff||584476|Jul|27||2013|/kb/books/go/go_joseki/pages/img137.jpg
-rw-r--r--||1|konet||staff||909033|Jul|27||2013|/kb/books/go/go_joseki/pages/img138.jpg
-rw-r--r--||1|konet||staff||1022877|Jul|27||2013|/kb/books/go/go_joseki/pages/img139.jpg
-rw-r--r--||1|konet||staff||744019|Jul|27||2013|/kb/books/go/go_joseki/pages/img140.jpg
-rw-r--r--||1|konet||staff||166301|Jul|27||2013|/kb/books/go/go_joseki/pages/img141.jpg
-rw-r--r--||1|konet||staff||404802|Jul|27||2013|/kb/books/go/go_joseki/pages/img142.jpg
-rw-r--r--||1|konet||staff||536562|Jul|27||2013|/kb/books/go/go_joseki/pages/img143.jpg
-rw-r--r--||1|konet||staff||964295|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img070.jpg
-rw-r--r--||1|konet||staff||951817|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img071.jpg
-rw-r--r--||1|konet||staff||854354|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img072.jpg
-rw-r--r--||1|konet||staff||904237|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img073.jpg
-rw-r--r--||1|konet||staff||808049|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img074.jpg
-rw-r--r--||1|konet||staff||899297|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img075.jpg
-rw-r--r--||1|konet||staff||907623|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img076.jpg
-rw-r--r--||1|konet||staff||759807|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img077.jpg
-rw-r--r--||1|konet||staff||1058618|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img078.jpg
-rw-r--r--||1|konet||staff||1097406|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img079.jpg
-rw-r--r--||1|konet||staff||1071509|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img080.jpg
-rw-r--r--||1|konet||staff||1222293|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img081.jpg
-rw-r--r--||1|konet||staff||809594|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img082.jpg
-rw-r--r--||1|konet||staff||976407|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img083.jpg
-rw-r--r--||1|konet||staff||1107226|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img084.jpg
-rw-r--r--||1|konet||staff||1026899|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img085.jpg
-rw-r--r--||1|konet||staff||1024022|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img086.jpg
-rw-r--r--||1|konet||staff||1029782|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img087.jpg
-rw-r--r--||1|konet||staff||1051070|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img088.jpg
-rw-r--r--||1|konet||staff||956297|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img089.jpg
-rw-r--r--||1|konet||staff||1037967|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img090.jpg
-rw-r--r--||1|konet||staff||1019427|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img091.jpg
-rw-r--r--||1|konet||staff||1106972|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img092.jpg
-rw-r--r--||1|konet||staff||1110897|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img093.jpg
-rw-r--r--||1|konet||staff||1073256|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img094.jpg
-rw-r--r--||1|konet||staff||867457|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img095.jpg
-rw-r--r--||1|konet||staff||1093950|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img096.jpg
-rw-r--r--||1|konet||staff||1215177|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img097.jpg
-rw-r--r--||1|konet||staff||1126591|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img098.jpg
-rw-r--r--||1|konet||staff||1146058|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img099.jpg
-rw-r--r--||1|konet||staff||998658|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img100.jpg
-rw-r--r--||1|konet||staff||950064|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img101.jpg
-rw-r--r--||1|konet||staff||1113709|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img102.jpg
-rw-r--r--||1|konet||staff||1073193|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img103.jpg
-rw-r--r--||1|konet||staff||965100|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img104.jpg
-rw-r--r--||1|konet||staff||967947|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img105.jpg
-rw-r--r--||1|konet||staff||1053408|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img106.jpg
-rw-r--r--||1|konet||staff||1108979|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img107.jpg
-rw-r--r--||1|konet||staff||993497|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img108.jpg
-rw-r--r--||1|konet||staff||970885|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img109.jpg
-rw-r--r--||1|konet||staff||1053854|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img110.jpg
-rw-r--r--||1|konet||staff||984744|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img111.jpg
-rw-r--r--||1|konet||staff||1053819|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img112.jpg
-rw-r--r--||1|konet||staff||1187421|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img113.jpg
-rw-r--r--||1|konet||staff||964581|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img114.jpg
-rw-r--r--||1|konet||staff||978287|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img115.jpg
-rw-r--r--||1|konet||staff||917482|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img116.jpg
-rw-r--r--||1|konet||staff||991987|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img117.jpg
-rw-r--r--||1|konet||staff||898921|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img118.jpg
-rw-r--r--||1|konet||staff||1012220|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img119.jpg
-rw-r--r--||1|konet||staff||1072925|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img120.jpg
-rw-r--r--||1|konet||staff||872746|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img121.jpg
-rw-r--r--||1|konet||staff||866500|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img122.jpg
-rw-r--r--||1|konet||staff||1009773|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img123.jpg
-rw-r--r--||1|konet||staff||968391|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img124.jpg
-rw-r--r--||1|konet||staff||703303|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img125.jpg
-rw-r--r--||1|konet||staff||950503|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img126.jpg
-rw-r--r--||1|konet||staff||998706|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img127.jpg
-rw-r--r--||1|konet||staff||873116|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img128.jpg
-rw-r--r--||1|konet||staff||821432|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img129.jpg
-rw-r--r--||1|konet||staff||825088|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img130.jpg
-rw-r--r--||1|konet||staff||896338|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img131.jpg
-rw-r--r--||1|konet||staff||963585|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img132.jpg
-rw-r--r--||1|konet||staff||983883|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img133.jpg
-rw-r--r--||1|konet||staff||873892|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img134.jpg
-rw-r--r--||1|konet||staff||769739|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img135.jpg
-rw-r--r--||1|konet||staff||713637|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img136.jpg
-rw-r--r--||1|konet||staff||584476|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img137.jpg
-rw-r--r--||1|konet||staff||909033|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img138.jpg
-rw-r--r--||1|konet||staff||1022877|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img139.jpg
-rw-r--r--||1|konet||staff||744019|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img140.jpg
-rw-r--r--||1|konet||staff||166301|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img141.jpg
-rw-r--r--||1|konet||staff||404802|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img142.jpg
-rw-r--r--||1|konet||staff||536562|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img143.jpg
-rw-r--r--||1|konet||staff||437291|Jul|28||2013|/kb/books/go/go_middlegame/pages/img183.jpg
-rw-r--r--||1|konet||staff||525694|Jul|28||2013|/kb/books/go/go_middlegame/pages/img184.jpg
-rw-r--r--||1|konet||staff||653806|Jul|28||2013|/kb/books/go/go_middlegame/pages/img185.jpg
-rw-r--r--||1|konet||staff||841874|Jul|28||2013|/kb/books/go/go_middlegame/pages/img186.jpg
-rw-r--r--||1|konet||staff||783850|Jul|28||2013|/kb/books/go/go_middlegame/pages/img187.jpg
-rw-r--r--||1|konet||staff||759335|Jul|28||2013|/kb/books/go/go_middlegame/pages/img188.jpg
-rw-r--r--||1|konet||staff||777431|Jul|28||2013|/kb/books/go/go_middlegame/pages/img189.jpg
-rw-r--r--||1|konet||staff||621857|Jul|28||2013|/kb/books/go/go_middlegame/pages/img190.jpg
-rw-r--r--||1|konet||staff||621065|Jul|28||2013|/kb/books/go/go_middlegame/pages/img213.jpg
-rw-r--r--||1|konet||staff||660424|Jul|28||2013|/kb/books/go/go_middlegame/pages/img214.jpg
-rw-r--r--||1|konet||staff||640766|Jul|28||2013|/kb/books/go/go_middlegame/pages/img215.jpg
-rw-r--r--||1|konet||staff||701699|Jul|28||2013|/kb/books/go/go_middlegame/pages/img216.jpg
-rw-r--r--||1|konet||staff||684817|Jul|28||2013|/kb/books/go/go_middlegame/pages/img217.jpg
-rw-r--r--||1|konet||staff||693628|Jul|28||2013|/kb/books/go/go_middlegame/pages/img218.jpg
-rw-r--r--||1|konet||staff||652074|Jul|28||2013|/kb/books/go/go_middlegame/pages/img219.jpg
-rw-r--r--||1|konet||staff||665520|Jul|28||2013|/kb/books/go/go_middlegame/pages/img220.jpg
-rw-r--r--||1|konet||staff||664979|Jul|28||2013|/kb/books/go/go_middlegame/pages/img221.jpg
-rw-r--r--||1|konet||staff||420880|Jul|28||2013|/kb/books/go/go_middlegame/pages/img222.jpg
-rw-r--r--||1|konet||staff||653179|Jul|28||2013|/kb/books/go/go_middlegame/pages/img223.jpg
-rw-r--r--||1|konet||staff||631018|Jul|28||2013|/kb/books/go/go_middlegame/pages/img224.jpg
-rw-r--r--||1|konet||staff||614888|Jul|28||2013|/kb/books/go/go_middlegame/pages/img225.jpg
-rw-r--r--||1|konet||staff||635578|Jul|28||2013|/kb/books/go/go_middlegame/pages/img226.jpg
-rw-r--r--||1|konet||staff||664987|Jul|28||2013|/kb/books/go/go_middlegame/pages/img227.jpg
-rw-r--r--||1|konet||staff||494882|Jul|28||2013|/kb/books/go/go_middlegame/pages/img228.jpg
-rw-r--r--||1|konet||staff||755517|Jul|28||2013|/kb/books/go/go_middlegame/pages/img229.jpg
-rw-r--r--||1|konet||staff||746024|Jul|28||2013|/kb/books/go/go_middlegame/pages/img230.jpg
-rw-r--r--||1|konet||staff||740563|Jul|28||2013|/kb/books/go/go_middlegame/pages/img231.jpg
-rw-r--r--||1|konet||staff||720673|Jul|28||2013|/kb/books/go/go_middlegame/pages/img232.jpg
-rw-r--r--||1|konet||staff||641901|Jul|28||2013|/kb/books/go/go_middlegame/pages/img233.jpg
-rw-r--r--||1|konet||staff||681172|Jul|28||2013|/kb/books/go/go_middlegame/pages/img234.jpg
-rw-r--r--||1|konet||staff||681621|Jul|28||2013|/kb/books/go/go_middlegame/pages/img235.jpg
-rw-r--r--||1|konet||staff||699626|Jul|28||2013|/kb/books/go/go_middlegame/pages/img236.jpg
-rw-r--r--||1|konet||staff||692405|Jul|28||2013|/kb/books/go/go_middlegame/pages/img237.jpg
-rw-r--r--||1|konet||staff||675217|Jul|28||2013|/kb/books/go/go_middlegame/pages/img238.jpg
-rw-r--r--||1|konet||staff||637166|Jul|28||2013|/kb/books/go/go_middlegame/pages/img239.jpg
-rw-r--r--||1|konet||staff||638038|Jul|28||2013|/kb/books/go/go_middlegame/pages/img240.jpg
-rw-r--r--||1|konet||staff||746258|Jul|28||2013|/kb/books/go/go_middlegame/pages/img241.jpg
-rw-r--r--||1|konet||staff||697934|Jul|28||2013|/kb/books/go/go_middlegame/pages/img242.jpg
-rw-r--r--||1|konet||staff||680670|Jul|28||2013|/kb/books/go/go_middlegame/pages/img243.jpg
-rw-r--r--||1|konet||staff||666127|Jul|28||2013|/kb/books/go/go_middlegame/pages/img244.jpg
-rw-r--r--||1|konet||staff||703644|Jul|28||2013|/kb/books/go/go_middlegame/pages/img245.jpg
-rw-r--r--||1|konet||staff||674102|Jul|28||2013|/kb/books/go/go_middlegame/pages/img246.jpg
-rw-r--r--||1|konet||staff||684526|Jul|28||2013|/kb/books/go/go_middlegame/pages/img247.jpg
-rw-r--r--||1|konet||staff||648526|Jul|28||2013|/kb/books/go/go_middlegame/pages/img248.jpg
-rw-r--r--||1|konet||staff||728614|Jul|28||2013|/kb/books/go/go_middlegame/pages/img249.jpg
-rw-r--r--||1|konet||staff||663415|Jul|28||2013|/kb/books/go/go_middlegame/pages/img250.jpg
-rw-r--r--||1|konet||staff||694657|Jul|28||2013|/kb/books/go/go_middlegame/pages/img251.jpg
-rw-r--r--||1|konet||staff||673729|Jul|28||2013|/kb/books/go/go_middlegame/pages/img252.jpg
-rw-r--r--||1|konet||staff||663575|Jul|28||2013|/kb/books/go/go_middlegame/pages/img253.jpg
-rw-r--r--||1|konet||staff||464991|Jul|28||2013|/kb/books/go/go_middlegame/pages/img254.jpg
-rw-r--r--||1|konet||staff||756849|Jul|28||2013|/kb/books/go/go_middlegame/pages/img255.jpg
-rw-r--r--||1|konet||staff||761547|Jul|28||2013|/kb/books/go/go_middlegame/pages/img256.jpg
-rw-r--r--||1|konet||staff||801070|Jul|28||2013|/kb/books/go/go_middlegame/pages/img257.jpg
-rw-r--r--||1|konet||staff||739075|Jul|28||2013|/kb/books/go/go_middlegame/pages/img258.jpg
-rw-r--r--||1|konet||staff||787189|Jul|28||2013|/kb/books/go/go_middlegame/pages/img259.jpg
-rw-r--r--||1|konet||staff||729433|Jul|28||2013|/kb/books/go/go_middlegame/pages/img260.jpg
-rw-r--r--||1|konet||staff||793385|Jul|28||2013|/kb/books/go/go_middlegame/pages/img261.jpg
-rw-r--r--||1|konet||staff||756141|Jul|28||2013|/kb/books/go/go_middlegame/pages/img262.jpg
-rw-r--r--||1|konet||staff||779572|Jul|28||2013|/kb/books/go/go_middlegame/pages/img263.jpg
-rw-r--r--||1|konet||staff||759079|Jul|28||2013|/kb/books/go/go_middlegame/pages/img264.jpg
-rw-r--r--||1|konet||staff||738282|Jul|28||2013|/kb/books/go/go_middlegame/pages/img265.jpg
-rw-r--r--||1|konet||staff||814029|Jul|28||2013|/kb/books/go/go_middlegame/pages/img266.jpg
-rw-r--r--||1|konet||staff||833386|Jul|28||2013|/kb/books/go/go_middlegame/pages/img267.jpg
-rw-r--r--||1|konet||staff||188285|Jul|28||2013|/kb/books/go/go_middlegame/pages/img268.jpg
-rw-r--r--||1|konet||staff||369506|Jul|28||2013|/kb/books/go/go_middlegame/pages/img269.jpg
-rw-r--r--||1|konet||staff||384764|Jul|28||2013|/kb/books/go/go_middlegame/pages/img270.jpg
-rw-r--r--||1|konet||staff||547382|Jul|28||2013|/kb/books/go/go_middlegame/pages/img271.jpg
-rw-r--r--||1|konet||staff||647343|Jul|28||2013|/kb/books/go/go_middlegame/pages/img272.jpg
-rw-r--r--||1|konet||staff||1070171|Jul|28||2013|/kb/books/go/go_middlegame/pages/img273.jpg
-rw-r--r--||1|konet||staff||1188408|Jul|28||2013|/kb/books/go/go_middlegame/pages/img274.jpg
-rw-r--r--||1|konet||staff||315266|Jul|28||2013|/kb/books/go/go_middlegame/pages/img275.jpg
-rw-r--r--||1|konet||staff||299360|Jul|28||2013|/kb/books/go/go_middlegame/pages/img276.jpg
-rw-r--r--||1|konet||staff||707195|Jul|28||2013|/kb/books/go/go_middlegame/pages/img277.jpg
-rw-r--r--||1|konet||staff||872457|Jul|28||2013|/kb/books/go/go_middlegame/pages/img278.jpg
-rw-r--r--||1|konet||staff||959051|Jul|28||2013|/kb/books/go/go_middlegame/pages/img279.jpg
-rw-r--r--||1|konet||staff||920879|Jul|28||2013|/kb/books/go/go_middlegame/pages/img280.jpg
-rw-r--r--||1|konet||staff||926630|Jul|28||2013|/kb/books/go/go_middlegame/pages/img281.jpg
-rw-r--r--||1|konet||staff||1034689|Jul|28||2013|/kb/books/go/go_middlegame/pages/img282.jpg
-rw-r--r--||1|konet||staff||341434|Jul|25||2013|/kb/books/go/go_middlegame/pages/img283.jpg
-rw-r--r--||1|konet||staff||1211055|Jul|25||2013|/kb/books/go/go_middlegame/pages/img284.jpg
-rw-r--r--||1|konet||staff||437291|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img183.jpg
-rw-r--r--||1|konet||staff||525694|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img184.jpg
-rw-r--r--||1|konet||staff||653806|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img185.jpg
-rw-r--r--||1|konet||staff||841874|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img186.jpg
-rw-r--r--||1|konet||staff||783850|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img187.jpg
-rw-r--r--||1|konet||staff||759335|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img188.jpg
-rw-r--r--||1|konet||staff||777431|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img189.jpg
-rw-r--r--||1|konet||staff||621857|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img190.jpg
-rw-r--r--||1|konet||staff||621065|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img213.jpg
-rw-r--r--||1|konet||staff||660424|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img214.jpg
-rw-r--r--||1|konet||staff||640766|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img215.jpg
-rw-r--r--||1|konet||staff||701699|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img216.jpg
-rw-r--r--||1|konet||staff||684817|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img217.jpg
-rw-r--r--||1|konet||staff||693628|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img218.jpg
-rw-r--r--||1|konet||staff||652074|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img219.jpg
-rw-r--r--||1|konet||staff||665520|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img220.jpg
-rw-r--r--||1|konet||staff||664979|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img221.jpg
-rw-r--r--||1|konet||staff||420880|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img222.jpg
-rw-r--r--||1|konet||staff||653179|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img223.jpg
-rw-r--r--||1|konet||staff||631018|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img224.jpg
-rw-r--r--||1|konet||staff||614888|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img225.jpg
-rw-r--r--||1|konet||staff||635578|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img226.jpg
-rw-r--r--||1|konet||staff||664987|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img227.jpg
-rw-r--r--||1|konet||staff||494882|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img228.jpg
-rw-r--r--||1|konet||staff||755517|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img229.jpg
-rw-r--r--||1|konet||staff||746024|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img230.jpg
-rw-r--r--||1|konet||staff||740563|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img231.jpg
-rw-r--r--||1|konet||staff||720673|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img232.jpg
-rw-r--r--||1|konet||staff||641901|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img233.jpg
-rw-r--r--||1|konet||staff||681172|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img234.jpg
-rw-r--r--||1|konet||staff||681621|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img235.jpg
-rw-r--r--||1|konet||staff||699626|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img236.jpg
-rw-r--r--||1|konet||staff||692405|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img237.jpg
-rw-r--r--||1|konet||staff||675217|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img238.jpg
-rw-r--r--||1|konet||staff||637166|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img239.jpg
-rw-r--r--||1|konet||staff||638038|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img240.jpg
-rw-r--r--||1|konet||staff||746258|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img241.jpg
-rw-r--r--||1|konet||staff||697934|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img242.jpg
-rw-r--r--||1|konet||staff||680670|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img243.jpg
-rw-r--r--||1|konet||staff||666127|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img244.jpg
-rw-r--r--||1|konet||staff||703644|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img245.jpg
-rw-r--r--||1|konet||staff||674102|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img246.jpg
-rw-r--r--||1|konet||staff||684526|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img247.jpg
-rw-r--r--||1|konet||staff||648526|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img248.jpg
-rw-r--r--||1|konet||staff||728614|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img249.jpg
-rw-r--r--||1|konet||staff||663415|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img250.jpg
-rw-r--r--||1|konet||staff||694657|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img251.jpg
-rw-r--r--||1|konet||staff||673729|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img252.jpg
-rw-r--r--||1|konet||staff||663575|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img253.jpg
-rw-r--r--||1|konet||staff||464991|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img254.jpg
-rw-r--r--||1|konet||staff||756849|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img255.jpg
-rw-r--r--||1|konet||staff||761547|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img256.jpg
-rw-r--r--||1|konet||staff||801070|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img257.jpg
-rw-r--r--||1|konet||staff||739075|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img258.jpg
-rw-r--r--||1|konet||staff||787189|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img259.jpg
-rw-r--r--||1|konet||staff||729433|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img260.jpg
-rw-r--r--||1|konet||staff||793385|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img261.jpg
-rw-r--r--||1|konet||staff||756141|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img262.jpg
-rw-r--r--||1|konet||staff||779572|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img263.jpg
-rw-r--r--||1|konet||staff||759079|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img264.jpg
-rw-r--r--||1|konet||staff||738282|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img265.jpg
-rw-r--r--||1|konet||staff||814029|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img266.jpg
-rw-r--r--||1|konet||staff||833386|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img267.jpg
-rw-r--r--||1|konet||staff||188285|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img268.jpg
-rw-r--r--||1|konet||staff||369506|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img269.jpg
-rw-r--r--||1|konet||staff||384764|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img270.jpg
-rw-r--r--||1|konet||staff||547382|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img271.jpg
-rw-r--r--||1|konet||staff||647343|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img272.jpg
-rw-r--r--||1|konet||staff||1070171|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img273.jpg
-rw-r--r--||1|konet||staff||1188408|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img274.jpg
-rw-r--r--||1|konet||staff||315266|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img275.jpg
-rw-r--r--||1|konet||staff||299360|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img276.jpg
-rw-r--r--||1|konet||staff||707195|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img277.jpg
-rw-r--r--||1|konet||staff||872457|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img278.jpg
-rw-r--r--||1|konet||staff||959051|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img279.jpg
-rw-r--r--||1|konet||staff||920879|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img280.jpg
-rw-r--r--||1|konet||staff||926630|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img281.jpg
-rw-r--r--||1|konet||staff||1034689|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img282.jpg
-rw-r--r--||1|konet||staff||341434|Jul|25||2013|/kb/books/go/go_middlegame/pages/tn/tn_img283.jpg
-rw-r--r--||1|konet||staff||1211055|Jul|25||2013|/kb/books/go/go_middlegame/pages/tn/tn_img284.jpg
-rw-r--r--||1|konet||staff||1053658|Jul|25||2013|/kb/books/go/go_strategy/pages/img285.jpg
-rw-r--r--||1|konet||staff||336909|Jul|25||2013|/kb/books/go/go_strategy/pages/img286.jpg
-rw-r--r--||1|konet||staff||354099|Jul|25||2013|/kb/books/go/go_strategy/pages/img287.jpg
-rw-r--r--||1|konet||staff||409400|Jul|25||2013|/kb/books/go/go_strategy/pages/img288.jpg
-rw-r--r--||1|konet||staff||417952|Jul|25||2013|/kb/books/go/go_strategy/pages/img289.jpg
-rw-r--r--||1|konet||staff||690620|Jul|25||2013|/kb/books/go/go_strategy/pages/img290.jpg
-rw-r--r--||1|konet||staff||845711|Jul|25||2013|/kb/books/go/go_strategy/pages/img291.jpg
-rw-r--r--||1|konet||staff||1028081|Jul|25||2013|/kb/books/go/go_strategy/pages/img292.jpg
-rw-r--r--||1|konet||staff||1126342|Jul|25||2013|/kb/books/go/go_strategy/pages/img293.jpg
-rw-r--r--||1|konet||staff||1106874|Jul|25||2013|/kb/books/go/go_strategy/pages/img294.jpg
-rw-r--r--||1|konet||staff||1054403|Jul|25||2013|/kb/books/go/go_strategy/pages/img295.jpg
-rw-r--r--||1|konet||staff||1120631|Jul|25||2013|/kb/books/go/go_strategy/pages/img296.jpg
-rw-r--r--||1|konet||staff||756489|Jul|25||2013|/kb/books/go/go_strategy/pages/img297.jpg
-rw-r--r--||1|konet||staff||1084236|Jul|25||2013|/kb/books/go/go_strategy/pages/img298.jpg
-rw-r--r--||1|konet||staff||1067948|Jul|25||2013|/kb/books/go/go_strategy/pages/img299.jpg
-rw-r--r--||1|konet||staff||979594|Jul|25||2013|/kb/books/go/go_strategy/pages/img300.jpg
-rw-r--r--||1|konet||staff||1045182|Jul|25||2013|/kb/books/go/go_strategy/pages/img301.jpg
-rw-r--r--||1|konet||staff||901610|Jul|25||2013|/kb/books/go/go_strategy/pages/img302.jpg
-rw-r--r--||1|konet||staff||918985|Jul|25||2013|/kb/books/go/go_strategy/pages/img303.jpg
-rw-r--r--||1|konet||staff||862420|Jul|25||2013|/kb/books/go/go_strategy/pages/img304.jpg
-rw-r--r--||1|konet||staff||886557|Jul|25||2013|/kb/books/go/go_strategy/pages/img305.jpg
-rw-r--r--||1|konet||staff||787507|Jul|25||2013|/kb/books/go/go_strategy/pages/img306.jpg
-rw-r--r--||1|konet||staff||911463|Jul|25||2013|/kb/books/go/go_strategy/pages/img307.jpg
-rw-r--r--||1|konet||staff||965161|Jul|25||2013|/kb/books/go/go_strategy/pages/img308.jpg
-rw-r--r--||1|konet||staff||973577|Jul|25||2013|/kb/books/go/go_strategy/pages/img309.jpg
-rw-r--r--||1|konet||staff||888001|Jul|25||2013|/kb/books/go/go_strategy/pages/img310.jpg
-rw-r--r--||1|konet||staff||786913|Jul|25||2013|/kb/books/go/go_strategy/pages/img311.jpg
-rw-r--r--||1|konet||staff||963093|Jul|25||2013|/kb/books/go/go_strategy/pages/img312.jpg
-rw-r--r--||1|konet||staff||1189822|Jul|25||2013|/kb/books/go/go_strategy/pages/img313.jpg
-rw-r--r--||1|konet||staff||877732|Jul|25||2013|/kb/books/go/go_strategy/pages/img314.jpg
-rw-r--r--||1|konet||staff||849270|Jul|25||2013|/kb/books/go/go_strategy/pages/img315.jpg
-rw-r--r--||1|konet||staff||963161|Jul|25||2013|/kb/books/go/go_strategy/pages/img316.jpg
-rw-r--r--||1|konet||staff||507750|Jul|25||2013|/kb/books/go/go_strategy/pages/img317.jpg
-rw-r--r--||1|konet||staff||930132|Jul|26||2013|/kb/books/go/go_strategy/pages/img318.jpg
-rw-r--r--||1|konet||staff||862631|Jul|26||2013|/kb/books/go/go_strategy/pages/img319.jpg
-rw-r--r--||1|konet||staff||2584516|Jul|26||2013|/kb/books/go/go_strategy/pages/img319_rot.jpg
-rw-r--r--||1|konet||staff||907770|Jul|26||2013|/kb/books/go/go_strategy/pages/img320.jpg
-rw-r--r--||1|konet||staff||1074018|Jul|26||2013|/kb/books/go/go_strategy/pages/img321.jpg
-rw-r--r--||1|konet||staff||985358|Jul|26||2013|/kb/books/go/go_strategy/pages/img322.jpg
-rw-r--r--||1|konet||staff||955316|Jul|26||2013|/kb/books/go/go_strategy/pages/img323.jpg
-rw-r--r--||1|konet||staff||1048619|Jul|26||2013|/kb/books/go/go_strategy/pages/img324.jpg
-rw-r--r--||1|konet||staff||1013385|Jul|26||2013|/kb/books/go/go_strategy/pages/img325.jpg
-rw-r--r--||1|konet||staff||1091971|Jul|26||2013|/kb/books/go/go_strategy/pages/img326.jpg
-rw-r--r--||1|konet||staff||801231|Jul|26||2013|/kb/books/go/go_strategy/pages/img327.jpg
-rw-r--r--||1|konet||staff||845582|Jul|26||2013|/kb/books/go/go_strategy/pages/img328.jpg
-rw-r--r--||1|konet||staff||931676|Jul|26||2013|/kb/books/go/go_strategy/pages/img329.jpg
-rw-r--r--||1|konet||staff||1068374|Jul|26||2013|/kb/books/go/go_strategy/pages/img330.jpg
-rw-r--r--||1|konet||staff||836404|Jul|26||2013|/kb/books/go/go_strategy/pages/img331.jpg
-rw-r--r--||1|konet||staff||1002956|Jul|26||2013|/kb/books/go/go_strategy/pages/img332.jpg
-rw-r--r--||1|konet||staff||858923|Jul|26||2013|/kb/books/go/go_strategy/pages/img333.jpg
-rw-r--r--||1|konet||staff||904910|Jul|26||2013|/kb/books/go/go_strategy/pages/img334.jpg
-rw-r--r--||1|konet||staff||905806|Jul|28||2013|/kb/books/go/go_strategy/pages/img335.jpg
-rw-r--r--||1|konet||staff||1032145|Jul|28||2013|/kb/books/go/go_strategy/pages/img336.jpg
-rw-r--r--||1|konet||staff||927378|Jul|28||2013|/kb/books/go/go_strategy/pages/img337.jpg
-rw-r--r--||1|konet||staff||1021816|Jul|28||2013|/kb/books/go/go_strategy/pages/img338.jpg
-rw-r--r--||1|konet||staff||1007963|Jul|28||2013|/kb/books/go/go_strategy/pages/img339.jpg
-rw-r--r--||1|konet||staff||1087169|Jul|28||2013|/kb/books/go/go_strategy/pages/img340.jpg
-rw-r--r--||1|konet||staff||907719|Jul|28||2013|/kb/books/go/go_strategy/pages/img341.jpg
-rw-r--r--||1|konet||staff||1017200|Jul|28||2013|/kb/books/go/go_strategy/pages/img342.jpg
-rw-r--r--||1|konet||staff||1008372|Jul|28||2013|/kb/books/go/go_strategy/pages/img343.jpg
-rw-r--r--||1|konet||staff||904314|Jul|28||2013|/kb/books/go/go_strategy/pages/img344.jpg
-rw-r--r--||1|konet||staff||865407|Jul|28||2013|/kb/books/go/go_strategy/pages/img345.jpg
-rw-r--r--||1|konet||staff||936444|Jul|28||2013|/kb/books/go/go_strategy/pages/img346.jpg
-rw-r--r--||1|konet||staff||1098851|Jul|28||2013|/kb/books/go/go_strategy/pages/img347.jpg
-rw-r--r--||1|konet||staff||1136515|Jul|28||2013|/kb/books/go/go_strategy/pages/img348.jpg
-rw-r--r--||1|konet||staff||1181254|Jul|28||2013|/kb/books/go/go_strategy/pages/img349.jpg
-rw-r--r--||1|konet||staff||826651|Jul|28||2013|/kb/books/go/go_strategy/pages/img350.jpg
-rw-r--r--||1|konet||staff||605881|Jul|28||2013|/kb/books/go/go_strategy/pages/img351.jpg
-rw-r--r--||1|konet||staff||695558|Jul|28||2013|/kb/books/go/go_strategy/pages/img352.jpg
-rw-r--r--||1|konet||staff||166542|Jul|28||2013|/kb/books/go/go_strategy/pages/img353.jpg
-rw-r--r--||1|konet||staff||147900|Jul|28||2013|/kb/books/go/go_strategy/pages/img354.jpg
-rw-r--r--||1|konet||staff||216814|Jul|28||2013|/kb/books/go/go_strategy/pages/img355.jpg
-rw-r--r--||1|konet||staff||224027|Jul|28||2013|/kb/books/go/go_strategy/pages/img356.jpg
-rw-r--r--||1|konet||staff||1053658|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img285.jpg
-rw-r--r--||1|konet||staff||336909|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img286.jpg
-rw-r--r--||1|konet||staff||354099|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img287.jpg
-rw-r--r--||1|konet||staff||409400|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img288.jpg
-rw-r--r--||1|konet||staff||417952|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img289.jpg
-rw-r--r--||1|konet||staff||690620|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img290.jpg
-rw-r--r--||1|konet||staff||845711|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img291.jpg
-rw-r--r--||1|konet||staff||1028081|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img292.jpg
-rw-r--r--||1|konet||staff||1126342|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img293.jpg
-rw-r--r--||1|konet||staff||1106874|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img294.jpg
-rw-r--r--||1|konet||staff||1054403|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img295.jpg
-rw-r--r--||1|konet||staff||1120631|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img296.jpg
-rw-r--r--||1|konet||staff||756489|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img297.jpg
-rw-r--r--||1|konet||staff||1084236|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img298.jpg
-rw-r--r--||1|konet||staff||1067948|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img299.jpg
-rw-r--r--||1|konet||staff||979594|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img300.jpg
-rw-r--r--||1|konet||staff||1045182|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img301.jpg
-rw-r--r--||1|konet||staff||901610|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img302.jpg
-rw-r--r--||1|konet||staff||918985|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img303.jpg
-rw-r--r--||1|konet||staff||862420|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img304.jpg
-rw-r--r--||1|konet||staff||886557|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img305.jpg
-rw-r--r--||1|konet||staff||787507|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img306.jpg
-rw-r--r--||1|konet||staff||911463|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img307.jpg
-rw-r--r--||1|konet||staff||965161|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img308.jpg
-rw-r--r--||1|konet||staff||973577|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img309.jpg
-rw-r--r--||1|konet||staff||888001|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img310.jpg
-rw-r--r--||1|konet||staff||786913|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img311.jpg
-rw-r--r--||1|konet||staff||963093|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img312.jpg
-rw-r--r--||1|konet||staff||1189822|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img313.jpg
-rw-r--r--||1|konet||staff||877732|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img314.jpg
-rw-r--r--||1|konet||staff||849270|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img315.jpg
-rw-r--r--||1|konet||staff||963161|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img316.jpg
-rw-r--r--||1|konet||staff||507750|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img317.jpg
-rw-r--r--||1|konet||staff||930132|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img318.jpg
-rw-r--r--||1|konet||staff||862631|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img319.jpg
-rw-r--r--||1|konet||staff||2584516|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img319_rot.jpg
-rw-r--r--||1|konet||staff||907770|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img320.jpg
-rw-r--r--||1|konet||staff||1074018|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img321.jpg
-rw-r--r--||1|konet||staff||985358|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img322.jpg
-rw-r--r--||1|konet||staff||955316|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img323.jpg
-rw-r--r--||1|konet||staff||1048619|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img324.jpg
-rw-r--r--||1|konet||staff||1013385|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img325.jpg
-rw-r--r--||1|konet||staff||1091971|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img326.jpg
-rw-r--r--||1|konet||staff||801231|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img327.jpg
-rw-r--r--||1|konet||staff||845582|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img328.jpg
-rw-r--r--||1|konet||staff||931676|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img329.jpg
-rw-r--r--||1|konet||staff||1068374|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img330.jpg
-rw-r--r--||1|konet||staff||836404|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img331.jpg
-rw-r--r--||1|konet||staff||1002956|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img332.jpg
-rw-r--r--||1|konet||staff||858923|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img333.jpg
-rw-r--r--||1|konet||staff||904910|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img334.jpg
-rw-r--r--||1|konet||staff||905806|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img335.jpg
-rw-r--r--||1|konet||staff||1032145|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img336.jpg
-rw-r--r--||1|konet||staff||927378|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img337.jpg
-rw-r--r--||1|konet||staff||1021816|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img338.jpg
-rw-r--r--||1|konet||staff||1007963|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img339.jpg
-rw-r--r--||1|konet||staff||1087169|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img340.jpg
-rw-r--r--||1|konet||staff||907719|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img341.jpg
-rw-r--r--||1|konet||staff||1017200|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img342.jpg
-rw-r--r--||1|konet||staff||1008372|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img343.jpg
-rw-r--r--||1|konet||staff||904314|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img344.jpg
-rw-r--r--||1|konet||staff||865407|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img345.jpg
-rw-r--r--||1|konet||staff||936444|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img346.jpg
-rw-r--r--||1|konet||staff||1098851|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img347.jpg
-rw-r--r--||1|konet||staff||1136515|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img348.jpg
-rw-r--r--||1|konet||staff||1181254|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img349.jpg
-rw-r--r--||1|konet||staff||826651|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img350.jpg
-rw-r--r--||1|konet||staff||605881|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img351.jpg
-rw-r--r--||1|konet||staff||695558|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img352.jpg
-rw-r--r--||1|konet||staff||166542|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img353.jpg
-rw-r--r--||1|konet||staff||147900|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img354.jpg
-rw-r--r--||1|konet||staff||216814|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img355.jpg
-rw-r--r--||1|konet||staff||224027|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img356.jpg
-rw-r--r--||1|konet||staff||313740|Jul|27||2013|/kb/books/go/go_tesuji/pages/img144.jpg
-rw-r--r--||1|konet||staff||534933|Jul|27||2013|/kb/books/go/go_tesuji/pages/img145.jpg
-rw-r--r--||1|konet||staff||637566|Jul|27||2013|/kb/books/go/go_tesuji/pages/img146.jpg
-rw-r--r--||1|konet||staff||883337|Jul|27||2013|/kb/books/go/go_tesuji/pages/img147.jpg
-rw-r--r--||1|konet||staff||910842|Jul|27||2013|/kb/books/go/go_tesuji/pages/img148.jpg
-rw-r--r--||1|konet||staff||547960|Jul|27||2013|/kb/books/go/go_tesuji/pages/img149.jpg
-rw-r--r--||1|konet||staff||511374|Jul|27||2013|/kb/books/go/go_tesuji/pages/img150.jpg
-rw-r--r--||1|konet||staff||309376|Jul|27||2013|/kb/books/go/go_tesuji/pages/img151.jpg
-rw-r--r--||1|konet||staff||712605|Jul|27||2013|/kb/books/go/go_tesuji/pages/img152.jpg
-rw-r--r--||1|konet||staff||610951|Jul|27||2013|/kb/books/go/go_tesuji/pages/img153.jpg
-rw-r--r--||1|konet||staff||579887|Apr|15||2013|/kb/books/go/go_tesuji/pages/img154.jpg
-rw-r--r--||1|konet||staff||205822|Apr|15||2013|/kb/books/go/go_tesuji/pages/img155.jpg
-rw-r--r--||1|konet||staff||506775|Apr|15||2013|/kb/books/go/go_tesuji/pages/img156.jpg
-rw-r--r--||1|konet||staff||554846|Apr|15||2013|/kb/books/go/go_tesuji/pages/img157.jpg
-rw-r--r--||1|konet||staff||267323|Apr|15||2013|/kb/books/go/go_tesuji/pages/img158.jpg
-rw-r--r--||1|konet||staff||328954|Apr|15||2013|/kb/books/go/go_tesuji/pages/img159.jpg
-rw-r--r--||1|konet||staff||378242|Apr|15||2013|/kb/books/go/go_tesuji/pages/img160.jpg
-rw-r--r--||1|konet||staff||726846|Jul|27||2013|/kb/books/go/go_tesuji/pages/img161.jpg
-rw-r--r--||1|konet||staff||725448|Jul|27||2013|/kb/books/go/go_tesuji/pages/img162.jpg
-rw-r--r--||1|konet||staff||687696|Jul|27||2013|/kb/books/go/go_tesuji/pages/img163.jpg
-rw-r--r--||1|konet||staff||717765|Jul|27||2013|/kb/books/go/go_tesuji/pages/img164.jpg
-rw-r--r--||1|konet||staff||527036|Jul|27||2013|/kb/books/go/go_tesuji/pages/img165.jpg
-rw-r--r--||1|konet||staff||706619|Jul|27||2013|/kb/books/go/go_tesuji/pages/img166.jpg
-rw-r--r--||1|konet||staff||742105|Jul|27||2013|/kb/books/go/go_tesuji/pages/img167.jpg
-rw-r--r--||1|konet||staff||797265|Jul|27||2013|/kb/books/go/go_tesuji/pages/img168.jpg
-rw-r--r--||1|konet||staff||760087|Jul|27||2013|/kb/books/go/go_tesuji/pages/img169.jpg
-rw-r--r--||1|konet||staff||657636|Jul|27||2013|/kb/books/go/go_tesuji/pages/img170.jpg
-rw-r--r--||1|konet||staff||755147|Jul|28||2013|/kb/books/go/go_tesuji/pages/img171.jpg
-rw-r--r--||1|konet||staff||645677|Jul|28||2013|/kb/books/go/go_tesuji/pages/img172.jpg
-rw-r--r--||1|konet||staff||696265|Jul|28||2013|/kb/books/go/go_tesuji/pages/img173.jpg
-rw-r--r--||1|konet||staff||712791|Jul|28||2013|/kb/books/go/go_tesuji/pages/img174.jpg
-rw-r--r--||1|konet||staff||717123|Jul|28||2013|/kb/books/go/go_tesuji/pages/img175.jpg
-rw-r--r--||1|konet||staff||652155|Jul|28||2013|/kb/books/go/go_tesuji/pages/img176.jpg
-rw-r--r--||1|konet||staff||813062|Jul|28||2013|/kb/books/go/go_tesuji/pages/img177.jpg
-rw-r--r--||1|konet||staff||685220|Jul|28||2013|/kb/books/go/go_tesuji/pages/img178.jpg
-rw-r--r--||1|konet||staff||599655|Jul|28||2013|/kb/books/go/go_tesuji/pages/img179.jpg
-rw-r--r--||1|konet||staff||621916|Jul|28||2013|/kb/books/go/go_tesuji/pages/img180.jpg
-rw-r--r--||1|konet||staff||511956|Jul|28||2013|/kb/books/go/go_tesuji/pages/img181.jpg
-rw-r--r--||1|konet||staff||510349|Jul|28||2013|/kb/books/go/go_tesuji/pages/img182.jpg
-rw-r--r--||1|konet||staff||755147|Jul|28||2013|/kb/books/go/go_tesuji/pages/img171.jpg
-rw-r--r--||1|konet||staff||645677|Jul|28||2013|/kb/books/go/go_tesuji/pages/img172.jpg
-rw-r--r--||1|konet||staff||696265|Jul|28||2013|/kb/books/go/go_tesuji/pages/img173.jpg
-rw-r--r--||1|konet||staff||712791|Jul|28||2013|/kb/books/go/go_tesuji/pages/img174.jpg
-rw-r--r--||1|konet||staff||717123|Jul|28||2013|/kb/books/go/go_tesuji/pages/img175.jpg
-rw-r--r--||1|konet||staff||652155|Jul|28||2013|/kb/books/go/go_tesuji/pages/img176.jpg
-rw-r--r--||1|konet||staff||813062|Jul|28||2013|/kb/books/go/go_tesuji/pages/img177.jpg
-rw-r--r--||1|konet||staff||685220|Jul|28||2013|/kb/books/go/go_tesuji/pages/img178.jpg
-rw-r--r--||1|konet||staff||599655|Jul|28||2013|/kb/books/go/go_tesuji/pages/img179.jpg
-rw-r--r--||1|konet||staff||621916|Jul|28||2013|/kb/books/go/go_tesuji/pages/img180.jpg
-rw-r--r--||1|konet||staff||511956|Jul|28||2013|/kb/books/go/go_tesuji/pages/img181.jpg
-rw-r--r--||1|konet||staff||510349|Jul|28||2013|/kb/books/go/go_tesuji/pages/img182.jpg`;
// pagelist_go_len=pagelist_go.length;
// alert( "BUGS_830 load_pages pagelist_go_len="+pageslist_go_len+" pagelist_go="+pagelist_go );
// window.pages=pages;
// alert( "BUGS_840 load_pages pages_len="+pages_len+" window.pages1="+window.pages[1] );
return( pagelist_go.split("\n") );
}
</script>
<script id="script_load_pagelist_tail">
function load_pagelist_tail() {
var pagelist_tail = `
tail/1.jpg
tail/2.jpg
tail/3.jpg
tail/4.jpg
tail/5.jpg
tail/6.jpg
tail/7.jpg
tail/8.jpg
tail/9.jpg
tail/10.jpg
tail/11.jpg
tail/12.jpg
tail/13.jpg
tail/14.jpg
tail/15.jpg
tail/16.jpg`;
return( pagelist_tail.split("\n"));
}
</script>
<script id="script_load_pages_bugs" >
var pages = new Array();
var window.pages = new Array();
var pages_len = 0;
var j=0;
function load_pages_bugs() {
// alert( "BUGS_850 load_pages_bugs" );
alert( "BUGS_850 load_pages_bugs pages="+pages );
var pages = new Array();
var pages_len=0;
var j=0;
pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img357.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||306856|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img358.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||199193|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img359.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||443996|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img360.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||629176|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img361.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||544038|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img362.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||941797|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img363.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||850031|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img364.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||876319|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img365.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||880519|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img366.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||896620|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img367.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||730786|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img368.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||801242|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img369.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||883588|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img370.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||845856|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img371.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||784457|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img372.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||843127|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img373.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||906461|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img374.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||752928|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img375.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||791260|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img376.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||964508|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img377.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||828964|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img378.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||873941|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img379.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||915688|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img380.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||761790|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img381.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||845370|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img382.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||856490|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img383.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||671068|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img384.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||743307|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img385.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||792125|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img386.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||851995|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img387.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||817621|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img388.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||899107|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img389.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||945623|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img390.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||956754|Jul|28||2013|/kb/books/go/go_attack_defense/pages/img391.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||995889|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img392.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||924368|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img393.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||824827|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img394.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||862378|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img395.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||883043|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img396.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||834414|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img397.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||772918|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img398.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||699001|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img399.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||862577|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img400.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||859470|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img401.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||898820|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img402.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||911795|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img403.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||682827|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img404.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||748989|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img405.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||756089|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img406.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||947742|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img407.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||876865|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img408.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||939929|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img409.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||857484|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img410.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||856924|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img411.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||869657|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img412.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||890809|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img413.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||881101|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img414.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||860242|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img415.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||867133|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img416.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||831861|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img417.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||825595|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img418.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||679496|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img419.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||810751|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img420.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||790732|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img421.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||845998|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img422.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||745726|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img423.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||794258|Jul|29||2013|/kb/books/go/go_attack_defense/pages/img424.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||620484|Jul|26||2013|/kb/books/go/go_attack_defense/pages/index.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||376756|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img357.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||306856|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img358.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||199193|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img359.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||443996|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img360.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||629176|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img361.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||544038|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img362.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||941797|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img363.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||850031|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img364.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||876319|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img365.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||880519|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img366.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||896620|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img367.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||730786|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img368.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||801242|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img369.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||883588|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img370.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||845856|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img371.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||784457|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img372.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||843127|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img373.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||906461|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img374.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||752928|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img375.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||791260|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img376.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||964508|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img377.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||828964|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img378.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||873941|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img379.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||915688|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img380.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||761790|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img381.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||845370|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img382.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||856490|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img383.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||671068|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img384.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||743307|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img385.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||792125|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img386.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||851995|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img387.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||817621|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img388.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||899107|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img389.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||945623|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img390.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||956754|Jul|28||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img391.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||995889|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img392.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||924368|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img393.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||824827|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img394.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||862378|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img395.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||883043|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img396.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||834414|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img397.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||772918|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img398.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||699001|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img399.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||862577|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img400.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||859470|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img401.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||898820|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img402.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||911795|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img403.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||682827|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img404.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||748989|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img405.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||756089|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img406.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||947742|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img407.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||876865|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img408.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||939929|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img409.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||857484|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img410.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||856924|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img411.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||869657|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img412.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||890809|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img413.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||881101|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img414.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||860242|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img415.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||867133|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img416.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||831861|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img417.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||825595|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img418.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||679496|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img419.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||810751|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img420.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||790732|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img421.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||845998|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img422.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||745726|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img423.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||794258|Jul|29||2013|/kb/books/go/go_attack_defense/pages/tn/tn_img424.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||620484|Jul|26||2013|/kb/books/go/go_attack_defense/pages/tn/tn_index.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1006441|Jul|26||2013|/kb/books/go/go_basics/pages/img023.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1047128|Jul|26||2013|/kb/books/go/go_basics/pages/img024.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1053967|Jul|26||2013|/kb/books/go/go_basics/pages/img025.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1014446|Jul|26||2013|/kb/books/go/go_basics/pages/img026.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1026767|Jul|26||2013|/kb/books/go/go_basics/pages/img027.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||791176|Jul|26||2013|/kb/books/go/go_basics/pages/img028.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||813175|Jul|26||2013|/kb/books/go/go_basics/pages/img029.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||924714|Jul|26||2013|/kb/books/go/go_basics/pages/img030.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||905403|Jul|26||2013|/kb/books/go/go_basics/pages/img031.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||888119|Jul|26||2013|/kb/books/go/go_basics/pages/img032.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1055638|Jul|26||2013|/kb/books/go/go_basics/pages/img033.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||915998|Jul|26||2013|/kb/books/go/go_basics/pages/img034.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||837152|Jul|26||2013|/kb/books/go/go_basics/pages/img035.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||837128|Jul|26||2013|/kb/books/go/go_basics/pages/img036.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1089939|Jul|26||2013|/kb/books/go/go_basics/pages/img037.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||784389|Jul|26||2013|/kb/books/go/go_basics/pages/img038.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||889289|Jul|26||2013|/kb/books/go/go_basics/pages/img039.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||969966|Jul|26||2013|/kb/books/go/go_basics/pages/img040.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||919829|Jul|26||2013|/kb/books/go/go_basics/pages/img041.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1002672|Jul|26||2013|/kb/books/go/go_basics/pages/img042.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||717797|Jul|26||2013|/kb/books/go/go_basics/pages/img043.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||768692|Jul|26||2013|/kb/books/go/go_basics/pages/img044.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||952072|Jul|26||2013|/kb/books/go/go_basics/pages/img045.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||696825|Jul|26||2013|/kb/books/go/go_basics/pages/img046.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||332310|Jul|26||2013|/kb/books/go/go_basics/pages/img047.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||445300|Jul|26||2013|/kb/books/go/go_basics/pages/img048.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||620484|Jul|26||2013|/kb/books/go/go_basics/pages/img049.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1006441|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img023.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1047128|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img024.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1053967|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img025.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1014446|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img026.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1026767|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img027.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||791176|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img028.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||813175|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img029.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||924714|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img030.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||905403|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img031.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||888119|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img032.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1055638|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img033.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||915998|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img034.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||837152|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img035.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||837128|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img036.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1089939|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img037.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||784389|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img038.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||889289|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img039.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||969966|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img040.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||919829|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img041.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1002672|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img042.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||717797|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img043.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||768692|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img044.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||952072|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img045.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||696825|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img046.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||332310|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img047.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||445300|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img048.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||620484|Jul|26||2013|/kb/books/go/go_basics/pages/tn/tn_img049.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||358516|Jul|26||2013|/kb/books/go/go_equipment/pages/img050.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||516648|Jul|26||2013|/kb/books/go/go_equipment/pages/img051.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||791156|Jul|26||2013|/kb/books/go/go_equipment/pages/img052.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||486725|Jul|26||2013|/kb/books/go/go_equipment/pages/img053.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||948089|Jul|26||2013|/kb/books/go/go_equipment/pages/img054.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1033406|Jul|26||2013|/kb/books/go/go_equipment/pages/img055.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||687569|Jul|26||2013|/kb/books/go/go_equipment/pages/img056.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1065658|Jul|26||2013|/kb/books/go/go_equipment/pages/img057.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||857686|Jul|26||2013|/kb/books/go/go_equipment/pages/img058.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||603590|Apr|14||2013|/kb/books/go/go_equipment/pages/img061.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1374190|Apr|14||2013|/kb/books/go/go_equipment/pages/img062.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||976954|Apr|14||2013|/kb/books/go/go_equipment/pages/img063.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||592214|Apr|14||2013|/kb/books/go/go_equipment/pages/img064.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||390273|Apr|14||2013|/kb/books/go/go_equipment/pages/img065.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1340886|Apr|14||2013|/kb/books/go/go_equipment/pages/img066.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||807810|Apr|14||2013|/kb/books/go/go_equipment/pages/img067.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||537637|Apr|14||2013|/kb/books/go/go_equipment/pages/img068.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||358516|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img050.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||516648|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img051.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||791156|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img052.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||486725|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img053.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||948089|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img054.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1033406|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img055.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||687569|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img056.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1065658|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img057.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||857686|Jul|26||2013|/kb/books/go/go_equipment/pages/tn/tn_img058.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||603590|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img061.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1374190|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img062.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||976954|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img063.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||592214|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img064.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||390273|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img065.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1340886|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img066.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||807810|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img067.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||537637|Apr|14||2013|/kb/books/go/go_equipment/pages/tn/tn_img068.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||964295|Jul|26||2013|/kb/books/go/go_joseki/pages/img070.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||951817|Jul|26||2013|/kb/books/go/go_joseki/pages/img071.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||854354|Jul|26||2013|/kb/books/go/go_joseki/pages/img072.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||904237|Jul|26||2013|/kb/books/go/go_joseki/pages/img073.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||808049|Jul|26||2013|/kb/books/go/go_joseki/pages/img074.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||899297|Jul|26||2013|/kb/books/go/go_joseki/pages/img075.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||907623|Jul|26||2013|/kb/books/go/go_joseki/pages/img076.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||759807|Jul|26||2013|/kb/books/go/go_joseki/pages/img077.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1058618|Jul|26||2013|/kb/books/go/go_joseki/pages/img078.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1097406|Jul|26||2013|/kb/books/go/go_joseki/pages/img079.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1071509|Jul|26||2013|/kb/books/go/go_joseki/pages/img080.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1222293|Jul|26||2013|/kb/books/go/go_joseki/pages/img081.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||809594|Jul|26||2013|/kb/books/go/go_joseki/pages/img082.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||976407|Jul|26||2013|/kb/books/go/go_joseki/pages/img083.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1107226|Jul|26||2013|/kb/books/go/go_joseki/pages/img084.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1026899|Jul|26||2013|/kb/books/go/go_joseki/pages/img085.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1024022|Jul|26||2013|/kb/books/go/go_joseki/pages/img086.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1029782|Jul|26||2013|/kb/books/go/go_joseki/pages/img087.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1051070|Jul|26||2013|/kb/books/go/go_joseki/pages/img088.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||956297|Jul|26||2013|/kb/books/go/go_joseki/pages/img089.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1037967|Jul|26||2013|/kb/books/go/go_joseki/pages/img090.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1019427|Jul|26||2013|/kb/books/go/go_joseki/pages/img091.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1106972|Jul|26||2013|/kb/books/go/go_joseki/pages/img092.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1110897|Jul|26||2013|/kb/books/go/go_joseki/pages/img093.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1073256|Jul|26||2013|/kb/books/go/go_joseki/pages/img094.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||867457|Jul|27||2013|/kb/books/go/go_joseki/pages/img095.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1093950|Jul|27||2013|/kb/books/go/go_joseki/pages/img096.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1215177|Jul|27||2013|/kb/books/go/go_joseki/pages/img097.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1126591|Jul|27||2013|/kb/books/go/go_joseki/pages/img098.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1146058|Jul|27||2013|/kb/books/go/go_joseki/pages/img099.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||998658|Jul|27||2013|/kb/books/go/go_joseki/pages/img100.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||950064|Jul|27||2013|/kb/books/go/go_joseki/pages/img101.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1113709|Jul|27||2013|/kb/books/go/go_joseki/pages/img102.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1073193|Jul|27||2013|/kb/books/go/go_joseki/pages/img103.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||965100|Jul|27||2013|/kb/books/go/go_joseki/pages/img104.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||967947|Jul|27||2013|/kb/books/go/go_joseki/pages/img105.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1053408|Jul|27||2013|/kb/books/go/go_joseki/pages/img106.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1108979|Jul|27||2013|/kb/books/go/go_joseki/pages/img107.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||993497|Jul|27||2013|/kb/books/go/go_joseki/pages/img108.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||970885|Jul|27||2013|/kb/books/go/go_joseki/pages/img109.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1053854|Jul|27||2013|/kb/books/go/go_joseki/pages/img110.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||984744|Jul|27||2013|/kb/books/go/go_joseki/pages/img111.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1053819|Jul|27||2013|/kb/books/go/go_joseki/pages/img112.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1187421|Jul|27||2013|/kb/books/go/go_joseki/pages/img113.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||964581|Jul|27||2013|/kb/books/go/go_joseki/pages/img114.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||978287|Jul|27||2013|/kb/books/go/go_joseki/pages/img115.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||917482|Jul|27||2013|/kb/books/go/go_joseki/pages/img116.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||991987|Jul|27||2013|/kb/books/go/go_joseki/pages/img117.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||898921|Jul|27||2013|/kb/books/go/go_joseki/pages/img118.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1012220|Jul|27||2013|/kb/books/go/go_joseki/pages/img119.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1072925|Jul|27||2013|/kb/books/go/go_joseki/pages/img120.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||872746|Jul|27||2013|/kb/books/go/go_joseki/pages/img121.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||866500|Jul|27||2013|/kb/books/go/go_joseki/pages/img122.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1009773|Jul|27||2013|/kb/books/go/go_joseki/pages/img123.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||968391|Jul|27||2013|/kb/books/go/go_joseki/pages/img124.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||703303|Jul|27||2013|/kb/books/go/go_joseki/pages/img125.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||950503|Jul|27||2013|/kb/books/go/go_joseki/pages/img126.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||998706|Jul|27||2013|/kb/books/go/go_joseki/pages/img127.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||873116|Jul|27||2013|/kb/books/go/go_joseki/pages/img128.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||821432|Jul|27||2013|/kb/books/go/go_joseki/pages/img129.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||825088|Jul|27||2013|/kb/books/go/go_joseki/pages/img130.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||896338|Jul|27||2013|/kb/books/go/go_joseki/pages/img131.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||963585|Jul|27||2013|/kb/books/go/go_joseki/pages/img132.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||983883|Jul|27||2013|/kb/books/go/go_joseki/pages/img133.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||873892|Jul|27||2013|/kb/books/go/go_joseki/pages/img134.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||769739|Jul|27||2013|/kb/books/go/go_joseki/pages/img135.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||713637|Jul|27||2013|/kb/books/go/go_joseki/pages/img136.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||584476|Jul|27||2013|/kb/books/go/go_joseki/pages/img137.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||909033|Jul|27||2013|/kb/books/go/go_joseki/pages/img138.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1022877|Jul|27||2013|/kb/books/go/go_joseki/pages/img139.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||744019|Jul|27||2013|/kb/books/go/go_joseki/pages/img140.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||166301|Jul|27||2013|/kb/books/go/go_joseki/pages/img141.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||404802|Jul|27||2013|/kb/books/go/go_joseki/pages/img142.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||536562|Jul|27||2013|/kb/books/go/go_joseki/pages/img143.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||964295|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img070.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||951817|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img071.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||854354|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img072.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||904237|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img073.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||808049|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img074.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||899297|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img075.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||907623|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img076.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||759807|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img077.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1058618|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img078.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1097406|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img079.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1071509|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img080.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1222293|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img081.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||809594|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img082.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||976407|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img083.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1107226|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img084.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1026899|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img085.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1024022|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img086.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1029782|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img087.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1051070|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img088.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||956297|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img089.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1037967|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img090.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1019427|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img091.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1106972|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img092.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1110897|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img093.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1073256|Jul|26||2013|/kb/books/go/go_joseki/pages/tn/tn_img094.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||867457|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img095.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1093950|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img096.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1215177|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img097.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1126591|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img098.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1146058|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img099.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||998658|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img100.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||950064|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img101.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1113709|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img102.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1073193|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img103.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||965100|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img104.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||967947|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img105.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1053408|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img106.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1108979|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img107.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||993497|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img108.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||970885|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img109.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1053854|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img110.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||984744|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img111.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1053819|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img112.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1187421|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img113.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||964581|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img114.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||978287|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img115.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||917482|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img116.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||991987|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img117.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||898921|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img118.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1012220|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img119.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1072925|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img120.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||872746|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img121.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||866500|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img122.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1009773|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img123.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||968391|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img124.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||703303|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img125.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||950503|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img126.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||998706|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img127.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||873116|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img128.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||821432|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img129.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||825088|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img130.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||896338|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img131.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||963585|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img132.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||983883|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img133.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||873892|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img134.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||769739|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img135.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||713637|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img136.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||584476|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img137.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||909033|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img138.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1022877|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img139.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||744019|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img140.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||166301|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img141.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||404802|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img142.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||536562|Jul|27||2013|/kb/books/go/go_joseki/pages/tn/tn_img143.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||437291|Jul|28||2013|/kb/books/go/go_middlegame/pages/img183.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||525694|Jul|28||2013|/kb/books/go/go_middlegame/pages/img184.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||653806|Jul|28||2013|/kb/books/go/go_middlegame/pages/img185.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||841874|Jul|28||2013|/kb/books/go/go_middlegame/pages/img186.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||783850|Jul|28||2013|/kb/books/go/go_middlegame/pages/img187.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||759335|Jul|28||2013|/kb/books/go/go_middlegame/pages/img188.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||777431|Jul|28||2013|/kb/books/go/go_middlegame/pages/img189.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||621857|Jul|28||2013|/kb/books/go/go_middlegame/pages/img190.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||621065|Jul|28||2013|/kb/books/go/go_middlegame/pages/img213.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||660424|Jul|28||2013|/kb/books/go/go_middlegame/pages/img214.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||640766|Jul|28||2013|/kb/books/go/go_middlegame/pages/img215.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||701699|Jul|28||2013|/kb/books/go/go_middlegame/pages/img216.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||684817|Jul|28||2013|/kb/books/go/go_middlegame/pages/img217.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||693628|Jul|28||2013|/kb/books/go/go_middlegame/pages/img218.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||652074|Jul|28||2013|/kb/books/go/go_middlegame/pages/img219.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||665520|Jul|28||2013|/kb/books/go/go_middlegame/pages/img220.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||664979|Jul|28||2013|/kb/books/go/go_middlegame/pages/img221.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||420880|Jul|28||2013|/kb/books/go/go_middlegame/pages/img222.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||653179|Jul|28||2013|/kb/books/go/go_middlegame/pages/img223.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||631018|Jul|28||2013|/kb/books/go/go_middlegame/pages/img224.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||614888|Jul|28||2013|/kb/books/go/go_middlegame/pages/img225.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||635578|Jul|28||2013|/kb/books/go/go_middlegame/pages/img226.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||664987|Jul|28||2013|/kb/books/go/go_middlegame/pages/img227.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||494882|Jul|28||2013|/kb/books/go/go_middlegame/pages/img228.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||755517|Jul|28||2013|/kb/books/go/go_middlegame/pages/img229.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||746024|Jul|28||2013|/kb/books/go/go_middlegame/pages/img230.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||740563|Jul|28||2013|/kb/books/go/go_middlegame/pages/img231.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||720673|Jul|28||2013|/kb/books/go/go_middlegame/pages/img232.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||641901|Jul|28||2013|/kb/books/go/go_middlegame/pages/img233.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||681172|Jul|28||2013|/kb/books/go/go_middlegame/pages/img234.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||681621|Jul|28||2013|/kb/books/go/go_middlegame/pages/img235.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||699626|Jul|28||2013|/kb/books/go/go_middlegame/pages/img236.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||692405|Jul|28||2013|/kb/books/go/go_middlegame/pages/img237.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||675217|Jul|28||2013|/kb/books/go/go_middlegame/pages/img238.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||637166|Jul|28||2013|/kb/books/go/go_middlegame/pages/img239.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||638038|Jul|28||2013|/kb/books/go/go_middlegame/pages/img240.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||746258|Jul|28||2013|/kb/books/go/go_middlegame/pages/img241.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||697934|Jul|28||2013|/kb/books/go/go_middlegame/pages/img242.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||680670|Jul|28||2013|/kb/books/go/go_middlegame/pages/img243.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||666127|Jul|28||2013|/kb/books/go/go_middlegame/pages/img244.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||703644|Jul|28||2013|/kb/books/go/go_middlegame/pages/img245.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||674102|Jul|28||2013|/kb/books/go/go_middlegame/pages/img246.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||684526|Jul|28||2013|/kb/books/go/go_middlegame/pages/img247.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||648526|Jul|28||2013|/kb/books/go/go_middlegame/pages/img248.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||728614|Jul|28||2013|/kb/books/go/go_middlegame/pages/img249.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||663415|Jul|28||2013|/kb/books/go/go_middlegame/pages/img250.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||694657|Jul|28||2013|/kb/books/go/go_middlegame/pages/img251.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||673729|Jul|28||2013|/kb/books/go/go_middlegame/pages/img252.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||663575|Jul|28||2013|/kb/books/go/go_middlegame/pages/img253.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||464991|Jul|28||2013|/kb/books/go/go_middlegame/pages/img254.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||756849|Jul|28||2013|/kb/books/go/go_middlegame/pages/img255.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||761547|Jul|28||2013|/kb/books/go/go_middlegame/pages/img256.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||801070|Jul|28||2013|/kb/books/go/go_middlegame/pages/img257.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||739075|Jul|28||2013|/kb/books/go/go_middlegame/pages/img258.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||787189|Jul|28||2013|/kb/books/go/go_middlegame/pages/img259.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||729433|Jul|28||2013|/kb/books/go/go_middlegame/pages/img260.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||793385|Jul|28||2013|/kb/books/go/go_middlegame/pages/img261.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||756141|Jul|28||2013|/kb/books/go/go_middlegame/pages/img262.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||779572|Jul|28||2013|/kb/books/go/go_middlegame/pages/img263.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||759079|Jul|28||2013|/kb/books/go/go_middlegame/pages/img264.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||738282|Jul|28||2013|/kb/books/go/go_middlegame/pages/img265.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||814029|Jul|28||2013|/kb/books/go/go_middlegame/pages/img266.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||833386|Jul|28||2013|/kb/books/go/go_middlegame/pages/img267.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||188285|Jul|28||2013|/kb/books/go/go_middlegame/pages/img268.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||369506|Jul|28||2013|/kb/books/go/go_middlegame/pages/img269.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||384764|Jul|28||2013|/kb/books/go/go_middlegame/pages/img270.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||547382|Jul|28||2013|/kb/books/go/go_middlegame/pages/img271.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||647343|Jul|28||2013|/kb/books/go/go_middlegame/pages/img272.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1070171|Jul|28||2013|/kb/books/go/go_middlegame/pages/img273.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1188408|Jul|28||2013|/kb/books/go/go_middlegame/pages/img274.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||315266|Jul|28||2013|/kb/books/go/go_middlegame/pages/img275.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||299360|Jul|28||2013|/kb/books/go/go_middlegame/pages/img276.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||707195|Jul|28||2013|/kb/books/go/go_middlegame/pages/img277.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||872457|Jul|28||2013|/kb/books/go/go_middlegame/pages/img278.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||959051|Jul|28||2013|/kb/books/go/go_middlegame/pages/img279.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||920879|Jul|28||2013|/kb/books/go/go_middlegame/pages/img280.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||926630|Jul|28||2013|/kb/books/go/go_middlegame/pages/img281.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1034689|Jul|28||2013|/kb/books/go/go_middlegame/pages/img282.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||341434|Jul|25||2013|/kb/books/go/go_middlegame/pages/img283.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1211055|Jul|25||2013|/kb/books/go/go_middlegame/pages/img284.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||437291|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img183.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||525694|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img184.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||653806|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img185.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||841874|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img186.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||783850|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img187.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||759335|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img188.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||777431|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img189.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||621857|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img190.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||621065|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img213.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||660424|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img214.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||640766|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img215.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||701699|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img216.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||684817|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img217.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||693628|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img218.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||652074|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img219.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||665520|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img220.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||664979|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img221.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||420880|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img222.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||653179|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img223.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||631018|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img224.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||614888|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img225.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||635578|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img226.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||664987|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img227.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||494882|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img228.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||755517|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img229.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||746024|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img230.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||740563|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img231.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||720673|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img232.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||641901|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img233.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||681172|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img234.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||681621|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img235.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||699626|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img236.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||692405|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img237.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||675217|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img238.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||637166|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img239.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||638038|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img240.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||746258|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img241.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||697934|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img242.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||680670|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img243.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||666127|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img244.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||703644|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img245.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||674102|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img246.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||684526|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img247.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||648526|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img248.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||728614|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img249.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||663415|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img250.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||694657|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img251.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||673729|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img252.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||663575|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img253.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||464991|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img254.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||756849|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img255.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||761547|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img256.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||801070|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img257.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||739075|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img258.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||787189|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img259.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||729433|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img260.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||793385|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img261.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||756141|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img262.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||779572|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img263.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||759079|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img264.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||738282|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img265.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||814029|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img266.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||833386|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img267.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||188285|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img268.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||369506|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img269.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||384764|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img270.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||547382|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img271.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||647343|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img272.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1070171|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img273.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1188408|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img274.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||315266|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img275.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||299360|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img276.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||707195|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img277.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||872457|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img278.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||959051|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img279.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||920879|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img280.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||926630|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img281.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1034689|Jul|28||2013|/kb/books/go/go_middlegame/pages/tn/tn_img282.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||341434|Jul|25||2013|/kb/books/go/go_middlegame/pages/tn/tn_img283.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1211055|Jul|25||2013|/kb/books/go/go_middlegame/pages/tn/tn_img284.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1053658|Jul|25||2013|/kb/books/go/go_strategy/pages/img285.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||336909|Jul|25||2013|/kb/books/go/go_strategy/pages/img286.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||354099|Jul|25||2013|/kb/books/go/go_strategy/pages/img287.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||409400|Jul|25||2013|/kb/books/go/go_strategy/pages/img288.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||417952|Jul|25||2013|/kb/books/go/go_strategy/pages/img289.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||690620|Jul|25||2013|/kb/books/go/go_strategy/pages/img290.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||845711|Jul|25||2013|/kb/books/go/go_strategy/pages/img291.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1028081|Jul|25||2013|/kb/books/go/go_strategy/pages/img292.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1126342|Jul|25||2013|/kb/books/go/go_strategy/pages/img293.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1106874|Jul|25||2013|/kb/books/go/go_strategy/pages/img294.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1054403|Jul|25||2013|/kb/books/go/go_strategy/pages/img295.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1120631|Jul|25||2013|/kb/books/go/go_strategy/pages/img296.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||756489|Jul|25||2013|/kb/books/go/go_strategy/pages/img297.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1084236|Jul|25||2013|/kb/books/go/go_strategy/pages/img298.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1067948|Jul|25||2013|/kb/books/go/go_strategy/pages/img299.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||979594|Jul|25||2013|/kb/books/go/go_strategy/pages/img300.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1045182|Jul|25||2013|/kb/books/go/go_strategy/pages/img301.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||901610|Jul|25||2013|/kb/books/go/go_strategy/pages/img302.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||918985|Jul|25||2013|/kb/books/go/go_strategy/pages/img303.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||862420|Jul|25||2013|/kb/books/go/go_strategy/pages/img304.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||886557|Jul|25||2013|/kb/books/go/go_strategy/pages/img305.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||787507|Jul|25||2013|/kb/books/go/go_strategy/pages/img306.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||911463|Jul|25||2013|/kb/books/go/go_strategy/pages/img307.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||965161|Jul|25||2013|/kb/books/go/go_strategy/pages/img308.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||973577|Jul|25||2013|/kb/books/go/go_strategy/pages/img309.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||888001|Jul|25||2013|/kb/books/go/go_strategy/pages/img310.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||786913|Jul|25||2013|/kb/books/go/go_strategy/pages/img311.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||963093|Jul|25||2013|/kb/books/go/go_strategy/pages/img312.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1189822|Jul|25||2013|/kb/books/go/go_strategy/pages/img313.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||877732|Jul|25||2013|/kb/books/go/go_strategy/pages/img314.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||849270|Jul|25||2013|/kb/books/go/go_strategy/pages/img315.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||963161|Jul|25||2013|/kb/books/go/go_strategy/pages/img316.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||507750|Jul|25||2013|/kb/books/go/go_strategy/pages/img317.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||930132|Jul|26||2013|/kb/books/go/go_strategy/pages/img318.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||862631|Jul|26||2013|/kb/books/go/go_strategy/pages/img319.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||2584516|Jul|26||2013|/kb/books/go/go_strategy/pages/img319_rot.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||907770|Jul|26||2013|/kb/books/go/go_strategy/pages/img320.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1074018|Jul|26||2013|/kb/books/go/go_strategy/pages/img321.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||985358|Jul|26||2013|/kb/books/go/go_strategy/pages/img322.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||955316|Jul|26||2013|/kb/books/go/go_strategy/pages/img323.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1048619|Jul|26||2013|/kb/books/go/go_strategy/pages/img324.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1013385|Jul|26||2013|/kb/books/go/go_strategy/pages/img325.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1091971|Jul|26||2013|/kb/books/go/go_strategy/pages/img326.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||801231|Jul|26||2013|/kb/books/go/go_strategy/pages/img327.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||845582|Jul|26||2013|/kb/books/go/go_strategy/pages/img328.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||931676|Jul|26||2013|/kb/books/go/go_strategy/pages/img329.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1068374|Jul|26||2013|/kb/books/go/go_strategy/pages/img330.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||836404|Jul|26||2013|/kb/books/go/go_strategy/pages/img331.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1002956|Jul|26||2013|/kb/books/go/go_strategy/pages/img332.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||858923|Jul|26||2013|/kb/books/go/go_strategy/pages/img333.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||904910|Jul|26||2013|/kb/books/go/go_strategy/pages/img334.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||905806|Jul|28||2013|/kb/books/go/go_strategy/pages/img335.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1032145|Jul|28||2013|/kb/books/go/go_strategy/pages/img336.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||927378|Jul|28||2013|/kb/books/go/go_strategy/pages/img337.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1021816|Jul|28||2013|/kb/books/go/go_strategy/pages/img338.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1007963|Jul|28||2013|/kb/books/go/go_strategy/pages/img339.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1087169|Jul|28||2013|/kb/books/go/go_strategy/pages/img340.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||907719|Jul|28||2013|/kb/books/go/go_strategy/pages/img341.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1017200|Jul|28||2013|/kb/books/go/go_strategy/pages/img342.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1008372|Jul|28||2013|/kb/books/go/go_strategy/pages/img343.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||904314|Jul|28||2013|/kb/books/go/go_strategy/pages/img344.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||865407|Jul|28||2013|/kb/books/go/go_strategy/pages/img345.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||936444|Jul|28||2013|/kb/books/go/go_strategy/pages/img346.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1098851|Jul|28||2013|/kb/books/go/go_strategy/pages/img347.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1136515|Jul|28||2013|/kb/books/go/go_strategy/pages/img348.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1181254|Jul|28||2013|/kb/books/go/go_strategy/pages/img349.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||826651|Jul|28||2013|/kb/books/go/go_strategy/pages/img350.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||605881|Jul|28||2013|/kb/books/go/go_strategy/pages/img351.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||695558|Jul|28||2013|/kb/books/go/go_strategy/pages/img352.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||166542|Jul|28||2013|/kb/books/go/go_strategy/pages/img353.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||147900|Jul|28||2013|/kb/books/go/go_strategy/pages/img354.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||216814|Jul|28||2013|/kb/books/go/go_strategy/pages/img355.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||224027|Jul|28||2013|/kb/books/go/go_strategy/pages/img356.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1053658|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img285.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||336909|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img286.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||354099|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img287.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||409400|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img288.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||417952|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img289.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||690620|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img290.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||845711|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img291.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1028081|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img292.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1126342|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img293.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1106874|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img294.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1054403|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img295.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1120631|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img296.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||756489|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img297.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1084236|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img298.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1067948|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img299.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||979594|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img300.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1045182|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img301.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||901610|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img302.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||918985|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img303.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||862420|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img304.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||886557|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img305.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||787507|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img306.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||911463|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img307.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||965161|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img308.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||973577|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img309.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||888001|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img310.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||786913|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img311.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||963093|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img312.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1189822|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img313.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||877732|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img314.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||849270|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img315.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||963161|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img316.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||507750|Jul|25||2013|/kb/books/go/go_strategy/pages/tn/tn_img317.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||930132|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img318.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||862631|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img319.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||2584516|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img319_rot.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||907770|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img320.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1074018|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img321.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||985358|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img322.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||955316|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img323.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1048619|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img324.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1013385|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img325.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1091971|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img326.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||801231|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img327.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||845582|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img328.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||931676|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img329.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1068374|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img330.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||836404|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img331.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1002956|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img332.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||858923|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img333.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||904910|Jul|26||2013|/kb/books/go/go_strategy/pages/tn/tn_img334.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||905806|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img335.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1032145|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img336.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||927378|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img337.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1021816|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img338.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1007963|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img339.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1087169|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img340.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||907719|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img341.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1017200|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img342.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1008372|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img343.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||904314|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img344.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||865407|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img345.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||936444|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img346.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1098851|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img347.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1136515|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img348.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||1181254|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img349.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||826651|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img350.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||605881|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img351.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||695558|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img352.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||166542|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img353.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||147900|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img354.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||216814|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img355.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||224027|Jul|28||2013|/kb/books/go/go_strategy/pages/tn/tn_img356.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||313740|Jul|27||2013|/kb/books/go/go_tesuji/pages/img144.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||534933|Jul|27||2013|/kb/books/go/go_tesuji/pages/img145.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||637566|Jul|27||2013|/kb/books/go/go_tesuji/pages/img146.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||883337|Jul|27||2013|/kb/books/go/go_tesuji/pages/img147.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||910842|Jul|27||2013|/kb/books/go/go_tesuji/pages/img148.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||547960|Jul|27||2013|/kb/books/go/go_tesuji/pages/img149.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||511374|Jul|27||2013|/kb/books/go/go_tesuji/pages/img150.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||309376|Jul|27||2013|/kb/books/go/go_tesuji/pages/img151.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||712605|Jul|27||2013|/kb/books/go/go_tesuji/pages/img152.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||610951|Jul|27||2013|/kb/books/go/go_tesuji/pages/img153.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||579887|Apr|15||2013|/kb/books/go/go_tesuji/pages/img154.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||205822|Apr|15||2013|/kb/books/go/go_tesuji/pages/img155.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||506775|Apr|15||2013|/kb/books/go/go_tesuji/pages/img156.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||554846|Apr|15||2013|/kb/books/go/go_tesuji/pages/img157.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||267323|Apr|15||2013|/kb/books/go/go_tesuji/pages/img158.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||328954|Apr|15||2013|/kb/books/go/go_tesuji/pages/img159.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||378242|Apr|15||2013|/kb/books/go/go_tesuji/pages/img160.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||726846|Jul|27||2013|/kb/books/go/go_tesuji/pages/img161.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||725448|Jul|27||2013|/kb/books/go/go_tesuji/pages/img162.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||687696|Jul|27||2013|/kb/books/go/go_tesuji/pages/img163.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||717765|Jul|27||2013|/kb/books/go/go_tesuji/pages/img164.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||527036|Jul|27||2013|/kb/books/go/go_tesuji/pages/img165.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||706619|Jul|27||2013|/kb/books/go/go_tesuji/pages/img166.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||742105|Jul|27||2013|/kb/books/go/go_tesuji/pages/img167.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||797265|Jul|27||2013|/kb/books/go/go_tesuji/pages/img168.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||760087|Jul|27||2013|/kb/books/go/go_tesuji/pages/img169.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||657636|Jul|27||2013|/kb/books/go/go_tesuji/pages/img170.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||755147|Jul|28||2013|/kb/books/go/go_tesuji/pages/img171.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||645677|Jul|28||2013|/kb/books/go/go_tesuji/pages/img172.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||696265|Jul|28||2013|/kb/books/go/go_tesuji/pages/img173.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||712791|Jul|28||2013|/kb/books/go/go_tesuji/pages/img174.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||717123|Jul|28||2013|/kb/books/go/go_tesuji/pages/img175.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||652155|Jul|28||2013|/kb/books/go/go_tesuji/pages/img176.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||813062|Jul|28||2013|/kb/books/go/go_tesuji/pages/img177.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||685220|Jul|28||2013|/kb/books/go/go_tesuji/pages/img178.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||599655|Jul|28||2013|/kb/books/go/go_tesuji/pages/img179.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||621916|Jul|28||2013|/kb/books/go/go_tesuji/pages/img180.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||511956|Jul|28||2013|/kb/books/go/go_tesuji/pages/img181.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||510349|Jul|28||2013|/kb/books/go/go_tesuji/pages/img182.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||313740|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img144.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||534933|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img145.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||637566|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img146.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||883337|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img147.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||910842|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img148.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||547960|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img149.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||511374|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img150.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||309376|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img151.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||712605|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img152.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||610951|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img153.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||579887|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img154.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||205822|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img155.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||506775|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img156.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||554846|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img157.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||267323|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img158.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||328954|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img159.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||378242|Apr|15||2013|/kb/books/go/go_tesuji/pages/tn/tn_img160.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||726846|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img161.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||725448|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img162.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||687696|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img163.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||717765|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img164.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||527036|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img165.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||706619|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img166.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||742105|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img167.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||797265|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img168.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||760087|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img169.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||657636|Jul|27||2013|/kb/books/go/go_tesuji/pages/tn/tn_img170.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||755147|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img171.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||645677|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img172.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||696265|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img173.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||712791|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img174.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||717123|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img175.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||652155|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img176.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||813062|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img177.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||685220|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img178.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||599655|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img179.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||621916|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img180.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||511956|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img181.jpg";
pages[j++] = "-rw-r--r--||1|konet||staff||510349|Jul|28||2013|/kb/books/go/go_tesuji/pages/tn/tn_img182.jpg";
pages_len = pages.length;
alert( "BUGS_1611 lslat_kb_books_go.js pages="+pages+" pages_len="+pages_len );
// alert( "BUGS_1612 lslat_kb_books_go.js window.pages="+window.pages );
return( pages );
}
</script>
<script id="script_thumbnails">
function load_thumbnails(pages) {
alert( "BUGS_2500 load_thumbnails" );
// var pages = new Array();
var pages_len = 0;
var j = 0; var k=0;
var htmout = "";
// pages = load_pages();
pages_len = pages.length;
j=1;
htmout += '<ul>';
htmout += '<li class="i">';
htmout += ' <img src="pages/tn/tn_'+j+'.png" width="76" height="100" class="page-1">';
htmout += ' <span>1</span>';
htmout += ' </li>';
for( j = 2; j<pages_len; j=j+2 ) {
k=j+1;
htmout += '<li class="d">';
htmout += '<img src="pages/tn/tn_'+j+'.png" width="76" height="100" class="page-2">';
htmout += '<img src="pages/tn/tn_'+k+'.png" width="76" height="100" class="page-3">';
htmout += '<span>'+j+"-"+k+'</span>';
htmout += '</li>';
}
htmout += '<li class="i">';
htmout += ' <img src="pages/tn/tn_'+j+'.png" width="76" height="100" class="page-'+j+'">';
htmout += ' <span>'+j+'</span>';
htmout += ' </li>';
htmout += '<ul>';
alert( "BUGS_2432 htmout="+htmout );
var div_thumbnails = document.getElementById('div_thumbnails');
div_thumbnails.innerHTML = htmout;
return(htmout);
}
</script>
<script id="script_random_int" >
function random_int(max,min) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
// random_kolink()
</script>
<script id="script_random_imglnk">
function random_imglink(){
var myimgs=new Array()
//specify random imgs below. You can have as many as you wish
myimgs[1]="/imgs/bg/bg_frax_ribbon.jpg"
myimgs[2]="/imgs/bg/bg_frax_thorn.jpg"
myimgs[3]="/imgs/bg/bg_newton05b.jpg"
myimgs[4]="/imgs/bg/bg_frax_thorn.jpg"
myimgs[5]="/imgs/bg/bg_frax_thorn.jpg"
myimgs[6]="/imgs/bg/bg_newton04bw.gif"
myimgs[7]="/imgs/bg/bg_newton05b.png"
myimgs[8]="/imgs/bg/bg_newton05b.png"
myimgs[9]="/imgs/bg/bg_newton05b.png"
var ry=Math.floor(Math.random()*myimgs.length)
if (ry==0) ry=1
document.write('<img src="'+myimgs[ry]+'" border=0 height=200>')
}
// random_imglink()
// random_imglink()
// random_imglink()
</script>'
<script id="script_startup">
function startup1(args) {
var href=window.location.href;
// alert( "BUGS_2580 script_startup href="+href );
var host=window.location.host;
var pathname=window.location.pathname;
var search=window.location.search;
url_default="fb.json";
// alert( "BUGS_2591 url_default="+url_default );
// var replaced = pathname.replace(/(^\.+|\.+$)/mg, '');
if( pathname.endsWith(".htm")) {
url_default=pathname.replace(".html",".json" );
// alert( "BUGS_2595 url_default="+url_default );
}
else {
url_default=pathname.replace(".html",".php" );
// alert( "BUGS_2596 url_default="+url_default );
}
url=url_default;
// bugs if( search.search("?")) {
// bugs url=search.replace("?","");
// bugs }
// alert( "BUGS_2600 href="+href+" url="+url );
}
</script>
<script id="script_startup_fb" >
var pagelist = new Array();
var pagelist_len = 0;
var ajaks = "";
var j = 0;
var pagelist_default = new Array();
var pagelist_head = new Array();
var pagelist_pages = new Array();
var pagelist_imgs = new Array();
var pagelist_i = new Array();
var pagelist_go = new Array();
var pagelist_tail = new Array();
var pagelist_ajax = new Array();
var pagelist_default_len = pagelist_default.length;
var pagelist_head_len = pagelist_head.length;
var pagelist_pages_len = pagelist_pages.length;
var pagelist_imgs_len = pagelist_imgs.length;
var pagelist_i_len = pagelist_i.length;
var pagelist_go_len = pagelist_go.length;
var pagelist_tail_len = pagelist_tail.length;
var pagelist_ajax_len = pagelist_ajax.length;
// alert( "BUGS_3001 pagelist_default_len="+pagelist_default_len+" pagelist_default="+pagelist_default );
// alert( "BUGS_3002 pagelist_head_len="+pagelist_head_len+" pagelist_head="+pagelist_head );
// alert( "BUGS_3003 pagelist_pages_len="+pagelist_pages_len+" pagelist_pages="+pagelist_pages );
// alert( "BUGS_3004 pagelist_imgs_len="+pagelist_imgs_len+" pagelist_imgs="+pagelist_imgs );
// alert( "BUGS_3005 pagelist_i_len="+pagelist_i_len+" pagelist_i="+pagelist_i );
// alert( "BUGS_3006 pagelist_go_len="+pagelist_go_len+" pagelist_go="+pagelist_go );
// alert( "BUGS_3007 pagelist_tail_len="+pagelist_tail_len+" pagelist_tail="+pagelist_tail );
// alert( "BUGS_3008 pagelist_ajaks_len="+pagelist_ajaks_len+" pagelist_ajaks="+pagelist_ajaks );
function startup_fb(args) {
jaxurl=args;
alert( "BUGS_6800 startup1 args="+args );
var jaxurl_default="fb.txt";
if(linkcheck(jaxurl)) {
alert( "BUGS_6811 ___FOUND jaxurl="+jaxurl );
else {
alert( "BUGS_6811 NOTFOUND jaxurl="+jaxurl );
}
// var href = window.location.href;
// alert( "BUGS_2620 startup href="+href );
// var pagelist = new Array();
// var pagelist_len=0;
// var ajaks = "";
var j = 0;
var htmout = "";
pagelist = load_pagelist();
pagelist_len=pagelist.length;
// alert( "BUGS_3100 pagelist_len="+pagelist_len+" pagelist="+pagelist);
pagelist_head = load_pagelist_head();
pagelist_head_len = pagelist_head.length;
// alert( "BUGS_3101 pagelist_head_len="+pagelist_head_len+" pagelist_head="+pagelist_head );
pagelist_pages = load_pagelist_pages();
pagelist_pages_len = pagelist_pages.length;
// alert( "BUGS_3102 pagelist_pages_len="+pagelist_pages_len+" pagelist_pages="+pagelist_pages );
pagelist_imgs = load_pagelist_imgs();
pagelist_imgs_len = pagelist_imgs.length;
// alert( "BUGS_3103 pagelist_imgs_len="+pagelist_imgs_len+" pagelist_imgs="+pagelist_imgs );
pagelist_i = load_pagelist_i();
pagelist_i_len = pagelist_i.length;
// alert( "BUGS_3104 pagelist_i_len="+pagelist_i_len+" pagelist_i="+pagelist_i );
pagelist_go = load_pagelist_go();
pagelist_go_len = pagelist_go.length;
// alert( "BUGS_3105 pagelist_go_len="+pagelist_go_len+" pagelist_go="+pagelist_go );
pagelist_tail = load_pagelist_tail();
pagelist_tail_len = pagelist_tail.length;
// alert( "BUGS_3106 pagelist_tail_len="+pagelist_tail_len+" pagelist_tail="+pagelist_tail );
var pagelist_ajaks = new Array();
var pagelist_ajaks_len = 0;
var ajaks="fb.txt";
// alert( "BUGS_3107a ajaks="+ajaks );
// pagelist_ajaks = load_pagelist_ajaks(ajaks);
// alert( "BUGS_3107b ajaks="+ajaks );
// pagelist_ajaks_len = pagelist_ajaks.length;
// alert( "BUGS_3107c pagelist_ajaks_len="+pagelist_ajaks_len+" pagelist_ajaks="+pagelist_ajaks );
// pagelist = pagelist.concat( pagelist_head );
// pagelist = pagelist.concat( pagelist_pages );
// pagelist = pagelist.concat( pagelist_imgs );
// pagelist = pagelist.concat( pagelist_i );
// pagelist = pagelist.concat( pagelist_go );
// pagelist = pagelist.concat( pagelist_tail );
// pagelist = pagelist.concat( pagelist_ajaks );
// pagelist = pagelist_head.concat(pagelist_go, pagelist_pages,pagelist_imgs,pagelist_i,pagelist_go,pagelist_tail );
pagelist = pagelist_go;
pagelist = pagelist_pages;
pagelist = pagelist_imgs;
pagelist_len=pagelist.length;
// alert( "BUGS_3200 pagelist_len="+pagelist_len+" pagelist="+pagelist);
// alert( "BUGS_2577 startup pages_len="+pages_len );
// load_thumbnails(pages);
// html_tn(pages);
// alert( "BUGS_2588 startup htmout="+htmout );
// alert( "BUGS_2581 startup pages_len="+pages_len+" pages="+pages );
// window.pages = pages;
// alert( "BUGS_1650 startup pages_len="+pages_len+" window.pages="+window.pages );
return("");
</script>
<script id="script_html_tn" >
function html_tn(pagelist) {
var pagelist_len = 0;
var j = 0; var k=0;
var htmout = "";
// pagelist = load_pagelist();
pagelist_len = pagelist.length;
j=1;
htmout += '<ul>';
htmout += '<li class="i">';
htmout += ' <img src="pages/tn/tn_'+j+'.png" width="76" height="100" class="page-1">';
htmout += ' <span>1</span>';
htmout += ' </li>';
// for( j = 2; j<pagelist_len; j=j+2 ) {
for( j = 2; j<600; j=j+2 ) {
k=j+1;
htmout += '<li class="d">';
htmout += '<img src="pages/tn/tn_'+j+'.png" width="76" height="100" class="page-2">';
htmout += '<img src="pages/tn/tn_'+k+'.png" width="76" height="100" class="page-3">';
htmout += '<span>'+j+"-"+k+'</span>';
htmout += '</li>';
}
htmout += '<li class="i">';
htmout += ' <img src="pages/tn/tn_'+j+'.png" width="76" height="100" class="page-'+j+'">';
htmout += ' <span>'+j+'</span>';
htmout += ' </li>';
htmout += '<ul>';
// alert( "BUGS_2432 htmout="+htmout );
// var div_tn = document.getElementById('div_tn');
// div_tn.innerHTML = htmout;
// alert( "BUGS_2600 html_tn pages_len="+pages_len+" htmout="+htmout );
// var div_tn = document.getElementbyID("div_tn");
// document.getElementById('div_tn').insertAdjacentHTML("beforebegin", htmout )
// div_tn.insertAdjacentHTML('beforeend', htmout);
// document.write(htmout);
return(htmout);
}
</script>
<script id="script_utils">
var execTest = function (str) {
return /([^\\]+)$/.exec(str)[1];
}
var splitTest = function (str) {
return str.split('\\').pop().split('/').pop();
}
</script>
<style id="style_body_scroll">
body{ overflow-y:scroll; }
</style>
<script id="script_filecheck" >
function filecheck(url) {
if(url) {
var req = new XMLHttpRequest();
req.open('GET', url, false);
req.send();
return req.status==200;
}
else {
return false;
}
}
</script>
<script id="script_imgcheck" >
function imgcheck(url) {
var img = new Image();
img.src = url;
return img.height != 0;
}
</script>
<script id="script_linkcheck" >
function linkcheck(url) {
var http = new XMLHttpRequest();
http.open('HEAD', url, false);
http.send();
return http.status!=404;
}
</script>
<script id="script_urlexists" >
function UrlExists(url) {
var http = new XMLHttpRequest();
http.open('HEAD', url, false);
http.send();
return http.status!=404;
}
</script>
<script id="script_startup">
ajax_ko_coffeeshop_psv="";
function startup(args) {
kogrids('');
divid="ajax_ko_coffeeshop";
url="ko_coffeeshop.psv";
url="ko_coffeeshop1.psv";
// alert( "BUGS_36001 startup divid="+divid+" url="+url );
ajax_ko_coffeeshop(divid,url);
ajax_ko_coffeeshop_psv=$("#div_ajax_ko_coffeeshop" ).html();
// alert( "BUGS_36002 startup ajax_ko_coffeeshop_psv="+ajax_ko_coffeeshop_psv );
var parser = document.createElement('a');
parser.href=document.location;
protocol=parser.protocol;
hostname=parser.hostname;
pathname=parser.pathname;
search=parser.search;
// alert( "BUGS_36010 __CONFIRM search="+search+" protocol="+protocol+" hostname="+hostname+" pathname="+pathname );
// if ( search.match(//)) {
if ( search == "" ) {
// alert( "BUGS_36011 ==CONFIRM search="+search+" protocol="+protocol+" hostname="+hostname+" pathname="+pathname );
ko_confirm(args);
}
// else {
// alert( "BUGS_36012 NOCONFIRM search="+search+" protocol="+protocol+" hostname="+hostname+" pathname="+pathname );
// }
// ko_confirm(args);
// alert( "BUGS_36003 AFTER ko_confirm" );
ko_media(args);
// ko_coffeeshop(args);
// alert( "BUGS_36002 AFTER_coffeeshop" );
var jaxurl_default="fb.txt";
var jaxurl_default=url;
// var jaxurl = args;
var jaxurl = jaxurl_default;
// if( filecheck(jaxurl)) {
// alert( "BUGS_36003 ___FOUND jaxurl="+jaxurl );
// }
// else {
// alert( "BUGS_36004 NOTFOUND jaxurl="+jaxurl );
// }
}
</script>
<script id=script_ko_media>
function ko_media(args) {
// alert("BUGS_38200 ko_media args="+args);
var parser = document.createElement('a');
parser.href=document.location;
protocol=parser.protocol;
hostname=parser.hostname;
pathname=parser.pathname;
search=parser.search;
// alert("BUGS_38240 protocol="+protocol+" hostname="+hostname+" pathname="+pathname+" search="+search );
host_list_ka=`
# skip_beg
local|
ka1|http://ka12
ka18|http://ka12:8000
ko0|https://ko0.us
ko1|https://ko1.us
ko2|https://ko2.us
konet|https://konet.org
iperms|https://iperms.com
# skip_end
`;
host_list=`
# skip_beg
local|
ko2|https://ko2.us
ko1|https://ko1.us
konet|https://konet.org
iperms|https://iperms.com
# skip_end
`;
media_list=`
mp3|/ko.php?todo=mp3s|/imgs/btn/koeye_mp3.png
mp4|/ko.php?todo=mp4s|/imgs/btn/koeye_mp4.png
pdfs|/ko.php?todo=pdfs|/imgs/btn/koeye_pdfs.png
txts|/ko.php?todo=txts|/imgs/btn/koeye_txt.png
youtube|/ko.php?todo=yts|/imgs/btn/koeye_youtube.png
bitchute|/ko.php?todo=bcs|/imgs/btn/koeye_bitchute.png
html|/ko.php?todo=htmls|/imgs/btn/koeye_html.png
flipbooks|/ko.php?todo=jsons|/imgs/btn/koeye_fb.png
`;
media_list_ka=`
# skip_media_beg
mp3|/ko.php?todo=mp3s|/imgs/btn/koeye_mp3.png
mp4|/ko.php?todo=mp4s|/imgs/btn/koeye_mp4.png
pdfs|/ko.php?todo=pdfs|/imgs/btn/koeye_pdfs.png
txts|/ko.php?todo=txts|/imgs/btn/koeye_txt.png
youtube|/ko.php?todo=yts|/imgs/btn/koeye_youtube.png
bitchute|/ko.php?todo=bcs|/imgs/btn/koeye_bitchute.png
html|/ko.php?todo=htmls|/imgs/btn/koeye_html.png
flipbooks|/ko.php?todo=jsons|/imgs/btn/koeye_fb.png
json|/ko.php?todo=jsons|/imgs/btn/koeye_tl.png
zooms|/ko.php?todo=zms|/imgs/btn/koeye_zm.png
timelinse|/ko.php?todo=tls|/imgs/btn/koeye_tl.png
# skip_media_end
`;
// alert( "BUGS_38201 ko_media media_list="+media_list );
if( hostname.match(/ka12/)) {
host_list=host_list_ka;
media_list=media_list_ka;
}
// alert( "BUGS_38201 ko_media media_list="+media_list );
// alert( "BUGS_38202 ko_media host_list="+host_list );
htmout="";
var j=0; var k=0;
var host_len=0; var media_len=0;
var host_data=host_list.split("\n");
host_len=host_data.length;
var media_data=media_list.split("\n");
media_len=media_data.length;
// alert( "BUGS_38261 host_data="+host_data+" host_len="+host_len );
// alert( "BUGS_38262 media="+media_data+" media_len="+media_len );
htmout += "<hr color=black>\n";
htmout += "<hr color=white>\n";
htmout += "<table id=table_ko_media>\n";
htmout += "<tr>\n";
htmout += "<td width=10>j</td>";
htmout += "<td width=50>id</td>";
for(j=0; j<host_len; j++ ) {
// alert( "BUGS_3828 j="+j+" host_data="+host_data[j] );
if( host_data[j] == "\n" ) { continue; }
if( host_data[j] == "" ) { continue; }
if( host_data[j].match(/^#/)) { continue; }
hostid=host_data[j].split("|")[0];
host=host_data[j].split("|")[1];
// htmout += "<td>"+j+"</td>";
// htmout += "<td>"+host_data[j]+"</td>";
htmout += "<td width=100>"+hostid+"</td>";
// htmout += "<td>"+host+"</td>";
}
htmout += "</tr>\n";
htmout += "<tr>\n";
kk=0; jj=0;
for(k=0; k<media_len; k++ ) {
if( media_data[k] == "\n" ) { continue; }
if( media_data[k] == "" ) { continue; }
if( media_data[k].match(/^#/)) { continue; }
// htmout += "BUGS_38300 k="+k+" media_data="+media_data[k]+"<br>\n";
kk++;
media_id=k;
media_url="url";
media_tn="/imgs/btn/koeye.png";
media_id=media_data[k].split("|")[0];
media_url=media_data[k].split("|")[1];
media_tn=media_data[k].split("|")[2];
tn="<img src="+media_tn+" height=30 border=0>";
htmout += "<tr>";
htmout += "<td>"+kk+"</td>";
htmout += "<td>"+media_id+"</td>";
for(j=0; j<host_len; j++ ) {
if( host_data[j] == "\n" ) { continue; }
if( host_data[j] == "" ) { continue; }
if( host_data[j].match(/^#/)) { continue; }
jj++;
hostid=host_data[j].split("|")[0];
host=host_data[j].split("|")[1];
href=host+media_url;
url="";
url="<a href="+href+" target=_blank>"+tn+"</a>";
htmout += "<td>"+url+"</td>";
// htmout += "<td>"+jj+"</td>";
// htmout += "<td>"+media_id+"</td>";
// htmout += "<td>"+media_url+"</td>";
// htmout += "<td>"+tn+"</td>";
}
htmout += "</tr>\n";
}
htmout += " </table id=table_ko_media_end>\n";
htmout += "<hr color=white>\n";
htmout += "<hr color=black>\n";
if( document.getElementById("div_ko_media")) {
// alert( "BUGDS_38300 div_ko_media htmout="+htmout );
document.getElementById("div_ko_media").innerHTML=htmout;
}
else {
alert( "BUGS_38300 NOTFOUND div_ko_media" );
}
return(args);
}
</script id=script_ko_media>
<script id=script_bugalerts >
bugalert_hi="";
bugalert_hi += "pqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpq\n";
bugalert_hi += "==========================================\n";
bugalert_hi += "ko_coffeeshop pqpqpqpqpqpqpqpqpqpqpqpqpqpq\n";
bugalert_hi += "ko_coffeeshop ============================\n";
bugalert_hi += "ko_coffeeshop KO_COFFEESHOP\n";
bugalert_hi += "ko_coffeeshop ----------------------------\n";
// bugalert_hi += "ko_coffeeshop\n";
// bugalert_hi += "ko_coffeeshop Happy Birthday\n";
// bugalert_hi += "ko_coffeeshop Stacey\n";
// bugalert_hi += "ko_coffeeshop\n";
bugalert_hi += "ko_coffeeshop ----------------------------\n";
bugalert_hi += "ko_coffeeshop 20221025\n";
bugalert_hi += "ko_coffeeshop ============================\n";
bugalert_hi += "bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd\n";
bugalert_hi += "==========================================\n";
bugalert_hi += "bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd\n";
bugalert_tour = "";
bugalert_tour += "pqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpq\n";
bugalert_tour += "==========================================\n";
bugalert_tour += "ko_coffeeshop pqpqpqpqpqpqpqpqpqpqpqpqpqpq\n";
bugalert_tour += "ko_coffeeshop ============================\n";
bugalert_tour += "ko_coffeeshop KO_COFFEESHOP\n";
bugalert_tour += "ko_coffeeshop ----------------------------\n";
bugalert_tour += "ko_coffeeshop construction zone\n";
bugalert_tour += "ko_coffeeshop googles, hardhat, mouse recommended\n";
bugalert_tour += "ko_coffeeshop \n";
bugalert_tour += "ko_coffeeshop ----------------------------\n";
bugalert_tour += "ko_coffeeshop TOURS\n";
bugalert_tour += "ko_coffeeshop AVAILABLE\n";
bugalert_tour += "ko_coffeeshop individuals or groups\n";
bugalert_tour += "ko_coffeeshop on request\n";
bugalert_tour += "ko_coffeeshop ----------------------------\n";
bugalert_tour += "ko_coffeeshop "+dttm('')+"\n";
bugalert_tour += "ko_coffeeshop ----------------------------\n";
bugalert_tour += "ko_coffeeshop jkwii\n";
bugalert_tour += "ko_coffeeshop ============================\n";
bugalert_tour += "==========================================\n";
bugalert_tour += "bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd\n";
bugalert_bye = "";
bugalert_bye += "pqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpq\n";
bugalert_bye += "==========================================\n";
bugalert_bye += "ko_coffeeshop pqpqpqpqpqpqpqpqpqpqpqpqpqpq\n";
bugalert_bye += "ko_coffeeshop ============================\n";
bugalert_bye += "ko_coffeeshop thanks\n";
bugalert_bye += "ko_coffeeshop ----------------------------\n";
bugalert_bye += "ko_coffeeshop jkwii\n";
bugalert_bye += "ko_coffeeshop ============================\n";
bugalert_bye += "==========================================\n";
bugalert_bye += "bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd\n";
</script>
<script id=script_ko_confirm>
function ko_confirm(args) {
// alert( "BUGS_36800 ko_confirm args="+args );
ko_confirm_prompt(args);
// ko_confirm_ajax(args);
return(args);
}
</script id=script_ko_confirm>
<script id=script_ko_confirm_prompt>
function ko_confirm_prompt(args) {
// content: 'nested confirms<br>confirm_or_cancel modal',
// title: 'secure_action',
$.confirm({
title: 'confirm invitation',
content: 'confirm invitation<br>proceed or cancel',
icon: 'fa fa-question-circle',
animation: 'scale',
closeAnimation: 'scale',
opacity: 0.5,
buttons: {
'confirm': {
text: 'Proceed',
btnClass: 'btn-blue',
action: function(){
$.confirm({
title: 'invited guest',
content: 'confirm invitation ',
icon: 'fa fa-warning',
animation: 'scale',
closeAnimation: 'zoom',
buttons: {
confirm: {
text: 'yes',
btnClass: 'btn-orange',
action: function(){
$.alert('invitation <strong>confirmed</strong>');
}
},
cancel: function(){
$.alert('<strong>canceled</strong>');
}
}
});
}
},
cancel: function(){
$.alert('<strong>cancel</strong>');
// window.open('https://startpage.com');
// window.open('https://Freespoke.com');
// window.open('/notice.html');
window.open('https://thedukereport.com');
},
moreButtons: {
text: 'other',
action: function(){
$.alert('<strong>other</strong>');
// window.open('/pdf/web/viewer.html?file=/pdf/mars.pdf');
window.open('/notice.html');
}
},
}
});
return(args);
}
</script id=script_ko_confirm_prompt_end>
<script id=script_ko_confirm_ajax>
function ko_confirm_ajax(args) {
// $('.example-p-5').on('click', function(){
// url='url:/js/confirm/table.html';
// url='url:/notice.txt';
url='url:/notice.html';
// alert( "BUGS_37000 ko_confirm url="+url );
// title: 'ajax_table.html',
title="          "+dttm('');
// pdf_links_list=`
// /pdf/konet.pdf
// /pdf/mars.pdf
// /pdf/jtfdc.pdf
// /pdf/iperms.pdf
// `;
// alert( "BUGS_37001 pdf_links_list="+pdf_links_list );
// pdf_links=pdf_links_list.split("\n");
// pdf_links_len=pdf_links.length;
// pdf_link_no=random_int(pdf_links_len-1,1);
// pdf_link=pdf_links[pdf_link_no];
// alert( "BUGS_37002 pdf_link="+pdf_link );
// pdflink="/pdf/konet.pdf";
// tn="/fb/konet/pages/tn/tn_1.png";
// tn=pdf_link.replace(pdflink,"/fb/").replace(".pdf","/pages/tn/tn_1.png");
// pdfurl = "";
// pdfurl += "<a href=/pdf/web/viewer.html?file="+pdf_link+" target=_blank>";
// pdfurl += "<img src="+tn+" height=200 border=0>";
// pdfurl += "</a>";
// alert( "BUGS_37003 pdfurl="+pdfurl );
// content: url+pdfurl,
$.dialog({
title: title,
content: url,
animation: 'scale',
columnClass: 'medium',
closeAnimation: 'scale',
backgroundDismiss: true,
});
// });
return(args);
}
</script id=script_ko_confirm_ajax_end>
<script id=script_ko_coffeeshop>
function ko_coffeeshop(args) {
// alert("BUGS_36900 ko_coffeeshop args="+args);
// alert( "ko_coffeeshop\n"+bugalert_hi );
// ajax_ko_coffeeshop('div_ajax_ko_coffeeshop','ko_coffeeshop1.psv');
// ajax_ko_coffeeshop_psv=$("#div_ajax_ko_coffeeshop_psv" ).html();
// alert( "BUGS_36901 ajax_ko_coffeeshop ajax_ko_coffeeshop_psv="+ajax_ko_coffeeshop_psv );
// divid="#"+args;
// ajax_ko_coffeeshop=$(divid).html();
// ajax_ko_coffeeshop=$("#div_ajax_ko_coffeeshop" ).html();
// alert( "BUGS_36902 ajax_ko_coffeeshop ajax_ko_coffeeshop="+ajax_ko_coffeeshop);
var parser = document.createElement('a');
parser.href=document.location;
protocol=parser.protocol;
hostname=parser.hostname;
pathname=parser.pathname;
search=parser.search;
// alert("BUGS_36010 protocol="+protocol+" hostname="+hostname+" pathname="+pathname+" search="+search );
coffeec_list=`
# skip_beg
coffeeshop|
# local|
# ko2|https://ko2.us
# ko1|https://ko1.us
# konet|https://konet.org
# iperms|https://iperms.com
# skip_end
`;
ko_coffeeshop_psv=`
# skip_media_beg 20221017_1300
rowno|ord|no|id|status|dttm|grp|item|logo|coffee_id|coffee_url|coffee_tn|fb|fbtxt|pdf|pdftxt|gif|giftxt|mp3|mp3txt|mp4|mp4txt|bc|bctxt|rm|rmtxt|vm|vmtxt|yt|yttxt|pn|pntxt|sl|sltxt|tl|tltxt|tx|txtxt|zm|zmtxt|hostid|host|home|name|email|phn|fab|gab|li|pl|pt|ss|ts|tw|jitsi|chat|btc|btctxt|eth|ethtxt|shopify|shopifytxt|squareup|squareuptxt|stripe|stripetxt|dm|dmtxt|dr|drtxt|gp|gptxt|js|jstxt|wm|wmtxt|zh|zhtxt|itm|cnt|amt|note
||||status|m=20221112_150703|grp||/ko.png|royal1|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_coffee_steam.gif||https://ko2.us/kb/aud/mp3/eva_cassidy_aint_no_ssnshine.mp3||https://ko2.us/kb/vid/jkwii/flintstones_happy_anniversary.mp4||https://www.bitchute.com/video/YIgcgLyjQQZK/|https://www.bitchute.com/video/YIgcgLyjQQZK/|||||https://youtube.com/watch?v=WIdViC75CPI||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|jhf|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_coffee_drip.gif||https://ko2.us/kb/aud/mp3/dietrich-lili_marleen-german.mp3||https://ko2.us/kb/vid/jkwii/cover-who_loves_the_sun_velvet_underground.mp4||yt_20221003_icke|yt_20221003_icke|||||https://youtube.com/watch?v=WIdViC75CPI||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|konet|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_kids_tinkerbel_block.gif||https://ko2.us/kb/aud/mp3/waits-cemetery_polka-full.mp3||https://ko2.us/kb/vid/jkwii/bibby_mcferrin_robin_williams_plus-dont_worry_be_happy.mp4||https://www.bitchute.com/video/xDuMWX2GDOtY/|https://www.bitchute.com/video/xDuMWX2GDOtY/|||||https://youtube.com/watch?v=WOLZMr52Wcc||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|iperms|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giph_us_snapshot.gif||https://ko2.us/kb/aud/mp3/glen_campbell-gentle_on_my_mind_1968.mp3||https://ko2.us/kb/vid/jkwii/dion-abraham_martin_n_john.mp4||yt_20221003_fulford_deutsch_karol_poezje|yt_20221003_fulford_deutsch_karol_poezje|||||https://youtube.com/watch?v=aiYACAuEfy8||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|ko0|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_us_hive.gif||https://ko2.us/kb/aud/mp3/morrison_rebles-why_you_on_facebook_talkover.mp3||https://ko2.us/kb/vid/jkwii/lefty_frizzell-im_not_the_man_im_supposed_to_be.mp4||https://www.bitchute.com/video/ApdPReuJJlXP/|https://www.bitchute.com/video/ApdPReuJJlXP/|||||https://youtube.com/watch?v=b-vZmfmeNbY||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|ko1|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_orb_outgif.gif||https://ko2.us/kb/aud/mp3/richie_havens-the_hawk.mp3||https://ko2.us/kb/vid/jkwii/donald_zolan_art-child_of_mine.mp4||yt_20221003_polly_child_euthanasia_ontario|yt_20221003_polly_child_euthanasia_ontario|||||https://youtube.com/watch?v=bF_u_2QLMNQ||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|ko2|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_spinner1.gif||https://ko2.us/kb/aud/mp3/doris_day-secret_love.mp3||https://ko2.us/kb/vid/jkwii/gigel_nicola-mult_am_pierdut_in_viata.mp4||https://www.bitchute.com/video/SObALOBG7HWB/|https://www.bitchute.com/video/SObALOBG7HWB/|||||https://youtube.com/watch?v=bNVVK8*-w-g||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|ka1|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_orbs_birdseye.gif||https://ko2.us/kb/aud/mp3/elvis-cant_help_falling_in_love.mp3||https://ko2.us/kb/vid/jkwii/willie_lukas_micah_nelson-promised_land_20151231.mp4||yt_20221004_housatonic_ep1701_nick_history_emerging_viruses_vaccines|yt_20221004_housatonic_ep1701_nick_history_emerging_viruses_vaccines|||||https://youtube.com/watch?v=bVns0jvgyvc||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|jk|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_orb_static.gif||https://ko2.us/kb/aud/mp3/emmylou_harris_john_denver-wild_montana_skies.mp3||https://ko2.us/kb/vid/jkwii/lefty_frizzell-cigarettes_and_coffee_blues.mp4||https://www.bitchute.com/video/ipQSmBgJ5HWe/|https://www.bitchute.com/video/ipQSmBgJ5HWe/|||||https://youtube.com/watch?v=erl2m9_GCPU||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|sk|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_orb_plasmagif.gif||https://ko2.us/kb/aud/mp3/mitch_miller-you_are_my_sunshine.mp3||https://ko2.us/kb/vid/jkwii/jtfdcchillicothe_ohio_the_good_old_days_1938_looking_back.mp4||yt_20221003_earthnewspaper_suicided_exposing_child_trafficking_2021|yt_20221003_earthnewspaper_suicided_exposing_child_trafficking_2021|||||https://youtube.com/watch?v=g5lFz7vL6mw||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|jkwii|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_book_flipold.gif||https://ko2.us/kb/aud/mp3/caberet-money_money.mp3||https://ko2.us/kb/vid/jkwii/redbone-come_get_your_love_powwow.mp4||https://www.bitchute.com/video/znlUcw6YIHe9/|https://www.bitchute.com/video/znlUcw6YIHe9/|||||https://youtube.com/watch?v=gwH-uqzsQJk||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|skwii|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_byrdpucker_scan.gif||https://ko2.us/kb/aud/mp3/trio-da_da_da_clip_.mp3||https://ko2.us/kb/vid/jkwii/nat_king_cole-darling_je_vous_aime_beaucoup.mp4||yt_20221006_stroppy|yt_20221006_stroppy|||||https://youtube.com/watch?v=iTdTjzbl-5k||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|jak1|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_konabus_headsmokn.gif||https://ko2.us/kb/aud/mp3/quando,_quando,_quando-engelberthumperdinck.mp3||https://ko2.us/kb/vid/jkwii/redbone_come_get_your_love_powwow.mp4||https://www.bitchute.com/video/5apmdWN0lHPd/|https://www.bitchute.com/video/5apmdWN0lHPd/|||||https://youtube.com/watch?v=jEOiLaWooVk||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|jak2|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_flipbook_glow.gif||https://ko2.us/kb/aud/mp3/mona_lisa.mp3||https://ko2.us/kb/vid/jkwii/leonard_cohen-come_healing.mp4||yt_20221007_stroppy|yt_20221007_stroppy|||||https://www.youtube.com/watch?v=Vbd0FcnFfO0||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|jak3|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_mistspray.gif||https://ko2.us/kb/aud/mp3/german_navy_song3.mp3||https://ko2.us/kb/vid/jkwii/waits_time_lautern.mp4||https://www.bitchute.com/video/pKIaLXk91H64/|https://www.bitchute.com/video/pKIaLXk91H64/|||||yt_20090504_tonepoets_marianne_faithfull_as_tears_go_by||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|med|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_book_flipflat.gif||https://ko2.us/kb/aud/mp3/royaldeluxe_bad.mp3||https://ko2.us/kb/vid/jkwii/marlene_dietrich_lili_marleen.mp4||yt_20221007_xandrewx_taking_off_antartica|yt_20221007_xandrewx_taking_off_antartica|||||https://www.youtube.com/watch?v=zBpUf-TcIcg||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|law|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_kou_science_pour.gif||https://ko2.us/kb/aud/mp3/dj_ethnic_barry_sisters-bei_mir_bistu_shain.mp3||https://ko2.us/kb/vid/jkwii/abolli_thousand_kisses_deep.mp4||https://www.bitchute.com/video/Qr0gFSxCzSTY/|https://www.bitchute.com/video/Qr0gFSxCzSTY/|||||yt_20200401_history_tesla_files_shadow_gov_full_s1e5||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|koed|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_orb_spirorbgif.gif||https://ko2.us/kb/aud/mp3/jesse_colin_young_sunlight_1976.mp3||https://ko2.us/kb/vid/jkwii/doug_kershaw-diggy_liggy_lo.mp4||yt_20221007_cops_setup_busted_fake_grow_hous|yt_20221007_cops_setup_busted_fake_grow_hous|||||https://www.youtube.com/watch?v=0_hFabF1Fjw||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|jtfdc|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_coffee_steam.gif||https://ko2.us/kb/aud/mp3/mp3_water_is_wide/water_is_wide_andrew_frost.mp3||||https://www.bitchute.com/video/EfNVsyIjpI8N/|https://www.bitchute.com/video/EfNVsyIjpI8N/|||||yt_20150927_melenie_look_what_theyve_done_tomy_song_ma_1971||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|jtfinc|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_coffee_drip.gif||https://ko2.us/kb/aud/mp3/love_me_tender.mp3||||yt_20221007_martinbrodel_p8_poseidon_crew_arrested_nord_stream_explosion|yt_20221007_martinbrodel_p8_poseidon_crew_arrested_nord_stream_explosion|||||https://www.youtube.com/watch?v=r44Ach4mXE4||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|hamamoto|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_kids_tinkerbel_block.gif||https://ko2.us/kb/aud/mp3/still_still_still-wolfgang_petry.mp3||||https://www.bitchute.com/video/dN5xrVkAb6Dr/|https://www.bitchute.com/video/dN5xrVkAb6Dr/|||||https://www.youtube.com/watch?v=r44Ach4mXE4||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|georgewebb|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giph_us_snapshot.gif||https://ko2.us/kb/aud/mp3/louie_armstrong-what_a_wonderful_world.mp3||||yt_20221007_netflixs_dahmer_propaganda|yt_20221007_netflixs_dahmer_propaganda|||||yt_20151028_melenie_edwin_hawkins_singes_candles_inthe_rain||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|housatonic|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_us_hive.gif||https://ko2.us/kb/aud/mp3/still_still_still-nicole.mp3||||https://www.bitchute.com/video/4-mWJ7E5DBs/|https://www.bitchute.com/video/4-mWJ7E5DBs/|||||https://www.youtube.com/watch?v=IZ52lk9wjZI||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|polly|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_orb_outgif.gif||https://ko2.us/kb/aud/mp3/jesse_colin_young-whats_going_on.mp3||||yt_20221007_icke_great_awakening_celebration_conference|yt_20221007_icke_great_awakening_celebration_conference|||||yt_20160601_andyfertal_scottis_rite_templ_melenie_candles_inthe_rain||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|couey|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_spinner1.gif||https://ko2.us/kb/aud/mp3/morrison_rebles-where_are_all_the_rebels.mp3||||https://www.bitchute.com/video/9sqXfj36gfjL/|https://www.bitchute.com/video/9sqXfj36gfjL/|||||https://youtube.com/watch?v=WIdViC75CPI||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
||||status|m=20221112_150703|grp||/ko.png|mcduff|https://buymeacoffee.com/RoyalOne|/imgs/gif/us/tn/tn_giphy_coffee_drip.gif|http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_orbs_birdseye.gif||https://ko2.us/kb/aud/mp3/still_still_still-vienna_boys_choir.mp3||||yt_20221011_housatonic_gigaohm_couey_national_immunomythology|yt_20221011_housatonic_gigaohm_couey_national_immunomythology|||||https://youtube.com/watch?v=WIdViC75CPI||||||||||||ka12|host|https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||konet||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_orb_static.gif||https://ko2.us/kb/aud/mp3/marlene_dietrich-wenn_die_soldaten.mp3||||https://www.bitchute.com/video/w67tcwuAxdGB/|https://www.bitchute.com/video/w67tcwuAxdGB/|||||https://youtube.com/watch?v=WOLZMr52Wcc||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||iperms||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_orb_plasmagif.gif||https://ko2.us/kb/aud/mp3/weihnachtslieder-nicole-still_still_still.mp3||||yt_20221012_disturbing_ai_art|yt_20221012_disturbing_ai_art|||||https://youtube.com/watch?v=aiYACAuEfy8||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||royal1||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_book_flipold.gif||https://ko2.us/kb/aud/mp3/jimi_hendrix-national_anthem.mp3||||https://www.bitchute.com/video/ujzH15vpRxFV/|https://www.bitchute.com/video/ujzH15vpRxFV/|||||https://youtube.com/watch?v=b-vZmfmeNbY||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||ko0||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_byrdpucker_scan.gif||https://ko2.us/kb/aud/mp3/morrison_rebles-biglie.mp3||||yt_20221012_bigawakeningq_obama_mike|yt_20221012_bigawakeningq_obama_mike|||||https://youtube.com/watch?v=bF_u_2QLMNQ||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||ko1||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_konabus_headsmokn.gif||https://ko2.us/kb/aud/mp3/abba_still_faith_in_you.mp3||||https://www.bitchute.com/video/JOxlPMQmtgpX/|https://www.bitchute.com/video/JOxlPMQmtgpX/|||||https://youtube.com/watch?v=bNVVK8*-w-g||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||ko2||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_flipbook_glow.gif||https://ko2.us/kb/aud/mp3/trick_daddy-take_it_to_the_house.mp3||||yt_20221014_fulford|yt_20221014_fulford|||||https://youtube.com/watch?v=bVns0jvgyvc||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||ka1||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_mistspray.gif||https://ko2.us/kb/aud/mp3/leonard_cohen_kissesdeep-eye.mp3||||https://www.bitchute.com/video/QqFboZFdMT5a/|https://www.bitchute.com/video/QqFboZFdMT5a/|||||https://youtube.com/watch?v=erl2m9_GCPU||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||jkwii||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_book_flipflat.gif||https://ko2.us/kb/aud/mp3/emmylou_harris-like_an_old_fashioned_waltz.mp3||||yt_20221014_icke_so_how_much_damages_they_to_pay|yt_20221014_icke_so_how_much_damages_they_to_pay|||||https://youtube.com/watch?v=g5lFz7vL6mw||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||skwii||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_kou_science_pour.gif||https://ko2.us/kb/aud/mp3/richie_havens-my_fathers_shoes.mp3||||https://www.bitchute.com/video/gU3yKtwAGKBE/|https://www.bitchute.com/video/gU3yKtwAGKBE/|||||https://youtube.com/watch?v=gwH-uqzsQJk||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||jk||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||https://ko2.us/imgs/gif/us/tn/tn_giphy_orb_spirorbgif.gif||https://ko2.us/kb/aud/mp3/morrison_rebles-have_i_told_you_lately.mp3||||yt_20221014_stroppy|yt_20221014_stroppy|||||https://youtube.com/watch?v=iTdTjzbl-5k||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||sk||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||https://youtube.com/watch?v=jEOiLaWooVk||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||jak1||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||https://www.youtube.com/watch?v=Vbd0FcnFfO0||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||jak2||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||yt_20090504_tonepoets_marianne_faithfull_as_tears_go_by||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||jak3||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||https://www.youtube.com/watch?v=zBpUf-TcIcg||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||jtfdc||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||yt_20200401_history_tesla_files_shadow_gov_full_s1e5||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||jtfinc||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||https://www.youtube.com/watch?v=0_hFabF1Fjw||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||med||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||yt_20150927_melenie_look_what_theyve_done_tomy_song_ma_1971||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||law||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||https://www.youtube.com/watch?v=r44Ach4mXE4||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||gov||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||https://www.youtube.com/watch?v=r44Ach4mXE4||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||ka||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||yt_20151028_melenie_edwin_hawkins_singes_candles_inthe_rain||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||kids||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||https://www.youtube.com/watch?v=IZ52lk9wjZI||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||koed||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||yt_20160601_andyfertal_scottis_rite_templ_melenie_candles_inthe_rain||||||||||||ka12||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||go||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||||||||||||||||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||kt||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||||||||||||||||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||it||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||||||||||||||||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||jhf||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||||||||||||||||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||webb||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||||||||||||||||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||hamamoto||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||||||||||||||||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||housatonic||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||||||||||||||||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||gigaohm||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||||||||||||||||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||polly||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||||||||||||||||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||bookmarkusb||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||||||||||||||||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||mars||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||||||||||||||||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||myco||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||||||||||||||||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||miniraptors||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||||||||||||||||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
# skip_ko_coffeeshop_psv_end
`;
ko_coffeeshop_psv_amedia=`
rowno|ord|no|id|status|dttm|grp|item|logo|coffee_id|coffee_url|coffee_tn|fb|fbtxt|pdf|pdftxt|gif|giftxt|mp3|mp3txt|mp4|mp4txt|bc|bctxt|rm|rmtxt|vm|vmtxt|yt|yttxt|pn|pntxt|sl|sltxt|tl|tltxt|tx|txtxt|zm|zmtxt|hostid|host|home|name|email|phn|fab|gab|li|pl|pt|ss|ts|tw|jitsi|chat|btc|btctxt|eth|ethtxt|shopify|shopifytxt|squareup|squareuptxt|stripe|stripetxt|dm|dmtxt|dr|drtxt|gp|gptxt|js|jstxt|wm|wmtxt|zh|zhtxt|itm|cnt|amt|note
|||webb||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||||||||||||||||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||hamamoto||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||||||||||||||||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||housatonic||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||||||||||||||||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||gigaohm||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||||||||||||||||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
|||polly||m=20221112_150703|||/ko.png||https://buymeacoffee.com/RoyalOne||http://ko2.us/fb/miniraptors||http:///pdf/miniraptors.pdf||||||||||||||||||||||||||||https://ko2.us|konet|jkwii@ko2.us||https://facebook.com|https://gab.com||https://parler.com|https://pinterest.com|https://substack.com|https://truthsocial.com|https://twitter.com||||||||||||||||||||||||||||
`;
// if( ajax_ko_coffeeshop_psv != "" ) { ko_coffeeshop_psv = ajax_ko_coffeeshop_psv; }
ajax_ko_coffeeshop_psv=$("#div_ajax_ko_coffeeshop" ).html();
var ajax_coffee_data=ajax_ko_coffeeshop_psv.split("\n");
ajax_ko_coffeeshop_len=ajax_coffee_data.length;
// alert( "BUGS_36000 ajax_ko_coffeeshop_len="+ajax_ko_coffeeshop_len+" ajax_coffee_data="+ajax_coffee_data );
// if( ajax_ko_coffeeshop_psv != "" ) {
// if( ajax_ko_coffeeshop_len > 1 ) {
var coffee_data=ajax_ko_coffeeshop_psv.split("\n");
ko_coffeeshop_len=coffee_data.length;
// alert( "BUGS_36001 AJAX len="+ko_coffeeshop_len+" ajax_ko_coffeeshop_psv="+ajax_ko_coffeeshop_psv );
// }
// else {
// var coffee_data=ko_coffeeshop_psv.split("\n");
// ko_coffeeshop_len=coffee_data.length;
// alert( "BUGS_36002 EMBED len="+ko_coffeeshop_len+" ko_coffeeshop_psv="+ko_coffeeshop_psv );
// }
// var coffee_data=ko_coffeeshop_psv.split("\n");
// ko_coffeeshop_len=coffee_data.length;
// ajax_ko('div_ko_coffeeshop_json','ka12:8000/ko.php?ko_coffeeshop&fmt=json');
// ajax_ko('div_ko_coffeeshop_psv','ka12:8000/ko.php?file=ko_coffeeshop.psv');
// ajax_ko('div_ko_coffeeshop_csv','ka12:8000/ko.php?file=ko_coffeeshop.csv');
var ko_coffeeshop_len=0;
ko_coffeeshop_len=coffee_data.length;
// alert( "BUGS_36003 coffee_data len="+ko_coffeeshop_len+" coffee_data="+coffee_data );
// alert( "BUGS_37011 coffee_data len="+ko_coffeeshop_len+" coffee_data1="+coffee_data[1] );
// alert( "BUGS_37012 coffee_data len="+ko_coffeeshop_len+" coffee_data2="+coffee_data[2] );
j=0; k=0; jj=0; kk=0;
htmout = "";
// for( j=0; j<ko_coffeeshop_len; j++ ) {
// htmout += "j=<b>"+j+"</b> row="+coffee_data[j]+"<br>\n";
// }
j=0;
htmtbl_main="";
htmtbl_coffee="";
htmtbl_media="";
htmtbl_smedia="";
htmtbl_views="";
htmtbl_contacts="";
htmtbl_notes="";
default_id="id";
default_grp="/grp";
default_coffee_url="https://buymeacoffee.com/RoyalOne";
default_fb="/fb";
default_pdf="/pdf";
default_gif="";
default_mp3="";
default_mp4="";
default_bc="";
default_rm="";
default_vm="";
default_yt="";
default_fab="https://facebook.com";
default_gab="https://gab.com";
default_pl="https://parlor.com";
default_pt="https://pinterest.com";
default_ss="https://substack.com";
default_ts="https://truthsocial.com";
default_ts="https://twitter.com";
default_jitsi="https://jitsi.com";
default_chat="";
default_btc="https://bitcoin.com";
default_eth="https://etherium.com";
default_shopify="https://shopify.com";
default_squareup="https://squareup.com";
default_stripe="https://stripe.com";
default_dr="https://thedukereport.com";
default_dm="https://dailymail.com";
default_gp="https://thegatewaypundant.com";
default_js="https://jimstone.com";
default_wm="https://whatdoesitmean.com";
default_zh="https://zerohedge.com";
default_pn="index_pn.html";
default_sl="/index_sl.html";
default_tl="/index_tl.html";
default_zm="/index_zm.html";
// alert( "BUGS_36801 ko_coffeeshop_len="+ko_coffeeshop_len );
for( j=0; j<ko_coffeeshop_len; j++ ) {
if( coffee_data[j] == "" ) { continue; }
if( coffee_data[j] == "\n" ) { continue; }
if( coffee_data[j].match(/^#/)) { continue; }
// if( hostname.match(/ka12/) || ( hostname.match(/ka1/)) { }
// alert( "BUGS_37101 j="+j+" coffee_data="+coffee_data[j] );
col=0;
rowno=coffee_data[j].split("|")[col++];
ord=coffee_data[j].split("|")[col++];
no=coffee_data[j].split("|")[col++];
id=coffee_data[j].split("|")[col++];
status=coffee_data[j].split("|")[col++];
dttm=coffee_data[j].split("|")[col++];
grp=coffee_data[j].split("|")[col++];
item=coffee_data[j].split("|")[col++];
logo=coffee_data[j].split("|")[col++];
if( id === undefined ) { continue; }
if( id === "id" ) { continue; }
// if( id === "" ) { continue; }
// alert( "BUGS_37102 j="+j+" id="+id+" coffee_data="+coffee_data[j] );
coffee_id=coffee_data[j].split("|")[col++];
coffee_url=coffee_data[j].split("|")[col++];
coffee_url="https://buymeacoffee.com/RoyalOne?to="+id;
coffee_href="<a href="+coffee_url+" target=_blank><img src=/imgs/btn/buymeacoffee.png height=20 border=0></a>\n";
coffee_tn=coffee_data[j].split("|")[col++];
fb=coffee_data[j].split("|")[col++];
fbtxt=coffee_data[j].split("|")[col++];
pdf=coffee_data[j].split("|")[col++];
pdftxt=coffee_data[j].split("|")[col++];
gif=coffee_data[j].split("|")[col++];
giftxt=coffee_data[j].split("|")[col++];
// alert( "BUGS_37103 j="+j+" id="+id+"\n fb="+fb+"\n pdf="+pdf+"\n coffee_data="+coffee_data[j] );
mp3=coffee_data[j].split("|")[col++];
mp3txt=coffee_data[j].split("|")[col++];
mp4=coffee_data[j].split("|")[col++];
mp4txt=coffee_data[j].split("|")[col++];
bc=coffee_data[j].split("|")[col++];
bctxt=coffee_data[j].split("|")[col++];
rm="https://rumble.com";
vm="https://vimeo.com";
yt=coffee_data[j].split("|")[col++];
yttxt=coffee_data[j].split("|")[col++];
pn=coffee_data[j].split("|")[col++];
pntxt=coffee_data[j].split("|")[col++];
sl=coffee_data[j].split("|")[col++];
sltxt=coffee_data[j].split("|")[col++];
tl=coffee_data[j].split("|")[col++];
tltxt=coffee_data[j].split("|")[col++];
tx=coffee_data[j].split("|")[col++];
txtxt=coffee_data[j].split("|")[col++];
zm=coffee_data[j].split("|")[col++];
zmtxt=coffee_data[j].split("|")[col++];
hostid=coffee_data[j].split("|")[col++];
host=coffee_data[j].split("|")[col++];
home=coffee_data[j].split("|")[col++];
name=coffee_data[j].split("|")[col++];
email=coffee_data[j].split("|")[col++];
phn=coffee_data[j].split("|")[col++];
fab=coffee_data[j].split("|")[col++];
gab=coffee_data[j].split("|")[col++];
pl=coffee_data[j].split("|")[col++];
pt=coffee_data[j].split("|")[col++];
ss=coffee_data[j].split("|")[col++];
ts=coffee_data[j].split("|")[col++];
tw=coffee_data[j].split("|")[col++];
jitsi=coffee_data[j].split("|")[col++];
chat=coffee_data[j].split("|")[col++];
btc=coffee_data[j].split("|")[col++];
bittxt=coffee_data[j].split("|")[col++];
eth=coffee_data[j].split("|")[col++];
ethtxt=coffee_data[j].split("|")[col++];
shopify=coffee_data[j].split("|")[col++];
shopifytxt=coffee_data[j].split("|")[col++];
squareup=coffee_data[j].split("|")[col++];
squareuptxt=coffee_data[j].split("|")[col++];
stripe=coffee_data[j].split("|")[col++];
stripetxt=coffee_data[j].split("|")[col++];
itm=coffee_data[j].split("|")[col++];
cnt=coffee_data[j].split("|")[col++];
amt=coffee_data[j].split("|")[col++];
note=coffee_data[j].split("|")[col++];
jj=0; kk=0;
htmtbl_main="";
htmtbl_coffee="";
htmtbl_books="";
htmtbl_media="";
htmtbl_views="";
htmtbl_contacts="";
htmtbl_smedia="";
htmtbl_notes="";
if(( id == "" ) || ( id == "id" )) { id= default_id; }
if(( fb == "" ) || ( fb == "fb" )) { fb= default_fb; }
if(( pdf == "" ) || ( pdf == "pdf" )) { pdf= default_pdf; }
if(( gif == "" ) || ( gif == "gif" )) { gif= default_gif; }
if(( mp3 == "" ) || ( mp3 == "mp3" )) { mp3= default_mp3; }
if(( mp4 == "" ) || ( mp4 == "mp4" )) { mp4= default_mp4; }
if(( bc == "" ) || ( bc == "bc" )) { bc= default_bc; }
if(( rm == "" ) || ( rm == "rm" )) { rm= default_rm; }
if(( yt == "" ) || ( yt == "yt" )) { yt= default_yt; }
if(( fab == "" ) || ( fab == "fab" )) { fab= default_fab; }
if(( gab == "" ) || ( gab == "gab" )) { gab= default_gab; }
if(( pl == "" ) || ( pl == "pl" )) { pl= default_pl; }
if(( pt == "" ) || ( pt == "pt" )) { pt= default_pt; }
if(( ss == "" ) || ( ss == "ss" )) { ss= default_ss; }
if(( ts == "" ) || ( ts == "ts" )) { ts= default_ts; }
if(( tw == "" ) || ( tw == "tw" )) { tw= default_tw; }
if(( jitsi == "" ) || ( jitsi == "jitsi" )) { jitsi= default_jitsi; }
if(( chat == "" ) || ( chat == "chat" )) { chat= default_chat; }
if(( btc == "" ) || ( btc == "bitcoin" )) { btc= default_btc; }
if(( eth == "" ) || ( eth == "etherium" )) { eth= default_eth; }
if(( shopify == "" ) || ( shopify == "shopify" )) { shopify= default_shopify; }
if(( squareup == "" ) || ( squareup == "squareup" )) { squareup= default_squareup; }
if(( stripe == "" ) || ( stripe == "stripe" )) { stripe= default_stripe; }
dr=""; dm=""; js=""; gp=""; wm=""; zh="";
if(( dr == "" ) || ( dr == "dr" )) { dr= default_dr; }
if(( dm == "" ) || ( dm == "dm" )) { dm= default_dm; }
if(( js == "" ) || ( js == "js" )) { js= default_js; }
if(( gp == "" ) || ( gp == "gp" )) { gp= default_gp; }
if(( wm == "" ) || ( wm == "wm" )) { wm= default_wm; }
if(( zh == "" ) || ( zh == "zh" )) { zh= default_zh; }
if(( pn == "" ) || ( pn == "pn" )) { pn= default_pn; }
if(( sl == "" ) || ( sl == "sl" )) { sl= default_sl; }
if(( tl == "" ) || ( tl == "tl" )) { tl= default_tl; }
if(( zm == "" ) || ( zm == "zm" )) { zm= default_zm; }
// err 401 coffee_url="https://buymeacoffee.com/RoyalOne&tip="+id;
coffee_url="https://buymeacoffee.com/RoyalOne";
coffee_tn="/imgs/btn/logo_buymeacoffee.png";
fb_tn=fb+"/pages/tn/tn_1.png";
pdf_tn="/imgs/btn/btn_pdf1.png";
gif_tn=gif;
gif=gif_tn.replace("/tn/tn_","");
mp3_tn="/imgs/btn/koeye_mp3.png";
mp4_tn="/imgs/btn/koeye_mp4.png";
bc_tn="/imgs/btn/koeye_bitchute.png";
rm_tn="/imgs/btn/koeye_rumble.png";
vm_tn="/imgs/btn/koeye_vimeo.png";
yt_tn="/imgs/btn/koeye_youtube.png";
if( fb.match(/polly/)) { fb="/fb/"+id; }
if( fb == "" ) { fb="/fb"+id; }
if( fb == "polly" ) { fb="/fb"+id; }
fb_url="/fb/"+id;
fb_tn="/fb/"+id+"/pages/tn/tn_1.png";
// alert( "BUGS_38000 fb="+fb+" fb_url="+fb_url+" id="+id );
coffee_href="<a href="+coffee_url+" target=_blank><img src="+coffee_tn+" border=0></a>";
fb_href="<a href="+fb_url+" target=_blank><img src="+fb_tn+" border=0 height=100></a>";
pdf_href="<a href="+pdf+" target=_blank><img src="+pdf_tn+" border=0 height=40></a>";
gif_href="<a href="+gif+" target=_blank><img src="+gif_tn+" border=0 height=100></a>";
mp3_href="<a href="+mp3+" target=_blank><img src="+mp3_tn+" border=0 height=50></a>";
mp4_href="<a href="+mp4+" target=_blank><img src="+mp4_tn+" border=0 height=50></a>";
bc_href="<a href="+bc+" target=_blank><img src="+bc_tn+" border=0 height=50></a>";
rm_href="<a href="+rm+" target=_blank><img src="+rm_tn+" border=0 height=50></a>";
vm_href="<a href="+vm+" target=_blank><img src="+vm_tn+" border=0 height=50></a>";
yt_href="<a href="+yt+" target=_blank><img src="+yt_tn+" border=0 height=50></a>";
htmout += "<table>\n";
htmout += "<tr>";
htmout += "<td width=200>";
htmout += "<img id=img_ko_coffeeshop_"+id+" src=/imgs/btn/koeyeb.png height=15 onclick=\"toggle('div_ko_coffeeshop_"+id+"'); return false;\" height=20><b><font size=100>"+id+"</font></b>";
htmout += "</td>";
htmout += "<td>("+j+","+k+")</td>";
htmout += "<td>"+grp+"</td>";
// htmout += "<td width=100><font size=100>"+id+"</font></td>";
htmout += "<td>"+coffee_href+"</td>";
htmout += "<td>";
htmout += pdf_href;
htmout += fb_href;
htmout += "     ";
htmout += gif_href;
htmout += mp3_href;
htmout += mp4_href;
htmout += bc_href;
htmout += rm_href;
htmout += vm_href;
htmout += yt_href;
htmout += "</td>\n";
htmout += "</tr>\n";
htmout += "</table>\n";
htmout += "<hr color=white>\n";
htmout += "<div id=div_ko_coffeeshop_"+id+" hidden>\n";
htmout += " <h2>ko_coffeeshop_"+id+"</h2>\n";
htmout += "<br>\n";
// htmout += " <div id=div_ko_coffeeshop_"+id+" hidden>\n";
htmtbl_main += "<div id=div_coffeeshop_table_main>\n";
htmtbl_main += "<h2>ko_coffeeshop_table_main</h2>\n";
htmtbl_main += "<table id=ko_coffeeshop_table_main>\n";
htmtbl_coffee += "<div id=div_coffeeshop_table_coffee>\n";
htmtbl_coffee += "<h2>ko_coffeeshop_table_coffee</h2>\n";
htmtbl_coffee += "<table id=ko_coffeeshop_table_coffee>\n";
htmtbl_books += "<div id=div_ko_coffeeshop_table_books>\n";
htmtbl_books += "<h2>ko_coffeeshop_table_books</h2>\n";
htmtbl_books += "<table id=ko_coffeeshop_table_books>\n";
htmtbl_media += "<div id=div_coffeeshop_table_media>\n";
htmtbl_media += "<h2>ko_coffeeshop_table_media</h2>\n";
htmtbl_media += "<table id=ko_coffeeshop_table_media>\n";
htmtbl_media += "<tr><td>groups</td><td>links</td></tr>\n";
htmtbl_views += "<div id=div_coffeeshop_table_views>\n";
htmtbl_views += "<h2>ko_coffeeshop_table_views</h2>\n";
htmtbl_views += "<table id=ko_coffeeshop_table_views>\n";
htmtbl_contacts += "<div id=div_coffeeshop_table_contacts>\n";
htmtbl_contacts += "<h2>ko_coffeeshop_table_contacts</h2>\n";
htmtbl_contacts += "<table id=ko_coffeeshop_table_contacts>\n";
htmtbl_smedia += "<div id=div_coffeeshop_table_smedia>\n";
htmtbl_smedia += "<h2>ko_coffeeshop_table_smedia</h2>\n";
htmtbl_smedia += "<table id=ko_coffeeshop_table_smedia>\n";
htmtbl_notes += "<div id=div_coffeeshop_table_notes>\n";
htmtbl_notes += "<h2>ko_coffeeshop_table_notes</h2>\n";
htmtbl_notes += "<table id=ko_coffeeshop_table_notes>\n";
// htmtbl_main += "<tr><td>"+j+"</td><td>"+coffee_data[j]+"</td></tr>\n";
if( pdf == "" ) { pdf="/pdf/konet.pdf"; }
if( mp3 == "" ) { mp3="/kb/aud/mp3/library_of_congress.mp3"; }
if( mp4 == "" ) { mp3="/index1_avril.mp4"; }
if( fb == "" ) { fb="/fb"; }
if( txt == "" ) { txt="/notes.txt"; }
if( bc == "" ) { bc="bitchute.com"; }
if( yt == "" ) { yt="youtube.com"; }
if( fab == "" ) { fab="facebook.com"; }
if( ss == "" ) { ss="substack.com"; }
if( tw == "" ) { tw="twitter.com"; }
if( pl == "" ) { pl="parler.com"; }
if( pt == "" ) { pt="pinterest.com"; }
if( jitsi == "" ) { jitsi="jitsi.com"; }
if( chat == "" ) { chat="chat.com"; }
fb_href="<a href=/fb/"+fb+" _blank><img src=/fb/"+fb+"/pages/tn/tn_1.png height=100></a>\n";
pdf_href="<a href=/pdf/web/viewer.html?file="+pdf+" _blank><img src=/imgs/btn/btn_pdf1.png height=25></a>\n";
giftn=gif;
gif=giftn.replace("/tn/tn_","");
gif_href="<a href="+gif+" _blank><img src="+giftn+" height=100></a>\n";
mp3_href="<a href="+mp3+" _blank><img src=/imgs/btn/koeyeb_mp3.png height=25></a>\n";
mp4_href="<a href="+mp4+" _blank><img src=/imgs/btn/koeyeb_mp4.png height=25></a>\n";
bc_href="<a href="+bc+" _blank><img src=/imgs/btn/koeyeb_bitchute.png height=25></a>\n";
yt_href="<a href="+yt+" _blank><img src=/imgs/btn/koeyeb_youtube.png height=25></a>\n";
tx_href="<a href="+txt+" _blank><img src=/imgs/btn/koeyeb_txt.png height=25></a>\n";
fab_href="<a href="+fab+" _blank><img src=/imgs/btn/koeyeb_facebook.png height=25></a>\n";
gab_href="<a href="+gab+" _blank><img src=/imgs/btn/koeyeb_gab.png height=25></a>\n";
pl_href="<a href="+pl+" _blank><img src=/imgs/btn/koeyeb_parler.png height=25></a>\n";
pt_href="<a href="+pt+" _blank><img src=/imgs/btn/koeyeb_pinterest.png height=25></a>\n";
ss_href="<a href="+ss+" _blank><img src=/imgs/btn/koeyeb_substack.png height=25></a>\n";
ts_href="<a href="+tw+" _blank><img src=/imgs/btn/koeyeb_twitter.png height=25></a>\n";
tw_href="<a href="+ts+" _blank><img src=/imgs/btn/koeyeb_truthsocial.png height=25></a>\n";
jitsi_href="<a href="+jitsi+" _blank><img src=/imgs/btn/koeyeb_jitsi.png height=25></a>\n";
chat_href="<a href="+chat+" _blank><img src=/imgs/btn/koeyeb_chat.png height=25></a>\n";
// alert( "BUGS_3000 htmtbl_media="+htmtbl_media );
htmtbl_main += "<tr>";
htmtbl_main += "<td>"+rowno+"</td>";
htmtbl_main += "<td>"+ord+"</td>";
htmtbl_main += "<td>"+no+"</td>";
htmtbl_main += "<td>"+id+"</td>";
htmtbl_main += "<td>"+status+"</td>";
htmtbl_main += "<td>"+dttm+"</td>";
htmtbl_main += "<td>"+grp+"</td>";
htmtbl_main += "<td>"+item+"</td>";
htmtbl_main += "<td>"+logo+"</td>";
htmtbl_main += "</tr>";
htmtbl_coffee += "<tr>";
htmtbl_coffee += "<td>"+coffee_id+"</td>";
// htmtbl_coffee += "<td>"+coffee_url+"</td>";
htmtbl_coffee += "<td>"+coffee_href+"</td>";
htmtbl_coffee += "<td>"+coffee_tn+"</td>";
htmtbl_coffee += "</tr>";
htmtbl_books += "<tr>";
htmtbl_books += "<td>"+fb_href+"</td><td>"+fbtxt+"</td></tr>\n";
htmtbl_books += "<td>"+pdf_href+"</td><td>"+pdftxt+"</td></tr>\n";
htmtbl_books += "<td>"+gif_href+"</td><td>"+giftxt+"</td></tr>\n";
htmtbl_books += "</tr>\n";
// htmtbl_media += "<tr>\n";
// htmtbl_media += "<td>"+mp3_href+"</td><td>"+mp3txt+"</td></tr>\n";
// htmtbl_media += "<td>"+mp4_href+"</td><td>"+mp4txt+"</td></tr>\n";
// htmtbl_media += "<td>"+bc_href+"</td><td>"+bctxt+"</td></tr>\n";
// htmtbl_media += "<td>"+yt_href+"</td><td>"+yttxt+"</td></tr>\n";
// htmtbl_media += "</tr>\n";
htmtbl_media += "<tr>";
htmtbl_media += "<td>media</td>";
htmtbl_media += "<td>"+fb_href+"</td>";
htmtbl_media += "<td>"+pdf_href+"</td>";
htmtbl_media += "<td>"+gif_href+"</td>";
htmtbl_media += "<td>"+mp3_href+"</td>";
htmtbl_media += "<td>"+mp4_href+"</td>";
htmtbl_media += "<td>"+bc_href+"</td>";
htmtbl_media += "<td>"+yt_href+"</td>";
htmtbl_media += "<td>"+""+"</td>";
htmtbl_media += "</tr>\n";
// alert( "BUGS_37450 htmtbl_media="+htmtbl_media );
htmtbl_views += "<tr>";
htmtbl_views += "<td>"+pn+"</td><td>"+pntxt+"</td></tr>";
htmtbl_views += "<td>"+sl+"</td><td>"+sltxt+"</td></tr>";
htmtbl_views += "<td>"+tl+"</td><td>"+tltxt+"</td></tr>";
htmtbl_views += "<td>"+tx+"</td><td>"+txtxt+"</td></tr>";
htmtbl_views += "<td>"+zm+"</td><td>"+zmtxt+"</td></tr>";
htmtbl_views += " </tr>\n";
htmtbl_media += "<tr>";
htmtbl_media += "<td>views</td>";
htmtbl_media += "<td>"+pn+"</td>";
htmtbl_media += "<td>"+sl+"</td>";
htmtbl_media += "<td>"+tl+"</td>";
htmtbl_media += "<td>"+tx+"</td>";
htmtbl_media += "<td>"+""+"</td>";
htmtbl_media += "<td>"+""+"</td>";
htmtbl_media += "<td>"+""+"</td>";
htmtbl_media += "<td>"+""+"</td>";
htmtbl_media += "</tr>";
htmtbl_contacts += "<tr>";
htmtbl_contacts += "<td>"+hostid+"</td>";
htmtbl_contacts += "<td>"+host+"</td>";
htmtbl_contacts += "<td>"+home+"</td>";
htmtbl_contacts += "<td>"+name+"</td>";
htmtbl_contacts += "<td>"+email+"</td>";
htmtbl_contacts += "<td>"+phn+"</td>";
htmtbl_contacts += " </tr>\n";
htmtbl_smedia += "<tr>";
htmtbl_smedia += "<td>"+fab_href+"</td>";
htmtbl_smedia += "<td>"+gab_href+"</td>";
htmtbl_smedia += "<td>"+pl_href+"</td>";
htmtbl_smedia += "<td>"+pt_href+"</td>";
htmtbl_smedia += "<td>"+ss_href+"</td>";
htmtbl_smedia += "<td>"+ts_href+"</td>";
htmtbl_smedia += "<td>"+tw_href+"</td>";
htmtbl_smedia += "<td>"+jitsi_href+"</td>";
htmtbl_smedia += "<td>"+chat_href+"</td>";
htmtbl_smedia += " </tr>\n";
fab_href="https://facebook.com";
gab_href="https://gab.com";
pl_href="https://parler.com";
pt_href="https://pinterest.com";
ss_href="https://substack.com";
ts_href="https://truthsocial.com";
tw_href="https://twitter.com";
jitsi_href="https://jitsi.com";
chat_href="https://chat.com";
htmtbl_media += "<tr>";
htmtbl_media += "<td>smedia</td>";
htmtbl_media += "<td>"+fab_href+"</td>";
htmtbl_media += "<td>"+gab_href+"</td>";
htmtbl_media += "<td>"+pl_href+"</td>";
htmtbl_media += "<td>"+pt_href+"</td>";
htmtbl_media += "<td>"+ss_href+"</td>";
htmtbl_media += "<td>"+ts_href+"</td>";
htmtbl_media += "<td>"+tw_href+"</td>";
htmtbl_media += "<td>"+jitsi_href+"</td>";
htmtbl_media += "<td>"+chat_href+"</td>";
htmtbl_media += "</tr>\n";
// alert( "BUGS_37200 htmtbl_media="+htmtbl_media );
dm_url="https://www.dailymail.co.uk/ushome/index.html";
dr_url="https://thedukereport.com";
gp_url="https://thegatewaypundent.com";
housatonic_url="https://housatonicit.com";
js_url="https://jimstoneindia.com";
webb_url="https://twitter.com/RealGeorgeWebb1";
wm_url="https://www.whatdoesitmean.com";
zh_url="https://zerohedge.com";
dm_href="<a href="+dm_url+" target=_blank><img src=/imgs/btn/koeye.png height=20></a>";
dr_href="<a href="+dr_url+" target=_blank><img src=/imgs/btn/koeye.png height=20></a>";
gp_href="<a href="+gp_url+" target=_blank><img src=/imgs/btn/koeye.png height=20></a>";
housatonic_href="<a href="+housatonic_url+" target=_blank><img src=/imgs/btn/koeye.png height=20></a>";
js_href="<a href="+js_url+" target=_blank><img src=/imgs/btn/koeye.png height=20></a>";
webb_href="<a href="+webb_url+" target=_blank><img src=/imgs/btn/koeye.png height=20></a>";
wm_href="<a href="+wm_url+" target=_blank><img src=/imgs/btn/koeye.png height=20></a>";
zh_href="<a href="+zh_url+" target=_blank><img src=/imgs/btn/koeye.png height=20></a>";
htmtbl_media += "<tr>";
htmtbl_media += "<td>amedia</td>";
htmtbl_media += "<td>"+dm_href+"</td>";
htmtbl_media += "<td>"+dr_href+"</td>";
htmtbl_media += "<td>"+gp_href+"</td>";
htmtbl_media += "<td>"+wm_href+"</td>";
htmtbl_media += "<td>"+housatonic_href+"</td>";
htmtbl_media += "<td>"+js_href+"</td>";
htmtbl_media += "<td>"+webb_href+"</td>";
htmtbl_media += "<td>"+wm_href+"</td>";
htmtbl_media += "<td>"+zh_href+"</td>";
htmtbl_media += "</tr>\n";
// alert("BUGS_37300 ko_coffeeshop j="+j+" id="+" htmtbl_media="+htmtbl_media);
// continue;
htmtbl_notes += "<tr>";
htmtbl_notes += "<td>"+itm+"</td>";
htmtbl_notes += "<td>"+cnt+"</td>";
htmtbl_notes += "<td>"+amt+"</td>";
htmtbl_notes += "<td>"+note+"</td>";
htmtbl_notes += " </tr>\n";
// alert("BUGS_36700 ko_coffeeshop j="+j+" id="+id);
// continue;
htmtbl_main += " </table id=ko_coffeeshop_table_main_end>\n";
htmtbl_main += " </div id=dov_ko_coffeeshop_table_main_end>\n";
htmtbl_coffee += " </table id=ko_coffeeshop_table_coffee_end>\n";
htmtbl_coffee += " </div id=dov_ko_coffeeshop_table_coffee_end>\n";
htmtbl_books += " </table id=ko_coffeeshop_table_books_end>\n";
htmtbl_books += " </div id=dov_ko_coffeeshop_table_books_end>\n";
htmtbl_media += " </table id=ko_coffeeshop_table_media_end_end>\n";
htmtbl_media += " </div id=dov_ko_coffeeshop_table_media_end>\n";
htmtbl_views += " </table id=ko_coffeeshop_table_views_end>\n";
htmtbl_views += " </div id=dov_ko_coffeeshop_table_views_end>\n";
htmtbl_contacts += " </table id=ko_coffeeshop_table_contacts_end>\n";
htmtbl_contacts += " </div id=dov_ko_coffeeshop_table_contacts_end>\n";
htmtbl_smedia += " </table id=ko_coffeeshop_table_smedia_end>\n";
htmtbl_smedia += " </div id=dov_ko_coffeeshop_table_smedia_end>\n";
htmtbl_notes += " </table id=ko_coffeeshop_table_notes_ends>\n";
htmtbl_notes += " </div id=dov_ko_coffeeshop_table_notes_end>\n";
htmout += htmtbl_main;
htmout += htmtbl_coffee;
// htmout += htmtbl_books;
htmout += htmtbl_media;
// htmout += htmtbl_views;
htmout += htmtbl_smedia;
htmout += htmtbl_contacts;
htmout += htmtbl_notes;
// htmout += " </div id=div_ko_coffeeshop_"+coffee_id+"_end>\n";
htmout += " </div id=div_ko_coffeeshop_"+id+"_end>\n";
htmout += "<hr color=red>\n";
htmout += "<hr color=red>\n";
}
// alert( "BUGS_37090 div_ko_coffeeshop htmout="+htmout );
if( document.getElementById("div_ko_coffeeshop")) {
// alert( "BUGS_37091 div_ko_coffeeshop htmout="+htmout );
document.getElementById("div_ko_coffeeshop").innerHTML=htmout;
}
else {
// alert( "BUGS_37092 NOTFOUND div_ko_coffeeshop" );
}
// alert( "BUGS_37099 ko_coffeeshop END" );
// alert( "ko_coffeeshop\n"+bugalert_tour );
// alert("BUGS_36011 ko_coffeeshop args="+args);
// section flds
// main rowno|ord|no|id|status|dttm|grp|item|logo|
// coffee coffee_id|coffee_url|coffee_tn|
// books fb|fbtxt|pdf|pdftxt|gif|giftxt|
// media mp3|mp3txt|mp4|mp4txt|bc|bctxt|yt|yttxt|
// views pn|pntxt|sl|sltxt|tl|tltxt|tx|txtxt|zm|zmtxt|
// contacts hostid|host|home|name|email|phn|"
// smedia fab|gab|pl|pt|ss|ts|tw|jitsi|chat|
// notes itm|cnt|amt|note
// alert( "BUGS_36600 ko_coffeeshop DONE htmout="+htmout );
}
</script>
<hr color=white>
<hr color=black>
<img src=/imgs/btn/koeye.png id=img_fbs
onclick="toggle('div_fbs'); return false;" height=25>div_fbs
<hr color=goldenrod>
<div id=div_fbs hidden>
<h2>div_fbs</h2>
<img src="/imgs/btn/kop1234.png" onclick="startup(''); return false;">
       
<img src="/imgs/btn/kop23.png" onclick="startup('fb.txt'); return false;">
<img src="/imgs/btn/kop23.png" onclick="startup('/fb/fb.txt'); return false;">
<img src="/imgs/btn/kop23.png" onclick="startup('/fb/konet/fb.txt'); return false;">
<img src="/imgs/btn/kop23.png" onclick="startup('/fb/iperms/fb.txt'); return false;">
<img src="/imgs/btn/kop23.png" onclick="startup('/fb/ko1/fb.txt'); return false;">
<hr color=white>
<h2>div_yts<h2>
<img src="/imgs/btn/kop14.png" onclick="startup('/yt/txt/ytlist.txt'); return false;">
<img src="/imgs/btn/kop14.png" onclick="startup('/yt/txt/ytlist_20200401.txt'); return false;">
<img src="/imgs/btn/kop14.png" onclick="startup('/yt/txt/ytlist_20200402.txt'); return false;">
<img src="/imgs/btn/kop12.png" onclick="startup('/yt/txt/ytlist_20200403.txt'); return false;">
<hr color=white>
<h2>div_notes</h2>
<img src="/imgs/btn/kop14.png" onclick="startup('notfound.txt'); return false;">
<img src="/imgs/btn/kop14.png" onclick="startup('notes.txt'); return false;">
<img src="/imgs/btn/kop14.png" onclick="startup('find_jtfdcr_mp4.txt'); return false;">
<img src="/imgs/btn/kop1.png" onclick="startup('notfound.txt'); return false;">
<img src="/imgs/btn/kop4.png" onclick="startup('notfound.txt'); return false;">
<hr color=white>
<hr color=black>
</div id=div_fbs_end>
<br><br>
<hr color=goldenrod>
<hr color=goldenrod>
<!--
<div id="canvas_fb">
<div class="zoom-icon zoom-icon-in"></div>
<div class="magazine-viewport">
<div class="container">
<div class="magazine">
-->
<!-- Next button -->
<!--
<div ignore="1" class="next-button"></div>
-->
<!-- Previous button -->
<!--
<div ignore="1" class="previous-button"></div>
</div>
</div>
</div>
-->
<!-- Thumbnails -->
<!--
<div id="div_tn"></div>
<div class="thumbnails" >
<div>
<ul>
<li class="i">
<img src="pages/tn/tn_1.png" width="76" height="100" class="page-1">
<span>1</span>
</li>
<li class="d">
<img src="pages/tn/tn_2.png" width="76" height="100" class="page-2">
<img src="pages/tn/tn_3.png" width="76" height="100" class="page-3">
<span>2-3</span>
</li>
<li class="d">
<img src="pages/tn/tn_4.png" width="76" height="100" class="page-4">
<img src="pages/tn/tn_5.png" width="76" height="100" class="page-5">
<span>4-5</span>
</li>
<li class="d">
<img src="pages/tn/tn_6.png" width="76" height="100" class="page-6">
<img src="pages/tn/tn_7.png" width="76" height="100" class="page-7">
<span>6-7</span>
</li>
<li class="d">
<img src="pages/tn/tn_8.png" width="76" height="100" class="page-8">
<img src="pages/tn/tn_9.png" width="76" height="100" class="page-9">
<span>8-9</span>
</li>
<li class="d">
<img src="pages/tn/tn_10.png" width="76" height="100" class="page-10">
<img src="pages/tn/tn_11.png" width="76" height="100" class="page-11">
<span>10-11</span>
</li>
<li class="d">
<img src="pages/tn/tn_12.png" width="76" height="100" class="page-12">
<img src="pages/tn/tn_13.png" width="76" height="100" class="page-13">
<span>12-13</span>
</li>
<li class="d">
<img src="pages/tn/tn_14.png" width="76" height="100" class="page-14">
<img src="pages/tn/tn_15.png" width="76" height="100" class="page-15">
<span>14-15</span>
</li>
<li class="d">
<img src="pages/tn/tn_16.png" width="76" height="100" class="page-14">
<img src="pages/tn/tn_17.png" width="76" height="100" class="page-15">
<span>16-17</span>
</li>
<li class="i">
<img src="pages/tn/tn_18.png" width="76" height="100" class="page-16">
<span>18</span>
</li>
<ul>
<div> </div>
</div>
-->
<script id="script_fbload" type="text/javascript">
// function loadApp() {
function fbload() {
// $('#canvas').fadeIn(1000);
// $('#canvas_fb').fadeIn(1000);
$('#canvas_fb_magazine').fadeIn(1000);
var flipbook = $('.magazine');
// Check if the CSS was already loaded
if (flipbook.width()==0 || flipbook.height()==0) {
// setTimeout(loadApp, 10);
setTimeout(fbload, 10);
return;
}
// Create the flipbook
flipbook.turn({
// Magazine width
// Magazine height
// Duration in millisecond
// Hardware acceleration
// Enables gradients
// Auto center this flipbook
// Elevation from the edge of the flipbook when turning a page
width: 922,
height: 600,
duration: 1000,
acceleration: !isChrome(),
gradients: true,
autoCenter: true,
elevation: 50,
// The number of pages
// pagelimit pages_len lastpage
// pages: 12,
// pages: 16,
// pages: 758,
pages: 5368,
// Events
when: {
turning: function(event, page, view) {
var book = $(this),
currentPage = book.turn('page'),
pages = book.turn('pages');
// Update the current URI
Hash.go('page/' + page).update();
// Show and hide navigation buttons
disableControls(page);
$('.thumbnails .page-'+currentPage).
parent().
removeClass('current');
$('.thumbnails .page-'+page).
parent().
addClass('current');
},
turned: function(event, page, view) {
disableControls(page);
$(this).turn('center');
if (page==1) {
$(this).turn('peel', 'br');
}
},
missing: function (event, pages) {
// Add pages that aren't in the magazine
for (var i = 0; i < pages.length; i++)
addPage(pages[i], $(this));
}
}
});
// Zoom.js
$('.magazine-viewport').zoom({
flipbook: $('.magazine'),
max: function() {
return largeMagazineWidth()/$('.magazine').width();
},
when: {
swipeLeft: function() {
$(this).zoom('flipbook').turn('next');
},
swipeRight: function() {
$(this).zoom('flipbook').turn('previous');
},
resize: function(event, scale, page, pageElement) {
if (scale==1)
loadSmallPage(page, pageElement);
else
loadLargePage(page, pageElement);
},
zoomIn: function () {
$('.thumbnails').hide();
$('.made').hide();
$('.magazine').removeClass('animated').addClass('zoom-in');
$('.zoom-icon').removeClass('zoom-icon-in').addClass('zoom-icon-out');
if (!window.escTip && !$.isTouch) {
escTip = true;
$('<div />', {'class': 'exit-message'}).
html('<div>Press ESC to exit</div>').
appendTo($('body')).
delay(2000).
animate({opacity:0}, 500, function() {
$(this).remove();
});
}
},
zoomOut: function () {
$('.exit-message').hide();
$('.thumbnails').fadeIn();
$('.made').fadeIn();
$('.zoom-icon').removeClass('zoom-icon-out').addClass('zoom-icon-in');
setTimeout(function(){
$('.magazine').addClass('animated').removeClass('zoom-in');
resizeViewport();
}, 0);
}
}
});
// Zoom event
if ($.isTouch)
$('.magazine-viewport').bind('zoom.doubleTap', zoomTo);
else
$('.magazine-viewport').bind('zoom.tap', zoomTo);
// Using arrow keys to turn the page
$(document).keydown(function(e){
var previous = 37, next = 39, esc = 27;
switch (e.keyCode) {
case previous:
// left arrow
$('.magazine').turn('previous');
e.preventDefault();
break;
case next:
//right arrow
$('.magazine').turn('next');
e.preventDefault();
break;
case esc:
$('.magazine-viewport').zoom('zoomOut');
e.preventDefault();
break;
}
});
// URIs - Format #/page/1
Hash.on('^page\/([0-9]*)$', {
yep: function(path, parts) {
var page = parts[1];
if (page!==undefined) {
if ($('.magazine').turn('is'))
$('.magazine').turn('page', page);
}
},
nop: function(path) {
if ($('.magazine').turn('is'))
$('.magazine').turn('page', 1);
}
});
$(window).resize(function() {
resizeViewport();
}).bind('orientationchange', function() {
resizeViewport();
});
// Events for thumbnails
$('.thumbnails').click(function(event) {
var page;
if (event.target && (page=/page-([0-9]+)/.exec($(event.target).attr('class'))) ) {
$('.magazine').turn('page', page[1]);
}
});
$('.thumbnails li').
bind($.mouseEvents.over, function() {
$(this).addClass('thumb-hover');
}).bind($.mouseEvents.out, function() {
$(this).removeClass('thumb-hover');
});
if ($.isTouch) {
$('.thumbnails').
addClass('thumbanils-touch').
bind($.mouseEvents.move, function(event) {
event.preventDefault();
});
} else {
$('.thumbnails ul').mouseover(function() {
$('.thumbnails').addClass('thumbnails-hover');
}).mousedown(function() {
return false;
}).mouseout(function() {
$('.thumbnails').removeClass('thumbnails-hover');
});
}
// Regions
if ($.isTouch) {
$('.magazine').bind('touchstart', regionClick);
} else {
$('.magazine').click(regionClick);
}
// Events for the next button
$('.next-button').bind($.mouseEvents.over, function() {
$(this).addClass('next-button-hover');
}).bind($.mouseEvents.out, function() {
$(this).removeClass('next-button-hover');
}).bind($.mouseEvents.down, function() {
$(this).addClass('next-button-down');
}).bind($.mouseEvents.up, function() {
$(this).removeClass('next-button-down');
}).click(function() {
$('.magazine').turn('next');
});
// Events for the next button
$('.previous-button').bind($.mouseEvents.over, function() {
$(this).addClass('previous-button-hover');
}).bind($.mouseEvents.out, function() {
$(this).removeClass('previous-button-hover');
}).bind($.mouseEvents.down, function() {
$(this).addClass('previous-button-down');
}).bind($.mouseEvents.up, function() {
$(this).removeClass('previous-button-down');
}).click(function() {
$('.magazine').turn('previous');
});
resizeViewport();
$('.magazine').addClass('animated');
}
// Zoom icon
$('.zoom-icon').bind('mouseover', function() {
if ($(this).hasClass('zoom-icon-in'))
$(this).addClass('zoom-icon-in-hover');
if ($(this).hasClass('zoom-icon-out'))
$(this).addClass('zoom-icon-out-hover');
}).bind('mouseout', function() {
if ($(this).hasClass('zoom-icon-in'))
$(this).removeClass('zoom-icon-in-hover');
if ($(this).hasClass('zoom-icon-out'))
$(this).removeClass('zoom-icon-out-hover');
}).bind('click', function() {
if ($(this).hasClass('zoom-icon-in'))
$('.magazine-viewport').zoom('zoomIn');
else if ($(this).hasClass('zoom-icon-out'))
$('.magazine-viewport').zoom('zoomOut');
});
$('#canvas').hide();
// Load the HTML4 version if there's not CSS transform
yepnope({
// test : Modernizr.csstransforms,
// yep: ['../../lib/turn.js'],
// yep: ['data:/text/plain;base64,LyoqCiAqIHR1cm4uanMgNHRoIHJlbGVhc2UKICogdHVybmpzLmNvbQogKiB0dXJuanMuY29tL2xpY2Vuc2UudHh0CiAqCiAqIENvcHlyaWdodCAoQykgMjAxMiBFbW1hbnVlbCBHYXJjaWEKICogQWxsIHJpZ2h0cyByZXNlcnZlZAogKiovCgooZnVuY3Rpb24oJCkgewoKJ3VzZSBzdHJpY3QnOwoKdmFyIGhhczNkLAogIAogIGhhc1JvdCwKCiAgdmVuZG9yID0gJycsCiAgCiAgdmVyc2lvbiA9ICc0LjEuMCcsCgogIFBJID0gTWF0aC5QSSwKCiAgQTkwID0gUEkvMiwKCiAgaXNUb3VjaCA9ICdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdywKCiAgbW91c2VFdmVudHMgPSAoaXNUb3VjaCkgPwogICAgewogICAgICBkb3duOiAndG91Y2hzdGFydCcsCiAgICAgIG1vdmU6ICd0b3VjaG1vdmUnLAogICAgICB1cDogJ3RvdWNoZW5kJywKICAgICAgb3ZlcjogJ3RvdWNoc3RhcnQnLAogICAgICBvdXQ6ICd0b3VjaGVuZCcKICAgIH0KICAgIDoKICAgIHsKICAgICAgZG93bjogJ21vdXNlZG93bicsCiAgICAgIG1vdmU6ICdtb3VzZW1vdmUnLAogICAgICB1cDogJ21vdXNldXAnLAogICAgICBvdmVyOiAnbW91c2VvdmVyJywKICAgICAgb3V0OiAnbW91c2VvdXQnCiAgICB9LAoKICAvLyBDb250YW5zdHMgdXNlZCBmb3IgZWFjaCBjb3JuZXIKICAvLyAgIHwgdGwgKiB0ciB8CiAgLy8gbCB8ICogICAgICogfCByCiAgLy8gICB8IGJsICogYnIgfAoKICBjb3JuZXJzID0gewogICAgYmFja3dhcmQ6IFsnYmwnLCAndGwnXSwKICAgIGZvcndhcmQ6IFsnYnInLCAndHInXSwKICAgIGFsbDogWyd0bCcsICdibCcsICd0cicsICdicicsICdsJywgJ3InXQogIH0sCgogIC8vIERpc3BsYXkgdmFsdWVzCgogIGRpc3BsYXlzID0gWydzaW5nbGUnLCAnZG91YmxlJ10sCgogIC8vIERpcmVjdGlvbiB2YWx1ZXMKCiAgZGlyZWN0aW9ucyA9IFsnbHRyJywgJ3J0bCddLAoKICAvLyBEZWZhdWx0IG9wdGlvbnMKCiAgdHVybk9wdGlvbnMgPSB7CgogICAgLy8gRW5hYmxlcyBoYXJkd2FyZSBhY2NlbGVyYXRpb24KCiAgICBhY2NlbGVyYXRpb246IHRydWUsCgogICAgLy8gRGlzcGxheQoKICAgIGRpc3BsYXk6ICdkb3VibGUnLAoKICAgIC8vIER1cmF0aW9uIG9mIHRyYW5zaXRpb24gaW4gbWlsbGlzZWNvbmRzCgogICAgZHVyYXRpb246IDYwMCwKCiAgICAvLyBGaXJzdCBwYWdlCgogICAgcGFnZTogMSwKICAgIAogICAgLy8gRW5hYmxlcyBncmFkaWVudHMKCiAgICBncmFkaWVudHM6IHRydWUsCgogICAgLy8gQ29ybmVycyB1c2VkIHdoZW4gdHVybmluZyB0aGUgcGFnZQoKICAgIHR1cm5Db3JuZXJzOiAnYmwsYnInLAoKICAgIC8vIEV2ZW50cwoKICAgIHdoZW46IG51bGwKICB9LAoKICBmbGlwT3B0aW9ucyA9IHsKCiAgICAvLyBTaXplIG9mIHRoZSBhY3RpdmUgem9uZSBvZiBlYWNoIGNvcm5lcgoKICAgIGNvcm5lclNpemU6IDEwMAoKICB9LAoKICAvLyBOdW1iZXIgb2YgcGFnZXMgaW4gdGhlIERPTSwgbWluaW11bSB2YWx1ZTogNgoKICBwYWdlc0luRE9NID0gNiwKICAKCnR1cm5NZXRob2RzID0gewoKICAvLyBTaW5nbGV0b24gY29uc3RydWN0b3IKICAvLyAkKCcjc2VsZWN0b3InKS50dXJuKFtvcHRpb25zXSk7CgogIGluaXQ6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKCiAgICAvLyBEZWZpbmUgY29uc3RhbnRzCiAgICAKICAgIGhhczNkID0gJ1dlYktpdENTU01hdHJpeCcgaW4gd2luZG93IHx8ICdNb3pQZXJzcGVjdGl2ZScgaW4gZG9jdW1lbnQuYm9keS5zdHlsZTsKICAgIGhhc1JvdCA9IHJvdGF0aW9uQXZhaWxhYmxlKCk7CiAgICB2ZW5kb3IgPSBnZXRQcmVmaXgoKTsKCiAgICB2YXIgaSwgdGhhdCA9IHRoaXMsIHBhZ2VOdW0gPSAwLCBkYXRhID0gdGhpcy5kYXRhKCksIGNoID0gdGhpcy5jaGlsZHJlbigpOwoKICAgIC8vIFNldCBpbml0aWFsIGNvbmZpZ3VyYXRpb24KCiAgICBvcHRpb25zID0gJC5leHRlbmQoewogICAgICB3aWR0aDogdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0KCksCiAgICAgIGRpcmVjdGlvbjogdGhpcy5hdHRyKCdkaXInKSB8fCB0aGlzLmNzcygnZGlyZWN0aW9uJykgfHwgJ2x0cicKICAgIH0sIHR1cm5PcHRpb25zLCBvcHRpb25zKTsKCiAgICBkYXRhLm9wdHMgPSBvcHRpb25zOwogICAgZGF0YS5wYWdlT2JqcyA9IHt9OwogICAgZGF0YS5wYWdlcyA9IHt9OwogICAgZGF0YS5wYWdlV3JhcCA9IHt9OwogICAgZGF0YS5wYWdlWm9vbSA9IHt9OwogICAgZGF0YS5wYWdlUGxhY2UgPSB7fTsKICAgIGRhdGEucGFnZU12ID0gW107CiAgICBkYXRhLnpvb20gPSAxOwogICAgZGF0YS50b3RhbFBhZ2VzID0gb3B0aW9ucy5wYWdlcyB8fCAwOwogICAgZGF0YS5ldmVudEhhbmRsZXJzID0gewogICAgICB0b3VjaFN0YXJ0OiAkLnByb3h5KHR1cm5NZXRob2RzLl90b3VjaFN0YXJ0LCB0aGlzKSwKICAgICAgdG91Y2hNb3ZlOiAkLnByb3h5KHR1cm5NZXRob2RzLl90b3VjaE1vdmUsIHRoaXMpLAogICAgICB0b3VjaEVuZDogJC5wcm94eSh0dXJuTWV0aG9kcy5fdG91Y2hFbmQsIHRoaXMpLAogICAgICBzdGFydDogJC5wcm94eSh0dXJuTWV0aG9kcy5fZXZlbnRTdGFydCwgdGhpcykKICAgIH07CgoKCiAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXJzCgogICAgaWYgKG9wdGlvbnMud2hlbikKICAgICAgZm9yIChpIGluIG9wdGlvbnMud2hlbikKICAgICAgICBpZiAoaGFzKGksIG9wdGlvbnMud2hlbikpCiAgICAgICAgICB0aGlzLmJpbmQoaSwgb3B0aW9ucy53aGVuW2ldKTsKCiAgICAvLyBTZXQgdGhlIGNzcwoKICAgIHRoaXMuY3NzKHtwb3NpdGlvbjogJ3JlbGF0aXZlJywgd2lkdGg6IG9wdGlvbnMud2lkdGgsIGhlaWdodDogb3B0aW9ucy5oZWlnaHR9KTsKCiAgICAvLyBTZXQgdGhlIGluaXRpYWwgZGlzcGxheQoKICAgIHRoaXMudHVybignZGlzcGxheScsIG9wdGlvbnMuZGlzcGxheSk7CgogICAgLy8gU2V0IHRoZSBkaXJlY3Rpb24KCiAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24hPT0nJykKICAgICAgdGhpcy50dXJuKCdkaXJlY3Rpb24nLCBvcHRpb25zLmRpcmVjdGlvbik7CiAgICAKICAgIC8vIFByZXZlbnQgYmx1ZSBzY3JlZW4gcHJvYmxlbXMgb2Ygc3dpdGNoaW5nIHRvIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBtb2RlCiAgICAvLyBCeSBmb3JjaW5nIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmb3IgZXZlcgoKICAgIGlmIChoYXMzZCAmJiAhaXNUb3VjaCAmJiBvcHRpb25zLmFjY2VsZXJhdGlvbikKICAgICAgdGhpcy50cmFuc2Zvcm0odHJhbnNsYXRlKDAsIDAsIHRydWUpKTsKCiAgICAvLyBBZGQgcGFnZXMgZnJvbSB0aGUgRE9NCgogICAgZm9yIChpID0gMDsgaTxjaC5sZW5ndGg7IGkrKykgewogICAgICBpZiAoJChjaFtpXSkuYXR0cignaWdub3JlJykhPScxJykgewogICAgICAgIHRoaXMudHVybignYWRkUGFnZScsIGNoW2ldLCArK3BhZ2VOdW0pOwogICAgICB9CiAgICB9CgogICAgLy8gRXZlbnQgbGlzdGVuZXJzCgogICAgJCh0aGlzKS5iaW5kKG1vdXNlRXZlbnRzLmRvd24sIGRhdGEuZXZlbnRIYW5kbGVycy50b3VjaFN0YXJ0KS4KICAgICAgYmluZCgnZW5kJywgdHVybk1ldGhvZHMuX2V2ZW50RW5kKS4KICAgICAgYmluZCgncHJlc3NlZCcsIHR1cm5NZXRob2RzLl9ldmVudFByZXNzZWQpLgogICAgICBiaW5kKCdyZWxlYXNlZCcsIHR1cm5NZXRob2RzLl9ldmVudFJlbGVhc2VkKS4KICAgICAgYmluZCgnZmxpcCcsIHR1cm5NZXRob2RzLl9mbGlwKTsKCiAgICAkKHRoaXMpLnBhcmVudCgpLmJpbmQoJ3N0YXJ0JywgZGF0YS5ldmVudEhhbmRsZXJzLnN0YXJ0KTsKCiAgICAkKGRvY3VtZW50KS5iaW5kKG1vdXNlRXZlbnRzLm1vdmUsIGRhdGEuZXZlbnRIYW5kbGVycy50b3VjaE1vdmUpLgogICAgICBiaW5kKG1vdXNlRXZlbnRzLnVwLCBkYXRhLmV2ZW50SGFuZGxlcnMudG91Y2hFbmQpOwoKICAgIC8vIFNldCB0aGUgaW5pdGlhbCBwYWdlCgogICAgdGhpcy50dXJuKCdwYWdlJywgb3B0aW9ucy5wYWdlKTsKCiAgICAvLyBUaGlzIGZsaXBib29rIGlzIHJlYWR5CgogICAgZGF0YS5kb25lID0gdHJ1ZTsKCiAgICByZXR1cm4gdGhpczsKICB9LAoKICAvLyBBZGRzIGEgcGFnZSBmcm9tIGV4dGVybmFsIGRhdGEKCiAgYWRkUGFnZTogZnVuY3Rpb24oZWxlbWVudCwgcGFnZSkgewoKICAgIHZhciBjdXJyZW50UGFnZSwKICAgICAgY2xhc3NOYW1lLAogICAgICBpbmNQYWdlcyA9IGZhbHNlLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIGxhc3RQYWdlID0gZGF0YS50b3RhbFBhZ2VzKzE7CgogICAgaWYgKGRhdGEuZGVzdHJveWluZykKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIC8vIFJlYWQgdGhlIHBhZ2UgbnVtYmVyIGZyb20gdGhlIGNsYXNzTmFtZSBvZiBgZWxlbWVudGAgLSBmb3JtYXQ6IHBbMC05XSsKCiAgICBpZiAoKGN1cnJlbnRQYWdlID0gL1xicChbMC05XSspXGIvLmV4ZWMoJChlbGVtZW50KS5hdHRyKCdjbGFzcycpKSkpCiAgICAgIHBhZ2UgPSBwYXJzZUludChjdXJyZW50UGFnZVsxXSwgMTApOwoKICAgIGlmIChwYWdlKSB7CiAgICAgIAogICAgICBpZiAocGFnZT09bGFzdFBhZ2UpCiAgICAgICAgaW5jUGFnZXMgPSB0cnVlOwogICAgICBlbHNlIGlmIChwYWdlPmxhc3RQYWdlKQogICAgICAgIHRocm93IHR1cm5FcnJvcignUGFnZSAiJytwYWdlKyciIGNhbm5vdCBiZSBpbnNlcnRlZCcpOwoKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICBwYWdlID0gbGFzdFBhZ2U7CiAgICAgIGluY1BhZ2VzID0gdHJ1ZTsKCiAgICB9CgogICAgaWYgKHBhZ2U+PTEgJiYgcGFnZTw9bGFzdFBhZ2UpIHsKCiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKQogICAgICAgIGNsYXNzTmFtZSA9IChwYWdlJTIpID8gJyBvZGQnIDogJyBldmVuJzsKICAgICAgZWxzZQogICAgICAgIGNsYXNzTmFtZSA9ICcnOwoKICAgICAgLy8gU3RvcCBhbmltYXRpb25zCiAgICAgIGlmIChkYXRhLmRvbmUpCiAgICAgICAgdGhpcy50dXJuKCdzdG9wJyk7CgogICAgICAvLyBNb3ZlIHBhZ2VzIGlmIGl0J3MgbmVjZXNzYXJ5CiAgICAgIGlmIChwYWdlIGluIGRhdGEucGFnZU9ianMpCiAgICAgICAgdHVybk1ldGhvZHMuX21vdmVQYWdlcy5jYWxsKHRoaXMsIHBhZ2UsIDEpOwoKICAgICAgLy8gSW5jcmVhc2UgdGhlIG51bWJlciBvZiBwYWdlcwogICAgICBpZiAoaW5jUGFnZXMpCiAgICAgICAgZGF0YS50b3RhbFBhZ2VzID0gbGFzdFBhZ2U7CgogICAgICAvLyBBZGQgZWxlbWVudAogICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdID0gJChlbGVtZW50KS4KICAgICAgICBjc3MoeydmbG9hdCc6ICdsZWZ0J30pLgogICAgICAgIGFkZENsYXNzKCdwYWdlIHAnICsgcGFnZSArIGNsYXNzTmFtZSk7CgogICAgICBpZiAoIWhhc0hhcmRQYWdlKCkgJiYgIGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ2hhcmQnKSkgewogICAgICAgIGRhdGEucGFnZU9ianNbcGFnZV0ucmVtb3ZlQ2xhc3MoJ2hhcmQnKTsKICAgICAgfQoKICAgICAgLy8gQWRkIHBhZ2UKICAgICAgdHVybk1ldGhvZHMuX2FkZFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgIC8vIFJlbW92ZSBwYWdlcyBvdXQgb2YgcmFuZ2UKICAgICAgdHVybk1ldGhvZHMuX3JlbW92ZUZyb21ET00uY2FsbCh0aGlzKTsKICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9LAoKICAvLyBBZGRzIGEgcGFnZQoKICBfYWRkUGFnZTogZnVuY3Rpb24ocGFnZSkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBlbGVtZW50ID0gZGF0YS5wYWdlT2Jqc1twYWdlXTsKCiAgICBpZiAoZWxlbWVudCkKICAgICAgaWYgKHR1cm5NZXRob2RzLl9uZWNlc3NQYWdlLmNhbGwodGhpcywgcGFnZSkpIHsKCiAgICAgICAgaWYgKCFkYXRhLnBhZ2VXcmFwW3BhZ2VdKSB7CgogICAgICAgICAgLy8gV3JhcHBlcgogICAgICAgICAgZGF0YS5wYWdlV3JhcFtwYWdlXSA9ICQoJzxkaXYvPicsCiAgICAgICAgICAgIHsnY2xhc3MnOiAncGFnZS13cmFwcGVyJywKICAgICAgICAgICAgICBwYWdlOiBwYWdlLAogICAgICAgICAgICAgIGNzczoge3Bvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ319KTsKCiAgICAgICAgICAvLyBBcHBlbmQgdG8gdGhpcyBmbGlwYm9vawogICAgICAgICAgdGhpcy5hcHBlbmQoZGF0YS5wYWdlV3JhcFtwYWdlXSk7CgogICAgICAgICAgaWYgKCFkYXRhLnBhZ2VQbGFjZVtwYWdlXSkgewogICAgICAgICAgICAKICAgICAgICAgICAgZGF0YS5wYWdlUGxhY2VbcGFnZV0gPSBwYWdlOwogICAgICAgICAgICAvLyBNb3ZlIGBwYWdlT2Jqc1twYWdlXWAgdG8gd3JhcHBlcgogICAgICAgICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdLmFwcGVuZFRvKGRhdGEucGFnZVdyYXBbcGFnZV0pOwogICAgICAgICAgCiAgICAgICAgIH0KCiAgICAgICAgICAvLyBTZXQgdGhlIHNpemUgb2YgdGhlIHBhZ2UKICAgICAgICAgIHZhciBwcm9wID0gdHVybk1ldGhvZHMuX3BhZ2VTaXplLmNhbGwodGhpcywgcGFnZSwgdHJ1ZSk7CiAgICAgICAgICBlbGVtZW50LmNzcyh7d2lkdGg6IHByb3Aud2lkdGgsIGhlaWdodDogcHJvcC5oZWlnaHR9KTsKICAgICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKHByb3ApOwoKICAgICAgICB9CgogICAgICAgIGlmIChkYXRhLnBhZ2VQbGFjZVtwYWdlXSA9PSBwYWdlKSB7CgogICAgICAgICAvLyBJZiB0aGUgcGFnZSBpc24ndCBpbiBhbm90aGVyIHBsYWNlLCBjcmVhdGUgdGhlIGZsaXAgZWZmZWN0CiAgICAgICAgICB0dXJuTWV0aG9kcy5fbWFrZUZsaXAuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgIH0KICAgICAgICAKICAgICAgfSBlbHNlIHsKCiAgICAgICAgLy8gUGxhY2UKICAgICAgICBkYXRhLnBhZ2VQbGFjZVtwYWdlXSA9IDA7CgogICAgICAgIC8vIFJlbW92ZSBlbGVtZW50IGZyb20gdGhlIERPTQogICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW3BhZ2VdKQogICAgICAgICAgZGF0YS5wYWdlT2Jqc1twYWdlXS5yZW1vdmUoKTsKCiAgICAgIH0KCiAgfSwKCiAgLy8gQ2hlY2tzIGlmIGEgcGFnZSBpcyBpbiBtZW1vcnkKICAKICBoYXNQYWdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgcmV0dXJuIGhhcyhwYWdlLCB0aGlzLmRhdGEoKS5wYWdlT2Jqcyk7CiAgCiAgfSwKCiAgLy8gQ2VudGVycyB0aGUgZmxpcGJvb2sKCiAgY2VudGVyOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHNpemUgPSAkKHRoaXMpLnR1cm4oJ3NpemUnKSwKICAgICAgbGVmdCA9IDA7CgogICAgaWYgKCFkYXRhLm5vQ2VudGVyKSB7CiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKSB7CiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnLCBwYWdlIHx8IGRhdGEudHBhZ2UgfHwgZGF0YS5wYWdlKTsKCiAgICAgICAgaWYgKGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgewogICAgICAgICAgaWYgKCF2aWV3WzBdKQogICAgICAgICAgICBsZWZ0IC09IHNpemUud2lkdGgvNDsKICAgICAgICAgIGVsc2UgaWYgKCF2aWV3WzFdKQogICAgICAgICAgICBsZWZ0ICs9IHNpemUud2lkdGgvNDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKCF2aWV3WzBdKQogICAgICAgICAgICBsZWZ0ICs9IHNpemUud2lkdGgvNDsKICAgICAgICAgIGVsc2UgaWYgKCF2aWV3WzFdKQogICAgICAgICAgICBsZWZ0IC09IHNpemUud2lkdGgvNDsKICAgICAgICB9CiAgICAgIAogICAgICB9CgogICAgICAkKHRoaXMpLmNzcyh7bWFyZ2luTGVmdDogbGVmdH0pOwogICAgfQoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBEZXN0cm95cyB0aGUgZmxpcGJvb2sKCiAgZGVzdHJveTogZnVuY3Rpb24gKCkgewoKICAgIHZhciBwYWdlLAogICAgICBmbGlwYm9vayA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgZXZlbnRzID0gWwogICAgICAgICdlbmQnLCAnZmlyc3QnLCAnZmxpcCcsICdsYXN0JywgJ3ByZXNzZWQnLAogICAgICAgICdyZWxlYXNlZCcsICdzdGFydCcsICd0dXJuaW5nJywgJ3R1cm5lZCcsCiAgICAgICAgJ3pvb21pbmcnLCAnbWlzc2luZyddOwoKICAgIGlmICh0cmlnZ2VyKCdkZXN0cm95aW5nJywgdGhpcyk9PSdwcmV2ZW50ZWQnKQogICAgICByZXR1cm47CgogICAgZGF0YS5kZXN0cm95aW5nID0gdHJ1ZTsKCiAgICAkLmVhY2goZXZlbnRzLCBmdW5jdGlvbihpbmRleCwgZXZlbnROYW1lKSB7CiAgICAgIGZsaXBib29rLnVuYmluZChldmVudE5hbWUpOwogICAgfSk7CgogICAgdGhpcy5wYXJlbnQoKS51bmJpbmQoJ3N0YXJ0JywgZGF0YS5ldmVudEhhbmRsZXJzLnN0YXJ0KTsKCiAgICAkKGRvY3VtZW50KS51bmJpbmQobW91c2VFdmVudHMubW92ZSwgZGF0YS5ldmVudEhhbmRsZXJzLnRvdWNoTW92ZSkuCiAgICAgIHVuYmluZChtb3VzZUV2ZW50cy51cCwgZGF0YS5ldmVudEhhbmRsZXJzLnRvdWNoRW5kKTsKICAgIAogICAgd2hpbGUgKGRhdGEudG90YWxQYWdlcyE9PTApIHsKICAgICAgdGhpcy50dXJuKCdyZW1vdmVQYWdlJywgZGF0YS50b3RhbFBhZ2VzKTsKICAgIH0KCiAgICBpZiAoZGF0YS5mcGFyZW50KQogICAgICBkYXRhLmZwYXJlbnQucmVtb3ZlKCk7CgogICAgaWYgKGRhdGEuc2hhZG93KQogICAgICBkYXRhLnNoYWRvdy5yZW1vdmUoKTsKCiAgICB0aGlzLnJlbW92ZURhdGEoKTsKICAgIGRhdGEgPSBudWxsOwoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBDaGVja3MgaWYgdGhpcyBlbGVtZW50IGlzIGEgZmxpcGJvb2sKCiAgaXM6IGZ1bmN0aW9uKCkgewoKICAgIHJldHVybiB0eXBlb2YodGhpcy5kYXRhKCkucGFnZXMpPT0nb2JqZWN0JzsKCiAgfSwKCiAgLy8gU2V0cyBhbmQgZ2V0cyB0aGUgem9vbSB2YWx1ZQoKICB6b29tOiBmdW5jdGlvbihuZXdab29tKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKHR5cGVvZihuZXdab29tKT09J251bWJlcicpIHsKCiAgICAgIGlmIChuZXdab29tPDAuMDAxIHx8IG5ld1pvb20+MTAwKQogICAgICAgIHRocm93IHR1cm5FcnJvcihuZXdab29tKyAnIGlzIG5vdCBhIHZhbHVlIGZvciB6b29tJyk7CiAgICAgIAogICAgICBpZiAodHJpZ2dlcignem9vbWluZycsIHRoaXMsIFtuZXdab29tLCBkYXRhLnpvb21dKT09J3ByZXZlbnRlZCcpCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIAogICAgICB2YXIgc2l6ZSA9IHRoaXMudHVybignc2l6ZScpLAogICAgICAgIGN1cnJlbnRWaWV3ID0gdGhpcy50dXJuKCd2aWV3JyksCiAgICAgICAgaXogPSAxL2RhdGEuem9vbSwKICAgICAgICBuZXdXaWR0aCA9IE1hdGgucm91bmQoc2l6ZS53aWR0aCAqIGl6ICogbmV3Wm9vbSksCiAgICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5yb3VuZChzaXplLmhlaWdodCAqIGl6ICogbmV3Wm9vbSk7CiAgICAKICAgICAgZGF0YS56b29tID0gbmV3Wm9vbTsKCiAgICAgICQodGhpcykudHVybignc3RvcCcpLgogICAgICAgIHR1cm4oJ3NpemUnLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKICAgICAgICAvKi4KICAgICAgICBjc3Moe21hcmdpblRvcDogc2l6ZS5oZWlnaHQgKiBpeiAvIDIgLSBuZXdIZWlnaHQgLyAyfSk7Ki8KCiAgICAgIGlmIChkYXRhLm9wdHMuYXV0b0NlbnRlcikKICAgICAgICB0aGlzLnR1cm4oJ2NlbnRlcicpOwogICAgICAvKmVsc2UKICAgICAgICAkKHRoaXMpLmNzcyh7bWFyZ2luTGVmdDogc2l6ZS53aWR0aCAqIGl6IC8gMiAtIG5ld1dpZHRoIC8gMn0pOyovCgogICAgICB0dXJuTWV0aG9kcy5fdXBkYXRlU2hhZG93LmNhbGwodGhpcyk7CgogICAgICBmb3IgKHZhciBpID0gMDsgaTxjdXJyZW50Vmlldy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChjdXJyZW50Vmlld1tpXSAmJiBkYXRhLnBhZ2Vab29tW2N1cnJlbnRWaWV3W2ldXSE9ZGF0YS56b29tKSB7CiAgCiAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3pvb21lZCcsWwogICAgICAgICAgICBjdXJyZW50Vmlld1tpXSwKICAgICAgICAgICAgY3VycmVudFZpZXcsCiAgICAgICAgICAgIGRhdGEucGFnZVpvb21bY3VycmVudFZpZXdbaV1dLAogICAgICAgICAgICBkYXRhLnpvb21dKTsKCiAgICAgICAgICBkYXRhLnBhZ2Vab29tW2N1cnJlbnRWaWV3W2ldXSA9IGRhdGEuem9vbTsKICAgICAgfQogICAgfQoKICAgICAgcmV0dXJuIHRoaXM7CgogICAgfSBlbHNlCiAgICAgIHJldHVybiBkYXRhLnpvb207CgogIH0sCgogIC8vIEdldHMgdGhlIHNpemUgb2YgYSBwYWdlCgogIF9wYWdlU2l6ZTogZnVuY3Rpb24ocGFnZSwgcG9zaXRpb24pIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBwcm9wID0ge307CgogICAgaWYgKGRhdGEuZGlzcGxheT09J3NpbmdsZScpIHsKCiAgICAgIHByb3Aud2lkdGggPSB0aGlzLndpZHRoKCk7CiAgICAgIHByb3AuaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTsKCiAgICAgIGlmIChwb3NpdGlvbikgewogICAgICAgIHByb3AudG9wID0gMDsKICAgICAgICBwcm9wLmxlZnQgPSAwOwogICAgICAgIHByb3AucmlnaHQgPSAnYXV0byc7CiAgICAgIH0KCiAgICB9IGVsc2UgewoKICAgICAgdmFyIHBhZ2VXaWR0aCA9IHRoaXMud2lkdGgoKS8yLAogICAgICAgIHBhZ2VIZWlnaHQgPSB0aGlzLmhlaWdodCgpOwoKICAgICAgaWYgKGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ293bi1zaXplJykpIHsKICAgICAgICBwcm9wLndpZHRoID0gZGF0YS5wYWdlT2Jqc1twYWdlXS53aWR0aCgpOwogICAgICAgIHByb3AuaGVpZ2h0ID0gZGF0YS5wYWdlT2Jqc1twYWdlXS5oZWlnaHQoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwcm9wLndpZHRoID0gcGFnZVdpZHRoOwogICAgICAgIHByb3AuaGVpZ2h0ID0gcGFnZUhlaWdodDsKICAgICAgfQogICAgICAKICAgICAgaWYgKHBvc2l0aW9uKSB7CiAgICAgICAgdmFyIG9kZCA9IHBhZ2UlMjsKICAgICAgICBwcm9wLnRvcCA9IChwYWdlSGVpZ2h0LXByb3AuaGVpZ2h0KS8yOwoKICAgICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSB7CiAgICAgICAgICAKICAgICAgICAgIHByb3BbKG9kZCkgPyAncmlnaHQnIDogJ2xlZnQnXSA9IHBhZ2VXaWR0aC1wcm9wLndpZHRoOwogICAgICAgICAgcHJvcFsob2RkKSA/ICdsZWZ0JyA6ICdyaWdodCddID0gJ2F1dG8nOwoKICAgICAgICB9IGVsc2UgewogICAgICAgICAgCiAgICAgICAgICBwcm9wWyhvZGQpID8gJ2xlZnQnIDogJ3JpZ2h0J10gPSBwYWdlV2lkdGgtcHJvcC53aWR0aDsKICAgICAgICAgIHByb3BbKG9kZCkgPyAncmlnaHQnIDogJ2xlZnQnXSA9ICdhdXRvJzsKCiAgICAgICAgfQogICAgICAKICAgICAgfQogICAgfQoKICAgIHJldHVybiBwcm9wOwoKICB9LAoKICAvLyBQcmVwYXJlcyB0aGUgZmxpcCBlZmZlY3QgZm9yIGEgcGFnZQoKICBfbWFrZUZsaXA6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmICghZGF0YS5wYWdlc1twYWdlXSAmJiBkYXRhLnBhZ2VQbGFjZVtwYWdlXT09cGFnZSkgewogICAgICAKICAgICAgdmFyIHNpbmdsZSA9IGRhdGEuZGlzcGxheT09J3NpbmdsZScsCiAgICAgICAgb2RkID0gcGFnZSUyOwoKICAgICAgZGF0YS5wYWdlc1twYWdlXSA9IGRhdGEucGFnZU9ianNbcGFnZV0uCiAgICAgICAgY3NzKHR1cm5NZXRob2RzLl9wYWdlU2l6ZS5jYWxsKHRoaXMsIHBhZ2UpKS4KICAgICAgICBmbGlwKHsKICAgICAgICAgIHBhZ2U6IHBhZ2UsCiAgICAgICAgICBuZXh0OiAob2RkIHx8IHNpbmdsZSkgPyBwYWdlKzEgOiBwYWdlLTEsCiAgICAgICAgICB0dXJuOiB0aGlzCiAgICAgICAgfSkuCiAgICAgICAgZmxpcCgnZGlzYWJsZScsIGRhdGEuZGlzYWJsZWQpOwoKICAgICAgICAvLyBJc3N1ZSBhYm91dCB6LWluZGV4CiAgICAgICAgdHVybk1ldGhvZHMuX3NldFBhZ2VMb2MuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgICAgZGF0YS5wYWdlWm9vbVtwYWdlXSA9IGRhdGEuem9vbTsKICAgICAgICAKICAgIH0KCiAgICByZXR1cm4gZGF0YS5wYWdlc1twYWdlXTsKICB9LAoKICAvLyBNYWtlcyBwYWdlcyB3aXRoaW4gYSByYW5nZQoKICBfbWFrZVJhbmdlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgcGFnZSwgcmFuZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS50b3RhbFBhZ2VzPDEpCiAgICAgIHJldHVybjsKCiAgICByYW5nZSA9IHRoaXMudHVybigncmFuZ2UnKTsKCiAgICBmb3IgKHBhZ2UgPSByYW5nZVswXTsgcGFnZTw9cmFuZ2VbMV07IHBhZ2UrKykKICAgICAgdHVybk1ldGhvZHMuX2FkZFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKCiAgfSwKCiAgLy8gUmV0dXJucyBhIHJhbmdlIG9mIHBhZ2VzIHRoYXQgc2hvdWxkIGJlIGluIHRoZSBET00KICAvLyBFeGFtcGxlOgogIC8vIC0gcGFnZSBpbiB0aGUgY3VycmVudCB2aWV3LCByZXR1cm4gdHJ1ZQogIC8vICogcGFnZSBpcyBpbiB0aGUgcmFuZ2UsIHJldHVybiB0cnVlCiAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UKICAvLwogIC8vIDEgMi0zIDQtNSA2LTcgOC05IDEwLTExIDEyLTEzCiAgLy8gICAqKiAgKiogIC0tICAgKiogICoqCgogIHJhbmdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIHJlbWFpbmluZ1BhZ2VzLCBsZWZ0LCByaWdodCwgdmlldywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgICAgcGFnZSA9IHBhZ2UgfHwgZGF0YS50cGFnZSB8fCBkYXRhLnBhZ2UgfHwgMTsKICAgICAgdmlldyA9IHR1cm5NZXRob2RzLl92aWV3LmNhbGwodGhpcywgcGFnZSk7CgogICAgICBpZiAocGFnZTwxIHx8IHBhZ2U+ZGF0YS50b3RhbFBhZ2VzKQogICAgICAgIHRocm93IHR1cm5FcnJvcignIicrcGFnZSsnIiBpcyBub3QgYSB2YWxpZCBwYWdlJyk7CgogICAgCiAgICAgIHZpZXdbMV0gPSB2aWV3WzFdIHx8IHZpZXdbMF07CiAgICAgIAogICAgICBpZiAodmlld1swXT49MSAmJiB2aWV3WzFdPD1kYXRhLnRvdGFsUGFnZXMpIHsKCiAgICAgICAgcmVtYWluaW5nUGFnZXMgPSBNYXRoLmZsb29yKChwYWdlc0luRE9NLTIpLzIpOwoKICAgICAgICBpZiAoZGF0YS50b3RhbFBhZ2VzLXZpZXdbMV0gPiB2aWV3WzBdKSB7CiAgICAgICAgICBsZWZ0ID0gTWF0aC5taW4odmlld1swXS0xLCByZW1haW5pbmdQYWdlcyk7CiAgICAgICAgICByaWdodCA9IDIqcmVtYWluaW5nUGFnZXMtbGVmdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmlnaHQgPSBNYXRoLm1pbihkYXRhLnRvdGFsUGFnZXMtdmlld1sxXSwgcmVtYWluaW5nUGFnZXMpOwogICAgICAgICAgbGVmdCA9IDIqcmVtYWluaW5nUGFnZXMtcmlnaHQ7CiAgICAgICAgfQoKICAgICAgfSBlbHNlIHsKICAgICAgICBsZWZ0ID0gcGFnZXNJbkRPTS0xOwogICAgICAgIHJpZ2h0ID0gcGFnZXNJbkRPTS0xOwogICAgICB9CgogICAgICByZXR1cm4gW01hdGgubWF4KDEsIHZpZXdbMF0tbGVmdCksCiAgICAgICAgICBNYXRoLm1pbihkYXRhLnRvdGFsUGFnZXMsIHZpZXdbMV0rcmlnaHQpXTsKCiAgfSwKCiAgLy8gRGV0ZWN0cyBpZiBhIHBhZ2UgaXMgd2l0aGluIHRoZSByYW5nZSBvZiBgcGFnZXNJbkRPTWAgZnJvbSB0aGUgY3VycmVudCB2aWV3CgogIF9uZWNlc3NQYWdlOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIGlmIChwYWdlPT09MCkKICAgICAgcmV0dXJuIHRydWU7CgogICAgdmFyIHJhbmdlID0gdGhpcy50dXJuKCdyYW5nZScpOwoKICAgIHJldHVybiB0aGlzLmRhdGEoKS5wYWdlT2Jqc1twYWdlXS5oYXNDbGFzcygnZml4ZWQnKSB8fAogICAgICAocGFnZT49cmFuZ2VbMF0gJiYgcGFnZTw9cmFuZ2VbMV0pOwogICAgCiAgfSwKCiAgLy8gUmVsZWFzZXMgbWVtb3J5IGJ5IHJlbW92aW5nIHBhZ2VzIGZyb20gdGhlIERPTQoKICBfcmVtb3ZlRnJvbURPTTogZnVuY3Rpb24oKSB7CgogICAgdmFyIHBhZ2UsIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VXcmFwKSAmJgogICAgICAgICF0dXJuTWV0aG9kcy5fbmVjZXNzUGFnZS5jYWxsKHRoaXMsIHBhZ2UpKQogICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlUGFnZUZyb21ET00uY2FsbCh0aGlzLCBwYWdlKTsKICAgIAogIH0sCgogIC8vIFJlbW92ZXMgYSBwYWdlIGZyb20gRE9NIGFuZCBpdHMgaW50ZXJuYWwgcmVmZXJlbmNlcwoKICBfcmVtb3ZlUGFnZUZyb21ET006IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKSB7CiAgICAgIHZhciBkZCA9IGRhdGEucGFnZXNbcGFnZV0uZGF0YSgpOwoKICAgICAgZmxpcE1ldGhvZHMuX21vdmVGb2xkaW5nUGFnZS5jYWxsKGRhdGEucGFnZXNbcGFnZV0sIGZhbHNlKTsKCiAgICAgIGlmIChkZC5mICYmIGRkLmYuZndyYXBwZXIpCiAgICAgICAgZGQuZi5md3JhcHBlci5yZW1vdmUoKTsKCiAgICAgIGRhdGEucGFnZXNbcGFnZV0ucmVtb3ZlRGF0YSgpOwogICAgICBkYXRhLnBhZ2VzW3BhZ2VdLnJlbW92ZSgpOwogICAgICBkZWxldGUgZGF0YS5wYWdlc1twYWdlXTsKICAgIH0KCiAgICBpZiAoZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgZGF0YS5wYWdlT2Jqc1twYWdlXS5yZW1vdmUoKTsKCiAgICBpZiAoZGF0YS5wYWdlV3JhcFtwYWdlXSkgewogICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLnJlbW92ZSgpOwogICAgICBkZWxldGUgZGF0YS5wYWdlV3JhcFtwYWdlXTsKICAgIH0KCiAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlTXYuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICBkZWxldGUgZGF0YS5wYWdlUGxhY2VbcGFnZV07CiAgICBkZWxldGUgZGF0YS5wYWdlWm9vbVtwYWdlXTsKCiAgfSwKCiAgLy8gUmVtb3ZlcyBhIHBhZ2UKCiAgcmVtb3ZlUGFnZTogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgLy8gRGVsZXRlIGFsbCB0aGUgcGFnZXMKICAgIGlmIChwYWdlPT0nKicpIHsKICAgICAgCiAgICAgIHdoaWxlIChkYXRhLnRvdGFsUGFnZXMhPT0wKSB7CiAgICAgICAgdGhpcy50dXJuKCdyZW1vdmVQYWdlJywgZGF0YS50b3RhbFBhZ2VzKTsKICAgICAgfQoKICAgIH0gZWxzZSB7CgogICAgICBpZiAocGFnZTwxIHx8IHBhZ2U+ZGF0YS50b3RhbFBhZ2VzKQogICAgICAgIHRocm93IHR1cm5FcnJvcignVGhlIHBhZ2UgJysgcGFnZSArICcgZG9lc25cJ3QgZXhpc3QnKTsKICAgICAgICAKICAgICAgaWYgKGRhdGEucGFnZU9ianNbcGFnZV0pIHsKCiAgICAgICAgLy8gU3RvcCBhbmltYXRpb25zCiAgICAgICAgdGhpcy50dXJuKCdzdG9wJyk7CgogICAgICAgIC8vIFJlbW92ZSBgcGFnZWAKICAgICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlUGFnZUZyb21ET00uY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgICAgZGVsZXRlIGRhdGEucGFnZU9ianNbcGFnZV07CgogICAgICB9CgogICAgICAvLyBNb3ZlIHRoZSBwYWdlcwogICAgICB0dXJuTWV0aG9kcy5fbW92ZVBhZ2VzLmNhbGwodGhpcywgcGFnZSwgLTEpOwoKICAgICAgLy8gUmVzaXplIHRoZSBzaXplIG9mIHRoaXMgZmxpcGJvb2sKICAgICAgZGF0YS50b3RhbFBhZ2VzID0gZGF0YS50b3RhbFBhZ2VzLTE7CgogICAgICAvLyBDaGVjayB0aGUgY3VycmVudCB2aWV3CgogICAgICBpZiAoZGF0YS5wYWdlPmRhdGEudG90YWxQYWdlcykgewoKICAgICAgIGRhdGEucGFnZSA9IG51bGw7CiAgICAgICB0dXJuTWV0aG9kcy5fZml0UGFnZS5jYWxsKHRoaXMsIGRhdGEudG90YWxQYWdlcyk7CgogICAgICB9IGVsc2UgewoKICAgICAgICB0dXJuTWV0aG9kcy5fbWFrZVJhbmdlLmNhbGwodGhpcyk7CiAgICAgICAgdGhpcy50dXJuKCd1cGRhdGUnKTsKCiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gdGhpczsKICAKICB9LAoKICAvLyBNb3ZlcyBwYWdlcwoKICBfbW92ZVBhZ2VzOiBmdW5jdGlvbihmcm9tLCBjaGFuZ2UpIHsKCiAgICB2YXIgcGFnZSwKICAgICAgdGhhdCA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgc2luZ2xlID0gZGF0YS5kaXNwbGF5PT0nc2luZ2xlJywKICAgICAgbW92ZSA9IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICAgICAgdmFyIG5leHQgPSBwYWdlICsgY2hhbmdlLAogICAgICAgICAgb2RkID0gbmV4dCUyLAogICAgICAgICAgY2xhc3NOYW1lID0gKG9kZCkgPyAnIG9kZCAnIDogJyBldmVuICc7CgogICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW3BhZ2VdKQogICAgICAgICAgZGF0YS5wYWdlT2Jqc1tuZXh0XSA9IGRhdGEucGFnZU9ianNbcGFnZV0uCiAgICAgICAgICAgIHJlbW92ZUNsYXNzKCdwJyArIHBhZ2UgKyAnIG9kZCBldmVuJykuCiAgICAgICAgICAgIGFkZENsYXNzKCdwJyArIG5leHQgKyBjbGFzc05hbWUpOwoKICAgICAgICBpZiAoZGF0YS5wYWdlUGxhY2VbcGFnZV0gJiYgZGF0YS5wYWdlV3JhcFtwYWdlXSkgewoKICAgICAgICAgIGRhdGEucGFnZVBsYWNlW25leHRdID0gbmV4dDsKICAgICAgICAKICAgICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW25leHRdLmhhc0NsYXNzKCdmaXhlZCcpKQogICAgICAgICAgICBkYXRhLnBhZ2VXcmFwW25leHRdID0gZGF0YS5wYWdlV3JhcFtwYWdlXS4KICAgICAgICAgICAgICBhdHRyKCdwYWdlJywgbmV4dCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGRhdGEucGFnZVdyYXBbbmV4dF0gPSBkYXRhLnBhZ2VXcmFwW3BhZ2VdLgogICAgICAgICAgICAgIGNzcyh0dXJuTWV0aG9kcy5fcGFnZVNpemUuY2FsbCh0aGF0LCBuZXh0LCB0cnVlKSkuCiAgICAgICAgICAgICAgYXR0cigncGFnZScsIG5leHQpOwogICAgICAKICAgICAgICAgICAgaWYgKGRhdGEucGFnZXNbcGFnZV0pCiAgICAgICAgICAgICAgZGF0YS5wYWdlc1tuZXh0XSA9IGRhdGEucGFnZXNbcGFnZV0uCiAgICAgICAgICAgICAgICBmbGlwKCdvcHRpb25zJywgewogICAgICAgICAgICAgICAgICBwYWdlOiBuZXh0LAogICAgICAgICAgICAgICAgICBuZXh0OiAoc2luZ2xlIHx8IG9kZCkgPyBuZXh0KzEgOiBuZXh0LTEKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgaWYgKGNoYW5nZSkgewogICAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBhZ2VzW3BhZ2VdOwogICAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBhZ2VQbGFjZVtwYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlWm9vbVtwYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlT2Jqc1twYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlV3JhcFtwYWdlXTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfTsKCiAgICBpZiAoY2hhbmdlPjApCiAgICAgIGZvciAocGFnZT1kYXRhLnRvdGFsUGFnZXM7IHBhZ2U+PWZyb207IHBhZ2UtLSkKICAgICAgICBtb3ZlKHBhZ2UpOwogICAgZWxzZQogICAgICBmb3IgKHBhZ2U9ZnJvbTsgcGFnZTw9ZGF0YS50b3RhbFBhZ2VzOyBwYWdlKyspCiAgICAgICAgbW92ZShwYWdlKTsKCiAgfSwKCiAgLy8gU2V0cyBvciBHZXRzIHRoZSBkaXNwbGF5IG1vZGUKCiAgZGlzcGxheTogZnVuY3Rpb24oZGlzcGxheSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIGN1cnJlbnREaXNwbGF5ID0gZGF0YS5kaXNwbGF5OwoKICAgIGlmIChkaXNwbGF5PT09dW5kZWZpbmVkKSB7CiAgICAgIAogICAgICByZXR1cm4gY3VycmVudERpc3BsYXk7CgogICAgfSBlbHNlIHsKCiAgICAgIGlmICgkLmluQXJyYXkoZGlzcGxheSwgZGlzcGxheXMpPT0tMSkKICAgICAgICB0aHJvdyB0dXJuRXJyb3IoJyInK2Rpc3BsYXkgKyAnIiBpcyBub3QgYSB2YWx1ZSBmb3IgZGlzcGxheScpOwogICAgICAKICAgICAgc3dpdGNoKGRpc3BsYXkpIHsKICAgICAgICBjYXNlICdzaW5nbGUnOgoKICAgICAgICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFsIHBhZ2UgdG8gdXNlIGFzIGZvbGRlZCBwYWdlCgogICAgICAgICAgaWYgKCFkYXRhLnBhZ2VPYmpzWzBdKSB7CiAgICAgICAgICAgIHRoaXMudHVybignc3RvcCcpLgogICAgICAgICAgICAgIGNzcyh7J292ZXJmbG93JzogJ2hpZGRlbid9KTsKCiAgICAgICAgICAgIGRhdGEucGFnZU9ianNbMF0gPSAkKCc8ZGl2IC8+JywKICAgICAgICAgICAgICAgIHsnY2xhc3MnOiAncGFnZSBwLXRlbXBvcmFsJ30pLgogICAgICAgICAgICAgIGNzcyh7d2lkdGg6IHRoaXMud2lkdGgoKSwgaGVpZ2h0OiB0aGlzLmhlaWdodCgpfSkuCiAgICAgICAgICAgICAgYXBwZW5kVG8odGhpcyk7CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5hZGRDbGFzcygnc2hhZG93Jyk7CgogICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2RvdWJsZSc6CgogICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhbCBwYWdlCgogICAgICAgICAgaWYgKGRhdGEucGFnZU9ianNbMF0pIHsKICAgICAgICAgICAgdGhpcy50dXJuKCdzdG9wJykuY3NzKHsnb3ZlcmZsb3cnOiAnJ30pOwogICAgICAgICAgICBkYXRhLnBhZ2VPYmpzWzBdLnJlbW92ZSgpOwogICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlT2Jqc1swXTsKICAgICAgICAgIH0KCiAgICAgICAgICB0aGlzLnJlbW92ZUNsYXNzKCdzaGFkb3cnKTsKCiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgCgogICAgICBkYXRhLmRpc3BsYXkgPSBkaXNwbGF5OwoKICAgICAgaWYgKGN1cnJlbnREaXNwbGF5KSB7CiAgICAgICAgdmFyIHNpemUgPSB0aGlzLnR1cm4oJ3NpemUnKTsKICAgICAgICB0dXJuTWV0aG9kcy5fbW92ZVBhZ2VzLmNhbGwodGhpcywgMSwgMCk7CiAgICAgICAgdGhpcy50dXJuKCdzaXplJywgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpLgogICAgICAgICAgdHVybigndXBkYXRlJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzOwoKICAgIH0KICAKICB9LAogIAogIC8vIEdldHMgYW5kIHNldHMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgZmxpcGJvb2sKCiAgZGlyZWN0aW9uOiBmdW5jdGlvbihkaXIpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkaXI9PT11bmRlZmluZWQpIHsKCiAgICAgIHJldHVybiBkYXRhLmRpcmVjdGlvbjsKCiAgICB9IGVsc2UgewoKICAgICAgZGlyID0gZGlyLnRvTG93ZXJDYXNlKCk7CgogICAgICBpZiAoJC5pbkFycmF5KGRpciwgZGlyZWN0aW9ucyk9PS0xKQogICAgICAgIHRocm93IHR1cm5FcnJvcignIicgKyBkaXIgKyAnIiBpcyBub3QgYSB2YWx1ZSBmb3IgZGlyZWN0aW9uJyk7CgogICAgICBpZiAoZGlyPT0ncnRsJykgewogICAgICAgICQodGhpcykuYXR0cignZGlyJywgJ2x0cicpLgogICAgICAgICAgY3NzKHtkaXJlY3Rpb246ICdsdHInfSk7CiAgICAgIH0KCiAgICAgIGRhdGEuZGlyZWN0aW9uID0gZGlyOwoKICAgICAgaWYgKGRhdGEuZG9uZSkKICAgICAgICB0aGlzLnR1cm4oJ3NpemUnLCAkKHRoaXMpLndpZHRoKCksICQodGhpcykuaGVpZ2h0KCkpOwoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogIH0sCgogIC8vIERldGVjdHMgYW5pbWF0aW9uCgogIGFuaW1hdGluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMuZGF0YSgpLnBhZ2VNdi5sZW5ndGg+MDsKCiAgfSwKCiAgLy8gR2V0cyB0aGUgY3VycmVudCBhY3RpdmF0ZWQgY29ybmVyCgogIGNvcm5lcjogZnVuY3Rpb24oKSB7CiAgICAKICAgIHZhciBjb3JuZXIsCiAgICAgIHBhZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlcykgewogICAgICBpZiAoaGFzKHBhZ2UsIGRhdGEucGFnZXMpKQogICAgICAgIGlmICgoY29ybmVyID0gZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdjb3JuZXInKSkpIHsKICAgICAgICAgIHJldHVybiBjb3JuZXI7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBmYWxzZTsKICB9LAoKICAvLyBHZXRzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgZmxpcGJvb2sKCiAgZGF0YTogZnVuY3Rpb24oKSB7CiAgICAKICAgIHJldHVybiB0aGlzLmRhdGEoKTsKCiAgfSwKCiAgLy8gRGlzYWJsZXMgYW5kIGVuYWJsZXMgdGhlIGVmZmVjdAoKICBkaXNhYmxlOiBmdW5jdGlvbihkaXNhYmxlKSB7CgogICAgdmFyIHBhZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpOwoKICAgIGRhdGEuZGlzYWJsZWQgPSBkaXNhYmxlPT09dW5kZWZpbmVkIHx8IGRpc2FibGU9PT10cnVlOwoKICAgIGZvciAocGFnZSBpbiBkYXRhLnBhZ2VzKSB7CiAgICAgIGlmIChoYXMocGFnZSwgZGF0YS5wYWdlcykpCiAgICAgICAgZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdkaXNhYmxlJywKICAgICAgICAgIChkYXRhLmRpc2FibGVkKSA/IHRydWUgOiAkLmluQXJyYXkocGFyc2VJbnQocGFnZSwgMTApLCB2aWV3KT09LTEpOwogICAgfQoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBEaXNhYmxlcyBhbmQgZW5hYmxlcyB0aGUgZWZmZWN0CgogIGRpc2FibGVkOiBmdW5jdGlvbihkaXNhYmxlKSB7CgogICAgaWYgKGRpc2FibGU9PT11bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIHRoaXMuZGF0YSgpLmRpc2FibGVkPT09dHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB0aGlzLnR1cm4oJ2Rpc2FibGUnLCBkaXNhYmxlKTsKICAgIH0KCiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgc2l6ZQoKICBzaXplOiBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7CgogICAgaWYgKHdpZHRoPT09dW5kZWZpbmVkIHx8IGhlaWdodD09PXVuZGVmaW5lZCkgewogICAgICAKICAgICAgcmV0dXJuIHt3aWR0aDogdGhpcy53aWR0aCgpLCBoZWlnaHQ6IHRoaXMuaGVpZ2h0KCl9OwoKICAgIH0gZWxzZSB7CgogICAgICB0aGlzLnR1cm4oJ3N0b3AnKTsKCiAgICAgIHZhciBwYWdlLCBwcm9wLAogICAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgICBwYWdlV2lkdGggPSAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJykgPyB3aWR0aC8yIDogd2lkdGg7CgogICAgICB0aGlzLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgaWYgKGRhdGEucGFnZU9ianNbMF0pCiAgICAgICAgZGF0YS5wYWdlT2Jqc1swXS5jc3Moe3dpZHRoOiBwYWdlV2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICAgIAogICAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkgewogICAgICAgIGlmICghaGFzKHBhZ2UsIGRhdGEucGFnZVdyYXApKSBjb250aW51ZTsKCiAgICAgICAgcHJvcCA9IHR1cm5NZXRob2RzLl9wYWdlU2l6ZS5jYWxsKHRoaXMsIHBhZ2UsIHRydWUpOwoKICAgICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdLmNzcyh7d2lkdGg6IHByb3Aud2lkdGgsIGhlaWdodDogcHJvcC5oZWlnaHR9KTsKICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcyhwcm9wKTsKICAgICAgICAKICAgICAgICBpZiAoZGF0YS5wYWdlc1twYWdlXSkKICAgICAgICAgIGRhdGEucGFnZXNbcGFnZV0uY3NzKHt3aWR0aDogcHJvcC53aWR0aCwgaGVpZ2h0OiBwcm9wLmhlaWdodH0pOwogICAgICB9CgogICAgICB0aGlzLnR1cm4oJ3Jlc2l6ZScpOwoKICAgICAgcmV0dXJuIHRoaXM7CgogICAgfQogIH0sCgogIC8vIFJlc2l6ZXMgZWFjaCBwYWdlCgogIHJlc2l6ZTogZnVuY3Rpb24oKSB7CgogICAgdmFyIHBhZ2UsIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS5wYWdlc1swXSkgewogICAgICBkYXRhLnBhZ2VXcmFwWzBdLmNzcyh7bGVmdDogLXRoaXMud2lkdGgoKX0pOwogICAgICBkYXRhLnBhZ2VzWzBdLmZsaXAoJ3Jlc2l6ZScsIHRydWUpOwogICAgfQoKICAgIGZvciAocGFnZSA9IDE7IHBhZ2UgPD0gZGF0YS50b3RhbFBhZ2VzOyBwYWdlKyspCiAgICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKQogICAgICAgIGRhdGEucGFnZXNbcGFnZV0uZmxpcCgncmVzaXplJywgdHJ1ZSk7CgogICAgdHVybk1ldGhvZHMuX3VwZGF0ZVNoYWRvdy5jYWxsKHRoaXMpOwoKICAgIGlmIChkYXRhLm9wdHMuYXV0b0NlbnRlcikKICAgICAgdGhpcy50dXJuKCdjZW50ZXInKTsKCiAgfSwKCiAgLy8gUmVtb3ZlcyBhbiBhbmltYXRpb24gZnJvbSB0aGUgY2FjaGUKCiAgX3JlbW92ZU12OiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGksIGRhdGEgPSB0aGlzLmRhdGEoKTsKICAgICAgCiAgICBmb3IgKGk9MDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykKICAgICAgaWYgKGRhdGEucGFnZU12W2ldPT1wYWdlKSB7CiAgICAgICAgZGF0YS5wYWdlTXYuc3BsaWNlKGksIDEpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CgogICAgcmV0dXJuIGZhbHNlOwoKICB9LAoKICAvLyBBZGRzIGFuIGFuaW1hdGlvbiB0byB0aGUgY2FjaGUKICAKICBfYWRkTXY6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIHR1cm5NZXRob2RzLl9yZW1vdmVNdi5jYWxsKHRoaXMsIHBhZ2UpOwogICAgZGF0YS5wYWdlTXYucHVzaChwYWdlKTsKCiAgfSwKCiAgLy8gR2V0cyBpbmRleGVzIGZvciBhIHZpZXcKCiAgX3ZpZXc6IGZ1bmN0aW9uKHBhZ2UpIHsKICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICAKICAgIHBhZ2UgPSBwYWdlIHx8IGRhdGEucGFnZTsKCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJykKICAgICAgcmV0dXJuIChwYWdlJTIpID8gW3BhZ2UtMSwgcGFnZV0gOiBbcGFnZSwgcGFnZSsxXTsKICAgIGVsc2UKICAgICAgcmV0dXJuIFtwYWdlXTsKCiAgfSwKCiAgLy8gR2V0cyBhIHZpZXcKCiAgdmlldzogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHZpZXcgPSB0dXJuTWV0aG9kcy5fdmlldy5jYWxsKHRoaXMsIHBhZ2UpOwoKICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKQogICAgICByZXR1cm4gWyh2aWV3WzBdPjApID8gdmlld1swXSA6IDAsCiAgICAgICAgKHZpZXdbMV08PWRhdGEudG90YWxQYWdlcykgPyB2aWV3WzFdIDogMF07CiAgICBlbHNlCiAgICAgIHJldHVybiBbKHZpZXdbMF0+MCAmJiB2aWV3WzBdPD1kYXRhLnRvdGFsUGFnZXMpID8gdmlld1swXSA6IDBdOwoKICB9LAoKICAvLyBTdG9wcyBhbmltYXRpb25zCgogIHN0b3A6IGZ1bmN0aW9uKGlnbm9yZSwgYW5pbWF0ZSkgewoKICAgIGlmICh0aGlzLnR1cm4oJ2FuaW1hdGluZycpKSB7CiAgCiAgICAgIHZhciBpLCBvcHRzLCBwYWdlLAogICAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICAgIGlmIChkYXRhLnRwYWdlKSB7CiAgICAgICAgZGF0YS5wYWdlID0gZGF0YS50cGFnZTsKICAgICAgICBkZWxldGUgZGF0YVsndHBhZ2UnXTsKICAgICAgfQoKICAgICAgZm9yIChpID0gMDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykgewoKICAgICAgICBpZiAoIWRhdGEucGFnZU12W2ldIHx8IGRhdGEucGFnZU12W2ldPT09aWdub3JlKQogICAgICAgICAgY29udGludWU7CgogICAgICAgIHBhZ2UgPSBkYXRhLnBhZ2VzW2RhdGEucGFnZU12W2ldXTsKICAgICAgICBvcHRzID0gcGFnZS5kYXRhKCkuZi5vcHRzOwoKICAgICAgICBwYWdlLmZsaXAoJ2hpZGVGb2xkZWRQYWdlJywgYW5pbWF0ZSk7CgogICAgICAgIGlmICghYW5pbWF0ZSkKICAgICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbChwYWdlLCBmYWxzZSk7CgogICAgICAgIGlmIChvcHRzLmZvcmNlKSB7CiAgICAgICAgICBvcHRzLm5leHQgPSAob3B0cy5wYWdlJTI9PT0wKSA/IG9wdHMucGFnZS0xIDogb3B0cy5wYWdlKzE7CiAgICAgICAgICBkZWxldGUgb3B0c1snZm9yY2UnXTsKICAgICAgICB9CgogICAgICB9CiAgICB9CiAgICAKICAgIHRoaXMudHVybigndXBkYXRlJyk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgbnVtYmVyIG9mIHBhZ2VzCgogIHBhZ2VzOiBmdW5jdGlvbihwYWdlcykgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKHBhZ2VzKSB7CgogICAgICBpZiAocGFnZXM8ZGF0YS50b3RhbFBhZ2VzKSB7CgogICAgICAgIGZvciAodmFyIHBhZ2UgPSBkYXRhLnRvdGFsUGFnZXM7IHBhZ2U+cGFnZXM7IHBhZ2UtLSkKICAgICAgICAgIHRoaXMudHVybigncmVtb3ZlUGFnZScsIHBhZ2UpOwoKICAgICAgfQoKICAgICAgICBkYXRhLnRvdGFsUGFnZXMgPSBwYWdlczsKICAgICAgICB0dXJuTWV0aG9kcy5fZml0UGFnZS5jYWxsKHRoaXMsIGRhdGEucGFnZSk7CgogICAgICByZXR1cm4gdGhpczsKCiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGRhdGEudG90YWxQYWdlczsKCiAgfSwKCiAgLy8gQ2hlY2tzIG1pc3NpbmcgcGFnZXMKCiAgX21pc3NpbmcgOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKGRhdGEudG90YWxQYWdlczwxKQogICAgICByZXR1cm47CgogICAgdmFyIHAsCiAgICAgICAgcmFuZ2UgPSB0aGlzLnR1cm4oJ3JhbmdlJywgcGFnZSksCiAgICAgICAgbWlzc2luZyA9IFtdOwoKICAgIGZvciAocCA9IHJhbmdlWzBdOyBwPD1yYW5nZVsxXTsgcCsrKSB7CiAgICAgIGlmICghZGF0YS5wYWdlT2Jqc1twXSkKICAgICAgICBtaXNzaW5nLnB1c2gocCk7CiAgICB9CgogICAgaWYgKG1pc3NpbmcubGVuZ3RoPjApCiAgICAgIHRoaXMudHJpZ2dlcignbWlzc2luZycsIFttaXNzaW5nXSk7CgogIH0sCgogIC8vIFNldHMgYSBwYWdlIHdpdGhvdXQgZWZmZWN0CgogIF9maXRQYWdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIHBhZ2UpOwoKICAgIHR1cm5NZXRob2RzLl9taXNzaW5nLmNhbGwodGhpcywgcGFnZSk7CiAgICAKICAgIGlmICghZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgcmV0dXJuOwoKICAgIGRhdGEucGFnZSA9IHBhZ2U7CiAgCiAgICB0aGlzLnR1cm4oJ3N0b3AnKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaTxuZXdWaWV3Lmxlbmd0aDsgaSsrKSB7CgogICAgICBpZiAobmV3Vmlld1tpXSAmJiBkYXRhLnBhZ2Vab29tW25ld1ZpZXdbaV1dIT1kYXRhLnpvb20pIHsKICAKICAgICAgICB0aGlzLnRyaWdnZXIoJ3pvb21lZCcsWwogICAgICAgICAgbmV3Vmlld1tpXSwKICAgICAgICAgIG5ld1ZpZXcsCiAgICAgICAgICBkYXRhLnBhZ2Vab29tW25ld1ZpZXdbaV1dLAogICAgICAgICAgZGF0YS56b29tXSk7CgogICAgICAgIGRhdGEucGFnZVpvb21bbmV3Vmlld1tpXV0gPSBkYXRhLnpvb207CgogICAgICB9CiAgICB9CgogICAgdHVybk1ldGhvZHMuX3JlbW92ZUZyb21ET00uY2FsbCh0aGlzKTsKICAgIHR1cm5NZXRob2RzLl9tYWtlUmFuZ2UuY2FsbCh0aGlzKTsKICAgIHR1cm5NZXRob2RzLl91cGRhdGVTaGFkb3cuY2FsbCh0aGlzKTsKICAgIHRoaXMudHJpZ2dlcigndHVybmVkJywgW3BhZ2UsIG5ld1ZpZXddKTsKICAgIHRoaXMudHVybigndXBkYXRlJyk7CgogICAgaWYgKGRhdGEub3B0cy5hdXRvQ2VudGVyKQogICAgICB0aGlzLnR1cm4oJ2NlbnRlcicpOwoKICB9LAogIAogIC8vIFR1cm5zIHRoZSBwYWdlCgogIF90dXJuUGFnZTogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBjdXJyZW50LAogICAgICBuZXh0LAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHBsYWNlID0gZGF0YS5wYWdlUGxhY2VbcGFnZV0sCiAgICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKSwKICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIHBhZ2UpOwoKCiAgICBpZiAoZGF0YS5wYWdlIT1wYWdlKSB7CgogICAgICB2YXIgY3VycmVudFBhZ2UgPSBkYXRhLnBhZ2U7CgogICAgICBpZiAodHJpZ2dlcigndHVybmluZycsIHRoaXMsIFtwYWdlLCBuZXdWaWV3XSk9PSdwcmV2ZW50ZWQnKSB7CgogICAgICAgIGlmIChjdXJyZW50UGFnZT09ZGF0YS5wYWdlICYmICQuaW5BcnJheShwbGFjZSwgZGF0YS5wYWdlTXYpIT0tMSkKICAgICAgICAgIGRhdGEucGFnZXNbcGxhY2VdLmZsaXAoJ2hpZGVGb2xkZWRQYWdlJywgdHJ1ZSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuOwoKICAgICAgfQoKICAgICAgaWYgKCQuaW5BcnJheSgxLCBuZXdWaWV3KSE9LTEpCiAgICAgICAgdGhpcy50cmlnZ2VyKCdmaXJzdCcpOwogICAgICBpZiAoJC5pbkFycmF5KGRhdGEudG90YWxQYWdlcywgbmV3VmlldykhPS0xKQogICAgICAgIHRoaXMudHJpZ2dlcignbGFzdCcpOwoKICAgIH0KCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nc2luZ2xlJykgewogICAgICBjdXJyZW50ID0gdmlld1swXTsKICAgICAgbmV4dCA9IG5ld1ZpZXdbMF07CiAgICB9IGVsc2UgaWYgKHZpZXdbMV0gJiYgcGFnZT52aWV3WzFdKSB7CiAgICAgIGN1cnJlbnQgPSB2aWV3WzFdOwogICAgICBuZXh0ID0gbmV3Vmlld1swXTsKICAgIH0gZWxzZSBpZiAodmlld1swXSAmJiBwYWdlPHZpZXdbMF0pIHsKICAgICAgY3VycmVudCA9IHZpZXdbMF07CiAgICAgIG5leHQgPSBuZXdWaWV3WzFdOwogICAgfQoKICAgIHZhciBvcHRzQ29ybmVycyA9IGRhdGEub3B0cy50dXJuQ29ybmVycy5zcGxpdCgnLCcpLAogICAgICBmbGlwRGF0YSA9IGRhdGEucGFnZXNbY3VycmVudF0uZGF0YSgpLmYsCiAgICAgIG9wdHMgPSBmbGlwRGF0YS5vcHRzLAogICAgICBhY3R1YWxQb2ludCA9IGZsaXBEYXRhLnBvaW50OwoKICAgIHR1cm5NZXRob2RzLl9taXNzaW5nLmNhbGwodGhpcywgcGFnZSk7CiAgICAKICAgIGlmICghZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgcmV0dXJuOwoKICAgIHRoaXMudHVybignc3RvcCcpOwoKICAgIGRhdGEucGFnZSA9IHBhZ2U7CgogICAgdHVybk1ldGhvZHMuX21ha2VSYW5nZS5jYWxsKHRoaXMpOwoKICAgIGRhdGEudHBhZ2UgPSBuZXh0OwoKICAgIGlmIChvcHRzLm5leHQhPW5leHQpIHsKICAgICAgb3B0cy5uZXh0ID0gbmV4dDsKICAgICAgb3B0cy5mb3JjZSA9IHRydWU7CiAgICB9CgogICAgdGhpcy50dXJuKCd1cGRhdGUnKTsKCiAgICBmbGlwRGF0YS5wb2ludCA9IGFjdHVhbFBvaW50OwogICAgCiAgICBpZiAoZmxpcERhdGEuZWZmZWN0PT0naGFyZCcpCiAgICAgIGlmIChkYXRhLmRpcmVjdGlvbj09J2x0cicpCiAgICAgICAgZGF0YS5wYWdlc1tjdXJyZW50XS5mbGlwKCd0dXJuUGFnZScsCiAgICAgICAgICAocGFnZT5jdXJyZW50KSA/ICdyJyA6ICdsJyk7CiAgICAgIGVsc2UKICAgICAgICBkYXRhLnBhZ2VzW2N1cnJlbnRdLmZsaXAoJ3R1cm5QYWdlJywKICAgICAgICAgIChwYWdlPmN1cnJlbnQpID8gJ2wnIDogJ3InKTsKICAgIGVsc2UgewogICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKQogICAgICAgIGRhdGEucGFnZXNbY3VycmVudF0uZmxpcCgndHVyblBhZ2UnLAogICAgICAgICAgb3B0c0Nvcm5lcnNbKHBhZ2U+Y3VycmVudCkgPyAxIDogMF0pOwogICAgICBlbHNlCiAgICAgICAgZGF0YS5wYWdlc1tjdXJyZW50XS5mbGlwKCd0dXJuUGFnZScsCiAgICAgICAgICBvcHRzQ29ybmVyc1socGFnZT5jdXJyZW50KSA/IDAgOiAxXSk7CiAgICB9CgogIH0sCgogIC8vIEdldHMgYW5kIHNldHMgYSBwYWdlCgogIHBhZ2U6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChwYWdlPT09dW5kZWZpbmVkKSB7CiAgICAgIAogICAgICByZXR1cm4gZGF0YS5wYWdlOwoKICAgIH0gZWxzZSB7CgogICAgICBpZiAoIWRhdGEuZGlzYWJsZWQgJiYgIWRhdGEuZGVzdHJveWluZykgewoKICAgICAgICBwYWdlID0gcGFyc2VJbnQocGFnZSwgMTApOwoKICAgICAgICBpZiAocGFnZT4wICYmIHBhZ2U8PWRhdGEudG90YWxQYWdlcykgewoKICAgICAgICAgIGlmIChwYWdlIT1kYXRhLnBhZ2UpIHsKICAgICAgICAgICAgaWYgKCFkYXRhLmRvbmUgfHwgJC5pbkFycmF5KHBhZ2UsIHRoaXMudHVybigndmlldycpKSE9LTEpCiAgICAgICAgICAgICAgdHVybk1ldGhvZHMuX2ZpdFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHR1cm5NZXRob2RzLl90dXJuUGFnZS5jYWxsKHRoaXMsIHBhZ2UpOwogICAgICAgICAgfQogICAgICAKICAgICAgICAgIHJldHVybiB0aGlzOwoKICAgICAgICB9IGVsc2UgewogICAgICAgIAogICAgICAgICAgdGhyb3cgdHVybkVycm9yKCdUaGUgcGFnZSAnICsgcGFnZSArICcgZG9lcyBub3QgZXhpc3QnKTsKCiAgICAgICAgfQoKICAgICAgfQoKICAgIH0KCiAgfSwKCiAgLy8gVHVybnMgdG8gdGhlIG5leHQgdmlldwoKICBuZXh0OiBmdW5jdGlvbigpIHsKCiAgICByZXR1cm4gdGhpcy50dXJuKCdwYWdlJywgTWF0aC5taW4odGhpcy5kYXRhKCkudG90YWxQYWdlcywKICAgICAgdHVybk1ldGhvZHMuX3ZpZXcuY2FsbCh0aGlzLCB0aGlzLmRhdGEoKS5wYWdlKS5wb3AoKSArIDEpKTsKICAKICB9LAoKICAvLyBUdXJucyB0byB0aGUgcHJldmlvdXMgdmlldwoKICBwcmV2aW91czogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMudHVybigncGFnZScsIE1hdGgubWF4KDEsCiAgICAgIHR1cm5NZXRob2RzLl92aWV3LmNhbGwodGhpcywgdGhpcy5kYXRhKCkucGFnZSkuc2hpZnQoKSAtIDEpKTsKCiAgfSwKCiAgLy8gU2hvd3MgYSBwZWVsaW5nIGNvcm5lcgoKICBwZWVsOiBmdW5jdGlvbihjb3JuZXIsIGFuaW1hdGUpIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpOwoKICAgIGFuaW1hdGUgPSAoYW5pbWF0ZT09PXVuZGVmaW5lZCkgPyB0cnVlIDogYW5pbWF0ZT09PXRydWU7CgogICAgaWYgKGNvcm5lcj09PWZhbHNlKSB7CiAgICAgIAogICAgICB0aGlzLnR1cm4oJ3N0b3AnLCBudWxsLCBhbmltYXRlKTsKCiAgICB9IGVsc2UgewogICAgCiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CgogICAgICAgIGRhdGEucGFnZXNbZGF0YS5wYWdlXS5mbGlwKCdwZWVsJywgY29ybmVyLCBhbmltYXRlKTsKCiAgICAgIH0gZWxzZSB7CgogICAgICAgIHZhciBwYWdlOwoKICAgICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSB7CiAgICAgICAgICAKICAgICAgICAgIHBhZ2UgPSAoY29ybmVyLmluZGV4T2YoJ2wnKSE9LTEpID8gdmlld1swXSA6IHZpZXdbMV07CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAKICAgICAgICAgIHBhZ2UgPSAoY29ybmVyLmluZGV4T2YoJ2wnKSE9LTEpID8gdmlld1sxXSA6IHZpZXdbMF07CgogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoZGF0YS5wYWdlc1twYWdlXSkKICAgICAgICAgIGRhdGEucGFnZXNbcGFnZV0uZmxpcCgncGVlbCcsIGNvcm5lciwgYW5pbWF0ZSk7CgogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHRoaXM7CgogIH0sCgogIC8vIEFkZHMgYSBtb3Rpb24gdG8gdGhlIGludGVybmFsIGxpc3QKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2FkZE1vdGlvblBhZ2U6IGZ1bmN0aW9uKCkgewoKICAgIHZhciBvcHRzID0gJCh0aGlzKS5kYXRhKCkuZi5vcHRzLAogICAgICB0dXJuID0gb3B0cy50dXJuLAogICAgICBkZCA9IHR1cm4uZGF0YSgpOwoKICAgIHR1cm5NZXRob2RzLl9hZGRNdi5jYWxsKHR1cm4sIG9wdHMucGFnZSk7CgogIH0sCgogIC8vIFRoaXMgZXZlbnQgaXMgY2FsbGVkIGluIGNvbnRleHQgb2YgZmxpcAoKICBfZXZlbnRTdGFydDogZnVuY3Rpb24oZSwgb3B0cywgY29ybmVyKSB7CgogICAgdmFyIGRhdGEgPSBvcHRzLnR1cm4uZGF0YSgpLAogICAgICBhY3R1YWxab29tID0gZGF0YS5wYWdlWm9vbVtvcHRzLnBhZ2VdOwoKICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7CiAgICAgIHR1cm5NZXRob2RzLl91cGRhdGVTaGFkb3cuY2FsbChvcHRzLnR1cm4pOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGFjdHVhbFpvb20gJiYgYWN0dWFsWm9vbSE9ZGF0YS56b29tKSB7CiAgICAgIAogICAgICBvcHRzLnR1cm4udHJpZ2dlcignem9vbWVkJyxbCiAgICAgICAgb3B0cy5wYWdlLAogICAgICAgIG9wdHMudHVybi50dXJuKCd2aWV3Jywgb3B0cy5wYWdlKSwKICAgICAgICBhY3R1YWxab29tLAogICAgICAgIGRhdGEuem9vbV0pOwoKICAgICAgZGF0YS5wYWdlWm9vbVtvcHRzLnBhZ2VdID0gZGF0YS56b29tOwoKICAgIH0KCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nc2luZ2xlJyAmJiBjb3JuZXIpIHsKCiAgICAgIGlmICgoY29ybmVyLmNoYXJBdCgxKT09J2wnICYmIGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgfHwKICAgICAgICAoY29ybmVyLmNoYXJBdCgxKT09J3InICYmIGRhdGEuZGlyZWN0aW9uPT0ncnRsJykpCiAgICAgIHsKICAgICAgICAKICAgICAgICBvcHRzLm5leHQgPSAob3B0cy5uZXh0PG9wdHMucGFnZSkgPyBvcHRzLm5leHQgOiBvcHRzLnBhZ2UtMTsKICAgICAgICBvcHRzLmZvcmNlID0gdHJ1ZTsKCiAgICAgIH0gZWxzZSB7CiAgICAgICAgCiAgICAgICAgb3B0cy5uZXh0ID0gKG9wdHMubmV4dD5vcHRzLnBhZ2UpID8gb3B0cy5uZXh0IDogb3B0cy5wYWdlKzE7CgogICAgICB9CgogICAgfQoKICAgIHR1cm5NZXRob2RzLl9hZGRNb3Rpb25QYWdlLmNhbGwoZS50YXJnZXQpOwogICAgdHVybk1ldGhvZHMuX3VwZGF0ZVNoYWRvdy5jYWxsKG9wdHMudHVybik7CiAgfSwKCiAgLy8gVGhpcyBldmVudCBpcyBjYWxsZWQgaW4gY29udGV4dCBvZiBmbGlwCgogIF9ldmVudEVuZDogZnVuY3Rpb24oZSwgb3B0cywgdHVybmVkKSB7CiAgCiAgICB2YXIgdGhhdCA9ICQoZS50YXJnZXQpLAogICAgICBkYXRhID0gdGhhdC5kYXRhKCkuZiwKICAgICAgdHVybiA9IG9wdHMudHVybiwKICAgICAgZGQgPSB0dXJuLmRhdGEoKTsKCiAgICBpZiAodHVybmVkKSB7CgogICAgICB2YXIgdHBhZ2UgPSBkZC50cGFnZSB8fCBkZC5wYWdlOwogICAgCiAgICAgIGlmICh0cGFnZT09b3B0cy5uZXh0IHx8IHRwYWdlPT1vcHRzLnBhZ2UpIHsKICAgICAgICBkZWxldGUgZGQudHBhZ2U7CgogICAgICAgIHR1cm5NZXRob2RzLl9maXRQYWdlLmNhbGwodHVybiwgdHBhZ2UgfHwgb3B0cy5uZXh0LCB0cnVlKTsKICAgICAgfQoKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlTXYuY2FsbCh0dXJuLCBvcHRzLnBhZ2UpOwogICAgICB0dXJuTWV0aG9kcy5fdXBkYXRlU2hhZG93LmNhbGwodHVybik7CiAgICAgIHR1cm4udHVybigndXBkYXRlJyk7CgogICAgfQogICAgCiAgfSwKICAKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2V2ZW50UHJlc3NlZDogZnVuY3Rpb24oZSkgewoKICAgIHZhciBwYWdlLAogICAgICBkYXRhID0gJChlLnRhcmdldCkuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKSwKICAgICAgcGFnZXMgPSB0dXJuRGF0YS5wYWdlczsKICAgIAogICAgdHVybkRhdGEubW91c2VBY3Rpb24gPSB0cnVlOwoKICAgIHR1cm4udHVybigndXBkYXRlJyk7CgogICAgcmV0dXJuIGRhdGEudGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwoKICB9LAoKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2V2ZW50UmVsZWFzZWQ6IGZ1bmN0aW9uKGUsIHBvaW50KSB7CgogICAgdmFyIG91dEFyZWEsCiAgICAgIHBhZ2UgPSAkKGUudGFyZ2V0KSwKICAgICAgZGF0YSA9IHBhZ2UuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKTsKICAgIAogICAgaWYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CiAgICAgIG91dEFyZWEgPSAocG9pbnQuY29ybmVyPT0nYnInIHx8IHBvaW50LmNvcm5lcj09J3RyJykgPwogICAgICAgIHBvaW50Lng8cGFnZS53aWR0aCgpLzI6CiAgICAgICAgcG9pbnQueD5wYWdlLndpZHRoKCkvMjsKICAgIH0gZWxzZSB7CiAgICAgIG91dEFyZWEgPSBwb2ludC54PDAgfHwgcG9pbnQueD5wYWdlLndpZHRoKCk7CiAgICB9CgogICAgaWYgKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCktZGF0YS50aW1lPDIwMCB8fCBvdXRBcmVhKSB7CgogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHR1cm5NZXRob2RzLl90dXJuUGFnZS5jYWxsKHR1cm4sIGRhdGEub3B0cy5uZXh0KTsKCiAgICB9CgogICAgdHVybkRhdGEubW91c2VBY3Rpb24gPSBmYWxzZTsKCiAgfSwKCiAgLy8gVGhpcyBldmVudCBpcyBjYWxsZWQgaW4gY29udGV4dCBvZiBmbGlwCiAgCiAgX2ZsaXA6IGZ1bmN0aW9uKGUpIHsKCiAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwoKICAgIHZhciBvcHRzID0gJChlLnRhcmdldCkuZGF0YSgpLmYub3B0czsKCiAgICBvcHRzLnR1cm4udHJpZ2dlcigndHVybicsIFtvcHRzLm5leHRdKTsKCiAgICBpZiAob3B0cy50dXJuLmRhdGEoKS5vcHRzLmF1dG9DZW50ZXIpIHsKICAgICAgb3B0cy50dXJuLnR1cm4oJ2NlbnRlcicsIG9wdHMubmV4dCk7CiAgICB9CgogIH0sCgogLy8KICBfdG91Y2hTdGFydDogZnVuY3Rpb24oKSB7CiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwogICAgZm9yICh2YXIgcGFnZSBpbiBkYXRhLnBhZ2VzKSB7CiAgICAgIGlmIChoYXMocGFnZSwgZGF0YS5wYWdlcykgJiYKICAgICAgICBmbGlwTWV0aG9kcy5fZXZlbnRTdGFydC5hcHBseShkYXRhLnBhZ2VzW3BhZ2VdLCBhcmd1bWVudHMpPT09ZmFsc2UpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogIH0sCiAgCiAgLy8KICBfdG91Y2hNb3ZlOiBmdW5jdGlvbigpIHsKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICBmb3IgKHZhciBwYWdlIGluIGRhdGEucGFnZXMpIHsKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VzKSkgewogICAgICAgIGZsaXBNZXRob2RzLl9ldmVudE1vdmUuYXBwbHkoZGF0YS5wYWdlc1twYWdlXSwgYXJndW1lbnRzKTsKICAgICAgfQogICAgfQogIH0sCgogIC8vCiAgX3RvdWNoRW5kOiBmdW5jdGlvbigpIHsKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICBmb3IgKHZhciBwYWdlIGluIGRhdGEucGFnZXMpIHsKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VzKSkgewogICAgICAgIGZsaXBNZXRob2RzLl9ldmVudEVuZC5hcHBseShkYXRhLnBhZ2VzW3BhZ2VdLCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9CiAgfSwKCiAgLy8gQ2FsY3VsYXRlIHRoZSB6LWluZGV4IHZhbHVlIGZvciBwYWdlcyBkdXJpbmcgdGhlIGFuaW1hdGlvbgoKICBjYWxjdWxhdGVaOiBmdW5jdGlvbihtdikgewoKICAgIHZhciBpLCBwYWdlLCBuZXh0UGFnZSwgcGxhY2VQYWdlLCBkcGFnZSwKICAgICAgdGhhdCA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpLAogICAgICBjdXJyZW50UGFnZSA9IHZpZXdbMF0gfHwgdmlld1sxXSwKICAgICAgdG90YWwgPSBtdi5sZW5ndGgtMSwKICAgICAgciA9IHtwYWdlWjoge30sIHBhcnRaOiB7fSwgcGFnZVY6IHt9fSwKCiAgICAgIGFkZFZpZXcgPSBmdW5jdGlvbihwYWdlKSB7CiAgICAgICAgdmFyIHZpZXcgPSB0aGF0LnR1cm4oJ3ZpZXcnLCBwYWdlKTsKICAgICAgICBpZiAodmlld1swXSkgci5wYWdlVlt2aWV3WzBdXSA9IHRydWU7CiAgICAgICAgaWYgKHZpZXdbMV0pIHIucGFnZVZbdmlld1sxXV0gPSB0cnVlOwogICAgICB9OwogICAgCiAgICBmb3IgKGkgPSAwOyBpPD10b3RhbDsgaSsrKSB7CiAgICAgIHBhZ2UgPSBtdltpXTsKICAgICAgbmV4dFBhZ2UgPSBkYXRhLnBhZ2VzW3BhZ2VdLmRhdGEoKS5mLm9wdHMubmV4dDsKICAgICAgcGxhY2VQYWdlID0gZGF0YS5wYWdlUGxhY2VbcGFnZV07CiAgICAgIGFkZFZpZXcocGFnZSk7CiAgICAgIGFkZFZpZXcobmV4dFBhZ2UpOwogICAgICBkcGFnZSA9IChkYXRhLnBhZ2VQbGFjZVtuZXh0UGFnZV09PW5leHRQYWdlKSA/IG5leHRQYWdlIDogcGFnZTsKICAgICAgci5wYWdlWltkcGFnZV0gPSBkYXRhLnRvdGFsUGFnZXMgLSBNYXRoLmFicyhjdXJyZW50UGFnZS1kcGFnZSk7CiAgICAgIHIucGFydFpbcGxhY2VQYWdlXSA9IGRhdGEudG90YWxQYWdlcyoyIC0gIHRvdGFsICsgaTsKICAgIH0KCiAgICByZXR1cm4gcjsKICB9LAoKICAvLyBVcGRhdGVzIHRoZSB6LWluZGV4IGFuZCBkaXNwbGF5IHByb3BlcnR5IG9mIGV2ZXJ5IHBhZ2UKCiAgdXBkYXRlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgcGFnZSwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmICh0aGlzLnR1cm4oJ2FuaW1hdGluZycpICYmIGRhdGEucGFnZU12WzBdIT09MCkgewoKICAgICAgLy8gVXBkYXRlIG1vdGlvbgoKICAgICAgdmFyIHAsIGFwYWdlLCBmaXhlZCwKICAgICAgICBwb3MgPSB0aGlzLnR1cm4oJ2NhbGN1bGF0ZVonLCBkYXRhLnBhZ2VNdiksCiAgICAgICAgY29ybmVyID0gdGhpcy50dXJuKCdjb3JuZXInKSwKICAgICAgICBhY3R1YWxWaWV3ID0gdGhpcy50dXJuKCd2aWV3JyksCiAgICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIGRhdGEudHBhZ2UpOwogIAogICAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkgewoKICAgICAgICBpZiAoIWhhcyhwYWdlLCBkYXRhLnBhZ2VXcmFwKSkKICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICBmaXhlZCA9IGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ2ZpeGVkJyk7CgogICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKHsKICAgICAgICAgIGRpc3BsYXk6IChwb3MucGFnZVZbcGFnZV0gfHwgZml4ZWQpID8gJycgOiAnbm9uZScsCiAgICAgICAgICB6SW5kZXg6CiAgICAgICAgICAgIChkYXRhLnBhZ2VPYmpzW3BhZ2VdLmhhc0NsYXNzKCdoYXJkJykgPwogICAgICAgICAgICAgIHBvcy5wYXJ0WltwYWdlXQogICAgICAgICAgICAgIDoKICAgICAgICAgICAgICBwb3MucGFnZVpbcGFnZV0KICAgICAgICAgICAgKSB8fCAoZml4ZWQgPyAtMSA6IDApCiAgICAgICAgfSk7CgogICAgICAgIGlmICgocCA9IGRhdGEucGFnZXNbcGFnZV0pKSB7CgogICAgICAgICAgcC5mbGlwKCd6JywgcG9zLnBhcnRaW3BhZ2VdIHx8IG51bGwpOwoKICAgICAgICAgIGlmIChwb3MucGFnZVZbcGFnZV0pCiAgICAgICAgICAgIHAuZmxpcCgncmVzaXplJyk7CiAgICAgICAgICAKICAgICAgICAgIGlmIChkYXRhLnRwYWdlKSB7IC8vIElzIGl0IHR1cm5pbmcgdGhlIHBhZ2UgdG8gYHRwYWdlYD8KCiAgICAgICAgICAgIHAuZmxpcCgnaG92ZXInLCBmYWxzZSkuCiAgICAgICAgICAgICAgZmxpcCgnZGlzYWJsZScsCiAgICAgICAgICAgICAgICAkLmluQXJyYXkocGFyc2VJbnQocGFnZSwgMTApLCBkYXRhLnBhZ2VNdik9PS0xICYmCiAgICAgICAgICAgICAgICBwYWdlIT1uZXdWaWV3WzBdICYmCiAgICAgICAgICAgICAgICBwYWdlIT1uZXdWaWV3WzFdKTsKCiAgICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgcC5mbGlwKCdob3ZlcicsIGNvcm5lcj09PWZhbHNlKS4KICAgICAgICAgICAgICBmbGlwKCdkaXNhYmxlJywgcGFnZSE9YWN0dWFsVmlld1swXSAmJiBwYWdlIT1hY3R1YWxWaWV3WzFdKTsKCiAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgIH0KCiAgICB9IGVsc2UgewoKICAgICAgLy8gVXBkYXRlIHN0YXRpYyBwYWdlcwoKICAgICAgZm9yIChwYWdlIGluIGRhdGEucGFnZVdyYXApIHsKCiAgICAgICAgaWYgKCFoYXMocGFnZSwgZGF0YS5wYWdlV3JhcCkpCiAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgdmFyIHBhZ2VMb2NhdGlvbiA9IHR1cm5NZXRob2RzLl9zZXRQYWdlTG9jLmNhbGwodGhpcywgcGFnZSk7CgogICAgICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKSB7CiAgICAgICAgICBkYXRhLnBhZ2VzW3BhZ2VdLgogICAgICAgICAgICBmbGlwKCdkaXNhYmxlJywgZGF0YS5kaXNhYmxlZCB8fCBwYWdlTG9jYXRpb24hPTEpLgogICAgICAgICAgICBmbGlwKCdob3ZlcicsIHRydWUpLgogICAgICAgICAgICBmbGlwKCd6JywgbnVsbCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgLy8gVXBkYXRlcyB0aGUgcG9zaXRpb24gYW5kIHNpemUgb2YgdGhlIGZsaXBib29rJ3Mgc2hhZG93CgogIF91cGRhdGVTaGFkb3c6IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgdmlldywgdmlldzIsIHNoYWRvdywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKSwKICAgICAgcGFnZVdpZHRoID0gKGRhdGEuZGlzcGxheT09J3NpbmdsZScpID8gd2lkdGggOiB3aWR0aC8yOwoKICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKTsKCiAgICBpZiAoIWRhdGEuc2hhZG93KSB7CiAgICAgIGRhdGEuc2hhZG93ID0gJCgnPGRpdiAvPicsIHsKICAgICAgICAgICdjbGFzcyc6ICdzaGFkb3cnLAogICAgICAgICAgJ2Nzcyc6IGRpdkF0dCgwLCAwLCAwKS5jc3MKICAgICAgICB9KS4KICAgICAgICBhcHBlbmRUbyh0aGlzKTsKICAgIH0KCiAgICBmb3IgKHZhciBpID0gMDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykgewogICAgICBpZiAoIXZpZXdbMF0gfHwgIXZpZXdbMV0pCiAgICAgICAgYnJlYWs7CiAgICAKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycsIGRhdGEucGFnZXNbZGF0YS5wYWdlTXZbaV1dLmRhdGEoKS5mLm9wdHMubmV4dCk7CiAgICAgIHZpZXcyID0gdGhpcy50dXJuKCd2aWV3JywgZGF0YS5wYWdlTXZbaV0pOwoKICAgICAgdmlld1swXSA9IHZpZXdbMF0gJiYgdmlldzJbMF07CiAgICAgIHZpZXdbMV0gPSB2aWV3WzFdICYmIHZpZXcyWzFdOwogICAgfQoKICAgIGlmICghdmlld1swXSkgc2hhZG93ID0gKGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPyAxIDogMjsKICAgIGVsc2UgaWYgKCF2aWV3WzFdKSBzaGFkb3cgPSAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSA/IDIgOiAxOwogICAgZWxzZSBzaGFkb3cgPSAzOwoKICAgIHN3aXRjaCAoc2hhZG93KSB7CiAgICAgIGNhc2UgMToKICAgICAgICBkYXRhLnNoYWRvdy5jc3MoewogICAgICAgICAgd2lkdGg6IHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogcGFnZVdpZHRoCiAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjoKICAgICAgICBkYXRhLnNoYWRvdy5jc3MoewogICAgICAgICAgd2lkdGg6IHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogMAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDM6CiAgICAgICAgZGF0YS5zaGFkb3cuY3NzKHsKICAgICAgICAgIHdpZHRoOiB3aWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogMAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgfQoKICB9LAoKICAvLyBTZXRzIHRoZSB6LWluZGV4IGFuZCBkaXNwbGF5IHByb3BlcnR5IG9mIGEgcGFnZQogIC8vIEl0IGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgdmlldwoKICBfc2V0UGFnZUxvYzogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKSwKICAgICAgbG9jID0gMDsKCiAgICAKICAgIGlmIChwYWdlPT12aWV3WzBdIHx8IHBhZ2U9PXZpZXdbMV0pCiAgICAgIGxvYyA9IDE7CiAgICBlbHNlIGlmICgKICAgICAgKGRhdGEuZGlzcGxheT09J3NpbmdsZScgJiYgcGFnZT09dmlld1swXSsxKSB8fAogICAgICAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJyAmJiBwYWdlPT12aWV3WzBdLTIgfHwgcGFnZT09dmlld1sxXSsyKQogICAgKQogICAgICBsb2MgPSAyOwoKICAgIGlmICghdGhpcy50dXJuKCdhbmltYXRpbmcnKSkKICAgICAgc3dpdGNoIChsb2MpIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcygKICAgICAgICAgIHsKICAgICAgICAgICAgekluZGV4OiBkYXRhLnRvdGFsUGFnZXMsCiAgICAgICAgICAgIGRpc3BsYXk6ICcnCiAgICAgICAgICB9KTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcygKICAgICAgICAgIHsKICAgICAgICAgICAgekluZGV4OiBkYXRhLnRvdGFsUGFnZXMtMSwKICAgICAgICAgICAgZGlzcGxheTogJycKICAgICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMDoKICAgICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKAogICAgICAgICAgewogICAgICAgICAgICB6SW5kZXg6IDAsCiAgICAgICAgICAgIGRpc3BsYXk6IChkYXRhLnBhZ2VPYmpzW3BhZ2VdLmhhc0NsYXNzKCdmaXhlZCcpKSA/ICcnIDogJ25vbmUnfQogICAgICAgICAgKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgCiAgICByZXR1cm4gbG9jOwogIH0sCgogIC8vIEdldHMgYW5kIHNldHMgdGhlIG9wdGlvbnMKCiAgb3B0aW9uczogZnVuY3Rpb24ob3B0aW9ucykgewogICAgCiAgICBpZiAob3B0aW9ucz09PXVuZGVmaW5lZCkgewogICAgICAKICAgICAgcmV0dXJuIHRoaXMuZGF0YSgpLm9wdHM7CgogICAgfSBlbHNlIHsKCiAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgICAvLyBTZXQgbmV3IHZhbHVlcwoKICAgICAgJC5leHRlbmQoZGF0YS5vcHRzLCBvcHRpb25zKTsKICAgICAgCiAgICAgIC8vIFNldCBwYWdlcwoKICAgICAgaWYgKG9wdGlvbnMucGFnZXMpCiAgICAgICAgdGhpcy50dXJuKCdwYWdlcycsIG9wdGlvbnMucGFnZXMpOwoKICAgICAgLy8gU2V0IHBhZ2UKCiAgICAgIGlmIChvcHRpb25zLnBhZ2UpCiAgICAgICAgdGhpcy50dXJuKCdwYWdlJywgb3B0aW9ucy5wYWdlKTsKCiAgICAgIC8vIFNldCBkaXNwbGF5CgogICAgICBpZiAob3B0aW9ucy5kaXNwbGF5KQogICAgICAgIHRoaXMudHVybignZGlzcGxheScsIG9wdGlvbnMuZGlzcGxheSk7CiAgICAgIAogICAgICAvLyBTZXQgZGlyZWN0aW9uCgogICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24pCiAgICAgICAgdGhpcy50dXJuKCdkaXJlY3Rpb24nLCBvcHRpb25zLmRpcmVjdGlvbik7CgogICAgICAvLyBTZXQgc2l6ZQoKICAgICAgaWYgKG9wdGlvbnMud2lkdGggJiYgb3B0aW9ucy5oZWlnaHQpCiAgICAgICAgdGhpcy50dXJuKCdzaXplJywgb3B0aW9ucy53aWR0aCwgb3B0aW9ucy5oZWlnaHQpOwogICAgICAKICAgICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVycwoKICAgICAgaWYgKG9wdGlvbnMud2hlbikKICAgICAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gb3B0aW9ucy53aGVuKQogICAgICAgICAgaWYgKGhhcyhldmVudE5hbWUsIG9wdGlvbnMud2hlbikpIHsKICAgICAgICAgICAgdGhpcy51bmJpbmQoZXZlbnROYW1lKS4KICAgICAgICAgICAgICBiaW5kKGV2ZW50TmFtZSwgb3B0aW9ucy53aGVuW2V2ZW50TmFtZV0pOwogICAgICAgICAgfQoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogIH0sCgogIC8vIEdldHMgdGhlIGN1cnJlbnQgdmVyc2lvbgoKICB2ZXJzaW9uOiBmdW5jdGlvbigpIHsKCiAgICByZXR1cm4gdmVyc2lvbjsKCiAgfQp9LAoKLy8gTWV0aG9kcyBhbmQgcHJvcGVydGllcyBmb3IgdGhlIGZsaXAgcGFnZSBlZmZlY3QKCmZsaXBNZXRob2RzID0gewoKICAvLyBDb25zdHJ1Y3RvcgoKICBpbml0OiBmdW5jdGlvbihvcHRzKSB7CgogICAgdGhpcy5kYXRhKHtmOiB7CiAgICAgIGRpc2FibGVkOiBmYWxzZSwKICAgICAgaG92ZXI6IGZhbHNlLAogICAgICBlZmZlY3Q6ICh0aGlzLmhhc0NsYXNzKCdoYXJkJykpID8gJ2hhcmQnIDogJ3NoZWV0JwogICAgfX0pOwogIAogICAgdGhpcy5mbGlwKCdvcHRpb25zJywgb3B0cyk7CgogICAgZmxpcE1ldGhvZHMuX2FkZFBhZ2VXcmFwcGVyLmNhbGwodGhpcyk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgc2V0RGF0YTogZnVuY3Rpb24oZCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGRhdGEuZiA9ICQuZXh0ZW5kKGRhdGEuZiwgZCk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgb3B0aW9uczogZnVuY3Rpb24ob3B0cykgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKG9wdHMpIHsKICAgICAgZmxpcE1ldGhvZHMuc2V0RGF0YS5jYWxsKHRoaXMsCiAgICAgICAge29wdHM6ICQuZXh0ZW5kKHt9LCBkYXRhLm9wdHMgfHwgZmxpcE9wdGlvbnMsIG9wdHMpfSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlCiAgICAgIHJldHVybiBkYXRhLm9wdHM7CgogIH0sCgogIHo6IGZ1bmN0aW9uKHopIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mOwoKICAgIGRhdGEub3B0c1snei1pbmRleCddID0gejsKCiAgICBpZiAoZGF0YS5md3JhcHBlcikKICAgICAgZGF0YS5md3JhcHBlci5jc3MoewogICAgICAgIHpJbmRleDogeiB8fCBwYXJzZUludChkYXRhLnBhcmVudC5jc3MoJ3otaW5kZXgnKSwgMTApIHx8IDAKICAgICAgfSk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgX2NBbGxvd2VkOiBmdW5jdGlvbigpIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICBwYWdlID0gZGF0YS5vcHRzLnBhZ2UsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICBvZGQgPSBwYWdlJTI7CiAgICAKICAgIGlmIChkYXRhLmVmZmVjdD09J2hhcmQnKSB7CiAgICAKICAgICAgcmV0dXJuICh0dXJuRGF0YS5kaXJlY3Rpb249PSdsdHInKSA/CiAgICAgICAgWyhvZGQpID8gJ3InIDogJ2wnXSA6CiAgICAgICAgWyhvZGQpID8gJ2wnIDogJ3InXTsKCiAgICB9IGVsc2UgewoKICAgICAgaWYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CgogICAgICAgIGlmIChwYWdlPT0xKQogICAgICAgICAgcmV0dXJuICh0dXJuRGF0YS5kaXJlY3Rpb249PSdsdHInKSA/CiAgICAgICAgICAgIGNvcm5lcnNbJ2ZvcndhcmQnXSA6IGNvcm5lcnNbJ2JhY2t3YXJkJ107CiAgICAgICAgZWxzZSBpZiAocGFnZT09dHVybkRhdGEudG90YWxQYWdlcykKICAgICAgICAgIHJldHVybiAodHVybkRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPwogICAgICAgICAgICBjb3JuZXJzWydiYWNrd2FyZCddIDogY29ybmVyc1snZm9yd2FyZCddOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBjb3JuZXJzWydhbGwnXTsKCiAgICAgIH0gZWxzZSB7CgogICAgICAgIHJldHVybiAodHVybkRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPwogICAgICAgICAgY29ybmVyc1sob2RkKSA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCddCiAgICAgICAgICA6CiAgICAgICAgICBjb3JuZXJzWyhvZGQpID8gJ2JhY2t3YXJkJyA6ICdmb3J3YXJkJ107CgogICAgICB9CgogICAgfQoKICB9LAoKICBfY29ybmVyQWN0aXZhdGVkOiBmdW5jdGlvbihwKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKSwKICAgICAgcG9pbnQgPSB7eDogcC54LCB5OiBwLnksIGNvcm5lcjogJyd9LAogICAgICBjc3ogPSBkYXRhLm9wdHMuY29ybmVyU2l6ZTsKCiAgICBpZiAocG9pbnQueDw9MCB8fCBwb2ludC55PD0wIHx8IHBvaW50Lng+PXdpZHRoIHx8IHBvaW50Lnk+PWhlaWdodCkKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIHZhciBhbGxvd2VkQ29ybmVycyA9IGZsaXBNZXRob2RzLl9jQWxsb3dlZC5jYWxsKHRoaXMpOwoKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKICAgICAgY2FzZSAnaGFyZCc6CiAgICAgICAgCiAgICAgICAgaWYgKHBvaW50Lng+d2lkdGgtY3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyID0gJ3InOwogICAgICAgIGVsc2UgaWYgKHBvaW50Lng8Y3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyID0gJ2wnOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgCiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlICdzaGVldCc6CiAgICAgICAgCiAgICAgICAgaWYgKHBvaW50Lnk8Y3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyKz0gJ3QnOwogICAgICAgIGVsc2UgaWYgKHBvaW50Lnk+PWhlaWdodC1jc3opCiAgICAgICAgICBwb2ludC5jb3JuZXIrPSAnYic7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgCiAgICAgICAgaWYgKHBvaW50Lng8PWNzeikKICAgICAgICAgIHBvaW50LmNvcm5lcis9ICdsJzsKICAgICAgICBlbHNlIGlmIChwb2ludC54Pj13aWR0aC1jc3opCiAgICAgICAgICBwb2ludC5jb3JuZXIrPSAncic7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgICAgIGJyZWFrOwogICAgICB9CgogICAgcmV0dXJuICghcG9pbnQuY29ybmVyIHx8ICQuaW5BcnJheShwb2ludC5jb3JuZXIsIGFsbG93ZWRDb3JuZXJzKT09LTEpID8KICAgICAgZmFsc2UgOiBwb2ludDsKCiAgfSwKCiAgX2lzSUFyZWE6IGZ1bmN0aW9uKGUpIHsKCiAgICB2YXIgcG9zID0gdGhpcy5kYXRhKCkuZi5wYXJlbnQub2Zmc2V0KCk7CgogICAgZSA9IChpc1RvdWNoICYmIGUub3JpZ2luYWxFdmVudCkgPyBlLm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXSA6IGU7CgogICAgcmV0dXJuIGZsaXBNZXRob2RzLl9jb3JuZXJBY3RpdmF0ZWQuY2FsbCh0aGlzLAogICAgICB7CiAgICAgICAgeDogZS5wYWdlWC1wb3MubGVmdCwKICAgICAgICB5OiBlLnBhZ2VZLXBvcy50b3AKICAgICAgfSk7CgogIH0sCgogIF9jOiBmdW5jdGlvbihjb3JuZXIsIG9wdHMpIHsKCiAgICBvcHRzID0gb3B0cyB8fCAwOwoKICAgIHN3aXRjaCAoY29ybmVyKSB7CiAgICAgIGNhc2UgJ3RsJzoKICAgICAgICByZXR1cm4gcG9pbnQyRChvcHRzLCBvcHRzKTsKICAgICAgY2FzZSAndHInOgogICAgICAgIHJldHVybiBwb2ludDJEKHRoaXMud2lkdGgoKS1vcHRzLCBvcHRzKTsKICAgICAgY2FzZSAnYmwnOgogICAgICAgIHJldHVybiBwb2ludDJEKG9wdHMsIHRoaXMuaGVpZ2h0KCktb3B0cyk7CiAgICAgIGNhc2UgJ2JyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCh0aGlzLndpZHRoKCktb3B0cywgdGhpcy5oZWlnaHQoKS1vcHRzKTsKICAgICAgY2FzZSAnbCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQob3B0cywgMCk7CiAgICAgIGNhc2UgJ3InOgogICAgICAgIHJldHVybiBwb2ludDJEKHRoaXMud2lkdGgoKS1vcHRzLCAwKTsKICAgIH0KCiAgfSwKCiAgX2MyOiBmdW5jdGlvbihjb3JuZXIpIHsKCiAgICBzd2l0Y2ggKGNvcm5lcikgewogICAgICBjYXNlICd0bCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQodGhpcy53aWR0aCgpKjIsIDApOwogICAgICBjYXNlICd0cic6CiAgICAgICAgcmV0dXJuIHBvaW50MkQoLXRoaXMud2lkdGgoKSwgMCk7CiAgICAgIGNhc2UgJ2JsJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCh0aGlzLndpZHRoKCkqMiwgdGhpcy5oZWlnaHQoKSk7CiAgICAgIGNhc2UgJ2JyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCgtdGhpcy53aWR0aCgpLCB0aGlzLmhlaWdodCgpKTsKICAgICAgY2FzZSAnbCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQodGhpcy53aWR0aCgpKjIsIDApOwogICAgICBjYXNlICdyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCgtdGhpcy53aWR0aCgpLCAwKTsKICAgIH0KCiAgfSwKCiAgX2ZvbGRpbmdQYWdlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhKQogICAgICByZXR1cm47CgogICAgdmFyIG9wdHMgPSBkYXRhLm9wdHM7CgogICAgaWYgKG9wdHMudHVybikgewogICAgICBkYXRhID0gb3B0cy50dXJuLmRhdGEoKTsKICAgICAgaWYgKGRhdGEuZGlzcGxheSA9PSAnc2luZ2xlJykKICAgICAgICByZXR1cm4gKG9wdHMubmV4dD4xIHx8IG9wdHMucGFnZT4xKSA/IGRhdGEucGFnZU9ianNbMF0gOiBudWxsOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIGRhdGEucGFnZU9ianNbb3B0cy5uZXh0XTsKICAgIH0KCiAgfSwKCiAgX2JhY2tHcmFkaWVudDogZnVuY3Rpb24oKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICB0dXJuRGF0YSA9IGRhdGEub3B0cy50dXJuLmRhdGEoKSwKICAgICAgZ3JhZGllbnQgPSAgdHVybkRhdGEub3B0cy5ncmFkaWVudHMgJiYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnIHx8CiAgICAgICAgIChkYXRhLm9wdHMucGFnZSE9MiAmJiBkYXRhLm9wdHMucGFnZSE9dHVybkRhdGEudG90YWxQYWdlcy0xKSk7CgogICAgaWYgKGdyYWRpZW50ICYmICFkYXRhLmJzaGFkb3cpCiAgICAgIGRhdGEuYnNoYWRvdyA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAxKSkuCiAgICAgICAgY3NzKHsncG9zaXRpb24nOiAnJywgd2lkdGg6IHRoaXMud2lkdGgoKSwgaGVpZ2h0OiB0aGlzLmhlaWdodCgpfSkuCiAgICAgICAgYXBwZW5kVG8oZGF0YS5wYXJlbnQpOwoKICAgIHJldHVybiBncmFkaWVudDsKCiAgfSwKCiAgdHlwZTogZnVuY3Rpb24gKCkgewogICAgCiAgICByZXR1cm4gdGhpcy5kYXRhKCkuZi5lZmZlY3Q7CgogIH0sCgogIHJlc2l6ZTogZnVuY3Rpb24oZnVsbCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTsKCiAgICBzd2l0Y2ggKGRhdGEuZWZmZWN0KSB7CiAgICAgIGNhc2UgJ2hhcmQnOgogICAgICAgIAogICAgICBpZiAoZnVsbCkgewogICAgICAgIGRhdGEud3JhcHBlci5jc3Moe3dpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHR9KTsKICAgICAgICBkYXRhLmZwYWdlLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5hc2hhZG93LmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgICAgZGF0YS5ic2hhZG93LmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ3NoZWV0JzoKCiAgICAgIGlmIChmdWxsKSB7CiAgICAgICAgdmFyIHNpemUgPSBNYXRoLnJvdW5kKE1hdGguc3FydChNYXRoLnBvdyh3aWR0aCwgMikrTWF0aC5wb3coaGVpZ2h0LCAyKSkpOwoKICAgICAgICBkYXRhLndyYXBwZXIuY3NzKHt3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfSk7CiAgICAgICAgZGF0YS5md3JhcHBlci5jc3Moe3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9KS4KICAgICAgICAgIGNoaWxkcmVuKCc6Zmlyc3QtY2hpbGQnKS4KICAgICAgICAgIGNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgICBkYXRhLmZwYWdlLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgICBpZiAodHVybkRhdGEub3B0cy5ncmFkaWVudHMpCiAgICAgICAgICBkYXRhLmFzaGFkb3cuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CgogICAgICAgIGlmIChmbGlwTWV0aG9kcy5fYmFja0dyYWRpZW50LmNhbGwodGhpcykpCiAgICAgICAgICBkYXRhLmJzaGFkb3cuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICAgIH0KCiAgICAgIGlmIChkYXRhLnBhcmVudC5pcygnOnZpc2libGUnKSkgewogICAgICAgIHZhciBvZmZzZXQgPSBmaW5kUG9zKGRhdGEucGFyZW50WzBdKTsKCiAgICAgICAgZGF0YS5md3JhcHBlci5jc3Moe3RvcDogb2Zmc2V0LnRvcCwKICAgICAgICAgIGxlZnQ6IG9mZnNldC5sZWZ0fSk7CgogICAgICAgIC8vaWYgKGRhdGEub3B0cy50dXJuKSB7CiAgICAgICAgIG9mZnNldCA9IGZpbmRQb3MoZGF0YS5vcHRzLnR1cm5bMF0pOwogICAgICAgICBkYXRhLmZwYXJlbnQuY3NzKHt0b3A6IC1vZmZzZXQudG9wLCBsZWZ0OiAtb2Zmc2V0LmxlZnR9KTsKICAgICAgICAvL30KICAgICAgfQoKICAgICAgdGhpcy5mbGlwKCd6JywgZGF0YS5vcHRzWyd6LWluZGV4J10pOwoKICAgICAgYnJlYWs7CiAgICB9CgogIH0sCgogIC8vIFByZXBhcmVzIHRoZSBwYWdlIGJ5IGFkZGluZyBhIGdlbmVyYWwgd3JhcHBlciBhbmQgYW5vdGhlciBvYmplY3RzCgogIF9hZGRQYWdlV3JhcHBlcjogZnVuY3Rpb24oKSB7CgogICAgdmFyIGF0dCwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICBwYXJlbnQgPSB0aGlzLnBhcmVudCgpOwoKICAgIGRhdGEucGFyZW50ID0gcGFyZW50OwoKICBpZiAoIWRhdGEud3JhcHBlcikKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKICAgICAgY2FzZSAnaGFyZCc6CiAgICAgICAgCiAgICAgICAgdmFyIGNzc1Byb3BlcnRpZXMgPSB7fTsKICAgICAgICBjc3NQcm9wZXJ0aWVzW3ZlbmRvciArICd0cmFuc2Zvcm0tc3R5bGUnXSA9ICdwcmVzZXJ2ZS0zZCc7CiAgICAgICAgY3NzUHJvcGVydGllc1t2ZW5kb3IgKyAnYmFja2ZhY2UtdmlzaWJpbGl0eSddID0gJ2hpZGRlbic7CgogICAgICAgIGRhdGEud3JhcHBlciA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAyKSkuCiAgICAgICAgICBjc3MoY3NzUHJvcGVydGllcykuCiAgICAgICAgICBhcHBlbmRUbyhwYXJlbnQpLgogICAgICAgICAgcHJlcGVuZCh0aGlzKTsKCiAgICAgICAgZGF0YS5mcGFnZSA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAxKSkuCiAgICAgICAgICBjc3MoY3NzUHJvcGVydGllcykuCiAgICAgICAgICBhcHBlbmRUbyhwYXJlbnQpOwogICAgICAgIAogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5hc2hhZG93ID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsICAwKSkuCiAgICAgICAgICAgIGhpZGUoKS4KICAgICAgICAgICAgYXBwZW5kVG8ocGFyZW50KTsKCiAgICAgICAgICBkYXRhLmJzaGFkb3cgPSAkKCc8ZGl2Lz4nLCBkaXZBdHQoMCwgMCwgIDApKTsKICAgICAgICB9CgogICAgICBicmVhazsKICAgICAgY2FzZSAnc2hlZXQnOgogICAgICAgIAogICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0KCksCiAgICAgICAgICBzaXplID0gTWF0aC5yb3VuZChNYXRoLnNxcnQoTWF0aC5wb3cod2lkdGgsIDIpK01hdGgucG93KGhlaWdodCwgMikpKTsKICAgICAgICAKICAgICAgICBkYXRhLmZwYXJlbnQgPSBkYXRhLm9wdHMudHVybi5kYXRhKCkuZnBhcmVudDsKCiAgICAgICAgaWYgKCFkYXRhLmZwYXJlbnQpIHsKICAgICAgICAgIHZhciBmcGFyZW50ID0gJCgnPGRpdi8+Jywge2Nzczogeydwb2ludGVyLWV2ZW50cyc6ICdub25lJ319KS5oaWRlKCk7CiAgICAgICAgICAgIGZwYXJlbnQuZGF0YSgpLmZsaXBzID0gMDsKICAgICAgICAgICAgZnBhcmVudC5jc3MoZGl2QXR0KDAsIDAsICdhdXRvJywgJ3Zpc2libGUnKS5jc3MpLgogICAgICAgICAgICBhcHBlbmRUbyhkYXRhLm9wdHMudHVybik7CiAgICAgICAgICAgIAogICAgICAgICAgICBkYXRhLm9wdHMudHVybi5kYXRhKCkuZnBhcmVudCA9IGZwYXJlbnQ7CiAgICAgICAgICAgIGRhdGEuZnBhcmVudCA9IGZwYXJlbnQ7CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNzcyh7cG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogMCwgbGVmdDogMCwgYm90dG9tOiAnYXV0bycsIHJpZ2h0OiAnYXV0byd9KTsKCiAgICAgICAgZGF0YS53cmFwcGVyID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsIHRoaXMuY3NzKCd6LWluZGV4JykpKS4KICAgICAgICAgIGFwcGVuZFRvKHBhcmVudCkuCiAgICAgICAgICBwcmVwZW5kKHRoaXMpOwoKICAgICAgICBkYXRhLmZ3cmFwcGVyID0gJCgnPGRpdi8+JywgZGl2QXR0KHBhcmVudC5vZmZzZXQoKS50b3AsIHBhcmVudC5vZmZzZXQoKS5sZWZ0KSkuCiAgICAgICAgICBoaWRlKCkuCiAgICAgICAgICBhcHBlbmRUbyhkYXRhLmZwYXJlbnQpOwoKICAgICAgICBkYXRhLmZwYWdlID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsIDAsICd2aXNpYmxlJykpLgogICAgICAgICAgY3NzKHtjdXJzb3I6ICdkZWZhdWx0J30pLgogICAgICAgICAgYXBwZW5kVG8oZGF0YS5md3JhcHBlcik7CgogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykKICAgICAgICAgIGRhdGEuYXNoYWRvdyA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAgMSkpLgogICAgICAgICAgYXBwZW5kVG8oZGF0YS5mcGFnZSk7CgogICAgICAgIGZsaXBNZXRob2RzLnNldERhdGEuY2FsbCh0aGlzLCBkYXRhKTsKCiAgICAgIGJyZWFrOwogICAgfQoKICAgIC8vIFNldCBzaXplCiAgICBmbGlwTWV0aG9kcy5yZXNpemUuY2FsbCh0aGlzLCB0cnVlKTsKCiAgfSwKCiAgLy8gVGFrZXMgYSAyUCBwb2ludCBmcm9tIHRoZSBzY3JlZW4gYW5kIGFwcGxpZXMgdGhlIHRyYW5zZm9ybWF0aW9uCgogIF9mb2xkOiBmdW5jdGlvbihwb2ludCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCksCiAgICAgIG8gPSBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsIHBvaW50LmNvcm5lciksCiAgICAgIHdpZHRoID0gdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodCgpOwoKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKCiAgICAgIGNhc2UgJ2hhcmQnOgoKICAgICAgICBpZiAocG9pbnQuY29ybmVyPT0nbCcpCiAgICAgICAgICBwb2ludC54ID0gTWF0aC5taW4oTWF0aC5tYXgocG9pbnQueCwgMCksIHdpZHRoKjIpOwogICAgICAgIGVsc2UKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1heChNYXRoLm1pbihwb2ludC54LCB3aWR0aCksIC13aWR0aCk7CgogICAgICAgIHZhciBsZWZ0UG9zLAogICAgICAgICAgc2hhZG93LAogICAgICAgICAgZ3JhZGllbnRYLAogICAgICAgICAgZnBhZ2VPcmlnaW4sCiAgICAgICAgICBwYXJlbnRPcmlnaW4sCiAgICAgICAgICB0b3RhbFBhZ2VzID0gdHVybkRhdGEudG90YWxQYWdlcywKICAgICAgICAgIHpJbmRleCA9IGRhdGEub3B0c1snei1pbmRleCddIHx8IHRvdGFsUGFnZXMsCiAgICAgICAgICBwYXJlbnRDc3MgPSB7J292ZXJmbG93JzogJ3Zpc2libGUnfSwKICAgICAgICAgIHJlbFggPSAoby54KSA/IChvLnggLSBwb2ludC54KS93aWR0aCA6IHBvaW50Lngvd2lkdGgsCiAgICAgICAgICBhbmdsZSA9IHJlbFggKiA5MCwKICAgICAgICAgIGhhbGYgPSBhbmdsZTw5MDsKCiAgICAgICAgc3dpdGNoIChwb2ludC5jb3JuZXIpIHsKICAgICAgICAgIGNhc2UgJ2wnOgoKICAgICAgICAgICAgZnBhZ2VPcmlnaW4gPSAgJzAlIDUwJSc7CiAgICAgICAgICAgIHBhcmVudE9yaWdpbiA9ICAnMTAwJSA1MCUnOwoKICAgICAgICAgICAgaWYgKGhhbGYpIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gMDsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMubmV4dC0xPjA7CiAgICAgICAgICAgICAgZ3JhZGllbnRYID0gMTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gJzEwMCUnOwogICAgICAgICAgICAgIHNoYWRvdyA9IGRhdGEub3B0cy5wYWdlKzE8dG90YWxQYWdlczsKICAgICAgICAgICAgICBncmFkaWVudFggPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICdyJzoKCiAgICAgICAgICAgIGZwYWdlT3JpZ2luID0gICcxMDAlIDUwJSc7CiAgICAgICAgICAgIHBhcmVudE9yaWdpbiA9ICAnMCUgNTAlJzsKICAgICAgICAgICAgYW5nbGUgPSAtYW5nbGU7CiAgICAgICAgICAgIHdpZHRoID0gLXdpZHRoOwoKICAgICAgICAgICAgaWYgKGhhbGYpIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gMDsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMubmV4dCsxPHRvdGFsUGFnZXM7CiAgICAgICAgICAgICAgZ3JhZGllbnRYID0gMDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gJy0xMDAlJzsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMucGFnZSE9MTsKICAgICAgICAgICAgICBncmFkaWVudFggPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnRDc3NbdmVuZG9yKydwZXJzcGVjdGl2ZS1vcmlnaW4nXSA9IHBhcmVudE9yaWdpbjsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSgncm90YXRlWSgnK2FuZ2xlKydkZWcpJyArCiAgICAgICAgICAndHJhbnNsYXRlM2QoMHB4LCAwcHgsICcrKHRoaXMuYXR0cignZGVwdGgnKXx8MCkrJ3B4KScsIHBhcmVudE9yaWdpbik7CgogICAgICAgIGRhdGEuZnBhZ2UudHJhbnNmb3JtKCd0cmFuc2xhdGVYKCcrd2lkdGgrJ3B4KSByb3RhdGVZKCcrKDE4MCthbmdsZSkrJ2RlZyknLCBmcGFnZU9yaWdpbik7CgogICAgICAgIGRhdGEucGFyZW50LmNzcyhwYXJlbnRDc3MpOwoKICAgICAgICBpZiAoaGFsZikgewogICAgICAgICAgcmVsWCA9IC1yZWxYKzE7CiAgICAgICAgICBkYXRhLndyYXBwZXIuY3NzKHt6SW5kZXg6IHpJbmRleCsxfSk7CiAgICAgICAgICBkYXRhLmZwYWdlLmNzcyh7ekluZGV4OiB6SW5kZXh9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVsWCA9IHJlbFgtMTsKICAgICAgICAgIGRhdGEud3JhcHBlci5jc3Moe3pJbmRleDogekluZGV4fSk7CiAgICAgICAgICBkYXRhLmZwYWdlLmNzcyh7ekluZGV4OiB6SW5kZXgrMX0pOwogICAgICAgIH0KCiAgICAgICAgaWYgKHR1cm5EYXRhLm9wdHMuZ3JhZGllbnRzKSB7CiAgICAgICAgICBpZiAoc2hhZG93KQogICAgICAgICAgICBkYXRhLmFzaGFkb3cuY3NzKHsKICAgICAgICAgICAgICBkaXNwbGF5OiAnJywKICAgICAgICAgICAgICBsZWZ0OiBsZWZ0UG9zLAogICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsJysoMC41KnJlbFgpKycpJwogICAgICAgICAgICB9KS4KICAgICAgICAgICAgdHJhbnNmb3JtKCdyb3RhdGVZKDBkZWcpJyk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGRhdGEuYXNoYWRvdy5oaWRlKCk7CgogICAgICAgICAgZGF0YS5ic2hhZG93LmNzcyh7b3BhY2l0eTotcmVsWCArIDF9KTsKCiAgICAgICAgICBpZiAoaGFsZikgewogICAgICAgICAgICBpZiAoZGF0YS5ic2hhZG93LnBhcmVudCgpWzBdIT1kYXRhLndyYXBwZXJbMF0pIHsKICAgICAgICAgICAgICBkYXRhLmJzaGFkb3cuYXBwZW5kVG8oZGF0YS53cmFwcGVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGRhdGEuYnNoYWRvdy5wYXJlbnQoKVswXSE9ZGF0YS5mcGFnZVswXSkgewogICAgICAgICAgICAgIGRhdGEuYnNoYWRvdy5hcHBlbmRUbyhkYXRhLmZwYWdlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgLypkYXRhLmJzaGFkb3cuY3NzKHsKICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwnKygwLjEpKycpJwogICAgICAgICAgfSkqLwogICAgICAgICAgZ3JhZGllbnQoZGF0YS5ic2hhZG93LCBwb2ludDJEKGdyYWRpZW50WCAqIDEwMCwgMCksIHBvaW50MkQoKC1ncmFkaWVudFggKyAxKSoxMDAsIDApLAogICAgICAgICAgICBbWzAsICdyZ2JhKDAsMCwwLDAuMyknXSxbMSwgJ3JnYmEoMCwwLDAsMCknXV0sMik7CiAgICAgICAgICAKICAgICAgICB9CgogICAgICAgIGJyZWFrOwogICAgICBjYXNlICdzaGVldCc6CgogICAgICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgICAgIGEgPSAwLAogICAgICAgICAgYWxwaGEgPSAwLAogICAgICAgICAgYmV0YSwKICAgICAgICAgIHB4LAogICAgICAgICAgZ3JhZGllbnRFbmRQb2ludEEsCiAgICAgICAgICBncmFkaWVudEVuZFBvaW50QiwKICAgICAgICAgIGdyYWRpZW50U3RhcnRWYWwsCiAgICAgICAgICBncmFkaWVudFNpemUsCiAgICAgICAgICBncmFkaWVudE9wYWNpdHksCiAgICAgICAgICBzaGFkb3dWYWwsCiAgICAgICAgICBtdiA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICBkZiA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICB0ciA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICBmb2xkaW5nID0gZmxpcE1ldGhvZHMuX2ZvbGRpbmdQYWdlLmNhbGwodGhpcyksCiAgICAgICAgICB0YW4gPSBNYXRoLnRhbihhbHBoYSksCiAgICAgICAgICBhYyA9IHR1cm5EYXRhLm9wdHMuYWNjZWxlcmF0aW9uLAogICAgICAgICAgaCA9IGRhdGEud3JhcHBlci5oZWlnaHQoKSwKICAgICAgICAgIHRvcCA9IHBvaW50LmNvcm5lci5zdWJzdHIoMCwgMSkgPT0gJ3QnLAogICAgICAgICAgbGVmdCA9IHBvaW50LmNvcm5lci5zdWJzdHIoMSwgMSkgPT0gJ2wnLAoKICAgICAgY29tcHV0ZSA9IGZ1bmN0aW9uKCkgewoKICAgICAgICB2YXIgcmVsID0gcG9pbnQyRCgwLCAwKTsKICAgICAgICB2YXIgbWlkZGxlID0gcG9pbnQyRCgwLCAwKTsKCiAgICAgICAgcmVsLnggPSAoby54KSA/IG8ueCAtIHBvaW50LnggOiBwb2ludC54OwoKICAgICAgICBpZiAoIWhhc1JvdCkgewogICAgICAgICAgcmVsLnkgPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWwueSA9IChvLnkpID8gby55IC0gcG9pbnQueSA6IHBvaW50Lnk7CiAgICAgICAgfQoKICAgICAgICBtaWRkbGUueCA9IChsZWZ0KT8gd2lkdGggLSByZWwueC8yIDogcG9pbnQueCArIHJlbC54LzI7CiAgICAgICAgbWlkZGxlLnkgPSByZWwueS8yOwogICAgICAgIAogICAgICAgIHZhciBhbHBoYSA9ICBBOTAtTWF0aC5hdGFuMihyZWwueSwgcmVsLngpLAogICAgICAgICAgZ2FtbWEgPSBhbHBoYSAtIE1hdGguYXRhbjIobWlkZGxlLnksIG1pZGRsZS54KSwKICAgICAgICAgIGRpc3RhbmNlID0gIE1hdGgubWF4KDAsIE1hdGguc2luKGdhbW1hKSAqIE1hdGguc3FydChNYXRoLnBvdyhtaWRkbGUueCwgMikgKyBNYXRoLnBvdyhtaWRkbGUueSwgMikpKTsKICAgICAgICAgIAogICAgICAgICAgYSA9IGRlZyhhbHBoYSk7CgogICAgICAgICAgdHIgPSBwb2ludDJEKGRpc3RhbmNlICogTWF0aC5zaW4oYWxwaGEpLCBkaXN0YW5jZSAqIE1hdGguY29zKGFscGhhKSk7CgogICAgICAgICAgaWYgKGFscGhhID4gQTkwKSB7CiAgICAgICAgICAgIHRyLnggPSB0ci54ICsgTWF0aC5hYnModHIueSAqIHJlbC55L3JlbC54KTsKICAgICAgICAgICAgdHIueSA9IDA7CiAgICAgICAgICAgIGlmIChNYXRoLnJvdW5kKHRyLngqTWF0aC50YW4oUEktYWxwaGEpKSA8IGhlaWdodCkgewogICAgICAgICAgICAgIHBvaW50LnkgPSBNYXRoLnNxcnQoTWF0aC5wb3coaGVpZ2h0LCAyKSsyICogbWlkZGxlLnggKiByZWwueCk7CiAgICAgICAgICAgICAgaWYgKHRvcCkgcG9pbnQueSA9ICBoZWlnaHQgLSBwb2ludC55OwogICAgICAgICAgICAgIHJldHVybiBjb21wdXRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgCiAgICAgICAgICBpZiAoYWxwaGE+QTkwKSB7CiAgICAgICAgICAgIHZhciBiZXRhID0gUEktYWxwaGEsIGRkID0gaCAtIGhlaWdodC9NYXRoLnNpbihiZXRhKTsKICAgICAgICAgICAgbXYgPSBwb2ludDJEKE1hdGgucm91bmQoZGQqTWF0aC5jb3MoYmV0YSkpLCBNYXRoLnJvdW5kKGRkKk1hdGguc2luKGJldGEpKSk7CiAgICAgICAgICAgIGlmIChsZWZ0KSBtdi54ID0gLSBtdi54OwogICAgICAgICAgICBpZiAodG9wKSBtdi55ID0gLSBtdi55OwogICAgICAgICAgfQoKICAgICAgICAgIHB4ID0gTWF0aC5yb3VuZCh0ci55L01hdGgudGFuKGFscGhhKSArIHRyLngpOwogICAgICAKICAgICAgICAgIHZhciBzaWRlID0gd2lkdGggLSBweCwKICAgICAgICAgICAgc2lkZVggPSBzaWRlKk1hdGguY29zKGFscGhhKjIpLAogICAgICAgICAgICBzaWRlWSA9IHNpZGUqTWF0aC5zaW4oYWxwaGEqMik7CiAgICAgICAgICAgIGRmID0gcG9pbnQyRCgKICAgICAgICAgICAgICBNYXRoLnJvdW5kKChsZWZ0ID8gc2lkZSAtc2lkZVggOiBweCtzaWRlWCkpLAogICAgICAgICAgICAgIE1hdGgucm91bmQoKHRvcCkgPyBzaWRlWSA6IGhlaWdodCAtIHNpZGVZKSk7CiAgICAgICAgICAKICAgICAgICAvLyBHcmFkaWVudHMKICAgICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewoKICAgICAgICAgICAgZ3JhZGllbnRTaXplID0gc2lkZSpNYXRoLnNpbihhbHBoYSk7CgogICAgICAgICAgICB2YXIgZW5kaW5nUG9pbnQgPSBmbGlwTWV0aG9kcy5fYzIuY2FsbCh0aGF0LCBwb2ludC5jb3JuZXIpLAogICAgICAgICAgICAgZmFyID0gTWF0aC5zcXJ0KE1hdGgucG93KGVuZGluZ1BvaW50LngtcG9pbnQueCwgMikrTWF0aC5wb3coZW5kaW5nUG9pbnQueS1wb2ludC55LCAyKSkvd2lkdGg7CgogICAgICAgICAgICBzaGFkb3dWYWwgPSBNYXRoLnNpbihBOTAqKChmYXI+MSkgPyAyIC0gZmFyIDogZmFyKSk7CgogICAgICAgICAgICBncmFkaWVudE9wYWNpdHkgPSBNYXRoLm1pbihmYXIsIDEpOwoKICAgICAgICAgICAKICAgICAgICAgICAgICBncmFkaWVudFN0YXJ0VmFsID0gZ3JhZGllbnRTaXplPjEwMCA/IChncmFkaWVudFNpemUtMTAwKS9ncmFkaWVudFNpemUgOiAwOwoKICAgICAgICAgICAgICBncmFkaWVudEVuZFBvaW50QSA9IHBvaW50MkQoCiAgICAgICAgICAgICAgICBncmFkaWVudFNpemUqTWF0aC5zaW4oYWxwaGEpL3dpZHRoKjEwMCwKICAgICAgICAgICAgICAgIGdyYWRpZW50U2l6ZSpNYXRoLmNvcyhhbHBoYSkvaGVpZ2h0KjEwMCk7CiAgICAgICAgICAgCgogICAgICAgICAgICAgIGlmIChmbGlwTWV0aG9kcy5fYmFja0dyYWRpZW50LmNhbGwodGhhdCkpIHsKCiAgICAgICAgICAgICAgICBncmFkaWVudEVuZFBvaW50QiA9IHBvaW50MkQoCiAgICAgICAgICAgICAgICAgIGdyYWRpZW50U2l6ZSoxLjIqTWF0aC5zaW4oYWxwaGEpL3dpZHRoKjEwMCwKICAgICAgICAgICAgICAgICAgZ3JhZGllbnRTaXplKjEuMipNYXRoLmNvcyhhbHBoYSkvaGVpZ2h0KjEwMCk7CgogICAgICAgICAgICAgICAgaWYgKCFsZWZ0KSBncmFkaWVudEVuZFBvaW50Qi54ID0gMTAwLWdyYWRpZW50RW5kUG9pbnRCLng7CiAgICAgICAgICAgICAgICBpZiAoIXRvcCkgZ3JhZGllbnRFbmRQb2ludEIueSA9IDEwMC1ncmFkaWVudEVuZFBvaW50Qi55OwoKICAgICAgICAgICAgICB9CgogICAgICAgICAgfQoKICAgICAgICAgIHRyLnggPSBNYXRoLnJvdW5kKHRyLngpOwogICAgICAgICAgdHIueSA9IE1hdGgucm91bmQodHIueSk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9LAoKICAgICAgdHJhbnNmb3JtID0gZnVuY3Rpb24odHIsIGMsIHgsIGEpIHsKICAgICAgCiAgICAgICAgdmFyIGYgPSBbJzAnLCAnYXV0byddLCBtdlcgPSAod2lkdGgtaCkqeFswXS8xMDAsIG12SCA9IChoZWlnaHQtaCkqeFsxXS8xMDAsCiAgICAgICAgICBjc3NBID0ge2xlZnQ6IGZbY1swXV0sIHRvcDogZltjWzFdXSwgcmlnaHQ6IGZbY1syXV0sIGJvdHRvbTogZltjWzNdXX0sCiAgICAgICAgICBjc3NCID0ge30sCiAgICAgICAgICBhbGlhc2luZ0ZrID0gKGEhPTkwICYmIGEhPS05MCkgPyAobGVmdCA/IC0xIDogMSkgOiAwLAogICAgICAgICAgb3JpZ2luID0geFswXSArICclICcgKyB4WzFdICsgJyUnOwoKICAgICAgICB0aGF0LmNzcyhjc3NBKS4KICAgICAgICAgIHRyYW5zZm9ybShyb3RhdGUoYSkgKyB0cmFuc2xhdGUodHIueCArIGFsaWFzaW5nRmssIHRyLnksIGFjKSwgb3JpZ2luKTsKCiAgICAgICAgZGF0YS5mcGFnZS5jc3MoY3NzQSkudHJhbnNmb3JtKAogICAgICAgICAgcm90YXRlKGEpICsKICAgICAgICAgIHRyYW5zbGF0ZSh0ci54ICsgZGYueCAtIG12LnggLSB3aWR0aCp4WzBdLzEwMCwgdHIueSArIGRmLnkgLSBtdi55IC0gaGVpZ2h0KnhbMV0vMTAwLCBhYykgKwogICAgICAgICAgcm90YXRlKCgxODAvYSAtIDIpKmEpLAogICAgICAgICAgb3JpZ2luKTsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSh0cmFuc2xhdGUoLXRyLnggKyBtdlctYWxpYXNpbmdGaywgLXRyLnkgKyBtdkgsIGFjKSArIHJvdGF0ZSgtYSksIG9yaWdpbik7CgogICAgICAgIGRhdGEuZndyYXBwZXIudHJhbnNmb3JtKHRyYW5zbGF0ZSgtdHIueCArIG12LnggKyBtdlcsIC10ci55ICsgbXYueSArIG12SCwgYWMpICsgcm90YXRlKC1hKSwgb3JpZ2luKTsKICAgICAgCiAgICAgICAgaWYgKHR1cm5EYXRhLm9wdHMuZ3JhZGllbnRzKSB7CgogICAgICAgICAgaWYgKHhbMF0pCiAgICAgICAgICAgIGdyYWRpZW50RW5kUG9pbnRBLnggPSAxMDAtZ3JhZGllbnRFbmRQb2ludEEueDsKCiAgICAgICAgICBpZiAoeFsxXSkKICAgICAgICAgICAgZ3JhZGllbnRFbmRQb2ludEEueSA9ICgxMDAtZ3JhZGllbnRFbmRQb2ludEEueSk7CgogICAgICAgICAgY3NzQlsnYm94LXNoYWRvdyddID0gJzAgMCAyMHB4IHJnYmEoMCwwLDAsJysoMC41KnNoYWRvd1ZhbCkrJyknOwogICAgICAgICAgZm9sZGluZy5jc3MoY3NzQik7CgogICAgICAgICAgZ3JhZGllbnQoZGF0YS5hc2hhZG93LAogICAgICAgICAgICAgIHBvaW50MkQobGVmdD8xMDA6MCwgdG9wPzA6MTAwKSwKICAgICAgICAgICAgICBwb2ludDJEKGdyYWRpZW50RW5kUG9pbnRBLngsIGdyYWRpZW50RW5kUG9pbnRBLnkpLAogICAgICAgICAgICAgIFtbZ3JhZGllbnRTdGFydFZhbCwgJ3JnYmEoMCwwLDAsMCknXSwKICAgICAgICAgICAgICBbKCgxLWdyYWRpZW50U3RhcnRWYWwpKjAuOCkrZ3JhZGllbnRTdGFydFZhbCwgJ3JnYmEoMCwwLDAsJysoMC4yKmdyYWRpZW50T3BhY2l0eSkrJyknXSwKICAgICAgICAgICAgICBbMSwgJ3JnYmEoMjU1LDI1NSwyNTUsJysoMC4yKmdyYWRpZW50T3BhY2l0eSkrJyknXV0sCiAgICAgICAgICAgICAgMywKICAgICAgICAgICAgICBhbHBoYSk7CgogICAgICAgICAgaWYgKGZsaXBNZXRob2RzLl9iYWNrR3JhZGllbnQuY2FsbCh0aGF0KSkKICAgICAgICAgICAgZ3JhZGllbnQoZGF0YS5ic2hhZG93LAogICAgICAgICAgICAgICAgcG9pbnQyRChsZWZ0PzA6MTAwLCB0b3A/MDoxMDApLAogICAgICAgICAgICAgICAgcG9pbnQyRChncmFkaWVudEVuZFBvaW50Qi54LCBncmFkaWVudEVuZFBvaW50Qi55KSwKICAgICAgICAgICAgICAgIFtbMC42LCAncmdiYSgwLDAsMCwwKSddLAogICAgICAgICAgICAgICAgWzAuOCwgJ3JnYmEoMCwwLDAsJysoMC4zKmdyYWRpZW50T3BhY2l0eSkrJyknXSwKICAgICAgICAgICAgICAgIFsxLCAncmdiYSgwLDAsMCwwKSddCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgMyk7CiAgICAgICAgfQoKICAgICAgfTsKCiAgICAgIHN3aXRjaCAocG9pbnQuY29ybmVyKSB7CiAgICAgICAgY2FzZSAnbCcgOgoKCiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAncicgOgoKCiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndGwnIDoKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1heChwb2ludC54LCAxKTsKICAgICAgICAgIGNvbXB1dGUoKTsKICAgICAgICAgIHRyYW5zZm9ybSh0ciwgWzEsMCwwLDFdLCBbMTAwLCAwXSwgYSk7CiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndHInIDoKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1pbihwb2ludC54LCB3aWR0aC0xKTsKICAgICAgICAgIGNvbXB1dGUoKTsKICAgICAgICAgIHRyYW5zZm9ybShwb2ludDJEKC10ci54LCB0ci55KSwgWzAsMCwwLDFdLCBbMCwgMF0sIC1hKTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdibCcgOgogICAgICAgICAgcG9pbnQueCA9IE1hdGgubWF4KHBvaW50LngsIDEpOwogICAgICAgICAgY29tcHV0ZSgpOwogICAgICAgICAgdHJhbnNmb3JtKHBvaW50MkQodHIueCwgLXRyLnkpLCBbMSwxLDAsMF0sIFsxMDAsIDEwMF0sIC1hKTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdicicgOgogICAgICAgICAgcG9pbnQueCA9IE1hdGgubWluKHBvaW50LngsIHdpZHRoLTEpOwogICAgICAgICAgY29tcHV0ZSgpOwogICAgICAgICAgdHJhbnNmb3JtKHBvaW50MkQoLXRyLngsIC10ci55KSwgWzAsMSwxLDBdLCBbMCwgMTAwXSwgYSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICBicmVhazsKICB9CgogICAgZGF0YS5wb2ludCA9IHBvaW50OwogIAogIH0sCgogIF9tb3ZlRm9sZGluZ1BhZ2U6IGZ1bmN0aW9uKG1vdmUpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhKQogICAgICByZXR1cm47CgogICAgdmFyIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKSwKICAgICAgcGxhY2UgPSB0dXJuRGF0YS5wYWdlUGxhY2U7CiAgICAgIAogICAgaWYgKG1vdmUpIHsKCiAgICAgIHZhciBuZXh0UGFnZSA9IGRhdGEub3B0cy5uZXh0OwogIAogICAgICBpZiAocGxhY2VbbmV4dFBhZ2VdIT1kYXRhLm9wdHMucGFnZSkgewoKICAgICAgICBpZiAoZGF0YS5mb2xkaW5nKQogICAgICAgICAgZmxpcE1ldGhvZHMuX21vdmVGb2xkaW5nUGFnZS5jYWxsKHRoaXMsIGZhbHNlKTsKCiAgICAgICAgdmFyIGZvbGRpbmcgPSBmbGlwTWV0aG9kcy5fZm9sZGluZ1BhZ2UuY2FsbCh0aGlzKTsKICAgICAgICAKICAgICAgICBmb2xkaW5nLmFwcGVuZFRvKGRhdGEuZnBhZ2UpOwogICAgICAgIHBsYWNlW25leHRQYWdlXSA9IGRhdGEub3B0cy5wYWdlOwogICAgICAgIGRhdGEuZm9sZGluZyA9IG5leHRQYWdlOwogICAgICB9CgogICAgICB0dXJuLnR1cm4oJ3VwZGF0ZScpOwoKICAgIH0gZWxzZSB7CgogICAgICBpZiAoZGF0YS5mb2xkaW5nKSB7CgogICAgICAgIGlmICh0dXJuRGF0YS5wYWdlc1tkYXRhLmZvbGRpbmddKSB7CiAgICAgICAgIAogICAgICAgICAgLy8gSWYgd2UgaGF2ZSBmbGlwIGF2YWlsYWJsZQoKICAgICAgICAgIHZhciBmbGlwRGF0YSA9IHR1cm5EYXRhLnBhZ2VzW2RhdGEuZm9sZGluZ10uZGF0YSgpLmY7CiAgICAgICAgICAKICAgICAgICAgIHR1cm5EYXRhLnBhZ2VPYmpzW2RhdGEuZm9sZGluZ10uCiAgICAgICAgICAgIGFwcGVuZFRvKGZsaXBEYXRhLndyYXBwZXIpOwoKICAgICAgICB9IGVsc2UgaWYgKHR1cm5EYXRhLnBhZ2VXcmFwW2RhdGEuZm9sZGluZ10pIHsKICAgICAgICAgIAogICAgICAgICAgLy8gSWYgd2UgaGF2ZSB0aGUgcGFnZVdyYXBwZXIKCiAgICAgICAgICB0dXJuRGF0YS5wYWdlT2Jqc1tkYXRhLmZvbGRpbmddLgogICAgICAgICAgICBhcHBlbmRUbyh0dXJuRGF0YS5wYWdlV3JhcFtkYXRhLmZvbGRpbmddKTsKCiAgICAgICAgfQoKICAgICAgICBpZiAoZGF0YS5mb2xkaW5nIGluIHBsYWNlKSB7CiAgICAgICAgICBwbGFjZVtkYXRhLmZvbGRpbmddID0gZGF0YS5mb2xkaW5nOwogICAgICAgIH0KCiAgICAgICAgZGVsZXRlIGRhdGEuZm9sZGluZzsKCiAgICAgIH0KICAgIH0KICB9LAoKICBfc2hvd0ZvbGRlZFBhZ2U6IGZ1bmN0aW9uKGMsIGFuaW1hdGUpIHsKCiAgICB2YXIgZm9sZGluZyA9IGZsaXBNZXRob2RzLl9mb2xkaW5nUGFnZS5jYWxsKHRoaXMpLAogICAgICBkZCA9IHRoaXMuZGF0YSgpLAogICAgICBkYXRhID0gZGQuZiwKICAgICAgdmlzaWJsZSA9IGRhdGEudmlzaWJsZTsKCiAgICBpZiAoZm9sZGluZykgewoKICAgICAgaWYgKCF2aXNpYmxlIHx8ICFkYXRhLnBvaW50IHx8IGRhdGEucG9pbnQuY29ybmVyIT1jLmNvcm5lcikgewoKICAgICAgICB2YXIgY29ybmVyID0gKAogICAgICAgICAgZGF0YS5zdGF0dXM9PSdob3ZlcicgfHwKICAgICAgICAgIGRhdGEuc3RhdHVzPT0ncGVlbCcgfHwKICAgICAgICAgIGRhdGEub3B0cy50dXJuLmRhdGEoKS5tb3VzZUFjdGlvbikgPwogICAgICAgIGMuY29ybmVyIDogbnVsbDsKCiAgICAgICAgdmlzaWJsZSA9IGZhbHNlOwoKICAgICAgICBpZiAodHJpZ2dlcignc3RhcnQnLCB0aGlzLCBbZGF0YS5vcHRzLCBjb3JuZXJdKT09J3ByZXZlbnRlZCcpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICB9CgogICAgICBpZiAoYW5pbWF0ZSkgewogICAgICAgIAogICAgICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgICAgIHBvaW50ID0gKGRhdGEucG9pbnQgJiYgZGF0YS5wb2ludC5jb3JuZXI9PWMuY29ybmVyKSA/CiAgICAgICAgICBkYXRhLnBvaW50IDogZmxpcE1ldGhvZHMuX2MuY2FsbCh0aGlzLCBjLmNvcm5lciwgMSk7CiAgICAgIAogICAgICAgIHRoaXMuYW5pbWF0ZWYoewogICAgICAgICAgZnJvbTogW3BvaW50LngsIHBvaW50LnldLAogICAgICAgICAgdG86IFtjLngsIGMueV0sCiAgICAgICAgICBkdXJhdGlvbjogNTAwLAogICAgICAgICAgZnJhbWU6IGZ1bmN0aW9uKHYpIHsKICAgICAgICAgICAgYy54ID0gTWF0aC5yb3VuZCh2WzBdKTsKICAgICAgICAgICAgYy55ID0gTWF0aC5yb3VuZCh2WzFdKTsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuX2ZvbGQuY2FsbCh0aGF0LCBjKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgIH0gZWxzZSAgewoKICAgICAgICBmbGlwTWV0aG9kcy5fZm9sZC5jYWxsKHRoaXMsIGMpOwoKICAgICAgICBpZiAoZGQuZWZmZWN0ICYmICFkZC5lZmZlY3QudHVybmluZykKICAgICAgICAgIHRoaXMuYW5pbWF0ZWYoZmFsc2UpOwoKICAgICAgfQoKICAgICAgaWYgKCF2aXNpYmxlKSB7CgogICAgICAgIHN3aXRjaChkYXRhLmVmZmVjdCkgewogICAgICAgICAgY2FzZSAnaGFyZCc6CgogICAgICAgICAgICBkYXRhLnZpc2libGUgPSB0cnVlOwogICAgICAgICAgICBmbGlwTWV0aG9kcy5fbW92ZUZvbGRpbmdQYWdlLmNhbGwodGhpcywgdHJ1ZSk7CiAgICAgICAgICAgIGRhdGEuZnBhZ2Uuc2hvdygpOwogICAgICAgICAgICBpZiAoZGF0YS5vcHRzLnNoYWRvd3MpCiAgICAgICAgICAgICAgZGF0YS5ic2hhZG93LnNob3coKTsKCiAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ3NoZWV0JzoKCiAgICAgICAgICAgIGRhdGEudmlzaWJsZSA9IHRydWU7CiAgICAgICAgICAgIGRhdGEuZnBhcmVudC5zaG93KCkuZGF0YSgpLmZsaXBzKys7CiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgICAgICAgZGF0YS5md3JhcHBlci5zaG93KCk7CiAgICAgICAgICAgIGlmIChkYXRhLmJzaGFkb3cpCiAgICAgICAgICAgICAgZGF0YS5ic2hhZG93LnNob3coKTsKCiAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICB9CgogICAgICByZXR1cm4gdHJ1ZTsKCiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0sCgogIGhpZGU6IGZ1bmN0aW9uKCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCksCiAgICAgIGZvbGRpbmcgPSBmbGlwTWV0aG9kcy5fZm9sZGluZ1BhZ2UuY2FsbCh0aGlzKTsKCiAgICBzd2l0Y2ggKGRhdGEuZWZmZWN0KSB7CiAgICAgIGNhc2UgJ2hhcmQnOgogICAgICAgIAogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5ic2hhZG93TG9jID0gMDsKICAgICAgICAgIGRhdGEuYnNoYWRvdy5yZW1vdmUoKTsKICAgICAgICAgIGRhdGEuYXNoYWRvdy5oaWRlKCk7CiAgICAgICAgfQoKICAgICAgICBkYXRhLndyYXBwZXIudHJhbnNmb3JtKCcnKTsKICAgICAgICBkYXRhLmZwYWdlLmhpZGUoKTsKCiAgICAgIGJyZWFrOwogICAgICBjYXNlICdzaGVldCc6CgogICAgICAgIGlmICgoLS1kYXRhLmZwYXJlbnQuZGF0YSgpLmZsaXBzKT09PTApCiAgICAgICAgICBkYXRhLmZwYXJlbnQuaGlkZSgpOwoKICAgICAgICB0aGlzLmNzcyh7bGVmdDogMCwgdG9wOiAwLCByaWdodDogJ2F1dG8nLCBib3R0b206ICdhdXRvJ30pLgogICAgICAgICAgdHJhbnNmb3JtKCcnKTsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSgnJyk7CgogICAgICAgIGRhdGEuZndyYXBwZXIuaGlkZSgpOwoKICAgICAgICBpZiAoZGF0YS5ic2hhZG93KQogICAgICAgICAgZGF0YS5ic2hhZG93LmhpZGUoKTsKCiAgICAgICAgZm9sZGluZy50cmFuc2Zvcm0oJycpOwoKICAgICAgYnJlYWs7CiAgICB9CgogICAgICBkYXRhLnZpc2libGUgPSBmYWxzZTsKCiAgICByZXR1cm4gdGhpczsKICB9LAoKICBoaWRlRm9sZGVkUGFnZTogZnVuY3Rpb24oYW5pbWF0ZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZjsKCiAgICBpZiAoIWRhdGEucG9pbnQpIHJldHVybjsKCiAgICB2YXIgdGhhdCA9IHRoaXMsCiAgICAgIHAxID0gZGF0YS5wb2ludCwKICAgICAgaGlkZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIGRhdGEucG9pbnQgPSBudWxsOwogICAgICAgIGRhdGEuc3RhdHVzID0gJyc7CiAgICAgICAgdGhhdC5mbGlwKCdoaWRlJyk7CiAgICAgICAgdGhhdC50cmlnZ2VyKCdlbmQnLCBbZGF0YS5vcHRzLCBmYWxzZV0pOwogICAgICB9OwoKICAgIGlmIChhbmltYXRlKSB7CgogICAgICB2YXIgcDQgPSBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsIHAxLmNvcm5lciksCiAgICAgICAgdG9wID0gKHAxLmNvcm5lci5zdWJzdHIoMCwxKT09J3QnKSwKICAgICAgICBkZWx0YSA9ICh0b3ApID8gTWF0aC5taW4oMCwgcDEueS1wNC55KS8yIDogTWF0aC5tYXgoMCwgcDEueS1wNC55KS8yLAogICAgICAgIHAyID0gcG9pbnQyRChwMS54LCBwMS55K2RlbHRhKSwKICAgICAgICBwMyA9IHBvaW50MkQocDQueCwgcDQueS1kZWx0YSk7CiAgICAKICAgICAgdGhpcy5hbmltYXRlZih7CiAgICAgICAgZnJvbTogMCwKICAgICAgICB0bzogMSwKICAgICAgICBmcmFtZTogZnVuY3Rpb24odikgewogICAgICAgICAgdmFyIG5wID0gYmV6aWVyKHAxLCBwMiwgcDMsIHA0LCB2KTsKICAgICAgICAgIHAxLnggPSBucC54OwogICAgICAgICAgcDEueSA9IG5wLnk7CiAgICAgICAgICBmbGlwTWV0aG9kcy5fZm9sZC5jYWxsKHRoYXQsIHAxKTsKICAgICAgICB9LAogICAgICAgIGNvbXBsZXRlOiBoaWRlLAogICAgICAgIGR1cmF0aW9uOiA4MDAsCiAgICAgICAgaGlkaW5nOiB0cnVlCiAgICAgIH0pOwoKICAgIH0gZWxzZSB7CgogICAgICB0aGlzLmFuaW1hdGVmKGZhbHNlKTsKICAgICAgaGlkZSgpOwoKICAgIH0KICB9LAoKICB0dXJuUGFnZTogZnVuY3Rpb24oY29ybmVyKSB7CgogICAgdmFyIHRoYXQgPSB0aGlzLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCk7CgogICAgY29ybmVyID0ge2Nvcm5lcjogKGRhdGEuY29ybmVyKSA/CiAgICAgIGRhdGEuY29ybmVyLmNvcm5lciA6CiAgICAgIGNvcm5lciB8fCBmbGlwTWV0aG9kcy5fY0FsbG93ZWQuY2FsbCh0aGlzKVswXX07CgogICAgdmFyIHAxID0gZGF0YS5wb2ludCB8fAogICAgICBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsCiAgICAgICAgY29ybmVyLmNvcm5lciwKICAgICAgICAoZGF0YS5vcHRzLnR1cm4pID8gdHVybkRhdGEub3B0cy5lbGV2YXRpb24gOiAwKSwKICAgICAgcDQgPSBmbGlwTWV0aG9kcy5fYzIuY2FsbCh0aGlzLCBjb3JuZXIuY29ybmVyKTsKCiAgICAgIHRoaXMudHJpZ2dlcignZmxpcCcpLgogICAgICAgIGFuaW1hdGVmKHsKICAgICAgICAgIGZyb206IDAsCiAgICAgICAgICB0bzogMSwKICAgICAgICAgIGZyYW1lOiBmdW5jdGlvbih2KSB7CgogICAgICAgICAgICB2YXIgbnAgPSBiZXppZXIocDEsIHAxLCBwNCwgcDQsIHYpOwogICAgICAgICAgICBjb3JuZXIueCA9IG5wLng7CiAgICAgICAgICAgIGNvcm5lci55ID0gbnAueTsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhhdCwgY29ybmVyKTsKCiAgICAgICAgICB9LAogICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAKICAgICAgICAgICAgdGhhdC50cmlnZ2VyKCdlbmQnLCBbZGF0YS5vcHRzLCB0cnVlXSk7CgogICAgICAgICAgfSwKICAgICAgICAgIGR1cmF0aW9uOiB0dXJuRGF0YS5vcHRzLmR1cmF0aW9uLAogICAgICAgICAgdHVybmluZzogdHJ1ZQogICAgICAgIH0pOwoKICAgICAgZGF0YS5jb3JuZXIgPSBudWxsOwogIH0sCgogIG1vdmluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuICdlZmZlY3QnIGluIHRoaXMuZGF0YSgpOwogIAogIH0sCgogIGlzVHVybmluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMuZmxpcCgnbW92aW5nJykgJiYgdGhpcy5kYXRhKCkuZWZmZWN0LnR1cm5pbmc7CiAgCiAgfSwKCiAgY29ybmVyOiBmdW5jdGlvbigpIHsKICAgIAogICAgcmV0dXJuIHRoaXMuZGF0YSgpLmYuY29ybmVyOwogICAgICAKICB9LAoKICBfZXZlbnRTdGFydDogZnVuY3Rpb24oZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybiA9IGRhdGEub3B0cy50dXJuOwoKICAgIGlmICghZGF0YS5jb3JuZXIgJiYgIWRhdGEuZGlzYWJsZWQgJiYgIXRoaXMuZmxpcCgnaXNUdXJuaW5nJykgJiYKICAgICAgZGF0YS5vcHRzLnBhZ2U9PXR1cm4uZGF0YSgpLnBhZ2VQbGFjZVtkYXRhLm9wdHMucGFnZV0pCiAgICB7CgogICAgICBkYXRhLmNvcm5lciA9IGZsaXBNZXRob2RzLl9pc0lBcmVhLmNhbGwodGhpcywgZSk7CgogICAgICBpZiAoZGF0YS5jb3JuZXIgJiYgZmxpcE1ldGhvZHMuX2ZvbGRpbmdQYWdlLmNhbGwodGhpcykpIHsKCiAgICAgICAgdGhpcy50cmlnZ2VyKCdwcmVzc2VkJywgW2RhdGEucG9pbnRdKTsKICAgICAgICBmbGlwTWV0aG9kcy5fc2hvd0ZvbGRlZFBhZ2UuY2FsbCh0aGlzLCBkYXRhLmNvcm5lcik7CgogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgIH0gZWxzZQogICAgICAgIGRhdGEuY29ybmVyID0gbnVsbDsKCiAgICB9CgogIH0sCgogIF9ldmVudE1vdmU6IGZ1bmN0aW9uKGUpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhLmRpc2FibGVkKSB7CgogICAgICBlID0gKGlzVG91Y2gpID8gZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMgOiBbZV07CgogICAgICBpZiAoZGF0YS5jb3JuZXIpIHsKCiAgICAgICAgdmFyIHBvcyA9IGRhdGEucGFyZW50Lm9mZnNldCgpOwogICAgICAgIGRhdGEuY29ybmVyLnggPSBlWzBdLnBhZ2VYLXBvcy5sZWZ0OwogICAgICAgIGRhdGEuY29ybmVyLnkgPSBlWzBdLnBhZ2VZLXBvcy50b3A7CiAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhpcywgZGF0YS5jb3JuZXIpOwoKICAgICAgfSBlbHNlIGlmIChkYXRhLmhvdmVyICYmICF0aGlzLmRhdGEoKS5lZmZlY3QgJiYgdGhpcy5pcygnOnZpc2libGUnKSkgewoKICAgICAgICB2YXIgcG9pbnQgPSBmbGlwTWV0aG9kcy5faXNJQXJlYS5jYWxsKHRoaXMsIGVbMF0pOwoKICAgICAgICBpZiAocG9pbnQpIHsKCiAgICAgICAgICBpZiAoKGRhdGEuZWZmZWN0PT0nc2hlZXQnICYmIHBvaW50LmNvcm5lci5sZW5ndGg9PTIpICB8fCBkYXRhLmVmZmVjdD09J2hhcmQnKSB7CiAgICAgICAgICAgIGRhdGEuc3RhdHVzID0gJ2hvdmVyJzsKICAgICAgICAgICAgdmFyIG9yaWdpbiA9IGZsaXBNZXRob2RzLl9jLmNhbGwodGhpcywgcG9pbnQuY29ybmVyLCBkYXRhLm9wdHMuY29ybmVyU2l6ZS8yKTsKICAgICAgICAgICAgcG9pbnQueCA9IG9yaWdpbi54OwogICAgICAgICAgICBwb2ludC55ID0gb3JpZ2luLnk7CiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9zaG93Rm9sZGVkUGFnZS5jYWxsKHRoaXMsIHBvaW50LCB0cnVlKTsKICAgICAgICAgIH0KICAgICAgICAKICAgICAgICB9IGVsc2UgewogICAgICAgICAgCiAgICAgICAgICBpZiAoZGF0YS5zdGF0dXM9PSdob3ZlcicpIHsKICAgICAgICAgICAgZGF0YS5zdGF0dXMgPSAnJzsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgfQoKICAgIH0KCiAgfSwKCiAgX2V2ZW50RW5kOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIGNvcm5lciA9IGRhdGEuY29ybmVyOwoKICAgIGlmICghZGF0YS5kaXNhYmxlZCAmJiBjb3JuZXIpIHsKICAgICAgaWYgKHRyaWdnZXIoJ3JlbGVhc2VkJywgdGhpcywgW2RhdGEucG9pbnQgfHwgY29ybmVyXSkhPSdwcmV2ZW50ZWQnKSB7CiAgICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgfQogICAgfQoKICAgIGRhdGEuY29ybmVyID0gbnVsbDsKCiAgfSwKCiAgZGlzYWJsZTogZnVuY3Rpb24oZGlzYWJsZSkgewoKICAgIGZsaXBNZXRob2RzLnNldERhdGEuY2FsbCh0aGlzLCB7J2Rpc2FibGVkJzogZGlzYWJsZX0pOwogICAgcmV0dXJuIHRoaXM7CgogIH0sCgogIGhvdmVyOiBmdW5jdGlvbihob3ZlcikgewogICAgCiAgICBmbGlwTWV0aG9kcy5zZXREYXRhLmNhbGwodGhpcywgeydob3Zlcic6IGhvdmVyfSk7CiAgICByZXR1cm4gdGhpczsKCiAgfSwKCiAgcGVlbDogZnVuY3Rpb24gKGNvcm5lciwgYW5pbWF0ZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZjsKCiAgICBpZiAoY29ybmVyKSB7CgogICAgICBpZiAoJC5pbkFycmF5KGNvcm5lciwgY29ybmVycy5hbGwpPT0tMSkKICAgICAgICB0aHJvdyB0dXJuRXJyb3IoJ0Nvcm5lciAnK2Nvcm5lcisnIGlzIG5vdCBwZXJtaXR0ZWQnKTsKCiAgICAgIGlmICgkLmluQXJyYXkoY29ybmVyLCBmbGlwTWV0aG9kcy5fY0FsbG93ZWQuY2FsbCh0aGlzKSkhPS0xKSB7CgogICAgICAgIHZhciBwb2ludCA9IGZsaXBNZXRob2RzLl9jLmNhbGwodGhpcywgY29ybmVyLCBkYXRhLm9wdHMuY29ybmVyU2l6ZS8yKTsKICAgICAgICAKICAgICAgICBkYXRhLnN0YXR1cyA9ICdwZWVsJzsKCiAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhpcywKICAgICAgICB7CiAgICAgICAgICBjb3JuZXI6IGNvcm5lciwKICAgICAgICAgIHg6IHBvaW50LngsCiAgICAgICAgICB5OiBwb2ludC55CiAgICAgICAgfSwgYW5pbWF0ZSk7CgogICAgICB9CgoKICAgIH0gZWxzZSB7CgogICAgICBkYXRhLnN0YXR1cyA9ICcnOwoKICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCBhbmltYXRlKTsKICAgICAgCiAgICB9CgogICAgcmV0dXJuIHRoaXM7CiAgfQp9OwoKCi8vIFByb2Nlc3NlcyBjbGFzc2VzCgpmdW5jdGlvbiBkZWModGhhdCwgbWV0aG9kcywgYXJncykgewoKICBpZiAoIWFyZ3NbMF0gfHwgdHlwZW9mKGFyZ3NbMF0pPT0nb2JqZWN0JykKICAgIHJldHVybiBtZXRob2RzLmluaXQuYXBwbHkodGhhdCwgYXJncyk7CgogIGVsc2UgaWYgKG1ldGhvZHNbYXJnc1swXV0pCiAgICByZXR1cm4gbWV0aG9kc1thcmdzWzBdXS5hcHBseSh0aGF0LCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7CgogIGVsc2UKICAgIHRocm93IHR1cm5FcnJvcihhcmdzWzBdICsgJyBpcyBub3QgYSBtZXRob2Qgb3IgcHJvcGVydHknKTsKCn0KCgovLyBBdHRyaWJ1dGVzIGZvciBhIGxheWVyCgpmdW5jdGlvbiBkaXZBdHQodG9wLCBsZWZ0LCB6SW5kZXgsIG92ZXJmKSB7CiAgICAKICByZXR1cm4geydjc3MnOiB7CiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJywKICAgIHRvcDogdG9wLAogICAgbGVmdDogbGVmdCwKICAgICdvdmVyZmxvdyc6IG92ZXJmIHx8ICdoaWRkZW4nLAogICAgekluZGV4OiB6SW5kZXggfHwgJ2F1dG8nCiAgfQp9OwogICAgICAKfQoKLy8gR2V0cyBhIDJEIHBvaW50IGZyb20gYSBiZXppZXIgY3VydmUgb2YgZm91ciBwb2ludHMKCmZ1bmN0aW9uIGJlemllcihwMSwgcDIsIHAzLCBwNCwgdCkgewoKICB2YXIgYSA9IDEgLSB0LAogICAgYiA9IGEgKiBhICogYSwKICAgIGMgPSB0ICogdCAqIHQ7CiAgICAKICByZXR1cm4gcG9pbnQyRChNYXRoLnJvdW5kKGIqcDEueCArIDMqdCphKmEqcDIueCArIDMqdCp0KmEqcDMueCArIGMqcDQueCksCiAgICBNYXRoLnJvdW5kKGIqcDEueSArIDMqdCphKmEqcDIueSArIDMqdCp0KmEqcDMueSArIGMqcDQueSkpOwoKfQogIAovLyBDb252ZXJ0cyBhbiBhbmdsZSBmcm9tIGRlZ3JlZXMgdG8gcmFkaWFucwoKZnVuY3Rpb24gcmFkKGRlZ3JlZXMpIHsKICAKICByZXR1cm4gZGVncmVlcy8xODAqUEk7Cgp9CgovLyBDb252ZXJ0cyBhbiBhbmdsZSBmcm9tIHJhZGlhbnMgdG8gZGVncmVlcwoKZnVuY3Rpb24gZGVnKHJhZGlhbnMpIHsKICAKICByZXR1cm4gcmFkaWFucy9QSSoxODA7Cgp9CgovLyBHZXRzIGEgMkQgcG9pbnQKCmZ1bmN0aW9uIHBvaW50MkQoeCwgeSkgewogIAogIHJldHVybiB7eDogeCwgeTogeX07Cgp9CgovLyBXZWJraXQgNTM0LjMgb24gQW5kcm9pZCB3cm9uZ2x5IHJlcGFpbnRzIGVsZW1lbnRzIHRoYXQgdXNlIG92ZXJmbG93OmhpZGRlbiArIHJvdGF0aW9uCgpmdW5jdGlvbiByb3RhdGlvbkF2YWlsYWJsZSgpIHsKICB2YXIgcGFydHM7CgogIGlmICgocGFydHMgPSAvQXBwbGVXZWJraXRcLyhbMC05XC5dKykvaS5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpKSkgewogICAgdmFyIHdlYmtpdFZlcnNpb24gPSBwYXJzZUZsb2F0KHBhcnRzWzFdKTsKICAgIHJldHVybiAod2Via2l0VmVyc2lvbj41MzQuMyk7CiAgfSBlbHNlIHsKICAgIHJldHVybiB0cnVlOwogIH0KfQoKLy8gUmV0dXJucyB0aGUgdHJhc2xhdGUgdmFsdWUKCmZ1bmN0aW9uIHRyYW5zbGF0ZSh4LCB5LCB1c2UzZCkgewogIAogIHJldHVybiAoaGFzM2QgJiYgdXNlM2QpID8gJyB0cmFuc2xhdGUzZCgnICsgeCArICdweCwnICsgeSArICdweCwgMHB4KSAnCiAgOiAnIHRyYW5zbGF0ZSgnICsgeCArICdweCwgJyArIHkgKyAncHgpICc7Cgp9CgovLyBSZXR1cm5zIHRoZSByb3RhdGlvbiB2YWx1ZQoKZnVuY3Rpb24gcm90YXRlKGRlZ3JlZXMpIHsKICAKICByZXR1cm4gJyByb3RhdGUoJyArIGRlZ3JlZXMgKyAnZGVnKSAnOwoKfQoKLy8gQ2hlY2tzIGlmIGEgcHJvcGVydHkgYmVsb25ncyB0byBhbiBvYmplY3QKCmZ1bmN0aW9uIGhhcyhwcm9wZXJ0eSwgb2JqZWN0KSB7CiAgCiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsKCn0KCi8vIEdldHMgdGhlIENTUzMgdmVuZG9yIHByZWZpeAoKZnVuY3Rpb24gZ2V0UHJlZml4KCkgewoKICB2YXIgdmVuZG9yUHJlZml4ZXMgPSBbJ01veicsJ1dlYmtpdCcsJ0todG1sJywnTycsJ21zJ10sCiAgbGVuID0gdmVuZG9yUHJlZml4ZXMubGVuZ3RoLAogIHZlbmRvciA9ICcnOwoKICB3aGlsZSAobGVuLS0pCiAgICBpZiAoKHZlbmRvclByZWZpeGVzW2xlbl0gKyAnVHJhbnNmb3JtJykgaW4gZG9jdW1lbnQuYm9keS5zdHlsZSkKICAgICAgdmVuZG9yPSctJyt2ZW5kb3JQcmVmaXhlc1tsZW5dLnRvTG93ZXJDYXNlKCkrJy0nOwoKICByZXR1cm4gdmVuZG9yOwoKfQoKLy8gRGV0ZWN0cyB0aGUgdHJhbnNpdGlvbkVuZCBFdmVudAoKZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbkVuZCgpIHsKCiAgdmFyIHQsCiAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zha2VlbGVtZW50JyksCiAgICB0cmFuc2l0aW9ucyA9IHsKICAgICAgJ3RyYW5zaXRpb24nOid0cmFuc2l0aW9uZW5kJywKICAgICAgJ09UcmFuc2l0aW9uJzonb1RyYW5zaXRpb25FbmQnLAogICAgICAnTVNUcmFuc2l0aW9uJzondHJhbnNpdGlvbmVuZCcsCiAgICAgICdNb3pUcmFuc2l0aW9uJzondHJhbnNpdGlvbmVuZCcsCiAgICAgICdXZWJraXRUcmFuc2l0aW9uJzond2Via2l0VHJhbnNpdGlvbkVuZCcKICAgIH07CgogIGZvciAodCBpbiB0cmFuc2l0aW9ucykgewogICAgaWYgKGVsLnN0eWxlW3RdICE9PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIHRyYW5zaXRpb25zW3RdOwogICAgfQogIH0KfQoKLy8gR3JhZGllbnRzCgpmdW5jdGlvbiBncmFkaWVudChvYmosIHAwLCBwMSwgY29sb3JzLCBudW1Db2xvcnMpIHsKCiAgdmFyIGosIGNvbHMgPSBbXTsKCiAgaWYgKHZlbmRvcj09Jy13ZWJraXQtJykgewoKICAgIGZvciAoaiA9IDA7IGo8bnVtQ29sb3JzOyBqKyspCiAgICAgIGNvbHMucHVzaCgnY29sb3Itc3RvcCgnK2NvbG9yc1tqXVswXSsnLCAnK2NvbG9yc1tqXVsxXSsnKScpOwogICAgCiAgICBvYmouY3NzKHsnYmFja2dyb3VuZC1pbWFnZSc6CiAgICAgICAgJy13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAnKwogICAgICAgIHAwLngrJyUgJysKICAgICAgICBwMC55KyclLCcrCiAgICAgICAgcDEueCsnJSAnKwogICAgICAgIHAxLnkrJyUsICcrCiAgICAgICAgY29scy5qb2luKCcsJykgKyAnICknfSk7CiAgfSBlbHNlIHsKICAgIAogICAgcDAgPSB7eDpwMC54LzEwMCAqIG9iai53aWR0aCgpLCB5OnAwLnkvMTAwICogb2JqLmhlaWdodCgpfTsKICAgIHAxID0ge3g6cDEueC8xMDAgKiBvYmoud2lkdGgoKSwgeTpwMS55LzEwMCAqIG9iai5oZWlnaHQoKX07CgogICAgdmFyIGR4ID0gcDEueC1wMC54LAogICAgICBkeSA9IHAxLnktcDAueSwKICAgICAgYW5nbGUgPSBNYXRoLmF0YW4yKGR5LCBkeCksCiAgICAgIGFuZ2xlMiA9IGFuZ2xlIC0gTWF0aC5QSS8yLAogICAgICBkaWFnb25hbCA9IE1hdGguYWJzKG9iai53aWR0aCgpKk1hdGguc2luKGFuZ2xlMikpK01hdGguYWJzKG9iai5oZWlnaHQoKSpNYXRoLmNvcyhhbmdsZTIpKSwKICAgICAgZ3JhZGllbnREaWFnb25hbCA9IE1hdGguc3FydChkeSpkeSArIGR4KmR4KSwKICAgICAgY29ybmVyID0gcG9pbnQyRCgocDEueDxwMC54KSA/IG9iai53aWR0aCgpIDogMCwgKHAxLnk8cDAueSkgPyBvYmouaGVpZ2h0KCkgOiAwKSwKICAgICAgc2xvcGUgPSBNYXRoLnRhbihhbmdsZSksCiAgICAgIGludmVyc2UgPSAtMS9zbG9wZSwKICAgICAgeCA9IChpbnZlcnNlKmNvcm5lci54IC0gY29ybmVyLnkgLSBzbG9wZSpwMC54ICsgcDAueSkvKGludmVyc2Utc2xvcGUpLAogICAgICBjID0ge3g6IHgsIHk6IGludmVyc2UqeCAtIGludmVyc2UqY29ybmVyLnggKyBjb3JuZXIueX0sCiAgICAgIHNlZ0EgPSAoTWF0aC5zcXJ0KCBNYXRoLnBvdyhjLngtcDAueCwyKSArIE1hdGgucG93KGMueS1wMC55LDIpKSk7CgogICAgICBmb3IgKGogPSAwOyBqPG51bUNvbG9yczsgaisrKQogICAgICAgIGNvbHMucHVzaCgnICcrY29sb3JzW2pdWzFdKycgJysoKHNlZ0EgKyBncmFkaWVudERpYWdvbmFsKmNvbG9yc1tqXVswXSkqMTAwL2RpYWdvbmFsKSsnJScpOwoKICAgICAgb2JqLmNzcyh7J2JhY2tncm91bmQtaW1hZ2UnOiB2ZW5kb3IrJ2xpbmVhci1ncmFkaWVudCgnICsgKC1hbmdsZSkgKyAncmFkLCcgKyBjb2xzLmpvaW4oJywnKSArICcpJ30pOwogIH0KfQoKCi8vIFRyaWdnZXJzIGFuIGV2ZW50CgpmdW5jdGlvbiB0cmlnZ2VyKGV2ZW50TmFtZSwgY29udGV4dCwgYXJncykgewoKICB2YXIgZXZlbnQgPSAkLkV2ZW50KGV2ZW50TmFtZSk7CiAgY29udGV4dC50cmlnZ2VyKGV2ZW50LCBhcmdzKTsKICBpZiAoZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpCiAgICByZXR1cm4gJ3ByZXZlbnRlZCc7CiAgZWxzZSBpZiAoZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgIHJldHVybiAnc3RvcHBlZCc7CiAgZWxzZQogICAgcmV0dXJuICcnOwp9CgovLyBKUyBFcnJvcnMKCmZ1bmN0aW9uIHR1cm5FcnJvcihtZXNzYWdlKSB7CgogIGZ1bmN0aW9uIFR1cm5Kc0Vycm9yKG1lc3NhZ2UpIHsKICAgIHRoaXMubmFtZSA9ICJUdXJuSnNFcnJvciI7CiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogIH0KCiAgVHVybkpzRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yKCk7CiAgVHVybkpzRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHVybkpzRXJyb3I7CiAgcmV0dXJuIG5ldyBUdXJuSnNFcnJvcihtZXNzYWdlKTsKCn0KCi8vIEZpbmQgdGhlIG9mZnNldCBvZiBhbiBlbGVtZW50IGlnbm9yaW5nIGl0cyB0cmFuc2Zvcm1hdGlvbgoKZnVuY3Rpb24gZmluZFBvcyhvYmopIHsKCiAgdmFyIG9mZnNldCA9IHt0b3A6IDAsIGxlZnQ6IDB9OwoKICBkb3sKICAgIG9mZnNldC5sZWZ0ICs9IG9iai5vZmZzZXRMZWZ0OwogICAgb2Zmc2V0LnRvcCArPSBvYmoub2Zmc2V0VG9wOwogIH0gd2hpbGUgKChvYmogPSBvYmoub2Zmc2V0UGFyZW50KSk7CgogIHJldHVybiBvZmZzZXQ7Cgp9CgovLyBDaGVja3MgaWYgdGhlcmUncyBoYXJkIHBhZ2UgY29tcGF0aWJpbGl0eQovLyBJRTkgaXMgdGhlIG9ubHkgYnJvd3NlciB0aGF0IGRvZXMgbm90IHN1cHBvcnQgaGFyZCBwYWdlcwoKZnVuY3Rpb24gaGFzSGFyZFBhZ2UoKSB7CiAgcmV0dXJuIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ01TSUUgOS4wJyk9PS0xKTsKfQoKLy8gUmVxdWVzdCBhbiBhbmltYXRpb24KCndpbmRvdy5yZXF1ZXN0QW5pbSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwKICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgICAgd2luZG93LnNldFRpbWVvdXQoY2FsbGJhY2ssIDEwMDAgLyA2MCk7CiAgICB9OwoKfSkoKTsKCi8vIEV4dGVuZCAkLmZuCgokLmV4dGVuZCgkLmZuLCB7CgogIGZsaXA6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGRlYygkKHRoaXNbMF0pLCBmbGlwTWV0aG9kcywgYXJndW1lbnRzKTsKICB9LAoKICB0dXJuOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBkZWMoJCh0aGlzWzBdKSwgdHVybk1ldGhvZHMsIGFyZ3VtZW50cyk7CiAgfSwKCiAgdHJhbnNmb3JtOiBmdW5jdGlvbih0cmFuc2Zvcm0sIG9yaWdpbikgewoKICAgIHZhciBwcm9wZXJ0aWVzID0ge307CiAgICAKICAgIGlmIChvcmlnaW4pCiAgICAgIHByb3BlcnRpZXNbdmVuZG9yKyd0cmFuc2Zvcm0tb3JpZ2luJ10gPSBvcmlnaW47CiAgICAKICAgIHByb3BlcnRpZXNbdmVuZG9yKyd0cmFuc2Zvcm0nXSA9IHRyYW5zZm9ybTsKICAKICAgIHJldHVybiB0aGlzLmNzcyhwcm9wZXJ0aWVzKTsKCiAgfSwKCiAgYW5pbWF0ZWY6IGZ1bmN0aW9uKHBvaW50KSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS5lZmZlY3QpCiAgICAgIGRhdGEuZWZmZWN0LnN0b3AoKTsKCiAgICBpZiAocG9pbnQpIHsKCiAgICAgIGlmICghcG9pbnQudG8ubGVuZ3RoKSBwb2ludC50byA9IFtwb2ludC50b107CiAgICAgIGlmICghcG9pbnQuZnJvbS5sZW5ndGgpIHBvaW50LmZyb20gPSBbcG9pbnQuZnJvbV07CgogICAgICB2YXIgZGlmZiA9IFtdLAogICAgICAgIGxlbiA9IHBvaW50LnRvLmxlbmd0aCwKICAgICAgICBhbmltYXRpbmcgPSB0cnVlLAogICAgICAgIHRoYXQgPSB0aGlzLAogICAgICAgIHRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpLAogICAgICAgIGZyYW1lID0gZnVuY3Rpb24oKSB7CgogICAgICAgICAgaWYgKCFkYXRhLmVmZmVjdCB8fCAhYW5pbWF0aW5nKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgdmFyIHYgPSBbXSwKICAgICAgICAgICAgdGltZURpZmYgPSBNYXRoLm1pbihwb2ludC5kdXJhdGlvbiwgKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIHRpbWUpOwoKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspCiAgICAgICAgICAgIHYucHVzaChkYXRhLmVmZmVjdC5lYXNpbmcoMSwgdGltZURpZmYsIHBvaW50LmZyb21baV0sIGRpZmZbaV0sIHBvaW50LmR1cmF0aW9uKSk7CgogICAgICAgICAgcG9pbnQuZnJhbWUoKGxlbj09MSkgPyB2WzBdIDogdik7CgogICAgICAgICAgaWYgKHRpbWVEaWZmPT1wb2ludC5kdXJhdGlvbikgewogICAgICAgICAgICBkZWxldGUgZGF0YVsnZWZmZWN0J107CiAgICAgICAgICAgIHRoYXQuZGF0YShkYXRhKTsKICAgICAgICAgICAgaWYgKHBvaW50LmNvbXBsZXRlKQogICAgICAgICAgICAgIHBvaW50LmNvbXBsZXRlKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW0oZnJhbWUpOwogICAgICAgICAgfQogICAgICAgIH07CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKQogICAgICAgIGRpZmYucHVzaChwb2ludC50b1tpXSAtIHBvaW50LmZyb21baV0pOwoKICAgICAgZGF0YS5lZmZlY3QgPSAkLmV4dGVuZCh7CiAgICAgICAgc3RvcDogZnVuY3Rpb24oKSB7CiAgICAgICAgICBhbmltYXRpbmcgPSBmYWxzZTsKICAgICAgICB9LAogICAgICAgIGVhc2luZzogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGRhdGEpIHsKICAgICAgICAgIHJldHVybiBjICogTWF0aC5zcXJ0KDEgLSAodD10L2RhdGEtMSkqdCkgKyBiOwogICAgICAgIH0KICAgICAgfSwgcG9pbnQpOwoKICAgICAgdGhpcy5kYXRhKGRhdGEpOwoKICAgICAgZnJhbWUoKTsKCiAgICB9IGVsc2UgewogICAgICAKICAgICAgZGVsZXRlIGRhdGFbJ2VmZmVjdCddOwoKICAgIH0KICB9Cn0pOwoKLy8gRXhwb3J0IHNvbWUgZ2xvYmFscwoKJC5pc1RvdWNoID0gaXNUb3VjaDsKJC5tb3VzZUV2ZW50cyA9IG1vdXNlRXZlbnRzOwokLmNzc1ByZWZpeCA9IGdldFByZWZpeDsKJC5jc3NUcmFuc2l0aW9uRW5kID0gZ2V0VHJhbnNpdGlvbkVuZDsKJC5maW5kUG9zID0gZmluZFBvczsKCn0pKGpRdWVyeSk7Cg=='],
// nope: ['../../lib/turn.html4.min.js'],
// both: ['../../lib/zoom.min.js', 'js/magazine.js', 'css/magazine.css'],
// both: ['../../lib/zoom.min.js', 'css/magazine.css'],
// both: ['css/magazine.css'],
// both: [''],
both: ['data:/text/plain;base64,LyoqCiAqIHR1cm4uanMgNHRoIHJlbGVhc2UKICogdHVybmpzLmNvbQogKiB0dXJuanMuY29tL2xpY2Vuc2UudHh0CiAqCiAqIENvcHlyaWdodCAoQykgMjAxMiBFbW1hbnVlbCBHYXJjaWEKICogQWxsIHJpZ2h0cyByZXNlcnZlZAogKiovCgooZnVuY3Rpb24oJCkgewoKJ3VzZSBzdHJpY3QnOwoKdmFyIGhhczNkLAogIAogIGhhc1JvdCwKCiAgdmVuZG9yID0gJycsCiAgCiAgdmVyc2lvbiA9ICc0LjEuMCcsCgogIFBJID0gTWF0aC5QSSwKCiAgQTkwID0gUEkvMiwKCiAgaXNUb3VjaCA9ICdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdywKCiAgbW91c2VFdmVudHMgPSAoaXNUb3VjaCkgPwogICAgewogICAgICBkb3duOiAndG91Y2hzdGFydCcsCiAgICAgIG1vdmU6ICd0b3VjaG1vdmUnLAogICAgICB1cDogJ3RvdWNoZW5kJywKICAgICAgb3ZlcjogJ3RvdWNoc3RhcnQnLAogICAgICBvdXQ6ICd0b3VjaGVuZCcKICAgIH0KICAgIDoKICAgIHsKICAgICAgZG93bjogJ21vdXNlZG93bicsCiAgICAgIG1vdmU6ICdtb3VzZW1vdmUnLAogICAgICB1cDogJ21vdXNldXAnLAogICAgICBvdmVyOiAnbW91c2VvdmVyJywKICAgICAgb3V0OiAnbW91c2VvdXQnCiAgICB9LAoKICAvLyBDb250YW5zdHMgdXNlZCBmb3IgZWFjaCBjb3JuZXIKICAvLyAgIHwgdGwgKiB0ciB8CiAgLy8gbCB8ICogICAgICogfCByCiAgLy8gICB8IGJsICogYnIgfAoKICBjb3JuZXJzID0gewogICAgYmFja3dhcmQ6IFsnYmwnLCAndGwnXSwKICAgIGZvcndhcmQ6IFsnYnInLCAndHInXSwKICAgIGFsbDogWyd0bCcsICdibCcsICd0cicsICdicicsICdsJywgJ3InXQogIH0sCgogIC8vIERpc3BsYXkgdmFsdWVzCgogIGRpc3BsYXlzID0gWydzaW5nbGUnLCAnZG91YmxlJ10sCgogIC8vIERpcmVjdGlvbiB2YWx1ZXMKCiAgZGlyZWN0aW9ucyA9IFsnbHRyJywgJ3J0bCddLAoKICAvLyBEZWZhdWx0IG9wdGlvbnMKCiAgdHVybk9wdGlvbnMgPSB7CgogICAgLy8gRW5hYmxlcyBoYXJkd2FyZSBhY2NlbGVyYXRpb24KCiAgICBhY2NlbGVyYXRpb246IHRydWUsCgogICAgLy8gRGlzcGxheQoKICAgIGRpc3BsYXk6ICdkb3VibGUnLAoKICAgIC8vIER1cmF0aW9uIG9mIHRyYW5zaXRpb24gaW4gbWlsbGlzZWNvbmRzCgogICAgZHVyYXRpb246IDYwMCwKCiAgICAvLyBGaXJzdCBwYWdlCgogICAgcGFnZTogMSwKICAgIAogICAgLy8gRW5hYmxlcyBncmFkaWVudHMKCiAgICBncmFkaWVudHM6IHRydWUsCgogICAgLy8gQ29ybmVycyB1c2VkIHdoZW4gdHVybmluZyB0aGUgcGFnZQoKICAgIHR1cm5Db3JuZXJzOiAnYmwsYnInLAoKICAgIC8vIEV2ZW50cwoKICAgIHdoZW46IG51bGwKICB9LAoKICBmbGlwT3B0aW9ucyA9IHsKCiAgICAvLyBTaXplIG9mIHRoZSBhY3RpdmUgem9uZSBvZiBlYWNoIGNvcm5lcgoKICAgIGNvcm5lclNpemU6IDEwMAoKICB9LAoKICAvLyBOdW1iZXIgb2YgcGFnZXMgaW4gdGhlIERPTSwgbWluaW11bSB2YWx1ZTogNgoKICBwYWdlc0luRE9NID0gNiwKICAKCnR1cm5NZXRob2RzID0gewoKICAvLyBTaW5nbGV0b24gY29uc3RydWN0b3IKICAvLyAkKCcjc2VsZWN0b3InKS50dXJuKFtvcHRpb25zXSk7CgogIGluaXQ6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKCiAgICAvLyBEZWZpbmUgY29uc3RhbnRzCiAgICAKICAgIGhhczNkID0gJ1dlYktpdENTU01hdHJpeCcgaW4gd2luZG93IHx8ICdNb3pQZXJzcGVjdGl2ZScgaW4gZG9jdW1lbnQuYm9keS5zdHlsZTsKICAgIGhhc1JvdCA9IHJvdGF0aW9uQXZhaWxhYmxlKCk7CiAgICB2ZW5kb3IgPSBnZXRQcmVmaXgoKTsKCiAgICB2YXIgaSwgdGhhdCA9IHRoaXMsIHBhZ2VOdW0gPSAwLCBkYXRhID0gdGhpcy5kYXRhKCksIGNoID0gdGhpcy5jaGlsZHJlbigpOwoKICAgIC8vIFNldCBpbml0aWFsIGNvbmZpZ3VyYXRpb24KCiAgICBvcHRpb25zID0gJC5leHRlbmQoewogICAgICB3aWR0aDogdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0KCksCiAgICAgIGRpcmVjdGlvbjogdGhpcy5hdHRyKCdkaXInKSB8fCB0aGlzLmNzcygnZGlyZWN0aW9uJykgfHwgJ2x0cicKICAgIH0sIHR1cm5PcHRpb25zLCBvcHRpb25zKTsKCiAgICBkYXRhLm9wdHMgPSBvcHRpb25zOwogICAgZGF0YS5wYWdlT2JqcyA9IHt9OwogICAgZGF0YS5wYWdlcyA9IHt9OwogICAgZGF0YS5wYWdlV3JhcCA9IHt9OwogICAgZGF0YS5wYWdlWm9vbSA9IHt9OwogICAgZGF0YS5wYWdlUGxhY2UgPSB7fTsKICAgIGRhdGEucGFnZU12ID0gW107CiAgICBkYXRhLnpvb20gPSAxOwogICAgZGF0YS50b3RhbFBhZ2VzID0gb3B0aW9ucy5wYWdlcyB8fCAwOwogICAgZGF0YS5ldmVudEhhbmRsZXJzID0gewogICAgICB0b3VjaFN0YXJ0OiAkLnByb3h5KHR1cm5NZXRob2RzLl90b3VjaFN0YXJ0LCB0aGlzKSwKICAgICAgdG91Y2hNb3ZlOiAkLnByb3h5KHR1cm5NZXRob2RzLl90b3VjaE1vdmUsIHRoaXMpLAogICAgICB0b3VjaEVuZDogJC5wcm94eSh0dXJuTWV0aG9kcy5fdG91Y2hFbmQsIHRoaXMpLAogICAgICBzdGFydDogJC5wcm94eSh0dXJuTWV0aG9kcy5fZXZlbnRTdGFydCwgdGhpcykKICAgIH07CgoKCiAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXJzCgogICAgaWYgKG9wdGlvbnMud2hlbikKICAgICAgZm9yIChpIGluIG9wdGlvbnMud2hlbikKICAgICAgICBpZiAoaGFzKGksIG9wdGlvbnMud2hlbikpCiAgICAgICAgICB0aGlzLmJpbmQoaSwgb3B0aW9ucy53aGVuW2ldKTsKCiAgICAvLyBTZXQgdGhlIGNzcwoKICAgIHRoaXMuY3NzKHtwb3NpdGlvbjogJ3JlbGF0aXZlJywgd2lkdGg6IG9wdGlvbnMud2lkdGgsIGhlaWdodDogb3B0aW9ucy5oZWlnaHR9KTsKCiAgICAvLyBTZXQgdGhlIGluaXRpYWwgZGlzcGxheQoKICAgIHRoaXMudHVybignZGlzcGxheScsIG9wdGlvbnMuZGlzcGxheSk7CgogICAgLy8gU2V0IHRoZSBkaXJlY3Rpb24KCiAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24hPT0nJykKICAgICAgdGhpcy50dXJuKCdkaXJlY3Rpb24nLCBvcHRpb25zLmRpcmVjdGlvbik7CiAgICAKICAgIC8vIFByZXZlbnQgYmx1ZSBzY3JlZW4gcHJvYmxlbXMgb2Ygc3dpdGNoaW5nIHRvIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBtb2RlCiAgICAvLyBCeSBmb3JjaW5nIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmb3IgZXZlcgoKICAgIGlmIChoYXMzZCAmJiAhaXNUb3VjaCAmJiBvcHRpb25zLmFjY2VsZXJhdGlvbikKICAgICAgdGhpcy50cmFuc2Zvcm0odHJhbnNsYXRlKDAsIDAsIHRydWUpKTsKCiAgICAvLyBBZGQgcGFnZXMgZnJvbSB0aGUgRE9NCgogICAgZm9yIChpID0gMDsgaTxjaC5sZW5ndGg7IGkrKykgewogICAgICBpZiAoJChjaFtpXSkuYXR0cignaWdub3JlJykhPScxJykgewogICAgICAgIHRoaXMudHVybignYWRkUGFnZScsIGNoW2ldLCArK3BhZ2VOdW0pOwogICAgICB9CiAgICB9CgogICAgLy8gRXZlbnQgbGlzdGVuZXJzCgogICAgJCh0aGlzKS5iaW5kKG1vdXNlRXZlbnRzLmRvd24sIGRhdGEuZXZlbnRIYW5kbGVycy50b3VjaFN0YXJ0KS4KICAgICAgYmluZCgnZW5kJywgdHVybk1ldGhvZHMuX2V2ZW50RW5kKS4KICAgICAgYmluZCgncHJlc3NlZCcsIHR1cm5NZXRob2RzLl9ldmVudFByZXNzZWQpLgogICAgICBiaW5kKCdyZWxlYXNlZCcsIHR1cm5NZXRob2RzLl9ldmVudFJlbGVhc2VkKS4KICAgICAgYmluZCgnZmxpcCcsIHR1cm5NZXRob2RzLl9mbGlwKTsKCiAgICAkKHRoaXMpLnBhcmVudCgpLmJpbmQoJ3N0YXJ0JywgZGF0YS5ldmVudEhhbmRsZXJzLnN0YXJ0KTsKCiAgICAkKGRvY3VtZW50KS5iaW5kKG1vdXNlRXZlbnRzLm1vdmUsIGRhdGEuZXZlbnRIYW5kbGVycy50b3VjaE1vdmUpLgogICAgICBiaW5kKG1vdXNlRXZlbnRzLnVwLCBkYXRhLmV2ZW50SGFuZGxlcnMudG91Y2hFbmQpOwoKICAgIC8vIFNldCB0aGUgaW5pdGlhbCBwYWdlCgogICAgdGhpcy50dXJuKCdwYWdlJywgb3B0aW9ucy5wYWdlKTsKCiAgICAvLyBUaGlzIGZsaXBib29rIGlzIHJlYWR5CgogICAgZGF0YS5kb25lID0gdHJ1ZTsKCiAgICByZXR1cm4gdGhpczsKICB9LAoKICAvLyBBZGRzIGEgcGFnZSBmcm9tIGV4dGVybmFsIGRhdGEKCiAgYWRkUGFnZTogZnVuY3Rpb24oZWxlbWVudCwgcGFnZSkgewoKICAgIHZhciBjdXJyZW50UGFnZSwKICAgICAgY2xhc3NOYW1lLAogICAgICBpbmNQYWdlcyA9IGZhbHNlLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIGxhc3RQYWdlID0gZGF0YS50b3RhbFBhZ2VzKzE7CgogICAgaWYgKGRhdGEuZGVzdHJveWluZykKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIC8vIFJlYWQgdGhlIHBhZ2UgbnVtYmVyIGZyb20gdGhlIGNsYXNzTmFtZSBvZiBgZWxlbWVudGAgLSBmb3JtYXQ6IHBbMC05XSsKCiAgICBpZiAoKGN1cnJlbnRQYWdlID0gL1xicChbMC05XSspXGIvLmV4ZWMoJChlbGVtZW50KS5hdHRyKCdjbGFzcycpKSkpCiAgICAgIHBhZ2UgPSBwYXJzZUludChjdXJyZW50UGFnZVsxXSwgMTApOwoKICAgIGlmIChwYWdlKSB7CiAgICAgIAogICAgICBpZiAocGFnZT09bGFzdFBhZ2UpCiAgICAgICAgaW5jUGFnZXMgPSB0cnVlOwogICAgICBlbHNlIGlmIChwYWdlPmxhc3RQYWdlKQogICAgICAgIHRocm93IHR1cm5FcnJvcignUGFnZSAiJytwYWdlKyciIGNhbm5vdCBiZSBpbnNlcnRlZCcpOwoKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICBwYWdlID0gbGFzdFBhZ2U7CiAgICAgIGluY1BhZ2VzID0gdHJ1ZTsKCiAgICB9CgogICAgaWYgKHBhZ2U+PTEgJiYgcGFnZTw9bGFzdFBhZ2UpIHsKCiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKQogICAgICAgIGNsYXNzTmFtZSA9IChwYWdlJTIpID8gJyBvZGQnIDogJyBldmVuJzsKICAgICAgZWxzZQogICAgICAgIGNsYXNzTmFtZSA9ICcnOwoKICAgICAgLy8gU3RvcCBhbmltYXRpb25zCiAgICAgIGlmIChkYXRhLmRvbmUpCiAgICAgICAgdGhpcy50dXJuKCdzdG9wJyk7CgogICAgICAvLyBNb3ZlIHBhZ2VzIGlmIGl0J3MgbmVjZXNzYXJ5CiAgICAgIGlmIChwYWdlIGluIGRhdGEucGFnZU9ianMpCiAgICAgICAgdHVybk1ldGhvZHMuX21vdmVQYWdlcy5jYWxsKHRoaXMsIHBhZ2UsIDEpOwoKICAgICAgLy8gSW5jcmVhc2UgdGhlIG51bWJlciBvZiBwYWdlcwogICAgICBpZiAoaW5jUGFnZXMpCiAgICAgICAgZGF0YS50b3RhbFBhZ2VzID0gbGFzdFBhZ2U7CgogICAgICAvLyBBZGQgZWxlbWVudAogICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdID0gJChlbGVtZW50KS4KICAgICAgICBjc3MoeydmbG9hdCc6ICdsZWZ0J30pLgogICAgICAgIGFkZENsYXNzKCdwYWdlIHAnICsgcGFnZSArIGNsYXNzTmFtZSk7CgogICAgICBpZiAoIWhhc0hhcmRQYWdlKCkgJiYgIGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ2hhcmQnKSkgewogICAgICAgIGRhdGEucGFnZU9ianNbcGFnZV0ucmVtb3ZlQ2xhc3MoJ2hhcmQnKTsKICAgICAgfQoKICAgICAgLy8gQWRkIHBhZ2UKICAgICAgdHVybk1ldGhvZHMuX2FkZFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgIC8vIFJlbW92ZSBwYWdlcyBvdXQgb2YgcmFuZ2UKICAgICAgdHVybk1ldGhvZHMuX3JlbW92ZUZyb21ET00uY2FsbCh0aGlzKTsKICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9LAoKICAvLyBBZGRzIGEgcGFnZQoKICBfYWRkUGFnZTogZnVuY3Rpb24ocGFnZSkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBlbGVtZW50ID0gZGF0YS5wYWdlT2Jqc1twYWdlXTsKCiAgICBpZiAoZWxlbWVudCkKICAgICAgaWYgKHR1cm5NZXRob2RzLl9uZWNlc3NQYWdlLmNhbGwodGhpcywgcGFnZSkpIHsKCiAgICAgICAgaWYgKCFkYXRhLnBhZ2VXcmFwW3BhZ2VdKSB7CgogICAgICAgICAgLy8gV3JhcHBlcgogICAgICAgICAgZGF0YS5wYWdlV3JhcFtwYWdlXSA9ICQoJzxkaXYvPicsCiAgICAgICAgICAgIHsnY2xhc3MnOiAncGFnZS13cmFwcGVyJywKICAgICAgICAgICAgICBwYWdlOiBwYWdlLAogICAgICAgICAgICAgIGNzczoge3Bvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ319KTsKCiAgICAgICAgICAvLyBBcHBlbmQgdG8gdGhpcyBmbGlwYm9vawogICAgICAgICAgdGhpcy5hcHBlbmQoZGF0YS5wYWdlV3JhcFtwYWdlXSk7CgogICAgICAgICAgaWYgKCFkYXRhLnBhZ2VQbGFjZVtwYWdlXSkgewogICAgICAgICAgICAKICAgICAgICAgICAgZGF0YS5wYWdlUGxhY2VbcGFnZV0gPSBwYWdlOwogICAgICAgICAgICAvLyBNb3ZlIGBwYWdlT2Jqc1twYWdlXWAgdG8gd3JhcHBlcgogICAgICAgICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdLmFwcGVuZFRvKGRhdGEucGFnZVdyYXBbcGFnZV0pOwogICAgICAgICAgCiAgICAgICAgIH0KCiAgICAgICAgICAvLyBTZXQgdGhlIHNpemUgb2YgdGhlIHBhZ2UKICAgICAgICAgIHZhciBwcm9wID0gdHVybk1ldGhvZHMuX3BhZ2VTaXplLmNhbGwodGhpcywgcGFnZSwgdHJ1ZSk7CiAgICAgICAgICBlbGVtZW50LmNzcyh7d2lkdGg6IHByb3Aud2lkdGgsIGhlaWdodDogcHJvcC5oZWlnaHR9KTsKICAgICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKHByb3ApOwoKICAgICAgICB9CgogICAgICAgIGlmIChkYXRhLnBhZ2VQbGFjZVtwYWdlXSA9PSBwYWdlKSB7CgogICAgICAgICAvLyBJZiB0aGUgcGFnZSBpc24ndCBpbiBhbm90aGVyIHBsYWNlLCBjcmVhdGUgdGhlIGZsaXAgZWZmZWN0CiAgICAgICAgICB0dXJuTWV0aG9kcy5fbWFrZUZsaXAuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgIH0KICAgICAgICAKICAgICAgfSBlbHNlIHsKCiAgICAgICAgLy8gUGxhY2UKICAgICAgICBkYXRhLnBhZ2VQbGFjZVtwYWdlXSA9IDA7CgogICAgICAgIC8vIFJlbW92ZSBlbGVtZW50IGZyb20gdGhlIERPTQogICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW3BhZ2VdKQogICAgICAgICAgZGF0YS5wYWdlT2Jqc1twYWdlXS5yZW1vdmUoKTsKCiAgICAgIH0KCiAgfSwKCiAgLy8gQ2hlY2tzIGlmIGEgcGFnZSBpcyBpbiBtZW1vcnkKICAKICBoYXNQYWdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgcmV0dXJuIGhhcyhwYWdlLCB0aGlzLmRhdGEoKS5wYWdlT2Jqcyk7CiAgCiAgfSwKCiAgLy8gQ2VudGVycyB0aGUgZmxpcGJvb2sKCiAgY2VudGVyOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHNpemUgPSAkKHRoaXMpLnR1cm4oJ3NpemUnKSwKICAgICAgbGVmdCA9IDA7CgogICAgaWYgKCFkYXRhLm5vQ2VudGVyKSB7CiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKSB7CiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnLCBwYWdlIHx8IGRhdGEudHBhZ2UgfHwgZGF0YS5wYWdlKTsKCiAgICAgICAgaWYgKGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgewogICAgICAgICAgaWYgKCF2aWV3WzBdKQogICAgICAgICAgICBsZWZ0IC09IHNpemUud2lkdGgvNDsKICAgICAgICAgIGVsc2UgaWYgKCF2aWV3WzFdKQogICAgICAgICAgICBsZWZ0ICs9IHNpemUud2lkdGgvNDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKCF2aWV3WzBdKQogICAgICAgICAgICBsZWZ0ICs9IHNpemUud2lkdGgvNDsKICAgICAgICAgIGVsc2UgaWYgKCF2aWV3WzFdKQogICAgICAgICAgICBsZWZ0IC09IHNpemUud2lkdGgvNDsKICAgICAgICB9CiAgICAgIAogICAgICB9CgogICAgICAkKHRoaXMpLmNzcyh7bWFyZ2luTGVmdDogbGVmdH0pOwogICAgfQoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBEZXN0cm95cyB0aGUgZmxpcGJvb2sKCiAgZGVzdHJveTogZnVuY3Rpb24gKCkgewoKICAgIHZhciBwYWdlLAogICAgICBmbGlwYm9vayA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgZXZlbnRzID0gWwogICAgICAgICdlbmQnLCAnZmlyc3QnLCAnZmxpcCcsICdsYXN0JywgJ3ByZXNzZWQnLAogICAgICAgICdyZWxlYXNlZCcsICdzdGFydCcsICd0dXJuaW5nJywgJ3R1cm5lZCcsCiAgICAgICAgJ3pvb21pbmcnLCAnbWlzc2luZyddOwoKICAgIGlmICh0cmlnZ2VyKCdkZXN0cm95aW5nJywgdGhpcyk9PSdwcmV2ZW50ZWQnKQogICAgICByZXR1cm47CgogICAgZGF0YS5kZXN0cm95aW5nID0gdHJ1ZTsKCiAgICAkLmVhY2goZXZlbnRzLCBmdW5jdGlvbihpbmRleCwgZXZlbnROYW1lKSB7CiAgICAgIGZsaXBib29rLnVuYmluZChldmVudE5hbWUpOwogICAgfSk7CgogICAgdGhpcy5wYXJlbnQoKS51bmJpbmQoJ3N0YXJ0JywgZGF0YS5ldmVudEhhbmRsZXJzLnN0YXJ0KTsKCiAgICAkKGRvY3VtZW50KS51bmJpbmQobW91c2VFdmVudHMubW92ZSwgZGF0YS5ldmVudEhhbmRsZXJzLnRvdWNoTW92ZSkuCiAgICAgIHVuYmluZChtb3VzZUV2ZW50cy51cCwgZGF0YS5ldmVudEhhbmRsZXJzLnRvdWNoRW5kKTsKICAgIAogICAgd2hpbGUgKGRhdGEudG90YWxQYWdlcyE9PTApIHsKICAgICAgdGhpcy50dXJuKCdyZW1vdmVQYWdlJywgZGF0YS50b3RhbFBhZ2VzKTsKICAgIH0KCiAgICBpZiAoZGF0YS5mcGFyZW50KQogICAgICBkYXRhLmZwYXJlbnQucmVtb3ZlKCk7CgogICAgaWYgKGRhdGEuc2hhZG93KQogICAgICBkYXRhLnNoYWRvdy5yZW1vdmUoKTsKCiAgICB0aGlzLnJlbW92ZURhdGEoKTsKICAgIGRhdGEgPSBudWxsOwoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBDaGVja3MgaWYgdGhpcyBlbGVtZW50IGlzIGEgZmxpcGJvb2sKCiAgaXM6IGZ1bmN0aW9uKCkgewoKICAgIHJldHVybiB0eXBlb2YodGhpcy5kYXRhKCkucGFnZXMpPT0nb2JqZWN0JzsKCiAgfSwKCiAgLy8gU2V0cyBhbmQgZ2V0cyB0aGUgem9vbSB2YWx1ZQoKICB6b29tOiBmdW5jdGlvbihuZXdab29tKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKHR5cGVvZihuZXdab29tKT09J251bWJlcicpIHsKCiAgICAgIGlmIChuZXdab29tPDAuMDAxIHx8IG5ld1pvb20+MTAwKQogICAgICAgIHRocm93IHR1cm5FcnJvcihuZXdab29tKyAnIGlzIG5vdCBhIHZhbHVlIGZvciB6b29tJyk7CiAgICAgIAogICAgICBpZiAodHJpZ2dlcignem9vbWluZycsIHRoaXMsIFtuZXdab29tLCBkYXRhLnpvb21dKT09J3ByZXZlbnRlZCcpCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIAogICAgICB2YXIgc2l6ZSA9IHRoaXMudHVybignc2l6ZScpLAogICAgICAgIGN1cnJlbnRWaWV3ID0gdGhpcy50dXJuKCd2aWV3JyksCiAgICAgICAgaXogPSAxL2RhdGEuem9vbSwKICAgICAgICBuZXdXaWR0aCA9IE1hdGgucm91bmQoc2l6ZS53aWR0aCAqIGl6ICogbmV3Wm9vbSksCiAgICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5yb3VuZChzaXplLmhlaWdodCAqIGl6ICogbmV3Wm9vbSk7CiAgICAKICAgICAgZGF0YS56b29tID0gbmV3Wm9vbTsKCiAgICAgICQodGhpcykudHVybignc3RvcCcpLgogICAgICAgIHR1cm4oJ3NpemUnLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKICAgICAgICAvKi4KICAgICAgICBjc3Moe21hcmdpblRvcDogc2l6ZS5oZWlnaHQgKiBpeiAvIDIgLSBuZXdIZWlnaHQgLyAyfSk7Ki8KCiAgICAgIGlmIChkYXRhLm9wdHMuYXV0b0NlbnRlcikKICAgICAgICB0aGlzLnR1cm4oJ2NlbnRlcicpOwogICAgICAvKmVsc2UKICAgICAgICAkKHRoaXMpLmNzcyh7bWFyZ2luTGVmdDogc2l6ZS53aWR0aCAqIGl6IC8gMiAtIG5ld1dpZHRoIC8gMn0pOyovCgogICAgICB0dXJuTWV0aG9kcy5fdXBkYXRlU2hhZG93LmNhbGwodGhpcyk7CgogICAgICBmb3IgKHZhciBpID0gMDsgaTxjdXJyZW50Vmlldy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChjdXJyZW50Vmlld1tpXSAmJiBkYXRhLnBhZ2Vab29tW2N1cnJlbnRWaWV3W2ldXSE9ZGF0YS56b29tKSB7CiAgCiAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3pvb21lZCcsWwogICAgICAgICAgICBjdXJyZW50Vmlld1tpXSwKICAgICAgICAgICAgY3VycmVudFZpZXcsCiAgICAgICAgICAgIGRhdGEucGFnZVpvb21bY3VycmVudFZpZXdbaV1dLAogICAgICAgICAgICBkYXRhLnpvb21dKTsKCiAgICAgICAgICBkYXRhLnBhZ2Vab29tW2N1cnJlbnRWaWV3W2ldXSA9IGRhdGEuem9vbTsKICAgICAgfQogICAgfQoKICAgICAgcmV0dXJuIHRoaXM7CgogICAgfSBlbHNlCiAgICAgIHJldHVybiBkYXRhLnpvb207CgogIH0sCgogIC8vIEdldHMgdGhlIHNpemUgb2YgYSBwYWdlCgogIF9wYWdlU2l6ZTogZnVuY3Rpb24ocGFnZSwgcG9zaXRpb24pIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBwcm9wID0ge307CgogICAgaWYgKGRhdGEuZGlzcGxheT09J3NpbmdsZScpIHsKCiAgICAgIHByb3Aud2lkdGggPSB0aGlzLndpZHRoKCk7CiAgICAgIHByb3AuaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTsKCiAgICAgIGlmIChwb3NpdGlvbikgewogICAgICAgIHByb3AudG9wID0gMDsKICAgICAgICBwcm9wLmxlZnQgPSAwOwogICAgICAgIHByb3AucmlnaHQgPSAnYXV0byc7CiAgICAgIH0KCiAgICB9IGVsc2UgewoKICAgICAgdmFyIHBhZ2VXaWR0aCA9IHRoaXMud2lkdGgoKS8yLAogICAgICAgIHBhZ2VIZWlnaHQgPSB0aGlzLmhlaWdodCgpOwoKICAgICAgaWYgKGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ293bi1zaXplJykpIHsKICAgICAgICBwcm9wLndpZHRoID0gZGF0YS5wYWdlT2Jqc1twYWdlXS53aWR0aCgpOwogICAgICAgIHByb3AuaGVpZ2h0ID0gZGF0YS5wYWdlT2Jqc1twYWdlXS5oZWlnaHQoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwcm9wLndpZHRoID0gcGFnZVdpZHRoOwogICAgICAgIHByb3AuaGVpZ2h0ID0gcGFnZUhlaWdodDsKICAgICAgfQogICAgICAKICAgICAgaWYgKHBvc2l0aW9uKSB7CiAgICAgICAgdmFyIG9kZCA9IHBhZ2UlMjsKICAgICAgICBwcm9wLnRvcCA9IChwYWdlSGVpZ2h0LXByb3AuaGVpZ2h0KS8yOwoKICAgICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSB7CiAgICAgICAgICAKICAgICAgICAgIHByb3BbKG9kZCkgPyAncmlnaHQnIDogJ2xlZnQnXSA9IHBhZ2VXaWR0aC1wcm9wLndpZHRoOwogICAgICAgICAgcHJvcFsob2RkKSA/ICdsZWZ0JyA6ICdyaWdodCddID0gJ2F1dG8nOwoKICAgICAgICB9IGVsc2UgewogICAgICAgICAgCiAgICAgICAgICBwcm9wWyhvZGQpID8gJ2xlZnQnIDogJ3JpZ2h0J10gPSBwYWdlV2lkdGgtcHJvcC53aWR0aDsKICAgICAgICAgIHByb3BbKG9kZCkgPyAncmlnaHQnIDogJ2xlZnQnXSA9ICdhdXRvJzsKCiAgICAgICAgfQogICAgICAKICAgICAgfQogICAgfQoKICAgIHJldHVybiBwcm9wOwoKICB9LAoKICAvLyBQcmVwYXJlcyB0aGUgZmxpcCBlZmZlY3QgZm9yIGEgcGFnZQoKICBfbWFrZUZsaXA6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmICghZGF0YS5wYWdlc1twYWdlXSAmJiBkYXRhLnBhZ2VQbGFjZVtwYWdlXT09cGFnZSkgewogICAgICAKICAgICAgdmFyIHNpbmdsZSA9IGRhdGEuZGlzcGxheT09J3NpbmdsZScsCiAgICAgICAgb2RkID0gcGFnZSUyOwoKICAgICAgZGF0YS5wYWdlc1twYWdlXSA9IGRhdGEucGFnZU9ianNbcGFnZV0uCiAgICAgICAgY3NzKHR1cm5NZXRob2RzLl9wYWdlU2l6ZS5jYWxsKHRoaXMsIHBhZ2UpKS4KICAgICAgICBmbGlwKHsKICAgICAgICAgIHBhZ2U6IHBhZ2UsCiAgICAgICAgICBuZXh0OiAob2RkIHx8IHNpbmdsZSkgPyBwYWdlKzEgOiBwYWdlLTEsCiAgICAgICAgICB0dXJuOiB0aGlzCiAgICAgICAgfSkuCiAgICAgICAgZmxpcCgnZGlzYWJsZScsIGRhdGEuZGlzYWJsZWQpOwoKICAgICAgICAvLyBJc3N1ZSBhYm91dCB6LWluZGV4CiAgICAgICAgdHVybk1ldGhvZHMuX3NldFBhZ2VMb2MuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgICAgZGF0YS5wYWdlWm9vbVtwYWdlXSA9IGRhdGEuem9vbTsKICAgICAgICAKICAgIH0KCiAgICByZXR1cm4gZGF0YS5wYWdlc1twYWdlXTsKICB9LAoKICAvLyBNYWtlcyBwYWdlcyB3aXRoaW4gYSByYW5nZQoKICBfbWFrZVJhbmdlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgcGFnZSwgcmFuZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS50b3RhbFBhZ2VzPDEpCiAgICAgIHJldHVybjsKCiAgICByYW5nZSA9IHRoaXMudHVybigncmFuZ2UnKTsKCiAgICBmb3IgKHBhZ2UgPSByYW5nZVswXTsgcGFnZTw9cmFuZ2VbMV07IHBhZ2UrKykKICAgICAgdHVybk1ldGhvZHMuX2FkZFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKCiAgfSwKCiAgLy8gUmV0dXJucyBhIHJhbmdlIG9mIHBhZ2VzIHRoYXQgc2hvdWxkIGJlIGluIHRoZSBET00KICAvLyBFeGFtcGxlOgogIC8vIC0gcGFnZSBpbiB0aGUgY3VycmVudCB2aWV3LCByZXR1cm4gdHJ1ZQogIC8vICogcGFnZSBpcyBpbiB0aGUgcmFuZ2UsIHJldHVybiB0cnVlCiAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UKICAvLwogIC8vIDEgMi0zIDQtNSA2LTcgOC05IDEwLTExIDEyLTEzCiAgLy8gICAqKiAgKiogIC0tICAgKiogICoqCgogIHJhbmdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIHJlbWFpbmluZ1BhZ2VzLCBsZWZ0LCByaWdodCwgdmlldywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgICAgcGFnZSA9IHBhZ2UgfHwgZGF0YS50cGFnZSB8fCBkYXRhLnBhZ2UgfHwgMTsKICAgICAgdmlldyA9IHR1cm5NZXRob2RzLl92aWV3LmNhbGwodGhpcywgcGFnZSk7CgogICAgICBpZiAocGFnZTwxIHx8IHBhZ2U+ZGF0YS50b3RhbFBhZ2VzKQogICAgICAgIHRocm93IHR1cm5FcnJvcignIicrcGFnZSsnIiBpcyBub3QgYSB2YWxpZCBwYWdlJyk7CgogICAgCiAgICAgIHZpZXdbMV0gPSB2aWV3WzFdIHx8IHZpZXdbMF07CiAgICAgIAogICAgICBpZiAodmlld1swXT49MSAmJiB2aWV3WzFdPD1kYXRhLnRvdGFsUGFnZXMpIHsKCiAgICAgICAgcmVtYWluaW5nUGFnZXMgPSBNYXRoLmZsb29yKChwYWdlc0luRE9NLTIpLzIpOwoKICAgICAgICBpZiAoZGF0YS50b3RhbFBhZ2VzLXZpZXdbMV0gPiB2aWV3WzBdKSB7CiAgICAgICAgICBsZWZ0ID0gTWF0aC5taW4odmlld1swXS0xLCByZW1haW5pbmdQYWdlcyk7CiAgICAgICAgICByaWdodCA9IDIqcmVtYWluaW5nUGFnZXMtbGVmdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmlnaHQgPSBNYXRoLm1pbihkYXRhLnRvdGFsUGFnZXMtdmlld1sxXSwgcmVtYWluaW5nUGFnZXMpOwogICAgICAgICAgbGVmdCA9IDIqcmVtYWluaW5nUGFnZXMtcmlnaHQ7CiAgICAgICAgfQoKICAgICAgfSBlbHNlIHsKICAgICAgICBsZWZ0ID0gcGFnZXNJbkRPTS0xOwogICAgICAgIHJpZ2h0ID0gcGFnZXNJbkRPTS0xOwogICAgICB9CgogICAgICByZXR1cm4gW01hdGgubWF4KDEsIHZpZXdbMF0tbGVmdCksCiAgICAgICAgICBNYXRoLm1pbihkYXRhLnRvdGFsUGFnZXMsIHZpZXdbMV0rcmlnaHQpXTsKCiAgfSwKCiAgLy8gRGV0ZWN0cyBpZiBhIHBhZ2UgaXMgd2l0aGluIHRoZSByYW5nZSBvZiBgcGFnZXNJbkRPTWAgZnJvbSB0aGUgY3VycmVudCB2aWV3CgogIF9uZWNlc3NQYWdlOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIGlmIChwYWdlPT09MCkKICAgICAgcmV0dXJuIHRydWU7CgogICAgdmFyIHJhbmdlID0gdGhpcy50dXJuKCdyYW5nZScpOwoKICAgIHJldHVybiB0aGlzLmRhdGEoKS5wYWdlT2Jqc1twYWdlXS5oYXNDbGFzcygnZml4ZWQnKSB8fAogICAgICAocGFnZT49cmFuZ2VbMF0gJiYgcGFnZTw9cmFuZ2VbMV0pOwogICAgCiAgfSwKCiAgLy8gUmVsZWFzZXMgbWVtb3J5IGJ5IHJlbW92aW5nIHBhZ2VzIGZyb20gdGhlIERPTQoKICBfcmVtb3ZlRnJvbURPTTogZnVuY3Rpb24oKSB7CgogICAgdmFyIHBhZ2UsIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VXcmFwKSAmJgogICAgICAgICF0dXJuTWV0aG9kcy5fbmVjZXNzUGFnZS5jYWxsKHRoaXMsIHBhZ2UpKQogICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlUGFnZUZyb21ET00uY2FsbCh0aGlzLCBwYWdlKTsKICAgIAogIH0sCgogIC8vIFJlbW92ZXMgYSBwYWdlIGZyb20gRE9NIGFuZCBpdHMgaW50ZXJuYWwgcmVmZXJlbmNlcwoKICBfcmVtb3ZlUGFnZUZyb21ET006IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKSB7CiAgICAgIHZhciBkZCA9IGRhdGEucGFnZXNbcGFnZV0uZGF0YSgpOwoKICAgICAgZmxpcE1ldGhvZHMuX21vdmVGb2xkaW5nUGFnZS5jYWxsKGRhdGEucGFnZXNbcGFnZV0sIGZhbHNlKTsKCiAgICAgIGlmIChkZC5mICYmIGRkLmYuZndyYXBwZXIpCiAgICAgICAgZGQuZi5md3JhcHBlci5yZW1vdmUoKTsKCiAgICAgIGRhdGEucGFnZXNbcGFnZV0ucmVtb3ZlRGF0YSgpOwogICAgICBkYXRhLnBhZ2VzW3BhZ2VdLnJlbW92ZSgpOwogICAgICBkZWxldGUgZGF0YS5wYWdlc1twYWdlXTsKICAgIH0KCiAgICBpZiAoZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgZGF0YS5wYWdlT2Jqc1twYWdlXS5yZW1vdmUoKTsKCiAgICBpZiAoZGF0YS5wYWdlV3JhcFtwYWdlXSkgewogICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLnJlbW92ZSgpOwogICAgICBkZWxldGUgZGF0YS5wYWdlV3JhcFtwYWdlXTsKICAgIH0KCiAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlTXYuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICBkZWxldGUgZGF0YS5wYWdlUGxhY2VbcGFnZV07CiAgICBkZWxldGUgZGF0YS5wYWdlWm9vbVtwYWdlXTsKCiAgfSwKCiAgLy8gUmVtb3ZlcyBhIHBhZ2UKCiAgcmVtb3ZlUGFnZTogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgLy8gRGVsZXRlIGFsbCB0aGUgcGFnZXMKICAgIGlmIChwYWdlPT0nKicpIHsKICAgICAgCiAgICAgIHdoaWxlIChkYXRhLnRvdGFsUGFnZXMhPT0wKSB7CiAgICAgICAgdGhpcy50dXJuKCdyZW1vdmVQYWdlJywgZGF0YS50b3RhbFBhZ2VzKTsKICAgICAgfQoKICAgIH0gZWxzZSB7CgogICAgICBpZiAocGFnZTwxIHx8IHBhZ2U+ZGF0YS50b3RhbFBhZ2VzKQogICAgICAgIHRocm93IHR1cm5FcnJvcignVGhlIHBhZ2UgJysgcGFnZSArICcgZG9lc25cJ3QgZXhpc3QnKTsKICAgICAgICAKICAgICAgaWYgKGRhdGEucGFnZU9ianNbcGFnZV0pIHsKCiAgICAgICAgLy8gU3RvcCBhbmltYXRpb25zCiAgICAgICAgdGhpcy50dXJuKCdzdG9wJyk7CgogICAgICAgIC8vIFJlbW92ZSBgcGFnZWAKICAgICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlUGFnZUZyb21ET00uY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgICAgZGVsZXRlIGRhdGEucGFnZU9ianNbcGFnZV07CgogICAgICB9CgogICAgICAvLyBNb3ZlIHRoZSBwYWdlcwogICAgICB0dXJuTWV0aG9kcy5fbW92ZVBhZ2VzLmNhbGwodGhpcywgcGFnZSwgLTEpOwoKICAgICAgLy8gUmVzaXplIHRoZSBzaXplIG9mIHRoaXMgZmxpcGJvb2sKICAgICAgZGF0YS50b3RhbFBhZ2VzID0gZGF0YS50b3RhbFBhZ2VzLTE7CgogICAgICAvLyBDaGVjayB0aGUgY3VycmVudCB2aWV3CgogICAgICBpZiAoZGF0YS5wYWdlPmRhdGEudG90YWxQYWdlcykgewoKICAgICAgIGRhdGEucGFnZSA9IG51bGw7CiAgICAgICB0dXJuTWV0aG9kcy5fZml0UGFnZS5jYWxsKHRoaXMsIGRhdGEudG90YWxQYWdlcyk7CgogICAgICB9IGVsc2UgewoKICAgICAgICB0dXJuTWV0aG9kcy5fbWFrZVJhbmdlLmNhbGwodGhpcyk7CiAgICAgICAgdGhpcy50dXJuKCd1cGRhdGUnKTsKCiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gdGhpczsKICAKICB9LAoKICAvLyBNb3ZlcyBwYWdlcwoKICBfbW92ZVBhZ2VzOiBmdW5jdGlvbihmcm9tLCBjaGFuZ2UpIHsKCiAgICB2YXIgcGFnZSwKICAgICAgdGhhdCA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgc2luZ2xlID0gZGF0YS5kaXNwbGF5PT0nc2luZ2xlJywKICAgICAgbW92ZSA9IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICAgICAgdmFyIG5leHQgPSBwYWdlICsgY2hhbmdlLAogICAgICAgICAgb2RkID0gbmV4dCUyLAogICAgICAgICAgY2xhc3NOYW1lID0gKG9kZCkgPyAnIG9kZCAnIDogJyBldmVuICc7CgogICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW3BhZ2VdKQogICAgICAgICAgZGF0YS5wYWdlT2Jqc1tuZXh0XSA9IGRhdGEucGFnZU9ianNbcGFnZV0uCiAgICAgICAgICAgIHJlbW92ZUNsYXNzKCdwJyArIHBhZ2UgKyAnIG9kZCBldmVuJykuCiAgICAgICAgICAgIGFkZENsYXNzKCdwJyArIG5leHQgKyBjbGFzc05hbWUpOwoKICAgICAgICBpZiAoZGF0YS5wYWdlUGxhY2VbcGFnZV0gJiYgZGF0YS5wYWdlV3JhcFtwYWdlXSkgewoKICAgICAgICAgIGRhdGEucGFnZVBsYWNlW25leHRdID0gbmV4dDsKICAgICAgICAKICAgICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW25leHRdLmhhc0NsYXNzKCdmaXhlZCcpKQogICAgICAgICAgICBkYXRhLnBhZ2VXcmFwW25leHRdID0gZGF0YS5wYWdlV3JhcFtwYWdlXS4KICAgICAgICAgICAgICBhdHRyKCdwYWdlJywgbmV4dCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGRhdGEucGFnZVdyYXBbbmV4dF0gPSBkYXRhLnBhZ2VXcmFwW3BhZ2VdLgogICAgICAgICAgICAgIGNzcyh0dXJuTWV0aG9kcy5fcGFnZVNpemUuY2FsbCh0aGF0LCBuZXh0LCB0cnVlKSkuCiAgICAgICAgICAgICAgYXR0cigncGFnZScsIG5leHQpOwogICAgICAKICAgICAgICAgICAgaWYgKGRhdGEucGFnZXNbcGFnZV0pCiAgICAgICAgICAgICAgZGF0YS5wYWdlc1tuZXh0XSA9IGRhdGEucGFnZXNbcGFnZV0uCiAgICAgICAgICAgICAgICBmbGlwKCdvcHRpb25zJywgewogICAgICAgICAgICAgICAgICBwYWdlOiBuZXh0LAogICAgICAgICAgICAgICAgICBuZXh0OiAoc2luZ2xlIHx8IG9kZCkgPyBuZXh0KzEgOiBuZXh0LTEKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgaWYgKGNoYW5nZSkgewogICAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBhZ2VzW3BhZ2VdOwogICAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBhZ2VQbGFjZVtwYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlWm9vbVtwYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlT2Jqc1twYWdlXTsKICAgICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlV3JhcFtwYWdlXTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfTsKCiAgICBpZiAoY2hhbmdlPjApCiAgICAgIGZvciAocGFnZT1kYXRhLnRvdGFsUGFnZXM7IHBhZ2U+PWZyb207IHBhZ2UtLSkKICAgICAgICBtb3ZlKHBhZ2UpOwogICAgZWxzZQogICAgICBmb3IgKHBhZ2U9ZnJvbTsgcGFnZTw9ZGF0YS50b3RhbFBhZ2VzOyBwYWdlKyspCiAgICAgICAgbW92ZShwYWdlKTsKCiAgfSwKCiAgLy8gU2V0cyBvciBHZXRzIHRoZSBkaXNwbGF5IG1vZGUKCiAgZGlzcGxheTogZnVuY3Rpb24oZGlzcGxheSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIGN1cnJlbnREaXNwbGF5ID0gZGF0YS5kaXNwbGF5OwoKICAgIGlmIChkaXNwbGF5PT09dW5kZWZpbmVkKSB7CiAgICAgIAogICAgICByZXR1cm4gY3VycmVudERpc3BsYXk7CgogICAgfSBlbHNlIHsKCiAgICAgIGlmICgkLmluQXJyYXkoZGlzcGxheSwgZGlzcGxheXMpPT0tMSkKICAgICAgICB0aHJvdyB0dXJuRXJyb3IoJyInK2Rpc3BsYXkgKyAnIiBpcyBub3QgYSB2YWx1ZSBmb3IgZGlzcGxheScpOwogICAgICAKICAgICAgc3dpdGNoKGRpc3BsYXkpIHsKICAgICAgICBjYXNlICdzaW5nbGUnOgoKICAgICAgICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFsIHBhZ2UgdG8gdXNlIGFzIGZvbGRlZCBwYWdlCgogICAgICAgICAgaWYgKCFkYXRhLnBhZ2VPYmpzWzBdKSB7CiAgICAgICAgICAgIHRoaXMudHVybignc3RvcCcpLgogICAgICAgICAgICAgIGNzcyh7J292ZXJmbG93JzogJ2hpZGRlbid9KTsKCiAgICAgICAgICAgIGRhdGEucGFnZU9ianNbMF0gPSAkKCc8ZGl2IC8+JywKICAgICAgICAgICAgICAgIHsnY2xhc3MnOiAncGFnZSBwLXRlbXBvcmFsJ30pLgogICAgICAgICAgICAgIGNzcyh7d2lkdGg6IHRoaXMud2lkdGgoKSwgaGVpZ2h0OiB0aGlzLmhlaWdodCgpfSkuCiAgICAgICAgICAgICAgYXBwZW5kVG8odGhpcyk7CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5hZGRDbGFzcygnc2hhZG93Jyk7CgogICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2RvdWJsZSc6CgogICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhbCBwYWdlCgogICAgICAgICAgaWYgKGRhdGEucGFnZU9ianNbMF0pIHsKICAgICAgICAgICAgdGhpcy50dXJuKCdzdG9wJykuY3NzKHsnb3ZlcmZsb3cnOiAnJ30pOwogICAgICAgICAgICBkYXRhLnBhZ2VPYmpzWzBdLnJlbW92ZSgpOwogICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlT2Jqc1swXTsKICAgICAgICAgIH0KCiAgICAgICAgICB0aGlzLnJlbW92ZUNsYXNzKCdzaGFkb3cnKTsKCiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgCgogICAgICBkYXRhLmRpc3BsYXkgPSBkaXNwbGF5OwoKICAgICAgaWYgKGN1cnJlbnREaXNwbGF5KSB7CiAgICAgICAgdmFyIHNpemUgPSB0aGlzLnR1cm4oJ3NpemUnKTsKICAgICAgICB0dXJuTWV0aG9kcy5fbW92ZVBhZ2VzLmNhbGwodGhpcywgMSwgMCk7CiAgICAgICAgdGhpcy50dXJuKCdzaXplJywgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpLgogICAgICAgICAgdHVybigndXBkYXRlJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzOwoKICAgIH0KICAKICB9LAogIAogIC8vIEdldHMgYW5kIHNldHMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgZmxpcGJvb2sKCiAgZGlyZWN0aW9uOiBmdW5jdGlvbihkaXIpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkaXI9PT11bmRlZmluZWQpIHsKCiAgICAgIHJldHVybiBkYXRhLmRpcmVjdGlvbjsKCiAgICB9IGVsc2UgewoKICAgICAgZGlyID0gZGlyLnRvTG93ZXJDYXNlKCk7CgogICAgICBpZiAoJC5pbkFycmF5KGRpciwgZGlyZWN0aW9ucyk9PS0xKQogICAgICAgIHRocm93IHR1cm5FcnJvcignIicgKyBkaXIgKyAnIiBpcyBub3QgYSB2YWx1ZSBmb3IgZGlyZWN0aW9uJyk7CgogICAgICBpZiAoZGlyPT0ncnRsJykgewogICAgICAgICQodGhpcykuYXR0cignZGlyJywgJ2x0cicpLgogICAgICAgICAgY3NzKHtkaXJlY3Rpb246ICdsdHInfSk7CiAgICAgIH0KCiAgICAgIGRhdGEuZGlyZWN0aW9uID0gZGlyOwoKICAgICAgaWYgKGRhdGEuZG9uZSkKICAgICAgICB0aGlzLnR1cm4oJ3NpemUnLCAkKHRoaXMpLndpZHRoKCksICQodGhpcykuaGVpZ2h0KCkpOwoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogIH0sCgogIC8vIERldGVjdHMgYW5pbWF0aW9uCgogIGFuaW1hdGluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMuZGF0YSgpLnBhZ2VNdi5sZW5ndGg+MDsKCiAgfSwKCiAgLy8gR2V0cyB0aGUgY3VycmVudCBhY3RpdmF0ZWQgY29ybmVyCgogIGNvcm5lcjogZnVuY3Rpb24oKSB7CiAgICAKICAgIHZhciBjb3JuZXIsCiAgICAgIHBhZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlcykgewogICAgICBpZiAoaGFzKHBhZ2UsIGRhdGEucGFnZXMpKQogICAgICAgIGlmICgoY29ybmVyID0gZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdjb3JuZXInKSkpIHsKICAgICAgICAgIHJldHVybiBjb3JuZXI7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBmYWxzZTsKICB9LAoKICAvLyBHZXRzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgZmxpcGJvb2sKCiAgZGF0YTogZnVuY3Rpb24oKSB7CiAgICAKICAgIHJldHVybiB0aGlzLmRhdGEoKTsKCiAgfSwKCiAgLy8gRGlzYWJsZXMgYW5kIGVuYWJsZXMgdGhlIGVmZmVjdAoKICBkaXNhYmxlOiBmdW5jdGlvbihkaXNhYmxlKSB7CgogICAgdmFyIHBhZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpOwoKICAgIGRhdGEuZGlzYWJsZWQgPSBkaXNhYmxlPT09dW5kZWZpbmVkIHx8IGRpc2FibGU9PT10cnVlOwoKICAgIGZvciAocGFnZSBpbiBkYXRhLnBhZ2VzKSB7CiAgICAgIGlmIChoYXMocGFnZSwgZGF0YS5wYWdlcykpCiAgICAgICAgZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdkaXNhYmxlJywKICAgICAgICAgIChkYXRhLmRpc2FibGVkKSA/IHRydWUgOiAkLmluQXJyYXkocGFyc2VJbnQocGFnZSwgMTApLCB2aWV3KT09LTEpOwogICAgfQoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBEaXNhYmxlcyBhbmQgZW5hYmxlcyB0aGUgZWZmZWN0CgogIGRpc2FibGVkOiBmdW5jdGlvbihkaXNhYmxlKSB7CgogICAgaWYgKGRpc2FibGU9PT11bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIHRoaXMuZGF0YSgpLmRpc2FibGVkPT09dHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB0aGlzLnR1cm4oJ2Rpc2FibGUnLCBkaXNhYmxlKTsKICAgIH0KCiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgc2l6ZQoKICBzaXplOiBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7CgogICAgaWYgKHdpZHRoPT09dW5kZWZpbmVkIHx8IGhlaWdodD09PXVuZGVmaW5lZCkgewogICAgICAKICAgICAgcmV0dXJuIHt3aWR0aDogdGhpcy53aWR0aCgpLCBoZWlnaHQ6IHRoaXMuaGVpZ2h0KCl9OwoKICAgIH0gZWxzZSB7CgogICAgICB0aGlzLnR1cm4oJ3N0b3AnKTsKCiAgICAgIHZhciBwYWdlLCBwcm9wLAogICAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgICBwYWdlV2lkdGggPSAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJykgPyB3aWR0aC8yIDogd2lkdGg7CgogICAgICB0aGlzLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgaWYgKGRhdGEucGFnZU9ianNbMF0pCiAgICAgICAgZGF0YS5wYWdlT2Jqc1swXS5jc3Moe3dpZHRoOiBwYWdlV2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICAgIAogICAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkgewogICAgICAgIGlmICghaGFzKHBhZ2UsIGRhdGEucGFnZVdyYXApKSBjb250aW51ZTsKCiAgICAgICAgcHJvcCA9IHR1cm5NZXRob2RzLl9wYWdlU2l6ZS5jYWxsKHRoaXMsIHBhZ2UsIHRydWUpOwoKICAgICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdLmNzcyh7d2lkdGg6IHByb3Aud2lkdGgsIGhlaWdodDogcHJvcC5oZWlnaHR9KTsKICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcyhwcm9wKTsKICAgICAgICAKICAgICAgICBpZiAoZGF0YS5wYWdlc1twYWdlXSkKICAgICAgICAgIGRhdGEucGFnZXNbcGFnZV0uY3NzKHt3aWR0aDogcHJvcC53aWR0aCwgaGVpZ2h0OiBwcm9wLmhlaWdodH0pOwogICAgICB9CgogICAgICB0aGlzLnR1cm4oJ3Jlc2l6ZScpOwoKICAgICAgcmV0dXJuIHRoaXM7CgogICAgfQogIH0sCgogIC8vIFJlc2l6ZXMgZWFjaCBwYWdlCgogIHJlc2l6ZTogZnVuY3Rpb24oKSB7CgogICAgdmFyIHBhZ2UsIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS5wYWdlc1swXSkgewogICAgICBkYXRhLnBhZ2VXcmFwWzBdLmNzcyh7bGVmdDogLXRoaXMud2lkdGgoKX0pOwogICAgICBkYXRhLnBhZ2VzWzBdLmZsaXAoJ3Jlc2l6ZScsIHRydWUpOwogICAgfQoKICAgIGZvciAocGFnZSA9IDE7IHBhZ2UgPD0gZGF0YS50b3RhbFBhZ2VzOyBwYWdlKyspCiAgICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKQogICAgICAgIGRhdGEucGFnZXNbcGFnZV0uZmxpcCgncmVzaXplJywgdHJ1ZSk7CgogICAgdHVybk1ldGhvZHMuX3VwZGF0ZVNoYWRvdy5jYWxsKHRoaXMpOwoKICAgIGlmIChkYXRhLm9wdHMuYXV0b0NlbnRlcikKICAgICAgdGhpcy50dXJuKCdjZW50ZXInKTsKCiAgfSwKCiAgLy8gUmVtb3ZlcyBhbiBhbmltYXRpb24gZnJvbSB0aGUgY2FjaGUKCiAgX3JlbW92ZU12OiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGksIGRhdGEgPSB0aGlzLmRhdGEoKTsKICAgICAgCiAgICBmb3IgKGk9MDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykKICAgICAgaWYgKGRhdGEucGFnZU12W2ldPT1wYWdlKSB7CiAgICAgICAgZGF0YS5wYWdlTXYuc3BsaWNlKGksIDEpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CgogICAgcmV0dXJuIGZhbHNlOwoKICB9LAoKICAvLyBBZGRzIGFuIGFuaW1hdGlvbiB0byB0aGUgY2FjaGUKICAKICBfYWRkTXY6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIHR1cm5NZXRob2RzLl9yZW1vdmVNdi5jYWxsKHRoaXMsIHBhZ2UpOwogICAgZGF0YS5wYWdlTXYucHVzaChwYWdlKTsKCiAgfSwKCiAgLy8gR2V0cyBpbmRleGVzIGZvciBhIHZpZXcKCiAgX3ZpZXc6IGZ1bmN0aW9uKHBhZ2UpIHsKICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICAKICAgIHBhZ2UgPSBwYWdlIHx8IGRhdGEucGFnZTsKCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJykKICAgICAgcmV0dXJuIChwYWdlJTIpID8gW3BhZ2UtMSwgcGFnZV0gOiBbcGFnZSwgcGFnZSsxXTsKICAgIGVsc2UKICAgICAgcmV0dXJuIFtwYWdlXTsKCiAgfSwKCiAgLy8gR2V0cyBhIHZpZXcKCiAgdmlldzogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHZpZXcgPSB0dXJuTWV0aG9kcy5fdmlldy5jYWxsKHRoaXMsIHBhZ2UpOwoKICAgIGlmIChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKQogICAgICByZXR1cm4gWyh2aWV3WzBdPjApID8gdmlld1swXSA6IDAsCiAgICAgICAgKHZpZXdbMV08PWRhdGEudG90YWxQYWdlcykgPyB2aWV3WzFdIDogMF07CiAgICBlbHNlCiAgICAgIHJldHVybiBbKHZpZXdbMF0+MCAmJiB2aWV3WzBdPD1kYXRhLnRvdGFsUGFnZXMpID8gdmlld1swXSA6IDBdOwoKICB9LAoKICAvLyBTdG9wcyBhbmltYXRpb25zCgogIHN0b3A6IGZ1bmN0aW9uKGlnbm9yZSwgYW5pbWF0ZSkgewoKICAgIGlmICh0aGlzLnR1cm4oJ2FuaW1hdGluZycpKSB7CiAgCiAgICAgIHZhciBpLCBvcHRzLCBwYWdlLAogICAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICAgIGlmIChkYXRhLnRwYWdlKSB7CiAgICAgICAgZGF0YS5wYWdlID0gZGF0YS50cGFnZTsKICAgICAgICBkZWxldGUgZGF0YVsndHBhZ2UnXTsKICAgICAgfQoKICAgICAgZm9yIChpID0gMDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykgewoKICAgICAgICBpZiAoIWRhdGEucGFnZU12W2ldIHx8IGRhdGEucGFnZU12W2ldPT09aWdub3JlKQogICAgICAgICAgY29udGludWU7CgogICAgICAgIHBhZ2UgPSBkYXRhLnBhZ2VzW2RhdGEucGFnZU12W2ldXTsKICAgICAgICBvcHRzID0gcGFnZS5kYXRhKCkuZi5vcHRzOwoKICAgICAgICBwYWdlLmZsaXAoJ2hpZGVGb2xkZWRQYWdlJywgYW5pbWF0ZSk7CgogICAgICAgIGlmICghYW5pbWF0ZSkKICAgICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbChwYWdlLCBmYWxzZSk7CgogICAgICAgIGlmIChvcHRzLmZvcmNlKSB7CiAgICAgICAgICBvcHRzLm5leHQgPSAob3B0cy5wYWdlJTI9PT0wKSA/IG9wdHMucGFnZS0xIDogb3B0cy5wYWdlKzE7CiAgICAgICAgICBkZWxldGUgb3B0c1snZm9yY2UnXTsKICAgICAgICB9CgogICAgICB9CiAgICB9CiAgICAKICAgIHRoaXMudHVybigndXBkYXRlJyk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgbnVtYmVyIG9mIHBhZ2VzCgogIHBhZ2VzOiBmdW5jdGlvbihwYWdlcykgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKHBhZ2VzKSB7CgogICAgICBpZiAocGFnZXM8ZGF0YS50b3RhbFBhZ2VzKSB7CgogICAgICAgIGZvciAodmFyIHBhZ2UgPSBkYXRhLnRvdGFsUGFnZXM7IHBhZ2U+cGFnZXM7IHBhZ2UtLSkKICAgICAgICAgIHRoaXMudHVybigncmVtb3ZlUGFnZScsIHBhZ2UpOwoKICAgICAgfQoKICAgICAgICBkYXRhLnRvdGFsUGFnZXMgPSBwYWdlczsKICAgICAgICB0dXJuTWV0aG9kcy5fZml0UGFnZS5jYWxsKHRoaXMsIGRhdGEucGFnZSk7CgogICAgICByZXR1cm4gdGhpczsKCiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGRhdGEudG90YWxQYWdlczsKCiAgfSwKCiAgLy8gQ2hlY2tzIG1pc3NpbmcgcGFnZXMKCiAgX21pc3NpbmcgOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKGRhdGEudG90YWxQYWdlczwxKQogICAgICByZXR1cm47CgogICAgdmFyIHAsCiAgICAgICAgcmFuZ2UgPSB0aGlzLnR1cm4oJ3JhbmdlJywgcGFnZSksCiAgICAgICAgbWlzc2luZyA9IFtdOwoKICAgIGZvciAocCA9IHJhbmdlWzBdOyBwPD1yYW5nZVsxXTsgcCsrKSB7CiAgICAgIGlmICghZGF0YS5wYWdlT2Jqc1twXSkKICAgICAgICBtaXNzaW5nLnB1c2gocCk7CiAgICB9CgogICAgaWYgKG1pc3NpbmcubGVuZ3RoPjApCiAgICAgIHRoaXMudHJpZ2dlcignbWlzc2luZycsIFttaXNzaW5nXSk7CgogIH0sCgogIC8vIFNldHMgYSBwYWdlIHdpdGhvdXQgZWZmZWN0CgogIF9maXRQYWdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIHBhZ2UpOwoKICAgIHR1cm5NZXRob2RzLl9taXNzaW5nLmNhbGwodGhpcywgcGFnZSk7CiAgICAKICAgIGlmICghZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgcmV0dXJuOwoKICAgIGRhdGEucGFnZSA9IHBhZ2U7CiAgCiAgICB0aGlzLnR1cm4oJ3N0b3AnKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaTxuZXdWaWV3Lmxlbmd0aDsgaSsrKSB7CgogICAgICBpZiAobmV3Vmlld1tpXSAmJiBkYXRhLnBhZ2Vab29tW25ld1ZpZXdbaV1dIT1kYXRhLnpvb20pIHsKICAKICAgICAgICB0aGlzLnRyaWdnZXIoJ3pvb21lZCcsWwogICAgICAgICAgbmV3Vmlld1tpXSwKICAgICAgICAgIG5ld1ZpZXcsCiAgICAgICAgICBkYXRhLnBhZ2Vab29tW25ld1ZpZXdbaV1dLAogICAgICAgICAgZGF0YS56b29tXSk7CgogICAgICAgIGRhdGEucGFnZVpvb21bbmV3Vmlld1tpXV0gPSBkYXRhLnpvb207CgogICAgICB9CiAgICB9CgogICAgdHVybk1ldGhvZHMuX3JlbW92ZUZyb21ET00uY2FsbCh0aGlzKTsKICAgIHR1cm5NZXRob2RzLl9tYWtlUmFuZ2UuY2FsbCh0aGlzKTsKICAgIHR1cm5NZXRob2RzLl91cGRhdGVTaGFkb3cuY2FsbCh0aGlzKTsKICAgIHRoaXMudHJpZ2dlcigndHVybmVkJywgW3BhZ2UsIG5ld1ZpZXddKTsKICAgIHRoaXMudHVybigndXBkYXRlJyk7CgogICAgaWYgKGRhdGEub3B0cy5hdXRvQ2VudGVyKQogICAgICB0aGlzLnR1cm4oJ2NlbnRlcicpOwoKICB9LAogIAogIC8vIFR1cm5zIHRoZSBwYWdlCgogIF90dXJuUGFnZTogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBjdXJyZW50LAogICAgICBuZXh0LAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHBsYWNlID0gZGF0YS5wYWdlUGxhY2VbcGFnZV0sCiAgICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKSwKICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIHBhZ2UpOwoKCiAgICBpZiAoZGF0YS5wYWdlIT1wYWdlKSB7CgogICAgICB2YXIgY3VycmVudFBhZ2UgPSBkYXRhLnBhZ2U7CgogICAgICBpZiAodHJpZ2dlcigndHVybmluZycsIHRoaXMsIFtwYWdlLCBuZXdWaWV3XSk9PSdwcmV2ZW50ZWQnKSB7CgogICAgICAgIGlmIChjdXJyZW50UGFnZT09ZGF0YS5wYWdlICYmICQuaW5BcnJheShwbGFjZSwgZGF0YS5wYWdlTXYpIT0tMSkKICAgICAgICAgIGRhdGEucGFnZXNbcGxhY2VdLmZsaXAoJ2hpZGVGb2xkZWRQYWdlJywgdHJ1ZSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuOwoKICAgICAgfQoKICAgICAgaWYgKCQuaW5BcnJheSgxLCBuZXdWaWV3KSE9LTEpCiAgICAgICAgdGhpcy50cmlnZ2VyKCdmaXJzdCcpOwogICAgICBpZiAoJC5pbkFycmF5KGRhdGEudG90YWxQYWdlcywgbmV3VmlldykhPS0xKQogICAgICAgIHRoaXMudHJpZ2dlcignbGFzdCcpOwoKICAgIH0KCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nc2luZ2xlJykgewogICAgICBjdXJyZW50ID0gdmlld1swXTsKICAgICAgbmV4dCA9IG5ld1ZpZXdbMF07CiAgICB9IGVsc2UgaWYgKHZpZXdbMV0gJiYgcGFnZT52aWV3WzFdKSB7CiAgICAgIGN1cnJlbnQgPSB2aWV3WzFdOwogICAgICBuZXh0ID0gbmV3Vmlld1swXTsKICAgIH0gZWxzZSBpZiAodmlld1swXSAmJiBwYWdlPHZpZXdbMF0pIHsKICAgICAgY3VycmVudCA9IHZpZXdbMF07CiAgICAgIG5leHQgPSBuZXdWaWV3WzFdOwogICAgfQoKICAgIHZhciBvcHRzQ29ybmVycyA9IGRhdGEub3B0cy50dXJuQ29ybmVycy5zcGxpdCgnLCcpLAogICAgICBmbGlwRGF0YSA9IGRhdGEucGFnZXNbY3VycmVudF0uZGF0YSgpLmYsCiAgICAgIG9wdHMgPSBmbGlwRGF0YS5vcHRzLAogICAgICBhY3R1YWxQb2ludCA9IGZsaXBEYXRhLnBvaW50OwoKICAgIHR1cm5NZXRob2RzLl9taXNzaW5nLmNhbGwodGhpcywgcGFnZSk7CiAgICAKICAgIGlmICghZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgcmV0dXJuOwoKICAgIHRoaXMudHVybignc3RvcCcpOwoKICAgIGRhdGEucGFnZSA9IHBhZ2U7CgogICAgdHVybk1ldGhvZHMuX21ha2VSYW5nZS5jYWxsKHRoaXMpOwoKICAgIGRhdGEudHBhZ2UgPSBuZXh0OwoKICAgIGlmIChvcHRzLm5leHQhPW5leHQpIHsKICAgICAgb3B0cy5uZXh0ID0gbmV4dDsKICAgICAgb3B0cy5mb3JjZSA9IHRydWU7CiAgICB9CgogICAgdGhpcy50dXJuKCd1cGRhdGUnKTsKCiAgICBmbGlwRGF0YS5wb2ludCA9IGFjdHVhbFBvaW50OwogICAgCiAgICBpZiAoZmxpcERhdGEuZWZmZWN0PT0naGFyZCcpCiAgICAgIGlmIChkYXRhLmRpcmVjdGlvbj09J2x0cicpCiAgICAgICAgZGF0YS5wYWdlc1tjdXJyZW50XS5mbGlwKCd0dXJuUGFnZScsCiAgICAgICAgICAocGFnZT5jdXJyZW50KSA/ICdyJyA6ICdsJyk7CiAgICAgIGVsc2UKICAgICAgICBkYXRhLnBhZ2VzW2N1cnJlbnRdLmZsaXAoJ3R1cm5QYWdlJywKICAgICAgICAgIChwYWdlPmN1cnJlbnQpID8gJ2wnIDogJ3InKTsKICAgIGVsc2UgewogICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKQogICAgICAgIGRhdGEucGFnZXNbY3VycmVudF0uZmxpcCgndHVyblBhZ2UnLAogICAgICAgICAgb3B0c0Nvcm5lcnNbKHBhZ2U+Y3VycmVudCkgPyAxIDogMF0pOwogICAgICBlbHNlCiAgICAgICAgZGF0YS5wYWdlc1tjdXJyZW50XS5mbGlwKCd0dXJuUGFnZScsCiAgICAgICAgICBvcHRzQ29ybmVyc1socGFnZT5jdXJyZW50KSA/IDAgOiAxXSk7CiAgICB9CgogIH0sCgogIC8vIEdldHMgYW5kIHNldHMgYSBwYWdlCgogIHBhZ2U6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChwYWdlPT09dW5kZWZpbmVkKSB7CiAgICAgIAogICAgICByZXR1cm4gZGF0YS5wYWdlOwoKICAgIH0gZWxzZSB7CgogICAgICBpZiAoIWRhdGEuZGlzYWJsZWQgJiYgIWRhdGEuZGVzdHJveWluZykgewoKICAgICAgICBwYWdlID0gcGFyc2VJbnQocGFnZSwgMTApOwoKICAgICAgICBpZiAocGFnZT4wICYmIHBhZ2U8PWRhdGEudG90YWxQYWdlcykgewoKICAgICAgICAgIGlmIChwYWdlIT1kYXRhLnBhZ2UpIHsKICAgICAgICAgICAgaWYgKCFkYXRhLmRvbmUgfHwgJC5pbkFycmF5KHBhZ2UsIHRoaXMudHVybigndmlldycpKSE9LTEpCiAgICAgICAgICAgICAgdHVybk1ldGhvZHMuX2ZpdFBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHR1cm5NZXRob2RzLl90dXJuUGFnZS5jYWxsKHRoaXMsIHBhZ2UpOwogICAgICAgICAgfQogICAgICAKICAgICAgICAgIHJldHVybiB0aGlzOwoKICAgICAgICB9IGVsc2UgewogICAgICAgIAogICAgICAgICAgdGhyb3cgdHVybkVycm9yKCdUaGUgcGFnZSAnICsgcGFnZSArICcgZG9lcyBub3QgZXhpc3QnKTsKCiAgICAgICAgfQoKICAgICAgfQoKICAgIH0KCiAgfSwKCiAgLy8gVHVybnMgdG8gdGhlIG5leHQgdmlldwoKICBuZXh0OiBmdW5jdGlvbigpIHsKCiAgICByZXR1cm4gdGhpcy50dXJuKCdwYWdlJywgTWF0aC5taW4odGhpcy5kYXRhKCkudG90YWxQYWdlcywKICAgICAgdHVybk1ldGhvZHMuX3ZpZXcuY2FsbCh0aGlzLCB0aGlzLmRhdGEoKS5wYWdlKS5wb3AoKSArIDEpKTsKICAKICB9LAoKICAvLyBUdXJucyB0byB0aGUgcHJldmlvdXMgdmlldwoKICBwcmV2aW91czogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMudHVybigncGFnZScsIE1hdGgubWF4KDEsCiAgICAgIHR1cm5NZXRob2RzLl92aWV3LmNhbGwodGhpcywgdGhpcy5kYXRhKCkucGFnZSkuc2hpZnQoKSAtIDEpKTsKCiAgfSwKCiAgLy8gU2hvd3MgYSBwZWVsaW5nIGNvcm5lcgoKICBwZWVsOiBmdW5jdGlvbihjb3JuZXIsIGFuaW1hdGUpIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpOwoKICAgIGFuaW1hdGUgPSAoYW5pbWF0ZT09PXVuZGVmaW5lZCkgPyB0cnVlIDogYW5pbWF0ZT09PXRydWU7CgogICAgaWYgKGNvcm5lcj09PWZhbHNlKSB7CiAgICAgIAogICAgICB0aGlzLnR1cm4oJ3N0b3AnLCBudWxsLCBhbmltYXRlKTsKCiAgICB9IGVsc2UgewogICAgCiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CgogICAgICAgIGRhdGEucGFnZXNbZGF0YS5wYWdlXS5mbGlwKCdwZWVsJywgY29ybmVyLCBhbmltYXRlKTsKCiAgICAgIH0gZWxzZSB7CgogICAgICAgIHZhciBwYWdlOwoKICAgICAgICBpZiAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSB7CiAgICAgICAgICAKICAgICAgICAgIHBhZ2UgPSAoY29ybmVyLmluZGV4T2YoJ2wnKSE9LTEpID8gdmlld1swXSA6IHZpZXdbMV07CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAKICAgICAgICAgIHBhZ2UgPSAoY29ybmVyLmluZGV4T2YoJ2wnKSE9LTEpID8gdmlld1sxXSA6IHZpZXdbMF07CgogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoZGF0YS5wYWdlc1twYWdlXSkKICAgICAgICAgIGRhdGEucGFnZXNbcGFnZV0uZmxpcCgncGVlbCcsIGNvcm5lciwgYW5pbWF0ZSk7CgogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHRoaXM7CgogIH0sCgogIC8vIEFkZHMgYSBtb3Rpb24gdG8gdGhlIGludGVybmFsIGxpc3QKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2FkZE1vdGlvblBhZ2U6IGZ1bmN0aW9uKCkgewoKICAgIHZhciBvcHRzID0gJCh0aGlzKS5kYXRhKCkuZi5vcHRzLAogICAgICB0dXJuID0gb3B0cy50dXJuLAogICAgICBkZCA9IHR1cm4uZGF0YSgpOwoKICAgIHR1cm5NZXRob2RzLl9hZGRNdi5jYWxsKHR1cm4sIG9wdHMucGFnZSk7CgogIH0sCgogIC8vIFRoaXMgZXZlbnQgaXMgY2FsbGVkIGluIGNvbnRleHQgb2YgZmxpcAoKICBfZXZlbnRTdGFydDogZnVuY3Rpb24oZSwgb3B0cywgY29ybmVyKSB7CgogICAgdmFyIGRhdGEgPSBvcHRzLnR1cm4uZGF0YSgpLAogICAgICBhY3R1YWxab29tID0gZGF0YS5wYWdlWm9vbVtvcHRzLnBhZ2VdOwoKICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7CiAgICAgIHR1cm5NZXRob2RzLl91cGRhdGVTaGFkb3cuY2FsbChvcHRzLnR1cm4pOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGFjdHVhbFpvb20gJiYgYWN0dWFsWm9vbSE9ZGF0YS56b29tKSB7CiAgICAgIAogICAgICBvcHRzLnR1cm4udHJpZ2dlcignem9vbWVkJyxbCiAgICAgICAgb3B0cy5wYWdlLAogICAgICAgIG9wdHMudHVybi50dXJuKCd2aWV3Jywgb3B0cy5wYWdlKSwKICAgICAgICBhY3R1YWxab29tLAogICAgICAgIGRhdGEuem9vbV0pOwoKICAgICAgZGF0YS5wYWdlWm9vbVtvcHRzLnBhZ2VdID0gZGF0YS56b29tOwoKICAgIH0KCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nc2luZ2xlJyAmJiBjb3JuZXIpIHsKCiAgICAgIGlmICgoY29ybmVyLmNoYXJBdCgxKT09J2wnICYmIGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgfHwKICAgICAgICAoY29ybmVyLmNoYXJBdCgxKT09J3InICYmIGRhdGEuZGlyZWN0aW9uPT0ncnRsJykpCiAgICAgIHsKICAgICAgICAKICAgICAgICBvcHRzLm5leHQgPSAob3B0cy5uZXh0PG9wdHMucGFnZSkgPyBvcHRzLm5leHQgOiBvcHRzLnBhZ2UtMTsKICAgICAgICBvcHRzLmZvcmNlID0gdHJ1ZTsKCiAgICAgIH0gZWxzZSB7CiAgICAgICAgCiAgICAgICAgb3B0cy5uZXh0ID0gKG9wdHMubmV4dD5vcHRzLnBhZ2UpID8gb3B0cy5uZXh0IDogb3B0cy5wYWdlKzE7CgogICAgICB9CgogICAgfQoKICAgIHR1cm5NZXRob2RzLl9hZGRNb3Rpb25QYWdlLmNhbGwoZS50YXJnZXQpOwogICAgdHVybk1ldGhvZHMuX3VwZGF0ZVNoYWRvdy5jYWxsKG9wdHMudHVybik7CiAgfSwKCiAgLy8gVGhpcyBldmVudCBpcyBjYWxsZWQgaW4gY29udGV4dCBvZiBmbGlwCgogIF9ldmVudEVuZDogZnVuY3Rpb24oZSwgb3B0cywgdHVybmVkKSB7CiAgCiAgICB2YXIgdGhhdCA9ICQoZS50YXJnZXQpLAogICAgICBkYXRhID0gdGhhdC5kYXRhKCkuZiwKICAgICAgdHVybiA9IG9wdHMudHVybiwKICAgICAgZGQgPSB0dXJuLmRhdGEoKTsKCiAgICBpZiAodHVybmVkKSB7CgogICAgICB2YXIgdHBhZ2UgPSBkZC50cGFnZSB8fCBkZC5wYWdlOwogICAgCiAgICAgIGlmICh0cGFnZT09b3B0cy5uZXh0IHx8IHRwYWdlPT1vcHRzLnBhZ2UpIHsKICAgICAgICBkZWxldGUgZGQudHBhZ2U7CgogICAgICAgIHR1cm5NZXRob2RzLl9maXRQYWdlLmNhbGwodHVybiwgdHBhZ2UgfHwgb3B0cy5uZXh0LCB0cnVlKTsKICAgICAgfQoKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlTXYuY2FsbCh0dXJuLCBvcHRzLnBhZ2UpOwogICAgICB0dXJuTWV0aG9kcy5fdXBkYXRlU2hhZG93LmNhbGwodHVybik7CiAgICAgIHR1cm4udHVybigndXBkYXRlJyk7CgogICAgfQogICAgCiAgfSwKICAKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2V2ZW50UHJlc3NlZDogZnVuY3Rpb24oZSkgewoKICAgIHZhciBwYWdlLAogICAgICBkYXRhID0gJChlLnRhcmdldCkuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKSwKICAgICAgcGFnZXMgPSB0dXJuRGF0YS5wYWdlczsKICAgIAogICAgdHVybkRhdGEubW91c2VBY3Rpb24gPSB0cnVlOwoKICAgIHR1cm4udHVybigndXBkYXRlJyk7CgogICAgcmV0dXJuIGRhdGEudGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwoKICB9LAoKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2V2ZW50UmVsZWFzZWQ6IGZ1bmN0aW9uKGUsIHBvaW50KSB7CgogICAgdmFyIG91dEFyZWEsCiAgICAgIHBhZ2UgPSAkKGUudGFyZ2V0KSwKICAgICAgZGF0YSA9IHBhZ2UuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKTsKICAgIAogICAgaWYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CiAgICAgIG91dEFyZWEgPSAocG9pbnQuY29ybmVyPT0nYnInIHx8IHBvaW50LmNvcm5lcj09J3RyJykgPwogICAgICAgIHBvaW50Lng8cGFnZS53aWR0aCgpLzI6CiAgICAgICAgcG9pbnQueD5wYWdlLndpZHRoKCkvMjsKICAgIH0gZWxzZSB7CiAgICAgIG91dEFyZWEgPSBwb2ludC54PDAgfHwgcG9pbnQueD5wYWdlLndpZHRoKCk7CiAgICB9CgogICAgaWYgKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCktZGF0YS50aW1lPDIwMCB8fCBvdXRBcmVhKSB7CgogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHR1cm5NZXRob2RzLl90dXJuUGFnZS5jYWxsKHR1cm4sIGRhdGEub3B0cy5uZXh0KTsKCiAgICB9CgogICAgdHVybkRhdGEubW91c2VBY3Rpb24gPSBmYWxzZTsKCiAgfSwKCiAgLy8gVGhpcyBldmVudCBpcyBjYWxsZWQgaW4gY29udGV4dCBvZiBmbGlwCiAgCiAgX2ZsaXA6IGZ1bmN0aW9uKGUpIHsKCiAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwoKICAgIHZhciBvcHRzID0gJChlLnRhcmdldCkuZGF0YSgpLmYub3B0czsKCiAgICBvcHRzLnR1cm4udHJpZ2dlcigndHVybicsIFtvcHRzLm5leHRdKTsKCiAgICBpZiAob3B0cy50dXJuLmRhdGEoKS5vcHRzLmF1dG9DZW50ZXIpIHsKICAgICAgb3B0cy50dXJuLnR1cm4oJ2NlbnRlcicsIG9wdHMubmV4dCk7CiAgICB9CgogIH0sCgogLy8KICBfdG91Y2hTdGFydDogZnVuY3Rpb24oKSB7CiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwogICAgZm9yICh2YXIgcGFnZSBpbiBkYXRhLnBhZ2VzKSB7CiAgICAgIGlmIChoYXMocGFnZSwgZGF0YS5wYWdlcykgJiYKICAgICAgICBmbGlwTWV0aG9kcy5fZXZlbnRTdGFydC5hcHBseShkYXRhLnBhZ2VzW3BhZ2VdLCBhcmd1bWVudHMpPT09ZmFsc2UpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogIH0sCiAgCiAgLy8KICBfdG91Y2hNb3ZlOiBmdW5jdGlvbigpIHsKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICBmb3IgKHZhciBwYWdlIGluIGRhdGEucGFnZXMpIHsKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VzKSkgewogICAgICAgIGZsaXBNZXRob2RzLl9ldmVudE1vdmUuYXBwbHkoZGF0YS5wYWdlc1twYWdlXSwgYXJndW1lbnRzKTsKICAgICAgfQogICAgfQogIH0sCgogIC8vCiAgX3RvdWNoRW5kOiBmdW5jdGlvbigpIHsKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICBmb3IgKHZhciBwYWdlIGluIGRhdGEucGFnZXMpIHsKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VzKSkgewogICAgICAgIGZsaXBNZXRob2RzLl9ldmVudEVuZC5hcHBseShkYXRhLnBhZ2VzW3BhZ2VdLCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9CiAgfSwKCiAgLy8gQ2FsY3VsYXRlIHRoZSB6LWluZGV4IHZhbHVlIGZvciBwYWdlcyBkdXJpbmcgdGhlIGFuaW1hdGlvbgoKICBjYWxjdWxhdGVaOiBmdW5jdGlvbihtdikgewoKICAgIHZhciBpLCBwYWdlLCBuZXh0UGFnZSwgcGxhY2VQYWdlLCBkcGFnZSwKICAgICAgdGhhdCA9IHRoaXMsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpLAogICAgICBjdXJyZW50UGFnZSA9IHZpZXdbMF0gfHwgdmlld1sxXSwKICAgICAgdG90YWwgPSBtdi5sZW5ndGgtMSwKICAgICAgciA9IHtwYWdlWjoge30sIHBhcnRaOiB7fSwgcGFnZVY6IHt9fSwKCiAgICAgIGFkZFZpZXcgPSBmdW5jdGlvbihwYWdlKSB7CiAgICAgICAgdmFyIHZpZXcgPSB0aGF0LnR1cm4oJ3ZpZXcnLCBwYWdlKTsKICAgICAgICBpZiAodmlld1swXSkgci5wYWdlVlt2aWV3WzBdXSA9IHRydWU7CiAgICAgICAgaWYgKHZpZXdbMV0pIHIucGFnZVZbdmlld1sxXV0gPSB0cnVlOwogICAgICB9OwogICAgCiAgICBmb3IgKGkgPSAwOyBpPD10b3RhbDsgaSsrKSB7CiAgICAgIHBhZ2UgPSBtdltpXTsKICAgICAgbmV4dFBhZ2UgPSBkYXRhLnBhZ2VzW3BhZ2VdLmRhdGEoKS5mLm9wdHMubmV4dDsKICAgICAgcGxhY2VQYWdlID0gZGF0YS5wYWdlUGxhY2VbcGFnZV07CiAgICAgIGFkZFZpZXcocGFnZSk7CiAgICAgIGFkZFZpZXcobmV4dFBhZ2UpOwogICAgICBkcGFnZSA9IChkYXRhLnBhZ2VQbGFjZVtuZXh0UGFnZV09PW5leHRQYWdlKSA/IG5leHRQYWdlIDogcGFnZTsKICAgICAgci5wYWdlWltkcGFnZV0gPSBkYXRhLnRvdGFsUGFnZXMgLSBNYXRoLmFicyhjdXJyZW50UGFnZS1kcGFnZSk7CiAgICAgIHIucGFydFpbcGxhY2VQYWdlXSA9IGRhdGEudG90YWxQYWdlcyoyIC0gIHRvdGFsICsgaTsKICAgIH0KCiAgICByZXR1cm4gcjsKICB9LAoKICAvLyBVcGRhdGVzIHRoZSB6LWluZGV4IGFuZCBkaXNwbGF5IHByb3BlcnR5IG9mIGV2ZXJ5IHBhZ2UKCiAgdXBkYXRlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgcGFnZSwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmICh0aGlzLnR1cm4oJ2FuaW1hdGluZycpICYmIGRhdGEucGFnZU12WzBdIT09MCkgewoKICAgICAgLy8gVXBkYXRlIG1vdGlvbgoKICAgICAgdmFyIHAsIGFwYWdlLCBmaXhlZCwKICAgICAgICBwb3MgPSB0aGlzLnR1cm4oJ2NhbGN1bGF0ZVonLCBkYXRhLnBhZ2VNdiksCiAgICAgICAgY29ybmVyID0gdGhpcy50dXJuKCdjb3JuZXInKSwKICAgICAgICBhY3R1YWxWaWV3ID0gdGhpcy50dXJuKCd2aWV3JyksCiAgICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIGRhdGEudHBhZ2UpOwogIAogICAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkgewoKICAgICAgICBpZiAoIWhhcyhwYWdlLCBkYXRhLnBhZ2VXcmFwKSkKICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICBmaXhlZCA9IGRhdGEucGFnZU9ianNbcGFnZV0uaGFzQ2xhc3MoJ2ZpeGVkJyk7CgogICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKHsKICAgICAgICAgIGRpc3BsYXk6IChwb3MucGFnZVZbcGFnZV0gfHwgZml4ZWQpID8gJycgOiAnbm9uZScsCiAgICAgICAgICB6SW5kZXg6CiAgICAgICAgICAgIChkYXRhLnBhZ2VPYmpzW3BhZ2VdLmhhc0NsYXNzKCdoYXJkJykgPwogICAgICAgICAgICAgIHBvcy5wYXJ0WltwYWdlXQogICAgICAgICAgICAgIDoKICAgICAgICAgICAgICBwb3MucGFnZVpbcGFnZV0KICAgICAgICAgICAgKSB8fCAoZml4ZWQgPyAtMSA6IDApCiAgICAgICAgfSk7CgogICAgICAgIGlmICgocCA9IGRhdGEucGFnZXNbcGFnZV0pKSB7CgogICAgICAgICAgcC5mbGlwKCd6JywgcG9zLnBhcnRaW3BhZ2VdIHx8IG51bGwpOwoKICAgICAgICAgIGlmIChwb3MucGFnZVZbcGFnZV0pCiAgICAgICAgICAgIHAuZmxpcCgncmVzaXplJyk7CiAgICAgICAgICAKICAgICAgICAgIGlmIChkYXRhLnRwYWdlKSB7IC8vIElzIGl0IHR1cm5pbmcgdGhlIHBhZ2UgdG8gYHRwYWdlYD8KCiAgICAgICAgICAgIHAuZmxpcCgnaG92ZXInLCBmYWxzZSkuCiAgICAgICAgICAgICAgZmxpcCgnZGlzYWJsZScsCiAgICAgICAgICAgICAgICAkLmluQXJyYXkocGFyc2VJbnQocGFnZSwgMTApLCBkYXRhLnBhZ2VNdik9PS0xICYmCiAgICAgICAgICAgICAgICBwYWdlIT1uZXdWaWV3WzBdICYmCiAgICAgICAgICAgICAgICBwYWdlIT1uZXdWaWV3WzFdKTsKCiAgICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgcC5mbGlwKCdob3ZlcicsIGNvcm5lcj09PWZhbHNlKS4KICAgICAgICAgICAgICBmbGlwKCdkaXNhYmxlJywgcGFnZSE9YWN0dWFsVmlld1swXSAmJiBwYWdlIT1hY3R1YWxWaWV3WzFdKTsKCiAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgIH0KCiAgICB9IGVsc2UgewoKICAgICAgLy8gVXBkYXRlIHN0YXRpYyBwYWdlcwoKICAgICAgZm9yIChwYWdlIGluIGRhdGEucGFnZVdyYXApIHsKCiAgICAgICAgaWYgKCFoYXMocGFnZSwgZGF0YS5wYWdlV3JhcCkpCiAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgdmFyIHBhZ2VMb2NhdGlvbiA9IHR1cm5NZXRob2RzLl9zZXRQYWdlTG9jLmNhbGwodGhpcywgcGFnZSk7CgogICAgICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKSB7CiAgICAgICAgICBkYXRhLnBhZ2VzW3BhZ2VdLgogICAgICAgICAgICBmbGlwKCdkaXNhYmxlJywgZGF0YS5kaXNhYmxlZCB8fCBwYWdlTG9jYXRpb24hPTEpLgogICAgICAgICAgICBmbGlwKCdob3ZlcicsIHRydWUpLgogICAgICAgICAgICBmbGlwKCd6JywgbnVsbCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgLy8gVXBkYXRlcyB0aGUgcG9zaXRpb24gYW5kIHNpemUgb2YgdGhlIGZsaXBib29rJ3Mgc2hhZG93CgogIF91cGRhdGVTaGFkb3c6IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgdmlldywgdmlldzIsIHNoYWRvdywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKSwKICAgICAgcGFnZVdpZHRoID0gKGRhdGEuZGlzcGxheT09J3NpbmdsZScpID8gd2lkdGggOiB3aWR0aC8yOwoKICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKTsKCiAgICBpZiAoIWRhdGEuc2hhZG93KSB7CiAgICAgIGRhdGEuc2hhZG93ID0gJCgnPGRpdiAvPicsIHsKICAgICAgICAgICdjbGFzcyc6ICdzaGFkb3cnLAogICAgICAgICAgJ2Nzcyc6IGRpdkF0dCgwLCAwLCAwKS5jc3MKICAgICAgICB9KS4KICAgICAgICBhcHBlbmRUbyh0aGlzKTsKICAgIH0KCiAgICBmb3IgKHZhciBpID0gMDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykgewogICAgICBpZiAoIXZpZXdbMF0gfHwgIXZpZXdbMV0pCiAgICAgICAgYnJlYWs7CiAgICAKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycsIGRhdGEucGFnZXNbZGF0YS5wYWdlTXZbaV1dLmRhdGEoKS5mLm9wdHMubmV4dCk7CiAgICAgIHZpZXcyID0gdGhpcy50dXJuKCd2aWV3JywgZGF0YS5wYWdlTXZbaV0pOwoKICAgICAgdmlld1swXSA9IHZpZXdbMF0gJiYgdmlldzJbMF07CiAgICAgIHZpZXdbMV0gPSB2aWV3WzFdICYmIHZpZXcyWzFdOwogICAgfQoKICAgIGlmICghdmlld1swXSkgc2hhZG93ID0gKGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPyAxIDogMjsKICAgIGVsc2UgaWYgKCF2aWV3WzFdKSBzaGFkb3cgPSAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSA/IDIgOiAxOwogICAgZWxzZSBzaGFkb3cgPSAzOwoKICAgIHN3aXRjaCAoc2hhZG93KSB7CiAgICAgIGNhc2UgMToKICAgICAgICBkYXRhLnNoYWRvdy5jc3MoewogICAgICAgICAgd2lkdGg6IHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogcGFnZVdpZHRoCiAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjoKICAgICAgICBkYXRhLnNoYWRvdy5jc3MoewogICAgICAgICAgd2lkdGg6IHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogMAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDM6CiAgICAgICAgZGF0YS5zaGFkb3cuY3NzKHsKICAgICAgICAgIHdpZHRoOiB3aWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogMAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgfQoKICB9LAoKICAvLyBTZXRzIHRoZSB6LWluZGV4IGFuZCBkaXNwbGF5IHByb3BlcnR5IG9mIGEgcGFnZQogIC8vIEl0IGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgdmlldwoKICBfc2V0UGFnZUxvYzogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKSwKICAgICAgbG9jID0gMDsKCiAgICAKICAgIGlmIChwYWdlPT12aWV3WzBdIHx8IHBhZ2U9PXZpZXdbMV0pCiAgICAgIGxvYyA9IDE7CiAgICBlbHNlIGlmICgKICAgICAgKGRhdGEuZGlzcGxheT09J3NpbmdsZScgJiYgcGFnZT09dmlld1swXSsxKSB8fAogICAgICAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJyAmJiBwYWdlPT12aWV3WzBdLTIgfHwgcGFnZT09dmlld1sxXSsyKQogICAgKQogICAgICBsb2MgPSAyOwoKICAgIGlmICghdGhpcy50dXJuKCdhbmltYXRpbmcnKSkKICAgICAgc3dpdGNoIChsb2MpIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcygKICAgICAgICAgIHsKICAgICAgICAgICAgekluZGV4OiBkYXRhLnRvdGFsUGFnZXMsCiAgICAgICAgICAgIGRpc3BsYXk6ICcnCiAgICAgICAgICB9KTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcygKICAgICAgICAgIHsKICAgICAgICAgICAgekluZGV4OiBkYXRhLnRvdGFsUGFnZXMtMSwKICAgICAgICAgICAgZGlzcGxheTogJycKICAgICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMDoKICAgICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKAogICAgICAgICAgewogICAgICAgICAgICB6SW5kZXg6IDAsCiAgICAgICAgICAgIGRpc3BsYXk6IChkYXRhLnBhZ2VPYmpzW3BhZ2VdLmhhc0NsYXNzKCdmaXhlZCcpKSA/ICcnIDogJ25vbmUnfQogICAgICAgICAgKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgCiAgICByZXR1cm4gbG9jOwogIH0sCgogIC8vIEdldHMgYW5kIHNldHMgdGhlIG9wdGlvbnMKCiAgb3B0aW9uczogZnVuY3Rpb24ob3B0aW9ucykgewogICAgCiAgICBpZiAob3B0aW9ucz09PXVuZGVmaW5lZCkgewogICAgICAKICAgICAgcmV0dXJuIHRoaXMuZGF0YSgpLm9wdHM7CgogICAgfSBlbHNlIHsKCiAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgICAvLyBTZXQgbmV3IHZhbHVlcwoKICAgICAgJC5leHRlbmQoZGF0YS5vcHRzLCBvcHRpb25zKTsKICAgICAgCiAgICAgIC8vIFNldCBwYWdlcwoKICAgICAgaWYgKG9wdGlvbnMucGFnZXMpCiAgICAgICAgdGhpcy50dXJuKCdwYWdlcycsIG9wdGlvbnMucGFnZXMpOwoKICAgICAgLy8gU2V0IHBhZ2UKCiAgICAgIGlmIChvcHRpb25zLnBhZ2UpCiAgICAgICAgdGhpcy50dXJuKCdwYWdlJywgb3B0aW9ucy5wYWdlKTsKCiAgICAgIC8vIFNldCBkaXNwbGF5CgogICAgICBpZiAob3B0aW9ucy5kaXNwbGF5KQogICAgICAgIHRoaXMudHVybignZGlzcGxheScsIG9wdGlvbnMuZGlzcGxheSk7CiAgICAgIAogICAgICAvLyBTZXQgZGlyZWN0aW9uCgogICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24pCiAgICAgICAgdGhpcy50dXJuKCdkaXJlY3Rpb24nLCBvcHRpb25zLmRpcmVjdGlvbik7CgogICAgICAvLyBTZXQgc2l6ZQoKICAgICAgaWYgKG9wdGlvbnMud2lkdGggJiYgb3B0aW9ucy5oZWlnaHQpCiAgICAgICAgdGhpcy50dXJuKCdzaXplJywgb3B0aW9ucy53aWR0aCwgb3B0aW9ucy5oZWlnaHQpOwogICAgICAKICAgICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVycwoKICAgICAgaWYgKG9wdGlvbnMud2hlbikKICAgICAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gb3B0aW9ucy53aGVuKQogICAgICAgICAgaWYgKGhhcyhldmVudE5hbWUsIG9wdGlvbnMud2hlbikpIHsKICAgICAgICAgICAgdGhpcy51bmJpbmQoZXZlbnROYW1lKS4KICAgICAgICAgICAgICBiaW5kKGV2ZW50TmFtZSwgb3B0aW9ucy53aGVuW2V2ZW50TmFtZV0pOwogICAgICAgICAgfQoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogIH0sCgogIC8vIEdldHMgdGhlIGN1cnJlbnQgdmVyc2lvbgoKICB2ZXJzaW9uOiBmdW5jdGlvbigpIHsKCiAgICByZXR1cm4gdmVyc2lvbjsKCiAgfQp9LAoKLy8gTWV0aG9kcyBhbmQgcHJvcGVydGllcyBmb3IgdGhlIGZsaXAgcGFnZSBlZmZlY3QKCmZsaXBNZXRob2RzID0gewoKICAvLyBDb25zdHJ1Y3RvcgoKICBpbml0OiBmdW5jdGlvbihvcHRzKSB7CgogICAgdGhpcy5kYXRhKHtmOiB7CiAgICAgIGRpc2FibGVkOiBmYWxzZSwKICAgICAgaG92ZXI6IGZhbHNlLAogICAgICBlZmZlY3Q6ICh0aGlzLmhhc0NsYXNzKCdoYXJkJykpID8gJ2hhcmQnIDogJ3NoZWV0JwogICAgfX0pOwogIAogICAgdGhpcy5mbGlwKCdvcHRpb25zJywgb3B0cyk7CgogICAgZmxpcE1ldGhvZHMuX2FkZFBhZ2VXcmFwcGVyLmNhbGwodGhpcyk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgc2V0RGF0YTogZnVuY3Rpb24oZCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGRhdGEuZiA9ICQuZXh0ZW5kKGRhdGEuZiwgZCk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgb3B0aW9uczogZnVuY3Rpb24ob3B0cykgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKG9wdHMpIHsKICAgICAgZmxpcE1ldGhvZHMuc2V0RGF0YS5jYWxsKHRoaXMsCiAgICAgICAge29wdHM6ICQuZXh0ZW5kKHt9LCBkYXRhLm9wdHMgfHwgZmxpcE9wdGlvbnMsIG9wdHMpfSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlCiAgICAgIHJldHVybiBkYXRhLm9wdHM7CgogIH0sCgogIHo6IGZ1bmN0aW9uKHopIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mOwoKICAgIGRhdGEub3B0c1snei1pbmRleCddID0gejsKCiAgICBpZiAoZGF0YS5md3JhcHBlcikKICAgICAgZGF0YS5md3JhcHBlci5jc3MoewogICAgICAgIHpJbmRleDogeiB8fCBwYXJzZUludChkYXRhLnBhcmVudC5jc3MoJ3otaW5kZXgnKSwgMTApIHx8IDAKICAgICAgfSk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgX2NBbGxvd2VkOiBmdW5jdGlvbigpIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICBwYWdlID0gZGF0YS5vcHRzLnBhZ2UsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICBvZGQgPSBwYWdlJTI7CiAgICAKICAgIGlmIChkYXRhLmVmZmVjdD09J2hhcmQnKSB7CiAgICAKICAgICAgcmV0dXJuICh0dXJuRGF0YS5kaXJlY3Rpb249PSdsdHInKSA/CiAgICAgICAgWyhvZGQpID8gJ3InIDogJ2wnXSA6CiAgICAgICAgWyhvZGQpID8gJ2wnIDogJ3InXTsKCiAgICB9IGVsc2UgewoKICAgICAgaWYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CgogICAgICAgIGlmIChwYWdlPT0xKQogICAgICAgICAgcmV0dXJuICh0dXJuRGF0YS5kaXJlY3Rpb249PSdsdHInKSA/CiAgICAgICAgICAgIGNvcm5lcnNbJ2ZvcndhcmQnXSA6IGNvcm5lcnNbJ2JhY2t3YXJkJ107CiAgICAgICAgZWxzZSBpZiAocGFnZT09dHVybkRhdGEudG90YWxQYWdlcykKICAgICAgICAgIHJldHVybiAodHVybkRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPwogICAgICAgICAgICBjb3JuZXJzWydiYWNrd2FyZCddIDogY29ybmVyc1snZm9yd2FyZCddOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBjb3JuZXJzWydhbGwnXTsKCiAgICAgIH0gZWxzZSB7CgogICAgICAgIHJldHVybiAodHVybkRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPwogICAgICAgICAgY29ybmVyc1sob2RkKSA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCddCiAgICAgICAgICA6CiAgICAgICAgICBjb3JuZXJzWyhvZGQpID8gJ2JhY2t3YXJkJyA6ICdmb3J3YXJkJ107CgogICAgICB9CgogICAgfQoKICB9LAoKICBfY29ybmVyQWN0aXZhdGVkOiBmdW5jdGlvbihwKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKSwKICAgICAgcG9pbnQgPSB7eDogcC54LCB5OiBwLnksIGNvcm5lcjogJyd9LAogICAgICBjc3ogPSBkYXRhLm9wdHMuY29ybmVyU2l6ZTsKCiAgICBpZiAocG9pbnQueDw9MCB8fCBwb2ludC55PD0wIHx8IHBvaW50Lng+PXdpZHRoIHx8IHBvaW50Lnk+PWhlaWdodCkKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIHZhciBhbGxvd2VkQ29ybmVycyA9IGZsaXBNZXRob2RzLl9jQWxsb3dlZC5jYWxsKHRoaXMpOwoKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKICAgICAgY2FzZSAnaGFyZCc6CiAgICAgICAgCiAgICAgICAgaWYgKHBvaW50Lng+d2lkdGgtY3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyID0gJ3InOwogICAgICAgIGVsc2UgaWYgKHBvaW50Lng8Y3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyID0gJ2wnOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgCiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlICdzaGVldCc6CiAgICAgICAgCiAgICAgICAgaWYgKHBvaW50Lnk8Y3N6KQogICAgICAgICAgcG9pbnQuY29ybmVyKz0gJ3QnOwogICAgICAgIGVsc2UgaWYgKHBvaW50Lnk+PWhlaWdodC1jc3opCiAgICAgICAgICBwb2ludC5jb3JuZXIrPSAnYic7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgCiAgICAgICAgaWYgKHBvaW50Lng8PWNzeikKICAgICAgICAgIHBvaW50LmNvcm5lcis9ICdsJzsKICAgICAgICBlbHNlIGlmIChwb2ludC54Pj13aWR0aC1jc3opCiAgICAgICAgICBwb2ludC5jb3JuZXIrPSAncic7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgICAgIGJyZWFrOwogICAgICB9CgogICAgcmV0dXJuICghcG9pbnQuY29ybmVyIHx8ICQuaW5BcnJheShwb2ludC5jb3JuZXIsIGFsbG93ZWRDb3JuZXJzKT09LTEpID8KICAgICAgZmFsc2UgOiBwb2ludDsKCiAgfSwKCiAgX2lzSUFyZWE6IGZ1bmN0aW9uKGUpIHsKCiAgICB2YXIgcG9zID0gdGhpcy5kYXRhKCkuZi5wYXJlbnQub2Zmc2V0KCk7CgogICAgZSA9IChpc1RvdWNoICYmIGUub3JpZ2luYWxFdmVudCkgPyBlLm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXSA6IGU7CgogICAgcmV0dXJuIGZsaXBNZXRob2RzLl9jb3JuZXJBY3RpdmF0ZWQuY2FsbCh0aGlzLAogICAgICB7CiAgICAgICAgeDogZS5wYWdlWC1wb3MubGVmdCwKICAgICAgICB5OiBlLnBhZ2VZLXBvcy50b3AKICAgICAgfSk7CgogIH0sCgogIF9jOiBmdW5jdGlvbihjb3JuZXIsIG9wdHMpIHsKCiAgICBvcHRzID0gb3B0cyB8fCAwOwoKICAgIHN3aXRjaCAoY29ybmVyKSB7CiAgICAgIGNhc2UgJ3RsJzoKICAgICAgICByZXR1cm4gcG9pbnQyRChvcHRzLCBvcHRzKTsKICAgICAgY2FzZSAndHInOgogICAgICAgIHJldHVybiBwb2ludDJEKHRoaXMud2lkdGgoKS1vcHRzLCBvcHRzKTsKICAgICAgY2FzZSAnYmwnOgogICAgICAgIHJldHVybiBwb2ludDJEKG9wdHMsIHRoaXMuaGVpZ2h0KCktb3B0cyk7CiAgICAgIGNhc2UgJ2JyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCh0aGlzLndpZHRoKCktb3B0cywgdGhpcy5oZWlnaHQoKS1vcHRzKTsKICAgICAgY2FzZSAnbCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQob3B0cywgMCk7CiAgICAgIGNhc2UgJ3InOgogICAgICAgIHJldHVybiBwb2ludDJEKHRoaXMud2lkdGgoKS1vcHRzLCAwKTsKICAgIH0KCiAgfSwKCiAgX2MyOiBmdW5jdGlvbihjb3JuZXIpIHsKCiAgICBzd2l0Y2ggKGNvcm5lcikgewogICAgICBjYXNlICd0bCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQodGhpcy53aWR0aCgpKjIsIDApOwogICAgICBjYXNlICd0cic6CiAgICAgICAgcmV0dXJuIHBvaW50MkQoLXRoaXMud2lkdGgoKSwgMCk7CiAgICAgIGNhc2UgJ2JsJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCh0aGlzLndpZHRoKCkqMiwgdGhpcy5oZWlnaHQoKSk7CiAgICAgIGNhc2UgJ2JyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCgtdGhpcy53aWR0aCgpLCB0aGlzLmhlaWdodCgpKTsKICAgICAgY2FzZSAnbCc6CiAgICAgICAgcmV0dXJuIHBvaW50MkQodGhpcy53aWR0aCgpKjIsIDApOwogICAgICBjYXNlICdyJzoKICAgICAgICByZXR1cm4gcG9pbnQyRCgtdGhpcy53aWR0aCgpLCAwKTsKICAgIH0KCiAgfSwKCiAgX2ZvbGRpbmdQYWdlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhKQogICAgICByZXR1cm47CgogICAgdmFyIG9wdHMgPSBkYXRhLm9wdHM7CgogICAgaWYgKG9wdHMudHVybikgewogICAgICBkYXRhID0gb3B0cy50dXJuLmRhdGEoKTsKICAgICAgaWYgKGRhdGEuZGlzcGxheSA9PSAnc2luZ2xlJykKICAgICAgICByZXR1cm4gKG9wdHMubmV4dD4xIHx8IG9wdHMucGFnZT4xKSA/IGRhdGEucGFnZU9ianNbMF0gOiBudWxsOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIGRhdGEucGFnZU9ianNbb3B0cy5uZXh0XTsKICAgIH0KCiAgfSwKCiAgX2JhY2tHcmFkaWVudDogZnVuY3Rpb24oKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICB0dXJuRGF0YSA9IGRhdGEub3B0cy50dXJuLmRhdGEoKSwKICAgICAgZ3JhZGllbnQgPSAgdHVybkRhdGEub3B0cy5ncmFkaWVudHMgJiYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnIHx8CiAgICAgICAgIChkYXRhLm9wdHMucGFnZSE9MiAmJiBkYXRhLm9wdHMucGFnZSE9dHVybkRhdGEudG90YWxQYWdlcy0xKSk7CgogICAgaWYgKGdyYWRpZW50ICYmICFkYXRhLmJzaGFkb3cpCiAgICAgIGRhdGEuYnNoYWRvdyA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAxKSkuCiAgICAgICAgY3NzKHsncG9zaXRpb24nOiAnJywgd2lkdGg6IHRoaXMud2lkdGgoKSwgaGVpZ2h0OiB0aGlzLmhlaWdodCgpfSkuCiAgICAgICAgYXBwZW5kVG8oZGF0YS5wYXJlbnQpOwoKICAgIHJldHVybiBncmFkaWVudDsKCiAgfSwKCiAgdHlwZTogZnVuY3Rpb24gKCkgewogICAgCiAgICByZXR1cm4gdGhpcy5kYXRhKCkuZi5lZmZlY3Q7CgogIH0sCgogIHJlc2l6ZTogZnVuY3Rpb24oZnVsbCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTsKCiAgICBzd2l0Y2ggKGRhdGEuZWZmZWN0KSB7CiAgICAgIGNhc2UgJ2hhcmQnOgogICAgICAgIAogICAgICBpZiAoZnVsbCkgewogICAgICAgIGRhdGEud3JhcHBlci5jc3Moe3dpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHR9KTsKICAgICAgICBkYXRhLmZwYWdlLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5hc2hhZG93LmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgICAgZGF0YS5ic2hhZG93LmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ3NoZWV0JzoKCiAgICAgIGlmIChmdWxsKSB7CiAgICAgICAgdmFyIHNpemUgPSBNYXRoLnJvdW5kKE1hdGguc3FydChNYXRoLnBvdyh3aWR0aCwgMikrTWF0aC5wb3coaGVpZ2h0LCAyKSkpOwoKICAgICAgICBkYXRhLndyYXBwZXIuY3NzKHt3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfSk7CiAgICAgICAgZGF0YS5md3JhcHBlci5jc3Moe3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9KS4KICAgICAgICAgIGNoaWxkcmVuKCc6Zmlyc3QtY2hpbGQnKS4KICAgICAgICAgIGNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgICBkYXRhLmZwYWdlLmNzcyh7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pOwoKICAgICAgICBpZiAodHVybkRhdGEub3B0cy5ncmFkaWVudHMpCiAgICAgICAgICBkYXRhLmFzaGFkb3cuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CgogICAgICAgIGlmIChmbGlwTWV0aG9kcy5fYmFja0dyYWRpZW50LmNhbGwodGhpcykpCiAgICAgICAgICBkYXRhLmJzaGFkb3cuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICAgIH0KCiAgICAgIGlmIChkYXRhLnBhcmVudC5pcygnOnZpc2libGUnKSkgewogICAgICAgIHZhciBvZmZzZXQgPSBmaW5kUG9zKGRhdGEucGFyZW50WzBdKTsKCiAgICAgICAgZGF0YS5md3JhcHBlci5jc3Moe3RvcDogb2Zmc2V0LnRvcCwKICAgICAgICAgIGxlZnQ6IG9mZnNldC5sZWZ0fSk7CgogICAgICAgIC8vaWYgKGRhdGEub3B0cy50dXJuKSB7CiAgICAgICAgIG9mZnNldCA9IGZpbmRQb3MoZGF0YS5vcHRzLnR1cm5bMF0pOwogICAgICAgICBkYXRhLmZwYXJlbnQuY3NzKHt0b3A6IC1vZmZzZXQudG9wLCBsZWZ0OiAtb2Zmc2V0LmxlZnR9KTsKICAgICAgICAvL30KICAgICAgfQoKICAgICAgdGhpcy5mbGlwKCd6JywgZGF0YS5vcHRzWyd6LWluZGV4J10pOwoKICAgICAgYnJlYWs7CiAgICB9CgogIH0sCgogIC8vIFByZXBhcmVzIHRoZSBwYWdlIGJ5IGFkZGluZyBhIGdlbmVyYWwgd3JhcHBlciBhbmQgYW5vdGhlciBvYmplY3RzCgogIF9hZGRQYWdlV3JhcHBlcjogZnVuY3Rpb24oKSB7CgogICAgdmFyIGF0dCwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHR1cm5EYXRhID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLAogICAgICBwYXJlbnQgPSB0aGlzLnBhcmVudCgpOwoKICAgIGRhdGEucGFyZW50ID0gcGFyZW50OwoKICBpZiAoIWRhdGEud3JhcHBlcikKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKICAgICAgY2FzZSAnaGFyZCc6CiAgICAgICAgCiAgICAgICAgdmFyIGNzc1Byb3BlcnRpZXMgPSB7fTsKICAgICAgICBjc3NQcm9wZXJ0aWVzW3ZlbmRvciArICd0cmFuc2Zvcm0tc3R5bGUnXSA9ICdwcmVzZXJ2ZS0zZCc7CiAgICAgICAgY3NzUHJvcGVydGllc1t2ZW5kb3IgKyAnYmFja2ZhY2UtdmlzaWJpbGl0eSddID0gJ2hpZGRlbic7CgogICAgICAgIGRhdGEud3JhcHBlciA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAyKSkuCiAgICAgICAgICBjc3MoY3NzUHJvcGVydGllcykuCiAgICAgICAgICBhcHBlbmRUbyhwYXJlbnQpLgogICAgICAgICAgcHJlcGVuZCh0aGlzKTsKCiAgICAgICAgZGF0YS5mcGFnZSA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAxKSkuCiAgICAgICAgICBjc3MoY3NzUHJvcGVydGllcykuCiAgICAgICAgICBhcHBlbmRUbyhwYXJlbnQpOwogICAgICAgIAogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5hc2hhZG93ID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsICAwKSkuCiAgICAgICAgICAgIGhpZGUoKS4KICAgICAgICAgICAgYXBwZW5kVG8ocGFyZW50KTsKCiAgICAgICAgICBkYXRhLmJzaGFkb3cgPSAkKCc8ZGl2Lz4nLCBkaXZBdHQoMCwgMCwgIDApKTsKICAgICAgICB9CgogICAgICBicmVhazsKICAgICAgY2FzZSAnc2hlZXQnOgogICAgICAgIAogICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgoKSwKICAgICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0KCksCiAgICAgICAgICBzaXplID0gTWF0aC5yb3VuZChNYXRoLnNxcnQoTWF0aC5wb3cod2lkdGgsIDIpK01hdGgucG93KGhlaWdodCwgMikpKTsKICAgICAgICAKICAgICAgICBkYXRhLmZwYXJlbnQgPSBkYXRhLm9wdHMudHVybi5kYXRhKCkuZnBhcmVudDsKCiAgICAgICAgaWYgKCFkYXRhLmZwYXJlbnQpIHsKICAgICAgICAgIHZhciBmcGFyZW50ID0gJCgnPGRpdi8+Jywge2Nzczogeydwb2ludGVyLWV2ZW50cyc6ICdub25lJ319KS5oaWRlKCk7CiAgICAgICAgICAgIGZwYXJlbnQuZGF0YSgpLmZsaXBzID0gMDsKICAgICAgICAgICAgZnBhcmVudC5jc3MoZGl2QXR0KDAsIDAsICdhdXRvJywgJ3Zpc2libGUnKS5jc3MpLgogICAgICAgICAgICBhcHBlbmRUbyhkYXRhLm9wdHMudHVybik7CiAgICAgICAgICAgIAogICAgICAgICAgICBkYXRhLm9wdHMudHVybi5kYXRhKCkuZnBhcmVudCA9IGZwYXJlbnQ7CiAgICAgICAgICAgIGRhdGEuZnBhcmVudCA9IGZwYXJlbnQ7CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNzcyh7cG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogMCwgbGVmdDogMCwgYm90dG9tOiAnYXV0bycsIHJpZ2h0OiAnYXV0byd9KTsKCiAgICAgICAgZGF0YS53cmFwcGVyID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsIHRoaXMuY3NzKCd6LWluZGV4JykpKS4KICAgICAgICAgIGFwcGVuZFRvKHBhcmVudCkuCiAgICAgICAgICBwcmVwZW5kKHRoaXMpOwoKICAgICAgICBkYXRhLmZ3cmFwcGVyID0gJCgnPGRpdi8+JywgZGl2QXR0KHBhcmVudC5vZmZzZXQoKS50b3AsIHBhcmVudC5vZmZzZXQoKS5sZWZ0KSkuCiAgICAgICAgICBoaWRlKCkuCiAgICAgICAgICBhcHBlbmRUbyhkYXRhLmZwYXJlbnQpOwoKICAgICAgICBkYXRhLmZwYWdlID0gJCgnPGRpdi8+JywgZGl2QXR0KDAsIDAsIDAsICd2aXNpYmxlJykpLgogICAgICAgICAgY3NzKHtjdXJzb3I6ICdkZWZhdWx0J30pLgogICAgICAgICAgYXBwZW5kVG8oZGF0YS5md3JhcHBlcik7CgogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykKICAgICAgICAgIGRhdGEuYXNoYWRvdyA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAgMSkpLgogICAgICAgICAgYXBwZW5kVG8oZGF0YS5mcGFnZSk7CgogICAgICAgIGZsaXBNZXRob2RzLnNldERhdGEuY2FsbCh0aGlzLCBkYXRhKTsKCiAgICAgIGJyZWFrOwogICAgfQoKICAgIC8vIFNldCBzaXplCiAgICBmbGlwTWV0aG9kcy5yZXNpemUuY2FsbCh0aGlzLCB0cnVlKTsKCiAgfSwKCiAgLy8gVGFrZXMgYSAyUCBwb2ludCBmcm9tIHRoZSBzY3JlZW4gYW5kIGFwcGxpZXMgdGhlIHRyYW5zZm9ybWF0aW9uCgogIF9mb2xkOiBmdW5jdGlvbihwb2ludCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCksCiAgICAgIG8gPSBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsIHBvaW50LmNvcm5lciksCiAgICAgIHdpZHRoID0gdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodCgpOwoKICAgIHN3aXRjaCAoZGF0YS5lZmZlY3QpIHsKCiAgICAgIGNhc2UgJ2hhcmQnOgoKICAgICAgICBpZiAocG9pbnQuY29ybmVyPT0nbCcpCiAgICAgICAgICBwb2ludC54ID0gTWF0aC5taW4oTWF0aC5tYXgocG9pbnQueCwgMCksIHdpZHRoKjIpOwogICAgICAgIGVsc2UKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1heChNYXRoLm1pbihwb2ludC54LCB3aWR0aCksIC13aWR0aCk7CgogICAgICAgIHZhciBsZWZ0UG9zLAogICAgICAgICAgc2hhZG93LAogICAgICAgICAgZ3JhZGllbnRYLAogICAgICAgICAgZnBhZ2VPcmlnaW4sCiAgICAgICAgICBwYXJlbnRPcmlnaW4sCiAgICAgICAgICB0b3RhbFBhZ2VzID0gdHVybkRhdGEudG90YWxQYWdlcywKICAgICAgICAgIHpJbmRleCA9IGRhdGEub3B0c1snei1pbmRleCddIHx8IHRvdGFsUGFnZXMsCiAgICAgICAgICBwYXJlbnRDc3MgPSB7J292ZXJmbG93JzogJ3Zpc2libGUnfSwKICAgICAgICAgIHJlbFggPSAoby54KSA/IChvLnggLSBwb2ludC54KS93aWR0aCA6IHBvaW50Lngvd2lkdGgsCiAgICAgICAgICBhbmdsZSA9IHJlbFggKiA5MCwKICAgICAgICAgIGhhbGYgPSBhbmdsZTw5MDsKCiAgICAgICAgc3dpdGNoIChwb2ludC5jb3JuZXIpIHsKICAgICAgICAgIGNhc2UgJ2wnOgoKICAgICAgICAgICAgZnBhZ2VPcmlnaW4gPSAgJzAlIDUwJSc7CiAgICAgICAgICAgIHBhcmVudE9yaWdpbiA9ICAnMTAwJSA1MCUnOwoKICAgICAgICAgICAgaWYgKGhhbGYpIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gMDsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMubmV4dC0xPjA7CiAgICAgICAgICAgICAgZ3JhZGllbnRYID0gMTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gJzEwMCUnOwogICAgICAgICAgICAgIHNoYWRvdyA9IGRhdGEub3B0cy5wYWdlKzE8dG90YWxQYWdlczsKICAgICAgICAgICAgICBncmFkaWVudFggPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICdyJzoKCiAgICAgICAgICAgIGZwYWdlT3JpZ2luID0gICcxMDAlIDUwJSc7CiAgICAgICAgICAgIHBhcmVudE9yaWdpbiA9ICAnMCUgNTAlJzsKICAgICAgICAgICAgYW5nbGUgPSAtYW5nbGU7CiAgICAgICAgICAgIHdpZHRoID0gLXdpZHRoOwoKICAgICAgICAgICAgaWYgKGhhbGYpIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gMDsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMubmV4dCsxPHRvdGFsUGFnZXM7CiAgICAgICAgICAgICAgZ3JhZGllbnRYID0gMDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsZWZ0UG9zID0gJy0xMDAlJzsKICAgICAgICAgICAgICBzaGFkb3cgPSBkYXRhLm9wdHMucGFnZSE9MTsKICAgICAgICAgICAgICBncmFkaWVudFggPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnRDc3NbdmVuZG9yKydwZXJzcGVjdGl2ZS1vcmlnaW4nXSA9IHBhcmVudE9yaWdpbjsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSgncm90YXRlWSgnK2FuZ2xlKydkZWcpJyArCiAgICAgICAgICAndHJhbnNsYXRlM2QoMHB4LCAwcHgsICcrKHRoaXMuYXR0cignZGVwdGgnKXx8MCkrJ3B4KScsIHBhcmVudE9yaWdpbik7CgogICAgICAgIGRhdGEuZnBhZ2UudHJhbnNmb3JtKCd0cmFuc2xhdGVYKCcrd2lkdGgrJ3B4KSByb3RhdGVZKCcrKDE4MCthbmdsZSkrJ2RlZyknLCBmcGFnZU9yaWdpbik7CgogICAgICAgIGRhdGEucGFyZW50LmNzcyhwYXJlbnRDc3MpOwoKICAgICAgICBpZiAoaGFsZikgewogICAgICAgICAgcmVsWCA9IC1yZWxYKzE7CiAgICAgICAgICBkYXRhLndyYXBwZXIuY3NzKHt6SW5kZXg6IHpJbmRleCsxfSk7CiAgICAgICAgICBkYXRhLmZwYWdlLmNzcyh7ekluZGV4OiB6SW5kZXh9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVsWCA9IHJlbFgtMTsKICAgICAgICAgIGRhdGEud3JhcHBlci5jc3Moe3pJbmRleDogekluZGV4fSk7CiAgICAgICAgICBkYXRhLmZwYWdlLmNzcyh7ekluZGV4OiB6SW5kZXgrMX0pOwogICAgICAgIH0KCiAgICAgICAgaWYgKHR1cm5EYXRhLm9wdHMuZ3JhZGllbnRzKSB7CiAgICAgICAgICBpZiAoc2hhZG93KQogICAgICAgICAgICBkYXRhLmFzaGFkb3cuY3NzKHsKICAgICAgICAgICAgICBkaXNwbGF5OiAnJywKICAgICAgICAgICAgICBsZWZ0OiBsZWZ0UG9zLAogICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsJysoMC41KnJlbFgpKycpJwogICAgICAgICAgICB9KS4KICAgICAgICAgICAgdHJhbnNmb3JtKCdyb3RhdGVZKDBkZWcpJyk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGRhdGEuYXNoYWRvdy5oaWRlKCk7CgogICAgICAgICAgZGF0YS5ic2hhZG93LmNzcyh7b3BhY2l0eTotcmVsWCArIDF9KTsKCiAgICAgICAgICBpZiAoaGFsZikgewogICAgICAgICAgICBpZiAoZGF0YS5ic2hhZG93LnBhcmVudCgpWzBdIT1kYXRhLndyYXBwZXJbMF0pIHsKICAgICAgICAgICAgICBkYXRhLmJzaGFkb3cuYXBwZW5kVG8oZGF0YS53cmFwcGVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGRhdGEuYnNoYWRvdy5wYXJlbnQoKVswXSE9ZGF0YS5mcGFnZVswXSkgewogICAgICAgICAgICAgIGRhdGEuYnNoYWRvdy5hcHBlbmRUbyhkYXRhLmZwYWdlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgLypkYXRhLmJzaGFkb3cuY3NzKHsKICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwnKygwLjEpKycpJwogICAgICAgICAgfSkqLwogICAgICAgICAgZ3JhZGllbnQoZGF0YS5ic2hhZG93LCBwb2ludDJEKGdyYWRpZW50WCAqIDEwMCwgMCksIHBvaW50MkQoKC1ncmFkaWVudFggKyAxKSoxMDAsIDApLAogICAgICAgICAgICBbWzAsICdyZ2JhKDAsMCwwLDAuMyknXSxbMSwgJ3JnYmEoMCwwLDAsMCknXV0sMik7CiAgICAgICAgICAKICAgICAgICB9CgogICAgICAgIGJyZWFrOwogICAgICBjYXNlICdzaGVldCc6CgogICAgICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgICAgIGEgPSAwLAogICAgICAgICAgYWxwaGEgPSAwLAogICAgICAgICAgYmV0YSwKICAgICAgICAgIHB4LAogICAgICAgICAgZ3JhZGllbnRFbmRQb2ludEEsCiAgICAgICAgICBncmFkaWVudEVuZFBvaW50QiwKICAgICAgICAgIGdyYWRpZW50U3RhcnRWYWwsCiAgICAgICAgICBncmFkaWVudFNpemUsCiAgICAgICAgICBncmFkaWVudE9wYWNpdHksCiAgICAgICAgICBzaGFkb3dWYWwsCiAgICAgICAgICBtdiA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICBkZiA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICB0ciA9IHBvaW50MkQoMCwgMCksCiAgICAgICAgICBmb2xkaW5nID0gZmxpcE1ldGhvZHMuX2ZvbGRpbmdQYWdlLmNhbGwodGhpcyksCiAgICAgICAgICB0YW4gPSBNYXRoLnRhbihhbHBoYSksCiAgICAgICAgICBhYyA9IHR1cm5EYXRhLm9wdHMuYWNjZWxlcmF0aW9uLAogICAgICAgICAgaCA9IGRhdGEud3JhcHBlci5oZWlnaHQoKSwKICAgICAgICAgIHRvcCA9IHBvaW50LmNvcm5lci5zdWJzdHIoMCwgMSkgPT0gJ3QnLAogICAgICAgICAgbGVmdCA9IHBvaW50LmNvcm5lci5zdWJzdHIoMSwgMSkgPT0gJ2wnLAoKICAgICAgY29tcHV0ZSA9IGZ1bmN0aW9uKCkgewoKICAgICAgICB2YXIgcmVsID0gcG9pbnQyRCgwLCAwKTsKICAgICAgICB2YXIgbWlkZGxlID0gcG9pbnQyRCgwLCAwKTsKCiAgICAgICAgcmVsLnggPSAoby54KSA/IG8ueCAtIHBvaW50LnggOiBwb2ludC54OwoKICAgICAgICBpZiAoIWhhc1JvdCkgewogICAgICAgICAgcmVsLnkgPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWwueSA9IChvLnkpID8gby55IC0gcG9pbnQueSA6IHBvaW50Lnk7CiAgICAgICAgfQoKICAgICAgICBtaWRkbGUueCA9IChsZWZ0KT8gd2lkdGggLSByZWwueC8yIDogcG9pbnQueCArIHJlbC54LzI7CiAgICAgICAgbWlkZGxlLnkgPSByZWwueS8yOwogICAgICAgIAogICAgICAgIHZhciBhbHBoYSA9ICBBOTAtTWF0aC5hdGFuMihyZWwueSwgcmVsLngpLAogICAgICAgICAgZ2FtbWEgPSBhbHBoYSAtIE1hdGguYXRhbjIobWlkZGxlLnksIG1pZGRsZS54KSwKICAgICAgICAgIGRpc3RhbmNlID0gIE1hdGgubWF4KDAsIE1hdGguc2luKGdhbW1hKSAqIE1hdGguc3FydChNYXRoLnBvdyhtaWRkbGUueCwgMikgKyBNYXRoLnBvdyhtaWRkbGUueSwgMikpKTsKICAgICAgICAgIAogICAgICAgICAgYSA9IGRlZyhhbHBoYSk7CgogICAgICAgICAgdHIgPSBwb2ludDJEKGRpc3RhbmNlICogTWF0aC5zaW4oYWxwaGEpLCBkaXN0YW5jZSAqIE1hdGguY29zKGFscGhhKSk7CgogICAgICAgICAgaWYgKGFscGhhID4gQTkwKSB7CiAgICAgICAgICAgIHRyLnggPSB0ci54ICsgTWF0aC5hYnModHIueSAqIHJlbC55L3JlbC54KTsKICAgICAgICAgICAgdHIueSA9IDA7CiAgICAgICAgICAgIGlmIChNYXRoLnJvdW5kKHRyLngqTWF0aC50YW4oUEktYWxwaGEpKSA8IGhlaWdodCkgewogICAgICAgICAgICAgIHBvaW50LnkgPSBNYXRoLnNxcnQoTWF0aC5wb3coaGVpZ2h0LCAyKSsyICogbWlkZGxlLnggKiByZWwueCk7CiAgICAgICAgICAgICAgaWYgKHRvcCkgcG9pbnQueSA9ICBoZWlnaHQgLSBwb2ludC55OwogICAgICAgICAgICAgIHJldHVybiBjb21wdXRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgCiAgICAgICAgICBpZiAoYWxwaGE+QTkwKSB7CiAgICAgICAgICAgIHZhciBiZXRhID0gUEktYWxwaGEsIGRkID0gaCAtIGhlaWdodC9NYXRoLnNpbihiZXRhKTsKICAgICAgICAgICAgbXYgPSBwb2ludDJEKE1hdGgucm91bmQoZGQqTWF0aC5jb3MoYmV0YSkpLCBNYXRoLnJvdW5kKGRkKk1hdGguc2luKGJldGEpKSk7CiAgICAgICAgICAgIGlmIChsZWZ0KSBtdi54ID0gLSBtdi54OwogICAgICAgICAgICBpZiAodG9wKSBtdi55ID0gLSBtdi55OwogICAgICAgICAgfQoKICAgICAgICAgIHB4ID0gTWF0aC5yb3VuZCh0ci55L01hdGgudGFuKGFscGhhKSArIHRyLngpOwogICAgICAKICAgICAgICAgIHZhciBzaWRlID0gd2lkdGggLSBweCwKICAgICAgICAgICAgc2lkZVggPSBzaWRlKk1hdGguY29zKGFscGhhKjIpLAogICAgICAgICAgICBzaWRlWSA9IHNpZGUqTWF0aC5zaW4oYWxwaGEqMik7CiAgICAgICAgICAgIGRmID0gcG9pbnQyRCgKICAgICAgICAgICAgICBNYXRoLnJvdW5kKChsZWZ0ID8gc2lkZSAtc2lkZVggOiBweCtzaWRlWCkpLAogICAgICAgICAgICAgIE1hdGgucm91bmQoKHRvcCkgPyBzaWRlWSA6IGhlaWdodCAtIHNpZGVZKSk7CiAgICAgICAgICAKICAgICAgICAvLyBHcmFkaWVudHMKICAgICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewoKICAgICAgICAgICAgZ3JhZGllbnRTaXplID0gc2lkZSpNYXRoLnNpbihhbHBoYSk7CgogICAgICAgICAgICB2YXIgZW5kaW5nUG9pbnQgPSBmbGlwTWV0aG9kcy5fYzIuY2FsbCh0aGF0LCBwb2ludC5jb3JuZXIpLAogICAgICAgICAgICAgZmFyID0gTWF0aC5zcXJ0KE1hdGgucG93KGVuZGluZ1BvaW50LngtcG9pbnQueCwgMikrTWF0aC5wb3coZW5kaW5nUG9pbnQueS1wb2ludC55LCAyKSkvd2lkdGg7CgogICAgICAgICAgICBzaGFkb3dWYWwgPSBNYXRoLnNpbihBOTAqKChmYXI+MSkgPyAyIC0gZmFyIDogZmFyKSk7CgogICAgICAgICAgICBncmFkaWVudE9wYWNpdHkgPSBNYXRoLm1pbihmYXIsIDEpOwoKICAgICAgICAgICAKICAgICAgICAgICAgICBncmFkaWVudFN0YXJ0VmFsID0gZ3JhZGllbnRTaXplPjEwMCA/IChncmFkaWVudFNpemUtMTAwKS9ncmFkaWVudFNpemUgOiAwOwoKICAgICAgICAgICAgICBncmFkaWVudEVuZFBvaW50QSA9IHBvaW50MkQoCiAgICAgICAgICAgICAgICBncmFkaWVudFNpemUqTWF0aC5zaW4oYWxwaGEpL3dpZHRoKjEwMCwKICAgICAgICAgICAgICAgIGdyYWRpZW50U2l6ZSpNYXRoLmNvcyhhbHBoYSkvaGVpZ2h0KjEwMCk7CiAgICAgICAgICAgCgogICAgICAgICAgICAgIGlmIChmbGlwTWV0aG9kcy5fYmFja0dyYWRpZW50LmNhbGwodGhhdCkpIHsKCiAgICAgICAgICAgICAgICBncmFkaWVudEVuZFBvaW50QiA9IHBvaW50MkQoCiAgICAgICAgICAgICAgICAgIGdyYWRpZW50U2l6ZSoxLjIqTWF0aC5zaW4oYWxwaGEpL3dpZHRoKjEwMCwKICAgICAgICAgICAgICAgICAgZ3JhZGllbnRTaXplKjEuMipNYXRoLmNvcyhhbHBoYSkvaGVpZ2h0KjEwMCk7CgogICAgICAgICAgICAgICAgaWYgKCFsZWZ0KSBncmFkaWVudEVuZFBvaW50Qi54ID0gMTAwLWdyYWRpZW50RW5kUG9pbnRCLng7CiAgICAgICAgICAgICAgICBpZiAoIXRvcCkgZ3JhZGllbnRFbmRQb2ludEIueSA9IDEwMC1ncmFkaWVudEVuZFBvaW50Qi55OwoKICAgICAgICAgICAgICB9CgogICAgICAgICAgfQoKICAgICAgICAgIHRyLnggPSBNYXRoLnJvdW5kKHRyLngpOwogICAgICAgICAgdHIueSA9IE1hdGgucm91bmQodHIueSk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9LAoKICAgICAgdHJhbnNmb3JtID0gZnVuY3Rpb24odHIsIGMsIHgsIGEpIHsKICAgICAgCiAgICAgICAgdmFyIGYgPSBbJzAnLCAnYXV0byddLCBtdlcgPSAod2lkdGgtaCkqeFswXS8xMDAsIG12SCA9IChoZWlnaHQtaCkqeFsxXS8xMDAsCiAgICAgICAgICBjc3NBID0ge2xlZnQ6IGZbY1swXV0sIHRvcDogZltjWzFdXSwgcmlnaHQ6IGZbY1syXV0sIGJvdHRvbTogZltjWzNdXX0sCiAgICAgICAgICBjc3NCID0ge30sCiAgICAgICAgICBhbGlhc2luZ0ZrID0gKGEhPTkwICYmIGEhPS05MCkgPyAobGVmdCA/IC0xIDogMSkgOiAwLAogICAgICAgICAgb3JpZ2luID0geFswXSArICclICcgKyB4WzFdICsgJyUnOwoKICAgICAgICB0aGF0LmNzcyhjc3NBKS4KICAgICAgICAgIHRyYW5zZm9ybShyb3RhdGUoYSkgKyB0cmFuc2xhdGUodHIueCArIGFsaWFzaW5nRmssIHRyLnksIGFjKSwgb3JpZ2luKTsKCiAgICAgICAgZGF0YS5mcGFnZS5jc3MoY3NzQSkudHJhbnNmb3JtKAogICAgICAgICAgcm90YXRlKGEpICsKICAgICAgICAgIHRyYW5zbGF0ZSh0ci54ICsgZGYueCAtIG12LnggLSB3aWR0aCp4WzBdLzEwMCwgdHIueSArIGRmLnkgLSBtdi55IC0gaGVpZ2h0KnhbMV0vMTAwLCBhYykgKwogICAgICAgICAgcm90YXRlKCgxODAvYSAtIDIpKmEpLAogICAgICAgICAgb3JpZ2luKTsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSh0cmFuc2xhdGUoLXRyLnggKyBtdlctYWxpYXNpbmdGaywgLXRyLnkgKyBtdkgsIGFjKSArIHJvdGF0ZSgtYSksIG9yaWdpbik7CgogICAgICAgIGRhdGEuZndyYXBwZXIudHJhbnNmb3JtKHRyYW5zbGF0ZSgtdHIueCArIG12LnggKyBtdlcsIC10ci55ICsgbXYueSArIG12SCwgYWMpICsgcm90YXRlKC1hKSwgb3JpZ2luKTsKICAgICAgCiAgICAgICAgaWYgKHR1cm5EYXRhLm9wdHMuZ3JhZGllbnRzKSB7CgogICAgICAgICAgaWYgKHhbMF0pCiAgICAgICAgICAgIGdyYWRpZW50RW5kUG9pbnRBLnggPSAxMDAtZ3JhZGllbnRFbmRQb2ludEEueDsKCiAgICAgICAgICBpZiAoeFsxXSkKICAgICAgICAgICAgZ3JhZGllbnRFbmRQb2ludEEueSA9ICgxMDAtZ3JhZGllbnRFbmRQb2ludEEueSk7CgogICAgICAgICAgY3NzQlsnYm94LXNoYWRvdyddID0gJzAgMCAyMHB4IHJnYmEoMCwwLDAsJysoMC41KnNoYWRvd1ZhbCkrJyknOwogICAgICAgICAgZm9sZGluZy5jc3MoY3NzQik7CgogICAgICAgICAgZ3JhZGllbnQoZGF0YS5hc2hhZG93LAogICAgICAgICAgICAgIHBvaW50MkQobGVmdD8xMDA6MCwgdG9wPzA6MTAwKSwKICAgICAgICAgICAgICBwb2ludDJEKGdyYWRpZW50RW5kUG9pbnRBLngsIGdyYWRpZW50RW5kUG9pbnRBLnkpLAogICAgICAgICAgICAgIFtbZ3JhZGllbnRTdGFydFZhbCwgJ3JnYmEoMCwwLDAsMCknXSwKICAgICAgICAgICAgICBbKCgxLWdyYWRpZW50U3RhcnRWYWwpKjAuOCkrZ3JhZGllbnRTdGFydFZhbCwgJ3JnYmEoMCwwLDAsJysoMC4yKmdyYWRpZW50T3BhY2l0eSkrJyknXSwKICAgICAgICAgICAgICBbMSwgJ3JnYmEoMjU1LDI1NSwyNTUsJysoMC4yKmdyYWRpZW50T3BhY2l0eSkrJyknXV0sCiAgICAgICAgICAgICAgMywKICAgICAgICAgICAgICBhbHBoYSk7CgogICAgICAgICAgaWYgKGZsaXBNZXRob2RzLl9iYWNrR3JhZGllbnQuY2FsbCh0aGF0KSkKICAgICAgICAgICAgZ3JhZGllbnQoZGF0YS5ic2hhZG93LAogICAgICAgICAgICAgICAgcG9pbnQyRChsZWZ0PzA6MTAwLCB0b3A/MDoxMDApLAogICAgICAgICAgICAgICAgcG9pbnQyRChncmFkaWVudEVuZFBvaW50Qi54LCBncmFkaWVudEVuZFBvaW50Qi55KSwKICAgICAgICAgICAgICAgIFtbMC42LCAncmdiYSgwLDAsMCwwKSddLAogICAgICAgICAgICAgICAgWzAuOCwgJ3JnYmEoMCwwLDAsJysoMC4zKmdyYWRpZW50T3BhY2l0eSkrJyknXSwKICAgICAgICAgICAgICAgIFsxLCAncmdiYSgwLDAsMCwwKSddCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgMyk7CiAgICAgICAgfQoKICAgICAgfTsKCiAgICAgIHN3aXRjaCAocG9pbnQuY29ybmVyKSB7CiAgICAgICAgY2FzZSAnbCcgOgoKCiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAncicgOgoKCiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndGwnIDoKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1heChwb2ludC54LCAxKTsKICAgICAgICAgIGNvbXB1dGUoKTsKICAgICAgICAgIHRyYW5zZm9ybSh0ciwgWzEsMCwwLDFdLCBbMTAwLCAwXSwgYSk7CiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndHInIDoKICAgICAgICAgIHBvaW50LnggPSBNYXRoLm1pbihwb2ludC54LCB3aWR0aC0xKTsKICAgICAgICAgIGNvbXB1dGUoKTsKICAgICAgICAgIHRyYW5zZm9ybShwb2ludDJEKC10ci54LCB0ci55KSwgWzAsMCwwLDFdLCBbMCwgMF0sIC1hKTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdibCcgOgogICAgICAgICAgcG9pbnQueCA9IE1hdGgubWF4KHBvaW50LngsIDEpOwogICAgICAgICAgY29tcHV0ZSgpOwogICAgICAgICAgdHJhbnNmb3JtKHBvaW50MkQodHIueCwgLXRyLnkpLCBbMSwxLDAsMF0sIFsxMDAsIDEwMF0sIC1hKTsKICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdicicgOgogICAgICAgICAgcG9pbnQueCA9IE1hdGgubWluKHBvaW50LngsIHdpZHRoLTEpOwogICAgICAgICAgY29tcHV0ZSgpOwogICAgICAgICAgdHJhbnNmb3JtKHBvaW50MkQoLXRyLngsIC10ci55KSwgWzAsMSwxLDBdLCBbMCwgMTAwXSwgYSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICBicmVhazsKICB9CgogICAgZGF0YS5wb2ludCA9IHBvaW50OwogIAogIH0sCgogIF9tb3ZlRm9sZGluZ1BhZ2U6IGZ1bmN0aW9uKG1vdmUpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhKQogICAgICByZXR1cm47CgogICAgdmFyIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKSwKICAgICAgcGxhY2UgPSB0dXJuRGF0YS5wYWdlUGxhY2U7CiAgICAgIAogICAgaWYgKG1vdmUpIHsKCiAgICAgIHZhciBuZXh0UGFnZSA9IGRhdGEub3B0cy5uZXh0OwogIAogICAgICBpZiAocGxhY2VbbmV4dFBhZ2VdIT1kYXRhLm9wdHMucGFnZSkgewoKICAgICAgICBpZiAoZGF0YS5mb2xkaW5nKQogICAgICAgICAgZmxpcE1ldGhvZHMuX21vdmVGb2xkaW5nUGFnZS5jYWxsKHRoaXMsIGZhbHNlKTsKCiAgICAgICAgdmFyIGZvbGRpbmcgPSBmbGlwTWV0aG9kcy5fZm9sZGluZ1BhZ2UuY2FsbCh0aGlzKTsKICAgICAgICAKICAgICAgICBmb2xkaW5nLmFwcGVuZFRvKGRhdGEuZnBhZ2UpOwogICAgICAgIHBsYWNlW25leHRQYWdlXSA9IGRhdGEub3B0cy5wYWdlOwogICAgICAgIGRhdGEuZm9sZGluZyA9IG5leHRQYWdlOwogICAgICB9CgogICAgICB0dXJuLnR1cm4oJ3VwZGF0ZScpOwoKICAgIH0gZWxzZSB7CgogICAgICBpZiAoZGF0YS5mb2xkaW5nKSB7CgogICAgICAgIGlmICh0dXJuRGF0YS5wYWdlc1tkYXRhLmZvbGRpbmddKSB7CiAgICAgICAgIAogICAgICAgICAgLy8gSWYgd2UgaGF2ZSBmbGlwIGF2YWlsYWJsZQoKICAgICAgICAgIHZhciBmbGlwRGF0YSA9IHR1cm5EYXRhLnBhZ2VzW2RhdGEuZm9sZGluZ10uZGF0YSgpLmY7CiAgICAgICAgICAKICAgICAgICAgIHR1cm5EYXRhLnBhZ2VPYmpzW2RhdGEuZm9sZGluZ10uCiAgICAgICAgICAgIGFwcGVuZFRvKGZsaXBEYXRhLndyYXBwZXIpOwoKICAgICAgICB9IGVsc2UgaWYgKHR1cm5EYXRhLnBhZ2VXcmFwW2RhdGEuZm9sZGluZ10pIHsKICAgICAgICAgIAogICAgICAgICAgLy8gSWYgd2UgaGF2ZSB0aGUgcGFnZVdyYXBwZXIKCiAgICAgICAgICB0dXJuRGF0YS5wYWdlT2Jqc1tkYXRhLmZvbGRpbmddLgogICAgICAgICAgICBhcHBlbmRUbyh0dXJuRGF0YS5wYWdlV3JhcFtkYXRhLmZvbGRpbmddKTsKCiAgICAgICAgfQoKICAgICAgICBpZiAoZGF0YS5mb2xkaW5nIGluIHBsYWNlKSB7CiAgICAgICAgICBwbGFjZVtkYXRhLmZvbGRpbmddID0gZGF0YS5mb2xkaW5nOwogICAgICAgIH0KCiAgICAgICAgZGVsZXRlIGRhdGEuZm9sZGluZzsKCiAgICAgIH0KICAgIH0KICB9LAoKICBfc2hvd0ZvbGRlZFBhZ2U6IGZ1bmN0aW9uKGMsIGFuaW1hdGUpIHsKCiAgICB2YXIgZm9sZGluZyA9IGZsaXBNZXRob2RzLl9mb2xkaW5nUGFnZS5jYWxsKHRoaXMpLAogICAgICBkZCA9IHRoaXMuZGF0YSgpLAogICAgICBkYXRhID0gZGQuZiwKICAgICAgdmlzaWJsZSA9IGRhdGEudmlzaWJsZTsKCiAgICBpZiAoZm9sZGluZykgewoKICAgICAgaWYgKCF2aXNpYmxlIHx8ICFkYXRhLnBvaW50IHx8IGRhdGEucG9pbnQuY29ybmVyIT1jLmNvcm5lcikgewoKICAgICAgICB2YXIgY29ybmVyID0gKAogICAgICAgICAgZGF0YS5zdGF0dXM9PSdob3ZlcicgfHwKICAgICAgICAgIGRhdGEuc3RhdHVzPT0ncGVlbCcgfHwKICAgICAgICAgIGRhdGEub3B0cy50dXJuLmRhdGEoKS5tb3VzZUFjdGlvbikgPwogICAgICAgIGMuY29ybmVyIDogbnVsbDsKCiAgICAgICAgdmlzaWJsZSA9IGZhbHNlOwoKICAgICAgICBpZiAodHJpZ2dlcignc3RhcnQnLCB0aGlzLCBbZGF0YS5vcHRzLCBjb3JuZXJdKT09J3ByZXZlbnRlZCcpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICB9CgogICAgICBpZiAoYW5pbWF0ZSkgewogICAgICAgIAogICAgICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgICAgIHBvaW50ID0gKGRhdGEucG9pbnQgJiYgZGF0YS5wb2ludC5jb3JuZXI9PWMuY29ybmVyKSA/CiAgICAgICAgICBkYXRhLnBvaW50IDogZmxpcE1ldGhvZHMuX2MuY2FsbCh0aGlzLCBjLmNvcm5lciwgMSk7CiAgICAgIAogICAgICAgIHRoaXMuYW5pbWF0ZWYoewogICAgICAgICAgZnJvbTogW3BvaW50LngsIHBvaW50LnldLAogICAgICAgICAgdG86IFtjLngsIGMueV0sCiAgICAgICAgICBkdXJhdGlvbjogNTAwLAogICAgICAgICAgZnJhbWU6IGZ1bmN0aW9uKHYpIHsKICAgICAgICAgICAgYy54ID0gTWF0aC5yb3VuZCh2WzBdKTsKICAgICAgICAgICAgYy55ID0gTWF0aC5yb3VuZCh2WzFdKTsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuX2ZvbGQuY2FsbCh0aGF0LCBjKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgIH0gZWxzZSAgewoKICAgICAgICBmbGlwTWV0aG9kcy5fZm9sZC5jYWxsKHRoaXMsIGMpOwoKICAgICAgICBpZiAoZGQuZWZmZWN0ICYmICFkZC5lZmZlY3QudHVybmluZykKICAgICAgICAgIHRoaXMuYW5pbWF0ZWYoZmFsc2UpOwoKICAgICAgfQoKICAgICAgaWYgKCF2aXNpYmxlKSB7CgogICAgICAgIHN3aXRjaChkYXRhLmVmZmVjdCkgewogICAgICAgICAgY2FzZSAnaGFyZCc6CgogICAgICAgICAgICBkYXRhLnZpc2libGUgPSB0cnVlOwogICAgICAgICAgICBmbGlwTWV0aG9kcy5fbW92ZUZvbGRpbmdQYWdlLmNhbGwodGhpcywgdHJ1ZSk7CiAgICAgICAgICAgIGRhdGEuZnBhZ2Uuc2hvdygpOwogICAgICAgICAgICBpZiAoZGF0YS5vcHRzLnNoYWRvd3MpCiAgICAgICAgICAgICAgZGF0YS5ic2hhZG93LnNob3coKTsKCiAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ3NoZWV0JzoKCiAgICAgICAgICAgIGRhdGEudmlzaWJsZSA9IHRydWU7CiAgICAgICAgICAgIGRhdGEuZnBhcmVudC5zaG93KCkuZGF0YSgpLmZsaXBzKys7CiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgICAgICAgZGF0YS5md3JhcHBlci5zaG93KCk7CiAgICAgICAgICAgIGlmIChkYXRhLmJzaGFkb3cpCiAgICAgICAgICAgICAgZGF0YS5ic2hhZG93LnNob3coKTsKCiAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICB9CgogICAgICByZXR1cm4gdHJ1ZTsKCiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0sCgogIGhpZGU6IGZ1bmN0aW9uKCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCksCiAgICAgIGZvbGRpbmcgPSBmbGlwTWV0aG9kcy5fZm9sZGluZ1BhZ2UuY2FsbCh0aGlzKTsKCiAgICBzd2l0Y2ggKGRhdGEuZWZmZWN0KSB7CiAgICAgIGNhc2UgJ2hhcmQnOgogICAgICAgIAogICAgICAgIGlmICh0dXJuRGF0YS5vcHRzLmdyYWRpZW50cykgewogICAgICAgICAgZGF0YS5ic2hhZG93TG9jID0gMDsKICAgICAgICAgIGRhdGEuYnNoYWRvdy5yZW1vdmUoKTsKICAgICAgICAgIGRhdGEuYXNoYWRvdy5oaWRlKCk7CiAgICAgICAgfQoKICAgICAgICBkYXRhLndyYXBwZXIudHJhbnNmb3JtKCcnKTsKICAgICAgICBkYXRhLmZwYWdlLmhpZGUoKTsKCiAgICAgIGJyZWFrOwogICAgICBjYXNlICdzaGVldCc6CgogICAgICAgIGlmICgoLS1kYXRhLmZwYXJlbnQuZGF0YSgpLmZsaXBzKT09PTApCiAgICAgICAgICBkYXRhLmZwYXJlbnQuaGlkZSgpOwoKICAgICAgICB0aGlzLmNzcyh7bGVmdDogMCwgdG9wOiAwLCByaWdodDogJ2F1dG8nLCBib3R0b206ICdhdXRvJ30pLgogICAgICAgICAgdHJhbnNmb3JtKCcnKTsKCiAgICAgICAgZGF0YS53cmFwcGVyLnRyYW5zZm9ybSgnJyk7CgogICAgICAgIGRhdGEuZndyYXBwZXIuaGlkZSgpOwoKICAgICAgICBpZiAoZGF0YS5ic2hhZG93KQogICAgICAgICAgZGF0YS5ic2hhZG93LmhpZGUoKTsKCiAgICAgICAgZm9sZGluZy50cmFuc2Zvcm0oJycpOwoKICAgICAgYnJlYWs7CiAgICB9CgogICAgICBkYXRhLnZpc2libGUgPSBmYWxzZTsKCiAgICByZXR1cm4gdGhpczsKICB9LAoKICBoaWRlRm9sZGVkUGFnZTogZnVuY3Rpb24oYW5pbWF0ZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZjsKCiAgICBpZiAoIWRhdGEucG9pbnQpIHJldHVybjsKCiAgICB2YXIgdGhhdCA9IHRoaXMsCiAgICAgIHAxID0gZGF0YS5wb2ludCwKICAgICAgaGlkZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIGRhdGEucG9pbnQgPSBudWxsOwogICAgICAgIGRhdGEuc3RhdHVzID0gJyc7CiAgICAgICAgdGhhdC5mbGlwKCdoaWRlJyk7CiAgICAgICAgdGhhdC50cmlnZ2VyKCdlbmQnLCBbZGF0YS5vcHRzLCBmYWxzZV0pOwogICAgICB9OwoKICAgIGlmIChhbmltYXRlKSB7CgogICAgICB2YXIgcDQgPSBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsIHAxLmNvcm5lciksCiAgICAgICAgdG9wID0gKHAxLmNvcm5lci5zdWJzdHIoMCwxKT09J3QnKSwKICAgICAgICBkZWx0YSA9ICh0b3ApID8gTWF0aC5taW4oMCwgcDEueS1wNC55KS8yIDogTWF0aC5tYXgoMCwgcDEueS1wNC55KS8yLAogICAgICAgIHAyID0gcG9pbnQyRChwMS54LCBwMS55K2RlbHRhKSwKICAgICAgICBwMyA9IHBvaW50MkQocDQueCwgcDQueS1kZWx0YSk7CiAgICAKICAgICAgdGhpcy5hbmltYXRlZih7CiAgICAgICAgZnJvbTogMCwKICAgICAgICB0bzogMSwKICAgICAgICBmcmFtZTogZnVuY3Rpb24odikgewogICAgICAgICAgdmFyIG5wID0gYmV6aWVyKHAxLCBwMiwgcDMsIHA0LCB2KTsKICAgICAgICAgIHAxLnggPSBucC54OwogICAgICAgICAgcDEueSA9IG5wLnk7CiAgICAgICAgICBmbGlwTWV0aG9kcy5fZm9sZC5jYWxsKHRoYXQsIHAxKTsKICAgICAgICB9LAogICAgICAgIGNvbXBsZXRlOiBoaWRlLAogICAgICAgIGR1cmF0aW9uOiA4MDAsCiAgICAgICAgaGlkaW5nOiB0cnVlCiAgICAgIH0pOwoKICAgIH0gZWxzZSB7CgogICAgICB0aGlzLmFuaW1hdGVmKGZhbHNlKTsKICAgICAgaGlkZSgpOwoKICAgIH0KICB9LAoKICB0dXJuUGFnZTogZnVuY3Rpb24oY29ybmVyKSB7CgogICAgdmFyIHRoYXQgPSB0aGlzLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybkRhdGEgPSBkYXRhLm9wdHMudHVybi5kYXRhKCk7CgogICAgY29ybmVyID0ge2Nvcm5lcjogKGRhdGEuY29ybmVyKSA/CiAgICAgIGRhdGEuY29ybmVyLmNvcm5lciA6CiAgICAgIGNvcm5lciB8fCBmbGlwTWV0aG9kcy5fY0FsbG93ZWQuY2FsbCh0aGlzKVswXX07CgogICAgdmFyIHAxID0gZGF0YS5wb2ludCB8fAogICAgICBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsCiAgICAgICAgY29ybmVyLmNvcm5lciwKICAgICAgICAoZGF0YS5vcHRzLnR1cm4pID8gdHVybkRhdGEub3B0cy5lbGV2YXRpb24gOiAwKSwKICAgICAgcDQgPSBmbGlwTWV0aG9kcy5fYzIuY2FsbCh0aGlzLCBjb3JuZXIuY29ybmVyKTsKCiAgICAgIHRoaXMudHJpZ2dlcignZmxpcCcpLgogICAgICAgIGFuaW1hdGVmKHsKICAgICAgICAgIGZyb206IDAsCiAgICAgICAgICB0bzogMSwKICAgICAgICAgIGZyYW1lOiBmdW5jdGlvbih2KSB7CgogICAgICAgICAgICB2YXIgbnAgPSBiZXppZXIocDEsIHAxLCBwNCwgcDQsIHYpOwogICAgICAgICAgICBjb3JuZXIueCA9IG5wLng7CiAgICAgICAgICAgIGNvcm5lci55ID0gbnAueTsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhhdCwgY29ybmVyKTsKCiAgICAgICAgICB9LAogICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAKICAgICAgICAgICAgdGhhdC50cmlnZ2VyKCdlbmQnLCBbZGF0YS5vcHRzLCB0cnVlXSk7CgogICAgICAgICAgfSwKICAgICAgICAgIGR1cmF0aW9uOiB0dXJuRGF0YS5vcHRzLmR1cmF0aW9uLAogICAgICAgICAgdHVybmluZzogdHJ1ZQogICAgICAgIH0pOwoKICAgICAgZGF0YS5jb3JuZXIgPSBudWxsOwogIH0sCgogIG1vdmluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuICdlZmZlY3QnIGluIHRoaXMuZGF0YSgpOwogIAogIH0sCgogIGlzVHVybmluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMuZmxpcCgnbW92aW5nJykgJiYgdGhpcy5kYXRhKCkuZWZmZWN0LnR1cm5pbmc7CiAgCiAgfSwKCiAgY29ybmVyOiBmdW5jdGlvbigpIHsKICAgIAogICAgcmV0dXJuIHRoaXMuZGF0YSgpLmYuY29ybmVyOwogICAgICAKICB9LAoKICBfZXZlbnRTdGFydDogZnVuY3Rpb24oZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgdHVybiA9IGRhdGEub3B0cy50dXJuOwoKICAgIGlmICghZGF0YS5jb3JuZXIgJiYgIWRhdGEuZGlzYWJsZWQgJiYgIXRoaXMuZmxpcCgnaXNUdXJuaW5nJykgJiYKICAgICAgZGF0YS5vcHRzLnBhZ2U9PXR1cm4uZGF0YSgpLnBhZ2VQbGFjZVtkYXRhLm9wdHMucGFnZV0pCiAgICB7CgogICAgICBkYXRhLmNvcm5lciA9IGZsaXBNZXRob2RzLl9pc0lBcmVhLmNhbGwodGhpcywgZSk7CgogICAgICBpZiAoZGF0YS5jb3JuZXIgJiYgZmxpcE1ldGhvZHMuX2ZvbGRpbmdQYWdlLmNhbGwodGhpcykpIHsKCiAgICAgICAgdGhpcy50cmlnZ2VyKCdwcmVzc2VkJywgW2RhdGEucG9pbnRdKTsKICAgICAgICBmbGlwTWV0aG9kcy5fc2hvd0ZvbGRlZFBhZ2UuY2FsbCh0aGlzLCBkYXRhLmNvcm5lcik7CgogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgIH0gZWxzZQogICAgICAgIGRhdGEuY29ybmVyID0gbnVsbDsKCiAgICB9CgogIH0sCgogIF9ldmVudE1vdmU6IGZ1bmN0aW9uKGUpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhLmRpc2FibGVkKSB7CgogICAgICBlID0gKGlzVG91Y2gpID8gZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMgOiBbZV07CgogICAgICBpZiAoZGF0YS5jb3JuZXIpIHsKCiAgICAgICAgdmFyIHBvcyA9IGRhdGEucGFyZW50Lm9mZnNldCgpOwogICAgICAgIGRhdGEuY29ybmVyLnggPSBlWzBdLnBhZ2VYLXBvcy5sZWZ0OwogICAgICAgIGRhdGEuY29ybmVyLnkgPSBlWzBdLnBhZ2VZLXBvcy50b3A7CiAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhpcywgZGF0YS5jb3JuZXIpOwoKICAgICAgfSBlbHNlIGlmIChkYXRhLmhvdmVyICYmICF0aGlzLmRhdGEoKS5lZmZlY3QgJiYgdGhpcy5pcygnOnZpc2libGUnKSkgewoKICAgICAgICB2YXIgcG9pbnQgPSBmbGlwTWV0aG9kcy5faXNJQXJlYS5jYWxsKHRoaXMsIGVbMF0pOwoKICAgICAgICBpZiAocG9pbnQpIHsKCiAgICAgICAgICBpZiAoKGRhdGEuZWZmZWN0PT0nc2hlZXQnICYmIHBvaW50LmNvcm5lci5sZW5ndGg9PTIpICB8fCBkYXRhLmVmZmVjdD09J2hhcmQnKSB7CiAgICAgICAgICAgIGRhdGEuc3RhdHVzID0gJ2hvdmVyJzsKICAgICAgICAgICAgdmFyIG9yaWdpbiA9IGZsaXBNZXRob2RzLl9jLmNhbGwodGhpcywgcG9pbnQuY29ybmVyLCBkYXRhLm9wdHMuY29ybmVyU2l6ZS8yKTsKICAgICAgICAgICAgcG9pbnQueCA9IG9yaWdpbi54OwogICAgICAgICAgICBwb2ludC55ID0gb3JpZ2luLnk7CiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9zaG93Rm9sZGVkUGFnZS5jYWxsKHRoaXMsIHBvaW50LCB0cnVlKTsKICAgICAgICAgIH0KICAgICAgICAKICAgICAgICB9IGVsc2UgewogICAgICAgICAgCiAgICAgICAgICBpZiAoZGF0YS5zdGF0dXM9PSdob3ZlcicpIHsKICAgICAgICAgICAgZGF0YS5zdGF0dXMgPSAnJzsKICAgICAgICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgfQoKICAgIH0KCiAgfSwKCiAgX2V2ZW50RW5kOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIGNvcm5lciA9IGRhdGEuY29ybmVyOwoKICAgIGlmICghZGF0YS5kaXNhYmxlZCAmJiBjb3JuZXIpIHsKICAgICAgaWYgKHRyaWdnZXIoJ3JlbGVhc2VkJywgdGhpcywgW2RhdGEucG9pbnQgfHwgY29ybmVyXSkhPSdwcmV2ZW50ZWQnKSB7CiAgICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgfQogICAgfQoKICAgIGRhdGEuY29ybmVyID0gbnVsbDsKCiAgfSwKCiAgZGlzYWJsZTogZnVuY3Rpb24oZGlzYWJsZSkgewoKICAgIGZsaXBNZXRob2RzLnNldERhdGEuY2FsbCh0aGlzLCB7J2Rpc2FibGVkJzogZGlzYWJsZX0pOwogICAgcmV0dXJuIHRoaXM7CgogIH0sCgogIGhvdmVyOiBmdW5jdGlvbihob3ZlcikgewogICAgCiAgICBmbGlwTWV0aG9kcy5zZXREYXRhLmNhbGwodGhpcywgeydob3Zlcic6IGhvdmVyfSk7CiAgICByZXR1cm4gdGhpczsKCiAgfSwKCiAgcGVlbDogZnVuY3Rpb24gKGNvcm5lciwgYW5pbWF0ZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZjsKCiAgICBpZiAoY29ybmVyKSB7CgogICAgICBpZiAoJC5pbkFycmF5KGNvcm5lciwgY29ybmVycy5hbGwpPT0tMSkKICAgICAgICB0aHJvdyB0dXJuRXJyb3IoJ0Nvcm5lciAnK2Nvcm5lcisnIGlzIG5vdCBwZXJtaXR0ZWQnKTsKCiAgICAgIGlmICgkLmluQXJyYXkoY29ybmVyLCBmbGlwTWV0aG9kcy5fY0FsbG93ZWQuY2FsbCh0aGlzKSkhPS0xKSB7CgogICAgICAgIHZhciBwb2ludCA9IGZsaXBNZXRob2RzLl9jLmNhbGwodGhpcywgY29ybmVyLCBkYXRhLm9wdHMuY29ybmVyU2l6ZS8yKTsKICAgICAgICAKICAgICAgICBkYXRhLnN0YXR1cyA9ICdwZWVsJzsKCiAgICAgICAgZmxpcE1ldGhvZHMuX3Nob3dGb2xkZWRQYWdlLmNhbGwodGhpcywKICAgICAgICB7CiAgICAgICAgICBjb3JuZXI6IGNvcm5lciwKICAgICAgICAgIHg6IHBvaW50LngsCiAgICAgICAgICB5OiBwb2ludC55CiAgICAgICAgfSwgYW5pbWF0ZSk7CgogICAgICB9CgoKICAgIH0gZWxzZSB7CgogICAgICBkYXRhLnN0YXR1cyA9ICcnOwoKICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCBhbmltYXRlKTsKICAgICAgCiAgICB9CgogICAgcmV0dXJuIHRoaXM7CiAgfQp9OwoKCi8vIFByb2Nlc3NlcyBjbGFzc2VzCgpmdW5jdGlvbiBkZWModGhhdCwgbWV0aG9kcywgYXJncykgewoKICBpZiAoIWFyZ3NbMF0gfHwgdHlwZW9mKGFyZ3NbMF0pPT0nb2JqZWN0JykKICAgIHJldHVybiBtZXRob2RzLmluaXQuYXBwbHkodGhhdCwgYXJncyk7CgogIGVsc2UgaWYgKG1ldGhvZHNbYXJnc1swXV0pCiAgICByZXR1cm4gbWV0aG9kc1thcmdzWzBdXS5hcHBseSh0aGF0LCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7CgogIGVsc2UKICAgIHRocm93IHR1cm5FcnJvcihhcmdzWzBdICsgJyBpcyBub3QgYSBtZXRob2Qgb3IgcHJvcGVydHknKTsKCn0KCgovLyBBdHRyaWJ1dGVzIGZvciBhIGxheWVyCgpmdW5jdGlvbiBkaXZBdHQodG9wLCBsZWZ0LCB6SW5kZXgsIG92ZXJmKSB7CiAgICAKICByZXR1cm4geydjc3MnOiB7CiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJywKICAgIHRvcDogdG9wLAogICAgbGVmdDogbGVmdCwKICAgICdvdmVyZmxvdyc6IG92ZXJmIHx8ICdoaWRkZW4nLAogICAgekluZGV4OiB6SW5kZXggfHwgJ2F1dG8nCiAgfQp9OwogICAgICAKfQoKLy8gR2V0cyBhIDJEIHBvaW50IGZyb20gYSBiZXppZXIgY3VydmUgb2YgZm91ciBwb2ludHMKCmZ1bmN0aW9uIGJlemllcihwMSwgcDIsIHAzLCBwNCwgdCkgewoKICB2YXIgYSA9IDEgLSB0LAogICAgYiA9IGEgKiBhICogYSwKICAgIGMgPSB0ICogdCAqIHQ7CiAgICAKICByZXR1cm4gcG9pbnQyRChNYXRoLnJvdW5kKGIqcDEueCArIDMqdCphKmEqcDIueCArIDMqdCp0KmEqcDMueCArIGMqcDQueCksCiAgICBNYXRoLnJvdW5kKGIqcDEueSArIDMqdCphKmEqcDIueSArIDMqdCp0KmEqcDMueSArIGMqcDQueSkpOwoKfQogIAovLyBDb252ZXJ0cyBhbiBhbmdsZSBmcm9tIGRlZ3JlZXMgdG8gcmFkaWFucwoKZnVuY3Rpb24gcmFkKGRlZ3JlZXMpIHsKICAKICByZXR1cm4gZGVncmVlcy8xODAqUEk7Cgp9CgovLyBDb252ZXJ0cyBhbiBhbmdsZSBmcm9tIHJhZGlhbnMgdG8gZGVncmVlcwoKZnVuY3Rpb24gZGVnKHJhZGlhbnMpIHsKICAKICByZXR1cm4gcmFkaWFucy9QSSoxODA7Cgp9CgovLyBHZXRzIGEgMkQgcG9pbnQKCmZ1bmN0aW9uIHBvaW50MkQoeCwgeSkgewogIAogIHJldHVybiB7eDogeCwgeTogeX07Cgp9CgovLyBXZWJraXQgNTM0LjMgb24gQW5kcm9pZCB3cm9uZ2x5IHJlcGFpbnRzIGVsZW1lbnRzIHRoYXQgdXNlIG92ZXJmbG93OmhpZGRlbiArIHJvdGF0aW9uCgpmdW5jdGlvbiByb3RhdGlvbkF2YWlsYWJsZSgpIHsKICB2YXIgcGFydHM7CgogIGlmICgocGFydHMgPSAvQXBwbGVXZWJraXRcLyhbMC05XC5dKykvaS5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpKSkgewogICAgdmFyIHdlYmtpdFZlcnNpb24gPSBwYXJzZUZsb2F0KHBhcnRzWzFdKTsKICAgIHJldHVybiAod2Via2l0VmVyc2lvbj41MzQuMyk7CiAgfSBlbHNlIHsKICAgIHJldHVybiB0cnVlOwogIH0KfQoKLy8gUmV0dXJucyB0aGUgdHJhc2xhdGUgdmFsdWUKCmZ1bmN0aW9uIHRyYW5zbGF0ZSh4LCB5LCB1c2UzZCkgewogIAogIHJldHVybiAoaGFzM2QgJiYgdXNlM2QpID8gJyB0cmFuc2xhdGUzZCgnICsgeCArICdweCwnICsgeSArICdweCwgMHB4KSAnCiAgOiAnIHRyYW5zbGF0ZSgnICsgeCArICdweCwgJyArIHkgKyAncHgpICc7Cgp9CgovLyBSZXR1cm5zIHRoZSByb3RhdGlvbiB2YWx1ZQoKZnVuY3Rpb24gcm90YXRlKGRlZ3JlZXMpIHsKICAKICByZXR1cm4gJyByb3RhdGUoJyArIGRlZ3JlZXMgKyAnZGVnKSAnOwoKfQoKLy8gQ2hlY2tzIGlmIGEgcHJvcGVydHkgYmVsb25ncyB0byBhbiBvYmplY3QKCmZ1bmN0aW9uIGhhcyhwcm9wZXJ0eSwgb2JqZWN0KSB7CiAgCiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsKCn0KCi8vIEdldHMgdGhlIENTUzMgdmVuZG9yIHByZWZpeAoKZnVuY3Rpb24gZ2V0UHJlZml4KCkgewoKICB2YXIgdmVuZG9yUHJlZml4ZXMgPSBbJ01veicsJ1dlYmtpdCcsJ0todG1sJywnTycsJ21zJ10sCiAgbGVuID0gdmVuZG9yUHJlZml4ZXMubGVuZ3RoLAogIHZlbmRvciA9ICcnOwoKICB3aGlsZSAobGVuLS0pCiAgICBpZiAoKHZlbmRvclByZWZpeGVzW2xlbl0gKyAnVHJhbnNmb3JtJykgaW4gZG9jdW1lbnQuYm9keS5zdHlsZSkKICAgICAgdmVuZG9yPSctJyt2ZW5kb3JQcmVmaXhlc1tsZW5dLnRvTG93ZXJDYXNlKCkrJy0nOwoKICByZXR1cm4gdmVuZG9yOwoKfQoKLy8gRGV0ZWN0cyB0aGUgdHJhbnNpdGlvbkVuZCBFdmVudAoKZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbkVuZCgpIHsKCiAgdmFyIHQsCiAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zha2VlbGVtZW50JyksCiAgICB0cmFuc2l0aW9ucyA9IHsKICAgICAgJ3RyYW5zaXRpb24nOid0cmFuc2l0aW9uZW5kJywKICAgICAgJ09UcmFuc2l0aW9uJzonb1RyYW5zaXRpb25FbmQnLAogICAgICAnTVNUcmFuc2l0aW9uJzondHJhbnNpdGlvbmVuZCcsCiAgICAgICdNb3pUcmFuc2l0aW9uJzondHJhbnNpdGlvbmVuZCcsCiAgICAgICdXZWJraXRUcmFuc2l0aW9uJzond2Via2l0VHJhbnNpdGlvbkVuZCcKICAgIH07CgogIGZvciAodCBpbiB0cmFuc2l0aW9ucykgewogICAgaWYgKGVsLnN0eWxlW3RdICE9PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIHRyYW5zaXRpb25zW3RdOwogICAgfQogIH0KfQoKLy8gR3JhZGllbnRzCgpmdW5jdGlvbiBncmFkaWVudChvYmosIHAwLCBwMSwgY29sb3JzLCBudW1Db2xvcnMpIHsKCiAgdmFyIGosIGNvbHMgPSBbXTsKCiAgaWYgKHZlbmRvcj09Jy13ZWJraXQtJykgewoKICAgIGZvciAoaiA9IDA7IGo8bnVtQ29sb3JzOyBqKyspCiAgICAgIGNvbHMucHVzaCgnY29sb3Itc3RvcCgnK2NvbG9yc1tqXVswXSsnLCAnK2NvbG9yc1tqXVsxXSsnKScpOwogICAgCiAgICBvYmouY3NzKHsnYmFja2dyb3VuZC1pbWFnZSc6CiAgICAgICAgJy13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAnKwogICAgICAgIHAwLngrJyUgJysKICAgICAgICBwMC55KyclLCcrCiAgICAgICAgcDEueCsnJSAnKwogICAgICAgIHAxLnkrJyUsICcrCiAgICAgICAgY29scy5qb2luKCcsJykgKyAnICknfSk7CiAgfSBlbHNlIHsKICAgIAogICAgcDAgPSB7eDpwMC54LzEwMCAqIG9iai53aWR0aCgpLCB5OnAwLnkvMTAwICogb2JqLmhlaWdodCgpfTsKICAgIHAxID0ge3g6cDEueC8xMDAgKiBvYmoud2lkdGgoKSwgeTpwMS55LzEwMCAqIG9iai5oZWlnaHQoKX07CgogICAgdmFyIGR4ID0gcDEueC1wMC54LAogICAgICBkeSA9IHAxLnktcDAueSwKICAgICAgYW5nbGUgPSBNYXRoLmF0YW4yKGR5LCBkeCksCiAgICAgIGFuZ2xlMiA9IGFuZ2xlIC0gTWF0aC5QSS8yLAogICAgICBkaWFnb25hbCA9IE1hdGguYWJzKG9iai53aWR0aCgpKk1hdGguc2luKGFuZ2xlMikpK01hdGguYWJzKG9iai5oZWlnaHQoKSpNYXRoLmNvcyhhbmdsZTIpKSwKICAgICAgZ3JhZGllbnREaWFnb25hbCA9IE1hdGguc3FydChkeSpkeSArIGR4KmR4KSwKICAgICAgY29ybmVyID0gcG9pbnQyRCgocDEueDxwMC54KSA/IG9iai53aWR0aCgpIDogMCwgKHAxLnk8cDAueSkgPyBvYmouaGVpZ2h0KCkgOiAwKSwKICAgICAgc2xvcGUgPSBNYXRoLnRhbihhbmdsZSksCiAgICAgIGludmVyc2UgPSAtMS9zbG9wZSwKICAgICAgeCA9IChpbnZlcnNlKmNvcm5lci54IC0gY29ybmVyLnkgLSBzbG9wZSpwMC54ICsgcDAueSkvKGludmVyc2Utc2xvcGUpLAogICAgICBjID0ge3g6IHgsIHk6IGludmVyc2UqeCAtIGludmVyc2UqY29ybmVyLnggKyBjb3JuZXIueX0sCiAgICAgIHNlZ0EgPSAoTWF0aC5zcXJ0KCBNYXRoLnBvdyhjLngtcDAueCwyKSArIE1hdGgucG93KGMueS1wMC55LDIpKSk7CgogICAgICBmb3IgKGogPSAwOyBqPG51bUNvbG9yczsgaisrKQogICAgICAgIGNvbHMucHVzaCgnICcrY29sb3JzW2pdWzFdKycgJysoKHNlZ0EgKyBncmFkaWVudERpYWdvbmFsKmNvbG9yc1tqXVswXSkqMTAwL2RpYWdvbmFsKSsnJScpOwoKICAgICAgb2JqLmNzcyh7J2JhY2tncm91bmQtaW1hZ2UnOiB2ZW5kb3IrJ2xpbmVhci1ncmFkaWVudCgnICsgKC1hbmdsZSkgKyAncmFkLCcgKyBjb2xzLmpvaW4oJywnKSArICcpJ30pOwogIH0KfQoKCi8vIFRyaWdnZXJzIGFuIGV2ZW50CgpmdW5jdGlvbiB0cmlnZ2VyKGV2ZW50TmFtZSwgY29udGV4dCwgYXJncykgewoKICB2YXIgZXZlbnQgPSAkLkV2ZW50KGV2ZW50TmFtZSk7CiAgY29udGV4dC50cmlnZ2VyKGV2ZW50LCBhcmdzKTsKICBpZiAoZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpCiAgICByZXR1cm4gJ3ByZXZlbnRlZCc7CiAgZWxzZSBpZiAoZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgIHJldHVybiAnc3RvcHBlZCc7CiAgZWxzZQogICAgcmV0dXJuICcnOwp9CgovLyBKUyBFcnJvcnMKCmZ1bmN0aW9uIHR1cm5FcnJvcihtZXNzYWdlKSB7CgogIGZ1bmN0aW9uIFR1cm5Kc0Vycm9yKG1lc3NhZ2UpIHsKICAgIHRoaXMubmFtZSA9ICJUdXJuSnNFcnJvciI7CiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogIH0KCiAgVHVybkpzRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yKCk7CiAgVHVybkpzRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHVybkpzRXJyb3I7CiAgcmV0dXJuIG5ldyBUdXJuSnNFcnJvcihtZXNzYWdlKTsKCn0KCi8vIEZpbmQgdGhlIG9mZnNldCBvZiBhbiBlbGVtZW50IGlnbm9yaW5nIGl0cyB0cmFuc2Zvcm1hdGlvbgoKZnVuY3Rpb24gZmluZFBvcyhvYmopIHsKCiAgdmFyIG9mZnNldCA9IHt0b3A6IDAsIGxlZnQ6IDB9OwoKICBkb3sKICAgIG9mZnNldC5sZWZ0ICs9IG9iai5vZmZzZXRMZWZ0OwogICAgb2Zmc2V0LnRvcCArPSBvYmoub2Zmc2V0VG9wOwogIH0gd2hpbGUgKChvYmogPSBvYmoub2Zmc2V0UGFyZW50KSk7CgogIHJldHVybiBvZmZzZXQ7Cgp9CgovLyBDaGVja3MgaWYgdGhlcmUncyBoYXJkIHBhZ2UgY29tcGF0aWJpbGl0eQovLyBJRTkgaXMgdGhlIG9ubHkgYnJvd3NlciB0aGF0IGRvZXMgbm90IHN1cHBvcnQgaGFyZCBwYWdlcwoKZnVuY3Rpb24gaGFzSGFyZFBhZ2UoKSB7CiAgcmV0dXJuIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ01TSUUgOS4wJyk9PS0xKTsKfQoKLy8gUmVxdWVzdCBhbiBhbmltYXRpb24KCndpbmRvdy5yZXF1ZXN0QW5pbSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgd2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwKICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSB8fAogICAgZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgICAgd2luZG93LnNldFRpbWVvdXQoY2FsbGJhY2ssIDEwMDAgLyA2MCk7CiAgICB9OwoKfSkoKTsKCi8vIEV4dGVuZCAkLmZuCgokLmV4dGVuZCgkLmZuLCB7CgogIGZsaXA6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGRlYygkKHRoaXNbMF0pLCBmbGlwTWV0aG9kcywgYXJndW1lbnRzKTsKICB9LAoKICB0dXJuOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBkZWMoJCh0aGlzWzBdKSwgdHVybk1ldGhvZHMsIGFyZ3VtZW50cyk7CiAgfSwKCiAgdHJhbnNmb3JtOiBmdW5jdGlvbih0cmFuc2Zvcm0sIG9yaWdpbikgewoKICAgIHZhciBwcm9wZXJ0aWVzID0ge307CiAgICAKICAgIGlmIChvcmlnaW4pCiAgICAgIHByb3BlcnRpZXNbdmVuZG9yKyd0cmFuc2Zvcm0tb3JpZ2luJ10gPSBvcmlnaW47CiAgICAKICAgIHByb3BlcnRpZXNbdmVuZG9yKyd0cmFuc2Zvcm0nXSA9IHRyYW5zZm9ybTsKICAKICAgIHJldHVybiB0aGlzLmNzcyhwcm9wZXJ0aWVzKTsKCiAgfSwKCiAgYW5pbWF0ZWY6IGZ1bmN0aW9uKHBvaW50KSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoZGF0YS5lZmZlY3QpCiAgICAgIGRhdGEuZWZmZWN0LnN0b3AoKTsKCiAgICBpZiAocG9pbnQpIHsKCiAgICAgIGlmICghcG9pbnQudG8ubGVuZ3RoKSBwb2ludC50byA9IFtwb2ludC50b107CiAgICAgIGlmICghcG9pbnQuZnJvbS5sZW5ndGgpIHBvaW50LmZyb20gPSBbcG9pbnQuZnJvbV07CgogICAgICB2YXIgZGlmZiA9IFtdLAogICAgICAgIGxlbiA9IHBvaW50LnRvLmxlbmd0aCwKICAgICAgICBhbmltYXRpbmcgPSB0cnVlLAogICAgICAgIHRoYXQgPSB0aGlzLAogICAgICAgIHRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpLAogICAgICAgIGZyYW1lID0gZnVuY3Rpb24oKSB7CgogICAgICAgICAgaWYgKCFkYXRhLmVmZmVjdCB8fCAhYW5pbWF0aW5nKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgdmFyIHYgPSBbXSwKICAgICAgICAgICAgdGltZURpZmYgPSBNYXRoLm1pbihwb2ludC5kdXJhdGlvbiwgKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIHRpbWUpOwoKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspCiAgICAgICAgICAgIHYucHVzaChkYXRhLmVmZmVjdC5lYXNpbmcoMSwgdGltZURpZmYsIHBvaW50LmZyb21baV0sIGRpZmZbaV0sIHBvaW50LmR1cmF0aW9uKSk7CgogICAgICAgICAgcG9pbnQuZnJhbWUoKGxlbj09MSkgPyB2WzBdIDogdik7CgogICAgICAgICAgaWYgKHRpbWVEaWZmPT1wb2ludC5kdXJhdGlvbikgewogICAgICAgICAgICBkZWxldGUgZGF0YVsnZWZmZWN0J107CiAgICAgICAgICAgIHRoYXQuZGF0YShkYXRhKTsKICAgICAgICAgICAgaWYgKHBvaW50LmNvbXBsZXRlKQogICAgICAgICAgICAgIHBvaW50LmNvbXBsZXRlKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW0oZnJhbWUpOwogICAgICAgICAgfQogICAgICAgIH07CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKQogICAgICAgIGRpZmYucHVzaChwb2ludC50b1tpXSAtIHBvaW50LmZyb21baV0pOwoKICAgICAgZGF0YS5lZmZlY3QgPSAkLmV4dGVuZCh7CiAgICAgICAgc3RvcDogZnVuY3Rpb24oKSB7CiAgICAgICAgICBhbmltYXRpbmcgPSBmYWxzZTsKICAgICAgICB9LAogICAgICAgIGVhc2luZzogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGRhdGEpIHsKICAgICAgICAgIHJldHVybiBjICogTWF0aC5zcXJ0KDEgLSAodD10L2RhdGEtMSkqdCkgKyBiOwogICAgICAgIH0KICAgICAgfSwgcG9pbnQpOwoKICAgICAgdGhpcy5kYXRhKGRhdGEpOwoKICAgICAgZnJhbWUoKTsKCiAgICB9IGVsc2UgewogICAgICAKICAgICAgZGVsZXRlIGRhdGFbJ2VmZmVjdCddOwoKICAgIH0KICB9Cn0pOwoKLy8gRXhwb3J0IHNvbWUgZ2xvYmFscwoKJC5pc1RvdWNoID0gaXNUb3VjaDsKJC5tb3VzZUV2ZW50cyA9IG1vdXNlRXZlbnRzOwokLmNzc1ByZWZpeCA9IGdldFByZWZpeDsKJC5jc3NUcmFuc2l0aW9uRW5kID0gZ2V0VHJhbnNpdGlvbkVuZDsKJC5maW5kUG9zID0gZmluZFBvczsKCn0pKGpRdWVyeSk7Cg=='],
// complete: loadApp
complete: fbload
});
</script>
<!--
<div id="loadfile">
<h1>The XMLHttpRequest Object</h1>
<button type="button" onclick="loadfile()">loadfile</button>
</div>
-->
<!--
<script id="script_loadfile">
function loadfile() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("loadfile").innerHTML =
this.responseText;
}
};
xhttp.open("GET", "index_fb_mag.psv", true);
xhttp.send();
}
</script>
-->
<!--
<script id="ajaxrequest" >
function ajaxRequest(){
var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"]; //activeX versions to check for in IE
if (window.ActiveXObject){ //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
for (var i=0; i<activexmodes.length; i++){
try{
return new ActiveXObject(activexmodes[i]);
}
catch(e){
//suppress error
}
}
}
else if (window.XMLHttpRequest) // if Mozilla, Safari etc
return new XMLHttpRequest();
else
return false;
}
function ajaxpost(){
var mypostrequest=new ajaxRequest();
mypostrequest.onreadystatechange=function(){
if (mypostrequest.readyState==4){
if (mypostrequest.status==200 || window.location.href.indexOf("http")==-1){
document.getElementById("result").innerHTML = mypostrequest.responseText;
}
else{
alert("An error has occured making the request");
}
}
}
var userId = encodeURIComponent(document.getElementById("userId").value);
var password = encodeURIComponent(document.getElementById("password").value);
var parameters="userId="+userId+"&password="+password;
mypostrequest.open("POST", "http://localhost:8080/AjaxTest/Login", true);
mypostrequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
mypostrequest.send(parameters);
}
</script>
-->
<!--
<hr color=black>
<hr color=white>
<a href=index_fb_mag.html ><img src="ko.png" height=25></a>
<br><br>
<hr color=white>
<hr color=black>
-->
<!--
<form method="get" action="">
<table>
<tr>
<td>User Id:</td>
<td><input type="text" id="userId" name="userId" size="30" />
</td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" id="password" name="password"
size="30" />
</td>
</tr>
<tr>
<td> </td>
<td><input type="button" value="submit" onClick="ajaxpost()" />
</td>
</tr>
</table>
</form>
<div id="result"></div>
-->
<br><br><br><br><br>
<!--
<div id="div_kogrids_b"></div>
BUGS_38500 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBb
-->
<br>
<hr color=black>
<hr color=white>
<img src=/imgs/btn/koeye.png id=img_fonts onclick="toggle('div_fonts'); return false;" height=20>div_fonts
<hr color=goldenrod>
<div id=div_fonts hidden>
<h3>div_fonts</h3>
<table id=table_fonts>
<tr><td><img src=/imgs/btn/koeye.png height=25 onclick="changefont('body', 'yokkmokkOT', '48pt' );return false;" height=20></td><td>yokkmokkOT</td><td>48pt</td></tr>
<tr><td><img src=/imgs/btn/koeye.png height=25 onclick="changefont('body', 'MontSerrat', '24pt' );return false;" height=20></td><td>MontSerrat</td><td>24pt</td></tr>
<tr><td><img src=/imgs/btn/koeye.png height=25 onclick="changefont('body', 'Arial', '24pt' );return false;" height=20></td><td>Arial</td><td>24pt</td></tr>
<tr><td><img src=/imgs/btn/koeye.png height=25 onclick="changefont('body', 'Times New Roman', '24pt' );return false;" height=20></td><td>TimesNewRoman</td><td>24pt</td></tr>
<tr><td><img src=/imgs/btn/koeye.png height=25 onclick="changefont('body', 'Courier', '24pt' );return false;" height=20></td><td>Courier</td><td>24pt</td></tr>
<tr><td><img src=/imgs/btn/koeye.png height=25 onclick="changefont('body', 'New Courier', '24pt' );return false;" height=20></td><td>NewCourier</td><td>24pt</td></tr>
</table>
<script id=script_fontlist>
$('#fontList li').assertNonEmpty().click(function () {
$('body').css('font-family', $(this).html());
});
</script>
</div id=div_fonts_end>
<hr color=white>
<hr color=black>
<!--
<script id="script_gethint_ajax">
function showHint(str) {
if (str.length == 0) {
document.getElementById("txtHint").innerHTML = "";
return;
}
else {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("txtHint").innerHTML = this.responseText;
}
};
xmlhttp.open("GET", "gethint.php?q=" + str, true);
xmlhttp.send();
}
}
</script>
-->
<!--
<script id="script_ajaxjs" >
function js_ajax() {
$(document).ready(function(){
$.ajax({
url: 'idx.php',
type: 'get',
dataType: 'JSON',
success: function(response){
var len = response.length;
for(var i=0; i<len; i++){
var id = response[i].id;
var username = response[i].username;
var name = response[i].name;
var email = response[i].email;
var tr_str = "<tr>" +
"<td align='center'>" + (i+1) + "</td>" +
"<td align='center'>" + username + "</td>" +
"<td align='center'>" + name + "</td>" +
"<td align='center'>" + email + "</td>" +
"</tr>";
$("#userTable tbody").append(tr_str);
}
}
});
});
return( $ajaxjs );
}
</script>
-->
<!--
<h1>gethint_ajax</h1>
<script id="script_gethint_ajax">
function showHint(str) {
if (str.length == 0) {
document.getElementById("txtHint").innerHTML = "";
return;
}
else {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("txtHint").innerHTML = this.responseText;
}
};
xmlhttp.open("POST", "idx.php?hint=" + str, true);
xmlhttp.send();
}
}
</script>
-->
<!--
<hr color=yellow>
<hr color=yellow>
<hr color=yellow>
<hr color=black>
<hr color=red>
<hr color=white>
<hr color=blue>
<h2>jax<h2>
<button onclick="jax('/jax.html');" >jax</button>
<button onclick="jax('/jax1.html');" >jax1</button>
<button onclick="jax('/jax2.html');" >jax2</button>
<button onclick="jax('/jax.php');" >jaxphp</button>
-->
<!--
<div id="div_jax"></div>
<script type="text/javascript">
var default_jaxurl = "jax.html";
var jaxurl = default_jaxurl;
// alert( "BUGS_5120 jax default_jaxurl="+default_jaxurl );
// alert( "BUGS_5120 jax jaxurl="+jaxurl );
function jax(jaxurl) {
$.ajax({
url: jaxurl,
context: document.body,
success: function(responseText) {
alert( "BUGS_5141 jax responseText="+responseText );
$("#div_jax").html(responseText);
$("#div_jax").find("script").each(function(i) {
eval($(this).text());
alert( "BUGS_5142 jax responseText="+responseText );
});
}
});
};
</script>
-->
<!--
jax.html
<p class="ajax-result info">
jax.html
The contents of this message were loaded via Ajax.
A piece of JavaScript also included in the Ajax responseText
will change the background color of this message in a few seconds.
</p>
<script id="script_jaxnew" type="text/javascript">
var timerId = setTimeout(function() {
$("#div_jax")
.find("p")
.removeClass("info")
.addClass("success");
}, 7000);
</script>
-->
<hr color=black>
<hr color=red>
<hr color=white>
<hr color=blue>
<script id=script_vars >
var version = '1.2.3';
var progid = 'ko_confirm';
var dttm = date();
</script>
<!-- js_confirm_beg -->
<!-- js_confirm_includes_beg -->
<!--
<script src="/js/confirm/js_confirm_bundled.js"></script>
-->
<link rel="stylesheet" id="bs-stylesheet" href="/js/confirm/js_confirm_bs3.css">
<link rel="stylesheet" href="/js/confirm/js_confirm_bundled.css">
<link rel="stylesheet" href="/js/confirm/js_confirm_demo.css">
<link rel="stylesheet" href="/js/confirm/js_confirm.css"/>
<script type="text/javascript" src="/js/confirm/js_confirm_demo.js"></script>
<script type="text/javascript" src="/js/confirm/js_confirm.js"></script>
<!-- js_confirm_includes_end -->
<!--
<link id=js_confirm_bs3_css src='data:/text/plain;base64,LyohCiAqIEJvb3RzdHJhcCB2My4zLjUgKGh0dHA6Ly9nZXRib290c3RyYXAuY29tKQogKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy4KICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSkKICovLyohIG5vcm1hbGl6ZS5jc3MgdjMuMC4zIHwgTUlUIExpY2Vuc2UgfCBnaXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcyAqL2h0bWx7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbXMtdGV4dC1zaXplLWFkanVzdDoxMDAlfWJvZHl7bWFyZ2luOjB9YXJ0aWNsZSxhc2lkZSxkZXRhaWxzLGZpZ2NhcHRpb24sZmlndXJlLGZvb3RlcixoZWFkZXIsaGdyb3VwLG1haW4sbWVudSxuYXYsc2VjdGlvbixzdW1tYXJ5e2Rpc3BsYXk6YmxvY2t9YXVkaW8sY2FudmFzLHByb2dyZXNzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfWF1ZGlvOm5vdChbY29udHJvbHNdKXtkaXNwbGF5Om5vbmU7aGVpZ2h0OjB9W2hpZGRlbl0sdGVtcGxhdGV7ZGlzcGxheTpub25lfWF7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1hOmFjdGl2ZSxhOmhvdmVye291dGxpbmU6MH1hYmJyW3RpdGxlXXtib3JkZXItYm90dG9tOjFweCBkb3R0ZWR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6NzAwfWRmbntmb250LXN0eWxlOml0YWxpY31oMXttYXJnaW46LjY3ZW0gMDtmb250LXNpemU6MmVtfW1hcmt7Y29sb3I6IzAwMDtiYWNrZ3JvdW5kOiNmZjB9c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdXB7dG9wOi0uNWVtfXN1Yntib3R0b206LS4yNWVtfWltZ3tib3JkZXI6MH1zdmc6bm90KDpyb290KXtvdmVyZmxvdzpoaWRkZW59ZmlndXJle21hcmdpbjoxZW0gNDBweH1ocntoZWlnaHQ6MDstd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3h9cHJle292ZXJmbG93OmF1dG99Y29kZSxrYmQscHJlLHNhbXB7Zm9udC1mYW1pbHk6bW9ub3NwYWNlLG1vbm9zcGFjZTtmb250LXNpemU6MWVtfWJ1dHRvbixpbnB1dCxvcHRncm91cCxzZWxlY3QsdGV4dGFyZWF7bWFyZ2luOjA7Zm9udDppbmhlcml0O2NvbG9yOmluaGVyaXR9YnV0dG9ue292ZXJmbG93OnZpc2libGV9YnV0dG9uLHNlbGVjdHt0ZXh0LXRyYW5zZm9ybTpub25lfWJ1dHRvbixodG1sIGlucHV0W3R5cGU9YnV0dG9uXSxpbnB1dFt0eXBlPXJlc2V0XSxpbnB1dFt0eXBlPXN1Ym1pdF17LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtjdXJzb3I6cG9pbnRlcn1idXR0b25bZGlzYWJsZWRdLGh0bWwgaW5wdXRbZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixpbnB1dDo6LW1vei1mb2N1cy1pbm5lcntwYWRkaW5nOjA7Ym9yZGVyOjB9aW5wdXR7bGluZS1oZWlnaHQ6bm9ybWFsfWlucHV0W3R5cGU9Y2hlY2tib3hdLGlucHV0W3R5cGU9cmFkaW9dey13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjB9aW5wdXRbdHlwZT1udW1iZXJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLGlucHV0W3R5cGU9bnVtYmVyXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b31pbnB1dFt0eXBlPXNlYXJjaF17LXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGR9aW5wdXRbdHlwZT1zZWFyY2hdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLGlucHV0W3R5cGU9c2VhcmNoXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX1maWVsZHNldHtwYWRkaW5nOi4zNWVtIC42MjVlbSAuNzVlbTttYXJnaW46MCAycHg7Ym9yZGVyOjFweCBzb2xpZCBzaWx2ZXJ9bGVnZW5ke3BhZGRpbmc6MDtib3JkZXI6MH10ZXh0YXJlYXtvdmVyZmxvdzphdXRvfW9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OjcwMH10YWJsZXtib3JkZXItc3BhY2luZzowO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX10ZCx0aHtwYWRkaW5nOjB9LyohIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2g1YnAvaHRtbDUtYm9pbGVycGxhdGUvYmxvYi9tYXN0ZXIvc3JjL2Nzcy9tYWluLmNzcyAqL0BtZWRpYSBwcmludHsqLDphZnRlciw6YmVmb3Jle2NvbG9yOiMwMDAhaW1wb3J0YW50O3RleHQtc2hhZG93Om5vbmUhaW1wb3J0YW50O2JhY2tncm91bmQ6MCAwIWltcG9ydGFudDstd2Via2l0LWJveC1zaGFkb3c6bm9uZSFpbXBvcnRhbnQ7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH1hLGE6dmlzaXRlZHt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfWFbaHJlZl06YWZ0ZXJ7Y29udGVudDoiICgiIGF0dHIoaHJlZikgIikifWFiYnJbdGl0bGVdOmFmdGVye2NvbnRlbnQ6IiAoIiBhdHRyKHRpdGxlKSAiKSJ9YVtocmVmXj0iamF2YXNjcmlwdDoiXTphZnRlcixhW2hyZWZePSIjIl06YWZ0ZXJ7Y29udGVudDoiIn1ibG9ja3F1b3RlLHByZXtib3JkZXI6MXB4IHNvbGlkICM5OTk7cGFnZS1icmVhay1pbnNpZGU6YXZvaWR9dGhlYWR7ZGlzcGxheTp0YWJsZS1oZWFkZXItZ3JvdXB9aW1nLHRye3BhZ2UtYnJlYWstaW5zaWRlOmF2b2lkfWltZ3ttYXgtd2lkdGg6MTAwJSFpbXBvcnRhbnR9aDIsaDMscHtvcnBoYW5zOjM7d2lkb3dzOjN9aDIsaDN7cGFnZS1icmVhay1hZnRlcjphdm9pZH0ubmF2YmFye2Rpc3BsYXk6bm9uZX0uYnRuPi5jYXJldCwuZHJvcHVwPi5idG4+LmNhcmV0e2JvcmRlci10b3AtY29sb3I6IzAwMCFpbXBvcnRhbnR9LmxhYmVse2JvcmRlcjoxcHggc29saWQgIzAwMH0udGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlIWltcG9ydGFudH0udGFibGUgdGQsLnRhYmxlIHRoe2JhY2tncm91bmQtY29sb3I6I2ZmZiFpbXBvcnRhbnR9LnRhYmxlLWJvcmRlcmVkIHRkLC50YWJsZS1ib3JkZXJlZCB0aHtib3JkZXI6MXB4IHNvbGlkICNkZGQhaW1wb3J0YW50fX1AZm9udC1mYWNle2ZvbnQtZmFtaWx5OidHbHlwaGljb25zIEhhbGZsaW5ncyc7c3JjOnVybCguLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLmVvdCk7c3JjOnVybCguLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLmVvdD8jaWVmaXgpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSx1cmwoLi4vZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci53b2ZmMikgZm9ybWF0KCd3b2ZmMicpLHVybCguLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLndvZmYpIGZvcm1hdCgnd29mZicpLHVybCguLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnR0ZikgZm9ybWF0KCd0cnVldHlwZScpLHVybCguLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnN2ZyNnbHlwaGljb25zX2hhbGZsaW5nc3JlZ3VsYXIpIGZvcm1hdCgnc3ZnJyl9LmdseXBoaWNvbntwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MXB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtZmFtaWx5OidHbHlwaGljb25zIEhhbGZsaW5ncyc7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjE7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9LmdseXBoaWNvbi1hc3RlcmlzazpiZWZvcmV7Y29udGVudDoiXDJhIn0uZ2x5cGhpY29uLXBsdXM6YmVmb3Jle2NvbnRlbnQ6IlwyYiJ9LmdseXBoaWNvbi1ldXI6YmVmb3JlLC5nbHlwaGljb24tZXVybzpiZWZvcmV7Y29udGVudDoiXDIwYWMifS5nbHlwaGljb24tbWludXM6YmVmb3Jle2NvbnRlbnQ6IlwyMjEyIn0uZ2x5cGhpY29uLWNsb3VkOmJlZm9yZXtjb250ZW50OiJcMjYwMSJ9LmdseXBoaWNvbi1lbnZlbG9wZTpiZWZvcmV7Y29udGVudDoiXDI3MDkifS5nbHlwaGljb24tcGVuY2lsOmJlZm9yZXtjb250ZW50OiJcMjcwZiJ9LmdseXBoaWNvbi1nbGFzczpiZWZvcmV7Y29udGVudDoiXGUwMDEifS5nbHlwaGljb24tbXVzaWM6YmVmb3Jle2NvbnRlbnQ6IlxlMDAyIn0uZ2x5cGhpY29uLXNlYXJjaDpiZWZvcmV7Y29udGVudDoiXGUwMDMifS5nbHlwaGljb24taGVhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxlMDA1In0uZ2x5cGhpY29uLXN0YXI6YmVmb3Jle2NvbnRlbnQ6IlxlMDA2In0uZ2x5cGhpY29uLXN0YXItZW1wdHk6YmVmb3Jle2NvbnRlbnQ6IlxlMDA3In0uZ2x5cGhpY29uLXVzZXI6YmVmb3Jle2NvbnRlbnQ6IlxlMDA4In0uZ2x5cGhpY29uLWZpbG06YmVmb3Jle2NvbnRlbnQ6IlxlMDA5In0uZ2x5cGhpY29uLXRoLWxhcmdlOmJlZm9yZXtjb250ZW50OiJcZTAxMCJ9LmdseXBoaWNvbi10aDpiZWZvcmV7Y29udGVudDoiXGUwMTEifS5nbHlwaGljb24tdGgtbGlzdDpiZWZvcmV7Y29udGVudDoiXGUwMTIifS5nbHlwaGljb24tb2s6YmVmb3Jle2NvbnRlbnQ6IlxlMDEzIn0uZ2x5cGhpY29uLXJlbW92ZTpiZWZvcmV7Y29udGVudDoiXGUwMTQifS5nbHlwaGljb24tem9vbS1pbjpiZWZvcmV7Y29udGVudDoiXGUwMTUifS5nbHlwaGljb24tem9vbS1vdXQ6YmVmb3Jle2NvbnRlbnQ6IlxlMDE2In0uZ2x5cGhpY29uLW9mZjpiZWZvcmV7Y29udGVudDoiXGUwMTcifS5nbHlwaGljb24tc2lnbmFsOmJlZm9yZXtjb250ZW50OiJcZTAxOCJ9LmdseXBoaWNvbi1jb2c6YmVmb3Jle2NvbnRlbnQ6IlxlMDE5In0uZ2x5cGhpY29uLXRyYXNoOmJlZm9yZXtjb250ZW50OiJcZTAyMCJ9LmdseXBoaWNvbi1ob21lOmJlZm9yZXtjb250ZW50OiJcZTAyMSJ9LmdseXBoaWNvbi1maWxlOmJlZm9yZXtjb250ZW50OiJcZTAyMiJ9LmdseXBoaWNvbi10aW1lOmJlZm9yZXtjb250ZW50OiJcZTAyMyJ9LmdseXBoaWNvbi1yb2FkOmJlZm9yZXtjb250ZW50OiJcZTAyNCJ9LmdseXBoaWNvbi1kb3dubG9hZC1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxlMDI1In0uZ2x5cGhpY29uLWRvd25sb2FkOmJlZm9yZXtjb250ZW50OiJcZTAyNiJ9LmdseXBoaWNvbi11cGxvYWQ6YmVmb3Jle2NvbnRlbnQ6IlxlMDI3In0uZ2x5cGhpY29uLWluYm94OmJlZm9yZXtjb250ZW50OiJcZTAyOCJ9LmdseXBoaWNvbi1wbGF5LWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGUwMjkifS5nbHlwaGljb24tcmVwZWF0OmJlZm9yZXtjb250ZW50OiJcZTAzMCJ9LmdseXBoaWNvbi1yZWZyZXNoOmJlZm9yZXtjb250ZW50OiJcZTAzMSJ9LmdseXBoaWNvbi1saXN0LWFsdDpiZWZvcmV7Y29udGVudDoiXGUwMzIifS5nbHlwaGljb24tbG9jazpiZWZvcmV7Y29udGVudDoiXGUwMzMifS5nbHlwaGljb24tZmxhZzpiZWZvcmV7Y29udGVudDoiXGUwMzQifS5nbHlwaGljb24taGVhZHBob25lczpiZWZvcmV7Y29udGVudDoiXGUwMzUifS5nbHlwaGljb24tdm9sdW1lLW9mZjpiZWZvcmV7Y29udGVudDoiXGUwMzYifS5nbHlwaGljb24tdm9sdW1lLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxlMDM3In0uZ2x5cGhpY29uLXZvbHVtZS11cDpiZWZvcmV7Y29udGVudDoiXGUwMzgifS5nbHlwaGljb24tcXJjb2RlOmJlZm9yZXtjb250ZW50OiJcZTAzOSJ9LmdseXBoaWNvbi1iYXJjb2RlOmJlZm9yZXtjb250ZW50OiJcZTA0MCJ9LmdseXBoaWNvbi10YWc6YmVmb3Jle2NvbnRlbnQ6IlxlMDQxIn0uZ2x5cGhpY29uLXRhZ3M6YmVmb3Jle2NvbnRlbnQ6IlxlMDQyIn0uZ2x5cGhpY29uLWJvb2s6YmVmb3Jle2NvbnRlbnQ6IlxlMDQzIn0uZ2x5cGhpY29uLWJvb2ttYXJrOmJlZm9yZXtjb250ZW50OiJcZTA0NCJ9LmdseXBoaWNvbi1wcmludDpiZWZvcmV7Y29udGVudDoiXGUwNDUifS5nbHlwaGljb24tY2FtZXJhOmJlZm9yZXtjb250ZW50OiJcZTA0NiJ9LmdseXBoaWNvbi1mb250OmJlZm9yZXtjb250ZW50OiJcZTA0NyJ9LmdseXBoaWNvbi1ib2xkOmJlZm9yZXtjb250ZW50OiJcZTA0OCJ9LmdseXBoaWNvbi1pdGFsaWM6YmVmb3Jle2NvbnRlbnQ6IlxlMDQ5In0uZ2x5cGhpY29uLXRleHQtaGVpZ2h0OmJlZm9yZXtjb250ZW50OiJcZTA1MCJ9LmdseXBoaWNvbi10ZXh0LXdpZHRoOmJlZm9yZXtjb250ZW50OiJcZTA1MSJ9LmdseXBoaWNvbi1hbGlnbi1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZTA1MiJ9LmdseXBoaWNvbi1hbGlnbi1jZW50ZXI6YmVmb3Jle2NvbnRlbnQ6IlxlMDUzIn0uZ2x5cGhpY29uLWFsaWduLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZTA1NCJ9LmdseXBoaWNvbi1hbGlnbi1qdXN0aWZ5OmJlZm9yZXtjb250ZW50OiJcZTA1NSJ9LmdseXBoaWNvbi1saXN0OmJlZm9yZXtjb250ZW50OiJcZTA1NiJ9LmdseXBoaWNvbi1pbmRlbnQtbGVmdDpiZWZvcmV7Y29udGVudDoiXGUwNTcifS5nbHlwaGljb24taW5kZW50LXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZTA1OCJ9LmdseXBoaWNvbi1mYWNldGltZS12aWRlbzpiZWZvcmV7Y29udGVudDoiXGUwNTkifS5nbHlwaGljb24tcGljdHVyZTpiZWZvcmV7Y29udGVudDoiXGUwNjAifS5nbHlwaGljb24tbWFwLW1hcmtlcjpiZWZvcmV7Y29udGVudDoiXGUwNjIifS5nbHlwaGljb24tYWRqdXN0OmJlZm9yZXtjb250ZW50OiJcZTA2MyJ9LmdseXBoaWNvbi10aW50OmJlZm9yZXtjb250ZW50OiJcZTA2NCJ9LmdseXBoaWNvbi1lZGl0OmJlZm9yZXtjb250ZW50OiJcZTA2NSJ9LmdseXBoaWNvbi1zaGFyZTpiZWZvcmV7Y29udGVudDoiXGUwNjYifS5nbHlwaGljb24tY2hlY2s6YmVmb3Jle2NvbnRlbnQ6IlxlMDY3In0uZ2x5cGhpY29uLW1vdmU6YmVmb3Jle2NvbnRlbnQ6IlxlMDY4In0uZ2x5cGhpY29uLXN0ZXAtYmFja3dhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxlMDY5In0uZ2x5cGhpY29uLWZhc3QtYmFja3dhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxlMDcwIn0uZ2x5cGhpY29uLWJhY2t3YXJkOmJlZm9yZXtjb250ZW50OiJcZTA3MSJ9LmdseXBoaWNvbi1wbGF5OmJlZm9yZXtjb250ZW50OiJcZTA3MiJ9LmdseXBoaWNvbi1wYXVzZTpiZWZvcmV7Y29udGVudDoiXGUwNzMifS5nbHlwaGljb24tc3RvcDpiZWZvcmV7Y29udGVudDoiXGUwNzQifS5nbHlwaGljb24tZm9yd2FyZDpiZWZvcmV7Y29udGVudDoiXGUwNzUifS5nbHlwaGljb24tZmFzdC1mb3J3YXJkOmJlZm9yZXtjb250ZW50OiJcZTA3NiJ9LmdseXBoaWNvbi1zdGVwLWZvcndhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxlMDc3In0uZ2x5cGhpY29uLWVqZWN0OmJlZm9yZXtjb250ZW50OiJcZTA3OCJ9LmdseXBoaWNvbi1jaGV2cm9uLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxlMDc5In0uZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxlMDgwIn0uZ2x5cGhpY29uLXBsdXMtc2lnbjpiZWZvcmV7Y29udGVudDoiXGUwODEifS5nbHlwaGljb24tbWludXMtc2lnbjpiZWZvcmV7Y29udGVudDoiXGUwODIifS5nbHlwaGljb24tcmVtb3ZlLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxlMDgzIn0uZ2x5cGhpY29uLW9rLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxlMDg0In0uZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxlMDg1In0uZ2x5cGhpY29uLWluZm8tc2lnbjpiZWZvcmV7Y29udGVudDoiXGUwODYifS5nbHlwaGljb24tc2NyZWVuc2hvdDpiZWZvcmV7Y29udGVudDoiXGUwODcifS5nbHlwaGljb24tcmVtb3ZlLWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGUwODgifS5nbHlwaGljb24tb2stY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZTA4OSJ9LmdseXBoaWNvbi1iYW4tY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZTA5MCJ9LmdseXBoaWNvbi1hcnJvdy1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZTA5MSJ9LmdseXBoaWNvbi1hcnJvdy1yaWdodDpiZWZvcmV7Y29udGVudDoiXGUwOTIifS5nbHlwaGljb24tYXJyb3ctdXA6YmVmb3Jle2NvbnRlbnQ6IlxlMDkzIn0uZ2x5cGhpY29uLWFycm93LWRvd246YmVmb3Jle2NvbnRlbnQ6IlxlMDk0In0uZ2x5cGhpY29uLXNoYXJlLWFsdDpiZWZvcmV7Y29udGVudDoiXGUwOTUifS5nbHlwaGljb24tcmVzaXplLWZ1bGw6YmVmb3Jle2NvbnRlbnQ6IlxlMDk2In0uZ2x5cGhpY29uLXJlc2l6ZS1zbWFsbDpiZWZvcmV7Y29udGVudDoiXGUwOTcifS5nbHlwaGljb24tZXhjbGFtYXRpb24tc2lnbjpiZWZvcmV7Y29udGVudDoiXGUxMDEifS5nbHlwaGljb24tZ2lmdDpiZWZvcmV7Y29udGVudDoiXGUxMDIifS5nbHlwaGljb24tbGVhZjpiZWZvcmV7Y29udGVudDoiXGUxMDMifS5nbHlwaGljb24tZmlyZTpiZWZvcmV7Y29udGVudDoiXGUxMDQifS5nbHlwaGljb24tZXllLW9wZW46YmVmb3Jle2NvbnRlbnQ6IlxlMTA1In0uZ2x5cGhpY29uLWV5ZS1jbG9zZTpiZWZvcmV7Y29udGVudDoiXGUxMDYifS5nbHlwaGljb24td2FybmluZy1zaWduOmJlZm9yZXtjb250ZW50OiJcZTEwNyJ9LmdseXBoaWNvbi1wbGFuZTpiZWZvcmV7Y29udGVudDoiXGUxMDgifS5nbHlwaGljb24tY2FsZW5kYXI6YmVmb3Jle2NvbnRlbnQ6IlxlMTA5In0uZ2x5cGhpY29uLXJhbmRvbTpiZWZvcmV7Y29udGVudDoiXGUxMTAifS5nbHlwaGljb24tY29tbWVudDpiZWZvcmV7Y29udGVudDoiXGUxMTEifS5nbHlwaGljb24tbWFnbmV0OmJlZm9yZXtjb250ZW50OiJcZTExMiJ9LmdseXBoaWNvbi1jaGV2cm9uLXVwOmJlZm9yZXtjb250ZW50OiJcZTExMyJ9LmdseXBoaWNvbi1jaGV2cm9uLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxlMTE0In0uZ2x5cGhpY29uLXJldHdlZXQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTE1In0uZ2x5cGhpY29uLXNob3BwaW5nLWNhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTE2In0uZ2x5cGhpY29uLWZvbGRlci1jbG9zZTpiZWZvcmV7Y29udGVudDoiXGUxMTcifS5nbHlwaGljb24tZm9sZGVyLW9wZW46YmVmb3Jle2NvbnRlbnQ6IlxlMTE4In0uZ2x5cGhpY29uLXJlc2l6ZS12ZXJ0aWNhbDpiZWZvcmV7Y29udGVudDoiXGUxMTkifS5nbHlwaGljb24tcmVzaXplLWhvcml6b250YWw6YmVmb3Jle2NvbnRlbnQ6IlxlMTIwIn0uZ2x5cGhpY29uLWhkZDpiZWZvcmV7Y29udGVudDoiXGUxMjEifS5nbHlwaGljb24tYnVsbGhvcm46YmVmb3Jle2NvbnRlbnQ6IlxlMTIyIn0uZ2x5cGhpY29uLWJlbGw6YmVmb3Jle2NvbnRlbnQ6IlxlMTIzIn0uZ2x5cGhpY29uLWNlcnRpZmljYXRlOmJlZm9yZXtjb250ZW50OiJcZTEyNCJ9LmdseXBoaWNvbi10aHVtYnMtdXA6YmVmb3Jle2NvbnRlbnQ6IlxlMTI1In0uZ2x5cGhpY29uLXRodW1icy1kb3duOmJlZm9yZXtjb250ZW50OiJcZTEyNiJ9LmdseXBoaWNvbi1oYW5kLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZTEyNyJ9LmdseXBoaWNvbi1oYW5kLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTI4In0uZ2x5cGhpY29uLWhhbmQtdXA6YmVmb3Jle2NvbnRlbnQ6IlxlMTI5In0uZ2x5cGhpY29uLWhhbmQtZG93bjpiZWZvcmV7Y29udGVudDoiXGUxMzAifS5nbHlwaGljb24tY2lyY2xlLWFycm93LXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZTEzMSJ9LmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctbGVmdDpiZWZvcmV7Y29udGVudDoiXGUxMzIifS5nbHlwaGljb24tY2lyY2xlLWFycm93LXVwOmJlZm9yZXtjb250ZW50OiJcZTEzMyJ9LmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctZG93bjpiZWZvcmV7Y29udGVudDoiXGUxMzQifS5nbHlwaGljb24tZ2xvYmU6YmVmb3Jle2NvbnRlbnQ6IlxlMTM1In0uZ2x5cGhpY29uLXdyZW5jaDpiZWZvcmV7Y29udGVudDoiXGUxMzYifS5nbHlwaGljb24tdGFza3M6YmVmb3Jle2NvbnRlbnQ6IlxlMTM3In0uZ2x5cGhpY29uLWZpbHRlcjpiZWZvcmV7Y29udGVudDoiXGUxMzgifS5nbHlwaGljb24tYnJpZWZjYXNlOmJlZm9yZXtjb250ZW50OiJcZTEzOSJ9LmdseXBoaWNvbi1mdWxsc2NyZWVuOmJlZm9yZXtjb250ZW50OiJcZTE0MCJ9LmdseXBoaWNvbi1kYXNoYm9hcmQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTQxIn0uZ2x5cGhpY29uLXBhcGVyY2xpcDpiZWZvcmV7Y29udGVudDoiXGUxNDIifS5nbHlwaGljb24taGVhcnQtZW1wdHk6YmVmb3Jle2NvbnRlbnQ6IlxlMTQzIn0uZ2x5cGhpY29uLWxpbms6YmVmb3Jle2NvbnRlbnQ6IlxlMTQ0In0uZ2x5cGhpY29uLXBob25lOmJlZm9yZXtjb250ZW50OiJcZTE0NSJ9LmdseXBoaWNvbi1wdXNocGluOmJlZm9yZXtjb250ZW50OiJcZTE0NiJ9LmdseXBoaWNvbi11c2Q6YmVmb3Jle2NvbnRlbnQ6IlxlMTQ4In0uZ2x5cGhpY29uLWdicDpiZWZvcmV7Y29udGVudDoiXGUxNDkifS5nbHlwaGljb24tc29ydDpiZWZvcmV7Y29udGVudDoiXGUxNTAifS5nbHlwaGljb24tc29ydC1ieS1hbHBoYWJldDpiZWZvcmV7Y29udGVudDoiXGUxNTEifS5nbHlwaGljb24tc29ydC1ieS1hbHBoYWJldC1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTUyIn0uZ2x5cGhpY29uLXNvcnQtYnktb3JkZXI6YmVmb3Jle2NvbnRlbnQ6IlxlMTUzIn0uZ2x5cGhpY29uLXNvcnQtYnktb3JkZXItYWx0OmJlZm9yZXtjb250ZW50OiJcZTE1NCJ9LmdseXBoaWNvbi1zb3J0LWJ5LWF0dHJpYnV0ZXM6YmVmb3Jle2NvbnRlbnQ6IlxlMTU1In0uZ2x5cGhpY29uLXNvcnQtYnktYXR0cmlidXRlcy1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTU2In0uZ2x5cGhpY29uLXVuY2hlY2tlZDpiZWZvcmV7Y29udGVudDoiXGUxNTcifS5nbHlwaGljb24tZXhwYW5kOmJlZm9yZXtjb250ZW50OiJcZTE1OCJ9LmdseXBoaWNvbi1jb2xsYXBzZS1kb3duOmJlZm9yZXtjb250ZW50OiJcZTE1OSJ9LmdseXBoaWNvbi1jb2xsYXBzZS11cDpiZWZvcmV7Y29udGVudDoiXGUxNjAifS5nbHlwaGljb24tbG9nLWluOmJlZm9yZXtjb250ZW50OiJcZTE2MSJ9LmdseXBoaWNvbi1mbGFzaDpiZWZvcmV7Y29udGVudDoiXGUxNjIifS5nbHlwaGljb24tbG9nLW91dDpiZWZvcmV7Y29udGVudDoiXGUxNjMifS5nbHlwaGljb24tbmV3LXdpbmRvdzpiZWZvcmV7Y29udGVudDoiXGUxNjQifS5nbHlwaGljb24tcmVjb3JkOmJlZm9yZXtjb250ZW50OiJcZTE2NSJ9LmdseXBoaWNvbi1zYXZlOmJlZm9yZXtjb250ZW50OiJcZTE2NiJ9LmdseXBoaWNvbi1vcGVuOmJlZm9yZXtjb250ZW50OiJcZTE2NyJ9LmdseXBoaWNvbi1zYXZlZDpiZWZvcmV7Y29udGVudDoiXGUxNjgifS5nbHlwaGljb24taW1wb3J0OmJlZm9yZXtjb250ZW50OiJcZTE2OSJ9LmdseXBoaWNvbi1leHBvcnQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTcwIn0uZ2x5cGhpY29uLXNlbmQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTcxIn0uZ2x5cGhpY29uLWZsb3BweS1kaXNrOmJlZm9yZXtjb250ZW50OiJcZTE3MiJ9LmdseXBoaWNvbi1mbG9wcHktc2F2ZWQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTczIn0uZ2x5cGhpY29uLWZsb3BweS1yZW1vdmU6YmVmb3Jle2NvbnRlbnQ6IlxlMTc0In0uZ2x5cGhpY29uLWZsb3BweS1zYXZlOmJlZm9yZXtjb250ZW50OiJcZTE3NSJ9LmdseXBoaWNvbi1mbG9wcHktb3BlbjpiZWZvcmV7Y29udGVudDoiXGUxNzYifS5nbHlwaGljb24tY3JlZGl0LWNhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTc3In0uZ2x5cGhpY29uLXRyYW5zZmVyOmJlZm9yZXtjb250ZW50OiJcZTE3OCJ9LmdseXBoaWNvbi1jdXRsZXJ5OmJlZm9yZXtjb250ZW50OiJcZTE3OSJ9LmdseXBoaWNvbi1oZWFkZXI6YmVmb3Jle2NvbnRlbnQ6IlxlMTgwIn0uZ2x5cGhpY29uLWNvbXByZXNzZWQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTgxIn0uZ2x5cGhpY29uLWVhcnBob25lOmJlZm9yZXtjb250ZW50OiJcZTE4MiJ9LmdseXBoaWNvbi1waG9uZS1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTgzIn0uZ2x5cGhpY29uLXRvd2VyOmJlZm9yZXtjb250ZW50OiJcZTE4NCJ9LmdseXBoaWNvbi1zdGF0czpiZWZvcmV7Y29udGVudDoiXGUxODUifS5nbHlwaGljb24tc2QtdmlkZW86YmVmb3Jle2NvbnRlbnQ6IlxlMTg2In0uZ2x5cGhpY29uLWhkLXZpZGVvOmJlZm9yZXtjb250ZW50OiJcZTE4NyJ9LmdseXBoaWNvbi1zdWJ0aXRsZXM6YmVmb3Jle2NvbnRlbnQ6IlxlMTg4In0uZ2x5cGhpY29uLXNvdW5kLXN0ZXJlbzpiZWZvcmV7Y29udGVudDoiXGUxODkifS5nbHlwaGljb24tc291bmQtZG9sYnk6YmVmb3Jle2NvbnRlbnQ6IlxlMTkwIn0uZ2x5cGhpY29uLXNvdW5kLTUtMTpiZWZvcmV7Y29udGVudDoiXGUxOTEifS5nbHlwaGljb24tc291bmQtNi0xOmJlZm9yZXtjb250ZW50OiJcZTE5MiJ9LmdseXBoaWNvbi1zb3VuZC03LTE6YmVmb3Jle2NvbnRlbnQ6IlxlMTkzIn0uZ2x5cGhpY29uLWNvcHlyaWdodC1tYXJrOmJlZm9yZXtjb250ZW50OiJcZTE5NCJ9LmdseXBoaWNvbi1yZWdpc3RyYXRpb24tbWFyazpiZWZvcmV7Y29udGVudDoiXGUxOTUifS5nbHlwaGljb24tY2xvdWQtZG93bmxvYWQ6YmVmb3Jle2NvbnRlbnQ6IlxlMTk3In0uZ2x5cGhpY29uLWNsb3VkLXVwbG9hZDpiZWZvcmV7Y29udGVudDoiXGUxOTgifS5nbHlwaGljb24tdHJlZS1jb25pZmVyOmJlZm9yZXtjb250ZW50OiJcZTE5OSJ9LmdseXBoaWNvbi10cmVlLWRlY2lkdW91czpiZWZvcmV7Y29udGVudDoiXGUyMDAifS5nbHlwaGljb24tY2Q6YmVmb3Jle2NvbnRlbnQ6IlxlMjAxIn0uZ2x5cGhpY29uLXNhdmUtZmlsZTpiZWZvcmV7Y29udGVudDoiXGUyMDIifS5nbHlwaGljb24tb3Blbi1maWxlOmJlZm9yZXtjb250ZW50OiJcZTIwMyJ9LmdseXBoaWNvbi1sZXZlbC11cDpiZWZvcmV7Y29udGVudDoiXGUyMDQifS5nbHlwaGljb24tY29weTpiZWZvcmV7Y29udGVudDoiXGUyMDUifS5nbHlwaGljb24tcGFzdGU6YmVmb3Jle2NvbnRlbnQ6IlxlMjA2In0uZ2x5cGhpY29uLWFsZXJ0OmJlZm9yZXtjb250ZW50OiJcZTIwOSJ9LmdseXBoaWNvbi1lcXVhbGl6ZXI6YmVmb3Jle2NvbnRlbnQ6IlxlMjEwIn0uZ2x5cGhpY29uLWtpbmc6YmVmb3Jle2NvbnRlbnQ6IlxlMjExIn0uZ2x5cGhpY29uLXF1ZWVuOmJlZm9yZXtjb250ZW50OiJcZTIxMiJ9LmdseXBoaWNvbi1wYXduOmJlZm9yZXtjb250ZW50OiJcZTIxMyJ9LmdseXBoaWNvbi1iaXNob3A6YmVmb3Jle2NvbnRlbnQ6IlxlMjE0In0uZ2x5cGhpY29uLWtuaWdodDpiZWZvcmV7Y29udGVudDoiXGUyMTUifS5nbHlwaGljb24tYmFieS1mb3JtdWxhOmJlZm9yZXtjb250ZW50OiJcZTIxNiJ9LmdseXBoaWNvbi10ZW50OmJlZm9yZXtjb250ZW50OiJcMjZmYSJ9LmdseXBoaWNvbi1ibGFja2JvYXJkOmJlZm9yZXtjb250ZW50OiJcZTIxOCJ9LmdseXBoaWNvbi1iZWQ6YmVmb3Jle2NvbnRlbnQ6IlxlMjE5In0uZ2x5cGhpY29uLWFwcGxlOmJlZm9yZXtjb250ZW50OiJcZjhmZiJ9LmdseXBoaWNvbi1lcmFzZTpiZWZvcmV7Y29udGVudDoiXGUyMjEifS5nbHlwaGljb24taG91cmdsYXNzOmJlZm9yZXtjb250ZW50OiJcMjMxYiJ9LmdseXBoaWNvbi1sYW1wOmJlZm9yZXtjb250ZW50OiJcZTIyMyJ9LmdseXBoaWNvbi1kdXBsaWNhdGU6YmVmb3Jle2NvbnRlbnQ6IlxlMjI0In0uZ2x5cGhpY29uLXBpZ2d5LWJhbms6YmVmb3Jle2NvbnRlbnQ6IlxlMjI1In0uZ2x5cGhpY29uLXNjaXNzb3JzOmJlZm9yZXtjb250ZW50OiJcZTIyNiJ9LmdseXBoaWNvbi1iaXRjb2luOmJlZm9yZXtjb250ZW50OiJcZTIyNyJ9LmdseXBoaWNvbi1idGM6YmVmb3Jle2NvbnRlbnQ6IlxlMjI3In0uZ2x5cGhpY29uLXhidDpiZWZvcmV7Y29udGVudDoiXGUyMjcifS5nbHlwaGljb24teWVuOmJlZm9yZXtjb250ZW50OiJcMDBhNSJ9LmdseXBoaWNvbi1qcHk6YmVmb3Jle2NvbnRlbnQ6IlwwMGE1In0uZ2x5cGhpY29uLXJ1YmxlOmJlZm9yZXtjb250ZW50OiJcMjBiZCJ9LmdseXBoaWNvbi1ydWI6YmVmb3Jle2NvbnRlbnQ6IlwyMGJkIn0uZ2x5cGhpY29uLXNjYWxlOmJlZm9yZXtjb250ZW50OiJcZTIzMCJ9LmdseXBoaWNvbi1pY2UtbG9sbHk6YmVmb3Jle2NvbnRlbnQ6IlxlMjMxIn0uZ2x5cGhpY29uLWljZS1sb2xseS10YXN0ZWQ6YmVmb3Jle2NvbnRlbnQ6IlxlMjMyIn0uZ2x5cGhpY29uLWVkdWNhdGlvbjpiZWZvcmV7Y29udGVudDoiXGUyMzMifS5nbHlwaGljb24tb3B0aW9uLWhvcml6b250YWw6YmVmb3Jle2NvbnRlbnQ6IlxlMjM0In0uZ2x5cGhpY29uLW9wdGlvbi12ZXJ0aWNhbDpiZWZvcmV7Y29udGVudDoiXGUyMzUifS5nbHlwaGljb24tbWVudS1oYW1idXJnZXI6YmVmb3Jle2NvbnRlbnQ6IlxlMjM2In0uZ2x5cGhpY29uLW1vZGFsLXdpbmRvdzpiZWZvcmV7Y29udGVudDoiXGUyMzcifS5nbHlwaGljb24tb2lsOmJlZm9yZXtjb250ZW50OiJcZTIzOCJ9LmdseXBoaWNvbi1ncmFpbjpiZWZvcmV7Y29udGVudDoiXGUyMzkifS5nbHlwaGljb24tc3VuZ2xhc3NlczpiZWZvcmV7Y29udGVudDoiXGUyNDAifS5nbHlwaGljb24tdGV4dC1zaXplOmJlZm9yZXtjb250ZW50OiJcZTI0MSJ9LmdseXBoaWNvbi10ZXh0LWNvbG9yOmJlZm9yZXtjb250ZW50OiJcZTI0MiJ9LmdseXBoaWNvbi10ZXh0LWJhY2tncm91bmQ6YmVmb3Jle2NvbnRlbnQ6IlxlMjQzIn0uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi10b3A6YmVmb3Jle2NvbnRlbnQ6IlxlMjQ0In0uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi1ib3R0b206YmVmb3Jle2NvbnRlbnQ6IlxlMjQ1In0uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi1ob3Jpem9udGFsOmJlZm9yZXtjb250ZW50OiJcZTI0NiJ9LmdseXBoaWNvbi1vYmplY3QtYWxpZ24tbGVmdDpiZWZvcmV7Y29udGVudDoiXGUyNDcifS5nbHlwaGljb24tb2JqZWN0LWFsaWduLXZlcnRpY2FsOmJlZm9yZXtjb250ZW50OiJcZTI0OCJ9LmdseXBoaWNvbi1vYmplY3QtYWxpZ24tcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxlMjQ5In0uZ2x5cGhpY29uLXRyaWFuZ2xlLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZTI1MCJ9LmdseXBoaWNvbi10cmlhbmdsZS1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZTI1MSJ9LmdseXBoaWNvbi10cmlhbmdsZS1ib3R0b206YmVmb3Jle2NvbnRlbnQ6IlxlMjUyIn0uZ2x5cGhpY29uLXRyaWFuZ2xlLXRvcDpiZWZvcmV7Y29udGVudDoiXGUyNTMifS5nbHlwaGljb24tY29uc29sZTpiZWZvcmV7Y29udGVudDoiXGUyNTQifS5nbHlwaGljb24tc3VwZXJzY3JpcHQ6YmVmb3Jle2NvbnRlbnQ6IlxlMjU1In0uZ2x5cGhpY29uLXN1YnNjcmlwdDpiZWZvcmV7Y29udGVudDoiXGUyNTYifS5nbHlwaGljb24tbWVudS1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZTI1NyJ9LmdseXBoaWNvbi1tZW51LXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZTI1OCJ9LmdseXBoaWNvbi1tZW51LWRvd246YmVmb3Jle2NvbnRlbnQ6IlxlMjU5In0uZ2x5cGhpY29uLW1lbnUtdXA6YmVmb3Jle2NvbnRlbnQ6IlxlMjYwIn0qey13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH06YWZ0ZXIsOmJlZm9yZXstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9aHRtbHtmb250LXNpemU6MTBweDstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKX1ib2R5e2ZvbnQtZmFtaWx5OiJIZWx2ZXRpY2EgTmV1ZSIsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS40Mjg1NzE0Mztjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZmZn1idXR0b24saW5wdXQsc2VsZWN0LHRleHRhcmVhe2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdH1he2NvbG9yOiMzMzdhYjc7dGV4dC1kZWNvcmF0aW9uOm5vbmV9YTpmb2N1cyxhOmhvdmVye2NvbG9yOiMyMzUyN2M7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX1hOmZvY3Vze291dGxpbmU6dGhpbiBkb3R0ZWQ7b3V0bGluZTo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6LTJweH1maWd1cmV7bWFyZ2luOjB9aW1ne3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2Fyb3VzZWwtaW5uZXI+Lml0ZW0+YT5pbWcsLmNhcm91c2VsLWlubmVyPi5pdGVtPmltZywuaW1nLXJlc3BvbnNpdmUsLnRodW1ibmFpbCBhPmltZywudGh1bWJuYWlsPmltZ3tkaXNwbGF5OmJsb2NrO21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvfS5pbWctcm91bmRlZHtib3JkZXItcmFkaXVzOjZweH0uaW1nLXRodW1ibmFpbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0bztwYWRkaW5nOjRweDtsaW5lLWhlaWdodDoxLjQyODU3MTQzO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC10cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXQ7LW8tdHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dH0uaW1nLWNpcmNsZXtib3JkZXItcmFkaXVzOjUwJX1ocnttYXJnaW4tdG9wOjIwcHg7bWFyZ2luLWJvdHRvbToyMHB4O2JvcmRlcjowO2JvcmRlci10b3A6MXB4IHNvbGlkICNlZWV9LnNyLW9ubHl7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O2hlaWdodDoxcHg7cGFkZGluZzowO21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtjbGlwOnJlY3QoMCwwLDAsMCk7Ym9yZGVyOjB9LnNyLW9ubHktZm9jdXNhYmxlOmFjdGl2ZSwuc3Itb25seS1mb2N1c2FibGU6Zm9jdXN7cG9zaXRpb246c3RhdGljO3dpZHRoOmF1dG87aGVpZ2h0OmF1dG87bWFyZ2luOjA7b3ZlcmZsb3c6dmlzaWJsZTtjbGlwOmF1dG99W3JvbGU9YnV0dG9uXXtjdXJzb3I6cG9pbnRlcn0uaDEsLmgyLC5oMywuaDQsLmg1LC5oNixoMSxoMixoMyxoNCxoNSxoNntmb250LWZhbWlseTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoxLjE7Y29sb3I6aW5oZXJpdH0uaDEgLnNtYWxsLC5oMSBzbWFsbCwuaDIgLnNtYWxsLC5oMiBzbWFsbCwuaDMgLnNtYWxsLC5oMyBzbWFsbCwuaDQgLnNtYWxsLC5oNCBzbWFsbCwuaDUgLnNtYWxsLC5oNSBzbWFsbCwuaDYgLnNtYWxsLC5oNiBzbWFsbCxoMSAuc21hbGwsaDEgc21hbGwsaDIgLnNtYWxsLGgyIHNtYWxsLGgzIC5zbWFsbCxoMyBzbWFsbCxoNCAuc21hbGwsaDQgc21hbGwsaDUgLnNtYWxsLGg1IHNtYWxsLGg2IC5zbWFsbCxoNiBzbWFsbHtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MTtjb2xvcjojNzc3fS5oMSwuaDIsLmgzLGgxLGgyLGgze21hcmdpbi10b3A6MjBweDttYXJnaW4tYm90dG9tOjEwcHh9LmgxIC5zbWFsbCwuaDEgc21hbGwsLmgyIC5zbWFsbCwuaDIgc21hbGwsLmgzIC5zbWFsbCwuaDMgc21hbGwsaDEgLnNtYWxsLGgxIHNtYWxsLGgyIC5zbWFsbCxoMiBzbWFsbCxoMyAuc21hbGwsaDMgc21hbGx7Zm9udC1zaXplOjY1JX0uaDQsLmg1LC5oNixoNCxoNSxoNnttYXJnaW4tdG9wOjEwcHg7bWFyZ2luLWJvdHRvbToxMHB4fS5oNCAuc21hbGwsLmg0IHNtYWxsLC5oNSAuc21hbGwsLmg1IHNtYWxsLC5oNiAuc21hbGwsLmg2IHNtYWxsLGg0IC5zbWFsbCxoNCBzbWFsbCxoNSAuc21hbGwsaDUgc21hbGwsaDYgLnNtYWxsLGg2IHNtYWxse2ZvbnQtc2l6ZTo3NSV9LmgxLGgxe2ZvbnQtc2l6ZTozNnB4fS5oMixoMntmb250LXNpemU6MzBweH0uaDMsaDN7Zm9udC1zaXplOjI0cHh9Lmg0LGg0e2ZvbnQtc2l6ZToxOHB4fS5oNSxoNXtmb250LXNpemU6MTRweH0uaDYsaDZ7Zm9udC1zaXplOjEycHh9cHttYXJnaW46MCAwIDEwcHh9LmxlYWR7bWFyZ2luLWJvdHRvbToyMHB4O2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjMwMDtsaW5lLWhlaWdodDoxLjR9QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5sZWFke2ZvbnQtc2l6ZToyMXB4fX0uc21hbGwsc21hbGx7Zm9udC1zaXplOjg1JX0ubWFyayxtYXJre3BhZGRpbmc6LjJlbTtiYWNrZ3JvdW5kLWNvbG9yOiNmY2Y4ZTN9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LnRleHQtanVzdGlmeXt0ZXh0LWFsaWduOmp1c3RpZnl9LnRleHQtbm93cmFwe3doaXRlLXNwYWNlOm5vd3JhcH0udGV4dC1sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlfS50ZXh0LXVwcGVyY2FzZXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LnRleHQtY2FwaXRhbGl6ZXt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplfS50ZXh0LW11dGVke2NvbG9yOiM3Nzd9LnRleHQtcHJpbWFyeXtjb2xvcjojMzM3YWI3fWEudGV4dC1wcmltYXJ5OmZvY3VzLGEudGV4dC1wcmltYXJ5OmhvdmVye2NvbG9yOiMyODYwOTB9LnRleHQtc3VjY2Vzc3tjb2xvcjojM2M3NjNkfWEudGV4dC1zdWNjZXNzOmZvY3VzLGEudGV4dC1zdWNjZXNzOmhvdmVye2NvbG9yOiMyYjU0MmN9LnRleHQtaW5mb3tjb2xvcjojMzE3MDhmfWEudGV4dC1pbmZvOmZvY3VzLGEudGV4dC1pbmZvOmhvdmVye2NvbG9yOiMyNDUyNjl9LnRleHQtd2FybmluZ3tjb2xvcjojOGE2ZDNifWEudGV4dC13YXJuaW5nOmZvY3VzLGEudGV4dC13YXJuaW5nOmhvdmVye2NvbG9yOiM2NjUxMmN9LnRleHQtZGFuZ2Vye2NvbG9yOiNhOTQ0NDJ9YS50ZXh0LWRhbmdlcjpmb2N1cyxhLnRleHQtZGFuZ2VyOmhvdmVye2NvbG9yOiM4NDM1MzR9LmJnLXByaW1hcnl7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMzMzdhYjd9YS5iZy1wcmltYXJ5OmZvY3VzLGEuYmctcHJpbWFyeTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyODYwOTB9LmJnLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojZGZmMGQ4fWEuYmctc3VjY2Vzczpmb2N1cyxhLmJnLXN1Y2Nlc3M6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzFlMmIzfS5iZy1pbmZve2JhY2tncm91bmQtY29sb3I6I2Q5ZWRmN31hLmJnLWluZm86Zm9jdXMsYS5iZy1pbmZvOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2FmZDllZX0uYmctd2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNmY2Y4ZTN9YS5iZy13YXJuaW5nOmZvY3VzLGEuYmctd2FybmluZzpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmN2VjYjV9LmJnLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmMmRlZGV9YS5iZy1kYW5nZXI6Zm9jdXMsYS5iZy1kYW5nZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTRiOWI5fS5wYWdlLWhlYWRlcntwYWRkaW5nLWJvdHRvbTo5cHg7bWFyZ2luOjQwcHggMCAyMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlZWV9b2wsdWx7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MTBweH1vbCBvbCxvbCB1bCx1bCBvbCx1bCB1bHttYXJnaW4tYm90dG9tOjB9Lmxpc3QtdW5zdHlsZWR7cGFkZGluZy1sZWZ0OjA7bGlzdC1zdHlsZTpub25lfS5saXN0LWlubGluZXtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tbGVmdDotNXB4O2xpc3Qtc3R5bGU6bm9uZX0ubGlzdC1pbmxpbmU+bGl7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1yaWdodDo1cHg7cGFkZGluZy1sZWZ0OjVweH1kbHttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbToyMHB4fWRkLGR0e2xpbmUtaGVpZ2h0OjEuNDI4NTcxNDN9ZHR7Zm9udC13ZWlnaHQ6NzAwfWRke21hcmdpbi1sZWZ0OjB9QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5kbC1ob3Jpem9udGFsIGR0e2Zsb2F0OmxlZnQ7d2lkdGg6MTYwcHg7b3ZlcmZsb3c6aGlkZGVuO2NsZWFyOmxlZnQ7dGV4dC1hbGlnbjpyaWdodDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0uZGwtaG9yaXpvbnRhbCBkZHttYXJnaW4tbGVmdDoxODBweH19YWJicltkYXRhLW9yaWdpbmFsLXRpdGxlXSxhYmJyW3RpdGxlXXtjdXJzb3I6aGVscDtib3JkZXItYm90dG9tOjFweCBkb3R0ZWQgIzc3N30uaW5pdGlhbGlzbXtmb250LXNpemU6OTAlO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX1ibG9ja3F1b3Rle3BhZGRpbmc6MTBweCAyMHB4O21hcmdpbjowIDAgMjBweDtmb250LXNpemU6MTcuNXB4O2JvcmRlci1sZWZ0OjVweCBzb2xpZCAjZWVlfWJsb2NrcXVvdGUgb2w6bGFzdC1jaGlsZCxibG9ja3F1b3RlIHA6bGFzdC1jaGlsZCxibG9ja3F1b3RlIHVsOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfWJsb2NrcXVvdGUgLnNtYWxsLGJsb2NrcXVvdGUgZm9vdGVyLGJsb2NrcXVvdGUgc21hbGx7ZGlzcGxheTpibG9jaztmb250LXNpemU6ODAlO2xpbmUtaGVpZ2h0OjEuNDI4NTcxNDM7Y29sb3I6Izc3N31ibG9ja3F1b3RlIC5zbWFsbDpiZWZvcmUsYmxvY2txdW90ZSBmb290ZXI6YmVmb3JlLGJsb2NrcXVvdGUgc21hbGw6YmVmb3Jle2NvbnRlbnQ6J1wyMDE0IFwwMEEwJ30uYmxvY2txdW90ZS1yZXZlcnNlLGJsb2NrcXVvdGUucHVsbC1yaWdodHtwYWRkaW5nLXJpZ2h0OjE1cHg7cGFkZGluZy1sZWZ0OjA7dGV4dC1hbGlnbjpyaWdodDtib3JkZXItcmlnaHQ6NXB4IHNvbGlkICNlZWU7Ym9yZGVyLWxlZnQ6MH0uYmxvY2txdW90ZS1yZXZlcnNlIC5zbWFsbDpiZWZvcmUsLmJsb2NrcXVvdGUtcmV2ZXJzZSBmb290ZXI6YmVmb3JlLC5ibG9ja3F1b3RlLXJldmVyc2Ugc21hbGw6YmVmb3JlLGJsb2NrcXVvdGUucHVsbC1yaWdodCAuc21hbGw6YmVmb3JlLGJsb2NrcXVvdGUucHVsbC1yaWdodCBmb290ZXI6YmVmb3JlLGJsb2NrcXVvdGUucHVsbC1yaWdodCBzbWFsbDpiZWZvcmV7Y29udGVudDonJ30uYmxvY2txdW90ZS1yZXZlcnNlIC5zbWFsbDphZnRlciwuYmxvY2txdW90ZS1yZXZlcnNlIGZvb3RlcjphZnRlciwuYmxvY2txdW90ZS1yZXZlcnNlIHNtYWxsOmFmdGVyLGJsb2NrcXVvdGUucHVsbC1yaWdodCAuc21hbGw6YWZ0ZXIsYmxvY2txdW90ZS5wdWxsLXJpZ2h0IGZvb3RlcjphZnRlcixibG9ja3F1b3RlLnB1bGwtcmlnaHQgc21hbGw6YWZ0ZXJ7Y29udGVudDonXDAwQTAgXDIwMTQnfWFkZHJlc3N7bWFyZ2luLWJvdHRvbToyMHB4O2ZvbnQtc3R5bGU6bm9ybWFsO2xpbmUtaGVpZ2h0OjEuNDI4NTcxNDN9Y29kZSxrYmQscHJlLHNhbXB7Zm9udC1mYW1pbHk6TWVubG8sTW9uYWNvLENvbnNvbGFzLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlfWNvZGV7cGFkZGluZzoycHggNHB4O2ZvbnQtc2l6ZTo5MCU7Y29sb3I6I2M3MjU0ZTtiYWNrZ3JvdW5kLWNvbG9yOiNmOWYyZjQ7Ym9yZGVyLXJhZGl1czo0cHh9a2Jke3BhZGRpbmc6MnB4IDRweDtmb250LXNpemU6OTAlO2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6M3B4Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLC4yNSk7Ym94LXNoYWRvdzppbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLC4yNSl9a2JkIGtiZHtwYWRkaW5nOjA7Zm9udC1zaXplOjEwMCU7Zm9udC13ZWlnaHQ6NzAwOy13ZWJraXQtYm94LXNoYWRvdzpub25lO2JveC1zaGFkb3c6bm9uZX1wcmV7ZGlzcGxheTpibG9jaztwYWRkaW5nOjkuNXB4O21hcmdpbjowIDAgMTBweDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjQyODU3MTQzO2NvbG9yOiMzMzM7d29yZC1icmVhazpicmVhay1hbGw7d29yZC13cmFwOmJyZWFrLXdvcmQ7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjRweH1wcmUgY29kZXtwYWRkaW5nOjA7Zm9udC1zaXplOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDt3aGl0ZS1zcGFjZTpwcmUtd3JhcDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6MH0ucHJlLXNjcm9sbGFibGV7bWF4LWhlaWdodDozNDBweDtvdmVyZmxvdy15OnNjcm9sbH0uY29udGFpbmVye3BhZGRpbmctcmlnaHQ6MTVweDtwYWRkaW5nLWxlZnQ6MTVweDttYXJnaW4tcmlnaHQ6YXV0bzttYXJnaW4tbGVmdDphdXRvfUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuY29udGFpbmVye3dpZHRoOjc1MHB4fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNvbnRhaW5lcnt3aWR0aDo5NzBweH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsuY29udGFpbmVye3dpZHRoOjExNzBweH19LmNvbnRhaW5lci1mbHVpZHtwYWRkaW5nLXJpZ2h0OjE1cHg7cGFkZGluZy1sZWZ0OjE1cHg7bWFyZ2luLXJpZ2h0OmF1dG87bWFyZ2luLWxlZnQ6YXV0b30ucm93e21hcmdpbi1yaWdodDotMTVweDttYXJnaW4tbGVmdDotMTVweH0uY29sLWxnLTEsLmNvbC1sZy0xMCwuY29sLWxnLTExLC5jb2wtbGctMTIsLmNvbC1sZy0yLC5jb2wtbGctMywuY29sLWxnLTQsLmNvbC1sZy01LC5jb2wtbGctNiwuY29sLWxnLTcsLmNvbC1sZy04LC5jb2wtbGctOSwuY29sLW1kLTEsLmNvbC1tZC0xMCwuY29sLW1kLTExLC5jb2wtbWQtMTIsLmNvbC1tZC0yLC5jb2wtbWQtMywuY29sLW1kLTQsLmNvbC1tZC01LC5jb2wtbWQtNiwuY29sLW1kLTcsLmNvbC1tZC04LC5jb2wtbWQtOSwuY29sLXNtLTEsLmNvbC1zbS0xMCwuY29sLXNtLTExLC5jb2wtc20tMTIsLmNvbC1zbS0yLC5jb2wtc20tMywuY29sLXNtLTQsLmNvbC1zbS01LC5jb2wtc20tNiwuY29sLXNtLTcsLmNvbC1zbS04LC5jb2wtc20tOSwuY29sLXhzLTEsLmNvbC14cy0xMCwuY29sLXhzLTExLC5jb2wteHMtMTIsLmNvbC14cy0yLC5jb2wteHMtMywuY29sLXhzLTQsLmNvbC14cy01LC5jb2wteHMtNiwuY29sLXhzLTcsLmNvbC14cy04LC5jb2wteHMtOXtwb3NpdGlvbjpyZWxhdGl2ZTttaW4taGVpZ2h0OjFweDtwYWRkaW5nLXJpZ2h0OjE1cHg7cGFkZGluZy1sZWZ0OjE1cHh9LmNvbC14cy0xLC5jb2wteHMtMTAsLmNvbC14cy0xMSwuY29sLXhzLTEyLC5jb2wteHMtMiwuY29sLXhzLTMsLmNvbC14cy00LC5jb2wteHMtNSwuY29sLXhzLTYsLmNvbC14cy03LC5jb2wteHMtOCwuY29sLXhzLTl7ZmxvYXQ6bGVmdH0uY29sLXhzLTEye3dpZHRoOjEwMCV9LmNvbC14cy0xMXt3aWR0aDo5MS42NjY2NjY2NyV9LmNvbC14cy0xMHt3aWR0aDo4My4zMzMzMzMzMyV9LmNvbC14cy05e3dpZHRoOjc1JX0uY29sLXhzLTh7d2lkdGg6NjYuNjY2NjY2NjclfS5jb2wteHMtN3t3aWR0aDo1OC4zMzMzMzMzMyV9LmNvbC14cy02e3dpZHRoOjUwJX0uY29sLXhzLTV7d2lkdGg6NDEuNjY2NjY2NjclfS5jb2wteHMtNHt3aWR0aDozMy4zMzMzMzMzMyV9LmNvbC14cy0ze3dpZHRoOjI1JX0uY29sLXhzLTJ7d2lkdGg6MTYuNjY2NjY2NjclfS5jb2wteHMtMXt3aWR0aDo4LjMzMzMzMzMzJX0uY29sLXhzLXB1bGwtMTJ7cmlnaHQ6MTAwJX0uY29sLXhzLXB1bGwtMTF7cmlnaHQ6OTEuNjY2NjY2NjclfS5jb2wteHMtcHVsbC0xMHtyaWdodDo4My4zMzMzMzMzMyV9LmNvbC14cy1wdWxsLTl7cmlnaHQ6NzUlfS5jb2wteHMtcHVsbC04e3JpZ2h0OjY2LjY2NjY2NjY3JX0uY29sLXhzLXB1bGwtN3tyaWdodDo1OC4zMzMzMzMzMyV9LmNvbC14cy1wdWxsLTZ7cmlnaHQ6NTAlfS5jb2wteHMtcHVsbC01e3JpZ2h0OjQxLjY2NjY2NjY3JX0uY29sLXhzLXB1bGwtNHtyaWdodDozMy4zMzMzMzMzMyV9LmNvbC14cy1wdWxsLTN7cmlnaHQ6MjUlfS5jb2wteHMtcHVsbC0ye3JpZ2h0OjE2LjY2NjY2NjY3JX0uY29sLXhzLXB1bGwtMXtyaWdodDo4LjMzMzMzMzMzJX0uY29sLXhzLXB1bGwtMHtyaWdodDphdXRvfS5jb2wteHMtcHVzaC0xMntsZWZ0OjEwMCV9LmNvbC14cy1wdXNoLTExe2xlZnQ6OTEuNjY2NjY2NjclfS5jb2wteHMtcHVzaC0xMHtsZWZ0OjgzLjMzMzMzMzMzJX0uY29sLXhzLXB1c2gtOXtsZWZ0Ojc1JX0uY29sLXhzLXB1c2gtOHtsZWZ0OjY2LjY2NjY2NjY3JX0uY29sLXhzLXB1c2gtN3tsZWZ0OjU4LjMzMzMzMzMzJX0uY29sLXhzLXB1c2gtNntsZWZ0OjUwJX0uY29sLXhzLXB1c2gtNXtsZWZ0OjQxLjY2NjY2NjY3JX0uY29sLXhzLXB1c2gtNHtsZWZ0OjMzLjMzMzMzMzMzJX0uY29sLXhzLXB1c2gtM3tsZWZ0OjI1JX0uY29sLXhzLXB1c2gtMntsZWZ0OjE2LjY2NjY2NjY3JX0uY29sLXhzLXB1c2gtMXtsZWZ0OjguMzMzMzMzMzMlfS5jb2wteHMtcHVzaC0we2xlZnQ6YXV0b30uY29sLXhzLW9mZnNldC0xMnttYXJnaW4tbGVmdDoxMDAlfS5jb2wteHMtb2Zmc2V0LTExe21hcmdpbi1sZWZ0OjkxLjY2NjY2NjY3JX0uY29sLXhzLW9mZnNldC0xMHttYXJnaW4tbGVmdDo4My4zMzMzMzMzMyV9LmNvbC14cy1vZmZzZXQtOXttYXJnaW4tbGVmdDo3NSV9LmNvbC14cy1vZmZzZXQtOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NyV9LmNvbC14cy1vZmZzZXQtN3ttYXJnaW4tbGVmdDo1OC4zMzMzMzMzMyV9LmNvbC14cy1vZmZzZXQtNnttYXJnaW4tbGVmdDo1MCV9LmNvbC14cy1vZmZzZXQtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NyV9LmNvbC14cy1vZmZzZXQtNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMyV9LmNvbC14cy1vZmZzZXQtM3ttYXJnaW4tbGVmdDoyNSV9LmNvbC14cy1vZmZzZXQtMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NyV9LmNvbC14cy1vZmZzZXQtMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzJX0uY29sLXhzLW9mZnNldC0we21hcmdpbi1sZWZ0OjB9QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5jb2wtc20tMSwuY29sLXNtLTEwLC5jb2wtc20tMTEsLmNvbC1zbS0xMiwuY29sLXNtLTIsLmNvbC1zbS0zLC5jb2wtc20tNCwuY29sLXNtLTUsLmNvbC1zbS02LC5jb2wtc20tNywuY29sLXNtLTgsLmNvbC1zbS05e2Zsb2F0OmxlZnR9LmNvbC1zbS0xMnt3aWR0aDoxMDAlfS5jb2wtc20tMTF7d2lkdGg6OTEuNjY2NjY2NjclfS5jb2wtc20tMTB7d2lkdGg6ODMuMzMzMzMzMzMlfS5jb2wtc20tOXt3aWR0aDo3NSV9LmNvbC1zbS04e3dpZHRoOjY2LjY2NjY2NjY3JX0uY29sLXNtLTd7d2lkdGg6NTguMzMzMzMzMzMlfS5jb2wtc20tNnt3aWR0aDo1MCV9LmNvbC1zbS01e3dpZHRoOjQxLjY2NjY2NjY3JX0uY29sLXNtLTR7d2lkdGg6MzMuMzMzMzMzMzMlfS5jb2wtc20tM3t3aWR0aDoyNSV9LmNvbC1zbS0ye3dpZHRoOjE2LjY2NjY2NjY3JX0uY29sLXNtLTF7d2lkdGg6OC4zMzMzMzMzMyV9LmNvbC1zbS1wdWxsLTEye3JpZ2h0OjEwMCV9LmNvbC1zbS1wdWxsLTExe3JpZ2h0OjkxLjY2NjY2NjY3JX0uY29sLXNtLXB1bGwtMTB7cmlnaHQ6ODMuMzMzMzMzMzMlfS5jb2wtc20tcHVsbC05e3JpZ2h0Ojc1JX0uY29sLXNtLXB1bGwtOHtyaWdodDo2Ni42NjY2NjY2NyV9LmNvbC1zbS1wdWxsLTd7cmlnaHQ6NTguMzMzMzMzMzMlfS5jb2wtc20tcHVsbC02e3JpZ2h0OjUwJX0uY29sLXNtLXB1bGwtNXtyaWdodDo0MS42NjY2NjY2NyV9LmNvbC1zbS1wdWxsLTR7cmlnaHQ6MzMuMzMzMzMzMzMlfS5jb2wtc20tcHVsbC0ze3JpZ2h0OjI1JX0uY29sLXNtLXB1bGwtMntyaWdodDoxNi42NjY2NjY2NyV9LmNvbC1zbS1wdWxsLTF7cmlnaHQ6OC4zMzMzMzMzMyV9LmNvbC1zbS1wdWxsLTB7cmlnaHQ6YXV0b30uY29sLXNtLXB1c2gtMTJ7bGVmdDoxMDAlfS5jb2wtc20tcHVzaC0xMXtsZWZ0OjkxLjY2NjY2NjY3JX0uY29sLXNtLXB1c2gtMTB7bGVmdDo4My4zMzMzMzMzMyV9LmNvbC1zbS1wdXNoLTl7bGVmdDo3NSV9LmNvbC1zbS1wdXNoLTh7bGVmdDo2Ni42NjY2NjY2NyV9LmNvbC1zbS1wdXNoLTd7bGVmdDo1OC4zMzMzMzMzMyV9LmNvbC1zbS1wdXNoLTZ7bGVmdDo1MCV9LmNvbC1zbS1wdXNoLTV7bGVmdDo0MS42NjY2NjY2NyV9LmNvbC1zbS1wdXNoLTR7bGVmdDozMy4zMzMzMzMzMyV9LmNvbC1zbS1wdXNoLTN7bGVmdDoyNSV9LmNvbC1zbS1wdXNoLTJ7bGVmdDoxNi42NjY2NjY2NyV9LmNvbC1zbS1wdXNoLTF7bGVmdDo4LjMzMzMzMzMzJX0uY29sLXNtLXB1c2gtMHtsZWZ0OmF1dG99LmNvbC1zbS1vZmZzZXQtMTJ7bWFyZ2luLWxlZnQ6MTAwJX0uY29sLXNtLW9mZnNldC0xMXttYXJnaW4tbGVmdDo5MS42NjY2NjY2NyV9LmNvbC1zbS1vZmZzZXQtMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMzMzMlfS5jb2wtc20tb2Zmc2V0LTl7bWFyZ2luLWxlZnQ6NzUlfS5jb2wtc20tb2Zmc2V0LTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjclfS5jb2wtc20tb2Zmc2V0LTd7bWFyZ2luLWxlZnQ6NTguMzMzMzMzMzMlfS5jb2wtc20tb2Zmc2V0LTZ7bWFyZ2luLWxlZnQ6NTAlfS5jb2wtc20tb2Zmc2V0LTV7bWFyZ2luLWxlZnQ6NDEuNjY2NjY2NjclfS5jb2wtc20tb2Zmc2V0LTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMlfS5jb2wtc20tb2Zmc2V0LTN7bWFyZ2luLWxlZnQ6MjUlfS5jb2wtc20tb2Zmc2V0LTJ7bWFyZ2luLWxlZnQ6MTYuNjY2NjY2NjclfS5jb2wtc20tb2Zmc2V0LTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMyV9LmNvbC1zbS1vZmZzZXQtMHttYXJnaW4tbGVmdDowfX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNvbC1tZC0xLC5jb2wtbWQtMTAsLmNvbC1tZC0xMSwuY29sLW1kLTEyLC5jb2wtbWQtMiwuY29sLW1kLTMsLmNvbC1tZC00LC5jb2wtbWQtNSwuY29sLW1kLTYsLmNvbC1tZC03LC5jb2wtbWQtOCwuY29sLW1kLTl7ZmxvYXQ6bGVmdH0uY29sLW1kLTEye3dpZHRoOjEwMCV9LmNvbC1tZC0xMXt3aWR0aDo5MS42NjY2NjY2NyV9LmNvbC1tZC0xMHt3aWR0aDo4My4zMzMzMzMzMyV9LmNvbC1tZC05e3dpZHRoOjc1JX0uY29sLW1kLTh7d2lkdGg6NjYuNjY2NjY2NjclfS5jb2wtbWQtN3t3aWR0aDo1OC4zMzMzMzMzMyV9LmNvbC1tZC02e3dpZHRoOjUwJX0uY29sLW1kLTV7d2lkdGg6NDEuNjY2NjY2NjclfS5jb2wtbWQtNHt3aWR0aDozMy4zMzMzMzMzMyV9LmNvbC1tZC0ze3dpZHRoOjI1JX0uY29sLW1kLTJ7d2lkdGg6MTYuNjY2NjY2NjclfS5jb2wtbWQtMXt3aWR0aDo4LjMzMzMzMzMzJX0uY29sLW1kLXB1bGwtMTJ7cmlnaHQ6MTAwJX0uY29sLW1kLXB1bGwtMTF7cmlnaHQ6OTEuNjY2NjY2NjclfS5jb2wtbWQtcHVsbC0xMHtyaWdodDo4My4zMzMzMzMzMyV9LmNvbC1tZC1wdWxsLTl7cmlnaHQ6NzUlfS5jb2wtbWQtcHVsbC04e3JpZ2h0OjY2LjY2NjY2NjY3JX0uY29sLW1kLXB1bGwtN3tyaWdodDo1OC4zMzMzMzMzMyV9LmNvbC1tZC1wdWxsLTZ7cmlnaHQ6NTAlfS5jb2wtbWQtcHVsbC01e3JpZ2h0OjQxLjY2NjY2NjY3JX0uY29sLW1kLXB1bGwtNHtyaWdodDozMy4zMzMzMzMzMyV9LmNvbC1tZC1wdWxsLTN7cmlnaHQ6MjUlfS5jb2wtbWQtcHVsbC0ye3JpZ2h0OjE2LjY2NjY2NjY3JX0uY29sLW1kLXB1bGwtMXtyaWdodDo4LjMzMzMzMzMzJX0uY29sLW1kLXB1bGwtMHtyaWdodDphdXRvfS5jb2wtbWQtcHVzaC0xMntsZWZ0OjEwMCV9LmNvbC1tZC1wdXNoLTExe2xlZnQ6OTEuNjY2NjY2NjclfS5jb2wtbWQtcHVzaC0xMHtsZWZ0OjgzLjMzMzMzMzMzJX0uY29sLW1kLXB1c2gtOXtsZWZ0Ojc1JX0uY29sLW1kLXB1c2gtOHtsZWZ0OjY2LjY2NjY2NjY3JX0uY29sLW1kLXB1c2gtN3tsZWZ0OjU4LjMzMzMzMzMzJX0uY29sLW1kLXB1c2gtNntsZWZ0OjUwJX0uY29sLW1kLXB1c2gtNXtsZWZ0OjQxLjY2NjY2NjY3JX0uY29sLW1kLXB1c2gtNHtsZWZ0OjMzLjMzMzMzMzMzJX0uY29sLW1kLXB1c2gtM3tsZWZ0OjI1JX0uY29sLW1kLXB1c2gtMntsZWZ0OjE2LjY2NjY2NjY3JX0uY29sLW1kLXB1c2gtMXtsZWZ0OjguMzMzMzMzMzMlfS5jb2wtbWQtcHVzaC0we2xlZnQ6YXV0b30uY29sLW1kLW9mZnNldC0xMnttYXJnaW4tbGVmdDoxMDAlfS5jb2wtbWQtb2Zmc2V0LTExe21hcmdpbi1sZWZ0OjkxLjY2NjY2NjY3JX0uY29sLW1kLW9mZnNldC0xMHttYXJnaW4tbGVmdDo4My4zMzMzMzMzMyV9LmNvbC1tZC1vZmZzZXQtOXttYXJnaW4tbGVmdDo3NSV9LmNvbC1tZC1vZmZzZXQtOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NyV9LmNvbC1tZC1vZmZzZXQtN3ttYXJnaW4tbGVmdDo1OC4zMzMzMzMzMyV9LmNvbC1tZC1vZmZzZXQtNnttYXJnaW4tbGVmdDo1MCV9LmNvbC1tZC1vZmZzZXQtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NyV9LmNvbC1tZC1vZmZzZXQtNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMyV9LmNvbC1tZC1vZmZzZXQtM3ttYXJnaW4tbGVmdDoyNSV9LmNvbC1tZC1vZmZzZXQtMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NyV9LmNvbC1tZC1vZmZzZXQtMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzJX0uY29sLW1kLW9mZnNldC0we21hcmdpbi1sZWZ0OjB9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNvbC1sZy0xLC5jb2wtbGctMTAsLmNvbC1sZy0xMSwuY29sLWxnLTEyLC5jb2wtbGctMiwuY29sLWxnLTMsLmNvbC1sZy00LC5jb2wtbGctNSwuY29sLWxnLTYsLmNvbC1sZy03LC5jb2wtbGctOCwuY29sLWxnLTl7ZmxvYXQ6bGVmdH0uY29sLWxnLTEye3dpZHRoOjEwMCV9LmNvbC1sZy0xMXt3aWR0aDo5MS42NjY2NjY2NyV9LmNvbC1sZy0xMHt3aWR0aDo4My4zMzMzMzMzMyV9LmNvbC1sZy05e3dpZHRoOjc1JX0uY29sLWxnLTh7d2lkdGg6NjYuNjY2NjY2NjclfS5jb2wtbGctN3t3aWR0aDo1OC4zMzMzMzMzMyV9LmNvbC1sZy02e3dpZHRoOjUwJX0uY29sLWxnLTV7d2lkdGg6NDEuNjY2NjY2NjclfS5jb2wtbGctNHt3aWR0aDozMy4zMzMzMzMzMyV9LmNvbC1sZy0ze3dpZHRoOjI1JX0uY29sLWxnLTJ7d2lkdGg6MTYuNjY2NjY2NjclfS5jb2wtbGctMXt3aWR0aDo4LjMzMzMzMzMzJX0uY29sLWxnLXB1bGwtMTJ7cmlnaHQ6MTAwJX0uY29sLWxnLXB1bGwtMTF7cmlnaHQ6OTEuNjY2NjY2NjclfS5jb2wtbGctcHVsbC0xMHtyaWdodDo4My4zMzMzMzMzMyV9LmNvbC1sZy1wdWxsLTl7cmlnaHQ6NzUlfS5jb2wtbGctcHVsbC04e3JpZ2h0OjY2LjY2NjY2NjY3JX0uY29sLWxnLXB1bGwtN3tyaWdodDo1OC4zMzMzMzMzMyV9LmNvbC1sZy1wdWxsLTZ7cmlnaHQ6NTAlfS5jb2wtbGctcHVsbC01e3JpZ2h0OjQxLjY2NjY2NjY3JX0uY29sLWxnLXB1bGwtNHtyaWdodDozMy4zMzMzMzMzMyV9LmNvbC1sZy1wdWxsLTN7cmlnaHQ6MjUlfS5jb2wtbGctcHVsbC0ye3JpZ2h0OjE2LjY2NjY2NjY3JX0uY29sLWxnLXB1bGwtMXtyaWdodDo4LjMzMzMzMzMzJX0uY29sLWxnLXB1bGwtMHtyaWdodDphdXRvfS5jb2wtbGctcHVzaC0xMntsZWZ0OjEwMCV9LmNvbC1sZy1wdXNoLTExe2xlZnQ6OTEuNjY2NjY2NjclfS5jb2wtbGctcHVzaC0xMHtsZWZ0OjgzLjMzMzMzMzMzJX0uY29sLWxnLXB1c2gtOXtsZWZ0Ojc1JX0uY29sLWxnLXB1c2gtOHtsZWZ0OjY2LjY2NjY2NjY3JX0uY29sLWxnLXB1c2gtN3tsZWZ0OjU4LjMzMzMzMzMzJX0uY29sLWxnLXB1c2gtNntsZWZ0OjUwJX0uY29sLWxnLXB1c2gtNXtsZWZ0OjQxLjY2NjY2NjY3JX0uY29sLWxnLXB1c2gtNHtsZWZ0OjMzLjMzMzMzMzMzJX0uY29sLWxnLXB1c2gtM3tsZWZ0OjI1JX0uY29sLWxnLXB1c2gtMntsZWZ0OjE2LjY2NjY2NjY3JX0uY29sLWxnLXB1c2gtMXtsZWZ0OjguMzMzMzMzMzMlfS5jb2wtbGctcHVzaC0we2xlZnQ6YXV0b30uY29sLWxnLW9mZnNldC0xMnttYXJnaW4tbGVmdDoxMDAlfS5jb2wtbGctb2Zmc2V0LTExe21hcmdpbi1sZWZ0OjkxLjY2NjY2NjY3JX0uY29sLWxnLW9mZnNldC0xMHttYXJnaW4tbGVmdDo4My4zMzMzMzMzMyV9LmNvbC1sZy1vZmZzZXQtOXttYXJnaW4tbGVmdDo3NSV9LmNvbC1sZy1vZmZzZXQtOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NyV9LmNvbC1sZy1vZmZzZXQtN3ttYXJnaW4tbGVmdDo1OC4zMzMzMzMzMyV9LmNvbC1sZy1vZmZzZXQtNnttYXJnaW4tbGVmdDo1MCV9LmNvbC1sZy1vZmZzZXQtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NyV9LmNvbC1sZy1vZmZzZXQtNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMyV9LmNvbC1sZy1vZmZzZXQtM3ttYXJnaW4tbGVmdDoyNSV9LmNvbC1sZy1vZmZzZXQtMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NyV9LmNvbC1sZy1vZmZzZXQtMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzJX0uY29sLWxnLW9mZnNldC0we21hcmdpbi1sZWZ0OjB9fXRhYmxle2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Y2FwdGlvbntwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4O2NvbG9yOiM3Nzc7dGV4dC1hbGlnbjpsZWZ0fXRoe3RleHQtYWxpZ246bGVmdH0udGFibGV7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTttYXJnaW4tYm90dG9tOjIwcHh9LnRhYmxlPnRib2R5PnRyPnRkLC50YWJsZT50Ym9keT50cj50aCwudGFibGU+dGZvb3Q+dHI+dGQsLnRhYmxlPnRmb290PnRyPnRoLC50YWJsZT50aGVhZD50cj50ZCwudGFibGU+dGhlYWQ+dHI+dGh7cGFkZGluZzo4cHg7bGluZS1oZWlnaHQ6MS40Mjg1NzE0Mzt2ZXJ0aWNhbC1hbGlnbjp0b3A7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZH0udGFibGU+dGhlYWQ+dHI+dGh7dmVydGljYWwtYWxpZ246Ym90dG9tO2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNkZGR9LnRhYmxlPmNhcHRpb24rdGhlYWQ+dHI6Zmlyc3QtY2hpbGQ+dGQsLnRhYmxlPmNhcHRpb24rdGhlYWQ+dHI6Zmlyc3QtY2hpbGQ+dGgsLnRhYmxlPmNvbGdyb3VwK3RoZWFkPnRyOmZpcnN0LWNoaWxkPnRkLC50YWJsZT5jb2xncm91cCt0aGVhZD50cjpmaXJzdC1jaGlsZD50aCwudGFibGU+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQ+dGQsLnRhYmxlPnRoZWFkOmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkPnRoe2JvcmRlci10b3A6MH0udGFibGU+dGJvZHkrdGJvZHl7Ym9yZGVyLXRvcDoycHggc29saWQgI2RkZH0udGFibGUgLnRhYmxle2JhY2tncm91bmQtY29sb3I6I2ZmZn0udGFibGUtY29uZGVuc2VkPnRib2R5PnRyPnRkLC50YWJsZS1jb25kZW5zZWQ+dGJvZHk+dHI+dGgsLnRhYmxlLWNvbmRlbnNlZD50Zm9vdD50cj50ZCwudGFibGUtY29uZGVuc2VkPnRmb290PnRyPnRoLC50YWJsZS1jb25kZW5zZWQ+dGhlYWQ+dHI+dGQsLnRhYmxlLWNvbmRlbnNlZD50aGVhZD50cj50aHtwYWRkaW5nOjVweH0udGFibGUtYm9yZGVyZWR7Ym9yZGVyOjFweCBzb2xpZCAjZGRkfS50YWJsZS1ib3JkZXJlZD50Ym9keT50cj50ZCwudGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI+dGgsLnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRkLC50YWJsZS1ib3JkZXJlZD50Zm9vdD50cj50aCwudGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI+dGQsLnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRoe2JvcmRlcjoxcHggc29saWQgI2RkZH0udGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI+dGQsLnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRoe2JvcmRlci1ib3R0b20td2lkdGg6MnB4fS50YWJsZS1zdHJpcGVkPnRib2R5PnRyOm50aC1vZi10eXBlKG9kZCl7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5fS50YWJsZS1ob3Zlcj50Ym9keT50cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjV9dGFibGUgY29sW2NsYXNzKj1jb2wtXXtwb3NpdGlvbjpzdGF0aWM7ZGlzcGxheTp0YWJsZS1jb2x1bW47ZmxvYXQ6bm9uZX10YWJsZSB0ZFtjbGFzcyo9Y29sLV0sdGFibGUgdGhbY2xhc3MqPWNvbC1de3Bvc2l0aW9uOnN0YXRpYztkaXNwbGF5OnRhYmxlLWNlbGw7ZmxvYXQ6bm9uZX0udGFibGU+dGJvZHk+dHIuYWN0aXZlPnRkLC50YWJsZT50Ym9keT50ci5hY3RpdmU+dGgsLnRhYmxlPnRib2R5PnRyPnRkLmFjdGl2ZSwudGFibGU+dGJvZHk+dHI+dGguYWN0aXZlLC50YWJsZT50Zm9vdD50ci5hY3RpdmU+dGQsLnRhYmxlPnRmb290PnRyLmFjdGl2ZT50aCwudGFibGU+dGZvb3Q+dHI+dGQuYWN0aXZlLC50YWJsZT50Zm9vdD50cj50aC5hY3RpdmUsLnRhYmxlPnRoZWFkPnRyLmFjdGl2ZT50ZCwudGFibGU+dGhlYWQ+dHIuYWN0aXZlPnRoLC50YWJsZT50aGVhZD50cj50ZC5hY3RpdmUsLnRhYmxlPnRoZWFkPnRyPnRoLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjV9LnRhYmxlLWhvdmVyPnRib2R5PnRyLmFjdGl2ZTpob3Zlcj50ZCwudGFibGUtaG92ZXI+dGJvZHk+dHIuYWN0aXZlOmhvdmVyPnRoLC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj4uYWN0aXZlLC50YWJsZS1ob3Zlcj50Ym9keT50cj50ZC5hY3RpdmU6aG92ZXIsLnRhYmxlLWhvdmVyPnRib2R5PnRyPnRoLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlOGU4ZTh9LnRhYmxlPnRib2R5PnRyLnN1Y2Nlc3M+dGQsLnRhYmxlPnRib2R5PnRyLnN1Y2Nlc3M+dGgsLnRhYmxlPnRib2R5PnRyPnRkLnN1Y2Nlc3MsLnRhYmxlPnRib2R5PnRyPnRoLnN1Y2Nlc3MsLnRhYmxlPnRmb290PnRyLnN1Y2Nlc3M+dGQsLnRhYmxlPnRmb290PnRyLnN1Y2Nlc3M+dGgsLnRhYmxlPnRmb290PnRyPnRkLnN1Y2Nlc3MsLnRhYmxlPnRmb290PnRyPnRoLnN1Y2Nlc3MsLnRhYmxlPnRoZWFkPnRyLnN1Y2Nlc3M+dGQsLnRhYmxlPnRoZWFkPnRyLnN1Y2Nlc3M+dGgsLnRhYmxlPnRoZWFkPnRyPnRkLnN1Y2Nlc3MsLnRhYmxlPnRoZWFkPnRyPnRoLnN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojZGZmMGQ4fS50YWJsZS1ob3Zlcj50Ym9keT50ci5zdWNjZXNzOmhvdmVyPnRkLC50YWJsZS1ob3Zlcj50Ym9keT50ci5zdWNjZXNzOmhvdmVyPnRoLC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj4uc3VjY2VzcywudGFibGUtaG92ZXI+dGJvZHk+dHI+dGQuc3VjY2Vzczpob3ZlciwudGFibGUtaG92ZXI+dGJvZHk+dHI+dGguc3VjY2Vzczpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNkMGU5YzZ9LnRhYmxlPnRib2R5PnRyLmluZm8+dGQsLnRhYmxlPnRib2R5PnRyLmluZm8+dGgsLnRhYmxlPnRib2R5PnRyPnRkLmluZm8sLnRhYmxlPnRib2R5PnRyPnRoLmluZm8sLnRhYmxlPnRmb290PnRyLmluZm8+dGQsLnRhYmxlPnRmb290PnRyLmluZm8+dGgsLnRhYmxlPnRmb290PnRyPnRkLmluZm8sLnRhYmxlPnRmb290PnRyPnRoLmluZm8sLnRhYmxlPnRoZWFkPnRyLmluZm8+dGQsLnRhYmxlPnRoZWFkPnRyLmluZm8+dGgsLnRhYmxlPnRoZWFkPnRyPnRkLmluZm8sLnRhYmxlPnRoZWFkPnRyPnRoLmluZm97YmFja2dyb3VuZC1jb2xvcjojZDllZGY3fS50YWJsZS1ob3Zlcj50Ym9keT50ci5pbmZvOmhvdmVyPnRkLC50YWJsZS1ob3Zlcj50Ym9keT50ci5pbmZvOmhvdmVyPnRoLC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj4uaW5mbywudGFibGUtaG92ZXI+dGJvZHk+dHI+dGQuaW5mbzpob3ZlciwudGFibGUtaG92ZXI+dGJvZHk+dHI+dGguaW5mbzpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNGUzZjN9LnRhYmxlPnRib2R5PnRyLndhcm5pbmc+dGQsLnRhYmxlPnRib2R5PnRyLndhcm5pbmc+dGgsLnRhYmxlPnRib2R5PnRyPnRkLndhcm5pbmcsLnRhYmxlPnRib2R5PnRyPnRoLndhcm5pbmcsLnRhYmxlPnRmb290PnRyLndhcm5pbmc+dGQsLnRhYmxlPnRmb290PnRyLndhcm5pbmc+dGgsLnRhYmxlPnRmb290PnRyPnRkLndhcm5pbmcsLnRhYmxlPnRmb290PnRyPnRoLndhcm5pbmcsLnRhYmxlPnRoZWFkPnRyLndhcm5pbmc+dGQsLnRhYmxlPnRoZWFkPnRyLndhcm5pbmc+dGgsLnRhYmxlPnRoZWFkPnRyPnRkLndhcm5pbmcsLnRhYmxlPnRoZWFkPnRyPnRoLndhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojZmNmOGUzfS50YWJsZS1ob3Zlcj50Ym9keT50ci53YXJuaW5nOmhvdmVyPnRkLC50YWJsZS1ob3Zlcj50Ym9keT50ci53YXJuaW5nOmhvdmVyPnRoLC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj4ud2FybmluZywudGFibGUtaG92ZXI+dGJvZHk+dHI+dGQud2FybmluZzpob3ZlciwudGFibGUtaG92ZXI+dGJvZHk+dHI+dGgud2FybmluZzpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmYWYyY2N9LnRhYmxlPnRib2R5PnRyLmRhbmdlcj50ZCwudGFibGU+dGJvZHk+dHIuZGFuZ2VyPnRoLC50YWJsZT50Ym9keT50cj50ZC5kYW5nZXIsLnRhYmxlPnRib2R5PnRyPnRoLmRhbmdlciwudGFibGU+dGZvb3Q+dHIuZGFuZ2VyPnRkLC50YWJsZT50Zm9vdD50ci5kYW5nZXI+dGgsLnRhYmxlPnRmb290PnRyPnRkLmRhbmdlciwudGFibGU+dGZvb3Q+dHI+dGguZGFuZ2VyLC50YWJsZT50aGVhZD50ci5kYW5nZXI+dGQsLnRhYmxlPnRoZWFkPnRyLmRhbmdlcj50aCwudGFibGU+dGhlYWQ+dHI+dGQuZGFuZ2VyLC50YWJsZT50aGVhZD50cj50aC5kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojZjJkZWRlfS50YWJsZS1ob3Zlcj50Ym9keT50ci5kYW5nZXI6aG92ZXI+dGQsLnRhYmxlLWhvdmVyPnRib2R5PnRyLmRhbmdlcjpob3Zlcj50aCwudGFibGUtaG92ZXI+dGJvZHk+dHI6aG92ZXI+LmRhbmdlciwudGFibGUtaG92ZXI+dGJvZHk+dHI+dGQuZGFuZ2VyOmhvdmVyLC50YWJsZS1ob3Zlcj50Ym9keT50cj50aC5kYW5nZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWJjY2NjfS50YWJsZS1yZXNwb25zaXZle21pbi1oZWlnaHQ6LjAxJTtvdmVyZmxvdy14OmF1dG99QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjdweCl7LnRhYmxlLXJlc3BvbnNpdmV7d2lkdGg6MTAwJTttYXJnaW4tYm90dG9tOjE1cHg7b3ZlcmZsb3cteTpoaWRkZW47LW1zLW92ZXJmbG93LXN0eWxlOi1tcy1hdXRvaGlkaW5nLXNjcm9sbGJhcjtib3JkZXI6MXB4IHNvbGlkICNkZGR9LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxle21hcmdpbi1ib3R0b206MH0udGFibGUtcmVzcG9uc2l2ZT4udGFibGU+dGJvZHk+dHI+dGQsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlPnRib2R5PnRyPnRoLC50YWJsZS1yZXNwb25zaXZlPi50YWJsZT50Zm9vdD50cj50ZCwudGFibGUtcmVzcG9uc2l2ZT4udGFibGU+dGZvb3Q+dHI+dGgsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlPnRoZWFkPnRyPnRkLC50YWJsZS1yZXNwb25zaXZlPi50YWJsZT50aGVhZD50cj50aHt3aGl0ZS1zcGFjZTpub3dyYXB9LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVke2JvcmRlcjowfS50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cj50ZDpmaXJzdC1jaGlsZCwudGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI+dGg6Zmlyc3QtY2hpbGQsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRkOmZpcnN0LWNoaWxkLC50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Zm9vdD50cj50aDpmaXJzdC1jaGlsZCwudGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI+dGQ6Zmlyc3QtY2hpbGQsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRoOmZpcnN0LWNoaWxke2JvcmRlci1sZWZ0OjB9LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRkOmxhc3QtY2hpbGQsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyPnRoOmxhc3QtY2hpbGQsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRkOmxhc3QtY2hpbGQsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRoOmxhc3QtY2hpbGQsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRkOmxhc3QtY2hpbGQsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRoOmxhc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0OjB9LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmxhc3QtY2hpbGQ+dGQsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmxhc3QtY2hpbGQ+dGgsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyOmxhc3QtY2hpbGQ+dGQsLnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyOmxhc3QtY2hpbGQ+dGh7Ym9yZGVyLWJvdHRvbTowfX1maWVsZHNldHttaW4td2lkdGg6MDtwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjB9bGVnZW5ke2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtwYWRkaW5nOjA7bWFyZ2luLWJvdHRvbToyMHB4O2ZvbnQtc2l6ZToyMXB4O2xpbmUtaGVpZ2h0OmluaGVyaXQ7Y29sb3I6IzMzMztib3JkZXI6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU1fWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21heC13aWR0aDoxMDAlO21hcmdpbi1ib3R0b206NXB4O2ZvbnQtd2VpZ2h0OjcwMH1pbnB1dFt0eXBlPXNlYXJjaF17LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fWlucHV0W3R5cGU9Y2hlY2tib3hdLGlucHV0W3R5cGU9cmFkaW9de21hcmdpbjo0cHggMCAwO21hcmdpbi10b3A6MXB4XDk7bGluZS1oZWlnaHQ6bm9ybWFsfWlucHV0W3R5cGU9ZmlsZV17ZGlzcGxheTpibG9ja31pbnB1dFt0eXBlPXJhbmdlXXtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9c2VsZWN0W211bHRpcGxlXSxzZWxlY3Rbc2l6ZV17aGVpZ2h0OmF1dG99aW5wdXRbdHlwZT1maWxlXTpmb2N1cyxpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1cyxpbnB1dFt0eXBlPXJhZGlvXTpmb2N1c3tvdXRsaW5lOnRoaW4gZG90dGVkO291dGxpbmU6NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0Oi0ycHh9b3V0cHV0e2Rpc3BsYXk6YmxvY2s7cGFkZGluZy10b3A6N3B4O2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjEuNDI4NTcxNDM7Y29sb3I6IzU1NX0uZm9ybS1jb250cm9se2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6MzRweDtwYWRkaW5nOjZweCAxMnB4O2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjEuNDI4NTcxNDM7Y29sb3I6IzU1NTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1pbWFnZTpub25lO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KTstd2Via2l0LXRyYW5zaXRpb246Ym9yZGVyLWNvbG9yIGVhc2UtaW4tb3V0IC4xNXMsLXdlYmtpdC1ib3gtc2hhZG93IGVhc2UtaW4tb3V0IC4xNXM7LW8tdHJhbnNpdGlvbjpib3JkZXItY29sb3IgZWFzZS1pbi1vdXQgLjE1cyxib3gtc2hhZG93IGVhc2UtaW4tb3V0IC4xNXM7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgZWFzZS1pbi1vdXQgLjE1cyxib3gtc2hhZG93IGVhc2UtaW4tb3V0IC4xNXN9LmZvcm0tY29udHJvbDpmb2N1c3tib3JkZXItY29sb3I6IzY2YWZlOTtvdXRsaW5lOjA7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpLDAgMCA4cHggcmdiYSgxMDIsMTc1LDIzMywuNik7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KSwwIDAgOHB4IHJnYmEoMTAyLDE3NSwyMzMsLjYpfS5mb3JtLWNvbnRyb2w6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6Izk5OTtvcGFjaXR5OjF9LmZvcm0tY29udHJvbDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6Izk5OX0uZm9ybS1jb250cm9sOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiM5OTl9LmZvcm0tY29udHJvbFtkaXNhYmxlZF0sLmZvcm0tY29udHJvbFtyZWFkb25seV0sZmllbGRzZXRbZGlzYWJsZWRdIC5mb3JtLWNvbnRyb2x7YmFja2dyb3VuZC1jb2xvcjojZWVlO29wYWNpdHk6MX0uZm9ybS1jb250cm9sW2Rpc2FibGVkXSxmaWVsZHNldFtkaXNhYmxlZF0gLmZvcm0tY29udHJvbHtjdXJzb3I6bm90LWFsbG93ZWR9dGV4dGFyZWEuZm9ybS1jb250cm9se2hlaWdodDphdXRvfWlucHV0W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX1AbWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApe2lucHV0W3R5cGU9ZGF0ZV0uZm9ybS1jb250cm9sLGlucHV0W3R5cGU9dGltZV0uZm9ybS1jb250cm9sLGlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdLmZvcm0tY29udHJvbCxpbnB1dFt0eXBlPW1vbnRoXS5mb3JtLWNvbnRyb2x7bGluZS1oZWlnaHQ6MzRweH0uaW5wdXQtZ3JvdXAtc20gaW5wdXRbdHlwZT1kYXRlXSwuaW5wdXQtZ3JvdXAtc20gaW5wdXRbdHlwZT10aW1lXSwuaW5wdXQtZ3JvdXAtc20gaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF0sLmlucHV0LWdyb3VwLXNtIGlucHV0W3R5cGU9bW9udGhdLGlucHV0W3R5cGU9ZGF0ZV0uaW5wdXQtc20saW5wdXRbdHlwZT10aW1lXS5pbnB1dC1zbSxpbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXS5pbnB1dC1zbSxpbnB1dFt0eXBlPW1vbnRoXS5pbnB1dC1zbXtsaW5lLWhlaWdodDozMHB4fS5pbnB1dC1ncm91cC1sZyBpbnB1dFt0eXBlPWRhdGVdLC5pbnB1dC1ncm91cC1sZyBpbnB1dFt0eXBlPXRpbWVdLC5pbnB1dC1ncm91cC1sZyBpbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXSwuaW5wdXQtZ3JvdXAtbGcgaW5wdXRbdHlwZT1tb250aF0saW5wdXRbdHlwZT1kYXRlXS5pbnB1dC1sZyxpbnB1dFt0eXBlPXRpbWVdLmlucHV0LWxnLGlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdLmlucHV0LWxnLGlucHV0W3R5cGU9bW9udGhdLmlucHV0LWxne2xpbmUtaGVpZ2h0OjQ2cHh9fS5mb3JtLWdyb3Vwe21hcmdpbi1ib3R0b206MTVweH0uY2hlY2tib3gsLnJhZGlve3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDoxMHB4O21hcmdpbi1ib3R0b206MTBweH0uY2hlY2tib3ggbGFiZWwsLnJhZGlvIGxhYmVse21pbi1oZWlnaHQ6MjBweDtwYWRkaW5nLWxlZnQ6MjBweDttYXJnaW4tYm90dG9tOjA7Zm9udC13ZWlnaHQ6NDAwO2N1cnNvcjpwb2ludGVyfS5jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSwuY2hlY2tib3gtaW5saW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdLC5yYWRpbyBpbnB1dFt0eXBlPXJhZGlvXSwucmFkaW8taW5saW5lIGlucHV0W3R5cGU9cmFkaW9de3Bvc2l0aW9uOmFic29sdXRlO21hcmdpbi10b3A6NHB4XDk7bWFyZ2luLWxlZnQ6LTIwcHh9LmNoZWNrYm94Ky5jaGVja2JveCwucmFkaW8rLnJhZGlve21hcmdpbi10b3A6LTVweH0uY2hlY2tib3gtaW5saW5lLC5yYWRpby1pbmxpbmV7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1sZWZ0OjIwcHg7bWFyZ2luLWJvdHRvbTowO2ZvbnQtd2VpZ2h0OjQwMDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Y3Vyc29yOnBvaW50ZXJ9LmNoZWNrYm94LWlubGluZSsuY2hlY2tib3gtaW5saW5lLC5yYWRpby1pbmxpbmUrLnJhZGlvLWlubGluZXttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MTBweH1maWVsZHNldFtkaXNhYmxlZF0gaW5wdXRbdHlwZT1jaGVja2JveF0sZmllbGRzZXRbZGlzYWJsZWRdIGlucHV0W3R5cGU9cmFkaW9dLGlucHV0W3R5cGU9Y2hlY2tib3hdLmRpc2FibGVkLGlucHV0W3R5cGU9Y2hlY2tib3hdW2Rpc2FibGVkXSxpbnB1dFt0eXBlPXJhZGlvXS5kaXNhYmxlZCxpbnB1dFt0eXBlPXJhZGlvXVtkaXNhYmxlZF17Y3Vyc29yOm5vdC1hbGxvd2VkfS5jaGVja2JveC1pbmxpbmUuZGlzYWJsZWQsLnJhZGlvLWlubGluZS5kaXNhYmxlZCxmaWVsZHNldFtkaXNhYmxlZF0gLmNoZWNrYm94LWlubGluZSxmaWVsZHNldFtkaXNhYmxlZF0gLnJhZGlvLWlubGluZXtjdXJzb3I6bm90LWFsbG93ZWR9LmNoZWNrYm94LmRpc2FibGVkIGxhYmVsLC5yYWRpby5kaXNhYmxlZCBsYWJlbCxmaWVsZHNldFtkaXNhYmxlZF0gLmNoZWNrYm94IGxhYmVsLGZpZWxkc2V0W2Rpc2FibGVkXSAucmFkaW8gbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkfS5mb3JtLWNvbnRyb2wtc3RhdGlje21pbi1oZWlnaHQ6MzRweDtwYWRkaW5nLXRvcDo3cHg7cGFkZGluZy1ib3R0b206N3B4O21hcmdpbi1ib3R0b206MH0uZm9ybS1jb250cm9sLXN0YXRpYy5pbnB1dC1sZywuZm9ybS1jb250cm9sLXN0YXRpYy5pbnB1dC1zbXtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjB9LmlucHV0LXNte2hlaWdodDozMHB4O3BhZGRpbmc6NXB4IDEwcHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MS41O2JvcmRlci1yYWRpdXM6M3B4fXNlbGVjdC5pbnB1dC1zbXtoZWlnaHQ6MzBweDtsaW5lLWhlaWdodDozMHB4fXNlbGVjdFttdWx0aXBsZV0uaW5wdXQtc20sdGV4dGFyZWEuaW5wdXQtc217aGVpZ2h0OmF1dG99LmZvcm0tZ3JvdXAtc20gLmZvcm0tY29udHJvbHtoZWlnaHQ6MzBweDtwYWRkaW5nOjVweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNTtib3JkZXItcmFkaXVzOjNweH0uZm9ybS1ncm91cC1zbSBzZWxlY3QuZm9ybS1jb250cm9se2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjMwcHh9LmZvcm0tZ3JvdXAtc20gc2VsZWN0W211bHRpcGxlXS5mb3JtLWNvbnRyb2wsLmZvcm0tZ3JvdXAtc20gdGV4dGFyZWEuZm9ybS1jb250cm9se2hlaWdodDphdXRvfS5mb3JtLWdyb3VwLXNtIC5mb3JtLWNvbnRyb2wtc3RhdGlje2hlaWdodDozMHB4O21pbi1oZWlnaHQ6MzJweDtwYWRkaW5nOjZweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNX0uaW5wdXQtbGd7aGVpZ2h0OjQ2cHg7cGFkZGluZzoxMHB4IDE2cHg7Zm9udC1zaXplOjE4cHg7bGluZS1oZWlnaHQ6MS4zMzMzMzMzO2JvcmRlci1yYWRpdXM6NnB4fXNlbGVjdC5pbnB1dC1sZ3toZWlnaHQ6NDZweDtsaW5lLWhlaWdodDo0NnB4fXNlbGVjdFttdWx0aXBsZV0uaW5wdXQtbGcsdGV4dGFyZWEuaW5wdXQtbGd7aGVpZ2h0OmF1dG99LmZvcm0tZ3JvdXAtbGcgLmZvcm0tY29udHJvbHtoZWlnaHQ6NDZweDtwYWRkaW5nOjEwcHggMTZweDtmb250LXNpemU6MThweDtsaW5lLWhlaWdodDoxLjMzMzMzMzM7Ym9yZGVyLXJhZGl1czo2cHh9LmZvcm0tZ3JvdXAtbGcgc2VsZWN0LmZvcm0tY29udHJvbHtoZWlnaHQ6NDZweDtsaW5lLWhlaWdodDo0NnB4fS5mb3JtLWdyb3VwLWxnIHNlbGVjdFttdWx0aXBsZV0uZm9ybS1jb250cm9sLC5mb3JtLWdyb3VwLWxnIHRleHRhcmVhLmZvcm0tY29udHJvbHtoZWlnaHQ6YXV0b30uZm9ybS1ncm91cC1sZyAuZm9ybS1jb250cm9sLXN0YXRpY3toZWlnaHQ6NDZweDttaW4taGVpZ2h0OjM4cHg7cGFkZGluZzoxMXB4IDE2cHg7Zm9udC1zaXplOjE4cHg7bGluZS1oZWlnaHQ6MS4zMzMzMzMzfS5oYXMtZmVlZGJhY2t7cG9zaXRpb246cmVsYXRpdmV9Lmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9se3BhZGRpbmctcmlnaHQ6NDIuNXB4fS5mb3JtLWNvbnRyb2wtZmVlZGJhY2t7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDt6LWluZGV4OjI7ZGlzcGxheTpibG9jazt3aWR0aDozNHB4O2hlaWdodDozNHB4O2xpbmUtaGVpZ2h0OjM0cHg7dGV4dC1hbGlnbjpjZW50ZXI7cG9pbnRlci1ldmVudHM6bm9uZX0uZm9ybS1ncm91cC1sZyAuZm9ybS1jb250cm9sKy5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssLmlucHV0LWdyb3VwLWxnKy5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssLmlucHV0LWxnKy5mb3JtLWNvbnRyb2wtZmVlZGJhY2t7d2lkdGg6NDZweDtoZWlnaHQ6NDZweDtsaW5lLWhlaWdodDo0NnB4fS5mb3JtLWdyb3VwLXNtIC5mb3JtLWNvbnRyb2wrLmZvcm0tY29udHJvbC1mZWVkYmFjaywuaW5wdXQtZ3JvdXAtc20rLmZvcm0tY29udHJvbC1mZWVkYmFjaywuaW5wdXQtc20rLmZvcm0tY29udHJvbC1mZWVkYmFja3t3aWR0aDozMHB4O2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjMwcHh9Lmhhcy1zdWNjZXNzIC5jaGVja2JveCwuaGFzLXN1Y2Nlc3MgLmNoZWNrYm94LWlubGluZSwuaGFzLXN1Y2Nlc3MgLmNvbnRyb2wtbGFiZWwsLmhhcy1zdWNjZXNzIC5oZWxwLWJsb2NrLC5oYXMtc3VjY2VzcyAucmFkaW8sLmhhcy1zdWNjZXNzIC5yYWRpby1pbmxpbmUsLmhhcy1zdWNjZXNzLmNoZWNrYm94IGxhYmVsLC5oYXMtc3VjY2Vzcy5jaGVja2JveC1pbmxpbmUgbGFiZWwsLmhhcy1zdWNjZXNzLnJhZGlvIGxhYmVsLC5oYXMtc3VjY2Vzcy5yYWRpby1pbmxpbmUgbGFiZWx7Y29sb3I6IzNjNzYzZH0uaGFzLXN1Y2Nlc3MgLmZvcm0tY29udHJvbHtib3JkZXItY29sb3I6IzNjNzYzZDstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KX0uaGFzLXN1Y2Nlc3MgLmZvcm0tY29udHJvbDpmb2N1c3tib3JkZXItY29sb3I6IzJiNTQyYzstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSksMCAwIDZweCAjNjdiMTY4O2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSksMCAwIDZweCAjNjdiMTY4fS5oYXMtc3VjY2VzcyAuaW5wdXQtZ3JvdXAtYWRkb257Y29sb3I6IzNjNzYzZDtiYWNrZ3JvdW5kLWNvbG9yOiNkZmYwZDg7Ym9yZGVyLWNvbG9yOiMzYzc2M2R9Lmhhcy1zdWNjZXNzIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2t7Y29sb3I6IzNjNzYzZH0uaGFzLXdhcm5pbmcgLmNoZWNrYm94LC5oYXMtd2FybmluZyAuY2hlY2tib3gtaW5saW5lLC5oYXMtd2FybmluZyAuY29udHJvbC1sYWJlbCwuaGFzLXdhcm5pbmcgLmhlbHAtYmxvY2ssLmhhcy13YXJuaW5nIC5yYWRpbywuaGFzLXdhcm5pbmcgLnJhZGlvLWlubGluZSwuaGFzLXdhcm5pbmcuY2hlY2tib3ggbGFiZWwsLmhhcy13YXJuaW5nLmNoZWNrYm94LWlubGluZSBsYWJlbCwuaGFzLXdhcm5pbmcucmFkaW8gbGFiZWwsLmhhcy13YXJuaW5nLnJhZGlvLWlubGluZSBsYWJlbHtjb2xvcjojOGE2ZDNifS5oYXMtd2FybmluZyAuZm9ybS1jb250cm9se2JvcmRlci1jb2xvcjojOGE2ZDNiOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpfS5oYXMtd2FybmluZyAuZm9ybS1jb250cm9sOmZvY3Vze2JvcmRlci1jb2xvcjojNjY1MTJjOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KSwwIDAgNnB4ICNjMGExNmI7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KSwwIDAgNnB4ICNjMGExNmJ9Lmhhcy13YXJuaW5nIC5pbnB1dC1ncm91cC1hZGRvbntjb2xvcjojOGE2ZDNiO2JhY2tncm91bmQtY29sb3I6I2ZjZjhlMztib3JkZXItY29sb3I6IzhhNmQzYn0uaGFzLXdhcm5pbmcgLmZvcm0tY29udHJvbC1mZWVkYmFja3tjb2xvcjojOGE2ZDNifS5oYXMtZXJyb3IgLmNoZWNrYm94LC5oYXMtZXJyb3IgLmNoZWNrYm94LWlubGluZSwuaGFzLWVycm9yIC5jb250cm9sLWxhYmVsLC5oYXMtZXJyb3IgLmhlbHAtYmxvY2ssLmhhcy1lcnJvciAucmFkaW8sLmhhcy1lcnJvciAucmFkaW8taW5saW5lLC5oYXMtZXJyb3IuY2hlY2tib3ggbGFiZWwsLmhhcy1lcnJvci5jaGVja2JveC1pbmxpbmUgbGFiZWwsLmhhcy1lcnJvci5yYWRpbyBsYWJlbCwuaGFzLWVycm9yLnJhZGlvLWlubGluZSBsYWJlbHtjb2xvcjojYTk0NDQyfS5oYXMtZXJyb3IgLmZvcm0tY29udHJvbHtib3JkZXItY29sb3I6I2E5NDQ0Mjstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KX0uaGFzLWVycm9yIC5mb3JtLWNvbnRyb2w6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM4NDM1MzQ7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpLDAgMCA2cHggI2NlODQ4Mztib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpLDAgMCA2cHggI2NlODQ4M30uaGFzLWVycm9yIC5pbnB1dC1ncm91cC1hZGRvbntjb2xvcjojYTk0NDQyO2JhY2tncm91bmQtY29sb3I6I2YyZGVkZTtib3JkZXItY29sb3I6I2E5NDQ0Mn0uaGFzLWVycm9yIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2t7Y29sb3I6I2E5NDQ0Mn0uaGFzLWZlZWRiYWNrIGxhYmVsfi5mb3JtLWNvbnRyb2wtZmVlZGJhY2t7dG9wOjI1cHh9Lmhhcy1mZWVkYmFjayBsYWJlbC5zci1vbmx5fi5mb3JtLWNvbnRyb2wtZmVlZGJhY2t7dG9wOjB9LmhlbHAtYmxvY2t7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjVweDttYXJnaW4tYm90dG9tOjEwcHg7Y29sb3I6IzczNzM3M31AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmZvcm0taW5saW5lIC5mb3JtLWdyb3Vwe2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1ib3R0b206MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmZvcm0taW5saW5lIC5mb3JtLWNvbnRyb2x7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6YXV0bzt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmZvcm0taW5saW5lIC5mb3JtLWNvbnRyb2wtc3RhdGlje2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXB7ZGlzcGxheTppbmxpbmUtdGFibGU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbCwuZm9ybS1pbmxpbmUgLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1hZGRvbiwuZm9ybS1pbmxpbmUgLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1idG57d2lkdGg6YXV0b30uZm9ybS1pbmxpbmUgLmlucHV0LWdyb3VwPi5mb3JtLWNvbnRyb2x7d2lkdGg6MTAwJX0uZm9ybS1pbmxpbmUgLmNvbnRyb2wtbGFiZWx7bWFyZ2luLWJvdHRvbTowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZm9ybS1pbmxpbmUgLmNoZWNrYm94LC5mb3JtLWlubGluZSAucmFkaW97ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmZvcm0taW5saW5lIC5jaGVja2JveCBsYWJlbCwuZm9ybS1pbmxpbmUgLnJhZGlvIGxhYmVse3BhZGRpbmctbGVmdDowfS5mb3JtLWlubGluZSAuY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0sLmZvcm0taW5saW5lIC5yYWRpbyBpbnB1dFt0eXBlPXJhZGlvXXtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tbGVmdDowfS5mb3JtLWlubGluZSAuaGFzLWZlZWRiYWNrIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2t7dG9wOjB9fS5mb3JtLWhvcml6b250YWwgLmNoZWNrYm94LC5mb3JtLWhvcml6b250YWwgLmNoZWNrYm94LWlubGluZSwuZm9ybS1ob3Jpem9udGFsIC5yYWRpbywuZm9ybS1ob3Jpem9udGFsIC5yYWRpby1pbmxpbmV7cGFkZGluZy10b3A6N3B4O21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjB9LmZvcm0taG9yaXpvbnRhbCAuY2hlY2tib3gsLmZvcm0taG9yaXpvbnRhbCAucmFkaW97bWluLWhlaWdodDoyN3B4fS5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXB7bWFyZ2luLXJpZ2h0Oi0xNXB4O21hcmdpbi1sZWZ0Oi0xNXB4fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWxhYmVse3BhZGRpbmctdG9wOjdweDttYXJnaW4tYm90dG9tOjA7dGV4dC1hbGlnbjpyaWdodH19LmZvcm0taG9yaXpvbnRhbCAuaGFzLWZlZWRiYWNrIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2t7cmlnaHQ6MTVweH1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cC1sZyAuY29udHJvbC1sYWJlbHtwYWRkaW5nLXRvcDoxNC4zM3B4O2ZvbnQtc2l6ZToxOHB4fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cC1zbSAuY29udHJvbC1sYWJlbHtwYWRkaW5nLXRvcDo2cHg7Zm9udC1zaXplOjEycHh9fS5idG57ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzo2cHggMTJweDttYXJnaW4tYm90dG9tOjA7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNDI4NTcxNDM7dGV4dC1hbGlnbjpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTstbXMtdG91Y2gtYWN0aW9uOm1hbmlwdWxhdGlvbjt0b3VjaC1hY3Rpb246bWFuaXB1bGF0aW9uO2N1cnNvcjpwb2ludGVyOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjRweH0uYnRuLmFjdGl2ZS5mb2N1cywuYnRuLmFjdGl2ZTpmb2N1cywuYnRuLmZvY3VzLC5idG46YWN0aXZlLmZvY3VzLC5idG46YWN0aXZlOmZvY3VzLC5idG46Zm9jdXN7b3V0bGluZTp0aGluIGRvdHRlZDtvdXRsaW5lOjVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDotMnB4fS5idG4uZm9jdXMsLmJ0bjpmb2N1cywuYnRuOmhvdmVye2NvbG9yOiMzMzM7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmJ0bi5hY3RpdmUsLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1pbWFnZTpub25lO291dGxpbmU6MDstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAzcHggNXB4IHJnYmEoMCwwLDAsLjEyNSk7Ym94LXNoYWRvdzppbnNldCAwIDNweCA1cHggcmdiYSgwLDAsMCwuMTI1KX0uYnRuLmRpc2FibGVkLC5idG5bZGlzYWJsZWRdLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRue2N1cnNvcjpub3QtYWxsb3dlZDtmaWx0ZXI6YWxwaGEob3BhY2l0eT02NSk7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lO29wYWNpdHk6LjY1fWEuYnRuLmRpc2FibGVkLGZpZWxkc2V0W2Rpc2FibGVkXSBhLmJ0bntwb2ludGVyLWV2ZW50czpub25lfS5idG4tZGVmYXVsdHtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItY29sb3I6I2NjY30uYnRuLWRlZmF1bHQuZm9jdXMsLmJ0bi1kZWZhdWx0OmZvY3Vze2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2O2JvcmRlci1jb2xvcjojOGM4YzhjfS5idG4tZGVmYXVsdDpob3Zlcntjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNjtib3JkZXItY29sb3I6I2FkYWRhZH0uYnRuLWRlZmF1bHQuYWN0aXZlLC5idG4tZGVmYXVsdDphY3RpdmUsLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZS5idG4tZGVmYXVsdHtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNjtib3JkZXItY29sb3I6I2FkYWRhZH0uYnRuLWRlZmF1bHQuYWN0aXZlLmZvY3VzLC5idG4tZGVmYXVsdC5hY3RpdmU6Zm9jdXMsLmJ0bi1kZWZhdWx0LmFjdGl2ZTpob3ZlciwuYnRuLWRlZmF1bHQ6YWN0aXZlLmZvY3VzLC5idG4tZGVmYXVsdDphY3RpdmU6Zm9jdXMsLmJ0bi1kZWZhdWx0OmFjdGl2ZTpob3Zlciwub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi1kZWZhdWx0LmZvY3VzLC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLWRlZmF1bHQ6Zm9jdXMsLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZS5idG4tZGVmYXVsdDpob3Zlcntjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2Q0ZDRkNDtib3JkZXItY29sb3I6IzhjOGM4Y30uYnRuLWRlZmF1bHQuYWN0aXZlLC5idG4tZGVmYXVsdDphY3RpdmUsLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZS5idG4tZGVmYXVsdHtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9LmJ0bi1kZWZhdWx0LmRpc2FibGVkLC5idG4tZGVmYXVsdC5kaXNhYmxlZC5hY3RpdmUsLmJ0bi1kZWZhdWx0LmRpc2FibGVkLmZvY3VzLC5idG4tZGVmYXVsdC5kaXNhYmxlZDphY3RpdmUsLmJ0bi1kZWZhdWx0LmRpc2FibGVkOmZvY3VzLC5idG4tZGVmYXVsdC5kaXNhYmxlZDpob3ZlciwuYnRuLWRlZmF1bHRbZGlzYWJsZWRdLC5idG4tZGVmYXVsdFtkaXNhYmxlZF0uYWN0aXZlLC5idG4tZGVmYXVsdFtkaXNhYmxlZF0uZm9jdXMsLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXTphY3RpdmUsLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXTpmb2N1cywuYnRuLWRlZmF1bHRbZGlzYWJsZWRdOmhvdmVyLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGVmYXVsdC5hY3RpdmUsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGVmYXVsdC5mb2N1cyxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kZWZhdWx0OmFjdGl2ZSxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kZWZhdWx0OmZvY3VzLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjojY2NjfS5idG4tZGVmYXVsdCAuYmFkZ2V7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMzMzN9LmJ0bi1wcmltYXJ5e2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMzM3YWI3O2JvcmRlci1jb2xvcjojMmU2ZGE0fS5idG4tcHJpbWFyeS5mb2N1cywuYnRuLXByaW1hcnk6Zm9jdXN7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMyODYwOTA7Ym9yZGVyLWNvbG9yOiMxMjJiNDB9LmJ0bi1wcmltYXJ5OmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMjg2MDkwO2JvcmRlci1jb2xvcjojMjA0ZDc0fS5idG4tcHJpbWFyeS5hY3RpdmUsLmJ0bi1wcmltYXJ5OmFjdGl2ZSwub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi1wcmltYXJ5e2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMjg2MDkwO2JvcmRlci1jb2xvcjojMjA0ZDc0fS5idG4tcHJpbWFyeS5hY3RpdmUuZm9jdXMsLmJ0bi1wcmltYXJ5LmFjdGl2ZTpmb2N1cywuYnRuLXByaW1hcnkuYWN0aXZlOmhvdmVyLC5idG4tcHJpbWFyeTphY3RpdmUuZm9jdXMsLmJ0bi1wcmltYXJ5OmFjdGl2ZTpmb2N1cywuYnRuLXByaW1hcnk6YWN0aXZlOmhvdmVyLC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLXByaW1hcnkuZm9jdXMsLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZS5idG4tcHJpbWFyeTpmb2N1cywub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi1wcmltYXJ5OmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMjA0ZDc0O2JvcmRlci1jb2xvcjojMTIyYjQwfS5idG4tcHJpbWFyeS5hY3RpdmUsLmJ0bi1wcmltYXJ5OmFjdGl2ZSwub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi1wcmltYXJ5e2JhY2tncm91bmQtaW1hZ2U6bm9uZX0uYnRuLXByaW1hcnkuZGlzYWJsZWQsLmJ0bi1wcmltYXJ5LmRpc2FibGVkLmFjdGl2ZSwuYnRuLXByaW1hcnkuZGlzYWJsZWQuZm9jdXMsLmJ0bi1wcmltYXJ5LmRpc2FibGVkOmFjdGl2ZSwuYnRuLXByaW1hcnkuZGlzYWJsZWQ6Zm9jdXMsLmJ0bi1wcmltYXJ5LmRpc2FibGVkOmhvdmVyLC5idG4tcHJpbWFyeVtkaXNhYmxlZF0sLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXS5hY3RpdmUsLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXS5mb2N1cywuYnRuLXByaW1hcnlbZGlzYWJsZWRdOmFjdGl2ZSwuYnRuLXByaW1hcnlbZGlzYWJsZWRdOmZvY3VzLC5idG4tcHJpbWFyeVtkaXNhYmxlZF06aG92ZXIsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeSxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5LmFjdGl2ZSxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5LmZvY3VzLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXByaW1hcnk6YWN0aXZlLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXByaW1hcnk6Zm9jdXMsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMzMzdhYjc7Ym9yZGVyLWNvbG9yOiMyZTZkYTR9LmJ0bi1wcmltYXJ5IC5iYWRnZXtjb2xvcjojMzM3YWI3O2JhY2tncm91bmQtY29sb3I6I2ZmZn0uYnRuLXN1Y2Nlc3N7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM1Y2I4NWM7Ym9yZGVyLWNvbG9yOiM0Y2FlNGN9LmJ0bi1zdWNjZXNzLmZvY3VzLC5idG4tc3VjY2Vzczpmb2N1c3tjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzQ0OWQ0NDtib3JkZXItY29sb3I6IzI1NTYyNX0uYnRuLXN1Y2Nlc3M6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM0NDlkNDQ7Ym9yZGVyLWNvbG9yOiMzOTg0Mzl9LmJ0bi1zdWNjZXNzLmFjdGl2ZSwuYnRuLXN1Y2Nlc3M6YWN0aXZlLC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLXN1Y2Nlc3N7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM0NDlkNDQ7Ym9yZGVyLWNvbG9yOiMzOTg0Mzl9LmJ0bi1zdWNjZXNzLmFjdGl2ZS5mb2N1cywuYnRuLXN1Y2Nlc3MuYWN0aXZlOmZvY3VzLC5idG4tc3VjY2Vzcy5hY3RpdmU6aG92ZXIsLmJ0bi1zdWNjZXNzOmFjdGl2ZS5mb2N1cywuYnRuLXN1Y2Nlc3M6YWN0aXZlOmZvY3VzLC5idG4tc3VjY2VzczphY3RpdmU6aG92ZXIsLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZS5idG4tc3VjY2Vzcy5mb2N1cywub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi1zdWNjZXNzOmZvY3VzLC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLXN1Y2Nlc3M6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMzOTg0Mzk7Ym9yZGVyLWNvbG9yOiMyNTU2MjV9LmJ0bi1zdWNjZXNzLmFjdGl2ZSwuYnRuLXN1Y2Nlc3M6YWN0aXZlLC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLXN1Y2Nlc3N7YmFja2dyb3VuZC1pbWFnZTpub25lfS5idG4tc3VjY2Vzcy5kaXNhYmxlZCwuYnRuLXN1Y2Nlc3MuZGlzYWJsZWQuYWN0aXZlLC5idG4tc3VjY2Vzcy5kaXNhYmxlZC5mb2N1cywuYnRuLXN1Y2Nlc3MuZGlzYWJsZWQ6YWN0aXZlLC5idG4tc3VjY2Vzcy5kaXNhYmxlZDpmb2N1cywuYnRuLXN1Y2Nlc3MuZGlzYWJsZWQ6aG92ZXIsLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXSwuYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdLmFjdGl2ZSwuYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdLmZvY3VzLC5idG4tc3VjY2Vzc1tkaXNhYmxlZF06YWN0aXZlLC5idG4tc3VjY2Vzc1tkaXNhYmxlZF06Zm9jdXMsLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXTpob3ZlcixmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3MuYWN0aXZlLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3MuZm9jdXMsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tc3VjY2VzczphY3RpdmUsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tc3VjY2Vzczpmb2N1cyxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzVjYjg1Yztib3JkZXItY29sb3I6IzRjYWU0Y30uYnRuLXN1Y2Nlc3MgLmJhZGdle2NvbG9yOiM1Y2I4NWM7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5idG4taW5mb3tjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzViYzBkZTtib3JkZXItY29sb3I6IzQ2YjhkYX0uYnRuLWluZm8uZm9jdXMsLmJ0bi1pbmZvOmZvY3Vze2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMzFiMGQ1O2JvcmRlci1jb2xvcjojMWI2ZDg1fS5idG4taW5mbzpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzMxYjBkNTtib3JkZXItY29sb3I6IzI2OWFiY30uYnRuLWluZm8uYWN0aXZlLC5idG4taW5mbzphY3RpdmUsLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZS5idG4taW5mb3tjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzMxYjBkNTtib3JkZXItY29sb3I6IzI2OWFiY30uYnRuLWluZm8uYWN0aXZlLmZvY3VzLC5idG4taW5mby5hY3RpdmU6Zm9jdXMsLmJ0bi1pbmZvLmFjdGl2ZTpob3ZlciwuYnRuLWluZm86YWN0aXZlLmZvY3VzLC5idG4taW5mbzphY3RpdmU6Zm9jdXMsLmJ0bi1pbmZvOmFjdGl2ZTpob3Zlciwub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi1pbmZvLmZvY3VzLC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLWluZm86Zm9jdXMsLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZS5idG4taW5mbzpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzI2OWFiYztib3JkZXItY29sb3I6IzFiNmQ4NX0uYnRuLWluZm8uYWN0aXZlLC5idG4taW5mbzphY3RpdmUsLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZS5idG4taW5mb3tiYWNrZ3JvdW5kLWltYWdlOm5vbmV9LmJ0bi1pbmZvLmRpc2FibGVkLC5idG4taW5mby5kaXNhYmxlZC5hY3RpdmUsLmJ0bi1pbmZvLmRpc2FibGVkLmZvY3VzLC5idG4taW5mby5kaXNhYmxlZDphY3RpdmUsLmJ0bi1pbmZvLmRpc2FibGVkOmZvY3VzLC5idG4taW5mby5kaXNhYmxlZDpob3ZlciwuYnRuLWluZm9bZGlzYWJsZWRdLC5idG4taW5mb1tkaXNhYmxlZF0uYWN0aXZlLC5idG4taW5mb1tkaXNhYmxlZF0uZm9jdXMsLmJ0bi1pbmZvW2Rpc2FibGVkXTphY3RpdmUsLmJ0bi1pbmZvW2Rpc2FibGVkXTpmb2N1cywuYnRuLWluZm9bZGlzYWJsZWRdOmhvdmVyLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm8sZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mby5hY3RpdmUsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mby5mb2N1cyxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1pbmZvOmFjdGl2ZSxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1pbmZvOmZvY3VzLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm86aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNWJjMGRlO2JvcmRlci1jb2xvcjojNDZiOGRhfS5idG4taW5mbyAuYmFkZ2V7Y29sb3I6IzViYzBkZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmJ0bi13YXJuaW5ne2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojZjBhZDRlO2JvcmRlci1jb2xvcjojZWVhMjM2fS5idG4td2FybmluZy5mb2N1cywuYnRuLXdhcm5pbmc6Zm9jdXN7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNlYzk3MWY7Ym9yZGVyLWNvbG9yOiM5ODVmMGR9LmJ0bi13YXJuaW5nOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojZWM5NzFmO2JvcmRlci1jb2xvcjojZDU4NTEyfS5idG4td2FybmluZy5hY3RpdmUsLmJ0bi13YXJuaW5nOmFjdGl2ZSwub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi13YXJuaW5ne2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojZWM5NzFmO2JvcmRlci1jb2xvcjojZDU4NTEyfS5idG4td2FybmluZy5hY3RpdmUuZm9jdXMsLmJ0bi13YXJuaW5nLmFjdGl2ZTpmb2N1cywuYnRuLXdhcm5pbmcuYWN0aXZlOmhvdmVyLC5idG4td2FybmluZzphY3RpdmUuZm9jdXMsLmJ0bi13YXJuaW5nOmFjdGl2ZTpmb2N1cywuYnRuLXdhcm5pbmc6YWN0aXZlOmhvdmVyLC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLXdhcm5pbmcuZm9jdXMsLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZS5idG4td2FybmluZzpmb2N1cywub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi13YXJuaW5nOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojZDU4NTEyO2JvcmRlci1jb2xvcjojOTg1ZjBkfS5idG4td2FybmluZy5hY3RpdmUsLmJ0bi13YXJuaW5nOmFjdGl2ZSwub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi13YXJuaW5ne2JhY2tncm91bmQtaW1hZ2U6bm9uZX0uYnRuLXdhcm5pbmcuZGlzYWJsZWQsLmJ0bi13YXJuaW5nLmRpc2FibGVkLmFjdGl2ZSwuYnRuLXdhcm5pbmcuZGlzYWJsZWQuZm9jdXMsLmJ0bi13YXJuaW5nLmRpc2FibGVkOmFjdGl2ZSwuYnRuLXdhcm5pbmcuZGlzYWJsZWQ6Zm9jdXMsLmJ0bi13YXJuaW5nLmRpc2FibGVkOmhvdmVyLC5idG4td2FybmluZ1tkaXNhYmxlZF0sLmJ0bi13YXJuaW5nW2Rpc2FibGVkXS5hY3RpdmUsLmJ0bi13YXJuaW5nW2Rpc2FibGVkXS5mb2N1cywuYnRuLXdhcm5pbmdbZGlzYWJsZWRdOmFjdGl2ZSwuYnRuLXdhcm5pbmdbZGlzYWJsZWRdOmZvY3VzLC5idG4td2FybmluZ1tkaXNhYmxlZF06aG92ZXIsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4td2FybmluZyxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nLmFjdGl2ZSxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nLmZvY3VzLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXdhcm5pbmc6YWN0aXZlLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXdhcm5pbmc6Zm9jdXMsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4td2FybmluZzpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmMGFkNGU7Ym9yZGVyLWNvbG9yOiNlZWEyMzZ9LmJ0bi13YXJuaW5nIC5iYWRnZXtjb2xvcjojZjBhZDRlO2JhY2tncm91bmQtY29sb3I6I2ZmZn0uYnRuLWRhbmdlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2Q5NTM0Zjtib3JkZXItY29sb3I6I2Q0M2YzYX0uYnRuLWRhbmdlci5mb2N1cywuYnRuLWRhbmdlcjpmb2N1c3tjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2M5MzAyYztib3JkZXItY29sb3I6Izc2MWMxOX0uYnRuLWRhbmdlcjpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2M5MzAyYztib3JkZXItY29sb3I6I2FjMjkyNX0uYnRuLWRhbmdlci5hY3RpdmUsLmJ0bi1kYW5nZXI6YWN0aXZlLC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLWRhbmdlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2M5MzAyYztib3JkZXItY29sb3I6I2FjMjkyNX0uYnRuLWRhbmdlci5hY3RpdmUuZm9jdXMsLmJ0bi1kYW5nZXIuYWN0aXZlOmZvY3VzLC5idG4tZGFuZ2VyLmFjdGl2ZTpob3ZlciwuYnRuLWRhbmdlcjphY3RpdmUuZm9jdXMsLmJ0bi1kYW5nZXI6YWN0aXZlOmZvY3VzLC5idG4tZGFuZ2VyOmFjdGl2ZTpob3Zlciwub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi1kYW5nZXIuZm9jdXMsLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZS5idG4tZGFuZ2VyOmZvY3VzLC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLWRhbmdlcjpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2FjMjkyNTtib3JkZXItY29sb3I6Izc2MWMxOX0uYnRuLWRhbmdlci5hY3RpdmUsLmJ0bi1kYW5nZXI6YWN0aXZlLC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLWRhbmdlcntiYWNrZ3JvdW5kLWltYWdlOm5vbmV9LmJ0bi1kYW5nZXIuZGlzYWJsZWQsLmJ0bi1kYW5nZXIuZGlzYWJsZWQuYWN0aXZlLC5idG4tZGFuZ2VyLmRpc2FibGVkLmZvY3VzLC5idG4tZGFuZ2VyLmRpc2FibGVkOmFjdGl2ZSwuYnRuLWRhbmdlci5kaXNhYmxlZDpmb2N1cywuYnRuLWRhbmdlci5kaXNhYmxlZDpob3ZlciwuYnRuLWRhbmdlcltkaXNhYmxlZF0sLmJ0bi1kYW5nZXJbZGlzYWJsZWRdLmFjdGl2ZSwuYnRuLWRhbmdlcltkaXNhYmxlZF0uZm9jdXMsLmJ0bi1kYW5nZXJbZGlzYWJsZWRdOmFjdGl2ZSwuYnRuLWRhbmdlcltkaXNhYmxlZF06Zm9jdXMsLmJ0bi1kYW5nZXJbZGlzYWJsZWRdOmhvdmVyLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlcixmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kYW5nZXIuYWN0aXZlLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlci5mb2N1cyxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kYW5nZXI6YWN0aXZlLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlcjpmb2N1cyxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kYW5nZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZDk1MzRmO2JvcmRlci1jb2xvcjojZDQzZjNhfS5idG4tZGFuZ2VyIC5iYWRnZXtjb2xvcjojZDk1MzRmO2JhY2tncm91bmQtY29sb3I6I2ZmZn0uYnRuLWxpbmt7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiMzMzdhYjc7Ym9yZGVyLXJhZGl1czowfS5idG4tbGluaywuYnRuLWxpbmsuYWN0aXZlLC5idG4tbGluazphY3RpdmUsLmJ0bi1saW5rW2Rpc2FibGVkXSxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1saW5re2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS5idG4tbGluaywuYnRuLWxpbms6YWN0aXZlLC5idG4tbGluazpmb2N1cywuYnRuLWxpbms6aG92ZXJ7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5idG4tbGluazpmb2N1cywuYnRuLWxpbms6aG92ZXJ7Y29sb3I6IzIzNTI3Yzt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmJ0bi1saW5rW2Rpc2FibGVkXTpmb2N1cywuYnRuLWxpbmtbZGlzYWJsZWRdOmhvdmVyLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWxpbms6Zm9jdXMsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tbGluazpob3Zlcntjb2xvcjojNzc3O3RleHQtZGVjb3JhdGlvbjpub25lfS5idG4tZ3JvdXAtbGc+LmJ0biwuYnRuLWxne3BhZGRpbmc6MTBweCAxNnB4O2ZvbnQtc2l6ZToxOHB4O2xpbmUtaGVpZ2h0OjEuMzMzMzMzMztib3JkZXItcmFkaXVzOjZweH0uYnRuLWdyb3VwLXNtPi5idG4sLmJ0bi1zbXtwYWRkaW5nOjVweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNTtib3JkZXItcmFkaXVzOjNweH0uYnRuLWdyb3VwLXhzPi5idG4sLmJ0bi14c3twYWRkaW5nOjFweCA1cHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MS41O2JvcmRlci1yYWRpdXM6M3B4fS5idG4tYmxvY2t7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlfS5idG4tYmxvY2srLmJ0bi1ibG9ja3ttYXJnaW4tdG9wOjVweH1pbnB1dFt0eXBlPWJ1dHRvbl0uYnRuLWJsb2NrLGlucHV0W3R5cGU9cmVzZXRdLmJ0bi1ibG9jayxpbnB1dFt0eXBlPXN1Ym1pdF0uYnRuLWJsb2Nre3dpZHRoOjEwMCV9LmZhZGV7b3BhY2l0eTowOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyOy1vLXRyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcjt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyBsaW5lYXJ9LmZhZGUuaW57b3BhY2l0eToxfS5jb2xsYXBzZXtkaXNwbGF5Om5vbmV9LmNvbGxhcHNlLmlue2Rpc3BsYXk6YmxvY2t9dHIuY29sbGFwc2UuaW57ZGlzcGxheTp0YWJsZS1yb3d9dGJvZHkuY29sbGFwc2UuaW57ZGlzcGxheTp0YWJsZS1yb3ctZ3JvdXB9LmNvbGxhcHNpbmd7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjA7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZTstby10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2U7LXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOi4zNXM7LW8tdHJhbnNpdGlvbi1kdXJhdGlvbjouMzVzO3RyYW5zaXRpb24tZHVyYXRpb246LjM1czstd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHk6aGVpZ2h0LHZpc2liaWxpdHk7LW8tdHJhbnNpdGlvbi1wcm9wZXJ0eTpoZWlnaHQsdmlzaWJpbGl0eTt0cmFuc2l0aW9uLXByb3BlcnR5OmhlaWdodCx2aXNpYmlsaXR5fS5jYXJldHtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDowO2hlaWdodDowO21hcmdpbi1sZWZ0OjJweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyLXRvcDo0cHggZGFzaGVkO2JvcmRlci10b3A6NHB4IHNvbGlkXDk7Ym9yZGVyLXJpZ2h0OjRweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDo0cHggc29saWQgdHJhbnNwYXJlbnR9LmRyb3Bkb3duLC5kcm9wdXB7cG9zaXRpb246cmVsYXRpdmV9LmRyb3Bkb3duLXRvZ2dsZTpmb2N1c3tvdXRsaW5lOjB9LmRyb3Bkb3duLW1lbnV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7bGVmdDowO3otaW5kZXg6MTAwMDtkaXNwbGF5Om5vbmU7ZmxvYXQ6bGVmdDttaW4td2lkdGg6MTYwcHg7cGFkZGluZzo1cHggMDttYXJnaW46MnB4IDAgMDtmb250LXNpemU6MTRweDt0ZXh0LWFsaWduOmxlZnQ7bGlzdC1zdHlsZTpub25lO2JhY2tncm91bmQtY29sb3I6I2ZmZjstd2Via2l0LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDtiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuMTUpO2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDZweCAxMnB4IHJnYmEoMCwwLDAsLjE3NSk7Ym94LXNoYWRvdzowIDZweCAxMnB4IHJnYmEoMCwwLDAsLjE3NSl9LmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodHtyaWdodDowO2xlZnQ6YXV0b30uZHJvcGRvd24tbWVudSAuZGl2aWRlcntoZWlnaHQ6MXB4O21hcmdpbjo5cHggMDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjojZTVlNWU1fS5kcm9wZG93bi1tZW51PmxpPmF7ZGlzcGxheTpibG9jaztwYWRkaW5nOjNweCAyMHB4O2NsZWFyOmJvdGg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNDI4NTcxNDM7Y29sb3I6IzMzMzt3aGl0ZS1zcGFjZTpub3dyYXB9LmRyb3Bkb3duLW1lbnU+bGk+YTpmb2N1cywuZHJvcGRvd24tbWVudT5saT5hOmhvdmVye2NvbG9yOiMyNjI2MjY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1fS5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YSwuZHJvcGRvd24tbWVudT4uYWN0aXZlPmE6Zm9jdXMsLmRyb3Bkb3duLW1lbnU+LmFjdGl2ZT5hOmhvdmVye2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojMzM3YWI3O291dGxpbmU6MH0uZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YSwuZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YTpmb2N1cywuZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YTpob3Zlcntjb2xvcjojNzc3fS5kcm9wZG93bi1tZW51Pi5kaXNhYmxlZD5hOmZvY3VzLC5kcm9wZG93bi1tZW51Pi5kaXNhYmxlZD5hOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtaW1hZ2U6bm9uZTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5vcGVuPi5kcm9wZG93bi1tZW51e2Rpc3BsYXk6YmxvY2t9Lm9wZW4+YXtvdXRsaW5lOjB9LmRyb3Bkb3duLW1lbnUtcmlnaHR7cmlnaHQ6MDtsZWZ0OmF1dG99LmRyb3Bkb3duLW1lbnUtbGVmdHtyaWdodDphdXRvO2xlZnQ6MH0uZHJvcGRvd24taGVhZGVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZzozcHggMjBweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjQyODU3MTQzO2NvbG9yOiM3Nzc7d2hpdGUtc3BhY2U6bm93cmFwfS5kcm9wZG93bi1iYWNrZHJvcHtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDt6LWluZGV4Ojk5MH0ucHVsbC1yaWdodD4uZHJvcGRvd24tbWVudXtyaWdodDowO2xlZnQ6YXV0b30uZHJvcHVwIC5jYXJldCwubmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24gLmNhcmV0e2NvbnRlbnQ6IiI7Ym9yZGVyLXRvcDowO2JvcmRlci1ib3R0b206NHB4IGRhc2hlZDtib3JkZXItYm90dG9tOjRweCBzb2xpZFw5fS5kcm9wdXAgLmRyb3Bkb3duLW1lbnUsLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51e3RvcDphdXRvO2JvdHRvbToxMDAlO21hcmdpbi1ib3R0b206MnB4fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsubmF2YmFyLXJpZ2h0IC5kcm9wZG93bi1tZW51e3JpZ2h0OjA7bGVmdDphdXRvfS5uYXZiYXItcmlnaHQgLmRyb3Bkb3duLW1lbnUtbGVmdHtyaWdodDphdXRvO2xlZnQ6MH19LmJ0bi1ncm91cCwuYnRuLWdyb3VwLXZlcnRpY2Fse3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4sLmJ0bi1ncm91cD4uYnRue3Bvc2l0aW9uOnJlbGF0aXZlO2Zsb2F0OmxlZnR9LmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuLmFjdGl2ZSwuYnRuLWdyb3VwLXZlcnRpY2FsPi5idG46YWN0aXZlLC5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bjpmb2N1cywuYnRuLWdyb3VwLXZlcnRpY2FsPi5idG46aG92ZXIsLmJ0bi1ncm91cD4uYnRuLmFjdGl2ZSwuYnRuLWdyb3VwPi5idG46YWN0aXZlLC5idG4tZ3JvdXA+LmJ0bjpmb2N1cywuYnRuLWdyb3VwPi5idG46aG92ZXJ7ei1pbmRleDoyfS5idG4tZ3JvdXAgLmJ0bisuYnRuLC5idG4tZ3JvdXAgLmJ0bisuYnRuLWdyb3VwLC5idG4tZ3JvdXAgLmJ0bi1ncm91cCsuYnRuLC5idG4tZ3JvdXAgLmJ0bi1ncm91cCsuYnRuLWdyb3Vwe21hcmdpbi1sZWZ0Oi0xcHh9LmJ0bi10b29sYmFye21hcmdpbi1sZWZ0Oi01cHh9LmJ0bi10b29sYmFyIC5idG4sLmJ0bi10b29sYmFyIC5idG4tZ3JvdXAsLmJ0bi10b29sYmFyIC5pbnB1dC1ncm91cHtmbG9hdDpsZWZ0fS5idG4tdG9vbGJhcj4uYnRuLC5idG4tdG9vbGJhcj4uYnRuLWdyb3VwLC5idG4tdG9vbGJhcj4uaW5wdXQtZ3JvdXB7bWFyZ2luLWxlZnQ6NXB4fS5idG4tZ3JvdXA+LmJ0bjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKXtib3JkZXItcmFkaXVzOjB9LmJ0bi1ncm91cD4uYnRuOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjB9LmJ0bi1ncm91cD4uYnRuOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5kcm9wZG93bi10b2dnbGUpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uYnRuLWdyb3VwPi5idG46bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSwuYnRuLWdyb3VwPi5kcm9wZG93bi10b2dnbGU6bm90KDpmaXJzdC1jaGlsZCl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uYnRuLWdyb3VwPi5idG4tZ3JvdXB7ZmxvYXQ6bGVmdH0uYnRuLWdyb3VwPi5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKT4uYnRue2JvcmRlci1yYWRpdXM6MH0uYnRuLWdyb3VwPi5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKT4uYnRuOmxhc3QtY2hpbGQsLmJ0bi1ncm91cD4uYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCk+LmRyb3Bkb3duLXRvZ2dsZXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmJ0bi1ncm91cD4uYnRuLWdyb3VwOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCk+LmJ0bjpmaXJzdC1jaGlsZHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5idG4tZ3JvdXAgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmUsLmJ0bi1ncm91cC5vcGVuIC5kcm9wZG93bi10b2dnbGV7b3V0bGluZTowfS5idG4tZ3JvdXA+LmJ0bisuZHJvcGRvd24tdG9nZ2xle3BhZGRpbmctcmlnaHQ6OHB4O3BhZGRpbmctbGVmdDo4cHh9LmJ0bi1ncm91cD4uYnRuLWxnKy5kcm9wZG93bi10b2dnbGV7cGFkZGluZy1yaWdodDoxMnB4O3BhZGRpbmctbGVmdDoxMnB4fS5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xley13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDNweCA1cHggcmdiYSgwLDAsMCwuMTI1KTtib3gtc2hhZG93Omluc2V0IDAgM3B4IDVweCByZ2JhKDAsMCwwLC4xMjUpfS5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1saW5rey13ZWJraXQtYm94LXNoYWRvdzpub25lO2JveC1zaGFkb3c6bm9uZX0uYnRuIC5jYXJldHttYXJnaW4tbGVmdDowfS5idG4tbGcgLmNhcmV0e2JvcmRlci13aWR0aDo1cHggNXB4IDA7Ym9yZGVyLWJvdHRvbS13aWR0aDowfS5kcm9wdXAgLmJ0bi1sZyAuY2FyZXR7Ym9yZGVyLXdpZHRoOjAgNXB4IDVweH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4sLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuLWdyb3VwLC5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1ncm91cD4uYnRue2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bm9uZTt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlfS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1ncm91cD4uYnRue2Zsb2F0Om5vbmV9LmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuKy5idG4sLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuKy5idG4tZ3JvdXAsLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuLWdyb3VwKy5idG4sLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuLWdyb3VwKy5idG4tZ3JvdXB7bWFyZ2luLXRvcDotMXB4O21hcmdpbi1sZWZ0OjB9LmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCl7Ym9yZGVyLXJhZGl1czowfS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bjpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG46bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKT4uYnRue2JvcmRlci1yYWRpdXM6MH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKT4uYnRuOmxhc3QtY2hpbGQsLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCk+LmRyb3Bkb3duLXRvZ2dsZXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA6bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKT4uYnRuOmZpcnN0LWNoaWxke2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowfS5idG4tZ3JvdXAtanVzdGlmaWVke2Rpc3BsYXk6dGFibGU7d2lkdGg6MTAwJTt0YWJsZS1sYXlvdXQ6Zml4ZWQ7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlfS5idG4tZ3JvdXAtanVzdGlmaWVkPi5idG4sLmJ0bi1ncm91cC1qdXN0aWZpZWQ+LmJ0bi1ncm91cHtkaXNwbGF5OnRhYmxlLWNlbGw7ZmxvYXQ6bm9uZTt3aWR0aDoxJX0uYnRuLWdyb3VwLWp1c3RpZmllZD4uYnRuLWdyb3VwIC5idG57d2lkdGg6MTAwJX0uYnRuLWdyb3VwLWp1c3RpZmllZD4uYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51e2xlZnQ6YXV0b31bZGF0YS10b2dnbGU9YnV0dG9uc10+LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XSxbZGF0YS10b2dnbGU9YnV0dG9uc10+LmJ0biBpbnB1dFt0eXBlPXJhZGlvXSxbZGF0YS10b2dnbGU9YnV0dG9uc10+LmJ0bi1ncm91cD4uYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdLFtkYXRhLXRvZ2dsZT1idXR0b25zXT4uYnRuLWdyb3VwPi5idG4gaW5wdXRbdHlwZT1yYWRpb117cG9zaXRpb246YWJzb2x1dGU7Y2xpcDpyZWN0KDAsMCwwLDApO3BvaW50ZXItZXZlbnRzOm5vbmV9LmlucHV0LWdyb3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6dGFibGU7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlfS5pbnB1dC1ncm91cFtjbGFzcyo9Y29sLV17ZmxvYXQ6bm9uZTtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjB9LmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2x7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoyO2Zsb2F0OmxlZnQ7d2lkdGg6MTAwJTttYXJnaW4tYm90dG9tOjB9LmlucHV0LWdyb3VwLWxnPi5mb3JtLWNvbnRyb2wsLmlucHV0LWdyb3VwLWxnPi5pbnB1dC1ncm91cC1hZGRvbiwuaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWJ0bj4uYnRue2hlaWdodDo0NnB4O3BhZGRpbmc6MTBweCAxNnB4O2ZvbnQtc2l6ZToxOHB4O2xpbmUtaGVpZ2h0OjEuMzMzMzMzMztib3JkZXItcmFkaXVzOjZweH1zZWxlY3QuaW5wdXQtZ3JvdXAtbGc+LmZvcm0tY29udHJvbCxzZWxlY3QuaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWFkZG9uLHNlbGVjdC5pbnB1dC1ncm91cC1sZz4uaW5wdXQtZ3JvdXAtYnRuPi5idG57aGVpZ2h0OjQ2cHg7bGluZS1oZWlnaHQ6NDZweH1zZWxlY3RbbXVsdGlwbGVdLmlucHV0LWdyb3VwLWxnPi5mb3JtLWNvbnRyb2wsc2VsZWN0W211bHRpcGxlXS5pbnB1dC1ncm91cC1sZz4uaW5wdXQtZ3JvdXAtYWRkb24sc2VsZWN0W211bHRpcGxlXS5pbnB1dC1ncm91cC1sZz4uaW5wdXQtZ3JvdXAtYnRuPi5idG4sdGV4dGFyZWEuaW5wdXQtZ3JvdXAtbGc+LmZvcm0tY29udHJvbCx0ZXh0YXJlYS5pbnB1dC1ncm91cC1sZz4uaW5wdXQtZ3JvdXAtYWRkb24sdGV4dGFyZWEuaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLWJ0bj4uYnRue2hlaWdodDphdXRvfS5pbnB1dC1ncm91cC1zbT4uZm9ybS1jb250cm9sLC5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYWRkb24sLmlucHV0LWdyb3VwLXNtPi5pbnB1dC1ncm91cC1idG4+LmJ0bntoZWlnaHQ6MzBweDtwYWRkaW5nOjVweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNTtib3JkZXItcmFkaXVzOjNweH1zZWxlY3QuaW5wdXQtZ3JvdXAtc20+LmZvcm0tY29udHJvbCxzZWxlY3QuaW5wdXQtZ3JvdXAtc20+LmlucHV0LWdyb3VwLWFkZG9uLHNlbGVjdC5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYnRuPi5idG57aGVpZ2h0OjMwcHg7bGluZS1oZWlnaHQ6MzBweH1zZWxlY3RbbXVsdGlwbGVdLmlucHV0LWdyb3VwLXNtPi5mb3JtLWNvbnRyb2wsc2VsZWN0W211bHRpcGxlXS5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYWRkb24sc2VsZWN0W211bHRpcGxlXS5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYnRuPi5idG4sdGV4dGFyZWEuaW5wdXQtZ3JvdXAtc20+LmZvcm0tY29udHJvbCx0ZXh0YXJlYS5pbnB1dC1ncm91cC1zbT4uaW5wdXQtZ3JvdXAtYWRkb24sdGV4dGFyZWEuaW5wdXQtZ3JvdXAtc20+LmlucHV0LWdyb3VwLWJ0bj4uYnRue2hlaWdodDphdXRvfS5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sLC5pbnB1dC1ncm91cC1hZGRvbiwuaW5wdXQtZ3JvdXAtYnRue2Rpc3BsYXk6dGFibGUtY2VsbH0uaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLC5pbnB1dC1ncm91cC1hZGRvbjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLC5pbnB1dC1ncm91cC1idG46bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKXtib3JkZXItcmFkaXVzOjB9LmlucHV0LWdyb3VwLWFkZG9uLC5pbnB1dC1ncm91cC1idG57d2lkdGg6MSU7d2hpdGUtc3BhY2U6bm93cmFwO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaW5wdXQtZ3JvdXAtYWRkb257cGFkZGluZzo2cHggMTJweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MTtjb2xvcjojNTU1O3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2VlZTtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czo0cHh9LmlucHV0LWdyb3VwLWFkZG9uLmlucHV0LXNte3BhZGRpbmc6NXB4IDEwcHg7Zm9udC1zaXplOjEycHg7Ym9yZGVyLXJhZGl1czozcHh9LmlucHV0LWdyb3VwLWFkZG9uLmlucHV0LWxne3BhZGRpbmc6MTBweCAxNnB4O2ZvbnQtc2l6ZToxOHB4O2JvcmRlci1yYWRpdXM6NnB4fS5pbnB1dC1ncm91cC1hZGRvbiBpbnB1dFt0eXBlPWNoZWNrYm94XSwuaW5wdXQtZ3JvdXAtYWRkb24gaW5wdXRbdHlwZT1yYWRpb117bWFyZ2luLXRvcDowfS5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmZpcnN0LWNoaWxkLC5pbnB1dC1ncm91cC1hZGRvbjpmaXJzdC1jaGlsZCwuaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkPi5idG4sLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZD4uYnRuLWdyb3VwPi5idG4sLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZD4uZHJvcGRvd24tdG9nZ2xlLC5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZD4uYnRuLWdyb3VwOm5vdCg6bGFzdC1jaGlsZCk+LmJ0biwuaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQ+LmJ0bjpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmlucHV0LWdyb3VwLWFkZG9uOmZpcnN0LWNoaWxke2JvcmRlci1yaWdodDowfS5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmxhc3QtY2hpbGQsLmlucHV0LWdyb3VwLWFkZG9uOmxhc3QtY2hpbGQsLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZD4uYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpPi5idG4sLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZD4uYnRuOm5vdCg6Zmlyc3QtY2hpbGQpLC5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZD4uYnRuLC5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZD4uYnRuLWdyb3VwPi5idG4sLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkPi5kcm9wZG93bi10b2dnbGV7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uaW5wdXQtZ3JvdXAtYWRkb246bGFzdC1jaGlsZHtib3JkZXItbGVmdDowfS5pbnB1dC1ncm91cC1idG57cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjA7d2hpdGUtc3BhY2U6bm93cmFwfS5pbnB1dC1ncm91cC1idG4+LmJ0bntwb3NpdGlvbjpyZWxhdGl2ZX0uaW5wdXQtZ3JvdXAtYnRuPi5idG4rLmJ0bnttYXJnaW4tbGVmdDotMXB4fS5pbnB1dC1ncm91cC1idG4+LmJ0bjphY3RpdmUsLmlucHV0LWdyb3VwLWJ0bj4uYnRuOmZvY3VzLC5pbnB1dC1ncm91cC1idG4+LmJ0bjpob3Zlcnt6LWluZGV4OjJ9LmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZD4uYnRuLC5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQ+LmJ0bi1ncm91cHttYXJnaW4tcmlnaHQ6LTFweH0uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQ+LmJ0biwuaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQ+LmJ0bi1ncm91cHt6LWluZGV4OjI7bWFyZ2luLWxlZnQ6LTFweH0ubmF2e3BhZGRpbmctbGVmdDowO21hcmdpbi1ib3R0b206MDtsaXN0LXN0eWxlOm5vbmV9Lm5hdj5saXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrfS5uYXY+bGk+YXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MTBweCAxNXB4fS5uYXY+bGk+YTpmb2N1cywubmF2PmxpPmE6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5uYXY+bGkuZGlzYWJsZWQ+YXtjb2xvcjojNzc3fS5uYXY+bGkuZGlzYWJsZWQ+YTpmb2N1cywubmF2PmxpLmRpc2FibGVkPmE6aG92ZXJ7Y29sb3I6Izc3Nzt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubmF2IC5vcGVuPmEsLm5hdiAub3Blbj5hOmZvY3VzLC5uYXYgLm9wZW4+YTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7Ym9yZGVyLWNvbG9yOiMzMzdhYjd9Lm5hdiAubmF2LWRpdmlkZXJ7aGVpZ2h0OjFweDttYXJnaW46OXB4IDA7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQtY29sb3I6I2U1ZTVlNX0ubmF2PmxpPmE+aW1ne21heC13aWR0aDpub25lfS5uYXYtdGFic3tib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkfS5uYXYtdGFicz5saXtmbG9hdDpsZWZ0O21hcmdpbi1ib3R0b206LTFweH0ubmF2LXRhYnM+bGk+YXttYXJnaW4tcmlnaHQ6MnB4O2xpbmUtaGVpZ2h0OjEuNDI4NTcxNDM7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjRweCA0cHggMCAwfS5uYXYtdGFicz5saT5hOmhvdmVye2JvcmRlci1jb2xvcjojZWVlICNlZWUgI2RkZH0ubmF2LXRhYnM+bGkuYWN0aXZlPmEsLm5hdi10YWJzPmxpLmFjdGl2ZT5hOmZvY3VzLC5uYXYtdGFicz5saS5hY3RpdmU+YTpob3Zlcntjb2xvcjojNTU1O2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp0cmFuc3BhcmVudH0ubmF2LXRhYnMubmF2LWp1c3RpZmllZHt3aWR0aDoxMDAlO2JvcmRlci1ib3R0b206MH0ubmF2LXRhYnMubmF2LWp1c3RpZmllZD5saXtmbG9hdDpub25lfS5uYXYtdGFicy5uYXYtanVzdGlmaWVkPmxpPmF7bWFyZ2luLWJvdHRvbTo1cHg7dGV4dC1hbGlnbjpjZW50ZXJ9Lm5hdi10YWJzLm5hdi1qdXN0aWZpZWQ+LmRyb3Bkb3duIC5kcm9wZG93bi1tZW51e3RvcDphdXRvO2xlZnQ6YXV0b31AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7Lm5hdi10YWJzLm5hdi1qdXN0aWZpZWQ+bGl7ZGlzcGxheTp0YWJsZS1jZWxsO3dpZHRoOjElfS5uYXYtdGFicy5uYXYtanVzdGlmaWVkPmxpPmF7bWFyZ2luLWJvdHRvbTowfX0ubmF2LXRhYnMubmF2LWp1c3RpZmllZD5saT5he21hcmdpbi1yaWdodDowO2JvcmRlci1yYWRpdXM6NHB4fS5uYXYtdGFicy5uYXYtanVzdGlmaWVkPi5hY3RpdmU+YSwubmF2LXRhYnMubmF2LWp1c3RpZmllZD4uYWN0aXZlPmE6Zm9jdXMsLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQ+LmFjdGl2ZT5hOmhvdmVye2JvcmRlcjoxcHggc29saWQgI2RkZH1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7Lm5hdi10YWJzLm5hdi1qdXN0aWZpZWQ+bGk+YXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NHB4IDRweCAwIDB9Lm5hdi10YWJzLm5hdi1qdXN0aWZpZWQ+LmFjdGl2ZT5hLC5uYXYtdGFicy5uYXYtanVzdGlmaWVkPi5hY3RpdmU+YTpmb2N1cywubmF2LXRhYnMubmF2LWp1c3RpZmllZD4uYWN0aXZlPmE6aG92ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmfX0ubmF2LXBpbGxzPmxpe2Zsb2F0OmxlZnR9Lm5hdi1waWxscz5saT5he2JvcmRlci1yYWRpdXM6NHB4fS5uYXYtcGlsbHM+bGkrbGl7bWFyZ2luLWxlZnQ6MnB4fS5uYXYtcGlsbHM+bGkuYWN0aXZlPmEsLm5hdi1waWxscz5saS5hY3RpdmU+YTpmb2N1cywubmF2LXBpbGxzPmxpLmFjdGl2ZT5hOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMzM3YWI3fS5uYXYtc3RhY2tlZD5saXtmbG9hdDpub25lfS5uYXYtc3RhY2tlZD5saStsaXttYXJnaW4tdG9wOjJweDttYXJnaW4tbGVmdDowfS5uYXYtanVzdGlmaWVke3dpZHRoOjEwMCV9Lm5hdi1qdXN0aWZpZWQ+bGl7ZmxvYXQ6bm9uZX0ubmF2LWp1c3RpZmllZD5saT5he21hcmdpbi1ib3R0b206NXB4O3RleHQtYWxpZ246Y2VudGVyfS5uYXYtanVzdGlmaWVkPi5kcm9wZG93biAuZHJvcGRvd24tbWVudXt0b3A6YXV0bztsZWZ0OmF1dG99QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5uYXYtanVzdGlmaWVkPmxpe2Rpc3BsYXk6dGFibGUtY2VsbDt3aWR0aDoxJX0ubmF2LWp1c3RpZmllZD5saT5he21hcmdpbi1ib3R0b206MH19Lm5hdi10YWJzLWp1c3RpZmllZHtib3JkZXItYm90dG9tOjB9Lm5hdi10YWJzLWp1c3RpZmllZD5saT5he21hcmdpbi1yaWdodDowO2JvcmRlci1yYWRpdXM6NHB4fS5uYXYtdGFicy1qdXN0aWZpZWQ+LmFjdGl2ZT5hLC5uYXYtdGFicy1qdXN0aWZpZWQ+LmFjdGl2ZT5hOmZvY3VzLC5uYXYtdGFicy1qdXN0aWZpZWQ+LmFjdGl2ZT5hOmhvdmVye2JvcmRlcjoxcHggc29saWQgI2RkZH1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7Lm5hdi10YWJzLWp1c3RpZmllZD5saT5he2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo0cHggNHB4IDAgMH0ubmF2LXRhYnMtanVzdGlmaWVkPi5hY3RpdmU+YSwubmF2LXRhYnMtanVzdGlmaWVkPi5hY3RpdmU+YTpmb2N1cywubmF2LXRhYnMtanVzdGlmaWVkPi5hY3RpdmU+YTpob3Zlcntib3JkZXItYm90dG9tLWNvbG9yOiNmZmZ9fS50YWItY29udGVudD4udGFiLXBhbmV7ZGlzcGxheTpub25lfS50YWItY29udGVudD4uYWN0aXZle2Rpc3BsYXk6YmxvY2t9Lm5hdi10YWJzIC5kcm9wZG93bi1tZW51e21hcmdpbi10b3A6LTFweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0ubmF2YmFye3Bvc2l0aW9uOnJlbGF0aXZlO21pbi1oZWlnaHQ6NTBweDttYXJnaW4tYm90dG9tOjIwcHg7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudH1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7Lm5hdmJhcntib3JkZXItcmFkaXVzOjRweH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5uYXZiYXItaGVhZGVye2Zsb2F0OmxlZnR9fS5uYXZiYXItY29sbGFwc2V7cGFkZGluZy1yaWdodDoxNXB4O3BhZGRpbmctbGVmdDoxNXB4O292ZXJmbG93LXg6dmlzaWJsZTstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDtib3JkZXItdG9wOjFweCBzb2xpZCB0cmFuc3BhcmVudDstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LC4xKTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm5hdmJhci1jb2xsYXBzZS5pbntvdmVyZmxvdy15OmF1dG99QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5uYXZiYXItY29sbGFwc2V7d2lkdGg6YXV0bztib3JkZXItdG9wOjA7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS5uYXZiYXItY29sbGFwc2UuY29sbGFwc2V7ZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8haW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjA7b3ZlcmZsb3c6dmlzaWJsZSFpbXBvcnRhbnR9Lm5hdmJhci1jb2xsYXBzZS5pbntvdmVyZmxvdy15OnZpc2libGV9Lm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1jb2xsYXBzZSwubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWNvbGxhcHNlLC5uYXZiYXItc3RhdGljLXRvcCAubmF2YmFyLWNvbGxhcHNle3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MH19Lm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1jb2xsYXBzZSwubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWNvbGxhcHNle21heC1oZWlnaHQ6MzQwcHh9QG1lZGlhIChtYXgtZGV2aWNlLXdpZHRoOjQ4MHB4KSBhbmQgKG9yaWVudGF0aW9uOmxhbmRzY2FwZSl7Lm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1jb2xsYXBzZSwubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWNvbGxhcHNle21heC1oZWlnaHQ6MjAwcHh9fS5jb250YWluZXItZmx1aWQ+Lm5hdmJhci1jb2xsYXBzZSwuY29udGFpbmVyLWZsdWlkPi5uYXZiYXItaGVhZGVyLC5jb250YWluZXI+Lm5hdmJhci1jb2xsYXBzZSwuY29udGFpbmVyPi5uYXZiYXItaGVhZGVye21hcmdpbi1yaWdodDotMTVweDttYXJnaW4tbGVmdDotMTVweH1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNvbnRhaW5lci1mbHVpZD4ubmF2YmFyLWNvbGxhcHNlLC5jb250YWluZXItZmx1aWQ+Lm5hdmJhci1oZWFkZXIsLmNvbnRhaW5lcj4ubmF2YmFyLWNvbGxhcHNlLC5jb250YWluZXI+Lm5hdmJhci1oZWFkZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MH19Lm5hdmJhci1zdGF0aWMtdG9we3otaW5kZXg6MTAwMDtib3JkZXItd2lkdGg6MCAwIDFweH1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7Lm5hdmJhci1zdGF0aWMtdG9we2JvcmRlci1yYWRpdXM6MH19Lm5hdmJhci1maXhlZC1ib3R0b20sLm5hdmJhci1maXhlZC10b3B7cG9zaXRpb246Zml4ZWQ7cmlnaHQ6MDtsZWZ0OjA7ei1pbmRleDoxMDMwfUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsubmF2YmFyLWZpeGVkLWJvdHRvbSwubmF2YmFyLWZpeGVkLXRvcHtib3JkZXItcmFkaXVzOjB9fS5uYXZiYXItZml4ZWQtdG9we3RvcDowO2JvcmRlci13aWR0aDowIDAgMXB4fS5uYXZiYXItZml4ZWQtYm90dG9te2JvdHRvbTowO21hcmdpbi1ib3R0b206MDtib3JkZXItd2lkdGg6MXB4IDAgMH0ubmF2YmFyLWJyYW5ke2Zsb2F0OmxlZnQ7aGVpZ2h0OjUwcHg7cGFkZGluZzoxNXB4IDE1cHg7Zm9udC1zaXplOjE4cHg7bGluZS1oZWlnaHQ6MjBweH0ubmF2YmFyLWJyYW5kOmZvY3VzLC5uYXZiYXItYnJhbmQ6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Lm5hdmJhci1icmFuZD5pbWd7ZGlzcGxheTpibG9ja31AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7Lm5hdmJhcj4uY29udGFpbmVyIC5uYXZiYXItYnJhbmQsLm5hdmJhcj4uY29udGFpbmVyLWZsdWlkIC5uYXZiYXItYnJhbmR7bWFyZ2luLWxlZnQ6LTE1cHh9fS5uYXZiYXItdG9nZ2xle3Bvc2l0aW9uOnJlbGF0aXZlO2Zsb2F0OnJpZ2h0O3BhZGRpbmc6OXB4IDEwcHg7bWFyZ2luLXRvcDo4cHg7bWFyZ2luLXJpZ2h0OjE1cHg7bWFyZ2luLWJvdHRvbTo4cHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjRweH0ubmF2YmFyLXRvZ2dsZTpmb2N1c3tvdXRsaW5lOjB9Lm5hdmJhci10b2dnbGUgLmljb24tYmFye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MjJweDtoZWlnaHQ6MnB4O2JvcmRlci1yYWRpdXM6MXB4fS5uYXZiYXItdG9nZ2xlIC5pY29uLWJhcisuaWNvbi1iYXJ7bWFyZ2luLXRvcDo0cHh9QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5uYXZiYXItdG9nZ2xle2Rpc3BsYXk6bm9uZX19Lm5hdmJhci1uYXZ7bWFyZ2luOjcuNXB4IC0xNXB4fS5uYXZiYXItbmF2PmxpPmF7cGFkZGluZy10b3A6MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2xpbmUtaGVpZ2h0OjIwcHh9QG1lZGlhIChtYXgtd2lkdGg6NzY3cHgpey5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOnN0YXRpYztmbG9hdDpub25lO3dpZHRoOmF1dG87bWFyZ2luLXRvcDowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOjA7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXIsLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+bGk+YXtwYWRkaW5nOjVweCAxNXB4IDVweCAyNXB4fS5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51PmxpPmF7bGluZS1oZWlnaHQ6MjBweH0ubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT5saT5hOmZvY3VzLC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXJ7YmFja2dyb3VuZC1pbWFnZTpub25lfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7Lm5hdmJhci1uYXZ7ZmxvYXQ6bGVmdDttYXJnaW46MH0ubmF2YmFyLW5hdj5saXtmbG9hdDpsZWZ0fS5uYXZiYXItbmF2PmxpPmF7cGFkZGluZy10b3A6MTVweDtwYWRkaW5nLWJvdHRvbToxNXB4fX0ubmF2YmFyLWZvcm17cGFkZGluZzoxMHB4IDE1cHg7bWFyZ2luLXRvcDo4cHg7bWFyZ2luLXJpZ2h0Oi0xNXB4O21hcmdpbi1ib3R0b206OHB4O21hcmdpbi1sZWZ0Oi0xNXB4O2JvcmRlci10b3A6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwuMSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwuMSl9QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5uYXZiYXItZm9ybSAuZm9ybS1ncm91cHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tYm90dG9tOjA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5uYXZiYXItZm9ybSAuZm9ybS1jb250cm9se2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOmF1dG87dmVydGljYWwtYWxpZ246bWlkZGxlfS5uYXZiYXItZm9ybSAuZm9ybS1jb250cm9sLXN0YXRpY3tkaXNwbGF5OmlubGluZS1ibG9ja30ubmF2YmFyLWZvcm0gLmlucHV0LWdyb3Vwe2Rpc3BsYXk6aW5saW5lLXRhYmxlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wsLm5hdmJhci1mb3JtIC5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYWRkb24sLm5hdmJhci1mb3JtIC5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYnRue3dpZHRoOmF1dG99Lm5hdmJhci1mb3JtIC5pbnB1dC1ncm91cD4uZm9ybS1jb250cm9se3dpZHRoOjEwMCV9Lm5hdmJhci1mb3JtIC5jb250cm9sLWxhYmVse21hcmdpbi1ib3R0b206MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm5hdmJhci1mb3JtIC5jaGVja2JveCwubmF2YmFyLWZvcm0gLnJhZGlve2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5uYXZiYXItZm9ybSAuY2hlY2tib3ggbGFiZWwsLm5hdmJhci1mb3JtIC5yYWRpbyBsYWJlbHtwYWRkaW5nLWxlZnQ6MH0ubmF2YmFyLWZvcm0gLmNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdLC5uYXZiYXItZm9ybSAucmFkaW8gaW5wdXRbdHlwZT1yYWRpb117cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWxlZnQ6MH0ubmF2YmFyLWZvcm0gLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sLWZlZWRiYWNre3RvcDowfX1AbWVkaWEgKG1heC13aWR0aDo3NjdweCl7Lm5hdmJhci1mb3JtIC5mb3JtLWdyb3Vwe21hcmdpbi1ib3R0b206NXB4fS5uYXZiYXItZm9ybSAuZm9ybS1ncm91cDpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5uYXZiYXItZm9ybXt3aWR0aDphdXRvO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDowO2JvcmRlcjowOy13ZWJraXQtYm94LXNoYWRvdzpub25lO2JveC1zaGFkb3c6bm9uZX19Lm5hdmJhci1uYXY+bGk+LmRyb3Bkb3duLW1lbnV7bWFyZ2luLXRvcDowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowfS5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItbmF2PmxpPi5kcm9wZG93bi1tZW51e21hcmdpbi1ib3R0b206MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9Lm5hdmJhci1idG57bWFyZ2luLXRvcDo4cHg7bWFyZ2luLWJvdHRvbTo4cHh9Lm5hdmJhci1idG4uYnRuLXNte21hcmdpbi10b3A6MTBweDttYXJnaW4tYm90dG9tOjEwcHh9Lm5hdmJhci1idG4uYnRuLXhze21hcmdpbi10b3A6MTRweDttYXJnaW4tYm90dG9tOjE0cHh9Lm5hdmJhci10ZXh0e21hcmdpbi10b3A6MTVweDttYXJnaW4tYm90dG9tOjE1cHh9QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5uYXZiYXItdGV4dHtmbG9hdDpsZWZ0O21hcmdpbi1yaWdodDoxNXB4O21hcmdpbi1sZWZ0OjE1cHh9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsubmF2YmFyLWxlZnR7ZmxvYXQ6bGVmdCFpbXBvcnRhbnR9Lm5hdmJhci1yaWdodHtmbG9hdDpyaWdodCFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0Oi0xNXB4fS5uYXZiYXItcmlnaHR+Lm5hdmJhci1yaWdodHttYXJnaW4tcmlnaHQ6MH19Lm5hdmJhci1kZWZhdWx0e2JhY2tncm91bmQtY29sb3I6I2Y4ZjhmODtib3JkZXItY29sb3I6I2U3ZTdlN30ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1icmFuZHtjb2xvcjojNzc3fS5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWJyYW5kOmZvY3VzLC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWJyYW5kOmhvdmVye2NvbG9yOiM1ZTVlNWU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10ZXh0e2NvbG9yOiM3Nzd9Lm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2PmxpPmF7Y29sb3I6Izc3N30ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXY+bGk+YTpmb2N1cywubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXY+bGk+YTpob3Zlcntjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2Pi5hY3RpdmU+YSwubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXY+LmFjdGl2ZT5hOmZvY3VzLC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdj4uYWN0aXZlPmE6aG92ZXJ7Y29sb3I6IzU1NTtiYWNrZ3JvdW5kLWNvbG9yOiNlN2U3ZTd9Lm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2Pi5kaXNhYmxlZD5hLC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdj4uZGlzYWJsZWQ+YTpmb2N1cywubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXY+LmRpc2FibGVkPmE6aG92ZXJ7Y29sb3I6I2NjYztiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZXtib3JkZXItY29sb3I6I2RkZH0ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10b2dnbGU6Zm9jdXMsLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2RkZH0ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10b2dnbGUgLmljb24tYmFye2JhY2tncm91bmQtY29sb3I6Izg4OH0ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1jb2xsYXBzZSwubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1mb3Jte2JvcmRlci1jb2xvcjojZTdlN2U3fS5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdj4ub3Blbj5hLC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdj4ub3Blbj5hOmZvY3VzLC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdj4ub3Blbj5hOmhvdmVye2NvbG9yOiM1NTU7YmFja2dyb3VuZC1jb2xvcjojZTdlN2U3fUBtZWRpYSAobWF4LXdpZHRoOjc2N3B4KXsubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+bGk+YXtjb2xvcjojNzc3fS5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT5saT5hOmZvY3VzLC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT5saT5hOmhvdmVye2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+LmFjdGl2ZT5hLC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT4uYWN0aXZlPmE6Zm9jdXMsLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YTpob3Zlcntjb2xvcjojNTU1O2JhY2tncm91bmQtY29sb3I6I2U3ZTdlN30ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmEsLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5kaXNhYmxlZD5hOmZvY3VzLC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YTpob3Zlcntjb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9fS5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWxpbmt7Y29sb3I6Izc3N30ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1saW5rOmhvdmVye2NvbG9yOiMzMzN9Lm5hdmJhci1kZWZhdWx0IC5idG4tbGlua3tjb2xvcjojNzc3fS5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbms6Zm9jdXMsLm5hdmJhci1kZWZhdWx0IC5idG4tbGluazpob3Zlcntjb2xvcjojMzMzfS5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbmtbZGlzYWJsZWRdOmZvY3VzLC5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbmtbZGlzYWJsZWRdOmhvdmVyLGZpZWxkc2V0W2Rpc2FibGVkXSAubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rOmZvY3VzLGZpZWxkc2V0W2Rpc2FibGVkXSAubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rOmhvdmVye2NvbG9yOiNjY2N9Lm5hdmJhci1pbnZlcnNle2JhY2tncm91bmQtY29sb3I6IzIyMjtib3JkZXItY29sb3I6IzA4MDgwOH0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1icmFuZHtjb2xvcjojOWQ5ZDlkfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kOmZvY3VzLC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubmF2YmFyLWludmVyc2UgLm5hdmJhci10ZXh0e2NvbG9yOiM5ZDlkOWR9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2PmxpPmF7Y29sb3I6IzlkOWQ5ZH0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXY+bGk+YTpmb2N1cywubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXY+bGk+YTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2Pi5hY3RpdmU+YSwubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXY+LmFjdGl2ZT5hOmZvY3VzLC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj4uYWN0aXZlPmE6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMwODA4MDh9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2Pi5kaXNhYmxlZD5hLC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj4uZGlzYWJsZWQ+YTpmb2N1cywubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXY+LmRpc2FibGVkPmE6aG92ZXJ7Y29sb3I6IzQ0NDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZXtib3JkZXItY29sb3I6IzMzM30ubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGU6Zm9jdXMsLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdG9nZ2xlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzMzM30ubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGUgLmljb24tYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1jb2xsYXBzZSwubmF2YmFyLWludmVyc2UgLm5hdmJhci1mb3Jte2JvcmRlci1jb2xvcjojMTAxMDEwfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj4ub3Blbj5hLC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj4ub3Blbj5hOmZvY3VzLC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj4ub3Blbj5hOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMDgwODA4fUBtZWRpYSAobWF4LXdpZHRoOjc2N3B4KXsubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+LmRyb3Bkb3duLWhlYWRlcntib3JkZXItY29sb3I6IzA4MDgwOH0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgLmRpdmlkZXJ7YmFja2dyb3VuZC1jb2xvcjojMDgwODA4fS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT5saT5he2NvbG9yOiM5ZDlkOWR9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51PmxpPmE6Zm9jdXMsLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT4uYWN0aXZlPmEsLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YTpmb2N1cywubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+LmFjdGl2ZT5hOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMDgwODA4fS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YSwubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmE6Zm9jdXMsLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5kaXNhYmxlZD5hOmhvdmVye2NvbG9yOiM0NDQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH19Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbGlua3tjb2xvcjojOWQ5ZDlkfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWxpbms6aG92ZXJ7Y29sb3I6I2ZmZn0ubmF2YmFyLWludmVyc2UgLmJ0bi1saW5re2NvbG9yOiM5ZDlkOWR9Lm5hdmJhci1pbnZlcnNlIC5idG4tbGluazpmb2N1cywubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rOmhvdmVye2NvbG9yOiNmZmZ9Lm5hdmJhci1pbnZlcnNlIC5idG4tbGlua1tkaXNhYmxlZF06Zm9jdXMsLm5hdmJhci1pbnZlcnNlIC5idG4tbGlua1tkaXNhYmxlZF06aG92ZXIsZmllbGRzZXRbZGlzYWJsZWRdIC5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbms6Zm9jdXMsZmllbGRzZXRbZGlzYWJsZWRdIC5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbms6aG92ZXJ7Y29sb3I6IzQ0NH0uYnJlYWRjcnVtYntwYWRkaW5nOjhweCAxNXB4O21hcmdpbi1ib3R0b206MjBweDtsaXN0LXN0eWxlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2JvcmRlci1yYWRpdXM6NHB4fS5icmVhZGNydW1iPmxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5icmVhZGNydW1iPmxpK2xpOmJlZm9yZXtwYWRkaW5nOjAgNXB4O2NvbG9yOiNjY2M7Y29udGVudDoiL1wwMGEwIn0uYnJlYWRjcnVtYj4uYWN0aXZle2NvbG9yOiM3Nzd9LnBhZ2luYXRpb257ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1sZWZ0OjA7bWFyZ2luOjIwcHggMDtib3JkZXItcmFkaXVzOjRweH0ucGFnaW5hdGlvbj5saXtkaXNwbGF5OmlubGluZX0ucGFnaW5hdGlvbj5saT5hLC5wYWdpbmF0aW9uPmxpPnNwYW57cG9zaXRpb246cmVsYXRpdmU7ZmxvYXQ6bGVmdDtwYWRkaW5nOjZweCAxMnB4O21hcmdpbi1sZWZ0Oi0xcHg7bGluZS1oZWlnaHQ6MS40Mjg1NzE0Mztjb2xvcjojMzM3YWI3O3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGR9LnBhZ2luYXRpb24+bGk6Zmlyc3QtY2hpbGQ+YSwucGFnaW5hdGlvbj5saTpmaXJzdC1jaGlsZD5zcGFue21hcmdpbi1sZWZ0OjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHh9LnBhZ2luYXRpb24+bGk6bGFzdC1jaGlsZD5hLC5wYWdpbmF0aW9uPmxpOmxhc3QtY2hpbGQ+c3Bhbntib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4fS5wYWdpbmF0aW9uPmxpPmE6Zm9jdXMsLnBhZ2luYXRpb24+bGk+YTpob3ZlciwucGFnaW5hdGlvbj5saT5zcGFuOmZvY3VzLC5wYWdpbmF0aW9uPmxpPnNwYW46aG92ZXJ7ei1pbmRleDozO2NvbG9yOiMyMzUyN2M7YmFja2dyb3VuZC1jb2xvcjojZWVlO2JvcmRlci1jb2xvcjojZGRkfS5wYWdpbmF0aW9uPi5hY3RpdmU+YSwucGFnaW5hdGlvbj4uYWN0aXZlPmE6Zm9jdXMsLnBhZ2luYXRpb24+LmFjdGl2ZT5hOmhvdmVyLC5wYWdpbmF0aW9uPi5hY3RpdmU+c3BhbiwucGFnaW5hdGlvbj4uYWN0aXZlPnNwYW46Zm9jdXMsLnBhZ2luYXRpb24+LmFjdGl2ZT5zcGFuOmhvdmVye3otaW5kZXg6Mjtjb2xvcjojZmZmO2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtY29sb3I6IzMzN2FiNztib3JkZXItY29sb3I6IzMzN2FiN30ucGFnaW5hdGlvbj4uZGlzYWJsZWQ+YSwucGFnaW5hdGlvbj4uZGlzYWJsZWQ+YTpmb2N1cywucGFnaW5hdGlvbj4uZGlzYWJsZWQ+YTpob3ZlciwucGFnaW5hdGlvbj4uZGlzYWJsZWQ+c3BhbiwucGFnaW5hdGlvbj4uZGlzYWJsZWQ+c3Bhbjpmb2N1cywucGFnaW5hdGlvbj4uZGlzYWJsZWQ+c3Bhbjpob3Zlcntjb2xvcjojNzc3O2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiNkZGR9LnBhZ2luYXRpb24tbGc+bGk+YSwucGFnaW5hdGlvbi1sZz5saT5zcGFue3BhZGRpbmc6MTBweCAxNnB4O2ZvbnQtc2l6ZToxOHB4O2xpbmUtaGVpZ2h0OjEuMzMzMzMzM30ucGFnaW5hdGlvbi1sZz5saTpmaXJzdC1jaGlsZD5hLC5wYWdpbmF0aW9uLWxnPmxpOmZpcnN0LWNoaWxkPnNwYW57Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo2cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo2cHh9LnBhZ2luYXRpb24tbGc+bGk6bGFzdC1jaGlsZD5hLC5wYWdpbmF0aW9uLWxnPmxpOmxhc3QtY2hpbGQ+c3Bhbntib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo2cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NnB4fS5wYWdpbmF0aW9uLXNtPmxpPmEsLnBhZ2luYXRpb24tc20+bGk+c3BhbntwYWRkaW5nOjVweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNX0ucGFnaW5hdGlvbi1zbT5saTpmaXJzdC1jaGlsZD5hLC5wYWdpbmF0aW9uLXNtPmxpOmZpcnN0LWNoaWxkPnNwYW57Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czozcHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHh9LnBhZ2luYXRpb24tc20+bGk6bGFzdC1jaGlsZD5hLC5wYWdpbmF0aW9uLXNtPmxpOmxhc3QtY2hpbGQ+c3Bhbntib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4fS5wYWdlcntwYWRkaW5nLWxlZnQ6MDttYXJnaW46MjBweCAwO3RleHQtYWxpZ246Y2VudGVyO2xpc3Qtc3R5bGU6bm9uZX0ucGFnZXIgbGl7ZGlzcGxheTppbmxpbmV9LnBhZ2VyIGxpPmEsLnBhZ2VyIGxpPnNwYW57ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzo1cHggMTRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6MTVweH0ucGFnZXIgbGk+YTpmb2N1cywucGFnZXIgbGk+YTpob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9LnBhZ2VyIC5uZXh0PmEsLnBhZ2VyIC5uZXh0PnNwYW57ZmxvYXQ6cmlnaHR9LnBhZ2VyIC5wcmV2aW91cz5hLC5wYWdlciAucHJldmlvdXM+c3BhbntmbG9hdDpsZWZ0fS5wYWdlciAuZGlzYWJsZWQ+YSwucGFnZXIgLmRpc2FibGVkPmE6Zm9jdXMsLnBhZ2VyIC5kaXNhYmxlZD5hOmhvdmVyLC5wYWdlciAuZGlzYWJsZWQ+c3Bhbntjb2xvcjojNzc3O2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmxhYmVse2Rpc3BsYXk6aW5saW5lO3BhZGRpbmc6LjJlbSAuNmVtIC4zZW07Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtib3JkZXItcmFkaXVzOi4yNWVtfWEubGFiZWw6Zm9jdXMsYS5sYWJlbDpob3Zlcntjb2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyfS5sYWJlbDplbXB0eXtkaXNwbGF5Om5vbmV9LmJ0biAubGFiZWx7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0xcHh9LmxhYmVsLWRlZmF1bHR7YmFja2dyb3VuZC1jb2xvcjojNzc3fS5sYWJlbC1kZWZhdWx0W2hyZWZdOmZvY3VzLC5sYWJlbC1kZWZhdWx0W2hyZWZdOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzVlNWU1ZX0ubGFiZWwtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiMzMzdhYjd9LmxhYmVsLXByaW1hcnlbaHJlZl06Zm9jdXMsLmxhYmVsLXByaW1hcnlbaHJlZl06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMjg2MDkwfS5sYWJlbC1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6IzVjYjg1Y30ubGFiZWwtc3VjY2Vzc1tocmVmXTpmb2N1cywubGFiZWwtc3VjY2Vzc1tocmVmXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM0NDlkNDR9LmxhYmVsLWluZm97YmFja2dyb3VuZC1jb2xvcjojNWJjMGRlfS5sYWJlbC1pbmZvW2hyZWZdOmZvY3VzLC5sYWJlbC1pbmZvW2hyZWZdOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzMxYjBkNX0ubGFiZWwtd2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNmMGFkNGV9LmxhYmVsLXdhcm5pbmdbaHJlZl06Zm9jdXMsLmxhYmVsLXdhcm5pbmdbaHJlZl06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWM5NzFmfS5sYWJlbC1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojZDk1MzRmfS5sYWJlbC1kYW5nZXJbaHJlZl06Zm9jdXMsLmxhYmVsLWRhbmdlcltocmVmXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjOTMwMmN9LmJhZGdle2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDoxMHB4O3BhZGRpbmc6M3B4IDdweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7YmFja2dyb3VuZC1jb2xvcjojNzc3O2JvcmRlci1yYWRpdXM6MTBweH0uYmFkZ2U6ZW1wdHl7ZGlzcGxheTpub25lfS5idG4gLmJhZGdle3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotMXB4fS5idG4tZ3JvdXAteHM+LmJ0biAuYmFkZ2UsLmJ0bi14cyAuYmFkZ2V7dG9wOjA7cGFkZGluZzoxcHggNXB4fWEuYmFkZ2U6Zm9jdXMsYS5iYWRnZTpob3Zlcntjb2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyfS5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlPi5iYWRnZSwubmF2LXBpbGxzPi5hY3RpdmU+YT4uYmFkZ2V7Y29sb3I6IzMzN2FiNztiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lmxpc3QtZ3JvdXAtaXRlbT4uYmFkZ2V7ZmxvYXQ6cmlnaHR9Lmxpc3QtZ3JvdXAtaXRlbT4uYmFkZ2UrLmJhZGdle21hcmdpbi1yaWdodDo1cHh9Lm5hdi1waWxscz5saT5hPi5iYWRnZXttYXJnaW4tbGVmdDozcHh9Lmp1bWJvdHJvbntwYWRkaW5nLXRvcDozMHB4O3BhZGRpbmctYm90dG9tOjMwcHg7bWFyZ2luLWJvdHRvbTozMHB4O2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5qdW1ib3Ryb24gLmgxLC5qdW1ib3Ryb24gaDF7Y29sb3I6aW5oZXJpdH0uanVtYm90cm9uIHB7bWFyZ2luLWJvdHRvbToxNXB4O2ZvbnQtc2l6ZToyMXB4O2ZvbnQtd2VpZ2h0OjIwMH0uanVtYm90cm9uPmhye2JvcmRlci10b3AtY29sb3I6I2Q1ZDVkNX0uY29udGFpbmVyIC5qdW1ib3Ryb24sLmNvbnRhaW5lci1mbHVpZCAuanVtYm90cm9ue2JvcmRlci1yYWRpdXM6NnB4fS5qdW1ib3Ryb24gLmNvbnRhaW5lcnttYXgtd2lkdGg6MTAwJX1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOjc2OHB4KXsuanVtYm90cm9ue3BhZGRpbmctdG9wOjQ4cHg7cGFkZGluZy1ib3R0b206NDhweH0uY29udGFpbmVyIC5qdW1ib3Ryb24sLmNvbnRhaW5lci1mbHVpZCAuanVtYm90cm9ue3BhZGRpbmctcmlnaHQ6NjBweDtwYWRkaW5nLWxlZnQ6NjBweH0uanVtYm90cm9uIC5oMSwuanVtYm90cm9uIGgxe2ZvbnQtc2l6ZTo2M3B4fX0udGh1bWJuYWlse2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo0cHg7bWFyZ2luLWJvdHRvbToyMHB4O2xpbmUtaGVpZ2h0OjEuNDI4NTcxNDM7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjRweDstd2Via2l0LXRyYW5zaXRpb246Ym9yZGVyIC4ycyBlYXNlLWluLW91dDstby10cmFuc2l0aW9uOmJvcmRlciAuMnMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjpib3JkZXIgLjJzIGVhc2UtaW4tb3V0fS50aHVtYm5haWwgYT5pbWcsLnRodW1ibmFpbD5pbWd7bWFyZ2luLXJpZ2h0OmF1dG87bWFyZ2luLWxlZnQ6YXV0b31hLnRodW1ibmFpbC5hY3RpdmUsYS50aHVtYm5haWw6Zm9jdXMsYS50aHVtYm5haWw6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMzMzdhYjd9LnRodW1ibmFpbCAuY2FwdGlvbntwYWRkaW5nOjlweDtjb2xvcjojMzMzfS5hbGVydHtwYWRkaW5nOjE1cHg7bWFyZ2luLWJvdHRvbToyMHB4O2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czo0cHh9LmFsZXJ0IGg0e21hcmdpbi10b3A6MDtjb2xvcjppbmhlcml0fS5hbGVydCAuYWxlcnQtbGlua3tmb250LXdlaWdodDo3MDB9LmFsZXJ0PnAsLmFsZXJ0PnVse21hcmdpbi1ib3R0b206MH0uYWxlcnQ+cCtwe21hcmdpbi10b3A6NXB4fS5hbGVydC1kaXNtaXNzYWJsZSwuYWxlcnQtZGlzbWlzc2libGV7cGFkZGluZy1yaWdodDozNXB4fS5hbGVydC1kaXNtaXNzYWJsZSAuY2xvc2UsLmFsZXJ0LWRpc21pc3NpYmxlIC5jbG9zZXtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LTJweDtyaWdodDotMjFweDtjb2xvcjppbmhlcml0fS5hbGVydC1zdWNjZXNze2NvbG9yOiMzYzc2M2Q7YmFja2dyb3VuZC1jb2xvcjojZGZmMGQ4O2JvcmRlci1jb2xvcjojZDZlOWM2fS5hbGVydC1zdWNjZXNzIGhye2JvcmRlci10b3AtY29sb3I6I2M5ZTJiM30uYWxlcnQtc3VjY2VzcyAuYWxlcnQtbGlua3tjb2xvcjojMmI1NDJjfS5hbGVydC1pbmZve2NvbG9yOiMzMTcwOGY7YmFja2dyb3VuZC1jb2xvcjojZDllZGY3O2JvcmRlci1jb2xvcjojYmNlOGYxfS5hbGVydC1pbmZvIGhye2JvcmRlci10b3AtY29sb3I6I2E2ZTFlY30uYWxlcnQtaW5mbyAuYWxlcnQtbGlua3tjb2xvcjojMjQ1MjY5fS5hbGVydC13YXJuaW5ne2NvbG9yOiM4YTZkM2I7YmFja2dyb3VuZC1jb2xvcjojZmNmOGUzO2JvcmRlci1jb2xvcjojZmFlYmNjfS5hbGVydC13YXJuaW5nIGhye2JvcmRlci10b3AtY29sb3I6I2Y3ZTFiNX0uYWxlcnQtd2FybmluZyAuYWxlcnQtbGlua3tjb2xvcjojNjY1MTJjfS5hbGVydC1kYW5nZXJ7Y29sb3I6I2E5NDQ0MjtiYWNrZ3JvdW5kLWNvbG9yOiNmMmRlZGU7Ym9yZGVyLWNvbG9yOiNlYmNjZDF9LmFsZXJ0LWRhbmdlciBocntib3JkZXItdG9wLWNvbG9yOiNlNGI5YzB9LmFsZXJ0LWRhbmdlciAuYWxlcnQtbGlua3tjb2xvcjojODQzNTM0fUAtd2Via2l0LWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlc3tmcm9te2JhY2tncm91bmQtcG9zaXRpb246NDBweCAwfXRve2JhY2tncm91bmQtcG9zaXRpb246MCAwfX1ALW8ta2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVze2Zyb217YmFja2dyb3VuZC1wb3NpdGlvbjo0MHB4IDB9dG97YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9fUBrZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXN7ZnJvbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjQwcHggMH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH19LnByb2dyZXNze2hlaWdodDoyMHB4O21hcmdpbi1ib3R0b206MjBweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwuMSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwuMSl9LnByb2dyZXNzLWJhcntmbG9hdDpsZWZ0O3dpZHRoOjA7aGVpZ2h0OjEwMCU7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQtY29sb3I6IzMzN2FiNzstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwuMTUpO2JveC1zaGFkb3c6aW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwuMTUpOy13ZWJraXQtdHJhbnNpdGlvbjp3aWR0aCAuNnMgZWFzZTstby10cmFuc2l0aW9uOndpZHRoIC42cyBlYXNlO3RyYW5zaXRpb246d2lkdGggLjZzIGVhc2V9LnByb2dyZXNzLWJhci1zdHJpcGVkLC5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTstd2Via2l0LWJhY2tncm91bmQtc2l6ZTo0MHB4IDQwcHg7YmFja2dyb3VuZC1zaXplOjQwcHggNDBweH0ucHJvZ3Jlc3MtYmFyLmFjdGl2ZSwucHJvZ3Jlc3MuYWN0aXZlIC5wcm9ncmVzcy1iYXJ7LXdlYmtpdC1hbmltYXRpb246cHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlOy1vLWFuaW1hdGlvbjpwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7YW5pbWF0aW9uOnByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZX0ucHJvZ3Jlc3MtYmFyLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojNWNiODVjfS5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXItc3VjY2Vzc3tiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpfS5wcm9ncmVzcy1iYXItaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiM1YmMwZGV9LnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhci1pbmZve2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCl9LnByb2dyZXNzLWJhci13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2YwYWQ0ZX0ucHJvZ3Jlc3Mtc3RyaXBlZCAucHJvZ3Jlc3MtYmFyLXdhcm5pbmd7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KX0ucHJvZ3Jlc3MtYmFyLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNkOTUzNGZ9LnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhci1kYW5nZXJ7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KX0ubWVkaWF7bWFyZ2luLXRvcDoxNXB4fS5tZWRpYTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1lZGlhLC5tZWRpYS1ib2R5e292ZXJmbG93OmhpZGRlbjt6b29tOjF9Lm1lZGlhLWJvZHl7d2lkdGg6MTAwMDBweH0ubWVkaWEtb2JqZWN0e2Rpc3BsYXk6YmxvY2t9Lm1lZGlhLW9iamVjdC5pbWctdGh1bWJuYWlse21heC13aWR0aDpub25lfS5tZWRpYS1yaWdodCwubWVkaWE+LnB1bGwtcmlnaHR7cGFkZGluZy1sZWZ0OjEwcHh9Lm1lZGlhLWxlZnQsLm1lZGlhPi5wdWxsLWxlZnR7cGFkZGluZy1yaWdodDoxMHB4fS5tZWRpYS1ib2R5LC5tZWRpYS1sZWZ0LC5tZWRpYS1yaWdodHtkaXNwbGF5OnRhYmxlLWNlbGw7dmVydGljYWwtYWxpZ246dG9wfS5tZWRpYS1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tZWRpYS1ib3R0b217dmVydGljYWwtYWxpZ246Ym90dG9tfS5tZWRpYS1oZWFkaW5ne21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjVweH0ubWVkaWEtbGlzdHtwYWRkaW5nLWxlZnQ6MDtsaXN0LXN0eWxlOm5vbmV9Lmxpc3QtZ3JvdXB7cGFkZGluZy1sZWZ0OjA7bWFyZ2luLWJvdHRvbToyMHB4fS5saXN0LWdyb3VwLWl0ZW17cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztwYWRkaW5nOjEwcHggMTVweDttYXJnaW4tYm90dG9tOi0xcHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZH0ubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxke2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweH0ubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweH1hLmxpc3QtZ3JvdXAtaXRlbSxidXR0b24ubGlzdC1ncm91cC1pdGVte2NvbG9yOiM1NTV9YS5saXN0LWdyb3VwLWl0ZW0gLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLGJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0gLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5ne2NvbG9yOiMzMzN9YS5saXN0LWdyb3VwLWl0ZW06Zm9jdXMsYS5saXN0LWdyb3VwLWl0ZW06aG92ZXIsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbTpmb2N1cyxidXR0b24ubGlzdC1ncm91cC1pdGVtOmhvdmVye2NvbG9yOiM1NTU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1fWJ1dHRvbi5saXN0LWdyb3VwLWl0ZW17d2lkdGg6MTAwJTt0ZXh0LWFsaWduOmxlZnR9Lmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZCwubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkOmZvY3VzLC5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6aG92ZXJ7Y29sb3I6Izc3NztjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLC5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLC5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6aG92ZXIgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5ne2NvbG9yOmluaGVyaXR9Lmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZCAubGlzdC1ncm91cC1pdGVtLXRleHQsLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpmb2N1cyAubGlzdC1ncm91cC1pdGVtLXRleHQsLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpob3ZlciAubGlzdC1ncm91cC1pdGVtLXRleHR7Y29sb3I6Izc3N30ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZSwubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpmb2N1cywubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3Zlcnt6LWluZGV4OjI7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMzMzdhYjc7Ym9yZGVyLWNvbG9yOiMzMzdhYjd9Lmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLC5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZz4uc21hbGwsLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nPnNtYWxsLC5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZywubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpmb2N1cyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmc+LnNtYWxsLC5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZz5zbWFsbCwubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6aG92ZXIgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nPi5zbWFsbCwubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmc+c21hbGx7Y29sb3I6aW5oZXJpdH0ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZSAubGlzdC1ncm91cC1pdGVtLXRleHQsLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0LC5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmhvdmVyIC5saXN0LWdyb3VwLWl0ZW0tdGV4dHtjb2xvcjojYzdkZGVmfS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzc3tjb2xvcjojM2M3NjNkO2JhY2tncm91bmQtY29sb3I6I2RmZjBkOH1hLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLGJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzc3tjb2xvcjojM2M3NjNkfWEubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLGJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmd7Y29sb3I6aW5oZXJpdH1hLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzOmZvY3VzLGEubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3M6aG92ZXIsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzOmZvY3VzLGJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzczpob3Zlcntjb2xvcjojM2M3NjNkO2JhY2tncm91bmQtY29sb3I6I2QwZTljNn1hLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZSxhLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZTpmb2N1cyxhLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZTpob3ZlcixidXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MuYWN0aXZlLGJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5hY3RpdmU6Zm9jdXMsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzNjNzYzZDtib3JkZXItY29sb3I6IzNjNzYzZH0ubGlzdC1ncm91cC1pdGVtLWluZm97Y29sb3I6IzMxNzA4ZjtiYWNrZ3JvdW5kLWNvbG9yOiNkOWVkZjd9YS5saXN0LWdyb3VwLWl0ZW0taW5mbyxidXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm97Y29sb3I6IzMxNzA4Zn1hLmxpc3QtZ3JvdXAtaXRlbS1pbmZvIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxidXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm8gLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5ne2NvbG9yOmluaGVyaXR9YS5saXN0LWdyb3VwLWl0ZW0taW5mbzpmb2N1cyxhLmxpc3QtZ3JvdXAtaXRlbS1pbmZvOmhvdmVyLGJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0taW5mbzpmb2N1cyxidXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm86aG92ZXJ7Y29sb3I6IzMxNzA4ZjtiYWNrZ3JvdW5kLWNvbG9yOiNjNGUzZjN9YS5saXN0LWdyb3VwLWl0ZW0taW5mby5hY3RpdmUsYS5saXN0LWdyb3VwLWl0ZW0taW5mby5hY3RpdmU6Zm9jdXMsYS5saXN0LWdyb3VwLWl0ZW0taW5mby5hY3RpdmU6aG92ZXIsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmFjdGl2ZSxidXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlOmZvY3VzLGJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0taW5mby5hY3RpdmU6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMzMTcwOGY7Ym9yZGVyLWNvbG9yOiMzMTcwOGZ9Lmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5ne2NvbG9yOiM4YTZkM2I7YmFja2dyb3VuZC1jb2xvcjojZmNmOGUzfWEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5ne2NvbG9yOiM4YTZkM2J9YS5saXN0LWdyb3VwLWl0ZW0td2FybmluZyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZ3tjb2xvcjppbmhlcml0fWEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmc6Zm9jdXMsYS5saXN0LWdyb3VwLWl0ZW0td2FybmluZzpob3ZlcixidXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmc6Zm9jdXMsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nOmhvdmVye2NvbG9yOiM4YTZkM2I7YmFja2dyb3VuZC1jb2xvcjojZmFmMmNjfWEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlLGEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlOmZvY3VzLGEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlOmhvdmVyLGJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5hY3RpdmUsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZTpmb2N1cyxidXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojOGE2ZDNiO2JvcmRlci1jb2xvcjojOGE2ZDNifS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2Vye2NvbG9yOiNhOTQ0NDI7YmFja2dyb3VuZC1jb2xvcjojZjJkZWRlfWEubGlzdC1ncm91cC1pdGVtLWRhbmdlcixidXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlcntjb2xvcjojYTk0NDQyfWEubGlzdC1ncm91cC1pdGVtLWRhbmdlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5ne2NvbG9yOmluaGVyaXR9YS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyOmZvY3VzLGEubGlzdC1ncm91cC1pdGVtLWRhbmdlcjpob3ZlcixidXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlcjpmb2N1cyxidXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlcjpob3Zlcntjb2xvcjojYTk0NDQyO2JhY2tncm91bmQtY29sb3I6I2ViY2NjY31hLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlLGEubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmU6Zm9jdXMsYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmFjdGl2ZTpob3ZlcixidXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmUsYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlOmZvY3VzLGJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmFjdGl2ZTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2E5NDQ0Mjtib3JkZXItY29sb3I6I2E5NDQ0Mn0ubGlzdC1ncm91cC1pdGVtLWhlYWRpbmd7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206NXB4fS5saXN0LWdyb3VwLWl0ZW0tdGV4dHttYXJnaW4tYm90dG9tOjA7bGluZS1oZWlnaHQ6MS4zfS5wYW5lbHttYXJnaW4tYm90dG9tOjIwcHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNSk7Ym94LXNoYWRvdzowIDFweCAxcHggcmdiYSgwLDAsMCwuMDUpfS5wYW5lbC1ib2R5e3BhZGRpbmc6MTVweH0ucGFuZWwtaGVhZGluZ3twYWRkaW5nOjEwcHggMTVweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHh9LnBhbmVsLWhlYWRpbmc+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6aW5oZXJpdH0ucGFuZWwtdGl0bGV7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MDtmb250LXNpemU6MTZweDtjb2xvcjppbmhlcml0fS5wYW5lbC10aXRsZT4uc21hbGwsLnBhbmVsLXRpdGxlPi5zbWFsbD5hLC5wYW5lbC10aXRsZT5hLC5wYW5lbC10aXRsZT5zbWFsbCwucGFuZWwtdGl0bGU+c21hbGw+YXtjb2xvcjppbmhlcml0fS5wYW5lbC1mb290ZXJ7cGFkZGluZzoxMHB4IDE1cHg7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4fS5wYW5lbD4ubGlzdC1ncm91cCwucGFuZWw+LnBhbmVsLWNvbGxhcHNlPi5saXN0LWdyb3Vwe21hcmdpbi1ib3R0b206MH0ucGFuZWw+Lmxpc3QtZ3JvdXAgLmxpc3QtZ3JvdXAtaXRlbSwucGFuZWw+LnBhbmVsLWNvbGxhcHNlPi5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW17Ym9yZGVyLXdpZHRoOjFweCAwO2JvcmRlci1yYWRpdXM6MH0ucGFuZWw+Lmxpc3QtZ3JvdXA6Zmlyc3QtY2hpbGQgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCwucGFuZWw+LnBhbmVsLWNvbGxhcHNlPi5saXN0LWdyb3VwOmZpcnN0LWNoaWxkIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcDowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweH0ucGFuZWw+Lmxpc3QtZ3JvdXA6bGFzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQsLnBhbmVsPi5wYW5lbC1jb2xsYXBzZT4ubGlzdC1ncm91cDpsYXN0LWNoaWxkIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4fS5wYW5lbD4ucGFuZWwtaGVhZGluZysucGFuZWwtY29sbGFwc2U+Lmxpc3QtZ3JvdXAgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0ucGFuZWwtaGVhZGluZysubGlzdC1ncm91cCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxke2JvcmRlci10b3Atd2lkdGg6MH0ubGlzdC1ncm91cCsucGFuZWwtZm9vdGVye2JvcmRlci10b3Atd2lkdGg6MH0ucGFuZWw+LnBhbmVsLWNvbGxhcHNlPi50YWJsZSwucGFuZWw+LnRhYmxlLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGV7bWFyZ2luLWJvdHRvbTowfS5wYW5lbD4ucGFuZWwtY29sbGFwc2U+LnRhYmxlIGNhcHRpb24sLnBhbmVsPi50YWJsZSBjYXB0aW9uLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUgY2FwdGlvbntwYWRkaW5nLXJpZ2h0OjE1cHg7cGFkZGluZy1sZWZ0OjE1cHh9LnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkPi50YWJsZTpmaXJzdC1jaGlsZCwucGFuZWw+LnRhYmxlOmZpcnN0LWNoaWxke2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweH0ucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQ+LnRhYmxlOmZpcnN0LWNoaWxkPnRib2R5OmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZD4udGFibGU6Zmlyc3QtY2hpbGQ+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQsLnBhbmVsPi50YWJsZTpmaXJzdC1jaGlsZD50Ym9keTpmaXJzdC1jaGlsZD50cjpmaXJzdC1jaGlsZCwucGFuZWw+LnRhYmxlOmZpcnN0LWNoaWxkPnRoZWFkOmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxke2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweH0ucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQ+LnRhYmxlOmZpcnN0LWNoaWxkPnRib2R5OmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZD4udGFibGU6Zmlyc3QtY2hpbGQ+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkPi50YWJsZTpmaXJzdC1jaGlsZD50aGVhZDpmaXJzdC1jaGlsZD50cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQ+LnRhYmxlOmZpcnN0LWNoaWxkPnRoZWFkOmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC5wYW5lbD4udGFibGU6Zmlyc3QtY2hpbGQ+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsLnBhbmVsPi50YWJsZTpmaXJzdC1jaGlsZD50Ym9keTpmaXJzdC1jaGlsZD50cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwucGFuZWw+LnRhYmxlOmZpcnN0LWNoaWxkPnRoZWFkOmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLC5wYW5lbD4udGFibGU6Zmlyc3QtY2hpbGQ+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czozcHh9LnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkPi50YWJsZTpmaXJzdC1jaGlsZD50Ym9keTpmaXJzdC1jaGlsZD50cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZD4udGFibGU6Zmlyc3QtY2hpbGQ+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQ+LnRhYmxlOmZpcnN0LWNoaWxkPnRoZWFkOmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkPi50YWJsZTpmaXJzdC1jaGlsZD50aGVhZDpmaXJzdC1jaGlsZD50cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGU6Zmlyc3QtY2hpbGQ+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwucGFuZWw+LnRhYmxlOmZpcnN0LWNoaWxkPnRib2R5OmZpcnN0LWNoaWxkPnRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsLnBhbmVsPi50YWJsZTpmaXJzdC1jaGlsZD50aGVhZDpmaXJzdC1jaGlsZD50cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGU6Zmlyc3QtY2hpbGQ+dGhlYWQ6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZHtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHh9LnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQ+LnRhYmxlOmxhc3QtY2hpbGQsLnBhbmVsPi50YWJsZTpsYXN0LWNoaWxke2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjNweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweH0ucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZD4udGFibGU6bGFzdC1jaGlsZD50Ym9keTpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQ+LnRhYmxlOmxhc3QtY2hpbGQ+dGZvb3Q6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGU6bGFzdC1jaGlsZD50Ym9keTpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQsLnBhbmVsPi50YWJsZTpsYXN0LWNoaWxkPnRmb290Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czozcHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHh9LnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQ+LnRhYmxlOmxhc3QtY2hpbGQ+dGJvZHk6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkPi50YWJsZTpsYXN0LWNoaWxkPnRib2R5Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZD4udGFibGU6bGFzdC1jaGlsZD50Zm9vdDpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQ+LnRhYmxlOmxhc3QtY2hpbGQ+dGZvb3Q6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC5wYW5lbD4udGFibGU6bGFzdC1jaGlsZD50Ym9keTpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsLnBhbmVsPi50YWJsZTpsYXN0LWNoaWxkPnRib2R5Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwucGFuZWw+LnRhYmxlOmxhc3QtY2hpbGQ+dGZvb3Q6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLC5wYW5lbD4udGFibGU6bGFzdC1jaGlsZD50Zm9vdDpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHh9LnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQ+LnRhYmxlOmxhc3QtY2hpbGQ+dGJvZHk6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQ+LnRhYmxlOmxhc3QtY2hpbGQ+dGJvZHk6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQ+LnRhYmxlOmxhc3QtY2hpbGQ+dGZvb3Q6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQ+LnRhYmxlOmxhc3QtY2hpbGQ+dGZvb3Q6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsLnBhbmVsPi50YWJsZTpsYXN0LWNoaWxkPnRib2R5Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGU6bGFzdC1jaGlsZD50Ym9keTpsYXN0LWNoaWxkPnRyOmxhc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwucGFuZWw+LnRhYmxlOmxhc3QtY2hpbGQ+dGZvb3Q6bGFzdC1jaGlsZD50cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsLnBhbmVsPi50YWJsZTpsYXN0LWNoaWxkPnRmb290Omxhc3QtY2hpbGQ+dHI6bGFzdC1jaGlsZCB0aDpsYXN0LWNoaWxke2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjNweH0ucGFuZWw+LnBhbmVsLWJvZHkrLnRhYmxlLC5wYW5lbD4ucGFuZWwtYm9keSsudGFibGUtcmVzcG9uc2l2ZSwucGFuZWw+LnRhYmxlKy5wYW5lbC1ib2R5LC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZSsucGFuZWwtYm9keXtib3JkZXItdG9wOjFweCBzb2xpZCAjZGRkfS5wYW5lbD4udGFibGU+dGJvZHk6Zmlyc3QtY2hpbGQ+dHI6Zmlyc3QtY2hpbGQgdGQsLnBhbmVsPi50YWJsZT50Ym9keTpmaXJzdC1jaGlsZD50cjpmaXJzdC1jaGlsZCB0aHtib3JkZXItdG9wOjB9LnBhbmVsPi50YWJsZS1ib3JkZXJlZCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVke2JvcmRlcjowfS5wYW5lbD4udGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI+dGQ6Zmlyc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cj50aDpmaXJzdC1jaGlsZCwucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRkOmZpcnN0LWNoaWxkLC5wYW5lbD4udGFibGUtYm9yZGVyZWQ+dGZvb3Q+dHI+dGg6Zmlyc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cj50ZDpmaXJzdC1jaGlsZCwucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRoOmZpcnN0LWNoaWxkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI+dGQ6Zmlyc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cj50aDpmaXJzdC1jaGlsZCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRkOmZpcnN0LWNoaWxkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGZvb3Q+dHI+dGg6Zmlyc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cj50ZDpmaXJzdC1jaGlsZCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRoOmZpcnN0LWNoaWxke2JvcmRlci1sZWZ0OjB9LnBhbmVsPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cj50ZDpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI+dGg6bGFzdC1jaGlsZCwucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRkOmxhc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1ib3JkZXJlZD50Zm9vdD50cj50aDpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI+dGQ6bGFzdC1jaGlsZCwucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRoOmxhc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cj50ZDpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI+dGg6bGFzdC1jaGlsZCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyPnRkOmxhc3QtY2hpbGQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Zm9vdD50cj50aDpsYXN0LWNoaWxkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI+dGQ6bGFzdC1jaGlsZCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyPnRoOmxhc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0OjB9LnBhbmVsPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cjpmaXJzdC1jaGlsZD50ZCwucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmZpcnN0LWNoaWxkPnRoLC5wYW5lbD4udGFibGUtYm9yZGVyZWQ+dGhlYWQ+dHI6Zmlyc3QtY2hpbGQ+dGQsLnBhbmVsPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cjpmaXJzdC1jaGlsZD50aCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmZpcnN0LWNoaWxkPnRkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI6Zmlyc3QtY2hpbGQ+dGgsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50aGVhZD50cjpmaXJzdC1jaGlsZD50ZCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRoZWFkPnRyOmZpcnN0LWNoaWxkPnRoe2JvcmRlci1ib3R0b206MH0ucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRib2R5PnRyOmxhc3QtY2hpbGQ+dGQsLnBhbmVsPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cjpsYXN0LWNoaWxkPnRoLC5wYW5lbD4udGFibGUtYm9yZGVyZWQ+dGZvb3Q+dHI6bGFzdC1jaGlsZD50ZCwucGFuZWw+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyOmxhc3QtY2hpbGQ+dGgsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Ym9keT50cjpsYXN0LWNoaWxkPnRkLC5wYW5lbD4udGFibGUtcmVzcG9uc2l2ZT4udGFibGUtYm9yZGVyZWQ+dGJvZHk+dHI6bGFzdC1jaGlsZD50aCwucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmU+LnRhYmxlLWJvcmRlcmVkPnRmb290PnRyOmxhc3QtY2hpbGQ+dGQsLnBhbmVsPi50YWJsZS1yZXNwb25zaXZlPi50YWJsZS1ib3JkZXJlZD50Zm9vdD50cjpsYXN0LWNoaWxkPnRoe2JvcmRlci1ib3R0b206MH0ucGFuZWw+LnRhYmxlLXJlc3BvbnNpdmV7bWFyZ2luLWJvdHRvbTowO2JvcmRlcjowfS5wYW5lbC1ncm91cHttYXJnaW4tYm90dG9tOjIwcHh9LnBhbmVsLWdyb3VwIC5wYW5lbHttYXJnaW4tYm90dG9tOjA7Ym9yZGVyLXJhZGl1czo0cHh9LnBhbmVsLWdyb3VwIC5wYW5lbCsucGFuZWx7bWFyZ2luLXRvcDo1cHh9LnBhbmVsLWdyb3VwIC5wYW5lbC1oZWFkaW5ne2JvcmRlci1ib3R0b206MH0ucGFuZWwtZ3JvdXAgLnBhbmVsLWhlYWRpbmcrLnBhbmVsLWNvbGxhcHNlPi5saXN0LWdyb3VwLC5wYW5lbC1ncm91cCAucGFuZWwtaGVhZGluZysucGFuZWwtY29sbGFwc2U+LnBhbmVsLWJvZHl7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZH0ucGFuZWwtZ3JvdXAgLnBhbmVsLWZvb3Rlcntib3JkZXItdG9wOjB9LnBhbmVsLWdyb3VwIC5wYW5lbC1mb290ZXIrLnBhbmVsLWNvbGxhcHNlIC5wYW5lbC1ib2R5e2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZGR9LnBhbmVsLWRlZmF1bHR7Ym9yZGVyLWNvbG9yOiNkZGR9LnBhbmVsLWRlZmF1bHQ+LnBhbmVsLWhlYWRpbmd7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7Ym9yZGVyLWNvbG9yOiNkZGR9LnBhbmVsLWRlZmF1bHQ+LnBhbmVsLWhlYWRpbmcrLnBhbmVsLWNvbGxhcHNlPi5wYW5lbC1ib2R5e2JvcmRlci10b3AtY29sb3I6I2RkZH0ucGFuZWwtZGVmYXVsdD4ucGFuZWwtaGVhZGluZyAuYmFkZ2V7Y29sb3I6I2Y1ZjVmNTtiYWNrZ3JvdW5kLWNvbG9yOiMzMzN9LnBhbmVsLWRlZmF1bHQ+LnBhbmVsLWZvb3RlcisucGFuZWwtY29sbGFwc2U+LnBhbmVsLWJvZHl7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZGRkfS5wYW5lbC1wcmltYXJ5e2JvcmRlci1jb2xvcjojMzM3YWI3fS5wYW5lbC1wcmltYXJ5Pi5wYW5lbC1oZWFkaW5ne2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMzM3YWI3O2JvcmRlci1jb2xvcjojMzM3YWI3fS5wYW5lbC1wcmltYXJ5Pi5wYW5lbC1oZWFkaW5nKy5wYW5lbC1jb2xsYXBzZT4ucGFuZWwtYm9keXtib3JkZXItdG9wLWNvbG9yOiMzMzdhYjd9LnBhbmVsLXByaW1hcnk+LnBhbmVsLWhlYWRpbmcgLmJhZGdle2NvbG9yOiMzMzdhYjc7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5wYW5lbC1wcmltYXJ5Pi5wYW5lbC1mb290ZXIrLnBhbmVsLWNvbGxhcHNlPi5wYW5lbC1ib2R5e2JvcmRlci1ib3R0b20tY29sb3I6IzMzN2FiN30ucGFuZWwtc3VjY2Vzc3tib3JkZXItY29sb3I6I2Q2ZTljNn0ucGFuZWwtc3VjY2Vzcz4ucGFuZWwtaGVhZGluZ3tjb2xvcjojM2M3NjNkO2JhY2tncm91bmQtY29sb3I6I2RmZjBkODtib3JkZXItY29sb3I6I2Q2ZTljNn0ucGFuZWwtc3VjY2Vzcz4ucGFuZWwtaGVhZGluZysucGFuZWwtY29sbGFwc2U+LnBhbmVsLWJvZHl7Ym9yZGVyLXRvcC1jb2xvcjojZDZlOWM2fS5wYW5lbC1zdWNjZXNzPi5wYW5lbC1oZWFkaW5nIC5iYWRnZXtjb2xvcjojZGZmMGQ4O2JhY2tncm91bmQtY29sb3I6IzNjNzYzZH0ucGFuZWwtc3VjY2Vzcz4ucGFuZWwtZm9vdGVyKy5wYW5lbC1jb2xsYXBzZT4ucGFuZWwtYm9keXtib3JkZXItYm90dG9tLWNvbG9yOiNkNmU5YzZ9LnBhbmVsLWluZm97Ym9yZGVyLWNvbG9yOiNiY2U4ZjF9LnBhbmVsLWluZm8+LnBhbmVsLWhlYWRpbmd7Y29sb3I6IzMxNzA4ZjtiYWNrZ3JvdW5kLWNvbG9yOiNkOWVkZjc7Ym9yZGVyLWNvbG9yOiNiY2U4ZjF9LnBhbmVsLWluZm8+LnBhbmVsLWhlYWRpbmcrLnBhbmVsLWNvbGxhcHNlPi5wYW5lbC1ib2R5e2JvcmRlci10b3AtY29sb3I6I2JjZThmMX0ucGFuZWwtaW5mbz4ucGFuZWwtaGVhZGluZyAuYmFkZ2V7Y29sb3I6I2Q5ZWRmNztiYWNrZ3JvdW5kLWNvbG9yOiMzMTcwOGZ9LnBhbmVsLWluZm8+LnBhbmVsLWZvb3RlcisucGFuZWwtY29sbGFwc2U+LnBhbmVsLWJvZHl7Ym9yZGVyLWJvdHRvbS1jb2xvcjojYmNlOGYxfS5wYW5lbC13YXJuaW5ne2JvcmRlci1jb2xvcjojZmFlYmNjfS5wYW5lbC13YXJuaW5nPi5wYW5lbC1oZWFkaW5ne2NvbG9yOiM4YTZkM2I7YmFja2dyb3VuZC1jb2xvcjojZmNmOGUzO2JvcmRlci1jb2xvcjojZmFlYmNjfS5wYW5lbC13YXJuaW5nPi5wYW5lbC1oZWFkaW5nKy5wYW5lbC1jb2xsYXBzZT4ucGFuZWwtYm9keXtib3JkZXItdG9wLWNvbG9yOiNmYWViY2N9LnBhbmVsLXdhcm5pbmc+LnBhbmVsLWhlYWRpbmcgLmJhZGdle2NvbG9yOiNmY2Y4ZTM7YmFja2dyb3VuZC1jb2xvcjojOGE2ZDNifS5wYW5lbC13YXJuaW5nPi5wYW5lbC1mb290ZXIrLnBhbmVsLWNvbGxhcHNlPi5wYW5lbC1ib2R5e2JvcmRlci1ib3R0b20tY29sb3I6I2ZhZWJjY30ucGFuZWwtZGFuZ2Vye2JvcmRlci1jb2xvcjojZWJjY2QxfS5wYW5lbC1kYW5nZXI+LnBhbmVsLWhlYWRpbmd7Y29sb3I6I2E5NDQ0MjtiYWNrZ3JvdW5kLWNvbG9yOiNmMmRlZGU7Ym9yZGVyLWNvbG9yOiNlYmNjZDF9LnBhbmVsLWRhbmdlcj4ucGFuZWwtaGVhZGluZysucGFuZWwtY29sbGFwc2U+LnBhbmVsLWJvZHl7Ym9yZGVyLXRvcC1jb2xvcjojZWJjY2QxfS5wYW5lbC1kYW5nZXI+LnBhbmVsLWhlYWRpbmcgLmJhZGdle2NvbG9yOiNmMmRlZGU7YmFja2dyb3VuZC1jb2xvcjojYTk0NDQyfS5wYW5lbC1kYW5nZXI+LnBhbmVsLWZvb3RlcisucGFuZWwtY29sbGFwc2U+LnBhbmVsLWJvZHl7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZWJjY2QxfS5lbWJlZC1yZXNwb25zaXZle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7cGFkZGluZzowO292ZXJmbG93OmhpZGRlbn0uZW1iZWQtcmVzcG9uc2l2ZSAuZW1iZWQtcmVzcG9uc2l2ZS1pdGVtLC5lbWJlZC1yZXNwb25zaXZlIGVtYmVkLC5lbWJlZC1yZXNwb25zaXZlIGlmcmFtZSwuZW1iZWQtcmVzcG9uc2l2ZSBvYmplY3QsLmVtYmVkLXJlc3BvbnNpdmUgdmlkZW97cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyOjB9LmVtYmVkLXJlc3BvbnNpdmUtMTZieTl7cGFkZGluZy1ib3R0b206NTYuMjUlfS5lbWJlZC1yZXNwb25zaXZlLTRieTN7cGFkZGluZy1ib3R0b206NzUlfS53ZWxse21pbi1oZWlnaHQ6MjBweDtwYWRkaW5nOjE5cHg7bWFyZ2luLWJvdHRvbToyMHB4O2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtib3JkZXI6MXB4IHNvbGlkICNlM2UzZTM7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDUpfS53ZWxsIGJsb2NrcXVvdGV7Ym9yZGVyLWNvbG9yOiNkZGQ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjE1KX0ud2VsbC1sZ3twYWRkaW5nOjI0cHg7Ym9yZGVyLXJhZGl1czo2cHh9LndlbGwtc217cGFkZGluZzo5cHg7Ym9yZGVyLXJhZGl1czozcHh9LmNsb3Nle2Zsb2F0OnJpZ2h0O2ZvbnQtc2l6ZToyMXB4O2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO2NvbG9yOiMwMDA7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmO2ZpbHRlcjphbHBoYShvcGFjaXR5PTIwKTtvcGFjaXR5Oi4yfS5jbG9zZTpmb2N1cywuY2xvc2U6aG92ZXJ7Y29sb3I6IzAwMDt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcjtmaWx0ZXI6YWxwaGEob3BhY2l0eT01MCk7b3BhY2l0eTouNX1idXR0b24uY2xvc2V7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7cGFkZGluZzowO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowfS5tb2RhbC1vcGVue292ZXJmbG93OmhpZGRlbn0ubW9kYWx7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7ei1pbmRleDoxMDUwO2Rpc3BsYXk6bm9uZTtvdmVyZmxvdzpoaWRkZW47LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7b3V0bGluZTowfS5tb2RhbC5mYWRlIC5tb2RhbC1kaWFsb2d7LXdlYmtpdC10cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC4zcyBlYXNlLW91dDstby10cmFuc2l0aW9uOi1vLXRyYW5zZm9ybSAuM3MgZWFzZS1vdXQ7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2Utb3V0Oy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLC0yNSUpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlKDAsLTI1JSk7LW8tdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLC0yNSUpO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwtMjUlKX0ubW9kYWwuaW4gLm1vZGFsLWRpYWxvZ3std2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApOy1vLXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCl9Lm1vZGFsLW9wZW4gLm1vZGFse292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6YXV0b30ubW9kYWwtZGlhbG9ne3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOmF1dG87bWFyZ2luOjEwcHh9Lm1vZGFsLWNvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7YmFja2dyb3VuZC1jb2xvcjojZmZmOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94O2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDtib3JkZXI6MXB4IHNvbGlkICM5OTk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4yKTtib3JkZXItcmFkaXVzOjZweDtvdXRsaW5lOjA7LXdlYmtpdC1ib3gtc2hhZG93OjAgM3B4IDlweCByZ2JhKDAsMCwwLC41KTtib3gtc2hhZG93OjAgM3B4IDlweCByZ2JhKDAsMCwwLC41KX0ubW9kYWwtYmFja2Ryb3B7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7ei1pbmRleDoxMDQwO2JhY2tncm91bmQtY29sb3I6IzAwMH0ubW9kYWwtYmFja2Ryb3AuZmFkZXtmaWx0ZXI6YWxwaGEob3BhY2l0eT0wKTtvcGFjaXR5OjB9Lm1vZGFsLWJhY2tkcm9wLmlue2ZpbHRlcjphbHBoYShvcGFjaXR5PTUwKTtvcGFjaXR5Oi41fS5tb2RhbC1oZWFkZXJ7bWluLWhlaWdodDoxNi40M3B4O3BhZGRpbmc6MTVweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU1fS5tb2RhbC1oZWFkZXIgLmNsb3Nle21hcmdpbi10b3A6LTJweH0ubW9kYWwtdGl0bGV7bWFyZ2luOjA7bGluZS1oZWlnaHQ6MS40Mjg1NzE0M30ubW9kYWwtYm9keXtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjE1cHh9Lm1vZGFsLWZvb3RlcntwYWRkaW5nOjE1cHg7dGV4dC1hbGlnbjpyaWdodDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTVlNWU1fS5tb2RhbC1mb290ZXIgLmJ0bisuYnRue21hcmdpbi1ib3R0b206MDttYXJnaW4tbGVmdDo1cHh9Lm1vZGFsLWZvb3RlciAuYnRuLWdyb3VwIC5idG4rLmJ0bnttYXJnaW4tbGVmdDotMXB4fS5tb2RhbC1mb290ZXIgLmJ0bi1ibG9jaysuYnRuLWJsb2Nre21hcmdpbi1sZWZ0OjB9Lm1vZGFsLXNjcm9sbGJhci1tZWFzdXJle3Bvc2l0aW9uOmFic29sdXRlO3RvcDotOTk5OXB4O3dpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7b3ZlcmZsb3c6c2Nyb2xsfUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsubW9kYWwtZGlhbG9ne3dpZHRoOjYwMHB4O21hcmdpbjozMHB4IGF1dG99Lm1vZGFsLWNvbnRlbnR7LXdlYmtpdC1ib3gtc2hhZG93OjAgNXB4IDE1cHggcmdiYSgwLDAsMCwuNSk7Ym94LXNoYWRvdzowIDVweCAxNXB4IHJnYmEoMCwwLDAsLjUpfS5tb2RhbC1zbXt3aWR0aDozMDBweH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5tb2RhbC1sZ3t3aWR0aDo5MDBweH19LnRvb2x0aXB7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDcwO2Rpc3BsYXk6YmxvY2s7Zm9udC1mYW1pbHk6IkhlbHZldGljYSBOZXVlIixIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40Mjg1NzE0Mzt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1hbGlnbjpzdGFydDt0ZXh0LWRlY29yYXRpb246bm9uZTt0ZXh0LXNoYWRvdzpub25lO3RleHQtdHJhbnNmb3JtOm5vbmU7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtYnJlYWs6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7d29yZC13cmFwOm5vcm1hbDt3aGl0ZS1zcGFjZTpub3JtYWw7ZmlsdGVyOmFscGhhKG9wYWNpdHk9MCk7b3BhY2l0eTowO2xpbmUtYnJlYWs6YXV0b30udG9vbHRpcC5pbntmaWx0ZXI6YWxwaGEob3BhY2l0eT05MCk7b3BhY2l0eTouOX0udG9vbHRpcC50b3B7cGFkZGluZzo1cHggMDttYXJnaW4tdG9wOi0zcHh9LnRvb2x0aXAucmlnaHR7cGFkZGluZzowIDVweDttYXJnaW4tbGVmdDozcHh9LnRvb2x0aXAuYm90dG9te3BhZGRpbmc6NXB4IDA7bWFyZ2luLXRvcDozcHh9LnRvb2x0aXAubGVmdHtwYWRkaW5nOjAgNXB4O21hcmdpbi1sZWZ0Oi0zcHh9LnRvb2x0aXAtaW5uZXJ7bWF4LXdpZHRoOjIwMHB4O3BhZGRpbmc6M3B4IDhweDtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQtY29sb3I6IzAwMDtib3JkZXItcmFkaXVzOjRweH0udG9vbHRpcC1hcnJvd3twb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDowO2hlaWdodDowO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6c29saWR9LnRvb2x0aXAudG9wIC50b29sdGlwLWFycm93e2JvdHRvbTowO2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi01cHg7Ym9yZGVyLXdpZHRoOjVweCA1cHggMDtib3JkZXItdG9wLWNvbG9yOiMwMDB9LnRvb2x0aXAudG9wLWxlZnQgLnRvb2x0aXAtYXJyb3d7cmlnaHQ6NXB4O2JvdHRvbTowO21hcmdpbi1ib3R0b206LTVweDtib3JkZXItd2lkdGg6NXB4IDVweCAwO2JvcmRlci10b3AtY29sb3I6IzAwMH0udG9vbHRpcC50b3AtcmlnaHQgLnRvb2x0aXAtYXJyb3d7Ym90dG9tOjA7bGVmdDo1cHg7bWFyZ2luLWJvdHRvbTotNXB4O2JvcmRlci13aWR0aDo1cHggNXB4IDA7Ym9yZGVyLXRvcC1jb2xvcjojMDAwfS50b29sdGlwLnJpZ2h0IC50b29sdGlwLWFycm93e3RvcDo1MCU7bGVmdDowO21hcmdpbi10b3A6LTVweDtib3JkZXItd2lkdGg6NXB4IDVweCA1cHggMDtib3JkZXItcmlnaHQtY29sb3I6IzAwMH0udG9vbHRpcC5sZWZ0IC50b29sdGlwLWFycm93e3RvcDo1MCU7cmlnaHQ6MDttYXJnaW4tdG9wOi01cHg7Ym9yZGVyLXdpZHRoOjVweCAwIDVweCA1cHg7Ym9yZGVyLWxlZnQtY29sb3I6IzAwMH0udG9vbHRpcC5ib3R0b20gLnRvb2x0aXAtYXJyb3d7dG9wOjA7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTVweDtib3JkZXItd2lkdGg6MCA1cHggNXB4O2JvcmRlci1ib3R0b20tY29sb3I6IzAwMH0udG9vbHRpcC5ib3R0b20tbGVmdCAudG9vbHRpcC1hcnJvd3t0b3A6MDtyaWdodDo1cHg7bWFyZ2luLXRvcDotNXB4O2JvcmRlci13aWR0aDowIDVweCA1cHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDAwfS50b29sdGlwLmJvdHRvbS1yaWdodCAudG9vbHRpcC1hcnJvd3t0b3A6MDtsZWZ0OjVweDttYXJnaW4tdG9wOi01cHg7Ym9yZGVyLXdpZHRoOjAgNXB4IDVweDtib3JkZXItYm90dG9tLWNvbG9yOiMwMDB9LnBvcG92ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3otaW5kZXg6MTA2MDtkaXNwbGF5Om5vbmU7bWF4LXdpZHRoOjI3NnB4O3BhZGRpbmc6MXB4O2ZvbnQtZmFtaWx5OiJIZWx2ZXRpY2EgTmV1ZSIsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNDI4NTcxNDM7dGV4dC1hbGlnbjpsZWZ0O3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1zaGFkb3c6bm9uZTt0ZXh0LXRyYW5zZm9ybTpub25lO2xldHRlci1zcGFjaW5nOm5vcm1hbDt3b3JkLWJyZWFrOm5vcm1hbDt3b3JkLXNwYWNpbmc6bm9ybWFsO3dvcmQtd3JhcDpub3JtYWw7d2hpdGUtc3BhY2U6bm9ybWFsO2JhY2tncm91bmQtY29sb3I6I2ZmZjstd2Via2l0LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDtiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuMik7Ym9yZGVyLXJhZGl1czo2cHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgNXB4IDEwcHggcmdiYSgwLDAsMCwuMik7Ym94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsLjIpO2xpbmUtYnJlYWs6YXV0b30ucG9wb3Zlci50b3B7bWFyZ2luLXRvcDotMTBweH0ucG9wb3Zlci5yaWdodHttYXJnaW4tbGVmdDoxMHB4fS5wb3BvdmVyLmJvdHRvbXttYXJnaW4tdG9wOjEwcHh9LnBvcG92ZXIubGVmdHttYXJnaW4tbGVmdDotMTBweH0ucG9wb3Zlci10aXRsZXtwYWRkaW5nOjhweCAxNHB4O21hcmdpbjowO2ZvbnQtc2l6ZToxNHB4O2JhY2tncm91bmQtY29sb3I6I2Y3ZjdmNztib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NXB4IDVweCAwIDB9LnBvcG92ZXItY29udGVudHtwYWRkaW5nOjlweCAxNHB4fS5wb3BvdmVyPi5hcnJvdywucG9wb3Zlcj4uYXJyb3c6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jazt3aWR0aDowO2hlaWdodDowO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6c29saWR9LnBvcG92ZXI+LmFycm93e2JvcmRlci13aWR0aDoxMXB4fS5wb3BvdmVyPi5hcnJvdzphZnRlcntjb250ZW50OiIiO2JvcmRlci13aWR0aDoxMHB4fS5wb3BvdmVyLnRvcD4uYXJyb3d7Ym90dG9tOi0xMXB4O2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi0xMXB4O2JvcmRlci10b3AtY29sb3I6Izk5OTtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjI1KTtib3JkZXItYm90dG9tLXdpZHRoOjB9LnBvcG92ZXIudG9wPi5hcnJvdzphZnRlcntib3R0b206MXB4O21hcmdpbi1sZWZ0Oi0xMHB4O2NvbnRlbnQ6IiAiO2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tLXdpZHRoOjB9LnBvcG92ZXIucmlnaHQ+LmFycm93e3RvcDo1MCU7bGVmdDotMTFweDttYXJnaW4tdG9wOi0xMXB4O2JvcmRlci1yaWdodC1jb2xvcjojOTk5O2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDAsMCwwLC4yNSk7Ym9yZGVyLWxlZnQtd2lkdGg6MH0ucG9wb3Zlci5yaWdodD4uYXJyb3c6YWZ0ZXJ7Ym90dG9tOi0xMHB4O2xlZnQ6MXB4O2NvbnRlbnQ6IiAiO2JvcmRlci1yaWdodC1jb2xvcjojZmZmO2JvcmRlci1sZWZ0LXdpZHRoOjB9LnBvcG92ZXIuYm90dG9tPi5hcnJvd3t0b3A6LTExcHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTExcHg7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20tY29sb3I6Izk5OTtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsLjI1KX0ucG9wb3Zlci5ib3R0b20+LmFycm93OmFmdGVye3RvcDoxcHg7bWFyZ2luLWxlZnQ6LTEwcHg7Y29udGVudDoiICI7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20tY29sb3I6I2ZmZn0ucG9wb3Zlci5sZWZ0Pi5hcnJvd3t0b3A6NTAlO3JpZ2h0Oi0xMXB4O21hcmdpbi10b3A6LTExcHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWxlZnQtY29sb3I6Izk5OTtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLC4yNSl9LnBvcG92ZXIubGVmdD4uYXJyb3c6YWZ0ZXJ7cmlnaHQ6MXB4O2JvdHRvbTotMTBweDtjb250ZW50OiIgIjtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdC1jb2xvcjojZmZmfS5jYXJvdXNlbHtwb3NpdGlvbjpyZWxhdGl2ZX0uY2Fyb3VzZWwtaW5uZXJ7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW59LmNhcm91c2VsLWlubmVyPi5pdGVte3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6bm9uZTstd2Via2l0LXRyYW5zaXRpb246LjZzIGVhc2UtaW4tb3V0IGxlZnQ7LW8tdHJhbnNpdGlvbjouNnMgZWFzZS1pbi1vdXQgbGVmdDt0cmFuc2l0aW9uOi42cyBlYXNlLWluLW91dCBsZWZ0fS5jYXJvdXNlbC1pbm5lcj4uaXRlbT5hPmltZywuY2Fyb3VzZWwtaW5uZXI+Lml0ZW0+aW1ne2xpbmUtaGVpZ2h0OjF9QG1lZGlhIGFsbCBhbmQgKHRyYW5zZm9ybS0zZCksKC13ZWJraXQtdHJhbnNmb3JtLTNkKXsuY2Fyb3VzZWwtaW5uZXI+Lml0ZW17LXdlYmtpdC10cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC42cyBlYXNlLWluLW91dDstby10cmFuc2l0aW9uOi1vLXRyYW5zZm9ybSAuNnMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2UtaW4tb3V0Oy13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47LXdlYmtpdC1wZXJzcGVjdGl2ZToxMDAwcHg7cGVyc3BlY3RpdmU6MTAwMHB4fS5jYXJvdXNlbC1pbm5lcj4uaXRlbS5hY3RpdmUucmlnaHQsLmNhcm91c2VsLWlubmVyPi5pdGVtLm5leHR7bGVmdDowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDEwMCUsMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMTAwJSwwLDApfS5jYXJvdXNlbC1pbm5lcj4uaXRlbS5hY3RpdmUubGVmdCwuY2Fyb3VzZWwtaW5uZXI+Lml0ZW0ucHJldntsZWZ0OjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTEwMCUsMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTEwMCUsMCwwKX0uY2Fyb3VzZWwtaW5uZXI+Lml0ZW0uYWN0aXZlLC5jYXJvdXNlbC1pbm5lcj4uaXRlbS5uZXh0LmxlZnQsLmNhcm91c2VsLWlubmVyPi5pdGVtLnByZXYucmlnaHR7bGVmdDowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApfX0uY2Fyb3VzZWwtaW5uZXI+LmFjdGl2ZSwuY2Fyb3VzZWwtaW5uZXI+Lm5leHQsLmNhcm91c2VsLWlubmVyPi5wcmV2e2Rpc3BsYXk6YmxvY2t9LmNhcm91c2VsLWlubmVyPi5hY3RpdmV7bGVmdDowfS5jYXJvdXNlbC1pbm5lcj4ubmV4dCwuY2Fyb3VzZWwtaW5uZXI+LnByZXZ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJX0uY2Fyb3VzZWwtaW5uZXI+Lm5leHR7bGVmdDoxMDAlfS5jYXJvdXNlbC1pbm5lcj4ucHJldntsZWZ0Oi0xMDAlfS5jYXJvdXNlbC1pbm5lcj4ubmV4dC5sZWZ0LC5jYXJvdXNlbC1pbm5lcj4ucHJldi5yaWdodHtsZWZ0OjB9LmNhcm91c2VsLWlubmVyPi5hY3RpdmUubGVmdHtsZWZ0Oi0xMDAlfS5jYXJvdXNlbC1pbm5lcj4uYWN0aXZlLnJpZ2h0e2xlZnQ6MTAwJX0uY2Fyb3VzZWwtY29udHJvbHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTUlO2ZvbnQtc2l6ZToyMHB4O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjYpO2ZpbHRlcjphbHBoYShvcGFjaXR5PTUwKTtvcGFjaXR5Oi41fS5jYXJvdXNlbC1jb250cm9sLmxlZnR7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudChsZWZ0LHJnYmEoMCwwLDAsLjUpIDAscmdiYSgwLDAsMCwuMDAwMSkgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQobGVmdCxyZ2JhKDAsMCwwLC41KSAwLHJnYmEoMCwwLDAsLjAwMDEpIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsbGVmdCB0b3AscmlnaHQgdG9wLGZyb20ocmdiYSgwLDAsMCwuNSkpLHRvKHJnYmEoMCwwLDAsLjAwMDEpKSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQscmdiYSgwLDAsMCwuNSkgMCxyZ2JhKDAsMCwwLC4wMDAxKSAxMDAlKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyM4MDAwMDAwMCcsIGVuZENvbG9yc3RyPScjMDAwMDAwMDAnLCBHcmFkaWVudFR5cGU9MSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9LmNhcm91c2VsLWNvbnRyb2wucmlnaHR7cmlnaHQ6MDtsZWZ0OmF1dG87YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudChsZWZ0LHJnYmEoMCwwLDAsLjAwMDEpIDAscmdiYSgwLDAsMCwuNSkgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQobGVmdCxyZ2JhKDAsMCwwLC4wMDAxKSAwLHJnYmEoMCwwLDAsLjUpIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsbGVmdCB0b3AscmlnaHQgdG9wLGZyb20ocmdiYSgwLDAsMCwuMDAwMSkpLHRvKHJnYmEoMCwwLDAsLjUpKSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQscmdiYSgwLDAsMCwuMDAwMSkgMCxyZ2JhKDAsMCwwLC41KSAxMDAlKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyMwMDAwMDAwMCcsIGVuZENvbG9yc3RyPScjODAwMDAwMDAnLCBHcmFkaWVudFR5cGU9MSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9LmNhcm91c2VsLWNvbnRyb2w6Zm9jdXMsLmNhcm91c2VsLWNvbnRyb2w6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LWRlY29yYXRpb246bm9uZTtmaWx0ZXI6YWxwaGEob3BhY2l0eT05MCk7b3V0bGluZTowO29wYWNpdHk6Ljl9LmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQsLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0LC5jYXJvdXNlbC1jb250cm9sIC5pY29uLW5leHQsLmNhcm91c2VsLWNvbnRyb2wgLmljb24tcHJldntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3otaW5kZXg6NTtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tdG9wOi0xMHB4fS5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1sZWZ0LC5jYXJvdXNlbC1jb250cm9sIC5pY29uLXByZXZ7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTEwcHh9LmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0LC5jYXJvdXNlbC1jb250cm9sIC5pY29uLW5leHR7cmlnaHQ6NTAlO21hcmdpbi1yaWdodDotMTBweH0uY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1uZXh0LC5jYXJvdXNlbC1jb250cm9sIC5pY29uLXByZXZ7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtmb250LWZhbWlseTpzZXJpZjtsaW5lLWhlaWdodDoxfS5jYXJvdXNlbC1jb250cm9sIC5pY29uLXByZXY6YmVmb3Jle2NvbnRlbnQ6J1wyMDM5J30uY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1uZXh0OmJlZm9yZXtjb250ZW50OidcMjAzYSd9LmNhcm91c2VsLWluZGljYXRvcnN7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjEwcHg7bGVmdDo1MCU7ei1pbmRleDoxNTt3aWR0aDo2MCU7cGFkZGluZy1sZWZ0OjA7bWFyZ2luLWxlZnQ6LTMwJTt0ZXh0LWFsaWduOmNlbnRlcjtsaXN0LXN0eWxlOm5vbmV9LmNhcm91c2VsLWluZGljYXRvcnMgbGl7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDttYXJnaW46MXB4O3RleHQtaW5kZW50Oi05OTlweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDBcOTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7Ym9yZGVyOjFweCBzb2xpZCAjZmZmO2JvcmRlci1yYWRpdXM6MTBweH0uY2Fyb3VzZWwtaW5kaWNhdG9ycyAuYWN0aXZle3dpZHRoOjEycHg7aGVpZ2h0OjEycHg7bWFyZ2luOjA7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5jYXJvdXNlbC1jYXB0aW9ue3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjE1JTtib3R0b206MjBweDtsZWZ0OjE1JTt6LWluZGV4OjEwO3BhZGRpbmctdG9wOjIwcHg7cGFkZGluZy1ib3R0b206MjBweDtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3RleHQtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLC42KX0uY2Fyb3VzZWwtY2FwdGlvbiAuYnRue3RleHQtc2hhZG93Om5vbmV9QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDo3NjhweCl7LmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQsLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0LC5jYXJvdXNlbC1jb250cm9sIC5pY29uLW5leHQsLmNhcm91c2VsLWNvbnRyb2wgLmljb24tcHJldnt3aWR0aDozMHB4O2hlaWdodDozMHB4O21hcmdpbi10b3A6LTE1cHg7Zm9udC1zaXplOjMwcHh9LmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQsLmNhcm91c2VsLWNvbnRyb2wgLmljb24tcHJldnttYXJnaW4tbGVmdDotMTVweH0uY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQsLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dHttYXJnaW4tcmlnaHQ6LTE1cHh9LmNhcm91c2VsLWNhcHRpb257cmlnaHQ6MjAlO2xlZnQ6MjAlO3BhZGRpbmctYm90dG9tOjMwcHh9LmNhcm91c2VsLWluZGljYXRvcnN7Ym90dG9tOjIwcHh9fS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1ncm91cDphZnRlciwuYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA6YmVmb3JlLC5idG4tdG9vbGJhcjphZnRlciwuYnRuLXRvb2xiYXI6YmVmb3JlLC5jbGVhcmZpeDphZnRlciwuY2xlYXJmaXg6YmVmb3JlLC5jb250YWluZXItZmx1aWQ6YWZ0ZXIsLmNvbnRhaW5lci1mbHVpZDpiZWZvcmUsLmNvbnRhaW5lcjphZnRlciwuY29udGFpbmVyOmJlZm9yZSwuZGwtaG9yaXpvbnRhbCBkZDphZnRlciwuZGwtaG9yaXpvbnRhbCBkZDpiZWZvcmUsLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cDphZnRlciwuZm9ybS1ob3Jpem9udGFsIC5mb3JtLWdyb3VwOmJlZm9yZSwubW9kYWwtZm9vdGVyOmFmdGVyLC5tb2RhbC1mb290ZXI6YmVmb3JlLC5uYXY6YWZ0ZXIsLm5hdjpiZWZvcmUsLm5hdmJhci1jb2xsYXBzZTphZnRlciwubmF2YmFyLWNvbGxhcHNlOmJlZm9yZSwubmF2YmFyLWhlYWRlcjphZnRlciwubmF2YmFyLWhlYWRlcjpiZWZvcmUsLm5hdmJhcjphZnRlciwubmF2YmFyOmJlZm9yZSwucGFnZXI6YWZ0ZXIsLnBhZ2VyOmJlZm9yZSwucGFuZWwtYm9keTphZnRlciwucGFuZWwtYm9keTpiZWZvcmUsLnJvdzphZnRlciwucm93OmJlZm9yZXtkaXNwbGF5OnRhYmxlO2NvbnRlbnQ6IiAifS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1ncm91cDphZnRlciwuYnRuLXRvb2xiYXI6YWZ0ZXIsLmNsZWFyZml4OmFmdGVyLC5jb250YWluZXItZmx1aWQ6YWZ0ZXIsLmNvbnRhaW5lcjphZnRlciwuZGwtaG9yaXpvbnRhbCBkZDphZnRlciwuZm9ybS1ob3Jpem9udGFsIC5mb3JtLWdyb3VwOmFmdGVyLC5tb2RhbC1mb290ZXI6YWZ0ZXIsLm5hdjphZnRlciwubmF2YmFyLWNvbGxhcHNlOmFmdGVyLC5uYXZiYXItaGVhZGVyOmFmdGVyLC5uYXZiYXI6YWZ0ZXIsLnBhZ2VyOmFmdGVyLC5wYW5lbC1ib2R5OmFmdGVyLC5yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH0uY2VudGVyLWJsb2Nre2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXJpZ2h0OmF1dG87bWFyZ2luLWxlZnQ6YXV0b30ucHVsbC1yaWdodHtmbG9hdDpyaWdodCFpbXBvcnRhbnR9LnB1bGwtbGVmdHtmbG9hdDpsZWZ0IWltcG9ydGFudH0uaGlkZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5zaG93e2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59LnRleHQtaGlkZXtmb250OjAvMCBhO2NvbG9yOnRyYW5zcGFyZW50O3RleHQtc2hhZG93Om5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6MH0uaGlkZGVue2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmFmZml4e3Bvc2l0aW9uOmZpeGVkfUAtbXMtdmlld3BvcnR7d2lkdGg6ZGV2aWNlLXdpZHRofS52aXNpYmxlLWxnLC52aXNpYmxlLW1kLC52aXNpYmxlLXNtLC52aXNpYmxlLXhze2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LnZpc2libGUtbGctYmxvY2ssLnZpc2libGUtbGctaW5saW5lLC52aXNpYmxlLWxnLWlubGluZS1ibG9jaywudmlzaWJsZS1tZC1ibG9jaywudmlzaWJsZS1tZC1pbmxpbmUsLnZpc2libGUtbWQtaW5saW5lLWJsb2NrLC52aXNpYmxlLXNtLWJsb2NrLC52aXNpYmxlLXNtLWlubGluZSwudmlzaWJsZS1zbS1pbmxpbmUtYmxvY2ssLnZpc2libGUteHMtYmxvY2ssLnZpc2libGUteHMtaW5saW5lLC52aXNpYmxlLXhzLWlubGluZS1ibG9ja3tkaXNwbGF5Om5vbmUhaW1wb3J0YW50fUBtZWRpYSAobWF4LXdpZHRoOjc2N3B4KXsudmlzaWJsZS14c3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH10YWJsZS52aXNpYmxlLXhze2Rpc3BsYXk6dGFibGUhaW1wb3J0YW50fXRyLnZpc2libGUteHN7ZGlzcGxheTp0YWJsZS1yb3chaW1wb3J0YW50fXRkLnZpc2libGUteHMsdGgudmlzaWJsZS14c3tkaXNwbGF5OnRhYmxlLWNlbGwhaW1wb3J0YW50fX1AbWVkaWEgKG1heC13aWR0aDo3NjdweCl7LnZpc2libGUteHMtYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9fUBtZWRpYSAobWF4LXdpZHRoOjc2N3B4KXsudmlzaWJsZS14cy1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1heC13aWR0aDo3NjdweCl7LnZpc2libGUteHMtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpIGFuZCAobWF4LXdpZHRoOjk5MXB4KXsudmlzaWJsZS1zbXtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH10YWJsZS52aXNpYmxlLXNte2Rpc3BsYXk6dGFibGUhaW1wb3J0YW50fXRyLnZpc2libGUtc217ZGlzcGxheTp0YWJsZS1yb3chaW1wb3J0YW50fXRkLnZpc2libGUtc20sdGgudmlzaWJsZS1zbXtkaXNwbGF5OnRhYmxlLWNlbGwhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCkgYW5kIChtYXgtd2lkdGg6OTkxcHgpey52aXNpYmxlLXNtLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCkgYW5kIChtYXgtd2lkdGg6OTkxcHgpey52aXNpYmxlLXNtLWlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KSBhbmQgKG1heC13aWR0aDo5OTFweCl7LnZpc2libGUtc20taW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpIGFuZCAobWF4LXdpZHRoOjExOTlweCl7LnZpc2libGUtbWR7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9dGFibGUudmlzaWJsZS1tZHtkaXNwbGF5OnRhYmxlIWltcG9ydGFudH10ci52aXNpYmxlLW1ke2Rpc3BsYXk6dGFibGUtcm93IWltcG9ydGFudH10ZC52aXNpYmxlLW1kLHRoLnZpc2libGUtbWR7ZGlzcGxheTp0YWJsZS1jZWxsIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpIGFuZCAobWF4LXdpZHRoOjExOTlweCl7LnZpc2libGUtbWQtYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KSBhbmQgKG1heC13aWR0aDoxMTk5cHgpey52aXNpYmxlLW1kLWlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KSBhbmQgKG1heC13aWR0aDoxMTk5cHgpey52aXNpYmxlLW1kLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LnZpc2libGUtbGd7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9dGFibGUudmlzaWJsZS1sZ3tkaXNwbGF5OnRhYmxlIWltcG9ydGFudH10ci52aXNpYmxlLWxne2Rpc3BsYXk6dGFibGUtcm93IWltcG9ydGFudH10ZC52aXNpYmxlLWxnLHRoLnZpc2libGUtbGd7ZGlzcGxheTp0YWJsZS1jZWxsIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudmlzaWJsZS1sZy1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudmlzaWJsZS1sZy1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey52aXNpYmxlLWxnLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9fUBtZWRpYSAobWF4LXdpZHRoOjc2N3B4KXsuaGlkZGVuLXhze2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KSBhbmQgKG1heC13aWR0aDo5OTFweCl7LmhpZGRlbi1zbXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCkgYW5kIChtYXgtd2lkdGg6MTE5OXB4KXsuaGlkZGVuLW1ke2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmhpZGRlbi1sZ3tkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX0udmlzaWJsZS1wcmludHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fUBtZWRpYSBwcmludHsudmlzaWJsZS1wcmludHtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH10YWJsZS52aXNpYmxlLXByaW50e2Rpc3BsYXk6dGFibGUhaW1wb3J0YW50fXRyLnZpc2libGUtcHJpbnR7ZGlzcGxheTp0YWJsZS1yb3chaW1wb3J0YW50fXRkLnZpc2libGUtcHJpbnQsdGgudmlzaWJsZS1wcmludHtkaXNwbGF5OnRhYmxlLWNlbGwhaW1wb3J0YW50fX0udmlzaWJsZS1wcmludC1ibG9ja3tkaXNwbGF5Om5vbmUhaW1wb3J0YW50fUBtZWRpYSBwcmludHsudmlzaWJsZS1wcmludC1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH19LnZpc2libGUtcHJpbnQtaW5saW5le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIHByaW50ey52aXNpYmxlLXByaW50LWlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9fS52aXNpYmxlLXByaW50LWlubGluZS1ibG9ja3tkaXNwbGF5Om5vbmUhaW1wb3J0YW50fUBtZWRpYSBwcmludHsudmlzaWJsZS1wcmludC1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fX1AbWVkaWEgcHJpbnR7LmhpZGRlbi1wcmludHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX0='>
<link id=js_confirm_css src='data:/text/plain;base64,LyohCiAqIGpxdWVyeS1jb25maXJtIHYzLjMuNCAoaHR0cDovL2NyYWZ0cGlwLmdpdGh1Yi5pby9qcXVlcnktY29uZmlybS8pCiAqIEF1dGhvcjogYm9uaWZhY2UgcGVyZWlyYQogKiBXZWJzaXRlOiB3d3cuY3JhZnRwaXAuY29tCiAqIENvbnRhY3Q6IGhleUBjcmFmdHBpcC5jb20KICoKICogQ29weXJpZ2h0IDIwMTMtMjAxOSBqcXVlcnktY29uZmlybQogKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS9jcmFmdHBpcC9qcXVlcnktY29uZmlybS9ibG9iL21hc3Rlci9MSUNFTlNFKQogKi8KQC13ZWJraXQta2V5ZnJhbWVzIGpjb25maXJtLXNwaW4gewogICAgZnJvbSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICAgIH0KICAgIHRvIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgIH0KfQoKQGtleWZyYW1lcyBqY29uZmlybS1zcGluIHsKICAgIGZyb20gewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICB9CiAgICB0byB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICB9Cn0KCmJvZHlbY2xhc3MqPWpjb25maXJtLW5vLXNjcm9sbC1dIHsKICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDsKfQoKLmpjb25maXJtIHsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIGJvdHRvbTogMDsKICAgIHotaW5kZXg6IDk5OTk5OTk5OwogICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgouamNvbmZpcm0gLmpjb25maXJtLWJnIHsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIGJvdHRvbTogMDsKICAgIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAuNHM7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IC40czsKfQoKLmpjb25maXJtIC5qY29uZmlybS1iZy5qY29uZmlybS1iZy1oIHsKICAgIG9wYWNpdHk6IDAgIWltcG9ydGFudDsKfQoKLmpjb25maXJtIC5qY29uZmlybS1zY3JvbGxwYW5lIHsKICAgIC13ZWJraXQtcGVyc3BlY3RpdmU6IDUwMHB4OwogICAgcGVyc3BlY3RpdmU6IDUwMHB4OwogICAgLXdlYmtpdC1wZXJzcGVjdGl2ZS1vcmlnaW46IGNlbnRlcjsKICAgIHBlcnNwZWN0aXZlLW9yaWdpbjogY2VudGVyOwogICAgZGlzcGxheTogdGFibGU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKfQoKLmpjb25maXJtIC5qY29uZmlybS1yb3cgewogICAgZGlzcGxheTogdGFibGUtcm93OwogICAgd2lkdGg6IDEwMCU7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tY2VsbCB7CiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ob2xkZXIgewogICAgbWF4LWhlaWdodDogMTAwJTsKICAgIHBhZGRpbmc6IDUwcHggMDsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3gtY29udGFpbmVyIHsKICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm07CiAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSwgLXdlYmtpdC10cmFuc2Zvcm07Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94LWNvbnRhaW5lci5qY29uZmlybS1uby10cmFuc2l0aW9uIHsKICAgIC13ZWJraXQtdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50Owp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveCB7CiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG91dGxpbmU6IG5vbmU7CiAgICBwYWRkaW5nOiAxNXB4IDE1cHggMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIG1hcmdpbi1yaWdodDogYXV0bzsKfQoKQC13ZWJraXQta2V5ZnJhbWVzIHR5cGUtYmx1ZSB7CiAgICAxJSwKICAgIDEwMCUgewogICAgICAgIGJvcmRlci1jb2xvcjogIzM0OThkYjsKICAgIH0KICAgIDUwJSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNWZhZWUzOwogICAgfQp9CgpAa2V5ZnJhbWVzIHR5cGUtYmx1ZSB7CiAgICAxJSwKICAgIDEwMCUgewogICAgICAgIGJvcmRlci1jb2xvcjogIzM0OThkYjsKICAgIH0KICAgIDUwJSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNWZhZWUzOwogICAgfQp9CgpALXdlYmtpdC1rZXlmcmFtZXMgdHlwZS1ncmVlbiB7CiAgICAxJSwKICAgIDEwMCUgewogICAgICAgIGJvcmRlci1jb2xvcjogIzJlY2M3MTsKICAgIH0KICAgIDUwJSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNTRkOThjOwogICAgfQp9CgpAa2V5ZnJhbWVzIHR5cGUtZ3JlZW4gewogICAgMSUsCiAgICAxMDAlIHsKICAgICAgICBib3JkZXItY29sb3I6ICMyZWNjNzE7CiAgICB9CiAgICA1MCUgewogICAgICAgIGJvcmRlci1jb2xvcjogIzU0ZDk4YzsKICAgIH0KfQoKQC13ZWJraXQta2V5ZnJhbWVzIHR5cGUtcmVkIHsKICAgIDElLAogICAgMTAwJSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjZTc0YzNjOwogICAgfQogICAgNTAlIHsKICAgICAgICBib3JkZXItY29sb3I6ICNlZDc2Njk7CiAgICB9Cn0KCkBrZXlmcmFtZXMgdHlwZS1yZWQgewogICAgMSUsCiAgICAxMDAlIHsKICAgICAgICBib3JkZXItY29sb3I6ICNlNzRjM2M7CiAgICB9CiAgICA1MCUgewogICAgICAgIGJvcmRlci1jb2xvcjogI2VkNzY2OTsKICAgIH0KfQoKQC13ZWJraXQta2V5ZnJhbWVzIHR5cGUtb3JhbmdlIHsKICAgIDElLAogICAgMTAwJSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjZjFjNDBmOwogICAgfQogICAgNTAlIHsKICAgICAgICBib3JkZXItY29sb3I6ICNmNGQwM2Y7CiAgICB9Cn0KCkBrZXlmcmFtZXMgdHlwZS1vcmFuZ2UgewogICAgMSUsCiAgICAxMDAlIHsKICAgICAgICBib3JkZXItY29sb3I6ICNmMWM0MGY7CiAgICB9CiAgICA1MCUgewogICAgICAgIGJvcmRlci1jb2xvcjogI2Y0ZDAzZjsKICAgIH0KfQoKQC13ZWJraXQta2V5ZnJhbWVzIHR5cGUtcHVycGxlIHsKICAgIDElLAogICAgMTAwJSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjOWI1OWI2OwogICAgfQogICAgNTAlIHsKICAgICAgICBib3JkZXItY29sb3I6ICNiMDdjYzY7CiAgICB9Cn0KCkBrZXlmcmFtZXMgdHlwZS1wdXJwbGUgewogICAgMSUsCiAgICAxMDAlIHsKICAgICAgICBib3JkZXItY29sb3I6ICM5YjU5YjY7CiAgICB9CiAgICA1MCUgewogICAgICAgIGJvcmRlci1jb2xvcjogI2IwN2NjNjsKICAgIH0KfQoKQC13ZWJraXQta2V5ZnJhbWVzIHR5cGUtZGFyayB7CiAgICAxJSwKICAgIDEwMCUgewogICAgICAgIGJvcmRlci1jb2xvcjogIzM0NDk1ZTsKICAgIH0KICAgIDUwJSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDY2MjdmOwogICAgfQp9CgpAa2V5ZnJhbWVzIHR5cGUtZGFyayB7CiAgICAxJSwKICAgIDEwMCUgewogICAgICAgIGJvcmRlci1jb2xvcjogIzM0NDk1ZTsKICAgIH0KICAgIDUwJSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDY2MjdmOwogICAgfQp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveC5qY29uZmlybS10eXBlLWFuaW1hdGVkIHsKICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiAyczsKICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMnM7CiAgICAtd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOwogICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94Lmpjb25maXJtLXR5cGUtYmx1ZSB7CiAgICBib3JkZXItdG9wOiBzb2xpZCA3cHggIzM0OThkYjsKICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IHR5cGUtYmx1ZTsKICAgIGFuaW1hdGlvbi1uYW1lOiB0eXBlLWJsdWU7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94Lmpjb25maXJtLXR5cGUtZ3JlZW4gewogICAgYm9yZGVyLXRvcDogc29saWQgN3B4ICMyZWNjNzE7CiAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiB0eXBlLWdyZWVuOwogICAgYW5pbWF0aW9uLW5hbWU6IHR5cGUtZ3JlZW47Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94Lmpjb25maXJtLXR5cGUtcmVkIHsKICAgIGJvcmRlci10b3A6IHNvbGlkIDdweCAjZTc0YzNjOwogICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogdHlwZS1yZWQ7CiAgICBhbmltYXRpb24tbmFtZTogdHlwZS1yZWQ7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94Lmpjb25maXJtLXR5cGUtb3JhbmdlIHsKICAgIGJvcmRlci10b3A6IHNvbGlkIDdweCAjZjFjNDBmOwogICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogdHlwZS1vcmFuZ2U7CiAgICBhbmltYXRpb24tbmFtZTogdHlwZS1vcmFuZ2U7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94Lmpjb25maXJtLXR5cGUtcHVycGxlIHsKICAgIGJvcmRlci10b3A6IHNvbGlkIDdweCAjOWI1OWI2OwogICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogdHlwZS1wdXJwbGU7CiAgICBhbmltYXRpb24tbmFtZTogdHlwZS1wdXJwbGU7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94Lmpjb25maXJtLXR5cGUtZGFyayB7CiAgICBib3JkZXItdG9wOiBzb2xpZCA3cHggIzM0NDk1ZTsKICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IHR5cGUtZGFyazsKICAgIGFuaW1hdGlvbi1uYW1lOiB0eXBlLWRhcms7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94LmxvYWRpbmcgewogICAgaGVpZ2h0OiAxMjBweDsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3gubG9hZGluZzpiZWZvcmUgewogICAgY29udGVudDogJyc7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICByaWdodDogMDsKICAgIHRvcDogMDsKICAgIGJvdHRvbTogMDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICB6LWluZGV4OiAxOwp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveC5sb2FkaW5nOmFmdGVyIHsKICAgIG9wYWNpdHk6IDAuNjsKICAgIGNvbnRlbnQ6ICcnOwogICAgaGVpZ2h0OiAzMHB4OwogICAgd2lkdGg6IDMwcHg7CiAgICBib3JkZXI6IHNvbGlkIDNweCB0cmFuc3BhcmVudDsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDUwJTsKICAgIG1hcmdpbi1sZWZ0OiAtMTVweDsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgIC13ZWJraXQtYW5pbWF0aW9uOiBqY29uZmlybS1zcGluIDFzIGluZmluaXRlIGxpbmVhcjsKICAgIGFuaW1hdGlvbjogamNvbmZpcm0tc3BpbiAxcyBpbmZpbml0ZSBsaW5lYXI7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiBkb2RnZXJibHVlOwogICAgdG9wOiA1MCU7CiAgICBtYXJnaW4tdG9wOiAtMTVweDsKICAgIHotaW5kZXg6IDI7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94IGRpdi5qY29uZmlybS1jbG9zZUljb24gewogICAgaGVpZ2h0OiAyMHB4OwogICAgd2lkdGg6IDIwcHg7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDEwcHg7CiAgICByaWdodDogMTBweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG9wYWNpdHk6IC42OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC1zaXplOiAyN3B4ICFpbXBvcnRhbnQ7CiAgICBsaW5lLWhlaWdodDogMTRweCAhaW1wb3J0YW50OwogICAgZGlzcGxheTogbm9uZTsKICAgIHotaW5kZXg6IDE7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94IGRpdi5qY29uZmlybS1jbG9zZUljb246ZW1wdHkgewogICAgZGlzcGxheTogbm9uZTsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3ggZGl2Lmpjb25maXJtLWNsb3NlSWNvbiAuZmEgewogICAgZm9udC1zaXplOiAxNnB4Owp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveCBkaXYuamNvbmZpcm0tY2xvc2VJY29uIC5nbHlwaGljb24gewogICAgZm9udC1zaXplOiAxNnB4Owp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveCBkaXYuamNvbmZpcm0tY2xvc2VJY29uIC56bWRpIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3ggZGl2Lmpjb25maXJtLWNsb3NlSWNvbjpob3ZlciB7CiAgICBvcGFjaXR5OiAxOwp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveCBkaXYuamNvbmZpcm0tdGl0bGUtYyB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZvbnQtc2l6ZTogMjJweDsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIHBhZGRpbmctYm90dG9tOiAxNXB4Owp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveCBkaXYuamNvbmZpcm0tdGl0bGUtYy5qY29uZmlybS1oYW5kIHsKICAgIGN1cnNvcjogbW92ZTsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3ggZGl2Lmpjb25maXJtLXRpdGxlLWMgLmpjb25maXJtLWljb24tYyB7CiAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveCBkaXYuamNvbmZpcm0tdGl0bGUtYyAuamNvbmZpcm0taWNvbi1jIGkgewogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3ggZGl2Lmpjb25maXJtLXRpdGxlLWMgLmpjb25maXJtLWljb24tYzplbXB0eSB7CiAgICBkaXNwbGF5OiBub25lOwp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveCBkaXYuamNvbmZpcm0tdGl0bGUtYyAuamNvbmZpcm0tdGl0bGUgewogICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3ggZGl2Lmpjb25maXJtLXRpdGxlLWMgLmpjb25maXJtLXRpdGxlOmVtcHR5IHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94IGRpdi5qY29uZmlybS1jb250ZW50LXBhbmUgewogICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgIGhlaWdodDogYXV0bzsKICAgIC13ZWJraXQtdHJhbnNpdGlvbjogaGVpZ2h0IDAuNHMgZWFzZS1pbjsKICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjRzIGVhc2UtaW47CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB3aWR0aDogMTAwJTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgIG92ZXJmbG93LXk6IGF1dG87Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94IGRpdi5qY29uZmlybS1jb250ZW50LXBhbmUubm8tc2Nyb2xsIHsKICAgIG92ZXJmbG93LXk6IGhpZGRlbjsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3ggZGl2Lmpjb25maXJtLWNvbnRlbnQtcGFuZTo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgd2lkdGg6IDNweDsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3ggZGl2Lmpjb25maXJtLWNvbnRlbnQtcGFuZTo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjEpOwp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveCBkaXYuamNvbmZpcm0tY29udGVudC1wYW5lOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiAjNjY2OwogICAgYm9yZGVyLXJhZGl1czogM3B4Owp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveCBkaXYuamNvbmZpcm0tY29udGVudC1wYW5lIC5qY29uZmlybS1jb250ZW50IHsKICAgIG92ZXJmbG93OiBhdXRvOwp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveCBkaXYuamNvbmZpcm0tY29udGVudC1wYW5lIC5qY29uZmlybS1jb250ZW50IGltZyB7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IGF1dG87Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94IGRpdi5qY29uZmlybS1jb250ZW50LXBhbmUgLmpjb25maXJtLWNvbnRlbnQ6ZW1wdHkgewogICAgZGlzcGxheTogbm9uZTsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3ggLmpjb25maXJtLWJ1dHRvbnMgewogICAgcGFkZGluZy1ib3R0b206IDExcHg7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94IC5qY29uZmlybS1idXR0b25zID4gYnV0dG9uIHsKICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICBtYXJnaW4tcmlnaHQ6IDJweDsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3ggLmpjb25maXJtLWJ1dHRvbnMgYnV0dG9uIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgZm9udC1zaXplOiAxNHB4OwogICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAtbXMtdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247CiAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBtaW4taGVpZ2h0OiAxZW07CiAgICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMC4xcyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDAuMXMgZWFzZSwgY29sb3IgMC4xcyBlYXNlLCBiYWNrZ3JvdW5kIDAuMXMgZWFzZSwgLXdlYmtpdC1ib3gtc2hhZG93IDAuMXMgZWFzZTsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xcyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDAuMXMgZWFzZSwgY29sb3IgMC4xcyBlYXNlLCBiYWNrZ3JvdW5kIDAuMXMgZWFzZSwgLXdlYmtpdC1ib3gtc2hhZG93IDAuMXMgZWFzZTsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xcyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDAuMXMgZWFzZSwgY29sb3IgMC4xcyBlYXNlLCBib3gtc2hhZG93IDAuMXMgZWFzZSwgYmFja2dyb3VuZCAwLjFzIGVhc2U7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMXMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAwLjFzIGVhc2UsIGNvbG9yIDAuMXMgZWFzZSwgYm94LXNoYWRvdyAwLjFzIGVhc2UsIGJhY2tncm91bmQgMC4xcyBlYXNlLCAtd2Via2l0LWJveC1zaGFkb3cgMC4xcyBlYXNlOwogICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94IC5qY29uZmlybS1idXR0b25zIGJ1dHRvbi5idG4tYmx1ZSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzQ5OGRiOwogICAgY29sb3I6ICNGRkY7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYmFja2dyb3VuZCAuMnM7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC4yczsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3ggLmpjb25maXJtLWJ1dHRvbnMgYnV0dG9uLmJ0bi1ibHVlOmhvdmVyIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICMyOTgwYjk7CiAgICBjb2xvcjogI0ZGRjsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3ggLmpjb25maXJtLWJ1dHRvbnMgYnV0dG9uLmJ0bi1ncmVlbiB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmVjYzcxOwogICAgY29sb3I6ICNGRkY7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYmFja2dyb3VuZCAuMnM7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC4yczsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3ggLmpjb25maXJtLWJ1dHRvbnMgYnV0dG9uLmJ0bi1ncmVlbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjdhZTYwOwogICAgY29sb3I6ICNGRkY7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94IC5qY29uZmlybS1idXR0b25zIGJ1dHRvbi5idG4tcmVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNlNzRjM2M7CiAgICBjb2xvcjogI0ZGRjsKICAgIHRleHQtc2hhZG93OiBub25lOwogICAgLXdlYmtpdC10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC4yczsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgLjJzOwp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveCAuamNvbmZpcm0tYnV0dG9ucyBidXR0b24uYnRuLXJlZDpob3ZlciB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzAzOTJiOwogICAgY29sb3I6ICNGRkY7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94IC5qY29uZmlybS1idXR0b25zIGJ1dHRvbi5idG4tb3JhbmdlIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmMWM0MGY7CiAgICBjb2xvcjogI0ZGRjsKICAgIHRleHQtc2hhZG93OiBub25lOwogICAgLXdlYmtpdC10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC4yczsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgLjJzOwp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveCAuamNvbmZpcm0tYnV0dG9ucyBidXR0b24uYnRuLW9yYW5nZTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjM5YzEyOwogICAgY29sb3I6ICNGRkY7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94IC5qY29uZmlybS1idXR0b25zIGJ1dHRvbi5idG4tZGVmYXVsdCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNmMGYxOwogICAgY29sb3I6ICMwMDA7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYmFja2dyb3VuZCAuMnM7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC4yczsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3ggLmpjb25maXJtLWJ1dHRvbnMgYnV0dG9uLmJ0bi1kZWZhdWx0OmhvdmVyIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNiZGMzYzc7CiAgICBjb2xvcjogIzAwMDsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3ggLmpjb25maXJtLWJ1dHRvbnMgYnV0dG9uLmJ0bi1wdXJwbGUgewogICAgYmFja2dyb3VuZC1jb2xvcjogIzliNTliNjsKICAgIGNvbG9yOiAjRkZGOwogICAgdGV4dC1zaGFkb3c6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQgLjJzOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAuMnM7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94IC5qY29uZmlybS1idXR0b25zIGJ1dHRvbi5idG4tcHVycGxlOmhvdmVyIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICM4ZTQ0YWQ7CiAgICBjb2xvcjogI0ZGRjsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3ggLmpjb25maXJtLWJ1dHRvbnMgYnV0dG9uLmJ0bi1kYXJrIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICMzNDQ5NWU7CiAgICBjb2xvcjogI0ZGRjsKICAgIHRleHQtc2hhZG93OiBub25lOwogICAgLXdlYmtpdC10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC4yczsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgLjJzOwp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveCAuamNvbmZpcm0tYnV0dG9ucyBidXR0b24uYnRuLWRhcms6aG92ZXIgewogICAgYmFja2dyb3VuZC1jb2xvcjogIzJjM2U1MDsKICAgIGNvbG9yOiAjRkZGOwp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveC5qY29uZmlybS10eXBlLXJlZCAuamNvbmZpcm0tdGl0bGUtYyAuamNvbmZpcm0taWNvbi1jIHsKICAgIGNvbG9yOiAjZTc0YzNjICFpbXBvcnRhbnQ7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94Lmpjb25maXJtLXR5cGUtYmx1ZSAuamNvbmZpcm0tdGl0bGUtYyAuamNvbmZpcm0taWNvbi1jIHsKICAgIGNvbG9yOiAjMzQ5OGRiICFpbXBvcnRhbnQ7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94Lmpjb25maXJtLXR5cGUtZ3JlZW4gLmpjb25maXJtLXRpdGxlLWMgLmpjb25maXJtLWljb24tYyB7CiAgICBjb2xvcjogIzJlY2M3MSAhaW1wb3J0YW50Owp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveC5qY29uZmlybS10eXBlLXB1cnBsZSAuamNvbmZpcm0tdGl0bGUtYyAuamNvbmZpcm0taWNvbi1jIHsKICAgIGNvbG9yOiAjOWI1OWI2ICFpbXBvcnRhbnQ7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94Lmpjb25maXJtLXR5cGUtb3JhbmdlIC5qY29uZmlybS10aXRsZS1jIC5qY29uZmlybS1pY29uLWMgewogICAgY29sb3I6ICNmMWM0MGYgIWltcG9ydGFudDsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3guamNvbmZpcm0tdHlwZS1kYXJrIC5qY29uZmlybS10aXRsZS1jIC5qY29uZmlybS1pY29uLWMgewogICAgY29sb3I6ICMzNDQ5NWUgIWltcG9ydGFudDsKfQoKLmpjb25maXJtIC5qY29uZmlybS1jbGVhciB7CiAgICBjbGVhcjogYm90aDsKfQoKLmpjb25maXJtLmpjb25maXJtLXJ0bCB7CiAgICBkaXJlY3Rpb246IHJ0bDsKfQoKLmpjb25maXJtLmpjb25maXJtLXJ0bCBkaXYuamNvbmZpcm0tY2xvc2VJY29uIHsKICAgIGxlZnQ6IDVweDsKICAgIHJpZ2h0OiBhdXRvOwp9CgouamNvbmZpcm0uamNvbmZpcm0td2hpdGUgLmpjb25maXJtLWJnLAouamNvbmZpcm0uamNvbmZpcm0tbGlnaHQgLmpjb25maXJtLWJnIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7CiAgICBvcGFjaXR5OiAuMjsKfQoKLmpjb25maXJtLmpjb25maXJtLXdoaXRlIC5qY29uZmlybS1ib3gsCi5qY29uZmlybS5qY29uZmlybS1saWdodCAuamNvbmZpcm0tYm94IHsKICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAycHggNnB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7Cn0KCi5qY29uZmlybS5qY29uZmlybS13aGl0ZSAuamNvbmZpcm0tYm94IC5qY29uZmlybS10aXRsZS1jIC5qY29uZmlybS1pY29uLWMsCi5qY29uZmlybS5qY29uZmlybS1saWdodCAuamNvbmZpcm0tYm94IC5qY29uZmlybS10aXRsZS1jIC5qY29uZmlybS1pY29uLWMgewogICAgbWFyZ2luLXJpZ2h0OiA4cHg7CiAgICBtYXJnaW4tbGVmdDogMHB4Owp9CgouamNvbmZpcm0uamNvbmZpcm0td2hpdGUgLmpjb25maXJtLWJveCAuamNvbmZpcm0tYnV0dG9ucywKLmpjb25maXJtLmpjb25maXJtLWxpZ2h0IC5qY29uZmlybS1ib3ggLmpjb25maXJtLWJ1dHRvbnMgewogICAgZmxvYXQ6IHJpZ2h0Owp9CgouamNvbmZpcm0uamNvbmZpcm0td2hpdGUgLmpjb25maXJtLWJveCAuamNvbmZpcm0tYnV0dG9ucyBidXR0b24sCi5qY29uZmlybS5qY29uZmlybS1saWdodCAuamNvbmZpcm0tYm94IC5qY29uZmlybS1idXR0b25zIGJ1dHRvbiB7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKfQoKLmpjb25maXJtLmpjb25maXJtLXdoaXRlIC5qY29uZmlybS1ib3ggLmpjb25maXJtLWJ1dHRvbnMgYnV0dG9uLmJ0bi1kZWZhdWx0LAouamNvbmZpcm0uamNvbmZpcm0tbGlnaHQgLmpjb25maXJtLWJveCAuamNvbmZpcm0tYnV0dG9ucyBidXR0b24uYnRuLWRlZmF1bHQgewogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKICAgIGNvbG9yOiAjMzMzOwp9CgouamNvbmZpcm0uamNvbmZpcm0td2hpdGUgLmpjb25maXJtLWJveCAuamNvbmZpcm0tYnV0dG9ucyBidXR0b24uYnRuLWRlZmF1bHQ6aG92ZXIsCi5qY29uZmlybS5qY29uZmlybS1saWdodCAuamNvbmZpcm0tYm94IC5qY29uZmlybS1idXR0b25zIGJ1dHRvbi5idG4tZGVmYXVsdDpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAjZGRkOwp9CgouamNvbmZpcm0uamNvbmZpcm0td2hpdGUuamNvbmZpcm0tcnRsIC5qY29uZmlybS10aXRsZS1jIC5qY29uZmlybS1pY29uLWMsCi5qY29uZmlybS5qY29uZmlybS1saWdodC5qY29uZmlybS1ydGwgLmpjb25maXJtLXRpdGxlLWMgLmpjb25maXJtLWljb24tYyB7CiAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgbWFyZ2luLXJpZ2h0OiAwcHg7Cn0KCi5qY29uZmlybS5qY29uZmlybS1ibGFjayAuamNvbmZpcm0tYmcsCi5qY29uZmlybS5qY29uZmlybS1kYXJrIC5qY29uZmlybS1iZyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrc2xhdGVncmF5OwogICAgb3BhY2l0eTogLjQ7Cn0KCi5qY29uZmlybS5qY29uZmlybS1ibGFjayAuamNvbmZpcm0tYm94LAouamNvbmZpcm0uamNvbmZpcm0tZGFyayAuamNvbmZpcm0tYm94IHsKICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAycHggNnB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICBiYWNrZ3JvdW5kOiAjNDQ0OwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgY29sb3I6IHdoaXRlOwp9CgouamNvbmZpcm0uamNvbmZpcm0tYmxhY2sgLmpjb25maXJtLWJveCAuamNvbmZpcm0tdGl0bGUtYyAuamNvbmZpcm0taWNvbi1jLAouamNvbmZpcm0uamNvbmZpcm0tZGFyayAuamNvbmZpcm0tYm94IC5qY29uZmlybS10aXRsZS1jIC5qY29uZmlybS1pY29uLWMgewogICAgbWFyZ2luLXJpZ2h0OiA4cHg7CiAgICBtYXJnaW4tbGVmdDogMHB4Owp9CgouamNvbmZpcm0uamNvbmZpcm0tYmxhY2sgLmpjb25maXJtLWJveCAuamNvbmZpcm0tYnV0dG9ucywKLmpjb25maXJtLmpjb25maXJtLWRhcmsgLmpjb25maXJtLWJveCAuamNvbmZpcm0tYnV0dG9ucyB7CiAgICBmbG9hdDogcmlnaHQ7Cn0KCi5qY29uZmlybS5qY29uZmlybS1ibGFjayAuamNvbmZpcm0tYm94IC5qY29uZmlybS1idXR0b25zIGJ1dHRvbiwKLmpjb25maXJtLmpjb25maXJtLWRhcmsgLmpjb25maXJtLWJveCAuamNvbmZpcm0tYnV0dG9ucyBidXR0b24gewogICAgYm9yZGVyOiBub25lOwogICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHRleHQtc2hhZG93OiBub25lOwogICAgLXdlYmtpdC10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC4xczsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgLjFzOwogICAgY29sb3I6IHdoaXRlOwp9CgouamNvbmZpcm0uamNvbmZpcm0tYmxhY2sgLmpjb25maXJtLWJveCAuamNvbmZpcm0tYnV0dG9ucyBidXR0b24uYnRuLWRlZmF1bHQsCi5qY29uZmlybS5qY29uZmlybS1kYXJrIC5qY29uZmlybS1ib3ggLmpjb25maXJtLWJ1dHRvbnMgYnV0dG9uLmJ0bi1kZWZhdWx0IHsKICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICBjb2xvcjogI2ZmZjsKICAgIGJhY2tncm91bmQ6IG5vbmU7Cn0KCi5qY29uZmlybS5qY29uZmlybS1ibGFjayAuamNvbmZpcm0tYm94IC5qY29uZmlybS1idXR0b25zIGJ1dHRvbi5idG4tZGVmYXVsdDpob3ZlciwKLmpjb25maXJtLmpjb25maXJtLWRhcmsgLmpjb25maXJtLWJveCAuamNvbmZpcm0tYnV0dG9ucyBidXR0b24uYnRuLWRlZmF1bHQ6aG92ZXIgewogICAgYmFja2dyb3VuZDogIzY2NjsKfQoKLmpjb25maXJtLmpjb25maXJtLWJsYWNrLmpjb25maXJtLXJ0bCAuamNvbmZpcm0tdGl0bGUtYyAuamNvbmZpcm0taWNvbi1jLAouamNvbmZpcm0uamNvbmZpcm0tZGFyay5qY29uZmlybS1ydGwgLmpjb25maXJtLXRpdGxlLWMgLmpjb25maXJtLWljb24tYyB7CiAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgbWFyZ2luLXJpZ2h0OiAwcHg7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94LmhpbGlnaHQuamNvbmZpcm0taGlsaWdodC1zaGFrZSB7CiAgICAtd2Via2l0LWFuaW1hdGlvbjogc2hha2UgMC44MnMgY3ViaWMtYmV6aWVyKDAuMzYsIDAuMDcsIDAuMTksIDAuOTcpIGJvdGg7CiAgICBhbmltYXRpb246IHNoYWtlIDAuODJzIGN1YmljLWJlemllcigwLjM2LCAwLjA3LCAwLjE5LCAwLjk3KSBib3RoOwogICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3guaGlsaWdodC5qY29uZmlybS1oaWxpZ2h0LWdsb3cgewogICAgLXdlYmtpdC1hbmltYXRpb246IGdsb3cgMC44MnMgY3ViaWMtYmV6aWVyKDAuMzYsIDAuMDcsIDAuMTksIDAuOTcpIGJvdGg7CiAgICBhbmltYXRpb246IGdsb3cgMC44MnMgY3ViaWMtYmV6aWVyKDAuMzYsIDAuMDcsIDAuMTksIDAuOTcpIGJvdGg7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOwp9CgpALXdlYmtpdC1rZXlmcmFtZXMgc2hha2UgewogICAgMTAlLAogICAgOTAlIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTJweCwgMCwgMCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtMnB4LCAwLCAwKTsKICAgIH0KICAgIDIwJSwKICAgIDgwJSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDRweCwgMCwgMCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg0cHgsIDAsIDApOwogICAgfQogICAgMzAlLAogICAgNTAlLAogICAgNzAlIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLThweCwgMCwgMCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtOHB4LCAwLCAwKTsKICAgIH0KICAgIDQwJSwKICAgIDYwJSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDhweCwgMCwgMCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg4cHgsIDAsIDApOwogICAgfQp9CgpAa2V5ZnJhbWVzIHNoYWtlIHsKICAgIDEwJSwKICAgIDkwJSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0ycHgsIDAsIDApOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTJweCwgMCwgMCk7CiAgICB9CiAgICAyMCUsCiAgICA4MCUgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg0cHgsIDAsIDApOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoNHB4LCAwLCAwKTsKICAgIH0KICAgIDMwJSwKICAgIDUwJSwKICAgIDcwJSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC04cHgsIDAsIDApOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLThweCwgMCwgMCk7CiAgICB9CiAgICA0MCUsCiAgICA2MCUgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg4cHgsIDAsIDApOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoOHB4LCAwLCAwKTsKICAgIH0KfQoKQC13ZWJraXQta2V5ZnJhbWVzIGdsb3cgewogICAgMCUsCiAgICAxMDAlIHsKICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCAwcHggcmVkOwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwcHggcmVkOwogICAgfQogICAgNTAlIHsKICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCAzMHB4IHJlZDsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMzBweCByZWQ7CiAgICB9Cn0KCkBrZXlmcmFtZXMgZ2xvdyB7CiAgICAwJSwKICAgIDEwMCUgewogICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDBweCByZWQ7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDBweCByZWQ7CiAgICB9CiAgICA1MCUgewogICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDMwcHggcmVkOwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAzMHB4IHJlZDsKICAgIH0KfQoKLypUcmFuc2l0aW9uIHJ1bGVzKi8KLmpjb25maXJtIHsKICAgIC13ZWJraXQtcGVyc3BlY3RpdmU6IDQwMHB4OwogICAgcGVyc3BlY3RpdmU6IDQwMHB4Owp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveCB7CiAgICBvcGFjaXR5OiAxOwogICAgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiBhbGw7CiAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiBhbGw7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94Lmpjb25maXJtLWFuaW1hdGlvbi10b3AsCi5qY29uZmlybSAuamNvbmZpcm0tYm94Lmpjb25maXJtLWFuaW1hdGlvbi1sZWZ0LAouamNvbmZpcm0gLmpjb25maXJtLWJveC5qY29uZmlybS1hbmltYXRpb24tcmlnaHQsCi5qY29uZmlybSAuamNvbmZpcm0tYm94Lmpjb25maXJtLWFuaW1hdGlvbi1ib3R0b20sCi5qY29uZmlybSAuamNvbmZpcm0tYm94Lmpjb25maXJtLWFuaW1hdGlvbi1vcGFjaXR5LAouamNvbmZpcm0gLmpjb25maXJtLWJveC5qY29uZmlybS1hbmltYXRpb24tem9vbSwKLmpjb25maXJtIC5qY29uZmlybS1ib3guamNvbmZpcm0tYW5pbWF0aW9uLXNjYWxlLAouamNvbmZpcm0gLmpjb25maXJtLWJveC5qY29uZmlybS1hbmltYXRpb24tbm9uZSwKLmpjb25maXJtIC5qY29uZmlybS1ib3guamNvbmZpcm0tYW5pbWF0aW9uLXJvdGF0ZSwKLmpjb25maXJtIC5qY29uZmlybS1ib3guamNvbmZpcm0tYW5pbWF0aW9uLXJvdGF0ZXgsCi5qY29uZmlybSAuamNvbmZpcm0tYm94Lmpjb25maXJtLWFuaW1hdGlvbi1yb3RhdGV5LAouamNvbmZpcm0gLmpjb25maXJtLWJveC5qY29uZmlybS1hbmltYXRpb24tc2NhbGV5LAouamNvbmZpcm0gLmpjb25maXJtLWJveC5qY29uZmlybS1hbmltYXRpb24tc2NhbGV4IHsKICAgIG9wYWNpdHk6IDA7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94Lmpjb25maXJtLWFuaW1hdGlvbi1yb3RhdGUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94Lmpjb25maXJtLWFuaW1hdGlvbi1yb3RhdGV4IHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGVYKDkwZGVnKTsKICAgIHRyYW5zZm9ybTogcm90YXRlWCg5MGRlZyk7CiAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjsKICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3guamNvbmZpcm0tYW5pbWF0aW9uLXJvdGF0ZXhyIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGVYKC05MGRlZyk7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoLTkwZGVnKTsKICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyOwogICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyOwp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveC5qY29uZmlybS1hbmltYXRpb24tcm90YXRleSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRleSg5MGRlZyk7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZXkoOTBkZWcpOwogICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7CiAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94Lmpjb25maXJtLWFuaW1hdGlvbi1yb3RhdGV5ciB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRleSgtOTBkZWcpOwogICAgdHJhbnNmb3JtOiByb3RhdGV5KC05MGRlZyk7CiAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjsKICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3guamNvbmZpcm0tYW5pbWF0aW9uLXNjYWxleSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGV5KDEuNSk7CiAgICB0cmFuc2Zvcm06IHNjYWxleSgxLjUpOwogICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7CiAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94Lmpjb25maXJtLWFuaW1hdGlvbi1zY2FsZXggewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxleCgxLjUpOwogICAgdHJhbnNmb3JtOiBzY2FsZXgoMS41KTsKICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyOwogICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyOwp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveC5qY29uZmlybS1hbmltYXRpb24tdG9wIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAtMTAwcHgpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAtMTAwcHgpOwp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveC5qY29uZmlybS1hbmltYXRpb24tbGVmdCB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC0xMDBweCwgMHB4KTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0xMDBweCwgMHB4KTsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3guamNvbmZpcm0tYW5pbWF0aW9uLXJpZ2h0IHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTAwcHgsIDBweCk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDBweCwgMHB4KTsKfQoKLmpjb25maXJtIC5qY29uZmlybS1ib3guamNvbmZpcm0tYW5pbWF0aW9uLWJvdHRvbSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgMTAwcHgpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAxMDBweCk7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94Lmpjb25maXJtLWFuaW1hdGlvbi16b29tIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLjIpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpOwp9CgouamNvbmZpcm0gLmpjb25maXJtLWJveC5qY29uZmlybS1hbmltYXRpb24tc2NhbGUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuNSk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNSk7Cn0KCi5qY29uZmlybSAuamNvbmZpcm0tYm94Lmpjb25maXJtLWFuaW1hdGlvbi1ub25lIHsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKfQoKLmpjb25maXJtLmpjb25maXJtLXN1cGVydmFuIC5qY29uZmlybS1iZyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDU0LCA3MCwgOTMsIDAuOTUpOwp9CgouamNvbmZpcm0uamNvbmZpcm0tc3VwZXJ2YW4gLmpjb25maXJtLWJveCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoKLmpjb25maXJtLmpjb25maXJtLXN1cGVydmFuIC5qY29uZmlybS1ib3guamNvbmZpcm0tdHlwZS1ibHVlIHsKICAgIGJvcmRlcjogbm9uZTsKfQoKLmpjb25maXJtLmpjb25maXJtLXN1cGVydmFuIC5qY29uZmlybS1ib3guamNvbmZpcm0tdHlwZS1ncmVlbiB7CiAgICBib3JkZXI6IG5vbmU7Cn0KCi5qY29uZmlybS5qY29uZmlybS1zdXBlcnZhbiAuamNvbmZpcm0tYm94Lmpjb25maXJtLXR5cGUtcmVkIHsKICAgIGJvcmRlcjogbm9uZTsKfQoKLmpjb25maXJtLmpjb25maXJtLXN1cGVydmFuIC5qY29uZmlybS1ib3guamNvbmZpcm0tdHlwZS1vcmFuZ2UgewogICAgYm9yZGVyOiBub25lOwp9CgouamNvbmZpcm0uamNvbmZpcm0tc3VwZXJ2YW4gLmpjb25maXJtLWJveC5qY29uZmlybS10eXBlLXB1cnBsZSB7CiAgICBib3JkZXI6IG5vbmU7Cn0KCi5qY29uZmlybS5qY29uZmlybS1zdXBlcnZhbiAuamNvbmZpcm0tYm94Lmpjb25maXJtLXR5cGUtZGFyayB7CiAgICBib3JkZXI6IG5vbmU7Cn0KCi5qY29uZmlybS5qY29uZmlybS1zdXBlcnZhbiAuamNvbmZpcm0tYm94IGRpdi5qY29uZmlybS1jbG9zZUljb24gewogICAgY29sb3I6IHdoaXRlOwp9CgouamNvbmZpcm0uamNvbmZpcm0tc3VwZXJ2YW4gLmpjb25maXJtLWJveCBkaXYuamNvbmZpcm0tdGl0bGUtYyB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBjb2xvcjogd2hpdGU7CiAgICBmb250LXNpemU6IDI4cHg7CiAgICBmb250LXdlaWdodDogbm9ybWFsOwp9CgouamNvbmZpcm0uamNvbmZpcm0tc3VwZXJ2YW4gLmpjb25maXJtLWJveCBkaXYuamNvbmZpcm0tdGl0bGUtYyA+ICogewogICAgcGFkZGluZy1ib3R0b206IDI1cHg7Cn0KCi5qY29uZmlybS5qY29uZmlybS1zdXBlcnZhbiAuamNvbmZpcm0tYm94IGRpdi5qY29uZmlybS10aXRsZS1jIC5qY29uZmlybS1pY29uLWMgewogICAgbWFyZ2luLXJpZ2h0OiA4cHg7CiAgICBtYXJnaW4tbGVmdDogMHB4Owp9CgouamNvbmZpcm0uamNvbmZpcm0tc3VwZXJ2YW4gLmpjb25maXJtLWJveCBkaXYuamNvbmZpcm0tY29udGVudC1wYW5lIHsKICAgIG1hcmdpbi1ib3R0b206IDI1cHg7Cn0KCi5qY29uZmlybS5qY29uZmlybS1zdXBlcnZhbiAuamNvbmZpcm0tYm94IGRpdi5qY29uZmlybS1jb250ZW50IHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGNvbG9yOiB3aGl0ZTsKfQoKLmpjb25maXJtLmpjb25maXJtLXN1cGVydmFuIC5qY29uZmlybS1ib3ggLmpjb25maXJtLWJ1dHRvbnMgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgouamNvbmZpcm0uamNvbmZpcm0tc3VwZXJ2YW4gLmpjb25maXJtLWJveCAuamNvbmZpcm0tYnV0dG9ucyBidXR0b24gewogICAgZm9udC1zaXplOiAxNnB4OwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgYmFja2dyb3VuZDogIzMwM2Y1MzsKICAgIHRleHQtc2hhZG93OiBub25lOwogICAgYm9yZGVyOiBub25lOwogICAgY29sb3I6IHdoaXRlOwogICAgcGFkZGluZzogMTBweDsKICAgIG1pbi13aWR0aDogMTAwcHg7Cn0KCi5qY29uZmlybS5qY29uZmlybS1zdXBlcnZhbi5qY29uZmlybS1ydGwgLmpjb25maXJtLWJveCBkaXYuamNvbmZpcm0tdGl0bGUtYyAuamNvbmZpcm0taWNvbi1jIHsKICAgIG1hcmdpbi1sZWZ0OiA4cHg7CiAgICBtYXJnaW4tcmlnaHQ6IDBweDsKfQoKLmpjb25maXJtLmpjb25maXJtLW1hdGVyaWFsIC5qY29uZmlybS1iZyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNjcpOwp9CgouamNvbmZpcm0uamNvbmZpcm0tbWF0ZXJpYWwgLmpjb25maXJtLWJveCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwIDEzcHggMTlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMCA1cHggMjRweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKTsKICAgIGJveC1zaGFkb3c6IDAgN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMCAxM3B4IDE5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgNXB4IDI0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7CiAgICBwYWRkaW5nOiAzMHB4IDI1cHggMTBweCAyNXB4Owp9CgouamNvbmZpcm0uamNvbmZpcm0tbWF0ZXJpYWwgLmpjb25maXJtLWJveCAuamNvbmZpcm0tdGl0bGUtYyAuamNvbmZpcm0taWNvbi1jIHsKICAgIG1hcmdpbi1yaWdodDogOHB4OwogICAgbWFyZ2luLWxlZnQ6IDBweDsKfQoKLmpjb25maXJtLmpjb25maXJtLW1hdGVyaWFsIC5qY29uZmlybS1ib3ggZGl2Lmpjb25maXJtLWNsb3NlSWNvbiB7CiAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjg3KTsKfQoKLmpjb25maXJtLmpjb25maXJtLW1hdGVyaWFsIC5qY29uZmlybS1ib3ggZGl2Lmpjb25maXJtLXRpdGxlLWMgewogICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44Nyk7CiAgICBmb250LXNpemU6IDIycHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmpjb25maXJtLmpjb25maXJtLW1hdGVyaWFsIC5qY29uZmlybS1ib3ggZGl2Lmpjb25maXJtLWNvbnRlbnQgewogICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44Nyk7Cn0KCi5qY29uZmlybS5qY29uZmlybS1tYXRlcmlhbCAuamNvbmZpcm0tYm94IC5qY29uZmlybS1idXR0b25zIHsKICAgIHRleHQtYWxpZ246IHJpZ2h0Owp9CgouamNvbmZpcm0uamNvbmZpcm0tbWF0ZXJpYWwgLmpjb25maXJtLWJveCAuamNvbmZpcm0tYnV0dG9ucyBidXR0b24gewogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7Cn0KCi5qY29uZmlybS5qY29uZmlybS1tYXRlcmlhbC5qY29uZmlybS1ydGwgLmpjb25maXJtLXRpdGxlLWMgLmpjb25maXJtLWljb24tYyB7CiAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgbWFyZ2luLXJpZ2h0OiAwcHg7Cn0KCi5qY29uZmlybS5qY29uZmlybS1ib290c3RyYXAgLmpjb25maXJtLWJnIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yMSk7Cn0KCi5qY29uZmlybS5qY29uZmlybS1ib290c3RyYXAgLmpjb25maXJtLWJveCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAzcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICBib3gtc2hhZG93OiAwIDNweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgIGJvcmRlcjogc29saWQgMXB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgIHBhZGRpbmc6IDE1cHggMCAwOwp9CgouamNvbmZpcm0uamNvbmZpcm0tYm9vdHN0cmFwIC5qY29uZmlybS1ib3ggLmpjb25maXJtLXRpdGxlLWMgLmpjb25maXJtLWljb24tYyB7CiAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgIG1hcmdpbi1sZWZ0OiAwcHg7Cn0KCi5qY29uZmlybS5qY29uZmlybS1ib290c3RyYXAgLmpjb25maXJtLWJveCBkaXYuamNvbmZpcm0tY2xvc2VJY29uIHsKICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuODcpOwp9CgouamNvbmZpcm0uamNvbmZpcm0tYm9vdHN0cmFwIC5qY29uZmlybS1ib3ggZGl2Lmpjb25maXJtLXRpdGxlLWMgewogICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44Nyk7CiAgICBmb250LXNpemU6IDIycHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHBhZGRpbmctbGVmdDogMTVweDsKICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7Cn0KCi5qY29uZmlybS5qY29uZmlybS1ib290c3RyYXAgLmpjb25maXJtLWJveCBkaXYuamNvbmZpcm0tY29udGVudCB7CiAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjg3KTsKICAgIHBhZGRpbmc6IDBweCAxNXB4Owp9CgouamNvbmZpcm0uamNvbmZpcm0tYm9vdHN0cmFwIC5qY29uZmlybS1ib3ggLmpjb25maXJtLWJ1dHRvbnMgewogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBwYWRkaW5nOiAxMHB4OwogICAgbWFyZ2luOiAtNXB4IDAgMHB4OwogICAgYm9yZGVyLXRvcDogc29saWQgMXB4ICNkZGQ7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYm9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7Cn0KCi5qY29uZmlybS5qY29uZmlybS1ib290c3RyYXAgLmpjb25maXJtLWJveCAuamNvbmZpcm0tYnV0dG9ucyBidXR0b24gewogICAgZm9udC13ZWlnaHQ6IDUwMDsKfQoKLmpjb25maXJtLmpjb25maXJtLWJvb3RzdHJhcC5qY29uZmlybS1ydGwgLmpjb25maXJtLXRpdGxlLWMgLmpjb25maXJtLWljb24tYyB7CiAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgbWFyZ2luLXJpZ2h0OiAwcHg7Cn0KCi5qY29uZmlybS5qY29uZmlybS1tb2Rlcm4gLmpjb25maXJtLWJnIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHNsYXRlZ3JheTsKICAgIG9wYWNpdHk6IC42Owp9CgouamNvbmZpcm0uamNvbmZpcm0tbW9kZXJuIC5qY29uZmlybS1ib3ggewogICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMCAxM3B4IDE5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgNXB4IDI0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7CiAgICBib3gtc2hhZG93OiAwIDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMTNweCAxOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDVweCAyNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpOwogICAgcGFkZGluZzogMzBweCAzMHB4IDE1cHg7Cn0KCi5qY29uZmlybS5qY29uZmlybS1tb2Rlcm4gLmpjb25maXJtLWJveCBkaXYuamNvbmZpcm0tY2xvc2VJY29uIHsKICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuODcpOwogICAgdG9wOiAxNXB4OwogICAgcmlnaHQ6IDE1cHg7Cn0KCi5qY29uZmlybS5qY29uZmlybS1tb2Rlcm4gLmpjb25maXJtLWJveCBkaXYuamNvbmZpcm0tdGl0bGUtYyB7CiAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjg3KTsKICAgIGZvbnQtc2l6ZTogMjRweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWFyZ2luLWJvdHRvbTogMTBweDsKfQoKLmpjb25maXJtLmpjb25maXJtLW1vZGVybiAuamNvbmZpcm0tYm94IGRpdi5qY29uZmlybS10aXRsZS1jIC5qY29uZmlybS1pY29uLWMgewogICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAuNXM7CiAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAuNXM7CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjVzOwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC41cywgLXdlYmtpdC10cmFuc2Zvcm0gLjVzOwogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApOwogICAgdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luLXJpZ2h0OiAwcHg7CiAgICBtYXJnaW4tbGVmdDogMHB4OwogICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgIGZvbnQtc2l6ZTogNjlweDsKICAgIGNvbG9yOiAjYWFhOwp9CgouamNvbmZpcm0uamNvbmZpcm0tbW9kZXJuIC5qY29uZmlybS1ib3ggZGl2Lmpjb25maXJtLWNvbnRlbnQgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC1zaXplOiAxNXB4OwogICAgY29sb3I6ICM3Nzc7CiAgICBtYXJnaW4tYm90dG9tOiAyNXB4Owp9CgouamNvbmZpcm0uamNvbmZpcm0tbW9kZXJuIC5qY29uZmlybS1ib3ggLmpjb25maXJtLWJ1dHRvbnMgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgouamNvbmZpcm0uamNvbmZpcm0tbW9kZXJuIC5qY29uZmlybS1ib3ggLmpjb25maXJtLWJ1dHRvbnMgYnV0dG9uIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYmFja2dyb3VuZCAuMXM7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC4xczsKICAgIHBhZGRpbmc6IDEwcHggMjBweDsKfQoKLmpjb25maXJtLmpjb25maXJtLW1vZGVybiAuamNvbmZpcm0tYm94IC5qY29uZmlybS1idXR0b25zIGJ1dHRvbiArIGJ1dHRvbiB7CiAgICBtYXJnaW4tbGVmdDogNHB4Owp9CgouamNvbmZpcm0uamNvbmZpcm0tbW9kZXJuLmpjb25maXJtLW9wZW4gLmpjb25maXJtLWJveCAuamNvbmZpcm0tdGl0bGUtYyAuamNvbmZpcm0taWNvbi1jIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7Cn0K'>
<link id=js_confirm_bundled_css href='data:/text/plain;base64,Ci8qIQogKiAgRm9udCBBd2Vzb21lIDQuNy4wIGJ5IEBkYXZlZ2FuZHkgLSBodHRwOi8vZm9udGF3ZXNvbWUuaW8gLSBAZm9udGF3ZXNvbWUKICogIExpY2Vuc2UgLSBodHRwOi8vZm9udGF3ZXNvbWUuaW8vbGljZW5zZSAoRm9udDogU0lMIE9GTCAxLjEsIENTUzogTUlUIExpY2Vuc2UpCiAqL0Bmb250LWZhY2V7Zm9udC1mYW1pbHk6J0ZvbnRBd2Vzb21lJztzcmM6dXJsKCdmb250cy9mb250YXdlc29tZS13ZWJmb250LmVvdD92PTQuNy4wJyk7c3JjOnVybCgnZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5lb3Q/I2llZml4JnY9NC43LjAnKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksdXJsKCdmb250cy9mb250YXdlc29tZS13ZWJmb250LndvZmYyP3Y9NC43LjAnKSBmb3JtYXQoJ3dvZmYyJyksdXJsKCdmb250cy9mb250YXdlc29tZS13ZWJmb250LndvZmY/dj00LjcuMCcpIGZvcm1hdCgnd29mZicpLHVybCgnZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC50dGY/dj00LjcuMCcpIGZvcm1hdCgndHJ1ZXR5cGUnKSx1cmwoJ2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQuc3ZnP3Y9NC43LjAjZm9udGF3ZXNvbWVyZWd1bGFyJykgZm9ybWF0KCdzdmcnKTtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHlsZTpub3JtYWx9LmZhe2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQ6bm9ybWFsIG5vcm1hbCBub3JtYWwgMTRweC8xIEZvbnRBd2Vzb21lO2ZvbnQtc2l6ZTppbmhlcml0O3RleHQtcmVuZGVyaW5nOmF1dG87LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9LmZhLWxne2ZvbnQtc2l6ZToxLjMzMzMzMzMzZW07bGluZS1oZWlnaHQ6Ljc1ZW07dmVydGljYWwtYWxpZ246LTE1JX0uZmEtMnh7Zm9udC1zaXplOjJlbX0uZmEtM3h7Zm9udC1zaXplOjNlbX0uZmEtNHh7Zm9udC1zaXplOjRlbX0uZmEtNXh7Zm9udC1zaXplOjVlbX0uZmEtZnd7d2lkdGg6MS4yODU3MTQyOWVtO3RleHQtYWxpZ246Y2VudGVyfS5mYS11bHtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tbGVmdDoyLjE0Mjg1NzE0ZW07bGlzdC1zdHlsZS10eXBlOm5vbmV9LmZhLXVsPmxpe3Bvc2l0aW9uOnJlbGF0aXZlfS5mYS1saXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0yLjE0Mjg1NzE0ZW07d2lkdGg6Mi4xNDI4NTcxNGVtO3RvcDouMTQyODU3MTRlbTt0ZXh0LWFsaWduOmNlbnRlcn0uZmEtbGkuZmEtbGd7bGVmdDotMS44NTcxNDI4NmVtfS5mYS1ib3JkZXJ7cGFkZGluZzouMmVtIC4yNWVtIC4xNWVtO2JvcmRlcjpzb2xpZCAuMDhlbSAjZWVlO2JvcmRlci1yYWRpdXM6LjFlbX0uZmEtcHVsbC1sZWZ0e2Zsb2F0OmxlZnR9LmZhLXB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHR9LmZhLmZhLXB1bGwtbGVmdHttYXJnaW4tcmlnaHQ6LjNlbX0uZmEuZmEtcHVsbC1yaWdodHttYXJnaW4tbGVmdDouM2VtfS5wdWxsLXJpZ2h0e2Zsb2F0OnJpZ2h0fS5wdWxsLWxlZnR7ZmxvYXQ6bGVmdH0uZmEucHVsbC1sZWZ0e21hcmdpbi1yaWdodDouM2VtfS5mYS5wdWxsLXJpZ2h0e21hcmdpbi1sZWZ0Oi4zZW19LmZhLXNwaW57LXdlYmtpdC1hbmltYXRpb246ZmEtc3BpbiAycyBpbmZpbml0ZSBsaW5lYXI7YW5pbWF0aW9uOmZhLXNwaW4gMnMgaW5maW5pdGUgbGluZWFyfS5mYS1wdWxzZXstd2Via2l0LWFuaW1hdGlvbjpmYS1zcGluIDFzIGluZmluaXRlIHN0ZXBzKDgpO2FuaW1hdGlvbjpmYS1zcGluIDFzIGluZmluaXRlIHN0ZXBzKDgpfUAtd2Via2l0LWtleWZyYW1lcyBmYS1zcGluezAley13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDM1OWRlZyk7dHJhbnNmb3JtOnJvdGF0ZSgzNTlkZWcpfX1Aa2V5ZnJhbWVzIGZhLXNwaW57MCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDBkZWcpO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMzU5ZGVnKTt0cmFuc2Zvcm06cm90YXRlKDM1OWRlZyl9fS5mYS1yb3RhdGUtOTB7LW1zLWZpbHRlcjoicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJhc2ljSW1hZ2Uocm90YXRpb249MSkiOy13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyk7LW1zLXRyYW5zZm9ybTpyb3RhdGUoOTBkZWcpO3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfS5mYS1yb3RhdGUtMTgwey1tcy1maWx0ZXI6InByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5CYXNpY0ltYWdlKHJvdGF0aW9uPTIpIjstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKTstbXMtdHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpO3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0uZmEtcm90YXRlLTI3MHstbXMtZmlsdGVyOiJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0zKSI7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDI3MGRlZyk7LW1zLXRyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9LmZhLWZsaXAtaG9yaXpvbnRhbHstbXMtZmlsdGVyOiJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0wLCBtaXJyb3I9MSkiOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC0xLCAxKTstbXMtdHJhbnNmb3JtOnNjYWxlKC0xLCAxKTt0cmFuc2Zvcm06c2NhbGUoLTEsIDEpfS5mYS1mbGlwLXZlcnRpY2Fsey1tcy1maWx0ZXI6InByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5CYXNpY0ltYWdlKHJvdGF0aW9uPTIsIG1pcnJvcj0xKSI7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMSwgLTEpOy1tcy10cmFuc2Zvcm06c2NhbGUoMSwgLTEpO3RyYW5zZm9ybTpzY2FsZSgxLCAtMSl9OnJvb3QgLmZhLXJvdGF0ZS05MCw6cm9vdCAuZmEtcm90YXRlLTE4MCw6cm9vdCAuZmEtcm90YXRlLTI3MCw6cm9vdCAuZmEtZmxpcC1ob3Jpem9udGFsLDpyb290IC5mYS1mbGlwLXZlcnRpY2Fse2ZpbHRlcjpub25lfS5mYS1zdGFja3twb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoyZW07aGVpZ2h0OjJlbTtsaW5lLWhlaWdodDoyZW07dmVydGljYWwtYWxpZ246bWlkZGxlfS5mYS1zdGFjay0xeCwuZmEtc3RhY2stMnh7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXJ9LmZhLXN0YWNrLTF4e2xpbmUtaGVpZ2h0OmluaGVyaXR9LmZhLXN0YWNrLTJ4e2ZvbnQtc2l6ZToyZW19LmZhLWludmVyc2V7Y29sb3I6I2ZmZn0uZmEtZ2xhc3M6YmVmb3Jle2NvbnRlbnQ6IlxmMDAwIn0uZmEtbXVzaWM6YmVmb3Jle2NvbnRlbnQ6IlxmMDAxIn0uZmEtc2VhcmNoOmJlZm9yZXtjb250ZW50OiJcZjAwMiJ9LmZhLWVudmVsb3BlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMDAzIn0uZmEtaGVhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDA0In0uZmEtc3RhcjpiZWZvcmV7Y29udGVudDoiXGYwMDUifS5mYS1zdGFyLW86YmVmb3Jle2NvbnRlbnQ6IlxmMDA2In0uZmEtdXNlcjpiZWZvcmV7Y29udGVudDoiXGYwMDcifS5mYS1maWxtOmJlZm9yZXtjb250ZW50OiJcZjAwOCJ9LmZhLXRoLWxhcmdlOmJlZm9yZXtjb250ZW50OiJcZjAwOSJ9LmZhLXRoOmJlZm9yZXtjb250ZW50OiJcZjAwYSJ9LmZhLXRoLWxpc3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMDBiIn0uZmEtY2hlY2s6YmVmb3Jle2NvbnRlbnQ6IlxmMDBjIn0uZmEtcmVtb3ZlOmJlZm9yZSwuZmEtY2xvc2U6YmVmb3JlLC5mYS10aW1lczpiZWZvcmV7Y29udGVudDoiXGYwMGQifS5mYS1zZWFyY2gtcGx1czpiZWZvcmV7Y29udGVudDoiXGYwMGUifS5mYS1zZWFyY2gtbWludXM6YmVmb3Jle2NvbnRlbnQ6IlxmMDEwIn0uZmEtcG93ZXItb2ZmOmJlZm9yZXtjb250ZW50OiJcZjAxMSJ9LmZhLXNpZ25hbDpiZWZvcmV7Y29udGVudDoiXGYwMTIifS5mYS1nZWFyOmJlZm9yZSwuZmEtY29nOmJlZm9yZXtjb250ZW50OiJcZjAxMyJ9LmZhLXRyYXNoLW86YmVmb3Jle2NvbnRlbnQ6IlxmMDE0In0uZmEtaG9tZTpiZWZvcmV7Y29udGVudDoiXGYwMTUifS5mYS1maWxlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMDE2In0uZmEtY2xvY2stbzpiZWZvcmV7Y29udGVudDoiXGYwMTcifS5mYS1yb2FkOmJlZm9yZXtjb250ZW50OiJcZjAxOCJ9LmZhLWRvd25sb2FkOmJlZm9yZXtjb250ZW50OiJcZjAxOSJ9LmZhLWFycm93LWNpcmNsZS1vLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMDFhIn0uZmEtYXJyb3ctY2lyY2xlLW8tdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMDFiIn0uZmEtaW5ib3g6YmVmb3Jle2NvbnRlbnQ6IlxmMDFjIn0uZmEtcGxheS1jaXJjbGUtbzpiZWZvcmV7Y29udGVudDoiXGYwMWQifS5mYS1yb3RhdGUtcmlnaHQ6YmVmb3JlLC5mYS1yZXBlYXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDFlIn0uZmEtcmVmcmVzaDpiZWZvcmV7Y29udGVudDoiXGYwMjEifS5mYS1saXN0LWFsdDpiZWZvcmV7Y29udGVudDoiXGYwMjIifS5mYS1sb2NrOmJlZm9yZXtjb250ZW50OiJcZjAyMyJ9LmZhLWZsYWc6YmVmb3Jle2NvbnRlbnQ6IlxmMDI0In0uZmEtaGVhZHBob25lczpiZWZvcmV7Y29udGVudDoiXGYwMjUifS5mYS12b2x1bWUtb2ZmOmJlZm9yZXtjb250ZW50OiJcZjAyNiJ9LmZhLXZvbHVtZS1kb3duOmJlZm9yZXtjb250ZW50OiJcZjAyNyJ9LmZhLXZvbHVtZS11cDpiZWZvcmV7Y29udGVudDoiXGYwMjgifS5mYS1xcmNvZGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDI5In0uZmEtYmFyY29kZTpiZWZvcmV7Y29udGVudDoiXGYwMmEifS5mYS10YWc6YmVmb3Jle2NvbnRlbnQ6IlxmMDJiIn0uZmEtdGFnczpiZWZvcmV7Y29udGVudDoiXGYwMmMifS5mYS1ib29rOmJlZm9yZXtjb250ZW50OiJcZjAyZCJ9LmZhLWJvb2ttYXJrOmJlZm9yZXtjb250ZW50OiJcZjAyZSJ9LmZhLXByaW50OmJlZm9yZXtjb250ZW50OiJcZjAyZiJ9LmZhLWNhbWVyYTpiZWZvcmV7Y29udGVudDoiXGYwMzAifS5mYS1mb250OmJlZm9yZXtjb250ZW50OiJcZjAzMSJ9LmZhLWJvbGQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDMyIn0uZmEtaXRhbGljOmJlZm9yZXtjb250ZW50OiJcZjAzMyJ9LmZhLXRleHQtaGVpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjAzNCJ9LmZhLXRleHQtd2lkdGg6YmVmb3Jle2NvbnRlbnQ6IlxmMDM1In0uZmEtYWxpZ24tbGVmdDpiZWZvcmV7Y29udGVudDoiXGYwMzYifS5mYS1hbGlnbi1jZW50ZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMDM3In0uZmEtYWxpZ24tcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDM4In0uZmEtYWxpZ24tanVzdGlmeTpiZWZvcmV7Y29udGVudDoiXGYwMzkifS5mYS1saXN0OmJlZm9yZXtjb250ZW50OiJcZjAzYSJ9LmZhLWRlZGVudDpiZWZvcmUsLmZhLW91dGRlbnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDNiIn0uZmEtaW5kZW50OmJlZm9yZXtjb250ZW50OiJcZjAzYyJ9LmZhLXZpZGVvLWNhbWVyYTpiZWZvcmV7Y29udGVudDoiXGYwM2QifS5mYS1waG90bzpiZWZvcmUsLmZhLWltYWdlOmJlZm9yZSwuZmEtcGljdHVyZS1vOmJlZm9yZXtjb250ZW50OiJcZjAzZSJ9LmZhLXBlbmNpbDpiZWZvcmV7Y29udGVudDoiXGYwNDAifS5mYS1tYXAtbWFya2VyOmJlZm9yZXtjb250ZW50OiJcZjA0MSJ9LmZhLWFkanVzdDpiZWZvcmV7Y29udGVudDoiXGYwNDIifS5mYS10aW50OmJlZm9yZXtjb250ZW50OiJcZjA0MyJ9LmZhLWVkaXQ6YmVmb3JlLC5mYS1wZW5jaWwtc3F1YXJlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMDQ0In0uZmEtc2hhcmUtc3F1YXJlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMDQ1In0uZmEtY2hlY2stc3F1YXJlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMDQ2In0uZmEtYXJyb3dzOmJlZm9yZXtjb250ZW50OiJcZjA0NyJ9LmZhLXN0ZXAtYmFja3dhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDQ4In0uZmEtZmFzdC1iYWNrd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNDkifS5mYS1iYWNrd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNGEifS5mYS1wbGF5OmJlZm9yZXtjb250ZW50OiJcZjA0YiJ9LmZhLXBhdXNlOmJlZm9yZXtjb250ZW50OiJcZjA0YyJ9LmZhLXN0b3A6YmVmb3Jle2NvbnRlbnQ6IlxmMDRkIn0uZmEtZm9yd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNGUifS5mYS1mYXN0LWZvcndhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDUwIn0uZmEtc3RlcC1mb3J3YXJkOmJlZm9yZXtjb250ZW50OiJcZjA1MSJ9LmZhLWVqZWN0OmJlZm9yZXtjb250ZW50OiJcZjA1MiJ9LmZhLWNoZXZyb24tbGVmdDpiZWZvcmV7Y29udGVudDoiXGYwNTMifS5mYS1jaGV2cm9uLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjA1NCJ9LmZhLXBsdXMtY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjA1NSJ9LmZhLW1pbnVzLWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYwNTYifS5mYS10aW1lcy1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDU3In0uZmEtY2hlY2stY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjA1OCJ9LmZhLXF1ZXN0aW9uLWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYwNTkifS5mYS1pbmZvLWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYwNWEifS5mYS1jcm9zc2hhaXJzOmJlZm9yZXtjb250ZW50OiJcZjA1YiJ9LmZhLXRpbWVzLWNpcmNsZS1vOmJlZm9yZXtjb250ZW50OiJcZjA1YyJ9LmZhLWNoZWNrLWNpcmNsZS1vOmJlZm9yZXtjb250ZW50OiJcZjA1ZCJ9LmZhLWJhbjpiZWZvcmV7Y29udGVudDoiXGYwNWUifS5mYS1hcnJvdy1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjA2MCJ9LmZhLWFycm93LXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjA2MSJ9LmZhLWFycm93LXVwOmJlZm9yZXtjb250ZW50OiJcZjA2MiJ9LmZhLWFycm93LWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMDYzIn0uZmEtbWFpbC1mb3J3YXJkOmJlZm9yZSwuZmEtc2hhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMDY0In0uZmEtZXhwYW5kOmJlZm9yZXtjb250ZW50OiJcZjA2NSJ9LmZhLWNvbXByZXNzOmJlZm9yZXtjb250ZW50OiJcZjA2NiJ9LmZhLXBsdXM6YmVmb3Jle2NvbnRlbnQ6IlxmMDY3In0uZmEtbWludXM6YmVmb3Jle2NvbnRlbnQ6IlxmMDY4In0uZmEtYXN0ZXJpc2s6YmVmb3Jle2NvbnRlbnQ6IlxmMDY5In0uZmEtZXhjbGFtYXRpb24tY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjA2YSJ9LmZhLWdpZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDZiIn0uZmEtbGVhZjpiZWZvcmV7Y29udGVudDoiXGYwNmMifS5mYS1maXJlOmJlZm9yZXtjb250ZW50OiJcZjA2ZCJ9LmZhLWV5ZTpiZWZvcmV7Y29udGVudDoiXGYwNmUifS5mYS1leWUtc2xhc2g6YmVmb3Jle2NvbnRlbnQ6IlxmMDcwIn0uZmEtd2FybmluZzpiZWZvcmUsLmZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlOmJlZm9yZXtjb250ZW50OiJcZjA3MSJ9LmZhLXBsYW5lOmJlZm9yZXtjb250ZW50OiJcZjA3MiJ9LmZhLWNhbGVuZGFyOmJlZm9yZXtjb250ZW50OiJcZjA3MyJ9LmZhLXJhbmRvbTpiZWZvcmV7Y29udGVudDoiXGYwNzQifS5mYS1jb21tZW50OmJlZm9yZXtjb250ZW50OiJcZjA3NSJ9LmZhLW1hZ25ldDpiZWZvcmV7Y29udGVudDoiXGYwNzYifS5mYS1jaGV2cm9uLXVwOmJlZm9yZXtjb250ZW50OiJcZjA3NyJ9LmZhLWNoZXZyb24tZG93bjpiZWZvcmV7Y29udGVudDoiXGYwNzgifS5mYS1yZXR3ZWV0OmJlZm9yZXtjb250ZW50OiJcZjA3OSJ9LmZhLXNob3BwaW5nLWNhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDdhIn0uZmEtZm9sZGVyOmJlZm9yZXtjb250ZW50OiJcZjA3YiJ9LmZhLWZvbGRlci1vcGVuOmJlZm9yZXtjb250ZW50OiJcZjA3YyJ9LmZhLWFycm93cy12OmJlZm9yZXtjb250ZW50OiJcZjA3ZCJ9LmZhLWFycm93cy1oOmJlZm9yZXtjb250ZW50OiJcZjA3ZSJ9LmZhLWJhci1jaGFydC1vOmJlZm9yZSwuZmEtYmFyLWNoYXJ0OmJlZm9yZXtjb250ZW50OiJcZjA4MCJ9LmZhLXR3aXR0ZXItc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjA4MSJ9LmZhLWZhY2Vib29rLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYwODIifS5mYS1jYW1lcmEtcmV0cm86YmVmb3Jle2NvbnRlbnQ6IlxmMDgzIn0uZmEta2V5OmJlZm9yZXtjb250ZW50OiJcZjA4NCJ9LmZhLWdlYXJzOmJlZm9yZSwuZmEtY29nczpiZWZvcmV7Y29udGVudDoiXGYwODUifS5mYS1jb21tZW50czpiZWZvcmV7Y29udGVudDoiXGYwODYifS5mYS10aHVtYnMtby11cDpiZWZvcmV7Y29udGVudDoiXGYwODcifS5mYS10aHVtYnMtby1kb3duOmJlZm9yZXtjb250ZW50OiJcZjA4OCJ9LmZhLXN0YXItaGFsZjpiZWZvcmV7Y29udGVudDoiXGYwODkifS5mYS1oZWFydC1vOmJlZm9yZXtjb250ZW50OiJcZjA4YSJ9LmZhLXNpZ24tb3V0OmJlZm9yZXtjb250ZW50OiJcZjA4YiJ9LmZhLWxpbmtlZGluLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYwOGMifS5mYS10aHVtYi10YWNrOmJlZm9yZXtjb250ZW50OiJcZjA4ZCJ9LmZhLWV4dGVybmFsLWxpbms6YmVmb3Jle2NvbnRlbnQ6IlxmMDhlIn0uZmEtc2lnbi1pbjpiZWZvcmV7Y29udGVudDoiXGYwOTAifS5mYS10cm9waHk6YmVmb3Jle2NvbnRlbnQ6IlxmMDkxIn0uZmEtZ2l0aHViLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYwOTIifS5mYS11cGxvYWQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDkzIn0uZmEtbGVtb24tbzpiZWZvcmV7Y29udGVudDoiXGYwOTQifS5mYS1waG9uZTpiZWZvcmV7Y29udGVudDoiXGYwOTUifS5mYS1zcXVhcmUtbzpiZWZvcmV7Y29udGVudDoiXGYwOTYifS5mYS1ib29rbWFyay1vOmJlZm9yZXtjb250ZW50OiJcZjA5NyJ9LmZhLXBob25lLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYwOTgifS5mYS10d2l0dGVyOmJlZm9yZXtjb250ZW50OiJcZjA5OSJ9LmZhLWZhY2Vib29rLWY6YmVmb3JlLC5mYS1mYWNlYm9vazpiZWZvcmV7Y29udGVudDoiXGYwOWEifS5mYS1naXRodWI6YmVmb3Jle2NvbnRlbnQ6IlxmMDliIn0uZmEtdW5sb2NrOmJlZm9yZXtjb250ZW50OiJcZjA5YyJ9LmZhLWNyZWRpdC1jYXJkOmJlZm9yZXtjb250ZW50OiJcZjA5ZCJ9LmZhLWZlZWQ6YmVmb3JlLC5mYS1yc3M6YmVmb3Jle2NvbnRlbnQ6IlxmMDllIn0uZmEtaGRkLW86YmVmb3Jle2NvbnRlbnQ6IlxmMGEwIn0uZmEtYnVsbGhvcm46YmVmb3Jle2NvbnRlbnQ6IlxmMGExIn0uZmEtYmVsbDpiZWZvcmV7Y29udGVudDoiXGYwZjMifS5mYS1jZXJ0aWZpY2F0ZTpiZWZvcmV7Y29udGVudDoiXGYwYTMifS5mYS1oYW5kLW8tcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGE0In0uZmEtaGFuZC1vLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGE1In0uZmEtaGFuZC1vLXVwOmJlZm9yZXtjb250ZW50OiJcZjBhNiJ9LmZhLWhhbmQtby1kb3duOmJlZm9yZXtjb250ZW50OiJcZjBhNyJ9LmZhLWFycm93LWNpcmNsZS1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjBhOCJ9LmZhLWFycm93LWNpcmNsZS1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYwYTkifS5mYS1hcnJvdy1jaXJjbGUtdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMGFhIn0uZmEtYXJyb3ctY2lyY2xlLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMGFiIn0uZmEtZ2xvYmU6YmVmb3Jle2NvbnRlbnQ6IlxmMGFjIn0uZmEtd3JlbmNoOmJlZm9yZXtjb250ZW50OiJcZjBhZCJ9LmZhLXRhc2tzOmJlZm9yZXtjb250ZW50OiJcZjBhZSJ9LmZhLWZpbHRlcjpiZWZvcmV7Y29udGVudDoiXGYwYjAifS5mYS1icmllZmNhc2U6YmVmb3Jle2NvbnRlbnQ6IlxmMGIxIn0uZmEtYXJyb3dzLWFsdDpiZWZvcmV7Y29udGVudDoiXGYwYjIifS5mYS1ncm91cDpiZWZvcmUsLmZhLXVzZXJzOmJlZm9yZXtjb250ZW50OiJcZjBjMCJ9LmZhLWNoYWluOmJlZm9yZSwuZmEtbGluazpiZWZvcmV7Y29udGVudDoiXGYwYzEifS5mYS1jbG91ZDpiZWZvcmV7Y29udGVudDoiXGYwYzIifS5mYS1mbGFzazpiZWZvcmV7Y29udGVudDoiXGYwYzMifS5mYS1jdXQ6YmVmb3JlLC5mYS1zY2lzc29yczpiZWZvcmV7Y29udGVudDoiXGYwYzQifS5mYS1jb3B5OmJlZm9yZSwuZmEtZmlsZXMtbzpiZWZvcmV7Y29udGVudDoiXGYwYzUifS5mYS1wYXBlcmNsaXA6YmVmb3Jle2NvbnRlbnQ6IlxmMGM2In0uZmEtc2F2ZTpiZWZvcmUsLmZhLWZsb3BweS1vOmJlZm9yZXtjb250ZW50OiJcZjBjNyJ9LmZhLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYwYzgifS5mYS1uYXZpY29uOmJlZm9yZSwuZmEtcmVvcmRlcjpiZWZvcmUsLmZhLWJhcnM6YmVmb3Jle2NvbnRlbnQ6IlxmMGM5In0uZmEtbGlzdC11bDpiZWZvcmV7Y29udGVudDoiXGYwY2EifS5mYS1saXN0LW9sOmJlZm9yZXtjb250ZW50OiJcZjBjYiJ9LmZhLXN0cmlrZXRocm91Z2g6YmVmb3Jle2NvbnRlbnQ6IlxmMGNjIn0uZmEtdW5kZXJsaW5lOmJlZm9yZXtjb250ZW50OiJcZjBjZCJ9LmZhLXRhYmxlOmJlZm9yZXtjb250ZW50OiJcZjBjZSJ9LmZhLW1hZ2ljOmJlZm9yZXtjb250ZW50OiJcZjBkMCJ9LmZhLXRydWNrOmJlZm9yZXtjb250ZW50OiJcZjBkMSJ9LmZhLXBpbnRlcmVzdDpiZWZvcmV7Y29udGVudDoiXGYwZDIifS5mYS1waW50ZXJlc3Qtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjBkMyJ9LmZhLWdvb2dsZS1wbHVzLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYwZDQifS5mYS1nb29nbGUtcGx1czpiZWZvcmV7Y29udGVudDoiXGYwZDUifS5mYS1tb25leTpiZWZvcmV7Y29udGVudDoiXGYwZDYifS5mYS1jYXJldC1kb3duOmJlZm9yZXtjb250ZW50OiJcZjBkNyJ9LmZhLWNhcmV0LXVwOmJlZm9yZXtjb250ZW50OiJcZjBkOCJ9LmZhLWNhcmV0LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGQ5In0uZmEtY2FyZXQtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGRhIn0uZmEtY29sdW1uczpiZWZvcmV7Y29udGVudDoiXGYwZGIifS5mYS11bnNvcnRlZDpiZWZvcmUsLmZhLXNvcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGRjIn0uZmEtc29ydC1kb3duOmJlZm9yZSwuZmEtc29ydC1kZXNjOmJlZm9yZXtjb250ZW50OiJcZjBkZCJ9LmZhLXNvcnQtdXA6YmVmb3JlLC5mYS1zb3J0LWFzYzpiZWZvcmV7Y29udGVudDoiXGYwZGUifS5mYS1lbnZlbG9wZTpiZWZvcmV7Y29udGVudDoiXGYwZTAifS5mYS1saW5rZWRpbjpiZWZvcmV7Y29udGVudDoiXGYwZTEifS5mYS1yb3RhdGUtbGVmdDpiZWZvcmUsLmZhLXVuZG86YmVmb3Jle2NvbnRlbnQ6IlxmMGUyIn0uZmEtbGVnYWw6YmVmb3JlLC5mYS1nYXZlbDpiZWZvcmV7Y29udGVudDoiXGYwZTMifS5mYS1kYXNoYm9hcmQ6YmVmb3JlLC5mYS10YWNob21ldGVyOmJlZm9yZXtjb250ZW50OiJcZjBlNCJ9LmZhLWNvbW1lbnQtbzpiZWZvcmV7Y29udGVudDoiXGYwZTUifS5mYS1jb21tZW50cy1vOmJlZm9yZXtjb250ZW50OiJcZjBlNiJ9LmZhLWZsYXNoOmJlZm9yZSwuZmEtYm9sdDpiZWZvcmV7Y29udGVudDoiXGYwZTcifS5mYS1zaXRlbWFwOmJlZm9yZXtjb250ZW50OiJcZjBlOCJ9LmZhLXVtYnJlbGxhOmJlZm9yZXtjb250ZW50OiJcZjBlOSJ9LmZhLXBhc3RlOmJlZm9yZSwuZmEtY2xpcGJvYXJkOmJlZm9yZXtjb250ZW50OiJcZjBlYSJ9LmZhLWxpZ2h0YnVsYi1vOmJlZm9yZXtjb250ZW50OiJcZjBlYiJ9LmZhLWV4Y2hhbmdlOmJlZm9yZXtjb250ZW50OiJcZjBlYyJ9LmZhLWNsb3VkLWRvd25sb2FkOmJlZm9yZXtjb250ZW50OiJcZjBlZCJ9LmZhLWNsb3VkLXVwbG9hZDpiZWZvcmV7Y29udGVudDoiXGYwZWUifS5mYS11c2VyLW1kOmJlZm9yZXtjb250ZW50OiJcZjBmMCJ9LmZhLXN0ZXRob3Njb3BlOmJlZm9yZXtjb250ZW50OiJcZjBmMSJ9LmZhLXN1aXRjYXNlOmJlZm9yZXtjb250ZW50OiJcZjBmMiJ9LmZhLWJlbGwtbzpiZWZvcmV7Y29udGVudDoiXGYwYTIifS5mYS1jb2ZmZWU6YmVmb3Jle2NvbnRlbnQ6IlxmMGY0In0uZmEtY3V0bGVyeTpiZWZvcmV7Y29udGVudDoiXGYwZjUifS5mYS1maWxlLXRleHQtbzpiZWZvcmV7Y29udGVudDoiXGYwZjYifS5mYS1idWlsZGluZy1vOmJlZm9yZXtjb250ZW50OiJcZjBmNyJ9LmZhLWhvc3BpdGFsLW86YmVmb3Jle2NvbnRlbnQ6IlxmMGY4In0uZmEtYW1idWxhbmNlOmJlZm9yZXtjb250ZW50OiJcZjBmOSJ9LmZhLW1lZGtpdDpiZWZvcmV7Y29udGVudDoiXGYwZmEifS5mYS1maWdodGVyLWpldDpiZWZvcmV7Y29udGVudDoiXGYwZmIifS5mYS1iZWVyOmJlZm9yZXtjb250ZW50OiJcZjBmYyJ9LmZhLWgtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjBmZCJ9LmZhLXBsdXMtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjBmZSJ9LmZhLWFuZ2xlLWRvdWJsZS1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjEwMCJ9LmZhLWFuZ2xlLWRvdWJsZS1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYxMDEifS5mYS1hbmdsZS1kb3VibGUtdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMTAyIn0uZmEtYW5nbGUtZG91YmxlLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMTAzIn0uZmEtYW5nbGUtbGVmdDpiZWZvcmV7Y29udGVudDoiXGYxMDQifS5mYS1hbmdsZS1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYxMDUifS5mYS1hbmdsZS11cDpiZWZvcmV7Y29udGVudDoiXGYxMDYifS5mYS1hbmdsZS1kb3duOmJlZm9yZXtjb250ZW50OiJcZjEwNyJ9LmZhLWRlc2t0b3A6YmVmb3Jle2NvbnRlbnQ6IlxmMTA4In0uZmEtbGFwdG9wOmJlZm9yZXtjb250ZW50OiJcZjEwOSJ9LmZhLXRhYmxldDpiZWZvcmV7Y29udGVudDoiXGYxMGEifS5mYS1tb2JpbGUtcGhvbmU6YmVmb3JlLC5mYS1tb2JpbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMTBiIn0uZmEtY2lyY2xlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMTBjIn0uZmEtcXVvdGUtbGVmdDpiZWZvcmV7Y29udGVudDoiXGYxMGQifS5mYS1xdW90ZS1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYxMGUifS5mYS1zcGlubmVyOmJlZm9yZXtjb250ZW50OiJcZjExMCJ9LmZhLWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYxMTEifS5mYS1tYWlsLXJlcGx5OmJlZm9yZSwuZmEtcmVwbHk6YmVmb3Jle2NvbnRlbnQ6IlxmMTEyIn0uZmEtZ2l0aHViLWFsdDpiZWZvcmV7Y29udGVudDoiXGYxMTMifS5mYS1mb2xkZXItbzpiZWZvcmV7Y29udGVudDoiXGYxMTQifS5mYS1mb2xkZXItb3Blbi1vOmJlZm9yZXtjb250ZW50OiJcZjExNSJ9LmZhLXNtaWxlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMTE4In0uZmEtZnJvd24tbzpiZWZvcmV7Y29udGVudDoiXGYxMTkifS5mYS1tZWgtbzpiZWZvcmV7Y29udGVudDoiXGYxMWEifS5mYS1nYW1lcGFkOmJlZm9yZXtjb250ZW50OiJcZjExYiJ9LmZhLWtleWJvYXJkLW86YmVmb3Jle2NvbnRlbnQ6IlxmMTFjIn0uZmEtZmxhZy1vOmJlZm9yZXtjb250ZW50OiJcZjExZCJ9LmZhLWZsYWctY2hlY2tlcmVkOmJlZm9yZXtjb250ZW50OiJcZjExZSJ9LmZhLXRlcm1pbmFsOmJlZm9yZXtjb250ZW50OiJcZjEyMCJ9LmZhLWNvZGU6YmVmb3Jle2NvbnRlbnQ6IlxmMTIxIn0uZmEtbWFpbC1yZXBseS1hbGw6YmVmb3JlLC5mYS1yZXBseS1hbGw6YmVmb3Jle2NvbnRlbnQ6IlxmMTIyIn0uZmEtc3Rhci1oYWxmLWVtcHR5OmJlZm9yZSwuZmEtc3Rhci1oYWxmLWZ1bGw6YmVmb3JlLC5mYS1zdGFyLWhhbGYtbzpiZWZvcmV7Y29udGVudDoiXGYxMjMifS5mYS1sb2NhdGlvbi1hcnJvdzpiZWZvcmV7Y29udGVudDoiXGYxMjQifS5mYS1jcm9wOmJlZm9yZXtjb250ZW50OiJcZjEyNSJ9LmZhLWNvZGUtZm9yazpiZWZvcmV7Y29udGVudDoiXGYxMjYifS5mYS11bmxpbms6YmVmb3JlLC5mYS1jaGFpbi1icm9rZW46YmVmb3Jle2NvbnRlbnQ6IlxmMTI3In0uZmEtcXVlc3Rpb246YmVmb3Jle2NvbnRlbnQ6IlxmMTI4In0uZmEtaW5mbzpiZWZvcmV7Y29udGVudDoiXGYxMjkifS5mYS1leGNsYW1hdGlvbjpiZWZvcmV7Y29udGVudDoiXGYxMmEifS5mYS1zdXBlcnNjcmlwdDpiZWZvcmV7Y29udGVudDoiXGYxMmIifS5mYS1zdWJzY3JpcHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTJjIn0uZmEtZXJhc2VyOmJlZm9yZXtjb250ZW50OiJcZjEyZCJ9LmZhLXB1enpsZS1waWVjZTpiZWZvcmV7Y29udGVudDoiXGYxMmUifS5mYS1taWNyb3Bob25lOmJlZm9yZXtjb250ZW50OiJcZjEzMCJ9LmZhLW1pY3JvcGhvbmUtc2xhc2g6YmVmb3Jle2NvbnRlbnQ6IlxmMTMxIn0uZmEtc2hpZWxkOmJlZm9yZXtjb250ZW50OiJcZjEzMiJ9LmZhLWNhbGVuZGFyLW86YmVmb3Jle2NvbnRlbnQ6IlxmMTMzIn0uZmEtZmlyZS1leHRpbmd1aXNoZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMTM0In0uZmEtcm9ja2V0OmJlZm9yZXtjb250ZW50OiJcZjEzNSJ9LmZhLW1heGNkbjpiZWZvcmV7Y29udGVudDoiXGYxMzYifS5mYS1jaGV2cm9uLWNpcmNsZS1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjEzNyJ9LmZhLWNoZXZyb24tY2lyY2xlLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjEzOCJ9LmZhLWNoZXZyb24tY2lyY2xlLXVwOmJlZm9yZXtjb250ZW50OiJcZjEzOSJ9LmZhLWNoZXZyb24tY2lyY2xlLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMTNhIn0uZmEtaHRtbDU6YmVmb3Jle2NvbnRlbnQ6IlxmMTNiIn0uZmEtY3NzMzpiZWZvcmV7Y29udGVudDoiXGYxM2MifS5mYS1hbmNob3I6YmVmb3Jle2NvbnRlbnQ6IlxmMTNkIn0uZmEtdW5sb2NrLWFsdDpiZWZvcmV7Y29udGVudDoiXGYxM2UifS5mYS1idWxsc2V5ZTpiZWZvcmV7Y29udGVudDoiXGYxNDAifS5mYS1lbGxpcHNpcy1oOmJlZm9yZXtjb250ZW50OiJcZjE0MSJ9LmZhLWVsbGlwc2lzLXY6YmVmb3Jle2NvbnRlbnQ6IlxmMTQyIn0uZmEtcnNzLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYxNDMifS5mYS1wbGF5LWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYxNDQifS5mYS10aWNrZXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTQ1In0uZmEtbWludXMtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjE0NiJ9LmZhLW1pbnVzLXNxdWFyZS1vOmJlZm9yZXtjb250ZW50OiJcZjE0NyJ9LmZhLWxldmVsLXVwOmJlZm9yZXtjb250ZW50OiJcZjE0OCJ9LmZhLWxldmVsLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMTQ5In0uZmEtY2hlY2stc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjE0YSJ9LmZhLXBlbmNpbC1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMTRiIn0uZmEtZXh0ZXJuYWwtbGluay1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMTRjIn0uZmEtc2hhcmUtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjE0ZCJ9LmZhLWNvbXBhc3M6YmVmb3Jle2NvbnRlbnQ6IlxmMTRlIn0uZmEtdG9nZ2xlLWRvd246YmVmb3JlLC5mYS1jYXJldC1zcXVhcmUtby1kb3duOmJlZm9yZXtjb250ZW50OiJcZjE1MCJ9LmZhLXRvZ2dsZS11cDpiZWZvcmUsLmZhLWNhcmV0LXNxdWFyZS1vLXVwOmJlZm9yZXtjb250ZW50OiJcZjE1MSJ9LmZhLXRvZ2dsZS1yaWdodDpiZWZvcmUsLmZhLWNhcmV0LXNxdWFyZS1vLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjE1MiJ9LmZhLWV1cm86YmVmb3JlLC5mYS1ldXI6YmVmb3Jle2NvbnRlbnQ6IlxmMTUzIn0uZmEtZ2JwOmJlZm9yZXtjb250ZW50OiJcZjE1NCJ9LmZhLWRvbGxhcjpiZWZvcmUsLmZhLXVzZDpiZWZvcmV7Y29udGVudDoiXGYxNTUifS5mYS1ydXBlZTpiZWZvcmUsLmZhLWlucjpiZWZvcmV7Y29udGVudDoiXGYxNTYifS5mYS1jbnk6YmVmb3JlLC5mYS1ybWI6YmVmb3JlLC5mYS15ZW46YmVmb3JlLC5mYS1qcHk6YmVmb3Jle2NvbnRlbnQ6IlxmMTU3In0uZmEtcnVibGU6YmVmb3JlLC5mYS1yb3VibGU6YmVmb3JlLC5mYS1ydWI6YmVmb3Jle2NvbnRlbnQ6IlxmMTU4In0uZmEtd29uOmJlZm9yZSwuZmEta3J3OmJlZm9yZXtjb250ZW50OiJcZjE1OSJ9LmZhLWJpdGNvaW46YmVmb3JlLC5mYS1idGM6YmVmb3Jle2NvbnRlbnQ6IlxmMTVhIn0uZmEtZmlsZTpiZWZvcmV7Y29udGVudDoiXGYxNWIifS5mYS1maWxlLXRleHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTVjIn0uZmEtc29ydC1hbHBoYS1hc2M6YmVmb3Jle2NvbnRlbnQ6IlxmMTVkIn0uZmEtc29ydC1hbHBoYS1kZXNjOmJlZm9yZXtjb250ZW50OiJcZjE1ZSJ9LmZhLXNvcnQtYW1vdW50LWFzYzpiZWZvcmV7Y29udGVudDoiXGYxNjAifS5mYS1zb3J0LWFtb3VudC1kZXNjOmJlZm9yZXtjb250ZW50OiJcZjE2MSJ9LmZhLXNvcnQtbnVtZXJpYy1hc2M6YmVmb3Jle2NvbnRlbnQ6IlxmMTYyIn0uZmEtc29ydC1udW1lcmljLWRlc2M6YmVmb3Jle2NvbnRlbnQ6IlxmMTYzIn0uZmEtdGh1bWJzLXVwOmJlZm9yZXtjb250ZW50OiJcZjE2NCJ9LmZhLXRodW1icy1kb3duOmJlZm9yZXtjb250ZW50OiJcZjE2NSJ9LmZhLXlvdXR1YmUtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjE2NiJ9LmZhLXlvdXR1YmU6YmVmb3Jle2NvbnRlbnQ6IlxmMTY3In0uZmEteGluZzpiZWZvcmV7Y29udGVudDoiXGYxNjgifS5mYS14aW5nLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYxNjkifS5mYS15b3V0dWJlLXBsYXk6YmVmb3Jle2NvbnRlbnQ6IlxmMTZhIn0uZmEtZHJvcGJveDpiZWZvcmV7Y29udGVudDoiXGYxNmIifS5mYS1zdGFjay1vdmVyZmxvdzpiZWZvcmV7Y29udGVudDoiXGYxNmMifS5mYS1pbnN0YWdyYW06YmVmb3Jle2NvbnRlbnQ6IlxmMTZkIn0uZmEtZmxpY2tyOmJlZm9yZXtjb250ZW50OiJcZjE2ZSJ9LmZhLWFkbjpiZWZvcmV7Y29udGVudDoiXGYxNzAifS5mYS1iaXRidWNrZXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTcxIn0uZmEtYml0YnVja2V0LXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYxNzIifS5mYS10dW1ibHI6YmVmb3Jle2NvbnRlbnQ6IlxmMTczIn0uZmEtdHVtYmxyLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYxNzQifS5mYS1sb25nLWFycm93LWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMTc1In0uZmEtbG9uZy1hcnJvdy11cDpiZWZvcmV7Y29udGVudDoiXGYxNzYifS5mYS1sb25nLWFycm93LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTc3In0uZmEtbG9uZy1hcnJvdy1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYxNzgifS5mYS1hcHBsZTpiZWZvcmV7Y29udGVudDoiXGYxNzkifS5mYS13aW5kb3dzOmJlZm9yZXtjb250ZW50OiJcZjE3YSJ9LmZhLWFuZHJvaWQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTdiIn0uZmEtbGludXg6YmVmb3Jle2NvbnRlbnQ6IlxmMTdjIn0uZmEtZHJpYmJibGU6YmVmb3Jle2NvbnRlbnQ6IlxmMTdkIn0uZmEtc2t5cGU6YmVmb3Jle2NvbnRlbnQ6IlxmMTdlIn0uZmEtZm91cnNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYxODAifS5mYS10cmVsbG86YmVmb3Jle2NvbnRlbnQ6IlxmMTgxIn0uZmEtZmVtYWxlOmJlZm9yZXtjb250ZW50OiJcZjE4MiJ9LmZhLW1hbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMTgzIn0uZmEtZ2l0dGlwOmJlZm9yZSwuZmEtZ3JhdGlwYXk6YmVmb3Jle2NvbnRlbnQ6IlxmMTg0In0uZmEtc3VuLW86YmVmb3Jle2NvbnRlbnQ6IlxmMTg1In0uZmEtbW9vbi1vOmJlZm9yZXtjb250ZW50OiJcZjE4NiJ9LmZhLWFyY2hpdmU6YmVmb3Jle2NvbnRlbnQ6IlxmMTg3In0uZmEtYnVnOmJlZm9yZXtjb250ZW50OiJcZjE4OCJ9LmZhLXZrOmJlZm9yZXtjb250ZW50OiJcZjE4OSJ9LmZhLXdlaWJvOmJlZm9yZXtjb250ZW50OiJcZjE4YSJ9LmZhLXJlbnJlbjpiZWZvcmV7Y29udGVudDoiXGYxOGIifS5mYS1wYWdlbGluZXM6YmVmb3Jle2NvbnRlbnQ6IlxmMThjIn0uZmEtc3RhY2stZXhjaGFuZ2U6YmVmb3Jle2NvbnRlbnQ6IlxmMThkIn0uZmEtYXJyb3ctY2lyY2xlLW8tcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMThlIn0uZmEtYXJyb3ctY2lyY2xlLW8tbGVmdDpiZWZvcmV7Y29udGVudDoiXGYxOTAifS5mYS10b2dnbGUtbGVmdDpiZWZvcmUsLmZhLWNhcmV0LXNxdWFyZS1vLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTkxIn0uZmEtZG90LWNpcmNsZS1vOmJlZm9yZXtjb250ZW50OiJcZjE5MiJ9LmZhLXdoZWVsY2hhaXI6YmVmb3Jle2NvbnRlbnQ6IlxmMTkzIn0uZmEtdmltZW8tc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjE5NCJ9LmZhLXR1cmtpc2gtbGlyYTpiZWZvcmUsLmZhLXRyeTpiZWZvcmV7Y29udGVudDoiXGYxOTUifS5mYS1wbHVzLXNxdWFyZS1vOmJlZm9yZXtjb250ZW50OiJcZjE5NiJ9LmZhLXNwYWNlLXNodXR0bGU6YmVmb3Jle2NvbnRlbnQ6IlxmMTk3In0uZmEtc2xhY2s6YmVmb3Jle2NvbnRlbnQ6IlxmMTk4In0uZmEtZW52ZWxvcGUtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjE5OSJ9LmZhLXdvcmRwcmVzczpiZWZvcmV7Y29udGVudDoiXGYxOWEifS5mYS1vcGVuaWQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTliIn0uZmEtaW5zdGl0dXRpb246YmVmb3JlLC5mYS1iYW5rOmJlZm9yZSwuZmEtdW5pdmVyc2l0eTpiZWZvcmV7Y29udGVudDoiXGYxOWMifS5mYS1tb3J0YXItYm9hcmQ6YmVmb3JlLC5mYS1ncmFkdWF0aW9uLWNhcDpiZWZvcmV7Y29udGVudDoiXGYxOWQifS5mYS15YWhvbzpiZWZvcmV7Y29udGVudDoiXGYxOWUifS5mYS1nb29nbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMWEwIn0uZmEtcmVkZGl0OmJlZm9yZXtjb250ZW50OiJcZjFhMSJ9LmZhLXJlZGRpdC1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMWEyIn0uZmEtc3R1bWJsZXVwb24tY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjFhMyJ9LmZhLXN0dW1ibGV1cG9uOmJlZm9yZXtjb250ZW50OiJcZjFhNCJ9LmZhLWRlbGljaW91czpiZWZvcmV7Y29udGVudDoiXGYxYTUifS5mYS1kaWdnOmJlZm9yZXtjb250ZW50OiJcZjFhNiJ9LmZhLXBpZWQtcGlwZXItcHA6YmVmb3Jle2NvbnRlbnQ6IlxmMWE3In0uZmEtcGllZC1waXBlci1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWE4In0uZmEtZHJ1cGFsOmJlZm9yZXtjb250ZW50OiJcZjFhOSJ9LmZhLWpvb21sYTpiZWZvcmV7Y29udGVudDoiXGYxYWEifS5mYS1sYW5ndWFnZTpiZWZvcmV7Y29udGVudDoiXGYxYWIifS5mYS1mYXg6YmVmb3Jle2NvbnRlbnQ6IlxmMWFjIn0uZmEtYnVpbGRpbmc6YmVmb3Jle2NvbnRlbnQ6IlxmMWFkIn0uZmEtY2hpbGQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWFlIn0uZmEtcGF3OmJlZm9yZXtjb250ZW50OiJcZjFiMCJ9LmZhLXNwb29uOmJlZm9yZXtjb250ZW50OiJcZjFiMSJ9LmZhLWN1YmU6YmVmb3Jle2NvbnRlbnQ6IlxmMWIyIn0uZmEtY3ViZXM6YmVmb3Jle2NvbnRlbnQ6IlxmMWIzIn0uZmEtYmVoYW5jZTpiZWZvcmV7Y29udGVudDoiXGYxYjQifS5mYS1iZWhhbmNlLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYxYjUifS5mYS1zdGVhbTpiZWZvcmV7Y29udGVudDoiXGYxYjYifS5mYS1zdGVhbS1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMWI3In0uZmEtcmVjeWNsZTpiZWZvcmV7Y29udGVudDoiXGYxYjgifS5mYS1hdXRvbW9iaWxlOmJlZm9yZSwuZmEtY2FyOmJlZm9yZXtjb250ZW50OiJcZjFiOSJ9LmZhLWNhYjpiZWZvcmUsLmZhLXRheGk6YmVmb3Jle2NvbnRlbnQ6IlxmMWJhIn0uZmEtdHJlZTpiZWZvcmV7Y29udGVudDoiXGYxYmIifS5mYS1zcG90aWZ5OmJlZm9yZXtjb250ZW50OiJcZjFiYyJ9LmZhLWRldmlhbnRhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWJkIn0uZmEtc291bmRjbG91ZDpiZWZvcmV7Y29udGVudDoiXGYxYmUifS5mYS1kYXRhYmFzZTpiZWZvcmV7Y29udGVudDoiXGYxYzAifS5mYS1maWxlLXBkZi1vOmJlZm9yZXtjb250ZW50OiJcZjFjMSJ9LmZhLWZpbGUtd29yZC1vOmJlZm9yZXtjb250ZW50OiJcZjFjMiJ9LmZhLWZpbGUtZXhjZWwtbzpiZWZvcmV7Y29udGVudDoiXGYxYzMifS5mYS1maWxlLXBvd2VycG9pbnQtbzpiZWZvcmV7Y29udGVudDoiXGYxYzQifS5mYS1maWxlLXBob3RvLW86YmVmb3JlLC5mYS1maWxlLXBpY3R1cmUtbzpiZWZvcmUsLmZhLWZpbGUtaW1hZ2UtbzpiZWZvcmV7Y29udGVudDoiXGYxYzUifS5mYS1maWxlLXppcC1vOmJlZm9yZSwuZmEtZmlsZS1hcmNoaXZlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMWM2In0uZmEtZmlsZS1zb3VuZC1vOmJlZm9yZSwuZmEtZmlsZS1hdWRpby1vOmJlZm9yZXtjb250ZW50OiJcZjFjNyJ9LmZhLWZpbGUtbW92aWUtbzpiZWZvcmUsLmZhLWZpbGUtdmlkZW8tbzpiZWZvcmV7Y29udGVudDoiXGYxYzgifS5mYS1maWxlLWNvZGUtbzpiZWZvcmV7Y29udGVudDoiXGYxYzkifS5mYS12aW5lOmJlZm9yZXtjb250ZW50OiJcZjFjYSJ9LmZhLWNvZGVwZW46YmVmb3Jle2NvbnRlbnQ6IlxmMWNiIn0uZmEtanNmaWRkbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMWNjIn0uZmEtbGlmZS1ib3V5OmJlZm9yZSwuZmEtbGlmZS1idW95OmJlZm9yZSwuZmEtbGlmZS1zYXZlcjpiZWZvcmUsLmZhLXN1cHBvcnQ6YmVmb3JlLC5mYS1saWZlLXJpbmc6YmVmb3Jle2NvbnRlbnQ6IlxmMWNkIn0uZmEtY2lyY2xlLW8tbm90Y2g6YmVmb3Jle2NvbnRlbnQ6IlxmMWNlIn0uZmEtcmE6YmVmb3JlLC5mYS1yZXNpc3RhbmNlOmJlZm9yZSwuZmEtcmViZWw6YmVmb3Jle2NvbnRlbnQ6IlxmMWQwIn0uZmEtZ2U6YmVmb3JlLC5mYS1lbXBpcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMWQxIn0uZmEtZ2l0LXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYxZDIifS5mYS1naXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWQzIn0uZmEteS1jb21iaW5hdG9yLXNxdWFyZTpiZWZvcmUsLmZhLXljLXNxdWFyZTpiZWZvcmUsLmZhLWhhY2tlci1uZXdzOmJlZm9yZXtjb250ZW50OiJcZjFkNCJ9LmZhLXRlbmNlbnQtd2VpYm86YmVmb3Jle2NvbnRlbnQ6IlxmMWQ1In0uZmEtcXE6YmVmb3Jle2NvbnRlbnQ6IlxmMWQ2In0uZmEtd2VjaGF0OmJlZm9yZSwuZmEtd2VpeGluOmJlZm9yZXtjb250ZW50OiJcZjFkNyJ9LmZhLXNlbmQ6YmVmb3JlLC5mYS1wYXBlci1wbGFuZTpiZWZvcmV7Y29udGVudDoiXGYxZDgifS5mYS1zZW5kLW86YmVmb3JlLC5mYS1wYXBlci1wbGFuZS1vOmJlZm9yZXtjb250ZW50OiJcZjFkOSJ9LmZhLWhpc3Rvcnk6YmVmb3Jle2NvbnRlbnQ6IlxmMWRhIn0uZmEtY2lyY2xlLXRoaW46YmVmb3Jle2NvbnRlbnQ6IlxmMWRiIn0uZmEtaGVhZGVyOmJlZm9yZXtjb250ZW50OiJcZjFkYyJ9LmZhLXBhcmFncmFwaDpiZWZvcmV7Y29udGVudDoiXGYxZGQifS5mYS1zbGlkZXJzOmJlZm9yZXtjb250ZW50OiJcZjFkZSJ9LmZhLXNoYXJlLWFsdDpiZWZvcmV7Y29udGVudDoiXGYxZTAifS5mYS1zaGFyZS1hbHQtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjFlMSJ9LmZhLWJvbWI6YmVmb3Jle2NvbnRlbnQ6IlxmMWUyIn0uZmEtc29jY2VyLWJhbGwtbzpiZWZvcmUsLmZhLWZ1dGJvbC1vOmJlZm9yZXtjb250ZW50OiJcZjFlMyJ9LmZhLXR0eTpiZWZvcmV7Y29udGVudDoiXGYxZTQifS5mYS1iaW5vY3VsYXJzOmJlZm9yZXtjb250ZW50OiJcZjFlNSJ9LmZhLXBsdWc6YmVmb3Jle2NvbnRlbnQ6IlxmMWU2In0uZmEtc2xpZGVzaGFyZTpiZWZvcmV7Y29udGVudDoiXGYxZTcifS5mYS10d2l0Y2g6YmVmb3Jle2NvbnRlbnQ6IlxmMWU4In0uZmEteWVscDpiZWZvcmV7Y29udGVudDoiXGYxZTkifS5mYS1uZXdzcGFwZXItbzpiZWZvcmV7Y29udGVudDoiXGYxZWEifS5mYS13aWZpOmJlZm9yZXtjb250ZW50OiJcZjFlYiJ9LmZhLWNhbGN1bGF0b3I6YmVmb3Jle2NvbnRlbnQ6IlxmMWVjIn0uZmEtcGF5cGFsOmJlZm9yZXtjb250ZW50OiJcZjFlZCJ9LmZhLWdvb2dsZS13YWxsZXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWVlIn0uZmEtY2MtdmlzYTpiZWZvcmV7Y29udGVudDoiXGYxZjAifS5mYS1jYy1tYXN0ZXJjYXJkOmJlZm9yZXtjb250ZW50OiJcZjFmMSJ9LmZhLWNjLWRpc2NvdmVyOmJlZm9yZXtjb250ZW50OiJcZjFmMiJ9LmZhLWNjLWFtZXg6YmVmb3Jle2NvbnRlbnQ6IlxmMWYzIn0uZmEtY2MtcGF5cGFsOmJlZm9yZXtjb250ZW50OiJcZjFmNCJ9LmZhLWNjLXN0cmlwZTpiZWZvcmV7Y29udGVudDoiXGYxZjUifS5mYS1iZWxsLXNsYXNoOmJlZm9yZXtjb250ZW50OiJcZjFmNiJ9LmZhLWJlbGwtc2xhc2gtbzpiZWZvcmV7Y29udGVudDoiXGYxZjcifS5mYS10cmFzaDpiZWZvcmV7Y29udGVudDoiXGYxZjgifS5mYS1jb3B5cmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWY5In0uZmEtYXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWZhIn0uZmEtZXllZHJvcHBlcjpiZWZvcmV7Y29udGVudDoiXGYxZmIifS5mYS1wYWludC1icnVzaDpiZWZvcmV7Y29udGVudDoiXGYxZmMifS5mYS1iaXJ0aGRheS1jYWtlOmJlZm9yZXtjb250ZW50OiJcZjFmZCJ9LmZhLWFyZWEtY2hhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWZlIn0uZmEtcGllLWNoYXJ0OmJlZm9yZXtjb250ZW50OiJcZjIwMCJ9LmZhLWxpbmUtY2hhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjAxIn0uZmEtbGFzdGZtOmJlZm9yZXtjb250ZW50OiJcZjIwMiJ9LmZhLWxhc3RmbS1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMjAzIn0uZmEtdG9nZ2xlLW9mZjpiZWZvcmV7Y29udGVudDoiXGYyMDQifS5mYS10b2dnbGUtb246YmVmb3Jle2NvbnRlbnQ6IlxmMjA1In0uZmEtYmljeWNsZTpiZWZvcmV7Y29udGVudDoiXGYyMDYifS5mYS1idXM6YmVmb3Jle2NvbnRlbnQ6IlxmMjA3In0uZmEtaW94aG9zdDpiZWZvcmV7Y29udGVudDoiXGYyMDgifS5mYS1hbmdlbGxpc3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMjA5In0uZmEtY2M6YmVmb3Jle2NvbnRlbnQ6IlxmMjBhIn0uZmEtc2hla2VsOmJlZm9yZSwuZmEtc2hlcWVsOmJlZm9yZSwuZmEtaWxzOmJlZm9yZXtjb250ZW50OiJcZjIwYiJ9LmZhLW1lYW5wYXRoOmJlZm9yZXtjb250ZW50OiJcZjIwYyJ9LmZhLWJ1eXNlbGxhZHM6YmVmb3Jle2NvbnRlbnQ6IlxmMjBkIn0uZmEtY29ubmVjdGRldmVsb3A6YmVmb3Jle2NvbnRlbnQ6IlxmMjBlIn0uZmEtZGFzaGN1YmU6YmVmb3Jle2NvbnRlbnQ6IlxmMjEwIn0uZmEtZm9ydW1iZWU6YmVmb3Jle2NvbnRlbnQ6IlxmMjExIn0uZmEtbGVhbnB1YjpiZWZvcmV7Y29udGVudDoiXGYyMTIifS5mYS1zZWxsc3k6YmVmb3Jle2NvbnRlbnQ6IlxmMjEzIn0uZmEtc2hpcnRzaW5idWxrOmJlZm9yZXtjb250ZW50OiJcZjIxNCJ9LmZhLXNpbXBseWJ1aWx0OmJlZm9yZXtjb250ZW50OiJcZjIxNSJ9LmZhLXNreWF0bGFzOmJlZm9yZXtjb250ZW50OiJcZjIxNiJ9LmZhLWNhcnQtcGx1czpiZWZvcmV7Y29udGVudDoiXGYyMTcifS5mYS1jYXJ0LWFycm93LWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMjE4In0uZmEtZGlhbW9uZDpiZWZvcmV7Y29udGVudDoiXGYyMTkifS5mYS1zaGlwOmJlZm9yZXtjb250ZW50OiJcZjIxYSJ9LmZhLXVzZXItc2VjcmV0OmJlZm9yZXtjb250ZW50OiJcZjIxYiJ9LmZhLW1vdG9yY3ljbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMjFjIn0uZmEtc3RyZWV0LXZpZXc6YmVmb3Jle2NvbnRlbnQ6IlxmMjFkIn0uZmEtaGVhcnRiZWF0OmJlZm9yZXtjb250ZW50OiJcZjIxZSJ9LmZhLXZlbnVzOmJlZm9yZXtjb250ZW50OiJcZjIyMSJ9LmZhLW1hcnM6YmVmb3Jle2NvbnRlbnQ6IlxmMjIyIn0uZmEtbWVyY3VyeTpiZWZvcmV7Y29udGVudDoiXGYyMjMifS5mYS1pbnRlcnNleDpiZWZvcmUsLmZhLXRyYW5zZ2VuZGVyOmJlZm9yZXtjb250ZW50OiJcZjIyNCJ9LmZhLXRyYW5zZ2VuZGVyLWFsdDpiZWZvcmV7Y29udGVudDoiXGYyMjUifS5mYS12ZW51cy1kb3VibGU6YmVmb3Jle2NvbnRlbnQ6IlxmMjI2In0uZmEtbWFycy1kb3VibGU6YmVmb3Jle2NvbnRlbnQ6IlxmMjI3In0uZmEtdmVudXMtbWFyczpiZWZvcmV7Y29udGVudDoiXGYyMjgifS5mYS1tYXJzLXN0cm9rZTpiZWZvcmV7Y29udGVudDoiXGYyMjkifS5mYS1tYXJzLXN0cm9rZS12OmJlZm9yZXtjb250ZW50OiJcZjIyYSJ9LmZhLW1hcnMtc3Ryb2tlLWg6YmVmb3Jle2NvbnRlbnQ6IlxmMjJiIn0uZmEtbmV1dGVyOmJlZm9yZXtjb250ZW50OiJcZjIyYyJ9LmZhLWdlbmRlcmxlc3M6YmVmb3Jle2NvbnRlbnQ6IlxmMjJkIn0uZmEtZmFjZWJvb2stb2ZmaWNpYWw6YmVmb3Jle2NvbnRlbnQ6IlxmMjMwIn0uZmEtcGludGVyZXN0LXA6YmVmb3Jle2NvbnRlbnQ6IlxmMjMxIn0uZmEtd2hhdHNhcHA6YmVmb3Jle2NvbnRlbnQ6IlxmMjMyIn0uZmEtc2VydmVyOmJlZm9yZXtjb250ZW50OiJcZjIzMyJ9LmZhLXVzZXItcGx1czpiZWZvcmV7Y29udGVudDoiXGYyMzQifS5mYS11c2VyLXRpbWVzOmJlZm9yZXtjb250ZW50OiJcZjIzNSJ9LmZhLWhvdGVsOmJlZm9yZSwuZmEtYmVkOmJlZm9yZXtjb250ZW50OiJcZjIzNiJ9LmZhLXZpYWNvaW46YmVmb3Jle2NvbnRlbnQ6IlxmMjM3In0uZmEtdHJhaW46YmVmb3Jle2NvbnRlbnQ6IlxmMjM4In0uZmEtc3Vid2F5OmJlZm9yZXtjb250ZW50OiJcZjIzOSJ9LmZhLW1lZGl1bTpiZWZvcmV7Y29udGVudDoiXGYyM2EifS5mYS15YzpiZWZvcmUsLmZhLXktY29tYmluYXRvcjpiZWZvcmV7Y29udGVudDoiXGYyM2IifS5mYS1vcHRpbi1tb25zdGVyOmJlZm9yZXtjb250ZW50OiJcZjIzYyJ9LmZhLW9wZW5jYXJ0OmJlZm9yZXtjb250ZW50OiJcZjIzZCJ9LmZhLWV4cGVkaXRlZHNzbDpiZWZvcmV7Y29udGVudDoiXGYyM2UifS5mYS1iYXR0ZXJ5LTQ6YmVmb3JlLC5mYS1iYXR0ZXJ5OmJlZm9yZSwuZmEtYmF0dGVyeS1mdWxsOmJlZm9yZXtjb250ZW50OiJcZjI0MCJ9LmZhLWJhdHRlcnktMzpiZWZvcmUsLmZhLWJhdHRlcnktdGhyZWUtcXVhcnRlcnM6YmVmb3Jle2NvbnRlbnQ6IlxmMjQxIn0uZmEtYmF0dGVyeS0yOmJlZm9yZSwuZmEtYmF0dGVyeS1oYWxmOmJlZm9yZXtjb250ZW50OiJcZjI0MiJ9LmZhLWJhdHRlcnktMTpiZWZvcmUsLmZhLWJhdHRlcnktcXVhcnRlcjpiZWZvcmV7Y29udGVudDoiXGYyNDMifS5mYS1iYXR0ZXJ5LTA6YmVmb3JlLC5mYS1iYXR0ZXJ5LWVtcHR5OmJlZm9yZXtjb250ZW50OiJcZjI0NCJ9LmZhLW1vdXNlLXBvaW50ZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMjQ1In0uZmEtaS1jdXJzb3I6YmVmb3Jle2NvbnRlbnQ6IlxmMjQ2In0uZmEtb2JqZWN0LWdyb3VwOmJlZm9yZXtjb250ZW50OiJcZjI0NyJ9LmZhLW9iamVjdC11bmdyb3VwOmJlZm9yZXtjb250ZW50OiJcZjI0OCJ9LmZhLXN0aWNreS1ub3RlOmJlZm9yZXtjb250ZW50OiJcZjI0OSJ9LmZhLXN0aWNreS1ub3RlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjRhIn0uZmEtY2MtamNiOmJlZm9yZXtjb250ZW50OiJcZjI0YiJ9LmZhLWNjLWRpbmVycy1jbHViOmJlZm9yZXtjb250ZW50OiJcZjI0YyJ9LmZhLWNsb25lOmJlZm9yZXtjb250ZW50OiJcZjI0ZCJ9LmZhLWJhbGFuY2Utc2NhbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMjRlIn0uZmEtaG91cmdsYXNzLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjUwIn0uZmEtaG91cmdsYXNzLTE6YmVmb3JlLC5mYS1ob3VyZ2xhc3Mtc3RhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjUxIn0uZmEtaG91cmdsYXNzLTI6YmVmb3JlLC5mYS1ob3VyZ2xhc3MtaGFsZjpiZWZvcmV7Y29udGVudDoiXGYyNTIifS5mYS1ob3VyZ2xhc3MtMzpiZWZvcmUsLmZhLWhvdXJnbGFzcy1lbmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjUzIn0uZmEtaG91cmdsYXNzOmJlZm9yZXtjb250ZW50OiJcZjI1NCJ9LmZhLWhhbmQtZ3JhYi1vOmJlZm9yZSwuZmEtaGFuZC1yb2NrLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjU1In0uZmEtaGFuZC1zdG9wLW86YmVmb3JlLC5mYS1oYW5kLXBhcGVyLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjU2In0uZmEtaGFuZC1zY2lzc29ycy1vOmJlZm9yZXtjb250ZW50OiJcZjI1NyJ9LmZhLWhhbmQtbGl6YXJkLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjU4In0uZmEtaGFuZC1zcG9jay1vOmJlZm9yZXtjb250ZW50OiJcZjI1OSJ9LmZhLWhhbmQtcG9pbnRlci1vOmJlZm9yZXtjb250ZW50OiJcZjI1YSJ9LmZhLWhhbmQtcGVhY2UtbzpiZWZvcmV7Y29udGVudDoiXGYyNWIifS5mYS10cmFkZW1hcms6YmVmb3Jle2NvbnRlbnQ6IlxmMjVjIn0uZmEtcmVnaXN0ZXJlZDpiZWZvcmV7Y29udGVudDoiXGYyNWQifS5mYS1jcmVhdGl2ZS1jb21tb25zOmJlZm9yZXtjb250ZW50OiJcZjI1ZSJ9LmZhLWdnOmJlZm9yZXtjb250ZW50OiJcZjI2MCJ9LmZhLWdnLWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYyNjEifS5mYS10cmlwYWR2aXNvcjpiZWZvcmV7Y29udGVudDoiXGYyNjIifS5mYS1vZG5va2xhc3NuaWtpOmJlZm9yZXtjb250ZW50OiJcZjI2MyJ9LmZhLW9kbm9rbGFzc25pa2ktc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjI2NCJ9LmZhLWdldC1wb2NrZXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjY1In0uZmEtd2lraXBlZGlhLXc6YmVmb3Jle2NvbnRlbnQ6IlxmMjY2In0uZmEtc2FmYXJpOmJlZm9yZXtjb250ZW50OiJcZjI2NyJ9LmZhLWNocm9tZTpiZWZvcmV7Y29udGVudDoiXGYyNjgifS5mYS1maXJlZm94OmJlZm9yZXtjb250ZW50OiJcZjI2OSJ9LmZhLW9wZXJhOmJlZm9yZXtjb250ZW50OiJcZjI2YSJ9LmZhLWludGVybmV0LWV4cGxvcmVyOmJlZm9yZXtjb250ZW50OiJcZjI2YiJ9LmZhLXR2OmJlZm9yZSwuZmEtdGVsZXZpc2lvbjpiZWZvcmV7Y29udGVudDoiXGYyNmMifS5mYS1jb250YW86YmVmb3Jle2NvbnRlbnQ6IlxmMjZkIn0uZmEtNTAwcHg6YmVmb3Jle2NvbnRlbnQ6IlxmMjZlIn0uZmEtYW1hem9uOmJlZm9yZXtjb250ZW50OiJcZjI3MCJ9LmZhLWNhbGVuZGFyLXBsdXMtbzpiZWZvcmV7Y29udGVudDoiXGYyNzEifS5mYS1jYWxlbmRhci1taW51cy1vOmJlZm9yZXtjb250ZW50OiJcZjI3MiJ9LmZhLWNhbGVuZGFyLXRpbWVzLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjczIn0uZmEtY2FsZW5kYXItY2hlY2stbzpiZWZvcmV7Y29udGVudDoiXGYyNzQifS5mYS1pbmR1c3RyeTpiZWZvcmV7Y29udGVudDoiXGYyNzUifS5mYS1tYXAtcGluOmJlZm9yZXtjb250ZW50OiJcZjI3NiJ9LmZhLW1hcC1zaWduczpiZWZvcmV7Y29udGVudDoiXGYyNzcifS5mYS1tYXAtbzpiZWZvcmV7Y29udGVudDoiXGYyNzgifS5mYS1tYXA6YmVmb3Jle2NvbnRlbnQ6IlxmMjc5In0uZmEtY29tbWVudGluZzpiZWZvcmV7Y29udGVudDoiXGYyN2EifS5mYS1jb21tZW50aW5nLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjdiIn0uZmEtaG91eno6YmVmb3Jle2NvbnRlbnQ6IlxmMjdjIn0uZmEtdmltZW86YmVmb3Jle2NvbnRlbnQ6IlxmMjdkIn0uZmEtYmxhY2stdGllOmJlZm9yZXtjb250ZW50OiJcZjI3ZSJ9LmZhLWZvbnRpY29uczpiZWZvcmV7Y29udGVudDoiXGYyODAifS5mYS1yZWRkaXQtYWxpZW46YmVmb3Jle2NvbnRlbnQ6IlxmMjgxIn0uZmEtZWRnZTpiZWZvcmV7Y29udGVudDoiXGYyODIifS5mYS1jcmVkaXQtY2FyZC1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjgzIn0uZmEtY29kaWVwaWU6YmVmb3Jle2NvbnRlbnQ6IlxmMjg0In0uZmEtbW9keDpiZWZvcmV7Y29udGVudDoiXGYyODUifS5mYS1mb3J0LWF3ZXNvbWU6YmVmb3Jle2NvbnRlbnQ6IlxmMjg2In0uZmEtdXNiOmJlZm9yZXtjb250ZW50OiJcZjI4NyJ9LmZhLXByb2R1Y3QtaHVudDpiZWZvcmV7Y29udGVudDoiXGYyODgifS5mYS1taXhjbG91ZDpiZWZvcmV7Y29udGVudDoiXGYyODkifS5mYS1zY3JpYmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjhhIn0uZmEtcGF1c2UtY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjI4YiJ9LmZhLXBhdXNlLWNpcmNsZS1vOmJlZm9yZXtjb250ZW50OiJcZjI4YyJ9LmZhLXN0b3AtY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjI4ZCJ9LmZhLXN0b3AtY2lyY2xlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjhlIn0uZmEtc2hvcHBpbmctYmFnOmJlZm9yZXtjb250ZW50OiJcZjI5MCJ9LmZhLXNob3BwaW5nLWJhc2tldDpiZWZvcmV7Y29udGVudDoiXGYyOTEifS5mYS1oYXNodGFnOmJlZm9yZXtjb250ZW50OiJcZjI5MiJ9LmZhLWJsdWV0b290aDpiZWZvcmV7Y29udGVudDoiXGYyOTMifS5mYS1ibHVldG9vdGgtYjpiZWZvcmV7Y29udGVudDoiXGYyOTQifS5mYS1wZXJjZW50OmJlZm9yZXtjb250ZW50OiJcZjI5NSJ9LmZhLWdpdGxhYjpiZWZvcmV7Y29udGVudDoiXGYyOTYifS5mYS13cGJlZ2lubmVyOmJlZm9yZXtjb250ZW50OiJcZjI5NyJ9LmZhLXdwZm9ybXM6YmVmb3Jle2NvbnRlbnQ6IlxmMjk4In0uZmEtZW52aXJhOmJlZm9yZXtjb250ZW50OiJcZjI5OSJ9LmZhLXVuaXZlcnNhbC1hY2Nlc3M6YmVmb3Jle2NvbnRlbnQ6IlxmMjlhIn0uZmEtd2hlZWxjaGFpci1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjliIn0uZmEtcXVlc3Rpb24tY2lyY2xlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjljIn0uZmEtYmxpbmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjlkIn0uZmEtYXVkaW8tZGVzY3JpcHRpb246YmVmb3Jle2NvbnRlbnQ6IlxmMjllIn0uZmEtdm9sdW1lLWNvbnRyb2wtcGhvbmU6YmVmb3Jle2NvbnRlbnQ6IlxmMmEwIn0uZmEtYnJhaWxsZTpiZWZvcmV7Y29udGVudDoiXGYyYTEifS5mYS1hc3Npc3RpdmUtbGlzdGVuaW5nLXN5c3RlbXM6YmVmb3Jle2NvbnRlbnQ6IlxmMmEyIn0uZmEtYXNsLWludGVycHJldGluZzpiZWZvcmUsLmZhLWFtZXJpY2FuLXNpZ24tbGFuZ3VhZ2UtaW50ZXJwcmV0aW5nOmJlZm9yZXtjb250ZW50OiJcZjJhMyJ9LmZhLWRlYWZuZXNzOmJlZm9yZSwuZmEtaGFyZC1vZi1oZWFyaW5nOmJlZm9yZSwuZmEtZGVhZjpiZWZvcmV7Y29udGVudDoiXGYyYTQifS5mYS1nbGlkZTpiZWZvcmV7Y29udGVudDoiXGYyYTUifS5mYS1nbGlkZS1nOmJlZm9yZXtjb250ZW50OiJcZjJhNiJ9LmZhLXNpZ25pbmc6YmVmb3JlLC5mYS1zaWduLWxhbmd1YWdlOmJlZm9yZXtjb250ZW50OiJcZjJhNyJ9LmZhLWxvdy12aXNpb246YmVmb3Jle2NvbnRlbnQ6IlxmMmE4In0uZmEtdmlhZGVvOmJlZm9yZXtjb250ZW50OiJcZjJhOSJ9LmZhLXZpYWRlby1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMmFhIn0uZmEtc25hcGNoYXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMmFiIn0uZmEtc25hcGNoYXQtZ2hvc3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMmFjIn0uZmEtc25hcGNoYXQtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjJhZCJ9LmZhLXBpZWQtcGlwZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMmFlIn0uZmEtZmlyc3Qtb3JkZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMmIwIn0uZmEteW9hc3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMmIxIn0uZmEtdGhlbWVpc2xlOmJlZm9yZXtjb250ZW50OiJcZjJiMiJ9LmZhLWdvb2dsZS1wbHVzLWNpcmNsZTpiZWZvcmUsLmZhLWdvb2dsZS1wbHVzLW9mZmljaWFsOmJlZm9yZXtjb250ZW50OiJcZjJiMyJ9LmZhLWZhOmJlZm9yZSwuZmEtZm9udC1hd2Vzb21lOmJlZm9yZXtjb250ZW50OiJcZjJiNCJ9LmZhLWhhbmRzaGFrZS1vOmJlZm9yZXtjb250ZW50OiJcZjJiNSJ9LmZhLWVudmVsb3BlLW9wZW46YmVmb3Jle2NvbnRlbnQ6IlxmMmI2In0uZmEtZW52ZWxvcGUtb3Blbi1vOmJlZm9yZXtjb250ZW50OiJcZjJiNyJ9LmZhLWxpbm9kZTpiZWZvcmV7Y29udGVudDoiXGYyYjgifS5mYS1hZGRyZXNzLWJvb2s6YmVmb3Jle2NvbnRlbnQ6IlxmMmI5In0uZmEtYWRkcmVzcy1ib29rLW86YmVmb3Jle2NvbnRlbnQ6IlxmMmJhIn0uZmEtdmNhcmQ6YmVmb3JlLC5mYS1hZGRyZXNzLWNhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMmJiIn0uZmEtdmNhcmQtbzpiZWZvcmUsLmZhLWFkZHJlc3MtY2FyZC1vOmJlZm9yZXtjb250ZW50OiJcZjJiYyJ9LmZhLXVzZXItY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjJiZCJ9LmZhLXVzZXItY2lyY2xlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMmJlIn0uZmEtdXNlci1vOmJlZm9yZXtjb250ZW50OiJcZjJjMCJ9LmZhLWlkLWJhZGdlOmJlZm9yZXtjb250ZW50OiJcZjJjMSJ9LmZhLWRyaXZlcnMtbGljZW5zZTpiZWZvcmUsLmZhLWlkLWNhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMmMyIn0uZmEtZHJpdmVycy1saWNlbnNlLW86YmVmb3JlLC5mYS1pZC1jYXJkLW86YmVmb3Jle2NvbnRlbnQ6IlxmMmMzIn0uZmEtcXVvcmE6YmVmb3Jle2NvbnRlbnQ6IlxmMmM0In0uZmEtZnJlZS1jb2RlLWNhbXA6YmVmb3Jle2NvbnRlbnQ6IlxmMmM1In0uZmEtdGVsZWdyYW06YmVmb3Jle2NvbnRlbnQ6IlxmMmM2In0uZmEtdGhlcm1vbWV0ZXItNDpiZWZvcmUsLmZhLXRoZXJtb21ldGVyOmJlZm9yZSwuZmEtdGhlcm1vbWV0ZXItZnVsbDpiZWZvcmV7Y29udGVudDoiXGYyYzcifS5mYS10aGVybW9tZXRlci0zOmJlZm9yZSwuZmEtdGhlcm1vbWV0ZXItdGhyZWUtcXVhcnRlcnM6YmVmb3Jle2NvbnRlbnQ6IlxmMmM4In0uZmEtdGhlcm1vbWV0ZXItMjpiZWZvcmUsLmZhLXRoZXJtb21ldGVyLWhhbGY6YmVmb3Jle2NvbnRlbnQ6IlxmMmM5In0uZmEtdGhlcm1vbWV0ZXItMTpiZWZvcmUsLmZhLXRoZXJtb21ldGVyLXF1YXJ0ZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMmNhIn0uZmEtdGhlcm1vbWV0ZXItMDpiZWZvcmUsLmZhLXRoZXJtb21ldGVyLWVtcHR5OmJlZm9yZXtjb250ZW50OiJcZjJjYiJ9LmZhLXNob3dlcjpiZWZvcmV7Y29udGVudDoiXGYyY2MifS5mYS1iYXRodHViOmJlZm9yZSwuZmEtczE1OmJlZm9yZSwuZmEtYmF0aDpiZWZvcmV7Y29udGVudDoiXGYyY2QifS5mYS1wb2RjYXN0OmJlZm9yZXtjb250ZW50OiJcZjJjZSJ9LmZhLXdpbmRvdy1tYXhpbWl6ZTpiZWZvcmV7Y29udGVudDoiXGYyZDAifS5mYS13aW5kb3ctbWluaW1pemU6YmVmb3Jle2NvbnRlbnQ6IlxmMmQxIn0uZmEtd2luZG93LXJlc3RvcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMmQyIn0uZmEtdGltZXMtcmVjdGFuZ2xlOmJlZm9yZSwuZmEtd2luZG93LWNsb3NlOmJlZm9yZXtjb250ZW50OiJcZjJkMyJ9LmZhLXRpbWVzLXJlY3RhbmdsZS1vOmJlZm9yZSwuZmEtd2luZG93LWNsb3NlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMmQ0In0uZmEtYmFuZGNhbXA6YmVmb3Jle2NvbnRlbnQ6IlxmMmQ1In0uZmEtZ3JhdjpiZWZvcmV7Y29udGVudDoiXGYyZDYifS5mYS1ldHN5OmJlZm9yZXtjb250ZW50OiJcZjJkNyJ9LmZhLWltZGI6YmVmb3Jle2NvbnRlbnQ6IlxmMmQ4In0uZmEtcmF2ZWxyeTpiZWZvcmV7Y29udGVudDoiXGYyZDkifS5mYS1lZXJjYXN0OmJlZm9yZXtjb250ZW50OiJcZjJkYSJ9LmZhLW1pY3JvY2hpcDpiZWZvcmV7Y29udGVudDoiXGYyZGIifS5mYS1zbm93Zmxha2UtbzpiZWZvcmV7Y29udGVudDoiXGYyZGMifS5mYS1zdXBlcnBvd2VyczpiZWZvcmV7Y29udGVudDoiXGYyZGQifS5mYS13cGV4cGxvcmVyOmJlZm9yZXtjb250ZW50OiJcZjJkZSJ9LmZhLW1lZXR1cDpiZWZvcmV7Y29udGVudDoiXGYyZTAifS5zci1vbmx5e3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDtoZWlnaHQ6MXB4O3BhZGRpbmc6MDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47Y2xpcDpyZWN0KDAsIDAsIDAsIDApO2JvcmRlcjowfS5zci1vbmx5LWZvY3VzYWJsZTphY3RpdmUsLnNyLW9ubHktZm9jdXNhYmxlOmZvY3Vze3Bvc2l0aW9uOnN0YXRpYzt3aWR0aDphdXRvO2hlaWdodDphdXRvO21hcmdpbjowO292ZXJmbG93OnZpc2libGU7Y2xpcDphdXRvfQoKLypIaWxpZ2h0IGpzKi8KLmhsanN7ZGlzcGxheTpibG9jaztvdmVyZmxvdy14OmF1dG87cGFkZGluZzowLjVlbTtiYWNrZ3JvdW5kOiNmMGYwZjA7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0Om5vbmV9LmhsanMsLmhsanMtc3Vic3QsLmhsanMtdGFnIC5obGpzLXRpdGxlLC5uZ2lueCAuaGxqcy10aXRsZXtjb2xvcjpibGFja30uaGxqcy1zdHJpbmcsLmhsanMtdGl0bGUsLmhsanMtY29uc3RhbnQsLmhsanMtcGFyZW50LC5obGpzLXRhZyAuaGxqcy12YWx1ZSwuaGxqcy1ydWxlcyAuaGxqcy12YWx1ZSwuaGxqcy1wcmVwcm9jZXNzb3IsLmhsanMtcHJhZ21hLC5oYW1sIC5obGpzLXN5bWJvbCwucnVieSAuaGxqcy1zeW1ib2wsLnJ1YnkgLmhsanMtc3ltYm9sIC5obGpzLXN0cmluZywuaGxqcy10ZW1wbGF0ZV90YWcsLmRqYW5nbyAuaGxqcy12YXJpYWJsZSwuc21hbGx0YWxrIC5obGpzLWNsYXNzLC5obGpzLWFkZGl0aW9uLC5obGpzLWZsb3csLmhsanMtc3RyZWFtLC5iYXNoIC5obGpzLXZhcmlhYmxlLC5hcGFjaGUgLmhsanMtdGFnLC5hcGFjaGUgLmhsanMtY2JyYWNrZXQsLnRleCAuaGxqcy1jb21tYW5kLC50ZXggLmhsanMtc3BlY2lhbCwuZXJsYW5nX3JlcGwgLmhsanMtZnVuY3Rpb25fb3JfYXRvbSwuYXNjaWlkb2MgLmhsanMtaGVhZGVyLC5tYXJrZG93biAuaGxqcy1oZWFkZXIsLmNvZmZlZXNjcmlwdCAuaGxqcy1hdHRyaWJ1dGV7Y29sb3I6IzgwMH0uc21hcnRxdW90ZSwuaGxqcy1jb21tZW50LC5obGpzLWFubm90YXRpb24sLmhsanMtdGVtcGxhdGVfY29tbWVudCwuZGlmZiAuaGxqcy1oZWFkZXIsLmhsanMtY2h1bmssLmFzY2lpZG9jIC5obGpzLWJsb2NrcXVvdGUsLm1hcmtkb3duIC5obGpzLWJsb2NrcXVvdGV7Y29sb3I6Izg4OH0uaGxqcy1udW1iZXIsLmhsanMtZGF0ZSwuaGxqcy1yZWdleHAsLmhsanMtbGl0ZXJhbCwuaGxqcy1oZXhjb2xvciwuc21hbGx0YWxrIC5obGpzLXN5bWJvbCwuc21hbGx0YWxrIC5obGpzLWNoYXIsLmdvIC5obGpzLWNvbnN0YW50LC5obGpzLWNoYW5nZSwubGFzc28gLmhsanMtdmFyaWFibGUsLm1ha2VmaWxlIC5obGpzLXZhcmlhYmxlLC5hc2NpaWRvYyAuaGxqcy1idWxsZXQsLm1hcmtkb3duIC5obGpzLWJ1bGxldCwuYXNjaWlkb2MgLmhsanMtbGlua191cmwsLm1hcmtkb3duIC5obGpzLWxpbmtfdXJse2NvbG9yOiMwODB9LmhsanMtbGFiZWwsLmhsanMtamF2YWRvYywucnVieSAuaGxqcy1zdHJpbmcsLmhsanMtZGVjb3JhdG9yLC5obGpzLWZpbHRlciAuaGxqcy1hcmd1bWVudCwuaGxqcy1sb2NhbHZhcnMsLmhsanMtYXJyYXksLmhsanMtYXR0cl9zZWxlY3RvciwuaGxqcy1pbXBvcnRhbnQsLmhsanMtcHNldWRvLC5obGpzLXBpLC5oYW1sIC5obGpzLWJ1bGxldCwuaGxqcy1kb2N0eXBlLC5obGpzLWRlbGV0aW9uLC5obGpzLWVudnZhciwuaGxqcy1zaGViYW5nLC5hcGFjaGUgLmhsanMtc3FicmFja2V0LC5uZ2lueCAuaGxqcy1idWlsdF9pbiwudGV4IC5obGpzLWZvcm11bGEsLmVybGFuZ19yZXBsIC5obGpzLXJlc2VydmVkLC5obGpzLXByb21wdCwuYXNjaWlkb2MgLmhsanMtbGlua19sYWJlbCwubWFya2Rvd24gLmhsanMtbGlua19sYWJlbCwudmhkbCAuaGxqcy1hdHRyaWJ1dGUsLmNsb2p1cmUgLmhsanMtYXR0cmlidXRlLC5hc2NpaWRvYyAuaGxqcy1hdHRyaWJ1dGUsLmxhc3NvIC5obGpzLWF0dHJpYnV0ZSwuY29mZmVlc2NyaXB0IC5obGpzLXByb3BlcnR5LC5obGpzLXBob255e2NvbG9yOiM4OGZ9LmhsanMta2V5d29yZCwuaGxqcy1pZCwuaGxqcy10aXRsZSwuaGxqcy1idWlsdF9pbiwuY3NzIC5obGpzLXRhZywuaGxqcy1qYXZhZG9jdGFnLC5obGpzLXBocGRvYywuaGxqcy1kYXJ0ZG9jLC5obGpzLXlhcmRvY3RhZywuc21hbGx0YWxrIC5obGpzLWNsYXNzLC5obGpzLXdpbnV0aWxzLC5iYXNoIC5obGpzLXZhcmlhYmxlLC5hcGFjaGUgLmhsanMtdGFnLC5obGpzLXR5cGUsLmhsanMtdHlwZW5hbWUsLnRleCAuaGxqcy1jb21tYW5kLC5hc2NpaWRvYyAuaGxqcy1zdHJvbmcsLm1hcmtkb3duIC5obGpzLXN0cm9uZywuaGxqcy1yZXF1ZXN0LC5obGpzLXN0YXR1c3tmb250LXdlaWdodDpib2xkfS5hc2NpaWRvYyAuaGxqcy1lbXBoYXNpcywubWFya2Rvd24gLmhsanMtZW1waGFzaXN7Zm9udC1zdHlsZTppdGFsaWN9Lm5naW54IC5obGpzLWJ1aWx0X2lue2ZvbnQtd2VpZ2h0Om5vcm1hbH0uY29mZmVlc2NyaXB0IC5qYXZhc2NyaXB0LC5qYXZhc2NyaXB0IC54bWwsLmxhc3NvIC5tYXJrdXAsLnRleCAuaGxqcy1mb3JtdWxhLC54bWwgLmphdmFzY3JpcHQsLnhtbCAudmJzY3JpcHQsLnhtbCAuY3NzLC54bWwgLmhsanMtY2RhdGF7b3BhY2l0eTowLjV9'>
<link rel="stylesheet" id=js_confirm_demo_css href='data:/text/plain;base64,Ym9keSB7CiAgICBiYWNrZ3JvdW5kOiAjZmZmOwp9CgoubmF2YmFyLXJpZ2h0IGlmcmFtZSB7CiAgICBtYXJnaW46IDExcHggMTBweCAwIDEwcHg7Cn0KCi5hZmZpeCB7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IDA7CiAgICB3aWR0aDogMTAwJQp9CgouamNvbmZpcm0tbG9nbyB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uL2pxdWVyeS1jb25maXJtLnBuZycpOwogICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluOwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOwogICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICAgIHdpZHRoOiAxNTJweDsKfQoKLmRvd25sb2FkLWJ0bnMgLmJ0bnsKICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgY29sb3I6IGRvZGdlcmJsdWU7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7Cn0KCmtiZC5ibHVlIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICMyOTgwYjk7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIHBhZGRpbmctbGVmdDogMTBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDEwcHgKfQoKLnNlY3Rpb24gewogICAgYm9yZGVyLWxlZnQ6IHNvbGlkIDFweCAjZGRkOwogICAgcGFkZGluZy1sZWZ0OiAxNXB4Owp9Cgouc3BhY2VyMTUgewogICAgaGVpZ2h0OiAxNXB4Cn0KCnByZSBvbCB7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudAp9CgouYnRuIHsKICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7CiAgICBib3JkZXI6IDAKfQoKLmNvbSB7CiAgICBjb2xvcjogIzkzYTFhMQp9CgoubGl0IHsKICAgIGNvbG9yOiAjMTk1ZjkxCn0KCi5jbG8sIC5vcG4sIC5wdW4gewogICAgY29sb3I6ICM5M2ExYTEKfQoKLmZ1biB7CiAgICBjb2xvcjogI2RjMzIyZgp9CgouYXR2LCAuc3RyIHsKICAgIGNvbG9yOiAjRDE0Cn0KCi5rd2QsIC5wcmV0dHlwcmludCAudGFnIHsKICAgIGNvbG9yOiAjMWUzNDdiCn0KCi5hdG4sIC5kZWMsIC50eXAsIC52YXIgewogICAgY29sb3I6IHRlYWwKfQoKLnBsbiB7CiAgICBjb2xvcjogIzQ4NDg0Ywp9CgoucHJldHR5cHJpbnQgewogICAgcGFkZGluZzogOHB4OwogICAgYmFja2dyb3VuZC1jb2xvcjogI0ZCRkJGQzsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMWUxZTgKfQoKLnByZXR0eXByaW50LmxpbmVudW1zIHsKICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgNDBweCAwIDAgI2ZiZmJmYywgaW5zZXQgNDFweCAwIDAgI2VjZWNmMDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDQ4cHggMCAwICNmYmZiZmMsIGluc2V0IDQ4cHggMCAwICNGRkZGRkY7Cn0KCm9sLmxpbmVudW1zIHsKICAgIG1hcmdpbjogMCAwIDAgMzNweAp9CgpvbC5saW5lbnVtcyBsaSB7CiAgICBwYWRkaW5nLWxlZnQ6IDEycHg7CiAgICBjb2xvcjogI2JlYmVjNTsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZgp9Cgouc3BlY2lhbCB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICBmb250LXdlaWdodDogNzAwICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogI2JjMDAwMCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogIzAwMAp9Cgp1bC5uYXYubmF2LWxpc3QgbGkgYSB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CnVsLm5hdi5uYXYtbGlzdCBsaSA+IGEgewogICAgY29sb3I6ICM0NDQ7CiAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgIGJveC1zaGFkb3c6IC0xcHggMHB4IDAgLTBweCAjZGRkOwp9CnVsLm5hdi5uYXYtbGlzdCBsaSA+IGE6aG92ZXIgewogICAgYm94LXNoYWRvdzogLTdweCAwcHggMCAtNXB4IGJsYWNrOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KdWwubmF2Lm5hdi1saXN0IGxpIGxpIGEgewogICAgY29sb3I6ICM0NDQ7CiAgICBwYWRkaW5nOiAwcHggMjBweDsKICAgIGJveC1zaGFkb3c6IC0xcHggMHB4IDAgLTBweCAjZGRkOwp9CnVsLm5hdi5uYXYtbGlzdCBsaSBsaTpsYXN0LWNoaWxkIGEgewogICAgbWFyZ2luLWJvdHRvbTogNXB4Owp9CnVsLm5hdi5uYXYtbGlzdCBsaS5hY3RpdmUgPiBhIHsKICAgIGNvbG9yOiAjMzQ5OERCOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBib3gtc2hhZG93OiAtN3B4IDBweCAwIC01cHggIzM0OThEQjsKfQp1bC5uYXYubmF2LWxpc3QgbGkgdWwgewogICAgZGlzcGxheTogbm9uZTsKfQp1bC5uYXYubmF2LWxpc3QgbGkuYWN0aXZlIHVsIHsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CnVsLm5hdi5uYXYtbGlzdCBsaS5uby1iLWwgYXsKICAgIGJveC1zaGFkb3c6IG5vbmU7Cn0KLm5hdmhlYWRlcnsKICAgIG1hcmdpbi1ib3R0b206IDBweDsKICAgIGJhY2tncm91bmQ6IHdoaXRlOwp9Ci5oZWFkZXJ7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBwYWRkaW5nOiAzMHB4IDA7CiAgICBjb2xvcjogI2NkYmZlMzsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMCwwLDAsLjEpOwogICAgYmFja2dyb3VuZC1jb2xvcjogIzFGOTBFMjsKICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLGxlZnQgdG9wLGxlZnQgYm90dG9tLGZyb20oIzNEODNCRiksdG8oIzFGOTBFMikpOwogICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMzRDgzQkYgMCwjMUY5MEUyIDEwMCUpOwogICAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwjM0Q4M0JGIDAsIzFGOTBFMiAxMDAlKTsKICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzNEODNCRiAwLCMxRjkwRTIgMTAwJSk7CmZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyMzRDgzQkYnLCBlbmRDb2xvcnN0cj0nIzFGOTBFMicsIEdyYWRpZW50VHlwZT0wKTsKICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKICAgIGNvbG9yOiB3aGl0ZTsKfQouaGVhZGVyIHB7CiAgICBjb2xvcjogI2Y4ZjhmODsKICAgIGZvbnQtc2l6ZTogMjRweDsKfQouaGVhZGVyIGltZ3sKICAgIG1heC13aWR0aDogNDAwcHg7Cn0KQG1lZGlhIGFsbCBhbmQgKG1heC13aWR0aDogNTAwcHgpewogICAgLmhlYWRlciBpbWd7CiAgICAgICAgbWF4LXdpZHRoOiBub25lOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgfQogICAgLmhlYWRlciAuYnRuewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgfQogICAgLmhlYWRlciAuYnRuICsgLmJ0bnsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICB9Cn0KLnZ7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7Cn0KCi5zcGFjZTEwIHsKICAgIGhlaWdodDogMTBweDsKfQpib2R5IHsKICAgIGZvbnQtZmFtaWx5OiBTZWdvZSBVSSwgRnJ1dGlnZXIsIEZydXRpZ2VyIExpbm90eXBlLCBEZWphdnUgU2FucywgSGVsdmV0aWNhIE5ldWUsIEFyaWFsLCBzYW5zLXNlcmlmOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgpAbWVkaWEgYWxsIGFuZCAobWF4LXdpZHRoOiA5OTJweCkgewogICAgI215LW5hdi1zdGlja3ktd3JhcHBlcnsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQp9'>
<script id=js_confirm_js src='data:/text/plain;base64,LyohCiAqIGpxdWVyeS1jb25maXJtIHYzLjMuNCAoaHR0cDovL2NyYWZ0cGlwLmdpdGh1Yi5pby9qcXVlcnktY29uZmlybS8pCiAqIEF1dGhvcjogQm9uaWZhY2UgUGVyZWlyYQogKiBXZWJzaXRlOiB3d3cuY3JhZnRwaXAuY29tCiAqIENvbnRhY3Q6IGhleUBjcmFmdHBpcC5jb20KICoKICogQ29weXJpZ2h0IDIwMTMtMjAxOSBqcXVlcnktY29uZmlybQogKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS9jcmFmdHBpcC9qcXVlcnktY29uZmlybS9ibG9iL21hc3Rlci9MSUNFTlNFKQogKi8KCgovKioKICogVU1EIChVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24pIHRvIHN1cHBvcnQgQ29tbW9uSlMsIEFNRCBhbmQgYnJvd3NlcgogKiBUaGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL3VtZGpzL3VtZAogKi8KKGZ1bmN0aW9uKGZhY3RvcnkpewogICAgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKXsKICAgICAgICAvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuCiAgICAgICAgZGVmaW5lKFsnanF1ZXJ5J10sIGZhY3RvcnkpOwogICAgfWVsc2UgaWYodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpewogICAgICAgIC8vIE5vZGUvQ29tbW9uSlMKICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHJvb3QsIGpRdWVyeSl7CiAgICAgICAgICAgIGlmKGpRdWVyeSA9PT0gdW5kZWZpbmVkKXsKICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUoJ2pRdWVyeScpIHJldHVybnMgYSBmYWN0b3J5IHRoYXQgcmVxdWlyZXMgd2luZG93IHRvCiAgICAgICAgICAgICAgICAvLyBidWlsZCBhIGpRdWVyeSBpbnN0YW5jZSwgd2Ugbm9ybWFsaXplIGhvdyB3ZSB1c2UgbW9kdWxlcwogICAgICAgICAgICAgICAgLy8gdGhhdCByZXF1aXJlIHRoaXMgcGF0dGVybiBidXQgdGhlIHdpbmRvdyBwcm92aWRlZCBpcyBhIG5vb3AKICAgICAgICAgICAgICAgIC8vIGlmIGl0J3MgZGVmaW5lZCAoaG93IGpxdWVyeSB3b3JrcykKICAgICAgICAgICAgICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKXsKICAgICAgICAgICAgICAgICAgICBqUXVlcnkgPSByZXF1aXJlKCdqcXVlcnknKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5Jykocm9vdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZmFjdG9yeShqUXVlcnkpOwogICAgICAgICAgICByZXR1cm4galF1ZXJ5OwogICAgICAgIH07CiAgICB9ZWxzZXsKICAgICAgICAvLyBCcm93c2VyIGdsb2JhbHMKICAgICAgICBmYWN0b3J5KGpRdWVyeSk7CiAgICB9Cn0oZnVuY3Rpb24oJCl7CiAgICAidXNlIHN0cmljdCI7CgogICAgLy8gbG9jYWxseSBhc3NpZ24gd2luZG93CiAgICB2YXIgdyA9IHdpbmRvdzsKICAgIC8vIHcuamNvbmZpcm0KICAgIC8vIHcuSmNvbmZpcm07CgogICAgJC5mbi5jb25maXJtID0gZnVuY3Rpb24ob3B0aW9ucywgb3B0aW9uMil7CiAgICAgICAgaWYodHlwZW9mIG9wdGlvbnMgPT09ICd1bmRlZmluZWQnKSBvcHRpb25zID0ge307CiAgICAgICAgaWYodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKXsKICAgICAgICAgICAgb3B0aW9ucyA9IHsKICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG9wdGlvbnMsCiAgICAgICAgICAgICAgICB0aXRsZTogKG9wdGlvbjIpID8gb3B0aW9uMiA6IGZhbHNlCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIC8qCiAgICAgICAgICogIEFsaWFzIG9mICQuY29uZmlybSB0byBlbXVsYXRlIG5hdGl2ZSBjb25maXJtKCkKICAgICAgICAgKi8KICAgICAgICAkKHRoaXMpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsKICAgICAgICAgICAgaWYoJHRoaXMuYXR0cignamMtYXR0YWNoZWQnKSl7CiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ2pDb25maXJtIGhhcyBhbHJlYWR5IGJlZW4gYXR0YWNoZWQgdG8gdGhpcyBlbGVtZW50ICcsICR0aGlzWzBdKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICB2YXIgamNPcHRpb24gPSAkLmV4dGVuZCh7fSwgb3B0aW9ucyk7CiAgICAgICAgICAgICAgICBpZigkdGhpcy5hdHRyKCdkYXRhLXRpdGxlJykpCiAgICAgICAgICAgICAgICAgICAgamNPcHRpb25bJ3RpdGxlJ10gPSAkdGhpcy5hdHRyKCdkYXRhLXRpdGxlJyk7CiAgICAgICAgICAgICAgICBpZigkdGhpcy5hdHRyKCdkYXRhLWNvbnRlbnQnKSkKICAgICAgICAgICAgICAgICAgICBqY09wdGlvblsnY29udGVudCddID0gJHRoaXMuYXR0cignZGF0YS1jb250ZW50Jyk7CiAgICAgICAgICAgICAgICBpZih0eXBlb2YgamNPcHRpb25bJ2J1dHRvbnMnXSA9PT0gJ3VuZGVmaW5lZCcpCiAgICAgICAgICAgICAgICAgICAgamNPcHRpb25bJ2J1dHRvbnMnXSA9IHt9OwoKICAgICAgICAgICAgICAgIGpjT3B0aW9uWyckdGFyZ2V0J10gPSAkdGhpczsKICAgICAgICAgICAgICAgIGlmKCR0aGlzLmF0dHIoJ2hyZWYnKSAmJiBPYmplY3Qua2V5cyhqY09wdGlvblsnYnV0dG9ucyddKS5sZW5ndGggPT09IDApewogICAgICAgICAgICAgICAgICAgIHZhciBidXR0b25zID0gJC5leHRlbmQodHJ1ZSwge30sIHcuamNvbmZpcm0ucGx1Z2luRGVmYXVsdHMuZGVmYXVsdEJ1dHRvbnMsICh3Lmpjb25maXJtLmRlZmF1bHRzIHx8IHt9KS5kZWZhdWx0QnV0dG9ucyB8fCB7fSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0QnRuID0gT2JqZWN0LmtleXMoYnV0dG9ucylbMF07CiAgICAgICAgICAgICAgICAgICAgamNPcHRpb25bJ2J1dHRvbnMnXSA9IGJ1dHRvbnM7CiAgICAgICAgICAgICAgICAgICAgamNPcHRpb24uYnV0dG9uc1tmaXJzdEJ0bl0uYWN0aW9uID0gZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9ICR0aGlzLmF0dHIoJ2hyZWYnKTsKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgamNPcHRpb25bJ2Nsb3NlSWNvbiddID0gZmFsc2U7CiAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSAkLmNvbmZpcm0oamNPcHRpb24pOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICR0aGlzLmF0dHIoJ2pjLWF0dGFjaGVkJywgdHJ1ZSk7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuICQodGhpcyk7CiAgICB9OwogICAgJC5jb25maXJtID0gZnVuY3Rpb24ob3B0aW9ucywgb3B0aW9uMil7CiAgICAgICAgaWYodHlwZW9mIG9wdGlvbnMgPT09ICd1bmRlZmluZWQnKSBvcHRpb25zID0ge307CiAgICAgICAgaWYodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKXsKICAgICAgICAgICAgb3B0aW9ucyA9IHsKICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG9wdGlvbnMsCiAgICAgICAgICAgICAgICB0aXRsZTogKG9wdGlvbjIpID8gb3B0aW9uMiA6IGZhbHNlCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICB2YXIgcHV0RGVmYXVsdEJ1dHRvbnMgPSAhKG9wdGlvbnNbJ2J1dHRvbnMnXSA9PT0gZmFsc2UpOwoKICAgICAgICBpZih0eXBlb2Ygb3B0aW9uc1snYnV0dG9ucyddICE9PSAnb2JqZWN0JykKICAgICAgICAgICAgb3B0aW9uc1snYnV0dG9ucyddID0ge307CgogICAgICAgIGlmKE9iamVjdC5rZXlzKG9wdGlvbnNbJ2J1dHRvbnMnXSkubGVuZ3RoID09PSAwICYmIHB1dERlZmF1bHRCdXR0b25zKXsKICAgICAgICAgICAgdmFyIGJ1dHRvbnMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgdy5qY29uZmlybS5wbHVnaW5EZWZhdWx0cy5kZWZhdWx0QnV0dG9ucywgKHcuamNvbmZpcm0uZGVmYXVsdHMgfHwge30pLmRlZmF1bHRCdXR0b25zIHx8IHt9KTsKICAgICAgICAgICAgb3B0aW9uc1snYnV0dG9ucyddID0gYnV0dG9uczsKICAgICAgICB9CgogICAgICAgIC8qCiAgICAgICAgICogIEFsaWFzIG9mIGpjb25maXJtCiAgICAgICAgICovCiAgICAgICAgcmV0dXJuIHcuamNvbmZpcm0ob3B0aW9ucyk7CiAgICB9OwogICAgJC5hbGVydCA9IGZ1bmN0aW9uKG9wdGlvbnMsIG9wdGlvbjIpewogICAgICAgIGlmKHR5cGVvZiBvcHRpb25zID09PSAndW5kZWZpbmVkJykgb3B0aW9ucyA9IHt9OwogICAgICAgIGlmKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJyl7CiAgICAgICAgICAgIG9wdGlvbnMgPSB7CiAgICAgICAgICAgICAgICBjb250ZW50OiBvcHRpb25zLAogICAgICAgICAgICAgICAgdGl0bGU6IChvcHRpb24yKSA/IG9wdGlvbjIgOiBmYWxzZQogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgdmFyIHB1dERlZmF1bHRCdXR0b25zID0gIShvcHRpb25zWydidXR0b25zJ10gPT09IGZhbHNlKTsKCiAgICAgICAgaWYodHlwZW9mIG9wdGlvbnMuYnV0dG9ucyAhPT0gJ29iamVjdCcpCiAgICAgICAgICAgIG9wdGlvbnMuYnV0dG9ucyA9IHt9OwoKICAgICAgICBpZihPYmplY3Qua2V5cyhvcHRpb25zWydidXR0b25zJ10pLmxlbmd0aCA9PT0gMCAmJiBwdXREZWZhdWx0QnV0dG9ucyl7CiAgICAgICAgICAgIHZhciBidXR0b25zID0gJC5leHRlbmQodHJ1ZSwge30sIHcuamNvbmZpcm0ucGx1Z2luRGVmYXVsdHMuZGVmYXVsdEJ1dHRvbnMsICh3Lmpjb25maXJtLmRlZmF1bHRzIHx8IHt9KS5kZWZhdWx0QnV0dG9ucyB8fCB7fSk7CiAgICAgICAgICAgIHZhciBmaXJzdEJ0biA9IE9iamVjdC5rZXlzKGJ1dHRvbnMpWzBdOwogICAgICAgICAgICBvcHRpb25zWydidXR0b25zJ11bZmlyc3RCdG5dID0gYnV0dG9uc1tmaXJzdEJ0bl07CiAgICAgICAgfQogICAgICAgIC8qCiAgICAgICAgICogIEFsaWFzIG9mIGpjb25maXJtCiAgICAgICAgICovCiAgICAgICAgcmV0dXJuIHcuamNvbmZpcm0ob3B0aW9ucyk7CiAgICB9OwogICAgJC5kaWFsb2cgPSBmdW5jdGlvbihvcHRpb25zLCBvcHRpb24yKXsKICAgICAgICBpZih0eXBlb2Ygb3B0aW9ucyA9PT0gJ3VuZGVmaW5lZCcpIG9wdGlvbnMgPSB7fTsKICAgICAgICBpZih0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpewogICAgICAgICAgICBvcHRpb25zID0gewogICAgICAgICAgICAgICAgY29udGVudDogb3B0aW9ucywKICAgICAgICAgICAgICAgIHRpdGxlOiAob3B0aW9uMikgPyBvcHRpb24yIDogZmFsc2UsCiAgICAgICAgICAgICAgICBjbG9zZUljb246IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBjbG9zZSB0aGUgbW9kYWwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIG9wdGlvbnNbJ2J1dHRvbnMnXSA9IHt9OyAvLyBwdXJnZSBidXR0b25zCgogICAgICAgIGlmKHR5cGVvZiBvcHRpb25zWydjbG9zZUljb24nXSA9PT0gJ3VuZGVmaW5lZCcpewogICAgICAgICAgICAvLyBEaWFsb2cgbXVzdCBoYXZlIGEgY2xvc2VJY29uLgogICAgICAgICAgICBvcHRpb25zWydjbG9zZUljb24nXSA9IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoKICAgICAgICAgKiAgQWxpYXMgb2YgamNvbmZpcm0KICAgICAgICAgKi8KICAgICAgICBvcHRpb25zLmNvbmZpcm1LZXlzID0gWzEzXTsKICAgICAgICByZXR1cm4gdy5qY29uZmlybShvcHRpb25zKTsKICAgIH07CgogICAgdy5qY29uZmlybSA9IGZ1bmN0aW9uKG9wdGlvbnMpewogICAgICAgIGlmKHR5cGVvZiBvcHRpb25zID09PSAndW5kZWZpbmVkJykgb3B0aW9ucyA9IHt9OwogICAgICAgIC8qCiAgICAgICAgICogaW5pdGlhbCBmdW5jdGlvbiBmb3IgY2FsbGluZy4KICAgICAgICAgKi8KICAgICAgICB2YXIgcGx1Z2luT3B0aW9ucyA9ICQuZXh0ZW5kKHRydWUsIHt9LCB3Lmpjb25maXJtLnBsdWdpbkRlZmF1bHRzKTsKICAgICAgICBpZih3Lmpjb25maXJtLmRlZmF1bHRzKXsKICAgICAgICAgICAgcGx1Z2luT3B0aW9ucyA9ICQuZXh0ZW5kKHRydWUsIHBsdWdpbk9wdGlvbnMsIHcuamNvbmZpcm0uZGVmYXVsdHMpOwogICAgICAgIH0KCiAgICAgICAgLyoKICAgICAgICAgKiBtZXJnZSBvcHRpb25zIHdpdGggcGx1Z2luIGRlZmF1bHRzLgogICAgICAgICAqLwogICAgICAgIHBsdWdpbk9wdGlvbnMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgcGx1Z2luT3B0aW9ucywgb3B0aW9ucyk7CiAgICAgICAgdmFyIGluc3RhbmNlID0gbmV3IHcuSmNvbmZpcm0ocGx1Z2luT3B0aW9ucyk7CiAgICAgICAgdy5qY29uZmlybS5pbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7CiAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgfTsKICAgIHcuSmNvbmZpcm0gPSBmdW5jdGlvbihvcHRpb25zKXsKICAgICAgICAvKgogICAgICAgICAqIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIEpjb25maXJtLAogICAgICAgICAqIG9wdGlvbnMgPSB1c2VyIG9wdGlvbnMuCiAgICAgICAgICovCiAgICAgICAgJC5leHRlbmQodGhpcywgb3B0aW9ucyk7CiAgICAgICAgdGhpcy5faW5pdCgpOwogICAgfTsKICAgIHcuSmNvbmZpcm0ucHJvdG90eXBlID0gewogICAgICAgIF9pbml0OiBmdW5jdGlvbigpewogICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CgogICAgICAgICAgICBpZighdy5qY29uZmlybS5pbnN0YW5jZXMubGVuZ3RoKQogICAgICAgICAgICAgICAgdy5qY29uZmlybS5sYXN0Rm9jdXNlZCA9ICQoJ2JvZHknKS5maW5kKCc6Zm9jdXMnKTsKCiAgICAgICAgICAgIHRoaXMuX2lkID0gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogOTk5OTkpOwogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogY29udGVudFBhcnNlZCBtYWludGFpbnMgdGhlIGNvbnRlbnRzIGZvciAkY29udGVudCwgYmVmb3JlIGl0IGlzIHB1dCBpbiBET00KICAgICAgICAgICAgICovCiAgICAgICAgICAgIHRoaXMuY29udGVudFBhcnNlZCA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOwoKICAgICAgICAgICAgaWYoIXRoaXMubGF6eU9wZW4pewogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgIHRoYXQub3BlbigpOwogICAgICAgICAgICAgICAgfSwgMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIF9idWlsZEhUTUw6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsKCiAgICAgICAgICAgIC8vIHByZWZpeCB0aGUgYW5pbWF0aW9uIHN0cmluZyBhbmQgc3RvcmUgaW4gYW5pbWF0aW9uUGFyc2VkCiAgICAgICAgICAgIHRoaXMuX3BhcnNlQW5pbWF0aW9uKHRoaXMuYW5pbWF0aW9uLCAnbycpOwogICAgICAgICAgICB0aGlzLl9wYXJzZUFuaW1hdGlvbih0aGlzLmNsb3NlQW5pbWF0aW9uLCAnYycpOwogICAgICAgICAgICB0aGlzLl9wYXJzZUJnRGlzbWlzc0FuaW1hdGlvbih0aGlzLmJhY2tncm91bmREaXNtaXNzQW5pbWF0aW9uKTsKICAgICAgICAgICAgdGhpcy5fcGFyc2VDb2x1bW5DbGFzcyh0aGlzLmNvbHVtbkNsYXNzKTsKICAgICAgICAgICAgdGhpcy5fcGFyc2VUaGVtZSh0aGlzLnRoZW1lKTsKICAgICAgICAgICAgdGhpcy5fcGFyc2VUeXBlKHRoaXMudHlwZSk7CgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBBcHBlbmQgaHRtbC4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIHZhciB0ZW1wbGF0ZSA9ICQodGhpcy50ZW1wbGF0ZSk7CiAgICAgICAgICAgIHRlbXBsYXRlLmZpbmQoJy5qY29uZmlybS1ib3gnKS5hZGRDbGFzcyh0aGlzLmFuaW1hdGlvblBhcnNlZCkuYWRkQ2xhc3ModGhpcy5iYWNrZ3JvdW5kRGlzbWlzc0FuaW1hdGlvblBhcnNlZCkuYWRkQ2xhc3ModGhpcy50eXBlUGFyc2VkKTsKCiAgICAgICAgICAgIGlmKHRoaXMudHlwZUFuaW1hdGVkKQogICAgICAgICAgICAgICAgdGVtcGxhdGUuZmluZCgnLmpjb25maXJtLWJveCcpLmFkZENsYXNzKCdqY29uZmlybS10eXBlLWFuaW1hdGVkJyk7CgogICAgICAgICAgICBpZih0aGlzLnVzZUJvb3RzdHJhcCl7CiAgICAgICAgICAgICAgICB0ZW1wbGF0ZS5maW5kKCcuamMtYnMzLXJvdycpLmFkZENsYXNzKHRoaXMuYm9vdHN0cmFwQ2xhc3Nlcy5yb3cpOwogICAgICAgICAgICAgICAgdGVtcGxhdGUuZmluZCgnLmpjLWJzMy1yb3cnKS5hZGRDbGFzcygnanVzdGlmeS1jb250ZW50LW1kLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtc20tY2VudGVyIGp1c3RpZnktY29udGVudC14cy1jZW50ZXIganVzdGlmeS1jb250ZW50LWxnLWNlbnRlcicpOwoKICAgICAgICAgICAgICAgIHRlbXBsYXRlLmZpbmQoJy5qY29uZmlybS1ib3gtY29udGFpbmVyJykuYWRkQ2xhc3ModGhpcy5jb2x1bW5DbGFzc1BhcnNlZCk7CgogICAgICAgICAgICAgICAgaWYodGhpcy5jb250YWluZXJGbHVpZCkKICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS5maW5kKCcuamMtYnMzLWNvbnRhaW5lcicpLmFkZENsYXNzKHRoaXMuYm9vdHN0cmFwQ2xhc3Nlcy5jb250YWluZXJGbHVpZCk7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUuZmluZCgnLmpjLWJzMy1jb250YWluZXInKS5hZGRDbGFzcyh0aGlzLmJvb3RzdHJhcENsYXNzZXMuY29udGFpbmVyKTsKICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICB0ZW1wbGF0ZS5maW5kKCcuamNvbmZpcm0tYm94JykuY3NzKCd3aWR0aCcsIHRoaXMuYm94V2lkdGgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZih0aGlzLnRpdGxlQ2xhc3MpCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZS5maW5kKCcuamNvbmZpcm0tdGl0bGUtYycpLmFkZENsYXNzKHRoaXMudGl0bGVDbGFzcyk7CgogICAgICAgICAgICB0ZW1wbGF0ZS5hZGRDbGFzcyh0aGlzLnRoZW1lUGFyc2VkKTsKICAgICAgICAgICAgdmFyIGFyaWFMYWJlbCA9ICdqY29uZmlybS1ib3gnICsgdGhpcy5faWQ7CiAgICAgICAgICAgIHRlbXBsYXRlLmZpbmQoJy5qY29uZmlybS1ib3gnKS5hdHRyKCdhcmlhLWxhYmVsbGVkYnknLCBhcmlhTGFiZWwpLmF0dHIoJ3RhYmluZGV4JywgLTEpOwogICAgICAgICAgICB0ZW1wbGF0ZS5maW5kKCcuamNvbmZpcm0tY29udGVudCcpLmF0dHIoJ2lkJywgYXJpYUxhYmVsKTsKICAgICAgICAgICAgaWYodGhpcy5iZ09wYWNpdHkgIT09IG51bGwpCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZS5maW5kKCcuamNvbmZpcm0tYmcnKS5jc3MoJ29wYWNpdHknLCB0aGlzLmJnT3BhY2l0eSk7CiAgICAgICAgICAgIGlmKHRoaXMucnRsKQogICAgICAgICAgICAgICAgdGVtcGxhdGUuYWRkQ2xhc3MoJ2pjb25maXJtLXJ0bCcpOwoKICAgICAgICAgICAgdGhpcy4kZWwgPSB0ZW1wbGF0ZS5hcHBlbmRUbyh0aGlzLmNvbnRhaW5lcik7CiAgICAgICAgICAgIHRoaXMuJGpjb25maXJtQm94Q29udGFpbmVyID0gdGhpcy4kZWwuZmluZCgnLmpjb25maXJtLWJveC1jb250YWluZXInKTsKICAgICAgICAgICAgdGhpcy4kamNvbmZpcm1Cb3ggPSB0aGlzLiRib2R5ID0gdGhpcy4kZWwuZmluZCgnLmpjb25maXJtLWJveCcpOwogICAgICAgICAgICB0aGlzLiRqY29uZmlybUJnID0gdGhpcy4kZWwuZmluZCgnLmpjb25maXJtLWJnJyk7CiAgICAgICAgICAgIHRoaXMuJHRpdGxlID0gdGhpcy4kZWwuZmluZCgnLmpjb25maXJtLXRpdGxlJyk7CiAgICAgICAgICAgIHRoaXMuJHRpdGxlQ29udGFpbmVyID0gdGhpcy4kZWwuZmluZCgnLmpjb25maXJtLXRpdGxlLWMnKTsKICAgICAgICAgICAgdGhpcy4kY29udGVudCA9IHRoaXMuJGVsLmZpbmQoJ2Rpdi5qY29uZmlybS1jb250ZW50Jyk7CiAgICAgICAgICAgIHRoaXMuJGNvbnRlbnRQYW5lID0gdGhpcy4kZWwuZmluZCgnLmpjb25maXJtLWNvbnRlbnQtcGFuZScpOwogICAgICAgICAgICB0aGlzLiRpY29uID0gdGhpcy4kZWwuZmluZCgnLmpjb25maXJtLWljb24tYycpOwogICAgICAgICAgICB0aGlzLiRjbG9zZUljb24gPSB0aGlzLiRlbC5maW5kKCcuamNvbmZpcm0tY2xvc2VJY29uJyk7CiAgICAgICAgICAgIHRoaXMuJGhvbGRlciA9IHRoaXMuJGVsLmZpbmQoJy5qY29uZmlybS1ob2xkZXInKTsKICAgICAgICAgICAgLy8gdGhpcy4kY29udGVudC5jc3ModGhpcy5fZ2V0Q1NTKHRoaXMuYW5pbWF0aW9uU3BlZWQsIHRoaXMuYW5pbWF0aW9uQm91bmNlKSk7CiAgICAgICAgICAgIHRoaXMuJGJ0bmMgPSB0aGlzLiRlbC5maW5kKCcuamNvbmZpcm0tYnV0dG9ucycpOwogICAgICAgICAgICB0aGlzLiRzY3JvbGxQYW5lID0gdGhpcy4kZWwuZmluZCgnLmpjb25maXJtLXNjcm9sbHBhbmUnKTsKCiAgICAgICAgICAgIHRoYXQuc2V0U3RhcnRpbmdQb2ludCgpOwoKICAgICAgICAgICAgLy8gZm9yIGxvYWRpbmcgY29udGVudCB2aWEgVVJMCiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWFkeSA9ICQuRGVmZXJyZWQoKTsKICAgICAgICAgICAgdGhpcy5fbW9kYWxSZWFkeSA9ICQuRGVmZXJyZWQoKTsKICAgICAgICAgICAgdGhpcy4kaG9sZGVyLmNzcyh7CiAgICAgICAgICAgICAgICAncGFkZGluZy10b3AnOiB0aGlzLm9mZnNldFRvcCwKICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbSc6IHRoaXMub2Zmc2V0Qm90dG9tLAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIHRoaXMuc2V0VGl0bGUoKTsKICAgICAgICAgICAgdGhpcy5zZXRJY29uKCk7CiAgICAgICAgICAgIHRoaXMuX3NldEJ1dHRvbnMoKTsKICAgICAgICAgICAgdGhpcy5fcGFyc2VDb250ZW50KCk7CiAgICAgICAgICAgIHRoaXMuaW5pdERyYWdnYWJsZSgpOwoKICAgICAgICAgICAgaWYodGhpcy5pc0FqYXgpCiAgICAgICAgICAgICAgICB0aGlzLnNob3dMb2FkaW5nKGZhbHNlKTsKCiAgICAgICAgICAgICQud2hlbih0aGlzLl9jb250ZW50UmVhZHksIHRoaXMuX21vZGFsUmVhZHkpLnRoZW4oZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIGlmKHRoYXQuaXNBamF4TG9hZGluZykKICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuaXNBamF4TG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnNldENvbnRlbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5zZXRUaXRsZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnNldEljb24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5oaWRlTG9hZGluZyhmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll91cGRhdGVDb250ZW50TWF4SGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiB0aGF0Lm9uQ29udGVudFJlYWR5ID09PSAnZnVuY3Rpb24nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5vbkNvbnRlbnRSZWFkeSgpOwogICAgICAgICAgICAgICAgICAgIH0sIDUwKTsKICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgLy8gdGhhdC5zZXRDb250ZW50KCk7CiAgICAgICAgICAgICAgICAgICAgdGhhdC5fdXBkYXRlQ29udGVudE1heEhlaWdodCgpOwogICAgICAgICAgICAgICAgICAgIHRoYXQuc2V0VGl0bGUoKTsKICAgICAgICAgICAgICAgICAgICB0aGF0LnNldEljb24oKTsKICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgdGhhdC5vbkNvbnRlbnRSZWFkeSA9PT0gJ2Z1bmN0aW9uJykKICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5vbkNvbnRlbnRSZWFkeSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGNvdW50ZG93biBhZnRlciBjb250ZW50IGhhcyBsb2FkZWQuCiAgICAgICAgICAgICAgICBpZih0aGF0LmF1dG9DbG9zZSkKICAgICAgICAgICAgICAgICAgICB0aGF0Ll9zdGFydENvdW50RG93bigpOwogICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICB0aGF0Ll93YXRjaENvbnRlbnQoKTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBpZih0aGlzLmFuaW1hdGlvbiA9PT0gJ25vbmUnKXsKICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxOwogICAgICAgICAgICAgICAgdGhpcy5hbmltYXRpb25Cb3VuY2UgPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0aGlzLiRib2R5LmNzcyh0aGlzLl9nZXRDU1ModGhpcy5hbmltYXRpb25TcGVlZCwgdGhpcy5hbmltYXRpb25Cb3VuY2UpKTsKICAgICAgICAgICAgdGhpcy4kY29udGVudFBhbmUuY3NzKHRoaXMuX2dldENTUyh0aGlzLmFuaW1hdGlvblNwZWVkLCAxKSk7CiAgICAgICAgICAgIHRoaXMuJGpjb25maXJtQmcuY3NzKHRoaXMuX2dldENTUyh0aGlzLmFuaW1hdGlvblNwZWVkLCAxKSk7CiAgICAgICAgICAgIHRoaXMuJGpjb25maXJtQm94Q29udGFpbmVyLmNzcyh0aGlzLl9nZXRDU1ModGhpcy5hbmltYXRpb25TcGVlZCwgMSkpOwogICAgICAgIH0sCiAgICAgICAgX3R5cGVQcmVmaXg6ICdqY29uZmlybS10eXBlLScsCiAgICAgICAgdHlwZVBhcnNlZDogJycsCiAgICAgICAgX3BhcnNlVHlwZTogZnVuY3Rpb24odHlwZSl7CiAgICAgICAgICAgIHRoaXMudHlwZVBhcnNlZCA9IHRoaXMuX3R5cGVQcmVmaXggKyB0eXBlOwogICAgICAgIH0sCiAgICAgICAgc2V0VHlwZTogZnVuY3Rpb24odHlwZSl7CiAgICAgICAgICAgIHZhciBvbGRDbGFzcyA9IHRoaXMudHlwZVBhcnNlZDsKICAgICAgICAgICAgdGhpcy5fcGFyc2VUeXBlKHR5cGUpOwogICAgICAgICAgICB0aGlzLiRqY29uZmlybUJveC5yZW1vdmVDbGFzcyhvbGRDbGFzcykuYWRkQ2xhc3ModGhpcy50eXBlUGFyc2VkKTsKICAgICAgICB9LAogICAgICAgIHRoZW1lUGFyc2VkOiAnJywKICAgICAgICBfdGhlbWVQcmVmaXg6ICdqY29uZmlybS0nLAogICAgICAgIHNldFRoZW1lOiBmdW5jdGlvbih0aGVtZSl7CiAgICAgICAgICAgIHZhciBwcmV2aW91cyA9IHRoaXMudGhlbWU7CiAgICAgICAgICAgIHRoaXMudGhlbWUgPSB0aGVtZSB8fCB0aGlzLnRoZW1lOwogICAgICAgICAgICB0aGlzLl9wYXJzZVRoZW1lKHRoaXMudGhlbWUpOwogICAgICAgICAgICBpZihwcmV2aW91cykKICAgICAgICAgICAgICAgIHRoaXMuJGVsLnJlbW92ZUNsYXNzKHByZXZpb3VzKTsKICAgICAgICAgICAgdGhpcy4kZWwuYWRkQ2xhc3ModGhpcy50aGVtZVBhcnNlZCk7CiAgICAgICAgICAgIHRoaXMudGhlbWUgPSB0aGVtZTsKICAgICAgICB9LAogICAgICAgIF9wYXJzZVRoZW1lOiBmdW5jdGlvbih0aGVtZSl7CiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgICAgICAgdGhlbWUgPSB0aGVtZS5zcGxpdCgnLCcpOwogICAgICAgICAgICAkLmVhY2godGhlbWUsIGZ1bmN0aW9uKGssIGEpewogICAgICAgICAgICAgICAgaWYoYS5pbmRleE9mKHRoYXQuX3RoZW1lUHJlZml4KSA9PT0gLTEpCiAgICAgICAgICAgICAgICAgICAgdGhlbWVba10gPSB0aGF0Ll90aGVtZVByZWZpeCArICQudHJpbShhKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMudGhlbWVQYXJzZWQgPSB0aGVtZS5qb2luKCcgJykudG9Mb3dlckNhc2UoKTsKICAgICAgICB9LAogICAgICAgIGJhY2tncm91bmREaXNtaXNzQW5pbWF0aW9uUGFyc2VkOiAnJywKICAgICAgICBfYmdEaXNtaXNzUHJlZml4OiAnamNvbmZpcm0taGlsaWdodC0nLAogICAgICAgIF9wYXJzZUJnRGlzbWlzc0FuaW1hdGlvbjogZnVuY3Rpb24oYmdEaXNtaXNzQW5pbWF0aW9uKXsKICAgICAgICAgICAgdmFyIGFuaW1hdGlvbiA9IGJnRGlzbWlzc0FuaW1hdGlvbi5zcGxpdCgnLCcpOwogICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgICAgICQuZWFjaChhbmltYXRpb24sIGZ1bmN0aW9uKGssIGEpewogICAgICAgICAgICAgICAgaWYoYS5pbmRleE9mKHRoYXQuX2JnRGlzbWlzc1ByZWZpeCkgPT09IC0xKQogICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbltrXSA9IHRoYXQuX2JnRGlzbWlzc1ByZWZpeCArICQudHJpbShhKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMuYmFja2dyb3VuZERpc21pc3NBbmltYXRpb25QYXJzZWQgPSBhbmltYXRpb24uam9pbignICcpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgfSwKICAgICAgICBhbmltYXRpb25QYXJzZWQ6ICcnLAogICAgICAgIGNsb3NlQW5pbWF0aW9uUGFyc2VkOiAnJywKICAgICAgICBfYW5pbWF0aW9uUHJlZml4OiAnamNvbmZpcm0tYW5pbWF0aW9uLScsCiAgICAgICAgc2V0QW5pbWF0aW9uOiBmdW5jdGlvbihhbmltYXRpb24pewogICAgICAgICAgICB0aGlzLmFuaW1hdGlvbiA9IGFuaW1hdGlvbiB8fCB0aGlzLmFuaW1hdGlvbjsKICAgICAgICAgICAgdGhpcy5fcGFyc2VBbmltYXRpb24odGhpcy5hbmltYXRpb24sICdvJyk7CiAgICAgICAgfSwKICAgICAgICBfcGFyc2VBbmltYXRpb246IGZ1bmN0aW9uKGFuaW1hdGlvbiwgd2hpY2gpewogICAgICAgICAgICB3aGljaCA9IHdoaWNoIHx8ICdvJzsgLy8gcGFyc2Ugd2hhdCBhbmltYXRpb24gYW5kIHN0b3JlIHdoZXJlLiBvcGVuIG9yIGNsb3NlPwogICAgICAgICAgICB2YXIgYW5pbWF0aW9ucyA9IGFuaW1hdGlvbi5zcGxpdCgnLCcpOwogICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgICAgICQuZWFjaChhbmltYXRpb25zLCBmdW5jdGlvbihrLCBhKXsKICAgICAgICAgICAgICAgIGlmKGEuaW5kZXhPZih0aGF0Ll9hbmltYXRpb25QcmVmaXgpID09PSAtMSkKICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25zW2tdID0gdGhhdC5fYW5pbWF0aW9uUHJlZml4ICsgJC50cmltKGEpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdmFyIGFfc3RyaW5nID0gYW5pbWF0aW9ucy5qb2luKCcgJykudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgaWYod2hpY2ggPT09ICdvJykKICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uUGFyc2VkID0gYV9zdHJpbmc7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VBbmltYXRpb25QYXJzZWQgPSBhX3N0cmluZzsKCiAgICAgICAgICAgIHJldHVybiBhX3N0cmluZzsKICAgICAgICB9LAogICAgICAgIHNldENsb3NlQW5pbWF0aW9uOiBmdW5jdGlvbihjbG9zZUFuaW1hdGlvbil7CiAgICAgICAgICAgIHRoaXMuY2xvc2VBbmltYXRpb24gPSBjbG9zZUFuaW1hdGlvbiB8fCB0aGlzLmNsb3NlQW5pbWF0aW9uOwogICAgICAgICAgICB0aGlzLl9wYXJzZUFuaW1hdGlvbih0aGlzLmNsb3NlQW5pbWF0aW9uLCAnYycpOwogICAgICAgIH0sCiAgICAgICAgc2V0QW5pbWF0aW9uU3BlZWQ6IGZ1bmN0aW9uKHNwZWVkKXsKICAgICAgICAgICAgdGhpcy5hbmltYXRpb25TcGVlZCA9IHNwZWVkIHx8IHRoaXMuYW5pbWF0aW9uU3BlZWQ7CiAgICAgICAgICAgIC8vIHRoaXMuJGJvZHkuY3NzKHRoaXMuX2dldENTUyh0aGlzLmFuaW1hdGlvblNwZWVkLCB0aGlzLmFuaW1hdGlvbkJvdW5jZSkpOwogICAgICAgIH0sCiAgICAgICAgY29sdW1uQ2xhc3NQYXJzZWQ6ICcnLAogICAgICAgIHNldENvbHVtbkNsYXNzOiBmdW5jdGlvbihjb2xDbGFzcyl7CiAgICAgICAgICAgIGlmKCF0aGlzLnVzZUJvb3RzdHJhcCl7CiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oImNhbm5vdCBzZXQgY29sdW1uQ2xhc3MsIHVzZUJvb3RzdHJhcCBpcyBzZXQgdG8gZmFsc2UiKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmNvbHVtbkNsYXNzID0gY29sQ2xhc3MgfHwgdGhpcy5jb2x1bW5DbGFzczsKICAgICAgICAgICAgdGhpcy5fcGFyc2VDb2x1bW5DbGFzcyh0aGlzLmNvbHVtbkNsYXNzKTsKICAgICAgICAgICAgdGhpcy4kamNvbmZpcm1Cb3hDb250YWluZXIuYWRkQ2xhc3ModGhpcy5jb2x1bW5DbGFzc1BhcnNlZCk7CiAgICAgICAgfSwKICAgICAgICBfdXBkYXRlQ29udGVudE1heEhlaWdodDogZnVuY3Rpb24oKXsKICAgICAgICAgICAgdmFyIGhlaWdodCA9ICQod2luZG93KS5oZWlnaHQoKSAtICh0aGlzLiRqY29uZmlybUJveC5vdXRlckhlaWdodCgpIC0gdGhpcy4kY29udGVudFBhbmUub3V0ZXJIZWlnaHQoKSkgLSAodGhpcy5vZmZzZXRUb3AgKyB0aGlzLm9mZnNldEJvdHRvbSk7CiAgICAgICAgICAgIHRoaXMuJGNvbnRlbnRQYW5lLmNzcyh7CiAgICAgICAgICAgICAgICAnbWF4LWhlaWdodCc6IGhlaWdodCArICdweCcKICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBzZXRCb3hXaWR0aDogZnVuY3Rpb24od2lkdGgpewogICAgICAgICAgICBpZih0aGlzLnVzZUJvb3RzdHJhcCl7CiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oImNhbm5vdCBzZXQgYm94V2lkdGgsIHVzZUJvb3RzdHJhcCBpcyBzZXQgdG8gdHJ1ZSIpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuYm94V2lkdGggPSB3aWR0aDsKICAgICAgICAgICAgdGhpcy4kamNvbmZpcm1Cb3guY3NzKCd3aWR0aCcsIHdpZHRoKTsKICAgICAgICB9LAogICAgICAgIF9wYXJzZUNvbHVtbkNsYXNzOiBmdW5jdGlvbihjb2xDbGFzcyl7CiAgICAgICAgICAgIGNvbENsYXNzID0gY29sQ2xhc3MudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgdmFyIHA7CiAgICAgICAgICAgIHN3aXRjaChjb2xDbGFzcyl7CiAgICAgICAgICAgICAgICBjYXNlICd4bCc6CiAgICAgICAgICAgICAgICBjYXNlICd4bGFyZ2UnOgogICAgICAgICAgICAgICAgICAgIHAgPSAnY29sLW1kLTEyJzsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2wnOgogICAgICAgICAgICAgICAgY2FzZSAnbGFyZ2UnOgogICAgICAgICAgICAgICAgICAgIHAgPSAnY29sLW1kLTggY29sLW1kLW9mZnNldC0yJzsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ20nOgogICAgICAgICAgICAgICAgY2FzZSAnbWVkaXVtJzoKICAgICAgICAgICAgICAgICAgICBwID0gJ2NvbC1tZC02IGNvbC1tZC1vZmZzZXQtMyc7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdzJzoKICAgICAgICAgICAgICAgIGNhc2UgJ3NtYWxsJzoKICAgICAgICAgICAgICAgICAgICBwID0gJ2NvbC1tZC00IGNvbC1tZC1vZmZzZXQtNCc7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd4cyc6CiAgICAgICAgICAgICAgICBjYXNlICd4c21hbGwnOgogICAgICAgICAgICAgICAgICAgIHAgPSAnY29sLW1kLTIgY29sLW1kLW9mZnNldC01JzsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgcCA9IGNvbENsYXNzOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuY29sdW1uQ2xhc3NQYXJzZWQgPSBwOwogICAgICAgIH0sCiAgICAgICAgaW5pdERyYWdnYWJsZTogZnVuY3Rpb24oKXsKICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICAgICAgICB2YXIgJHQgPSB0aGlzLiR0aXRsZUNvbnRhaW5lcjsKCiAgICAgICAgICAgIHRoaXMucmVzZXREcmFnKCk7CiAgICAgICAgICAgIGlmKHRoaXMuZHJhZ2dhYmxlKXsKICAgICAgICAgICAgICAgICR0Lm9uKCdtb3VzZWRvd24nLCBmdW5jdGlvbihlKXsKICAgICAgICAgICAgICAgICAgICAkdC5hZGRDbGFzcygnamNvbmZpcm0taGFuZCcpOwogICAgICAgICAgICAgICAgICAgIHRoYXQubW91c2VYID0gZS5jbGllbnRYOwogICAgICAgICAgICAgICAgICAgIHRoYXQubW91c2VZID0gZS5jbGllbnRZOwogICAgICAgICAgICAgICAgICAgIHRoYXQuaXNEcmFnID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgJCh3aW5kb3cpLm9uKCdtb3VzZW1vdmUuJyArIHRoaXMuX2lkLCBmdW5jdGlvbihlKXsKICAgICAgICAgICAgICAgICAgICBpZih0aGF0LmlzRHJhZyl7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQubW92aW5nWCA9IGUuY2xpZW50WCAtIHRoYXQubW91c2VYICsgdGhhdC5pbml0aWFsWDsKICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5tb3ZpbmdZID0gZS5jbGllbnRZIC0gdGhhdC5tb3VzZVkgKyB0aGF0LmluaXRpYWxZOwogICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnNldERyYWcoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAkKHdpbmRvdykub24oJ21vdXNldXAuJyArIHRoaXMuX2lkLCBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICR0LnJlbW92ZUNsYXNzKCdqY29uZmlybS1oYW5kJyk7CiAgICAgICAgICAgICAgICAgICAgaWYodGhhdC5pc0RyYWcpewogICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmlzRHJhZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmluaXRpYWxYID0gdGhhdC5tb3ZpbmdYOwogICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmluaXRpYWxZID0gdGhhdC5tb3ZpbmdZOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHJlc2V0RHJhZzogZnVuY3Rpb24oKXsKICAgICAgICAgICAgdGhpcy5pc0RyYWcgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy5pbml0aWFsWCA9IDA7CiAgICAgICAgICAgIHRoaXMuaW5pdGlhbFkgPSAwOwogICAgICAgICAgICB0aGlzLm1vdmluZ1ggPSAwOwogICAgICAgICAgICB0aGlzLm1vdmluZ1kgPSAwOwogICAgICAgICAgICB0aGlzLm1vdXNlWCA9IDA7CiAgICAgICAgICAgIHRoaXMubW91c2VZID0gMDsKICAgICAgICAgICAgdGhpcy4kamNvbmZpcm1Cb3hDb250YWluZXIuY3NzKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAwICsgJ3B4LCAnICsgMCArICdweCknKTsKICAgICAgICB9LAogICAgICAgIHNldERyYWc6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIGlmKCF0aGlzLmRyYWdnYWJsZSkKICAgICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgICAgIHRoaXMuYWxpZ25NaWRkbGUgPSBmYWxzZTsKICAgICAgICAgICAgdmFyIGJveFdpZHRoID0gdGhpcy4kamNvbmZpcm1Cb3gub3V0ZXJXaWR0aCgpOwogICAgICAgICAgICB2YXIgYm94SGVpZ2h0ID0gdGhpcy4kamNvbmZpcm1Cb3gub3V0ZXJIZWlnaHQoKTsKICAgICAgICAgICAgdmFyIHdpbmRvd1dpZHRoID0gJCh3aW5kb3cpLndpZHRoKCk7CiAgICAgICAgICAgIHZhciB3aW5kb3dIZWlnaHQgPSAkKHdpbmRvdykuaGVpZ2h0KCk7CiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgICAgICAgdmFyIGRyYWdVcGRhdGUgPSAxOwogICAgICAgICAgICBpZih0aGF0Lm1vdmluZ1ggJSBkcmFnVXBkYXRlID09PSAwIHx8IHRoYXQubW92aW5nWSAlIGRyYWdVcGRhdGUgPT09IDApewogICAgICAgICAgICAgICAgaWYodGhhdC5kcmFnV2luZG93Qm9yZGVyKXsKICAgICAgICAgICAgICAgICAgICB2YXIgbGVmdERpc3RhbmNlID0gKHdpbmRvd1dpZHRoIC8gMikgLSBib3hXaWR0aCAvIDI7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRvcERpc3RhbmNlID0gKHdpbmRvd0hlaWdodCAvIDIpIC0gYm94SGVpZ2h0IC8gMjsKICAgICAgICAgICAgICAgICAgICB0b3BEaXN0YW5jZSAtPSB0aGF0LmRyYWdXaW5kb3dHYXA7CiAgICAgICAgICAgICAgICAgICAgbGVmdERpc3RhbmNlIC09IHRoYXQuZHJhZ1dpbmRvd0dhcDsKCiAgICAgICAgICAgICAgICAgICAgaWYobGVmdERpc3RhbmNlICsgdGhhdC5tb3ZpbmdYIDwgMCl7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQubW92aW5nWCA9IC1sZWZ0RGlzdGFuY2U7CiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYobGVmdERpc3RhbmNlIC0gdGhhdC5tb3ZpbmdYIDwgMCl7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQubW92aW5nWCA9IGxlZnREaXN0YW5jZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmKHRvcERpc3RhbmNlICsgdGhhdC5tb3ZpbmdZIDwgMCl7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQubW92aW5nWSA9IC10b3BEaXN0YW5jZTsKICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0b3BEaXN0YW5jZSAtIHRoYXQubW92aW5nWSA8IDApewogICAgICAgICAgICAgICAgICAgICAgICB0aGF0Lm1vdmluZ1kgPSB0b3BEaXN0YW5jZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdGhhdC4kamNvbmZpcm1Cb3hDb250YWluZXIuY3NzKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyB0aGF0Lm1vdmluZ1ggKyAncHgsICcgKyB0aGF0Lm1vdmluZ1kgKyAncHgpJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIF9zY3JvbGxUb3A6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIGlmKHR5cGVvZiBwYWdlWU9mZnNldCAhPT0gJ3VuZGVmaW5lZCcpewogICAgICAgICAgICAgICAgLy9tb3N0IGJyb3dzZXJzIGV4Y2VwdCBJRSBiZWZvcmUgIzkKICAgICAgICAgICAgICAgIHJldHVybiBwYWdlWU9mZnNldDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgdmFyIEIgPSBkb2N1bWVudC5ib2R5OyAvL0lFICdxdWlya3MnCiAgICAgICAgICAgICAgICB2YXIgRCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsgLy9JRSB3aXRoIGRvY3R5cGUKICAgICAgICAgICAgICAgIEQgPSAoRC5jbGllbnRIZWlnaHQpID8gRCA6IEI7CiAgICAgICAgICAgICAgICByZXR1cm4gRC5zY3JvbGxUb3A7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIF93YXRjaENvbnRlbnQ6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgICAgICAgaWYodGhpcy5fdGltZXIpIGNsZWFySW50ZXJ2YWwodGhpcy5fdGltZXIpOwoKICAgICAgICAgICAgdmFyIHByZXZDb250ZW50SGVpZ2h0ID0gMDsKICAgICAgICAgICAgdGhpcy5fdGltZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgaWYodGhhdC5zbW9vdGhDb250ZW50KXsKICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudEhlaWdodCA9IHRoYXQuJGNvbnRlbnQub3V0ZXJIZWlnaHQoKSB8fCAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbnRlbnRIZWlnaHQgIT09IHByZXZDb250ZW50SGVpZ2h0KXsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbW1lbnRlZCBvdXQgdG8gcHJldmVudCBzY3JvbGwgdG8gdG9wIHdoZW4gdXBkYXRpbmcgdGhlIGNvbnRlbnQKICAgICAgICAgICAgICAgICAgICAgICAgLy8gKGZvciBleGFtcGxlIHdoZW4gdXNpbmcgYWpheCBpbiBmb3JtcyBpbiBjb250ZW50KQogICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGF0LiRjb250ZW50UGFuZS5jc3MoewogICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgJ2hlaWdodCc6IGNvbnRlbnRIZWlnaHQKICAgICAgICAgICAgICAgICAgICAgICAgLy8gfSkuc2Nyb2xsVG9wKDApOwogICAgICAgICAgICAgICAgICAgICAgICBwcmV2Q29udGVudEhlaWdodCA9IGNvbnRlbnRIZWlnaHQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHZhciB3aCA9ICQod2luZG93KS5oZWlnaHQoKTsKICAgICAgICAgICAgICAgICAgICB2YXIgdG90YWwgPSB0aGF0Lm9mZnNldFRvcCArIHRoYXQub2Zmc2V0Qm90dG9tICsgdGhhdC4kamNvbmZpcm1Cb3guaGVpZ2h0KCkgLSB0aGF0LiRjb250ZW50UGFuZS5oZWlnaHQoKSArIHRoYXQuJGNvbnRlbnQuaGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYodG90YWwgPCB3aCl7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuJGNvbnRlbnRQYW5lLmFkZENsYXNzKCduby1zY3JvbGwnKTsKICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC4kY29udGVudFBhbmUucmVtb3ZlQ2xhc3MoJ25vLXNjcm9sbCcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgdGhpcy53YXRjaEludGVydmFsKTsKICAgICAgICB9LAogICAgICAgIF9vdmVyZmxvd0NsYXNzOiAnamNvbmZpcm0tb3ZlcmZsb3cnLAogICAgICAgIF9oaWxpZ2h0QW5pbWF0aW5nOiBmYWxzZSwKICAgICAgICBoaWdobGlnaHQ6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHRoaXMuaGlMaWdodE1vZGFsKCk7CiAgICAgICAgfSwKICAgICAgICBoaUxpZ2h0TW9kYWw6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgICAgICAgaWYodGhpcy5faGlsaWdodEFuaW1hdGluZykKICAgICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgICAgIHRoYXQuJGJvZHkuYWRkQ2xhc3MoJ2hpbGlnaHQnKTsKICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gcGFyc2VGbG9hdCh0aGF0LiRib2R5LmNzcygnYW5pbWF0aW9uLWR1cmF0aW9uJykpIHx8IDI7CiAgICAgICAgICAgIHRoaXMuX2hpbGlnaHRBbmltYXRpbmcgPSB0cnVlOwogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICB0aGF0Ll9oaWxpZ2h0QW5pbWF0aW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICB0aGF0LiRib2R5LnJlbW92ZUNsYXNzKCdoaWxpZ2h0Jyk7CiAgICAgICAgICAgIH0sIGR1cmF0aW9uICogMTAwMCk7CiAgICAgICAgfSwKICAgICAgICBfYmluZEV2ZW50czogZnVuY3Rpb24oKXsKICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICAgICAgICB0aGlzLmJveENsaWNrZWQgPSBmYWxzZTsKCiAgICAgICAgICAgIHRoaXMuJHNjcm9sbFBhbmUuY2xpY2soZnVuY3Rpb24oZSl7IC8vIElnbm9yZSBwcm9wYWdhdGVkIGNsaWNrcwogICAgICAgICAgICAgICAgaWYoIXRoYXQuYm94Q2xpY2tlZCl7IC8vIEJhY2tncm91bmQgY2xpY2tlZAogICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgIElmIGJhY2tncm91bmREaXNtaXNzIGlzIGEgZnVuY3Rpb24gYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMgdHJ1dGh5CiAgICAgICAgICAgICAgICAgICAgIHByb2NlZWQgdG8gY2xvc2UgdGhlIG1vZGFsLgogICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgIHZhciBidXR0b25OYW1lID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNob3VsZENsb3NlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgdmFyIHN0cjsKCiAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHRoYXQuYmFja2dyb3VuZERpc21pc3MgPT09ICdmdW5jdGlvbicpCiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHRoYXQuYmFja2dyb3VuZERpc21pc3MoKTsKICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHRoYXQuYmFja2dyb3VuZERpc21pc3M7CgogICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB0aGF0LmJ1dHRvbnNbc3RyXSAhPT0gJ3VuZGVmaW5lZCcpewogICAgICAgICAgICAgICAgICAgICAgICBidXR0b25OYW1lID0gc3RyOwogICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRDbG9zZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiBzdHIgPT09ICd1bmRlZmluZWQnIHx8ICEhKHN0cikgPT09IHRydWUpewogICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRDbG9zZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZENsb3NlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZihidXR0b25OYW1lKXsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ0blJlc3BvbnNlID0gdGhhdC5idXR0b25zW2J1dHRvbk5hbWVdLmFjdGlvbi5hcHBseSh0aGF0KTsKICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkQ2xvc2UgPSAodHlwZW9mIGJ0blJlc3BvbnNlID09PSAndW5kZWZpbmVkJykgfHwgISEoYnRuUmVzcG9uc2UpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYoc2hvdWxkQ2xvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuaGlMaWdodE1vZGFsKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGF0LmJveENsaWNrZWQgPSBmYWxzZTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICB0aGlzLiRqY29uZmlybUJveC5jbGljayhmdW5jdGlvbihlKXsKICAgICAgICAgICAgICAgIHRoYXQuYm94Q2xpY2tlZCA9IHRydWU7CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgdmFyIGlzS2V5RG93biA9IGZhbHNlOwogICAgICAgICAgICAkKHdpbmRvdykub24oJ2pjS2V5RG93bi4nICsgdGhhdC5faWQsIGZ1bmN0aW9uKGUpewogICAgICAgICAgICAgICAgaWYoIWlzS2V5RG93bil7CiAgICAgICAgICAgICAgICAgICAgaXNLZXlEb3duID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICQod2luZG93KS5vbigna2V5dXAuJyArIHRoYXQuX2lkLCBmdW5jdGlvbihlKXsKICAgICAgICAgICAgICAgIGlmKGlzS2V5RG93bil7CiAgICAgICAgICAgICAgICAgICAgdGhhdC5yZWFjdE9uS2V5KGUpOwogICAgICAgICAgICAgICAgICAgIGlzS2V5RG93biA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICQod2luZG93KS5vbigncmVzaXplLicgKyB0aGlzLl9pZCwgZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHRoYXQuX3VwZGF0ZUNvbnRlbnRNYXhIZWlnaHQoKTsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICB0aGF0LnJlc2V0RHJhZygpOwogICAgICAgICAgICAgICAgfSwgMTAwKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBfY3ViaWNfYmV6aWVyOiAnMC4zNiwgMC41NSwgMC4xOScsCiAgICAgICAgX2dldENTUzogZnVuY3Rpb24oc3BlZWQsIGJvdW5jZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAnLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uJzogc3BlZWQgLyAxMDAwICsgJ3MnLAogICAgICAgICAgICAgICAgJ3RyYW5zaXRpb24tZHVyYXRpb24nOiBzcGVlZCAvIDEwMDAgKyAncycsCiAgICAgICAgICAgICAgICAnLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbic6ICdjdWJpYy1iZXppZXIoJyArIHRoaXMuX2N1YmljX2JlemllciArICcsICcgKyBib3VuY2UgKyAnKScsCiAgICAgICAgICAgICAgICAndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nOiAnY3ViaWMtYmV6aWVyKCcgKyB0aGlzLl9jdWJpY19iZXppZXIgKyAnLCAnICsgYm91bmNlICsgJyknCiAgICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICBfc2V0QnV0dG9uczogZnVuY3Rpb24oKXsKICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTZXR0aW5ncyB1cCBidXR0b25zCiAgICAgICAgICAgICAqLwoKICAgICAgICAgICAgdmFyIHRvdGFsX2J1dHRvbnMgPSAwOwogICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5idXR0b25zICE9PSAnb2JqZWN0JykKICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9ucyA9IHt9OwoKICAgICAgICAgICAgJC5lYWNoKHRoaXMuYnV0dG9ucywgZnVuY3Rpb24oa2V5LCBidXR0b24pewogICAgICAgICAgICAgICAgdG90YWxfYnV0dG9ucyArPSAxOwogICAgICAgICAgICAgICAgaWYodHlwZW9mIGJ1dHRvbiA9PT0gJ2Z1bmN0aW9uJyl7CiAgICAgICAgICAgICAgICAgICAgdGhhdC5idXR0b25zW2tleV0gPSBidXR0b24gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0aGF0LmJ1dHRvbnNba2V5XS50ZXh0ID0gYnV0dG9uLnRleHQgfHwga2V5OwogICAgICAgICAgICAgICAgdGhhdC5idXR0b25zW2tleV0uYnRuQ2xhc3MgPSBidXR0b24uYnRuQ2xhc3MgfHwgJ2J0bi1kZWZhdWx0JzsKICAgICAgICAgICAgICAgIHRoYXQuYnV0dG9uc1trZXldLmFjdGlvbiA9IGJ1dHRvbi5hY3Rpb24gfHwgZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB0aGF0LmJ1dHRvbnNba2V5XS5rZXlzID0gYnV0dG9uLmtleXMgfHwgW107CiAgICAgICAgICAgICAgICB0aGF0LmJ1dHRvbnNba2V5XS5pc0hpZGRlbiA9IGJ1dHRvbi5pc0hpZGRlbiB8fCBmYWxzZTsKICAgICAgICAgICAgICAgIHRoYXQuYnV0dG9uc1trZXldLmlzRGlzYWJsZWQgPSBidXR0b24uaXNEaXNhYmxlZCB8fCBmYWxzZTsKCiAgICAgICAgICAgICAgICAkLmVhY2godGhhdC5idXR0b25zW2tleV0ua2V5cywgZnVuY3Rpb24oaSwgYSl7CiAgICAgICAgICAgICAgICAgICAgdGhhdC5idXR0b25zW2tleV0ua2V5c1tpXSA9IGEudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIHZhciBidXR0b25fZWxlbWVudCA9ICQoJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIj48L2J1dHRvbj4nKQogICAgICAgICAgICAgICAgICAgIC5odG1sKHRoYXQuYnV0dG9uc1trZXldLnRleHQpCiAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKHRoYXQuYnV0dG9uc1trZXldLmJ0bkNsYXNzKQogICAgICAgICAgICAgICAgICAgIC5wcm9wKCdkaXNhYmxlZCcsIHRoYXQuYnV0dG9uc1trZXldLmlzRGlzYWJsZWQpCiAgICAgICAgICAgICAgICAgICAgLmNzcygnZGlzcGxheScsIHRoYXQuYnV0dG9uc1trZXldLmlzSGlkZGVuID8gJ25vbmUnIDogJycpCiAgICAgICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uKGUpewogICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSB0aGF0LmJ1dHRvbnNba2V5XS5hY3Rpb24uYXBwbHkodGhhdCwgW3RoYXQuYnV0dG9uc1trZXldXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQub25BY3Rpb24uYXBwbHkodGhhdCwgW2tleSwgdGhhdC5idXR0b25zW2tleV1dKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fc3RvcENvdW50RG93bigpOwogICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgcmVzID09PSAndW5kZWZpbmVkJyB8fCByZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgdGhhdC5idXR0b25zW2tleV0uZWwgPSBidXR0b25fZWxlbWVudDsKICAgICAgICAgICAgICAgIHRoYXQuYnV0dG9uc1trZXldLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KXsKICAgICAgICAgICAgICAgICAgICBidXR0b25fZWxlbWVudC5odG1sKHRleHQpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIHRoYXQuYnV0dG9uc1trZXldLmFkZENsYXNzID0gZnVuY3Rpb24oY2xhc3NOYW1lKXsKICAgICAgICAgICAgICAgICAgICBidXR0b25fZWxlbWVudC5hZGRDbGFzcyhjbGFzc05hbWUpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIHRoYXQuYnV0dG9uc1trZXldLnJlbW92ZUNsYXNzID0gZnVuY3Rpb24oY2xhc3NOYW1lKXsKICAgICAgICAgICAgICAgICAgICBidXR0b25fZWxlbWVudC5yZW1vdmVDbGFzcyhjbGFzc05hbWUpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIHRoYXQuYnV0dG9uc1trZXldLmRpc2FibGUgPSBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgIHRoYXQuYnV0dG9uc1trZXldLmlzRGlzYWJsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGJ1dHRvbl9lbGVtZW50LnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgdGhhdC5idXR0b25zW2tleV0uZW5hYmxlID0gZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICB0aGF0LmJ1dHRvbnNba2V5XS5pc0Rpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgYnV0dG9uX2VsZW1lbnQucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgdGhhdC5idXR0b25zW2tleV0uc2hvdyA9IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgdGhhdC5idXR0b25zW2tleV0uaXNIaWRkZW4gPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBidXR0b25fZWxlbWVudC5jc3MoJ2Rpc3BsYXknLCAnJyk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgdGhhdC5idXR0b25zW2tleV0uaGlkZSA9IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgdGhhdC5idXR0b25zW2tleV0uaXNIaWRkZW4gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGJ1dHRvbl9lbGVtZW50LmNzcygnZGlzcGxheScsICdub25lJyk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICBCdXR0b25zIGFyZSBwcmVmaXhlZCB3aXRoICRfIG9yICQkIGZvciBxdWljayBhY2Nlc3MKICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgdGhhdFsnJF8nICsga2V5XSA9IHRoYXRbJyQkJyArIGtleV0gPSBidXR0b25fZWxlbWVudDsKICAgICAgICAgICAgICAgIHRoYXQuJGJ0bmMuYXBwZW5kKGJ1dHRvbl9lbGVtZW50KTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBpZih0b3RhbF9idXR0b25zID09PSAwKSB0aGlzLiRidG5jLmhpZGUoKTsKICAgICAgICAgICAgaWYodGhpcy5jbG9zZUljb24gPT09IG51bGwgJiYgdG90YWxfYnV0dG9ucyA9PT0gMCl7CiAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgIGluIGNhc2Ugd2hlbiBubyBidXR0b25zIGFyZSBwcmVzZW50ICYgY2xvc2VJY29uIGlzIG51bGwsIGNsb3NlSWNvbiBpcyBzZXQgdG8gdHJ1ZSwKICAgICAgICAgICAgICAgICBzZXQgY2xvc2VJY29uIHRvIHRydWUgdG8gZXhwbGljaXRseSB0ZWxsIHRvIGhpZGUgdGhlIGNsb3NlIGljb24KICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgdGhpcy5jbG9zZUljb24gPSB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZih0aGlzLmNsb3NlSWNvbil7CiAgICAgICAgICAgICAgICBpZih0aGlzLmNsb3NlSWNvbkNsYXNzKXsKICAgICAgICAgICAgICAgICAgICAvLyB1c2VyIHJlcXVpcmVzIGEgY3VzdG9tIGNsYXNzLgogICAgICAgICAgICAgICAgICAgIHZhciBjbG9zZUh0bWwgPSAnPGkgY2xhc3M9IicgKyB0aGlzLmNsb3NlSWNvbkNsYXNzICsgJyI+PC9pPic7CiAgICAgICAgICAgICAgICAgICAgdGhpcy4kY2xvc2VJY29uLmh0bWwoY2xvc2VIdG1sKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0aGlzLiRjbG9zZUljb24uY2xpY2soZnVuY3Rpb24oZSl7CiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICAgICAgICAgICAgICB2YXIgYnV0dG9uTmFtZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIHZhciBzaG91bGRDbG9zZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIHZhciBzdHI7CgogICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiB0aGF0LmNsb3NlSWNvbiA9PT0gJ2Z1bmN0aW9uJyl7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHRoYXQuY2xvc2VJY29uKCk7CiAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHRoYXQuY2xvc2VJY29uOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHRoYXQuYnV0dG9uc1tzdHJdICE9PSAndW5kZWZpbmVkJyl7CiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbk5hbWUgPSBzdHI7CiAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZENsb3NlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYodHlwZW9mIHN0ciA9PT0gJ3VuZGVmaW5lZCcgfHwgISEoc3RyKSA9PT0gdHJ1ZSl7CiAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZENsb3NlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkQ2xvc2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYoYnV0dG9uTmFtZSl7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidG5SZXNwb25zZSA9IHRoYXQuYnV0dG9uc1tidXR0b25OYW1lXS5hY3Rpb24uYXBwbHkodGhhdCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZENsb3NlID0gKHR5cGVvZiBidG5SZXNwb25zZSA9PT0gJ3VuZGVmaW5lZCcpIHx8ICEhKGJ0blJlc3BvbnNlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYoc2hvdWxkQ2xvc2UpewogICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB0aGlzLiRjbG9zZUljb24uc2hvdygpOwogICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgIHRoaXMuJGNsb3NlSWNvbi5oaWRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHNldFRpdGxlOiBmdW5jdGlvbihzdHJpbmcsIGZvcmNlKXsKICAgICAgICAgICAgZm9yY2UgPSBmb3JjZSB8fCBmYWxzZTsKCiAgICAgICAgICAgIGlmKHR5cGVvZiBzdHJpbmcgIT09ICd1bmRlZmluZWQnKQogICAgICAgICAgICAgICAgaWYodHlwZW9mIHN0cmluZyA9PT0gJ3N0cmluZycpCiAgICAgICAgICAgICAgICAgICAgdGhpcy50aXRsZSA9IHN0cmluZzsKICAgICAgICAgICAgICAgIGVsc2UgaWYodHlwZW9mIHN0cmluZyA9PT0gJ2Z1bmN0aW9uJyl7CiAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHN0cmluZy5wcm9taXNlID09PSAnZnVuY3Rpb24nKQogICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdQcm9taXNlIHdhcyByZXR1cm5lZCBmcm9tIHRpdGxlIGZ1bmN0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQuJyk7CgogICAgICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHN0cmluZygpOwogICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiByZXNwb25zZSA9PT0gJ3N0cmluZycpCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGl0bGUgPSByZXNwb25zZTsKICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGl0bGUgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH1lbHNlCiAgICAgICAgICAgICAgICAgICAgdGhpcy50aXRsZSA9IGZhbHNlOwoKICAgICAgICAgICAgaWYodGhpcy5pc0FqYXhMb2FkaW5nICYmICFmb3JjZSkKICAgICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgICAgIHRoaXMuJHRpdGxlLmh0bWwodGhpcy50aXRsZSB8fCAnJyk7CiAgICAgICAgICAgIHRoaXMudXBkYXRlVGl0bGVDb250YWluZXIoKTsKICAgICAgICB9LAogICAgICAgIHNldEljb246IGZ1bmN0aW9uKGljb25DbGFzcywgZm9yY2UpewogICAgICAgICAgICBmb3JjZSA9IGZvcmNlIHx8IGZhbHNlOwoKICAgICAgICAgICAgaWYodHlwZW9mIGljb25DbGFzcyAhPT0gJ3VuZGVmaW5lZCcpCiAgICAgICAgICAgICAgICBpZih0eXBlb2YgaWNvbkNsYXNzID09PSAnc3RyaW5nJykKICAgICAgICAgICAgICAgICAgICB0aGlzLmljb24gPSBpY29uQ2xhc3M7CiAgICAgICAgICAgICAgICBlbHNlIGlmKHR5cGVvZiBpY29uQ2xhc3MgPT09ICdmdW5jdGlvbicpewogICAgICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IGljb25DbGFzcygpOwogICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiByZXNwb25zZSA9PT0gJ3N0cmluZycpCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaWNvbiA9IHJlc3BvbnNlOwogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pY29uID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdGhpcy5pY29uID0gZmFsc2U7CgogICAgICAgICAgICBpZih0aGlzLmlzQWpheExvYWRpbmcgJiYgIWZvcmNlKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdGhpcy4kaWNvbi5odG1sKHRoaXMuaWNvbiA/ICc8aSBjbGFzcz0iJyArIHRoaXMuaWNvbiArICciPjwvaT4nIDogJycpOwogICAgICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlQ29udGFpbmVyKCk7CiAgICAgICAgfSwKICAgICAgICB1cGRhdGVUaXRsZUNvbnRhaW5lcjogZnVuY3Rpb24oKXsKICAgICAgICAgICAgaWYoIXRoaXMudGl0bGUgJiYgIXRoaXMuaWNvbil7CiAgICAgICAgICAgICAgICB0aGlzLiR0aXRsZUNvbnRhaW5lci5oaWRlKCk7CiAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgdGhpcy4kdGl0bGVDb250YWluZXIuc2hvdygpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBzZXRDb250ZW50UHJlcGVuZDogZnVuY3Rpb24oY29udGVudCwgZm9yY2UpewogICAgICAgICAgICBpZighY29udGVudCkKICAgICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgICAgIHRoaXMuY29udGVudFBhcnNlZC5wcmVwZW5kKGNvbnRlbnQpOwogICAgICAgIH0sCiAgICAgICAgc2V0Q29udGVudEFwcGVuZDogZnVuY3Rpb24oY29udGVudCl7CiAgICAgICAgICAgIGlmKCFjb250ZW50KQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdGhpcy5jb250ZW50UGFyc2VkLmFwcGVuZChjb250ZW50KTsKICAgICAgICB9LAogICAgICAgIHNldENvbnRlbnQ6IGZ1bmN0aW9uKGNvbnRlbnQsIGZvcmNlKXsKICAgICAgICAgICAgZm9yY2UgPSAhIWZvcmNlOwogICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgICAgIGlmKGNvbnRlbnQpCiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRQYXJzZWQuaHRtbCgnJykuYXBwZW5kKGNvbnRlbnQpOwogICAgICAgICAgICBpZih0aGlzLmlzQWpheExvYWRpbmcgJiYgIWZvcmNlKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdGhpcy4kY29udGVudC5odG1sKCcnKTsKICAgICAgICAgICAgdGhpcy4kY29udGVudC5hcHBlbmQodGhpcy5jb250ZW50UGFyc2VkKTsKICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgdGhhdC4kYm9keS5maW5kKCdpbnB1dFthdXRvZm9jdXNdOnZpc2libGU6Zmlyc3QnKS5mb2N1cygpOwogICAgICAgICAgICB9LCAxMDApOwogICAgICAgIH0sCiAgICAgICAgbG9hZGluZ1NwaW5uZXI6IGZhbHNlLAogICAgICAgIHNob3dMb2FkaW5nOiBmdW5jdGlvbihkaXNhYmxlQnV0dG9ucyl7CiAgICAgICAgICAgIHRoaXMubG9hZGluZ1NwaW5uZXIgPSB0cnVlOwogICAgICAgICAgICB0aGlzLiRqY29uZmlybUJveC5hZGRDbGFzcygnbG9hZGluZycpOwogICAgICAgICAgICBpZihkaXNhYmxlQnV0dG9ucykKICAgICAgICAgICAgICAgIHRoaXMuJGJ0bmMuZmluZCgnYnV0dG9uJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKCiAgICAgICAgfSwKICAgICAgICBoaWRlTG9hZGluZzogZnVuY3Rpb24oZW5hYmxlQnV0dG9ucyl7CiAgICAgICAgICAgIHRoaXMubG9hZGluZ1NwaW5uZXIgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy4kamNvbmZpcm1Cb3gucmVtb3ZlQ2xhc3MoJ2xvYWRpbmcnKTsKICAgICAgICAgICAgaWYoZW5hYmxlQnV0dG9ucykKICAgICAgICAgICAgICAgIHRoaXMuJGJ0bmMuZmluZCgnYnV0dG9uJykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7CgogICAgICAgIH0sCiAgICAgICAgYWpheFJlc3BvbnNlOiBmYWxzZSwKICAgICAgICBjb250ZW50UGFyc2VkOiAnJywKICAgICAgICBpc0FqYXg6IGZhbHNlLAogICAgICAgIGlzQWpheExvYWRpbmc6IGZhbHNlLAogICAgICAgIF9wYXJzZUNvbnRlbnQ6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgICAgICAgdmFyIGUgPSAnJm5ic3A7JzsKCiAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLmNvbnRlbnQgPT09ICdmdW5jdGlvbicpewogICAgICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXMuY29udGVudC5hcHBseSh0aGlzKTsKICAgICAgICAgICAgICAgIGlmKHR5cGVvZiByZXMgPT09ICdzdHJpbmcnKXsKICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnQgPSByZXM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmKHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmIHR5cGVvZiByZXMuYWx3YXlzID09PSAnZnVuY3Rpb24nKXsKICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFqYXggbG9hZGluZyB2aWEgcHJvbWlzZQogICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBamF4ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQWpheExvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIHJlcy5hbHdheXMoZnVuY3Rpb24oZGF0YSwgc3RhdHVzLCB4aHIpewogICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmFqYXhSZXNwb25zZSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhocjogeGhyCiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX2NvbnRlbnRSZWFkeS5yZXNvbHZlKGRhdGEsIHN0YXR1cywgeGhyKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHRoYXQuY29udGVudExvYWRlZCA9PT0gJ2Z1bmN0aW9uJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuY29udGVudExvYWRlZChkYXRhLCBzdGF0dXMsIHhocik7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50ID0gZTsKICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGVudCA9IGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLmNvbnRlbnQgPT09ICdzdHJpbmcnICYmIHRoaXMuY29udGVudC5zdWJzdHIoMCwgNCkudG9Mb3dlckNhc2UoKSA9PT0gJ3VybDonKXsKICAgICAgICAgICAgICAgIHRoaXMuaXNBamF4ID0gdHJ1ZTsKICAgICAgICAgICAgICAgIHRoaXMuaXNBamF4TG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICB2YXIgdSA9IHRoaXMuY29udGVudC5zdWJzdHJpbmcoNCwgdGhpcy5jb250ZW50Lmxlbmd0aCk7CiAgICAgICAgICAgICAgICAkLmdldCh1KS5kb25lKGZ1bmN0aW9uKGh0bWwpewogICAgICAgICAgICAgICAgICAgIHRoYXQuY29udGVudFBhcnNlZC5odG1sKGh0bWwpOwogICAgICAgICAgICAgICAgfSkuYWx3YXlzKGZ1bmN0aW9uKGRhdGEsIHN0YXR1cywgeGhyKXsKICAgICAgICAgICAgICAgICAgICB0aGF0LmFqYXhSZXNwb25zZSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgIHhocjogeGhyCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICB0aGF0Ll9jb250ZW50UmVhZHkucmVzb2x2ZShkYXRhLCBzdGF0dXMsIHhocik7CiAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHRoYXQuY29udGVudExvYWRlZCA9PT0gJ2Z1bmN0aW9uJykKICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5jb250ZW50TG9hZGVkKGRhdGEsIHN0YXR1cywgeGhyKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZighdGhpcy5jb250ZW50KQogICAgICAgICAgICAgICAgdGhpcy5jb250ZW50ID0gZTsKCiAgICAgICAgICAgIGlmKCF0aGlzLmlzQWpheCl7CiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRQYXJzZWQuaHRtbCh0aGlzLmNvbnRlbnQpOwogICAgICAgICAgICAgICAgdGhpcy5zZXRDb250ZW50KCk7CiAgICAgICAgICAgICAgICB0aGF0Ll9jb250ZW50UmVhZHkucmVzb2x2ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBfc3RvcENvdW50RG93bjogZnVuY3Rpb24oKXsKICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9DbG9zZUludGVydmFsKTsKICAgICAgICAgICAgaWYodGhpcy4kY2QpCiAgICAgICAgICAgICAgICB0aGlzLiRjZC5yZW1vdmUoKTsKICAgICAgICB9LAogICAgICAgIF9zdGFydENvdW50RG93bjogZnVuY3Rpb24oKXsKICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICAgICAgICB2YXIgb3B0ID0gdGhpcy5hdXRvQ2xvc2Uuc3BsaXQoJ3wnKTsKICAgICAgICAgICAgaWYob3B0Lmxlbmd0aCAhPT0gMil7CiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIG9wdGlvbiBmb3IgYXV0b0Nsb3NlLiBleGFtcGxlIFwnY2xvc2V8MTAwMDBcJycpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgYnV0dG9uX2tleSA9IG9wdFswXTsKICAgICAgICAgICAgdmFyIHRpbWUgPSBwYXJzZUludChvcHRbMV0pOwogICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5idXR0b25zW2J1dHRvbl9rZXldID09PSAndW5kZWZpbmVkJyl7CiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIGJ1dHRvbiBrZXkgXCcnICsgYnV0dG9uX2tleSArICdcJyBmb3IgYXV0b0Nsb3NlJyk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBzZWNvbmRzID0gTWF0aC5jZWlsKHRpbWUgLyAxMDAwKTsKICAgICAgICAgICAgdGhpcy4kY2QgPSAkKCc8c3BhbiBjbGFzcz0iY291bnRkb3duIj4gKCcgKyBzZWNvbmRzICsgJyk8L3NwYW4+JykKICAgICAgICAgICAgICAgIC5hcHBlbmRUbyh0aGlzWyckXycgKyBidXR0b25fa2V5XSk7CgogICAgICAgICAgICB0aGlzLmF1dG9DbG9zZUludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHRoYXQuJGNkLmh0bWwoJyAoJyArIChzZWNvbmRzIC09IDEpICsgJykgJyk7CiAgICAgICAgICAgICAgICBpZihzZWNvbmRzIDw9IDApewogICAgICAgICAgICAgICAgICAgIHRoYXRbJyQkJyArIGJ1dHRvbl9rZXldLnRyaWdnZXIoJ2NsaWNrJyk7CiAgICAgICAgICAgICAgICAgICAgdGhhdC5fc3RvcENvdW50RG93bigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LCAxMDAwKTsKICAgICAgICB9LAogICAgICAgIF9nZXRLZXk6IGZ1bmN0aW9uKGtleSl7CiAgICAgICAgICAgIC8vIHZlcnkgbmVjZXNzYXJ5IGtleXMuCiAgICAgICAgICAgIHN3aXRjaChrZXkpewogICAgICAgICAgICAgICAgY2FzZSAxOTI6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0aWxkZSc7CiAgICAgICAgICAgICAgICBjYXNlIDEzOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAnZW50ZXInOwogICAgICAgICAgICAgICAgY2FzZSAxNjoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NoaWZ0JzsKICAgICAgICAgICAgICAgIGNhc2UgOToKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RhYic7CiAgICAgICAgICAgICAgICBjYXNlIDIwOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAnY2Fwc2xvY2snOwogICAgICAgICAgICAgICAgY2FzZSAxNzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2N0cmwnOwogICAgICAgICAgICAgICAgY2FzZSA5MToKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3dpbic7CiAgICAgICAgICAgICAgICBjYXNlIDE4OgogICAgICAgICAgICAgICAgICAgIHJldHVybiAnYWx0JzsKICAgICAgICAgICAgICAgIGNhc2UgMjc6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdlc2MnOwogICAgICAgICAgICAgICAgY2FzZSAzMjoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NwYWNlJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gb25seSB0cnVzdCBhbHBoYWJldHMgd2l0aCB0aGlzLgogICAgICAgICAgICB2YXIgaW5pdGlhbCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoa2V5KTsKICAgICAgICAgICAgaWYoL15bQS16MC05XSskLy50ZXN0KGluaXRpYWwpKQogICAgICAgICAgICAgICAgcmV0dXJuIGluaXRpYWwudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0sCiAgICAgICAgcmVhY3RPbktleTogZnVuY3Rpb24oZSl7CiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsKCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICBQcmV2ZW50IGtleXVwIGV2ZW50IGlmIHRoZSBkaWFsb2cgaXMgbm90IGxhc3QhCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB2YXIgYSA9ICQoJy5qY29uZmlybScpOwogICAgICAgICAgICBpZihhLmVxKGEubGVuZ3RoIC0gMSlbMF0gIT09IHRoaXMuJGVsWzBdKQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICAgICAgdmFyIGtleSA9IGUud2hpY2g7CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICBEbyBub3QgcmVhY3QgaWYgRW50ZXIgb3IgU3BhY2UgaXMgcHJlc3NlZCBvbiBpbnB1dCBlbGVtZW50cwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgaWYodGhpcy4kY29udGVudC5maW5kKCc6aW5wdXQnKS5pcygnOmZvY3VzJykgJiYgLzEzfDMyLy50ZXN0KGtleSkpCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgICAgICB2YXIga2V5Q2hhciA9IHRoaXMuX2dldEtleShrZXkpOwoKICAgICAgICAgICAgLy8gSWYgZXNjIGlzIHByZXNzZWQKICAgICAgICAgICAgaWYoa2V5Q2hhciA9PT0gJ2VzYycgJiYgdGhpcy5lc2NhcGVLZXkpewogICAgICAgICAgICAgICAgaWYodGhpcy5lc2NhcGVLZXkgPT09IHRydWUpewogICAgICAgICAgICAgICAgICAgIHRoaXMuJHNjcm9sbFBhbmUudHJpZ2dlcignY2xpY2snKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYodHlwZW9mIHRoaXMuZXNjYXBlS2V5ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdGhpcy5lc2NhcGVLZXkgPT09ICdmdW5jdGlvbicpewogICAgICAgICAgICAgICAgICAgIHZhciBidXR0b25LZXk7CiAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHRoaXMuZXNjYXBlS2V5ID09PSAnZnVuY3Rpb24nKXsKICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uS2V5ID0gdGhpcy5lc2NhcGVLZXkoKTsKICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uS2V5ID0gdGhpcy5lc2NhcGVLZXk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZihidXR0b25LZXkpCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLmJ1dHRvbnNbYnV0dG9uS2V5XSA9PT0gJ3VuZGVmaW5lZCcpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGVzY2FwZUtleSwgbm8gYnV0dG9ucyBmb3VuZCB3aXRoIGtleSAnICsgYnV0dG9uS2V5KTsKICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzWyckXycgKyBidXR0b25LZXldLnRyaWdnZXIoJ2NsaWNrJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gY2hlY2sgaWYgYW55IGJ1dHRvbiBpcyBsaXN0ZW5pbmcgdG8gdGhpcyBrZXkuCiAgICAgICAgICAgICQuZWFjaCh0aGlzLmJ1dHRvbnMsIGZ1bmN0aW9uKGtleSwgYnV0dG9uKXsKICAgICAgICAgICAgICAgIGlmKGJ1dHRvbi5rZXlzLmluZGV4T2Yoa2V5Q2hhcikgIT09IC0xKXsKICAgICAgICAgICAgICAgICAgICB0aGF0WyckXycgKyBrZXldLnRyaWdnZXIoJ2NsaWNrJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgc2V0RGlhbG9nQ2VudGVyOiBmdW5jdGlvbigpewogICAgICAgICAgICBjb25zb2xlLmluZm8oJ3NldERpYWxvZ0NlbnRlciBpcyBkZXByZWNhdGVkLCBkaWFsb2dzIGFyZSBjZW50ZXJlZCB3aXRoIENTUzMgdGFibGVzJyk7CiAgICAgICAgfSwKICAgICAgICBfdW53YXRjaENvbnRlbnQ6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fdGltZXIpOwogICAgICAgIH0sCiAgICAgICAgY2xvc2U6IGZ1bmN0aW9uKG9uQ2xvc2VQYXlsb2FkKXsKICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzOwoKICAgICAgICAgICAgaWYodHlwZW9mIHRoaXMub25DbG9zZSA9PT0gJ2Z1bmN0aW9uJykKICAgICAgICAgICAgICAgIHRoaXMub25DbG9zZShvbkNsb3NlUGF5bG9hZCk7CgogICAgICAgICAgICB0aGlzLl91bndhdGNoQ29udGVudCgpOwoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgIHVuYmluZCB0aGUgd2luZG93IHJlc2l6ZSAmIGtleXVwIGV2ZW50LgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgJCh3aW5kb3cpLnVuYmluZCgncmVzaXplLicgKyB0aGlzLl9pZCk7CiAgICAgICAgICAgICQod2luZG93KS51bmJpbmQoJ2tleXVwLicgKyB0aGlzLl9pZCk7CiAgICAgICAgICAgICQod2luZG93KS51bmJpbmQoJ2pjS2V5RG93bi4nICsgdGhpcy5faWQpOwoKICAgICAgICAgICAgaWYodGhpcy5kcmFnZ2FibGUpewogICAgICAgICAgICAgICAgJCh3aW5kb3cpLnVuYmluZCgnbW91c2Vtb3ZlLicgKyB0aGlzLl9pZCk7CiAgICAgICAgICAgICAgICAkKHdpbmRvdykudW5iaW5kKCdtb3VzZXVwLicgKyB0aGlzLl9pZCk7CiAgICAgICAgICAgICAgICB0aGlzLiR0aXRsZUNvbnRhaW5lci51bmJpbmQoJ21vdXNlZG93bicpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0aGF0LiRlbC5yZW1vdmVDbGFzcyh0aGF0LmxvYWRlZENsYXNzKTsKICAgICAgICAgICAgJCgnYm9keScpLnJlbW92ZUNsYXNzKCdqY29uZmlybS1uby1zY3JvbGwtJyArIHRoYXQuX2lkKTsKICAgICAgICAgICAgdGhhdC4kamNvbmZpcm1Cb3hDb250YWluZXIucmVtb3ZlQ2xhc3MoJ2pjb25maXJtLW5vLXRyYW5zaXRpb24nKTsKCiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHRoYXQuJGJvZHkuYWRkQ2xhc3ModGhhdC5jbG9zZUFuaW1hdGlvblBhcnNlZCk7CiAgICAgICAgICAgICAgICB0aGF0LiRqY29uZmlybUJnLmFkZENsYXNzKCdqY29uZmlybS1iZy1oJyk7CiAgICAgICAgICAgICAgICB2YXIgY2xvc2VUaW1lciA9ICh0aGF0LmNsb3NlQW5pbWF0aW9uID09PSAnbm9uZScpID8gMSA6IHRoYXQuYW5pbWF0aW9uU3BlZWQ7CgogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgIHRoYXQuJGVsLnJlbW92ZSgpOwoKICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IHcuamNvbmZpcm0uaW5zdGFuY2VzOwogICAgICAgICAgICAgICAgICAgIHZhciBpID0gdy5qY29uZmlybS5pbnN0YW5jZXMubGVuZ3RoIC0gMTsKICAgICAgICAgICAgICAgICAgICBmb3IoaTsgaSA+PSAwOyBpLS0pewogICAgICAgICAgICAgICAgICAgICAgICBpZih3Lmpjb25maXJtLmluc3RhbmNlc1tpXS5faWQgPT09IHRoYXQuX2lkKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcuamNvbmZpcm0uaW5zdGFuY2VzLnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy8gRm9jdXNpbmcgYSBlbGVtZW50LCBzY3JvbGxzIGF1dG9tYXRpY2FsbHkgdG8gdGhhdCBlbGVtZW50LgogICAgICAgICAgICAgICAgICAgIC8vIG5vIGluc3RhbmNlcyBzaG91bGQgYmUgb3BlbiwgbGFzdEZvY3VzZWQgc2hvdWxkIGJlIHRydWUsIHRoZSBsYXN0Rm9jdXNlZCBlbGVtZW50IG11c3QgZXhpc3RzIGluIERPTQogICAgICAgICAgICAgICAgICAgIGlmKCF3Lmpjb25maXJtLmluc3RhbmNlcy5sZW5ndGgpewogICAgICAgICAgICAgICAgICAgICAgICBpZih0aGF0LnNjcm9sbFRvUHJldmlvdXNFbGVtZW50ICYmIHcuamNvbmZpcm0ubGFzdEZvY3VzZWQgJiYgdy5qY29uZmlybS5sYXN0Rm9jdXNlZC5sZW5ndGggJiYgJC5jb250YWlucyhkb2N1bWVudCwgdy5qY29uZmlybS5sYXN0Rm9jdXNlZFswXSkpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRsZiA9IHcuamNvbmZpcm0ubGFzdEZvY3VzZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0aGF0LnNjcm9sbFRvUHJldmlvdXNFbGVtZW50QW5pbWF0ZSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ID0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdCA9IHcuamNvbmZpcm0ubGFzdEZvY3VzZWQub2Zmc2V0KCkudG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aCA9ICQod2luZG93KS5oZWlnaHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighKG90ID4gc3QgJiYgb3QgPCAoc3QgKyB3aCkpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjcm9sbFRvID0gKG90IC0gTWF0aC5yb3VuZCgod2ggLyAzKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3A6IHNjcm9sbFRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoYXQuYW5pbWF0aW9uU3BlZWQsICdzd2luZycsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBncmFjZWZ1bGx5IHNjcm9sbCBhbmQgdGhlbiBmb2N1cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsZi5mb2N1cygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgdG8gYmUgZm9jdXNlZCBpcyBhbHJlYWR5IGluIHZpZXcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsZi5mb2N1cygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsZi5mb2N1cygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdy5qY29uZmlybS5sYXN0Rm9jdXNlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgdGhhdC5vbkRlc3Ryb3kgPT09ICdmdW5jdGlvbicpCiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQub25EZXN0cm95KCk7CgogICAgICAgICAgICAgICAgfSwgY2xvc2VUaW1lciAqIDAuNDApOwogICAgICAgICAgICB9LCA1MCk7CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9LAogICAgICAgIG9wZW46IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIGlmKHRoaXMuaXNPcGVuKCkpCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgICAgICAvLyB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuX2J1aWxkSFRNTCgpOwogICAgICAgICAgICB0aGlzLl9iaW5kRXZlbnRzKCk7CiAgICAgICAgICAgIHRoaXMuX29wZW4oKTsKCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0sCiAgICAgICAgc2V0U3RhcnRpbmdQb2ludDogZnVuY3Rpb24oKXsKICAgICAgICAgICAgdmFyIGVsID0gZmFsc2U7CgogICAgICAgICAgICBpZih0aGlzLmFuaW1hdGVGcm9tRWxlbWVudCAhPT0gdHJ1ZSAmJiB0aGlzLmFuaW1hdGVGcm9tRWxlbWVudCl7CiAgICAgICAgICAgICAgICBlbCA9IHRoaXMuYW5pbWF0ZUZyb21FbGVtZW50OwogICAgICAgICAgICAgICAgdy5qY29uZmlybS5sYXN0Q2xpY2tlZCA9IGZhbHNlOwogICAgICAgICAgICB9ZWxzZSBpZih3Lmpjb25maXJtLmxhc3RDbGlja2VkICYmIHRoaXMuYW5pbWF0ZUZyb21FbGVtZW50ID09PSB0cnVlKXsKICAgICAgICAgICAgICAgIGVsID0gdy5qY29uZmlybS5sYXN0Q2xpY2tlZDsKICAgICAgICAgICAgICAgIHcuamNvbmZpcm0ubGFzdENsaWNrZWQgPSBmYWxzZTsKICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKCFlbCkKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgICAgIHZhciBvZmZzZXQgPSBlbC5vZmZzZXQoKTsKCiAgICAgICAgICAgIHZhciBpVG9wID0gZWwub3V0ZXJIZWlnaHQoKSAvIDI7CiAgICAgICAgICAgIHZhciBpTGVmdCA9IGVsLm91dGVyV2lkdGgoKSAvIDI7CgogICAgICAgICAgICAvLyBwbGFjaW5nIHBvc2l0aW9uIG9mIGpjb25maXJtIG1vZGFsIGluIGNlbnRlciBvZiBjbGlja2VkIGVsZW1lbnQKICAgICAgICAgICAgaVRvcCAtPSB0aGlzLiRqY29uZmlybUJveC5vdXRlckhlaWdodCgpIC8gMjsKICAgICAgICAgICAgaUxlZnQgLT0gdGhpcy4kamNvbmZpcm1Cb3gub3V0ZXJXaWR0aCgpIC8gMjsKCiAgICAgICAgICAgIC8vIGFic29sdXRlIHBvc2l0aW9uIG9uIHNjcmVlbgogICAgICAgICAgICB2YXIgc291cmNlVG9wID0gb2Zmc2V0LnRvcCArIGlUb3A7CiAgICAgICAgICAgIHNvdXJjZVRvcCA9IHNvdXJjZVRvcCAtIHRoaXMuX3Njcm9sbFRvcCgpOwogICAgICAgICAgICB2YXIgc291cmNlTGVmdCA9IG9mZnNldC5sZWZ0ICsgaUxlZnQ7CgogICAgICAgICAgICAvLyB3aW5kb3cgaGFsdmVkCiAgICAgICAgICAgIHZhciB3aCA9ICQod2luZG93KS5oZWlnaHQoKSAvIDI7CiAgICAgICAgICAgIHZhciB3dyA9ICQod2luZG93KS53aWR0aCgpIC8gMjsKCiAgICAgICAgICAgIHZhciB0YXJnZXRIID0gd2ggLSB0aGlzLiRqY29uZmlybUJveC5vdXRlckhlaWdodCgpIC8gMjsKICAgICAgICAgICAgdmFyIHRhcmdldFcgPSB3dyAtIHRoaXMuJGpjb25maXJtQm94Lm91dGVyV2lkdGgoKSAvIDI7CgogICAgICAgICAgICBzb3VyY2VUb3AgLT0gdGFyZ2V0SDsKICAgICAgICAgICAgc291cmNlTGVmdCAtPSB0YXJnZXRXOwoKICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGVsZW1lbnQgaXMgaW5zaWRlIHRoZSB2aWV3YWJsZSB3aW5kb3cuCiAgICAgICAgICAgIGlmKE1hdGguYWJzKHNvdXJjZVRvcCkgPiB3aCB8fCBNYXRoLmFicyhzb3VyY2VMZWZ0KSA+IHd3KQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICAgICAgdGhpcy4kamNvbmZpcm1Cb3hDb250YWluZXIuY3NzKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyBzb3VyY2VMZWZ0ICsgJ3B4LCAnICsgc291cmNlVG9wICsgJ3B4KScpOwogICAgICAgIH0sCiAgICAgICAgX29wZW46IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgICAgICAgaWYodHlwZW9mIHRoYXQub25PcGVuQmVmb3JlID09PSAnZnVuY3Rpb24nKQogICAgICAgICAgICAgICAgdGhhdC5vbk9wZW5CZWZvcmUoKTsKCiAgICAgICAgICAgIHRoaXMuJGJvZHkucmVtb3ZlQ2xhc3ModGhpcy5hbmltYXRpb25QYXJzZWQpOwogICAgICAgICAgICB0aGlzLiRqY29uZmlybUJnLnJlbW92ZUNsYXNzKCdqY29uZmlybS1iZy1oJyk7CiAgICAgICAgICAgIHRoaXMuJGJvZHkuZm9jdXMoKTsKCiAgICAgICAgICAgIHRoYXQuJGpjb25maXJtQm94Q29udGFpbmVyLmNzcygndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgMCArICdweCwgJyArIDAgKyAncHgpJyk7CgogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICB0aGF0LiRib2R5LmNzcyh0aGF0Ll9nZXRDU1ModGhhdC5hbmltYXRpb25TcGVlZCwgMSkpOwogICAgICAgICAgICAgICAgdGhhdC4kYm9keS5jc3MoewogICAgICAgICAgICAgICAgICAgICd0cmFuc2l0aW9uLXByb3BlcnR5JzogdGhhdC4kYm9keS5jc3MoJ3RyYW5zaXRpb24tcHJvcGVydHknKSArICcsIG1hcmdpbicKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgdGhhdC4kamNvbmZpcm1Cb3hDb250YWluZXIuYWRkQ2xhc3MoJ2pjb25maXJtLW5vLXRyYW5zaXRpb24nKTsKICAgICAgICAgICAgICAgIHRoYXQuX21vZGFsUmVhZHkucmVzb2x2ZSgpOwogICAgICAgICAgICAgICAgaWYodHlwZW9mIHRoYXQub25PcGVuID09PSAnZnVuY3Rpb24nKQogICAgICAgICAgICAgICAgICAgIHRoYXQub25PcGVuKCk7CgogICAgICAgICAgICAgICAgdGhhdC4kZWwuYWRkQ2xhc3ModGhhdC5sb2FkZWRDbGFzcyk7CiAgICAgICAgICAgIH0sIHRoaXMuYW5pbWF0aW9uU3BlZWQpOwogICAgICAgIH0sCiAgICAgICAgbG9hZGVkQ2xhc3M6ICdqY29uZmlybS1vcGVuJywKICAgICAgICBpc0Nsb3NlZDogZnVuY3Rpb24oKXsKICAgICAgICAgICAgcmV0dXJuICF0aGlzLiRlbCB8fCB0aGlzLiRlbC5wYXJlbnQoKS5sZW5ndGggPT09IDA7CiAgICAgICAgfSwKICAgICAgICBpc09wZW46IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc0Nsb3NlZCgpOwogICAgICAgIH0sCiAgICAgICAgdG9nZ2xlOiBmdW5jdGlvbigpewogICAgICAgICAgICBpZighdGhpcy5pc09wZW4oKSkKICAgICAgICAgICAgICAgIHRoaXMub3BlbigpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7CiAgICAgICAgfQogICAgfTsKCiAgICB3Lmpjb25maXJtLmluc3RhbmNlcyA9IFtdOwogICAgdy5qY29uZmlybS5sYXN0Rm9jdXNlZCA9IGZhbHNlOwogICAgdy5qY29uZmlybS5wbHVnaW5EZWZhdWx0cyA9IHsKICAgICAgICB0ZW1wbGF0ZTogJycgKwogICAgICAgICAgICAnPGRpdiBjbGFzcz0iamNvbmZpcm0iPicgKwogICAgICAgICAgICAnPGRpdiBjbGFzcz0iamNvbmZpcm0tYmcgamNvbmZpcm0tYmctaCI+PC9kaXY+JyArCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJqY29uZmlybS1zY3JvbGxwYW5lIj4nICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9Impjb25maXJtLXJvdyI+JyArCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJqY29uZmlybS1jZWxsIj4nICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9Impjb25maXJtLWhvbGRlciI+JyArCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJqYy1iczMtY29udGFpbmVyIj4nICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImpjLWJzMy1yb3ciPicgKwogICAgICAgICAgICAnPGRpdiBjbGFzcz0iamNvbmZpcm0tYm94LWNvbnRhaW5lciBqY29uZmlybS1hbmltYXRlZCI+JyArCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJqY29uZmlybS1ib3giIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJsYWJlbGxlZCIgdGFiaW5kZXg9Ii0xIj4nICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9Impjb25maXJtLWNsb3NlSWNvbiI+JnRpbWVzOzwvZGl2PicgKwogICAgICAgICAgICAnPGRpdiBjbGFzcz0iamNvbmZpcm0tdGl0bGUtYyI+JyArCiAgICAgICAgICAgICc8c3BhbiBjbGFzcz0iamNvbmZpcm0taWNvbi1jIj48L3NwYW4+JyArCiAgICAgICAgICAgICc8c3BhbiBjbGFzcz0iamNvbmZpcm0tdGl0bGUiPjwvc3Bhbj4nICsKICAgICAgICAgICAgJzwvZGl2PicgKwogICAgICAgICAgICAnPGRpdiBjbGFzcz0iamNvbmZpcm0tY29udGVudC1wYW5lIj4nICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9Impjb25maXJtLWNvbnRlbnQiPjwvZGl2PicgKwogICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJqY29uZmlybS1idXR0b25zIj4nICsKICAgICAgICAgICAgJzwvZGl2PicgKwogICAgICAgICAgICAnPGRpdiBjbGFzcz0iamNvbmZpcm0tY2xlYXIiPicgKwogICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAgICc8L2Rpdj4nICsKICAgICAgICAgICAgJzwvZGl2PicgKwogICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAgICc8L2Rpdj4nICsKICAgICAgICAgICAgJzwvZGl2PicgKwogICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAgICc8L2Rpdj4nICsKICAgICAgICAgICAgJzwvZGl2PjwvZGl2PicsCiAgICAgICAgdGl0bGU6ICdIZWxsbycsCiAgICAgICAgdGl0bGVDbGFzczogJycsCiAgICAgICAgdHlwZTogJ2RlZmF1bHQnLAogICAgICAgIHR5cGVBbmltYXRlZDogdHJ1ZSwKICAgICAgICBkcmFnZ2FibGU6IHRydWUsCiAgICAgICAgZHJhZ1dpbmRvd0dhcDogMTUsCiAgICAgICAgZHJhZ1dpbmRvd0JvcmRlcjogdHJ1ZSwKICAgICAgICBhbmltYXRlRnJvbUVsZW1lbnQ6IHRydWUsCiAgICAgICAgLyoqCiAgICAgICAgICogQGRlcHJlY2F0ZWQKICAgICAgICAgKi8KICAgICAgICBhbGlnbk1pZGRsZTogdHJ1ZSwKICAgICAgICBzbW9vdGhDb250ZW50OiB0cnVlLAogICAgICAgIGNvbnRlbnQ6ICdBcmUgeW91IHN1cmUgdG8gY29udGludWU/JywKICAgICAgICBidXR0b25zOiB7fSwKICAgICAgICBkZWZhdWx0QnV0dG9uczogewogICAgICAgICAgICBvazogewogICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBjbG9zZTogewogICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjb250ZW50TG9hZGVkOiBmdW5jdGlvbigpewogICAgICAgIH0sCiAgICAgICAgaWNvbjogJycsCiAgICAgICAgbGF6eU9wZW46IGZhbHNlLAogICAgICAgIGJnT3BhY2l0eTogbnVsbCwKICAgICAgICB0aGVtZTogJ2xpZ2h0JywKICAgICAgICBhbmltYXRpb246ICdzY2FsZScsCiAgICAgICAgY2xvc2VBbmltYXRpb246ICdzY2FsZScsCiAgICAgICAgYW5pbWF0aW9uU3BlZWQ6IDQwMCwKICAgICAgICBhbmltYXRpb25Cb3VuY2U6IDEsCiAgICAgICAgZXNjYXBlS2V5OiB0cnVlLAogICAgICAgIHJ0bDogZmFsc2UsCiAgICAgICAgY29udGFpbmVyOiAnYm9keScsCiAgICAgICAgY29udGFpbmVyRmx1aWQ6IGZhbHNlLAogICAgICAgIGJhY2tncm91bmREaXNtaXNzOiBmYWxzZSwKICAgICAgICBiYWNrZ3JvdW5kRGlzbWlzc0FuaW1hdGlvbjogJ3NoYWtlJywKICAgICAgICBhdXRvQ2xvc2U6IGZhbHNlLAogICAgICAgIGNsb3NlSWNvbjogbnVsbCwKICAgICAgICBjbG9zZUljb25DbGFzczogZmFsc2UsCiAgICAgICAgd2F0Y2hJbnRlcnZhbDogMTAwLAogICAgICAgIGNvbHVtbkNsYXNzOiAnY29sLW1kLTQgY29sLW1kLW9mZnNldC00IGNvbC1zbS02IGNvbC1zbS1vZmZzZXQtMyBjb2wteHMtMTAgY29sLXhzLW9mZnNldC0xJywKICAgICAgICBib3hXaWR0aDogJzUwJScsCiAgICAgICAgc2Nyb2xsVG9QcmV2aW91c0VsZW1lbnQ6IHRydWUsCiAgICAgICAgc2Nyb2xsVG9QcmV2aW91c0VsZW1lbnRBbmltYXRlOiB0cnVlLAogICAgICAgIHVzZUJvb3RzdHJhcDogdHJ1ZSwKICAgICAgICBvZmZzZXRUb3A6IDQwLAogICAgICAgIG9mZnNldEJvdHRvbTogNDAsCiAgICAgICAgYm9vdHN0cmFwQ2xhc3NlczogewogICAgICAgICAgICBjb250YWluZXI6ICdjb250YWluZXInLAogICAgICAgICAgICBjb250YWluZXJGbHVpZDogJ2NvbnRhaW5lci1mbHVpZCcsCiAgICAgICAgICAgIHJvdzogJ3JvdycKICAgICAgICB9LAogICAgICAgIG9uQ29udGVudFJlYWR5OiBmdW5jdGlvbigpewoKICAgICAgICB9LAogICAgICAgIG9uT3BlbkJlZm9yZTogZnVuY3Rpb24oKXsKCiAgICAgICAgfSwKICAgICAgICBvbk9wZW46IGZ1bmN0aW9uKCl7CgogICAgICAgIH0sCiAgICAgICAgb25DbG9zZTogZnVuY3Rpb24oKXsKCiAgICAgICAgfSwKICAgICAgICBvbkRlc3Ryb3k6IGZ1bmN0aW9uKCl7CgogICAgICAgIH0sCiAgICAgICAgb25BY3Rpb246IGZ1bmN0aW9uKCl7CgogICAgICAgIH0KICAgIH07CgogICAgLyoqCiAgICAgKiBUaGlzIHJlZmVycyB0byB0aGUgaXNzdWUgIzI0MSBhbmQgIzI0NgogICAgICoKICAgICAqIFByb2JsZW06CiAgICAgKiBCdXR0b24gQSBpcyBjbGlja2VkIChrZXlkb3duKSB1c2luZyB0aGUgS2V5Ym9hcmQgRU5URVIga2V5CiAgICAgKiBBIG9wZW5zIHRoZSBqY29uZmlybSBtb2RhbCBCLAogICAgICogQiBoYXMgcmVnaXN0ZXJlZCBFTlRFUiBrZXkgZm9yIG9uZSBvZiBpdHMgYnV0dG9uIEMKICAgICAqIEEgaXMgcmVsZWFzZWQgKGtleXVwKSwgQiBnZXRzIHRoZSBrZXl1cCBldmVudCBhbmQgdHJpZ2dlcnMgQy4KICAgICAqCiAgICAgKiBTb2x1dGlvbjoKICAgICAqIFJlZ2lzdGVyIGEgZ2xvYmFsIGtleWRvd24gZXZlbnQsIHRoYXQgdGVsbHMgamNvbmZpcm0gaWYgdGhlIGtleWRvd24gb3JpZ2luYXRlZCBpbnNpZGUgamNvbmZpcm0KICAgICAqLwogICAgdmFyIGtleURvd24gPSBmYWxzZTsKICAgICQod2luZG93KS5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGUpewogICAgICAgIGlmKCFrZXlEb3duKXsKICAgICAgICAgICAgdmFyICR0YXJnZXQgPSAkKGUudGFyZ2V0KTsKICAgICAgICAgICAgdmFyIHBhc3MgPSBmYWxzZTsKICAgICAgICAgICAgaWYoJHRhcmdldC5jbG9zZXN0KCcuamNvbmZpcm0tYm94JykubGVuZ3RoKQogICAgICAgICAgICAgICAgcGFzcyA9IHRydWU7CiAgICAgICAgICAgIGlmKHBhc3MpCiAgICAgICAgICAgICAgICAkKHdpbmRvdykudHJpZ2dlcignamNLZXlEb3duJyk7CgogICAgICAgICAgICBrZXlEb3duID0gdHJ1ZTsKICAgICAgICB9CiAgICB9KTsKICAgICQod2luZG93KS5vbigna2V5dXAnLCBmdW5jdGlvbigpewogICAgICAgIGtleURvd24gPSBmYWxzZTsKICAgIH0pOwogICAgdy5qY29uZmlybS5sYXN0Q2xpY2tlZCA9IGZhbHNlOwogICAgJChkb2N1bWVudCkub24oJ21vdXNlZG93bicsICdidXR0b24sIGEsIFtqYy1zb3VyY2VdJywgZnVuY3Rpb24oKXsKICAgICAgICB3Lmpjb25maXJtLmxhc3RDbGlja2VkID0gJCh0aGlzKTsKICAgIH0pOwp9KSk7Cg=='></script>
<script id=js_confirm_bunddled_js href='data:/text/plain;base64,LyohIGpRdWVyeSB2MS4xMS4zIHwgKGMpIDIwMDUsIDIwMTUgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8KIWZ1bmN0aW9uKGEsYil7Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9YS5kb2N1bWVudD9iKGEsITApOmZ1bmN0aW9uKGEpe2lmKCFhLmRvY3VtZW50KXRocm93IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpO3JldHVybiBiKGEpfTpiKGEpfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQ9Yy5zbGljZSxlPWMuY29uY2F0LGY9Yy5wdXNoLGc9Yy5pbmRleE9mLGg9e30saT1oLnRvU3RyaW5nLGo9aC5oYXNPd25Qcm9wZXJ0eSxrPXt9LGw9IjEuMTEuMyIsbT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgbS5mbi5pbml0KGEsYil9LG49L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLG89L14tbXMtLyxwPS8tKFtcZGEtel0pL2dpLHE9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi50b1VwcGVyQ2FzZSgpfTttLmZuPW0ucHJvdG90eXBlPXtqcXVlcnk6bCxjb25zdHJ1Y3RvcjptLHNlbGVjdG9yOiIiLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZC5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWE/MD5hP3RoaXNbYSt0aGlzLmxlbmd0aF06dGhpc1thXTpkLmNhbGwodGhpcyl9LHB1c2hTdGFjazpmdW5jdGlvbihhKXt2YXIgYj1tLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxhKTtyZXR1cm4gYi5wcmV2T2JqZWN0PXRoaXMsYi5jb250ZXh0PXRoaXMuY29udGV4dCxifSxlYWNoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG0uZWFjaCh0aGlzLGEsYil9LG1hcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobS5tYXAodGhpcyxmdW5jdGlvbihiLGMpe3JldHVybiBhLmNhbGwoYixjLGIpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubGVuZ3RoLGM9K2ErKDA+YT9iOjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhjPj0wJiZiPmM/W3RoaXNbY11dOltdKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpmLHNvcnQ6Yy5zb3J0LHNwbGljZTpjLnNwbGljZX0sbS5leHRlbmQ9bS5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlLGYsZz1hcmd1bWVudHNbMF18fHt9LGg9MSxpPWFyZ3VtZW50cy5sZW5ndGgsaj0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgZyYmKGo9ZyxnPWFyZ3VtZW50c1toXXx8e30saCsrKSwib2JqZWN0Ij09dHlwZW9mIGd8fG0uaXNGdW5jdGlvbihnKXx8KGc9e30pLGg9PT1pJiYoZz10aGlzLGgtLSk7aT5oO2grKylpZihudWxsIT0oZT1hcmd1bWVudHNbaF0pKWZvcihkIGluIGUpYT1nW2RdLGM9ZVtkXSxnIT09YyYmKGomJmMmJihtLmlzUGxhaW5PYmplY3QoYyl8fChiPW0uaXNBcnJheShjKSkpPyhiPyhiPSExLGY9YSYmbS5pc0FycmF5KGEpP2E6W10pOmY9YSYmbS5pc1BsYWluT2JqZWN0KGEpP2E6e30sZ1tkXT1tLmV4dGVuZChqLGYsYykpOnZvaWQgMCE9PWMmJihnW2RdPWMpKTtyZXR1cm4gZ30sbS5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKGwrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksaXNSZWFkeTohMCxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYSl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuImZ1bmN0aW9uIj09PW0udHlwZShhKX0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4iYXJyYXkiPT09bS50eXBlKGEpfSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YSYmYT09YS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4hbS5pc0FycmF5KGEpJiZhLXBhcnNlRmxvYXQoYSkrMT49MH0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVybiExO3JldHVybiEwfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe3ZhciBiO2lmKCFhfHwib2JqZWN0IiE9PW0udHlwZShhKXx8YS5ub2RlVHlwZXx8bS5pc1dpbmRvdyhhKSlyZXR1cm4hMTt0cnl7aWYoYS5jb25zdHJ1Y3RvciYmIWouY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhai5jYWxsKGEuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2goYyl7cmV0dXJuITF9aWYoay5vd25MYXN0KWZvcihiIGluIGEpcmV0dXJuIGouY2FsbChhLGIpO2ZvcihiIGluIGEpO3JldHVybiB2b2lkIDA9PT1ifHxqLmNhbGwoYSxiKX0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT9hKyIiOiJvYmplY3QiPT10eXBlb2YgYXx8ImZ1bmN0aW9uIj09dHlwZW9mIGE/aFtpLmNhbGwoYSldfHwib2JqZWN0Ijp0eXBlb2YgYX0sZ2xvYmFsRXZhbDpmdW5jdGlvbihiKXtiJiZtLnRyaW0oYikmJihhLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGIpe2EuZXZhbC5jYWxsKGEsYil9KShiKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UobywibXMtIikucmVwbGFjZShwLHEpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iLnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU9MCxmPWEubGVuZ3RoLGc9cihhKTtpZihjKXtpZihnKXtmb3IoO2Y+ZTtlKyspaWYoZD1iLmFwcGx5KGFbZV0sYyksZD09PSExKWJyZWFrfWVsc2UgZm9yKGUgaW4gYSlpZihkPWIuYXBwbHkoYVtlXSxjKSxkPT09ITEpYnJlYWt9ZWxzZSBpZihnKXtmb3IoO2Y+ZTtlKyspaWYoZD1iLmNhbGwoYVtlXSxlLGFbZV0pLGQ9PT0hMSlicmVha31lbHNlIGZvcihlIGluIGEpaWYoZD1iLmNhbGwoYVtlXSxlLGFbZV0pLGQ9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8iIjooYSsiIikucmVwbGFjZShuLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8W107cmV0dXJuIG51bGwhPWEmJihyKE9iamVjdChhKSk/bS5tZXJnZShjLCJzdHJpbmciPT10eXBlb2YgYT9bYV06YSk6Zi5jYWxsKGMsYSkpLGN9LGluQXJyYXk6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKGIpe2lmKGcpcmV0dXJuIGcuY2FsbChiLGEsYyk7Zm9yKGQ9Yi5sZW5ndGgsYz1jPzA+Yz9NYXRoLm1heCgwLGQrYyk6YzowO2Q+YztjKyspaWYoYyBpbiBiJiZiW2NdPT09YSlyZXR1cm4gY31yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXt2YXIgYz0rYi5sZW5ndGgsZD0wLGU9YS5sZW5ndGg7d2hpbGUoYz5kKWFbZSsrXT1iW2QrK107aWYoYyE9PWMpd2hpbGUodm9pZCAwIT09YltkXSlhW2UrK109YltkKytdO3JldHVybiBhLmxlbmd0aD1lLGF9LGdyZXA6ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZCxlPVtdLGY9MCxnPWEubGVuZ3RoLGg9IWM7Zz5mO2YrKylkPSFiKGFbZl0sZiksZCE9PWgmJmUucHVzaChhW2ZdKTtyZXR1cm4gZX0sbWFwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxmPTAsZz1hLmxlbmd0aCxoPXIoYSksaT1bXTtpZihoKWZvcig7Zz5mO2YrKylkPWIoYVtmXSxmLGMpLG51bGwhPWQmJmkucHVzaChkKTtlbHNlIGZvcihmIGluIGEpZD1iKGFbZl0sZixjKSxudWxsIT1kJiZpLnB1c2goZCk7cmV0dXJuIGUuYXBwbHkoW10saSl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihhLGIpe3ZhciBjLGUsZjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGImJihmPWFbYl0sYj1hLGE9ZiksbS5pc0Z1bmN0aW9uKGEpPyhjPWQuY2FsbChhcmd1bWVudHMsMiksZT1mdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGJ8fHRoaXMsYy5jb25jYXQoZC5jYWxsKGFyZ3VtZW50cykpKX0sZS5ndWlkPWEuZ3VpZD1hLmd1aWR8fG0uZ3VpZCsrLGUpOnZvaWQgMH0sbm93OmZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSxzdXBwb3J0Omt9KSxtLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtoWyJbb2JqZWN0ICIrYisiXSJdPWIudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIHIoYSl7dmFyIGI9Imxlbmd0aCJpbiBhJiZhLmxlbmd0aCxjPW0udHlwZShhKTtyZXR1cm4iZnVuY3Rpb24iPT09Y3x8bS5pc1dpbmRvdyhhKT8hMToxPT09YS5ub2RlVHlwZSYmYj8hMDoiYXJyYXkiPT09Y3x8MD09PWJ8fCJudW1iZXIiPT10eXBlb2YgYiYmYj4wJiZiLTEgaW4gYX12YXIgcz1mdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1PSJzaXp6bGUiKzEqbmV3IERhdGUsdj1hLmRvY3VtZW50LHc9MCx4PTAseT1oYSgpLHo9aGEoKSxBPWhhKCksQj1mdW5jdGlvbihhLGIpe3JldHVybiBhPT09YiYmKGw9ITApLDB9LEM9MTw8MzEsRD17fS5oYXNPd25Qcm9wZXJ0eSxFPVtdLEY9RS5wb3AsRz1FLnB1c2gsSD1FLnB1c2gsST1FLnNsaWNlLEo9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MCxkPWEubGVuZ3RoO2Q+YztjKyspaWYoYVtjXT09PWIpcmV0dXJuIGM7cmV0dXJuLTF9LEs9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIixMPSJbXFx4MjBcXHRcXHJcXG5cXGZdIixNPSIoPzpcXFxcLnxbXFx3LV18W15cXHgwMC1cXHhhMF0pKyIsTj1NLnJlcGxhY2UoInciLCJ3IyIpLE89IlxcWyIrTCsiKigiK00rIikoPzoiK0wrIiooWypeJHwhfl0/PSkiK0wrIiooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIitOKyIpKXwpIitMKyIqXFxdIixQPSI6KCIrTSsiKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIrTysiKSopfC4qKVxcKXwpIixRPW5ldyBSZWdFeHAoTCsiKyIsImciKSxSPW5ldyBSZWdFeHAoIl4iK0wrIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrTCsiKyQiLCJnIiksUz1uZXcgUmVnRXhwKCJeIitMKyIqLCIrTCsiKiIpLFQ9bmV3IFJlZ0V4cCgiXiIrTCsiKihbPit+XXwiK0wrIikiK0wrIioiKSxVPW5ldyBSZWdFeHAoIj0iK0wrIiooW15cXF0nXCJdKj8pIitMKyIqXFxdIiwiZyIpLFY9bmV3IFJlZ0V4cChQKSxXPW5ldyBSZWdFeHAoIl4iK04rIiQiKSxYPXtJRDpuZXcgUmVnRXhwKCJeIygiK00rIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrTSsiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTS5yZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrTyksUFNFVURPOm5ldyBSZWdFeHAoIl4iK1ApLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTCsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTCsiKig/OihbKy1dfCkiK0wrIiooXFxkKyl8KSkiK0wrIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAoIl4oPzoiK0srIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitMKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK0wrIiooKD86LVxcZCk/XFxkKikiK0wrIipcXCl8KSg/PVteLV18JCkiLCJpIil9LFk9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxaPS9eaFxkJC9pLCQ9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLF89L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxhYT0vWyt+XS8sYmE9Lyd8XFwvZyxjYT1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK0wrIj98KCIrTCsiKXwuKSIsImlnIiksZGE9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSIweCIrYi02NTUzNjtyZXR1cm4gZCE9PWR8fGM/YjowPmQ/U3RyaW5nLmZyb21DaGFyQ29kZShkKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1Mjk2LDEwMjMmZHw1NjMyMCl9LGVhPWZ1bmN0aW9uKCl7bSgpfTt0cnl7SC5hcHBseShFPUkuY2FsbCh2LmNoaWxkTm9kZXMpLHYuY2hpbGROb2RlcyksRVt2LmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChmYSl7SD17YXBwbHk6RS5sZW5ndGg/ZnVuY3Rpb24oYSxiKXtHLmFwcGx5KGEsSS5jYWxsKGIpKX06ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmxlbmd0aCxkPTA7d2hpbGUoYVtjKytdPWJbZCsrXSk7YS5sZW5ndGg9Yy0xfX19ZnVuY3Rpb24gZ2EoYSxiLGQsZSl7dmFyIGYsaCxqLGssbCxvLHIscyx3LHg7aWYoKGI/Yi5vd25lckRvY3VtZW50fHxiOnYpIT09biYmbShiKSxiPWJ8fG4sZD1kfHxbXSxrPWIubm9kZVR5cGUsInN0cmluZyIhPXR5cGVvZiBhfHwhYXx8MSE9PWsmJjkhPT1rJiYxMSE9PWspcmV0dXJuIGQ7aWYoIWUmJnApe2lmKDExIT09ayYmKGY9Xy5leGVjKGEpKSlpZihqPWZbMV0pe2lmKDk9PT1rKXtpZihoPWIuZ2V0RWxlbWVudEJ5SWQoaiksIWh8fCFoLnBhcmVudE5vZGUpcmV0dXJuIGQ7aWYoaC5pZD09PWopcmV0dXJuIGQucHVzaChoKSxkfWVsc2UgaWYoYi5vd25lckRvY3VtZW50JiYoaD1iLm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaikpJiZ0KGIsaCkmJmguaWQ9PT1qKXJldHVybiBkLnB1c2goaCksZH1lbHNle2lmKGZbMl0pcmV0dXJuIEguYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpKSxkO2lmKChqPWZbM10pJiZjLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEguYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaikpLGR9aWYoYy5xc2EmJighcXx8IXEudGVzdChhKSkpe2lmKHM9cj11LHc9Yix4PTEhPT1rJiZhLDE9PT1rJiYib2JqZWN0IiE9PWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7bz1nKGEpLChyPWIuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPXIucmVwbGFjZShiYSwiXFwkJiIpOmIuc2V0QXR0cmlidXRlKCJpZCIscykscz0iW2lkPSciK3MrIiddICIsbD1vLmxlbmd0aDt3aGlsZShsLS0pb1tsXT1zK3JhKG9bbF0pO3c9YWEudGVzdChhKSYmcGEoYi5wYXJlbnROb2RlKXx8Yix4PW8uam9pbigiLCIpfWlmKHgpdHJ5e3JldHVybiBILmFwcGx5KGQsdy5xdWVyeVNlbGVjdG9yQWxsKHgpKSxkfWNhdGNoKHkpe31maW5hbGx5e3J8fGIucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGkoYS5yZXBsYWNlKFIsIiQxIiksYixkLGUpfWZ1bmN0aW9uIGhhKCl7dmFyIGE9W107ZnVuY3Rpb24gYihjLGUpe3JldHVybiBhLnB1c2goYysiICIpPmQuY2FjaGVMZW5ndGgmJmRlbGV0ZSBiW2Euc2hpZnQoKV0sYltjKyIgIl09ZX1yZXR1cm4gYn1mdW5jdGlvbiBpYShhKXtyZXR1cm4gYVt1XT0hMCxhfWZ1bmN0aW9uIGphKGEpe3ZhciBiPW4uY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiEhYShiKX1jYXRjaChjKXtyZXR1cm4hMX1maW5hbGx5e2IucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbH19ZnVuY3Rpb24ga2EoYSxiKXt2YXIgYz1hLnNwbGl0KCJ8IiksZT1hLmxlbmd0aDt3aGlsZShlLS0pZC5hdHRySGFuZGxlW2NbZV1dPWJ9ZnVuY3Rpb24gbGEoYSxiKXt2YXIgYz1iJiZhLGQ9YyYmMT09PWEubm9kZVR5cGUmJjE9PT1iLm5vZGVUeXBlJiYofmIuc291cmNlSW5kZXh8fEMpLSh+YS5zb3VyY2VJbmRleHx8Qyk7aWYoZClyZXR1cm4gZDtpZihjKXdoaWxlKGM9Yy5uZXh0U2libGluZylpZihjPT09YilyZXR1cm4tMTtyZXR1cm4gYT8xOi0xfWZ1bmN0aW9uIG1hKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWMmJmIudHlwZT09PWF9fWZ1bmN0aW9uIG5hKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1jfHwiYnV0dG9uIj09PWMpJiZiLnR5cGU9PT1hfX1mdW5jdGlvbiBvYShhKXtyZXR1cm4gaWEoZnVuY3Rpb24oYil7cmV0dXJuIGI9K2IsaWEoZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEoW10sYy5sZW5ndGgsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pY1tlPWZbZ11dJiYoY1tlXT0hKGRbZV09Y1tlXSkpfSl9KX1mdW5jdGlvbiBwYShhKXtyZXR1cm4gYSYmInVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lJiZhfWM9Z2Euc3VwcG9ydD17fSxmPWdhLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPWEmJihhLm93bmVyRG9jdW1lbnR8fGEpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj8iSFRNTCIhPT1iLm5vZGVOYW1lOiExfSxtPWdhLnNldERvY3VtZW50PWZ1bmN0aW9uKGEpe3ZhciBiLGUsZz1hP2Eub3duZXJEb2N1bWVudHx8YTp2O3JldHVybiBnIT09biYmOT09PWcubm9kZVR5cGUmJmcuZG9jdW1lbnRFbGVtZW50PyhuPWcsbz1nLmRvY3VtZW50RWxlbWVudCxlPWcuZGVmYXVsdFZpZXcsZSYmZSE9PWUudG9wJiYoZS5hZGRFdmVudExpc3RlbmVyP2UuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIixlYSwhMSk6ZS5hdHRhY2hFdmVudCYmZS5hdHRhY2hFdmVudCgib251bmxvYWQiLGVhKSkscD0hZihnKSxjLmF0dHJpYnV0ZXM9amEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2xhc3NOYW1lPSJpIiwhYS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksYy5nZXRFbGVtZW50c0J5VGFnTmFtZT1qYShmdW5jdGlvbihhKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChnLmNyZWF0ZUNvbW1lbnQoIiIpKSwhYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLGMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT0kLnRlc3QoZy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSxjLmdldEJ5SWQ9amEoZnVuY3Rpb24oYSl7cmV0dXJuIG8uYXBwZW5kQ2hpbGQoYSkuaWQ9dSwhZy5nZXRFbGVtZW50c0J5TmFtZXx8IWcuZ2V0RWxlbWVudHNCeU5hbWUodSkubGVuZ3RofSksYy5nZXRCeUlkPyhkLmZpbmQuSUQ9ZnVuY3Rpb24oYSxiKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGIuZ2V0RWxlbWVudEJ5SWQmJnApe3ZhciBjPWIuZ2V0RWxlbWVudEJ5SWQoYSk7cmV0dXJuIGMmJmMucGFyZW50Tm9kZT9bY106W119fSxkLmZpbHRlci5JRD1mdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoY2EsZGEpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImlkIik9PT1ifX0pOihkZWxldGUgZC5maW5kLklELGQuZmlsdGVyLklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShjYSxkYSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBjPSJ1bmRlZmluZWQiIT10eXBlb2YgYS5nZXRBdHRyaWJ1dGVOb2RlJiZhLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGMmJmMudmFsdWU9PT1ifX0pLGQuZmluZC5UQUc9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihhLGIpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZT9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpOmMucXNhP2IucXVlcnlTZWxlY3RvckFsbChhKTp2b2lkIDB9OmZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPTAsZj1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO2lmKCIqIj09PWEpe3doaWxlKGM9ZltlKytdKTE9PT1jLm5vZGVUeXBlJiZkLnB1c2goYyk7cmV0dXJuIGR9cmV0dXJuIGZ9LGQuZmluZC5DTEFTUz1jLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGEsYil7cmV0dXJuIHA/Yi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpOnZvaWQgMH0scj1bXSxxPVtdLChjLnFzYT0kLnRlc3QoZy5xdWVyeVNlbGVjdG9yQWxsKSkmJihqYShmdW5jdGlvbihhKXtvLmFwcGVuZENoaWxkKGEpLmlubmVySFRNTD0iPGEgaWQ9JyIrdSsiJz48L2E+PHNlbGVjdCBpZD0nIit1KyItXGZdJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsYS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NhcHR1cmVePScnXSIpLmxlbmd0aCYmcS5wdXNoKCJbKl4kXT0iK0wrIiooPzonJ3xcIlwiKSIpLGEucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8cS5wdXNoKCJcXFsiK0wrIiooPzp2YWx1ZXwiK0srIikiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZH49Iit1KyItXSIpLmxlbmd0aHx8cS5wdXNoKCJ+PSIpLGEucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fHEucHVzaCgiOmNoZWNrZWQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoImEjIit1KyIrKiIpLmxlbmd0aHx8cS5wdXNoKCIuIy4rWyt+XSIpfSksamEoZnVuY3Rpb24oYSl7dmFyIGI9Zy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO2Iuc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksYS5hcHBlbmRDaGlsZChiKS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJEIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT1kXSIpLmxlbmd0aCYmcS5wdXNoKCJuYW1lIitMKyIqWypeJHwhfl0/PSIpLGEucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGh8fHEucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSxxLnB1c2goIiwuKjoiKX0pKSwoYy5tYXRjaGVzU2VsZWN0b3I9JC50ZXN0KHM9by5tYXRjaGVzfHxvLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8by5tb3pNYXRjaGVzU2VsZWN0b3J8fG8ub01hdGNoZXNTZWxlY3Rvcnx8by5tc01hdGNoZXNTZWxlY3RvcikpJiZqYShmdW5jdGlvbihhKXtjLmRpc2Nvbm5lY3RlZE1hdGNoPXMuY2FsbChhLCJkaXYiKSxzLmNhbGwoYSwiW3MhPScnXTp4Iiksci5wdXNoKCIhPSIsUCl9KSxxPXEubGVuZ3RoJiZuZXcgUmVnRXhwKHEuam9pbigifCIpKSxyPXIubGVuZ3RoJiZuZXcgUmVnRXhwKHIuam9pbigifCIpKSxiPSQudGVzdChvLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSx0PWJ8fCQudGVzdChvLmNvbnRhaW5zKT9mdW5jdGlvbihhLGIpe3ZhciBjPTk9PT1hLm5vZGVUeXBlP2EuZG9jdW1lbnRFbGVtZW50OmEsZD1iJiZiLnBhcmVudE5vZGU7cmV0dXJuIGE9PT1kfHwhKCFkfHwxIT09ZC5ub2RlVHlwZXx8IShjLmNvbnRhaW5zP2MuY29udGFpbnMoZCk6YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmMTYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihkKSkpfTpmdW5jdGlvbihhLGIpe2lmKGIpd2hpbGUoYj1iLnBhcmVudE5vZGUpaWYoYj09PWEpcmV0dXJuITA7cmV0dXJuITF9LEI9Yj9mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXJldHVybiBsPSEwLDA7dmFyIGQ9IWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24tIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb247cmV0dXJuIGQ/ZDooZD0oYS5vd25lckRvY3VtZW50fHxhKT09PShiLm93bmVyRG9jdW1lbnR8fGIpP2EuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYik6MSwxJmR8fCFjLnNvcnREZXRhY2hlZCYmYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhKT09PWQ/YT09PWd8fGEub3duZXJEb2N1bWVudD09PXYmJnQodixhKT8tMTpiPT09Z3x8Yi5vd25lckRvY3VtZW50PT09diYmdCh2LGIpPzE6az9KKGssYSktSihrLGIpOjA6NCZkPy0xOjEpfTpmdW5jdGlvbihhLGIpe2lmKGE9PT1iKXJldHVybiBsPSEwLDA7dmFyIGMsZD0wLGU9YS5wYXJlbnROb2RlLGY9Yi5wYXJlbnROb2RlLGg9W2FdLGk9W2JdO2lmKCFlfHwhZilyZXR1cm4gYT09PWc/LTE6Yj09PWc/MTplPy0xOmY/MTprP0ooayxhKS1KKGssYik6MDtpZihlPT09ZilyZXR1cm4gbGEoYSxiKTtjPWE7d2hpbGUoYz1jLnBhcmVudE5vZGUpaC51bnNoaWZ0KGMpO2M9Yjt3aGlsZShjPWMucGFyZW50Tm9kZSlpLnVuc2hpZnQoYyk7d2hpbGUoaFtkXT09PWlbZF0pZCsrO3JldHVybiBkP2xhKGhbZF0saVtkXSk6aFtkXT09PXY/LTE6aVtkXT09PXY/MTowfSxnKTpufSxnYS5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGdhKGEsbnVsbCxudWxsLGIpfSxnYS5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oYSxiKXtpZigoYS5vd25lckRvY3VtZW50fHxhKSE9PW4mJm0oYSksYj1iLnJlcGxhY2UoVSwiPSckMSddIiksISghYy5tYXRjaGVzU2VsZWN0b3J8fCFwfHxyJiZyLnRlc3QoYil8fHEmJnEudGVzdChiKSkpdHJ5e3ZhciBkPXMuY2FsbChhLGIpO2lmKGR8fGMuZGlzY29ubmVjdGVkTWF0Y2h8fGEuZG9jdW1lbnQmJjExIT09YS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gZH1jYXRjaChlKXt9cmV0dXJuIGdhKGIsbixudWxsLFthXSkubGVuZ3RoPjB9LGdhLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLHQoYSxiKX0sZ2EuYXR0cj1mdW5jdGlvbihhLGIpeyhhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKTt2YXIgZT1kLmF0dHJIYW5kbGVbYi50b0xvd2VyQ2FzZSgpXSxmPWUmJkQuY2FsbChkLmF0dHJIYW5kbGUsYi50b0xvd2VyQ2FzZSgpKT9lKGEsYiwhcCk6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1mP2Y6Yy5hdHRyaWJ1dGVzfHwhcD9hLmdldEF0dHJpYnV0ZShiKTooZj1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZmLnNwZWNpZmllZD9mLnZhbHVlOm51bGx9LGdhLmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIithKX0sZ2EudW5pcXVlU29ydD1mdW5jdGlvbihhKXt2YXIgYixkPVtdLGU9MCxmPTA7aWYobD0hYy5kZXRlY3REdXBsaWNhdGVzLGs9IWMuc29ydFN0YWJsZSYmYS5zbGljZSgwKSxhLnNvcnQoQiksbCl7d2hpbGUoYj1hW2YrK10pYj09PWFbZl0mJihlPWQucHVzaChmKSk7d2hpbGUoZS0tKWEuc3BsaWNlKGRbZV0sMSl9cmV0dXJuIGs9bnVsbCxhfSxlPWdhLmdldFRleHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz0iIixkPTAsZj1hLm5vZGVUeXBlO2lmKGYpe2lmKDE9PT1mfHw5PT09Znx8MTE9PT1mKXtpZigic3RyaW5nIj09dHlwZW9mIGEudGV4dENvbnRlbnQpcmV0dXJuIGEudGV4dENvbnRlbnQ7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWMrPWUoYSl9ZWxzZSBpZigzPT09Znx8ND09PWYpcmV0dXJuIGEubm9kZVZhbHVlfWVsc2Ugd2hpbGUoYj1hW2QrK10pYys9ZShiKTtyZXR1cm4gY30sZD1nYS5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzppYSxtYXRjaDpYLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnJlcGxhY2UoY2EsZGEpLGFbM109KGFbM118fGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKGNhLGRhKSwifj0iPT09YVsyXSYmKGFbM109IiAiK2FbM10rIiAiKSxhLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdPWFbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWFbMV0uc2xpY2UoMCwzKT8oYVszXXx8Z2EuZXJyb3IoYVswXSksYVs0XT0rKGFbNF0/YVs1XSsoYVs2XXx8MSk6MiooImV2ZW4iPT09YVszXXx8Im9kZCI9PT1hWzNdKSksYVs1XT0rKGFbN10rYVs4XXx8Im9kZCI9PT1hWzNdKSk6YVszXSYmZ2EuZXJyb3IoYVswXSksYX0sUFNFVURPOmZ1bmN0aW9uKGEpe3ZhciBiLGM9IWFbNl0mJmFbMl07cmV0dXJuIFguQ0hJTEQudGVzdChhWzBdKT9udWxsOihhWzNdP2FbMl09YVs0XXx8YVs1XXx8IiI6YyYmVi50ZXN0KGMpJiYoYj1nKGMsITApKSYmKGI9Yy5pbmRleE9mKCIpIixjLmxlbmd0aC1iKS1jLmxlbmd0aCkmJihhWzBdPWFbMF0uc2xpY2UoMCxiKSxhWzJdPWMuc2xpY2UoMCxiKSksYS5zbGljZSgwLDMpKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShjYSxkYSkudG9Mb3dlckNhc2UoKTtyZXR1cm4iKiI9PT1hP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1ifX0sQ0xBU1M6ZnVuY3Rpb24oYSl7dmFyIGI9eVthKyIgIl07cmV0dXJuIGJ8fChiPW5ldyBSZWdFeHAoIihefCIrTCsiKSIrYSsiKCIrTCsifCQpIikpJiZ5KGEsZnVuY3Rpb24oYSl7cmV0dXJuIGIudGVzdCgic3RyaW5nIj09dHlwZW9mIGEuY2xhc3NOYW1lJiZhLmNsYXNzTmFtZXx8InVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEF0dHJpYnV0ZSYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZCl7dmFyIGU9Z2EuYXR0cihkLGEpO3JldHVybiBudWxsPT1lPyIhPSI9PT1iOmI/KGUrPSIiLCI9Ij09PWI/ZT09PWM6IiE9Ij09PWI/ZSE9PWM6Il49Ij09PWI/YyYmMD09PWUuaW5kZXhPZihjKToiKj0iPT09Yj9jJiZlLmluZGV4T2YoYyk+LTE6IiQ9Ij09PWI/YyYmZS5zbGljZSgtYy5sZW5ndGgpPT09Yzoifj0iPT09Yj8oIiAiK2UucmVwbGFjZShRLCIgIikrIiAiKS5pbmRleE9mKGMpPi0xOiJ8PSI9PT1iP2U9PT1jfHxlLnNsaWNlKDAsYy5sZW5ndGgrMSk9PT1jKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPSJudGgiIT09YS5zbGljZSgwLDMpLGc9Imxhc3QiIT09YS5zbGljZSgtNCksaD0ib2YtdHlwZSI9PT1iO3JldHVybiAxPT09ZCYmMD09PWU/ZnVuY3Rpb24oYSl7cmV0dXJuISFhLnBhcmVudE5vZGV9OmZ1bmN0aW9uKGIsYyxpKXt2YXIgaixrLGwsbSxuLG8scD1mIT09Zz8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLHE9Yi5wYXJlbnROb2RlLHI9aCYmYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHM9IWkmJiFoO2lmKHEpe2lmKGYpe3doaWxlKHApe2w9Yjt3aGlsZShsPWxbcF0paWYoaD9sLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1yOjE9PT1sLm5vZGVUeXBlKXJldHVybiExO289cD0ib25seSI9PT1hJiYhbyYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZihvPVtnP3EuZmlyc3RDaGlsZDpxLmxhc3RDaGlsZF0sZyYmcyl7az1xW3VdfHwocVt1XT17fSksaj1rW2FdfHxbXSxuPWpbMF09PT13JiZqWzFdLG09alswXT09PXcmJmpbMl0sbD1uJiZxLmNoaWxkTm9kZXNbbl07d2hpbGUobD0rK24mJmwmJmxbcF18fChtPW49MCl8fG8ucG9wKCkpaWYoMT09PWwubm9kZVR5cGUmJisrbSYmbD09PWIpe2tbYV09W3csbixtXTticmVha319ZWxzZSBpZihzJiYoaj0oYlt1XXx8KGJbdV09e30pKVthXSkmJmpbMF09PT13KW09alsxXTtlbHNlIHdoaWxlKGw9KytuJiZsJiZsW3BdfHwobT1uPTApfHxvLnBvcCgpKWlmKChoP2wubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6MT09PWwubm9kZVR5cGUpJiYrK20mJihzJiYoKGxbdV18fChsW3VdPXt9KSlbYV09W3csbV0pLGw9PT1iKSlicmVhaztyZXR1cm4gbS09ZSxtPT09ZHx8bSVkPT09MCYmbS9kPj0wfX19LFBTRVVETzpmdW5jdGlvbihhLGIpe3ZhciBjLGU9ZC5wc2V1ZG9zW2FdfHxkLnNldEZpbHRlcnNbYS50b0xvd2VyQ2FzZSgpXXx8Z2EuZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIithKTtyZXR1cm4gZVt1XT9lKGIpOmUubGVuZ3RoPjE/KGM9W2EsYSwiIixiXSxkLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoYS50b0xvd2VyQ2FzZSgpKT9pYShmdW5jdGlvbihhLGMpe3ZhciBkLGY9ZShhLGIpLGc9Zi5sZW5ndGg7d2hpbGUoZy0tKWQ9SihhLGZbZ10pLGFbZF09IShjW2RdPWZbZ10pfSk6ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSwwLGMpfSk6ZX19LHBzZXVkb3M6e25vdDppYShmdW5jdGlvbihhKXt2YXIgYj1bXSxjPVtdLGQ9aChhLnJlcGxhY2UoUiwiJDEiKSk7cmV0dXJuIGRbdV0/aWEoZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGYsZz1kKGEsbnVsbCxlLFtdKSxoPWEubGVuZ3RoO3doaWxlKGgtLSkoZj1nW2hdKSYmKGFbaF09IShiW2hdPWYpKX0pOmZ1bmN0aW9uKGEsZSxmKXtyZXR1cm4gYlswXT1hLGQoYixudWxsLGYsYyksYlswXT1udWxsLCFjLnBvcCgpfX0pLGhhczppYShmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGdhKGEsYikubGVuZ3RoPjB9fSksY29udGFpbnM6aWEoZnVuY3Rpb24oYSl7cmV0dXJuIGE9YS5yZXBsYWNlKGNhLGRhKSxmdW5jdGlvbihiKXtyZXR1cm4oYi50ZXh0Q29udGVudHx8Yi5pbm5lclRleHR8fGUoYikpLmluZGV4T2YoYSk+LTF9fSksbGFuZzppYShmdW5jdGlvbihhKXtyZXR1cm4gVy50ZXN0KGF8fCIiKXx8Z2EuZXJyb3IoInVuc3VwcG9ydGVkIGxhbmc6ICIrYSksYT1hLnJlcGxhY2UoY2EsZGEpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24oYil7dmFyIGM7ZG8gaWYoYz1wP2IubGFuZzpiLmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8Yi5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4gYz1jLnRvTG93ZXJDYXNlKCksYz09PWF8fDA9PT1jLmluZGV4T2YoYSsiLSIpO3doaWxlKChiPWIucGFyZW50Tm9kZSkmJjE9PT1iLm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24oYil7dmFyIGM9YS5sb2NhdGlvbiYmYS5sb2NhdGlvbi5oYXNoO3JldHVybiBjJiZjLnNsaWNlKDEpPT09Yi5pZH0scm9vdDpmdW5jdGlvbihhKXtyZXR1cm4gYT09PW99LGZvY3VzOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09bi5hY3RpdmVFbGVtZW50JiYoIW4uaGFzRm9jdXN8fG4uaGFzRm9jdXMoKSkmJiEhKGEudHlwZXx8YS5ocmVmfHx+YS50YWJJbmRleCl9LGVuYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMX0sZGlzYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMH0sY2hlY2tlZDpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWImJiEhYS5jaGVja2VkfHwib3B0aW9uIj09PWImJiEhYS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsYS5zZWxlY3RlZD09PSEwfSxlbXB0eTpmdW5jdGlvbihhKXtmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpaWYoYS5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIWQucHNldWRvcy5lbXB0eShhKX0saGVhZGVyOmZ1bmN0aW9uKGEpe3JldHVybiBaLnRlc3QoYS5ub2RlTmFtZSl9LGlucHV0OmZ1bmN0aW9uKGEpe3JldHVybiBZLnRlc3QoYS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWImJiJidXR0b24iPT09YS50eXBlfHwiYnV0dG9uIj09PWJ9LHRleHQ6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuImlucHV0Ij09PWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09YS50eXBlJiYobnVsbD09KGI9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fCJ0ZXh0Ij09PWIudG9Mb3dlckNhc2UoKSl9LGZpcnN0Om9hKGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDpvYShmdW5jdGlvbihhLGIpe3JldHVybltiLTFdfSksZXE6b2EoZnVuY3Rpb24oYSxiLGMpe3JldHVyblswPmM/YytiOmNdfSksZXZlbjpvYShmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wO2I+YztjKz0yKWEucHVzaChjKTtyZXR1cm4gYX0pLG9kZDpvYShmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0xO2I+YztjKz0yKWEucHVzaChjKTtyZXR1cm4gYX0pLGx0Om9hKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MD5jP2MrYjpjOy0tZD49MDspYS5wdXNoKGQpO3JldHVybiBhfSksZ3Q6b2EoZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD0wPmM/YytiOmM7KytkPGI7KWEucHVzaChkKTtyZXR1cm4gYX0pfX0sZC5wc2V1ZG9zLm50aD1kLnBzZXVkb3MuZXE7Zm9yKGIgaW57cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pZC5wc2V1ZG9zW2JdPW1hKGIpO2ZvcihiIGlue3N1Ym1pdDohMCxyZXNldDohMH0pZC5wc2V1ZG9zW2JdPW5hKGIpO2Z1bmN0aW9uIHFhKCl7fXFhLnByb3RvdHlwZT1kLmZpbHRlcnM9ZC5wc2V1ZG9zLGQuc2V0RmlsdGVycz1uZXcgcWEsZz1nYS50b2tlbml6ZT1mdW5jdGlvbihhLGIpe3ZhciBjLGUsZixnLGgsaSxqLGs9elthKyIgIl07aWYoaylyZXR1cm4gYj8wOmsuc2xpY2UoMCk7aD1hLGk9W10saj1kLnByZUZpbHRlcjt3aGlsZShoKXsoIWN8fChlPVMuZXhlYyhoKSkpJiYoZSYmKGg9aC5zbGljZShlWzBdLmxlbmd0aCl8fGgpLGkucHVzaChmPVtdKSksYz0hMSwoZT1ULmV4ZWMoaCkpJiYoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5cGU6ZVswXS5yZXBsYWNlKFIsIiAiKX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2ZvcihnIGluIGQuZmlsdGVyKSEoZT1YW2ddLmV4ZWMoaCkpfHxqW2ddJiYhKGU9altnXShlKSl8fChjPWUuc2hpZnQoKSxmLnB1c2goe3ZhbHVlOmMsdHlwZTpnLG1hdGNoZXM6ZX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2lmKCFjKWJyZWFrfXJldHVybiBiP2gubGVuZ3RoOmg/Z2EuZXJyb3IoYSk6eihhLGkpLnNsaWNlKDApfTtmdW5jdGlvbiByYShhKXtmb3IodmFyIGI9MCxjPWEubGVuZ3RoLGQ9IiI7Yz5iO2IrKylkKz1hW2JdLnZhbHVlO3JldHVybiBkfWZ1bmN0aW9uIHNhKGEsYixjKXt2YXIgZD1iLmRpcixlPWMmJiJwYXJlbnROb2RlIj09PWQsZj14Kys7cmV0dXJuIGIuZmlyc3Q/ZnVuY3Rpb24oYixjLGYpe3doaWxlKGI9YltkXSlpZigxPT09Yi5ub2RlVHlwZXx8ZSlyZXR1cm4gYShiLGMsZil9OmZ1bmN0aW9uKGIsYyxnKXt2YXIgaCxpLGo9W3csZl07aWYoZyl7d2hpbGUoYj1iW2RdKWlmKCgxPT09Yi5ub2RlVHlwZXx8ZSkmJmEoYixjLGcpKXJldHVybiEwfWVsc2Ugd2hpbGUoYj1iW2RdKWlmKDE9PT1iLm5vZGVUeXBlfHxlKXtpZihpPWJbdV18fChiW3VdPXt9KSwoaD1pW2RdKSYmaFswXT09PXcmJmhbMV09PT1mKXJldHVybiBqWzJdPWhbMl07aWYoaVtkXT1qLGpbMl09YShiLGMsZykpcmV0dXJuITB9fX1mdW5jdGlvbiB0YShhKXtyZXR1cm4gYS5sZW5ndGg+MT9mdW5jdGlvbihiLGMsZCl7dmFyIGU9YS5sZW5ndGg7d2hpbGUoZS0tKWlmKCFhW2VdKGIsYyxkKSlyZXR1cm4hMTtyZXR1cm4hMH06YVswXX1mdW5jdGlvbiB1YShhLGIsYyl7Zm9yKHZhciBkPTAsZT1iLmxlbmd0aDtlPmQ7ZCsrKWdhKGEsYltkXSxjKTtyZXR1cm4gY31mdW5jdGlvbiB2YShhLGIsYyxkLGUpe2Zvcih2YXIgZixnPVtdLGg9MCxpPWEubGVuZ3RoLGo9bnVsbCE9YjtpPmg7aCsrKShmPWFbaF0pJiYoIWN8fGMoZixkLGUpKSYmKGcucHVzaChmKSxqJiZiLnB1c2goaCkpO3JldHVybiBnfWZ1bmN0aW9uIHdhKGEsYixjLGQsZSxmKXtyZXR1cm4gZCYmIWRbdV0mJihkPXdhKGQpKSxlJiYhZVt1XSYmKGU9d2EoZSxmKSksaWEoZnVuY3Rpb24oZixnLGgsaSl7dmFyIGosayxsLG09W10sbj1bXSxvPWcubGVuZ3RoLHA9Znx8dWEoYnx8IioiLGgubm9kZVR5cGU/W2hdOmgsW10pLHE9IWF8fCFmJiZiP3A6dmEocCxtLGEsaCxpKSxyPWM/ZXx8KGY/YTpvfHxkKT9bXTpnOnE7aWYoYyYmYyhxLHIsaCxpKSxkKXtqPXZhKHIsbiksZChqLFtdLGgsaSksaz1qLmxlbmd0aDt3aGlsZShrLS0pKGw9altrXSkmJihyW25ba11dPSEocVtuW2tdXT1sKSl9aWYoZil7aWYoZXx8YSl7aWYoZSl7aj1bXSxrPXIubGVuZ3RoO3doaWxlKGstLSkobD1yW2tdKSYmai5wdXNoKHFba109bCk7ZShudWxsLHI9W10saixpKX1rPXIubGVuZ3RoO3doaWxlKGstLSkobD1yW2tdKSYmKGo9ZT9KKGYsbCk6bVtrXSk+LTEmJihmW2pdPSEoZ1tqXT1sKSl9fWVsc2Ugcj12YShyPT09Zz9yLnNwbGljZShvLHIubGVuZ3RoKTpyKSxlP2UobnVsbCxnLHIsaSk6SC5hcHBseShnLHIpfSl9ZnVuY3Rpb24geGEoYSl7Zm9yKHZhciBiLGMsZSxmPWEubGVuZ3RoLGc9ZC5yZWxhdGl2ZVthWzBdLnR5cGVdLGg9Z3x8ZC5yZWxhdGl2ZVsiICJdLGk9Zz8xOjAsaz1zYShmdW5jdGlvbihhKXtyZXR1cm4gYT09PWJ9LGgsITApLGw9c2EoZnVuY3Rpb24oYSl7cmV0dXJuIEooYixhKT4tMX0saCwhMCksbT1bZnVuY3Rpb24oYSxjLGQpe3ZhciBlPSFnJiYoZHx8YyE9PWopfHwoKGI9Yykubm9kZVR5cGU/ayhhLGMsZCk6bChhLGMsZCkpO3JldHVybiBiPW51bGwsZX1dO2Y+aTtpKyspaWYoYz1kLnJlbGF0aXZlW2FbaV0udHlwZV0pbT1bc2EodGEobSksYyldO2Vsc2V7aWYoYz1kLmZpbHRlclthW2ldLnR5cGVdLmFwcGx5KG51bGwsYVtpXS5tYXRjaGVzKSxjW3VdKXtmb3IoZT0rK2k7Zj5lO2UrKylpZihkLnJlbGF0aXZlW2FbZV0udHlwZV0pYnJlYWs7cmV0dXJuIHdhKGk+MSYmdGEobSksaT4xJiZyYShhLnNsaWNlKDAsaS0xKS5jb25jYXQoe3ZhbHVlOiIgIj09PWFbaS0yXS50eXBlPyIqIjoiIn0pKS5yZXBsYWNlKFIsIiQxIiksYyxlPmkmJnhhKGEuc2xpY2UoaSxlKSksZj5lJiZ4YShhPWEuc2xpY2UoZSkpLGY+ZSYmcmEoYSkpfW0ucHVzaChjKX1yZXR1cm4gdGEobSl9ZnVuY3Rpb24geWEoYSxiKXt2YXIgYz1iLmxlbmd0aD4wLGU9YS5sZW5ndGg+MCxmPWZ1bmN0aW9uKGYsZyxoLGksayl7dmFyIGwsbSxvLHA9MCxxPSIwIixyPWYmJltdLHM9W10sdD1qLHU9Znx8ZSYmZC5maW5kLlRBRygiKiIsayksdj13Kz1udWxsPT10PzE6TWF0aC5yYW5kb20oKXx8LjEseD11Lmxlbmd0aDtmb3IoayYmKGo9ZyE9PW4mJmcpO3EhPT14JiZudWxsIT0obD11W3FdKTtxKyspe2lmKGUmJmwpe209MDt3aGlsZShvPWFbbSsrXSlpZihvKGwsZyxoKSl7aS5wdXNoKGwpO2JyZWFrfWsmJih3PXYpfWMmJigobD0hbyYmbCkmJnAtLSxmJiZyLnB1c2gobCkpfWlmKHArPXEsYyYmcSE9PXApe209MDt3aGlsZShvPWJbbSsrXSlvKHIscyxnLGgpO2lmKGYpe2lmKHA+MCl3aGlsZShxLS0pcltxXXx8c1txXXx8KHNbcV09Ri5jYWxsKGkpKTtzPXZhKHMpfUguYXBwbHkoaSxzKSxrJiYhZiYmcy5sZW5ndGg+MCYmcCtiLmxlbmd0aD4xJiZnYS51bmlxdWVTb3J0KGkpfXJldHVybiBrJiYodz12LGo9dCkscn07cmV0dXJuIGM/aWEoZik6Zn1yZXR1cm4gaD1nYS5jb21waWxlPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPVtdLGY9QVthKyIgIl07aWYoIWYpe2J8fChiPWcoYSkpLGM9Yi5sZW5ndGg7d2hpbGUoYy0tKWY9eGEoYltjXSksZlt1XT9kLnB1c2goZik6ZS5wdXNoKGYpO2Y9QShhLHlhKGUsZCkpLGYuc2VsZWN0b3I9YX1yZXR1cm4gZn0saT1nYS5zZWxlY3Q9ZnVuY3Rpb24oYSxiLGUsZil7dmFyIGksaixrLGwsbSxuPSJmdW5jdGlvbiI9PXR5cGVvZiBhJiZhLG89IWYmJmcoYT1uLnNlbGVjdG9yfHxhKTtpZihlPWV8fFtdLDE9PT1vLmxlbmd0aCl7aWYoaj1vWzBdPW9bMF0uc2xpY2UoMCksai5sZW5ndGg+MiYmIklEIj09PShrPWpbMF0pLnR5cGUmJmMuZ2V0QnlJZCYmOT09PWIubm9kZVR5cGUmJnAmJmQucmVsYXRpdmVbalsxXS50eXBlXSl7aWYoYj0oZC5maW5kLklEKGsubWF0Y2hlc1swXS5yZXBsYWNlKGNhLGRhKSxiKXx8W10pWzBdLCFiKXJldHVybiBlO24mJihiPWIucGFyZW50Tm9kZSksYT1hLnNsaWNlKGouc2hpZnQoKS52YWx1ZS5sZW5ndGgpfWk9WC5uZWVkc0NvbnRleHQudGVzdChhKT8wOmoubGVuZ3RoO3doaWxlKGktLSl7aWYoaz1qW2ldLGQucmVsYXRpdmVbbD1rLnR5cGVdKWJyZWFrO2lmKChtPWQuZmluZFtsXSkmJihmPW0oay5tYXRjaGVzWzBdLnJlcGxhY2UoY2EsZGEpLGFhLnRlc3QoalswXS50eXBlKSYmcGEoYi5wYXJlbnROb2RlKXx8YikpKXtpZihqLnNwbGljZShpLDEpLGE9Zi5sZW5ndGgmJnJhKGopLCFhKXJldHVybiBILmFwcGx5KGUsZiksZTticmVha319fXJldHVybihufHxoKGEsbykpKGYsYiwhcCxlLGFhLnRlc3QoYSkmJnBhKGIucGFyZW50Tm9kZSl8fGIpLGV9LGMuc29ydFN0YWJsZT11LnNwbGl0KCIiKS5zb3J0KEIpLmpvaW4oIiIpPT09dSxjLmRldGVjdER1cGxpY2F0ZXM9ISFsLG0oKSxjLnNvcnREZXRhY2hlZD1qYShmdW5jdGlvbihhKXtyZXR1cm4gMSZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG4uY3JlYXRlRWxlbWVudCgiZGl2IikpfSksamEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48L2E+IiwiIyI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIil9KXx8a2EoInR5cGV8aHJlZnxoZWlnaHR8d2lkdGgiLGZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz92b2lkIDA6YS5nZXRBdHRyaWJ1dGUoYiwidHlwZSI9PT1iLnRvTG93ZXJDYXNlKCk/MToyKX0pLGMuYXR0cmlidXRlcyYmamEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8aW5wdXQvPiIsYS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSwiIj09PWEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoInZhbHVlIil9KXx8a2EoInZhbHVlIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGN8fCJpbnB1dCIhPT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/dm9pZCAwOmEuZGVmYXVsdFZhbHVlfSksamEoZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWEuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpfSl8fGthKEssZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBjP3ZvaWQgMDphW2JdPT09ITA/Yi50b0xvd2VyQ2FzZSgpOihkPWEuZ2V0QXR0cmlidXRlTm9kZShiKSkmJmQuc3BlY2lmaWVkP2QudmFsdWU6bnVsbH0pLGdhfShhKTttLmZpbmQ9cyxtLmV4cHI9cy5zZWxlY3RvcnMsbS5leHByWyI6Il09bS5leHByLnBzZXVkb3MsbS51bmlxdWU9cy51bmlxdWVTb3J0LG0udGV4dD1zLmdldFRleHQsbS5pc1hNTERvYz1zLmlzWE1MLG0uY29udGFpbnM9cy5jb250YWluczt2YXIgdD1tLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LHU9L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyx2PS9eLlteOiNcW1wuLF0qJC87ZnVuY3Rpb24gdyhhLGIsYyl7aWYobS5pc0Z1bmN0aW9uKGIpKXJldHVybiBtLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiEhYi5jYWxsKGEsZCxhKSE9PWN9KTtpZihiLm5vZGVUeXBlKXJldHVybiBtLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYT09PWIhPT1jfSk7aWYoInN0cmluZyI9PXR5cGVvZiBiKXtpZih2LnRlc3QoYikpcmV0dXJuIG0uZmlsdGVyKGIsYSxjKTtiPW0uZmlsdGVyKGIsYSl9cmV0dXJuIG0uZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBtLmluQXJyYXkoYSxiKT49MCE9PWN9KX1tLmZpbHRlcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YlswXTtyZXR1cm4gYyYmKGE9Ijpub3QoIithKyIpIiksMT09PWIubGVuZ3RoJiYxPT09ZC5ub2RlVHlwZT9tLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGQsYSk/W2RdOltdOm0uZmluZC5tYXRjaGVzKGEsbS5ncmVwKGIsZnVuY3Rpb24oYSl7cmV0dXJuIDE9PT1hLm5vZGVUeXBlfSkpfSxtLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIgYixjPVtdLGQ9dGhpcyxlPWQubGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gdGhpcy5wdXNoU3RhY2sobShhKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2U+YjtiKyspaWYobS5jb250YWlucyhkW2JdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihiPTA7ZT5iO2IrKyltLmZpbmQoYSxkW2JdLGMpO3JldHVybiBjPXRoaXMucHVzaFN0YWNrKGU+MT9tLnVuaXF1ZShjKTpjKSxjLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3I/dGhpcy5zZWxlY3RvcisiICIrYTphLGN9LGZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sodyh0aGlzLGF8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sodyh0aGlzLGF8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiEhdyh0aGlzLCJzdHJpbmciPT10eXBlb2YgYSYmdC50ZXN0KGEpP20oYSk6YXx8W10sITEpLmxlbmd0aH19KTt2YXIgeCx5PWEuZG9jdW1lbnQsej0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLEE9bS5mbi5pbml0PWZ1bmN0aW9uKGEsYil7dmFyIGMsZDtpZighYSlyZXR1cm4gdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGEpe2lmKGM9IjwiPT09YS5jaGFyQXQoMCkmJiI+Ij09PWEuY2hhckF0KGEubGVuZ3RoLTEpJiZhLmxlbmd0aD49Mz9bbnVsbCxhLG51bGxdOnouZXhlYyhhKSwhY3x8IWNbMV0mJmIpcmV0dXJuIWJ8fGIuanF1ZXJ5PyhifHx4KS5maW5kKGEpOnRoaXMuY29uc3RydWN0b3IoYikuZmluZChhKTtpZihjWzFdKXtpZihiPWIgaW5zdGFuY2VvZiBtP2JbMF06YixtLm1lcmdlKHRoaXMsbS5wYXJzZUhUTUwoY1sxXSxiJiZiLm5vZGVUeXBlP2Iub3duZXJEb2N1bWVudHx8Yjp5LCEwKSksdS50ZXN0KGNbMV0pJiZtLmlzUGxhaW5PYmplY3QoYikpZm9yKGMgaW4gYiltLmlzRnVuY3Rpb24odGhpc1tjXSk/dGhpc1tjXShiW2NdKTp0aGlzLmF0dHIoYyxiW2NdKTtyZXR1cm4gdGhpc31pZihkPXkuZ2V0RWxlbWVudEJ5SWQoY1syXSksZCYmZC5wYXJlbnROb2RlKXtpZihkLmlkIT09Y1syXSlyZXR1cm4geC5maW5kKGEpO3RoaXMubGVuZ3RoPTEsdGhpc1swXT1kfXJldHVybiB0aGlzLmNvbnRleHQ9eSx0aGlzLnNlbGVjdG9yPWEsdGhpc31yZXR1cm4gYS5ub2RlVHlwZT8odGhpcy5jb250ZXh0PXRoaXNbMF09YSx0aGlzLmxlbmd0aD0xLHRoaXMpOm0uaXNGdW5jdGlvbihhKT8idW5kZWZpbmVkIiE9dHlwZW9mIHgucmVhZHk/eC5yZWFkeShhKTphKG0pOih2b2lkIDAhPT1hLnNlbGVjdG9yJiYodGhpcy5zZWxlY3Rvcj1hLnNlbGVjdG9yLHRoaXMuY29udGV4dD1hLmNvbnRleHQpLG0ubWFrZUFycmF5KGEsdGhpcykpfTtBLnByb3RvdHlwZT1tLmZuLHg9bSh5KTt2YXIgQj0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxDPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O20uZXh0ZW5kKHtkaXI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVtdLGU9YVtiXTt3aGlsZShlJiY5IT09ZS5ub2RlVHlwZSYmKHZvaWQgMD09PWN8fDEhPT1lLm5vZGVUeXBlfHwhbShlKS5pcyhjKSkpMT09PWUubm9kZVR5cGUmJmQucHVzaChlKSxlPWVbYl07cmV0dXJuIGR9LHNpYmxpbmc6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9W107YTthPWEubmV4dFNpYmxpbmcpMT09PWEubm9kZVR5cGUmJmEhPT1iJiZjLnB1c2goYSk7cmV0dXJuIGN9fSksbS5mbi5leHRlbmQoe2hhczpmdW5jdGlvbihhKXt2YXIgYixjPW0oYSx0aGlzKSxkPWMubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2ZvcihiPTA7ZD5iO2IrKylpZihtLmNvbnRhaW5zKHRoaXMsY1tiXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYyxkPTAsZT10aGlzLmxlbmd0aCxmPVtdLGc9dC50ZXN0KGEpfHwic3RyaW5nIiE9dHlwZW9mIGE/bShhLGJ8fHRoaXMuY29udGV4dCk6MDtlPmQ7ZCsrKWZvcihjPXRoaXNbZF07YyYmYyE9PWI7Yz1jLnBhcmVudE5vZGUpaWYoYy5ub2RlVHlwZTwxMSYmKGc/Zy5pbmRleChjKT4tMToxPT09Yy5ub2RlVHlwZSYmbS5maW5kLm1hdGNoZXNTZWxlY3RvcihjLGEpKSl7Zi5wdXNoKGMpO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjayhmLmxlbmd0aD4xP20udW5pcXVlKGYpOmYpfSxpbmRleDpmdW5jdGlvbihhKXtyZXR1cm4gYT8ic3RyaW5nIj09dHlwZW9mIGE/bS5pbkFycmF5KHRoaXNbMF0sbShhKSk6bS5pbkFycmF5KGEuanF1ZXJ5P2FbMF06YSx0aGlzKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnB1c2hTdGFjayhtLnVuaXF1ZShtLm1lcmdlKHRoaXMuZ2V0KCksbShhLGIpKSkpfSxhZGRCYWNrOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmFkZChudWxsPT1hP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGEpKX19KTtmdW5jdGlvbiBEKGEsYil7ZG8gYT1hW2JdO3doaWxlKGEmJjEhPT1hLm5vZGVUeXBlKTtyZXR1cm4gYX1tLmVhY2goe3BhcmVudDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJjExIT09Yi5ub2RlVHlwZT9iOm51bGx9LHBhcmVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIG0uZGlyKGEsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbS5kaXIoYSwicGFyZW50Tm9kZSIsYyl9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEQoYSwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gRChhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gbS5kaXIoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1cm4gbS5kaXIoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG0uZGlyKGEsIm5leHRTaWJsaW5nIixjKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbS5kaXIoYSwicHJldmlvdXNTaWJsaW5nIixjKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIG0uc2libGluZygoYS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIG0uc2libGluZyhhLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gbS5ub2RlTmFtZShhLCJpZnJhbWUiKT9hLmNvbnRlbnREb2N1bWVudHx8YS5jb250ZW50V2luZG93LmRvY3VtZW50Om0ubWVyZ2UoW10sYS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGEsYil7bS5mblthXT1mdW5jdGlvbihjLGQpe3ZhciBlPW0ubWFwKHRoaXMsYixjKTtyZXR1cm4iVW50aWwiIT09YS5zbGljZSgtNSkmJihkPWMpLGQmJiJzdHJpbmciPT10eXBlb2YgZCYmKGU9bS5maWx0ZXIoZCxlKSksdGhpcy5sZW5ndGg+MSYmKENbYV18fChlPW0udW5pcXVlKGUpKSxCLnRlc3QoYSkmJihlPWUucmV2ZXJzZSgpKSksdGhpcy5wdXNoU3RhY2soZSl9fSk7dmFyIEU9L1xTKy9nLEY9e307ZnVuY3Rpb24gRyhhKXt2YXIgYj1GW2FdPXt9O3JldHVybiBtLmVhY2goYS5tYXRjaChFKXx8W10sZnVuY3Rpb24oYSxjKXtiW2NdPSEwfSksYn1tLkNhbGxiYWNrcz1mdW5jdGlvbihhKXthPSJzdHJpbmciPT10eXBlb2YgYT9GW2FdfHxHKGEpOm0uZXh0ZW5kKHt9LGEpO3ZhciBiLGMsZCxlLGYsZyxoPVtdLGk9IWEub25jZSYmW10saj1mdW5jdGlvbihsKXtmb3IoYz1hLm1lbW9yeSYmbCxkPSEwLGY9Z3x8MCxnPTAsZT1oLmxlbmd0aCxiPSEwO2gmJmU+ZjtmKyspaWYoaFtmXS5hcHBseShsWzBdLGxbMV0pPT09ITEmJmEuc3RvcE9uRmFsc2Upe2M9ITE7YnJlYWt9Yj0hMSxoJiYoaT9pLmxlbmd0aCYmaihpLnNoaWZ0KCkpOmM/aD1bXTprLmRpc2FibGUoKSl9LGs9e2FkZDpmdW5jdGlvbigpe2lmKGgpe3ZhciBkPWgubGVuZ3RoOyFmdW5jdGlvbiBmKGIpe20uZWFjaChiLGZ1bmN0aW9uKGIsYyl7dmFyIGQ9bS50eXBlKGMpOyJmdW5jdGlvbiI9PT1kP2EudW5pcXVlJiZrLmhhcyhjKXx8aC5wdXNoKGMpOmMmJmMubGVuZ3RoJiYic3RyaW5nIiE9PWQmJmYoYyl9KX0oYXJndW1lbnRzKSxiP2U9aC5sZW5ndGg6YyYmKGc9ZCxqKGMpKX1yZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIGgmJm0uZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oYSxjKXt2YXIgZDt3aGlsZSgoZD1tLmluQXJyYXkoYyxoLGQpKT4tMSloLnNwbGljZShkLDEpLGImJihlPj1kJiZlLS0sZj49ZCYmZi0tKX0pLHRoaXN9LGhhczpmdW5jdGlvbihhKXtyZXR1cm4gYT9tLmluQXJyYXkoYSxoKT4tMTohKCFofHwhaC5sZW5ndGgpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBoPVtdLGU9MCx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGg9aT1jPXZvaWQgMCx0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiFofSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIGk9dm9pZCAwLGN8fGsuZGlzYWJsZSgpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiFpfSxmaXJlV2l0aDpmdW5jdGlvbihhLGMpe3JldHVybiFofHxkJiYhaXx8KGM9Y3x8W10sYz1bYSxjLnNsaWNlP2Muc2xpY2UoKTpjXSxiP2kucHVzaChjKTpqKGMpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGsuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFkfX07cmV0dXJuIGt9LG0uZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihhKXt2YXIgYj1bWyJyZXNvbHZlIiwiZG9uZSIsbS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIixtLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVqZWN0ZWQiXSxbIm5vdGlmeSIsInByb2dyZXNzIixtLkNhbGxiYWNrcygibWVtb3J5IildXSxjPSJwZW5kaW5nIixkPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBjfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gZS5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LHRoZW46ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHM7cmV0dXJuIG0uRGVmZXJyZWQoZnVuY3Rpb24oYyl7bS5lYWNoKGIsZnVuY3Rpb24oYixmKXt2YXIgZz1tLmlzRnVuY3Rpb24oYVtiXSkmJmFbYl07ZVtmWzFdXShmdW5jdGlvbigpe3ZhciBhPWcmJmcuYXBwbHkodGhpcyxhcmd1bWVudHMpO2EmJm0uaXNGdW5jdGlvbihhLnByb21pc2UpP2EucHJvbWlzZSgpLmRvbmUoYy5yZXNvbHZlKS5mYWlsKGMucmVqZWN0KS5wcm9ncmVzcyhjLm5vdGlmeSk6Y1tmWzBdKyJXaXRoIl0odGhpcz09PWQ/Yy5wcm9taXNlKCk6dGhpcyxnP1thXTphcmd1bWVudHMpfSl9KSxhPW51bGx9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWE/bS5leHRlbmQoYSxkKTpkfX0sZT17fTtyZXR1cm4gZC5waXBlPWQudGhlbixtLmVhY2goYixmdW5jdGlvbihhLGYpe3ZhciBnPWZbMl0saD1mWzNdO2RbZlsxXV09Zy5hZGQsaCYmZy5hZGQoZnVuY3Rpb24oKXtjPWh9LGJbMV5hXVsyXS5kaXNhYmxlLGJbMl1bMl0ubG9jayksZVtmWzBdXT1mdW5jdGlvbigpe3JldHVybiBlW2ZbMF0rIldpdGgiXSh0aGlzPT09ZT9kOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxlW2ZbMF0rIldpdGgiXT1nLmZpcmVXaXRofSksZC5wcm9taXNlKGUpLGEmJmEuY2FsbChlLGUpLGV9LHdoZW46ZnVuY3Rpb24oYSl7dmFyIGI9MCxjPWQuY2FsbChhcmd1bWVudHMpLGU9Yy5sZW5ndGgsZj0xIT09ZXx8YSYmbS5pc0Z1bmN0aW9uKGEucHJvbWlzZSk/ZTowLGc9MT09PWY/YTptLkRlZmVycmVkKCksaD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGUpe2JbYV09dGhpcyxjW2FdPWFyZ3VtZW50cy5sZW5ndGg+MT9kLmNhbGwoYXJndW1lbnRzKTplLGM9PT1pP2cubm90aWZ5V2l0aChiLGMpOi0tZnx8Zy5yZXNvbHZlV2l0aChiLGMpfX0saSxqLGs7aWYoZT4xKWZvcihpPW5ldyBBcnJheShlKSxqPW5ldyBBcnJheShlKSxrPW5ldyBBcnJheShlKTtlPmI7YisrKWNbYl0mJm0uaXNGdW5jdGlvbihjW2JdLnByb21pc2UpP2NbYl0ucHJvbWlzZSgpLmRvbmUoaChiLGssYykpLmZhaWwoZy5yZWplY3QpLnByb2dyZXNzKGgoYixqLGkpKTotLWY7cmV0dXJuIGZ8fGcucmVzb2x2ZVdpdGgoayxjKSxnLnByb21pc2UoKX19KTt2YXIgSDttLmZuLnJlYWR5PWZ1bmN0aW9uKGEpe3JldHVybiBtLnJlYWR5LnByb21pc2UoKS5kb25lKGEpLHRoaXN9LG0uZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpmdW5jdGlvbihhKXthP20ucmVhZHlXYWl0Kys6bS5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGEpe2lmKGE9PT0hMD8hLS1tLnJlYWR5V2FpdDohbS5pc1JlYWR5KXtpZigheS5ib2R5KXJldHVybiBzZXRUaW1lb3V0KG0ucmVhZHkpO20uaXNSZWFkeT0hMCxhIT09ITAmJi0tbS5yZWFkeVdhaXQ+MHx8KEgucmVzb2x2ZVdpdGgoeSxbbV0pLG0uZm4udHJpZ2dlckhhbmRsZXImJihtKHkpLnRyaWdnZXJIYW5kbGVyKCJyZWFkeSIpLG0oeSkub2ZmKCJyZWFkeSIpKSl9fX0pO2Z1bmN0aW9uIEkoKXt5LmFkZEV2ZW50TGlzdGVuZXI/KHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsSiwhMSksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixKLCExKSk6KHkuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsSiksYS5kZXRhY2hFdmVudCgib25sb2FkIixKKSl9ZnVuY3Rpb24gSigpeyh5LmFkZEV2ZW50TGlzdGVuZXJ8fCJsb2FkIj09PWV2ZW50LnR5cGV8fCJjb21wbGV0ZSI9PT15LnJlYWR5U3RhdGUpJiYoSSgpLG0ucmVhZHkoKSl9bS5yZWFkeS5wcm9taXNlPWZ1bmN0aW9uKGIpe2lmKCFIKWlmKEg9bS5EZWZlcnJlZCgpLCJjb21wbGV0ZSI9PT15LnJlYWR5U3RhdGUpc2V0VGltZW91dChtLnJlYWR5KTtlbHNlIGlmKHkuYWRkRXZlbnRMaXN0ZW5lcil5LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEosITEpLGEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsSiwhMSk7ZWxzZXt5LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEopLGEuYXR0YWNoRXZlbnQoIm9ubG9hZCIsSik7dmFyIGM9ITE7dHJ5e2M9bnVsbD09YS5mcmFtZUVsZW1lbnQmJnkuZG9jdW1lbnRFbGVtZW50fWNhdGNoKGQpe31jJiZjLmRvU2Nyb2xsJiYhZnVuY3Rpb24gZSgpe2lmKCFtLmlzUmVhZHkpe3RyeXtjLmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0Y2goYSl7cmV0dXJuIHNldFRpbWVvdXQoZSw1MCl9SSgpLG0ucmVhZHkoKX19KCl9cmV0dXJuIEgucHJvbWlzZShiKX07dmFyIEs9InVuZGVmaW5lZCIsTDtmb3IoTCBpbiBtKGspKWJyZWFrO2sub3duTGFzdD0iMCIhPT1MLGsuaW5saW5lQmxvY2tOZWVkc0xheW91dD0hMSxtKGZ1bmN0aW9uKCl7dmFyIGEsYixjLGQ7Yz15LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0sYyYmYy5zdHlsZSYmKGI9eS5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweCIsYy5hcHBlbmRDaGlsZChkKS5hcHBlbmRDaGlsZChiKSx0eXBlb2YgYi5zdHlsZS56b29tIT09SyYmKGIuc3R5bGUuY3NzVGV4dD0iZGlzcGxheTppbmxpbmU7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzoxcHg7d2lkdGg6MXB4O3pvb206MSIsay5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PWE9Mz09PWIub2Zmc2V0V2lkdGgsYSYmKGMuc3R5bGUuem9vbT0xKSksYy5yZW1vdmVDaGlsZChkKSl9KSxmdW5jdGlvbigpe3ZhciBhPXkuY3JlYXRlRWxlbWVudCgiZGl2Iik7aWYobnVsbD09ay5kZWxldGVFeHBhbmRvKXtrLmRlbGV0ZUV4cGFuZG89ITA7dHJ5e2RlbGV0ZSBhLnRlc3R9Y2F0Y2goYil7ay5kZWxldGVFeHBhbmRvPSExfX1hPW51bGx9KCksbS5hY2NlcHREYXRhPWZ1bmN0aW9uKGEpe3ZhciBiPW0ubm9EYXRhWyhhLm5vZGVOYW1lKyIgIikudG9Mb3dlckNhc2UoKV0sYz0rYS5ub2RlVHlwZXx8MTtyZXR1cm4gMSE9PWMmJjkhPT1jPyExOiFifHxiIT09ITAmJmEuZ2V0QXR0cmlidXRlKCJjbGFzc2lkIik9PT1ifTt2YXIgTT0vXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLE49LyhbQS1aXSkvZztmdW5jdGlvbiBPKGEsYixjKXtpZih2b2lkIDA9PT1jJiYxPT09YS5ub2RlVHlwZSl7dmFyIGQ9ImRhdGEtIitiLnJlcGxhY2UoTiwiLSQxIikudG9Mb3dlckNhc2UoKTtpZihjPWEuZ2V0QXR0cmlidXRlKGQpLCJzdHJpbmciPT10eXBlb2YgYyl7dHJ5e2M9InRydWUiPT09Yz8hMDoiZmFsc2UiPT09Yz8hMToibnVsbCI9PT1jP251bGw6K2MrIiI9PT1jPytjOk0udGVzdChjKT9tLnBhcnNlSlNPTihjKTpjfWNhdGNoKGUpe31tLmRhdGEoYSxiLGMpfWVsc2UgYz12b2lkIDB9cmV0dXJuIGN9ZnVuY3Rpb24gUChhKXt2YXIgYjtmb3IoYiBpbiBhKWlmKCgiZGF0YSIhPT1ifHwhbS5pc0VtcHR5T2JqZWN0KGFbYl0pKSYmInRvSlNPTiIhPT1iKXJldHVybiExOwoKICAgIHJldHVybiEwfWZ1bmN0aW9uIFEoYSxiLGQsZSl7aWYobS5hY2NlcHREYXRhKGEpKXt2YXIgZixnLGg9bS5leHBhbmRvLGk9YS5ub2RlVHlwZSxqPWk/bS5jYWNoZTphLGs9aT9hW2hdOmFbaF0mJmg7aWYoayYmaltrXSYmKGV8fGpba10uZGF0YSl8fHZvaWQgMCE9PWR8fCJzdHJpbmciIT10eXBlb2YgYilyZXR1cm4ga3x8KGs9aT9hW2hdPWMucG9wKCl8fG0uZ3VpZCsrOmgpLGpba118fChqW2tdPWk/e306e3RvSlNPTjptLm5vb3B9KSwoIm9iamVjdCI9PXR5cGVvZiBifHwiZnVuY3Rpb24iPT10eXBlb2YgYikmJihlP2pba109bS5leHRlbmQoaltrXSxiKTpqW2tdLmRhdGE9bS5leHRlbmQoaltrXS5kYXRhLGIpKSxnPWpba10sZXx8KGcuZGF0YXx8KGcuZGF0YT17fSksZz1nLmRhdGEpLHZvaWQgMCE9PWQmJihnW20uY2FtZWxDYXNlKGIpXT1kKSwic3RyaW5nIj09dHlwZW9mIGI/KGY9Z1tiXSxudWxsPT1mJiYoZj1nW20uY2FtZWxDYXNlKGIpXSkpOmY9ZyxmfX1mdW5jdGlvbiBSKGEsYixjKXtpZihtLmFjY2VwdERhdGEoYSkpe3ZhciBkLGUsZj1hLm5vZGVUeXBlLGc9Zj9tLmNhY2hlOmEsaD1mP2FbbS5leHBhbmRvXTptLmV4cGFuZG87aWYoZ1toXSl7aWYoYiYmKGQ9Yz9nW2hdOmdbaF0uZGF0YSkpe20uaXNBcnJheShiKT9iPWIuY29uY2F0KG0ubWFwKGIsbS5jYW1lbENhc2UpKTpiIGluIGQ/Yj1bYl06KGI9bS5jYW1lbENhc2UoYiksYj1iIGluIGQ/W2JdOmIuc3BsaXQoIiAiKSksZT1iLmxlbmd0aDt3aGlsZShlLS0pZGVsZXRlIGRbYltlXV07aWYoYz8hUChkKTohbS5pc0VtcHR5T2JqZWN0KGQpKXJldHVybn0oY3x8KGRlbGV0ZSBnW2hdLmRhdGEsUChnW2hdKSkpJiYoZj9tLmNsZWFuRGF0YShbYV0sITApOmsuZGVsZXRlRXhwYW5kb3x8ZyE9Zy53aW5kb3c/ZGVsZXRlIGdbaF06Z1toXT1udWxsKX19fW0uZXh0ZW5kKHtjYWNoZTp7fSxub0RhdGE6eyJhcHBsZXQgIjohMCwiZW1iZWQgIjohMCwib2JqZWN0ICI6ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCJ9LGhhc0RhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9YS5ub2RlVHlwZT9tLmNhY2hlW2FbbS5leHBhbmRvXV06YVttLmV4cGFuZG9dLCEhYSYmIVAoYSl9LGRhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBRKGEsYixjKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihhLGIpe3JldHVybiBSKGEsYil9LF9kYXRhOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gUShhLGIsYywhMCl9LF9yZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFIoYSxiLCEwKX19KSxtLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPXRoaXNbMF0sZz1mJiZmLmF0dHJpYnV0ZXM7aWYodm9pZCAwPT09YSl7aWYodGhpcy5sZW5ndGgmJihlPW0uZGF0YShmKSwxPT09Zi5ub2RlVHlwZSYmIW0uX2RhdGEoZiwicGFyc2VkQXR0cnMiKSkpe2M9Zy5sZW5ndGg7d2hpbGUoYy0tKWdbY10mJihkPWdbY10ubmFtZSwwPT09ZC5pbmRleE9mKCJkYXRhLSIpJiYoZD1tLmNhbWVsQ2FzZShkLnNsaWNlKDUpKSxPKGYsZCxlW2RdKSkpO20uX2RhdGEoZiwicGFyc2VkQXR0cnMiLCEwKX1yZXR1cm4gZX1yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGE/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7bS5kYXRhKHRoaXMsYSl9KTphcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7bS5kYXRhKHRoaXMsYSxiKX0pOmY/TyhmLGEsbS5kYXRhKGYsYSkpOnZvaWQgMH0scmVtb3ZlRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bS5yZW1vdmVEYXRhKHRoaXMsYSl9KX19KSxtLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBhPyhiPShifHwiZngiKSsicXVldWUiLGQ9bS5fZGF0YShhLGIpLGMmJighZHx8bS5pc0FycmF5KGMpP2Q9bS5fZGF0YShhLGIsbS5tYWtlQXJyYXkoYykpOmQucHVzaChjKSksZHx8W10pOnZvaWQgMH0sZGVxdWV1ZTpmdW5jdGlvbihhLGIpe2I9Ynx8ImZ4Ijt2YXIgYz1tLnF1ZXVlKGEsYiksZD1jLmxlbmd0aCxlPWMuc2hpZnQoKSxmPW0uX3F1ZXVlSG9va3MoYSxiKSxnPWZ1bmN0aW9uKCl7bS5kZXF1ZXVlKGEsYil9OyJpbnByb2dyZXNzIj09PWUmJihlPWMuc2hpZnQoKSxkLS0pLGUmJigiZngiPT09YiYmYy51bnNoaWZ0KCJpbnByb2dyZXNzIiksZGVsZXRlIGYuc3RvcCxlLmNhbGwoYSxnLGYpKSwhZCYmZiYmZi5lbXB0eS5maXJlKCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGEsYil7dmFyIGM9YisicXVldWVIb29rcyI7cmV0dXJuIG0uX2RhdGEoYSxjKXx8bS5fZGF0YShhLGMse2VtcHR5Om0uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLmFkZChmdW5jdGlvbigpe20uX3JlbW92ZURhdGEoYSxiKyJxdWV1ZSIpLG0uX3JlbW92ZURhdGEoYSxjKX0pfSl9fSksbS5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGEsYil7dmFyIGM9MjtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGEmJihiPWEsYT0iZngiLGMtLSksYXJndW1lbnRzLmxlbmd0aDxjP20ucXVldWUodGhpc1swXSxhKTp2b2lkIDA9PT1iP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9bS5xdWV1ZSh0aGlzLGEsYik7bS5fcXVldWVIb29rcyh0aGlzLGEpLCJmeCI9PT1hJiYiaW5wcm9ncmVzcyIhPT1jWzBdJiZtLmRlcXVldWUodGhpcyxhKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXttLmRlcXVldWUodGhpcyxhKX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnF1ZXVlKGF8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGEsYil7dmFyIGMsZD0xLGU9bS5EZWZlcnJlZCgpLGY9dGhpcyxnPXRoaXMubGVuZ3RoLGg9ZnVuY3Rpb24oKXstLWR8fGUucmVzb2x2ZVdpdGgoZixbZl0pfTsic3RyaW5nIiE9dHlwZW9mIGEmJihiPWEsYT12b2lkIDApLGE9YXx8ImZ4Ijt3aGlsZShnLS0pYz1tLl9kYXRhKGZbZ10sYSsicXVldWVIb29rcyIpLGMmJmMuZW1wdHkmJihkKyssYy5lbXB0eS5hZGQoaCkpO3JldHVybiBoKCksZS5wcm9taXNlKGIpfX0pO3ZhciBTPS9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLFQ9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxVPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9Ynx8YSwibm9uZSI9PT1tLmNzcyhhLCJkaXNwbGF5Iil8fCFtLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKX0sVj1tLmFjY2Vzcz1mdW5jdGlvbihhLGIsYyxkLGUsZixnKXt2YXIgaD0wLGk9YS5sZW5ndGgsaj1udWxsPT1jO2lmKCJvYmplY3QiPT09bS50eXBlKGMpKXtlPSEwO2ZvcihoIGluIGMpbS5hY2Nlc3MoYSxiLGgsY1toXSwhMCxmLGcpfWVsc2UgaWYodm9pZCAwIT09ZCYmKGU9ITAsbS5pc0Z1bmN0aW9uKGQpfHwoZz0hMCksaiYmKGc/KGIuY2FsbChhLGQpLGI9bnVsbCk6KGo9YixiPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gai5jYWxsKG0oYSksYyl9KSksYikpZm9yKDtpPmg7aCsrKWIoYVtoXSxjLGc/ZDpkLmNhbGwoYVtoXSxoLGIoYVtoXSxjKSkpO3JldHVybiBlP2E6aj9iLmNhbGwoYSk6aT9iKGFbMF0sYyk6Zn0sVz0vXig/OmNoZWNrYm94fHJhZGlvKSQvaTshZnVuY3Rpb24oKXt2YXIgYT15LmNyZWF0ZUVsZW1lbnQoImlucHV0IiksYj15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGM9eS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7aWYoYi5pbm5lckhUTUw9IiAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiIsay5sZWFkaW5nV2hpdGVzcGFjZT0zPT09Yi5maXJzdENoaWxkLm5vZGVUeXBlLGsudGJvZHk9IWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikubGVuZ3RoLGsuaHRtbFNlcmlhbGl6ZT0hIWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsay5odG1sNUNsb25lPSI8Om5hdj48LzpuYXY+IiE9PXkuY3JlYXRlRWxlbWVudCgibmF2IikuY2xvbmVOb2RlKCEwKS5vdXRlckhUTUwsYS50eXBlPSJjaGVja2JveCIsYS5jaGVja2VkPSEwLGMuYXBwZW5kQ2hpbGQoYSksay5hcHBlbmRDaGVja2VkPWEuY2hlY2tlZCxiLmlubmVySFRNTD0iPHRleHRhcmVhPng8L3RleHRhcmVhPiIsay5ub0Nsb25lQ2hlY2tlZD0hIWIuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlLGMuYXBwZW5kQ2hpbGQoYiksYi5pbm5lckhUTUw9IjxpbnB1dCB0eXBlPSdyYWRpbycgY2hlY2tlZD0nY2hlY2tlZCcgbmFtZT0ndCcvPiIsay5jaGVja0Nsb25lPWIuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGsubm9DbG9uZUV2ZW50PSEwLGIuYXR0YWNoRXZlbnQmJihiLmF0dGFjaEV2ZW50KCJvbmNsaWNrIixmdW5jdGlvbigpe2subm9DbG9uZUV2ZW50PSExfSksYi5jbG9uZU5vZGUoITApLmNsaWNrKCkpLG51bGw9PWsuZGVsZXRlRXhwYW5kbyl7ay5kZWxldGVFeHBhbmRvPSEwO3RyeXtkZWxldGUgYi50ZXN0fWNhdGNoKGQpe2suZGVsZXRlRXhwYW5kbz0hMX19fSgpLGZ1bmN0aW9uKCl7dmFyIGIsYyxkPXkuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zm9yKGIgaW57c3VibWl0OiEwLGNoYW5nZTohMCxmb2N1c2luOiEwfSljPSJvbiIrYiwoa1tiKyJCdWJibGVzIl09YyBpbiBhKXx8KGQuc2V0QXR0cmlidXRlKGMsInQiKSxrW2IrIkJ1YmJsZXMiXT1kLmF0dHJpYnV0ZXNbY10uZXhwYW5kbz09PSExKTtkPW51bGx9KCk7dmFyIFg9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWEpJC9pLFk9L15rZXkvLFo9L14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51KXxjbGljay8sJD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sXz0vXihbXi5dKikoPzpcLiguKyl8KSQvO2Z1bmN0aW9uIGFhKCl7cmV0dXJuITB9ZnVuY3Rpb24gYmEoKXtyZXR1cm4hMX1mdW5jdGlvbiBjYSgpe3RyeXtyZXR1cm4geS5hY3RpdmVFbGVtZW50fWNhdGNoKGEpe319bS5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG4sbyxwLHEscj1tLl9kYXRhKGEpO2lmKHIpe2MuaGFuZGxlciYmKGk9YyxjPWkuaGFuZGxlcixlPWkuc2VsZWN0b3IpLGMuZ3VpZHx8KGMuZ3VpZD1tLmd1aWQrKyksKGc9ci5ldmVudHMpfHwoZz1yLmV2ZW50cz17fSksKGs9ci5oYW5kbGUpfHwoaz1yLmhhbmRsZT1mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIG09PT1LfHxhJiZtLmV2ZW50LnRyaWdnZXJlZD09PWEudHlwZT92b2lkIDA6bS5ldmVudC5kaXNwYXRjaC5hcHBseShrLmVsZW0sYXJndW1lbnRzKX0say5lbGVtPWEpLGI9KGJ8fCIiKS5tYXRjaChFKXx8WyIiXSxoPWIubGVuZ3RoO3doaWxlKGgtLSlmPV8uZXhlYyhiW2hdKXx8W10sbz1xPWZbMV0scD0oZlsyXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLG8mJihqPW0uZXZlbnQuc3BlY2lhbFtvXXx8e30sbz0oZT9qLmRlbGVnYXRlVHlwZTpqLmJpbmRUeXBlKXx8byxqPW0uZXZlbnQuc3BlY2lhbFtvXXx8e30sbD1tLmV4dGVuZCh7dHlwZTpvLG9yaWdUeXBlOnEsZGF0YTpkLGhhbmRsZXI6YyxndWlkOmMuZ3VpZCxzZWxlY3RvcjplLG5lZWRzQ29udGV4dDplJiZtLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoZSksbmFtZXNwYWNlOnAuam9pbigiLiIpfSxpKSwobj1nW29dKXx8KG49Z1tvXT1bXSxuLmRlbGVnYXRlQ291bnQ9MCxqLnNldHVwJiZqLnNldHVwLmNhbGwoYSxkLHAsaykhPT0hMXx8KGEuYWRkRXZlbnRMaXN0ZW5lcj9hLmFkZEV2ZW50TGlzdGVuZXIobyxrLCExKTphLmF0dGFjaEV2ZW50JiZhLmF0dGFjaEV2ZW50KCJvbiIrbyxrKSkpLGouYWRkJiYoai5hZGQuY2FsbChhLGwpLGwuaGFuZGxlci5ndWlkfHwobC5oYW5kbGVyLmd1aWQ9Yy5ndWlkKSksZT9uLnNwbGljZShuLmRlbGVnYXRlQ291bnQrKywwLGwpOm4ucHVzaChsKSxtLmV2ZW50Lmdsb2JhbFtvXT0hMCk7YT1udWxsfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbixvLHAscSxyPW0uaGFzRGF0YShhKSYmbS5fZGF0YShhKTtpZihyJiYoaz1yLmV2ZW50cykpe2I9KGJ8fCIiKS5tYXRjaChFKXx8WyIiXSxqPWIubGVuZ3RoO3doaWxlKGotLSlpZihoPV8uZXhlYyhiW2pdKXx8W10sbz1xPWhbMV0scD0oaFsyXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLG8pe2w9bS5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShkP2wuZGVsZWdhdGVUeXBlOmwuYmluZFR5cGUpfHxvLG49a1tvXXx8W10saD1oWzJdJiZuZXcgUmVnRXhwKCIoXnxcXC4pIitwLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpLGk9Zj1uLmxlbmd0aDt3aGlsZShmLS0pZz1uW2ZdLCFlJiZxIT09Zy5vcmlnVHlwZXx8YyYmYy5ndWlkIT09Zy5ndWlkfHxoJiYhaC50ZXN0KGcubmFtZXNwYWNlKXx8ZCYmZCE9PWcuc2VsZWN0b3ImJigiKioiIT09ZHx8IWcuc2VsZWN0b3IpfHwobi5zcGxpY2UoZiwxKSxnLnNlbGVjdG9yJiZuLmRlbGVnYXRlQ291bnQtLSxsLnJlbW92ZSYmbC5yZW1vdmUuY2FsbChhLGcpKTtpJiYhbi5sZW5ndGgmJihsLnRlYXJkb3duJiZsLnRlYXJkb3duLmNhbGwoYSxwLHIuaGFuZGxlKSE9PSExfHxtLnJlbW92ZUV2ZW50KGEsbyxyLmhhbmRsZSksZGVsZXRlIGtbb10pfWVsc2UgZm9yKG8gaW4gayltLmV2ZW50LnJlbW92ZShhLG8rYltqXSxjLGQsITApO20uaXNFbXB0eU9iamVjdChrKSYmKGRlbGV0ZSByLmhhbmRsZSxtLl9yZW1vdmVEYXRhKGEsImV2ZW50cyIpKX19LHRyaWdnZXI6ZnVuY3Rpb24oYixjLGQsZSl7dmFyIGYsZyxoLGksayxsLG4sbz1bZHx8eV0scD1qLmNhbGwoYiwidHlwZSIpP2IudHlwZTpiLHE9ai5jYWxsKGIsIm5hbWVzcGFjZSIpP2IubmFtZXNwYWNlLnNwbGl0KCIuIik6W107aWYoaD1sPWQ9ZHx8eSwzIT09ZC5ub2RlVHlwZSYmOCE9PWQubm9kZVR5cGUmJiEkLnRlc3QocCttLmV2ZW50LnRyaWdnZXJlZCkmJihwLmluZGV4T2YoIi4iKT49MCYmKHE9cC5zcGxpdCgiLiIpLHA9cS5zaGlmdCgpLHEuc29ydCgpKSxnPXAuaW5kZXhPZigiOiIpPDAmJiJvbiIrcCxiPWJbbS5leHBhbmRvXT9iOm5ldyBtLkV2ZW50KHAsIm9iamVjdCI9PXR5cGVvZiBiJiZiKSxiLmlzVHJpZ2dlcj1lPzI6MyxiLm5hbWVzcGFjZT1xLmpvaW4oIi4iKSxiLm5hbWVzcGFjZV9yZT1iLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIitxLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsYi5yZXN1bHQ9dm9pZCAwLGIudGFyZ2V0fHwoYi50YXJnZXQ9ZCksYz1udWxsPT1jP1tiXTptLm1ha2VBcnJheShjLFtiXSksaz1tLmV2ZW50LnNwZWNpYWxbcF18fHt9LGV8fCFrLnRyaWdnZXJ8fGsudHJpZ2dlci5hcHBseShkLGMpIT09ITEpKXtpZighZSYmIWsubm9CdWJibGUmJiFtLmlzV2luZG93KGQpKXtmb3IoaT1rLmRlbGVnYXRlVHlwZXx8cCwkLnRlc3QoaStwKXx8KGg9aC5wYXJlbnROb2RlKTtoO2g9aC5wYXJlbnROb2RlKW8ucHVzaChoKSxsPWg7bD09PShkLm93bmVyRG9jdW1lbnR8fHkpJiZvLnB1c2gobC5kZWZhdWx0Vmlld3x8bC5wYXJlbnRXaW5kb3d8fGEpfW49MDt3aGlsZSgoaD1vW24rK10pJiYhYi5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWIudHlwZT1uPjE/aTprLmJpbmRUeXBlfHxwLGY9KG0uX2RhdGEoaCwiZXZlbnRzIil8fHt9KVtiLnR5cGVdJiZtLl9kYXRhKGgsImhhbmRsZSIpLGYmJmYuYXBwbHkoaCxjKSxmPWcmJmhbZ10sZiYmZi5hcHBseSYmbS5hY2NlcHREYXRhKGgpJiYoYi5yZXN1bHQ9Zi5hcHBseShoLGMpLGIucmVzdWx0PT09ITEmJmIucHJldmVudERlZmF1bHQoKSk7aWYoYi50eXBlPXAsIWUmJiFiLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYoIWsuX2RlZmF1bHR8fGsuX2RlZmF1bHQuYXBwbHkoby5wb3AoKSxjKT09PSExKSYmbS5hY2NlcHREYXRhKGQpJiZnJiZkW3BdJiYhbS5pc1dpbmRvdyhkKSl7bD1kW2ddLGwmJihkW2ddPW51bGwpLG0uZXZlbnQudHJpZ2dlcmVkPXA7dHJ5e2RbcF0oKX1jYXRjaChyKXt9bS5ldmVudC50cmlnZ2VyZWQ9dm9pZCAwLGwmJihkW2ddPWwpfXJldHVybiBiLnJlc3VsdH19LGRpc3BhdGNoOmZ1bmN0aW9uKGEpe2E9bS5ldmVudC5maXgoYSk7dmFyIGIsYyxlLGYsZyxoPVtdLGk9ZC5jYWxsKGFyZ3VtZW50cyksaj0obS5fZGF0YSh0aGlzLCJldmVudHMiKXx8e30pW2EudHlwZV18fFtdLGs9bS5ldmVudC5zcGVjaWFsW2EudHlwZV18fHt9O2lmKGlbMF09YSxhLmRlbGVnYXRlVGFyZ2V0PXRoaXMsIWsucHJlRGlzcGF0Y2h8fGsucHJlRGlzcGF0Y2guY2FsbCh0aGlzLGEpIT09ITEpe2g9bS5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsYSxqKSxiPTA7d2hpbGUoKGY9aFtiKytdKSYmIWEuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7YS5jdXJyZW50VGFyZ2V0PWYuZWxlbSxnPTA7d2hpbGUoKGU9Zi5oYW5kbGVyc1tnKytdKSYmIWEuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkoIWEubmFtZXNwYWNlX3JlfHxhLm5hbWVzcGFjZV9yZS50ZXN0KGUubmFtZXNwYWNlKSkmJihhLmhhbmRsZU9iaj1lLGEuZGF0YT1lLmRhdGEsYz0oKG0uZXZlbnQuc3BlY2lhbFtlLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8ZS5oYW5kbGVyKS5hcHBseShmLmVsZW0saSksdm9pZCAwIT09YyYmKGEucmVzdWx0PWMpPT09ITEmJihhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSkpfXJldHVybiBrLnBvc3REaXNwYXRjaCYmay5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLGEpLGEucmVzdWx0fX0saGFuZGxlcnM6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnPVtdLGg9Yi5kZWxlZ2F0ZUNvdW50LGk9YS50YXJnZXQ7aWYoaCYmaS5ub2RlVHlwZSYmKCFhLmJ1dHRvbnx8ImNsaWNrIiE9PWEudHlwZSkpZm9yKDtpIT10aGlzO2k9aS5wYXJlbnROb2RlfHx0aGlzKWlmKDE9PT1pLm5vZGVUeXBlJiYoaS5kaXNhYmxlZCE9PSEwfHwiY2xpY2siIT09YS50eXBlKSl7Zm9yKGU9W10sZj0wO2g+ZjtmKyspZD1iW2ZdLGM9ZC5zZWxlY3RvcisiICIsdm9pZCAwPT09ZVtjXSYmKGVbY109ZC5uZWVkc0NvbnRleHQ/bShjLHRoaXMpLmluZGV4KGkpPj0wOm0uZmluZChjLHRoaXMsbnVsbCxbaV0pLmxlbmd0aCksZVtjXSYmZS5wdXNoKGQpO2UubGVuZ3RoJiZnLnB1c2goe2VsZW06aSxoYW5kbGVyczplfSl9cmV0dXJuIGg8Yi5sZW5ndGgmJmcucHVzaCh7ZWxlbTp0aGlzLGhhbmRsZXJzOmIuc2xpY2UoaCl9KSxnfSxmaXg6ZnVuY3Rpb24oYSl7aWYoYVttLmV4cGFuZG9dKXJldHVybiBhO3ZhciBiLGMsZCxlPWEudHlwZSxmPWEsZz10aGlzLmZpeEhvb2tzW2VdO2d8fCh0aGlzLmZpeEhvb2tzW2VdPWc9Wi50ZXN0KGUpP3RoaXMubW91c2VIb29rczpZLnRlc3QoZSk/dGhpcy5rZXlIb29rczp7fSksZD1nLnByb3BzP3RoaXMucHJvcHMuY29uY2F0KGcucHJvcHMpOnRoaXMucHJvcHMsYT1uZXcgbS5FdmVudChmKSxiPWQubGVuZ3RoO3doaWxlKGItLSljPWRbYl0sYVtjXT1mW2NdO3JldHVybiBhLnRhcmdldHx8KGEudGFyZ2V0PWYuc3JjRWxlbWVudHx8eSksMz09PWEudGFyZ2V0Lm5vZGVUeXBlJiYoYS50YXJnZXQ9YS50YXJnZXQucGFyZW50Tm9kZSksYS5tZXRhS2V5PSEhYS5tZXRhS2V5LGcuZmlsdGVyP2cuZmlsdGVyKGEsZik6YX0scHJvcHM6ImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGw9PWEud2hpY2gmJihhLndoaWNoPW51bGwhPWIuY2hhckNvZGU/Yi5jaGFyQ29kZTpiLmtleUNvZGUpLGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPWIuYnV0dG9uLGc9Yi5mcm9tRWxlbWVudDtyZXR1cm4gbnVsbD09YS5wYWdlWCYmbnVsbCE9Yi5jbGllbnRYJiYoZD1hLnRhcmdldC5vd25lckRvY3VtZW50fHx5LGU9ZC5kb2N1bWVudEVsZW1lbnQsYz1kLmJvZHksYS5wYWdlWD1iLmNsaWVudFgrKGUmJmUuc2Nyb2xsTGVmdHx8YyYmYy5zY3JvbGxMZWZ0fHwwKS0oZSYmZS5jbGllbnRMZWZ0fHxjJiZjLmNsaWVudExlZnR8fDApLGEucGFnZVk9Yi5jbGllbnRZKyhlJiZlLnNjcm9sbFRvcHx8YyYmYy5zY3JvbGxUb3B8fDApLShlJiZlLmNsaWVudFRvcHx8YyYmYy5jbGllbnRUb3B8fDApKSwhYS5yZWxhdGVkVGFyZ2V0JiZnJiYoYS5yZWxhdGVkVGFyZ2V0PWc9PT1hLnRhcmdldD9iLnRvRWxlbWVudDpnKSxhLndoaWNofHx2b2lkIDA9PT1mfHwoYS53aGljaD0xJmY/MToyJmY/Mzo0JmY/MjowKSxhfX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7aWYodGhpcyE9PWNhKCkmJnRoaXMuZm9jdXMpdHJ5e3JldHVybiB0aGlzLmZvY3VzKCksITF9Y2F0Y2goYSl7fX0sZGVsZWdhdGVUeXBlOiJmb2N1c2luIn0sYmx1cjp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzPT09Y2EoKSYmdGhpcy5ibHVyPyh0aGlzLmJsdXIoKSwhMSk6dm9pZCAwfSxkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0In0sY2xpY2s6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbS5ub2RlTmFtZSh0aGlzLCJpbnB1dCIpJiYiY2hlY2tib3giPT09dGhpcy50eXBlJiZ0aGlzLmNsaWNrPyh0aGlzLmNsaWNrKCksITEpOnZvaWQgMH0sX2RlZmF1bHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG0ubm9kZU5hbWUoYS50YXJnZXQsImEiKX19LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGEpe3ZvaWQgMCE9PWEucmVzdWx0JiZhLm9yaWdpbmFsRXZlbnQmJihhLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9YS5yZXN1bHQpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW0uZXh0ZW5kKG5ldyBtLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7ZD9tLmV2ZW50LnRyaWdnZXIoZSxudWxsLGIpOm0uZXZlbnQuZGlzcGF0Y2guY2FsbChiLGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCkmJmMucHJldmVudERlZmF1bHQoKX19LG0ucmVtb3ZlRXZlbnQ9eS5yZW1vdmVFdmVudExpc3RlbmVyP2Z1bmN0aW9uKGEsYixjKXthLnJlbW92ZUV2ZW50TGlzdGVuZXImJmEucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGMsITEpfTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9Im9uIitiO2EuZGV0YWNoRXZlbnQmJih0eXBlb2YgYVtkXT09PUsmJihhW2RdPW51bGwpLGEuZGV0YWNoRXZlbnQoZCxjKSl9LG0uRXZlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG0uRXZlbnQ/KGEmJmEudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWEsdGhpcy50eXBlPWEudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLmRlZmF1bHRQcmV2ZW50ZWR8fHZvaWQgMD09PWEuZGVmYXVsdFByZXZlbnRlZCYmYS5yZXR1cm5WYWx1ZT09PSExP2FhOmJhKTp0aGlzLnR5cGU9YSxiJiZtLmV4dGVuZCh0aGlzLGIpLHRoaXMudGltZVN0YW1wPWEmJmEudGltZVN0YW1wfHxtLm5vdygpLHZvaWQodGhpc1ttLmV4cGFuZG9dPSEwKSk6bmV3IG0uRXZlbnQoYSxiKX0sbS5FdmVudC5wcm90b3R5cGU9e2lzRGVmYXVsdFByZXZlbnRlZDpiYSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpiYSxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpiYSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hYSxhJiYoYS5wcmV2ZW50RGVmYXVsdD9hLnByZXZlbnREZWZhdWx0KCk6YS5yZXR1cm5WYWx1ZT0hMSl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPWFhLGEmJihhLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9wUHJvcGFnYXRpb24oKSxhLmNhbmNlbEJ1YmJsZT0hMCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPWFhLGEmJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uJiZhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9fSxtLmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQiLHBvaW50ZXJlbnRlcjoicG9pbnRlcm92ZXIiLHBvaW50ZXJsZWF2ZToicG9pbnRlcm91dCJ9LGZ1bmN0aW9uKGEsYil7bS5ldmVudC5zcGVjaWFsW2FdPXtkZWxlZ2F0ZVR5cGU6YixiaW5kVHlwZTpiLGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYyxkPXRoaXMsZT1hLnJlbGF0ZWRUYXJnZXQsZj1hLmhhbmRsZU9iajtyZXR1cm4oIWV8fGUhPT1kJiYhbS5jb250YWlucyhkLGUpKSYmKGEudHlwZT1mLm9yaWdUeXBlLGM9Zi5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhLnR5cGU9YiksY319fSksay5zdWJtaXRCdWJibGVzfHwobS5ldmVudC5zcGVjaWFsLnN1Ym1pdD17c2V0dXA6ZnVuY3Rpb24oKXtyZXR1cm4gbS5ub2RlTmFtZSh0aGlzLCJmb3JtIik/ITE6dm9pZCBtLmV2ZW50LmFkZCh0aGlzLCJjbGljay5fc3VibWl0IGtleXByZXNzLl9zdWJtaXQiLGZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0LGM9bS5ub2RlTmFtZShiLCJpbnB1dCIpfHxtLm5vZGVOYW1lKGIsImJ1dHRvbiIpP2IuZm9ybTp2b2lkIDA7YyYmIW0uX2RhdGEoYywic3VibWl0QnViYmxlcyIpJiYobS5ldmVudC5hZGQoYywic3VibWl0Ll9zdWJtaXQiLGZ1bmN0aW9uKGEpe2EuX3N1Ym1pdF9idWJibGU9ITB9KSxtLl9kYXRhKGMsInN1Ym1pdEJ1YmJsZXMiLCEwKSl9KX0scG9zdERpc3BhdGNoOmZ1bmN0aW9uKGEpe2EuX3N1Ym1pdF9idWJibGUmJihkZWxldGUgYS5fc3VibWl0X2J1YmJsZSx0aGlzLnBhcmVudE5vZGUmJiFhLmlzVHJpZ2dlciYmbS5ldmVudC5zaW11bGF0ZSgic3VibWl0Iix0aGlzLnBhcmVudE5vZGUsYSwhMCkpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3JldHVybiBtLm5vZGVOYW1lKHRoaXMsImZvcm0iKT8hMTp2b2lkIG0uZXZlbnQucmVtb3ZlKHRoaXMsIi5fc3VibWl0Iil9fSksay5jaGFuZ2VCdWJibGVzfHwobS5ldmVudC5zcGVjaWFsLmNoYW5nZT17c2V0dXA6ZnVuY3Rpb24oKXtyZXR1cm4gWC50ZXN0KHRoaXMubm9kZU5hbWUpPygoImNoZWNrYm94Ij09PXRoaXMudHlwZXx8InJhZGlvIj09PXRoaXMudHlwZSkmJihtLmV2ZW50LmFkZCh0aGlzLCJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXsiY2hlY2tlZCI9PT1hLm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lJiYodGhpcy5fanVzdF9jaGFuZ2VkPSEwKX0pLG0uZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMuX2p1c3RfY2hhbmdlZCYmIWEuaXNUcmlnZ2VyJiYodGhpcy5fanVzdF9jaGFuZ2VkPSExKSxtLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsYSwhMCl9KSksITEpOnZvaWQgbS5ldmVudC5hZGQodGhpcywiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7WC50ZXN0KGIubm9kZU5hbWUpJiYhbS5fZGF0YShiLCJjaGFuZ2VCdWJibGVzIikmJihtLmV2ZW50LmFkZChiLCJjaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oYSl7IXRoaXMucGFyZW50Tm9kZXx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fG0uZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcy5wYXJlbnROb2RlLGEsITApfSksbS5fZGF0YShiLCJjaGFuZ2VCdWJibGVzIiwhMCkpfSl9LGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtyZXR1cm4gdGhpcyE9PWJ8fGEuaXNTaW11bGF0ZWR8fGEuaXNUcmlnZ2VyfHwicmFkaW8iIT09Yi50eXBlJiYiY2hlY2tib3giIT09Yi50eXBlP2EuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOnZvaWQgMH0sdGVhcmRvd246ZnVuY3Rpb24oKXtyZXR1cm4gbS5ldmVudC5yZW1vdmUodGhpcywiLl9jaGFuZ2UiKSwhWC50ZXN0KHRoaXMubm9kZU5hbWUpfX0pLGsuZm9jdXNpbkJ1YmJsZXN8fG0uZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oYSxiKXt2YXIgYz1mdW5jdGlvbihhKXttLmV2ZW50LnNpbXVsYXRlKGIsYS50YXJnZXQsbS5ldmVudC5maXgoYSksITApfTttLmV2ZW50LnNwZWNpYWxbYl09e3NldHVwOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLGU9bS5fZGF0YShkLGIpO2V8fGQuYWRkRXZlbnRMaXN0ZW5lcihhLGMsITApLG0uX2RhdGEoZCxiLChlfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1tLl9kYXRhKGQsYiktMTtlP20uX2RhdGEoZCxiLGUpOihkLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxjLCEwKSxtLl9yZW1vdmVEYXRhKGQsYikpfX19KSxtLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7InN0cmluZyIhPXR5cGVvZiBiJiYoYz1jfHxiLGI9dm9pZCAwKTtmb3IoZiBpbiBhKXRoaXMub24oZixiLGMsYVtmXSxlKTtyZXR1cm4gdGhpc31pZihudWxsPT1jJiZudWxsPT1kPyhkPWIsYz1iPXZvaWQgMCk6bnVsbD09ZCYmKCJzdHJpbmciPT10eXBlb2YgYj8oZD1jLGM9dm9pZCAwKTooZD1jLGM9YixiPXZvaWQgMCkpLGQ9PT0hMSlkPWJhO2Vsc2UgaWYoIWQpcmV0dXJuIHRoaXM7cmV0dXJuIDE9PT1lJiYoZz1kLGQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG0oKS5vZmYoYSksZy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGQuZ3VpZD1nLmd1aWR8fChnLmd1aWQ9bS5ndWlkKyspKSx0aGlzLmVhY2goZnVuY3Rpb24oKXttLmV2ZW50LmFkZCh0aGlzLGEsZCxjLGIpfSl9LG9uZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbihhLGIsYyxkLDEpfSxvZmY6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU7aWYoYSYmYS5wcmV2ZW50RGVmYXVsdCYmYS5oYW5kbGVPYmopcmV0dXJuIGQ9YS5oYW5kbGVPYmosbShhLmRlbGVnYXRlVGFyZ2V0KS5vZmYoZC5uYW1lc3BhY2U/ZC5vcmlnVHlwZSsiLiIrZC5uYW1lc3BhY2U6ZC5vcmlnVHlwZSxkLnNlbGVjdG9yLGQuaGFuZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGEpe2ZvcihlIGluIGEpdGhpcy5vZmYoZSxiLGFbZV0pO3JldHVybiB0aGlzfXJldHVybihiPT09ITF8fCJmdW5jdGlvbiI9PXR5cGVvZiBiKSYmKGM9YixiPXZvaWQgMCksYz09PSExJiYoYz1iYSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bS5ldmVudC5yZW1vdmUodGhpcyxhLGMsYil9KX0sdHJpZ2dlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXttLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpc1swXTtyZXR1cm4gYz9tLmV2ZW50LnRyaWdnZXIoYSxiLGMsITApOnZvaWQgMH19KTtmdW5jdGlvbiBkYShhKXt2YXIgYj1lYS5zcGxpdCgifCIpLGM9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7aWYoYy5jcmVhdGVFbGVtZW50KXdoaWxlKGIubGVuZ3RoKWMuY3JlYXRlRWxlbWVudChiLnBvcCgpKTtyZXR1cm4gY312YXIgZWE9ImFiYnJ8YXJ0aWNsZXxhc2lkZXxhdWRpb3xiZGl8Y2FudmFzfGRhdGF8ZGF0YWxpc3R8ZGV0YWlsc3xmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8aGVhZGVyfGhncm91cHxtYXJrfG1ldGVyfG5hdnxvdXRwdXR8cHJvZ3Jlc3N8c2VjdGlvbnxzdW1tYXJ5fHRpbWV8dmlkZW8iLGZhPS8galF1ZXJ5XGQrPSIoPzpudWxsfFxkKykiL2csZ2E9bmV3IFJlZ0V4cCgiPCg/OiIrZWErIilbXFxzLz5dIiwiaSIpLGhhPS9eXHMrLyxpYT0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2dpLGphPS88KFtcdzpdKykvLGthPS88dGJvZHkvaSxsYT0vPHwmIz9cdys7LyxtYT0vPCg/OnNjcmlwdHxzdHlsZXxsaW5rKS9pLG5hPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLG9hPS9eJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSxwYT0vXnRydWVcLyguKikvLHFhPS9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZyxyYT17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sbGVnZW5kOlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLHBhcmFtOlsxLCI8b2JqZWN0PiIsIjwvb2JqZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6ay5odG1sU2VyaWFsaXplP1swLCIiLCIiXTpbMSwiWDxkaXY+IiwiPC9kaXY+Il19LHNhPWRhKHkpLHRhPXNhLmFwcGVuZENoaWxkKHkuY3JlYXRlRWxlbWVudCgiZGl2IikpO3JhLm9wdGdyb3VwPXJhLm9wdGlvbixyYS50Ym9keT1yYS50Zm9vdD1yYS5jb2xncm91cD1yYS5jYXB0aW9uPXJhLnRoZWFkLHJhLnRoPXJhLnRkO2Z1bmN0aW9uIHVhKGEsYil7dmFyIGMsZCxlPTAsZj10eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9PUs/YS5nZXRFbGVtZW50c0J5VGFnTmFtZShifHwiKiIpOnR5cGVvZiBhLnF1ZXJ5U2VsZWN0b3JBbGwhPT1LP2EucXVlcnlTZWxlY3RvckFsbChifHwiKiIpOnZvaWQgMDtpZighZilmb3IoZj1bXSxjPWEuY2hpbGROb2Rlc3x8YTtudWxsIT0oZD1jW2VdKTtlKyspIWJ8fG0ubm9kZU5hbWUoZCxiKT9mLnB1c2goZCk6bS5tZXJnZShmLHVhKGQsYikpO3JldHVybiB2b2lkIDA9PT1ifHxiJiZtLm5vZGVOYW1lKGEsYik/bS5tZXJnZShbYV0sZik6Zn1mdW5jdGlvbiB2YShhKXtXLnRlc3QoYS50eXBlKSYmKGEuZGVmYXVsdENoZWNrZWQ9YS5jaGVja2VkKX1mdW5jdGlvbiB3YShhLGIpe3JldHVybiBtLm5vZGVOYW1lKGEsInRhYmxlIikmJm0ubm9kZU5hbWUoMTEhPT1iLm5vZGVUeXBlP2I6Yi5maXJzdENoaWxkLCJ0ciIpP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF18fGEuYXBwZW5kQ2hpbGQoYS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpOmF9ZnVuY3Rpb24geGEoYSl7cmV0dXJuIGEudHlwZT0obnVsbCE9PW0uZmluZC5hdHRyKGEsInR5cGUiKSkrIi8iK2EudHlwZSxhfWZ1bmN0aW9uIHlhKGEpe3ZhciBiPXBhLmV4ZWMoYS50eXBlKTtyZXR1cm4gYj9hLnR5cGU9YlsxXTphLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpLGF9ZnVuY3Rpb24gemEoYSxiKXtmb3IodmFyIGMsZD0wO251bGwhPShjPWFbZF0pO2QrKyltLl9kYXRhKGMsImdsb2JhbEV2YWwiLCFifHxtLl9kYXRhKGJbZF0sImdsb2JhbEV2YWwiKSl9ZnVuY3Rpb24gQWEoYSxiKXtpZigxPT09Yi5ub2RlVHlwZSYmbS5oYXNEYXRhKGEpKXt2YXIgYyxkLGUsZj1tLl9kYXRhKGEpLGc9bS5fZGF0YShiLGYpLGg9Zi5ldmVudHM7aWYoaCl7ZGVsZXRlIGcuaGFuZGxlLGcuZXZlbnRzPXt9O2ZvcihjIGluIGgpZm9yKGQ9MCxlPWhbY10ubGVuZ3RoO2U+ZDtkKyspbS5ldmVudC5hZGQoYixjLGhbY11bZF0pfWcuZGF0YSYmKGcuZGF0YT1tLmV4dGVuZCh7fSxnLmRhdGEpKX19ZnVuY3Rpb24gQmEoYSxiKXt2YXIgYyxkLGU7aWYoMT09PWIubm9kZVR5cGUpe2lmKGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCFrLm5vQ2xvbmVFdmVudCYmYlttLmV4cGFuZG9dKXtlPW0uX2RhdGEoYik7Zm9yKGQgaW4gZS5ldmVudHMpbS5yZW1vdmVFdmVudChiLGQsZS5oYW5kbGUpO2IucmVtb3ZlQXR0cmlidXRlKG0uZXhwYW5kbyl9InNjcmlwdCI9PT1jJiZiLnRleHQhPT1hLnRleHQ/KHhhKGIpLnRleHQ9YS50ZXh0LHlhKGIpKToib2JqZWN0Ij09PWM/KGIucGFyZW50Tm9kZSYmKGIub3V0ZXJIVE1MPWEub3V0ZXJIVE1MKSxrLmh0bWw1Q2xvbmUmJmEuaW5uZXJIVE1MJiYhbS50cmltKGIuaW5uZXJIVE1MKSYmKGIuaW5uZXJIVE1MPWEuaW5uZXJIVE1MKSk6ImlucHV0Ij09PWMmJlcudGVzdChhLnR5cGUpPyhiLmRlZmF1bHRDaGVja2VkPWIuY2hlY2tlZD1hLmNoZWNrZWQsYi52YWx1ZSE9PWEudmFsdWUmJihiLnZhbHVlPWEudmFsdWUpKToib3B0aW9uIj09PWM/Yi5kZWZhdWx0U2VsZWN0ZWQ9Yi5zZWxlY3RlZD1hLmRlZmF1bHRTZWxlY3RlZDooImlucHV0Ij09PWN8fCJ0ZXh0YXJlYSI9PT1jKSYmKGIuZGVmYXVsdFZhbHVlPWEuZGVmYXVsdFZhbHVlKX19bS5leHRlbmQoe2Nsb25lOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk9bS5jb250YWlucyhhLm93bmVyRG9jdW1lbnQsYSk7aWYoay5odG1sNUNsb25lfHxtLmlzWE1MRG9jKGEpfHwhZ2EudGVzdCgiPCIrYS5ub2RlTmFtZSsiPiIpP2Y9YS5jbG9uZU5vZGUoITApOih0YS5pbm5lckhUTUw9YS5vdXRlckhUTUwsdGEucmVtb3ZlQ2hpbGQoZj10YS5maXJzdENoaWxkKSksIShrLm5vQ2xvbmVFdmVudCYmay5ub0Nsb25lQ2hlY2tlZHx8MSE9PWEubm9kZVR5cGUmJjExIT09YS5ub2RlVHlwZXx8bS5pc1hNTERvYyhhKSkpZm9yKGQ9dWEoZiksaD11YShhKSxnPTA7bnVsbCE9KGU9aFtnXSk7KytnKWRbZ10mJkJhKGUsZFtnXSk7aWYoYilpZihjKWZvcihoPWh8fHVhKGEpLGQ9ZHx8dWEoZiksZz0wO251bGwhPShlPWhbZ10pO2crKylBYShlLGRbZ10pO2Vsc2UgQWEoYSxmKTtyZXR1cm4gZD11YShmLCJzY3JpcHQiKSxkLmxlbmd0aD4wJiZ6YShkLCFpJiZ1YShhLCJzY3JpcHQiKSksZD1oPWU9bnVsbCxmfSxidWlsZEZyYWdtZW50OmZ1bmN0aW9uKGEsYixjLGQpe2Zvcih2YXIgZSxmLGcsaCxpLGosbCxuPWEubGVuZ3RoLG89ZGEoYikscD1bXSxxPTA7bj5xO3ErKylpZihmPWFbcV0sZnx8MD09PWYpaWYoIm9iamVjdCI9PT1tLnR5cGUoZikpbS5tZXJnZShwLGYubm9kZVR5cGU/W2ZdOmYpO2Vsc2UgaWYobGEudGVzdChmKSl7aD1ofHxvLmFwcGVuZENoaWxkKGIuY3JlYXRlRWxlbWVudCgiZGl2IikpLGk9KGphLmV4ZWMoZil8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksbD1yYVtpXXx8cmEuX2RlZmF1bHQsaC5pbm5lckhUTUw9bFsxXStmLnJlcGxhY2UoaWEsIjwkMT48LyQyPiIpK2xbMl0sZT1sWzBdO3doaWxlKGUtLSloPWgubGFzdENoaWxkO2lmKCFrLmxlYWRpbmdXaGl0ZXNwYWNlJiZoYS50ZXN0KGYpJiZwLnB1c2goYi5jcmVhdGVUZXh0Tm9kZShoYS5leGVjKGYpWzBdKSksIWsudGJvZHkpe2Y9InRhYmxlIiE9PWl8fGthLnRlc3QoZik/Ijx0YWJsZT4iIT09bFsxXXx8a2EudGVzdChmKT8wOmg6aC5maXJzdENoaWxkLGU9ZiYmZi5jaGlsZE5vZGVzLmxlbmd0aDt3aGlsZShlLS0pbS5ub2RlTmFtZShqPWYuY2hpbGROb2Rlc1tlXSwidGJvZHkiKSYmIWouY2hpbGROb2Rlcy5sZW5ndGgmJmYucmVtb3ZlQ2hpbGQoail9bS5tZXJnZShwLGguY2hpbGROb2RlcyksaC50ZXh0Q29udGVudD0iIjt3aGlsZShoLmZpcnN0Q2hpbGQpaC5yZW1vdmVDaGlsZChoLmZpcnN0Q2hpbGQpO2g9by5sYXN0Q2hpbGR9ZWxzZSBwLnB1c2goYi5jcmVhdGVUZXh0Tm9kZShmKSk7aCYmby5yZW1vdmVDaGlsZChoKSxrLmFwcGVuZENoZWNrZWR8fG0uZ3JlcCh1YShwLCJpbnB1dCIpLHZhKSxxPTA7d2hpbGUoZj1wW3ErK10paWYoKCFkfHwtMT09PW0uaW5BcnJheShmLGQpKSYmKGc9bS5jb250YWlucyhmLm93bmVyRG9jdW1lbnQsZiksaD11YShvLmFwcGVuZENoaWxkKGYpLCJzY3JpcHQiKSxnJiZ6YShoKSxjKSl7ZT0wO3doaWxlKGY9aFtlKytdKW9hLnRlc3QoZi50eXBlfHwiIikmJmMucHVzaChmKX1yZXR1cm4gaD1udWxsLG99LGNsZWFuRGF0YTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgZCxlLGYsZyxoPTAsaT1tLmV4cGFuZG8saj1tLmNhY2hlLGw9ay5kZWxldGVFeHBhbmRvLG49bS5ldmVudC5zcGVjaWFsO251bGwhPShkPWFbaF0pO2grKylpZigoYnx8bS5hY2NlcHREYXRhKGQpKSYmKGY9ZFtpXSxnPWYmJmpbZl0pKXtpZihnLmV2ZW50cylmb3IoZSBpbiBnLmV2ZW50cyluW2VdP20uZXZlbnQucmVtb3ZlKGQsZSk6bS5yZW1vdmVFdmVudChkLGUsZy5oYW5kbGUpO2pbZl0mJihkZWxldGUgaltmXSxsP2RlbGV0ZSBkW2ldOnR5cGVvZiBkLnJlbW92ZUF0dHJpYnV0ZSE9PUs/ZC5yZW1vdmVBdHRyaWJ1dGUoaSk6ZFtpXT1udWxsLGMucHVzaChmKSl9fX0pLG0uZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBWKHRoaXMsZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/bS50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0mJnRoaXNbMF0ub3duZXJEb2N1bWVudHx8eSkuY3JlYXRlVGV4dE5vZGUoYSkpfSxudWxsLGEsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihhKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIGI9d2EodGhpcyxhKTtiLmFwcGVuZENoaWxkKGEpfX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgYj13YSh0aGlzLGEpO2IuaW5zZXJ0QmVmb3JlKGEsYi5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMubmV4dFNpYmxpbmcpfSl9LHJlbW92ZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYyxkPWE/bS5maWx0ZXIoYSx0aGlzKTp0aGlzLGU9MDtudWxsIT0oYz1kW2VdKTtlKyspYnx8MSE9PWMubm9kZVR5cGV8fG0uY2xlYW5EYXRhKHVhKGMpKSxjLnBhcmVudE5vZGUmJihiJiZtLmNvbnRhaW5zKGMub3duZXJEb2N1bWVudCxjKSYmemEodWEoYywic2NyaXB0IikpLGMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKSk7cmV0dXJuIHRoaXN9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBhLGI9MDtudWxsIT0oYT10aGlzW2JdKTtiKyspezE9PT1hLm5vZGVUeXBlJiZtLmNsZWFuRGF0YSh1YShhLCExKSk7d2hpbGUoYS5maXJzdENoaWxkKWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKTthLm9wdGlvbnMmJm0ubm9kZU5hbWUoYSwic2VsZWN0IikmJihhLm9wdGlvbnMubGVuZ3RoPTApfXJldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihhLGIpe3JldHVybiBhPW51bGw9PWE/ITE6YSxiPW51bGw9PWI/YTpiLHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG0uY2xvbmUodGhpcyxhLGIpfSl9LGh0bWw6ZnVuY3Rpb24oYSl7cmV0dXJuIFYodGhpcyxmdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdfHx7fSxjPTAsZD10aGlzLmxlbmd0aDtpZih2b2lkIDA9PT1hKXJldHVybiAxPT09Yi5ub2RlVHlwZT9iLmlubmVySFRNTC5yZXBsYWNlKGZhLCIiKTp2b2lkIDA7aWYoISgic3RyaW5nIiE9dHlwZW9mIGF8fG1hLnRlc3QoYSl8fCFrLmh0bWxTZXJpYWxpemUmJmdhLnRlc3QoYSl8fCFrLmxlYWRpbmdXaGl0ZXNwYWNlJiZoYS50ZXN0KGEpfHxyYVsoamEuZXhlYyhhKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pKXthPWEucmVwbGFjZShpYSwiPCQxPjwvJDI+Iik7dHJ5e2Zvcig7ZD5jO2MrKyliPXRoaXNbY118fHt9LDE9PT1iLm5vZGVUeXBlJiYobS5jbGVhbkRhdGEodWEoYiwhMSkpLGIuaW5uZXJIVE1MPWEpO2I9MH1jYXRjaChlKXt9fWImJnRoaXMuZW1wdHkoKS5hcHBlbmQoYSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHNbMF07cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGIpe2E9dGhpcy5wYXJlbnROb2RlLG0uY2xlYW5EYXRhKHVhKHRoaXMpKSxhJiZhLnJlcGxhY2VDaGlsZChiLHRoaXMpfSksYSYmKGEubGVuZ3RofHxhLm5vZGVUeXBlKT90aGlzOnRoaXMucmVtb3ZlKCl9LGRldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW1vdmUoYSwhMCl9LGRvbU1hbmlwOmZ1bmN0aW9uKGEsYil7YT1lLmFwcGx5KFtdLGEpO3ZhciBjLGQsZixnLGgsaSxqPTAsbD10aGlzLmxlbmd0aCxuPXRoaXMsbz1sLTEscD1hWzBdLHE9bS5pc0Z1bmN0aW9uKHApO2lmKHF8fGw+MSYmInN0cmluZyI9PXR5cGVvZiBwJiYhay5jaGVja0Nsb25lJiZuYS50ZXN0KHApKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7dmFyIGQ9bi5lcShjKTtxJiYoYVswXT1wLmNhbGwodGhpcyxjLGQuaHRtbCgpKSksZC5kb21NYW5pcChhLGIpfSk7aWYobCYmKGk9bS5idWlsZEZyYWdtZW50KGEsdGhpc1swXS5vd25lckRvY3VtZW50LCExLHRoaXMpLGM9aS5maXJzdENoaWxkLDE9PT1pLmNoaWxkTm9kZXMubGVuZ3RoJiYoaT1jKSxjKSl7Zm9yKGc9bS5tYXAodWEoaSwic2NyaXB0IikseGEpLGY9Zy5sZW5ndGg7bD5qO2orKylkPWksaiE9PW8mJihkPW0uY2xvbmUoZCwhMCwhMCksZiYmbS5tZXJnZShnLHVhKGQsInNjcmlwdCIpKSksYi5jYWxsKHRoaXNbal0sZCxqKTtpZihmKWZvcihoPWdbZy5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCxtLm1hcChnLHlhKSxqPTA7Zj5qO2orKylkPWdbal0sb2EudGVzdChkLnR5cGV8fCIiKSYmIW0uX2RhdGEoZCwiZ2xvYmFsRXZhbCIpJiZtLmNvbnRhaW5zKGgsZCkmJihkLnNyYz9tLl9ldmFsVXJsJiZtLl9ldmFsVXJsKGQuc3JjKTptLmdsb2JhbEV2YWwoKGQudGV4dHx8ZC50ZXh0Q29udGVudHx8ZC5pbm5lckhUTUx8fCIiKS5yZXBsYWNlKHFhLCIiKSkpO2k9Yz1udWxsfXJldHVybiB0aGlzfX0pLG0uZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGEsYil7bS5mblthXT1mdW5jdGlvbihhKXtmb3IodmFyIGMsZD0wLGU9W10sZz1tKGEpLGg9Zy5sZW5ndGgtMTtoPj1kO2QrKyljPWQ9PT1oP3RoaXM6dGhpcy5jbG9uZSghMCksbShnW2RdKVtiXShjKSxmLmFwcGx5KGUsYy5nZXQoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGUpfX0pO3ZhciBDYSxEYT17fTtmdW5jdGlvbiBFYShiLGMpe3ZhciBkLGU9bShjLmNyZWF0ZUVsZW1lbnQoYikpLmFwcGVuZFRvKGMuYm9keSksZj1hLmdldERlZmF1bHRDb21wdXRlZFN0eWxlJiYoZD1hLmdldERlZmF1bHRDb21wdXRlZFN0eWxlKGVbMF0pKT9kLmRpc3BsYXk6bS5jc3MoZVswXSwiZGlzcGxheSIpO3JldHVybiBlLmRldGFjaCgpLGZ9ZnVuY3Rpb24gRmEoYSl7dmFyIGI9eSxjPURhW2FdO3JldHVybiBjfHwoYz1FYShhLGIpLCJub25lIiE9PWMmJmN8fChDYT0oQ2F8fG0oIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIHdpZHRoPScwJyBoZWlnaHQ9JzAnLz4iKSkuYXBwZW5kVG8oYi5kb2N1bWVudEVsZW1lbnQpLGI9KENhWzBdLmNvbnRlbnRXaW5kb3d8fENhWzBdLmNvbnRlbnREb2N1bWVudCkuZG9jdW1lbnQsYi53cml0ZSgpLGIuY2xvc2UoKSxjPUVhKGEsYiksQ2EuZGV0YWNoKCkpLERhW2FdPWMpLGN9IWZ1bmN0aW9uKCl7dmFyIGE7ay5zaHJpbmtXcmFwQmxvY2tzPWZ1bmN0aW9uKCl7aWYobnVsbCE9YSlyZXR1cm4gYTthPSExO3ZhciBiLGMsZDtyZXR1cm4gYz15LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0sYyYmYy5zdHlsZT8oYj15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9eS5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO2JvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4IixjLmFwcGVuZENoaWxkKGQpLmFwcGVuZENoaWxkKGIpLHR5cGVvZiBiLnN0eWxlLnpvb20hPT1LJiYoYi5zdHlsZS5jc3NUZXh0PSItd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXI6MDtwYWRkaW5nOjFweDt3aWR0aDoxcHg7em9vbToxIixiLmFwcGVuZENoaWxkKHkuY3JlYXRlRWxlbWVudCgiZGl2IikpLnN0eWxlLndpZHRoPSI1cHgiLGE9MyE9PWIub2Zmc2V0V2lkdGgpLGMucmVtb3ZlQ2hpbGQoZCksYSk6dm9pZCAwfX0oKTt2YXIgR2E9L15tYXJnaW4vLEhhPW5ldyBSZWdFeHAoIl4oIitTKyIpKD8hcHgpW2EteiVdKyQiLCJpIiksSWEsSmEsS2E9L14odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0KSQvO2EuZ2V0Q29tcHV0ZWRTdHlsZT8oSWE9ZnVuY3Rpb24oYil7cmV0dXJuIGIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5vcGVuZXI/Yi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYixudWxsKTphLmdldENvbXB1dGVkU3R5bGUoYixudWxsKX0sSmE9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5zdHlsZTtyZXR1cm4gYz1jfHxJYShhKSxnPWM/Yy5nZXRQcm9wZXJ0eVZhbHVlKGIpfHxjW2JdOnZvaWQgMCxjJiYoIiIhPT1nfHxtLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKXx8KGc9bS5zdHlsZShhLGIpKSxIYS50ZXN0KGcpJiZHYS50ZXN0KGIpJiYoZD1oLndpZHRoLGU9aC5taW5XaWR0aCxmPWgubWF4V2lkdGgsaC5taW5XaWR0aD1oLm1heFdpZHRoPWgud2lkdGg9ZyxnPWMud2lkdGgsaC53aWR0aD1kLGgubWluV2lkdGg9ZSxoLm1heFdpZHRoPWYpKSx2b2lkIDA9PT1nP2c6ZysiIn0pOnkuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSYmKElhPWZ1bmN0aW9uKGEpe3JldHVybiBhLmN1cnJlbnRTdHlsZX0sSmE9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5zdHlsZTtyZXR1cm4gYz1jfHxJYShhKSxnPWM/Y1tiXTp2b2lkIDAsbnVsbD09ZyYmaCYmaFtiXSYmKGc9aFtiXSksSGEudGVzdChnKSYmIUthLnRlc3QoYikmJihkPWgubGVmdCxlPWEucnVudGltZVN0eWxlLGY9ZSYmZS5sZWZ0LGYmJihlLmxlZnQ9YS5jdXJyZW50U3R5bGUubGVmdCksaC5sZWZ0PSJmb250U2l6ZSI9PT1iPyIxZW0iOmcsZz1oLnBpeGVsTGVmdCsicHgiLGgubGVmdD1kLGYmJihlLmxlZnQ9ZikpLHZvaWQgMD09PWc/ZzpnKyIifHwiYXV0byJ9KTtmdW5jdGlvbiBMYShhLGIpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXt2YXIgYz1hKCk7aWYobnVsbCE9YylyZXR1cm4gYz92b2lkIGRlbGV0ZSB0aGlzLmdldDoodGhpcy5nZXQ9YikuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19IWZ1bmN0aW9uKCl7dmFyIGIsYyxkLGUsZixnLGg7aWYoYj15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGIuaW5uZXJIVE1MPSIgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iLGQ9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdLGM9ZCYmZC5zdHlsZSl7Yy5jc3NUZXh0PSJmbG9hdDpsZWZ0O29wYWNpdHk6LjUiLGsub3BhY2l0eT0iMC41Ij09PWMub3BhY2l0eSxrLmNzc0Zsb2F0PSEhYy5jc3NGbG9hdCxiLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsYi5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPSIiLGsuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1iLnN0eWxlLmJhY2tncm91bmRDbGlwLGsuYm94U2l6aW5nPSIiPT09Yy5ib3hTaXppbmd8fCIiPT09Yy5Nb3pCb3hTaXppbmd8fCIiPT09Yy5XZWJraXRCb3hTaXppbmcsbS5leHRlbmQoayx7cmVsaWFibGVIaWRkZW5PZmZzZXRzOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWcmJmkoKSxnfSxib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT1mJiZpKCksZn0scGl4ZWxQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiBudWxsPT1lJiZpKCksZX0scmVsaWFibGVNYXJnaW5SaWdodDpmdW5jdGlvbigpe3JldHVybiBudWxsPT1oJiZpKCksaH19KTtmdW5jdGlvbiBpKCl7dmFyIGIsYyxkLGk7Yz15LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0sYyYmYy5zdHlsZSYmKGI9eS5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweCIsYy5hcHBlbmRDaGlsZChkKS5hcHBlbmRDaGlsZChiKSxiLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MSU7dG9wOjElO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7d2lkdGg6NHB4O3Bvc2l0aW9uOmFic29sdXRlIixlPWY9ITEsaD0hMCxhLmdldENvbXB1dGVkU3R5bGUmJihlPSIxJSIhPT0oYS5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCl8fHt9KS50b3AsZj0iNHB4Ij09PShhLmdldENvbXB1dGVkU3R5bGUoYixudWxsKXx8e3dpZHRoOiI0cHgifSkud2lkdGgsaT1iLmFwcGVuZENoaWxkKHkuY3JlYXRlRWxlbWVudCgiZGl2IikpLGkuc3R5bGUuY3NzVGV4dD1iLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MCIsaS5zdHlsZS5tYXJnaW5SaWdodD1pLnN0eWxlLndpZHRoPSIwIixiLnN0eWxlLndpZHRoPSIxcHgiLGg9IXBhcnNlRmxvYXQoKGEuZ2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpfHx7fSkubWFyZ2luUmlnaHQpLGIucmVtb3ZlQ2hpbGQoaSkpLGIuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZD48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IixpPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIiksaVswXS5zdHlsZS5jc3NUZXh0PSJtYXJnaW46MDtib3JkZXI6MDtwYWRkaW5nOjA7ZGlzcGxheTpub25lIixnPTA9PT1pWzBdLm9mZnNldEhlaWdodCxnJiYoaVswXS5zdHlsZS5kaXNwbGF5PSIiLGlbMV0uc3R5bGUuZGlzcGxheT0ibm9uZSIsZz0wPT09aVswXS5vZmZzZXRIZWlnaHQpLGMucmVtb3ZlQ2hpbGQoZCkpfX19KCksbS5zd2FwPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZz17fTtmb3IoZiBpbiBiKWdbZl09YS5zdHlsZVtmXSxhLnN0eWxlW2ZdPWJbZl07ZT1jLmFwcGx5KGEsZHx8W10pO2ZvcihmIGluIGIpYS5zdHlsZVtmXT1nW2ZdO3JldHVybiBlfTt2YXIgTWE9L2FscGhhXChbXildKlwpL2ksTmE9L29wYWNpdHlccyo9XHMqKFteKV0qKS8sT2E9L14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFBhPW5ldyBSZWdFeHAoIl4oIitTKyIpKC4qKSQiLCJpIiksUWE9bmV3IFJlZ0V4cCgiXihbKy1dKT0oIitTKyIpIiwiaSIpLFJhPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSxTYT17bGV0dGVyU3BhY2luZzoiMCIsZm9udFdlaWdodDoiNDAwIn0sVGE9WyJXZWJraXQiLCJPIiwiTW96IiwibXMiXTtmdW5jdGlvbiBVYShhLGIpe2lmKGIgaW4gYSlyZXR1cm4gYjt2YXIgYz1iLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Iuc2xpY2UoMSksZD1iLGU9VGEubGVuZ3RoO3doaWxlKGUtLSlpZihiPVRhW2VdK2MsYiBpbiBhKXJldHVybiBiO3JldHVybiBkfWZ1bmN0aW9uIFZhKGEsYil7Zm9yKHZhciBjLGQsZSxmPVtdLGc9MCxoPWEubGVuZ3RoO2g+ZztnKyspZD1hW2ddLGQuc3R5bGUmJihmW2ddPW0uX2RhdGEoZCwib2xkZGlzcGxheSIpLGM9ZC5zdHlsZS5kaXNwbGF5LGI/KGZbZ118fCJub25lIiE9PWN8fChkLnN0eWxlLmRpc3BsYXk9IiIpLCIiPT09ZC5zdHlsZS5kaXNwbGF5JiZVKGQpJiYoZltnXT1tLl9kYXRhKGQsIm9sZGRpc3BsYXkiLEZhKGQubm9kZU5hbWUpKSkpOihlPVUoZCksKGMmJiJub25lIiE9PWN8fCFlKSYmbS5fZGF0YShkLCJvbGRkaXNwbGF5IixlP2M6bS5jc3MoZCwiZGlzcGxheSIpKSkpO2ZvcihnPTA7aD5nO2crKylkPWFbZ10sZC5zdHlsZSYmKGImJiJub25lIiE9PWQuc3R5bGUuZGlzcGxheSYmIiIhPT1kLnN0eWxlLmRpc3BsYXl8fChkLnN0eWxlLmRpc3BsYXk9Yj9mW2ddfHwiIjoibm9uZSIpKTtyZXR1cm4gYX1mdW5jdGlvbiBXYShhLGIsYyl7dmFyIGQ9UGEuZXhlYyhiKTtyZXR1cm4gZD9NYXRoLm1heCgwLGRbMV0tKGN8fDApKSsoZFsyXXx8InB4Iik6Yn1mdW5jdGlvbiBYYShhLGIsYyxkLGUpe2Zvcih2YXIgZj1jPT09KGQ/ImJvcmRlciI6ImNvbnRlbnQiKT80OiJ3aWR0aCI9PT1iPzE6MCxnPTA7ND5mO2YrPTIpIm1hcmdpbiI9PT1jJiYoZys9bS5jc3MoYSxjK1RbZl0sITAsZSkpLGQ/KCJjb250ZW50Ij09PWMmJihnLT1tLmNzcyhhLCJwYWRkaW5nIitUW2ZdLCEwLGUpKSwibWFyZ2luIiE9PWMmJihnLT1tLmNzcyhhLCJib3JkZXIiK1RbZl0rIldpZHRoIiwhMCxlKSkpOihnKz1tLmNzcyhhLCJwYWRkaW5nIitUW2ZdLCEwLGUpLCJwYWRkaW5nIiE9PWMmJihnKz1tLmNzcyhhLCJib3JkZXIiK1RbZl0rIldpZHRoIiwhMCxlKSkpO3JldHVybiBnfWZ1bmN0aW9uIFlhKGEsYixjKXt2YXIgZD0hMCxlPSJ3aWR0aCI9PT1iP2Eub2Zmc2V0V2lkdGg6YS5vZmZzZXRIZWlnaHQsZj1JYShhKSxnPWsuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT1tLmNzcyhhLCJib3hTaXppbmciLCExLGYpO2lmKDA+PWV8fG51bGw9PWUpe2lmKGU9SmEoYSxiLGYpLCgwPmV8fG51bGw9PWUpJiYoZT1hLnN0eWxlW2JdKSxIYS50ZXN0KGUpKXJldHVybiBlO2Q9ZyYmKGsuYm94U2l6aW5nUmVsaWFibGUoKXx8ZT09PWEuc3R5bGVbYl0pLGU9cGFyc2VGbG9hdChlKXx8MH1yZXR1cm4gZStYYShhLGIsY3x8KGc/ImJvcmRlciI6ImNvbnRlbnQiKSxkLGYpKyJweCJ9bS5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oYSxiKXtpZihiKXt2YXIgYz1KYShhLCJvcGFjaXR5Iik7cmV0dXJuIiI9PT1jPyIxIjpjfX19fSxjc3NOdW1iZXI6e2NvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZsZXhHcm93OiEwLGZsZXhTaHJpbms6ITAsZm9udFdlaWdodDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOnsiZmxvYXQiOmsuY3NzRmxvYXQ/ImNzc0Zsb2F0Ijoic3R5bGVGbG9hdCJ9LHN0eWxlOmZ1bmN0aW9uKGEsYixjLGQpe2lmKGEmJjMhPT1hLm5vZGVUeXBlJiY4IT09YS5ub2RlVHlwZSYmYS5zdHlsZSl7dmFyIGUsZixnLGg9bS5jYW1lbENhc2UoYiksaT1hLnN0eWxlO2lmKGI9bS5jc3NQcm9wc1toXXx8KG0uY3NzUHJvcHNbaF09VWEoaSxoKSksZz1tLmNzc0hvb2tzW2JdfHxtLmNzc0hvb2tzW2hdLHZvaWQgMD09PWMpcmV0dXJuIGcmJiJnZXQiaW4gZyYmdm9pZCAwIT09KGU9Zy5nZXQoYSwhMSxkKSk/ZTppW2JdO2lmKGY9dHlwZW9mIGMsInN0cmluZyI9PT1mJiYoZT1RYS5leGVjKGMpKSYmKGM9KGVbMV0rMSkqZVsyXStwYXJzZUZsb2F0KG0uY3NzKGEsYikpLGY9Im51bWJlciIpLG51bGwhPWMmJmM9PT1jJiYoIm51bWJlciIhPT1mfHxtLmNzc051bWJlcltoXXx8KGMrPSJweCIpLGsuY2xlYXJDbG9uZVN0eWxlfHwiIiE9PWN8fDAhPT1iLmluZGV4T2YoImJhY2tncm91bmQiKXx8KGlbYl09ImluaGVyaXQiKSwhKGcmJiJzZXQiaW4gZyYmdm9pZCAwPT09KGM9Zy5zZXQoYSxjLGQpKSkpKXRyeXtpW2JdPWN9Y2F0Y2goail7fX19LGNzczpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaD1tLmNhbWVsQ2FzZShiKTtyZXR1cm4gYj1tLmNzc1Byb3BzW2hdfHwobS5jc3NQcm9wc1toXT1VYShhLnN0eWxlLGgpKSxnPW0uY3NzSG9va3NbYl18fG0uY3NzSG9va3NbaF0sZyYmImdldCJpbiBnJiYoZj1nLmdldChhLCEwLGMpKSx2b2lkIDA9PT1mJiYoZj1KYShhLGIsZCkpLCJub3JtYWwiPT09ZiYmYiBpbiBTYSYmKGY9U2FbYl0pLCIiPT09Y3x8Yz8oZT1wYXJzZUZsb2F0KGYpLGM9PT0hMHx8bS5pc051bWVyaWMoZSk/ZXx8MDpmKTpmfX0pLG0uZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oYSxiKXttLmNzc0hvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiBjP09hLnRlc3QobS5jc3MoYSwiZGlzcGxheSIpKSYmMD09PWEub2Zmc2V0V2lkdGg/bS5zd2FwKGEsUmEsZnVuY3Rpb24oKXtyZXR1cm4gWWEoYSxiLGQpfSk6WWEoYSxiLGQpOnZvaWQgMH0sc2V0OmZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1kJiZJYShhKTtyZXR1cm4gV2EoYSxjLGQ/WGEoYSxiLGQsay5ib3hTaXppbmcmJiJib3JkZXItYm94Ij09PW0uY3NzKGEsImJveFNpemluZyIsITEsZSksZSk6MCl9fX0pLGsub3BhY2l0eXx8KG0uY3NzSG9va3Mub3BhY2l0eT17Z2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIE5hLnRlc3QoKGImJmEuY3VycmVudFN0eWxlP2EuY3VycmVudFN0eWxlLmZpbHRlcjphLnN0eWxlLmZpbHRlcil8fCIiKT8uMDEqcGFyc2VGbG9hdChSZWdFeHAuJDEpKyIiOmI/IjEiOiIifSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLnN0eWxlLGQ9YS5jdXJyZW50U3R5bGUsZT1tLmlzTnVtZXJpYyhiKT8iYWxwaGEob3BhY2l0eT0iKzEwMCpiKyIpIjoiIixmPWQmJmQuZmlsdGVyfHxjLmZpbHRlcnx8IiI7Yy56b29tPTEsKGI+PTF8fCIiPT09YikmJiIiPT09bS50cmltKGYucmVwbGFjZShNYSwiIikpJiZjLnJlbW92ZUF0dHJpYnV0ZSYmKGMucmVtb3ZlQXR0cmlidXRlKCJmaWx0ZXIiKSwiIj09PWJ8fGQmJiFkLmZpbHRlcil8fChjLmZpbHRlcj1NYS50ZXN0KGYpP2YucmVwbGFjZShNYSxlKTpmKyIgIitlKX19KSxtLmNzc0hvb2tzLm1hcmdpblJpZ2h0PUxhKGsucmVsaWFibGVNYXJnaW5SaWdodCxmdW5jdGlvbihhLGIpe3JldHVybiBiP20uc3dhcChhLHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSxKYSxbYSwibWFyZ2luUmlnaHQiXSk6dm9pZCAwfSksbS5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oYSxiKXttLmNzc0hvb2tzW2ErYl09e2V4cGFuZDpmdW5jdGlvbihjKXtmb3IodmFyIGQ9MCxlPXt9LGY9InN0cmluZyI9PXR5cGVvZiBjP2Muc3BsaXQoIiAiKTpbY107ND5kO2QrKyllW2ErVFtkXStiXT1mW2RdfHxmW2QtMl18fGZbMF07cmV0dXJuIGV9fSxHYS50ZXN0KGEpfHwobS5jc3NIb29rc1thK2JdLnNldD1XYSl9KSxtLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFYodGhpcyxmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPXt9LGc9MDtpZihtLmlzQXJyYXkoYikpe2ZvcihkPUlhKGEpLGU9Yi5sZW5ndGg7ZT5nO2crKylmW2JbZ11dPW0uY3NzKGEsYltnXSwhMSxkKTtyZXR1cm4gZn1yZXR1cm4gdm9pZCAwIT09Yz9tLnN0eWxlKGEsYixjKTptLmNzcyhhLGIpfSxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBWYSh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBWYSh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGE/YT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtVKHRoaXMpP20odGhpcykuc2hvdygpOm0odGhpcykuaGlkZSgpfSl9fSk7ZnVuY3Rpb24gWmEoYSxiLGMsZCxlKXsKICAgIHJldHVybiBuZXcgWmEucHJvdG90eXBlLmluaXQoYSxiLGMsZCxlKX1tLlR3ZWVuPVphLFphLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WmEsaW5pdDpmdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5lbGVtPWEsdGhpcy5wcm9wPWMsdGhpcy5lYXNpbmc9ZXx8InN3aW5nIix0aGlzLm9wdGlvbnM9Yix0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9ZCx0aGlzLnVuaXQ9Znx8KG0uY3NzTnVtYmVyW2NdPyIiOiJweCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgYT1aYS5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gYSYmYS5nZXQ/YS5nZXQodGhpcyk6WmEucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGEpe3ZhciBiLGM9WmEucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMub3B0aW9ucy5kdXJhdGlvbj90aGlzLnBvcz1iPW0uZWFzaW5nW3RoaXMuZWFzaW5nXShhLHRoaXMub3B0aW9ucy5kdXJhdGlvbiphLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOnRoaXMucG9zPWI9YSx0aGlzLm5vdz0odGhpcy5lbmQtdGhpcy5zdGFydCkqYit0aGlzLnN0YXJ0LHRoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSxjJiZjLnNldD9jLnNldCh0aGlzKTpaYS5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLHRoaXN9fSxaYS5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGU9WmEucHJvdG90eXBlLFphLnByb3BIb29rcz17X2RlZmF1bHQ6e2dldDpmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4gbnVsbD09YS5lbGVtW2EucHJvcF18fGEuZWxlbS5zdHlsZSYmbnVsbCE9YS5lbGVtLnN0eWxlW2EucHJvcF0/KGI9bS5jc3MoYS5lbGVtLGEucHJvcCwiIiksYiYmImF1dG8iIT09Yj9iOjApOmEuZWxlbVthLnByb3BdfSxzZXQ6ZnVuY3Rpb24oYSl7bS5meC5zdGVwW2EucHJvcF0/bS5meC5zdGVwW2EucHJvcF0oYSk6YS5lbGVtLnN0eWxlJiYobnVsbCE9YS5lbGVtLnN0eWxlW20uY3NzUHJvcHNbYS5wcm9wXV18fG0uY3NzSG9va3NbYS5wcm9wXSk/bS5zdHlsZShhLmVsZW0sYS5wcm9wLGEubm93K2EudW5pdCk6YS5lbGVtW2EucHJvcF09YS5ub3d9fX0sWmEucHJvcEhvb2tzLnNjcm9sbFRvcD1aYS5wcm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGEpe2EuZWxlbS5ub2RlVHlwZSYmYS5lbGVtLnBhcmVudE5vZGUmJihhLmVsZW1bYS5wcm9wXT1hLm5vdyl9fSxtLmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxzd2luZzpmdW5jdGlvbihhKXtyZXR1cm4uNS1NYXRoLmNvcyhhKk1hdGguUEkpLzJ9fSxtLmZ4PVphLnByb3RvdHlwZS5pbml0LG0uZnguc3RlcD17fTt2YXIgJGEsX2EsYWI9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLGJiPW5ldyBSZWdFeHAoIl4oPzooWystXSk9fCkoIitTKyIpKFthLXolXSopJCIsImkiKSxjYj0vcXVldWVIb29rcyQvLGRiPVtpYl0sZWI9eyIqIjpbZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmNyZWF0ZVR3ZWVuKGEsYiksZD1jLmN1cigpLGU9YmIuZXhlYyhiKSxmPWUmJmVbM118fChtLmNzc051bWJlclthXT8iIjoicHgiKSxnPShtLmNzc051bWJlclthXXx8InB4IiE9PWYmJitkKSYmYmIuZXhlYyhtLmNzcyhjLmVsZW0sYSkpLGg9MSxpPTIwO2lmKGcmJmdbM10hPT1mKXtmPWZ8fGdbM10sZT1lfHxbXSxnPStkfHwxO2RvIGg9aHx8Ii41IixnLz1oLG0uc3R5bGUoYy5lbGVtLGEsZytmKTt3aGlsZShoIT09KGg9Yy5jdXIoKS9kKSYmMSE9PWgmJi0taSl9cmV0dXJuIGUmJihnPWMuc3RhcnQ9K2d8fCtkfHwwLGMudW5pdD1mLGMuZW5kPWVbMV0/ZysoZVsxXSsxKSplWzJdOitlWzJdKSxjfV19O2Z1bmN0aW9uIGZiKCl7cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXskYT12b2lkIDB9KSwkYT1tLm5vdygpfWZ1bmN0aW9uIGdiKGEsYil7dmFyIGMsZD17aGVpZ2h0OmF9LGU9MDtmb3IoYj1iPzE6MDs0PmU7ZSs9Mi1iKWM9VFtlXSxkWyJtYXJnaW4iK2NdPWRbInBhZGRpbmciK2NdPWE7cmV0dXJuIGImJihkLm9wYWNpdHk9ZC53aWR0aD1hKSxkfWZ1bmN0aW9uIGhiKGEsYixjKXtmb3IodmFyIGQsZT0oZWJbYl18fFtdKS5jb25jYXQoZWJbIioiXSksZj0wLGc9ZS5sZW5ndGg7Zz5mO2YrKylpZihkPWVbZl0uY2FsbChjLGIsYSkpcmV0dXJuIGR9ZnVuY3Rpb24gaWIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGwsbj10aGlzLG89e30scD1hLnN0eWxlLHE9YS5ub2RlVHlwZSYmVShhKSxyPW0uX2RhdGEoYSwiZnhzaG93Iik7Yy5xdWV1ZXx8KGg9bS5fcXVldWVIb29rcyhhLCJmeCIpLG51bGw9PWgudW5xdWV1ZWQmJihoLnVucXVldWVkPTAsaT1oLmVtcHR5LmZpcmUsaC5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7aC51bnF1ZXVlZHx8aSgpfSksaC51bnF1ZXVlZCsrLG4uYWx3YXlzKGZ1bmN0aW9uKCl7bi5hbHdheXMoZnVuY3Rpb24oKXtoLnVucXVldWVkLS0sbS5xdWV1ZShhLCJmeCIpLmxlbmd0aHx8aC5lbXB0eS5maXJlKCl9KX0pKSwxPT09YS5ub2RlVHlwZSYmKCJoZWlnaHQiaW4gYnx8IndpZHRoImluIGIpJiYoYy5vdmVyZmxvdz1bcC5vdmVyZmxvdyxwLm92ZXJmbG93WCxwLm92ZXJmbG93WV0saj1tLmNzcyhhLCJkaXNwbGF5IiksbD0ibm9uZSI9PT1qP20uX2RhdGEoYSwib2xkZGlzcGxheSIpfHxGYShhLm5vZGVOYW1lKTpqLCJpbmxpbmUiPT09bCYmIm5vbmUiPT09bS5jc3MoYSwiZmxvYXQiKSYmKGsuaW5saW5lQmxvY2tOZWVkc0xheW91dCYmImlubGluZSIhPT1GYShhLm5vZGVOYW1lKT9wLnpvb209MTpwLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxjLm92ZXJmbG93JiYocC5vdmVyZmxvdz0iaGlkZGVuIixrLnNocmlua1dyYXBCbG9ja3MoKXx8bi5hbHdheXMoZnVuY3Rpb24oKXtwLm92ZXJmbG93PWMub3ZlcmZsb3dbMF0scC5vdmVyZmxvd1g9Yy5vdmVyZmxvd1sxXSxwLm92ZXJmbG93WT1jLm92ZXJmbG93WzJdfSkpO2ZvcihkIGluIGIpaWYoZT1iW2RdLGFiLmV4ZWMoZSkpe2lmKGRlbGV0ZSBiW2RdLGY9Znx8InRvZ2dsZSI9PT1lLGU9PT0ocT8iaGlkZSI6InNob3ciKSl7aWYoInNob3ciIT09ZXx8IXJ8fHZvaWQgMD09PXJbZF0pY29udGludWU7cT0hMH1vW2RdPXImJnJbZF18fG0uc3R5bGUoYSxkKX1lbHNlIGo9dm9pZCAwO2lmKG0uaXNFbXB0eU9iamVjdChvKSkiaW5saW5lIj09PSgibm9uZSI9PT1qP0ZhKGEubm9kZU5hbWUpOmopJiYocC5kaXNwbGF5PWopO2Vsc2V7cj8iaGlkZGVuImluIHImJihxPXIuaGlkZGVuKTpyPW0uX2RhdGEoYSwiZnhzaG93Iix7fSksZiYmKHIuaGlkZGVuPSFxKSxxP20oYSkuc2hvdygpOm4uZG9uZShmdW5jdGlvbigpe20oYSkuaGlkZSgpfSksbi5kb25lKGZ1bmN0aW9uKCl7dmFyIGI7bS5fcmVtb3ZlRGF0YShhLCJmeHNob3ciKTtmb3IoYiBpbiBvKW0uc3R5bGUoYSxiLG9bYl0pfSk7Zm9yKGQgaW4gbylnPWhiKHE/cltkXTowLGQsbiksZCBpbiByfHwocltkXT1nLnN0YXJ0LHEmJihnLmVuZD1nLnN0YXJ0LGcuc3RhcnQ9IndpZHRoIj09PWR8fCJoZWlnaHQiPT09ZD8xOjApKX19ZnVuY3Rpb24gamIoYSxiKXt2YXIgYyxkLGUsZixnO2ZvcihjIGluIGEpaWYoZD1tLmNhbWVsQ2FzZShjKSxlPWJbZF0sZj1hW2NdLG0uaXNBcnJheShmKSYmKGU9ZlsxXSxmPWFbY109ZlswXSksYyE9PWQmJihhW2RdPWYsZGVsZXRlIGFbY10pLGc9bS5jc3NIb29rc1tkXSxnJiYiZXhwYW5kImluIGcpe2Y9Zy5leHBhbmQoZiksZGVsZXRlIGFbZF07Zm9yKGMgaW4gZiljIGluIGF8fChhW2NdPWZbY10sYltjXT1lKX1lbHNlIGJbZF09ZX1mdW5jdGlvbiBrYihhLGIsYyl7dmFyIGQsZSxmPTAsZz1kYi5sZW5ndGgsaD1tLkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIGkuZWxlbX0pLGk9ZnVuY3Rpb24oKXtpZihlKXJldHVybiExO2Zvcih2YXIgYj0kYXx8ZmIoKSxjPU1hdGgubWF4KDAsai5zdGFydFRpbWUrai5kdXJhdGlvbi1iKSxkPWMvai5kdXJhdGlvbnx8MCxmPTEtZCxnPTAsaT1qLnR3ZWVucy5sZW5ndGg7aT5nO2crKylqLnR3ZWVuc1tnXS5ydW4oZik7cmV0dXJuIGgubm90aWZ5V2l0aChhLFtqLGYsY10pLDE+ZiYmaT9jOihoLnJlc29sdmVXaXRoKGEsW2pdKSwhMSl9LGo9aC5wcm9taXNlKHtlbGVtOmEscHJvcHM6bS5leHRlbmQoe30sYiksb3B0czptLmV4dGVuZCghMCx7c3BlY2lhbEVhc2luZzp7fX0sYyksb3JpZ2luYWxQcm9wZXJ0aWVzOmIsb3JpZ2luYWxPcHRpb25zOmMsc3RhcnRUaW1lOiRhfHxmYigpLGR1cmF0aW9uOmMuZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9bS5Ud2VlbihhLGoub3B0cyxiLGMsai5vcHRzLnNwZWNpYWxFYXNpbmdbYl18fGoub3B0cy5lYXNpbmcpO3JldHVybiBqLnR3ZWVucy5wdXNoKGQpLGR9LHN0b3A6ZnVuY3Rpb24oYil7dmFyIGM9MCxkPWI/ai50d2VlbnMubGVuZ3RoOjA7aWYoZSlyZXR1cm4gdGhpcztmb3IoZT0hMDtkPmM7YysrKWoudHdlZW5zW2NdLnJ1bigxKTtyZXR1cm4gYj9oLnJlc29sdmVXaXRoKGEsW2osYl0pOmgucmVqZWN0V2l0aChhLFtqLGJdKSx0aGlzfX0pLGs9ai5wcm9wcztmb3IoamIoayxqLm9wdHMuc3BlY2lhbEVhc2luZyk7Zz5mO2YrKylpZihkPWRiW2ZdLmNhbGwoaixhLGssai5vcHRzKSlyZXR1cm4gZDtyZXR1cm4gbS5tYXAoayxoYixqKSxtLmlzRnVuY3Rpb24oai5vcHRzLnN0YXJ0KSYmai5vcHRzLnN0YXJ0LmNhbGwoYSxqKSxtLmZ4LnRpbWVyKG0uZXh0ZW5kKGkse2VsZW06YSxhbmltOmoscXVldWU6ai5vcHRzLnF1ZXVlfSkpLGoucHJvZ3Jlc3Moai5vcHRzLnByb2dyZXNzKS5kb25lKGoub3B0cy5kb25lLGoub3B0cy5jb21wbGV0ZSkuZmFpbChqLm9wdHMuZmFpbCkuYWx3YXlzKGoub3B0cy5hbHdheXMpfW0uQW5pbWF0aW9uPW0uZXh0ZW5kKGtiLHt0d2VlbmVyOmZ1bmN0aW9uKGEsYil7bS5pc0Z1bmN0aW9uKGEpPyhiPWEsYT1bIioiXSk6YT1hLnNwbGl0KCIgIik7Zm9yKHZhciBjLGQ9MCxlPWEubGVuZ3RoO2U+ZDtkKyspYz1hW2RdLGViW2NdPWViW2NdfHxbXSxlYltjXS51bnNoaWZ0KGIpfSxwcmVmaWx0ZXI6ZnVuY3Rpb24oYSxiKXtiP2RiLnVuc2hpZnQoYSk6ZGIucHVzaChhKX19KSxtLnNwZWVkPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hJiYib2JqZWN0Ij09dHlwZW9mIGE/bS5leHRlbmQoe30sYSk6e2NvbXBsZXRlOmN8fCFjJiZifHxtLmlzRnVuY3Rpb24oYSkmJmEsZHVyYXRpb246YSxlYXNpbmc6YyYmYnx8YiYmIW0uaXNGdW5jdGlvbihiKSYmYn07cmV0dXJuIGQuZHVyYXRpb249bS5meC5vZmY/MDoibnVtYmVyIj09dHlwZW9mIGQuZHVyYXRpb24/ZC5kdXJhdGlvbjpkLmR1cmF0aW9uIGluIG0uZnguc3BlZWRzP20uZnguc3BlZWRzW2QuZHVyYXRpb25dOm0uZnguc3BlZWRzLl9kZWZhdWx0LChudWxsPT1kLnF1ZXVlfHxkLnF1ZXVlPT09ITApJiYoZC5xdWV1ZT0iZngiKSxkLm9sZD1kLmNvbXBsZXRlLGQuY29tcGxldGU9ZnVuY3Rpb24oKXttLmlzRnVuY3Rpb24oZC5vbGQpJiZkLm9sZC5jYWxsKHRoaXMpLGQucXVldWUmJm0uZGVxdWV1ZSh0aGlzLGQucXVldWUpfSxkfSxtLmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLmZpbHRlcihVKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OmJ9LGEsYyxkKX0sYW5pbWF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1tLmlzRW1wdHlPYmplY3QoYSksZj1tLnNwZWVkKGIsYyxkKSxnPWZ1bmN0aW9uKCl7dmFyIGI9a2IodGhpcyxtLmV4dGVuZCh7fSxhKSxmKTsoZXx8bS5fZGF0YSh0aGlzLCJmaW5pc2giKSkmJmIuc3RvcCghMCl9O3JldHVybiBnLmZpbmlzaD1nLGV8fGYucXVldWU9PT0hMT90aGlzLmVhY2goZyk6dGhpcy5xdWV1ZShmLnF1ZXVlLGcpfSxzdG9wOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1mdW5jdGlvbihhKXt2YXIgYj1hLnN0b3A7ZGVsZXRlIGEuc3RvcCxiKGMpfTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGEmJihjPWIsYj1hLGE9dm9pZCAwKSxiJiZhIT09ITEmJnRoaXMucXVldWUoYXx8ImZ4IixbXSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9ITAsZT1udWxsIT1hJiZhKyJxdWV1ZUhvb2tzIixmPW0udGltZXJzLGc9bS5fZGF0YSh0aGlzKTtpZihlKWdbZV0mJmdbZV0uc3RvcCYmZChnW2VdKTtlbHNlIGZvcihlIGluIGcpZ1tlXSYmZ1tlXS5zdG9wJiZjYi50ZXN0KGUpJiZkKGdbZV0pO2ZvcihlPWYubGVuZ3RoO2UtLTspZltlXS5lbGVtIT09dGhpc3x8bnVsbCE9YSYmZltlXS5xdWV1ZSE9PWF8fChmW2VdLmFuaW0uc3RvcChjKSxiPSExLGYuc3BsaWNlKGUsMSkpOyhifHwhYykmJm0uZGVxdWV1ZSh0aGlzLGEpfSl9LGZpbmlzaDpmdW5jdGlvbihhKXtyZXR1cm4gYSE9PSExJiYoYT1hfHwiZngiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYixjPW0uX2RhdGEodGhpcyksZD1jW2ErInF1ZXVlIl0sZT1jW2ErInF1ZXVlSG9va3MiXSxmPW0udGltZXJzLGc9ZD9kLmxlbmd0aDowO2ZvcihjLmZpbmlzaD0hMCxtLnF1ZXVlKHRoaXMsYSxbXSksZSYmZS5zdG9wJiZlLnN0b3AuY2FsbCh0aGlzLCEwKSxiPWYubGVuZ3RoO2ItLTspZltiXS5lbGVtPT09dGhpcyYmZltiXS5xdWV1ZT09PWEmJihmW2JdLmFuaW0uc3RvcCghMCksZi5zcGxpY2UoYiwxKSk7Zm9yKGI9MDtnPmI7YisrKWRbYl0mJmRbYl0uZmluaXNoJiZkW2JdLmZpbmlzaC5jYWxsKHRoaXMpO2RlbGV0ZSBjLmZpbmlzaH0pfX0pLG0uZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVuY3Rpb24oYSxiKXt2YXIgYz1tLmZuW2JdO20uZm5bYl09ZnVuY3Rpb24oYSxkLGUpe3JldHVybiBudWxsPT1hfHwiYm9vbGVhbiI9PXR5cGVvZiBhP2MuYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuYW5pbWF0ZShnYihiLCEwKSxhLGQsZSl9fSksbS5lYWNoKHtzbGlkZURvd246Z2IoInNob3ciKSxzbGlkZVVwOmdiKCJoaWRlIiksc2xpZGVUb2dnbGU6Z2IoInRvZ2dsZSIpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oYSxiKXttLmZuW2FdPWZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsYSxjLGQpfX0pLG0udGltZXJzPVtdLG0uZngudGljaz1mdW5jdGlvbigpe3ZhciBhLGI9bS50aW1lcnMsYz0wO2ZvcigkYT1tLm5vdygpO2M8Yi5sZW5ndGg7YysrKWE9YltjXSxhKCl8fGJbY10hPT1hfHxiLnNwbGljZShjLS0sMSk7Yi5sZW5ndGh8fG0uZnguc3RvcCgpLCRhPXZvaWQgMH0sbS5meC50aW1lcj1mdW5jdGlvbihhKXttLnRpbWVycy5wdXNoKGEpLGEoKT9tLmZ4LnN0YXJ0KCk6bS50aW1lcnMucG9wKCl9LG0uZnguaW50ZXJ2YWw9MTMsbS5meC5zdGFydD1mdW5jdGlvbigpe19hfHwoX2E9c2V0SW50ZXJ2YWwobS5meC50aWNrLG0uZnguaW50ZXJ2YWwpKX0sbS5meC5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChfYSksX2E9bnVsbH0sbS5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sbS5mbi5kZWxheT1mdW5jdGlvbihhLGIpe3JldHVybiBhPW0uZng/bS5meC5zcGVlZHNbYV18fGE6YSxiPWJ8fCJmeCIsdGhpcy5xdWV1ZShiLGZ1bmN0aW9uKGIsYyl7dmFyIGQ9c2V0VGltZW91dChiLGEpO2Muc3RvcD1mdW5jdGlvbigpe2NsZWFyVGltZW91dChkKX19KX0sZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlO2I9eS5jcmVhdGVFbGVtZW50KCJkaXYiKSxiLnNldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIiwidCIpLGIuaW5uZXJIVE1MPSIgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iLGQ9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdLGM9eS5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxlPWMuYXBwZW5kQ2hpbGQoeS5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSksYT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdLGQuc3R5bGUuY3NzVGV4dD0idG9wOjFweCIsay5nZXRTZXRBdHRyaWJ1dGU9InQiIT09Yi5jbGFzc05hbWUsay5zdHlsZT0vdG9wLy50ZXN0KGQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxrLmhyZWZOb3JtYWxpemVkPSIvYSI9PT1kLmdldEF0dHJpYnV0ZSgiaHJlZiIpLGsuY2hlY2tPbj0hIWEudmFsdWUsay5vcHRTZWxlY3RlZD1lLnNlbGVjdGVkLGsuZW5jdHlwZT0hIXkuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsYy5kaXNhYmxlZD0hMCxrLm9wdERpc2FibGVkPSFlLmRpc2FibGVkLGE9eS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGEuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLGsuaW5wdXQ9IiI9PT1hLmdldEF0dHJpYnV0ZSgidmFsdWUiKSxhLnZhbHVlPSJ0IixhLnNldEF0dHJpYnV0ZSgidHlwZSIsInJhZGlvIiksay5yYWRpb1ZhbHVlPSJ0Ij09PWEudmFsdWV9KCk7dmFyIGxiPS9cci9nO20uZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU9dGhpc1swXTt7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZD1tLmlzRnVuY3Rpb24oYSksdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe3ZhciBlOzE9PT10aGlzLm5vZGVUeXBlJiYoZT1kP2EuY2FsbCh0aGlzLGMsbSh0aGlzKS52YWwoKSk6YSxudWxsPT1lP2U9IiI6Im51bWJlciI9PXR5cGVvZiBlP2UrPSIiOm0uaXNBcnJheShlKSYmKGU9bS5tYXAoZSxmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8iIjphKyIifSkpLGI9bS52YWxIb29rc1t0aGlzLnR5cGVdfHxtLnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sYiYmInNldCJpbiBiJiZ2b2lkIDAhPT1iLnNldCh0aGlzLGUsInZhbHVlIil8fCh0aGlzLnZhbHVlPWUpKX0pO2lmKGUpcmV0dXJuIGI9bS52YWxIb29rc1tlLnR5cGVdfHxtLnZhbEhvb2tzW2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sYiYmImdldCJpbiBiJiZ2b2lkIDAhPT0oYz1iLmdldChlLCJ2YWx1ZSIpKT9jOihjPWUudmFsdWUsInN0cmluZyI9PXR5cGVvZiBjP2MucmVwbGFjZShsYiwiIik6bnVsbD09Yz8iIjpjKX19fSksbS5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihhKXt2YXIgYj1tLmZpbmQuYXR0cihhLCJ2YWx1ZSIpO3JldHVybiBudWxsIT1iP2I6bS50cmltKG0udGV4dChhKSl9fSxzZWxlY3Q6e2dldDpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkPWEub3B0aW9ucyxlPWEuc2VsZWN0ZWRJbmRleCxmPSJzZWxlY3Qtb25lIj09PWEudHlwZXx8MD5lLGc9Zj9udWxsOltdLGg9Zj9lKzE6ZC5sZW5ndGgsaT0wPmU/aDpmP2U6MDtoPmk7aSsrKWlmKGM9ZFtpXSwhKCFjLnNlbGVjdGVkJiZpIT09ZXx8KGsub3B0RGlzYWJsZWQ/Yy5kaXNhYmxlZDpudWxsIT09Yy5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIikpfHxjLnBhcmVudE5vZGUuZGlzYWJsZWQmJm0ubm9kZU5hbWUoYy5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7aWYoYj1tKGMpLnZhbCgpLGYpcmV0dXJuIGI7Zy5wdXNoKGIpfXJldHVybiBnfSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9YS5vcHRpb25zLGY9bS5tYWtlQXJyYXkoYiksZz1lLmxlbmd0aDt3aGlsZShnLS0paWYoZD1lW2ddLG0uaW5BcnJheShtLnZhbEhvb2tzLm9wdGlvbi5nZXQoZCksZik+PTApdHJ5e2Quc2VsZWN0ZWQ9Yz0hMH1jYXRjaChoKXtkLnNjcm9sbEhlaWdodH1lbHNlIGQuc2VsZWN0ZWQ9ITE7cmV0dXJuIGN8fChhLnNlbGVjdGVkSW5kZXg9LTEpLGV9fX19KSxtLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXttLnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbS5pc0FycmF5KGIpP2EuY2hlY2tlZD1tLmluQXJyYXkobShhKS52YWwoKSxiKT49MDp2b2lkIDB9fSxrLmNoZWNrT258fChtLnZhbEhvb2tzW3RoaXNdLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09PWEuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPyJvbiI6YS52YWx1ZX0pfSk7dmFyIG1iLG5iLG9iPW0uZXhwci5hdHRySGFuZGxlLHBiPS9eKD86Y2hlY2tlZHxzZWxlY3RlZCkkL2kscWI9ay5nZXRTZXRBdHRyaWJ1dGUscmI9ay5pbnB1dDttLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIpe3JldHVybiBWKHRoaXMsbS5hdHRyLGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXttLnJlbW92ZUF0dHIodGhpcyxhKX0pfX0pLG0uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9YS5ub2RlVHlwZTtpZihhJiYzIT09ZiYmOCE9PWYmJjIhPT1mKXJldHVybiB0eXBlb2YgYS5nZXRBdHRyaWJ1dGU9PT1LP20ucHJvcChhLGIsYyk6KDE9PT1mJiZtLmlzWE1MRG9jKGEpfHwoYj1iLnRvTG93ZXJDYXNlKCksZD1tLmF0dHJIb29rc1tiXXx8KG0uZXhwci5tYXRjaC5ib29sLnRlc3QoYik/bmI6bWIpKSx2b2lkIDA9PT1jP2QmJiJnZXQiaW4gZCYmbnVsbCE9PShlPWQuZ2V0KGEsYikpP2U6KGU9bS5maW5kLmF0dHIoYSxiKSxudWxsPT1lP3ZvaWQgMDplKTpudWxsIT09Yz9kJiYic2V0ImluIGQmJnZvaWQgMCE9PShlPWQuc2V0KGEsYyxiKSk/ZTooYS5zZXRBdHRyaWJ1dGUoYixjKyIiKSxjKTp2b2lkIG0ucmVtb3ZlQXR0cihhLGIpKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZT0wLGY9YiYmYi5tYXRjaChFKTtpZihmJiYxPT09YS5ub2RlVHlwZSl3aGlsZShjPWZbZSsrXSlkPW0ucHJvcEZpeFtjXXx8YyxtLmV4cHIubWF0Y2guYm9vbC50ZXN0KGMpP3JiJiZxYnx8IXBiLnRlc3QoYyk/YVtkXT0hMTphW20uY2FtZWxDYXNlKCJkZWZhdWx0LSIrYyldPWFbZF09ITE6bS5hdHRyKGEsYywiIiksYS5yZW1vdmVBdHRyaWJ1dGUocWI/YzpkKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oYSxiKXtpZighay5yYWRpb1ZhbHVlJiYicmFkaW8iPT09YiYmbS5ub2RlTmFtZShhLCJpbnB1dCIpKXt2YXIgYz1hLnZhbHVlO3JldHVybiBhLnNldEF0dHJpYnV0ZSgidHlwZSIsYiksYyYmKGEudmFsdWU9YyksYn19fX19KSxuYj17c2V0OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYj09PSExP20ucmVtb3ZlQXR0cihhLGMpOnJiJiZxYnx8IXBiLnRlc3QoYyk/YS5zZXRBdHRyaWJ1dGUoIXFiJiZtLnByb3BGaXhbY118fGMsYyk6YVttLmNhbWVsQ2FzZSgiZGVmYXVsdC0iK2MpXT1hW2NdPSEwLGN9fSxtLmVhY2gobS5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksZnVuY3Rpb24oYSxiKXt2YXIgYz1vYltiXXx8bS5maW5kLmF0dHI7b2JbYl09cmImJnFifHwhcGIudGVzdChiKT9mdW5jdGlvbihhLGIsZCl7dmFyIGUsZjtyZXR1cm4gZHx8KGY9b2JbYl0sb2JbYl09ZSxlPW51bGwhPWMoYSxiLGQpP2IudG9Mb3dlckNhc2UoKTpudWxsLG9iW2JdPWYpLGV9OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz92b2lkIDA6YVttLmNhbWVsQ2FzZSgiZGVmYXVsdC0iK2IpXT9iLnRvTG93ZXJDYXNlKCk6bnVsbH19KSxyYiYmcWJ8fChtLmF0dHJIb29rcy52YWx1ZT17c2V0OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbS5ub2RlTmFtZShhLCJpbnB1dCIpP3ZvaWQoYS5kZWZhdWx0VmFsdWU9Yik6bWImJm1iLnNldChhLGIsYyl9fSkscWJ8fChtYj17c2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldEF0dHJpYnV0ZU5vZGUoYyk7cmV0dXJuIGR8fGEuc2V0QXR0cmlidXRlTm9kZShkPWEub3duZXJEb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoYykpLGQudmFsdWU9Yis9IiIsInZhbHVlIj09PWN8fGI9PT1hLmdldEF0dHJpYnV0ZShjKT9iOnZvaWQgMH19LG9iLmlkPW9iLm5hbWU9b2IuY29vcmRzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gYz92b2lkIDA6KGQ9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSYmIiIhPT1kLnZhbHVlP2QudmFsdWU6bnVsbH0sbS52YWxIb29rcy5idXR0b249e2dldDpmdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0QXR0cmlidXRlTm9kZShiKTtyZXR1cm4gYyYmYy5zcGVjaWZpZWQ/Yy52YWx1ZTp2b2lkIDB9LHNldDptYi5zZXR9LG0uYXR0ckhvb2tzLmNvbnRlbnRlZGl0YWJsZT17c2V0OmZ1bmN0aW9uKGEsYixjKXttYi5zZXQoYSwiIj09PWI/ITE6YixjKX19LG0uZWFjaChbIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYSxiKXttLmF0dHJIb29rc1tiXT17c2V0OmZ1bmN0aW9uKGEsYyl7cmV0dXJuIiI9PT1jPyhhLnNldEF0dHJpYnV0ZShiLCJhdXRvIiksYyk6dm9pZCAwfX19KSksay5zdHlsZXx8KG0uYXR0ckhvb2tzLnN0eWxlPXtnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dHx8dm9pZCAwfSxzZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0PWIrIiJ9fSk7dmFyIHNiPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QpJC9pLHRiPS9eKD86YXxhcmVhKSQvaTttLmZuLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihhLGIpe3JldHVybiBWKHRoaXMsbS5wcm9wLGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGEpe3JldHVybiBhPW0ucHJvcEZpeFthXXx8YSx0aGlzLmVhY2goZnVuY3Rpb24oKXt0cnl7dGhpc1thXT12b2lkIDAsZGVsZXRlIHRoaXNbYV19Y2F0Y2goYil7fX0pfX0pLG0uZXh0ZW5kKHtwcm9wRml4OnsiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIn0scHJvcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGc9YS5ub2RlVHlwZTtpZihhJiYzIT09ZyYmOCE9PWcmJjIhPT1nKXJldHVybiBmPTEhPT1nfHwhbS5pc1hNTERvYyhhKSxmJiYoYj1tLnByb3BGaXhbYl18fGIsZT1tLnByb3BIb29rc1tiXSksdm9pZCAwIT09Yz9lJiYic2V0ImluIGUmJnZvaWQgMCE9PShkPWUuc2V0KGEsYyxiKSk/ZDphW2JdPWM6ZSYmImdldCJpbiBlJiZudWxsIT09KGQ9ZS5nZXQoYSxiKSk/ZDphW2JdfSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9bS5maW5kLmF0dHIoYSwidGFiaW5kZXgiKTtyZXR1cm4gYj9wYXJzZUludChiLDEwKTpzYi50ZXN0KGEubm9kZU5hbWUpfHx0Yi50ZXN0KGEubm9kZU5hbWUpJiZhLmhyZWY/MDotMX19fX0pLGsuaHJlZk5vcm1hbGl6ZWR8fG0uZWFjaChbImhyZWYiLCJzcmMiXSxmdW5jdGlvbihhLGIpe20ucHJvcEhvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKGIsNCl9fX0pLGsub3B0U2VsZWN0ZWR8fChtLnByb3BIb29rcy5zZWxlY3RlZD17Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmKGIuc2VsZWN0ZWRJbmRleCxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KSxudWxsfX0pLG0uZWFjaChbInRhYkluZGV4IiwicmVhZE9ubHkiLCJtYXhMZW5ndGgiLCJjZWxsU3BhY2luZyIsImNlbGxQYWRkaW5nIiwicm93U3BhbiIsImNvbFNwYW4iLCJ1c2VNYXAiLCJmcmFtZUJvcmRlciIsImNvbnRlbnRFZGl0YWJsZSJdLGZ1bmN0aW9uKCl7bS5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV09dGhpc30pLGsuZW5jdHlwZXx8KG0ucHJvcEZpeC5lbmN0eXBlPSJlbmNvZGluZyIpO3ZhciB1Yj0vW1x0XHJcblxmXS9nO20uZm4uZXh0ZW5kKHthZGRDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaD0wLGk9dGhpcy5sZW5ndGgsaj0ic3RyaW5nIj09dHlwZW9mIGEmJmE7aWYobS5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bSh0aGlzKS5hZGRDbGFzcyhhLmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZihqKWZvcihiPShhfHwiIikubWF0Y2goRSl8fFtdO2k+aDtoKyspaWYoYz10aGlzW2hdLGQ9MT09PWMubm9kZVR5cGUmJihjLmNsYXNzTmFtZT8oIiAiK2MuY2xhc3NOYW1lKyIgIikucmVwbGFjZSh1YiwiICIpOiIgIikpe2Y9MDt3aGlsZShlPWJbZisrXSlkLmluZGV4T2YoIiAiK2UrIiAiKTwwJiYoZCs9ZSsiICIpO2c9bS50cmltKGQpLGMuY2xhc3NOYW1lIT09ZyYmKGMuY2xhc3NOYW1lPWcpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaD0wLGk9dGhpcy5sZW5ndGgsaj0wPT09YXJndW1lbnRzLmxlbmd0aHx8InN0cmluZyI9PXR5cGVvZiBhJiZhO2lmKG0uaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe20odGhpcykucmVtb3ZlQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoailmb3IoYj0oYXx8IiIpLm1hdGNoKEUpfHxbXTtpPmg7aCsrKWlmKGM9dGhpc1toXSxkPTE9PT1jLm5vZGVUeXBlJiYoYy5jbGFzc05hbWU/KCIgIitjLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UodWIsIiAiKToiIikpe2Y9MDt3aGlsZShlPWJbZisrXSl3aGlsZShkLmluZGV4T2YoIiAiK2UrIiAiKT49MClkPWQucmVwbGFjZSgiICIrZSsiICIsIiAiKTtnPWE/bS50cmltKGQpOiIiLGMuY2xhc3NOYW1lIT09ZyYmKGMuY2xhc3NOYW1lPWcpfXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhO3JldHVybiJib29sZWFuIj09dHlwZW9mIGImJiJzdHJpbmciPT09Yz9iP3RoaXMuYWRkQ2xhc3MoYSk6dGhpcy5yZW1vdmVDbGFzcyhhKTp0aGlzLmVhY2gobS5pc0Z1bmN0aW9uKGEpP2Z1bmN0aW9uKGMpe20odGhpcykudG9nZ2xlQ2xhc3MoYS5jYWxsKHRoaXMsYyx0aGlzLmNsYXNzTmFtZSxiKSxiKX06ZnVuY3Rpb24oKXtpZigic3RyaW5nIj09PWMpe3ZhciBiLGQ9MCxlPW0odGhpcyksZj1hLm1hdGNoKEUpfHxbXTt3aGlsZShiPWZbZCsrXSllLmhhc0NsYXNzKGIpP2UucmVtb3ZlQ2xhc3MoYik6ZS5hZGRDbGFzcyhiKX1lbHNlKGM9PT1LfHwiYm9vbGVhbiI9PT1jKSYmKHRoaXMuY2xhc3NOYW1lJiZtLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8YT09PSExPyIiOm0uX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIil9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIgIithKyIgIixjPTAsZD10aGlzLmxlbmd0aDtkPmM7YysrKWlmKDE9PT10aGlzW2NdLm5vZGVUeXBlJiYoIiAiK3RoaXNbY10uY2xhc3NOYW1lKyIgIikucmVwbGFjZSh1YiwiICIpLmluZGV4T2YoYik+PTApcmV0dXJuITA7cmV0dXJuITF9fSksbS5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7bS5mbltiXT1mdW5jdGlvbihhLGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjA/dGhpcy5vbihiLG51bGwsYSxjKTp0aGlzLnRyaWdnZXIoYil9fSksbS5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfSxiaW5kOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5vbihhLG51bGwsYixjKX0sdW5iaW5kOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMub2ZmKGEsbnVsbCxiKX0sZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24oYixhLGMsZCl9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihhLCIqKiIpOnRoaXMub2ZmKGIsYXx8IioqIixjKX19KTt2YXIgdmI9bS5ub3coKSx3Yj0vXD8vLHhiPS8oLCl8KFxbfHspfCh9fF0pfCIoPzpbXiJcXFxyXG5dfFxcWyJcXFwvYmZucnRdfFxcdVtcZGEtZkEtRl17NH0pKiJccyo6P3x0cnVlfGZhbHNlfG51bGx8LT8oPyEwXGQpXGQrKD86XC5cZCt8KSg/OltlRV1bKy1dP1xkK3wpL2c7bS5wYXJzZUpTT049ZnVuY3Rpb24oYil7aWYoYS5KU09OJiZhLkpTT04ucGFyc2UpcmV0dXJuIGEuSlNPTi5wYXJzZShiKyIiKTt2YXIgYyxkPW51bGwsZT1tLnRyaW0oYisiIik7cmV0dXJuIGUmJiFtLnRyaW0oZS5yZXBsYWNlKHhiLGZ1bmN0aW9uKGEsYixlLGYpe3JldHVybiBjJiZiJiYoZD0wKSwwPT09ZD9hOihjPWV8fGIsZCs9IWYtIWUsIiIpfSkpP0Z1bmN0aW9uKCJyZXR1cm4gIitlKSgpOm0uZXJyb3IoIkludmFsaWQgSlNPTjogIitiKX0sbS5wYXJzZVhNTD1mdW5jdGlvbihiKXt2YXIgYyxkO2lmKCFifHwic3RyaW5nIiE9dHlwZW9mIGIpcmV0dXJuIG51bGw7dHJ5e2EuRE9NUGFyc2VyPyhkPW5ldyBET01QYXJzZXIsYz1kLnBhcnNlRnJvbVN0cmluZyhiLCJ0ZXh0L3htbCIpKTooYz1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLGMuYXN5bmM9ImZhbHNlIixjLmxvYWRYTUwoYikpfWNhdGNoKGUpe2M9dm9pZCAwfXJldHVybiBjJiZjLmRvY3VtZW50RWxlbWVudCYmIWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RofHxtLmVycm9yKCJJbnZhbGlkIFhNTDogIitiKSxjfTt2YXIgeWIsemIsQWI9LyMuKiQvLEJiPS8oWz8mXSlfPVteJl0qLyxDYj0vXiguKj8pOlsgXHRdKihbXlxyXG5dKilccj8kL2dtLERiPS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLEViPS9eKD86R0VUfEhFQUQpJC8sRmI9L15cL1wvLyxHYj0vXihbXHcuKy1dKzopKD86XC9cLyg/OlteXC8/I10qQHwpKFteXC8/IzpdKikoPzo6KFxkKyl8KXwpLyxIYj17fSxJYj17fSxKYj0iKi8iLmNvbmNhdCgiKiIpO3RyeXt6Yj1sb2NhdGlvbi5ocmVmfWNhdGNoKEtiKXt6Yj15LmNyZWF0ZUVsZW1lbnQoImEiKSx6Yi5ocmVmPSIiLHpiPXpiLmhyZWZ9eWI9R2IuZXhlYyh6Yi50b0xvd2VyQ2FzZSgpKXx8W107ZnVuY3Rpb24gTGIoYSl7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7InN0cmluZyIhPXR5cGVvZiBiJiYoYz1iLGI9IioiKTt2YXIgZCxlPTAsZj1iLnRvTG93ZXJDYXNlKCkubWF0Y2goRSl8fFtdO2lmKG0uaXNGdW5jdGlvbihjKSl3aGlsZShkPWZbZSsrXSkiKyI9PT1kLmNoYXJBdCgwKT8oZD1kLnNsaWNlKDEpfHwiKiIsKGFbZF09YVtkXXx8W10pLnVuc2hpZnQoYykpOihhW2RdPWFbZF18fFtdKS5wdXNoKGMpfX1mdW5jdGlvbiBNYihhLGIsYyxkKXt2YXIgZT17fSxmPWE9PT1JYjtmdW5jdGlvbiBnKGgpe3ZhciBpO3JldHVybiBlW2hdPSEwLG0uZWFjaChhW2hdfHxbXSxmdW5jdGlvbihhLGgpe3ZhciBqPWgoYixjLGQpO3JldHVybiJzdHJpbmciIT10eXBlb2Yganx8Znx8ZVtqXT9mPyEoaT1qKTp2b2lkIDA6KGIuZGF0YVR5cGVzLnVuc2hpZnQoaiksZyhqKSwhMSl9KSxpfXJldHVybiBnKGIuZGF0YVR5cGVzWzBdKXx8IWVbIioiXSYmZygiKiIpfWZ1bmN0aW9uIE5iKGEsYil7dmFyIGMsZCxlPW0uYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IoZCBpbiBiKXZvaWQgMCE9PWJbZF0mJigoZVtkXT9hOmN8fChjPXt9KSlbZF09YltkXSk7cmV0dXJuIGMmJm0uZXh0ZW5kKCEwLGEsYyksYX1mdW5jdGlvbiBPYihhLGIsYyl7dmFyIGQsZSxmLGcsaD1hLmNvbnRlbnRzLGk9YS5kYXRhVHlwZXM7d2hpbGUoIioiPT09aVswXSlpLnNoaWZ0KCksdm9pZCAwPT09ZSYmKGU9YS5taW1lVHlwZXx8Yi5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIikpO2lmKGUpZm9yKGcgaW4gaClpZihoW2ddJiZoW2ddLnRlc3QoZSkpe2kudW5zaGlmdChnKTticmVha31pZihpWzBdaW4gYylmPWlbMF07ZWxzZXtmb3IoZyBpbiBjKXtpZighaVswXXx8YS5jb252ZXJ0ZXJzW2crIiAiK2lbMF1dKXtmPWc7YnJlYWt9ZHx8KGQ9Zyl9Zj1mfHxkfXJldHVybiBmPyhmIT09aVswXSYmaS51bnNoaWZ0KGYpLGNbZl0pOnZvaWQgMH1mdW5jdGlvbiBQYihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGo9e30saz1hLmRhdGFUeXBlcy5zbGljZSgpO2lmKGtbMV0pZm9yKGcgaW4gYS5jb252ZXJ0ZXJzKWpbZy50b0xvd2VyQ2FzZSgpXT1hLmNvbnZlcnRlcnNbZ107Zj1rLnNoaWZ0KCk7d2hpbGUoZilpZihhLnJlc3BvbnNlRmllbGRzW2ZdJiYoY1thLnJlc3BvbnNlRmllbGRzW2ZdXT1iKSwhaSYmZCYmYS5kYXRhRmlsdGVyJiYoYj1hLmRhdGFGaWx0ZXIoYixhLmRhdGFUeXBlKSksaT1mLGY9ay5zaGlmdCgpKWlmKCIqIj09PWYpZj1pO2Vsc2UgaWYoIioiIT09aSYmaSE9PWYpe2lmKGc9altpKyIgIitmXXx8alsiKiAiK2ZdLCFnKWZvcihlIGluIGopaWYoaD1lLnNwbGl0KCIgIiksaFsxXT09PWYmJihnPWpbaSsiICIraFswXV18fGpbIiogIitoWzBdXSkpe2c9PT0hMD9nPWpbZV06altlXSE9PSEwJiYoZj1oWzBdLGsudW5zaGlmdChoWzFdKSk7YnJlYWt9aWYoZyE9PSEwKWlmKGcmJmFbInRocm93cyJdKWI9ZyhiKTtlbHNlIHRyeXtiPWcoYil9Y2F0Y2gobCl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6Zz9sOiJObyBjb252ZXJzaW9uIGZyb20gIitpKyIgdG8gIitmfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOmJ9fW0uZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxhamF4U2V0dGluZ3M6e3VybDp6Yix0eXBlOiJHRVQiLGlzTG9jYWw6RGIudGVzdCh5YlsxXSksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjpKYix0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDoveG1sLyxodG1sOi9odG1sLyxqc29uOi9qc29uL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVzcG9uc2VYTUwiLHRleHQ6InJlc3BvbnNlVGV4dCIsanNvbjoicmVzcG9uc2VKU09OIn0sY29udmVydGVyczp7IiogdGV4dCI6U3RyaW5nLCJ0ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24iOm0ucGFyc2VKU09OLCJ0ZXh0IHhtbCI6bS5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI/TmIoTmIoYSxtLmFqYXhTZXR0aW5ncyksYik6TmIobS5hamF4U2V0dGluZ3MsYSl9LGFqYXhQcmVmaWx0ZXI6TGIoSGIpLGFqYXhUcmFuc3BvcnQ6TGIoSWIpLGFqYXg6ZnVuY3Rpb24oYSxiKXsib2JqZWN0Ij09dHlwZW9mIGEmJihiPWEsYT12b2lkIDApLGI9Ynx8e307dmFyIGMsZCxlLGYsZyxoLGksaixrPW0uYWpheFNldHVwKHt9LGIpLGw9ay5jb250ZXh0fHxrLG49ay5jb250ZXh0JiYobC5ub2RlVHlwZXx8bC5qcXVlcnkpP20obCk6bS5ldmVudCxvPW0uRGVmZXJyZWQoKSxwPW0uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLHE9ay5zdGF0dXNDb2RlfHx7fSxyPXt9LHM9e30sdD0wLHU9ImNhbmNlbGVkIix2PXtyZWFkeVN0YXRlOjAsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oYSl7dmFyIGI7aWYoMj09PXQpe2lmKCFqKXtqPXt9O3doaWxlKGI9Q2IuZXhlYyhmKSlqW2JbMV0udG9Mb3dlckNhc2UoKV09YlsyXX1iPWpbYS50b0xvd2VyQ2FzZSgpXX1yZXR1cm4gbnVsbD09Yj9udWxsOmJ9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiAyPT09dD9mOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHR8fChhPXNbY109c1tjXXx8YSxyW2FdPWIpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIHR8fChrLm1pbWVUeXBlPWEpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oYSl7dmFyIGI7aWYoYSlpZigyPnQpZm9yKGIgaW4gYSlxW2JdPVtxW2JdLGFbYl1dO2Vsc2Ugdi5hbHdheXMoYVt2LnN0YXR1c10pO3JldHVybiB0aGlzfSxhYm9ydDpmdW5jdGlvbihhKXt2YXIgYj1hfHx1O3JldHVybiBpJiZpLmFib3J0KGIpLHgoMCxiKSx0aGlzfX07aWYoby5wcm9taXNlKHYpLmNvbXBsZXRlPXAuYWRkLHYuc3VjY2Vzcz12LmRvbmUsdi5lcnJvcj12LmZhaWwsay51cmw9KChhfHxrLnVybHx8emIpKyIiKS5yZXBsYWNlKEFiLCIiKS5yZXBsYWNlKEZiLHliWzFdKyIvLyIpLGsudHlwZT1iLm1ldGhvZHx8Yi50eXBlfHxrLm1ldGhvZHx8ay50eXBlLGsuZGF0YVR5cGVzPW0udHJpbShrLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkubWF0Y2goRSl8fFsiIl0sbnVsbD09ay5jcm9zc0RvbWFpbiYmKGM9R2IuZXhlYyhrLnVybC50b0xvd2VyQ2FzZSgpKSxrLmNyb3NzRG9tYWluPSEoIWN8fGNbMV09PT15YlsxXSYmY1syXT09PXliWzJdJiYoY1szXXx8KCJodHRwOiI9PT1jWzFdPyI4MCI6IjQ0MyIpKT09PSh5YlszXXx8KCJodHRwOiI9PT15YlsxXT8iODAiOiI0NDMiKSkpKSxrLmRhdGEmJmsucHJvY2Vzc0RhdGEmJiJzdHJpbmciIT10eXBlb2Ygay5kYXRhJiYoay5kYXRhPW0ucGFyYW0oay5kYXRhLGsudHJhZGl0aW9uYWwpKSxNYihIYixrLGIsdiksMj09PXQpcmV0dXJuIHY7aD1tLmV2ZW50JiZrLmdsb2JhbCxoJiYwPT09bS5hY3RpdmUrKyYmbS5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKSxrLnR5cGU9ay50eXBlLnRvVXBwZXJDYXNlKCksay5oYXNDb250ZW50PSFFYi50ZXN0KGsudHlwZSksZT1rLnVybCxrLmhhc0NvbnRlbnR8fChrLmRhdGEmJihlPWsudXJsKz0od2IudGVzdChlKT8iJiI6Ij8iKStrLmRhdGEsZGVsZXRlIGsuZGF0YSksay5jYWNoZT09PSExJiYoay51cmw9QmIudGVzdChlKT9lLnJlcGxhY2UoQmIsIiQxXz0iK3ZiKyspOmUrKHdiLnRlc3QoZSk/IiYiOiI/IikrIl89Iit2YisrKSksay5pZk1vZGlmaWVkJiYobS5sYXN0TW9kaWZpZWRbZV0mJnYuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLG0ubGFzdE1vZGlmaWVkW2VdKSxtLmV0YWdbZV0mJnYuc2V0UmVxdWVzdEhlYWRlcigiSWYtTm9uZS1NYXRjaCIsbS5ldGFnW2VdKSksKGsuZGF0YSYmay5oYXNDb250ZW50JiZrLmNvbnRlbnRUeXBlIT09ITF8fGIuY29udGVudFR5cGUpJiZ2LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsay5jb250ZW50VHlwZSksdi5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLGsuZGF0YVR5cGVzWzBdJiZrLmFjY2VwdHNbay5kYXRhVHlwZXNbMF1dP2suYWNjZXB0c1trLmRhdGFUeXBlc1swXV0rKCIqIiE9PWsuZGF0YVR5cGVzWzBdPyIsICIrSmIrIjsgcT0wLjAxIjoiIik6ay5hY2NlcHRzWyIqIl0pO2ZvcihkIGluIGsuaGVhZGVycyl2LnNldFJlcXVlc3RIZWFkZXIoZCxrLmhlYWRlcnNbZF0pO2lmKGsuYmVmb3JlU2VuZCYmKGsuYmVmb3JlU2VuZC5jYWxsKGwsdixrKT09PSExfHwyPT09dCkpcmV0dXJuIHYuYWJvcnQoKTt1PSJhYm9ydCI7Zm9yKGQgaW57c3VjY2VzczoxLGVycm9yOjEsY29tcGxldGU6MX0pdltkXShrW2RdKTtpZihpPU1iKEliLGssYix2KSl7di5yZWFkeVN0YXRlPTEsaCYmbi50cmlnZ2VyKCJhamF4U2VuZCIsW3Ysa10pLGsuYXN5bmMmJmsudGltZW91dD4wJiYoZz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7di5hYm9ydCgidGltZW91dCIpfSxrLnRpbWVvdXQpKTt0cnl7dD0xLGkuc2VuZChyLHgpfWNhdGNoKHcpe2lmKCEoMj50KSl0aHJvdyB3O3goLTEsdyl9fWVsc2UgeCgtMSwiTm8gVHJhbnNwb3J0Iik7ZnVuY3Rpb24geChhLGIsYyxkKXt2YXIgaixyLHMsdSx3LHg9YjsyIT09dCYmKHQ9MixnJiZjbGVhclRpbWVvdXQoZyksaT12b2lkIDAsZj1kfHwiIix2LnJlYWR5U3RhdGU9YT4wPzQ6MCxqPWE+PTIwMCYmMzAwPmF8fDMwND09PWEsYyYmKHU9T2Ioayx2LGMpKSx1PVBiKGssdSx2LGopLGo/KGsuaWZNb2RpZmllZCYmKHc9di5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpLHcmJihtLmxhc3RNb2RpZmllZFtlXT13KSx3PXYuZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKSx3JiYobS5ldGFnW2VdPXcpKSwyMDQ9PT1hfHwiSEVBRCI9PT1rLnR5cGU/eD0ibm9jb250ZW50IjozMDQ9PT1hP3g9Im5vdG1vZGlmaWVkIjooeD11LnN0YXRlLHI9dS5kYXRhLHM9dS5lcnJvcixqPSFzKSk6KHM9eCwoYXx8IXgpJiYoeD0iZXJyb3IiLDA+YSYmKGE9MCkpKSx2LnN0YXR1cz1hLHYuc3RhdHVzVGV4dD0oYnx8eCkrIiIsaj9vLnJlc29sdmVXaXRoKGwsW3IseCx2XSk6by5yZWplY3RXaXRoKGwsW3YseCxzXSksdi5zdGF0dXNDb2RlKHEpLHE9dm9pZCAwLGgmJm4udHJpZ2dlcihqPyJhamF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW3YsayxqP3I6c10pLHAuZmlyZVdpdGgobCxbdix4XSksaCYmKG4udHJpZ2dlcigiYWpheENvbXBsZXRlIixbdixrXSksLS1tLmFjdGl2ZXx8bS5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKSl9cmV0dXJuIHZ9LGdldEpTT046ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBtLmdldChhLGIsYywianNvbiIpfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbS5nZXQoYSx2b2lkIDAsYiwic2NyaXB0Iil9fSksbS5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGEsYil7bVtiXT1mdW5jdGlvbihhLGMsZCxlKXtyZXR1cm4gbS5pc0Z1bmN0aW9uKGMpJiYoZT1lfHxkLGQ9YyxjPXZvaWQgMCksbS5hamF4KHt1cmw6YSx0eXBlOmIsZGF0YVR5cGU6ZSxkYXRhOmMsc3VjY2VzczpkfSl9fSksbS5fZXZhbFVybD1mdW5jdGlvbihhKXtyZXR1cm4gbS5hamF4KHt1cmw6YSx0eXBlOiJHRVQiLGRhdGFUeXBlOiJzY3JpcHQiLGFzeW5jOiExLGdsb2JhbDohMSwidGhyb3dzIjohMH0pfSxtLmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihhKXtpZihtLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXttKHRoaXMpLndyYXBBbGwoYS5jYWxsKHRoaXMsYikpfSk7aWYodGhpc1swXSl7dmFyIGI9bShhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApO3RoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1swXSksYi5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3doaWxlKGEuZmlyc3RDaGlsZCYmMT09PWEuZmlyc3RDaGlsZC5ub2RlVHlwZSlhPWEuZmlyc3RDaGlsZDtyZXR1cm4gYX0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2gobS5pc0Z1bmN0aW9uKGEpP2Z1bmN0aW9uKGIpe20odGhpcykud3JhcElubmVyKGEuY2FsbCh0aGlzLGIpKX06ZnVuY3Rpb24oKXt2YXIgYj1tKHRoaXMpLGM9Yi5jb250ZW50cygpO2MubGVuZ3RoP2Mud3JhcEFsbChhKTpiLmFwcGVuZChhKX0pfSx3cmFwOmZ1bmN0aW9uKGEpe3ZhciBiPW0uaXNGdW5jdGlvbihhKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe20odGhpcykud3JhcEFsbChiP2EuY2FsbCh0aGlzLGMpOmEpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXttLm5vZGVOYW1lKHRoaXMsImJvZHkiKXx8bSh0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSkuZW5kKCl9fSksbS5leHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGEpe3JldHVybiBhLm9mZnNldFdpZHRoPD0wJiZhLm9mZnNldEhlaWdodDw9MHx8IWsucmVsaWFibGVIaWRkZW5PZmZzZXRzKCkmJiJub25lIj09PShhLnN0eWxlJiZhLnN0eWxlLmRpc3BsYXl8fG0uY3NzKGEsImRpc3BsYXkiKSl9LG0uZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oYSl7cmV0dXJuIW0uZXhwci5maWx0ZXJzLmhpZGRlbihhKX07dmFyIFFiPS8lMjAvZyxSYj0vXFtcXSQvLFNiPS9ccj9cbi9nLFRiPS9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxVYj0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7ZnVuY3Rpb24gVmIoYSxiLGMsZCl7dmFyIGU7aWYobS5pc0FycmF5KGIpKW0uZWFjaChiLGZ1bmN0aW9uKGIsZSl7Y3x8UmIudGVzdChhKT9kKGEsZSk6VmIoYSsiWyIrKCJvYmplY3QiPT10eXBlb2YgZT9iOiIiKSsiXSIsZSxjLGQpfSk7ZWxzZSBpZihjfHwib2JqZWN0IiE9PW0udHlwZShiKSlkKGEsYik7ZWxzZSBmb3IoZSBpbiBiKVZiKGErIlsiK2UrIl0iLGJbZV0sYyxkKX1tLnBhcmFtPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPWZ1bmN0aW9uKGEsYil7Yj1tLmlzRnVuY3Rpb24oYik/YigpOm51bGw9PWI/IiI6YixkW2QubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoYSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChiKX07aWYodm9pZCAwPT09YiYmKGI9bS5hamF4U2V0dGluZ3MmJm0uYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSxtLmlzQXJyYXkoYSl8fGEuanF1ZXJ5JiYhbS5pc1BsYWluT2JqZWN0KGEpKW0uZWFjaChhLGZ1bmN0aW9uKCl7ZSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihjIGluIGEpVmIoYyxhW2NdLGIsZSk7cmV0dXJuIGQuam9pbigiJiIpLnJlcGxhY2UoUWIsIisiKX0sbS5mbi5leHRlbmQoe3NlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiBtLnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGE9bS5wcm9wKHRoaXMsImVsZW1lbnRzIik7cmV0dXJuIGE/bS5tYWtlQXJyYXkoYSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBhPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYhbSh0aGlzKS5pcygiOmRpc2FibGVkIikmJlViLnRlc3QodGhpcy5ub2RlTmFtZSkmJiFUYi50ZXN0KGEpJiYodGhpcy5jaGVja2VkfHwhVy50ZXN0KGEpKX0pLm1hcChmdW5jdGlvbihhLGIpe3ZhciBjPW0odGhpcykudmFsKCk7cmV0dXJuIG51bGw9PWM/bnVsbDptLmlzQXJyYXkoYyk/bS5tYXAoYyxmdW5jdGlvbihhKXtyZXR1cm57bmFtZTpiLm5hbWUsdmFsdWU6YS5yZXBsYWNlKFNiLCJcclxuIil9fSk6e25hbWU6Yi5uYW1lLHZhbHVlOmMucmVwbGFjZShTYiwiXHJcbiIpfX0pLmdldCgpfX0pLG0uYWpheFNldHRpbmdzLnhocj12b2lkIDAhPT1hLkFjdGl2ZVhPYmplY3Q/ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0xvY2FsJiYvXihnZXR8cG9zdHxoZWFkfHB1dHxkZWxldGV8b3B0aW9ucykkL2kudGVzdCh0aGlzLnR5cGUpJiZaYigpfHwkYigpfTpaYjt2YXIgV2I9MCxYYj17fSxZYj1tLmFqYXhTZXR0aW5ncy54aHIoKTthLmF0dGFjaEV2ZW50JiZhLmF0dGFjaEV2ZW50KCJvbnVubG9hZCIsZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gWGIpWGJbYV0odm9pZCAwLCEwKX0pLGsuY29ycz0hIVliJiYid2l0aENyZWRlbnRpYWxzImluIFliLFliPWsuYWpheD0hIVliLFliJiZtLmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24oYSl7aWYoIWEuY3Jvc3NEb21haW58fGsuY29ycyl7dmFyIGI7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEueGhyKCksZz0rK1diO2lmKGYub3BlbihhLnR5cGUsYS51cmwsYS5hc3luYyxhLnVzZXJuYW1lLGEucGFzc3dvcmQpLGEueGhyRmllbGRzKWZvcihlIGluIGEueGhyRmllbGRzKWZbZV09YS54aHJGaWVsZHNbZV07YS5taW1lVHlwZSYmZi5vdmVycmlkZU1pbWVUeXBlJiZmLm92ZXJyaWRlTWltZVR5cGUoYS5taW1lVHlwZSksYS5jcm9zc0RvbWFpbnx8Y1siWC1SZXF1ZXN0ZWQtV2l0aCJdfHwoY1siWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRwUmVxdWVzdCIpO2ZvcihlIGluIGMpdm9pZCAwIT09Y1tlXSYmZi5zZXRSZXF1ZXN0SGVhZGVyKGUsY1tlXSsiIik7Zi5zZW5kKGEuaGFzQ29udGVudCYmYS5kYXRhfHxudWxsKSxiPWZ1bmN0aW9uKGMsZSl7dmFyIGgsaSxqO2lmKGImJihlfHw0PT09Zi5yZWFkeVN0YXRlKSlpZihkZWxldGUgWGJbZ10sYj12b2lkIDAsZi5vbnJlYWR5c3RhdGVjaGFuZ2U9bS5ub29wLGUpNCE9PWYucmVhZHlTdGF0ZSYmZi5hYm9ydCgpO2Vsc2V7aj17fSxoPWYuc3RhdHVzLCJzdHJpbmciPT10eXBlb2YgZi5yZXNwb25zZVRleHQmJihqLnRleHQ9Zi5yZXNwb25zZVRleHQpO3RyeXtpPWYuc3RhdHVzVGV4dH1jYXRjaChrKXtpPSIifWh8fCFhLmlzTG9jYWx8fGEuY3Jvc3NEb21haW4/MTIyMz09PWgmJihoPTIwNCk6aD1qLnRleHQ/MjAwOjQwNH1qJiZkKGgsaSxqLGYuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpfSxhLmFzeW5jPzQ9PT1mLnJlYWR5U3RhdGU/c2V0VGltZW91dChiKTpmLm9ucmVhZHlzdGF0ZWNoYW5nZT1YYltnXT1iOmIoKX0sYWJvcnQ6ZnVuY3Rpb24oKXtiJiZiKHZvaWQgMCwhMCl9fX19KTtmdW5jdGlvbiBaYigpe3RyeXtyZXR1cm4gbmV3IGEuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goYil7fX1mdW5jdGlvbiAkYigpe3RyeXtyZXR1cm4gbmV3IGEuQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKX1jYXRjaChiKXt9fW0uYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovKD86amF2YXxlY21hKXNjcmlwdC99LGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oYSl7cmV0dXJuIG0uZ2xvYmFsRXZhbChhKSxhfX19KSxtLmFqYXhQcmVmaWx0ZXIoInNjcmlwdCIsZnVuY3Rpb24oYSl7dm9pZCAwPT09YS5jYWNoZSYmKGEuY2FjaGU9ITEpLGEuY3Jvc3NEb21haW4mJihhLnR5cGU9IkdFVCIsYS5nbG9iYWw9ITEpfSksbS5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2lmKGEuY3Jvc3NEb21haW4pe3ZhciBiLGM9eS5oZWFkfHxtKCJoZWFkIilbMF18fHkuZG9jdW1lbnRFbGVtZW50O3JldHVybntzZW5kOmZ1bmN0aW9uKGQsZSl7Yj15LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGIuYXN5bmM9ITAsYS5zY3JpcHRDaGFyc2V0JiYoYi5jaGFyc2V0PWEuc2NyaXB0Q2hhcnNldCksYi5zcmM9YS51cmwsYi5vbmxvYWQ9Yi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oYSxjKXsoY3x8IWIucmVhZHlTdGF0ZXx8L2xvYWRlZHxjb21wbGV0ZS8udGVzdChiLnJlYWR5U3RhdGUpKSYmKGIub25sb2FkPWIub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYiksYj1udWxsLGN8fGUoMjAwLCJzdWNjZXNzIikpfSxjLmluc2VydEJlZm9yZShiLGMuZmlyc3RDaGlsZCl9LGFib3J0OmZ1bmN0aW9uKCl7YiYmYi5vbmxvYWQodm9pZCAwLCEwKX19fX0pO3ZhciBfYj1bXSxhYz0vKD0pXD8oPz0mfCQpfFw/XD8vO20uYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgYT1fYi5wb3AoKXx8bS5leHBhbmRvKyJfIit2YisrO3JldHVybiB0aGlzW2FdPSEwLGF9fSksbS5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihiLGMsZCl7dmFyIGUsZixnLGg9Yi5qc29ucCE9PSExJiYoYWMudGVzdChiLnVybCk/InVybCI6InN0cmluZyI9PXR5cGVvZiBiLmRhdGEmJiEoYi5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZhYy50ZXN0KGIuZGF0YSkmJiJkYXRhIik7cmV0dXJuIGh8fCJqc29ucCI9PT1iLmRhdGFUeXBlc1swXT8oZT1iLmpzb25wQ2FsbGJhY2s9bS5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/Yi5qc29ucENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGg/YltoXT1iW2hdLnJlcGxhY2UoYWMsIiQxIitlKTpiLmpzb25wIT09ITEmJihiLnVybCs9KHdiLnRlc3QoYi51cmwpPyImIjoiPyIpK2IuanNvbnArIj0iK2UpLGIuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiBnfHxtLmVycm9yKGUrIiB3YXMgbm90IGNhbGxlZCIpLGdbMF19LGIuZGF0YVR5cGVzWzBdPSJqc29uIixmPWFbZV0sYVtlXT1mdW5jdGlvbigpe2c9YXJndW1lbnRzfSxkLmFsd2F5cyhmdW5jdGlvbigpe2FbZV09ZixiW2VdJiYoYi5qc29ucENhbGxiYWNrPWMuanNvbnBDYWxsYmFjayxfYi5wdXNoKGUpKSxnJiZtLmlzRnVuY3Rpb24oZikmJmYoZ1swXSksZz1mPXZvaWQgMH0pLCJzY3JpcHQiKTp2b2lkIDB9KSxtLnBhcnNlSFRNTD1mdW5jdGlvbihhLGIsYyl7aWYoIWF8fCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gbnVsbDsiYm9vbGVhbiI9PXR5cGVvZiBiJiYoYz1iLGI9ITEpLGI9Ynx8eTt2YXIgZD11LmV4ZWMoYSksZT0hYyYmW107cmV0dXJuIGQ/W2IuY3JlYXRlRWxlbWVudChkWzFdKV06KGQ9bS5idWlsZEZyYWdtZW50KFthXSxiLGUpLGUmJmUubGVuZ3RoJiZtKGUpLnJlbW92ZSgpLG0ubWVyZ2UoW10sZC5jaGlsZE5vZGVzKSl9O3ZhciBiYz1tLmZuLmxvYWQ7bS5mbi5sb2FkPWZ1bmN0aW9uKGEsYixjKXtpZigic3RyaW5nIiE9dHlwZW9mIGEmJmJjKXJldHVybiBiYy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGQsZSxmLGc9dGhpcyxoPWEuaW5kZXhPZigiICIpO3JldHVybiBoPj0wJiYoZD1tLnRyaW0oYS5zbGljZShoLGEubGVuZ3RoKSksYT1hLnNsaWNlKDAsaCkpLG0uaXNGdW5jdGlvbihiKT8oYz1iLGI9dm9pZCAwKTpiJiYib2JqZWN0Ij09dHlwZW9mIGImJihmPSJQT1NUIiksZy5sZW5ndGg+MCYmbS5hamF4KHt1cmw6YSx0eXBlOmYsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Yn0pLmRvbmUoZnVuY3Rpb24oYSl7ZT1hcmd1bWVudHMsZy5odG1sKGQ/bSgiPGRpdj4iKS5hcHBlbmQobS5wYXJzZUhUTUwoYSkpLmZpbmQoZCk6YSl9KS5jb21wbGV0ZShjJiZmdW5jdGlvbihhLGIpe2cuZWFjaChjLGV8fFthLnJlc3BvbnNlVGV4dCxiLGFdKX0pLHRoaXN9LG0uZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGEsYil7bS5mbltiXT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5vbihiLGEpfX0pLG0uZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKGEpe3JldHVybiBtLmdyZXAobS50aW1lcnMsZnVuY3Rpb24oYil7cmV0dXJuIGE9PT1iLmVsZW19KS5sZW5ndGh9O3ZhciBjYz1hLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtmdW5jdGlvbiBkYyhhKXtyZXR1cm4gbS5pc1dpbmRvdyhhKT9hOjk9PT1hLm5vZGVUeXBlP2EuZGVmYXVsdFZpZXd8fGEucGFyZW50V2luZG93OiExfW0ub2Zmc2V0PXtzZXRPZmZzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGs9bS5jc3MoYSwicG9zaXRpb24iKSxsPW0oYSksbj17fTsic3RhdGljIj09PWsmJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLGg9bC5vZmZzZXQoKSxmPW0uY3NzKGEsInRvcCIpLGk9bS5jc3MoYSwibGVmdCIpLGo9KCJhYnNvbHV0ZSI9PT1rfHwiZml4ZWQiPT09aykmJm0uaW5BcnJheSgiYXV0byIsW2YsaV0pPi0xLGo/KGQ9bC5wb3NpdGlvbigpLGc9ZC50b3AsZT1kLmxlZnQpOihnPXBhcnNlRmxvYXQoZil8fDAsZT1wYXJzZUZsb2F0KGkpfHwwKSxtLmlzRnVuY3Rpb24oYikmJihiPWIuY2FsbChhLGMsaCkpLG51bGwhPWIudG9wJiYobi50b3A9Yi50b3AtaC50b3ArZyksbnVsbCE9Yi5sZWZ0JiYobi5sZWZ0PWIubGVmdC1oLmxlZnQrZSksInVzaW5nImluIGI/Yi51c2luZy5jYWxsKGEsbik6bC5jc3Mobil9fSxtLmZuLmV4dGVuZCh7b2Zmc2V0OmZ1bmN0aW9uKGEpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZvaWQgMD09PWE/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oYil7bS5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsYSxiKX0pO3ZhciBiLGMsZD17dG9wOjAsbGVmdDowfSxlPXRoaXNbMF0sZj1lJiZlLm93bmVyRG9jdW1lbnQ7aWYoZilyZXR1cm4gYj1mLmRvY3VtZW50RWxlbWVudCxtLmNvbnRhaW5zKGIsZSk/KHR5cGVvZiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCE9PUsmJihkPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLGM9ZGMoZikse3RvcDpkLnRvcCsoYy5wYWdlWU9mZnNldHx8Yi5zY3JvbGxUb3ApLShiLmNsaWVudFRvcHx8MCksbGVmdDpkLmxlZnQrKGMucGFnZVhPZmZzZXR8fGIuc2Nyb2xsTGVmdCktKGIuY2xpZW50TGVmdHx8MCl9KTpkfSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciBhLGIsYz17dG9wOjAsbGVmdDowfSxkPXRoaXNbMF07cmV0dXJuImZpeGVkIj09PW0uY3NzKGQsInBvc2l0aW9uIik/Yj1kLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOihhPXRoaXMub2Zmc2V0UGFyZW50KCksYj10aGlzLm9mZnNldCgpLG0ubm9kZU5hbWUoYVswXSwiaHRtbCIpfHwoYz1hLm9mZnNldCgpKSxjLnRvcCs9bS5jc3MoYVswXSwiYm9yZGVyVG9wV2lkdGgiLCEwKSxjLmxlZnQrPW0uY3NzKGFbMF0sImJvcmRlckxlZnRXaWR0aCIsITApKSx7dG9wOmIudG9wLWMudG9wLW0uY3NzKGQsIm1hcmdpblRvcCIsITApLGxlZnQ6Yi5sZWZ0LWMubGVmdC1tLmNzcyhkLCJtYXJnaW5MZWZ0IiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXRQYXJlbnR8fGNjO3doaWxlKGEmJiFtLm5vZGVOYW1lKGEsImh0bWwiKSYmInN0YXRpYyI9PT1tLmNzcyhhLCJwb3NpdGlvbiIpKWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF8fGNjfSl9fSksbS5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGM9L1kvLnRlc3QoYik7bS5mblthXT1mdW5jdGlvbihkKXtyZXR1cm4gVih0aGlzLGZ1bmN0aW9uKGEsZCxlKXt2YXIgZj1kYyhhKTtyZXR1cm4gdm9pZCAwPT09ZT9mP2IgaW4gZj9mW2JdOmYuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W2RdOmFbZF06dm9pZChmP2Yuc2Nyb2xsVG8oYz9tKGYpLnNjcm9sbExlZnQoKTplLGM/ZTptKGYpLnNjcm9sbFRvcCgpKTphW2RdPWUpfSxhLGQsYXJndW1lbnRzLmxlbmd0aCxudWxsKX19KSxtLmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oYSxiKXttLmNzc0hvb2tzW2JdPUxhKGsucGl4ZWxQb3NpdGlvbixmdW5jdGlvbihhLGMpe3JldHVybiBjPyhjPUphKGEsYiksSGEudGVzdChjKT9tKGEpLnBvc2l0aW9uKClbYl0rInB4IjpjKTp2b2lkIDB9KX0pLG0uZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGEsYil7bS5lYWNoKHtwYWRkaW5nOiJpbm5lciIrYSxjb250ZW50OmIsIiI6Im91dGVyIithfSxmdW5jdGlvbihjLGQpe20uZm5bZF09ZnVuY3Rpb24oZCxlKXt2YXIgZj1hcmd1bWVudHMubGVuZ3RoJiYoY3x8ImJvb2xlYW4iIT10eXBlb2YgZCksZz1jfHwoZD09PSEwfHxlPT09ITA/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiBWKHRoaXMsZnVuY3Rpb24oYixjLGQpe3ZhciBlO3JldHVybiBtLmlzV2luZG93KGIpP2IuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2FdOjk9PT1iLm5vZGVUeXBlPyhlPWIuZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KGIuYm9keVsic2Nyb2xsIithXSxlWyJzY3JvbGwiK2FdLGIuYm9keVsib2Zmc2V0IithXSxlWyJvZmZzZXQiK2FdLGVbImNsaWVudCIrYV0pKTp2b2lkIDA9PT1kP20uY3NzKGIsYyxnKTptLnN0eWxlKGIsYyxkLGcpfSxiLGY/ZDp2b2lkIDAsZixudWxsKX19KX0pLG0uZm4uc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sbS5mbi5hbmRTZWxmPW0uZm4uYWRkQmFjaywiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gbX0pO3ZhciBlYz1hLmpRdWVyeSxmYz1hLiQ7cmV0dXJuIG0ubm9Db25mbGljdD1mdW5jdGlvbihiKXtyZXR1cm4gYS4kPT09bSYmKGEuJD1mYyksYiYmYS5qUXVlcnk9PT1tJiYoYS5qUXVlcnk9ZWMpLG19LHR5cGVvZiBiPT09SyYmKGEualF1ZXJ5PWEuJD1tKSxtfSk7CgovKiEKICogQm9vdHN0cmFwIHYzLjMuNSAoaHR0cDovL2dldGJvb3RzdHJhcC5jb20pCiAqIENvcHlyaWdodCAyMDExLTIwMTUgVHdpdHRlciwgSW5jLgogKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKICovCmlmKCJ1bmRlZmluZWQiPT10eXBlb2YgalF1ZXJ5KXRocm93IG5ldyBFcnJvcigiQm9vdHN0cmFwJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBqUXVlcnkiKTsrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO3ZhciBiPWEuZm4uanF1ZXJ5LnNwbGl0KCIgIilbMF0uc3BsaXQoIi4iKTtpZihiWzBdPDImJmJbMV08OXx8MT09YlswXSYmOT09YlsxXSYmYlsyXTwxKXRocm93IG5ldyBFcnJvcigiQm9vdHN0cmFwJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBqUXVlcnkgdmVyc2lvbiAxLjkuMSBvciBoaWdoZXIiKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib290c3RyYXAiKSxiPXtXZWJraXRUcmFuc2l0aW9uOiJ3ZWJraXRUcmFuc2l0aW9uRW5kIixNb3pUcmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIixPVHJhbnNpdGlvbjoib1RyYW5zaXRpb25FbmQgb3RyYW5zaXRpb25lbmQiLHRyYW5zaXRpb246InRyYW5zaXRpb25lbmQifTtmb3IodmFyIGMgaW4gYilpZih2b2lkIDAhPT1hLnN0eWxlW2NdKXJldHVybntlbmQ6YltjXX07cmV0dXJuITF9YS5mbi5lbXVsYXRlVHJhbnNpdGlvbkVuZD1mdW5jdGlvbihiKXt2YXIgYz0hMSxkPXRoaXM7YSh0aGlzKS5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZnVuY3Rpb24oKXtjPSEwfSk7dmFyIGU9ZnVuY3Rpb24oKXtjfHxhKGQpLnRyaWdnZXIoYS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKX07cmV0dXJuIHNldFRpbWVvdXQoZSxiKSx0aGlzfSxhKGZ1bmN0aW9uKCl7YS5zdXBwb3J0LnRyYW5zaXRpb249YigpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiYoYS5ldmVudC5zcGVjaWFsLmJzVHJhbnNpdGlvbkVuZD17YmluZFR5cGU6YS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGRlbGVnYXRlVHlwZTphLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsaGFuZGxlOmZ1bmN0aW9uKGIpe3JldHVybiBhKGIudGFyZ2V0KS5pcyh0aGlzKT9iLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp2b2lkIDB9fSl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZT1jLmRhdGEoImJzLmFsZXJ0Iik7ZXx8Yy5kYXRhKCJicy5hbGVydCIsZT1uZXcgZCh0aGlzKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdLmNhbGwoYyl9KX12YXIgYz0nW2RhdGEtZGlzbWlzcz0iYWxlcnQiXScsZD1mdW5jdGlvbihiKXthKGIpLm9uKCJjbGljayIsYyx0aGlzLmNsb3NlKX07ZC5WRVJTSU9OPSIzLjMuNSIsZC5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxkLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbihiKXtmdW5jdGlvbiBjKCl7Zy5kZXRhY2goKS50cmlnZ2VyKCJjbG9zZWQuYnMuYWxlcnQiKS5yZW1vdmUoKX12YXIgZT1hKHRoaXMpLGY9ZS5hdHRyKCJkYXRhLXRhcmdldCIpO2Z8fChmPWUuYXR0cigiaHJlZiIpLGY9ZiYmZi5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sIiIpKTt2YXIgZz1hKGYpO2ImJmIucHJldmVudERlZmF1bHQoKSxnLmxlbmd0aHx8KGc9ZS5jbG9zZXN0KCIuYWxlcnQiKSksZy50cmlnZ2VyKGI9YS5FdmVudCgiY2xvc2UuYnMuYWxlcnQiKSksYi5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KGcucmVtb3ZlQ2xhc3MoImluIiksYS5zdXBwb3J0LnRyYW5zaXRpb24mJmcuaGFzQ2xhc3MoImZhZGUiKT9nLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixjKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChkLlRSQU5TSVRJT05fRFVSQVRJT04pOmMoKSl9O3ZhciBlPWEuZm4uYWxlcnQ7YS5mbi5hbGVydD1iLGEuZm4uYWxlcnQuQ29uc3RydWN0b3I9ZCxhLmZuLmFsZXJ0Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5hbGVydD1lLHRoaXN9LGEoZG9jdW1lbnQpLm9uKCJjbGljay5icy5hbGVydC5kYXRhLWFwaSIsYyxkLnByb3RvdHlwZS5jbG9zZSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJicy5idXR0b24iKSxmPSJvYmplY3QiPT10eXBlb2YgYiYmYjtlfHxkLmRhdGEoImJzLmJ1dHRvbiIsZT1uZXcgYyh0aGlzLGYpKSwidG9nZ2xlIj09Yj9lLnRvZ2dsZSgpOmImJmUuc2V0U3RhdGUoYil9KX12YXIgYz1mdW5jdGlvbihiLGQpe3RoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLm9wdGlvbnM9YS5leHRlbmQoe30sYy5ERUZBVUxUUyxkKSx0aGlzLmlzTG9hZGluZz0hMX07Yy5WRVJTSU9OPSIzLjMuNSIsYy5ERUZBVUxUUz17bG9hZGluZ1RleHQ6ImxvYWRpbmcuLi4ifSxjLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihiKXt2YXIgYz0iZGlzYWJsZWQiLGQ9dGhpcy4kZWxlbWVudCxlPWQuaXMoImlucHV0Iik/InZhbCI6Imh0bWwiLGY9ZC5kYXRhKCk7Yis9IlRleHQiLG51bGw9PWYucmVzZXRUZXh0JiZkLmRhdGEoInJlc2V0VGV4dCIsZFtlXSgpKSxzZXRUaW1lb3V0KGEucHJveHkoZnVuY3Rpb24oKXtkW2VdKG51bGw9PWZbYl0/dGhpcy5vcHRpb25zW2JdOmZbYl0pLCJsb2FkaW5nVGV4dCI9PWI/KHRoaXMuaXNMb2FkaW5nPSEwLGQuYWRkQ2xhc3MoYykuYXR0cihjLGMpKTp0aGlzLmlzTG9hZGluZyYmKHRoaXMuaXNMb2FkaW5nPSExLGQucmVtb3ZlQ2xhc3MoYykucmVtb3ZlQXR0cihjKSl9LHRoaXMpLDApfSxjLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt2YXIgYT0hMCxiPXRoaXMuJGVsZW1lbnQuY2xvc2VzdCgnW2RhdGEtdG9nZ2xlPSJidXR0b25zIl0nKTtpZihiLmxlbmd0aCl7dmFyIGM9dGhpcy4kZWxlbWVudC5maW5kKCJpbnB1dCIpOyJyYWRpbyI9PWMucHJvcCgidHlwZSIpPyhjLnByb3AoImNoZWNrZWQiKSYmKGE9ITEpLGIuZmluZCgiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSx0aGlzLiRlbGVtZW50LmFkZENsYXNzKCJhY3RpdmUiKSk6ImNoZWNrYm94Ij09Yy5wcm9wKCJ0eXBlIikmJihjLnByb3AoImNoZWNrZWQiKSE9PXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImFjdGl2ZSIpJiYoYT0hMSksdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcygiYWN0aXZlIikpLGMucHJvcCgiY2hlY2tlZCIsdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiYWN0aXZlIikpLGEmJmMudHJpZ2dlcigiY2hhbmdlIil9ZWxzZSB0aGlzLiRlbGVtZW50LmF0dHIoImFyaWEtcHJlc3NlZCIsIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImFjdGl2ZSIpKSx0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKCJhY3RpdmUiKX07dmFyIGQ9YS5mbi5idXR0b247YS5mbi5idXR0b249YixhLmZuLmJ1dHRvbi5Db25zdHJ1Y3Rvcj1jLGEuZm4uYnV0dG9uLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5idXR0b249ZCx0aGlzfSxhKGRvY3VtZW50KS5vbigiY2xpY2suYnMuYnV0dG9uLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlXj0iYnV0dG9uIl0nLGZ1bmN0aW9uKGMpe3ZhciBkPWEoYy50YXJnZXQpO2QuaGFzQ2xhc3MoImJ0biIpfHwoZD1kLmNsb3Nlc3QoIi5idG4iKSksYi5jYWxsKGQsInRvZ2dsZSIpLGEoYy50YXJnZXQpLmlzKCdpbnB1dFt0eXBlPSJyYWRpbyJdJyl8fGEoYy50YXJnZXQpLmlzKCdpbnB1dFt0eXBlPSJjaGVja2JveCJdJyl8fGMucHJldmVudERlZmF1bHQoKX0pLm9uKCJmb2N1cy5icy5idXR0b24uZGF0YS1hcGkgYmx1ci5icy5idXR0b24uZGF0YS1hcGkiLCdbZGF0YS10b2dnbGVePSJidXR0b24iXScsZnVuY3Rpb24oYil7YShiLnRhcmdldCkuY2xvc2VzdCgiLmJ0biIpLnRvZ2dsZUNsYXNzKCJmb2N1cyIsL15mb2N1cyhpbik/JC8udGVzdChiLnR5cGUpKX0pfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgiYnMuY2Fyb3VzZWwiKSxmPWEuZXh0ZW5kKHt9LGMuREVGQVVMVFMsZC5kYXRhKCksIm9iamVjdCI9PXR5cGVvZiBiJiZiKSxnPSJzdHJpbmciPT10eXBlb2YgYj9iOmYuc2xpZGU7ZXx8ZC5kYXRhKCJicy5jYXJvdXNlbCIsZT1uZXcgYyh0aGlzLGYpKSwibnVtYmVyIj09dHlwZW9mIGI/ZS50byhiKTpnP2VbZ10oKTpmLmludGVydmFsJiZlLnBhdXNlKCkuY3ljbGUoKX0pfXZhciBjPWZ1bmN0aW9uKGIsYyl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMuJGluZGljYXRvcnM9dGhpcy4kZWxlbWVudC5maW5kKCIuY2Fyb3VzZWwtaW5kaWNhdG9ycyIpLHRoaXMub3B0aW9ucz1jLHRoaXMucGF1c2VkPW51bGwsdGhpcy5zbGlkaW5nPW51bGwsdGhpcy5pbnRlcnZhbD1udWxsLHRoaXMuJGFjdGl2ZT1udWxsLHRoaXMuJGl0ZW1zPW51bGwsdGhpcy5vcHRpb25zLmtleWJvYXJkJiZ0aGlzLiRlbGVtZW50Lm9uKCJrZXlkb3duLmJzLmNhcm91c2VsIixhLnByb3h5KHRoaXMua2V5ZG93bix0aGlzKSksImhvdmVyIj09dGhpcy5vcHRpb25zLnBhdXNlJiYhKCJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSYmdGhpcy4kZWxlbWVudC5vbigibW91c2VlbnRlci5icy5jYXJvdXNlbCIsYS5wcm94eSh0aGlzLnBhdXNlLHRoaXMpKS5vbigibW91c2VsZWF2ZS5icy5jYXJvdXNlbCIsYS5wcm94eSh0aGlzLmN5Y2xlLHRoaXMpKX07Yy5WRVJTSU9OPSIzLjMuNSIsYy5UUkFOU0lUSU9OX0RVUkFUSU9OPTYwMCxjLkRFRkFVTFRTPXtpbnRlcnZhbDo1ZTMscGF1c2U6ImhvdmVyIix3cmFwOiEwLGtleWJvYXJkOiEwfSxjLnByb3RvdHlwZS5rZXlkb3duPWZ1bmN0aW9uKGEpe2lmKCEvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGEudGFyZ2V0LnRhZ05hbWUpKXtzd2l0Y2goYS53aGljaCl7Y2FzZSAzNzp0aGlzLnByZXYoKTticmVhaztjYXNlIDM5OnRoaXMubmV4dCgpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufWEucHJldmVudERlZmF1bHQoKX19LGMucHJvdG90eXBlLmN5Y2xlPWZ1bmN0aW9uKGIpe3JldHVybiBifHwodGhpcy5wYXVzZWQ9ITEpLHRoaXMuaW50ZXJ2YWwmJmNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCksdGhpcy5vcHRpb25zLmludGVydmFsJiYhdGhpcy5wYXVzZWQmJih0aGlzLmludGVydmFsPXNldEludGVydmFsKGEucHJveHkodGhpcy5uZXh0LHRoaXMpLHRoaXMub3B0aW9ucy5pbnRlcnZhbCkpLHRoaXN9LGMucHJvdG90eXBlLmdldEl0ZW1JbmRleD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy4kaXRlbXM9YS5wYXJlbnQoKS5jaGlsZHJlbigiLml0ZW0iKSx0aGlzLiRpdGVtcy5pbmRleChhfHx0aGlzLiRhY3RpdmUpfSxjLnByb3RvdHlwZS5nZXRJdGVtRm9yRGlyZWN0aW9uPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5nZXRJdGVtSW5kZXgoYiksZD0icHJldiI9PWEmJjA9PT1jfHwibmV4dCI9PWEmJmM9PXRoaXMuJGl0ZW1zLmxlbmd0aC0xO2lmKGQmJiF0aGlzLm9wdGlvbnMud3JhcClyZXR1cm4gYjt2YXIgZT0icHJldiI9PWE/LTE6MSxmPShjK2UpJXRoaXMuJGl0ZW1zLmxlbmd0aDtyZXR1cm4gdGhpcy4kaXRlbXMuZXEoZil9LGMucHJvdG90eXBlLnRvPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz10aGlzLmdldEl0ZW1JbmRleCh0aGlzLiRhY3RpdmU9dGhpcy4kZWxlbWVudC5maW5kKCIuaXRlbS5hY3RpdmUiKSk7cmV0dXJuIGE+dGhpcy4kaXRlbXMubGVuZ3RoLTF8fDA+YT92b2lkIDA6dGhpcy5zbGlkaW5nP3RoaXMuJGVsZW1lbnQub25lKCJzbGlkLmJzLmNhcm91c2VsIixmdW5jdGlvbigpe2IudG8oYSl9KTpjPT1hP3RoaXMucGF1c2UoKS5jeWNsZSgpOnRoaXMuc2xpZGUoYT5jPyJuZXh0IjoicHJldiIsdGhpcy4kaXRlbXMuZXEoYSkpfSxjLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbihiKXtyZXR1cm4gYnx8KHRoaXMucGF1c2VkPSEwKSx0aGlzLiRlbGVtZW50LmZpbmQoIi5uZXh0LCAucHJldiIpLmxlbmd0aCYmYS5zdXBwb3J0LnRyYW5zaXRpb24mJih0aGlzLiRlbGVtZW50LnRyaWdnZXIoYS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKSx0aGlzLmN5Y2xlKCEwKSksdGhpcy5pbnRlcnZhbD1jbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXN9LGMucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbGlkaW5nP3ZvaWQgMDp0aGlzLnNsaWRlKCJuZXh0Iil9LGMucHJvdG90eXBlLnByZXY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbGlkaW5nP3ZvaWQgMDp0aGlzLnNsaWRlKCJwcmV2Iil9LGMucHJvdG90eXBlLnNsaWRlPWZ1bmN0aW9uKGIsZCl7dmFyIGU9dGhpcy4kZWxlbWVudC5maW5kKCIuaXRlbS5hY3RpdmUiKSxmPWR8fHRoaXMuZ2V0SXRlbUZvckRpcmVjdGlvbihiLGUpLGc9dGhpcy5pbnRlcnZhbCxoPSJuZXh0Ij09Yj8ibGVmdCI6InJpZ2h0IixpPXRoaXM7aWYoZi5oYXNDbGFzcygiYWN0aXZlIikpcmV0dXJuIHRoaXMuc2xpZGluZz0hMTt2YXIgaj1mWzBdLGs9YS5FdmVudCgic2xpZGUuYnMuY2Fyb3VzZWwiLHtyZWxhdGVkVGFyZ2V0OmosZGlyZWN0aW9uOmh9KTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoayksIWsuaXNEZWZhdWx0UHJldmVudGVkKCkpe2lmKHRoaXMuc2xpZGluZz0hMCxnJiZ0aGlzLnBhdXNlKCksdGhpcy4kaW5kaWNhdG9ycy5sZW5ndGgpe3RoaXMuJGluZGljYXRvcnMuZmluZCgiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTt2YXIgbD1hKHRoaXMuJGluZGljYXRvcnMuY2hpbGRyZW4oKVt0aGlzLmdldEl0ZW1JbmRleChmKV0pO2wmJmwuYWRkQ2xhc3MoImFjdGl2ZSIpfXZhciBtPWEuRXZlbnQoInNsaWQuYnMuY2Fyb3VzZWwiLHtyZWxhdGVkVGFyZ2V0OmosZGlyZWN0aW9uOmh9KTtyZXR1cm4gYS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoInNsaWRlIik/KGYuYWRkQ2xhc3MoYiksZlswXS5vZmZzZXRXaWR0aCxlLmFkZENsYXNzKGgpLGYuYWRkQ2xhc3MoaCksZS5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZnVuY3Rpb24oKXtmLnJlbW92ZUNsYXNzKFtiLGhdLmpvaW4oIiAiKSkuYWRkQ2xhc3MoImFjdGl2ZSIpLGUucmVtb3ZlQ2xhc3MoWyJhY3RpdmUiLGhdLmpvaW4oIiAiKSksaS5zbGlkaW5nPSExLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLiRlbGVtZW50LnRyaWdnZXIobSl9LDApfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKSk6KGUucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLGYuYWRkQ2xhc3MoImFjdGl2ZSIpLHRoaXMuc2xpZGluZz0hMSx0aGlzLiRlbGVtZW50LnRyaWdnZXIobSkpLGcmJnRoaXMuY3ljbGUoKSx0aGlzfX07dmFyIGQ9YS5mbi5jYXJvdXNlbDthLmZuLmNhcm91c2VsPWIsYS5mbi5jYXJvdXNlbC5Db25zdHJ1Y3Rvcj1jLGEuZm4uY2Fyb3VzZWwubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmNhcm91c2VsPWQsdGhpc307dmFyIGU9ZnVuY3Rpb24oYyl7dmFyIGQsZT1hKHRoaXMpLGY9YShlLmF0dHIoImRhdGEtdGFyZ2V0Iil8fChkPWUuYXR0cigiaHJlZiIpKSYmZC5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpKTtpZihmLmhhc0NsYXNzKCJjYXJvdXNlbCIpKXt2YXIgZz1hLmV4dGVuZCh7fSxmLmRhdGEoKSxlLmRhdGEoKSksaD1lLmF0dHIoImRhdGEtc2xpZGUtdG8iKTtoJiYoZy5pbnRlcnZhbD0hMSksYi5jYWxsKGYsZyksaCYmZi5kYXRhKCJicy5jYXJvdXNlbCIpLnRvKGgpLGMucHJldmVudERlZmF1bHQoKX19O2EoZG9jdW1lbnQpLm9uKCJjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaSIsIltkYXRhLXNsaWRlXSIsZSkub24oImNsaWNrLmJzLmNhcm91c2VsLmRhdGEtYXBpIiwiW2RhdGEtc2xpZGUtdG9dIixlKSxhKHdpbmRvdykub24oImxvYWQiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtcmlkZT0iY2Fyb3VzZWwiXScpLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpO2IuY2FsbChjLGMuZGF0YSgpKX0pfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3ZhciBjLGQ9Yi5hdHRyKCJkYXRhLXRhcmdldCIpfHwoYz1iLmF0dHIoImhyZWYiKSkmJmMucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCIiKTtyZXR1cm4gYShkKX1mdW5jdGlvbiBjKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGU9Yy5kYXRhKCJicy5jb2xsYXBzZSIpLGY9YS5leHRlbmQoe30sZC5ERUZBVUxUUyxjLmRhdGEoKSwib2JqZWN0Ij09dHlwZW9mIGImJmIpOyFlJiZmLnRvZ2dsZSYmL3Nob3d8aGlkZS8udGVzdChiKSYmKGYudG9nZ2xlPSExKSxlfHxjLmRhdGEoImJzLmNvbGxhcHNlIixlPW5ldyBkKHRoaXMsZikpLCJzdHJpbmciPT10eXBlb2YgYiYmZVtiXSgpfSl9dmFyIGQ9ZnVuY3Rpb24oYixjKXt0aGlzLiRlbGVtZW50PWEoYiksdGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LGQuREVGQVVMVFMsYyksdGhpcy4kdHJpZ2dlcj1hKCdbZGF0YS10b2dnbGU9ImNvbGxhcHNlIl1baHJlZj0iIycrYi5pZCsnIl0sW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdW2RhdGEtdGFyZ2V0PSIjJytiLmlkKyciXScpLHRoaXMudHJhbnNpdGlvbmluZz1udWxsLHRoaXMub3B0aW9ucy5wYXJlbnQ/dGhpcy4kcGFyZW50PXRoaXMuZ2V0UGFyZW50KCk6dGhpcy5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy4kZWxlbWVudCx0aGlzLiR0cmlnZ2VyKSx0aGlzLm9wdGlvbnMudG9nZ2xlJiZ0aGlzLnRvZ2dsZSgpfTtkLlZFUlNJT049IjMuMy41IixkLlRSQU5TSVRJT05fRFVSQVRJT049MzUwLGQuREVGQVVMVFM9e3RvZ2dsZTohMH0sZC5wcm90b3R5cGUuZGltZW5zaW9uPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kZWxlbWVudC5oYXNDbGFzcygid2lkdGgiKTtyZXR1cm4gYT8id2lkdGgiOiJoZWlnaHQifSxkLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7aWYoIXRoaXMudHJhbnNpdGlvbmluZyYmIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIikpe3ZhciBiLGU9dGhpcy4kcGFyZW50JiZ0aGlzLiRwYXJlbnQuY2hpbGRyZW4oIi5wYW5lbCIpLmNoaWxkcmVuKCIuaW4sIC5jb2xsYXBzaW5nIik7aWYoIShlJiZlLmxlbmd0aCYmKGI9ZS5kYXRhKCJicy5jb2xsYXBzZSIpLGImJmIudHJhbnNpdGlvbmluZykpKXt2YXIgZj1hLkV2ZW50KCJzaG93LmJzLmNvbGxhcHNlIik7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGYpLCFmLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtlJiZlLmxlbmd0aCYmKGMuY2FsbChlLCJoaWRlIiksYnx8ZS5kYXRhKCJicy5jb2xsYXBzZSIsbnVsbCkpO3ZhciBnPXRoaXMuZGltZW5zaW9uKCk7dGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygiY29sbGFwc2UiKS5hZGRDbGFzcygiY29sbGFwc2luZyIpW2ddKDApLmF0dHIoImFyaWEtZXhwYW5kZWQiLCEwKSx0aGlzLiR0cmlnZ2VyLnJlbW92ZUNsYXNzKCJjb2xsYXBzZWQiKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCksdGhpcy50cmFuc2l0aW9uaW5nPTE7dmFyIGg9ZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJjb2xsYXBzaW5nIikuYWRkQ2xhc3MoImNvbGxhcHNlIGluIilbZ10oIiIpLHRoaXMudHJhbnNpdGlvbmluZz0wLHRoaXMuJGVsZW1lbnQudHJpZ2dlcigic2hvd24uYnMuY29sbGFwc2UiKX07aWYoIWEuc3VwcG9ydC50cmFuc2l0aW9uKXJldHVybiBoLmNhbGwodGhpcyk7dmFyIGk9YS5jYW1lbENhc2UoWyJzY3JvbGwiLGddLmpvaW4oIi0iKSk7dGhpcy4kZWxlbWVudC5vbmUoImJzVHJhbnNpdGlvbkVuZCIsYS5wcm94eShoLHRoaXMpKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChkLlRSQU5TSVRJT05fRFVSQVRJT04pW2ddKHRoaXMuJGVsZW1lbnRbMF1baV0pfX19fSxkLnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKCl7aWYoIXRoaXMudHJhbnNpdGlvbmluZyYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiaW4iKSl7dmFyIGI9YS5FdmVudCgiaGlkZS5icy5jb2xsYXBzZSIpO2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihiKSwhYi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIGM9dGhpcy5kaW1lbnNpb24oKTt0aGlzLiRlbGVtZW50W2NdKHRoaXMuJGVsZW1lbnRbY10oKSlbMF0ub2Zmc2V0SGVpZ2h0LHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoImNvbGxhcHNpbmciKS5yZW1vdmVDbGFzcygiY29sbGFwc2UgaW4iKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMSksdGhpcy4kdHJpZ2dlci5hZGRDbGFzcygiY29sbGFwc2VkIikuYXR0cigiYXJpYS1leHBhbmRlZCIsITEpLHRoaXMudHJhbnNpdGlvbmluZz0xO3ZhciBlPWZ1bmN0aW9uKCl7dGhpcy50cmFuc2l0aW9uaW5nPTAsdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygiY29sbGFwc2luZyIpLmFkZENsYXNzKCJjb2xsYXBzZSIpLnRyaWdnZXIoImhpZGRlbi5icy5jb2xsYXBzZSIpfTtyZXR1cm4gYS5zdXBwb3J0LnRyYW5zaXRpb24/dm9pZCB0aGlzLiRlbGVtZW50W2NdKDApLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixhLnByb3h5KGUsdGhpcykpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGQuVFJBTlNJVElPTl9EVVJBVElPTik6ZS5jYWxsKHRoaXMpfX19LGQucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3RoaXNbdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiaW4iKT8iaGlkZSI6InNob3ciXSgpfSxkLnByb3RvdHlwZS5nZXRQYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLm9wdGlvbnMucGFyZW50KS5maW5kKCdbZGF0YS10b2dnbGU9ImNvbGxhcHNlIl1bZGF0YS1wYXJlbnQ9IicrdGhpcy5vcHRpb25zLnBhcmVudCsnIl0nKS5lYWNoKGEucHJveHkoZnVuY3Rpb24oYyxkKXt2YXIgZT1hKGQpO3RoaXMuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKGIoZSksZSl9LHRoaXMpKS5lbmQoKX0sZC5wcm90b3R5cGUuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5oYXNDbGFzcygiaW4iKTthLmF0dHIoImFyaWEtZXhwYW5kZWQiLGMpLGIudG9nZ2xlQ2xhc3MoImNvbGxhcHNlZCIsIWMpLmF0dHIoImFyaWEtZXhwYW5kZWQiLGMpfTt2YXIgZT1hLmZuLmNvbGxhcHNlO2EuZm4uY29sbGFwc2U9YyxhLmZuLmNvbGxhcHNlLkNvbnN0cnVjdG9yPWQsYS5mbi5jb2xsYXBzZS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uY29sbGFwc2U9ZSx0aGlzfSxhKGRvY3VtZW50KS5vbigiY2xpY2suYnMuY29sbGFwc2UuZGF0YS1hcGkiLCdbZGF0YS10b2dnbGU9ImNvbGxhcHNlIl0nLGZ1bmN0aW9uKGQpe3ZhciBlPWEodGhpcyk7ZS5hdHRyKCJkYXRhLXRhcmdldCIpfHxkLnByZXZlbnREZWZhdWx0KCk7dmFyIGY9YihlKSxnPWYuZGF0YSgiYnMuY29sbGFwc2UiKSxoPWc/InRvZ2dsZSI6ZS5kYXRhKCk7Yy5jYWxsKGYsaCl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYil7dmFyIGM9Yi5hdHRyKCJkYXRhLXRhcmdldCIpO2N8fChjPWIuYXR0cigiaHJlZiIpLGM9YyYmLyNbQS1aYS16XS8udGVzdChjKSYmYy5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sIiIpKTt2YXIgZD1jJiZhKGMpO3JldHVybiBkJiZkLmxlbmd0aD9kOmIucGFyZW50KCl9ZnVuY3Rpb24gYyhjKXtjJiYzPT09Yy53aGljaHx8KGEoZSkucmVtb3ZlKCksYShmKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWIoZCksZj17cmVsYXRlZFRhcmdldDp0aGlzfTtlLmhhc0NsYXNzKCJvcGVuIikmJihjJiYiY2xpY2siPT1jLnR5cGUmJi9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoYy50YXJnZXQudGFnTmFtZSkmJmEuY29udGFpbnMoZVswXSxjLnRhcmdldCl8fChlLnRyaWdnZXIoYz1hLkV2ZW50KCJoaWRlLmJzLmRyb3Bkb3duIixmKSksYy5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KGQuYXR0cigiYXJpYS1leHBhbmRlZCIsImZhbHNlIiksZS5yZW1vdmVDbGFzcygib3BlbiIpLnRyaWdnZXIoImhpZGRlbi5icy5kcm9wZG93biIsZikpKSl9KSl9ZnVuY3Rpb24gZChiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxkPWMuZGF0YSgiYnMuZHJvcGRvd24iKTtkfHxjLmRhdGEoImJzLmRyb3Bkb3duIixkPW5ldyBnKHRoaXMpKSwic3RyaW5nIj09dHlwZW9mIGImJmRbYl0uY2FsbChjKX0pfXZhciBlPSIuZHJvcGRvd24tYmFja2Ryb3AiLGY9J1tkYXRhLXRvZ2dsZT0iZHJvcGRvd24iXScsZz1mdW5jdGlvbihiKXthKGIpLm9uKCJjbGljay5icy5kcm9wZG93biIsdGhpcy50b2dnbGUpfTtnLlZFUlNJT049IjMuMy41IixnLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oZCl7dmFyIGU9YSh0aGlzKTtpZighZS5pcygiLmRpc2FibGVkLCA6ZGlzYWJsZWQiKSl7dmFyIGY9YihlKSxnPWYuaGFzQ2xhc3MoIm9wZW4iKTtpZihjKCksIWcpeyJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiYhZi5jbG9zZXN0KCIubmF2YmFyLW5hdiIpLmxlbmd0aCYmYShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuYWRkQ2xhc3MoImRyb3Bkb3duLWJhY2tkcm9wIikuaW5zZXJ0QWZ0ZXIoYSh0aGlzKSkub24oImNsaWNrIixjKTt2YXIgaD17cmVsYXRlZFRhcmdldDp0aGlzfTtpZihmLnRyaWdnZXIoZD1hLkV2ZW50KCJzaG93LmJzLmRyb3Bkb3duIixoKSksZC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47ZS50cmlnZ2VyKCJmb2N1cyIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJ0cnVlIiksZi50b2dnbGVDbGFzcygib3BlbiIpLnRyaWdnZXIoInNob3duLmJzLmRyb3Bkb3duIixoKX1yZXR1cm4hMX19LGcucHJvdG90eXBlLmtleWRvd249ZnVuY3Rpb24oYyl7aWYoLygzOHw0MHwyN3wzMikvLnRlc3QoYy53aGljaCkmJiEvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGMudGFyZ2V0LnRhZ05hbWUpKXt2YXIgZD1hKHRoaXMpO2lmKGMucHJldmVudERlZmF1bHQoKSxjLnN0b3BQcm9wYWdhdGlvbigpLCFkLmlzKCIuZGlzYWJsZWQsIDpkaXNhYmxlZCIpKXt2YXIgZT1iKGQpLGc9ZS5oYXNDbGFzcygib3BlbiIpO2lmKCFnJiYyNyE9Yy53aGljaHx8ZyYmMjc9PWMud2hpY2gpcmV0dXJuIDI3PT1jLndoaWNoJiZlLmZpbmQoZikudHJpZ2dlcigiZm9jdXMiKSxkLnRyaWdnZXIoImNsaWNrIik7dmFyIGg9IiBsaTpub3QoLmRpc2FibGVkKTp2aXNpYmxlIGEiLGk9ZS5maW5kKCIuZHJvcGRvd24tbWVudSIraCk7aWYoaS5sZW5ndGgpe3ZhciBqPWkuaW5kZXgoYy50YXJnZXQpOzM4PT1jLndoaWNoJiZqPjAmJmotLSw0MD09Yy53aGljaCYmajxpLmxlbmd0aC0xJiZqKyssfmp8fChqPTApLGkuZXEoaikudHJpZ2dlcigiZm9jdXMiKX19fX07dmFyIGg9YS5mbi5kcm9wZG93bjthLmZuLmRyb3Bkb3duPWQsYS5mbi5kcm9wZG93bi5Db25zdHJ1Y3Rvcj1nLGEuZm4uZHJvcGRvd24ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmRyb3Bkb3duPWgsdGhpc30sYShkb2N1bWVudCkub24oImNsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpIixjKS5vbigiY2xpY2suYnMuZHJvcGRvd24uZGF0YS1hcGkiLCIuZHJvcGRvd24gZm9ybSIsZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKX0pLm9uKCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaSIsZixnLnByb3RvdHlwZS50b2dnbGUpLm9uKCJrZXlkb3duLmJzLmRyb3Bkb3duLmRhdGEtYXBpIixmLGcucHJvdG90eXBlLmtleWRvd24pLm9uKCJrZXlkb3duLmJzLmRyb3Bkb3duLmRhdGEtYXBpIiwiLmRyb3Bkb3duLW1lbnUiLGcucHJvdG90eXBlLmtleWRvd24pfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiLGQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1hKHRoaXMpLGY9ZS5kYXRhKCJicy5tb2RhbCIpLGc9YS5leHRlbmQoe30sYy5ERUZBVUxUUyxlLmRhdGEoKSwib2JqZWN0Ij09dHlwZW9mIGImJmIpO2Z8fGUuZGF0YSgiYnMubW9kYWwiLGY9bmV3IGModGhpcyxnKSksInN0cmluZyI9PXR5cGVvZiBiP2ZbYl0oZCk6Zy5zaG93JiZmLnNob3coZCl9KX12YXIgYz1mdW5jdGlvbihiLGMpe3RoaXMub3B0aW9ucz1jLHRoaXMuJGJvZHk9YShkb2N1bWVudC5ib2R5KSx0aGlzLiRlbGVtZW50PWEoYiksdGhpcy4kZGlhbG9nPXRoaXMuJGVsZW1lbnQuZmluZCgiLm1vZGFsLWRpYWxvZyIpLHRoaXMuJGJhY2tkcm9wPW51bGwsdGhpcy5pc1Nob3duPW51bGwsdGhpcy5vcmlnaW5hbEJvZHlQYWQ9bnVsbCx0aGlzLnNjcm9sbGJhcldpZHRoPTAsdGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrPSExLHRoaXMub3B0aW9ucy5yZW1vdGUmJnRoaXMuJGVsZW1lbnQuZmluZCgiLm1vZGFsLWNvbnRlbnQiKS5sb2FkKHRoaXMub3B0aW9ucy5yZW1vdGUsYS5wcm94eShmdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQudHJpZ2dlcigibG9hZGVkLmJzLm1vZGFsIil9LHRoaXMpKX07Yy5WRVJTSU9OPSIzLjMuNSIsYy5UUkFOU0lUSU9OX0RVUkFUSU9OPTMwMCxjLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT049MTUwLGMuREVGQVVMVFM9e2JhY2tkcm9wOiEwLGtleWJvYXJkOiEwLHNob3c6ITB9LGMucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pc1Nob3duP3RoaXMuaGlkZSgpOnRoaXMuc2hvdyhhKX0sYy5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbihiKXt2YXIgZD10aGlzLGU9YS5FdmVudCgic2hvdy5icy5tb2RhbCIse3JlbGF0ZWRUYXJnZXQ6Yn0pO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihlKSx0aGlzLmlzU2hvd258fGUuaXNEZWZhdWx0UHJldmVudGVkKCl8fCh0aGlzLmlzU2hvd249ITAsdGhpcy5jaGVja1Njcm9sbGJhcigpLHRoaXMuc2V0U2Nyb2xsYmFyKCksdGhpcy4kYm9keS5hZGRDbGFzcygibW9kYWwtb3BlbiIpLHRoaXMuZXNjYXBlKCksdGhpcy5yZXNpemUoKSx0aGlzLiRlbGVtZW50Lm9uKCJjbGljay5kaXNtaXNzLmJzLm1vZGFsIiwnW2RhdGEtZGlzbWlzcz0ibW9kYWwiXScsYS5wcm94eSh0aGlzLmhpZGUsdGhpcykpLHRoaXMuJGRpYWxvZy5vbigibW91c2Vkb3duLmRpc21pc3MuYnMubW9kYWwiLGZ1bmN0aW9uKCl7ZC4kZWxlbWVudC5vbmUoIm1vdXNldXAuZGlzbWlzcy5icy5tb2RhbCIsZnVuY3Rpb24oYil7YShiLnRhcmdldCkuaXMoZC4kZWxlbWVudCkmJihkLmlnbm9yZUJhY2tkcm9wQ2xpY2s9ITApfSl9KSx0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uKCl7dmFyIGU9YS5zdXBwb3J0LnRyYW5zaXRpb24mJmQuJGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKTtkLiRlbGVtZW50LnBhcmVudCgpLmxlbmd0aHx8ZC4kZWxlbWVudC5hcHBlbmRUbyhkLiRib2R5KSxkLiRlbGVtZW50LnNob3coKS5zY3JvbGxUb3AoMCksZC5hZGp1c3REaWFsb2coKSxlJiZkLiRlbGVtZW50WzBdLm9mZnNldFdpZHRoLGQuJGVsZW1lbnQuYWRkQ2xhc3MoImluIiksZC5lbmZvcmNlRm9jdXMoKTt2YXIgZj1hLkV2ZW50KCJzaG93bi5icy5tb2RhbCIse3JlbGF0ZWRUYXJnZXQ6Yn0pO2U/ZC4kZGlhbG9nLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixmdW5jdGlvbigpe2QuJGVsZW1lbnQudHJpZ2dlcigiZm9jdXMiKS50cmlnZ2VyKGYpfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKTpkLiRlbGVtZW50LnRyaWdnZXIoImZvY3VzIikudHJpZ2dlcihmKX0pKX0sYy5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbihiKXtiJiZiLnByZXZlbnREZWZhdWx0KCksYj1hLkV2ZW50KCJoaWRlLmJzLm1vZGFsIiksdGhpcy4kZWxlbWVudC50cmlnZ2VyKGIpLHRoaXMuaXNTaG93biYmIWIuaXNEZWZhdWx0UHJldmVudGVkKCkmJih0aGlzLmlzU2hvd249ITEsdGhpcy5lc2NhcGUoKSx0aGlzLnJlc2l6ZSgpLGEoZG9jdW1lbnQpLm9mZigiZm9jdXNpbi5icy5tb2RhbCIpLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImluIikub2ZmKCJjbGljay5kaXNtaXNzLmJzLm1vZGFsIikub2ZmKCJtb3VzZXVwLmRpc21pc3MuYnMubW9kYWwiKSx0aGlzLiRkaWFsb2cub2ZmKCJtb3VzZWRvd24uZGlzbWlzcy5icy5tb2RhbCIpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik/dGhpcy4kZWxlbWVudC5vbmUoImJzVHJhbnNpdGlvbkVuZCIsYS5wcm94eSh0aGlzLmhpZGVNb2RhbCx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKTp0aGlzLmhpZGVNb2RhbCgpKX0sYy5wcm90b3R5cGUuZW5mb3JjZUZvY3VzPWZ1bmN0aW9uKCl7YShkb2N1bWVudCkub2ZmKCJmb2N1c2luLmJzLm1vZGFsIikub24oImZvY3VzaW4uYnMubW9kYWwiLGEucHJveHkoZnVuY3Rpb24oYSl7dGhpcy4kZWxlbWVudFswXT09PWEudGFyZ2V0fHx0aGlzLiRlbGVtZW50LmhhcyhhLnRhcmdldCkubGVuZ3RofHx0aGlzLiRlbGVtZW50LnRyaWdnZXIoImZvY3VzIil9LHRoaXMpKX0sYy5wcm90b3R5cGUuZXNjYXBlPWZ1bmN0aW9uKCl7dGhpcy5pc1Nob3duJiZ0aGlzLm9wdGlvbnMua2V5Ym9hcmQ/dGhpcy4kZWxlbWVudC5vbigia2V5ZG93bi5kaXNtaXNzLmJzLm1vZGFsIixhLnByb3h5KGZ1bmN0aW9uKGEpezI3PT1hLndoaWNoJiZ0aGlzLmhpZGUoKX0sdGhpcykpOnRoaXMuaXNTaG93bnx8dGhpcy4kZWxlbWVudC5vZmYoImtleWRvd24uZGlzbWlzcy5icy5tb2RhbCIpfSxjLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oKXt0aGlzLmlzU2hvd24/YSh3aW5kb3cpLm9uKCJyZXNpemUuYnMubW9kYWwiLGEucHJveHkodGhpcy5oYW5kbGVVcGRhdGUsdGhpcykpOmEod2luZG93KS5vZmYoInJlc2l6ZS5icy5tb2RhbCIpfSxjLnByb3RvdHlwZS5oaWRlTW9kYWw9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3RoaXMuJGVsZW1lbnQuaGlkZSgpLHRoaXMuYmFja2Ryb3AoZnVuY3Rpb24oKXthLiRib2R5LnJlbW92ZUNsYXNzKCJtb2RhbC1vcGVuIiksYS5yZXNldEFkanVzdG1lbnRzKCksYS5yZXNldFNjcm9sbGJhcigpLGEuJGVsZW1lbnQudHJpZ2dlcigiaGlkZGVuLmJzLm1vZGFsIil9KX0sYy5wcm90b3R5cGUucmVtb3ZlQmFja2Ryb3A9ZnVuY3Rpb24oKXt0aGlzLiRiYWNrZHJvcCYmdGhpcy4kYmFja2Ryb3AucmVtb3ZlKCksdGhpcy4kYmFja2Ryb3A9bnVsbH0sYy5wcm90b3R5cGUuYmFja2Ryb3A9ZnVuY3Rpb24oYil7dmFyIGQ9dGhpcyxlPXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKT8iZmFkZSI6IiI7aWYodGhpcy5pc1Nob3duJiZ0aGlzLm9wdGlvbnMuYmFja2Ryb3Ape3ZhciBmPWEuc3VwcG9ydC50cmFuc2l0aW9uJiZlO2lmKHRoaXMuJGJhY2tkcm9wPWEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmFkZENsYXNzKCJtb2RhbC1iYWNrZHJvcCAiK2UpLmFwcGVuZFRvKHRoaXMuJGJvZHkpLHRoaXMuJGVsZW1lbnQub24oImNsaWNrLmRpc21pc3MuYnMubW9kYWwiLGEucHJveHkoZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaWdub3JlQmFja2Ryb3BDbGljaz92b2lkKHRoaXMuaWdub3JlQmFja2Ryb3BDbGljaz0hMSk6dm9pZChhLnRhcmdldD09PWEuY3VycmVudFRhcmdldCYmKCJzdGF0aWMiPT10aGlzLm9wdGlvbnMuYmFja2Ryb3A/dGhpcy4kZWxlbWVudFswXS5mb2N1cygpOnRoaXMuaGlkZSgpKSl9LHRoaXMpKSxmJiZ0aGlzLiRiYWNrZHJvcFswXS5vZmZzZXRXaWR0aCx0aGlzLiRiYWNrZHJvcC5hZGRDbGFzcygiaW4iKSwhYilyZXR1cm47Zj90aGlzLiRiYWNrZHJvcC5vbmUoImJzVHJhbnNpdGlvbkVuZCIsYikuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OKTpiKCl9ZWxzZSBpZighdGhpcy5pc1Nob3duJiZ0aGlzLiRiYWNrZHJvcCl7dGhpcy4kYmFja2Ryb3AucmVtb3ZlQ2xhc3MoImluIik7dmFyIGc9ZnVuY3Rpb24oKXtkLnJlbW92ZUJhY2tkcm9wKCksYiYmYigpfTthLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpP3RoaXMuJGJhY2tkcm9wLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixnKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT04pOmcoKX1lbHNlIGImJmIoKX0sYy5wcm90b3R5cGUuaGFuZGxlVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5hZGp1c3REaWFsb2coKX0sYy5wcm90b3R5cGUuYWRqdXN0RGlhbG9nPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kZWxlbWVudFswXS5zY3JvbGxIZWlnaHQ+ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDt0aGlzLiRlbGVtZW50LmNzcyh7cGFkZGluZ0xlZnQ6IXRoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJmE/dGhpcy5zY3JvbGxiYXJXaWR0aDoiIixwYWRkaW5nUmlnaHQ6dGhpcy5ib2R5SXNPdmVyZmxvd2luZyYmIWE/dGhpcy5zY3JvbGxiYXJXaWR0aDoiIn0pfSxjLnByb3RvdHlwZS5yZXNldEFkanVzdG1lbnRzPWZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5jc3Moe3BhZGRpbmdMZWZ0OiIiLHBhZGRpbmdSaWdodDoiIn0pfSxjLnByb3RvdHlwZS5jaGVja1Njcm9sbGJhcj1mdW5jdGlvbigpe3ZhciBhPXdpbmRvdy5pbm5lcldpZHRoO2lmKCFhKXt2YXIgYj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YT1iLnJpZ2h0LU1hdGguYWJzKGIubGVmdCl9dGhpcy5ib2R5SXNPdmVyZmxvd2luZz1kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoPGEsdGhpcy5zY3JvbGxiYXJXaWR0aD10aGlzLm1lYXN1cmVTY3JvbGxiYXIoKX0sYy5wcm90b3R5cGUuc2V0U2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIGE9cGFyc2VJbnQodGhpcy4kYm9keS5jc3MoInBhZGRpbmctcmlnaHQiKXx8MCwxMCk7dGhpcy5vcmlnaW5hbEJvZHlQYWQ9ZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHR8fCIiLHRoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJnRoaXMuJGJvZHkuY3NzKCJwYWRkaW5nLXJpZ2h0IixhK3RoaXMuc2Nyb2xsYmFyV2lkdGgpfSxjLnByb3RvdHlwZS5yZXNldFNjcm9sbGJhcj1mdW5jdGlvbigpe3RoaXMuJGJvZHkuY3NzKCJwYWRkaW5nLXJpZ2h0Iix0aGlzLm9yaWdpbmFsQm9keVBhZCl9LGMucHJvdG90eXBlLm1lYXN1cmVTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmNsYXNzTmFtZT0ibW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmUiLHRoaXMuJGJvZHkuYXBwZW5kKGEpO3ZhciBiPWEub2Zmc2V0V2lkdGgtYS5jbGllbnRXaWR0aDtyZXR1cm4gdGhpcy4kYm9keVswXS5yZW1vdmVDaGlsZChhKSxifTt2YXIgZD1hLmZuLm1vZGFsO2EuZm4ubW9kYWw9YixhLmZuLm1vZGFsLkNvbnN0cnVjdG9yPWMsYS5mbi5tb2RhbC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4ubW9kYWw9ZCx0aGlzfSxhKGRvY3VtZW50KS5vbigiY2xpY2suYnMubW9kYWwuZGF0YS1hcGkiLCdbZGF0YS10b2dnbGU9Im1vZGFsIl0nLGZ1bmN0aW9uKGMpe3ZhciBkPWEodGhpcyksZT1kLmF0dHIoImhyZWYiKSxmPWEoZC5hdHRyKCJkYXRhLXRhcmdldCIpfHxlJiZlLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIikpLGc9Zi5kYXRhKCJicy5tb2RhbCIpPyJ0b2dnbGUiOmEuZXh0ZW5kKHtyZW1vdGU6IS8jLy50ZXN0KGUpJiZlfSxmLmRhdGEoKSxkLmRhdGEoKSk7ZC5pcygiYSIpJiZjLnByZXZlbnREZWZhdWx0KCksZi5vbmUoInNob3cuYnMubW9kYWwiLGZ1bmN0aW9uKGEpe2EuaXNEZWZhdWx0UHJldmVudGVkKCl8fGYub25lKCJoaWRkZW4uYnMubW9kYWwiLGZ1bmN0aW9uKCl7ZC5pcygiOnZpc2libGUiKSYmZC50cmlnZ2VyKCJmb2N1cyIpfSl9KSxiLmNhbGwoZixnLHRoaXMpfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJicy50b29sdGlwIiksZj0ib2JqZWN0Ij09dHlwZW9mIGImJmI7KGV8fCEvZGVzdHJveXxoaWRlLy50ZXN0KGIpKSYmKGV8fGQuZGF0YSgiYnMudG9vbHRpcCIsZT1uZXcgYyh0aGlzLGYpKSwic3RyaW5nIj09dHlwZW9mIGImJmVbYl0oKSl9KX12YXIgYz1mdW5jdGlvbihhLGIpe3RoaXMudHlwZT1udWxsLHRoaXMub3B0aW9ucz1udWxsLHRoaXMuZW5hYmxlZD1udWxsLHRoaXMudGltZW91dD1udWxsLHRoaXMuaG92ZXJTdGF0ZT1udWxsLHRoaXMuJGVsZW1lbnQ9bnVsbCx0aGlzLmluU3RhdGU9bnVsbCx0aGlzLmluaXQoInRvb2x0aXAiLGEsYil9O2MuVkVSU0lPTj0iMy4zLjUiLGMuVFJBTlNJVElPTl9EVVJBVElPTj0xNTAsYy5ERUZBVUxUUz17YW5pbWF0aW9uOiEwLHBsYWNlbWVudDoidG9wIixzZWxlY3RvcjohMSx0ZW1wbGF0ZTonPGRpdiBjbGFzcz0idG9vbHRpcCIgcm9sZT0idG9vbHRpcCI+PGRpdiBjbGFzcz0idG9vbHRpcC1hcnJvdyI+PC9kaXY+PGRpdiBjbGFzcz0idG9vbHRpcC1pbm5lciI+PC9kaXY+PC9kaXY+Jyx0cmlnZ2VyOiJob3ZlciBmb2N1cyIsdGl0bGU6IiIsZGVsYXk6MCxodG1sOiExLGNvbnRhaW5lcjohMSx2aWV3cG9ydDp7c2VsZWN0b3I6ImJvZHkiLHBhZGRpbmc6MH19LGMucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYixjLGQpe2lmKHRoaXMuZW5hYmxlZD0hMCx0aGlzLnR5cGU9Yix0aGlzLiRlbGVtZW50PWEoYyksdGhpcy5vcHRpb25zPXRoaXMuZ2V0T3B0aW9ucyhkKSx0aGlzLiR2aWV3cG9ydD10aGlzLm9wdGlvbnMudmlld3BvcnQmJmEoYS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy52aWV3cG9ydCk/dGhpcy5vcHRpb25zLnZpZXdwb3J0LmNhbGwodGhpcyx0aGlzLiRlbGVtZW50KTp0aGlzLm9wdGlvbnMudmlld3BvcnQuc2VsZWN0b3J8fHRoaXMub3B0aW9ucy52aWV3cG9ydCksdGhpcy5pblN0YXRlPXtjbGljazohMSxob3ZlcjohMSxmb2N1czohMX0sdGhpcy4kZWxlbWVudFswXWluc3RhbmNlb2YgZG9jdW1lbnQuY29uc3RydWN0b3ImJiF0aGlzLm9wdGlvbnMuc2VsZWN0b3IpdGhyb3cgbmV3IEVycm9yKCJgc2VsZWN0b3JgIG9wdGlvbiBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIGluaXRpYWxpemluZyAiK3RoaXMudHlwZSsiIG9uIHRoZSB3aW5kb3cuZG9jdW1lbnQgb2JqZWN0ISIpO2Zvcih2YXIgZT10aGlzLm9wdGlvbnMudHJpZ2dlci5zcGxpdCgiICIpLGY9ZS5sZW5ndGg7Zi0tOyl7dmFyIGc9ZVtmXTtpZigiY2xpY2siPT1nKXRoaXMuJGVsZW1lbnQub24oImNsaWNrLiIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3RvcixhLnByb3h5KHRoaXMudG9nZ2xlLHRoaXMpKTtlbHNlIGlmKCJtYW51YWwiIT1nKXt2YXIgaD0iaG92ZXIiPT1nPyJtb3VzZWVudGVyIjoiZm9jdXNpbiIsaT0iaG92ZXIiPT1nPyJtb3VzZWxlYXZlIjoiZm9jdXNvdXQiO3RoaXMuJGVsZW1lbnQub24oaCsiLiIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3RvcixhLnByb3h5KHRoaXMuZW50ZXIsdGhpcykpLHRoaXMuJGVsZW1lbnQub24oaSsiLiIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3RvcixhLnByb3h5KHRoaXMubGVhdmUsdGhpcykpfX10aGlzLm9wdGlvbnMuc2VsZWN0b3I/dGhpcy5fb3B0aW9ucz1hLmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMse3RyaWdnZXI6Im1hbnVhbCIsc2VsZWN0b3I6IiJ9KTp0aGlzLmZpeFRpdGxlKCl9LGMucHJvdG90eXBlLmdldERlZmF1bHRzPWZ1bmN0aW9uKCl7cmV0dXJuIGMuREVGQVVMVFN9LGMucHJvdG90eXBlLmdldE9wdGlvbnM9ZnVuY3Rpb24oYil7cmV0dXJuIGI9YS5leHRlbmQoe30sdGhpcy5nZXREZWZhdWx0cygpLHRoaXMuJGVsZW1lbnQuZGF0YSgpLGIpLGIuZGVsYXkmJiJudW1iZXIiPT10eXBlb2YgYi5kZWxheSYmKGIuZGVsYXk9e3Nob3c6Yi5kZWxheSxoaWRlOmIuZGVsYXl9KSxifSxjLnByb3RvdHlwZS5nZXREZWxlZ2F0ZU9wdGlvbnM9ZnVuY3Rpb24oKXt2YXIgYj17fSxjPXRoaXMuZ2V0RGVmYXVsdHMoKTtyZXR1cm4gdGhpcy5fb3B0aW9ucyYmYS5lYWNoKHRoaXMuX29wdGlvbnMsZnVuY3Rpb24oYSxkKXtjW2FdIT1kJiYoYlthXT1kKX0pLGJ9LGMucHJvdG90eXBlLmVudGVyPWZ1bmN0aW9uKGIpe3ZhciBjPWIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP2I6YShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoImJzLiIrdGhpcy50eXBlKTtyZXR1cm4gY3x8KGM9bmV3IHRoaXMuY29uc3RydWN0b3IoYi5jdXJyZW50VGFyZ2V0LHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpLGEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSxjKSksYiBpbnN0YW5jZW9mIGEuRXZlbnQmJihjLmluU3RhdGVbImZvY3VzaW4iPT1iLnR5cGU/ImZvY3VzIjoiaG92ZXIiXT0hMCksYy50aXAoKS5oYXNDbGFzcygiaW4iKXx8ImluIj09Yy5ob3ZlclN0YXRlP3ZvaWQoYy5ob3ZlclN0YXRlPSJpbiIpOihjbGVhclRpbWVvdXQoYy50aW1lb3V0KSxjLmhvdmVyU3RhdGU9ImluIixjLm9wdGlvbnMuZGVsYXkmJmMub3B0aW9ucy5kZWxheS5zaG93P3ZvaWQoYy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXsiaW4iPT1jLmhvdmVyU3RhdGUmJmMuc2hvdygpfSxjLm9wdGlvbnMuZGVsYXkuc2hvdykpOmMuc2hvdygpKX0sYy5wcm90b3R5cGUuaXNJblN0YXRlVHJ1ZT1mdW5jdGlvbigpe2Zvcih2YXIgYSBpbiB0aGlzLmluU3RhdGUpaWYodGhpcy5pblN0YXRlW2FdKXJldHVybiEwO3JldHVybiExfSxjLnByb3RvdHlwZS5sZWF2ZT1mdW5jdGlvbihiKXt2YXIgYz1iIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9iOmEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSk7cmV0dXJuIGN8fChjPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGIuY3VycmVudFRhcmdldCx0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKSxhKGIuY3VycmVudFRhcmdldCkuZGF0YSgiYnMuIit0aGlzLnR5cGUsYykpLGIgaW5zdGFuY2VvZiBhLkV2ZW50JiYoYy5pblN0YXRlWyJmb2N1c291dCI9PWIudHlwZT8iZm9jdXMiOiJob3ZlciJdPSExKSxjLmlzSW5TdGF0ZVRydWUoKT92b2lkIDA6KGNsZWFyVGltZW91dChjLnRpbWVvdXQpLGMuaG92ZXJTdGF0ZT0ib3V0IixjLm9wdGlvbnMuZGVsYXkmJmMub3B0aW9ucy5kZWxheS5oaWRlP3ZvaWQoYy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXsib3V0Ij09Yy5ob3ZlclN0YXRlJiZjLmhpZGUoKX0sYy5vcHRpb25zLmRlbGF5LmhpZGUpKTpjLmhpZGUoKSl9LGMucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt2YXIgYj1hLkV2ZW50KCJzaG93LmJzLiIrdGhpcy50eXBlKTtpZih0aGlzLmhhc0NvbnRlbnQoKSYmdGhpcy5lbmFibGVkKXt0aGlzLiRlbGVtZW50LnRyaWdnZXIoYik7dmFyIGQ9YS5jb250YWlucyh0aGlzLiRlbGVtZW50WzBdLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHRoaXMuJGVsZW1lbnRbMF0pO2lmKGIuaXNEZWZhdWx0UHJldmVudGVkKCl8fCFkKXJldHVybjt2YXIgZT10aGlzLGY9dGhpcy50aXAoKSxnPXRoaXMuZ2V0VUlEKHRoaXMudHlwZSk7dGhpcy5zZXRDb250ZW50KCksZi5hdHRyKCJpZCIsZyksdGhpcy4kZWxlbWVudC5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5IixnKSx0aGlzLm9wdGlvbnMuYW5pbWF0aW9uJiZmLmFkZENsYXNzKCJmYWRlIik7dmFyIGg9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQ/dGhpcy5vcHRpb25zLnBsYWNlbWVudC5jYWxsKHRoaXMsZlswXSx0aGlzLiRlbGVtZW50WzBdKTp0aGlzLm9wdGlvbnMucGxhY2VtZW50LGk9L1xzP2F1dG8/XHM/L2ksaj1pLnRlc3QoaCk7aiYmKGg9aC5yZXBsYWNlKGksIiIpfHwidG9wIiksZi5kZXRhY2goKS5jc3Moe3RvcDowLGxlZnQ6MCxkaXNwbGF5OiJibG9jayJ9KS5hZGRDbGFzcyhoKS5kYXRhKCJicy4iK3RoaXMudHlwZSx0aGlzKSx0aGlzLm9wdGlvbnMuY29udGFpbmVyP2YuYXBwZW5kVG8odGhpcy5vcHRpb25zLmNvbnRhaW5lcik6Zi5pbnNlcnRBZnRlcih0aGlzLiRlbGVtZW50KSx0aGlzLiRlbGVtZW50LnRyaWdnZXIoImluc2VydGVkLmJzLiIrdGhpcy50eXBlKTt2YXIgaz10aGlzLmdldFBvc2l0aW9uKCksbD1mWzBdLm9mZnNldFdpZHRoLG09ZlswXS5vZmZzZXRIZWlnaHQ7aWYoail7dmFyIG49aCxvPXRoaXMuZ2V0UG9zaXRpb24odGhpcy4kdmlld3BvcnQpO2g9ImJvdHRvbSI9PWgmJmsuYm90dG9tK20+by5ib3R0b20/InRvcCI6InRvcCI9PWgmJmsudG9wLW08by50b3A/ImJvdHRvbSI6InJpZ2h0Ij09aCYmay5yaWdodCtsPm8ud2lkdGg/ImxlZnQiOiJsZWZ0Ij09aCYmay5sZWZ0LWw8by5sZWZ0PyJyaWdodCI6aCxmLnJlbW92ZUNsYXNzKG4pLmFkZENsYXNzKGgpfXZhciBwPXRoaXMuZ2V0Q2FsY3VsYXRlZE9mZnNldChoLGssbCxtKTt0aGlzLmFwcGx5UGxhY2VtZW50KHAsaCk7dmFyIHE9ZnVuY3Rpb24oKXt2YXIgYT1lLmhvdmVyU3RhdGU7ZS4kZWxlbWVudC50cmlnZ2VyKCJzaG93bi5icy4iK2UudHlwZSksZS5ob3ZlclN0YXRlPW51bGwsIm91dCI9PWEmJmUubGVhdmUoZSl9O2Euc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiR0aXAuaGFzQ2xhc3MoImZhZGUiKT9mLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixxKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOnEoKX19LGMucHJvdG90eXBlLmFwcGx5UGxhY2VtZW50PWZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcy50aXAoKSxlPWRbMF0ub2Zmc2V0V2lkdGgsZj1kWzBdLm9mZnNldEhlaWdodCxnPXBhcnNlSW50KGQuY3NzKCJtYXJnaW4tdG9wIiksMTApLGg9cGFyc2VJbnQoZC5jc3MoIm1hcmdpbi1sZWZ0IiksMTApO2lzTmFOKGcpJiYoZz0wKSxpc05hTihoKSYmKGg9MCksYi50b3ArPWcsYi5sZWZ0Kz1oLGEub2Zmc2V0LnNldE9mZnNldChkWzBdLGEuZXh0ZW5kKHt1c2luZzpmdW5jdGlvbihhKXtkLmNzcyh7dG9wOk1hdGgucm91bmQoYS50b3ApLGxlZnQ6TWF0aC5yb3VuZChhLmxlZnQpfSl9fSxiKSwwKSxkLmFkZENsYXNzKCJpbiIpO3ZhciBpPWRbMF0ub2Zmc2V0V2lkdGgsaj1kWzBdLm9mZnNldEhlaWdodDsidG9wIj09YyYmaiE9ZiYmKGIudG9wPWIudG9wK2Ytaik7dmFyIGs9dGhpcy5nZXRWaWV3cG9ydEFkanVzdGVkRGVsdGEoYyxiLGksaik7ay5sZWZ0P2IubGVmdCs9ay5sZWZ0OmIudG9wKz1rLnRvcDt2YXIgbD0vdG9wfGJvdHRvbS8udGVzdChjKSxtPWw/MiprLmxlZnQtZStpOjIqay50b3AtZitqLG49bD8ib2Zmc2V0V2lkdGgiOiJvZmZzZXRIZWlnaHQiO2Qub2Zmc2V0KGIpLHRoaXMucmVwbGFjZUFycm93KG0sZFswXVtuXSxsKX0sYy5wcm90b3R5cGUucmVwbGFjZUFycm93PWZ1bmN0aW9uKGEsYixjKXt0aGlzLmFycm93KCkuY3NzKGM/ImxlZnQiOiJ0b3AiLDUwKigxLWEvYikrIiUiKS5jc3MoYz8idG9wIjoibGVmdCIsIiIpfSxjLnByb3RvdHlwZS5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50aXAoKSxiPXRoaXMuZ2V0VGl0bGUoKTthLmZpbmQoIi50b29sdGlwLWlubmVyIilbdGhpcy5vcHRpb25zLmh0bWw/Imh0bWwiOiJ0ZXh0Il0oYiksYS5yZW1vdmVDbGFzcygiZmFkZSBpbiB0b3AgYm90dG9tIGxlZnQgcmlnaHQiKX0sYy5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbihiKXtmdW5jdGlvbiBkKCl7ImluIiE9ZS5ob3ZlclN0YXRlJiZmLmRldGFjaCgpLGUuJGVsZW1lbnQucmVtb3ZlQXR0cigiYXJpYS1kZXNjcmliZWRieSIpLnRyaWdnZXIoImhpZGRlbi5icy4iK2UudHlwZSksYiYmYigpfXZhciBlPXRoaXMsZj1hKHRoaXMuJHRpcCksZz1hLkV2ZW50KCJoaWRlLmJzLiIrdGhpcy50eXBlKTtyZXR1cm4gdGhpcy4kZWxlbWVudC50cmlnZ2VyKGcpLGcuaXNEZWZhdWx0UHJldmVudGVkKCk/dm9pZCAwOihmLnJlbW92ZUNsYXNzKCJpbiIpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiZmLmhhc0NsYXNzKCJmYWRlIik/Zi5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZCkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKTpkKCksdGhpcy5ob3ZlclN0YXRlPW51bGwsdGhpcyl9LGMucHJvdG90eXBlLmZpeFRpdGxlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kZWxlbWVudDsoYS5hdHRyKCJ0aXRsZSIpfHwic3RyaW5nIiE9dHlwZW9mIGEuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIpKSYmYS5hdHRyKCJkYXRhLW9yaWdpbmFsLXRpdGxlIixhLmF0dHIoInRpdGxlIil8fCIiKS5hdHRyKCJ0aXRsZSIsIiIpfSxjLnByb3RvdHlwZS5oYXNDb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGl0bGUoKX0sYy5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oYil7Yj1ifHx0aGlzLiRlbGVtZW50O3ZhciBjPWJbMF0sZD0iQk9EWSI9PWMudGFnTmFtZSxlPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bnVsbD09ZS53aWR0aCYmKGU9YS5leHRlbmQoe30sZSx7d2lkdGg6ZS5yaWdodC1lLmxlZnQsaGVpZ2h0OmUuYm90dG9tLWUudG9wfSkpO3ZhciBmPWQ/e3RvcDowLGxlZnQ6MH06Yi5vZmZzZXQoKSxnPXtzY3JvbGw6ZD9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDpiLnNjcm9sbFRvcCgpfSxoPWQ/e3dpZHRoOmEod2luZG93KS53aWR0aCgpLGhlaWdodDphKHdpbmRvdykuaGVpZ2h0KCl9Om51bGw7cmV0dXJuIGEuZXh0ZW5kKHt9LGUsZyxoLGYpfSxjLnByb3RvdHlwZS5nZXRDYWxjdWxhdGVkT2Zmc2V0PWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiJib3R0b20iPT1hP3t0b3A6Yi50b3ArYi5oZWlnaHQsbGVmdDpiLmxlZnQrYi53aWR0aC8yLWMvMn06InRvcCI9PWE/e3RvcDpiLnRvcC1kLGxlZnQ6Yi5sZWZ0K2Iud2lkdGgvMi1jLzJ9OiJsZWZ0Ij09YT97dG9wOmIudG9wK2IuaGVpZ2h0LzItZC8yLGxlZnQ6Yi5sZWZ0LWN9Ont0b3A6Yi50b3ArYi5oZWlnaHQvMi1kLzIsbGVmdDpiLmxlZnQrYi53aWR0aH19LGMucHJvdG90eXBlLmdldFZpZXdwb3J0QWRqdXN0ZWREZWx0YT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT17dG9wOjAsbGVmdDowfTtpZighdGhpcy4kdmlld3BvcnQpcmV0dXJuIGU7dmFyIGY9dGhpcy5vcHRpb25zLnZpZXdwb3J0JiZ0aGlzLm9wdGlvbnMudmlld3BvcnQucGFkZGluZ3x8MCxnPXRoaXMuZ2V0UG9zaXRpb24odGhpcy4kdmlld3BvcnQpO2lmKC9yaWdodHxsZWZ0Ly50ZXN0KGEpKXt2YXIgaD1iLnRvcC1mLWcuc2Nyb2xsLGk9Yi50b3ArZi1nLnNjcm9sbCtkO2g8Zy50b3A/ZS50b3A9Zy50b3AtaDppPmcudG9wK2cuaGVpZ2h0JiYoZS50b3A9Zy50b3ArZy5oZWlnaHQtaSl9ZWxzZXt2YXIgaj1iLmxlZnQtZixrPWIubGVmdCtmK2M7ajxnLmxlZnQ/ZS5sZWZ0PWcubGVmdC1qOms+Zy5yaWdodCYmKGUubGVmdD1nLmxlZnQrZy53aWR0aC1rKX1yZXR1cm4gZX0sYy5wcm90b3R5cGUuZ2V0VGl0bGU9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMuJGVsZW1lbnQsYz10aGlzLm9wdGlvbnM7cmV0dXJuIGE9Yi5hdHRyKCJkYXRhLW9yaWdpbmFsLXRpdGxlIil8fCgiZnVuY3Rpb24iPT10eXBlb2YgYy50aXRsZT9jLnRpdGxlLmNhbGwoYlswXSk6Yy50aXRsZSl9LGMucHJvdG90eXBlLmdldFVJRD1mdW5jdGlvbihhKXtkbyBhKz1+figxZTYqTWF0aC5yYW5kb20oKSk7d2hpbGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkpO3JldHVybiBhfSxjLnByb3RvdHlwZS50aXA9ZnVuY3Rpb24oKXtpZighdGhpcy4kdGlwJiYodGhpcy4kdGlwPWEodGhpcy5vcHRpb25zLnRlbXBsYXRlKSwxIT10aGlzLiR0aXAubGVuZ3RoKSl0aHJvdyBuZXcgRXJyb3IodGhpcy50eXBlKyIgYHRlbXBsYXRlYCBvcHRpb24gbXVzdCBjb25zaXN0IG9mIGV4YWN0bHkgMSB0b3AtbGV2ZWwgZWxlbWVudCEiKTtyZXR1cm4gdGhpcy4kdGlwfSxjLnByb3RvdHlwZS5hcnJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRhcnJvdz10aGlzLiRhcnJvd3x8dGhpcy50aXAoKS5maW5kKCIudG9vbHRpcC1hcnJvdyIpfSxjLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITB9LGMucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITF9LGMucHJvdG90eXBlLnRvZ2dsZUVuYWJsZWQ9ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9IXRoaXMuZW5hYmxlZH0sYy5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7YiYmKGM9YShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoImJzLiIrdGhpcy50eXBlKSxjfHwoYz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihiLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksYShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoImJzLiIrdGhpcy50eXBlLGMpKSksYj8oYy5pblN0YXRlLmNsaWNrPSFjLmluU3RhdGUuY2xpY2ssYy5pc0luU3RhdGVUcnVlKCk/Yy5lbnRlcihjKTpjLmxlYXZlKGMpKTpjLnRpcCgpLmhhc0NsYXNzKCJpbiIpP2MubGVhdmUoYyk6Yy5lbnRlcihjKX0sYy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBhPXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCksdGhpcy5oaWRlKGZ1bmN0aW9uKCl7YS4kZWxlbWVudC5vZmYoIi4iK2EudHlwZSkucmVtb3ZlRGF0YSgiYnMuIithLnR5cGUpLGEuJHRpcCYmYS4kdGlwLmRldGFjaCgpLGEuJHRpcD1udWxsLGEuJGFycm93PW51bGwsYS4kdmlld3BvcnQ9bnVsbH0pfTt2YXIgZD1hLmZuLnRvb2x0aXA7YS5mbi50b29sdGlwPWIsYS5mbi50b29sdGlwLkNvbnN0cnVjdG9yPWMsYS5mbi50b29sdGlwLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi50b29sdGlwPWQsdGhpc319KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJicy5wb3BvdmVyIiksZj0ib2JqZWN0Ij09dHlwZW9mIGImJmI7KGV8fCEvZGVzdHJveXxoaWRlLy50ZXN0KGIpKSYmKGV8fGQuZGF0YSgiYnMucG9wb3ZlciIsZT1uZXcgYyh0aGlzLGYpKSwic3RyaW5nIj09dHlwZW9mIGImJmVbYl0oKSl9KX12YXIgYz1mdW5jdGlvbihhLGIpe3RoaXMuaW5pdCgicG9wb3ZlciIsYSxiKX07aWYoIWEuZm4udG9vbHRpcCl0aHJvdyBuZXcgRXJyb3IoIlBvcG92ZXIgcmVxdWlyZXMgdG9vbHRpcC5qcyIpO2MuVkVSU0lPTj0iMy4zLjUiLGMuREVGQVVMVFM9YS5leHRlbmQoe30sYS5mbi50b29sdGlwLkNvbnN0cnVjdG9yLkRFRkFVTFRTLHtwbGFjZW1lbnQ6InJpZ2h0Iix0cmlnZ2VyOiJjbGljayIsY29udGVudDoiIix0ZW1wbGF0ZTonPGRpdiBjbGFzcz0icG9wb3ZlciIgcm9sZT0idG9vbHRpcCI+PGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2PjxoMyBjbGFzcz0icG9wb3Zlci10aXRsZSI+PC9oMz48ZGl2IGNsYXNzPSJwb3BvdmVyLWNvbnRlbnQiPjwvZGl2PjwvZGl2Pid9KSxjLnByb3RvdHlwZT1hLmV4dGVuZCh7fSxhLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IucHJvdG90eXBlKSxjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jLGMucHJvdG90eXBlLmdldERlZmF1bHRzPWZ1bmN0aW9uKCl7cmV0dXJuIGMuREVGQVVMVFN9LGMucHJvdG90eXBlLnNldENvbnRlbnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnRpcCgpLGI9dGhpcy5nZXRUaXRsZSgpLGM9dGhpcy5nZXRDb250ZW50KCk7YS5maW5kKCIucG9wb3Zlci10aXRsZSIpW3RoaXMub3B0aW9ucy5odG1sPyJodG1sIjoidGV4dCJdKGIpLGEuZmluZCgiLnBvcG92ZXItY29udGVudCIpLmNoaWxkcmVuKCkuZGV0YWNoKCkuZW5kKClbdGhpcy5vcHRpb25zLmh0bWw/InN0cmluZyI9PXR5cGVvZiBjPyJodG1sIjoiYXBwZW5kIjoidGV4dCJdKGMpLGEucmVtb3ZlQ2xhc3MoImZhZGUgdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0IGluIiksYS5maW5kKCIucG9wb3Zlci10aXRsZSIpLmh0bWwoKXx8YS5maW5kKCIucG9wb3Zlci10aXRsZSIpLmhpZGUoKX0sYy5wcm90b3R5cGUuaGFzQ29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl8fHRoaXMuZ2V0Q29udGVudCgpfSxjLnByb3RvdHlwZS5nZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kZWxlbWVudCxiPXRoaXMub3B0aW9ucztyZXR1cm4gYS5hdHRyKCJkYXRhLWNvbnRlbnQiKXx8KCJmdW5jdGlvbiI9PXR5cGVvZiBiLmNvbnRlbnQ/Yi5jb250ZW50LmNhbGwoYVswXSk6Yi5jb250ZW50KX0sYy5wcm90b3R5cGUuYXJyb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYXJyb3c9dGhpcy4kYXJyb3d8fHRoaXMudGlwKCkuZmluZCgiLmFycm93Iil9O3ZhciBkPWEuZm4ucG9wb3ZlcjthLmZuLnBvcG92ZXI9YixhLmZuLnBvcG92ZXIuQ29uc3RydWN0b3I9YyxhLmZuLnBvcG92ZXIubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLnBvcG92ZXI9ZCx0aGlzfX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYyxkKXt0aGlzLiRib2R5PWEoZG9jdW1lbnQuYm9keSksdGhpcy4kc2Nyb2xsRWxlbWVudD1hKGEoYykuaXMoZG9jdW1lbnQuYm9keSk/d2luZG93OmMpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxiLkRFRkFVTFRTLGQpLHRoaXMuc2VsZWN0b3I9KHRoaXMub3B0aW9ucy50YXJnZXR8fCIiKSsiIC5uYXYgbGkgPiBhIix0aGlzLm9mZnNldHM9W10sdGhpcy50YXJnZXRzPVtdLHRoaXMuYWN0aXZlVGFyZ2V0PW51bGwsdGhpcy5zY3JvbGxIZWlnaHQ9MCx0aGlzLiRzY3JvbGxFbGVtZW50Lm9uKCJzY3JvbGwuYnMuc2Nyb2xsc3B5IixhLnByb3h5KHRoaXMucHJvY2Vzcyx0aGlzKSksdGhpcy5yZWZyZXNoKCksdGhpcy5wcm9jZXNzKCl9ZnVuY3Rpb24gYyhjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgiYnMuc2Nyb2xsc3B5IiksZj0ib2JqZWN0Ij09dHlwZW9mIGMmJmM7ZXx8ZC5kYXRhKCJicy5zY3JvbGxzcHkiLGU9bmV3IGIodGhpcyxmKSksInN0cmluZyI9PXR5cGVvZiBjJiZlW2NdKCl9KX1iLlZFUlNJT049IjMuMy41IixiLkRFRkFVTFRTPXtvZmZzZXQ6MTB9LGIucHJvdG90eXBlLmdldFNjcm9sbEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRzY3JvbGxFbGVtZW50WzBdLnNjcm9sbEhlaWdodHx8TWF0aC5tYXgodGhpcy4kYm9keVswXS5zY3JvbGxIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCl9LGIucHJvdG90eXBlLnJlZnJlc2g9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLGM9Im9mZnNldCIsZD0wO3RoaXMub2Zmc2V0cz1bXSx0aGlzLnRhcmdldHM9W10sdGhpcy5zY3JvbGxIZWlnaHQ9dGhpcy5nZXRTY3JvbGxIZWlnaHQoKSxhLmlzV2luZG93KHRoaXMuJHNjcm9sbEVsZW1lbnRbMF0pfHwoYz0icG9zaXRpb24iLGQ9dGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSksdGhpcy4kYm9keS5maW5kKHRoaXMuc2VsZWN0b3IpLm1hcChmdW5jdGlvbigpe3ZhciBiPWEodGhpcyksZT1iLmRhdGEoInRhcmdldCIpfHxiLmF0dHIoImhyZWYiKSxmPS9eIy4vLnRlc3QoZSkmJmEoZSk7cmV0dXJuIGYmJmYubGVuZ3RoJiZmLmlzKCI6dmlzaWJsZSIpJiZbW2ZbY10oKS50b3ArZCxlXV18fG51bGx9KS5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGFbMF0tYlswXX0pLmVhY2goZnVuY3Rpb24oKXtiLm9mZnNldHMucHVzaCh0aGlzWzBdKSxiLnRhcmdldHMucHVzaCh0aGlzWzFdKX0pfSxiLnByb3RvdHlwZS5wcm9jZXNzPWZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLiRzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCgpK3RoaXMub3B0aW9ucy5vZmZzZXQsYz10aGlzLmdldFNjcm9sbEhlaWdodCgpLGQ9dGhpcy5vcHRpb25zLm9mZnNldCtjLXRoaXMuJHNjcm9sbEVsZW1lbnQuaGVpZ2h0KCksZT10aGlzLm9mZnNldHMsZj10aGlzLnRhcmdldHMsZz10aGlzLmFjdGl2ZVRhcmdldDtpZih0aGlzLnNjcm9sbEhlaWdodCE9YyYmdGhpcy5yZWZyZXNoKCksYj49ZClyZXR1cm4gZyE9KGE9ZltmLmxlbmd0aC0xXSkmJnRoaXMuYWN0aXZhdGUoYSk7aWYoZyYmYjxlWzBdKXJldHVybiB0aGlzLmFjdGl2ZVRhcmdldD1udWxsLHRoaXMuY2xlYXIoKTtmb3IoYT1lLmxlbmd0aDthLS07KWchPWZbYV0mJmI+PWVbYV0mJih2b2lkIDA9PT1lW2ErMV18fGI8ZVthKzFdKSYmdGhpcy5hY3RpdmF0ZShmW2FdKX0sYi5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24oYil7dGhpcy5hY3RpdmVUYXJnZXQ9Yix0aGlzLmNsZWFyKCk7dmFyIGM9dGhpcy5zZWxlY3RvcisnW2RhdGEtdGFyZ2V0PSInK2IrJyJdLCcrdGhpcy5zZWxlY3RvcisnW2hyZWY9IicrYisnIl0nLGQ9YShjKS5wYXJlbnRzKCJsaSIpLmFkZENsYXNzKCJhY3RpdmUiKTtkLnBhcmVudCgiLmRyb3Bkb3duLW1lbnUiKS5sZW5ndGgmJihkPWQuY2xvc2VzdCgibGkuZHJvcGRvd24iKS5hZGRDbGFzcygiYWN0aXZlIikpLAogICAgZC50cmlnZ2VyKCJhY3RpdmF0ZS5icy5zY3JvbGxzcHkiKX0sYi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXthKHRoaXMuc2VsZWN0b3IpLnBhcmVudHNVbnRpbCh0aGlzLm9wdGlvbnMudGFyZ2V0LCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpfTt2YXIgZD1hLmZuLnNjcm9sbHNweTthLmZuLnNjcm9sbHNweT1jLGEuZm4uc2Nyb2xsc3B5LkNvbnN0cnVjdG9yPWIsYS5mbi5zY3JvbGxzcHkubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLnNjcm9sbHNweT1kLHRoaXN9LGEod2luZG93KS5vbigibG9hZC5icy5zY3JvbGxzcHkuZGF0YS1hcGkiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PSJzY3JvbGwiXScpLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpO2MuY2FsbChiLGIuZGF0YSgpKX0pfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJicy50YWIiKTtlfHxkLmRhdGEoImJzLnRhYiIsZT1uZXcgYyh0aGlzKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCl9KX12YXIgYz1mdW5jdGlvbihiKXt0aGlzLmVsZW1lbnQ9YShiKX07Yy5WRVJTSU9OPSIzLjMuNSIsYy5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbGVtZW50LGM9Yi5jbG9zZXN0KCJ1bDpub3QoLmRyb3Bkb3duLW1lbnUpIiksZD1iLmRhdGEoInRhcmdldCIpO2lmKGR8fChkPWIuYXR0cigiaHJlZiIpLGQ9ZCYmZC5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sIiIpKSwhYi5wYXJlbnQoImxpIikuaGFzQ2xhc3MoImFjdGl2ZSIpKXt2YXIgZT1jLmZpbmQoIi5hY3RpdmU6bGFzdCBhIiksZj1hLkV2ZW50KCJoaWRlLmJzLnRhYiIse3JlbGF0ZWRUYXJnZXQ6YlswXX0pLGc9YS5FdmVudCgic2hvdy5icy50YWIiLHtyZWxhdGVkVGFyZ2V0OmVbMF19KTtpZihlLnRyaWdnZXIoZiksYi50cmlnZ2VyKGcpLCFnLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYhZi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIGg9YShkKTt0aGlzLmFjdGl2YXRlKGIuY2xvc2VzdCgibGkiKSxjKSx0aGlzLmFjdGl2YXRlKGgsaC5wYXJlbnQoKSxmdW5jdGlvbigpe2UudHJpZ2dlcih7dHlwZToiaGlkZGVuLmJzLnRhYiIscmVsYXRlZFRhcmdldDpiWzBdfSksYi50cmlnZ2VyKHt0eXBlOiJzaG93bi5icy50YWIiLHJlbGF0ZWRUYXJnZXQ6ZVswXX0pfSl9fX0sYy5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24oYixkLGUpe2Z1bmN0aW9uIGYoKXtnLnJlbW92ZUNsYXNzKCJhY3RpdmUiKS5maW5kKCI+IC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKS5lbmQoKS5maW5kKCdbZGF0YS10b2dnbGU9InRhYiJdJykuYXR0cigiYXJpYS1leHBhbmRlZCIsITEpLGIuYWRkQ2xhc3MoImFjdGl2ZSIpLmZpbmQoJ1tkYXRhLXRvZ2dsZT0idGFiIl0nKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCksaD8oYlswXS5vZmZzZXRXaWR0aCxiLmFkZENsYXNzKCJpbiIpKTpiLnJlbW92ZUNsYXNzKCJmYWRlIiksYi5wYXJlbnQoIi5kcm9wZG93bi1tZW51IikubGVuZ3RoJiZiLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpLmVuZCgpLmZpbmQoJ1tkYXRhLXRvZ2dsZT0idGFiIl0nKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCksZSYmZSgpfXZhciBnPWQuZmluZCgiPiAuYWN0aXZlIiksaD1lJiZhLnN1cHBvcnQudHJhbnNpdGlvbiYmKGcubGVuZ3RoJiZnLmhhc0NsYXNzKCJmYWRlIil8fCEhZC5maW5kKCI+IC5mYWRlIikubGVuZ3RoKTtnLmxlbmd0aCYmaD9nLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixmKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOmYoKSxnLnJlbW92ZUNsYXNzKCJpbiIpfTt2YXIgZD1hLmZuLnRhYjthLmZuLnRhYj1iLGEuZm4udGFiLkNvbnN0cnVjdG9yPWMsYS5mbi50YWIubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLnRhYj1kLHRoaXN9O3ZhciBlPWZ1bmN0aW9uKGMpe2MucHJldmVudERlZmF1bHQoKSxiLmNhbGwoYSh0aGlzKSwic2hvdyIpfTthKGRvY3VtZW50KS5vbigiY2xpY2suYnMudGFiLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJ0YWIiXScsZSkub24oImNsaWNrLmJzLnRhYi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0icGlsbCJdJyxlKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLmFmZml4IiksZj0ib2JqZWN0Ij09dHlwZW9mIGImJmI7ZXx8ZC5kYXRhKCJicy5hZmZpeCIsZT1uZXcgYyh0aGlzLGYpKSwic3RyaW5nIj09dHlwZW9mIGImJmVbYl0oKX0pfXZhciBjPWZ1bmN0aW9uKGIsZCl7dGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LGMuREVGQVVMVFMsZCksdGhpcy4kdGFyZ2V0PWEodGhpcy5vcHRpb25zLnRhcmdldCkub24oInNjcm9sbC5icy5hZmZpeC5kYXRhLWFwaSIsYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcykpLm9uKCJjbGljay5icy5hZmZpeC5kYXRhLWFwaSIsYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb25XaXRoRXZlbnRMb29wLHRoaXMpKSx0aGlzLiRlbGVtZW50PWEoYiksdGhpcy5hZmZpeGVkPW51bGwsdGhpcy51bnBpbj1udWxsLHRoaXMucGlubmVkT2Zmc2V0PW51bGwsdGhpcy5jaGVja1Bvc2l0aW9uKCl9O2MuVkVSU0lPTj0iMy4zLjUiLGMuUkVTRVQ9ImFmZml4IGFmZml4LXRvcCBhZmZpeC1ib3R0b20iLGMuREVGQVVMVFM9e29mZnNldDowLHRhcmdldDp3aW5kb3d9LGMucHJvdG90eXBlLmdldFN0YXRlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuJHRhcmdldC5zY3JvbGxUb3AoKSxmPXRoaXMuJGVsZW1lbnQub2Zmc2V0KCksZz10aGlzLiR0YXJnZXQuaGVpZ2h0KCk7aWYobnVsbCE9YyYmInRvcCI9PXRoaXMuYWZmaXhlZClyZXR1cm4gYz5lPyJ0b3AiOiExO2lmKCJib3R0b20iPT10aGlzLmFmZml4ZWQpcmV0dXJuIG51bGwhPWM/ZSt0aGlzLnVucGluPD1mLnRvcD8hMToiYm90dG9tIjphLWQ+PWUrZz8hMToiYm90dG9tIjt2YXIgaD1udWxsPT10aGlzLmFmZml4ZWQsaT1oP2U6Zi50b3Asaj1oP2c6YjtyZXR1cm4gbnVsbCE9YyYmYz49ZT8idG9wIjpudWxsIT1kJiZpK2o+PWEtZD8iYm90dG9tIjohMX0sYy5wcm90b3R5cGUuZ2V0UGlubmVkT2Zmc2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5waW5uZWRPZmZzZXQpcmV0dXJuIHRoaXMucGlubmVkT2Zmc2V0O3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoYy5SRVNFVCkuYWRkQ2xhc3MoImFmZml4Iik7dmFyIGE9dGhpcy4kdGFyZ2V0LnNjcm9sbFRvcCgpLGI9dGhpcy4kZWxlbWVudC5vZmZzZXQoKTtyZXR1cm4gdGhpcy5waW5uZWRPZmZzZXQ9Yi50b3AtYX0sYy5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbldpdGhFdmVudExvb3A9ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGEucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLHRoaXMpLDEpfSxjLnByb3RvdHlwZS5jaGVja1Bvc2l0aW9uPWZ1bmN0aW9uKCl7aWYodGhpcy4kZWxlbWVudC5pcygiOnZpc2libGUiKSl7dmFyIGI9dGhpcy4kZWxlbWVudC5oZWlnaHQoKSxkPXRoaXMub3B0aW9ucy5vZmZzZXQsZT1kLnRvcCxmPWQuYm90dG9tLGc9TWF0aC5tYXgoYShkb2N1bWVudCkuaGVpZ2h0KCksYShkb2N1bWVudC5ib2R5KS5oZWlnaHQoKSk7Im9iamVjdCIhPXR5cGVvZiBkJiYoZj1lPWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoZT1kLnRvcCh0aGlzLiRlbGVtZW50KSksImZ1bmN0aW9uIj09dHlwZW9mIGYmJihmPWQuYm90dG9tKHRoaXMuJGVsZW1lbnQpKTt2YXIgaD10aGlzLmdldFN0YXRlKGcsYixlLGYpO2lmKHRoaXMuYWZmaXhlZCE9aCl7bnVsbCE9dGhpcy51bnBpbiYmdGhpcy4kZWxlbWVudC5jc3MoInRvcCIsIiIpO3ZhciBpPSJhZmZpeCIrKGg/Ii0iK2g6IiIpLGo9YS5FdmVudChpKyIuYnMuYWZmaXgiKTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoaiksai5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dGhpcy5hZmZpeGVkPWgsdGhpcy51bnBpbj0iYm90dG9tIj09aD90aGlzLmdldFBpbm5lZE9mZnNldCgpOm51bGwsdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhjLlJFU0VUKS5hZGRDbGFzcyhpKS50cmlnZ2VyKGkucmVwbGFjZSgiYWZmaXgiLCJhZmZpeGVkIikrIi5icy5hZmZpeCIpfSJib3R0b20iPT1oJiZ0aGlzLiRlbGVtZW50Lm9mZnNldCh7dG9wOmctYi1mfSl9fTt2YXIgZD1hLmZuLmFmZml4O2EuZm4uYWZmaXg9YixhLmZuLmFmZml4LkNvbnN0cnVjdG9yPWMsYS5mbi5hZmZpeC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uYWZmaXg9ZCx0aGlzfSxhKHdpbmRvdykub24oImxvYWQiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PSJhZmZpeCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1jLmRhdGEoKTtkLm9mZnNldD1kLm9mZnNldHx8e30sbnVsbCE9ZC5vZmZzZXRCb3R0b20mJihkLm9mZnNldC5ib3R0b209ZC5vZmZzZXRCb3R0b20pLG51bGwhPWQub2Zmc2V0VG9wJiYoZC5vZmZzZXQudG9wPWQub2Zmc2V0VG9wKSxiLmNhbGwoYyxkKX0pfSl9KGpRdWVyeSk7CgovKioKICogU3RpY2t5IGpzCiAqLwooZnVuY3Rpb24oYSl7aWYodHlwZW9mIGRlZmluZT09PSJmdW5jdGlvbiImJmRlZmluZS5hbWQpe2RlZmluZShbImpxdWVyeSJdLGEpfWVsc2V7aWYodHlwZW9mIG1vZHVsZT09PSJvYmplY3QiJiZtb2R1bGUuZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9YShyZXF1aXJlKCJqcXVlcnkiKSl9ZWxzZXthKGpRdWVyeSl9fX0oZnVuY3Rpb24oZyl7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlO3ZhciBkPUFycmF5LnByb3RvdHlwZS5zcGxpY2U7dmFyIGY9e3RvcFNwYWNpbmc6MCxib3R0b21TcGFjaW5nOjAsY2xhc3NOYW1lOiJpcy1zdGlja3kiLHdyYXBwZXJDbGFzc05hbWU6InN0aWNreS13cmFwcGVyIixjZW50ZXI6ZmFsc2UsZ2V0V2lkdGhGcm9tOiIiLHdpZHRoRnJvbVdyYXBwZXI6dHJ1ZSxyZXNwb25zaXZlV2lkdGg6ZmFsc2V9LGI9Zyh3aW5kb3cpLGU9Zyhkb2N1bWVudCksaz1bXSxhPWIuaGVpZ2h0KCksaD1mdW5jdGlvbigpe3ZhciBtPWIuc2Nyb2xsVG9wKCksdz1lLmhlaWdodCgpLHY9dy1hLG89KG0+dik/di1tOjA7Zm9yKHZhciByPTAscD1rLmxlbmd0aDtyPHA7cisrKXt2YXIgeD1rW3JdLG49eC5zdGlja3lXcmFwcGVyLm9mZnNldCgpLnRvcCx0PW4teC50b3BTcGFjaW5nLW87eC5zdGlja3lXcmFwcGVyLmNzcygiaGVpZ2h0Iix4LnN0aWNreUVsZW1lbnQub3V0ZXJIZWlnaHQoKSk7aWYobTw9dCl7aWYoeC5jdXJyZW50VG9wIT09bnVsbCl7eC5zdGlja3lFbGVtZW50LmNzcyh7d2lkdGg6IiIscG9zaXRpb246IiIsdG9wOiIifSk7eC5zdGlja3lFbGVtZW50LnBhcmVudCgpLnJlbW92ZUNsYXNzKHguY2xhc3NOYW1lKTt4LnN0aWNreUVsZW1lbnQudHJpZ2dlcigic3RpY2t5LWVuZCIsW3hdKTt4LmN1cnJlbnRUb3A9bnVsbH19ZWxzZXt2YXIgdT13LXguc3RpY2t5RWxlbWVudC5vdXRlckhlaWdodCgpLXgudG9wU3BhY2luZy14LmJvdHRvbVNwYWNpbmctbS1vO2lmKHU8MCl7dT11K3gudG9wU3BhY2luZ31lbHNle3U9eC50b3BTcGFjaW5nfWlmKHguY3VycmVudFRvcCE9PXUpe3ZhciBxO2lmKHguZ2V0V2lkdGhGcm9tKXtxPWcoeC5nZXRXaWR0aEZyb20pLndpZHRoKCl8fG51bGx9ZWxzZXtpZih4LndpZHRoRnJvbVdyYXBwZXIpe3E9eC5zdGlja3lXcmFwcGVyLndpZHRoKCl9fWlmKHE9PW51bGwpe3E9eC5zdGlja3lFbGVtZW50LndpZHRoKCl9eC5zdGlja3lFbGVtZW50LmNzcygid2lkdGgiLHEpLmNzcygicG9zaXRpb24iLCJmaXhlZCIpLmNzcygidG9wIix1KTt4LnN0aWNreUVsZW1lbnQucGFyZW50KCkuYWRkQ2xhc3MoeC5jbGFzc05hbWUpO2lmKHguY3VycmVudFRvcD09PW51bGwpe3guc3RpY2t5RWxlbWVudC50cmlnZ2VyKCJzdGlja3ktc3RhcnQiLFt4XSl9ZWxzZXt4LnN0aWNreUVsZW1lbnQudHJpZ2dlcigic3RpY2t5LXVwZGF0ZSIsW3hdKX1pZih4LmN1cnJlbnRUb3A9PT14LnRvcFNwYWNpbmcmJnguY3VycmVudFRvcD51fHx4LmN1cnJlbnRUb3A9PT1udWxsJiZ1PHgudG9wU3BhY2luZyl7eC5zdGlja3lFbGVtZW50LnRyaWdnZXIoInN0aWNreS1ib3R0b20tcmVhY2hlZCIsW3hdKX1lbHNle2lmKHguY3VycmVudFRvcCE9PW51bGwmJnU9PT14LnRvcFNwYWNpbmcmJnguY3VycmVudFRvcDx1KXt4LnN0aWNreUVsZW1lbnQudHJpZ2dlcigic3RpY2t5LWJvdHRvbS11bnJlYWNoZWQiLFt4XSl9fXguY3VycmVudFRvcD11fX19fSxqPWZ1bmN0aW9uKCl7YT1iLmhlaWdodCgpO2Zvcih2YXIgbj0wLG09ay5sZW5ndGg7bjxtO24rKyl7dmFyIG89a1tuXTt2YXIgcD1udWxsO2lmKG8uZ2V0V2lkdGhGcm9tKXtpZihvLnJlc3BvbnNpdmVXaWR0aCl7cD1nKG8uZ2V0V2lkdGhGcm9tKS53aWR0aCgpfX1lbHNle2lmKG8ud2lkdGhGcm9tV3JhcHBlcil7cD1vLnN0aWNreVdyYXBwZXIud2lkdGgoKX19aWYocCE9bnVsbCl7by5zdGlja3lFbGVtZW50LmNzcygid2lkdGgiLHApfX19LGM9e2luaXQ6ZnVuY3Rpb24obCl7dmFyIG09Zy5leHRlbmQoe30sZixsKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG89Zyh0aGlzKTt2YXIgcD1vLmF0dHIoImlkIik7dmFyIG49by5vdXRlckhlaWdodCgpO3ZhciByPXA/cCsiLSIrZi53cmFwcGVyQ2xhc3NOYW1lOmYud3JhcHBlckNsYXNzTmFtZTt2YXIgcz1nKCI8ZGl2PjwvZGl2PiIpLmF0dHIoImlkIixyKS5hZGRDbGFzcyhtLndyYXBwZXJDbGFzc05hbWUpO28ud3JhcEFsbChzKTt2YXIgcT1vLnBhcmVudCgpO2lmKG0uY2VudGVyKXtxLmNzcyh7d2lkdGg6by5vdXRlcldpZHRoKCksbWFyZ2luTGVmdDoiYXV0byIsbWFyZ2luUmlnaHQ6ImF1dG8ifSl9aWYoby5jc3MoImZsb2F0Iik9PT0icmlnaHQiKXtvLmNzcyh7ImZsb2F0Ijoibm9uZSJ9KS5wYXJlbnQoKS5jc3MoeyJmbG9hdCI6InJpZ2h0In0pfXEuY3NzKCJoZWlnaHQiLG4pO20uc3RpY2t5RWxlbWVudD1vO20uc3RpY2t5V3JhcHBlcj1xO20uY3VycmVudFRvcD1udWxsO2sucHVzaChtKX0pfSx1cGRhdGU6aCx1bnN0aWNrOmZ1bmN0aW9uKGwpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcD10aGlzO3ZhciBuPWcocCk7dmFyIG09LTE7dmFyIG89ay5sZW5ndGg7d2hpbGUoby0tPjApe2lmKGtbb10uc3RpY2t5RWxlbWVudC5nZXQoMCk9PT1wKXtkLmNhbGwoayxvLDEpO209b319aWYobSE9PS0xKXtuLnVud3JhcCgpO24uY3NzKHt3aWR0aDoiIixwb3NpdGlvbjoiIix0b3A6IiIsImZsb2F0IjoiIn0pfX0pfX07aWYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLGgsZmFsc2UpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLGosZmFsc2UpfWVsc2V7aWYod2luZG93LmF0dGFjaEV2ZW50KXt3aW5kb3cuYXR0YWNoRXZlbnQoIm9uc2Nyb2xsIixoKTt3aW5kb3cuYXR0YWNoRXZlbnQoIm9ucmVzaXplIixqKX19Zy5mbi5zdGlja3k9ZnVuY3Rpb24obCl7aWYoY1tsXSl7cmV0dXJuIGNbbF0uYXBwbHkodGhpcyxpLmNhbGwoYXJndW1lbnRzLDEpKX1lbHNle2lmKHR5cGVvZiBsPT09Im9iamVjdCJ8fCFsKXtyZXR1cm4gYy5pbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1lbHNle2cuZXJyb3IoIk1ldGhvZCAiK2wrIiBkb2VzIG5vdCBleGlzdCBvbiBqUXVlcnkuc3RpY2t5Iil9fX07Zy5mbi51bnN0aWNrPWZ1bmN0aW9uKGwpe2lmKGNbbF0pe3JldHVybiBjW2xdLmFwcGx5KHRoaXMsaS5jYWxsKGFyZ3VtZW50cywxKSl9ZWxzZXtpZih0eXBlb2YgbD09PSJvYmplY3QifHwhbCl7cmV0dXJuIGMudW5zdGljay5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZWxzZXtnLmVycm9yKCJNZXRob2QgIitsKyIgZG9lcyBub3QgZXhpc3Qgb24galF1ZXJ5LnN0aWNreSIpfX19O2coZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGgsMCl9KX0pKTsKCi8qKgogKiBwcmV0dHkuanMKICovCnZhciBxPW51bGw7d2luZG93LlBSX1NIT1VMRF9VU0VfQ09OVElOVUFUSU9OPSEwOwooZnVuY3Rpb24oKXtmdW5jdGlvbiBMKGEpe2Z1bmN0aW9uIG0oYSl7dmFyIGY9YS5jaGFyQ29kZUF0KDApO2lmKGYhPT05MilyZXR1cm4gZjt2YXIgYj1hLmNoYXJBdCgxKTtyZXR1cm4oZj1yW2JdKT9mOiIwIjw9YiYmYjw9IjciP3BhcnNlSW50KGEuc3Vic3RyaW5nKDEpLDgpOmI9PT0idSJ8fGI9PT0ieCI/cGFyc2VJbnQoYS5zdWJzdHJpbmcoMiksMTYpOmEuY2hhckNvZGVBdCgxKX1mdW5jdGlvbiBlKGEpe2lmKGE8MzIpcmV0dXJuKGE8MTY/IlxceDAiOiJcXHgiKSthLnRvU3RyaW5nKDE2KTthPVN0cmluZy5mcm9tQ2hhckNvZGUoYSk7aWYoYT09PSJcXCJ8fGE9PT0iLSJ8fGE9PT0iWyJ8fGE9PT0iXSIpYT0iXFwiK2E7cmV0dXJuIGF9ZnVuY3Rpb24gaChhKXtmb3IodmFyIGY9YS5zdWJzdHJpbmcoMSxhLmxlbmd0aC0xKS5tYXRjaCgvXFx1W1xkQS1GYS1mXXs0fXxcXHhbXGRBLUZhLWZdezJ9fFxcWzAtM11bMC03XXswLDJ9fFxcWzAtN117MSwyfXxcXFtcU1xzXXxbXlxcXS9nKSxhPQogICAgW10sYj1bXSxvPWZbMF09PT0iXiIsYz1vPzE6MCxpPWYubGVuZ3RoO2M8aTsrK2Mpe3ZhciBqPWZbY107aWYoL1xcW2Jkc3ddL2kudGVzdChqKSlhLnB1c2goaik7ZWxzZXt2YXIgaj1tKGopLGQ7YysyPGkmJiItIj09PWZbYysxXT8oZD1tKGZbYysyXSksYys9Mik6ZD1qO2IucHVzaChbaixkXSk7ZDw2NXx8aj4xMjJ8fChkPDY1fHxqPjkwfHxiLnB1c2goW01hdGgubWF4KDY1LGopfDMyLE1hdGgubWluKGQsOTApfDMyXSksZDw5N3x8aj4xMjJ8fGIucHVzaChbTWF0aC5tYXgoOTcsaikmLTMzLE1hdGgubWluKGQsMTIyKSYtMzNdKSl9fWIuc29ydChmdW5jdGlvbihhLGYpe3JldHVybiBhWzBdLWZbMF18fGZbMV0tYVsxXX0pO2Y9W107aj1bTmFOLE5hTl07Zm9yKGM9MDtjPGIubGVuZ3RoOysrYylpPWJbY10saVswXTw9alsxXSsxP2pbMV09TWF0aC5tYXgoalsxXSxpWzFdKTpmLnB1c2goaj1pKTtiPVsiWyJdO28mJmIucHVzaCgiXiIpO2IucHVzaC5hcHBseShiLGEpO2ZvcihjPTA7YzwKZi5sZW5ndGg7KytjKWk9ZltjXSxiLnB1c2goZShpWzBdKSksaVsxXT5pWzBdJiYoaVsxXSsxPmlbMF0mJmIucHVzaCgiLSIpLGIucHVzaChlKGlbMV0pKSk7Yi5wdXNoKCJdIik7cmV0dXJuIGIuam9pbigiIil9ZnVuY3Rpb24geShhKXtmb3IodmFyIGY9YS5zb3VyY2UubWF0Y2goL1xbKD86W15cXFxdXXxcXFtcU1xzXSkqXXxcXHVbXGRBLUZhLWZdezR9fFxceFtcZEEtRmEtZl17Mn18XFxcZCt8XFxbXlxkdXhdfFwoXD9bITo9XXxbKCleXXxbXigpW1xcXl0rL2cpLGI9Zi5sZW5ndGgsZD1bXSxjPTAsaT0wO2M8YjsrK2Mpe3ZhciBqPWZbY107aj09PSIoIj8rK2k6IlxcIj09PWouY2hhckF0KDApJiYoaj0rai5zdWJzdHJpbmcoMSkpJiZqPD1pJiYoZFtqXT0tMSl9Zm9yKGM9MTtjPGQubGVuZ3RoOysrYyktMT09PWRbY10mJihkW2NdPSsrdCk7Zm9yKGk9Yz0wO2M8YjsrK2Mpaj1mW2NdLGo9PT0iKCI/KCsraSxkW2ldPT09dm9pZCAwJiYoZltjXT0iKD86IikpOiJcXCI9PT1qLmNoYXJBdCgwKSYmCihqPStqLnN1YnN0cmluZygxKSkmJmo8PWkmJihmW2NdPSJcXCIrZFtpXSk7Zm9yKGk9Yz0wO2M8YjsrK2MpIl4iPT09ZltjXSYmIl4iIT09ZltjKzFdJiYoZltjXT0iIik7aWYoYS5pZ25vcmVDYXNlJiZzKWZvcihjPTA7YzxiOysrYylqPWZbY10sYT1qLmNoYXJBdCgwKSxqLmxlbmd0aD49MiYmYT09PSJbIj9mW2NdPWgoaik6YSE9PSJcXCImJihmW2NdPWoucmVwbGFjZSgvW0EtWmEtel0vZyxmdW5jdGlvbihhKXthPWEuY2hhckNvZGVBdCgwKTtyZXR1cm4iWyIrU3RyaW5nLmZyb21DaGFyQ29kZShhJi0zMyxhfDMyKSsiXSJ9KSk7cmV0dXJuIGYuam9pbigiIil9Zm9yKHZhciB0PTAscz0hMSxsPSExLHA9MCxkPWEubGVuZ3RoO3A8ZDsrK3Ape3ZhciBnPWFbcF07aWYoZy5pZ25vcmVDYXNlKWw9ITA7ZWxzZSBpZigvW2Etel0vaS50ZXN0KGcuc291cmNlLnJlcGxhY2UoL1xcdVtcZGEtZl17NH18XFx4W1xkYS1mXXsyfXxcXFteVVh1eF0vZ2ksIiIpKSl7cz0hMDtsPSExO2JyZWFrfX1mb3IodmFyIHI9CntiOjgsdDo5LG46MTAsdjoxMSxmOjEyLHI6MTN9LG49W10scD0wLGQ9YS5sZW5ndGg7cDxkOysrcCl7Zz1hW3BdO2lmKGcuZ2xvYmFsfHxnLm11bHRpbGluZSl0aHJvdyBFcnJvcigiIitnKTtuLnB1c2goIig/OiIreShnKSsiKSIpfXJldHVybiBSZWdFeHAobi5qb2luKCJ8IiksbD8iZ2kiOiJnIil9ZnVuY3Rpb24gTShhKXtmdW5jdGlvbiBtKGEpe3N3aXRjaChhLm5vZGVUeXBlKXtjYXNlIDE6aWYoZS50ZXN0KGEuY2xhc3NOYW1lKSlicmVhaztmb3IodmFyIGc9YS5maXJzdENoaWxkO2c7Zz1nLm5leHRTaWJsaW5nKW0oZyk7Zz1hLm5vZGVOYW1lO2lmKCJCUiI9PT1nfHwiTEkiPT09ZyloW3NdPSJcbiIsdFtzPDwxXT15KyssdFtzKys8PDF8MV09YTticmVhaztjYXNlIDM6Y2FzZSA0Omc9YS5ub2RlVmFsdWUsZy5sZW5ndGgmJihnPXA/Zy5yZXBsYWNlKC9cclxuPy9nLCJcbiIpOmcucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIiksaFtzXT1nLHRbczw8MV09eSx5Kz1nLmxlbmd0aCwKICAgIHRbcysrPDwxfDFdPWEpfX12YXIgZT0vKD86Xnxccylub2NvZGUoPzpcc3wkKS8saD1bXSx5PTAsdD1bXSxzPTAsbDthLmN1cnJlbnRTdHlsZT9sPWEuY3VycmVudFN0eWxlLndoaXRlU3BhY2U6d2luZG93LmdldENvbXB1dGVkU3R5bGUmJihsPWRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYSxxKS5nZXRQcm9wZXJ0eVZhbHVlKCJ3aGl0ZS1zcGFjZSIpKTt2YXIgcD1sJiYicHJlIj09PWwuc3Vic3RyaW5nKDAsMyk7bShhKTtyZXR1cm57YTpoLmpvaW4oIiIpLnJlcGxhY2UoL1xuJC8sIiIpLGM6dH19ZnVuY3Rpb24gQihhLG0sZSxoKXttJiYoYT17YTptLGQ6YX0sZShhKSxoLnB1c2guYXBwbHkoaCxhLmUpKX1mdW5jdGlvbiB4KGEsbSl7ZnVuY3Rpb24gZShhKXtmb3IodmFyIGw9YS5kLHA9W2wsInBsbiJdLGQ9MCxnPWEuYS5tYXRjaCh5KXx8W10scj17fSxuPTAsej1nLmxlbmd0aDtuPHo7KytuKXt2YXIgZj1nW25dLGI9cltmXSxvPXZvaWQgMCxjO2lmKHR5cGVvZiBiPT09CiAgICAic3RyaW5nIiljPSExO2Vsc2V7dmFyIGk9aFtmLmNoYXJBdCgwKV07aWYoaSlvPWYubWF0Y2goaVsxXSksYj1pWzBdO2Vsc2V7Zm9yKGM9MDtjPHQ7KytjKWlmKGk9bVtjXSxvPWYubWF0Y2goaVsxXSkpe2I9aVswXTticmVha31vfHwoYj0icGxuIil9aWYoKGM9Yi5sZW5ndGg+PTUmJiJsYW5nLSI9PT1iLnN1YnN0cmluZygwLDUpKSYmIShvJiZ0eXBlb2Ygb1sxXT09PSJzdHJpbmciKSljPSExLGI9InNyYyI7Y3x8KHJbZl09Yil9aT1kO2QrPWYubGVuZ3RoO2lmKGMpe2M9b1sxXTt2YXIgaj1mLmluZGV4T2YoYyksaz1qK2MubGVuZ3RoO29bMl0mJihrPWYubGVuZ3RoLW9bMl0ubGVuZ3RoLGo9ay1jLmxlbmd0aCk7Yj1iLnN1YnN0cmluZyg1KTtCKGwraSxmLnN1YnN0cmluZygwLGopLGUscCk7QihsK2kraixjLEMoYixjKSxwKTtCKGwraStrLGYuc3Vic3RyaW5nKGspLGUscCl9ZWxzZSBwLnB1c2gobCtpLGIpfWEuZT1wfXZhciBoPXt9LHk7KGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWEuY29uY2F0KG0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbD1bXSxwPXt9LGQ9MCxnPWUubGVuZ3RoO2Q8ZzsrK2Qpe3ZhciByPWVbZF0sbj1yWzNdO2lmKG4pZm9yKHZhciBrPW4ubGVuZ3RoOy0taz49MDspaFtuLmNoYXJBdChrKV09cjtyPXJbMV07bj0iIityO3AuaGFzT3duUHJvcGVydHkobil8fChsLnB1c2gocikscFtuXT1xKX1sLnB1c2goL1tcU1xzXS8pO3k9TChsKX0pKCk7dmFyIHQ9bS5sZW5ndGg7cmV0dXJuIGV9ZnVuY3Rpb24gdShhKXt2YXIgbT1bXSxlPVtdO2EudHJpcGxlUXVvdGVkU3RyaW5ncz9tLnB1c2goWyJzdHIiLC9eKD86JycnKD86W14nXFxdfFxcW1xTXHNdfCcnPyg/PVteJ10pKSooPzonJyd8JCl8IiIiKD86W14iXFxdfFxcW1xTXHNdfCIiPyg/PVteIl0pKSooPzoiIiJ8JCl8Jyg/OlteJ1xcXXxcXFtcU1xzXSkqKD86J3wkKXwiKD86W14iXFxdfFxcW1xTXHNdKSooPzoifCQpKS8scSwiJ1wiIl0pOmEubXVsdGlMaW5lU3RyaW5ncz9tLnB1c2goWyJzdHIiLC9eKD86Jyg/OlteJ1xcXXxcXFtcU1xzXSkqKD86J3wkKXwiKD86W14iXFxdfFxcW1xTXHNdKSooPzoifCQpfGAoPzpbXlxcYF18XFxbXFNcc10pKig/OmB8JCkpLywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLCInXCJgIl0pOm0ucHVzaChbInN0ciIsL14oPzonKD86W15cblxyJ1xcXXxcXC4pKig/Oid8JCl8Iig/OlteXG5cciJcXF18XFwuKSooPzoifCQpKS8scSwiXCInIl0pO2EudmVyYmF0aW1TdHJpbmdzJiZlLnB1c2goWyJzdHIiLC9eQCIoPzpbXiJdfCIiKSooPzoifCQpLyxxXSk7dmFyIGg9YS5oYXNoQ29tbWVudHM7aCYmKGEuY1N0eWxlQ29tbWVudHM/KGg+MT9tLnB1c2goWyJjb20iLC9eIyg/OiMjKD86W14jXXwjKD8hIyMpKSooPzojIyN8JCl8LiopLyxxLCIjIl0pOm0ucHVzaChbImNvbSIsL14jKD86KD86ZGVmaW5lfGVsaWZ8ZWxzZXxlbmRpZnxlcnJvcnxpZmRlZnxpbmNsdWRlfGlmbmRlZnxsaW5lfHByYWdtYXx1bmRlZnx3YXJuaW5nKVxifFteXG5ccl0qKS8scSwiIyJdKSxlLnB1c2goWyJzdHIiLC9ePCg/Oig/Oig/OlwuXC5cLykqfFwvPykoPzpbXHctXSsoPzpcL1tcdy1dKykrKT9bXHctXStcLmh8W2Etel1cdyopPi8scV0pKTptLnB1c2goWyJjb20iLC9eI1teXG5ccl0qLywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEsIiMiXSkpO2EuY1N0eWxlQ29tbWVudHMmJihlLnB1c2goWyJjb20iLC9eXC9cL1teXG5ccl0qLyxxXSksZS5wdXNoKFsiY29tIiwvXlwvXCpbXFNcc10qPyg/OlwqXC98JCkvLHFdKSk7YS5yZWdleExpdGVyYWxzJiZlLnB1c2goWyJsYW5nLXJlZ2V4IiwvXig/Ol5eXC4/fFshKy1dfCE9fCE9PXwjfCV8JT18JnwmJnwmJj18Jj18XCh8XCp8XCo9fFwrPXwsfC09fC0+fFwvfFwvPXw6fDo6fDt8PHw8PHw8PD18PD18PXw9PXw9PT18Pnw+PXw+Pnw+Pj18Pj4+fD4+Pj18Wz9AW15dfFxePXxcXlxefFxeXF49fHt8XHx8XHw9fFx8XHx8XHxcfD18fnxicmVha3xjYXNlfGNvbnRpbnVlfGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZilccyooXC8oPz1bXiovXSkoPzpbXi9bXFxdfFxcW1xTXHNdfFxbKD86W15cXFxdXXxcXFtcU1xzXSkqKD86XXwkKSkrXC8pL10pOyhoPWEudHlwZXMpJiZlLnB1c2goWyJ0eXAiLGhdKTthPSgiIithLmtleXdvcmRzKS5yZXBsYWNlKC9eIHwgJC9nLAogICAgIiIpO2EubGVuZ3RoJiZlLnB1c2goWyJrd2QiLFJlZ0V4cCgiXig/OiIrYS5yZXBsYWNlKC9bXHMsXSsvZywifCIpKyIpXFxiIikscV0pO20ucHVzaChbInBsbiIsL15ccysvLHEsIiBcclxuXHRceGEwIl0pO2UucHVzaChbImxpdCIsL15AWyRfYS16XVtcdyRAXSovaSxxXSxbInR5cCIsL14oPzpbQF9dP1tBLVpdK1thLXpdW1x3JEBdKnxcdytfdFxiKS8scV0sWyJwbG4iLC9eWyRfYS16XVtcdyRAXSovaSxxXSxbImxpdCIsL14oPzoweFtcZGEtZl0rfCg/OlxkKD86X1xkKykqXGQqKD86XC5cZCopP3xcLlxkXCspKD86ZVsrLV0/XGQrKT8pW2Etel0qL2kscSwiMDEyMzQ1Njc4OSJdLFsicGxuIiwvXlxcW1xTXHNdPy8scV0sWyJwdW4iLC9eLlteXHNcdyItJCcuL0BcXGBdKi8scV0pO3JldHVybiB4KG0sZSl9ZnVuY3Rpb24gRChhLG0pe2Z1bmN0aW9uIGUoYSl7c3dpdGNoKGEubm9kZVR5cGUpe2Nhc2UgMTppZihrLnRlc3QoYS5jbGFzc05hbWUpKWJyZWFrO2lmKCJCUiI9PT1hLm5vZGVOYW1lKWgoYSksCmEucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpO2Vsc2UgZm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWUoYSk7YnJlYWs7Y2FzZSAzOmNhc2UgNDppZihwKXt2YXIgYj1hLm5vZGVWYWx1ZSxkPWIubWF0Y2godCk7aWYoZCl7dmFyIGM9Yi5zdWJzdHJpbmcoMCxkLmluZGV4KTthLm5vZGVWYWx1ZT1jOyhiPWIuc3Vic3RyaW5nKGQuaW5kZXgrZFswXS5sZW5ndGgpKSYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzLmNyZWF0ZVRleHROb2RlKGIpLGEubmV4dFNpYmxpbmcpO2goYSk7Y3x8YS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpfX19fWZ1bmN0aW9uIGgoYSl7ZnVuY3Rpb24gYihhLGQpe3ZhciBlPWQ/YS5jbG9uZU5vZGUoITEpOmEsZj1hLnBhcmVudE5vZGU7aWYoZil7dmFyIGY9YihmLDEpLGc9YS5uZXh0U2libGluZztmLmFwcGVuZENoaWxkKGUpO2Zvcih2YXIgaD1nO2g7aD1nKWc9aC5uZXh0U2libGluZyxmLmFwcGVuZENoaWxkKGgpfXJldHVybiBlfQogICAgZm9yKDshYS5uZXh0U2libGluZzspaWYoYT1hLnBhcmVudE5vZGUsIWEpcmV0dXJuO2Zvcih2YXIgYT1iKGEubmV4dFNpYmxpbmcsMCksZTsoZT1hLnBhcmVudE5vZGUpJiZlLm5vZGVUeXBlPT09MTspYT1lO2QucHVzaChhKX12YXIgaz0vKD86Xnxccylub2NvZGUoPzpcc3wkKS8sdD0vXHJcbj98XG4vLHM9YS5vd25lckRvY3VtZW50LGw7YS5jdXJyZW50U3R5bGU/bD1hLmN1cnJlbnRTdHlsZS53aGl0ZVNwYWNlOndpbmRvdy5nZXRDb21wdXRlZFN0eWxlJiYobD1zLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYSxxKS5nZXRQcm9wZXJ0eVZhbHVlKCJ3aGl0ZS1zcGFjZSIpKTt2YXIgcD1sJiYicHJlIj09PWwuc3Vic3RyaW5nKDAsMyk7Zm9yKGw9cy5jcmVhdGVFbGVtZW50KCJMSSIpO2EuZmlyc3RDaGlsZDspbC5hcHBlbmRDaGlsZChhLmZpcnN0Q2hpbGQpO2Zvcih2YXIgZD1bbF0sZz0wO2c8ZC5sZW5ndGg7KytnKWUoZFtnXSk7bT09PShtfDApJiZkWzBdLnNldEF0dHJpYnV0ZSgidmFsdWUiLAogICAgbSk7dmFyIHI9cy5jcmVhdGVFbGVtZW50KCJPTCIpO3IuY2xhc3NOYW1lPSJsaW5lbnVtcyI7Zm9yKHZhciBuPU1hdGgubWF4KDAsbS0xfDApfHwwLGc9MCx6PWQubGVuZ3RoO2c8ejsrK2cpbD1kW2ddLGwuY2xhc3NOYW1lPSJMIisoZytuKSUxMCxsLmZpcnN0Q2hpbGR8fGwuYXBwZW5kQ2hpbGQocy5jcmVhdGVUZXh0Tm9kZSgiXHhhMCIpKSxyLmFwcGVuZENoaWxkKGwpO2EuYXBwZW5kQ2hpbGQocil9ZnVuY3Rpb24gayhhLG0pe2Zvcih2YXIgZT1tLmxlbmd0aDstLWU+PTA7KXt2YXIgaD1tW2VdO0EuaGFzT3duUHJvcGVydHkoaCk/d2luZG93LmNvbnNvbGUmJmNvbnNvbGUud2FybigiY2Fubm90IG92ZXJyaWRlIGxhbmd1YWdlIGhhbmRsZXIgJXMiLGgpOkFbaF09YX19ZnVuY3Rpb24gQyhhLG0pe2lmKCFhfHwhQS5oYXNPd25Qcm9wZXJ0eShhKSlhPS9eXHMqPC8udGVzdChtKT8iZGVmYXVsdC1tYXJrdXAiOiJkZWZhdWx0LWNvZGUiO3JldHVybiBBW2FdfWZ1bmN0aW9uIEUoYSl7dmFyIG09CiAgICBhLmc7dHJ5e3ZhciBlPU0oYS5oKSxoPWUuYTthLmE9aDthLmM9ZS5jO2EuZD0wO0MobSxoKShhKTt2YXIgaz0vXGJNU0lFXGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksbT0vXG4vZyx0PWEuYSxzPXQubGVuZ3RoLGU9MCxsPWEuYyxwPWwubGVuZ3RoLGg9MCxkPWEuZSxnPWQubGVuZ3RoLGE9MDtkW2ddPXM7dmFyIHIsbjtmb3Iobj1yPTA7bjxnOylkW25dIT09ZFtuKzJdPyhkW3IrK109ZFtuKytdLGRbcisrXT1kW24rK10pOm4rPTI7Zz1yO2ZvcihuPXI9MDtuPGc7KXtmb3IodmFyIHo9ZFtuXSxmPWRbbisxXSxiPW4rMjtiKzI8PWcmJmRbYisxXT09PWY7KWIrPTI7ZFtyKytdPXo7ZFtyKytdPWY7bj1ifWZvcihkLmxlbmd0aD1yO2g8cDspe3ZhciBvPWxbaCsyXXx8cyxjPWRbYSsyXXx8cyxiPU1hdGgubWluKG8sYyksaT1sW2grMV0sajtpZihpLm5vZGVUeXBlIT09MSYmKGo9dC5zdWJzdHJpbmcoZSxiKSkpe2smJihqPWoucmVwbGFjZShtLCJcciIpKTtpLm5vZGVWYWx1ZT0KICAgIGo7dmFyIHU9aS5vd25lckRvY3VtZW50LHY9dS5jcmVhdGVFbGVtZW50KCJTUEFOIik7di5jbGFzc05hbWU9ZFthKzFdO3ZhciB4PWkucGFyZW50Tm9kZTt4LnJlcGxhY2VDaGlsZCh2LGkpO3YuYXBwZW5kQ2hpbGQoaSk7ZTxvJiYobFtoKzFdPWk9dS5jcmVhdGVUZXh0Tm9kZSh0LnN1YnN0cmluZyhiLG8pKSx4Lmluc2VydEJlZm9yZShpLHYubmV4dFNpYmxpbmcpKX1lPWI7ZT49byYmKGgrPTIpO2U+PWMmJihhKz0yKX19Y2F0Y2godyl7ImNvbnNvbGUiaW4gd2luZG93JiZjb25zb2xlLmxvZyh3JiZ3LnN0YWNrP3cuc3RhY2s6dyl9fXZhciB2PVsiYnJlYWssY29udGludWUsZG8sZWxzZSxmb3IsaWYscmV0dXJuLHdoaWxlIl0sdz1bW3YsImF1dG8sY2FzZSxjaGFyLGNvbnN0LGRlZmF1bHQsZG91YmxlLGVudW0sZXh0ZXJuLGZsb2F0LGdvdG8saW50LGxvbmcscmVnaXN0ZXIsc2hvcnQsc2lnbmVkLHNpemVvZixzdGF0aWMsc3RydWN0LHN3aXRjaCx0eXBlZGVmLHVuaW9uLHVuc2lnbmVkLHZvaWQsdm9sYXRpbGUiXSwKICAgICAgICAiY2F0Y2gsY2xhc3MsZGVsZXRlLGZhbHNlLGltcG9ydCxuZXcsb3BlcmF0b3IscHJpdmF0ZSxwcm90ZWN0ZWQscHVibGljLHRoaXMsdGhyb3csdHJ1ZSx0cnksdHlwZW9mIl0sRj1bdywiYWxpZ25vZixhbGlnbl91bmlvbixhc20sYXhpb20sYm9vbCxjb25jZXB0LGNvbmNlcHRfbWFwLGNvbnN0X2Nhc3QsY29uc3RleHByLGRlY2x0eXBlLGR5bmFtaWNfY2FzdCxleHBsaWNpdCxleHBvcnQsZnJpZW5kLGlubGluZSxsYXRlX2NoZWNrLG11dGFibGUsbmFtZXNwYWNlLG51bGxwdHIscmVpbnRlcnByZXRfY2FzdCxzdGF0aWNfYXNzZXJ0LHN0YXRpY19jYXN0LHRlbXBsYXRlLHR5cGVpZCx0eXBlbmFtZSx1c2luZyx2aXJ0dWFsLHdoZXJlIl0sRz1bdywiYWJzdHJhY3QsYm9vbGVhbixieXRlLGV4dGVuZHMsZmluYWwsZmluYWxseSxpbXBsZW1lbnRzLGltcG9ydCxpbnN0YW5jZW9mLG51bGwsbmF0aXZlLHBhY2thZ2Usc3RyaWN0ZnAsc3VwZXIsc3luY2hyb25pemVkLHRocm93cyx0cmFuc2llbnQiXSwKICAgIEg9W0csImFzLGJhc2UsYnksY2hlY2tlZCxkZWNpbWFsLGRlbGVnYXRlLGRlc2NlbmRpbmcsZHluYW1pYyxldmVudCxmaXhlZCxmb3JlYWNoLGZyb20sZ3JvdXAsaW1wbGljaXQsaW4saW50ZXJmYWNlLGludGVybmFsLGludG8saXMsbG9jayxvYmplY3Qsb3V0LG92ZXJyaWRlLG9yZGVyYnkscGFyYW1zLHBhcnRpYWwscmVhZG9ubHkscmVmLHNieXRlLHNlYWxlZCxzdGFja2FsbG9jLHN0cmluZyxzZWxlY3QsdWludCx1bG9uZyx1bmNoZWNrZWQsdW5zYWZlLHVzaG9ydCx2YXIiXSx3PVt3LCJkZWJ1Z2dlcixldmFsLGV4cG9ydCxmdW5jdGlvbixnZXQsbnVsbCxzZXQsdW5kZWZpbmVkLHZhcix3aXRoLEluZmluaXR5LE5hTiJdLEk9W3YsImFuZCxhcyxhc3NlcnQsY2xhc3MsZGVmLGRlbCxlbGlmLGV4Y2VwdCxleGVjLGZpbmFsbHksZnJvbSxnbG9iYWwsaW1wb3J0LGluLGlzLGxhbWJkYSxub25sb2NhbCxub3Qsb3IscGFzcyxwcmludCxyYWlzZSx0cnksd2l0aCx5aWVsZCxGYWxzZSxUcnVlLE5vbmUiXSwKICAgIEo9W3YsImFsaWFzLGFuZCxiZWdpbixjYXNlLGNsYXNzLGRlZixkZWZpbmVkLGVsc2lmLGVuZCxlbnN1cmUsZmFsc2UsaW4sbW9kdWxlLG5leHQsbmlsLG5vdCxvcixyZWRvLHJlc2N1ZSxyZXRyeSxzZWxmLHN1cGVyLHRoZW4sdHJ1ZSx1bmRlZix1bmxlc3MsdW50aWwsd2hlbix5aWVsZCxCRUdJTixFTkQiXSx2PVt2LCJjYXNlLGRvbmUsZWxpZixlc2FjLGV2YWwsZmksZnVuY3Rpb24saW4sbG9jYWwsc2V0LHRoZW4sdW50aWwiXSxLPS9eKERJUnxGSUxFfHZlY3RvcnwoZGV8cHJpb3JpdHlfKT9xdWV1ZXxsaXN0fHN0YWNrfChjb25zdF8pP2l0ZXJhdG9yfChtdWx0aSk/KHNldHxtYXApfGJpdHNldHx1PyhpbnR8ZmxvYXQpXGQqKS8sTj0vXFMvLE89dSh7a2V5d29yZHM6W0YsSCx3LCJjYWxsZXIsZGVsZXRlLGRpZSxkbyxkdW1wLGVsc2lmLGV2YWwsZXhpdCxmb3JlYWNoLGZvcixnb3RvLGlmLGltcG9ydCxsYXN0LGxvY2FsLG15LG5leHQsbm8sb3VyLHByaW50LHBhY2thZ2UscmVkbyxyZXF1aXJlLHN1Yix1bmRlZix1bmxlc3MsdW50aWwsdXNlLHdhbnRhcnJheSx3aGlsZSxCRUdJTixFTkQiKwogICAgSSxKLHZdLGhhc2hDb21tZW50czohMCxjU3R5bGVDb21tZW50czohMCxtdWx0aUxpbmVTdHJpbmdzOiEwLHJlZ2V4TGl0ZXJhbHM6ITB9KSxBPXt9O2soTyxbImRlZmF1bHQtY29kZSJdKTtrKHgoW10sW1sicGxuIiwvXltePD9dKy9dLFsiZGVjIiwvXjwhXHdbXj5dKig/Oj58JCkvXSxbImNvbSIsL148XCEtLVtcU1xzXSo/KD86LS1cPnwkKS9dLFsibGFuZy0iLC9ePFw/KFtcU1xzXSs/KSg/Olw/PnwkKS9dLFsibGFuZy0iLC9ePCUoW1xTXHNdKz8pKD86JT58JCkvXSxbInB1biIsL14oPzo8WyU/XXxbJT9dPikvXSxbImxhbmctIiwvXjx4bXBcYltePl0qPihbXFNcc10rPyk8XC94bXBcYltePl0qPi9pXSxbImxhbmctanMiLC9ePHNjcmlwdFxiW14+XSo+KFtcU1xzXSo/KSg8XC9zY3JpcHRcYltePl0qPikvaV0sWyJsYW5nLWNzcyIsL148c3R5bGVcYltePl0qPihbXFNcc10qPykoPFwvc3R5bGVcYltePl0qPikvaV0sWyJsYW5nLWluLnRhZyIsL14oPFwvP1thLXpdW148Pl0qPikvaV1dKSwKICAgIFsiZGVmYXVsdC1tYXJrdXAiLCJodG0iLCJodG1sIiwibXhtbCIsInhodG1sIiwieG1sIiwieHNsIl0pO2soeChbWyJwbG4iLC9eXHMrLyxxLCIgXHRcclxuIl0sWyJhdHYiLC9eKD86IlteIl0qIj98J1teJ10qJz8pLyxxLCJcIiciXV0sW1sidGFnIiwvXl48XC8/W2Etel0oPzpbXHctLjpdKlx3KT98XC8/PiQvaV0sWyJhdG4iLC9eKD8hc3R5bGVbXHM9XXxvbilbYS16XSg/OltcdzotXSpcdyk/L2ldLFsibGFuZy11cS52YWwiLC9ePVxzKihbXlxzIic+XSooPzpbXlxzIicvPl18XC8oPz1ccykpKS9dLFsicHVuIiwvXlsvPC0+XSsvXSxbImxhbmctanMiLC9eb25cdytccyo9XHMqIihbXiJdKykiL2ldLFsibGFuZy1qcyIsL15vblx3K1xzKj1ccyonKFteJ10rKScvaV0sWyJsYW5nLWpzIiwvXm9uXHcrXHMqPVxzKihbXlxzIic+XSspL2ldLFsibGFuZy1jc3MiLC9ec3R5bGVccyo9XHMqIihbXiJdKykiL2ldLFsibGFuZy1jc3MiLC9ec3R5bGVccyo9XHMqJyhbXiddKyknL2ldLFsibGFuZy1jc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9ec3R5bGVccyo9XHMqKFteXHMiJz5dKykvaV1dKSxbImluLnRhZyJdKTtrKHgoW10sW1siYXR2IiwvXltcU1xzXSsvXV0pLFsidXEudmFsIl0pO2sodSh7a2V5d29yZHM6RixoYXNoQ29tbWVudHM6ITAsY1N0eWxlQ29tbWVudHM6ITAsdHlwZXM6S30pLFsiYyIsImNjIiwiY3BwIiwiY3h4IiwiY3ljIiwibSJdKTtrKHUoe2tleXdvcmRzOiJudWxsLHRydWUsZmFsc2UifSksWyJqc29uIl0pO2sodSh7a2V5d29yZHM6SCxoYXNoQ29tbWVudHM6ITAsY1N0eWxlQ29tbWVudHM6ITAsdmVyYmF0aW1TdHJpbmdzOiEwLHR5cGVzOkt9KSxbImNzIl0pO2sodSh7a2V5d29yZHM6RyxjU3R5bGVDb21tZW50czohMH0pLFsiamF2YSJdKTtrKHUoe2tleXdvcmRzOnYsaGFzaENvbW1lbnRzOiEwLG11bHRpTGluZVN0cmluZ3M6ITB9KSxbImJzaCIsImNzaCIsInNoIl0pO2sodSh7a2V5d29yZHM6SSxoYXNoQ29tbWVudHM6ITAsbXVsdGlMaW5lU3RyaW5nczohMCx0cmlwbGVRdW90ZWRTdHJpbmdzOiEwfSksCiAgICBbImN2IiwicHkiXSk7ayh1KHtrZXl3b3JkczoiY2FsbGVyLGRlbGV0ZSxkaWUsZG8sZHVtcCxlbHNpZixldmFsLGV4aXQsZm9yZWFjaCxmb3IsZ290byxpZixpbXBvcnQsbGFzdCxsb2NhbCxteSxuZXh0LG5vLG91cixwcmludCxwYWNrYWdlLHJlZG8scmVxdWlyZSxzdWIsdW5kZWYsdW5sZXNzLHVudGlsLHVzZSx3YW50YXJyYXksd2hpbGUsQkVHSU4sRU5EIixoYXNoQ29tbWVudHM6ITAsbXVsdGlMaW5lU3RyaW5nczohMCxyZWdleExpdGVyYWxzOiEwfSksWyJwZXJsIiwicGwiLCJwbSJdKTtrKHUoe2tleXdvcmRzOkosaGFzaENvbW1lbnRzOiEwLG11bHRpTGluZVN0cmluZ3M6ITAscmVnZXhMaXRlcmFsczohMH0pLFsicmIiXSk7ayh1KHtrZXl3b3Jkczp3LGNTdHlsZUNvbW1lbnRzOiEwLHJlZ2V4TGl0ZXJhbHM6ITB9KSxbImpzIl0pO2sodSh7a2V5d29yZHM6ImFsbCxhbmQsYnksY2F0Y2gsY2xhc3MsZWxzZSxleHRlbmRzLGZhbHNlLGZpbmFsbHksZm9yLGlmLGluLGlzLGlzbnQsbG9vcCxuZXcsbm8sbm90LG51bGwsb2Ysb2ZmLG9uLG9yLHJldHVybixzdXBlcix0aGVuLHRydWUsdHJ5LHVubGVzcyx1bnRpbCx3aGVuLHdoaWxlLHllcyIsCiAgICBoYXNoQ29tbWVudHM6MyxjU3R5bGVDb21tZW50czohMCxtdWx0aWxpbmVTdHJpbmdzOiEwLHRyaXBsZVF1b3RlZFN0cmluZ3M6ITAscmVnZXhMaXRlcmFsczohMH0pLFsiY29mZmVlIl0pO2soeChbXSxbWyJzdHIiLC9eW1xTXHNdKy9dXSksWyJyZWdleCJdKTt3aW5kb3cucHJldHR5UHJpbnRPbmU9ZnVuY3Rpb24oYSxtLGUpe3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlBSRSIpO2guaW5uZXJIVE1MPWE7ZSYmRChoLGUpO0Uoe2c6bSxpOmUsaDpofSk7cmV0dXJuIGguaW5uZXJIVE1MfTt3aW5kb3cucHJldHR5UHJpbnQ9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gbSgpe2Zvcih2YXIgZT13aW5kb3cuUFJfU0hPVUxEX1VTRV9DT05USU5VQVRJT04/bC5ub3coKSsyNTA6SW5maW5pdHk7cDxoLmxlbmd0aCYmbC5ub3coKTxlO3ArKyl7dmFyIG49aFtwXSxrPW4uY2xhc3NOYW1lO2lmKGsuaW5kZXhPZigicHJldHR5cHJpbnQiKT49MCl7dmFyIGs9ay5tYXRjaChnKSxmLGI7aWYoYj0KICAgICAgICAhayl7Yj1uO2Zvcih2YXIgbz12b2lkIDAsYz1iLmZpcnN0Q2hpbGQ7YztjPWMubmV4dFNpYmxpbmcpdmFyIGk9Yy5ub2RlVHlwZSxvPWk9PT0xP28/YjpjOmk9PT0zP04udGVzdChjLm5vZGVWYWx1ZSk/YjpvOm87Yj0oZj1vPT09Yj92b2lkIDA6bykmJiJDT0RFIj09PWYudGFnTmFtZX1iJiYoaz1mLmNsYXNzTmFtZS5tYXRjaChnKSk7ayYmKGs9a1sxXSk7Yj0hMTtmb3Iobz1uLnBhcmVudE5vZGU7bztvPW8ucGFyZW50Tm9kZSlpZigoby50YWdOYW1lPT09InByZSJ8fG8udGFnTmFtZT09PSJjb2RlInx8by50YWdOYW1lPT09InhtcCIpJiZvLmNsYXNzTmFtZSYmby5jbGFzc05hbWUuaW5kZXhPZigicHJldHR5cHJpbnQiKT49MCl7Yj0hMDticmVha31ifHwoKGI9KGI9bi5jbGFzc05hbWUubWF0Y2goL1xibGluZW51bXNcYig/OjooXGQrKSk/LykpP2JbMV0mJmJbMV0ubGVuZ3RoPytiWzFdOiEwOiExKSYmRChuLGIpLGQ9e2c6ayxoOm4saTpifSxFKGQpKX19cDxoLmxlbmd0aD9zZXRUaW1lb3V0KG0sCiAgICAyNTApOmEmJmEoKX1mb3IodmFyIGU9W2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwcmUiKSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY29kZSIpLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ4bXAiKV0saD1bXSxrPTA7azxlLmxlbmd0aDsrK2spZm9yKHZhciB0PTAscz1lW2tdLmxlbmd0aDt0PHM7Kyt0KWgucHVzaChlW2tdW3RdKTt2YXIgZT1xLGw9RGF0ZTtsLm5vd3x8KGw9e25vdzpmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX19KTt2YXIgcD0wLGQsZz0vXGJsYW5nKD86dWFnZSk/LShbXHcuXSspKD8hXFMpLzttKCl9O3dpbmRvdy5QUj17Y3JlYXRlU2ltcGxlTGV4ZXI6eCxyZWdpc3RlckxhbmdIYW5kbGVyOmssc291cmNlRGVjb3JhdG9yOnUsUFJfQVRUUklCX05BTUU6ImF0biIsUFJfQVRUUklCX1ZBTFVFOiJhdHYiLFBSX0NPTU1FTlQ6ImNvbSIsUFJfREVDTEFSQVRJT046ImRlYyIsUFJfS0VZV09SRDoia3dkIixQUl9MSVRFUkFMOiJsaXQiLAogICAgUFJfTk9DT0RFOiJub2NvZGUiLFBSX1BMQUlOOiJwbG4iLFBSX1BVTkNUVUFUSU9OOiJwdW4iLFBSX1NPVVJDRToic3JjIixQUl9TVFJJTkc6InN0ciIsUFJfVEFHOiJ0YWciLFBSX1RZUEU6InR5cCJ9fSkoKTs='></script>
<script id=js_confirm_demo_js src='data:/text/plain;base64,aWYgKHR5cGVvZiBqUXVlcnkgPT0gInVuZGVmaW5lZCIpIHsKICAgIHRocm93IG5ldyBFcnJvcigiRG9jdW1lbnRhdGlvbiBuZWVkcyB0aGUgalF1ZXJ5IGxpYnJhcnkgdG8gZnVuY3Rpb24uIikKfQo7CiQoJ2JvZHknKS5zY3JvbGxzcHkoewogICAgdGFyZ2V0OiAnI215LW5hdicsCiAgICBvZmZzZXQ6IDIwCn0pOwp2YXIgYnMgPSAkKCcuZm9vdGVyJykub3V0ZXJIZWlnaHQoKSArIDEwOwokKCIjbXktbmF2Iikuc3RpY2t5KHt0b3BTcGFjaW5nOiAyMCwgYm90dG9tU3BhY2luZzogYnN9KTsKJCgic3Bhbi52ZXJzaW9uIikuaHRtbCh2ZXJzaW9uIHx8ICIiKTsKCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKICAgIHByZXR0eVByaW50KCk7CiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICBpZiAodHlwZW9mIGdvb2dsZV9qb2JydW5uZXIgPT0gJ3VuZGVmaW5lZCcgJiYgIWxvY2FsU3RvcmFnZVsnYWRzb2snXSkgewogICAgICAgICAgICAkLmNvbmZpcm0oewogICAgICAgICAgICAgICAgdGl0bGU6ICdIbW1tLCBhZCBibG9ja2VyJywKICAgICAgICAgICAgICAgIHRoZW1lOiAnbWF0ZXJpYWwnLAogICAgICAgICAgICAgICAgY29udGVudDogIkFkcyBhcmVuJ3Qgd2hhdCB5b3UncmUgaGVyZSBmb3IuIEJ1dCBhZHMgaGVscCBtZSBzdXBwb3J0IG15IHdvcmsuIFNvLCBwbGVhc2UgY29uc2lkZXIgdG8gYWRkIHRoaXMgZG9tYWluIHRvIHlvdXIgYmxvY2tlcidzIHdoaXRlbGlzdC4iLAogICAgICAgICAgICAgICAgY2xvc2VJY29uOiBmYWxzZSwKICAgICAgICAgICAgICAgIGJ1dHRvbnM6IHsKICAgICAgICAgICAgICAgICAgICBkb25lOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICdEaWQgaXQnLAogICAgICAgICAgICAgICAgICAgICAgICBidG5DbGFzczogJ2J0bi1ncmVlbicsCiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5hbGVydCgnSSByZWFsbHkgYXBwcmVjaWF0ZSB0aGlzLiBUaGFuayB5b3UuJywgJ1lvdVwncmUgYXdlc29tZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZG9Ob3RBc2tBZ2FpbjogewogICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnRG9uXCd0IGFzaycsCiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlWydhZHNvayddID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZG9uYXRlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICdEb25hdGUnLAogICAgICAgICAgICAgICAgICAgICAgICBidG5DbGFzczogJ2J0bi1kZWZhdWx0JywKICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3BlbignaHR0cHM6Ly93d3cucGF5cGFsLm1lL2JvbmlmYWNlcGVyZWlyYScsICdfYmxhbmsnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZVsnYWRzb2snXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9LCAxMDAwKTsKCiAgICAkKCcuY2hhbmdlLWZvcm1hdC1jc3MnKS5jbGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgJCgnLmNoYW5nZS1mb3JtYXQtY3NzJykuYWRkQ2xhc3MoJ2FjdGl2ZScpOwogICAgICAgICQoJy5jaGFuZ2UtZm9ybWF0LWxlc3MnKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7CiAgICAgICAgJCgnLmZvcm1hdC1sZXNzJykuaGlkZSgpOwogICAgICAgICQoJy5mb3JtYXQtY3NzJykuc2hvdygpOwogICAgfSk7CiAgICAkKCcuY2hhbmdlLWZvcm1hdC1sZXNzJykuY2xpY2soZnVuY3Rpb24gKCkgewogICAgICAgICQoJy5jaGFuZ2UtZm9ybWF0LWxlc3MnKS5hZGRDbGFzcygnYWN0aXZlJyk7CiAgICAgICAgJCgnLmNoYW5nZS1mb3JtYXQtY3NzJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpOwogICAgICAgICQoJy5mb3JtYXQtY3NzJykuaGlkZSgpOwogICAgICAgICQoJy5mb3JtYXQtbGVzcycpLnNob3coKTsKICAgIH0pOwp9KTsKJCgnLmZvcm1hdC1jc3MnKS5oaWRlKCk7CgpmdW5jdGlvbiBycygpIHsKfQokKHdpbmRvdykucmVzaXplKGZ1bmN0aW9uICgpIHsKICAgIHJzKCk7Cn0pCnJzKCk7'></script>
-->
<!-- js_confirm_end -->
<script id=script_confirm>
var kolists = [];
kolists['kos'] = `
ko0
ko1
ko2
ko3
`;
function confirm(args) {
# alert( "BUGS_200 confirm args="+args+" kolists_kos="+kolists['kos'] );
return(args);
}
</script>
<script id=script_startup_confirm>
function startup_confirm(args) {
# alert( "BUGS_100 startup_confirm args="+args+" kolists_kos="+kolists['kos'] );
return(args);
}
</script>
<br>
<hr color=goldenrod>
<img src=/imgs/btn/koeye.png id=img_confirm height=40 onclick="toggle('div_confirm');return false;">div_confirm
<div id=div_confirm>
<!-- <div class="col-md-9 col-sm-12"> -->
<h1>div_confirm</h1>
<br>
<hr color=goldenrod>
<img src=/imgs/btn/koeye.png id=img_confirm_demos onclick="toggle('div_confirm_demos'); return false;" height=20> div_confirm_demos
<div id=div_confirm_demos>
<h3>demos</h3>
<section id="quickfeatures">
<h2>features</h2>
<p>applications</p>
<div class="row">
<div class="col-md-3">
<button class="btn btn-primary btn-block example-p-1">Alerts</button>
<p class="text-success">alerts</p>
</div>
<div class="col-md-3">
<button class="btn btn-primary btn-block bugalert">bugAlert</button>
<p class="text-success">bugalert</p>
</div>
<div class="col-md-3">
<button class="btn btn-primary btn-block example-p-2">Confirmation</button>
<p class="text-success">stacks</p>
</div>
<div class="col-md-3">
<button class="btn btn-primary btn-block example-p-70-type">Alert types</button>
<p class="text-success">done_fail_warn</p>
</div>
<div class="col-md-3">
<button class="btn btn-primary btn-block example-p-7-1">Prompt</button>
<p class="text-success">input</p>
</div>
</div>
<div class="row">
<div class="col-md-3">
<button class="btn btn-primary btn-block example-p-4">Dialogs</button>
<p class="text-success">dialog.</p>
</div>
<div class="col-md-3">
<button class="btn btn-primary btn-block example-p-3">Background dismiss</button>
<p class="text-success">modal</p>
</div>
</div>
<div class="row">
<div class="col-md-3">
<button class="btn btn-primary btn-block example-p-5">Ajax content</button>
<p class="text-success">ajax</p>
</div>
<div class="col-md-3">
<button class="btn btn-primary btn-block example-p-5_tl_php_menu">tl_php_menu</button>
<p class=text-success">done_tl_php_menu</p>
</div>
<div class="col-md-3">
<button class="btn btn-primary btn-block example-p-5_tl_php_todo_mp3s">mp3s</button>
<p class=text-success">done_mp3s</p>
</div>
<div class="col-md-3">
<button class="btn btn-primary btn-block example-p-5_tl_php_todo_mp4s">mp4s</button>
<p class=text-success">done_mp4s</p>
</div>
<div class="col-md-3">
<button class="btn btn-primary btn-block example-p-5_tl_php_todo_pdfs">pdfs</button>
<p class=text-success">done_pdfs</p>
</div>
<div class="col-md-3">
<button class="btn btn-primary btn-block example-p-5_tl_php_todo_yts">yts</button>
<p class=text-success">done_yts</p>
</div>
<div class="col-md-3">
<button class="btn btn-primary btn-block example-p-5_tl_php_todo_gifs">gifs</button>
<p class=text-success">done_gifs</p>
</div>
<div class="col-md-3">
<button class="btn btn-primary btn-block example-p-5_tl_php_todo_htms">htms</button>
<p class=text-success">done_htms</p>
</div>
<div class="row">
<div class="col-md-3">
<button class="btn btn-primary btn-block example-p-6">Auto-close</button>
<p class="text-success">critical</p>
</div>
</div>
<div class="col-md-3">
<button class="btn btn-primary btn-block example-p-7">Keystrokes</button>
<p class="text-success">keystrokes</p>
</div>
<div class="col-md-3">
<button class="btn btn-primary btn-block example-pc-1">Alignment</button>
<p class="text-success">centered</p>
</div>
<div class="col-md-3">
<button class="btn btn-primary btn-block example-pc-2">Images</button>
<p class="text-success">images</p>
</div>
<div class="col-md-3">
<button class="btn btn-primary btn-block example-pc-3">Animations</button>
<p class="text-success">animations</p>
</div>
</div>
<div class="row">
<div class="col-md-3">
<button class="btn btn-primary btn-block example-p-7-2">Draggable</button>
<p class="text-success">drag</p>
</div>
</div>
</div id=div_confirm_demos_end>
<br>
<hr color=goldenrod>
<img src=/imgs/btn/koeye.png id=img_confirm_themes onclick="toggle('div_confirm_themes'); return false;" height=20>
div_confirm_themes
<div id=div_confirm_themes hidden>
<h2>Themes</h2>
<p>js_confirm themes</p>
<div class="row">
<div class="col-md-3">
<button class="btn btn-info btn-block example-the-1">Modern</button>
</div>
<div class="col-md-3">
<button class="btn btn-info btn-block example-the-3">Material</button>
</div>
<div class="col-md-3">
<button class="btn btn-info btn-block example-the-4">Bootstrap</button>
</div>
<div class="col-md-3">
<button class="btn btn-info btn-block example-the-2">Supervan</button>
</div>
</div>
<script type="text/javascript">
$('.example-the-1').on('click', function(){
$.confirm({
icon: 'fa fa-smile-o',
theme: 'modern',
closeIcon: true,
animation: 'scale',
type: 'blue',
});
});
$('.example-the-2').on('click', function(){
$.confirm({
icon: 'fa fa-question-circle-o',
theme: 'supervan',
closeIcon: true,
animation: 'scale',
type: 'goldenrod',
});
});
$('.example-the-3').on('click', function(){
$.confirm({
icon: 'fa fa-question',
theme: 'material',
closeIcon: true,
animation: 'scale',
type: 'orange',
});
});
$('.example-the-4').on('click', function(){
$.confirm({
icon: 'fa fa-question',
theme: 'bootstrap',
closeIcon: true,
animation: 'scale',
type: 'orange',
});
});
// alert
$('.example-p-1').on('click', function(){
$.alert({
title: 'Alert alert!',
content: 'simple alert. <br> with some <strong>HTML</strong> <em>contents</em>',
icon: 'fa fa-rocket',
animation: 'scale',
closeAnimation: 'scale',
buttons: {
okay: {
text: 'Okay',
btnClass: 'btn-blue'
}
}
});
});
// bugalert
// $('.bugalert').on('click', function(){
// $.alert({
// title: 'bugAlert
// content: 'bugalert. <br> with some <strong>HTML</strong> <em>contents</em>',
// icon: 'fa fa-rocket',
// animation: 'scale',
// closeAnimation: 'scale',
// buttons: {
// okay: {
// text: 'Okay',
// btnClass: 'btn-blue'
// }
// }
// });
// });
// confirmation
$('.example-p-2').on('click', function(){
$.confirm({
title: 'secure_action',
content: 'nested confirms<br>confirm_or_cancel modal',
icon: 'fa fa-question-circle',
animation: 'scale',
closeAnimation: 'scale',
opacity: 0.5,
buttons: {
'confirm': {
text: 'Proceed',
btnClass: 'btn-blue',
action: function(){
$.confirm({
title: 'maybe critical',
content: 'critical actions multiple confirmations like this one.',
icon: 'fa fa-warning',
animation: 'scale',
closeAnimation: 'zoom',
buttons: {
confirm: {
text: 'yes',
btnClass: 'btn-orange',
action: function(){
$.alert('critical action <strong>triggered!</strong>');
}
},
cancel: function(){
$.alert('you clicked on <strong>cancel</strong>');
}
}
});
}
},
cancel: function(){
$.alert('you clicked on <strong>cancel</strong>');
},
moreButtons: {
text: 'other',
action: function(){
$.alert('clicked <strong>other</strong>');
}
},
}
});
});
// prompt
$('.example-p-7-1').on('click', function(){
$.confirm({
title: 'simple_form',
content: 'url:form.html',
buttons: {
sayMyName: {
text: 'Say my name',
btnClass: 'btn-orange',
action: function(){
var input = this.$content.find('input#input-name');
var errorText = this.$content.find('.text-danger');
if(!input.val().trim()){
$.alert({
content: "name empty.",
type: 'red'
});
return false;
}
else{
$.alert('hello ' + input.val() + ', hope your rich and happy');
}
}
},
// do nothing.
later: function(){
}
}
});
});
// alert types
$('.example-p-70-type').on('click', function(){
$.alert({
title: 'Error',
icon: 'fa fa-warning',
type: 'orange',
content: 'Something went wrong, please retry again after sometime.' +
'<hr>' +
'More types: red, green, orange, blue, purple, dark',
});
});
// background dismiss
$('.example-p-3').on('click', function(){
$.alert({
title: 'Background dismiss',
content: 'click outside modal to close ' +
'<br>with `bottom` close animation',
animation: 'scale',
closeAnimation: 'bottom',
backgroundDismiss: true,
buttons: {
okay: {
text: 'ok',
btnClass: 'btn-blue',
// do nothing
action: function(){
}
}
}
});
});
// using as dialogs
$('.example-p-4').on('click', function(){
$.dialog({
title: 'Title comes here',
content: 'Just need a popup without buttons, <strong>no problem!</strong><br>' +
'<h3>disable the buttons</h3>' +
'<h4><strong>and you get a dialog modal</strong></h4>' +
'<h5><em>Well, that close icon is shown if no buttons are here (u need something to close the modal right), u can explicitly control that too.</em></h5>' +
'<button type="button" class="btn btn-success">Click me to change the content</button>',
animation: 'scale',
onOpen: function(){
var that = this;
this.$content.find('button').click(function(){
that.setContent('simple as that');
})
}
});
});
// asynchronous content orig
$('.example-p-5').on('click', function(){
$.dialog({
title: 'ajax_table.html',
content: 'url:/js/confirm/table.html',
animation: 'scale',
columnClass: 'medium',
closeAnimation: 'scale',
backgroundDismiss: true,
});
});
// content: 'url:http://ka12:8000/ko.php?ko_coffeeshop&fmt=json',
// content: 'url:ko_coffeeshop.psv',
// asynchronous content orig
$('.example-p-5_ko_sailboat_html').on('click', function(){
$.dialog({
title: 'ajax_ko_sailtboat',
content: 'url:/ko_sailboat.html',
animation: 'scale',
columnClass: 'medium',
closeAnimation: 'scale',
backgroundDismiss: true,
});
});
// asynchronous content orig
$('.example-p-5_ko_blobs_html').on('click', function(){
$.dialog({
title: 'ajax /ko_blobs',
content: 'url:/ko_blobs.html',
animation: 'scale',
columnClass: 'medium',
closeAnimation: 'scale',
backgroundDismiss: true,
});
});
// asynchronous content orig
$('.example-p-5_notes_txt').on('click', function(){
$.dialog({
title: 'ajax /notes.txt',
content: 'url:/notes.txt',
animation: 'scale',
columnClass: 'medium',
closeAnimation: 'scale',
backgroundDismiss: true,
});
});
// asynchronous content canvas_save
$('.example-p-5_neave_im_html').on('click', function(){
$.dialog({
title: 'neave_im',
content: 'url:/index_neave_im.html',
animation: 'scale',
columnClass: 'medium',
closeAnimation: 'scale',
backgroundDismiss: true,
});
});
// asynchronous content tl.php?menu
$('.example-p-5_tl_php_menu').on('click', function(){
$.dialog({
title: 'php_menu',
content: 'url:/tl.php?menu content',
animation: 'scale',
columnClass: 'medium',
closeAnimation: 'scale',
backgroundDismiss: true,
});
});
// asynchronous content tl.php
$('.example-p-5_tl_php').on('click', function(){
$.dialog({
title: 'php content',
content: 'url:/tl.php',
animation: 'scale',
columnClass: 'medium',
closeAnimation: 'scale',
backgroundDismiss: true,
});
});
// asynchronous content tl.php?todo=mp3s
$('.example-p-5_tl_php_todo_mp3s').on('click', function(){
$.dialog({
title: 'php_todo_mp3s',
content: 'url:/tl.php?todo=mp3s',
animation: 'scale',
columnClass: 'medium',
closeAnimation: 'scale',
backgroundDismiss: true,
});
});
$('.example-p-5_tl_php_todo_mp4s').on('click', function(){
$.dialog({
title: 'php_todo_mp4s',
content: 'url:/tl.php?todo=mp4s',
animation: 'scale',
columnClass: 'medium',
closeAnimation: 'scale',
backgroundDismiss: true,
});
});
$('.example-p-5_tl_php_todo_pdfs').on('click', function(){
$.dialog({
title: 'php_todo_pdfs',
content: 'url:/tl.php?todo=pdfs',
animation: 'scale',
columnClass: 'medium',
closeAnimation: 'scale',
backgroundDismiss: true,
});
});
$('.example-p-5_tl_php_todo_htms').on('click', function(){
$.dialog({
title: 'php_todo_htms',
content: 'url:/tl.php?todo=htms',
animation: 'scale',
columnClass: 'medium',
closeAnimation: 'scale',
backgroundDismiss: true,
});
});
$('.example-p-5_tl_php_todo_yts').on('click', function(){
$.dialog({
title: 'php_todo_yts',
content: 'url:/tl.php?todo=ytss',
animation: 'scale',
columnClass: 'medium',
closeAnimation: 'scale',
backgroundDismiss: true,
});
});
$('.example-p-5_tl_php_todo_gifs').on('click', function(){
$.dialog({
title: 'php_todo_gifs',
content: 'url:/tl.php?todo=gifs',
animation: 'scale',
columnClass: 'medium',
closeAnimation: 'scale',
backgroundDismiss: true,
});
});
// $('.example-p-5_tl_php_todo_htms').on('click', function(){
// $.dialog({
// title: 'php_todo_htms',
// content: 'url:/tl.php?todo=htms',
// animation: 'scale',
// columnClass: 'medium',
// closeAnimation: 'scale',
// backgroundDismiss: true,
// });
// });
//
// auto close
$('.example-p-6').on('click', function(){
$.confirm({
title: 'Auto close',
content: 'Some actions maybe critical, prevent it with the Auto close. This dialog will automatically trigger cancel after the timer runs out.',
autoClose: 'cancelAction|10000',
escapeKey: 'cancelAction',
buttons: {
confirm: {
btnClass: 'btn-red',
text: 'Delete ben\'s account',
action: function(){
$.alert('You deleted Ben\'s account!');
}
},
cancelAction: {
text: 'Cancel',
action: function(){
$.alert('Ben just got saved!');
}
}
}
});
});
// key strokes
$('.example-p-7').on('click', function(){
$.confirm({
title: 'Keystrokes',
escapeKey: true, // close the modal when escape is pressed.
content: 'Press the <strong>escape key</strong> to close the modal. That works.' +
'<br> press <strong>enter key</strong> to trigger okay.' +
'<br> press <strong>shift or ctrl key</strong> to trigger cancel.',
backgroundDismiss: true, // for escapeKey to work, backgroundDismiss should be enabled.
buttons: {
okay: {
keys: [
'enter'
],
action: function(){
$.alert('<strong>Okay button</strong> was triggered.');
}
},
cancel: {
keys: [
'ctrl',
'shift'
],
action: function(){
$.alert('<strong>Cancel button</strong> was triggered.');
}
}
},
});
});
// alignment
$('.example-pc-1').on('click', function(){
$.confirm({
title: 'Gracefully center aligned',
content: '<p>You can add content and not worry about the alignment. The goal is to make a Interactive dialog!.</p>' +
'<button type="button" class="btn btn-success">Click me to add more content</button> <div id="contentArea"></div> ',
buttons: {
someButton: {
text: 'Add wow',
btnClass: 'btn-green',
action: function(){
this.$content.find('#contentArea').append('<br>Wowww');
return false; // prevent dialog from closing.
}
},
someOtherButton: {
text: 'Clear it',
btnClass: 'btn-orange',
action: function(){
this.$content.find('#contentArea').html('');
return false; // prevent dialog from closing.
}
},
close: function(){
// lets the user close the modal.
}
},
onOpen: function(){
// onOpen attach the events.
var that = this;
this.$content.find('button').click(function(){
that.$content.find('#contentArea').append('<br>This is awesome!!!!');
});
},
});
});
// working with images
var getNewMeme = function(){
var prevTitle = $('.meme-text').html();
$('.meme-image img').attr('src', '');
$('.meme-text').html('Loading memes 👌');
$.get('https://craftpip.com/api/memes.json', {
previousTitle: prevTitle,
}).then(function(data){
console.log(data);
$('.meme-text').html(data.title);
$('.meme-image img').attr('src', data.image);
}).catch(function(err){
});
};
// todo: images is not tested yet.
$('.example-pc-2').on('click', function(){
$.confirm({
title: 'Adding images',
content: '' +
'<div class="meme-image"><img style=" border: solid 1px #ddd;\n' +
' margin-bottom: 10px;\n' +
' border-radius: 4px;" src="" alt=""></div>' +
'<div class="meme-text" style="font-weight: bold;margin-bottom: 20px;"></div>' +
'<div>Memes from <a target="_blank" href="https://www.reddit.com/r/programminghumor">ProgrammingHumor</a></div>' +
'',
animation: 'scale',
animationClose: 'top',
buttons: {
confirm: {
text: 'Next meme',
btnClass: 'btn-blue',
action: function(){
getNewMeme();
return false;
}
},
cancel: function(){
// lets the user close the modal.
}
},
onContentReady: function(){
getNewMeme();
}
});
});
// animations
$(' .example-pc-3').on('click', function(){
$.alert({
title: 'Animations',
content: 'jquery-confirm provides a lot of open & close animations out of the box. <br>The best part is, you can add custom ones too.',
animation: 'scale',
closeAnimation: 'right',
buttons: {
zoom: function(){
this.setCloseAnimation('zoom');
},
rotate: function(){
this.setCloseAnimation('rotate');
},
scale: function(){
this.setCloseAnimation('scale');
},
top: function(){
this.setCloseAnimation('top');
}
},
backgroundDismiss: function(){
return false;
},
});
});
$('.example-p-7-2').on('click', function(){
$.alert({
title: 'A draggable dialog',
content: 'This dialog is draggable, use the title to drag it around. It wont touch the screen borders',
type: 'blue',
animation: 'scale',
draggable: true,
});
})
</script>
</section>
</div id=div_confirm_themes_end>
<section id="whats-new" hidden>
<h2>Whats new <span style="color: #aaa">in v3.3.4</span></h2>
<ul>
<li>Safari height bug fix. PR by lanre-ade</li>
<li>Fix isClosed bug for firefox. PR by loganm</li>
<li>Remove scroll to top when content height changes. PR by amikot</li>
<li>added support for AMD and commonJS</li>
</ul>
<h3>Updates <span style="color: #aaa">in v3.3.2</span></h3>
<p>
Major changes
</p>
<ul>
<li>Moved overflow scroll inside modal <a target="_empty"
href="https://github.com/craftpip/jquery-confirm/issues/286">#286</a></li>
</ul>
<p>
Improvements
</p>
<ul>
<li>'draggable' improved</li>
<li>Added 'animateFromElement' option</li>
<li>Added 'smoothScroll' option</li>
<li>Added 'hilight' option</li>
<li>Added 'showLoading','hideLoading' option</li>
<li>Accept jquery dom element in content <a target="_empty"
href="https://github.com/craftpip/jquery-confirm/issues/313">#313</a></li>
<li>Updated docs</li>
<li>Fixes <a target="_empty"
href="https://github.com/craftpip/jquery-confirm/issues/255">#255</a> <a target="_empty"
href="https://github.com/craftpip/jquery-confirm/issues/307">#307</a> <a target="_empty"
href="https://github.com/craftpip/jquery-confirm/issues/290">#290</a>
</li>
</ul>
<p>
Removals
</p>
<ul>
<li>'setDialogCenter' method deprecated, dialog centered with CSS tables</li>
<li>'alignMiddle' method deprecated</li>
</ul>
</section>
<!-- Installation -->
<section id="getting-started" > <h2>confirm_quickstart</h2> </section>
<hr color=goldenrod>
<img src=/imgs/btn/koeye.png id=img_confirm_usage height=20 onclick="toggle('div_confirm_usage');return false;">div_confirm_usage
<div id=div_confirm_usage hidden>
<h3>div_confirm_usage</h3>
<br>
<hr color=goldenrod>
<!-- basic usage -->
<img src=/imgs/btn/koeye.png id=img_confirm_basic onclick="toggle('div_confirm_basic'); return false;" height=20> div_confirm_basic
<h3>div_confirm_basic</h3>
<div id=div_confirm_basic hidden>
<section id="usage" >
<h3>basic_usage</h3>
<div class="section">
<div class="row">
<div class="col-md-12">
<h4 id="alert">
<code>$.alert</code>
</h4>
<p>
adds one button (okay) if no buttons are specified, this lets the user to close the
modal.
</p>
<button class="example1 btn btn-primary">example alert</button>
<script type="text/javascript">
$('.example1').on('click', function(){
$.alert({
title: 'Alert!',
content: 'Simple alert!',
});
});
</script>
<div class="space10"></div>
<pre class="prettyprint linenums"><code class="js">$.alert({
title: 'Alert!',
content: 'Simple alert!',
});</code></pre>
</div>
<div class="col-md-12">
<h4 id="confirm">
<code>$.confirm</code>
</h4>
<p>
if no buttons are specified, two buttons (Okay & cancel) will be added.
</p>
</div>
<div class="col-md-12">
<button class="example2 btn btn-primary">example confirm</button>
<script type="text/javascript">
$('.example2').on('click', function(){
$.confirm({
title: 'Confirm!',
content: 'Simple confirm!',
buttons: {
confirm: function(){
$.alert('Confirmed!');
},
cancel: function(){
$.alert('Canceled!');
},
somethingElse: {
text: 'Something else',
btnClass: 'btn-blue',
keys: [
'enter',
'shift'
],
action: function(){
this.$content // reference to the content
$.alert('Something else?');
}
}
}
});
});
</script>
<div class="space10"></div>
<pre class="prettyprint linenums"><code class="js">$.confirm({
title: 'Confirm!',
content: 'Simple confirm!',
buttons: {
confirm: function () {
$.alert('Confirmed!');
},
cancel: function () {
$.alert('Canceled!');
},
somethingElse: {
text: 'Something else',
btnClass: 'btn-blue',
keys: ['enter', 'shift'],
action: function(){
$.alert('Something else?');
}
}
}
});
</code></pre>
<h5>Showing prompt using confirm</h5>
<p>
Simply add form to the content and bind the events you want. <br>
This form can also be loaded via ajax.
</p>
<button class="example2-2 btn btn-primary">example prompt</button>
<script type="text/javascript">
$('.example2-2').on('click', function(){
$.confirm({
title: 'Prompt!',
content: '' +
'<form action="" class="formName">' +
'<div class="form-group">' +
'<label>Enter something here</label>' +
'<input type="text" placeholder="Your name" class="name form-control" required />' +
'</div>' +
'</form>',
buttons: {
formSubmit: {
text: 'Submit',
btnClass: 'btn-blue',
action: function(){
var name = this.$content.find('.name').val();
if(!name){
$.alert('provide a valid name');
return false;
}
$.alert('Your name is ' + name);
}
},
cancel: function(){
//close
},
},
onContentReady: function(){
// you can bind to the form
var jc = this;
this.$content.find('form').on('submit', function(e){ // if the user submits the form by pressing enter in the field.
e.preventDefault();
jc.$$formSubmit.trigger('click'); // reference the button and click it
});
}
});
});
</script>
<div class="space10"></div>
<pre class="prettyprint linenums"><code class="js">$.confirm({
title: 'Prompt!',
content: '' +
'<form action="" class="formName">' +
'<div class="form-group">' +
'<label>Enter something here</label>' +
'<input type="text" placeholder="Your name" class="name form-control" required />' +
'</div>' +
'</form>',
buttons: {
formSubmit: {
text: 'Submit',
btnClass: 'btn-blue',
action: function () {
var name = this.$content.find('.name').val();
if(!name){
$.alert('provide a valid name');
return false;
}
$.alert('Your name is ' + name);
}
},
cancel: function () {
//close
},
},
onContentReady: function () {
// bind to events
var jc = this;
this.$content.find('form').on('submit', function (e) {
// if the user submits the form by pressing enter in the field.
e.preventDefault();
jc.$$formSubmit.trigger('click'); // reference the button and click it
});
}
});</code></pre>
</div>
<div class="col-md-12">
<h4 id="dialog">
<code>$.dialog</code>
</h4>
<p>
removes buttons and explicitly shows the closeIcon (×)
</p>
<button class="example2-1 btn btn-primary">example dialog</button>
<script type="text/javascript">
$('.example2-1').on('click', function(){
$.dialog({
title: 'Text content!',
content: 'Simple modal!',
buttons: {
aRandomButton: function(){
// this will be removed.
}
}
});
});
</script>
<div class="space10"></div>
<pre class="prettyprint linenums"><code class="js">$.dialog({
title: 'Text content!',
content: 'Simple modal!',
});</code></pre>
</div>
<div class="col-md-12">
<h4 id="jquery-fn"><code>$.fn.confirm</code></h4>
<p>This can be used to bind to a element directly <br/>
If no buttons are defined, the default buttons (okay and cancel) will be added, and
default action for okay will be to redirect on the given href.
use
<a href="#api-target">this.$target</a>
to get the clicked element.
</p>
<p>
<a class="example2-1-1 btn btn-primary"
data-title="Goto twitter?"
href="http://twitter.com/craftpip">Goto twitter
</a>
</p>
<script>
$('.example2-1-1').confirm({
content: "This will take you to my twitter <br> You can access the clicked element by <code>this.$target</code>",
});
</script>
<span>HTML</span>
<pre class="prettyprint linenums"><code class="html"><a class="twitter" data-title="Goto twitter?" href="http://twitter.com/craftpip">Goto twitter</a></code></pre>
<span>Javascript</span>
<pre class="prettyprint linenums"><code class="js">$('a.twitter').confirm({
content: "...",
});
$('a.twitter').confirm({
buttons: {
hey: function(){
location.href = this.$target.attr('href');
}
}
});</code></pre>
</div>
<div class="col-md-12">
<h4 id="shorthand">Shorthand usage</h4>
<p>
The shorthand thingy takes in two string arguments, first one is the content of the
dialog and second the title of the dialog.
The second argument is optional.
</p>
<pre class="prettyprint linenums"><code class="js">$.alert('Content here', 'Title here'); <a
href="#"
class="example-sh-1">try me</a>
$.confirm('A message', 'Title is optional'); <a href="#"
class="example-sh-2">try me</a>
$.dialog('Just to let you know'); <a href="#"
class="example-sh-3">try me</a></code></pre>
</div>
<script>
$('.example-sh-1').click(function(e){
e.preventDefault();
$.alert('Content here', 'Title here');
});
$('.example-sh-2').click(function(e){
e.preventDefault();
$.confirm('A message', 'Title is optional');
});
$('.example-sh-3').click(function(e){
e.preventDefault();
$.dialog('Just to let you know');
});
</script>
<div class="col-md-12">
<h4 id="lazy-open">Lazy open</h4>
<p>
If you want to create a instance of jconfirm and save it for later use.
</p>
<pre class="prettyprint linenums"><code class="js">var a = $.confirm({
lazyOpen: true,
});
a.open();
a.close();
a.toggle(); // toggle open close.</code></pre>
</div>
</div>
</div>
</section>
<div style="height: 15px;"></div>
<div class="alert alert-info">
<p>
<i class="fa fa-bookmark fa-fw"></i>
<strong>NOTE</strong>
:
The <code>$.confirm()</code>, <code>$.dialog()</code> & <code>$.alert()</code> methods are alias
of <code>jconfirm()</code>.<br>
<i class="fa fa-fw"></i> All three methods indirectly call the jconfirm base function altering the
provided options.
</p>
</div>
<div class="alert alert-warning">
<p>
<i class="fa fa-info fa-fw"></i>
<strong>ADVANCED:</strong>
<code>this.$body</code> is the body div for jquery-confirm. You can find and alter any element at
run time.
</p>
</div>
</div id=div_confirm_basic_end>
<img src=/imgs/btn/koeye.png id=img_confirm_buttons onclick="toggle('div_confirm_buttons'); return false;" height=20>
<h3>div_confirm_buttons</h3>
<div id=div_confirm_buttons hidden>
<section id="buttons">
<h2>Buttons</h2>
<p>
Its all what you need to know about buttons in jquery-confirm v3. <br>
Defining multiple buttons is introduced in v3.
</p>
<div class="alert alert-info">
You can access the button element via <code>this.$$heyThere</code> for heyThere button in the below
snippet. <br>this is to change the button properties at run time.
</div>
<h4 id="defining-buttons">
Definition
</h4>
<div class="section">
<p>
Buttons can be defined in the following fashion, pretty self explanatory.
</p>
<pre class="prettyprint linenums"><code class="html">$.confirm({
buttons: {
hello: function(helloButton){
// shorthand method to define a button
// the button key will be used as button name
},
hey: function(heyButton){
// access the button using jquery
this.$$hello.trigger('click'); // click the 'hello' button
this.$$hey.prop('disabled', true); // disable the current button using jquery method
// jconfirm button methods, all methods listed <a href="#button-functions">here</a>
this.buttons.hello.setText('Helloooo'); // setText for 'hello' button
this.buttons.hey.disable(); // disable with button function provided by jconfirm
this.buttons.hey.enable(); // enable with button function provided by jconfirm
// the button's instance is passed as the first argument, for quick access
heyButton === this.buttons.hey
},
heyThere: {
text: 'Hey there!', // text for button
btnClass: 'btn-blue', // class for the button
keys: ['enter', 'a'], // keyboard event for button
isHidden: false, // initially not hidden
isDisabled: false, // initially not disabled
action: function(heyThereButton){
// longhand method to define a button
// provides more features
}
},
}
});
</code></pre>
</div>
<h4 id="buttontext">Button text</h4>
<div class="section">
<button class="btn btn-primary example3">Button text test</button>
<script type="text/javascript">
$('.example3').on('click', function(){
$.confirm({
buttons: {
hey: function(){
// here the button key 'hey' will be used as the text.
$.alert('You clicked on "hey".');
},
heyThere: {
text: 'hey there!', // With spaces and symbols
action: function(){
$.alert('You clicked on "heyThere"');
}
}
}
})
});
</script>
<div class="space10"></div>
<pre class="prettyprint linenums"><code class="html">$.confirm({
buttons: {
hey: function () {
// here the button key 'hey' will be used as the text.
$.alert('You clicked on "hey".');
},
heyThere: {
text: 'hey there!', // With spaces and symbols
action: function () {
$.alert('You clicked on "heyThere"');
}
}
}
});</code></pre>
</div>
<h4 id="buttonstyle">Button style</h4>
<div class="section">
<p>Simply apply classes to buttons to style them.</p>
<p class="text-info">
Jconfirm comes bundled with <code>btn-blue</code> <code>btn-green</code> <code>btn-red</code>
<code>btn-orange</code> <code>btn-purple</code> <code>btn-default</code> <code>btn-dark</code>
<br> <i class="fa fa-info"></i> These classes only work inside jquery-confirm's modal
</p>
<p class="text-info">
Other bootstrap options are <code>btn-primary</code> <code>btn-inverse</code>
<code>btn-warning</code>
<code>btn-info</code> <code>btn-danger</code> <code>btn-success</code>.
</p>
<button class="btn btn-primary example3-1-jc">Using buttons that come with jconfirm!</button>
<button class="btn btn-primary example3-1">Using bootstrap buttons!</button>
<script type="text/javascript">
$('.example3-1').on('click', function(){
$.confirm({
buttons: {
default: {
btnClass: 'btn-default',
},
info: {
btnClass: 'btn-info',
},
success: {
btnClass: 'btn-success custom-class',
},
danger: {
btnClass: 'btn-danger custom-class',
},
warning: {
btnClass: 'btn-warning',
},
}
});
});
$('.example3-1-jc').on('click', function(){
$.confirm({
buttons: {
default: {
btnClass: 'btn-default',
},
blue: {
btnClass: 'btn-blue',
},
green: {
btnClass: 'btn-green',
},
red: {
btnClass: 'btn-red',
},
orange: {
btnClass: 'btn-orange',
},
purple: {
btnClass: 'btn-purple',
},
dark: {
btnClass: 'btn-dark',
},
}
});
});
</script>
<div class="space10"></div>
<pre class="prettyprint linenums"><code class="html">$.confirm({
buttons: {
info: {
btnClass: 'btn-blue',
action: function(){}
},
danger: {
btnClass: 'btn-red any-other-class', // multiple classes.
...
},
warning: {
btnClass: 'btn-warning',
...
},
}
});</code></pre>
</div>
<h4 id="button_keys">Button keys</h4>
<div class="section">
<p>
A 'key' feature of jquery-confirm! (pun intended)
<br> Listen to keyup events for individual buttons. A button can listen for multiple keys at a time.
<br> If multiple modals are stacked together, only the topmost modal will listen for keyboard event.
</p>
<div class="alert alert-info">
Available key options are: <br>
a to Z, tilde (the ` key), enter, shift, tab, capslock, ctrl, win, alt, esc, space.
</div>
<button class="btn btn-primary example3-1-a">Click me!</button>
<div class="space10"></div>
<pre class="prettyprint linenums"><code class="html">$.confirm({
content: 'Time to use your keyboard, press shift, alert, A or B',
buttons: {
specialKey: {
text: 'On behalf of shift',
keys: ['shift', 'alt'],
action: function(){
$.alert('Shift or Alt was pressed');
}
},
alphabet: {
text: 'A, B',
keys: ['a', 'b'],
action: function(){
$.alert('A or B was pressed');
}
}
}
});</code></pre>
<button type="button"
class="btn btn-primary example3-1-1">Another example
</button>
<div class="space10"></div>
<p>
In this example, the YES button is hidden, The user can only use the keyboard to click the button!
</p>
<pre class="prettyprint linenums"><code class="html">$.confirm({
title: false,
content: 'Imagine a very critical action here! <br> ' +
'Please press <strong style="font-size: 20px;">Y</strong> to proceed.',
buttons: {
yes: {
isHidden: true, // hide the button
keys: ['y'],
action: function () {
$.alert('Critical action <strong>was performed</strong>.');
}
},
no: {
keys: ['N'],
action: function () {
$.alert('You clicked No.');
}
},
}
});</code></pre>
<script type="text/javascript">
$('.example3-1-a').on('click', function(){
$.confirm({
title: 'Keyboard wins',
content: 'Time to use your keyboard, press shift, alert, A or B',
buttons: {
specialKey: {
text: 'On behalf of shift',
keys: [
'shift',
'alt'
],
action: function(){
$.alert('Shift or Alt was pressed');
}
},
alphabet: {
text: 'A, B',
keys: [
'a',
'b'
],
action: function(){
$.alert('A or B was pressed');
}
}
}
});
});
$('.example3-1-1').on('click', function(){
$.confirm({
title: false,
content: 'Imagine a very critical action here! <br> ' +
'Please press <strong style="font-size: 20px;">Y</strong> to proceed.',
buttons: {
yes: {
isHidden: true,
keys: ['y'],
action: function(){
$.alert('Critical action <strong>was performed</strong>.');
}
},
no: {
keys: ['N'],
action: function(){
$.alert('You clicked No.');
}
},
}
});
});
</script>
</div>
<h4 id="button-functions">Button functions</h4>
<div class="section">
<p>
jquery-confirm provides a set of functions for a nice and clean way to alter your buttons in run-time. <br>
if this is not enough you can use <code>this.$$<buttonName></code> to get the jquery DOM element
</p>
<!--<button class="btn btn-primary example3-1-a-f-1">Try me</button>-->
<!--<div class="space10"></div>-->
<p>
A full list of functions for buttons.
</p>
<table class="table table-bordered table-condensed">
<tr>
<th>
Function
</th>
<th>
Code
</th>
<th>
Description
</th>
</tr>
<tr>
<td>
setText
</td>
<td>
this.buttons.<buttonName>.setText(text)
</td>
<td>
The text you want to set.
</td>
</tr>
<tr>
<td>
addClass
</td>
<td>
this.buttons.<buttonName>.addClass(className)
</td>
<td>
Add a class to the button
</td>
</tr>
<tr>
<td>
removeClass
</td>
<td>
this.buttons.<buttonName>.removeClass(className)
</td>
<td>
remove a class to the button
</td>
</tr>
<tr>
<td>
disable
</td>
<td>
this.buttons.<buttonName>.disable()
</td>
<td>
Disable the button
</td>
</tr>
<tr>
<td>
enable
</td>
<td>
this.buttons.<buttonName>.enable()
</td>
<td>
Enable the button
</td>
</tr>
<tr>
<td>
show
</td>
<td>
this.buttons.<buttonName>.show()
</td>
<td>
Show the button via CSS
</td>
</tr>
<tr>
<td>
hide
</td>
<td>
this.buttons.<buttonName>.hide()
</td>
<td>
Hide the button via CSS
</td>
</tr>
</table>
<pre class="prettyprint linenums"><code class="html">$.confirm({
closeIcon: true, // explicitly show the close icon
buttons: {
buttonA: {
text: 'button a',
action: function (buttonA) {
this.buttons.resetButton.setText('reset button!!!');
this.buttons.resetButton.disable();
this.buttons.resetButton.enable();
this.buttons.resetButton.hide();
this.buttons.resetButton.show();
this.buttons.resetButton.addClass('btn-red');
this.buttons.resetButton.removeClass('btn-red');
// or
this.$$resetButton // button's jquery element reference, go crazy
this.buttons.buttonA == buttonA // both are the same.
return false; // prevent the modal from closing
}
},
resetButton: function (resetButton) {
}
}
});</code></pre>
</div>
</section>
</div id=div_confirm_buttons>
<br>
<hr color=goldenrod>
<img src=/imgs/btn/koeye.png id=img_confirm_custom onclick="toggle('div_confirm_custom'); return false;" height=20>
<h3>div_confirm_custom</h3>
<div id=div_confirm_custom hidden>
<section id="customizing">
<h2>Customizing</h2>
<h4 id="dialog-type">Dialog type</h4>
<div class="section">
<p>
Dialog types helps give the user a hint as to what the dialog is about
</p>
<button class="btn btn-primary example21-t-1">Error/Red dialog</button>
<button class="btn btn-primary example21-t-2">Success/Green dialog</button>
<button class="btn btn-primary example21-t-3">Non animated type dialog</button>
<div class="space10"></div>
<button class="btn btn-primary example21-t-4">orange</button>
<button class="btn btn-primary example21-t-5">blue</button>
<button class="btn btn-primary example21-t-6">purple</button>
<button class="btn btn-primary example21-t-7">dark</button>
<script type="text/javascript">
$('.example21-t-1').on('click', function(){
$.confirm({
title: 'Encountered an error!',
content: 'Something went downhill, this may be serious',
icon: 'fa fa-warning',
type: 'red',
buttons: {
omg: {
text: 'Try again',
btnClass: 'btn-red',
},
close: function(){
}
}
});
});
$('.example21-t-2').on('click', function(){
$.confirm({
title: 'Congratulations!',
content: 'Consider something great happened, and you have to show a positive message.',
type: 'green',
buttons: {
omg: {
text: 'Thank you!',
btnClass: 'btn-green',
},
close: function(){
}
}
});
});
$('.example21-t-3').on('click', function(){
$.confirm({
title: 'Encountered an error!',
content: 'Something went downhill, this may be serious',
type: 'red',
typeAnimated: false,
buttons: {
omg: {
text: 'Try again',
btnClass: 'btn-red',
},
close: function(){
}
}
});
});
$('.example21-t-4').on('click', function(){
$.confirm({
title: 'Orange!',
content: 'Some content here.',
type: 'orange',
});
});
$('.example21-t-5').on('click', function(){
$.confirm({
title: 'Blue!',
content: 'Some content here.',
type: 'blue',
});
});
$('.example21-t-6').on('click', function(){
$.confirm({
title: 'Purple!',
content: 'Some content here.',
type: 'purple',
});
});
$('.example21-t-7').on('click', function(){
$.confirm({
title: 'Dark!',
content: 'Some content here.',
type: 'dark',
});
});
</script>
<div class="space10"></div>
<pre class="prettyprint linenums"><code>$.confirm({
title: 'Encountered an error!',
content: 'Something went downhill, this may be serious',
type: 'red',
typeAnimated: true,
buttons: {
tryAgain: {
text: 'Try again',
btnClass: 'btn-red',
action: function(){
}
},
close: function () {
}
}
});</code></pre>
</div>
<h4 id="icons">Icons</h4>
<div class="section">
<p>Give meaning to your dialog with custom icons.<br>
Read about Font Awesome
<a href="http://fortawesome.github.io/Font-Awesome">here</a>
.
</p>
<button class="btn btn-primary example21-2">Using font-awesome</button>
<button class="btn btn-primary example21-3">Animated font-awesome</button>
<script type="text/javascript">
$('.example21-2').on('click', function(){
$.confirm({
icon: 'fa fa-warning', // glyphicon glyphicon-heart
title: 'font-awesome'
});
});
$('.example21-3').on('click', function(){
$.alert({
icon: 'fa fa-spinner fa-spin',
title: 'Working!',
content: 'Sit back, we are processing your request. <br>The animated icon is provided by Font-Awesome!'
});
});
</script>
<div class="space10"></div>
<pre class="prettyprint linenums"><code>$.confirm({
icon: 'glyphicon glyphicon-heart',
title: 'glyphicon'
});
$.confirm({
icon: 'fa fa-warning',
title: 'font-awesome'
});
$.confirm({
icon: 'fa fa-spinner fa-spin',
title: 'Working!',
content: 'Sit back, we are processing your request!'
});</code></pre>
</div>
<h4 id="close-icon">Close icon</h4>
<div class="section">
<p>
jQuery confirm uses <code>&times;</code> html entity for this close symbol, however you can
use Any icon of your choice (fa, glyphicon, zmdi)
</p>
<div class="alert alert-info">
By default <code>closeIcon</code> is set to <code>null</code>.
That means, if buttons are not defined the closeIcon will be shown, else will not be shown.
<br>
To explicitly show <code>closeIcon</code> set it to a truthy value and vise versa.
</div>
<div class="row">
<div class="col-md-6">
<p>
Turn on closeIcon explicitly
</p>
<button class="example15-1-3-4 btn btn-primary">With closeIcon</button>
<div class="space10"></div>
<pre class="prettyprint linenums"><code>$.confirm({
closeIcon: true
});</code></pre>
</div>
<div class="col-md-6">
<p>
Using other libraries for icons
</p>
<button class="example15-1-3-6 btn btn-primary">Using font awesome</button>
<div class="space10"></div>
<pre class="prettyprint linenums"><code>$.confirm({
closeIcon: true,
closeIconClass: 'fa fa-close'
});</code></pre>
</div>
</div>
<h4>
<i class="fa fa-info"></i> Handle closeIcon's callback
</h4>
<p>
Control what happens when close icon is clicked. <br>
closeIcon can take in function to handle the button click or you can return a button name.
</p>
<button class="example15-1-3-5-1 btn btn-primary">Test it</button>
<div class="space10"></div>
<pre class="prettyprint linenums"><code>$.confirm({
closeIcon: function(){
return false; // to prevent close the modal.
// or
return 'aRandomButton'; // set a button handler, 'aRandomButton' prevents close.
},
// or
closeIcon: 'aRandomButton', // set a button handler
buttons: {
aRandomButton: function(){
$.alert('A random button is called, and i prevent closing the modal');
return false; // you shall not pass
},
close: function(){
}
}
});</code></pre>
<script>
$('.example15-1-3-4').click(function(){
$.alert({
closeIcon: true,
});
});
$('.example15-1-3-6').click(function(){
$.alert({
closeIcon: true,
closeIconClass: 'fa fa-close'
})
});
$('.example15-1-3-5-1').click(function(){
$.confirm({
content: "The close icon is now handled by 'aRandomButton', if the button returns a falsy value the modal will not close." +
"<br>Click on the close icon to try it out",
closeIcon: 'aRandomButton', // set a button handler
buttons: {
aRandomButton: function(){
$.alert('A random button is called, and i prevent closing the modal');
return false; // you shall not pass
},
close: function(){
}
}
});
});
</script>
</div>
<h4 id="custom-width">Custom width</h4>
<div class="section">
<p>
Jquery-confirm uses bootstrap's grid system for its layout by default.
You can simply provide column classes to adjust the modal's width.
</p>
<p class="text-info"><i class="fa fa-magic fa-fw"></i> You can also set responsive layouts.
<a href="http://getbootstrap.com/examples/grid/"
target="_empty">Bootstrap grid docs
</a>
</p>
<p>
instead of typing the whole thing, provide keywords like <br>
<code>xlarge</code>/<code>xl</code></code> equivalent to <code>col-md-12</code> <br>
<code>large</code>/<code>l</code></code> equivalent to <code>col-md-8 col-md-offset-2</code>
<br>
<code>medium</code>/<code>m</code></code> equivalent to <code>col-md-6 col-md-offset-3</code>
<br>
<code>small</code>/<code>s</code></code> equivalent to <code>col-md-4 col-md-offset-4</code>
<br>
<code>xsmall</code>/<code>xs</code></code> equivalent to <code>col-md-2 col-md-offset-5</code>
</p>
<button class="btn btn-primary grid-1">medium</button>
<button class="btn btn-primary grid-2">small (default)</button>
<button class="btn btn-primary grid-5">xlarge</button>
<button class="btn btn-primary grid-6">xlarge (fluid)</button>
<div class="space10"></div>
<script type="text/javascript">
$('.grid-1').on('click', function(){
$.confirm({
columnClass: 'medium',
}); // empty because its default.
});
$('.grid-2').on('click', function(){
$.confirm({
columnClass: 'small',
});
});
$('.grid-5').on('click', function(){
$.confirm({
columnClass: 'xlarge'
});
});
$('.grid-6').on('click', function(){
$.confirm({
columnClass: 'xlarge',
containerFluid: true,
});
});
</script>
<pre class="prettyprint linenums"><code>$.confirm({
columnClass: 'small'
});
$.confirm({
columnClass: 'col-md-4 col-md-offset-4',
});
$.confirm({
columnClass: 'col-md-12'
});
$.confirm({
columnClass: 'col-md-4 col-md-offset-8 col-xs-4 col-xs-offset-8',
containerFluid: true, // this will add 'container-fluid' instead of 'container'
});</code></pre>
</div>
<h4 id="custom-width-without-bootstrap">Custom width without Bootstrap</h4>
<div class="section">
<p>
Many have a different taste, who wont be using bootstrap in their projects. <br>
You can simply provide the width of the modal, in px or any metric you want.
</p>
<div class="alert alert-warning">
<code>useBootstrap</code> must be set to <code>false</code> to use this feature <br>
you can globally disable bootstrap by setting <code>jconfirm.defaults.useBootstrap = false</code>
</div>
<button class="btn btn-primary grid-wo-bootstrap-1">30%</button>
<button class="btn btn-primary grid-wo-bootstrap-2">500px</button>
<div class="space10"></div>
<script type="text/javascript">
$('.grid-wo-bootstrap-1').on('click', function(){
$.confirm({
boxWidth: '30%',
useBootstrap: false,
});
});
$('.grid-wo-bootstrap-2').on('click', function(){
$.confirm({
boxWidth: '500px',
useBootstrap: false,
});
});
</script>
<pre class="prettyprint linenums"><code>$.confirm({
boxWidth: '30%',
useBootstrap: false,
});
$.confirm({
boxWidth: '500px',
useBootstrap: false,
});</code></pre>
</div>
<h4 id="namespaced-bootstrap">Namespaced bootstrap</h4>
<div class="section">
<p>
Namespacing is basically isolating the bootstrap classes names, like turning '.row' to
'.custom-row'
<br>
If you're using a namespaced bootstrap library, this option is for you.
</p>
<p>
<i class="fa fa-info fa-fw"></i> it is ideal to set this in jconfirm.defaults
</p>
<div class="space10"></div>
<pre class="prettyprint linenums"><code>$.confirm({
bootstrapClasses: {
container: 'container',
containerFluid: 'container-fluid',
row: 'row',
},
});</code></pre>
</div>
</section>
</div id=div_confirm_custom>
<br>
<hr color=goldenrod>
<img src=/imgs/btn/koeye.png id=img_confirm_drag onclick="toggle('div_confirm_drag'); return false;" height=20>
<h3>div_confirm_drag</h3>
<div id=div_confirm_drag hidden>
<section id="draggable">
<h2>Draggable</h2>
<div class="section">
<p>
Make the dialog draggable. simple. <br>
Draggable is set to TRUE by default.
</p>
<button class="btn btn-primary example-draggable">Draggable</button>
<div class="space10"></div>
<pre class="prettyprint linenums"><code>$.confirm({
title: 'Hello there',
content: 'click and hold on the title to drag',
draggable: true,
});</code></pre>
<script>
$('.example-draggable').click(function(){
$.alert({
title: 'Hello there',
content: 'click and hold on the title to drag',
draggable: true,
});
})
</script>
</div>
<h4 id="draggable-border">Window border</h4>
<div class="section">
<p>
By default jconfirm's modal is prevented from being dragged out of the window.
</p>
<button class="btn btn-primary example-draggable-border">Window border</button>
<div class="space10"></div>
<pre class="prettyprint linenums"><code>$.confirm({
title: 'Hello there',
content: 'Drag this modal out of the window',
draggable: true,
dragWindowBorder: false,
});</code></pre>
<script>
$('.example-draggable-border').click(function(){
$.alert({
title: 'Hello there',
content: 'Drag this modal out of the window',
draggable: true,
dragWindowBorder: false,
});
})
</script>
</div>
<h4 id="draggable-gap">Window gap</h4>
<div class="section">
<p>
If <code>dragWindowBorder</code> is set to <code>true</code> a defined space is maintained between the modal and the window.
<br> this distance can be changed with this feature.
</p>
<button class="btn btn-primary example-draggable-gap-0">Window gap 0px</button>
<button class="btn btn-primary example-draggable-gap-100">Window gap 100px</button>
<div class="space10"></div>
<pre class="prettyprint linenums"><code>$.confirm({
title: 'Hello there',
content: 'try to drag this modal out of the window',
draggable: true,
dragWindowGap: 0, // number of px of distance
});</code></pre>
<script>
$('.example-draggable-gap-0').click(function(){
$.alert({
title: 'Hello there',
content: 'try to drag this modal out of the window',
draggable: true,
dragWindowGap: 0,
});
});
$('.example-draggable-gap-100').click(function(){
$.alert({
title: 'Hello there',
content: 'try to drag this modal out of the window',
draggable: true,
dragWindowGap: 100,
});
});
</script>
</div>
</section>
</div id=div_confirm_drag_end>
<img src=/imgs/btn/koeye.png id=img_confirm_animation onclick="toggle('div_confirm_animation'); return false;" height=20>
<h3>div_confirm_animation</h3>
<div id=div_confirm_animation hidden>
<section id="animations">
<h2>Animations</h2>
<div class="well">
<p>
The animations section is moved to the animations.html page. <br>
This page has docs for animations for modal open/close and backgroundDismiss <br>
It also describes how to create custom animations.
</p>
<a class="btn btn-warning"
href="/js/confirm/animations.html">see Animations</a>
</div>
</section>
<section id="themes">
<h2>Themes</h2>
<div class="well">
<p>
The themes section is moved to the themes.html page <br>
This page has docs for themes & how to create custom themes
</p>
<a class="btn btn-warning"
href="/js/confirm/themes.html">see Themes</a>
</div>
</section>
<!-- jquery-confirm home middle -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-9535136378177592"
data-ad-slot="5978835267"
data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
<section id="ajaxloading">
<h2>Ajax loading</h2>
<p>
With jconfirm you have the power to load content directly when needed via ajax, no extra code. <br/>
Two methods are available to load content via Ajax:
</p>
<ol>
<li>Pass in String content the URL with "URL:" prepended.<br/>
<code>content: "URL:http://example.com/getData?id=1"</code>
</li>
<li>Pass in Function that returns a jQuery ajax promise. <br/>
<code>content: function(){ return $.get(...); }</code>
</li>
</ol>
<div class="alert alert-warning">
<i class="fa fa-info fa-fw"></i> From v3 onwards,
<strong>buttons are not disabled</strong>
until ajax call is complete. <br>
<i class="fa fa-info fa-fw"></i> contentLoaded is called when the ajax is complete. before the
content is put in DOM.
</div>
</section>
<h4 id="urlprefix">Using the "URL:" prefix</h4>
<div class="section">
<p>
Using the url prefix is the quick way, however has some limitations like you cannot modify the ajax
call's method, dataType, etc.<br/>
To use, prepend your URL with "URL:" ends up like "URL:http://example.com/file.extension". <br/>
</p>
<p class="text-info">
<i class="fa fa-lightbulb-o"></i> NOTE: the returned data <u>is set as content automatically</u> before
contentLoaded callback is called.
</p>
<button class="btn btn-primary example18-1">Load from text.txt</button>
<a class="btn btn-default"
href="text.txt"
target="new"><i class="fa fa-external-link"></i> view text.txt
</a>
<div class="space10"></div>
<pre class="prettyprint linenums"><code>$.confirm({
title: 'Title',
content: 'url:text.txt',
onContentReady: function () {
var self = this;
this.setContentPrepend('<div>Prepended text</div>');
setTimeout(function () {
self.setContentAppend('<div>Appended text after 2 seconds</div>');
}, 2000);
},
columnClass: 'medium',
});</code></pre>
<script type="text/javascript">
$('.example18-1').on('click', function(){
$.confirm({
title: 'Title',
content: 'url:text.txt',
onContentReady: function(){
var self = this;
this.setContentPrepend('<div>Prepended text</div>');
setTimeout(function(){
self.setContentAppend('<div>Appended text after 2 seconds</div>');
}, 2000);
},
animation: 'scale',
columnClass: 'medium',
closeAnimation: 'scale',
});
});
</script>
</div>
<h4 id="ajaxpromise">Using Ajax promise</h4>
<div class="section">
<p>
This option provides full control over the ajax options and what data is to be inserted.
The content takes a function that returns a jQuery promise ($.ajax, $.get, $.post, etc.).
In this example a json object is requested, and a part of it is set as content.
</p>
<p class="text-info">
<i class="fa fa-lightbulb-o"></i> NOTE: the returned data <u>is NOT set as content automatically</u>, you
must set the content yourself.
</p>
<button class="btn btn-primary example18-2">Load from bower.json</button>
<a class="btn btn-default"
href="bower.json"
target="new"><i class="fa fa-external-link"></i> view bower.json
</a>
<div class="space10"></div>
<script type="text/javascript">
$('.example18-2').on('click', function(){
$.confirm({
content: function(){
var self = this;
self.setContent('This plugin\'s bower file');
return $.ajax({
url: 'bower.json',
dataType: 'json',
method: 'get'
}).done(function(response){
self.setContentAppend('<br>Description: ' + response.description);
self.setContentAppend('<br>Version: ' + response.version);
self.setTitle(response.name);
}).fail(function(){
self.setContent('Something went wrong.');
}).always(function(){
});
},
});
});
</script>
<pre class="prettyprint linenums"><code>$.confirm({
content: function () {
var self = this;
return $.ajax({
url: 'bower.json',
dataType: 'json',
method: 'get'
}).done(function (response) {
self.setContent('Description: ' + response.description);
self.setContentAppend('<br>Version: ' + response.version);
self.setTitle(response.name);
}).fail(function(){
self.setContent('Something went wrong.');
});
}
});</code></pre>
</div>
<h4 id="content-loaded">Ajax complete callback <code>contentLoaded</code></h4>
<div class="section">
<p>
When the ajax call is complete the <code>contentLoaded</code> function is called with arguments
Data, Status & Xhr object. <br>
<span class="text-warning"><code>contentLoaded</code> is called before the content is put in DOM</span>
<br>
<i class="fa fa-info"></i> If you want to do stuff after the content has put in DOM, use <code>onContentReady</code>
</p>
<div class="space10"></div>
<div class="row">
<div class="col-md-8">
<pre class="prettyprint linenums"><code>$.confirm({
content: 'url:text.txt',
contentLoaded: function(data, status, xhr){
// data is already set in content
this.setContentAppend('<br>Status: ' + status);
}
});</code></pre>
</div>
<div class="col-md-4">
<p>
Using the url: prefix method
</p>
<button class="btn btn-primary example18-1-1 btn-block">Using contentLoaded callback</button>
</div>
<div class="col-md-8">
<pre class="prettyprint linenums"><code>$.confirm({
content: function(){
var self = this;
self.setContent('Checking callback flow');
return $.ajax({
url: 'bower.json',
dataType: 'json',
method: 'get'
}).done(function (response) {
self.setContentAppend('<div>Done!</div>');
}).fail(function(){
self.setContentAppend('<div>Fail!</div>');
}).always(function(){
self.setContentAppend('<div>Always!</div>');
});
},
contentLoaded: function(data, status, xhr){
self.setContentAppend('<div>Content loaded!</div>');
},
onContentReady: function(){
this.setContentAppend('<div>Content ready!</div>');
}
});</code></pre>
</div>
<div class="col-md-4">
<p>
Using the Ajax promise method
</p>
<button class="btn btn-primary example18-1-1-1 btn-block">Demo content callbacks</button>
<div style="height: 10px;"></div>
<p>
You can set your content in any of the callbacks.
callback execution flow:
</p>
<ol>
<li>Promise's done</li>
<li>Promise's always</li>
<li>contentLoaded</li>
<li>onContentReady</li>
</ol>
</div>
</div>
<script>
$('.example18-1-1').on('click', function(){
$.confirm({
content: 'url:text.txt',
contentLoaded: function(data, status, xhr){
// data is already set in content
this.setContentAppend('<br>Status: ' + status);
}
});
});
$('.example18-1-1-1').on('click', function(){
$.confirm({
content: function(){
var self = this;
self.setContent('Checking callback flow');
return $.ajax({
url: 'bower.json',
dataType: 'json',
method: 'get'
}).done(function(response){
self.setContentAppend('<div>Done!</div>');
}).fail(function(){
self.setContentAppend('<div>Fail!</div>');
}).always(function(){
self.setContentAppend('<div>Always!</div>');
});
},
contentLoaded: function(data, status, xhr){
this.setContentAppend('<div>Content loaded!</div>');
},
onContentReady: function(){
this.setContentAppend('<div>Content ready!</div>');
}
});
});
</script>
</div>
<section>
<h2 id="autoclose">Auto close</h2>
<p>
Do a action if the user does not respond within the specified time. <br>
This comes in handly when the user is about to do something critical. <br/>
The <code>autoClose</code> option takes in a string, like <code>'confirm|4000'</code> where confirm
is the action to trigger after 4000 milliseconds.
<br>
<i class="fa fa-info"></i> Practical examples of autoClose
</p>
<div class="section">
<button class="btn btn-primary example20">Delete user</button>
<button class="btn btn-primary example21">Logout myself</button>
<div class="space10"></div>
<pre class="prettyprint linenums"><code>$.confirm({
title: 'Delete user?',
content: 'This dialog will automatically trigger \'cancel\' in 6 seconds if you don\'t respond.',
autoClose: 'cancelAction|8000',
buttons: {
deleteUser: {
text: 'delete user',
action: function () {
$.alert('Deleted the user!');
}
},
cancelAction: function () {
$.alert('action is canceled');
}
}
});
$.confirm({
title: 'Logout?',
content: 'Your time is out, you will be automatically logged out in 10 seconds.',
autoClose: 'logoutUser|10000',
buttons: {
logoutUser: {
text: 'logout myself',
action: function () {
$.alert('The user was logged out');
}
},
cancel: function () {
$.alert('canceled');
}
}
});</code></pre>
<script type="text/javascript">
$('.example20').on('click', function(){
$.confirm({
title: 'Delete user?',
content: 'This dialog will automatically trigger \'cancel\' in 6 seconds if you don\'t respond.',
autoClose: 'cancelAction|8000',
buttons: {
deleteUser: {
text: 'delete user',
action: function(){
$.alert('Deleted the user!');
}
},
cancelAction: function(){
$.alert('action is canceled');
}
}
});
});
$('.example21').on('click', function(){
$.confirm({
title: 'Logout?',
content: 'Your time is out, you will be automatically logged out in 10 seconds.',
autoClose: 'logoutUser|10000',
buttons: {
logoutUser: {
text: 'logout myself',
action: function(){
$.alert('The user was logged out');
}
},
cancel: function(){
$.alert('canceled');
}
}
});
});
</script>
</div>
</section>
<section id="backgrounddismiss">
<h2>
Background dismiss
</h2>
<div class="section">
<p>
Control what happens if the user clicks outside the modal. <br/>
</p>
<div class="alert alert-warning">
backgroundDismiss is set to false by default.
</div>
<button class="btn btn-primary example22">Allow backgroundDismiss</button>
<div class="space10"></div>
<pre class="prettyprint linenums"><code>$.confirm({
backgroundDismiss: true, // this will just close the modal
});
$.confirm({
backgroundDismiss: function(){
return false; // modal wont close.
},
});
$.confirm({
backgroundDismiss: function(){
return 'buttonName'; // the button will handle it
},
});
$.confirm({
backgroundDismiss: 'buttonName',
content: 'in here the backgroundDismiss action is handled by buttonName' +
'<div class="checkbox"><label><input type="checkbox" id="enableCheckbox"> Enable backgroundDismiss</label></div>',
buttons: {
buttonName: function () {
var $checkbox = this.$content.find('#enableCheckbox');
return $checkbox.prop('checked');
},
close: function () {
}
}
});</code></pre>
<script type="text/javascript">
$('.example22').on('click', function(){
$.confirm({
backgroundDismiss: 'buttonName',
content: 'in here the backgroundDismiss action is handled by buttonName' +
'<div class="checkbox"><label><input type="checkbox" id="enableCheckbox"> Enable backgroundDismiss</label></div>',
buttons: {
buttonName: function(){
var $checkbox = this.$content.find('#enableCheckbox');
return $checkbox.prop('checked');
},
close: function(){
}
}
});
});
</script>
</div>
<h4 id="backgrounddismiss-animations">Background dismiss animation</h4>
<div class="section">
<p>
Fancy animations to grab users attention. Click outside the modal to see the animation.
</p>
<button class="btn btn-primary example22-1-1-1">Shake (default)</button>
<button class="btn btn-primary example22-1-1-2">Glow</button>
<div class="space10"></div>
<pre class="prettyprint linenums"><code>$.confirm({
backgroundDismiss: false,
backgroundDismissAnimation: 'shake',
});
$.confirm({
backgroundDismiss: false,
backgroundDismissAnimation: 'glow',
});</code></pre>
</div>
<script>
$('.example22-1-1-1').on('click', function(){
$.confirm({
backgroundDismiss: false,
backgroundDismissAnimation: 'shake',
});
});
$('.example22-1-1-2').on('click', function(){
$.confirm({
backgroundDismiss: false,
backgroundDismissAnimation: 'glow',
});
});
</script>
</section>
<section id="escape-key">
<h2>
Escape key
</h2>
<p>
Control what happens when the escape key is pressed. This is enabled by default. <br>
backgroundDismiss is called when escape key is pressed. if backgroundDismiss is false, it will shake
the modal.
</p>
<div class="section">
<button class="btn btn-primary example22-1">Escape key</button>
<button class="btn btn-primary example22-1-2">Escape key handled with button</button>
<script type="text/javascript">
$('.example22-1').on('click', function(){
$.confirm({
escapeKey: true,
backgroundDismiss: false,
});
});
$('.example22-1-2').on('click', function(){
$.confirm({
escapeKey: 'buttonName',
buttons: {
buttonName: function(){
$.alert('Button name was called');
},
close: function(){
}
}
});
});
</script>
<div class="space10"></div>
<pre class="prettyprint linenums"><code>$.confirm({
escapeKey: true,
backgroundDismiss: false,
});
$.confirm({
escapeKey: 'buttonName',
buttons: {
buttonName: function(){
$.alert('Button name was called');
},
close: function(){
}
}
});
</code></pre>
</div>
</section>
</div id=div_confirm_animation_end>
<img src=/imgs/btn/koeye.png id=img_confirm_rtl
onclick="toggle('div_confirm_rtl'); return false;" height=20>
<h3>div_confirm_rtl</h3>
<div id=div_confirm_rtl hidden>
<h1>div_confirm_rtl</h3>
<section id="rtl">
<h2>RTL support</h2>
<div class="section">
<p>
If you need to show the confirm box in rtl then you should set the rtl option to true.
</p>
<button class="btn btn-primary example23-1-1">Try RTL</button>
<button class="btn btn-primary example23-1-1-1">Try RTL with icon</button>
<script type="text/javascript">
$('.example23-1-1').on('click', function(){
$.alert({
title: 'پیغام',
content: 'این یک متن به زبان شیرین فارسی است',
rtl: true,
theme: 'light',
closeIcon: true,
buttons: {
confirm: {
text: 'تایید',
btnClass: 'btn-blue',
action: function(){
$.alert('تایید شد.');
}
},
cancel: {
text: 'انصراف',
action: function(){
}
}
}
});
});
$('.example23-1-1-1').on('click', function(){
$.alert({
title: 'پیغام',
icon: 'fa fa-rocket',
content: 'این یک متن به زبان شیرین فارسی است',
rtl: true,
theme: 'light',
closeIcon: true,
buttons: {
confirm: {
text: 'تایید',
btnClass: 'btn-blue',
action: function(){
$.alert('تایید شد.');
}
},
cancel: {
text: 'انصراف',
action: function(){
}
}
}
});
});
</script>
<div class="space10"></div>
<pre class="prettyprint linenums"><code>$.alert({
title: 'پیغام',
content: 'این یک متن به زبان شیرین فارسی است',
rtl: true,
closeIcon: true,
buttons: {
confirm: {
text: 'تایید',
btnClass: 'btn-blue',
action: function () {
$.alert('تایید شد.');
}
},
cancel: {
text: 'انصراف',
action: function () {
}
}
}
});</code></pre>
</div>
</section>
</div id=div_confirm_rtl_end>
<img src=/imgs/btn/koeye.png id=img_confirm_callbacks onclick="toggle('div_confirm_callbacks');return false;" height=20>
<h3>div_confirm_callbacks</h3>
<div id=div_confirm_callbacks hidden>
<section id="callbacks">
<h2>Callbacks</h2>
<div class="section">
<p>
Get more control over the modal, mainly important for binding events for the modal elements.
<br>
<i class="fa fa-info fa-fw"></i>
contentLoaded callback is called when <a href="#ajaxloading">Ajax loading</a> is used
</p>
<button class="btn btn-primary example22-1-1">Test Callbacks</button>
<script type="text/javascript">
$('.example22-1-1').on('click', function(){
$.confirm({
title: false,
content: 'url:callback.html',
onContentReady: function(){
alert('onContentReady');
var self = this;
this.buttons.ok.disable();
this.$content.find('.btn').click(function(){
self.$content.find('input').val('Chuck norris');
self.buttons.ok.enable();
});
},
contentLoaded: function(data, status, xhr){
alert('contentLoaded: ' + status);
},
onOpenBefore: function(){
alert('onOpenBefore');
},
onOpen: function(){
alert('onOpen');
},
onClose: function(){
alert('onClose');
},
onDestroy: function(){
alert('onDestroy');
},
onAction: function(btnName){
alert('onAction: ' + btnName);
},
buttons: {
ok: function(){
}
}
});
});
</script>
<div class="space10"></div>
<pre class="prettyprint linenums"><code>$.confirm({
title: false,
content: 'url:callback.html',
onContentReady: function () {
// when content is fetched & rendered in DOM
alert('onContentReady');
var self = this;
this.buttons.ok.disable();
this.$content.find('.btn').click(function(){
self.$content.find('input').val('Chuck norris');
self.buttons.ok.enable();
});
},
contentLoaded: function(data, status, xhr){
// when content is fetched
alert('contentLoaded: ' + status);
},
onOpenBefore: function () {
// before the modal is displayed.
alert('onOpenBefore');
},
onOpen: function () {
// after the modal is displayed.
alert('onOpen');
},
onClose: function () {
// before the modal is hidden.
alert('onClose');
},
onDestroy: function () {
// when the modal is removed from DOM
alert('onDestroy');
},
onAction: function (btnName) {
// when a button is clicked, with the button name
alert('onAction: ' + btnName);
},
buttons: {
ok: function(){
}
}
});</code></pre>
</div>
</section>
<section id="globaldefaults">
<h2>Global defaults</h2>
<div class="section">
<p>
You can setup global settings for your jconfirm.
</p>
<p class="text-danger"><i class="fa fa-info-circle fa-fw"></i> jconfirm.defaults should be set after
the plugin has loaded. of course.</p>
<pre class="prettyprint linenums"><code>jconfirm.defaults = {
title: 'Hello',
titleClass: '',
type: 'default',
typeAnimated: true,
draggable: true,
dragWindowGap: 15,
dragWindowBorder: true,
animateFromElement: true,
smoothContent: true,
content: 'Are you sure to continue?',
buttons: {},
defaultButtons: {
ok: {
action: function () {
}
},
close: {
action: function () {
}
},
},
contentLoaded: function(data, status, xhr){
},
icon: '',
lazyOpen: false,
bgOpacity: null,
theme: 'light',
animation: 'scale',
closeAnimation: 'scale',
animationSpeed: 400,
animationBounce: 1,
rtl: false,
container: 'body',
containerFluid: false,
backgroundDismiss: false,
backgroundDismissAnimation: 'shake',
autoClose: false,
closeIcon: null,
closeIconClass: false,
watchInterval: 100,
columnClass: 'col-md-4 col-md-offset-4 col-sm-6 col-sm-offset-3 col-xs-10 col-xs-offset-1',
boxWidth: '50%',
scrollToPreviousElement: true,
scrollToPreviousElementAnimate: true,
useBootstrap: true,
offsetTop: 40,
offsetBottom: 40,
bootstrapClasses: {
container: 'container',
containerFluid: 'container-fluid',
row: 'row',
},
onContentReady: function () {},
onOpenBefore: function () {},
onOpen: function () {},
onClose: function () {},
onDestroy: function () {},
onAction: function () {}
};</code></pre>
</div>
</section>
</div id=div_confirm_callbacks_end>
<img src=/imgs/btn/koeye.png id=img_confirm_options onclick="toggle('div_confirm_options');return false;" height=20>
<h3>div_confirm_options</h3>
<div id=div_confirm_options hidden>
<section id="options">
<h2>Options</h2>
<div class="section">
<p>Options, their defaults, possibilities and explanations.</p>
<div class="table-responsive">
<table class="table table-bordered table-striped">
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th>Description</th>
</tr>
<tr>
<td>title</td>
<td>String, Function</td>
<td>
<code>'Hello'</code>
</td>
<td>Title of the dialog. <br>
Also accepts a function that returns a string.
</td>
</tr>
<tr>
<td>titleClass</td>
<td>String</td>
<td>
<code>''</code>
</td>
<td>
Class that will be applied to the title.
</td>
</tr>
<tr>
<td>type</td>
<td>String</td>
<td>
<code>'default'</code>
</td>
<td>
Colors the modal to give the user a hint of success/failure/warning, <br>
available options are: 'blue, green, red, orange, purple & dark'
</td>
</tr>
<tr>
<td>typeAnimated</td>
<td>Boolean</td>
<td>
<code>true</code>
</td>
<td>
Adds a little animation to the colors.
</td>
</tr>
<tr>
<td>draggable</td>
<td>Boolean</td>
<td>
<code>true</code>
</td>
<td>
Makes the dialog draggable,
the drag point is the title of the model, if the title is not defined the model
won't be draggable.
<br>
alignMiddle is set to false, when using draggable.
</td>
</tr>
<tr>
<td>dragWindowGap</td>
<td>Number</td>
<td>
<code>15</code>
</td>
<td>
Draggable gap between the modal and window, defaults to 15px
</td>
</tr>
<tr>
<td>dragWindowBorder</td>
<td>Boolean</td>
<td>
<code>true</code>
</td>
<td>
If the modal should be restricted inside the window
</td>
</tr>
<tr>
<td>animateFromElement</td>
<td>Boolean</td>
<td>
<code>true</code>
</td>
<td>
Animates the modal from the clicked element
</td>
</tr>
<tr>
<td>alignMiddle</td>
<td>Boolean</td>
<td>
<code>true</code>
</td>
<td>
IMPORTANT <code>@deprecated</code>
The model will be position in center of the screen.
When the content in the model changes, the model is reposition itself.
</td>
</tr>
<tr>
<td>smoothContent</td>
<td>Boolean</td>
<td>
<code>true</code>
</td>
<td>
Smooth height transition when content in modal changes.
</td>
</tr>
<tr>
<td>content</td>
<td>String, Function</td>
<td><code>'Are you sure to continue?'</code></td>
<td>
Content for the dialog. <br>
Accepts functions that return string or ajax promise.
</td>
</tr>
<tr>
<td>contentLoaded</td>
<td>Function</td>
<td><code>function(data,status,xhr){}</code></td>
<td>
In use only when content is loaded via Ajax.
is called on always callback of $.ajax
</td>
</tr>
<tr>
<td>buttons</td>
<td>Object</td>
<td><code>{}</code></td>
<td>
Multiple definition of buttons
<br>
please see <a href="#defining-buttons">button definition</a> for button properties
</td>
</tr>
<tr>
<td>icon</td>
<td>String</td>
<td><code>''</code></td>
<td>
Icon class prepended before the title.
ex: 'fa fa-icon'
</td>
</tr>
<tr>
<td>lazyOpen</td>
<td>Boolean</td>
<td><code>false</code></td>
<td>
Does not open the modal instantly. <br>
requires to call the open() function to open the modal
</td>
</tr>
<tr>
<td>bgOpacity</td>
<td>Float</td>
<td><code>null</code></td>
<td>
if null, the theme's default bg opacity is applied.
</td>
</tr>
<tr>
<td>theme</td>
<td>String</td>
<td><code>'light'</code></td>
<td>Color theme for the dialog.<br>
possible options are 'light', 'dark', 'material' & 'bootstrap'
</td>
</tr>
<tr>
<td>animation</td>
<td>String</td>
<td><code>'zoom'</code></td>
<td>
The Open animation for the dialog.<br>
possible options are right, left, bottom, top, rotate, none, opacity, scale, zoom,
scaleY, scaleX, rotateY, rotateYR (reverse), rotateX, rotateXR (reverse)
<br>
<span class="text-info">The 'blur' animation was removed in v1.1.2</span>
</td>
</tr>
<tr>
<td>closeAnimation</td>
<td>String</td>
<td><code>'scale'</code></td>
<td>
The close animation for the dialog. Same options as animation.
</td>
</tr>
<tr>
<td>animationSpeed</td>
<td>Number</td>
<td><code>400</code></td>
<td>Animation duration in milliseconds.</td>
</tr>
<tr>
<td>animationBounce</td>
<td>Float</td>
<td><code>1</code></td>
<td>Adds a Bounce open animation, <br>1 = No bounce</td>
</tr>
<tr>
<td>escapeKey</td>
<td>Boolean, String</td>
<td><code>false</code></td>
<td>
if false, escapeKey wont work, <br>
if true, will work, but no callbacks, <br>
if string, will be assigned to button.
</td>
</tr>
<tr>
<td>rtl</td>
<td>Boolean</td>
<td><code>false</code></td>
<td>
Use the Right to left text layout.
</td>
</tr>
<tr>
<td>container</td>
<td>String</td>
<td><code>'body'</code></td>
<td>
Specify where the generated HTML content for jconfirm should append. <br>
By default it appends in the document's <body>.
</td>
</tr>
<tr>
<td>containerFluid</td>
<td>Boolean</td>
<td><code>false</code></td>
<td>
If true, will use the container-fluid layout, to use the full browser width.
</td>
</tr>
<tr>
<td>backgroundDismiss</td>
<td>Boolean, String, Function</td>
<td><code>false</code></td>
<td>
If false, user wont be able to exit by clicking out. <br>
If true, user will be able to click out, no callback. <br>
If string, will be assigned to button. <br>
If function, will be used as callback.
</td>
</tr>
<tr>
<td>backgroundDismissAnimation</td>
<td>String</td>
<td><code>'shake'</code></td>
<td>
Animation to perform to grab the user's attention when user clicks out of the box.
</td>
</tr>
<tr>
<td>autoClose</td>
<td>String</td>
<td><code>false</code></td>
<td>
Auto-close the dialog within a specified time, if the user doesn't respond.<br>
possible option <code>'buttonName|400'</code> <br>
<p class="text-info">
the string is divided in two halves with pipe <code>'|'</code>, the first part
specifies the button name to trigger. The other
half specifies the wait time in milliseconds.
</p>
</td>
</tr>
<tr>
<td>closeIcon</td>
<td>Boolean</td>
<td><code>null</code></td>
<td>
By default closeIcon is visible if both buttons are false. (dialog mode). <br>
closeIcon can be shown by setting this value to true.
</td>
</tr>
<tr>
<td>closeIconClass</td>
<td>String</td>
<td><code>false</code></td>
<td>
By default jQuery confirm uses × html entity for this close symbol. You can
provide icon class here to change it. <br>
</td>
</tr>
<tr>
<td>watchInterval</td>
<td>Number</td>
<td><code>100</code></td>
<td>
Watch the modal for changes and is centered on screen. <br>
<i class="fa fa-info"></i> Added in v 2.5.0
</td>
</tr>
<tr>
<td>columnClass</td>
<td>String</td>
<td><code>'col-md-4 col-md-offset-4 col-sm-6 col-sm-offset-3 col-xs-10
col-xs-offset-1'</code></td>
<td>
Provides a better way to set Custom width and is responsive.<br>
You can also set custom widths for different display sizes using the Bootstraps
grid.
</td>
</tr>
<tr>
<td>useBootstrap</td>
<td>Boolean</td>
<td><code>true</code></td>
<td>
if true, bootstrap classes will be set on the modal. 'columnClass' wil be set on the
box.
if false, bootstrap classes will not be set, instead 'boxWidth' will be set on the
box.
</td>
</tr>
<tr>
<td>boxWidth</td>
<td>String</td>
<td><code>'50%'</code></td>
<td>
This options sets the width of the box, when you're not planning to use bootstrap in
your project
<br>
<i class="fa fa-info"></i> Will only work if 'useBootstrap' is set to false,
</td>
</tr>
<tr>
<td>scrollToPreviousElement</td>
<td>Boolean</td>
<td><code>true</code></td>
<td>
Scroll back to the element that was focused before jconfirm model opened.
</td>
</tr>
<tr>
<td>scrollToPreviousElementAnimate</td>
<td>Boolean</td>
<td><code>true</code></td>
<td>
Animates the scroll to previous element.
</td>
</tr>
<tr>
<td>offsetTop</td>
<td>Number</td>
<td><code>40</code></td>
<td>
The model will maintain at least 50px from the window's top.
</td>
</tr>
<tr>
<td>offsetBottom</td>
<td>Number</td>
<td><code>40</code></td>
<td>
The model will maintain at least 50px from the window's bottom.
</td>
</tr>
<tr>
<td>bootstrapClasses</td>
<td>object</td>
<td><code>{
container: 'container',
containerFluid: 'container-fluid',
row: 'row',
}</code></td>
<td>
These are the default classes that are set when bootstrap is used,
this option is available to folks who use namespaced bootstrap classes.
</td>
</tr>
<tr>
<td>onContentReady</td>
<td>Function</td>
<td><code>function(){}</code></td>
<td>
is called when the content is put in DOM and the modal is open. (When the modal is
completed ready.)
</td>
</tr>
<tr>
<td>onOpenBefore</td>
<td>Function</td>
<td><code>function(){}</code></td>
<td>
is called when the modal is going to be opened.
</td>
</tr>
<tr>
<td>onOpen</td>
<td>Function</td>
<td><code>function(){}</code></td>
<td>
is called when the modal has finished opening.
</td>
</tr>
<tr>
<td>onClose</td>
<td>Function</td>
<td><code>function(){}</code></td>
<td>
is called when the modal is going to be closed.
</td>
</tr>
<tr>
<td>onDestroy</td>
<td>Function</td>
<td><code>function(){}</code></td>
<td>
is called after the modal element is removed from the DOM.
</td>
</tr>
<tr>
<td>onAction</td>
<td>Function</td>
<td><code>function(buttonName){}</code></td>
<td>
is called when any of the button is clicked. buttonName is provided as argument.
</td>
</tr>
</table>
</div>
</div>
</section>
</div id=div_confirm_options_end >
<!-- jquery-confirm home bottom -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-9535136378177592"
data-ad-slot="5560032868"
data-ad-format="auto"></ins>
<img src=/imgs/btn/koeye.png id=img_confirm_api onclick="toggle('div_confirm_api');return false;" height=20>
<h3>div_confirm_api</h3>
<div id=div_confirm_api hidden>
<section id="api">
<h2>Api</h2>
<p>
These are a few stuff, that will let you interact and make changes in your modal on run time. <br>
The function <code>$.confirm()</code> returns an object on execution. <br>
</p>
<pre class="prettyprint linenums"><code>var jc = $.confirm({
title: 'awesome',
onContentReady: function(){
// this === jc
}
});</code></pre>
<div>
<h4 id="api-settitle">
<code>jc.setTitle(title: string)</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Sets the title and overwrites jc.title</p>
</div>
</div>
<div>
<h4 id="api-seticon">
<code>jc.setIcon(iconClass: string)</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Sets the title and overwrites jc.title</p>
</div>
</div>
<div>
<h4 id="api-setcontent">
<code>jc.setContent(content: string | jQuery)</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Sets the content and overwrites jc.content</p>
</div>
</div>
<div>
<h4 id="api-setcontentprepend">
<code>jc.setContentPrepend(content: string | jQuery)</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Prepends content to content.</p>
</div>
</div>
<div>
<h4 id="api-setcontentappend">
<code>jc.setContentAppend(content: string | jQuery)</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Appends content to content</p>
</div>
</div>
<div>
<h4 id="api-set-type">
<code>jc.setType(typeClass: string)</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Sets a new type class</p>
</div>
</div>
<div>
<h4 id="api-show-loading">
<code>jc.showLoading(disableButtons: boolean)</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Show loading spinner inside modal, disableButtons if set to true will disable the buttons.</p>
</div>
</div>
<div>
<h4 id="api-hide-loading">
<code>jc.hideLoading(enableButtons: boolean)</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Hide loading spinner inside modal, enableButtons if set to true will enable the buttons.</p>
</div>
</div>
<div>
<h4 id="api-close">
<code>jc.close() : boolean</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>The close method closes/destroys the dialog.</p>
</div>
</div>
<div>
<h4 id="api-open">
<code>jc.open() : boolean</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Opens the modal again, if it is closed. (Added in v3.0.0)</p>
</div>
</div>
<div>
<h4 id="api-toggle">
<code>jc.toggle()</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>toggle open_close modal</p>
</div>
</div>
<div>
<h4 id="api-highlight">
<code>jc.highlight()</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Trigger background dismiss animation</p>
</div>
</div>
<div>
<h4 id="api-set-boxwidth">
<code>jc.setBoxWidth(width: string)</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Set the box width of the modal. Only if useBootstrap is set to false</p>
</div>
</div>
<div>
<h4 id="api-set-columnclass">
<code>jc.setColumnClass(className: string)</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Set the bootstrap column class of the modal. Only if useBootstrap is set to true</p>
</div>
</div>
<div>
<h4 id="api-set-theme">
<code>jc.setTheme(themeName: string)</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Set the theme class of the modal.</p>
</div>
</div>
<div>
<h4 id="api-isclosed">
<code>jc.isClosed() : boolean</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>
returns true if the modal is closed, else false.
</p>
</div>
</div>
<div>
<h4 id="api-isopen">
<code>jc.isOpen() : boolean</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>
returns true if the modal is open, else false.
</p>
</div>
</div>
<div>
<h4 id="api-setdialogcenter">
<code style="text-decoration: line-through">jc.setDialogCenter()</code> <kbd>Deprecated</kbd>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Centers the dialog on screen. This is done for you by the watch timer when the content
changes.</p>
</div>
</div>
<div>
<h4 id="api-button-settext">
<code>jc.buttons.<buttonName>.setText(text: string)</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Set text for a button</p>
</div>
</div>
<div>
<h4 id="api-button-addclass">
<code>jc.buttons.<buttonName>.addClass(className: string)</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Adds a class to the button</p>
</div>
</div>
<div>
<h4 id="api-button-removeclass">
<code>jc.buttons.<buttonName>.removeClass(className: string)</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Removes class from the button</p>
</div>
</div>
<div>
<h4 id="api-button-disable">
<code>jc.buttons.<buttonName>.disable()</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Disabled the button with attribute <code>disabled='disabled'</code></p>
</div>
</div>
<div>
<h4 id="api-button-enable">
<code>jc.buttons.<buttonName>.enable()</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Enables a previously disabled button</p>
</div>
</div>
<div>
<h4 id="api-button-hide">
<code>jc.buttons.<buttonName>.hide()</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Hides the button using CSS 'display: none'</p>
</div>
</div>
<div>
<h4 id="api-button-show">
<code>jc.buttons.<buttonName>.show()</code>
</h4>
<p><kbd>function</kbd></p>
<div class="section">
<p>Shows a previously hidden button</p>
</div>
</div>
<div>
<h4 id="api-body">
<code>jc.$body</code>
</h4>
<p><kbd>jquery DOM element</kbd></p>
<div class="section">
<p>
Alias: jc.$b, is the modal body that includes buttons content title and stuff.
</p>
</div>
</div>
<div>
<h4 id="api-content">
<code>jc.$content</code>
</h4>
<p><kbd>jquery DOM element</kbd></p>
<div class="section">
<p>You can access your Dialogs contents via this object.</p>
</div>
</div>
<div>
<h4 id="api-title">
<code>jc.$title</code>
</h4>
<p><kbd>jquery DOM element</kbd></p>
<div class="section">
<p>To access the title DOM of the modal. same use as with $content</p>
</div>
</div>
<div>
<h4 id="api-icon">
<code>jc.$icon</code>
</h4>
<p><kbd>jquery DOM element</kbd></p>
<div class="section">
<p>To access the icon DOM of the modal. same use as with $content </p>
</div>
</div>
<div>
<h4 id="api-target">
<code>jc.$target</code>
</h4>
<p><kbd>jquery DOM element</kbd></p>
<div class="section">
<p>To access the clicked element, <i class="fa fa-info"></i> only available when using
$(element).confirm() and using a confirm callback.</p>
</div>
</div>
</section>
<section class="text-right footer">
<div class="spacer15"></div>
</section>
</div id=div_confirm_api_end>
</div id=div_confirm_usage >
<br>
<hr color=goldenrod>
<hr color=goldenrod>
<hr color=goldenrod>
<img src=/imgs/btn/koeye.png id=div_confirm height=40 onclick="toggle('div_confirm');return false;">div_confirm1
</div>
</div>
</div>
</div id=div_confirm_end>
<!--
<hr color=goldenrod>
<br>
<hr color=goldenrod>
<br><br>
<hr color=goldenrod>
<br><br><br>
<hr color=goldenrod>
<hr color=goldenrod>
<hr color=goldenrod>
-->
<br>
<hr color=goldenrod>
<img src=/imgs/btn/koeye.png id=img_tail onclick="toggle('div_tail');return false;" height=20>div_tail
<div id=div_tail hidden>
<h2>div_tail</h2>
<img src=/imgs/gif/giphy_ko7.gif id=img_tail onclick="window.open('/imgs/gif/giphy_ko7.gif'); return false;" height=100>gif
<hr color=goldenrod>
<a href=/index.html target=_blank> <img src=/ko.png height=25></a>
<hr color=goldenrod>
</div id=div_tail_end>
<br>
<hr color=goldenrod>
<img src=/imgs/btn/koeye.png id=img_leds onclick="toggle('div_leds');return false;" height=20>div_leds
<div id=div_leds>
<div id=div_leds_end>
<script id=script_leds>
function ko_leds(args) {
htmout = "";
alert( "BUGS_42280 ko_leds args="+args) ;
return(htmout);
}
</script id=script_leds_end>
</body>
</html>
//
koh5_pano
Drag mouse to navigate.
Navigation
- Left/Right Mouse drag: Changes camera heading.
- Up/Sown Mouse drag: Changes camera pitch.
- Scroll wheel: Changes camera field of view.
- I-Key: Displays Info panel with canvas size, image size and FPS.
17.Aug.2010, Martin Wengenmayer