@homoran
Hier ist soweit mein Code, angelehnt an das Beispiel aus dem Netz.
const schedule = require('node-schedule');
const EventEmitter = require('events');
class Ee extends EventEmitter {}
const jobStatus = new Ee();
jobStatus.on('finished', () => {
console.log('JOB FINISHED');
job.cancel();
// Preform your DB Operations here (in your case: delete job from database)
});
function calcSecondsFromTime(time){
//console.log("Time: " + time);
var array = time.split(":");
var seconds = 0;
if(typeof(array[2] = "undefined")){
seconds = (parseInt(array[0], 10) * 60 * 60) + (parseInt(array[1], 10) * 60);
} else {
seconds = (parseInt(array[0], 10) * 60 * 60) + (parseInt(array[1], 10) * 60) + parseInt(array[2], 10);
}
//console.log("Array: "+ array.length +" Seconds: " + seconds);
//console.log(array[0] +" -- " + array[1] +" -- " + array[2] +" -- " );
return seconds;
}
//So funktioniert das nicht.
const strStart = "20:10"
const strEnd = "21:15"
const startTime = calcSecondsFromTime(strStart);
const endTime = calcSecondsFromTime(strEnd);
log("StartTime: " + startTime,"info");
log("EndTime: " + endTime, "info");
/*
//So funktioniert das.
const startTime = new Date(Date.now() + 5000);
const endTime = new Date(startTime.getTime() + 5000);
*/
const job = schedule.scheduleJob({ start: startTime, end: endTime, rule: '*/1 * * * * *' }, function(){
console.log('Time for tea!');
if (this.nextInvocation() === null) {
//here you can code whatever you need to do in the last invocation
jobStatus.emit('finished'); // Emit your job done emitter when you are done.
}
});
Das mit dem jeweiligen Timestamp um Mitternacht setzt immer eine Bearbeitung voraus. Mein Ziel ist es aber einmal Start und Ende als hh:mm anzugeben und dann nicht mehr.
Wenn ich in Blockly den Wizard vom kleinen Cron Bauteil nehme, kann ich da Start und Endzeit eingeben.
Dann kommt als JS sowas raus:
'{"time":{"start":"08:00","end":"20:00","mode":"minutes","interval":2},"period":{"days":1}}'
Und das habe ich mit den Werten aus den Objekten nachgebaut und es funktioniert.
Hier ist mein Ansatz als Blockly. Den Teil mit nextInvocation ist in der function createSchedule als Block auskommentiert, da er Fehler schmeißt und den Adapter zum Neustart zwingt.
var cronConditions, modus, conditions, rootdp, ObjectID, var_CronConditions, dp, var_Raum, schedule1;
// Beschreibe diese Funktion …
async function getSchedule() {
const list = getSchedules(false);
list.forEach(schedule => log(JSON.stringify(schedule)));
}
// Beschreibe diese Funktion …
async function createSchedule(cronConditions) {
let testSched = null;
const EventEmitter = require('events');
class Ee extends EventEmitter {}
const jobStatus = new Ee();
//log("cronConditions: " + cronConditions,"info");
jobStatus.on('finished', () => {
console.log('JOB FINISHED');
job.cancel();
// Preform your DB Operations here (in your case: delete job from database)
});
(() => { if (testSched) { clearSchedule(testSched); testSched = null; }})();
//log("TestSchedCond: " + cronConditions,"warn");
console.info('Hier wird der TESTScheduler gesetzt');
(() => { if (testSched) { clearSchedule(testSched); testSched = null; }})();
testSched = schedule((await buildCronRule('time', cronConditions)), function() {
console.info('Hier läuft der TESTTrigger');
/*
if (this.nextInvocation() === null) {
//here you can code whatever you need to do in the last invocation
jobStatus.emit('finished'); // Emit your job done emitter when you are done.
}
*/
});
}
// Beschreibe diese Funktion …
async function buildCronRule(modus, conditions) {
let result = "";
let resultStart = "";
let ovalPeriod = "";
conditions.forEach(function (line,index, array) {
/*
'{"time":{"start":"08:00","end":"20:00","mode":"minutes","interval":2},"period":{"days":1}}'
*/
let okey = Object.keys(line);
let oval = line[okey];
okey = okey.toString().replace(/\s+/g, '');
//log(okey,"info");
if(okey == "period"){
okey = stringQuote({strVariable: okey});
//log("okey is: ","info");
ovalPeriod = ovalPeriod.concat(okey,":", oval);
} else if(okey != "period") {
okey = stringQuote({strVariable: okey});
if(typeof oval == "string"){
oval = stringQuote({strVariable: oval});
}
//log(okey,"warn");
//log("Val: " + oval + " | typeof: "+ typeof oval,"info");
if(index === array.length -1){
result =result.concat(okey,":", oval);
} else {
result =result.concat(okey,":", oval,",");
}
}
});
result = stringQuote({strVariable: result,strQuote: "{}", boolSplitQuote: true});
//log(ovalPeriod,"warn");
switch(modus){
case "time":
resultStart = "time";
default:
resultStart = "time";
}
resultStart = stringQuote({strVariable: resultStart});
resultStart = "".concat(resultStart,":") ;
result = "".concat(resultStart, result,",", ovalPeriod);
result = stringQuote({strVariable:result,strQuote:"{}",boolSplitQuote: true }) ;
//log(result,"warn");
return result;
}
// Beschreibe diese Funktion …
async function getCronConditions(rootdp) {
let result = [];
log("getCronConds","warn");
const dps = $(rootdp).toArray();
log(dps);
dps.forEach((id) => {
const dpval = getState(id).val;
const dp = splittVariable(id,"last",".");
let obj = {};
obj[dp] = dpval;
result.push(obj);
});
//log(result,"warn");
return result;
}
// Beschreibe diese Funktion …
async function gl_leseRaum(ObjectID) {
let room = leseRaum(ObjectID);
return room;
}
// Beschreibe diese Funktion …
async function runTest(dp) {
console.info('Hier wird der Scheduler gesetzt');
(() => { if (schedule1) { clearSchedule(schedule1); schedule1 = null; }})();
schedule1 = schedule((await buildCronRule('time', var_CronConditions)), async () => {
console.info('Hier läuft der Trigger');
});
await getSchedule();
}
var_CronConditions = await getCronConditions('0_userdata.0.Rolladen.Allgemein.Schatten.cronConditions.*');
console.info((await buildCronRule('time', var_CronConditions)));
console.info(var_CronConditions);
await createSchedule(var_CronConditions);
await getSchedule();
on({ id: [].concat(Array.prototype.slice.apply($('state[state.id=0_userdata.0.Rolladen.Allgemein.Schatten.cronConditions.*]'))), change: 'any' }, async (obj) => {
let value = obj.state.val;
let oldValue = obj.oldState.val;
var_CronConditions = await getCronConditions('0_userdata.0.Rolladen.Allgemein.Schatten.cronConditions.*');
await runTest(var_CronConditions);
});
//JTNDeG1sJTIweG1sbnMlM0QlMjJodHRwcyUzQSUyRiUyRmRldmVsb3BlcnMuZ29vZ2xlLmNvbSUyRmJsb2NrbHklMkZ4bWwlMjIlM0UlM0N2YXJpYWJsZXMlM0UlM0N2YXJpYWJsZSUyMGlkJTNEJTIyYyU1QiUzQVd3aiU3QnNpd3JOJTJGRiU1RSglNjBoTHclMjIlM0Vjcm9uQ29uZGl0aW9ucyUzQyUyRnZhcmlhYmxlJTNFJTNDdmFyaWFibGUlMjBpZCUzRCUyMlVRaCUyNVMhJTVERyU3Qig4UUU3YW9SRkNvJTIyJTNFbW9kdXMlM0MlMkZ2YXJpYWJsZSUzRSUzQ3ZhcmlhYmxlJTIwaWQlM0QlMjJtUnhrcSklNUQxMUclMkYqVlglNDBxdkxkRCUyMiUzRWNvbmRpdGlvbnMlM0MlMkZ2YXJpYWJsZSUzRSUzQ3ZhcmlhYmxlJTIwaWQlM0QlMjJvNk51LUZjQnZEMyUyNHIlMkYlN0QuanElNjAqJTIyJTNFcm9vdGRwJTNDJTJGdmFyaWFibGUlM0UlM0N2YXJpYWJsZSUyMGlkJTNEJTIyTSU2MGZyOS1hRyUzQVMlMkNLcSh4JTVFYTkoLiUyMiUzRU9iamVjdElEJTNDJTJGdmFyaWFibGUlM0UlM0N2YXJpYWJsZSUyMGlkJTNEJTIyLmg2WFclMjVxX1lDJTNEaDJhXy14TDlTJTIyJTNFdmFyX0Nyb25Db25kaXRpb25zJTNDJTJGdmFyaWFibGUlM0UlM0N2YXJpYWJsZSUyMGlkJTNEJTIyNVElMkNXQkYlNUJtJTIzJTJGSCUyQ2tPIXglN0M4NCU1RCUyMiUzRWRwJTNDJTJGdmFyaWFibGUlM0UlM0N2YXJpYWJsZSUyMGlkJTNEJTIyQSUyNHpKJTNELm9hLkslN0MlMkM4MCUzRFclMjRTJTQwRyUyMiUzRXZhcl9SYXVtJTNDJTJGdmFyaWFibGUlM0UlM0N2YXJpYWJsZSUyMHR5cGUlM0QlMjJjcm9uJTIyJTIwaWQlM0QlMjJzY2hlZHVsZTElMjIlM0VzY2hlZHVsZTElM0MlMkZ2YXJpYWJsZSUzRSUzQyUyRnZhcmlhYmxlcyUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnByb2NlZHVyZXNfZGVmY3VzdG9tbm9yZXR1cm4lMjIlMjBpZCUzRCUyMkZiKE9oV3BGJTdEbmMlM0ZHZDB0ODIlMjQpJTIyJTIweCUzRCUyMjYzJTIyJTIweSUzRCUyMjM4JTIyJTNFJTNDbXV0YXRpb24lMjBzdGF0ZW1lbnRzJTNEJTIyZmFsc2UlMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5BTUUlMjIlM0VnZXRTY2hlZHVsZSUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyU0NSSVBUJTIyJTNFWTI5dWMzUWdiR2x6ZENBOUlHZGxkRk5qYUdWa2RXeGxjeWhtWVd4elpTazdEUXBzYVhOMExtWnZja1ZoWTJnb2MyTm9aV1IxYkdVZ1BUNGdiRzluS0VwVFQwNHVjM1J5YVc1bmFXWjVLSE5qYUdWa2RXeGxLU2twT3clM0QlM0QlM0MlMkZmaWVsZCUzRSUzQ2NvbW1lbnQlMjBwaW5uZWQlM0QlMjJmYWxzZSUyMiUyMGglM0QlMjI4MCUyMiUyMHclM0QlMjIxNjAlMjIlM0VCZXNjaHJlaWJlJTIwZGllc2UlMjBGdW5rdGlvbiUyMCVFMiU4MCVBNiUzQyUyRmNvbW1lbnQlM0UlM0MlMkZibG9jayUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnByb2NlZHVyZXNfZGVmY3VzdG9tbm9yZXR1cm4lMjIlMjBpZCUzRCUyMnIlNUV0KWQhLlQlNURtJTJCR1hoMCUyNTlYUUklMjIlMjB4JTNEJTIyNjMlMjIlMjB5JTNEJTIyNjMlMjIlM0UlM0NtdXRhdGlvbiUyMHN0YXRlbWVudHMlM0QlMjJmYWxzZSUyMiUzRSUzQ2FyZyUyMG5hbWUlM0QlMjJjcm9uQ29uZGl0aW9ucyUyMiUyMHZhcmlkJTNEJTIyYyU1QiUzQVd3aiU3QnNpd3JOJTJGRiU1RSglNjBoTHclMjIlM0UlM0MlMkZhcmclM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5BTUUlMjIlM0VjcmVhdGVTY2hlZHVsZSUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyU0NSSVBUJTIyJTNFYkdWMElIUmxjM1JUWTJobFpDQTlJRzUxYkd3N0RRcGpiMjV6ZENCRmRtVnVkRVZ0YVhSMFpYSWdQU0J5WlhGMWFYSmxLQ2RsZG1WdWRITW5LVHNOQ21Oc1lYTnpJRVZsSUdWNGRHVnVaSE1nUlhabGJuUkZiV2wwZEdWeUlIdDlEUW9OQ21OdmJuTjBJR3B2WWxOMFlYUjFjeUE5SUc1bGR5QkZaU2dwT3cwS0x5OXNiMmNvSW1OeWIyNURiMjVrYVhScGIyNXpPaUFpSUNzZ1kzSnZia052Ym1ScGRHbHZibk1zSW1sdVptOGlLVHNOQ2cwS2FtOWlVM1JoZEhWekxtOXVLQ2RtYVc1cGMyaGxaQ2NzSUNncElEMCUyQklIc05DaUFnSUNCamIyNXpiMnhsTG14dlp5Z25TazlDSUVaSlRrbFRTRVZFSnlrN0RRb2dJQ0FnYW05aUxtTmhibU5sYkNncE93MEtJQ0FnSUNBdkx5QlFjbVZtYjNKdElIbHZkWElnUkVJZ1QzQmxjbUYwYVc5dWN5Qm9aWEpsSUNocGJpQjViM1Z5SUdOaGMyVTZJR1JsYkdWMFpTQnFiMklnWm5KdmJTQmtZWFJoWW1GelpTa05DZzBLZlNrN0RRb2dJQ0FOQ2lnb0tTQTlQaUI3SUdsbUlDaDBaWE4wVTJOb1pXUXBJSHNnWTJ4bFlYSlRZMmhsWkhWc1pTaDBaWE4wVTJOb1pXUXBPeUIwWlhOMFUyTm9aV1FnUFNCdWRXeHNPeUI5ZlNrb0tUc05DaTh2Ykc5bktDSlVaWE4wVTJOb1pXUkRiMjVrT2lBaUlDc2dZM0p2YmtOdmJtUnBkR2x2Ym5Nc0luZGhjbTRpS1RzTkNpQWdZMjl1YzI5c1pTNXBibVp2S0NkSWFXVnlJSGRwY21RZ1pHVnlJRlJGVTFSVFkyaGxaSFZzWlhJZ1oyVnpaWFI2ZENjcE93MEtJQ0FvS0NrZ1BUNGdleUJwWmlBb2RHVnpkRk5qYUdWa0tTQjdJR05zWldGeVUyTm9aV1IxYkdVb2RHVnpkRk5qYUdWa0tUc2dkR1Z6ZEZOamFHVmtJRDBnYm5Wc2JEc2dmWDBwS0NrN0RRb05DaUFnZEdWemRGTmphR1ZrSUQwZ2MyTm9aV1IxYkdVb0tHRjNZV2wwSUdKMWFXeGtRM0p2YmxKMWJHVW9KM1JwYldVbkxDQmpjbTl1UTI5dVpHbDBhVzl1Y3lrcExDQm1kVzVqZEdsdmJpZ3BJSHNOQ2lBZ0lDQmpiMjV6YjJ4bExtbHVabThvSjBocFpYSWdiTU9rZFdaMElHUmxjaUJVUlZOVVZISnBaMmRsY2ljcE93MEtJQ0FnSUM4cURRb2dJQ0FnYVdZZ0tIUm9hWE11Ym1WNGRFbHVkbTlqWVhScGIyNG9LU0E5UFQwZ2JuVnNiQ2tnZXcwS0lDQWdJQ0FnSUNBZ0lDQWdMeTlvWlhKbElIbHZkU0JqWVc0Z1kyOWtaU0IzYUdGMFpYWmxjaUI1YjNVZ2JtVmxaQ0IwYnlCa2J5QnBiaUIwYUdVZ2JHRnpkQ0JwYm5adlkyRjBhVzl1RFFvZ0lDQWdJQ0FnSUdwdllsTjBZWFIxY3k1bGJXbDBLQ2RtYVc1cGMyaGxaQ2NwT3lBdkx5QkZiV2wwSUhsdmRYSWdhbTlpSUdSdmJtVWdaVzFwZEhSbGNpQjNhR1Z1SUhsdmRTQmhjbVVnWkc5dVpTNGdJQ0FnSUNBZ0lDQWdJQ0FOQ2lBZ0lDQWdJQ0FnSUNBZ0lIME5DaUFnSUNBZ0lDQWdJQ0FnSUNvdkRRb2dJSDBwT3cwS0lBMEtEUW8lM0QlM0MlMkZmaWVsZCUzRSUzQ2NvbW1lbnQlMjBwaW5uZWQlM0QlMjJmYWxzZSUyMiUyMGglM0QlMjI4MCUyMiUyMHclM0QlMjIxNjAlMjIlM0VCZXNjaHJlaWJlJTIwZGllc2UlMjBGdW5rdGlvbiUyMCVFMiU4MCVBNiUzQyUyRmNvbW1lbnQlM0UlM0MlMkZibG9jayUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnByb2NlZHVyZXNfZGVmY3VzdG9tcmV0dXJuJTIyJTIwaWQlM0QlMjJzJTVFJTJDZkhEJTNBZEMlMjRkb2VoJTQwRSUyRjNhMSUyMiUyMHglM0QlMjI2MyUyMiUyMHklM0QlMjI4OCUyMiUzRSUzQ211dGF0aW9uJTIwc3RhdGVtZW50cyUzRCUyMmZhbHNlJTIyJTNFJTNDYXJnJTIwbmFtZSUzRCUyMm1vZHVzJTIyJTIwdmFyaWQlM0QlMjJVUWglMjVTISU1REclN0IoOFFFN2FvUkZDbyUyMiUzRSUzQyUyRmFyZyUzRSUzQ2FyZyUyMG5hbWUlM0QlMjJjb25kaXRpb25zJTIyJTIwdmFyaWQlM0QlMjJtUnhrcSklNUQxMUclMkYqVlglNDBxdkxkRCUyMiUzRSUzQyUyRmFyZyUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTkFNRSUyMiUzRWJ1aWxkQ3JvblJ1bGUlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlNDUklQVCUyMiUzRWJHVjBJSEpsYzNWc2RDQTlJQ0lpT3cwS2JHVjBJSEpsYzNWc2RGTjBZWEowSUQwZ0lpSTdEUXBzWlhRZ2IzWmhiRkJsY21sdlpDQTlJQ0lpT3cwS0RRcGpiMjVrYVhScGIyNXpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNGdLR3hwYm1Vc2FXNWtaWGdzSUdGeWNtRjVLU0I3RFFvTkNpQWdJQ0F2S2cwS0lDQWdJQ0FnSUNBbmV5SjBhVzFsSWpwN0luTjBZWEowSWpvaU1EZzZNREFpTENKbGJtUWlPaUl5TURvd01DSXNJbTF2WkdVaU9pSnRhVzUxZEdWeklpd2lhVzUwWlhKMllXd2lPako5TENKd1pYSnBiMlFpT25zaVpHRjVjeUk2TVgxOUp3MEtJQ0FnSUNvdkRRb2dJQ0FnYkdWMElHOXJaWGtnUFNCUFltcGxZM1F1YTJWNWN5aHNhVzVsS1RzTkNpQWdJQ0JzWlhRZ2IzWmhiQ0E5SUd4cGJtVmJiMnRsZVYwN0RRb2dJQ0FnYjJ0bGVTQTlJRzlyWlhrdWRHOVRkSEpwYm1jb0tTNXlaWEJzWVdObEtDOWNjeXN2Wnl3Z0p5Y3BPdzBLSUNBZ0RRb2dJQ0FnTHk5c2IyY29iMnRsZVN3aWFXNW1ieUlwT3cwS0lDQWdJQ0FnSUNCcFppaHZhMlY1SUQwOUlDSndaWEpwYjJRaUtYc05DaUFnSUNBZ0lDQWdJQ0FnSUc5clpYa2dQU0J6ZEhKcGJtZFJkVzkwWlNoN2MzUnlWbUZ5YVdGaWJHVTZJRzlyWlhsOUtUc05DaUFnSUNBZ0lDQWdJQ0FnSUM4dmJHOW5LQ0p2YTJWNUlHbHpPaUFpTENKcGJtWnZJaWs3RFFvZ0lDQWdJQ0FnSUNBZ0lDQnZkbUZzVUdWeWFXOWtJRDBnYjNaaGJGQmxjbWx2WkM1amIyNWpZWFFvYjJ0bGVTd2lPaUlzSUc5MllXd3BPdzBLSUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lvYjJ0bGVTQWhQU0FpY0dWeWFXOWtJaWtnZXcwS0lDQWdJQ0FnSUNCdmEyVjVJRDBnYzNSeWFXNW5VWFZ2ZEdVb2UzTjBjbFpoY21saFlteGxPaUJ2YTJWNWZTazdJQ0FnSUEwS0lDQWdJQ0FnSUNCcFppaDBlWEJsYjJZZ2IzWmhiQ0E5UFNBaWMzUnlhVzVuSWlsN0RRb2dJQ0FnSUNBZ0lDQWdJQ0J2ZG1Gc0lEMGdjM1J5YVc1blVYVnZkR1VvZTNOMGNsWmhjbWxoWW14bE9pQnZkbUZzZlNrN0RRb2dJQ0FnSUNBZ0lIME5DaUFnSUNBZ0lDQWdMeTlzYjJjb2IydGxlU3dpZDJGeWJpSXBPdzBLSUNBZ0lDQWdJQ0F2TDJ4dlp5Z2lWbUZzT2lBaUlDc2diM1poYkNBcklDSWdmQ0IwZVhCbGIyWTZJQ0lySUhSNWNHVnZaaUJ2ZG1Gc0xDSnBibVp2SWlrN0RRb2dJQ0FnSUNBZ0lHbG1LR2x1WkdWNElEMDlQU0JoY25KaGVTNXNaVzVuZEdnZ0xURXBldzBLSUNBZ0lDQWdJQ0J5WlhOMWJIUWdQWEpsYzNWc2RDNWpiMjVqWVhRb2IydGxlU3dpT2lJc0lHOTJZV3dwT3lBTkNpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUhzTkNpQWdJQ0FnSUNBZ2NtVnpkV3gwSUQxeVpYTjFiSFF1WTI5dVkyRjBLRzlyWlhrc0lqb2lMQ0J2ZG1Gc0xDSXNJaWs3SUNBZ0lDQWdJQ0FOQ2lBZ0lDQWdJQ0FnZlEwS0RRb2dJQ0FnSUNBZ0lIME5DZzBLRFFvTkNuMHBPdzBLRFFweVpYTjFiSFFnUFNCemRISnBibWRSZFc5MFpTaDdjM1J5Vm1GeWFXRmliR1U2SUhKbGMzVnNkQ3h6ZEhKUmRXOTBaVG9nSW50OUlpd2dZbTl2YkZOd2JHbDBVWFZ2ZEdVNklIUnlkV1Y5S1RzTkNpOHZiRzluS0c5MllXeFFaWEpwYjJRc0luZGhjbTRpS1RzTkNnMEtjM2RwZEdOb0tHMXZaSFZ6S1hzTkNpQWdJQ0JqWVhObElDSjBhVzFsSWpvTkNpQWdJQ0FnSUNBZ2NtVnpkV3gwVTNSaGNuUWdQU0FpZEdsdFpTSTdEUW9OQ2lBZ0lDQmtaV1poZFd4ME9nMEtJQ0FnSUNBZ0lDQnlaWE4xYkhSVGRHRnlkQ0E5SUNKMGFXMWxJanNOQ24wTkNuSmxjM1ZzZEZOMFlYSjBJRDBnYzNSeWFXNW5VWFZ2ZEdVb2UzTjBjbFpoY21saFlteGxPaUJ5WlhOMWJIUlRkR0Z5ZEgwcE93MEtjbVZ6ZFd4MFUzUmhjblFnUFNBaUlpNWpiMjVqWVhRb2NtVnpkV3gwVTNSaGNuUXNJam9pS1NBN0RRb05DZzBLY21WemRXeDBJRDBnSWlJdVkyOXVZMkYwS0hKbGMzVnNkRk4wWVhKMExDQnlaWE4xYkhRc0lpd2lMQ0J2ZG1Gc1VHVnlhVzlrS1RzTkNnMEtjbVZ6ZFd4MElEMGdjM1J5YVc1blVYVnZkR1VvZTNOMGNsWmhjbWxoWW14bE9uSmxjM1ZzZEN4emRISlJkVzkwWlRvaWUzMGlMR0p2YjJ4VGNHeHBkRkYxYjNSbE9pQjBjblZsSUgwcElEc05DaTh2Ykc5bktISmxjM1ZzZEN3aWQyRnliaUlwT3cwS0RRb05DbkpsZEhWeWJpQnlaWE4xYkhRNyUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19kZWZjdXN0b21yZXR1cm4lMjIlMjBpZCUzRCUyMiU3QjBjVyUzRjBWJTdCJTIzb05+fipzMzAwMkklMjIlMjB4JTNEJTIyNjMlMjIlMjB5JTNEJTIyMTEzJTIyJTNFJTNDbXV0YXRpb24lMjBzdGF0ZW1lbnRzJTNEJTIyZmFsc2UlMjIlM0UlM0NhcmclMjBuYW1lJTNEJTIycm9vdGRwJTIyJTIwdmFyaWQlM0QlMjJvNk51LUZjQnZEMyUyNHIlMkYlN0QuanElNjAqJTIyJTNFJTNDJTJGYXJnJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFZ2V0Q3JvbkNvbmRpdGlvbnMlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlNDUklQVCUyMiUzRWJHVjBJSEpsYzNWc2RDQTlJRnRkT3cwS2JHOW5LQ0puWlhSRGNtOXVRMjl1WkhNaUxDSjNZWEp1SWlrN0RRcGpiMjV6ZENCa2NITWdQU0FrS0hKdmIzUmtjQ2t1ZEc5QmNuSmhlU2dwT3cwS2JHOW5LR1J3Y3lrN0RRcGtjSE11Wm05eVJXRmphQ2dvYVdRcElEMCUyQklIc05DaUFnSUNCamIyNXpkQ0JrY0haaGJDQTlJR2RsZEZOMFlYUmxLR2xrS1M1MllXdzdEUW9nSUNBZ1kyOXVjM1FnWkhBZ1BTQnpjR3hwZEhSV1lYSnBZV0pzWlNocFpDd2liR0Z6ZENJc0lpNGlLVHNOQ2lBZ0lDQnNaWFFnYjJKcUlEMGdlMzA3RFFvZ0lDQWdiMkpxVzJSd1hTQTlJR1J3ZG1Gc093MEtJQ0FnSUhKbGMzVnNkQzV3ZFhOb0tHOWlhaWs3RFFwOUtUc05DaUFnSUNBdkwyeHZaeWh5WlhOMWJIUXNJbmRoY200aUtUc05DbkpsZEhWeWJpQnlaWE4xYkhRNyUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19kZWZjdXN0b21yZXR1cm4lMjIlMjBpZCUzRCUyMlhZU185WiUzQmZOJTNENi5XKjdCMDEzYiUyMiUyMHglM0QlMjI2MyUyMiUyMHklM0QlMjIxMzglMjIlM0UlM0NtdXRhdGlvbiUyMHN0YXRlbWVudHMlM0QlMjJmYWxzZSUyMiUzRSUzQ2FyZyUyMG5hbWUlM0QlMjJPYmplY3RJRCUyMiUyMHZhcmlkJTNEJTIyTSU2MGZyOS1hRyUzQVMlMkNLcSh4JTVFYTkoLiUyMiUzRSUzQyUyRmFyZyUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTkFNRSUyMiUzRWdsX2xlc2VSYXVtJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJTQ1JJUFQlMjIlM0ViR1YwSUhKdmIyMGdQU0JzWlhObFVtRjFiU2hQWW1wbFkzUkpSQ2s3RFFweVpYUjFjbTRnY205dmJUcyUzRCUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyNHUlNDB0Tl9tZCklM0ElNUQlNDBLJTQwMG9yQyU1RHclMjIlMjBkaXNhYmxlZCUzRCUyMnRydWUlMjIlMjB4JTNEJTIyMTA2MyUyMiUyMHklM0QlMjIxODglMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFJTdCJTIydGltZSUyMiUzQSU3QiUyMmVuZCUyMiUzQSUyMjIwJTNBMDAlMjIlMkMlMjJpbnRlcnZhbCUyMiUzQTIlMkMlMjJtb2RlJTIyJTNBJTIybWludXRlcyUyMiUyQyUyMnN0YXJ0JTIyJTNBJTIyMDglM0EwMCUyMiU3RCUyQyUyMnBlcmlvZCUyMiUzQSU3QiUyMmRheXMlMjIlM0ExJTdEJTdEJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19zZXQlMjIlMjBpZCUzRCUyMkwlNUJxNkQlNURtREJvV1klNURLTCUzQWNoJTI1ZCUyMiUyMHglM0QlMjIxMiUyMiUyMHklM0QlMjIyNjklMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMi5oNlhXJTI1cV9ZQyUzRGgyYV8teEw5UyUyMiUzRXZhcl9Dcm9uQ29uZGl0aW9ucyUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVkFMVUUlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2NhbGxjdXN0b21yZXR1cm4lMjIlMjBpZCUzRCUyMjllcGslMkNDbyUyQzZlRVFUMDRhXyU0ME1xJTIyJTIwaW5saW5lJTNEJTIydHJ1ZSUyMiUzRSUzQ211dGF0aW9uJTIwbmFtZSUzRCUyMmdldENyb25Db25kaXRpb25zJTIyJTNFJTNDYXJnJTIwbmFtZSUzRCUyMnJvb3RkcCUyMiUzRSUzQyUyRmFyZyUzRSUzQyUyRm11dGF0aW9uJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQVJHMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnRleHQlMjIlMjBpZCUzRCUyMjJ4V3AyTn5VJTdDVmguTkJwVzQlNURwVCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0UwX3VzZXJkYXRhLjAuUm9sbGFkZW4uQWxsZ2VtZWluLlNjaGF0dGVuLmNyb25Db25kaXRpb25zLiolM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmRlYnVnJTIyJTIwaWQlM0QlMjJuJTNCVCUzRDhqT1J+JTNGTjBWOHYuQUVvSyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlNldmVyaXR5JTIyJTNFaW5mbyUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRSUzQ3NoYWRvdyUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTIwaWQlM0QlMjJEU1NtcWElN0MxbV9EcCUzRCF6UVE0dVMlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFdGVzdCUzQyUyRmZpZWxkJTNFJTNDJTJGc2hhZG93JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19jYWxsY3VzdG9tcmV0dXJuJTIyJTIwaWQlM0QlMjIuOVlnRi1GTTlFVkh6RXY0JTIzZzElMkYlMjIlMjBpbmxpbmUlM0QlMjJ0cnVlJTIyJTNFJTNDbXV0YXRpb24lMjBuYW1lJTNEJTIyYnVpbGRDcm9uUnVsZSUyMiUzRSUzQ2FyZyUyMG5hbWUlM0QlMjJtb2R1cyUyMiUzRSUzQyUyRmFyZyUzRSUzQ2FyZyUyMG5hbWUlM0QlMjJjb25kaXRpb25zJTIyJTNFJTNDJTJGYXJnJTNFJTNDJTJGbXV0YXRpb24lM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBUkcwJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIySG1HOCUzQkolMkJaWCUzRnlwJTdEJTI0cyUyNWxZRyU3RCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0V0aW1lJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQVJHMSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19nZXQlMjIlMjBpZCUzRCUyMnE2RjZsJTdCVUpYJTNGM1Y5dHUlNDAhamxlJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTIwaWQlM0QlMjIuaDZYVyUyNXFfWUMlM0RoMmFfLXhMOVMlMjIlM0V2YXJfQ3JvbkNvbmRpdGlvbnMlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmRlYnVnJTIyJTIwaWQlM0QlMjIlMkJKfmklNDBLMEZhJTdCeTBkKiUzQkFXbjglN0IlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJTZXZlcml0eSUyMiUzRWluZm8lM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyRFNTbXFhJTdDMW1fRHAlM0QhelFRNHVTJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRXRlc3QlM0MlMkZmaWVsZCUzRSUzQyUyRnNoYWRvdyUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19nZXQlMjIlMjBpZCUzRCUyMkIzViFiSkclMkNOcUJ0Y0lfc1RRdW0lMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMi5oNlhXJTI1cV9ZQyUzRGgyYV8teEw5UyUyMiUzRXZhcl9Dcm9uQ29uZGl0aW9ucyUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2NhbGxjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyc2RVaWN0fiU0MFglN0JDKVhKS34lMkMoJTNESCUyMiUzRSUzQ211dGF0aW9uJTIwbmFtZSUzRCUyMmNyZWF0ZVNjaGVkdWxlJTIyJTNFJTNDYXJnJTIwbmFtZSUzRCUyMmNyb25Db25kaXRpb25zJTIyJTNFJTNDJTJGYXJnJTNFJTNDJTJGbXV0YXRpb24lM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBUkcwJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX2dldCUyMiUyMGlkJTNEJTIyOSElMjMlMjMlM0I1JTdCJTNCNDUzJTJGVXglM0FCN2hMWiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUyMGlkJTNEJTIyLmg2WFclMjVxX1lDJTNEaDJhXy14TDlTJTIyJTNFdmFyX0Nyb25Db25kaXRpb25zJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnByb2NlZHVyZXNfY2FsbGN1c3RvbW5vcmV0dXJuJTIyJTIwaWQlM0QlMjJyJTIzSG1iVW4uTUt3aEk4flZpNl9CJTIyJTNFJTNDbXV0YXRpb24lMjBuYW1lJTNEJTIyZ2V0U2NoZWR1bGUlMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJvbl9leHQlMjIlMjBpZCUzRCUyMmZ0UG9VZ0hNdG8lM0ElNUV6cDElN0JzWlktJTIyJTNFJTNDbXV0YXRpb24lMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhodG1sJTIyJTIwaXRlbXMlM0QlMjIxJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJDT05ESVRJT04lMjIlM0VhbnklM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkFDS19DT05ESVRJT04lMjIlM0UlM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMk9JRDAlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIyZmllbGRfb2lkJTIyJTIwaWQlM0QlMjJTdTdCel9wJTdCMjMuU00lM0R0Rn5+dWYlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJvaWQlMjIlM0VJRCUyMGF1c3clQzMlQTRobGVuJTNDJTJGZmllbGQlM0UlM0MlMkZzaGFkb3clM0UlM0NibG9jayUyMHR5cGUlM0QlMjJzZWxlY3RvciUyMiUyMGlkJTNEJTIyWS5kanRib0x2KkxTTVEqdSUyNTclMkNkJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRXN0YXRlJTVCc3RhdGUuaWQlM0QwX3VzZXJkYXRhLjAuUm9sbGFkZW4uQWxsZ2VtZWluLlNjaGF0dGVuLmNyb25Db25kaXRpb25zLiolNUQlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NzdGF0ZW1lbnQlMjBuYW1lJTNEJTIyU1RBVEVNRU5UJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX3NldCUyMiUyMGlkJTNEJTIyR1UwViUzRFBUSHdPby41MXVkKHVPSSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUyMGlkJTNEJTIyLmg2WFclMjVxX1lDJTNEaDJhXy14TDlTJTIyJTNFdmFyX0Nyb25Db25kaXRpb25zJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnByb2NlZHVyZXNfY2FsbGN1c3RvbXJldHVybiUyMiUyMGlkJTNEJTIyLUhJJTVEKFZSaCloJTYwKCUzQmhiWkwxQ1YlMjIlMjBpbmxpbmUlM0QlMjJ0cnVlJTIyJTNFJTNDbXV0YXRpb24lMjBuYW1lJTNEJTIyZ2V0Q3JvbkNvbmRpdGlvbnMlMjIlM0UlM0NhcmclMjBuYW1lJTNEJTIycm9vdGRwJTIyJTNFJTNDJTJGYXJnJTNFJTNDJTJGbXV0YXRpb24lM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBUkcwJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyd0hCa1QlMkJWcSUyM045UzchdWtMZWw2JTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRTBfdXNlcmRhdGEuMC5Sb2xsYWRlbi5BbGxnZW1laW4uU2NoYXR0ZW4uY3JvbkNvbmRpdGlvbnMuKiUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19jYWxsbm9yZXR1cm4lMjIlMjBpZCUzRCUyMiU0MCgyZnlXIVRoYWpON19OWml6RmYlMjIlM0UlM0NtdXRhdGlvbiUyMG5hbWUlM0QlMjJydW5UZXN0JTIyJTNFJTNDYXJnJTIwbmFtZSUzRCUyMmRwJTIyJTNFJTNDJTJGYXJnJTNFJTNDJTJGbXV0YXRpb24lM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBUkcwJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX2dldCUyMiUyMGlkJTNEJTIyYTg2S04uJTdCc3IlMjN2JTNBJTQwZiUzQXUlN0J+Qk0lMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMi5oNlhXJTI1cV9ZQyUzRGgyYV8teEw5UyUyMiUzRXZhcl9Dcm9uQ29uZGl0aW9ucyUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2RlZm5vcmV0dXJuJTIyJTIwaWQlM0QlMjJseS0lN0RZRSUyM1pxJTJCUW8lNURtfiUyRllRblElMjIlMjB4JTNEJTIyOTg4JTIyJTIweSUzRCUyMjMxMyUyMiUzRSUzQ211dGF0aW9uJTNFJTNDYXJnJTIwbmFtZSUzRCUyMmRwJTIyJTIwdmFyaWQlM0QlMjI1USUyQ1dCRiU1Qm0lMjMlMkZIJTJDa08heCU3Qzg0JTVEJTIyJTNFJTNDJTJGYXJnJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFcnVuVGVzdCUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJTVEFDSyUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmRlYnVnJTIyJTIwaWQlM0QlMjJXJTNBViUzRlNLKElqM1hPJTQwTnNGKSUyM3AtJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyU2V2ZXJpdHklMjIlM0VpbmZvJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJURVhUJTIyJTNFJTNDc2hhZG93JTIwdHlwZSUzRCUyMnRleHQlMjIlMjBpZCUzRCUyMjdieiU1RU9JJTI1MUhIZ0gwYS1zeiUyQiU1REQlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFSGllciUyMHdpcmQlMjBkZXIlMjBTY2hlZHVsZXIlMjBnZXNldHp0JTNDJTJGZmllbGQlM0UlM0MlMkZzaGFkb3clM0UlM0MlMkZ2YWx1ZSUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfc2V0JTIyJTIwaWQlM0QlMjJ6bSFITVA3X1pOViUyMyUyRikpQndNcVglMjIlMjBkaXNhYmxlZCUzRCUyMnRydWUlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMkElMjR6SiUzRC5vYS5LJTdDJTJDODAlM0RXJTI0UyU0MEclMjIlM0V2YXJfUmF1bSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVkFMVUUlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2NhbGxjdXN0b21yZXR1cm4lMjIlMjBpZCUzRCUyMkJWJTQwTDJaNCUzQjFVSCUzRiU1RCU1QmFXRDQ0eiUyMiUzRSUzQ211dGF0aW9uJTIwbmFtZSUzRCUyMmdsX2xlc2VSYXVtJTIyJTNFJTNDYXJnJTIwbmFtZSUzRCUyMk9iamVjdElEJTIyJTNFJTNDJTJGYXJnJTNFJTNDJTJGbXV0YXRpb24lM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBUkcwJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX2dldCUyMiUyMGlkJTNEJTIyNnRXQWJFNlpEMmElN0JHTkEtQ3UlMjM0JTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTIwaWQlM0QlMjI1USUyQ1dCRiU1Qm0lMjMlMkZIJTJDa08heCU3Qzg0JTVEJTIyJTNFZHAlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnNjaGVkdWxlX2NsZWFyJTIyJTIwaWQlM0QlMjIpYzElMjMlM0JCTkNNaWoyJTNEJTJCJTJDTWklMjRfcyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5BTUUlMjIlM0VzY2hlZHVsZTElM0MlMkZmaWVsZCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJzY2hlZHVsZV9jcmVhdGUlMjIlMjBpZCUzRCUyMiUyNCglMjQlNUJ0ZDVscjhKJTNCZiUzQjlFejhUJTdDJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTkFNRSUyMiUzRXNjaGVkdWxlMSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyU0NIRURVTEUlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIyZmllbGRfY3JvbiUyMiUyMGlkJTNEJTIydSElMkIlNUIhJTIzby0lNUV5YSU3RHlSQXF+VC5FJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQ1JPTiUyMiUzRSolMjAqJTIwKiUyMColMjAqJTNDJTJGZmllbGQlM0UlM0MlMkZzaGFkb3clM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2NhbGxjdXN0b21yZXR1cm4lMjIlMjBpZCUzRCUyMnd3JTNGWFMqfl9UTHh0ZUY5S09aenglMjIlMjBpbmxpbmUlM0QlMjJ0cnVlJTIyJTNFJTNDbXV0YXRpb24lMjBuYW1lJTNEJTIyYnVpbGRDcm9uUnVsZSUyMiUzRSUzQ2FyZyUyMG5hbWUlM0QlMjJtb2R1cyUyMiUzRSUzQyUyRmFyZyUzRSUzQ2FyZyUyMG5hbWUlM0QlMjJjb25kaXRpb25zJTIyJTNFJTNDJTJGYXJnJTNFJTNDJTJGbXV0YXRpb24lM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBUkcwJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyMyg1YTBNLWMlNDAxVWwoRERVUlQlMkM2JTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRXRpbWUlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBUkcxJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX2dldCUyMiUyMGlkJTNEJTIySzlBVU1oJTQwMFZyJTNBLThtVTN+JTdCcmElMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMi5oNlhXJTI1cV9ZQyUzRGgyYV8teEw5UyUyMiUzRXZhcl9Dcm9uQ29uZGl0aW9ucyUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NzdGF0ZW1lbnQlMjBuYW1lJTNEJTIyU1RBVEVNRU5UJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyZGVidWclMjIlMjBpZCUzRCUyMk0lMkY4RipPeGQqTVc0NSU3RCUyNWgpWDQlN0IlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJTZXZlcml0eSUyMiUzRWluZm8lM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyRyUzRCU1RFAyZ3pMJTVCbUUlM0ZlMC1xLS5DLiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0VIaWVyJTIwbCVDMyVBNHVmdCUyMGRlciUyMFRyaWdnZXIlM0MlMkZmaWVsZCUzRSUzQyUyRnNoYWRvdyUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZzdGF0ZW1lbnQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19jYWxsY3VzdG9tbm9yZXR1cm4lMjIlMjBpZCUzRCUyMmJOJTdCcC0lN0JJYnAhJTdEJTJCRktnSWRBaF8lMjIlM0UlM0NtdXRhdGlvbiUyMG5hbWUlM0QlMjJnZXRTY2hlZHVsZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2xzX2lmJTIyJTIwaWQlM0QlMjJYcmclMjQyTlMlNUVnQ04qJTNGT3BVc0cwUSUyMiUyMGRpc2FibGVkJTNEJTIydHJ1ZSUyMiUzRSUzQ211dGF0aW9uJTIwZWxzZSUzRCUyMjElMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMklGMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmxvZ2ljX2NvbXBhcmUlMjIlMjBpZCUzRCUyMld4LiU3QkolNUVhX3olMkJKJTI1SUlkJTQwJTVCJTdCU0clMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPUCUyMiUzRUVRJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyVyUzRCUyNUF5JTYwLkRpMCUyNHFlcSU3Q24lMkIlMjUlM0J1JTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRXVuZGVmaW5lZCUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkIlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb252ZXJ0X3R5cGUlMjIlMjBpZCUzRCUyMjBTOSU1Qjl4SClsRU0teF9Edk5YVjQlMjIlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJJVEVNJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX2dldCUyMiUyMGlkJTNEJTIyMjU5SkglMkIoN1ZYdEd4cTlhJTJGTyglN0QlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMkElMjR6SiUzRC5vYS5LJTdDJTJDODAlM0RXJTI0UyU0MEclMjIlM0V2YXJfUmF1bSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkRPMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmRlYnVnJTIyJTIwaWQlM0QlMjIhLSU3Q1RZSlZjQ35XMyU3QnhYan5oS1glMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJTZXZlcml0eSUyMiUzRWluZm8lM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyISU3QiUzQiUyQ3BnNiU2MC4yRyU3QyU1QkxuJTJCbjFoJTYwJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRWtlaW4lMjBSYXVtJTNDJTJGZmllbGQlM0UlM0MlMkZzaGFkb3clM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkVMU0UlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJkZWJ1ZyUyMiUyMGlkJTNEJTIyNjclNUJzUnBMJTJCblEwNUFnJTQwMSlHNHYlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJTZXZlcml0eSUyMiUzRWluZm8lM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIydWMyJTJDOHQ4Qk5IdnYlMjV6JTJCSCUzQSUyMy5iJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRXRlc3QlM0MlMkZmaWVsZCUzRSUzQyUyRnNoYWRvdyUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19nZXQlMjIlMjBpZCUzRCUyMnMlMkYlMjVGJTNGKkUpZmNPSWMlMjRteGlGJTVEdyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUyMGlkJTNEJTIyQSUyNHpKJTNELm9hLkslN0MlMkM4MCUzRFclMjRTJTQwRyUyMiUzRXZhcl9SYXVtJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZzdGF0ZW1lbnQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGeG1sJTNF