From fa93c3b75ece165e1a977d94eacb557d1086ee38 Mon Sep 17 00:00:00 2001 From: a2nr Date: Mon, 14 Oct 2024 13:52:59 +0700 Subject: [PATCH] update dan selector mechanism is working, saatnya edit sinyal dan test --- Software/ALL-H3-CC-V1.0A Headers.ods | Bin 43013 -> 30895 bytes Software/dashboard/Makefile | 10 +- Software/dashboard/ecg_sim.py | 6 + Software/dashboard/heartbeatmiceDebug.service | 9 + Software/dashboard/lib/hal/X9C10X.dart | 90 +-- Software/dashboard/lib/hal/ads1256.dart | 10 +- .../dashboard/lib/hardware/heartbeatmice.dart | 135 ++++- Software/dashboard/lib/main.dart | 201 +++++-- Software/dashboard/lib/ui/plot.dart | 23 +- Software/dashboard/pubspec.lock | 26 +- Software/dashboard/pubspec.yaml | 1 + .../pulseview_session_manual_debug_setup.pvs | 75 +++ .../test/labview/ecg_generator/Main.vi | Bin 0 -> 73792 bytes .../ecg_generator/Untitled Project 1.aliases | 6 + .../ecg_generator/Untitled Project 1.lvproj | 174 ++++++ .../myRIO Project Documentation.html | 541 ++++++++++++++++++ .../documentation/myRIO_Project_Diagram.gif | Bin 0 -> 8925 bytes 17 files changed, 1165 insertions(+), 142 deletions(-) create mode 100644 Software/dashboard/ecg_sim.py create mode 100644 Software/dashboard/heartbeatmiceDebug.service create mode 100644 Software/dashboard/pulseview_session_manual_debug_setup.pvs create mode 100644 Software/dashboard/test/labview/ecg_generator/Main.vi create mode 100644 Software/dashboard/test/labview/ecg_generator/Untitled Project 1.aliases create mode 100644 Software/dashboard/test/labview/ecg_generator/Untitled Project 1.lvproj create mode 100644 Software/dashboard/test/labview/ecg_generator/documentation/myRIO Project Documentation.html create mode 100644 Software/dashboard/test/labview/ecg_generator/documentation/myRIO_Project_Diagram.gif diff --git a/Software/ALL-H3-CC-V1.0A Headers.ods b/Software/ALL-H3-CC-V1.0A Headers.ods index 08d14452f3e294c273a9ba296db7fdd438a0a977..e4cc7ce62a3520152afaea37dcb64716bb9a127c 100644 GIT binary patch delta 29083 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 vr4#>BR5+fF8Sa_4>j=hVIDe7yTh*HhiS)~elm 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.write(false); - void releaseChip()=>ss?.write(true); + void _skip()=>sleep(const Duration(milliseconds: 3)); + void _storeSkip()=>sleep(const Duration(milliseconds: 20)); - void wipeUp(){ - onSelect.call(); - ud.write(true); - const Duration(microseconds: 3); - inc.write(false); - const Duration(microseconds: 1); - inc.write(true); - onRelease.call(); + Future wipeUp() async { + _selectChip(); + _ud.write(true); + _skip(); + _inc.write(false); + //while(true){} //TODO: DEAD CODE; + _skip(); + _inc.write(true); + _releaseChip(); + _storeSkip(); } - void wipeDown(){ - onSelect.call(); - ud.write(false); - const Duration(microseconds: 3); - inc.write(false); - const Duration(microseconds: 1); - inc.write(true); - onRelease.call(); + Future wipeDown() async { + _selectChip(); + _ud.write(false); + _skip(); + _inc.write(false); + _skip(); + _inc.write(true); + _releaseChip(); + _storeSkip(); } void dispose(){ - inc.dispose(); - ud.dispose(); - ss?.dispose(); + _inc.dispose(); + _ud.dispose(); + _ss?.dispose(); } } diff --git a/Software/dashboard/lib/hal/ads1256.dart b/Software/dashboard/lib/hal/ads1256.dart index f452855..0d39c27 100644 --- a/Software/dashboard/lib/hal/ads1256.dart +++ b/Software/dashboard/lib/hal/ads1256.dart @@ -133,7 +133,7 @@ class Ads1256 { skipClk(); bufferNCS = buffen; autoCalibrationNCS = true; - clockOutRateNCS = CLKOUT_1; + clockOutRateNCS = CLKOUT_OFF; programmableGainNCS = gain; dataRateNCS = drate; var st = statusNCS.toRadixString(16); @@ -168,16 +168,18 @@ class Ads1256 { } int get controlRegisterNCS => readRegister(RADD_ADCON); - set clockOutRateNCS(int clk) => writeRegister(RADD_ADCON, controlRegisterNCS | (clk << 5 )); - set programmableGainNCS(int gain) => writeRegister(RADD_ADCON, controlRegisterNCS | gain); + set clockOutRateNCS(int clk) => writeRegister(RADD_ADCON, (controlRegisterNCS & ~(0x03 << 5 )) & (clk << 5 )); + set programmableGainNCS(int gain) => writeRegister(RADD_ADCON, (controlRegisterNCS & ~(0x07)) & gain); int get dataRateNCS => readRegister(RADD_DRATE); set dataRateNCS(int rate) => writeRegister(RADD_DRATE, rate); set ioDir(List dir){ + log.info(" set ioDir <$dir>"); csOn(); int d = (dir[0] | dir[1]<<1 | dir[2]<<2 | dir[3]<<3) <<4; + log.info(" > <${d.toRadixString(16)}>"); writeRegister(RADD_IO, d); csOff(); } @@ -185,9 +187,11 @@ class Ads1256 { csOn(); int dio = readRegister(RADD_IO); csOff(); + log.info(" get ioDir <${dio.toRadixString(16)}>"); return dio.toListBoolbit(); } set dIO(List io){ + log.info(" set ioDir <$io -- ${io.toNibble()}>"); csOn(); writeRegister(RADD_IO, io.toNibble() ); csOff(); diff --git a/Software/dashboard/lib/hardware/heartbeatmice.dart b/Software/dashboard/lib/hardware/heartbeatmice.dart index dc22272..81e6e45 100644 --- a/Software/dashboard/lib/hardware/heartbeatmice.dart +++ b/Software/dashboard/lib/hardware/heartbeatmice.dart @@ -1,7 +1,7 @@ import 'package:dashboard/hal/X9C10X.dart'; import 'package:logging/logging.dart'; - -import '../hal/ads1256.dart'; +import 'package:dashboard/hal/ads1256.dart'; +import 'package:dart_periphery/dart_periphery.dart'; class HeartBeatMice { Ads1256 adc1 = Ads1256(tag: "adc1", @@ -20,49 +20,138 @@ class HeartBeatMice { pinCS: 21, isCSActiveHigh: false, /*pinReset: 20*/); - X9c10x pot = X9c10x(ohm: 104000, gpioChip: 1, pinUd: 204, pinInc: 205); + late List gain; + late List offset; Logger log = Logger("[HeartBeatMice]"); + + HeartBeatMice(){ + var inc = GPIO(205, GPIOdirection.gpioDirOutHigh, 1); + var ud = GPIO(204, GPIOdirection.gpioDirOutHigh, 1); + gain = List.generate(15, (i){ + return X9c10x( + id: i, + ohm: 104000, + inc:inc, + ud: ud, + onSelect: _selectGain, + onRelease: _releaseGain, + ); + }, growable: false); + offset = List.generate(15, (i){ + return X9c10x( + id: i, + ohm: 104000, + inc:inc, + ud: ud, + onSelect: _selectOffset, + onRelease: _releaseOffset, + ); + }, growable: false); + } - void potSelect(){ - - } - void potRelease(){ - - } void init(){ adc1.begin(Ads1256.DRATE_500SPS, Ads1256.GAIN_1, true); adc2.begin(Ads1256.DRATE_500SPS, Ads1256.GAIN_1, true); adc1.ioDir = [Ads1256.IO_DIR_OUT, Ads1256.IO_DIR_OUT, Ads1256.IO_DIR_OUT, Ads1256.IO_DIR_OUT]; adc2.ioDir = [Ads1256.IO_DIR_OUT, Ads1256.IO_DIR_OUT, Ads1256.IO_DIR_OUT, Ads1256.IO_DIR_OUT]; + adc1.dIO = [false, false, false, false]; + adc2.dIO = [false, false, false, false]; } - int readAnalog(int no){ + + + Future readAnalog(int no) async { + //TODO: check kebenaran var adc = switch (no) { - 1 || 2 || 3 || 4 || 9 || 10 || 11 || 12 =>adc2, - 5 || 6 || 7 || 8 || 13 || 14 || 15 || 16 || _ =>adc1, + 1 || 2 || 3 || 4 || 9 || 10 || 11 || 12 =>adc2, + 5 || 6 || 7 || 8 || 13 || 14 || 15 || 16 || _ =>adc1, }; + //TODO: check kebenaran var ain = switch (no) { - 1 || 15=>Ads1256.MUXP_AIN0, - 2 || 14=>Ads1256.MUXP_AIN1, - 13=>Ads1256.MUXP_AIN2, - 8=>Ads1256.MUXP_AIN3, - 12=>Ads1256.MUXP_AIN4, - 4 || 6 || 11=>Ads1256.MUXP_AIN5, - 3 || 5 || 10=>Ads1256.MUXP_AIN6, - 7 || 9 || 16=>Ads1256.MUXP_AIN7, + 1 || 13=>Ads1256.MUXP_AIN0, + 2 || 14=>Ads1256.MUXP_AIN1, + 3 || 15=>Ads1256.MUXP_AIN2, + 4 || 8=>Ads1256.MUXP_AIN3, + 7 || 12=>Ads1256.MUXP_AIN4, + 6 || 11=>Ads1256.MUXP_AIN5, + 5 || 10=>Ads1256.MUXP_AIN6, + 9 || 16=>Ads1256.MUXP_AIN7, _=>Ads1256.MUXP_AINCOM }; log.info('readAnalog() <$no>'); log.info('> adc : <${adc.log.name}> | ain : <${ain.toRadixString(16)}> '); - var r = adc.analogRead(ain, Ads1256.MUXN_AINCOM); + var r = adc.analogRead(ain, Ads1256.MUXN_AINCOM).toVolt(); log.info('> $r'); return r; } + void _signalMux(int n, bool val) { + log.info('_signalMux() <$n> <$val>'); + int i = switch (n) { + 1 => 0, + 2 => 1, + _ => -1 + }; + log.info(' >mux : $i'); + if (i == -1){ + return; + } + List io = adc2.dIO; + log.info(' >current <$io>'); + io[i] = val; + io[i+2] = val; + adc2.dIO = io; + log.info(' >confirm <${adc2.dIO}>'); + } + void _channelMux(int val) { + log.info('_channelMux() <${val.toRadixString(16)}>'); + log.info(' >current <${adc1.dIO}>'); + adc1.dIO = val.toListBoolbit(); + log.info(' >confirm <${adc1.dIO}>'); + } + int _routeMux(an) => switch(an){ + 1 ||2 || 3|| 4|| 5|| 6|| 7|| 8 =>1, + 9 ||8 || 10|| 11|| 12|| 13|| 14|| 15 =>2, + _ => -1 + }; + void _selectOffset(int an){ + log.info('_selectOffset() <${an.toRadixString(16)}>'); + int n = _routeMux(an); + if (n == -1){ + return; + } + _channelMux((an*2)-1); // - 1 for offset + _signalMux(n, true); + } + void _releaseOffset(int an){ + log.info('_releaseGain() <${an.toRadixString(16)}>'); + int n = _routeMux(an); + _signalMux(n, false); + } + void _selectGain(int an){ + log.info('_selectGain() <${an.toRadixString(16)}>'); + int n = _routeMux(an); + if (n == -1){ + return; + } + _channelMux((an*2)-2); // - 2 for gain + _signalMux(n, true); + } + void _releaseGain(int an){ + log.info('_releaseGain() <${an.toRadixString(16)}>'); + int n = _routeMux(an); + _signalMux(n, false); + } + void dispose(){ adc1.dispose(); adc2.dispose(); - pot.dispose(); - } + for (var g in gain) { + g.dispose(); + } + for (var a in offset) { + a.dispose(); + } + } } diff --git a/Software/dashboard/lib/main.dart b/Software/dashboard/lib/main.dart index c0e37d6..a96132f 100644 --- a/Software/dashboard/lib/main.dart +++ b/Software/dashboard/lib/main.dart @@ -1,18 +1,19 @@ -import 'package:dashboard/hal/ads1256.dart'; +//import 'dart:nativewrappers/_internal/vm/lib/core_patch.dart'; + import 'package:dashboard/hardware/heartbeatmice.dart'; -//import 'package:flutter/cupertino.dart'; import 'ui/plot.dart'; import 'package:flutter/material.dart'; import 'util/mouse_cursor.dart'; import 'package:logging/logging.dart'; +import 'dart:core'; void main() { - Logger.root.level = Level.ALL; - Logger.root.onRecord.listen((record){ - + Logger.root.level = Level.ALL; + Logger.root.onRecord.listen((record){ + print('[${record.time.hour}:${record.time.minute}:${record.time.second}][${record.level.name}][${record.loggerName}] ${record.message}'); - }); + }); runApp(const MyApp()); } @@ -21,18 +22,18 @@ class MyApp extends StatelessWidget { // This widget is the root of your application. @override - Widget build(BuildContext context) { - return SoftwareMouseCursor( - child : MaterialApp( - title: 'Heart Beat Mice', - theme: ThemeData( - colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), - useMaterial3: true, - ), - home: const MyHomePage(title: 'Heart Beat Mice Coba'), - ) + Widget build(BuildContext context) { + return SoftwareMouseCursor( + child : MaterialApp( + title: 'Heart Beat Mice', + theme: ThemeData( + colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), + useMaterial3: true, + ), + home: const MyHomePage(title: 'Heart Beat Mice Coba'), + ) ); - } + } } class MyHomePage extends StatefulWidget { @@ -41,7 +42,7 @@ class MyHomePage extends StatefulWidget { final String title; @override - State createState() => _MyHomePageState(); + State createState() => _MyHomePageState(); } class _MyHomePageState extends State { @@ -62,43 +63,143 @@ class _MyHomePageState extends State { @override Widget build(BuildContext context) { + double height = 300/4; + double width = (MediaQuery.of(context).size.width-30)/4; return Scaffold( appBar: AppBar( backgroundColor: Theme.of(context).colorScheme.inversePrimary, title: Text(widget.title), ), - body: ListView.builder( - itemCount: 10, - itemBuilder: (BuildContext context, int index){ - log.info("build ListView index : $index"); - return Center( - child: Column ( - children: [ - const SizedBox(height: 10,), - SizedBox ( - height: 100, - width: MediaQuery.of(context).size.width-100, - child : LayoutBuilder(builder: (BuildContext context, BoxConstraints constraints) { - double height = constraints.maxHeight; - double width = constraints.maxWidth; - var i = index; - return Plot( - title: "analog $i", - aspectRatio: (height/width), - maxTimeSeconds: 10, - sampleTimeMillis: 2, - readAnalog: () async { - return await device.readAnalog(i).toVolt(); - }, - ); - }) - ), - const SizedBox(height: 10,), - ], - ) - ); - }) - ); + body: Row(children: [ + SizedBox( + width: width, + child: ListView.builder( + itemCount: 4, + itemBuilder: (context, i){ + var index = i+12; + return Column( + children: [ + Text("Analog $index"), + SizedBox ( + height: height.toDouble(), + width: width, + child : Plot( + title: "Analog $index", + aspectRatio: (height/ width), + minY: -5, + maxY: 5, + maxTimeSeconds: 0.5, + sampleTimeMicross: 1, + readAnalog: () async { return device.readAnalog(index); } + ), + ), + ], + ); + }, + )), + SizedBox( + width: width, + child: ListView.builder( + itemCount: 4, + itemBuilder: (context, i){ + var index = i+8; + return Column( + children: [ + Text("Analog $index"), + SizedBox ( + height: height.toDouble(), + width: width, + child : Plot( + title: "Analog $index", + aspectRatio: (height/ width), + minY: -5, + maxY: 5, + maxTimeSeconds: 0.5, + sampleTimeMicross: 1, + readAnalog: () async { return device.readAnalog(index); } + ), + ), + ], + ); + }, + )), + SizedBox( + width: width, + child: ListView.builder( + itemCount: 4, + itemBuilder: (context, i){ + var index = i+4; + return Column( + children: [ + Text("Analog $index"), + SizedBox ( + height: height.toDouble(), + width: width, + child : Plot( + title: "Analog $index", + aspectRatio: (height/ width), + minY: -5, + maxY: 5, + maxTimeSeconds: 0.5, + sampleTimeMicross: 1, + readAnalog: () async { return device.readAnalog(index); } + ), + ), + ], + ); + }, + )), + SizedBox( + width: width, + child: ListView.builder( + itemCount: 4, + itemBuilder: (context, i){ + var index = i; + return Column( + children: [ + Text("Analog $index"), + SizedBox ( + height: height.toDouble(), + width: width, + child : Plot( + title: "Analog $index", + aspectRatio: (height/ width), + minY: -5, + maxY: 5, + maxTimeSeconds: 0.5, + sampleTimeMicross: 1, + readAnalog: () async { return device.readAnalog(index); } + ), + ), + ], + ); + }, + )), + ]) + ); } } +// Column(children: [ +// Row(children: [ +// Row(children: [ +// IconButton( +// onPressed: () async {device.offset[index].wipeUp();} , +// icon: const Icon(Icons.arrow_drop_up_outlined)), +// const Text("Offset"), +// IconButton( +// onPressed: () async {device.offset[index].wipeDown();} , +// icon: const Icon(Icons.arrow_drop_down_outlined)) +// ]), +// Row(children: [ +// IconButton( +// onPressed: () async {device.gain[index].wipeUp();} , +// icon: const Icon(Icons.arrow_drop_up_outlined)), +// const Text("Gain"), +// IconButton( +// onPressed: () async {device.gain[index].wipeDown();} , +// icon: const Icon(Icons.arrow_drop_down_outlined)), +// ]), +// ],), +// ], +// ), diff --git a/Software/dashboard/lib/ui/plot.dart b/Software/dashboard/lib/ui/plot.dart index c6178d4..38b8688 100644 --- a/Software/dashboard/lib/ui/plot.dart +++ b/Software/dashboard/lib/ui/plot.dart @@ -14,22 +14,27 @@ class Plot extends StatefulWidget { required this.aspectRatio, required this.maxTimeSeconds, required this.readAnalog, - required this.sampleTimeMillis}); + required this.minY, + required this.maxY, + required this.sampleTimeMicross}); final String title; final double aspectRatio; - final int maxTimeSeconds; + final double maxTimeSeconds; final Future Function() readAnalog; - final int sampleTimeMillis; + final int sampleTimeMicross; + final double minY; + final double maxY; @override State createState() => _Plot(); } class _Plot extends State { late Timer timer; - late int limit= ((widget.maxTimeSeconds)/(widget.sampleTimeMillis/1000)).toInt(); + late int limit= ((widget.maxTimeSeconds)/(widget.sampleTimeMicross/1000)).toInt(); late List adc = []; int index = 0; double el = 0.0; + double valPrev = 0; late Logger log; @@ -44,7 +49,7 @@ class _Plot extends State { super.initState(); log = Logger("Plot : ${widget.title}"); log.info('limit : $limit'); - timer = Timer.periodic(Duration(milliseconds: widget.sampleTimeMillis), (timer) { + timer = Timer.periodic(Duration(microseconds: widget.sampleTimeMicross), (timer) { widget.readAnalog().then((val){ if (index>=limit) { log.info('================================================================ reset $index : $el : ${index != 0 ? adc[index-1] : 0}'); @@ -53,7 +58,7 @@ class _Plot extends State { adc.clear(); } setState(() { - el = (index * widget.sampleTimeMillis)/1000; + el = (index * widget.sampleTimeMicross)/1000; adc.add(FlSpot( el, val)); log.info('================================================================ $index : $el : ${adc[index]}'); index +=1; @@ -68,8 +73,10 @@ class _Plot extends State { aspectRatio: widget.aspectRatio, child : LineChart( LineChartData( - minY: -5, - maxY: 5, + minY: widget.minY, + maxY: widget.maxY, +// minY: -0.5, +// maxY: 0.5, minX: 0, maxX: widget.maxTimeSeconds.toDouble(), lineBarsData: [LineChartBarData( diff --git a/Software/dashboard/pubspec.lock b/Software/dashboard/pubspec.lock index 799b261..157b94c 100644 --- a/Software/dashboard/pubspec.lock +++ b/Software/dashboard/pubspec.lock @@ -119,18 +119,18 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" url: "https://pub.dev" source: hosted - version: "10.0.4" + version: "10.0.5" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.5" leak_tracker_testing: dependency: transitive description: @@ -164,21 +164,21 @@ packages: source: hosted version: "0.12.16+1" material_color_utilities: - dependency: transitive + dependency: "direct main" description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.15.0" path: dependency: transitive description: @@ -252,10 +252,10 @@ packages: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.7.2" vector_math: dependency: transitive description: @@ -268,10 +268,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" url: "https://pub.dev" source: hosted - version: "14.2.1" + version: "14.2.5" sdks: dart: ">=3.4.3 <4.0.0" flutter: ">=3.18.0-18.0.pre.54" diff --git a/Software/dashboard/pubspec.yaml b/Software/dashboard/pubspec.yaml index 829e2f7..2ef0574 100644 --- a/Software/dashboard/pubspec.yaml +++ b/Software/dashboard/pubspec.yaml @@ -33,6 +33,7 @@ dependencies: dart_periphery: ^0.9.6 logging: ^1.2.0 fl_chart: ^0.69.0 + material_color_utilities: ^0.12.0 # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. diff --git a/Software/dashboard/pulseview_session_manual_debug_setup.pvs b/Software/dashboard/pulseview_session_manual_debug_setup.pvs new file mode 100644 index 0000000..a48efcf --- /dev/null +++ b/Software/dashboard/pulseview_session_manual_debug_setup.pvs @@ -0,0 +1,75 @@ +[General] +decode_signals=0 +meta_objs=0 +views=1 + +[D0] +color=4279638298 +conv_options=0 +conversion_type=0 +enabled=false +name=D0 + +[D1] +color=4287582722 +conv_options=0 +conversion_type=0 +enabled=false +name=D1 + +[D2] +color=4291559424 +conv_options=0 +conversion_type=0 +enabled=false +name=D2 + +[D3] +color=4294277376 +conv_options=0 +conversion_type=0 +enabled=false +name=D3 + +[D4] +color=4293776384 +conv_options=0 +conversion_type=0 +enabled=false +name=D4 + +[D5] +color=4285780502 +conv_options=0 +conversion_type=0 +enabled=false +name=D5 + +[D6] +color=4281623972 +conv_options=0 +conversion_type=0 +enabled=false +name=D6 + +[D7] +color=4285878395 +conv_options=0 +conversion_type=0 +enabled=true +name=DEBUG ME SENPAI + +[view0] +D0\trace_height=34 +D1\trace_height=34 +D2\trace_height=34 +D3\trace_height=34 +D4\trace_height=34 +D5\trace_height=34 +D6\trace_height=34 +D7\trace_height=34 +offset=22 serialization::archive 19 0 0 0 0 0 0 0 0 0 0 0 0 0 6 +scale=0.001 +segment_display_mode=1 +splitter_state=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\0\x9e\0\0\x5\x65\x1\0\0\0\x1\x1\0\0\0\x1\0) +v_offset=-127 diff --git a/Software/dashboard/test/labview/ecg_generator/Main.vi b/Software/dashboard/test/labview/ecg_generator/Main.vi new file mode 100644 index 0000000000000000000000000000000000000000..67775f9aec5e8c416b7f123f005c66d5f2e6c817 GIT binary patch literal 73792 zcmeFZ2UHYG*DgE*lA{F4FcJhwl9Nb|lB0lt3^3%Ja}bGwl5-LiR5D0Zf@DFmk`w^} z0g)siLBihyj0ZjG{qA}1|E+b`X;w`?RkdsHXVs4cIoD4~4= z1SU}hfza1LAP@w=9Kbo71QYdkO!#P8DM5>__f6gS>Km%avHPI%bBh5O$zOIP{7%F` zpw}pn4Em!`g=(`BFXU^IdSIY2+|KXiLHJJe8@Aow{X+_bQ;V-}$!`Io=YRwpq^2M+ z+&chX0wHP3OG*L=iBR0c1ZD$svbTk~z?|4^+-xk3DSj%0sKd-)PB1$Y7`us!jjE;` zye}+(goY;UW(kOkpxAn<%c~H`+c~>9x!S_)Tp&_TmToX7XFL@J3!A$9G?)R;U)CPHX*VwJD8KD2}BOC;tq9!{Y(~g%GMTW z@e5m2NqbvcdpnBXk%q`PL2Y5~_D$3M3O=LJIkeP5EE^ragoJI5dQAN0S)?awX2sh#_!&&Uzc zl~I)y|6^t*|1D;JWed&?YvOb$ZnR-e{KZM1>=|!SU`Z!)YMdfhs{*b%#4kPkB@^*5GH8M z1{35EgmM}Sz{~_Vf8!1LF3b=GSv#S8ge~HNd zcpZYfflv!43&J{K%WKTXXUrwY%LX;$;$q`5=7+Kga`SPraR~63m~z9o07v+LV+)KU zydMk3$vTRw4s(XNob=F{D8RL&B1Y|>uARTFK5%}&s)EzRKJ8Q~w@Z~V&;4|SjKIoLSOfC%siaGA0Rm_a$&xJ|fBxuINq zJSI@y-+Vi}8cN#OJHsGa;_8}b;$i$xJvs+hcs%Qz>BgT;!P(=TvghE3n(`QP1H+sf z7)ij!kWG-ogr7~&n3E66Ys|^TcV;93^Cj&WrHI&^E`%rR;BPah$3OK1A24vd0zj0Y zc2IMe6Wpu+gaF(>{L_&qUJWxJkHe()6AXpq6W&#{AK^|Th-;d}3 z{&Ao2Pr}vG#uTEYr30)gc4n65u1-)F_%80(srGa%hWt~1e_r?D&i30c#%;_CEdRVP zK{f$CZXPy%eqe4iF*D@`rq18o0wJB(hB{e7?OZg0`^1wK^}H<1MH#ro1aA4{?ab_d ziy0qa<;PAC?PMMH#5-*-1$BYKb^N|HoE(VgnBAFuAVk{9$=(SfY2)e)+!F&gg!ZAvS@#c<;w(qFB^?=gN}K28_2GZFr;+++Ny5jZWfUub~| z&&2t7bMRZwXae&8XuSQAZa4`L`7bPhzWME50>0OSn*Qnd`p4_e@5k5Q+lG^-_?0x6 z@W&0~Z=pQh1Ka=_{L@kON9y53K$O2Sfsd^-afGkgF2{GXXU3K;(C{Bc^Up27IZ^!q zC-O6#kUwE*`QKvs z_ZHz?Y5ssK$=SZtP=|<{1J7E2yH<_|Z}C{yP)LJm4Q7&|72)DPR}Db^LrAjCu0tS@H~z z6S0%ev(>;3f}f8|26%{n+87W4Ja7#^tP1FqWpcx~#P3Elpij=|9kSwi?idq^=2XEq~nG;M48a&pi%*=<{=5n*j}f znS1_^o{RjQIe0(7zm5P7px+mOZ$tpXpo{Q4_yQ1a5s&monlFi4Am|JY)IQf>A<7?_ zsHs}Wgi>;67s}ehz*5c&(EUY8SZ~VTc>17k}7=H@X`Lle-iM$2q z{b@NaTplLe+5`^924OgY7J-;Ngn#Yik)9A+e)Eu>Nk%l!J&XZ`QVFpSP5$-X14i ztUnPa!%nhX8M3`+CR@wUT8*4uZ7@YlE&pKAzNnceyNE+?QY))!8d?1)LkNqRWA;6M zj3CFiP3QHCbYG0&XWLiGOv;E6DF(>nBkNb~lxjf0$)QR}KBGiU`E$>0QBB2*&5`cN ze7N6`ePsb_FLslg*oFSmhf#Z?su&$J>?^YilN%1~3VUytNZbTVHkZN~KjY2bpWH9j zrGG%Z^6K;QN=flX?gzTif`s9*N9DNzR9DU3%Z4mf234+%Y`JeQT^j7(b9kipmQU7w z*))In&hu9bMn2Nm%))OU5xcrdzZiVHT4ZlG{Eec=YxTu|D4p?6Z7qu&m^CoIKu9H+ z&C511HkKli+senuv1{SotLz7Qb)(Kxl&1T5gJ$cI)RM1o*v6;KP|suf_)2_wiP9h3 z`CX0pW?j%`caYxsY8nxtS7O~BI9fQ@jzCPKh7s^v84y@oUJAb3#{nTpX&j^f$^8(} z5OLf-1xUcHhANQYU)=#0>8Vlx{?+})vFynQLJx4c6N?=eoz?O8tJ?2py0aSBe%AQ+ zdzlkb$De2QO#PzgEU&-ZQ~rs*{$KR{+1mKm-tGLX1?cm?+N=Dvu7%&}`k&t${j~+T zpDp~={lT&1$;a6!H2tgr@b~B2qd&I~EFi=IK*|PE>CamJYOj4PdGc|V$LP-*03LsT zPyXlJ&;d@sBXVLRAUOaDc&JGn2Bc&l)c~pUXKR0duXike@_}HD1n7wd(&OV|_;N~T z0Rrh-c%(1;_z!6y!&-Qqh53TF=J4ZdsRn_*}0jY5lAVrzrXP z$T*ET9=*o?_Xf|*I9>CSgY|dTCH3FNy_Zuo;)v#M-pcgbN<@kH=)}~;#86nc)7$lq zko{|Me`B0NJoM;7%skasi_{!_rA*@4MaES_^$}7D6-d^VxIQ%D2q%;WBi_Vwl3x`W zH-)~sl+6=4YM zmU&=!_qS;dctLJoXXPw$!;^YE*b`UG@YZ}H=Z)@bFei0;Fwc0>8&c1BTGT_8KJLCE zEPbHa{i4~$aI~8{s+EsYnZm2`HH(Sxm6kZR^>%JU_Lda7^-COv)N{cP8p&I@m<`O{ za+QRwzc1`%9lkL|%$*sxUegP<=b2fIOk!ET9XW6QLbx66!$TKViBFOTymFpdZvB2v zwK!(^joURtlM{M--U%~DjYsx=G+7CU4KL#k58ZP_uesRer20SB-)CQ%3B~<>puk#G zKHtgw)%}qndE0gyzijWh!qlmFA#2G}RxS?9WzzyT*K)5597U|o+8nxsQn}(HT909+ z4+MGT@*1>guyIk}aZaYwI^XL{%}sGeidpdjQCO8;NR%2b(bThwb54@PY}j`;Js^7Y z=(?!>O%YOVWIAnb;l;Q&!e9YQ7o%OhKs`zq*)k?O^W%#pie4n--ig zk-9XR3<3$}D*k)|0&+FW#COu_hFHoWEy9U4myv&`-H@K0-+GluzN{|(JpG35HK7E0I;jrM zilx`2&2`X9`RgecZ+D;(2dry&Z0C&Gjr%OHJhO}yw&16-ETVa8iD&I~US58fFDd{m z$CpfT+b?xsKATJ${P=C6CDHJQ&VXEo?;J!*yPZqZqUQ~}F5g)v)*^Tbn?`>3;OWKe zSq`SgO9VLX1xA)z3%7*Tr=P?O>t46`D9zwoID3Kff+mttv}IZBgNV6uV}&bBiTMsO zytu*K_leU2+CI=8RPk6Z-ORRT9KVIDOrSD!FS$SF8===5*`48LEADl2i$`Q3u^U?5 zSi(3ShAfkcHs|U&$9d}NWWD4YM`DuVnXOh^E`7i9_#jDH+k399@<^1iYbV46Ibbj^20j*B-jX(v>`=k-Vz zSERKwV4&^@No8)_XO@j0wN4vdl)v>@inx73vW1?wt^^#eHD6V0l88TXCpJF3UsRaZeg%VHiH z(XXG=Om#WQ6)vdu>ENPamZEO^N6Z>SkvoF|zqr3Z2wcYGW; z2FImLH?SYD6Xf;YsZES$SYn~S>8uqunivfG^zp6f<*12%Bg55O#Fkr^_r8q}_Eg3R zSp{`iF$$nY@e>IlJ&>MOY7OY6iw$Kz|4QQE4STpN57(3p8QBM(M94sfz;z==4Zl(I z4C%QQ#`=YB5p4=hZ3gQOCzB=3LDy#fcx9$Sisw`>l5dVKe0_kqM!f&MoVC!V#aoA>YV8x-FuroSGeLcCCZk(g=rE_RJXBiL8%=Dop7U#M@_P5M%Q zx~!JpAE#YevbwJIUX-EuNtG_$(OdtOWa(LwE};vkV}fCH1xea0G2G(KtRr|VXjB3h zym}lR%uQ}W+;>3xHzbNXF&G`UuZN|qwFzYldk#HrjxTGtP}bL^lD@Mz?@J;^CmSS7 zYu=UZ<>1#-wMU@yg-6{Q}&^c@(U(oe35p9NA)Atm-d>JgV6v#kU+s*Bi#_cp>I$LEn zt8G3z44Vz%cDl;tRBbxD(%I?D6GhPw@ZF`o+?&e@&vf>i=`3|$=e2~G?-%Ai(QSW1 zP1#ymD;#R6*b6nskt^&hLw)}N!s4X)9W~_zG?_{2$X7dz$(Q)Xii?*2EiXDxQ#!Pb zaQ3xpF}Wg-%Vg9pOgtkkpidiH%L|YA&@hN6QxcIeIr_ZCq}`K)u9ee$kTCC|BPRd& zQ(9Y0;AXe}6O*Vn=KwfROIwHFoqFP|MNw1Zkfr?)9 zkRw;wTa3viE(zjgvfF#m%U4)|%dbSJo1u+l+qHDgFVHpD?9wIUICr&gi4WHeWK!C< zqn)!rCTdTG58>J|BMTz#iHv~ruq{fqgQ^~Az>BuLI#_mX!UbN&#yL_+dkUo8N zNtP`wOGm=3C=F<#)B>e*q9DnDLu+xMhQa$+unxPCJ{2H+vOo8F5+m84h$9ZY;^ytz z?0^;<<H4uQ^D#o=@a% zYBycxx z&nKliXMxwg=tF79Pih6zk4%B`NTv#ww3hd2J!hcmu>>0PmPP%W|Sl? zgy-@`QcGg$OK`7!9(XW{o<7s&Co)>G?u(nXVIX_)#t5yV0rRJAZ=ulbz}_Ks;AEcB zay7r=rSc18+e;tb*m`gaykOUl>Lc*DanqW&0*kb)`10u5gpg^y?EISB$L}UN1A<7M z!ZCceK)R3sR$?(TljWgOH_V3&p?Ky3z5;>g6+C=ZZLZ+*Rzj<%^VaeVj{O>^@B0ZngHb9OKg~4-A4;1PIppe$+Zi8cj0$`d zX|CS&0S&KKytJD!a?g$1oR99SyIHm}{Cc7(d^r=f(=Dqxani`sx26JbHTM$ z>}VULy~-|^CNE)fw%18>Ukwz06Hw0bx|Q4qZ_bfQ3#@KVs*y|UdV~6*NW>GBSx415 zPfCkmxq_}4vHW?*Y+g@&=lof4f4MNlLIFGO=Auh>Qbi_a z-f!Dpr~dGs8>yKc3@r&Ly(PBbx-mB`AAmo(Sasw3SRo&aqp+`Ma#U2Mcg+jqNUo@& z&M|f);YDcd^*7U{qCxuxw?+F}puHrPSi+Q_B=Dlz&SOna7aUOHHKk9NLBC-p=MO@W z=n|8WbP2PJTjr(caJ?LK%*f-`!hD#o%0-gtmWq+zFtU0iH-S}2I>g}`B6lE+cMVN3 zgYF)!N|^FNfyFBCz!QGy{0|!rp=%6Md$&8N4`GFTUieq>!D@S8A!@A z7MpsUu8ne!WY^I+w@^~aFL5wwDY4pK2>s4BfP&toRwNYRIogPwz< zW$NCxldUhm!OcMN*L6t>Mru8h3P*f~s2;un6~{ZjwpAagzCYo04;+#TIpZm}dy zMt4F2$9i#Nigp%Vw(YOB>wS3m1(Q}f`o=zR@x>E!MLF;IW!87pO}UJJ>5|Q+d!cW2 zl^1uD)6wkUVSAuRu4DFhAPdC__-M(8ymy&qw)oKHiEl&@Zxon;0`<-_IWhf+)ouZ) z$i?J!Z;ndo8T`Jxfv)IbcHjXP$US`gK3F)i3tz3w+FNGMXp!20^9t`HEB2^`C+r;^ zJ(kvdb9KzyBPz{b$feN_XFg%aH6_30{jrVxd;%9JOsn8)OL$j>!==yP+l#7MuhO=S zP)vciodVihEA9nDiS{G=lt&wueu(EVqgGL`1O}$A*QoD%B{kC6ZM!+$S+C zz24AP32gN^s&@&=1%5Z6ox?>>eXwQgZ*X4(UG2L0punsByiOPC`+j)Flh>>;HMQfP zWAaBjT);!Ug?n&?^z$rD9)9}1s0c2t6US$&_9w#Vn;@mURnX`Hek=Ru&`5&?HL4bG zC5PMmQs_aqbd%}a-79Xi5^a5BFqv+{nkV)mx;>c)4uvjXGqabgVU_ z2^_B*Bb;Aj^f-rCjJ|iwGPvGMd^0C)WPtNNfP$A!ygMnfwVMF9J0LFL4OW}_%BxW# zY-~^}`n11^;8S8X${bcHQoM{HsxnRnv^w=fWb2Gw>*k(nOy)j^xgzYSHr8mDh|}L{uX)L##Xv+P<|ia=W&7du@6y zh{~n&wU&Uh2N-c4O&~3FzM_vaz7*$Mo|hh4fIHz3CU&R)F8MZU!!v)fgcrD>x#9a+ z0|k>ulKc^hVtW>KL|8B2iH9W?-qdM|xWahEV#tW%@4!0yWk+DoD@;JW ziAz3__Tsb-r3F{`UE}o-%7;GR0(}F*heaR83cgRN6Ap2$t(HsGcSK)@-XZ>=E5*Cv zdj7L;c4d8am?25{2k9`$Cof<2^@u*SWBYjh#a(nr0!xwn@>Ie@zu8z*yN_63JQ7sD znIXF^4`e333tNw0S=4M$)@+8c6><|+*QtqiDg>p}1T}aR?)D5zyj8SmE+Sbu{8$AA zpm2&-ZVdB#EqK05b8Koa18>}q&AuXSQQ;7TG+&a) z>C59n&N}`m^^ja8&y2C$jD{MclI9LfU|pMf1*!AsO@PBCbv3Vi@U~s_eUHjE?W(sZ z4X<3yMkr=YWaji#3J>Wj`v~uD&vf~wn(gyB`g5Ya@}T5892&oA97R*$TOHkIv+%%Q z;0F0#htp8#A%xPjZ5^UOz6ZiSuoLi8d4W}ABKuh5+*J-F-T>-WSWL@85zaJ;@*L&7YX=Beqw5k1VTc0u!^F@w-)$G_J4! zHtUt3ts4%XXB-$!D)=c%^cUaZXl*)08?sy^wx!6+vC$r=0Fx@FAK_1^@R`!cyB z9*>rthjX!tADr{>jq#HWeX#VV=micfTF9+=2_4=@{6iI)=TpWYR7|l3R}`kn3A-0| z$w@0C`zU=iL~qWc_Y5Qu4-au)@VYB0BqZ$+F&N%U|6bLa+^Nj9D`2t@T_6oy%z#e2 z(7RKdHiq&c@o)-LhwfgE+7hYP_?30}A-~!yzT?%mRW5Xp2J$R#K*wpC#QLs#QBf&p zwFT#(Ee6x(2UmwHnsm$QZoP}0R;bn1M7Mp`WY#419Pi!`y6`r?i(xM$P&9@p#L$S)eGq~O))S@ykqMX}_1Ia;HEFMx`HqS5Z>Qa>&i1~f~{os!J&p52%|lWm48ky+axj-N)9D22#XU?zGil@#B@!ZRrrp&lDMZ zZC$n8Zy?pW_v|fX+{-9d4b_gGXbk7RyJBm^)go{Hu)~s^ zVQOT?pYff<>!p13d$>VH<}&AYvBj+o^Yo=zN1~#;C8so_eLZ6w))<@Wtv;efR_X1T z@KV3E!M1WJ(i6ILo&1o1S+rXxisBilmvPie$1z=N;nMdfEtFwxzVTl>KEAEBT)}q_ zVoz05SYrVQ6ndY_EueoUo&?Hki{^q$X9a`Af z>KKCD?YZVECmb9Ym;Xkc=5;MbF0_|Q=7@~aOeag?k>=>dNNDBL*itC{UOU4&VIb*6 z@%2bf-bYREuWHLW63 zcU)0;eBP^LC$|%@4t9>7_t|d4#@^A`(AkmhnPIxLSn|LwX9HGv=O()AQ!;y*+nW}y zxNp&~)#)gTqoID85P6d1fJ5s_Xw?lGds`pw%k)x6lp?O-4N?|+WmY6q!PXq-nn=yV zM|^k=HH9b#U$bYnBe|3lC59*RB0uw|&ef5dTr`m`^m~zAGgpRPYTCbINka0P*dmP? z_U_!s1@+Z9$^uq8#Z6d(<+HtIy5Q(6D*7o1QYg+xigGfK%en8C%#v60%^%dKw@M)b4+#$?7q+a%Q!5e(F0#^b{%AG|S6h)S`Ww zR3h~$^EW+{ScQr8=_#W^tb9i5fn59s)e%Mx())z-{uPYlgyb~b9ARu@BV`u1F5b)B ztHZoC7I;;WYMs|l7^(f8QNh7x`W7bo+*I1!sPL`ju=}ku<49DlF4q4UN~;_8wg^{7#vo$=>PZN^ossqnT8w^%}LEkuj>_-B_=sjt|XI#cw`G zYUBp+I-%7S+DA7~-Ej=Ze*Dnd>;=+9xyFt`1oJd;uH<`>6_uc%OPL$gdtoc7-S~@| zP>f=HqO5gJnM-pJD)2 zl=0K@#_f+A+-6h3Bp9Zgx9>a`dQzrb=NX`cY(w3?uo#M5BY7w>el;8{NkO`J7)dQ8 z9GKVoNJHbJqk~2{%@t0{&Hkc`sRT7i(M}(?@p9X;$EhSLm5|>ix8<~csvBDSxKc9R zylPNaxWw{$$51rWIVNe*Y(LvYV=NIpj5*jT4_FP_So2L0M~Z9V5gtRd zACPf2AOFuMcEJ3&hBM>mk0Ij3lGmJsYDLrS#Ek7Bl^rOfZO%u9bPtn%FXtLts{Hr? zC+-UM_}p9~AGhe{7HLD;ZrL7E0vn^H?DYtz=@|9A-3614GD=tCJ(*Hl$qJkvox8kM zDOU8#H;{rT*V=SHV)d^Uhd*9oDQr%=QZykvywb4I--1)qh8eu@*?|%dSLJhTE{6N) z_XY*+!3SIW^)~W-8e@xID*;N%lqGK!yl@R=ty(9cbe@{;uZprWeeiniv2mNjoqgQ6 z=6=>5TMEwb3+_B{ne#Im{OkEMehaLXG$rSClS%dYIs26p=KAyFzu)bf5>gwVyzsTD zYKk5#93}Rc)`f9*A2}E8)%fAIm z#d{dsDZzF7^%}&p_)?$Bs|`#~?HI?vEdAT_R1*F<1K%nsUrZ8~k_WvUtq($5qgC=P zrT<#H@gXLrv37Go5aqRIcgA#3A5sNOx{&R4pQHD>)JT$GwBYg|Qled$YGfMX|f({D*I57qot=cK-^odK?_!A+>UH8K7>T`OXpBh!@$ zte44E2cC)HXWB*PZuOy@O%QIWLO>p6o z#T13?+E=x3EyBVG?3&@as!iW}lkcke&UKI7&$#paNXpxlH#x31WWZxihvE6na+UUy z`P>P8Vbf?Xo|cFszhrry6eU_74c?cSi2aBGKE>*29MW8 z^HDq*-JN@8gyD7gKUKyws9QG-31JT;Fm7w$cg97Tkt>M-(2Y1E{#$O;GKRhdRObE zzcy65h9Y`ul_ebo$?q1}-vSJL>RdR01q&eMHP#rVx47)Xf_DTJ(Yz`gKVVR^9hOT_ zF5vFBp>%^{DCrZoxkn@KT(~I!dCQGMS`sCAsUgpffy`K@j{yaBaUy{5;mp|D+l9g) zQ(RxO2Bald4Be9H;rIIe*v2fGv{|yR=8GFd_rF@T9V)T!6kO_~t}*o;Yf~BXX{J;0 z0Jl20etT|$J16<6L-`_)N&$1OrHKyt{;hT!n`dZWEd|=^BbS`H|EQebg#>MAv`qiG(4-` z=PjjIEeSU5#69xz>sl*NZ!p(wV0q-ju05GS+mqY0Wx4bG=0XIT|F#NrlREtHiP=yn zrcGUfbhJ|fty+g^bKM(};qO_Pqzs?#|BD7~rOr z$UAvC6e@{ocXhnBGYMjTC26%v|J~}Njph5Dbf>tlFYx^Pm$^nNxNtFUB=GpnGmIU% z#48=$d1YNs-$x=lzCUYmeUctJ#+PYwxp|V{&a<(>(V~R*r91S<)$|+H*KNIM;~HgO zk&xOYZhk8H(p_W}TJuFDv3;?avQkx$i{zl&ig-DG|grD5wiz{k6KFo#B?2 z?tj;K!@t)itH?YxwxjDc;j%@ShBA8rYs_%lU~$~ngYZXMEc?~uR9zCmCiF`ZPn1?; z7q|%yICG)(brFwxE|nW-Twf%YXiSq`EIIFmm1}=aD0EOE&}=tJ(obemt=)e$X4FX{ zDM4-TqWC+1u>yi3`DZFQ2Lx2n3$)?vF$-MbxYsv{!r7A+FvE*u7ZwSwDdZF|)XC&5 z(bpN~P|(+@zu6@QRWOrLWV<;g@sK$;l;{xHy1!ee**2hjt4c z^P>TC{BDl?I|EOptO=ImEE=WI=Gk86c;#b(T3OA%1xEOAiuz*8AmALR&%3Y3!#(qufN!ILn zC#0kBLlKsvV7=>be|TsV*4!-(Qom~Pt(Vk4Fw3Mpc)5CEV{!~7?uBtrMCFYS{MGw6 zx90e5HP^OnbjN+GuVnHr7tC!>c$@6LkD}@kZyWy!B-BueXjeMge*@t}N zIXmXY`pj86UI|~ihdx|)iPR3!;_Qadfgjrx06!7J_egg(GBWDqsp5DCdYD2+M%qe7 zP8z$Rp-vXvM2Px6dpAm~`fh|={#{I!>iZE=`S&qpNhHzeR3r08g3foMU^s80a=C>( zc5u1M;U*+8r(@*QgC?$+O&MmqXsYJ9J`cRQqX=!s0GEg6yg;Pc0iQASF!K?{zpQP$qP-@pxz)!|vX{7Wp|7_^NjqiR|_lQ#42~N<=`b*ad02 zAMS};B?O$fS0}{#zWt4IejSrs$CD~;#&K0NCL?2#g1ArW-A%wxqGDu&;4Xv7fb{S; zpEZn3jf_x@9Yat=n8pi zHth-Buk>TlLXqdEF$F(O1lMUInTdr(1l(YZwy4+iA6&aRANq-o*>OE|V88m?R=vS% zF>*n4$^Zc@CL{tAq>s9)>(r>orKIQ`5^c26Zx}8vqJho*Np5U9pgx&H`Z#-gmaE=E zGQ%ia9CXB|mj~}25U364AEMv-=MTp)1U??b+@m5C&7&|?+`}Uz%)>Ed`L9Nso*AOo zZM`RSg$y)3ye7nmWUH@sE1PA1`b5LJugoZPpi?LAM9rEZBF62bDd2^yD0%LPlM-(t5k(+n^xzz?9rUi|FqDv6)6 zSoeG9uU^v$Xr`^FW`#%wM4)&fUt~V+La{_%nptqy6Hvls9-1le)yq=S%~+4+a<&!dfJSl(#1S&G z2%v-jnx_D4fhaM>IcWtpLsZ$E>H%AyngCk?0L%j(r#3Dc(0;C{la-Fp)O3=rTJ0zk1&yZ{>`fC&O9oe~3cpq+XO>`+cRp%2)l9QQ^)qGSjG z-XOqR1Q90E$5;Z+|2-~z7#W=N0-ykrwd zw15m!IRJ3rpc|-aL;(Q&Uz4x_8Kk!W$cI;b2f!1c1R4IH_m6=R;ga=kU7@^D8vI~&W!_r9u78ussTU-MH(n!21-y;ff83h7^MsVvk1V30J?C{1XNW5 zd{E%lIRQ_P0UrYJoC2^Z0>I$l5D+#7JUs@V0e}kM>2m{BsQiF+2EaP%Euf?n4vYct z3=Uubcn$}^&+kFia9|C98aS{6Km{DQ0L?GKfiF-J0N0!jfChL;4p7Ak2a`a_O8}tx z0iXa5DuF6C0HA*YO3VPij=>TfYyl-JfSzMu2>^@{K$r;-#;gabnt&d|gvSC4r~-)r z32@^004k8GfbH1>Knk#n<_XjTlM}KDkY5E-B#>x{p3^g& zG*FJ_4V=1E3%iNU53@ zu+x7VQgyPof|09*^GMZf_bN8kYe zLvX;+K5$+G2Z&CA1MmXC0ly+H8q zIXE~jIL%`pyze=H3!LUB-@kr63IBh~lYHO%*YB}=;8*-{zUSceYa8s>Kk`5pI40o= zj_Z%}eMkL>{3KA&bCmU?9_MKP_0euh7NWlI=x7qi{-_7=QA)~D(~tVyl+)}fAGkDJ zJAxnfQP%!(_Ou>^2gLIDIQ8c=hmik~1q6RN;FskuMZeGf*8Y#s&o4^-y~O|f^}p}2 zpG$t~3r8{+<1uqk+T2!@$GC z{I<3>K-cf==fPVY76P?-NBci|@P~eYRW?uu9EXQzBJiUg1PVNYOXM9PR3BS7Qx5`E z0L;%c1|-hbgFyR-zga#Z_;dX!=`*Llum5>8{w@dTLIT5AdJxD7NWd=T_+A{ot-+#$ zzi~ks2E5~f#nle15aM^YXQ8Em>p0H-vfYUROM8UF?_%BI9yd(76+3YzEa}I%SovNXZRio z3mw?KfU;#r^nnxDSzT5FRNPCs2xQKgiz|tPKxOx__MyNI1BBrqr|S%CDq7$P++qJ1 z&Y#RhTE|7h-pmF5j$x206yU|KEUgJ~<7Ve&=arAxp8~X!%1eoBGHFD`DBZoSN*cUc zvK%V+-HA>Oi;%$SL4PCq`G{=kOHAs<-yWe?aR{_{hK4{xL<~Jtd$09vIccd8L2LDC z(Qn_^Wxasjf^Su+2NlUO;ULX^w=6OAEZ-sH+T^yl%Ivxa_7G3myX7^j-g$1DcOfv{ z$**4ZG9@E~Wwtlp+wt=#ZQy;{{!aD%z;JK#jah|w<75(^wpMUCYjF46ZRPx+rLDcV zx2|m03`WFN)|;_gqSrixF+*F#ThXM|I$179XuWrwMvAn+wX?SLu2xT{CWc-c`Tg-+BzIOx3ODjtiOBme-`s?ZcVyws!u@VPjMHD=F|0_v|w>4qR zT>?y-7$Zz#Z33obrigyp^XD#F4EPJQ)JnE+NY1e0cCLS~*{;t|%@fy6>@5E>c{u{f z)j(29E0|uMBSkTLNeDIQ<-0Y}S{@}JR=Ym;#%w}*%z}jbCNH5Qu_h_#ByL^4RdRzg z?}DA(S)X6Ro~ z=y3FsyeE9kwQ;gchgHh3NW1=`Y-XmHFm=1;p#g|6;tzPU4jiD_(G0j3{`1`Zp3JgY9l8;p`7>?>f*O z+-@FJL}{Z}jlaDiusz`2>aA)Z@V?f$&)u9_vF0G4ykzpS$%S`vlySK6Xt7o@`f(kRZ|dQb(fpQ^{;yn1w)yTsd>3Wxy>q4 zOatdP1j||DNQ5(#1t@VxSGPx(-C_lqB4|DFye`~ryYgbprc|%Uub3gj|MrwueaPzf zNr%bp$4@cE@tZb;*N_G7ZEWi5Xne7+zA2cI9xW|~1-<;5#FLwQmZ?`?*iuBz$l1R8y5u2<-IBEW5qp|C znA5}|XVv?|KI0VHHp-Xh7x-Uu#$)_^Mg6;0{kvBENBfF@*Q$Tls(;ri_=@&_XW#zs zTJ`T*_3wSvf9D?f-?i%Bwd&us>fg2M-}|b6p8@{+4DjD)fd9?s>;FCj{P!8)|6|Vp zK{kKzj20i*KHwjJUq!QV1O+nO@Q10u3qW6&5rZJ;t^Ero+9^StM!JQzeTkd91uA^T zYWKjZ#pE`-ltuyIOl*iq02V0`D#N84dGO!YocYcLN#GCc!N0-dI<`lq7C#MS{x98U zKR$NDaQTh=bxAM?x!+JW{W0D3wvUm75moArFODuYn9&?!e4r&kzmkI8QhG_qD4QaA zpQM5v4m!p7q|mTkkjXmp76Jn8Ajo3`R2=;{rjU0z$f$LJ*rv=UQf{YG#ivq)CsN-} zq-Mojn#A~{11TeLNf%JLqUi>}$P)p90_bRh#t>w|3n#+d@KP~UC)yL0%F=Mds2?Ge zvtfXtQ#!q;hH6g?)#9JDO*%Dn{lt*|-4jC;rz%-aRIZ#hu0Lt)dD{5?X=8bKVi3nCwqMy!g#AwG zl)x=a;pLa!a$;Lxg#A2rfbUv?Z(G4CAZ@S)2>u=VX&$TqRs$;>=aGT$fAc^pK+^b; zPY0=i(&2fcd%#cDsy)&t^l^NM-d2jbyTvK;VT?`qoELd*lRhCujR96WpK!kvd@;Ti z!t|zu;kg)5dCeGP2jw%l()VY3KE~F8R$AlZ=IaUHF8ATtQ22Zvzd^IL^nkRoVZ37o zLq%HT%a_gfDH$nOE8-@?cI$8XE18m-^$KpkcU}?P_Ft)|YbrEY8PLbHOAM&F|FK5` zLw}kcOlmQ8@qlmvd7I!XgFsh7cDdaQWQx0<}_w+k+0}T@_-KE_bhXgdce7VNsK=Hr#z!qtKRWvTqR1#D^R1<+a5V zO%$Eox2X80DzuIcBSwVHW~zWVCYYcm=+!!>V<|3!@ld0-l+)Et!ciAJ`s_}x(Ms#2 zm$PaqND<^i(V@bDpGEqXJDX>uGpQXNa++tbcV{Sq6|4<--Dd9MtM0Xa6LV4>}qGwD^-jkXI%cW3#>?! zNpcDTi-noAxOGH;)Cyq+j+XGS3wDB*>_>pA^wDZbnPX(3g0qf=NN(=sy#m zU|H5iP|J~An8}Xo6!GQ~@5*e8Dt-Paboz<7wd0CatP?siuhkThxTS=uoX_UxVlD5s z^-9e>4koJj^3wKxSm4vUK?9G_U7rZU4ANVM8TuY7#7OCB8C=)euFuwej*Y37v{ce) zh{G+NBs`8(d9;41l6TIJz%h`pBwwFt-+k)+{C=a#8g7~cN zF^l+Zy}hA^{DS;F6?yf`h=GX0C^Ky>&llu{ceg^qgP#v}v2}Af&AgpzAXU<0!2RsA znU8rXWw$WJvQjG1C}jN#@{tod^(s?NZM$d&)~2In1a7!KnR1mk2ziI#QiOmLDf_3y z%V7QNHZOtn*Cm!4z(UW;TeSO>f+DEODqh2bjnZ~7Nl1wzeCvOP=3$W#?YED zEtum%dy{TeS@;bFn~#LNd}+y}k-5@&)`Bz~iHM0zG0!>>ml4i}?liM-(ClHudCZ^0L2q~r5+S=SM`YHstP*pZ?T zr&)MdsgO#zw+KBy5%^l#;Bp~z?wQ!$?`XEP)heM}&t+dRdYXo87ZM;gcfX-PZSF$&kYR1%Vs69xJWLCw zK1&nASe}2m29VH=_g>-de(Mjg-_`ug`*k0D(}W0UQ1n>u8?Oe=T=k2Q*Q7o}_WWq5 z_7grwn{_)c)PV(8hnf^S$aaXkg0_?&)|VFOn}301ZPY4A;f9+8LslLozG-ttA}^=9{BSnAbL7*3k=l}Zs+{Rn3_D%+Cpsqedqh1I*5xZ(`Y zZJ#iy-nYTEuHm&a)p%C?+y^YJL(EkN8>0xBH>7T=!~9ua2EJHF#QgK{Kn$C=F#}$j z>z{Q~xxydW(OLE=q)DjA_&rtkDO`Mv_t-el4}-qPe^M=ZlnH)ysC~V!u*wIG-07t4 zhD!`7K_s!bkeRn3ms)jj;hkKDrCiCgC@Zm`osc6}$dzN-<`ZRB>fDQ+Uk!0rvS+@t zXSuV-x|=oH>+G8caSAvTym+vJ`q%(g447pw3P|+bAJEe~{qSQ(;CZ{BV4OeZBZM&o zXqwb(#|ErQ{O5(O(sMPdro;`JlSXNYG#yi}!`t)E#H;W&l9$zbnNVG7KYNR2C^#w5 zY>gHY`coDxh11rWiLKXqmBrK6EJboBLaO{ZxDE4X3ayu+tA+zOxHl#9CbkWam5hYa zfG+s;Enau0C}L^p0&pufu|EGwWO; z6_W?C&?Zin)n|r1q7dY42ZIvl_U4v7wlNm=7{H30_Q~UdKuSSxzw^$ALX@t-du3}O z2u#|prf>wB((z`Z6+6}0`dP(7s${?_te5M&Pqdb4VOaQ1!^sI&spO;CJgUpJ?U1N# z0Hy9u#5Pr{Hr`;?y+E^D8cJt9u+|ITtQCARFLK&oRLO@{sn!#f?vQvq463e8Ece|i z&T}nc z74QrevW1nN+78bUuI9`X_W9n==FYcEHc($&LV1)iO%uXtL;NAqaWI)ex-+aqwbfB* zb6EH5ujteKDuWy*x%XEaouhc}d%x}D;d!~&SlU!6eVPtZ7*B%Gp-U%QkV80D8_gQN zu`J%3CK`fVi1{#(p@EYSU^Wa&)$Jy4J%A!!&d2SR-%a-wGJf? zDEv?d{nA(#Q&gX%b_r(vyrYpXHTipDU#ag=JWBAJ! z8mf&fZTQ+PKGj2tMj^U)=DiG1kpWuPKN z?xmV*X3IBmPV0F(SxS}B*wx2EXg_DK*?TH0NRiqazx7n&Jll?f<}{jjSK{ni1*FpP z3Jm+{O4Dk+|7Nfxl2TnJZvA01ceBR8Lc7cZz8 z2o3qEk1{JH&a=jQM7|4ViRI{UX2wf%EHFtd3v6)*GdGrIM5Xzx=98jI?ML}<<_P_p zwSsSkuKgbKf}+^soh!zNQ;0vO7$;sHCiF#oA(vmD6;7g;3I*hAEXZ#JW^d=E4q=>q z-B!uIzump^_TBEIGzge-ym*YyXE7F>)Q+uWWxcRpn^Uf4Ni4i3u)fr2er#8MO@C!} zc;j#A)F3*&E?`|Y*P#bSjW(xaI!-2Qh|?tPSkn=2uMF27{!BWgsKZPvr~QSUtkRrJ zd;)b-iM+8EHYr1UK|eHL5^r^`3t2z)Z&HIfG({0T zy$HxZxEDNk0p1uv3TWa5#BN`?5ng>An|Kktp5=vj4pfcKrw*?LPB=10!T|x^Q+#)L zEDu@yef>m5o4gY{2OB33=(wT1z|~}m)9eZpQ-@z}M2-38297=q9GM1ZdGJe2+UHe? zg1`zOogt@k-Blb`a$YofM$DLRsTn~t6TA*BHAB$Eztb7;k5e&F8PzTgU#5Z8)-8Cg zE2OZ?!}&Nyl~OjYJ=xB{3IDcfaW8h1yy!*+EAU%q$58!2QO14jgc7X}0iZ~NZQ(pVI)m|g=$IyeO(c>++0NiX7QpaKE)MTs(j-C>QCsSe+?; zni|{86F|zHW6S!? zSj=3VLawOnYc6yyAtWfTWgz10hgY)2@7=Q$;JehyAMqM_9nkJaP@6Tr_w*cC-E8Ez z`+UfSgst=xMgM%T)31dr50$70-z})SLbI%51WMi)2It!!M#Lf5jPm+Q>=;MK;m?KL zPrb#foPLBnHCvw>_hZjYj2U-i3~NO4R+T(D&X8(k40|LmVZ@CqPS^e8nF{1!#ztF0 z*V*Mp#j_7*mj?Xk>jx=MQBQIw4Q>d2t@kHv@-j3;SGto@c6$U$sG6B>GzV$*8(G%; zWEGgt@u3a90t(t#VFS6$#4ET{yhJY8kcp;=CU~IfzCmrF-CB^xKYGaQH6g0RU9JIZ zMKuIiN5z{MNeZ{QY63wOEmL1~2SP4sa7Ism-0!KQw)C^64xS1&$VgAwXXdy+JWEZm z2D#>BW=clKe8NJjgd1pWYgLEQU8l{fX|NI`u0YnM4hkx`3jU~~fr8@cMPg_;AWn>< zk017ZCsX`uS)TR6(MOT})XGU~aBn&jwuJ@!(~7XdFw1~DbMD|q3S(I-FsB<461b_ANcIwhWx1|JxyE?w^%QF*-1^4a44nuw z&G^SU?{qr|%n!Z^SyFtH={nXTS%zNM+9=+%Bm0F`<6+yTM_)a{^=Zb#NJ5RT?Zqy= zwsSt(N0Wa*|Ipt$tBQy>F9e}wswqIvw%BFemaYqF3L`{(p@?d$C{)XRof}8Mpn#bA zytT5Hj~1A4-F|8)*)b_3#n~Xs8edEKRbTyG1Sd_Q@{>jgA~3q{dYYIBJ|Tbh#cV|j zEJp!*w?;+=eB$hevAk2k)bSU^cPa`mZ0llJ`Kecog8Q3sD<&&Y6r0#iNzm}C4>KDY zMXs*Rk|b|2Ex0-nul9J~*A1L}_w1PP%_m6Pab-HAQoR z*AdAV@^OCD&F0Cz37Yi9#J5F@#d{!;PkG{o%-p7pLFGorIUQSh@ zcw6S3-*GO^MD1$%T8iXoY`FvX_QvDA*fx&pubwow&Ejp>ic>oIyw-^B%+f6Qz!*k9 zH6!kvV5S9n?ST5|WL0AyK6Q)9`(>x^&GPBa!tcy5o^y2=G-;p+>0BO za6M{Ax{ZU>&2_Zs8#kra%)`o&FTLptv21H<7*U}{Wh9P~oFC3Ud|`mhy~GhEKk^$~<@xIPe)QU? z-0}V7weY-MpzAr+73AB4Guriy^jiGu;ZEXgwd}TAQ2fK_*9{ZaZ^8uRLlbE|0)=7C z6G0D5vC~;KeKd$@4G}vtu1TUgB#r_-W^n4^fr*d)DC51dOpsckHJ1nI6Gl)tSLxTA zgG!UY_dV$$GDf~(D}u~?!e#6VC4#PVu+#FfCpHKL7@Q?_a{PneO>vYHPrj}Upx((3 zTdluGGlYN}`H4*Tdjd{A1Cl=h)lPRv=r)1JaJUpZdOF6}BX(jOS(mZr{sAd@31{RZ6qjr;j8*tWvJy#EgK^lxxDVg5<%7mV${C-s}LUxa=o zAVYw&e?XK80FNP{c-<^*ERFafepmfp694x+1B-)d$Z7nN=l?Glt^lB8$nW$^&W7L8 z0uTOxbd~%A()E9W$@(W1(BD)5kR`zV{}872&su;w`Bxy;{~Q(WU+ehS62L0|fNuSh z;(voh`*%G5Jv{B7Z4m7*D6oIDL#SUMhyR8NEDz-3e**{hPqILAz$E;~?$_gic>0HC z)PdLj`vWixaB@2Uq@3rs-$01XMyJss%uP7bstNkBa%{G|o`Dbjx`kBp_W z%l|`p{;d9&6n~ZHmxcTUl*j4s<-w6KwKH|HH2w`e4n%P`1G?(j8JqqR}_rB?Qo^+oL!t;ZGo`XM50cXZa@z}aVJAtQ+InO>wmM6|9lw#RbBsqZ$}{C zR=_5T|Mz_V71{i6xHkOX;`%?Y=|Auc{MQUz2B_=xzvmfS@=u3IH6TE>rM=z1?*&Hx zTRi{gHT~xKp9TRqjKT&1nPvtm8rTUS^Z%A{U>Ojy-@_HrpRMJelKgFpvHjnY<9}A` zZ<+qJ5Ay;=dIx+CWq&IU=--(w+`rnXzlik@Di;4ys=pb&|7(l+&%W?q)%RPTe?B9i zQGx-6>-ZHP215KFto(mwy#H-}@yGN2t5*Ks;+FsGTmv{m_%-7Irr$8;e@^p$IrTdK z)07bjxfxp87#i7_{>u#SmqYRYjWzo<owf6?~8@C@{C{@)xOe~Iwl*Zo_Be-Qv-2kXesHVSg z0PGL|eqj8&U->|O|04LKN&MO({3CRWxTOuyBmJM5Abtg-`6Jh_Qh%iX1sWiBzey1R zetm!mL=S)u+-khNy$=5M4loJ;Fbu=rtm^qyj_CKQ9%oNaU>F||kUv%t{fPg9&`$&% ztQ(fnn#9@?r#`tw{i=N}WAzxI*7uaJQi2xp5HAWSZ_xYxzOxJ6Z^~o$iox&Pj6Qxb z#nLa+{%3D+>U-+%G6BWhy09WsXjW1xm2A9Zem*=*7gdYTAaurMWU ziHK@%nn$j-r(SiD9h?E4gQO(?BuU= zpfNo9y>kT^{GoG*m0voCn16eF{I$9T7@g|RJO8Q94SwbNt@E0|UEne<2=9Na+)5Xa z+hsx@^nqZgoluaSfH|;q27#3(tB3LnNObbc2%tVFEXtFV4LpdwMXvLZ8NmcHpF~IZ z9Rd)F3=R<3%Obu9WD|jd2^Itv{D2d5K#4&GbmH^*xU;Kgd zR8l{%Wt(g0Y+FDwGw7f<6aWpBNf{YH2W?>E0+gwoP%v|U`{)Q3kOZlKF7~inhvM$; zjtc5i$PSv(7YQ7sBSOtdO)@dskU!p3H<(wilPwHW$pum0jq!{fS>(9N+-aJ?`#rDx56| z;+F%MU;Qa~Ws97902Tn2EkkJ72?GKc1iklvNN`Jd0Gy)%$cB0vazOnUfMF;Aom1lX zO!~KI00$0}kstGlMTkVEAOJuo*KER5j!Y+ZxVboM#{ zgVz0&ckh}Kc0AT11B=q_y~KvqecY$^?0L^yVchx+xyq8rPu{Uit1~i4;$r3gm3Psp z**gdlANalg(32X+GqBii#h25r05gpxDef#g@wd?t`tyAr{1^5@-TkF4dnak zoIDf|Hw6@5dG*GU()a~0j9f9tfSzwW(TZ2a7*(a0SvDVBv9oTN^}TjFD8fO$v0!pdrrtpu8*`RNo?MELM(up_YU z9uFBI?^RL&Y4Gr(57X)gQBrGON#fzJQ&Cf%h0Z3@l%*2B^)P^QJ6e~b_Ye81CnF> z0S3XK0Dz=+atw^%XFp_;?z`Z88h|9G9}Xf@FbuYQoP7zReNn9ZFgO>cC{Hs|RE2>s zMfJ?Iv9m^t>Tya8j5)u7WR%`aP~^%je78jlPQs1c@VRXlpx$tYzrt8}FhK$U_R1xn z5&@F})6mpl_8bfk4zPp)2!jATGLg<-y5>TT?y|Z9M@3ZY0XAksW}mJB&48M?$`uzc6*Uo1msrez>2hMB_9WGBpAP z^=I5-3^5@w#}c0H&g|UWDAw)f#!1QW?Qk9*s=DT?onETLr~Qql^|bb{A! z8D6I?cj?Ye&XYdSe7O%-6e$-*2{(dPyBu-^iumMpE|D4n}V+KQqp0<{yjDIVh2 z<*qB;>k%Du^wu6Mh}>JuNtX=MPR@LZeyl9(MDgtMRq|uug;77L_L#ubJ}l+gJNg&R zcpdnxx>N`rc`6Ae-Jv6X=Rw~83O>&Z(A{;fPpZs7vyD3f`=aDi&y1%ziw-9hRzPfN zGV^mF$isX3A&z3<2l z`yj8zkE5N-me2&99-*!hpITN^uih+|9AUk)1rX|0!qj*IL>4F^3W+Vx!e+1b5#~(l zbH0@AMnUW--bRc&5Eu8DYl1r>eOF)K?!agBj|!{I4D*qdBDgaZ1JS*6ww2VC{HH?A zJKsaoLhWv08Vwo{zG=(55~INA;IHU#p{h$&+d4*H(@n!1q}B4tLJ$0OxA>VQQ{xM& z6>&5T$$E?CEl@1n{qjDUPLxB3EEsX0BIk=GX!YSzlne-$?bf{o6B{==Y)HT?vZW0Z zbS^SD^=Hs7k}%0^VkbLEEqvQ>DOpDY>wFY461-w0DG-C3SwXsH8h|hu9%XwF4>Y4K zjk5(mzW9Y@Ekj%5eqeV3&)ddp-ODi_bUczz$Ybur;^nbm4@mmvsus=S5gUgW_ra$- z$Mi$H&V4!bq7vYlo4QTEz2{Ziinm;ZrG8LWM{s zwnp7&@K55i9b`U3?0r|9$lIjKIxNX_wAcCZpWn+)^Voi!v6S#!y28;7F4m{?;pjfI zV93C+fH!rUDtk5Qg6r^#hD=bni-46w!tp1osQ7$6xf3m5hwdp$ts;KF1@aXeq~Lit zzF^#rs&25&or#*1#?;{R^wGuLS#y*N4Z1YrBhP0OygG*$Zml#43s<4Ep%|y`5Erxd z99A$^lKalUoz$$OWxAm>cXu693GH{SJg4zfXZLa&HZqhJuny2=exqSg5zOO>eYblZMFk(BGL;^gRRAqffWzT3Wn@r&=$>Nfl;Sx^|srlq-Mxq{OKE3-Vvh`*3R_%$10Vg zx8TQDmYa?*rh}W=nR?jc2bD9=9V~i84g7)Fgwx~8JMX6o&-=6+C*}5}j2)a`PJU2) zU6bDk6sWXhCKScYOv1hz!=>%0imu`~L2*D{bVE*>C=AiD(^qtRbwA3SGWO*df_YE=JmS|?w zCp*s?cRtRkq;nWVs~UGWb#rU72)^KITkxfgYjXWG0d76b3tIXhGs>KA2le%4q3kSU z$~qOCQjD@-WC+GI(Ss_JKkR@ZaB@CGLuBx7(Yk*mm{(7)(?wFU-6s*(CqO`=PX8c< z)5A3eBWGcP<-sJkd!D!&;Ttm4ApR~P54AGVE4JJnU;3R&HYsbdZPFhjnA|G#l7FiP7r$5HKnae-GjR1qq@vCb8%oeI5sF!`!Bb?#`^Ckf=0Y!!Up(b;jyR4?TyXP zWc#s5^B7>)r*3I`AD6GcK@AcoRXAn|Ik$!lMS_~spq4ZALcG!WFr6*M*?<|%@3`Klx9wsL^&eseT zqDd)QcFH0p=Q-(#iIRl2CTj+@Dd^NM0-}5#z0+h;`lN>hadAI*-&9jCFMUZ;!xNh{ z)(gX?H5%p+jrZG7t{2 zpZ3`<=<3#X!e)!%iekAL21{VYBo1hqFKM2 zb|X_!{h^Hz_3@_RckVx9&aPpEt8v5)&-$%=d}#SW;mncvLF0;C>&JwyJs8aW%w^Tg zp-T9Xk)$p}%S-tETWi2z z)y%*vW^l1aD2eA2qkDKoT+eNc{|N}>YQgjq=kTF~HTH4{>vAK`@+lkz90uZmzetu- zmFdvD7R_pACL&);E_EXb?3({KyOm2pI$~K(6svx`fJ~(FNb!Im+1ggMyJN z2Khnu%Y1s7vJSCq&;AH=4EtJbk7y=^1lp{IrPJKyK+f`XiGTlWPB!fq*)e&@!w9-i z8o%Pp??ZwZ2nc?#`OUF1@qvzIIV?_kU*1FJ_4@>rRK}Qn-{`%UB293bW-1R=PDNGn zNDOymPI`DO5G?denqaFJE=9oA*p{sp?=C8ZBnSXoNrgtnF|b6-iBc#@lGk4WUyxu{ zXt#9ab#YTJRy>A0X2{0nBc4W9kFvmUR49pNj40OtkwIT4@nJ!-G0rb#&IB-b*NVRm zn)i$eb>uh;_4UmxUjne<9IEIMzw@g~fKp+>pkgCPBFr4Xs%@UBH)QjZZ(zzeS(?{w zpA0sdI7+woslU9p&8HV8@YLvp6L-KrwOht`D3!2ORv`{Qrk#v}GJ%RrC>usZ5SNzE zXe32Fb6dcW4}LpSn4Dhs8ZO>Wal!6rgyomu&- z2@{4|9Y#`knd=oCW)9L^glD4>2^p!%6>7~)$#{9S&nmK zN_x_Z?+jT)1&U|%a~z37PRLqX*ijtPlXalvmE<4^41%=IX}C189DK?Ov4fMcr#!5{ zS_j8jH>x#v#qD(}d9MEX)%OO5Ay==uQnYt6U+SPk}Vj?4#kM<7w_snL!K3yHRAFs9Z$5^ehdzSVu& z=Tb&1i}%AUKGu!pyc&4?-8Dpixk2d=Dd2T~q_AXnHrF zqa~n=M8CmoY>6IU_7MLfC+KwQT&r3K;s@?eP~j|VZSLW-e(x|uPPmp~Gcye@7x|!g z7I84=qu3K5Zt@b0RhX!+xj(Ru(|!`iONE7=%BSyYN!f){iefG$Z^1Q|!UWlD4y-0? zQo}n-pJ^^c^N+}gn@8J-8 z+UtgGHmJpZ6w{31p$;dzkLJvWrMAUerVLs!dKB?HZ%`NMl+o>H7_78k zB|USGzi<2DyW_F%oUF|+pXEL|yNCZV0IyhpHfC%h5yAbCJi|G=p?)_(!I%oOWQiU_ zEp;*ZYoVB?Y+9^S`8j2%>A^RYX;+!L?LyBGOVq3RI`C=zlE|`fvDiLbZyy;Sc4eN_ zgxKX1UB(#~tA#0634J%US{^sZgXGJKC<3t}zg!Swd@V*UzZS7#KgVt7bo0ah zcT<)`^c?REhtt#4`wX1C-?dzGPm)(Gr9Tv+nDak4{~R~p&dP^v2Ys)5LWsuYDpc4# zA({4tVcslH+3!@Wy2psjvf{>OK2DkP))WbMUL>)ZjT)7c+o^e3MwSe@>C(o^38sv~ zm0E%oC5nyxFpp!hg5Az*NlrppIch9m#Lh=ecwnbJ8t;d$0I0fc;3mNV)o2kCropix z`8RX&W9+aPH1Su`6bQ72=HoTiS;t_KaE^fbJ1pY_M=eIQ9|a+7+h?t8pq;cB-fjU^ zA1iVnK6;LZ*uw&EHB(c`4(@1()5#FS_JutS?f2@0zHRUykYudkMv4-|r-$*T1$kocV z^3Sm>0dHz&m}J=S3205!q~&<9CQl}PhGmMti=XV&)7(v<%HS)r$;h~W?o)6Ky zZfdiM1G0J4-e`XZ5l?V+vYH#X(uqLVeY?6JU<2*A$s z_DbGOFiz2nQwW5R?qgJ!uZNe0k(zTF-NlEx%M23sRVaM?oZru={V^clm+X+$(k^(i z+3tcAB17H^bHAy2poP6#TjejZlsD!yj`W=heboBFx z(+a#ao>j2CWa~R)Ex|M)z5|J56&?$hES3ZQ4|S!Vgp{`VXuZQ{==&`=vYlsc4p4C> z)ZtUB=BB+RX3wM^F~sYJK_`&lQ?ur#@rW$L^92mpK;YQ$Bk^_2PPXKn09z^wZU$@- z%&BuZ_GTms-R*PK5v(+gH^NBEUZ|l_pd=m#(Aokn zUpwBLI=%v>3{$;N%@>GQp=fBHrJI~2@VqV{iMyfR2dwu9Pp2x1KcsVwVat1)V@rh^ zTn2_OTXQeFS9#F-7utG3D$CWIbhnFjttS%5PMnD%j*UbtZyGU6vNjh=(&obxn6Lez$= z9M3r}$vKIbYw);CnOUuYE=W$bFM}$NZTh1g2^%e~O1{W4Q6gkG${#n8yM4q@CB#qP ziJzK_pSp{mE{UIlklvZ+4R8#r8VNvr8^&n;#XUWmgp)sPsII(DaS^H zOD)MF&LyE7!%=!mOC`xd#T}{?<8s2O5cA}6NTJBfp)x6cQCuJxZ@0(}QxLqxb2eh~ z7+NUv)}L^wpUU#$rCeAflVZnd>e(ch%#X&(N8dm4K(xS}Mb(!*Xa{_|*NllC-Hkw3 zFZAtLSx&>;3y!wKt0-<_0@_qsA7It~%?RU|P@%6UKq3_{(dx5ySfk(tKVz${DXWbb zYXe68i(K-z4%ACT!D^B_L=~_@M~?kOF8Va*8x(WQi9sDyb9rblJJo)z=J<~3tKto#ka zv$FBO`I2P$N5!qC7(;#{*~(i{RCJ{0U-=8#cPUmoc+I!O}UoCdz?~Fm6P$QkF3(6<{9q#8+! z{zfEaOoni{$MQ)oqy;`+GHvYML)V^RXFn}v%-~r(aj}r`lTb*DOn_42HwM+McV@|B z!2cilG{;S!b7h=UOf>ZACQQA%e+Gbi)IEQ?vhxVT>ld%{`oVY+>iBt^aGvd)Jvr*b zw40hJA^$F-;xp+3-u*?i=D|jMON-dW`&OO1%#k7b@HgjAc8br=6s_)v#`&0oC>2lB z)2&~5T%)%2`N6gBzVfE$-Dg0Z;SHGUeTXY_Mz?pOmtvSyd|oZoYSPt%*J_g0^J_Sz ze~^AQlv(KIl0813li$6=`i@S4uk?=k`?WWlT(VK2W1UiOdOBV~kf1tYJzP(vYXWML zdqrM?!|fZI1ht{*Yv@^T%LBJG%)9BGcu(*yo*n2{okhV3Ukf^@Dp9^4L*JOa&g}OY z27D8i%CC_kG!Ns~(hKja+Pu{sDF}!4kK|tUuAP&UIi@e_z&F zD-I&oJrO5YAt=X9Wa1Uzq{#`lYdMl}?L3un1v!=>M|ar+ZeA%SRfHYi@hHP|$ev2H zofGMlE^4%?l)!Ppt1Ew5ER@w`o>0sMzm*r6Y5M7xc`xfzdSB@6U3#Brma6=9TYZ09 zbHKeO?`$63S12k|^?60)yXJuYd;{>1T=!UWfOCIebD%13x%^(;pG#l#y~f4ym234j z=kA%ofc!vq&CGKSSe`)P#OrEPnPN7PRJxps5oB;0;@ z>Lgr0)A5el!73y1Zh`9w!y+_K1)@zR@$*+)y7ekHw7HCWW~pWbSbaIo_@K6i9v4)1 zKCNM&A%=@Hc6^y1CkjLD>E%*BbCb2SwVAcH6V~spst2f7uQ0)W^4=z#h|RS%=Y%;? zVoHuFH>%ZvB;kesa35VX^BipiAd6q}n0gIdCfHi-liJjrsyHAlK|tBIy}pC8txB=l zXqQ7;aZCHscFa1oPOCznHtmP?wS>|#(a8>Kn3g)xiNBykg%&4lLu?Eicw$?r^yD|a z^FEPtx;TL6M4G|7%_Ibo+kH1rWKtmQaC$G{3Zm{shFL+Hkb_%WRuwvx%r`a*mV0$v z40bsVLnSh9Y{Zee8h=`N5bc%Q2i<04Fa`A7lg~GLULy zfYLE|@K8b`z@=W8Az%Dk1_f=1(U-T>-J=P%<@$)EHOJCqJHLh+dm%=`p{MqCd$qGh zU6CTWEG~Ej0tCWPu2N=HeVot10hD1od1LC}M`+nWlT!Wztk%|M+#yJ1c;9YI&7JZY zP%AP(#|lL0Rupn92gH4HdqjD%x0rSU_TzbY&O<*6U|2BN<2jzAZ7A{OAd=?aNw<7F za$Ck(*KOSQYn0bP?51C3JSgH4wS=${2O08p30=@p98MQlP$+gQ)Y+9Z3d(IJ^9eNwtEG32j`M6Ac5pJ|7TuZ@M)|W}5SIIA*-mQS! z;v00I%67el5)O2)P`BF`=@;}P85uB2T{)Cd3#m6$xWy_9-(T4Moa1<-GL`MlT#0GB zo$TTK(ZQ>aDF?a?3JLhIGrSWj@At-+|J)0s{O&PP8(tQg`D;Pj0ti@mW$*a96R z$p{176;<_wJEK&4(SZeJ{n-({7Q(XjH>A{AY*yoEDYf3&N+UU>gYeZ<(yG}I_y%We z@>&B#$m19)*w|L89Bj_xl50-=$BFM_Hlhf^1(|Bu6;Ot$zeMEuYbdbr$pt}13gPvn z$w@*E#e8`A*nCa7x1pAVG>_RlLwCJid8PGk%k6r`)|pkLhN}~@t+2+@L(C@^1fR1I z{99esG_viTc-yr5$#JQhVZB6h8Ugf1g|S-9@q+@4helb~-cT0~CV8x9K3pDDK77lu z@COn{zpy-`XLruGL*pA`O)=D&?{i=^Vn#I6-SlBK%%T7(v@NHN&vp0_7BC zm>j4(89M1C&z;g5=bJ#E0X_rb8%MOs9vGc*-3aomJYkvq1-DmS<}`)LXSHSRz> zmbG#87ME*NUuX)B34Le!n5=JdA5g{IICUJkW=47^-6!JR5$p9O)+;gAtHb|059uB7 zDg~)~MC_B-$zK1N^3)EJrm5?knr1K9(POx}xzQb{6~#vG=1Nf&40^EwLb zv)K!(P%Ylhh~m>laJ3Ax8pJ7=>K00zo-skxmY$fbw zl0O2b5msn0S$*as$1$+Nm^JbSv6|0-KL`#G(~@Z-;vvWfyGu5(y@x^JQS*ae6PP%Y zT?$y;GEqWQ;!*d|rmU9BbZkFCR97n?4S^nrZID4#FIiMR`i%HA+1-xYFze>>C+kR` z+xMD=BR4X!-ixrga3#AC>GU;V;SecOqx~eJE65?mIXyM5AD(%vIVl7MxQ4bM1s=@)xBYa4M}pHZ}(t%-a@HeyFdv zgxbl_u334Xy}wlSWlUS%=7`8l3V#l6tnHhqOHn7dLkTP7o40r})LS?~R1f71$3+!R zOBHsDJx+^Pr1IR?(s$ue#3mVDxb4sgo!4JYe5 zYxhpv3d3xq8HR3<8*psZY*nldISk2oW}hJSW*@Md`+mafBqzOLH#4nY!+RT;n{V~P z*Rh^^ePcZ*U2(fnp6d46{uaaowhzO&qDQaQ$%7fj5Gi_`NP6~hpr*g~HMhOegHmp6 zk%Slu?y3GO?)eHVp;)n(!?SJFtE?+q_TDf!>*EVzUQ z?qa`hBmP_)73B-hlRWAzd0*hw+SYZ*b~N+ivjjYRi|evnD3{aFGgQdqWFgUV?XcS&}_5mw)KZ)h;xP) zxplaO75zY2r;_8jKM=pTZqLIV7iU#T&ctKFyQ=b1v2iHS2z9DAqoWta{}KXC9Jlq`DrGZ8p+wE7l`=fj+Cj z$W4Y$#q^XVa5mZ|E^$XW^&#eP=c_Pd^r>;iD8+Ph4iH;o%IrER&m?9L`k!nuitu;= zFcyvk{*gv6Jy0y+J?&uF0}7vjr(9iv;ukiqpezx_=sR7CczMZOAMw*-Q4PoFTyd(X zDvypnilK0fR0f8tqpLr~LwNMlhVPs8(+0Tl34>y?$H0w?&q;if6u&5+B*7jC*(8fo z)Y%A*jWo*p_Py7bJA}nbl7Z#8>tvBR>WF1h&>;^yU}&z8_3Iv9J4T}-qvKF535}M0 z9-`3CyycTEV?toyB!7>{9nV2QVz;vugoXdp-dBKC(RKSDI;1-!rAr#5;n3aE-3d+py^d(EDC zoHMi6^hM9Kc2iMo@ZzwAn>Y_P@rDRiayO|kwRQp^H;0UXXd+cZ^)`S@=``}@&-Vc^ z2Zziv_O}V~_zf9MCYOsJ%{pRzYUwjIe~3ZdOVIo+sgXA%%Yx<}Z5V-6cXJbOzG=|C z40P?#46Wo&17(3GldD>tU*Q_-^hw^)p|Oo1cLZqLI~(YV7EyAwGKvvih4L>imHq4Q+P-1Mm7<8?Z;Ov)~3`XLrseXN`a#nQc^n;ti%c4 zlj7d!PBJkeGYrt)A}I;G=Y!Kt5$c0e4#wG~8}{9OFV!7s_%)*?u~F!tm0@GWzyW)( znTD{@kp{i;fC7vbha(<-jZGdnEH@$#UeqjXYC&0M~8A1DGv4$FxgAvw zC+`s=9h4J@xb+le3kz>g7-x$e`hW(eIsoo42Kj@^Vr7l^rPV@bHNpt-$Pf!m7TQ_m zp0KNVxWNK0NRO+Q%chX*>N@EYxF4?5L2{&4utP4pDDfX=NruDhhuz8gWPn9g6$5hm!s4mZ~#i zd0FaI;amAovt!^M1p2vN$B2A-QU1913Dx#%L#gqxU*1u7rr$>Mtg{u2`g-RI<_qT< zQGrlwZON)yvJdORcxcTy<-RZ>JCses1-=l*aXhpFSTW>vkEj5)bf{>|W-&b+x(KNK zM6d7=dk>njYccO-A1u1ndP6!jiZskk5^e82$7jFy`fZD!i^QQw3tHgAju*Ly{3UhQ zw;3$A>mtTmRmXtL*8u`)F;KOMDL{5ZY3fd=ZnA`L}aKcgfhj4&F)ZA|yfP=TiIv z(YA_FZ^eHh+4UvjH2roUiol0>5c*|z8fF&(HDUX~WAA;+jct*wM#QNF4&Pais)cg1 zpa7Ap1p*FUi{HY-ry%yL5-nf1$+yS8Onmva(3-nr3SR?B_1;||;ppxw6SY`?pt&CO ziQ15wfe1P$i_k)#9CA{~S_No8_Umi@UrkYJg_OL!y>xfh{G}+1Qxw0!n8T4HKi02l zMVG3b=tWDx+X|dildy>$p{OBQJ>Te(*TAiwZ|WbA-Q8oI3Zf83**0z|2-ssd-(T zcp}hdsdygmp$(540X_eMC+EsX_2wVyl$qCc5V^Jhc2besZ$y*`W{_Y6jZ*`Q|h@L9)LtWypb@e-We#s1}Imk1)&|-P1s!vEYpk6T0X~BtTJWzpKuN9_b z)(Dhi4t&V4`ZO<`@`*IANG39#Dja-nfS)@2l}FCf=7_5NM7bovec_@uwdD zLLx&ja{Xp(rG*1K(YEaFbWSg8!=(@+MqZ~fHk9x#zI7eu*8aD_nR;|#aenu&BDyaf zBw`J3UDGMG!A)Q@ge^OF{gNuhZR}be75qlGxksaxzNRJmH)qxro!QF(NA(u1Q z{)Ar8y00V~xMpu<#s?5)^ad;{y4S!HHquNa`Z@y-wm!U-2Cim?9yToHeZk~de62%A zW~)PLBQJfRWoAx?my&bs!w#77%D1#F0gG97M{_En&RYETi#AnggtZiNcG zEU`2wFC79}VZtbrJKyb9Z zo`|wY#LtH>TF;}E;ks+xaLOal(aZiQmRX}5NntGzZw-kpYy;D*e&U4<>vsCY0B0`E z)5|lhgU8>fk=|L{%keqWvMsBn8K$0MqER$5<@pzTqO85GyH*0O!8a2g9)ewrqi*sF zQBLbApf!7P8MSyO^W+9zB8hcL?yQD<6L@Ga(^T}X(@J#QCvFDviZpp!*4D`Ta0XpFVq&DKb4!m!4=_iEo+OM+VFwzO`h7j< z+{Qx5cv!Aa-6cdBHx;=PV_3?!yMl9PBNF+})t%15p+`I7sl^SuLzGKlu5H!(;tA4T zrIJ%}@WkSJGfQoiR8qzkGj}9myr0$?!Hrpz%)&WP?8NDQ!qy9h*>OZW0 zP83=G*{G+!e|vKy<@q%%#O0Cum9bnD8CX1Vc{#Vu!0$u9+B3VQkoqB+sB%`M z58a2FiOc_Ns{RxmX|M%BHSEoaLti(ZU6PBfVmM${tMrNJcr9?*QLP{ZfwU@=d82oL z%P1?eB;?Y}CW%w2(quyM=CXmvj|!-ncv8Eu?>` zDHL@R$v1dAMao^mYhh|Y7NLBxtDGojMyCJ$lIHWG4qLj)HDcIh)nPG#r@>Y1E?3~H z@B10b-&S%ho|va!uEAR7D$#iFHw90eZJGQ!A^y?>noxH6P8PeHW7;Kqhy#2PF@%qt zaD||^_)yHb^X6y@xa1nEdcW-SYecN~h$=|({0;f!d z;^mP%LAP}SY0r>tk8yN*MsP7Z!DapR?$8@b)WD~1__+G=`AijYZEssNavri|e}!-~ z`Mlpty*26;T5B@AX?3MKHEgS@c_8IOAWx!yQ)&q%-knF9ddTotP^L_>l`U->A-C?| z_sQ2ju8hm&cr6YTT%&3@QyElY zTD(jirU7qX`s{AdBff&7-;HnY^2%Xg#8bSoPh#2_EkASvA?o2Jm2`2}?gO;R5ym*j zb{B-<;Kz*-56k9?d0t4Adv3^>Ntl2)2Gsny%4qUCgwmWcn{;;_Hl;hEt5&P&cg1|M zX5yb&U*05JO=Z7R-TGXdu+n;caZo}HLdl=&Z58wAhik3rV&0xfzJVXqO5#!G+(#%yCR=&!mlo0pxdtlp1-cHLtb!@JP8 zLNZqRE^jaoz3!i$Qt z54WF&3Y#e>7NFVyx#mQ}G90WWh3OOQg`N!6D3IB{s%LhfUvEO55p7q{n?CdpFG{j= z?BRG6?)rq}-eXvP)gZd*pe~1A1Tz=o;srRd+W6VqYhE~Rhdq*FsU4e0&Ef5vYNl&~ zR6YTr?XV9>60QwKJYRa%wcBEuXmZstX-aHuI(R{|*}1*4o4#eXs=Vgu<{>D-CaUFV znHI3x8(2vD0{9#y@c~v!0%?JOW$(a8%@AVjZf<6%cbr;4Pr}0qSTPPE*ObvyaxifO zQe%*do4Z?^nnU#dvJU>QHDJNGgN3yvxw5gt@v43hRL}R--GJd^gTP90K!Q^QGLi6o zZ$uMeJ$fPf33{sb*Q7B(pQA#oMK0DT= z)W!)Zuzp_)$o6rRi{Lv4nh3>r@YwOAU>y}=?Z4r{Z*+h3K>Jr7oPmG!K<96G@EhG9 zJ<$1;2WQ}4JdphBWI4$E$b3^`euyBME)O>jc;WBX~CNdIyIAZI53>j~nN z{KNx*9O4KZpVqFPzjpD0!kLR0$7dizNo7NEa|>g)<2Ca~q=?GKK=vb7O_}dZcp^^6 zsiA=L*Z0O_mShnS->Dx+YHlXS=cDuC{eMjZ=nHl*&g}s3i3Md4kW1*ez-c)EJM+6! zlAx7#E{|-W2^v>X#!yQUXjF4^a&mNWJxMBtc?=zIfJ8ROxtvZ1B4Q4l7?0VGLY-85 zd}2N^LW>4`ADx0w0ZtiHM+XTrYgb1X5Qyg6cgv?IQP`sid>TxeUN#<9R$f*%Hq;{? zD12ObM`JT`8gdN>J3s&&GPN^?02xe9&TdEmUmBDdl-X%2kE3G}C@9GwI$#@j^p=w2 zLJlGa5gbd$2{TT>e{_3zxc?9Row)rEkpr}U_ibF&;0olpWjE|_pK-M=O5i3{dDu6EWqH7e!_x6 zN0m4BG)Pf& zAF)3k{E5Jy2>gk_|BeV$R#s|gXyoPP{g1oz;ll?Yt3N;Y%jVUAKwPh9{(KzGB7B>#?cs#1BHo+`FHtG_TYE70hiDCk7xmMpa~cY z2L}fwB_-g=-{n8)b?o42%mKGgswZ1O0dO1O|JQag;2XdI6hOF03&`J_I4n2-6M)XY zU;>CRu;YNf00Xd#zncK!cH%Y&c!yj(2$Tl`S%3hwzZ)Nb5CpuTfbyvCNdbaxx0Ky~A_%ka2Gw=sk zJa!vs0>=1v-TpxzhzSUEvvK4cIk5X#UGpU?68@$5P|b6g})nRPi(w^LQxmfrI5q0sVCVDURVW^e12^tpA5NwDYT7yJEv19wB; zHg;MCZ)>5L7fjC3YcrsM>7&FlEyxP z>t#HhB-v0jUPdC;B{bpM>bOlA_s6qA5I@}Q!eE2uBJqb;=eMhXgBk-ti6HN9j{ugKot3O}&?B zw35YB-7OdB?!*)uFKZ`Rl86b1$OUmt8IZx*e@V+OZez=ysNvSnzQ(XI5)~~xHu%va zh&UoXT)@giWk3bejqTHVtv!6~t*?WrFo;csuqkqHH^s|>dR59flwkWQ7Se<22(n;1 z9Vq+(>bbN7D;nzYbemodv|4?-L9ayNJ7Ik#kJLxAI_HMX2#aK$gOp9vF?4HCNJsS_ zafRvyaB;30V{+CR)TfTBe@kVeRi}h|Sx31X(PwNGW0726|U2`xq)y$xdq?vo0;}N&dBQ! zZOuW`JSge9F3^o#O43MgVo8j}o2R|bq7^ek+m!K`$6<@Ys)=uYPW>G_^AHms{?lCI z*oNs4WFB?XrN1%2eVt?C^ zowJ4!=x#LTuv-bui1N9yn+|EuC`#*LntP|vkV7c{*y45cXP1;67ZKQ9kbd&A7g3L- zVp3F8OjcXQfH|M60BU$l7X4kdH*dM?THNbouTwKlC#dMYMYcw$jpQOI`bz8!Vb`}Q zm%De*c0o4}Q%%`cSI>yYi5U5+IoOG$iCZDE#F!uN4T~Xi4lZqIrro2s>#6uv_F2=& zQHQcH)sS`=gL-9Lt-aM7DPdTay3h^^ZNf9*0)$IS&w`w`;;f&1GqCRI%-;J--skCQ zCHY04U(Z$feh=90mhUXw0=>=Bs*#sTL)YY!foEcMgv0I8tvZXApG!&e1D}?$1X)dM zCx5QSC!0I;;99Rr)}L&xDzLpKj&ik}Hazrk)3P1h^I^EkZLMdVo&6zFp)h3k$zYeL zi0R_fHlt^iI7SK4AkIU-i-9)B$x zo`UvB9Ak83^Ms!rip;A0deccNW%@0->cdeI zD{KbQ7~Z4n7df-XYq&B?g{AIP+C%LG6Fm{+y)H5yz*K)rYj3?_x|gwVru?ouo|FEi z!8_NwH9Iel;ZX!HNQ4qLi}|ZG%$R&F$ha07q_84RqbU?$g_|D)WA3nVx4-_fANA+C zd~u~ji+8VvSs&boD&KsNJ~F4M*Y?eIh=Ty%WIf~E5TOLeo)`)(;nH&fR&gPFbDc+C zFYW7Jpshbuc|PwmrVUbR=H^O(dWwDG=wyKCT(RjzvpAKeBs`)(6Uic%EL$ z>aa@rSOw&{DJ)tpb?z8qO?3IUO%M5VpA)=r-?r5(zfpnyCFNO#mny^^e*a@y|C<-n z-Wn2G1JN_N?Ko_RFPvNb-h9m^Q|ne|QXhoEqel{u*`VAoZWJ*unlc-p*B*9|$jBF6 ziWbBbbeP$K0rEe@dJJFL%3SfRocD}Pq1M|jjm8^<4Ny<97|kg6qE1+(6)A4Y*xsHi zS)1jFa?fY%Rn)_IhSPysAb892$;h6Yn$&h)NHbf|0EXs`U1PUBRn2;5UoO200-}|H z$i5XYD>BdZ8UmM3Ggh(_h+J6-8}3b*4y`~4kUO4N4jOz~GG0w=kA*8K=X{ziN;JP(kycLsT*n~_X>D0FtwPrF6~Qgh4kzxqo~*I)H3yMXZehh zMs+y!Tx3$!M*^7)p3)kt5Ar6UhGQRM%&AjCbCtxPcGyqPmc1>vFGW`?CRWim*nb0! zsysrDwwC!&kXk9T6*g|b4$Symg3%M9J*eHBz{*XK**nGAOtVx`Hz5P9aH6<>KIR!w ziEScy3rfp-JGr1*(w?hwI=x~#TF5RxJI z4R0aomC!vA=3@1-AW;Hm8VtP-R#;bmL50g{;;(t5(N#BzB+M!FhOdT-;kl%;uPAB+ z^VH2%*Y?#ut;{sae)lfkZcw?V^mVmGG|QspTiB=inMU*2f|Et*Y=!F`)46juSYUKr z4lJonLkm6-4ABN4>Ap?FF+_kd6#Iy~AqGX{OhO)R=~pvKvO2<;Cj$c6(C<>}Ms<>J zstbwaQ>l;ohmge5pkedt`(KICsUDM$=$d(vm76NAVt`yeUrn_b=jyRs(ZuRz7SH+! zLTjAcG`iHI-no=B}PGJGZJBw2PDH0fymiruwf;7I_%W=w)v zXQPBp+t@2I`%~peJxFcnY8#8Ot9fTq0 zd5mvU$d1M@EUhhIXbX6*`>YNZGiX#et9*-Gn#?0!)XV0g2%I09=n1&5?v1UevfznY zFP^y6-x^MzqRC0a5zcv4PaA)a6VguD%=92ih`1wHErVq&YPmSwe?NJH%8AP31IFI# zTH9~S82G|$vw-lwU6jowXqQ#>s%=RiL@)EN*Uq(}Ir!VV4tdpA1-m-cU zmk1=z1?P|IJxzsV4eoz=P%%;*(8A?aZXZ`!lgAIbq4$QwPr>{;hdZ2OOCPluhU}#B zsLr>ccVk?StE3?Z^yTl@_Mo^p(FdQ`$-VSApo4Zqef&VQ|BGq0)Na@WNl<@mvsa83 zX+aM1ZHq|g0wcIIB^9NSPjOe!Z?k-6`OLSi&K`vJ-e~q^Bb8z+MlROJ*gZ74d?+7y zIB*)b!p7^n^Xc`JQj-U0THmBqo*W9SHiE-xyLpo_yE^OfS+5(ZP2yh7oYnst+B zz!QYWx}D)B+Q4_2l*v;&nn^ucfZU2LDUkC`!q1q=yjoVoOgb|umz`@6blY-UxEbeN-o^Pz7R_g;%_MN3cfDh)=vG)a z54jUyO%WwGv27XUTjZ%N5SH)$b@O?766zF^co#AUul>we)=Sns`aQzEYkTHZhAo=1 z_#5ql3dR!6MeD8D&4uXcY@}M85DdtjP)*x=bPjqDpGke&o@>?U6^@JGcY_Yb^SmjA%wpxAwUa5qHQ51K4`2?k4=&vy6-PEO*>kMn(wuS+|44GDY@cxVjpHCD__CNm_N^9G#dn032F;P< z0e*_Y&qy>-aBD6{=hYQNN_wETQZzM`qWfm3KIFb!rrd5GL5yrLjma1k(lOk#>Izz7 zT~hFaM{CK2v!rp_tPN)Mz`*KY+{m4%YTC9M=u^0_@A%xmuw(Bgi3PX>?TS`|N%Bj~ z;%=EqV0Ac~Y^iFJ`c zyd+Q*Zc~yyb2%eeV(b-gon9u&6%r?k4vxetzHvcV|=974TaB_`0Lc}T*))2 z6=hfSyiVN`722s~;e1oFi7+CGr$Q5x=@SGSx3WmtQ(@TXfv5HtEUux0dS|UY)lb@d zjt?v3<`ACuSU`Vhl*|XuMGwg76UR!yEA67=qE<5*SB$-pz)F;klI$$J)T1|*EK=_s zub$E(ZZX8A!-pnf8`qOvP9I9JBTy;S^?RsZ-L&>KRFAh$;#1)|(Ax#TiY_ zf6q;*;=iEyDd5$uuC!ejwXa6az1p*R7MaspH2H=_UALM^{l9_2T3wi zY92GUc10><*iY)&-`g6$zozhxUn%zyw`^i&dyjb!ZqFmtl#-|JdhHorG;$0RnW;Cv zVYXK@Si!ra6l}g4t16yLc+jwsyfeWQzYXC^Zd!ypXV61)lH zmegX38T9%H^1C#1dvu?1BXgQXY|!f~;Zoo=V;S-wqH zJ$tR>q(D5qggY{I3q6->F3sQVp;pSP%z2AT0iTMWtzV82s@+*KrHZ`0S+s#)SR>)@ zEBwhKY9jRADx3G0aiv<%KnH)a+u-Dqpo!)xZ(`R;S*E~p;tAS`{rA^lCdE@AkIh~v zlH;R$xs;<9b$C1^Fv_yjazq(8fX?vtbKVqUV{o{7OI3OWvtgS)unIxQZ#%_5XX4Am z?PX4HL?M(KP)%?R+3kq>t97&!v6E5DR0B8hO@yFG-gkIamE;Etqk2-mH!x*n9e?sh#5_C)_wL`eTK6-6c_+Cw*qa^+L0 z;*xyPM@MO^l`kv10&-?GUxs@9Gek>gZd~%lt%mpYOP)cWoVSY&E=&1588HztbVz9u z?2MM;-pBJ+I6^5{;Y!i;0nTlMY@)nQ(`&PJDHCf2h4DlFyG&~-nCk{gr@xge}#ek{--XdY-U zy4a4WW^UqbzmW{GO*@( z8Q>%bWLDt&tdIi&C(t$ne6z@Fs;QndK=Z1qt4W>8@?fx<`l)OrFLSgI|ENH_f|V2j z-eWmfU4i$A7Y@K5i%W{Do!~Gy@-k+?df}r2L#HVN76$}C2S&ghSn3VPz<^;&)WBzU zVF|?L#ZP^JWs+1@Khi%^69FqLIGxJsQtAr8vg)G(Yb7Qrdb+Y2)>~0S=1l*A+PR!5 zruZFyB?VSK<8KoaSH6DAGohxgdOBX%bs1n_Cpa9UwW%EtpQ8eI8IXBTWmd2#z6=&lhYWNwuZ1*!p?s1A;@DDt7ie2ze{LJnJ|0IBWe8=U2f09p5u?zl5 zx&EvteP#pU+-K?aQ$56UOa}H8L%M+BoMOlqFsf7RLJVX$e}SFF{-WM5;v#eA^F_Vr zU+`uAj440(1=ja7regLB?C~$K!e3xhKVzzA`{RPoYA8SJX<+<}Y2*9?yZj66ECv_m zhW1$uF3b&G<z!g3 z=7z;t-%IBK#7{aw6YgJ;g4}jT<6AWB2=hfsOtG z`^Egbzx)fmty7HP+`rhfzC`C(9NnoN;RWpMxFkNu;wOH#k<#@u)_- + + false + + + + 100 + false + 10000 + 0 + 9 + true + false + true + true + false + 0 + My Computer/VI Server + My Computer/VI Server + true + true + false + + + + + + + + + + + Mobile-Robot-K4-001 + 172.16.0.1 + OS,Linux;CPU,ARM;DeviceCode,762F;TARGET_TYPE,RT;FPGAPersonality,myRIO_FP_Default; + 762F + ARMLinux + true + 5000 + 1000 + 8 + 8 + false + 300 + 80 + 60 + + 100 + false + 10000 + 0 + 0 + true + true + true + 8001 + /c/ni-rt/startup/startup.rtexe + true + +* + false + /c/ni-rt/startup + true + true + +* + false + true + 3363 + Main Application Instance/VI Server + Main Application Instance/VI Server + +* + true + true + false + false + /c/ni-rt/system/www/www.log + 80 + /c/ni-rt/system/www + c+* + 60 + +* + PqVr/ifkAQh+lVrdPIykXlFvg12GhhQFR8H9cUhphgg=:pTe9HRlQuMfJxAG6QCGq7UvoUpJzAzWGKy5SbZ+roSU= + 15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + true + + + + + diff --git a/Software/dashboard/test/labview/ecg_generator/documentation/myRIO Project Documentation.html b/Software/dashboard/test/labview/ecg_generator/documentation/myRIO Project Documentation.html new file mode 100644 index 0000000..98ab8e4 --- /dev/null +++ b/Software/dashboard/test/labview/ecg_generator/documentation/myRIO Project Documentation.html @@ -0,0 +1,541 @@ + + + + +myRIO Project + + + + + + + +

myRIO Project

+ +

You can use the myRIO Project template as a starting point for creating myRIO applications with the myRIO default FPGA personality. With the myRIO Project template, you can easily access myRIO I/O channels and onboard devices without making major modifications to the structure of the application.

+ +

Table of Contents

+

System Requirements

+

Understanding the Components of This Template

+

Running This Template

+

Modifying This Template

+

Related Information

+ +
+ + +

System Requirements

+

Development System

+ +
    +
  • LabVIEW Full or Professional Development System
  • +
  • LabVIEW Real-Time Module
  • +
  • LabVIEW myRIO Toolkit
  • +
+ +

Hardware

+
    +
  • myRIO
  • +
+ + + +

Understanding the Components of This Template

+

This template uses a Flat Sequence structure that executes frames from left to right.

+ +

The Flat Sequence structure in this template executes the following frames from left to right:

+
    +
  1. Initialize—Initializes the myRIO, variables, and user interface elements, such as controls and indicators. Initializing code depends on your application needs.
  2. +
  3. Acquire and process data—Acquires data from the myRIO and processes the data for presentation. The While Loop repeats code until you click Stop or an error occurs.
  4. +
  5. Close—Closes user interface elements and variables, and resets the myRIO output values to zero before the application exits. Closing code is optional.
  6. +
+ + +

Running This Template

+
    +
  1. In the Project Explorer window, navigate to your myRIO target and open the Main VI.
  2. +
  3. Click Run. This application acquires acceleration data from the onboard accelerometer and displays changes to acceleration values in a waveform chart.
  4. +
  5. Rotate or shake the myRIO and observe the changes of the X, Y, and Z acceleration values.
  6. +
  7. Click Stop to stop the application.
  8. +
+ + +

Modifying This Template

+ +

The following table summarizes the design decisions you must make when modifying this template.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Design DecisionDesign ExampleDetailed Information
How do you want to control the order of execution in your application?You want data to flow as desired without using the Flat Sequence structure.Controlling the Order of Execution
What data does your application need to initialize?You want your application to open a file for logging.Adding Initialization Code
Which myRIO I/O channels does your application need to access?You want your application to control the DIO channels on the myRIO.Modifying the Data Acquisition and Processing Code
What executions does your application need to complete before exiting?You want your application to close references to make memory resources available.Adding Closing Code
How does your application handle errors?You want your application to report errors at the end of the execution flow.Modifying Error Handling
+ +

Controlling the Order of Execution

+

This template uses the Flat Sequence structure to control data flow. The data leaves each frame as the frame finishes executing. This template uses the Flat Sequence structure to demonstrate the purpose of the code in each frame.

+

Note  Do not overuse the Flat Sequence structure for controlling the execution order because the Flat Sequence structure prohibits parallel operations.

+

When you modify this template, you can remove the Flat Sequence structure and establish data dependency between nodes. For example, wiring the error in and error out clusters through nodes controls the data to flow from one node to another.

+ + +

Adding Initialization Code

+

This template initializes the error in cluster to specific values. You can add code to initialize your user interface and the myRIO. For example, you may want to initialize the data to specific values or to open a file for logging.

+ +

Modifying the Data Acquisition and Processing Code

+

This template uses the Accelerometer Express VI to read the acceleration values from the onboard accelerometer and uses a waveform chart to display the acceleration values.

+

You can add code to acquire data from the myRIO and process the data based on your application needs. The myRIO Toolkit provides Express VIs and Low Level VIs for you to access I/O channels and the onboard devices.

+ +

Adding Closing Code

+

This template uses the Reset VI to reset the onboard accelerometer. You must use the Reset VI after the completion of all operations with the myRIO I/O channels. Otherwise, the Reset VI might return unexpected results.

+

You can add code that executes after the data acquisition and processing completes but before the application exits. Closing code commonly accomplishes the following tasks:

+
    +
  • Frees memory by closing any open references
  • +
  • Flushes any buffers in use
  • +
  • Resets the myRIO
  • +
+ +

Modifying Error Handling

+

By default, if an error occurs in the Accelerometer Express VI, this template stops. If you do not want the error to stop your application, you can remove the OR function and wire the Stop control directly to the conditional terminal of the While Loop. The error in and error out clusters pass error information from the beginning of the VI to the end and report the error at the end of the execution flow.

+ + + +

Related Information

+

Refer to the LabVIEW Help, available by selecting Help»LabVIEW Help from LabVIEW, for information about LabVIEW concepts or objects used in this sample project. You also can use the Context Help window to learn basic information about LabVIEW objects as you move the cursor over each object. To display the Context Help window in LabVIEW, select Help»Show Context Help.

+

Refer to the myRIO sample projects, available from the Create Project dialog box, for examples of adapting this template to more complex applications.

+ +
+

Legal Information

+ +

Copyright

+

© 2013–2015 National Instruments. All rights reserved.

+ +

Under the copyright laws, this publication may not be reproduced or transmitted in any form, electronic or mechanical, including photocopying, recording, storing in an information retrieval system, or translating, in whole or in part, without the prior written consent of National Instruments Corporation.

+ +

National Instruments respects the intellectual property of others, and we ask our users to do the same. NI software is protected by copyright and other intellectual property laws. Where NI software may be used to reproduce software or other materials belonging to others, you may use NI software only to reproduce materials that you may reproduce in accordance with the terms of any applicable license or other legal restriction.

+ +

End-User License Agreements and Third-Party Legal Notices

+

You can find end-user license agreements (EULAs) and third-party legal notices in the following locations after installation:

+
    +
  • Notices are located in the <National Instruments>\_Legal Information and <National Instruments> directories.
  • +
  • EULAs are located in the <National Instruments>\Shared\MDF\Legal\license directory.
  • +
  • Review <National Instruments>\_Legal Information.txt for information on including legal information in installers built with NI products.
  • +
+

U.S. Government Restricted Rights

+

If you are an agency, department, or other entity of the United States Government ("Government"), the use, duplication, reproduction, release, modification, disclosure or transfer of the technical data included in this manual is governed by the Restricted Rights provisions under Federal Acquisition Regulation 52.227-14 for civilian agencies and Defense Federal Acquisition Regulation Supplement Section 252.227-7014 and 252.227-7015 for military agencies.

+ +

IVI Foundation Copyright Notice

+ +

Content from the IVI specifications reproduced with permission from the IVI Foundation.

+ +

The IVI Foundation and its member companies make no warranty of any kind with regard to this material, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose. The IVI Foundation and its member companies shall not be liable for errors contained herein or for incidental or consequential damages in connection with the furnishing, performance, or use of this material.

+ + + +

Trademarks

+ + +

Refer to the NI Trademarks and Logo Guidelines at ni.com/trademarks for information on National Instruments trademarks. Other product and company names mentioned herein are trademarks or trade names of their respective companies.

+ + + +

Patents

+

For patents covering the National Instruments products/technology, refer to the appropriate location: Help»Patents in your software, the patents.txt file on your media, or the National Instruments Patent Notice at ni.com/patents.

+ + + + \ No newline at end of file diff --git a/Software/dashboard/test/labview/ecg_generator/documentation/myRIO_Project_Diagram.gif b/Software/dashboard/test/labview/ecg_generator/documentation/myRIO_Project_Diagram.gif new file mode 100644 index 0000000000000000000000000000000000000000..9e25779f7937d5e9040cff2fb3323d4e1ddfa9ab GIT binary patch literal 8925 zcmeHr_fr#Ev~?sPAP9ObNJmk6k&6NeAiWnG0)jMw(3>c|OA{#pgg_E{6GAVc2SP8Q zOK73@-a90p_kDlGn|XWItl4wUS!>U%AI_XPDr(9SATv$iryK47z~ggrz<(w1AN{u$ zMk0~^>j5GF02lz!1ppub00{ur1%N#PU?>2h3xL1@5H!I5zilu;1PlO!0lHuS1Ps;% zgFV5}zo-R6r~b+y01*fP3<2muz#Y41j_~ zpio^X+7pU~LeXPTGzmHdhfa+_r$~R#CHSKfu$#%r$pr-ksJ}8i2@L_DNn>adslL7* zo8XU4Kw(i>EEbR5{EJQOCJBeb;Zgp0{3d>L6Hmh9Nq?C%1r?csf~QFEDbm;!i8MVu zy|A#biB0%V@wZ6$P10W`?d96$vr}sY*{vZ7>On{0A08+82mZoFBQ{ChH)K!|%8g_?M9jRKD+5Yp9 zs4bzZEUPnyLm`4itvtIso<~&vV|RH@FYLK_4^pinw+|uVx7P+90GIMME7i4_)ozdq64u)=Am<3n$p zgHg5n{7OPSY)8G`fBz<4GReuT=>r8fSHrlod0PPcdo4*%$7KwR-YW6xo9og*gq-NZ z?W7k=gTGbsgc>g@H^vIh>Z7&1(GCMeF1>gogt$H+^#&EC-#3Z<(vI)+dP2za{i^Pt z!mt_S#bMo0?CUY(l*{9$i439>!)(gcX~BG1jGjsA^*LZ2TLPO+C0?Gbt*(|dkuZK| zq$W(BPI zj;BXFDVNCn@!UW^Gg9QUL{`*GTaT=0(3hI57-_GwET~-2*^?;Mg`}r38e|hsV_!3^ zFZ@za|F|5XhfZ3KRd?&ohG_>;=Xf_`RV-umGxKxcpZwM#Nlwv>c?tHZjFxcs;$$m? z^9gTW+SeVMyrjT?BJwi4p7gAyMLq26w2;H9iY`#L^xl5Assj$Ma)3gJuA!__9`f-=`mPMEA3mt2~37nNLwq(E(z_CB22 zDjVSH-Ky+=M^jWatc%*Nnu7FhSI>mn!JU?#NEX-DX4E6<8q2&9^~=iM#SQDj^~H_b zj$EUdtCP*$CIF?tUNbp^{T`NzyKv7aF=uJ7mGG64&*6Af->T>s|LL&sE5ImB@MPRVq3GcUn4r`=+Q<;*8IL*4V7+sbI~h7ro=zd^mUU*@6Q@|JfoGczxOx*r(M&eS>3Aallw= zucbf5zrW%UW5XTrLbOWp#i)e9o#S=Acp>m~d5NPWA%E8RXqn8$xPHed?Rw0p62^A4 zE5jM%1+fM0N(~!pHe=$;T@0cZx`ds8>ry%Wl~)=Xt7(UM~J z96&6#n*(+-$TRgvf90ckOsU6;=wBM-mTOEPbu9x9 zn&MtY0T8vi8rx9ZAJMtToK{`i&&orJEYkU;#Wl`qzraBE*p~mPkY!#NPEP9$lI6

LQWW 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 literal 0 HcmV?d00001