From 181c372131b3870f0749248c95054bfbb25f2216 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Fri, 26 Aug 2016 11:10:39 +0200 Subject: [PATCH 1/5] Updated dependencies --- var/www/templates/terms_management.html | 1 - var/www/templates/terms_plot_top.html | 1 - var/www/update_thirdparty.sh | 9 +++++++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/var/www/templates/terms_management.html b/var/www/templates/terms_management.html index 32a51c32..e4e6e5f1 100644 --- a/var/www/templates/terms_management.html +++ b/var/www/templates/terms_management.html @@ -12,7 +12,6 @@ - diff --git a/var/www/templates/terms_plot_top.html b/var/www/templates/terms_plot_top.html index fd7a2be8..cf11bc88 100644 --- a/var/www/templates/terms_plot_top.html +++ b/var/www/templates/terms_plot_top.html @@ -12,7 +12,6 @@ - diff --git a/var/www/update_thirdparty.sh b/var/www/update_thirdparty.sh index 6ad2744f..94134a62 100755 --- a/var/www/update_thirdparty.sh +++ b/var/www/update_thirdparty.sh @@ -39,12 +39,17 @@ wget https://raw.githubusercontent.com/flot/flot/master/jquery.flot.pie.js -O ./ wget https://raw.githubusercontent.com/flot/flot/master/jquery.flot.time.js -O ./static/js/jquery.flot.time.js wget https://raw.githubusercontent.com/flot/flot/master/jquery.flot.stack.js -O ./static/js/jquery.flot.stack.js -#Ressources for sparkline and canvasJS +#Ressources for sparkline and canvasJS and slider wget http://omnipotent.net/jquery.sparkline/2.1.2/jquery.sparkline.min.js -O ./static/js/jquery.sparkline.min.js +mkdir temp wget http://canvasjs.com/fdm/chart/ -O temp/canvasjs.zip unzip temp/canvasjs.zip -d temp/ -mkdir temp mv temp/jquery.canvasjs.min.js ./static/js/jquery.canvasjs.min.js + +wget https://jqueryui.com/resources/download/jquery-ui-1.12.0.zip -O temp/jquery-ui.zip +unzip temp/jquery-ui.zip -d temp/ +mv temp/jquery-ui-1.12.0/jquery-ui.min.js ./static/js/jquery-ui.min.js +mv temp/jquery-ui-1.12.0/jquery-ui.min.css ./static/js/jquery-ui.min.css rm -rf temp mkdir -p ./static/image From 5c565068a6b4f8bec1ae1be8ece52a91d0c73e16 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Fri, 26 Aug 2016 11:25:11 +0200 Subject: [PATCH 2/5] Removed auto-reload in dashboard if window in undefined --- var/www/static/js/indexjavascript.js | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/var/www/static/js/indexjavascript.js b/var/www/static/js/indexjavascript.js index 1bdb29eb..55e14081 100644 --- a/var/www/static/js/indexjavascript.js +++ b/var/www/static/js/indexjavascript.js @@ -244,12 +244,8 @@ function create_queue_table() { Tablediv.appendChild(table); } -$(document).ready(function () { - if (typeof glob_tabvar == "undefined") - location.reload(); - if (typeof glob_tabvar.row1 == "undefined") - location.reload(); +function load_queues() { var data = []; var data2 = []; var tmp_tab = []; @@ -375,7 +371,19 @@ $(document).ready(function () { // something went wrong, hide the canvas container document.getElementById('myCanvasContainer').style.display = 'none'; } +} +function manage_undefined() { + if (typeof glob_tabvar == "undefined") + setTimeout(function() { if (typeof glob_tabvar == "undefined") { manage_undefined(); } else { load_queues(); } }, 1000); + else if (typeof glob_tabvar.row1 == "undefined") + setTimeout(function() { if (typeof glob_tabvar.row1 == "undefined") { manage_undefined(); } else { load_queues(); } }, 1000); + else + load_queues(); +} + +$(document).ready(function () { + manage_undefined(); }); From 0c760d763b95ccb62ba891857a24a2722dabe138 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Fri, 26 Aug 2016 15:27:37 +0200 Subject: [PATCH 3/5] Added support of PID in ModuleInformation and index.html --- ...warning_paste.py => BrowseWarningPaste.py} | 2 +- bin/Helper.py | 10 ++--- bin/LAUNCH.sh | 2 +- bin/ModuleInformation.py | 39 +++++++++++++------ bin/packages/modules.cfg | 2 +- var/www/Flask_server.py | 14 ++----- var/www/static/js/indexjavascript.js | 32 ++++++++++----- var/www/templates/index.html | 13 ++++++- 8 files changed, 73 insertions(+), 41 deletions(-) rename bin/{Browse_warning_paste.py => BrowseWarningPaste.py} (97%) diff --git a/bin/Browse_warning_paste.py b/bin/BrowseWarningPaste.py similarity index 97% rename from bin/Browse_warning_paste.py rename to bin/BrowseWarningPaste.py index 49444979..01704902 100755 --- a/bin/Browse_warning_paste.py +++ b/bin/BrowseWarningPaste.py @@ -24,7 +24,7 @@ if __name__ == "__main__": publisher.port = 6380 publisher.channel = "Script" - config_section = 'Browse_warning_paste' + config_section = 'BrowseWarningPaste' p = Process(config_section) diff --git a/bin/Helper.py b/bin/Helper.py index e7338ceb..05b73bf3 100755 --- a/bin/Helper.py +++ b/bin/Helper.py @@ -119,13 +119,7 @@ class Process(object): port=self.config.get('RedisPubSub', 'port'), db=self.config.get('RedisPubSub', 'db')) - self.moduleNum = 1 - for i in range(1, 50): - curr_num = self.r_temp.get("MODULE_"+self.subscriber_name + "_" + str(i)) - if curr_num is None: - self.moduleNum = i - break - + self.moduleNum = os.getpid() def populate_set_in(self): @@ -158,12 +152,14 @@ class Process(object): path = "?" value = str(timestamp) + ", " + path self.r_temp.set("MODULE_"+self.subscriber_name + "_" + str(self.moduleNum), value) + self.r_temp.sadd("MODULE_TYPE_"+self.subscriber_name, str(self.moduleNum)) return message except: path = "?" value = str(timestamp) + ", " + path self.r_temp.set("MODULE_"+self.subscriber_name + "_" + str(self.moduleNum), value) + self.r_temp.sadd("MODULE_TYPE_"+self.subscriber_name, str(self.moduleNum)) return message def populate_set_out(self, msg, channel=None): diff --git a/bin/LAUNCH.sh b/bin/LAUNCH.sh index b50a75d6..d7c31472 100755 --- a/bin/LAUNCH.sh +++ b/bin/LAUNCH.sh @@ -158,7 +158,7 @@ function launching_scripts { sleep 0.1 screen -S "Script" -X screen -t "SQLInjectionDetection" bash -c './SQLInjectionDetection.py; read x' sleep 0.1 - screen -S "Script" -X screen -t "Browse_warning_paste" bash -c './Browse_warning_paste.py; read x' + screen -S "Script" -X screen -t "BrowseWarningPaste" bash -c './BrowseWarningPaste.py; read x' sleep 0.1 screen -S "Script" -X screen -t "SentimentAnalysis" bash -c './SentimentAnalysis.py; read x' diff --git a/bin/ModuleInformation.py b/bin/ModuleInformation.py index d783418f..1538f57a 100755 --- a/bin/ModuleInformation.py +++ b/bin/ModuleInformation.py @@ -29,6 +29,7 @@ import textwrap threshold_stucked_module = 60*60*1 #1 hour log_filename = "../logs/moduleInfo.log" command_search_pid = "ps a -o pid,cmd | grep {}" +command_search_name = "ps a -o pid,cmd | grep {}" command_restart_module = "screen -S \"Script\" -X screen -t \"{}\" bash -c \"./{}.py; read x\"" @@ -45,6 +46,23 @@ def clearRedisModuleInfo(): for k in server.keys("MODULE_*"): server.delete(k) +def cleanRedis(): + for k in server.keys("MODULE_TYPE_*"): + moduleName = k[12:].split('_')[0] + for pid in server.smembers(k): + flag_pid_valid = False + proc = Popen([command_search_name.format(pid)], stdin=PIPE, stdout=PIPE, bufsize=1, shell=True) + for line in proc.stdout: + splittedLine = line.split() + if ('python2' in splittedLine or 'python' in splittedLine) and "./"+moduleName+".py" in splittedLine: + flag_pid_valid = True + + if not flag_pid_valid: + print flag_pid_valid, 'cleaning', pid, 'in', k + server.srem(k, pid) + time.sleep(5) + + def kill_module(module): print '' print '-> trying to kill module:', module @@ -76,8 +94,8 @@ if __name__ == "__main__": parser = argparse.ArgumentParser(description='Show info concerning running modules and log suspected stucked modules. May be use to automatically kill and restart stucked one.') parser.add_argument('-r', '--refresh', type=int, required=False, default=1, help='Refresh rate') - parser.add_argument('-k', '--autokill', type=int, required=True, default=1, help='Enable auto kill option (1 for TRUE, anything else for FALSE)') - parser.add_argument('-c', '--clear', type=int, required=False, default=1, help='Clear the current module information (Used to clear data from old launched modules)') + parser.add_argument('-k', '--autokill', type=int, required=False, default=0, help='Enable auto kill option (1 for TRUE, anything else for FALSE)') + parser.add_argument('-c', '--clear', type=int, required=False, default=0, help='Clear the current module information (Used to clear data from old launched modules)') args = parser.parse_args() @@ -99,6 +117,7 @@ if __name__ == "__main__": if args.clear == 1: clearRedisModuleInfo() + lastTime = datetime.datetime.now() module_file_array = set() with open('../doc/all_modules.txt', 'r') as module_file: @@ -108,20 +127,15 @@ if __name__ == "__main__": while True: all_queue = set() - curr_range = 50 printarray1 = [] printarray2 = [] printarray3 = [] for queue, card in server.hgetall("queues").iteritems(): all_queue.add(queue) key = "MODULE_" + queue + "_" - for i in range(1, 50): - curr_num = server.get("MODULE_"+ queue + "_" + str(i)) - if curr_num is None: - curr_range = i - break + keySet = "MODULE_TYPE_" + queue - for moduleNum in range(1, curr_range): + for moduleNum in server.smembers(keySet): value = server.get(key + str(moduleNum)) if value is not None: timestamp, path = value.split(", ") @@ -147,8 +161,8 @@ if __name__ == "__main__": printarray1.sort(lambda x,y: cmp(x[4], y[4]), reverse=True) printarray2.sort(lambda x,y: cmp(x[4], y[4]), reverse=True) - printarray1.insert(0,["Queue", "#", "Amount", "Paste start time", "Processing time for current paste (H:M:S)", "Paste hash"]) - printarray2.insert(0,["Queue", "#","Amount", "Paste start time", "Time since idle (H:M:S)", "Last paste hash"]) + printarray1.insert(0,["Queue", "PID", "Amount", "Paste start time", "Processing time for current paste (H:M:S)", "Paste hash"]) + printarray2.insert(0,["Queue", "PID","Amount", "Paste start time", "Time since idle (H:M:S)", "Last paste hash"]) printarray3.insert(0,["Queue", "State"]) os.system('clear') @@ -195,4 +209,7 @@ if __name__ == "__main__": print '\n' print t3.table + if (datetime.datetime.now() - lastTime).total_seconds() > args.refresh*5: + lastTime = datetime.datetime.now() + cleanRedis() time.sleep(args.refresh) diff --git a/bin/packages/modules.cfg b/bin/packages/modules.cfg index 0243038a..782536c5 100644 --- a/bin/packages/modules.cfg +++ b/bin/packages/modules.cfg @@ -63,7 +63,7 @@ publish = Redis_BrowseWarningPaste,Redis_Duplicate [ModuleStats] subscribe = Redis_ModuleStats -[Browse_warning_paste] +[BrowseWarningPaste] subscribe = Redis_BrowseWarningPaste #[send_to_queue] diff --git a/var/www/Flask_server.py b/var/www/Flask_server.py index 3c4346f1..4715aaac 100755 --- a/var/www/Flask_server.py +++ b/var/www/Flask_server.py @@ -81,19 +81,13 @@ def event_stream(): def get_queues(r): # We may want to put the llen in a pipeline to do only one query. - data = [(queue, int(card)) for queue, card in r.hgetall("queues").iteritems()] newData = [] - - curr_range = 50 - for queue, card in data: + for queue, card in r.hgetall("queues").iteritems(): key = "MODULE_" + queue + "_" - for i in range(1, 50): - curr_num = r.get("MODULE_"+ queue + "_" + str(i)) - if curr_num is None: - curr_range = i - break + keySet = "MODULE_TYPE_" + queue - for moduleNum in range(1, curr_range): + for moduleNum in r.smembers(keySet): + value = r.get(key + str(moduleNum)) if value is not None: timestamp, path = value.split(", ") diff --git a/var/www/static/js/indexjavascript.js b/var/www/static/js/indexjavascript.js index 55e14081..d145df65 100644 --- a/var/www/static/js/indexjavascript.js +++ b/var/www/static/js/indexjavascript.js @@ -207,7 +207,7 @@ function create_queue_table() { table.appendChild(tableHead); table.appendChild(tableBody); var heading = new Array(); - heading[0] = "Queue Name" + heading[0] = "Queue Name.PID" heading[1] = "Amount" var tr = document.createElement('TR'); tableHead.appendChild(tr); @@ -255,13 +255,17 @@ function load_queues() { var x = new Date(); for (i = 0; i < glob_tabvar.row1.length; i++){ - if (glob_tabvar.row1[i][0] == 'Categ' || glob_tabvar.row1[i][0] == 'Curve'){ - tmp_tab2.push(0); - curves_labels2.push(glob_tabvar.row1[i][0]); + if (glob_tabvar.row1[i][0].split(".")[0] == 'Categ' || glob_tabvar.row1[i][0].split(".")[0] == 'Curve'){ + if (curves_labels2.indexOf(glob_tabvar.row1[i][0].split(".")[0]) == -1) { + tmp_tab2.push(0); + curves_labels2.push(glob_tabvar.row1[i][0].split(".")); + } } else { - tmp_tab.push(0); - curves_labels.push(glob_tabvar.row1[i][0]); + if (curves_labels.indexOf(glob_tabvar.row1[i][0].split(".")[0]) == -1) { + tmp_tab.push(0); + curves_labels.push(glob_tabvar.row1[i][0].split(".")); + } } } tmp_tab.unshift(x); @@ -320,19 +324,29 @@ function load_queues() { update_values(); if($('#button-toggle-queues').prop('checked')){ + $("#queue-color-legend").show(); create_queue_table(); } else{ $("#queueing").html(''); + $("#queue-color-legend").hide(); } + queues_pushed = [] for (i = 0; i < (glob_tabvar.row1).length; i++){ - if (glob_tabvar.row1[i][0] == 'Categ' || glob_tabvar.row1[i][0] == 'Curve'){ - tmp_values2.push(glob_tabvar.row1[i][1]); + if (glob_tabvar.row1[i][0].split(".")[0] == 'Categ' || glob_tabvar.row1[i][0].split(".")[0] == 'Curve'){ + if (queues_pushed.indexOf(glob_tabvar.row1[i][0].split(".")[0]) == -1) { + queues_pushed.push(glob_tabvar.row1[i][0].split(".")); + tmp_values2.push(glob_tabvar.row1[i][1]); + } } else { - tmp_values.push(glob_tabvar.row1[i][1]); + if (curves_labels.indexOf(glob_tabvar.row1[i][0].split(".")[0]) == -1) { + queues_pushed.push(glob_tabvar.row1[i][0].split(".")); + tmp_values.push(glob_tabvar.row1[i][1]); + } + } } tmp_values.unshift(x); diff --git a/var/www/templates/index.html b/var/www/templates/index.html index 28c3aff9..65b9c0c8 100644 --- a/var/www/templates/index.html +++ b/var/www/templates/index.html @@ -66,7 +66,18 @@ Display queues
-
+
+ + + + + + + + +
Working queues
Idling queues
Stucked queues
+
+
From 79be8ab9345a57861a4f1d2f325ac195dbcf172d Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Fri, 26 Aug 2016 15:59:53 +0200 Subject: [PATCH 4/5] Fixed introduced bug relative to chart in index webpage. --- var/www/static/js/indexjavascript.js | 14 +++++++------- var/www/templates/index.html | 10 +++++----- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/var/www/static/js/indexjavascript.js b/var/www/static/js/indexjavascript.js index d145df65..e527aafa 100644 --- a/var/www/static/js/indexjavascript.js +++ b/var/www/static/js/indexjavascript.js @@ -258,13 +258,13 @@ function load_queues() { if (glob_tabvar.row1[i][0].split(".")[0] == 'Categ' || glob_tabvar.row1[i][0].split(".")[0] == 'Curve'){ if (curves_labels2.indexOf(glob_tabvar.row1[i][0].split(".")[0]) == -1) { tmp_tab2.push(0); - curves_labels2.push(glob_tabvar.row1[i][0].split(".")); + curves_labels2.push(glob_tabvar.row1[i][0].split(".")[0]); } } else { if (curves_labels.indexOf(glob_tabvar.row1[i][0].split(".")[0]) == -1) { tmp_tab.push(0); - curves_labels.push(glob_tabvar.row1[i][0].split(".")); + curves_labels.push(glob_tabvar.row1[i][0].split(".")[0]); } } } @@ -337,14 +337,14 @@ function load_queues() { for (i = 0; i < (glob_tabvar.row1).length; i++){ if (glob_tabvar.row1[i][0].split(".")[0] == 'Categ' || glob_tabvar.row1[i][0].split(".")[0] == 'Curve'){ if (queues_pushed.indexOf(glob_tabvar.row1[i][0].split(".")[0]) == -1) { - queues_pushed.push(glob_tabvar.row1[i][0].split(".")); - tmp_values2.push(glob_tabvar.row1[i][1]); + queues_pushed.push(glob_tabvar.row1[i][0].split(".")[0]); + tmp_values2.push(parseInt(glob_tabvar.row1[i][1])); } } else { - if (curves_labels.indexOf(glob_tabvar.row1[i][0].split(".")[0]) == -1) { - queues_pushed.push(glob_tabvar.row1[i][0].split(".")); - tmp_values.push(glob_tabvar.row1[i][1]); + if (queues_pushed.indexOf(glob_tabvar.row1[i][0].split(".")[0]) == -1) { + queues_pushed.push(glob_tabvar.row1[i][0].split(".")[0]); + tmp_values.push(parseInt(glob_tabvar.row1[i][1])); } } diff --git a/var/www/templates/index.html b/var/www/templates/index.html index 65b9c0c8..8bbb59e1 100644 --- a/var/www/templates/index.html +++ b/var/www/templates/index.html @@ -66,14 +66,14 @@ Display queues
-
- +
+
- - - + + +
Working queues
Idling queues
Stucked queues
Working queues
Idling queues
Stucked queues
From 78e0ee8667d5384b0659514502819fa3d7822146 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Fri, 26 Aug 2016 16:51:35 +0200 Subject: [PATCH 5/5] Updated screenshot --- doc/screenshots/terms-plot.png | Bin 31830 -> 30946 bytes doc/screenshots/terms-top.png | Bin 88453 -> 114022 bytes doc/screenshots/trending-module.png | Bin 55384 -> 57608 bytes doc/screenshots/trending-web.png | Bin 58762 -> 67444 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/screenshots/terms-plot.png b/doc/screenshots/terms-plot.png index 32647906a1ac946e38d1ebf891ff28e45b32a999..4d33466d5f57294fe03246eae9799bb5a92dbad9 100644 GIT binary patch literal 30946 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

W^8Qy?Abe%OLgGn zg%HJS0c)tIdaSa?xX%ybasqt~t>P}97F%AK78BUtoW2YFUb9rWVq_UH?WUtceReke zF$(doh>zrx@cjE_WryW=09pE~`F7r@*RYWY^QX0R1QW{1^QL^FtSGZtA?z{2kPa z!!jT$OS{hlietz%!Ve!VG^5N9hI9W^ZbNA+pI0nST{@lD{|S=iza(G$muZ^+b0bs? z8ah5o*VS|G|8l0DrktLh8dqZe{RrdLkKl9X&Z!rJw4R@lu%5gZ&mIg74K3pbcN;5e zJ(HIwFXo@sJni~eLQjwUiM+z{^73j$9k2CAyh*=inySjnRyX~!)NK_N!;0)biR+&I zj>DsLRr2WHzkl~>M!k8&q6{GqDv{=-r#JDqvWm4to}{90%B znip@xmqK2Zvf^IYZATF`t97B%ezRY-ZySiHNsa$V{(MGd`F9eu>O^PfzamKg_h-@Q z$V9#Rg~`M9R{s!}=>(%U_9>I@?VMuh0HdM%ne%b;#xqA!)q&P3`<*(n*^?7sMvL8nG)p$)@9|NK;L%^tBH*SwjY>lqk4eMUD1MC=Q~92(_XAFp7T zYkZhx>~TXX4E*F{B&Pb^zdqNZPe@C(>;taIGc9LtkXb-`>m+ZSarFyijYcfXEnE8d z_75`!Y{0L-QJoiGFBXT_lYuO5=gLsdJ;x7iaOTWU_vCD}(wU~t8QrAJdH2hbJ^^T5)EXZZ=j zOR}5O-AK-dUp(W!{rHrr-ygi%nBvJDceQ#A0)(kFcic?0N~&XtLFZ`Rl*H^(Vp!82y4~2qFR`fzOZ%=-5O$RdVqC;>%~SP2Iou<3Urs zo$FFtQ1TG{V$=0qDmly{RdbiP!lmhLr?p(F;Nzn(V!achj^9MVi{#eW@TCKJ;Q@O* zg}|zlIV1qzq#AcmUzQ#Q_I)R>5M$5ClTaO?7qWgfsqJoLnj+S20-7B8CisM;o*HSG z=yJSYk51_iIaUSk2Jijd{8C|O6gtzg*rkL%S{`~ADJ;;mlCYn#OIJ9>sE51pHBC(! z%zA2sp<^lJz{nXqxjZ8pzlP8_ArkAf)fD(=_77C5k5;O{%|N(DjEBOMx*u>$hhU2M zZlb?%u+~X6*6Xdcof6WlMgMYnWYpY|<#e=m`vKRO&z*E4NAXJfDB_w1LQbvep!lU| zxnB$W-Uo5)3<pS?}Um6KPlG<9FL*NvYnVxlZlL;Gk2z_@(Jb z590e+&WK#Gvrr-|+R$<^Xzjf{wV7<5m1*95O_z@}Hluh3xEL-9-UWl(_C`YXKGpcw zj&8{hhHQ<1&MPSE^Urv1+?!5GML%YTrKeXuuVa#Zy*1X6LG;W!6*p8TEZ?A2bL?qZ zSy6FucUPC_ap?8wdeMU%iLt6!F|p&lGemKNv$C>I<0YxRv`qEg*&_V=-Gpz6E;Nr$ z2LtTB`txRX{OLcJE<y!9&m@9pTBZd z{vXojzsvSN$eH{<58E*(%JzewEL3xvUYWdQkg{7NJC*0@GDa~)Z9+ir9EOqgUP|BG z+~1n9PMhdI6JE>)9e_E6g^-J7)#|h}8OJlU6h1>)HIV*PQb%TPlIi{tam>82YiF0q zq7XR2VSEJkKAo5Ll^)j`h}U*?bAo_WHMoQMb6`(m_4Euvzs24Ebp#br$)tZEze>MQ}}t4mCZEA z%Jio4>)N=Xy<_%Htzd+ear zRshuO48NHhsTas8vG{b8hUT1z@sHSwu`9&C0NvjgHr+zcyLrq5F3x_P5Eo7jma2#N z4++ad_z;F)S98`T`nIf^em?hEVQX8*cq?Y$rd!;CX4_|k1{@#?2aed&xe6WAS&tFY z)l<{Z&`?*G4OedBC1HHILfV3%L#%QeO`BrbELNLqW;?jwf?}z5Z`TDH303ix%pM9V zyG%zLMjWAu443Z%xcRSZ0@RJUmjTHsDJh>nzp6*_vK0wv2!TK2QcJ)v(!?p2FQlkU*`$xS~xpNx90`a=+T zil0OixV|@@-Slx=^>j`57=j+V!903q1C|G^Pwt$|h!QC8B<9}ulPq28`m<3G=eH}& zg!);}WK;rs=LP*{}wk?%};eT^Zd%Lul%rap_d6^rU_i(X$pa913Cf6`d$ zyntr}{gKev4X+l{bc{G@A#~jun|Foi`+-vUd04mlfo%POC#At-Tuc+z+}3+XeV994a|nWx8uAubsQ38g_?J*uP{nkSY0oF zVF8ix__@9*su;z3G>Z*-+&oWHY1f(ba&d59$oD6bp2l^rH>uxj=|uV)DP8;Te8>Fzmjmor z>$~s#ou6qX5HPQg9)CF&B8MIMGT?1i|1&OdW6|+uC3^EcVt%k^$#IQG6K~ODr;y5v|<_<@x=q(hNc~*oo0V_S_#Q=60vH>l*7sz%J;dWo58f zmVZ^|v1R8DJ}bx-+BlIb__290_kFJ)VEqX4OOxQHX-PT55j>F_}tA9 zE7wL+*kaEKGm`h~N|8OardMlic}=KH%|%e^AoC!pF&3=!>5r zrsn8qcU{xo-u{$}-`u)&7xM=KH6l!PC8ZI=Nq=O1^@_YhSCjd` z^$#1Sz#*Zqlbh+!-M3qM9mNhBa{$#pVTZ!;g}Drv@d51_2-+vxW>%{(h(5_lCg*!< z?}%sP|NH&9;)2>m4GX!szSg!P)^7B_0fyybmOH+@a$Rfb?5We)9lNZUPjhatp@f}N=xdG{8@(qIkX_p9*75x#?mNV_v~H%ip#kp(K@L;g+pph zZIzWvG2=&QIb-GkWQbhaCX^^;%a5KPXYw7sCV!@LsE&ogkf)`O0Ky12Xxb!dw`^3S zr~U%W`H2}J^B^x};#X0gKFfR2!2P|CuJB)xm%DbUb?&&fUsL+0doE8)_wX`{3dG5x zN!H2m#KCqv!|5#~!(VS(*YC8tjXqip;m*ljM(lKg7IM?;yOC+~F8BYD|B@<=O!#x> zqy3JFfpCJoIq>FVBd4~Ok0f)m0Ta?T?2(zYJ%}}JKMX|r7V@!mduzFs$y551^zx-S z<+JM*ZjzcmhHl;29@ItZ$^5_?syI0YjU0SQWF`CW4?Z%7d$B5vCi52!>Vm9CovCy| zGG*|Ih31Q*xX(<_M|O<|5A^gzWMpK>Y_xc#g-t&v2*;rIrO-sc|89E6t4qHB*;PL> zIm=%!r6eSbj?3Fw{sH#GGOqOZG6=VxKUWXm3jJyId}4$CSMf%Rz#qT-SH;`Zj}9N= zAJhM1hsaf}0mRBPyy1@XJZUW`NC4ZdGJy;*_B5!f zEH}cz%j=z<3NdKN8KJBs#ylRfTtAwF@rio~hgUisjQRGUUOXHeH9z?@Zqfh` z+#6$4UtSd-&a(;GUgG9tY}+_~)wkLc*S4uw9Ae>o^5uEo^1X8OpPEL=d-EE{k#`la zj@X-y6oUZ>zkui&hWOAss2S`OH-+TE|xo%3Fd^6iVLDgqT5#E)K&^>7^evvX;pW*`{qrc z*(O-tUcO%z2YVzd*V|IZ7HoV-jGjtu-+8N!N_O^?js4lJwI4q+_&blMBu|CPW94vx zmdW>d;#+NBBpLCln{lPeime=q;zY*KX2|226V>d)+)Wm^T6SAkX;dWno+2V){_ao< z;d?(JcQscw#2sRwK<-BGH!5a`j_gkPk-j) zm4S;Y0?$K*q$>-QP3TQaC#x}6Lf-yA<>*h|G49-(QL9D)E=Zh3!&9K>S1_n)8 zYzP2~oOT*Mx2Z1__On|ekQEGD4`?+%!OxA56DMQZ@VK^K8)07d_3-O4M1jKg5snf| z`6!K_584v4w(|BPBSY`-zgB|PAe@fx+yv~$cQ4G5lcwK4&s`NC;OW(3pg0puktUJ< zmy0%?qLx={?aR_Y^VDAR#Y~&FjbNYdx%UCoEq*^!crJ>VdzTE;I55ZF!N`l9-n6mU zuiiW{uY(t2bJmg;iL`?+BG*Rc0+B=5=*Or=|GC5Vx2;wg6HZZEaM;;KLg~vvor7=% zgdqsYAYhuL{{>4g#dzETRYNm~($H8uT|JD>G5Eyly>wFVOK^8dCS(%?WmshpcR1dE zP`o89szG^9LeunHFW0xy%cCBy7Q$3_2YB~>h^l@6us7qPoUvmswi3g2&&SM_;mTKv zd#`~7PxinFYi8xfF}s@?KlH5Nw5bxy`TNlDibbBt$;rLubX%s_B z9o+0+zLU`SwYm!HOS;4xVIg6BzqDv(ZMbe?YFpNeusqkA+q}*6L-^q>6d2Rx$%*7A zp!PP7hw%O_YmNIbpzF+=`j}OzfdHQ~uw2t86va594|`|64;^O&57pvUr9y}s$Iuo+ z)y28nN5ifmhpXN&u@5)))J|660*BitUKpy;#?+vV4z}qHG;~wWW#14J9xU1izeTQB zt8ztzhfhi0feZs4@^jq>6m?#>xC1gU_g`EsuXcf@Qr_LF#t~cbro=_L)?l*^D_Z`{ zJo4VIWA59%ms6bB!c(b+JIU>nZAc}f&_IF;HFy2d;X2NS^b_(5%m7&Zap7WnU0NO> zjiLNBiz_KiO8+dp>Cxx}T}B%fY8FRO0J6_Ec*|V$*5-q%ztS5XWtNm|PYoaz(7qS) zaT}2+ww1LFKpyEVcAMpyX2qXB)_DAHTmX&JE(vPOV$L)CgHLpOpn8(WfjqQ=*7Krx zeFHz;tGKmU&2xDJXT6sSmx`iS-fu=i*gO;0vA`Yt<>9@{$s>YNT%uyZE-DSIh_YJ&gYWPH{sh);_jX%CSIWl+2fGg2J{1x z6k6R+zVe^~DztxrtmA-g^$_7k)2tqr;8)+55}$QcZCttb7O?ZzY3O;9shi|4GXT?h zjHF{|9-?RU4pUlGZTTF{gXnqoK>tPO*V%7$(=X-!2FQe-{+9y7#*6c+_C6knd?TL6 z(~#|~thXh?H}pJp!gMRrWJ{7!qc^TRp`N|>22espOBXt!?Wt3U=&_Em*`1MAs|lwp zGtJ@|{79br=nUFthJ~N$?iAg<5n8lB?f?kI=@i((ZbxR^6LaWRvbU~3_-)uIo~RK^ zAKR71RDk<#mV`RLEN~iUL!aBX`X@PAlEtw7dkQf(@l9L)@1a?NUYB!TRHu5i-yt_p zMtrETgDs)vHtHD@}0A>CbT?tJZzrH(ugq(Opy#E zC`OhT1|aErSN#PW(ZY`{UUWvUxVPT@Og0go1`ser5FiuBQ2@vjP}Kw|r$=dvzUIpS zPqys6ebF6bWAgZ^JySyR+SfmJ5iel;?$WDE%(uxk^5NHg32dO zUFT9yo{EPQXPVkOxRj;I8fK{7im_pN%W^&BYk7Y6t(+|VP*y&qfBFECoW5-Jj%^JvbKHK>)UDY0S2dPA|txHKiBlpUF zcGl|!Z$`4PyY;EI-k0*Hcr>$Fa(e8G-`HP!ONLpYYD-cSvc&|P-ILAA657`B@)tmp zk?Ve*ScUH6^4+DC(R{?9x+cA%>y;#iXNFF)@QVdiY8(|F6gSo-DbvZe<^B5I`6jaN zj%x!P0VQ^@d$hVjGUhKj$ERu56T+VWE?f&HJC!?RfZPFY+bM!#pN!ANeao6O4Uo?Z ze4yW}x_s^J^qiK`E2Uzk%Xz7%^`IvjBQZ8A=?%d;ycrYfZ&zn058tBLj4*LYF~VU5 zr}*#TQn#j^dfGeKeqB}>FnsmYAcm>x@)4E+)03IqODOh>5iArmkRNCE09kXV#=(5J zQe%W0JE-|41GViY=~-9y%+P@T@Kbm+rTr%me%K#3Iz!b&6UyP*+pDF9cj*(~b!fYB z^I`xQVP`#571QBke2O5mr;b;?E)|j62nA{KHW!j%VKes+j)vX;SJVw5KQ=qQd%$QL zExbU6UH;OC8~Qx=!ouyZT-bS_{*0Wo-5{I9W2r``5hv=Mr4{+9O)X=Dv#f-^z~Jvh ztFQtgvKs`tF`m3XZ+K=x4-4)nf(D-?CAYHv2aYPPo*H9X7%Wq%hbx8ubj`C_SdE{O z*H0t1hnsAlLcYsh@_&;dHy(AWiKHraK&O}MqaujxyCUR9F^V8k$Ahqz)M@pHDm7F7{@TFr1GRXl%XqfZbG@xY25=ifn8!Zq9a zf%z4674L9%rXlEw;WI!{Jb<(xCwQrf*Tm>hYxt7ZLX z8TFf1YrOR){vf@|2gHhC|*+J@a&MC7)5ZH*%9 zb8YLRoW)#$^EL9_u3NgOp6Qx&k|F@G!&hmiKlqb85cK5;pMK|qFlm#$hReQv|AA$$ zuyAt75iO^ui#dyYQXLJwZOJKks|p<&m4mz){ARci~g;?@W#!@UW6 z#dRK#2QO(XwLE-fe}>|-kQi-KBl@49&!AoN?7`9%1=Ji3*+&Ld+1L0i9Yo|vVQ51F z!O)GCIb3rgD0$3Qhrbn+#@9D+=VoYtAzvRGOGIH>-Y{S5p>J`{QH{rzlCn=Ndofsw zJoUkYyD)EqDKXP(=i7Q8ZXEG|pRlQEVynE(e4G{4`;>C|SVG#8qEa8Zm)pj0>@dZ8 z%9$<@19tJ(L+vapg0_=O3r;Y+gd@!)s>YVXFrqptDCB46$x0Uc2l@M+!c;SAOri~~ z2L_*fk5od`z=0-`sTApk0oO6$pT02{wm(o28dmM zYnzjs)oR(i4raXWUv=_ggSl_-E&dih3t3@HK51XC(;lgSWk%#1)kSpTJjsEY8YfWH zO;wtfA(fyJyO?OD?KUaX5VMYZa$@K6o^2sc_9TVq0`xn<5TwobOarm4Vy?AF#ocU} zj1-x2AX#Y#`~N!o@<1rp_x(XxDj{1*9CflwvK3iU^075qnyo8TUl z^39Uoxo|*wUR*SotT|mLu9JZf{w0p`6Q|$Mv+{WF3s`2_=@)d0D&VQ5?~gR!{<-jW zLlp+gJ5^~`9QJZfxF}g`s)3!P;}d%Qx#U3m_>;%1PTStcV?&-xN>V@-XD=tfl|V+z z7Y=DFmp*Y?l=vb|Te7z1ytu~GFSJZOLVwPYd*kUu)6}&i(vtLmt;o6o4&9tDe3XXX zCx_*^%Ku^$k;4`{#oZ}H7)A(|ch!!Na@rcOy`{@r5I6%lGqO zbRiPA&X6q}@>Y>sTVU?g9Z}Jn)oOr!3Dn%|zZ-M-W9vP1CCU4?vabw6Zn!vA77B$Pwo}aPtzh>^uhiiwmdyFUxja z(aJs!LzZWha@^o&NqliW@ZrKiW}G*>bYZmxo^4zw_x7@Z7&wwE{2FyCL;x)Fofn9x z0v>w*#WN0ZY~#6P&T=}6_f|(QvFs6{7KVYfbr2 z_;`Htj?$qa*D)0eA!ri}mUfypz(63v&JlBbpw?*1Tr~6_?2_?_V^p7lCN3%r+=llQ z5f7;wlC@+E{A-y3Vw*`=`&ac+rUQ!8TnBP_TRD6%dT6GTz&%LukYb<}@yk3F&-P0B zEVg9WW9kc{kOR5Nt(KO>w1RBVx#gU^s~dZF`{Z#H+LZblxSv3-_(gODJe*L_iH5jS zymz|e2{luHl2BuxS)`E*Ai)`>mj+U47(w_N@gGN~6oW;;RPr;ntFa&ucGR-MqCrrW z)}{nk2P=h~o~DNu)PN#ajNs-Z6-^uAFtk=6`hE^9s|>5Z!fjrG7!d^WrerL@C=jBE z&a6w64%?S1R*sj&1Mc}Ru7RN>H4}qYHqSfywuozw_us1vWX2Qr)Z`PG9S4 z^XG=7`+4#nLKCQdt4%TdAzLI*OsX)2mq`Eqn+=V{?p~`2>c^L3qeSh?SSU?Osu`ea z#r5(-_F~-t>#hDj`NmGvsr1BD)eP>+OcdxYVPs&iSTlQ|-?y9Q79KxW*T)mC2rJp>>$(qX+| z(8wk3xnwm8Iy*`!QbFO%rmW-CkHJyHp5gqIsb+MNga2d=Kch{yi71a7#EztH6w(F$ zZ}Ot+ONP>bhdJM%?qF+du18aTGFp>O!c(IGjPzGv{!7XO)Ugcr3HBzHE`+uIkBF0m z{M+@Dzfuj@TK8rM;0F*$F>{;zNL3h`97ZiDEUr&`wHs4kgA_5!HRHbtMCbV^2r z^9P?rJl_G`%hm`c|8ng0a77?Efg0w|dlt_zO%0ZrWC@7>pi1XsV6t}K{uF$<3kp~0 zO`rHPYv%0$N+4Gg-|9c@+!k1rx;`qg*~9iD!>8W0GstOwku8V(>v)Nt+k>V1yv)3| zPjR2!w@%qQYDJ8g53CWvc75?`CIv`x!h8M_pSq5DeKg76)A@c6col=MvmUSk=yZFc zaN@LlO}xM{DGES2;+3%*!Z?%0DW;vzezSAR2jBI@+=t;+6U?K(A*Jg&J@KMKqA`L% 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%0DC<8H4pyV{P-WU?xr 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