master
iotcat 5 years ago
parent 3e8a09a477
commit 7479d4e11d
  1. 125
      opt/gateway/test/ovo.h
  2. 136
      opt/gateway/test/socket.hpp
  3. 27
      opt/gateway/test/test.ino
  4. 269
      opt/gateway/test/vector.h
  5. BIN
      opt/node/node0/.vscode/bin/node0.ino.elf
  6. 873
      opt/node/node0/.vscode/bin/node0.ino.hex
  7. 873
      opt/node/node0/.vscode/bin/node0.ino.with_bootloader.hex
  8. 10
      opt/node/node0/.vscode/bin/preproc/ctags_target_for_gcc_minus_e.cpp
  9. 10
      opt/node/node0/.vscode/bin/sketch/node0.ino.cpp
  10. BIN
      opt/node/node0/.vscode/bin/sketch/node0.ino.cpp.o
  11. 4
      opt/node/node0/.vscode/bin/sketch/socket.hpp
  12. 10
      opt/node/node0/node0.ino
  13. 4
      opt/node/node0/socket.hpp
  14. 125
      opt/node/test/ovo.h
  15. 98
      opt/node/test/test.ino

@ -0,0 +1,125 @@
/**
* ovo-arduino Main File
*
* @category ovo-arduino
* @package ovo.cpp
* @copyright Copyright (c) 2019 EEENeko (https://github.com/eeeneko)
* @license GNU General Public License 2.0
* @version 0.0.1
*/
#ifndef _OVO_H
#define _OVO_H
/**
* Like set Timeout in JS
*
* @Author yimian
* @param auto function (allow Lambda)
* @param int millisecond to dealy
* @return void
*/
void setTimeout(auto function,const int delay)
{
static bool on = 1;
if(on == 1){
static unsigned long startTime = millis();
if(millis() - startTime > delay){
function();
on == 0;
}
}
}
/**
* Like set Interval in JS
*
* @Author yimian
* @param auto function (allow Lambda)
* @param int millisecond of interval
* @return void
*/
void setInterval(auto function, const int delay)
{
static unsigned long startTime = millis();
if(millis() - startTime > delay){
function();
startTime = millis();
}
}
/**
* Switch between function1 and function2 for delay1 and delay2
*
* @Author yimian
* @param auto function1 (allow Lambda)
* @param auto function2 (allow Lambda)
* @param int millisecond of interval
* @param int millisecond of interval
* @return void
*/
void setSwitch(auto function1, auto function2, const int delay1, const int delay2)
{
static unsigned long startTime = millis();
if(millis() - startTime < delay1){
function1();
}else if(millis() - startTime >= delay1 && millis() - startTime < delay1 + delay2){
function2();
}else if(millis() - startTime >= delay1 + delay2){
startTime = millis();
}
}
/**
* Make direct voltage change to gradually change
*
* @author yimian
* @category ovo
* @package ovo
*/
class slowWrite
{
public:
inline void set(int t_pin, unsigned int t_delay){
pin = t_pin;
delay = t_delay;
};
inline void high(){
startTime = millis();
state = 1;
};
inline void low(){
startTime = millis();
state = 0;
};
inline void run(){
if(state == 1 && millis() - startTime < delay){
analogWrite(pin, ((millis() - startTime) * 255 / delay));Serial.println(((millis() - startTime) * 255 / delay));
}else if(state == 0 && millis() - startTime < delay){
analogWrite(pin, 255-((millis() - startTime) * 255 / delay));Serial.println(255-((millis() - startTime) * 255 / delay));
}else{
state = -1;
}
};
private:
unsigned long startTime;
int state;
int pin;
unsigned int delay;
};
#endif

@ -0,0 +1,136 @@
#ifndef __SOCKET_HPP_
#define __SOCKET_HPP_
#include <LoRa.h>
#include <SPI.h>
#include "ovo.h"
#include "vector.h"
#ifndef SS
#define SS 18
#endif
#ifndef RST
#define RST 14
#endif
#ifndef DI0
#define DI0 26
#endif
#ifndef BAND
#define BAND 433E6
#endif
#ifndef SEND_TIMES
#define SEND_TIMES 8
#endif
#ifndef SEND_INTERVAL
#define SEND_INTERVAL 100
#endif
#ifndef TCP_TIMEOUT
#define TCP_TIMEOUT 1000
#endif
#define DEFAULT_SERIAL 115200
class Socket {
public:
Socket(){}
void core();
void ini();
void onReceive(auto handler);
void udp(const String& msg, auto callback);
inline void udp(const String& msg) {
this->udp(msg, [=](int err) {});
};
private:
static Vector<int> udp_sendingStack;
static String cache;
static void (*callback)(const String& msg);
void LoRa_rxMode();
void LoRa_txMode();
void LoRa_sendMessage(const String& message);
static void _received(int size);
};
Vector<int> Socket::udp_sendingStack;
String Socket::cache = "";
void (*Socket::callback)(const String& msg);
void Socket::ini() {
if(!Serial) Serial.begin(DEFAULT_SERIAL);
LoRa.setPins(SS, RST, DI0);
if (!LoRa.begin(BAND)) {
Serial.println("Starting LoRa failed!");
while(true);
}
LoRa.onReceive(this->_received);
}
void Socket::core() {
if(LoRa.parsePacket()){
Serial.println("new msg in");
}
}
void Socket::_received(int size) {
String message = "";
while (LoRa.available()) {
message += (char)LoRa.read();
}
Serial.println(" "+message);
if (message == cache) return;
cache = message;
if (message.length() == 3) {
int pos = udp_sendingStack.Find(message.toInt());
if (pos != -1) {
udp_sendingStack.Erase(pos);
}
return;
}
(*callback)(message.substring(3));
}
void Socket::onReceive(auto handler) {
static auto f = handler;
this->callback = f;
}
void Socket::udp(const String& msg, auto callback) {
int mid = random(100, 1000);
String s = String(mid) + msg;
this->udp_sendingStack.PushBack(mid);
this->LoRa_txMode();
for(int i = 0; i < SEND_TIMES; i ++){
setTimeout([=](){
this->LoRa_sendMessage(s);
if(i == SEND_TIMES - 1){
this->LoRa_rxMode();
callback(0);
}
}, i*SEND_INTERVAL);
}
}
void Socket::LoRa_rxMode(){
LoRa.receive();
}
void Socket::LoRa_txMode(){
LoRa.idle();
}
void Socket::LoRa_sendMessage(const String& message) {
LoRa.beginPacket();
LoRa.print(message);
LoRa.endPacket();
}
#endif //__SOCKET_HPP_

@ -0,0 +1,27 @@
#include "socket.hpp"
Socket socket;
void callback(const String& s){
Serial.println(s);
}
void setup(){
Serial.begin(115200);
socket.ini();
socket.onReceive(callback);
}
void loop(){
socket.core();
//setInterval([](){
// socket.udp("hello socket!!!"+String(random(2000)), [](int e){
// Serial.println("send ok"+String(random(2000)));
// });
//}, 7000);
}

@ -0,0 +1,269 @@
/*
* Vector.h
*
* Created on: 05/04/2012
* Author: tom
* Purpose: To play the part of a mutable array in the absence of the STL.
*/
#ifndef VECTOR_H
#define VECTOR_H
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#ifndef MIN
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#endif
#ifndef MAX
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#endif
#define SWAP(type, a, b) type tmp ## a = a; a = b; b = tmp ## a;
template <class ParameterType> class Predicate
{
public:
virtual void operator() (ParameterType &param) = 0;
};
template <class VectorType> class Vector
{
// The address of the first element of the vector
VectorType *begin;
// The address one after the last allocated entry in the underlying array
VectorType *storage;
// The index of the most recent element put in the underlying array - the head
int head;
public:
// The value that is returned when the caller asks for an element that is out of the bounds of the vector
VectorType OB;
// We can save a few re-sizings if we know how large the array is likely to grow to be
Vector(int initialSize = 0)
{
begin = new VectorType[initialSize]; //points to the beginning of the new array
head = initialSize - 1;
storage = begin + initialSize; //points to the element one outside of the array (such that end - begin = capacity)
}
Vector(Vector &obj)
{
begin = new VectorType[0]; // Points to the beginning of the new array, it's zero but this line keeps malloc from seg faulting should we delete begin before resizing it
head = -1;
storage = begin; //points to the element one outside of the array (such that end - begin = capacity)
*this = obj;
}
// If there's anything in the vector then delete the array, if there's no array then doing will will cause seg faults
virtual ~Vector() { delete[] begin; }
Vector &operator=(Vector &obj)
{
// Reallocate the underlying buffer to the same size as the
Resize(obj.Size());
for(int i = 0; i < obj.Size(); i++)
(*this)[i] = obj[i];
head = obj.head;
return *this;
}
void ForEach(Predicate<VectorType> &functor)
{
for(int i = 0; i < Size(); i++)
functor(begin[i]);
}
// Swaps the underlying array and characteristics of this vector with another of the same type, very quickly
void Swap(Vector &obj)
{
SWAP(int, head, obj.head);
SWAP(VectorType*, begin, obj.begin);
SWAP(VectorType*, storage, obj.storage);
}
// Checks the entire Vector to see whether a matching item exists. Bear in mind that the VectorType might need to implement
// equality operator (operator==) for this to work properly.
bool Contains(VectorType element)
{
for(int i = 0; i < Size(); i++)
if(operator [](i) == element)
return true;
return false;
}
int Find(VectorType element)
{
for(int i = 0; i < Size(); i++)
if(operator [](i) == element)
return i;
return -1;
}
void PushBack(VectorType element) { PushBack(&element, 1); }
void PushBack(const VectorType *elements, int len)
{
// If the length plus this's size is greater than the capacity, reallocate to that size.
if(len + Size() > Capacity())
ReAllocate(MAX(Size() + len, Size() * 2));
int append = MIN(storage - begin - head - 1, len), prepend = len - append;
// memcpy the data starting at the head all the way up to the last element *(storage - 1)
memcpy((begin + head + 1), elements, sizeof(VectorType) * append);
// If there's still data to copy memcpy whatever remains, starting at the first element *(begin) until the end of data. The first step will have ensured
// that we don't crash into the tail during this process.
memcpy(begin,(elements + append), sizeof(VectorType) * prepend);
// Re-recalculate head and size.
head += len;
}
void Erase(unsigned int position) { Erase(position, position + 1); }
// Erase an arbitrary section of the vector from first up to last minus one. Like the stl counterpart, this is pretty labour intensive so go easy on it.
void Erase(int first, int last)
{
// For this we'll set the value of the array at first to the value of the array at last plus one. We'll do that all the way up to toIndex
for(int i = 0; i < (Size() - first); i++)
{
// If by trying to fill in the next element with the ones ahead of it we'll be running off the end of the vector, stop.
if((i + last) > (Size() - 1))
break;
begin[first + i] = begin[last + i];
}
// Adjust the head to reflect the new size
head -= last - first;
}
// Remove the most recent element in the array
void PopBack()
{
if(Size() > 0)
head--;
}
// Empty the vector, or to be precise - forget the fact that there was ever anything in there.
void Clear() { head = -1; }
// Returns a bool indicating whether or not there are any elements in the array
bool Empty() { return head == -1; }
// Returns the oldest element in the array (the one added before any other)
VectorType const &Back() { return *begin; }
// Returns the newest element in the array (the one added after every other)
VectorType const &Front() { return begin[head]; }
// Returns the nth element in the vector
VectorType &operator[](int n)
{
if(n < Size())
return begin[n];
else
return OB;
}
// Returns a pointer such that the vector's data is laid out between ret to ret + size
VectorType *Data() { return begin; }
// Recreates the vector to hold len elements, all being copies of val
void Assign(int len, const VectorType &val)
{
delete[] begin;
// Allocate an array the same size as the one passed in
begin = new VectorType[len];
storage = begin + len;
// Refresh the head and tail, assuming the array is in order, which it really has to be
head = len - 1;
for(int i = 0 ; i < Size(); i++)
begin[i] = val;
}
// Recreates the vector using an external array
void Assign(VectorType *array, int len)
{
delete[] begin;
// Allocate an array the same size as the one passed in
begin = new VectorType[len];
storage = begin + len;
// Refresh the head and tail, assuming the array is in order, which it really has to be
head = len - 1;
// Copy over the memory
memcpy(begin, array, sizeof(VectorType) * len);
}
// Returns the number of elements that the vector will support before needing resizing
int Capacity() { return (storage - begin); }
// Returns the number of elements in vector
int Size() { return head + 1; }
// Requests that the capacity of the allocated storage space for the elements
// of the vector be at least enough to hold size elements.
void Reserve(unsigned int size)
{
if(size > Capacity())
ReAllocate(size);
}
// Resizes the vector
void Resize(unsigned int size)
{
// If necessary, resize the underlying array to fit the new size
if(size > Capacity())
ReAllocate(size);
// Now revise the head and size (tail needn't change) to reflect the new size
head = size - 1;
}
private:
void ReAllocate(unsigned int size)
{
// Just in case we're re-allocating less room than we had before, make sure that we don't overrun the buffer by trying to write more elements than
// are now possible for this vector to hold.
if(Size() > (int)size)
head = size - 1;
// Allocate an array twice the size of that of the old
VectorType *_begin = new VectorType[size];
VectorType *_storage = _begin + size;
int _head = Size() - 1;
// Copy across all the old array's data and rearrange it!
for(int i = 0; i < Size(); i++)
_begin[i] = (*this)[i];
// Free the old memory
delete[] begin;
// Redirect the old array to point to the new one
begin = _begin;
storage = _storage;
head = _head;
}
};
#endif // VECTOR_H

Binary file not shown.

@ -1,492 +1,391 @@
:100000000C945E000C9407040C94E0030C9486009E
:100000000C945E000C943A060C9413060C94860033
:100010000C9486000C9486000C9486000C94860048
:100020000C9486000C9486000C9486000C94860038
:100030000C9486000C9486000C9486000C94860028
:100040000C9496030C9486000C94AB020C948502DD
:100040000C94C9050C9486000C9472050C944C0514
:100050000C9486000C9486000C9486000C94860008
:100060000C9486000C9486000000000024002700F9
:100070002A00010204081020408001020408102018
:10008000010204081020040404040404040402020D
:100090000202020203030303030300000000250021
:1000A00028002B00000000080002010000030407E4
:1000B0000000000000000000ED0AE50A11241FBE48
:1000C000CFEFD8E0DEBFCDBF11E0A0E0B1E0EEE3BE
:1000D000FEE102C005900D92AE36B107D9F722E0DD
:1000E000AEE6B1E001C01D92A237B207E1F710E021
:1000F000CDE5D0E004C02197FE010E94F70CCC357D
:10010000D107C9F70E9418070C94120F0C94000035
:100110000E94F40EEF92FF920F931F93CF93DF9301
:10012000EC01FB0184819581E080F1800C811D81CF
:10013000E114F104B1F00097B9F0080F191FB801EC
:10014000CE010E94E001882361F0288139818C81F1
:100150009D81B701820F931F0E940B0F1D830C839B
:1001600003C0CE010E940702CE01DF91CF911F9103
:100170000F91FF90EF900895CF92DF92EF92FF9250
:100180000F931F93CF93DF936C017A018B01C0E033
:10019000D0E0CE15DF0589F0D8016D918D01D60133
:1001A000ED91FC910190F081E02DC6010995892B1C
:1001B00011F47E0102C02196ECCFC701DF91CF91EF
:1001C0001F910F91FF90EF90DF90CF900895FC0169
:1001D000538D448D252F30E0842F90E0821B930BAC
:1001E000541710F0CF96089501970895FC01918D52
:1001F000828D981761F0828DDF01A80FB11D5D9689
:100200008C91928D9F5F9F73928F90E008958FEFF6
:100210009FEF0895FC01918D828D981731F0828DAA
:10022000E80FF11D858D90E008958FEF9FEF089501
:10023000FC01918D228D892F90E0805C9F4F821B65
:1002400091098F739927089580EA91E00E9418011F
:1002500021E0892B09F420E0822F0895FC01848D90
:10026000DF01A80FB11DA35ABF4F2C91848D90E0E0
:1002700001968F739927848FA689B7892C93A089BB
:10028000B1898C9180648C93938D848D981306C072
:100290000288F389E02D80818F7D80830895EF921D
:1002A000FF920F931F93CF93DF93EC0181E0888F30
:1002B0009B8D8C8D981305C0E889F989808185FD17
:1002C00024C0F62E0B8D10E00F5F1F4F0F73112708
:1002D000E02E8C8DE8120CC00FB607FCFACFE8892F
:1002E000F989808185FFF5CFCE010E942E01F1CFE3
:1002F0008B8DFE01E80FF11DE35AFF4FF0820B8F4B
:10030000EA89FB898081806207C0EE89FF8960836A
:10031000E889F98980818064808381E090E0DF91C1
:10032000CF911F910F91FF90EF900895CF93DF939E
:10033000EC01888D8823C9F0EA89FB89808185FDDD
:1003400005C0A889B9898C9186FD0FC00FB607FC3E
:10035000F5CF808185FFF2CFA889B9898C9185FF7F
:10036000EDCFCE010E942E01E7CFDF91CF9108950E
:1003700080E090E0892B29F00E94240181110C94E7
:100380000000089508950895CF93DF931F92CDB78D
:10039000DEB76983DC01ED91FC910280F381E02DF1
:1003A00041E050E0BE016F5F7F4F09950F90DF91F4
:1003B000CF910895089580E090E008950C94B806D8
:1003C0000F931F93CF93DF93EC018881998100975E
:1003D00029F02A813B812617370788F48B016F5F4C
:1003E0007F4F0E942A0E009761F0998388831B83B8
:1003F0000A832C813D81232B11F4FC01108281E0C2
:1004000001C080E0DF91CF911F910F910895CF93AC
:10041000DF93EC0188819981009711F00E94920D81
:10042000198218821D821C821B821A82DF91CF9151
:100430000895EF92FF920F931F93CF93DF93EC01F8
:100440007B018A01BA010E94E001811104C0CE0142
:100450000E94070207C01D830C83B7018881998120
:100460000E940B0FCE01DF91CF911F910F91FF9052
:10047000EF900895CF93DF93EC016115710559F06A
:10048000FB0101900020E9F73197AF01461B570BA4
:100490000E94190202C00E940702CE01DF91CF9193
:1004A0000895FC01808191810C94920DFB01DC0187
:1004B00011961C921E9213961C921E9212971596DC
:1004C0001C921E9214978617970749F060817181DC
:1004D0006115710521F0448155810C94190208952C
:1004E000FC0111821082138212821582148261151E
:1004F000710551F0FB0101900020E9F73197AF0140
:10050000461B570B0C94190208951F920F920FB6B9
:100510000F9211242F933F934F935F936F937F9389
:100520008F939F93AF93BF93EF93FF9380EA91E0F4
:100530000E942E01FF91EF91BF91AF919F918F91FA
:100540007F916F915F914F913F912F910F900FBECF
:100550000F901F9018951F920F920FB60F921124B3
:100560002F938F939F93EF93FF93E091B001F091BE
:10057000B1018081E091B601F091B70182FD12C016
:1005800090818091B9018F5F8F732091BA0182179A
:1005900051F0E091B901F0E0E056FE4F958F809365
:1005A000B90101C08081FF91EF919F918F912F91AF
:1005B0000F900FBE0F901F90189590E0FC01EC5526
:1005C000FF4F3491FC01EE58FF4F2491FC01EA5794
:1005D000FF4FE491EE2309F43BC0332339F133306C
:1005E00091F038F43130A9F0323001F584B58F7DC7
:1005F00012C0373091F03830A1F03430B9F4809126
:1006000080008F7D03C0809180008F778093800071
:100610000DC084B58F7784BD09C08091B0008F77FD
:1006200003C08091B0008F7D8093B000F0E0EE0FAA
:10063000FF1FE656FF4FA591B4918FB7F894EC9148
:10064000611103C020952E2301C02E2B2C938FBF48
:100650000895CF93DF9390E0FC01EE58FF4F249173
:10066000FC01EA57FF4F8491882361F190E0880FE5
:10067000991FFC01E859FF4FC591D491FC01E65642
:10068000FF4FA591B491611109C09FB7F89488817B
:10069000209582238883EC912E230BC0623061F475
:1006A0009FB7F8943881822F809583238883EC91BB
:1006B0002E2B2C939FBF06C08FB7F894E8812E2B6A
:1006C00028838FBFDF91CF9108953FB7F894809131
:1006D0009C0190919D01A0919E01B0919F0126B532
:1006E000A89B05C02F3F19F00196A11DB11D3FBF6A
:1006F000BA2FA92F982F8827820F911DA11DB11DF8
:10070000BC01CD0142E0660F771F881F991F4A95F3
:10071000D1F708952FB7F8946091980170919901DD
:1007200080919A0190919B012FBF08951F920F9283
:100730000FB60F9211242F933F938F939F93AF93F4
:10074000BF938091980190919901A0919A01B091E5
:100750009B013091970123E0230F2D3720F4019660
:10076000A11DB11D05C026E8230F0296A11DB11DD4
:10077000209397018093980190939901A0939A01F7
:10078000B0939B0180919C0190919D01A0919E014D
:10079000B0919F010196A11DB11D80939C01909382
:1007A0009D01A0939E01B0939F01BF91AF919F9136
:1007B0008F913F912F910F900FBE0F901F90189522
:1007C0001F920F920FB60F9211242F933F934F93C6
:1007D0005F936F937F938F939F93AF93BF93EF93A9
:1007E000FF93E0910201F09103010995FF91EF91D0
:1007F000BF91AF919F918F917F916F915F914F9139
:100800003F912F910F900FBE0F901F9018951F9240
:100810000F920FB60F9211242F933F934F935F9334
:100820006F937F938F939F93AF93BF93EF93FF93B8
:10083000E0910001F09101010995FF91EF91BF91C5
:10084000AF919F918F917F916F915F914F913F9168
:100850002F910F900FBE0F901F901895EF92FF925F
:100860001F93CF93DF931F92CDB7DEB77C01162F76
:1008700060E0FC01808949830E94DD02F701548514
:10088000358580916F014981882399F02FB7F894BD
:1008900080916F01813059F48DB3809396019DB39F
:1008A00080916E01809589238DBB2FBF02C020935C
:1008B00096015CBD3DBD1EBD00000DB407FEFDCF21
:1008C0008EB54EBD00000DB407FEFDCF1EB5809164
:1008D0006F01882361F08FB7F89420916F01909198
:1008E0009601213019F49DBB8FBF01C09FBF61E00D
:1008F000F70180890E94DD02812F0F90DF91CF9157
:100900001F91FF90EF9008956F7740E00C942E04B4
:10091000CF9362E18DE392E00E948404C82F482FB8
:1009200062E98DE392E00E942E04C5FD2DC0109275
:100930005802109257028091590290915A02892BC5
:1009400011F062E201C063E18DE392E00E94840451
:10095000C82F60E18DE392E00E948404482F6DE887
:100960008DE392E00E942E04E0915B02F0915C0224
:10097000309719F08C2F90E0099540E06DE88DE3F9
:1009800092E0CF910C942E04CF910895EF92FF92B4
:100990001F93CF93DF931F92CDB7DEB77C01DC01AD
:1009A000ED91FC910084F185E02D0995892B99F05A
:1009B0006DE0C7010E948404482F60E0C7014983AD
:1009C0000E948404182F49816DE8C7010E942E04FB
:1009D000812F90E002C08FEF9FEF0F90DF91CF91BA
:1009E0001F91FF90EF900895CF93DF93EC01E88182
:1009F000F9810084F185E02D0995892B59F08A8DC4
:100A00009B8D01969B8F8A8F60E0CE010E948404AB
:100A100090E002C08FEF9FEFDF91CF910895CF93C9
:100A2000DF93EC0163E10E948404282F30E08A8D7B
:100A30009B8DA901481B590BCA01DF91CF910895E5
:100A4000BF92CF92DF92EF92FF920F931F93CF93BB
:100A5000DF93CDB7DEB72C970FB6F894DEBF0FBE8D
:100A6000CDBF6AE671E0CE0101960E9470028DE36F
:100A700092E00E940F05892BF9F08DE392E00E942D
:100A8000F4048F8318860D811E810F5F1F4FB801FC
:100A9000CE0101960E94E001882349F329813A8121
:100AA0008D819E81BE01695F7F4F820F931F0E94DF
:100AB0000B0F1E830D83DBCF6BE671E0CE01079633
:100AC0000E947002BE016F5F7F4FCE0107960E94A9
:100AD0008A000E94B806CE0107960E945102ED805E
:100AE000FE80809161029091620209811A81E8166C
:100AF000F90631F560915D0270915E0201151105F4
:100B000019F061157105C1F46115710549F0E11421
:100B1000F10409F4B7C0FB018081811111C0B2C09A
:100B20000115110509F4AEC0E114F10409F4AAC0DD
:100B3000F801808190E0BAC0C8010E94020FB6C0DF
:100B40000115110539F0A701B8018DE592E00E9469
:100B5000190204C08DE592E00E9407020D811E81FA
:100B60000330110509F056C089819A81009719F068
:100B70000E94BB0B03C060E070E0CB0120916902D2
:100B800030916A020091650210916602F80180E0DE
:100B900090E0281739070CF475C041915191461720
:100BA000570779F48F3FFFEF9F0709F46BC0DC0113
:100BB00011967C01EE0CFF1C60E070E020E030E05C
:100BC00015C00196E6CFFD01E20FF31F4E175F0738
:100BD000C4F0FB01EE0DFF1DE00FF11F42815381B8
:100BE000518340832F5F3F4F6E5F7F4F409169027B
:100BF00050916A02FA013196E81BF90B2E173F0754
:100C000014F38A1B9B0B480F591F50936A024093A1
:100C1000690238C0E0907001F09071010330110555
:100C200020F4680103E010E003C083E0C82ED12C5B
:100C30006AE671E0CE0107960E9470028D819E8166
:100C4000C816D906B8F48017910708F48C01E98119
:100C5000FA81E00FF11FB080108269817A816C0DFA
:100C60007D1DCE0107960E943A02A981BA81A00F8C
:100C7000B11FBC92CE010796F7010995CE010796E8
:100C80000E945102CE0101960E9451022C960FB68D
:100C9000F894DEBF0FBECDBFDF91CF911F910F91B2
:100CA000FF90EF90DF90CF90BF900895892B09F0CF
:100CB0004ACFE8CF8F929F92AF92BF92CF92DF92AE
:100CC000FF920F931F93CF93DF931F92CDB7DEB7A1
:100CD0006C01B62E4A0162E279830E948404F82EE8
:100CE00090E09C01280D391D79812F3F310531F0AD
:100CF00028F02FEF30E04901881A990A0B2D172FA1
:100D00005801A80CB91C0A151B0541F0F8014191C6
:100D10008F0160E8C6010E942E04F5CF482D4F0DCB
:100D200062EAC6010E942E04C4010F90DF91CF91A8
:100D30001F910F91FF90DF90CF90BF90AF909F9049
:100D40008F90089526E331E0FC0131832083828176
:100D50009381009711F00C94920D0895CF93DF9337
:100D6000EC010E94A206CE01DF91CF910C94920D6E
:100D7000CF93DF93FC01448155816081718180EACA
:100D800091E00E94BC00EC0142E050E068E671E0B6
:100D900080EA91E00E94BC008C0F9D1FDF91CF91F3
:100DA00008958F929F92AF92BF92CF92DF92EF926F
:100DB000FF920E9465034B015C018AE0C82ED12C92
:100DC000E12CF12C0E946503DC01CB018819990903
:100DD000AA09BB09883E9340A105B10558F021E05E
:100DE000C21AD108E108F10888EE880E83E0981E47
:100DF000A11CB11CC114D104E104F10419F7FF9046
:100E0000EF90DF90CF90BF90AF909F908F9008951C
:100E100010925A02109259026DE18DE392E00E9405
:100E20008404482F4E7F6DE98DE392E00C942E04EC
:100E3000CF93DF93CDB7DEB7C754D1090FB6F8947F
:100E4000DEBF0FBECDBF789484B5826084BD84B50B
:100E5000816084BD85B5826085BD85B5816085BDB5
:100E600080916E00816080936E001092810080916D
:100E700081008260809381008091810081608093F5
:100E80008100809180008160809380008091B1001A
:100E900084608093B1008091B00081608093B00045
:100EA00080917A00846080937A0080917A008260D9
:100EB00080937A0080917A00816080937A0080919B
:100EC0007A00806880937A001092C100E091B001AE
:100ED000F091B10182E08083E091AC01F091AD012D
:100EE0001082E091AE01F091AF0180E18083109219
:100EF000B801E091B401F091B50186E08083E09102
:100F0000B201F091B301808180618083E091B201F0
:100F1000F091B301808188608083E091B201F0910B
:100F2000B301808180688083E091B201F091B301C8
:100F300080818F7D808361E080914D020E94290332
:100F400061E080914D020E94DD0280914F029091FC
:100F500050028F3F2FEF920789F061E00E94290332
:100F600060E080914F020E94DD020E94D10661E0A4
:100F700080914F020E94DD020E94D1061FB7F894B3
:100F800080917201811127C0E0E9F0E08491ECE7E3
:100F9000F0E09491E82FF0E0EE0FFF1FE859FF4FCB
:100FA000A591B491EC91E92321F461E08AE00E94DB
:100FB000DD0261E08AE00E9429038CB580618CBD6E
:100FC0008CB580648CBD61E08DE00E94290361E0F6
:100FD0008BE00E942903809172018F5F80937201E0
:100FE0001FBF62E48DE392E00E948404823109F025
:100FF000D2C240E861E88DE392E00E942E0480E4D2
:101000009EE0AFECB9E18093530290935402A09319
:101010005502B09356024CE666E88DE392E00E94DA
:101020002E0440E467E88DE392E00E942E0440E045
:1010300068E88DE392E00E942E0440E06EE88DE3C4
:1010400092E00E942E0440E06FE88DE392E00E945F
:101050002E046CE08DE392E00E948404482F4360EC
:101060006CE88DE392E00E942E0444E066EA8DE392
:1010700092E00E942E044FE869E88DE392E00E941E
:101080002E0441E861E88DE392E00E942E0480E2A4
:1010900095E090935C0280935B0260E08091510246
:1010A0000E94290340E060EC8DE392E00E942E0450
:1010B00080915102909152028230910521F0039764
:1010C00021F08FEF03C080E001C081E09FB7F8946A
:1010D000882349F0813011F482E006C082E08093D9
:1010E0006F0180E001C081E020916E01822B80932E
:1010F0006E0180916F01811103C081E080936F01C7
:101100009FBF80915102909152028230910519F057
:101110000397A9F451C280E0E82FF0E0EE0FFF1F23
:10112000E050FF4F28E834E031832083813009F418
:1011300045C280916900836080936900E89A80913C
:101140007501811109C08EED91E090937401809337
:10115000730181E080937501809173019091740116
:101160009093710180937001B0ED8B2EB7E09B2EB0
:10117000A12CB12C14E8212E13E0312E412C512C3E
:1011800080918E0181110DC00E948A0360938A01B3
:1011900070938B0180938C0190938D0181E08093FB
:1011A0008E010E948A0300918A0110918B01209187
:1011B0008C0130918D01DC01CB01801B910BA20BC6
:1011C000B30B89359B41A105B10508F4E1C10E942B
:1011D000AD0B22961FAE1EAE229724961FAE1EAEFA
:1011E000249726961FAE1EAE2697A50194010E9455
:1011F0005D0C2AE0AE014F5F5F4F0E94ED0BBE0118
:101200006F5F7F4FCE01805C9F4F0E943A026AE37E
:1012100071E0CE01CA960E947002BE01605C7F4FF1
:10122000CE01CA960E948A008C010E94AD0BA201D9
:1012300091010E945D0C6B017C0124E6C20ED11C61
:10124000E11CF11C1CA21BA21EA21DA218A61FA21B
:101250004AE0BE016F5F7F4FC6010E94E20BBE01F4
:101260006F5F7F4FCE0183960E943A02BE016D5D93
:101270007F4FCE0101960E945602B801CE01019621
:101280000E948A00BC01CE01C4960E945602CE0183
:1012900001960E945102CE0183960E945102289627
:1012A000DFAECEAE28972091690230916A02A90183
:1012B0004E5F5F4F00916502109166028091670258
:1012C00090916802801B910B9595879584179507DF
:1012D0000CF044C0C9010196880F991F8417950727
:1012E0000CF4CA01281739073CF09C012150310940
:1012F00030936A02209369026C01CC0CDD1C8138AA
:101300009F4310F4C60102C08FEF9FEF0E94FD0CB7
:101310007C01C80ED91E6090690270906A02D801E3
:10132000FC0180E090E06816790634F02D913D9143
:10133000219331930196F7CF0115110519F0C801DA
:101340000E94920DF0926602E0926502D0926802CD
:10135000C092670270926A026092690220916502EF
:10136000309166028091690290916A020091670251
:1013700010916802021B130B15950795081B190B9A
:10138000023011051CF40150110902C001E010E007
:101390007801EE0CFF1C0196880F991FA701BE0172
:1013A0006A5B7F4F820F931F0E94F90E41E050E06D
:1013B000401B510B440F551F66E470E06C0F7D1FFE
:1013C0006E0D7F1D80916502909166020E94F90E5C
:1013D0008091690290916A02019690936A028093CB
:1013E000690241E861E88DE392E00E942E04C12C7D
:1013F000D12C760100E010E07724739489E891E025
:101400009CA38BA3BE016C5C7F4FCE0185960E948E
:1014100056021CA70BA78091810181110CC00E946C
:101420008A0360937D0170937E0180937F01909386
:101430008001709281010E948A0320917D01309188
:101440007E0140917F0150918001DC01CB01821B24
:10145000930BA40BB50BC816D906EA06FB0608F0D9
:1014600071C041E861E88DE392E00E942E040E9481
:10147000080740E06DE88DE392E00E942E0440E012
:1014800062EA8DE392E00E942E04E0913D02F09129
:101490003E0249A55AA56DA17EA10280F381E02DEF
:1014A0008DE392E0099543E861E88DE392E00E94C4
:1014B0002E0462E18DE392E00E94840483FFF9CF61
:1014C00048E062E98DE392E00E942E048BA59CA582
:1014D0000797C1F50E94080745E861E88DE392E0AF
:1014E0000E942E040E94AD0B1FA61EA619AA18AAC0
:1014F0001BAA1AAAA50194010E945D0C2AE0AE0164
:101500004F5F5F4F0E94ED0BBE016F5F7F4FCE01BB
:101510008E960E943A026AE471E0CE0101960E9422
:101520007002BE01625D7F4FCE0101960E948A006B
:101530000E94B806CE0101960E945102CE018E96FD
:101540000E945102CE0185960E9451020F5F1F4FEB
:1015500094E6C90ED11CE11CF11C0830110509F0FC
:101560004DCFCE01C4960E945102CE01CA960E9470
:101570005102CE01805C9F4F0E9451020E948A035B
:1015800060938A0170938B0180938C0190938D01FD
:101590000E94B801F5CD45E150E062E571E080EAD6
:1015A00091E00E94BC0042E050E068E671E080EA11
:1015B00091E00E94BC00FFCF81E0AECD8091690038
:1015C0008C6080936900E99ABACD8DE592E00E9423
:1015D000510283E692E00C94A206CF93DF93E0EAF7
:1015E000F1E01382128288EE93E0A0E0B0E0848301
:1015F0009583A683B78382E191E09183808385EC14
:1016000090E09587848784EC90E09787868780ECCC
:1016100090E0918B808B81EC90E0938B828B82ECBD
:1016200090E0958B848B86EC90E0978B868B118E67
:10163000128E138E148EEDE3F2E01382128284E296
:1016400091E09183808380E5848781E085878DE6C2
:1016500092E0978786878AE090E0918B808B89E083
:1016600090E0938B828B82E090E0958B848B168A3E
:10167000178A108E118E138E128E158E148E178E61
:10168000168E1482158216821782C3E6D2E086E394
:1016900091E09983888380E090E00E94FD0C9B8319
:1016A0008A832FEF3FEF3F832E839D838C836AE6EF
:1016B00071E08DE592E0DF91CF910C9470028F92F2
:1016C0009F92AF92BF92CF92DF92EF92FF92CF9311
:1016D000DF93EC01688179818A819B8161157105B5
:1016E0008105910521F464E279ED8BE597E02DE128
:1016F00033EF41E050E00E945D0C49015A019B012B
:10170000AC01A7EAB1E40E947C0C6B017C01ACEE59
:10171000B4EFA50194010E948A0CDC01CB018C0D71
:101720009D1DAE1DBF1DB7FF03C00197A109B048A5
:1017300088839983AA83BB83BC01CD019F77DF9106
:10174000CF91FF90EF90DF90CF90BF90AF909F90A0
:101750008F9008950E945F0B089584E091E00E94AD
:101760005F0B089560930401709305018093060157
:101770009093070108951F93FC0199278827BC01C6
:10178000E89411911032E9F3193010F01E30C8F3CB
:101790001B3251F01D3249F4689406C00E94FC0BC4
:1017A000610F711D811D911D119110531A30B0F3FD
:1017B0003EF490958095709561957F4F8F4F9F4F28
:1017C0001F910895BB274A3031F4992322F4BDE2DA
:1017D000909581959F4F0C94340CBB272A3051F47F
:1017E000992342F4BDE290958095709561957F4F65
:1017F0008F4F9F4F0C94120C592F482F372F262FA5
:10180000660F771F881F991F660F771F881F991F04
:10181000620F731F841F951F660F771F881F991F04
:101820000895BB27FA01A62F62177105810591055E
:10183000330B30FB66F0AA27660F771F881F991FAE
:10184000AA1FA21710F0A21B63953850A9F7A05D3C
:10185000AA3308F0A95DA19336F7B111B1931082B4
:10186000CA010C944D0CBB27FB015527AA27880FF2
:10187000991FAA1FA41710F0A41B83955051B9F704
:10188000A05DAA3308F0A95DA193009779F7B11183
:10189000B1931192CB010C944D0CDC01FC01672F2C
:1018A00071917723E1F7329704C07C916D93708337
:1018B0006291AE17BF07C8F30895052E97FB1EF47B
:1018C00000940E94740C57FD07D00E94C60C07FCC0
:1018D00003D04EF40C94740C50954095309521959E
:1018E0003F4F4F4F5F4F089590958095709561954C
:1018F0007F4F8F4F9F4F08950E94E80CA59F900D3A
:10190000B49F900DA49F800D911D11240895B7FFE1
:101910000C947C0C0E947C0C821B930B08952F92DC
:101920003F924F925F926F927F928F929F92AF926F
:10193000BF92CF92DF92EF92FF920F931F93CF93BC
:10194000DF93CDB7DEB7CA1BDB0B0FB6F894DEBF53
:101950000FBECDBF09942A88398848885F846E8479
:101960007D848C849B84AA84B984C884DF80EE80C3
:10197000FD800C811B81AA81B981CE0FD11D0FB6CC
:10198000F894DEBF0FBECDBFED010895A1E21A2E7F
:10199000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F13
:1019A000A217B307E407F50720F0A21BB30BE40B63
:1019B000F50B661F771F881F991F1A9469F76095AA
:1019C0007095809590959B01AC01BD01CF01089564
:1019D000A29FB001B39FC001A39F700D811D112470
:1019E000911DB29F700D811D1124911D0895EE0F60
:1019F000FF1F0590F491E02D0994CF93DF9382307F
:101A0000910510F482E090E0E0917002F091710293
:101A100020E030E0C0E0D0E0309711F1408151810A
:101A200048175907C0F04817590761F4828193811C
:101A3000209719F09B838A832BC090937102809327
:101A4000700226C02115310519F04217530718F40A
:101A50009A01BE01DF01EF010280F381E02DDCCFAE
:101A60002115310509F1281B390B2430310590F47B
:101A700012968D919C9113976115710521F0FB01D0
:101A80009383828304C09093710280937002FD015E
:101A9000329644C0FD01E20FF31F819391932250CF
:101AA00031092D933C933AC020916E0230916F0220
:101AB000232B41F420910A0130910B0130936F02E6
:101AC00020936E0220910801309109012115310502
:101AD00041F42DB73EB740910C0150910D01241BEC
:101AE000350BE0916E02F0916F02E217F307A0F45C
:101AF0002E1B3F0B2817390778F0AC014E5F5F4F64
:101B00002417350748F04E0F5F1F50936F02409324
:101B10006E028193919302C0E0E0F0E0CF01DF918B
:101B2000CF9108950F931F93CF93DF93009709F4FC
:101B30008CC0FC01329713821282009170021091C6
:101B400071020115110581F420813181820F931FEB
:101B500020916E0230916F022817390779F5F093C2
:101B60006F02E0936E0271C0D80140E050E0AE1702
:101B7000BF0750F412962D913C911397AD0121159A
:101B8000310509F1D901F3CF9D01DA0133832283B5
:101B900060817181860F971F8217930769F4EC01AA
:101BA00028813981260F371F2E5F3F4F31832083D5
:101BB0008A819B8193838283452B29F4F093710260
:101BC000E093700242C01396FC93EE931297ED01DE
:101BD000499159919E01240F351FE217F30771F4C3
:101BE00080819181840F951F029611969C938E930C
:101BF0008281938113969C938E931297E0E0F0E09C
:101C0000D80112968D919C911397009719F0F801C5
:101C10008C01F6CF8D919C9198012E5F3F4F820FE2
:101C2000931F20916E0230916F022817390769F4D3
:101C3000309729F4109271021092700202C0138240
:101C4000128210936F0200936E02DF91CF911F9169
:101C50000F910895A0E0B0E0E0E3FEE00C94930C57
:101C6000EC01009721F4CB010E94FD0CB8C0FC01EF
:101C7000E60FF71F9C0122503109E217F30708F421
:101C8000ACC0D9010D911C91119706171707B0F040
:101C90000530110508F49FC0C801049786179707FF
:101CA00008F499C002501109061B170B01931193F8
:101CB0006D937C93CF010E94920D8DC05B01A01AA1
:101CC000B10A4C01800E911EA0917002B091710278
:101CD00040E050E0E12CF12C109709F44AC0A8151F
:101CE000B905D1F56D907C901197630182E0C80E23
:101CF000D11CCA14DB0480F1A3014A195B096A01F3
:101D000082E0C80ED11C1296BC9012971396AC912B
:101D1000B5E0CB16D10440F0B282A3835183408357
:101D2000D9016D937C930AC00E5F1F4FC301800FD2
:101D3000911FF90191838083EB2DFA2FE114F104B7
:101D400031F0D7011396FC93EE93129744C0F093B1
:101D50007102E09370023FC08D919C9111974817DA
:101D6000590708F4AC017D0112960D90BC91A02D8D
:101D7000B3CF80916E0290916F0288159905E1F4BE
:101D800046175707C8F48091080190910901009700
:101D900041F48DB79EB740910C0150910D01841B09
:101DA000950BE817F907C8F4F0936F02E0936E0201
:101DB000F901718360830FC0CB010E94FD0C7C018F
:101DC000009759F0A801BE010E94F90ECE010E94B1
:101DD000920DC70104C0CE0102C080E090E0CDB7F3
:101DE000DEB7EEE00C94AF0C81E090E0F8940C9438
:101DF000120FFB01DC0102C001900D9241505040D6
:101E0000D8F70895FB01DC018D9101908019011034
:101E1000D9F3990B0895FB01DC0101900D9200208C
:101E2000E1F7089510E0CDE5D0E004C0FE010E9486
:0E1E3000F70C2196CE35D107C9F7F894FFCFF5
:101E3E00C201C20101000000000072028000000019
:101E4E0000004F01BC00E70096011801F6000A01E0
:101E5E0000000000C4015A06DB01C3010F05F404A3
:101E6E00C60400000000A206AE0668656C6C6F200A
:101E7E00736F636B65742121210073656E64206F2F
:101E8E006B005374617274696E67204C6F526120DF
:0E1E9E006661696C656421000D0A0020200059
:100060000C9486000C9486000000000025002800F7
:100070002B0000000008000201000003040700003C
:1000800000000000000000000000240027002A00FB
:10009000010204081020408001020408102001021F
:1000A00004081020040404040404040402020202EC
:1000B0000202030303030303F308E90811241FBE2C
:1000C000CFEFD8E0DEBFCDBF22E0AEE5B1E001C0AA
:1000D0001D92A934B207E1F711E0A0E0B1E0E0E041
:1000E000F8E102C005900D92AE35B107D9F710E0E6
:1000F000CDE5D0E004C02197FE010E94D809CC359F
:10010000D107C9F70E94E9060C94F30B0C94000088
:100110000895CF92DF92EF92FF920F931F93CF93A8
:10012000DF936C017A018B01C0E0D0E0CE15DF05D2
:1001300089F0D8016D918D01D601ED91FC9101906E
:10014000F081E02DC6010995892B11F47E0102C0D2
:100150002196ECCFC701DF91CF911F910F91FF90B6
:10016000EF90DF90CF900895FC01538D448D252FA3
:1001700030E0842F90E0821B930B541710F0CF9641
:10018000089501970895FC01918D828D981761F073
:10019000828DDF01A80FB11D5D968C91928D9F5FBE
:1001A0009F73928F90E008958FEF9FEF0895FC0169
:1001B000918D828D981731F0828DE80FF11D858D1C
:1001C00090E008958FEF9FEF0895FC01918D228DAF
:1001D000892F90E0805C9F4F821B91098F73992734
:1001E000089587E791E00E94E50021E0892B09F45A
:1001F00020E0822F0895FC01848DDF01A80FB11D3E
:10020000A35ABF4F2C91848D90E001968F7399274C
:10021000848FA689B7892C93A089B1898C91806439
:100220008C93938D848D981306C00288F389E02DFA
:1002300080818F7D80830895EF92FF920F931F93AB
:10024000CF93DF93EC0181E0888F9B8D8C8D981389
:1002500005C0E889F989808185FD24C0F62E0B8DC3
:1002600010E00F5F1F4F0F731127E02E8C8DE812E7
:100270000CC00FB607FCFACFE889F989808185FFA9
:10028000F5CFCE010E94FB00F1CF8B8DFE01E80F70
:10029000F11DE35AFF4FF0820B8FEA89FB898081C1
:1002A000806207C0EE89FF896083E889F9898081CF
:1002B0008064808381E090E0DF91CF911F910F9166
:1002C000FF90EF900895CF93DF93EC01888D882302
:1002D000C9F0EA89FB89808185FD05C0A889B989B3
:1002E0008C9186FD0FC00FB607FCF5CF808185FF8E
:1002F000F2CFA889B9898C9185FFEDCFCE010E94FC
:10030000FB00E7CFDF91CF91089580E090E0892B4B
:1003100029F00E94F10081110C940000089590E0F2
:10032000FC01EE58FF4F3491FC01E057FF4F249140
:10033000FC01EC55FF4FE491EE2309F43BC033235D
:1003400039F1333091F038F43130A9F0323001F521
:1003500084B58F7D12C0373091F03830A1F0343041
:10036000B9F4809180008F7D03C0809180008F77E9
:10037000809380000DC084B58F7784BD09C08091C3
:10038000B0008F7703C08091B0008F7D8093B00064
:10039000F0E0EE0FFF1FE859FF4FA591B4918FB722
:1003A000F894EC91611103C020952E2301C02E2BEF
:1003B0002C938FBF0895CF93DF9390E0FC01E0571B
:1003C000FF4F2491FC01EC55FF4F8491882361F18C
:1003D00090E0880F991FFC01EA57FF4FC591D49117
:1003E000FC01E859FF4FA591B491611109C09FB775
:1003F000F8948881209582238883EC912E230BC06A
:10040000623061F49FB7F8943881822F80958323FE
:100410008883EC912E2B2C939FBF06C08FB7F89446
:10042000E8812E2B28838FBFDF91CF910895EF9223
:10043000FF921F93CF93DF931F92CDB7DEB77C015E
:10044000162F60E0FC01808949830E948F01F7012B
:1004500054853585809169014981882399F02FB7AA
:10046000F89480916901813059F48DB380935E01D5
:100470009DB380916801809589238DBB2FBF02C0F9
:1004800020935E015CBD3DBD1EBD00000DB407FEA6
:10049000FDCF8EB54EBD00000DB407FEFDCF1EB5DD
:1004A00080916901882361F08FB7F89420916901E8
:1004B00090915E01213019F49DBB8FBF01C09FBF99
:1004C00061E0F70180890E948F01812F0F90DF91F9
:1004D000CF911F91FF90EF9008956F7740E00C94BB
:1004E0001702CF9362E184E192E00E946D02C82F6F
:1004F000482F62E984E192E00E941702C5FD2DC0F9
:1005000010922F0210922E028091300290913102AF
:10051000892B11F062E201C063E184E192E00E9464
:100520006D02C82F60E184E192E00E946D02482FC5
:100530006DE884E192E00E941702E0913202F091AE
:100540003302309719F08C2F90E0099540E06DE868
:1005500084E192E0CF910C941702CF910895089511
:10056000EF92FF921F93CF93DF931F92CDB7DEB729
:100570007C01DC01ED91FC910084F185E02D099571
:10058000892B99F06DE0C7010E946D02482F60E051
:10059000C70149830E946D02182F49816DE8C70188
:1005A0000E941702812F90E002C08FEF9FEF0F9003
:1005B000DF91CF911F91FF90EF900895CF93DF933C
:1005C000EC01E881F9810084F185E02D0995892B02
:1005D00059F08A8D9B8D01969B8F8A8F60E0CE01AA
:1005E0000E946D0290E002C08FEF9FEFDF91CF91EC
:1005F0000895CF93DF93EC0163E10E946D02282FF1
:1006000030E08A8D9B8DA901481B590BCA01DF91EF
:10061000CF9108958F929F92AF92BF92CF92DF9227
:10062000FF920F931F93CF93DF931F92CDB7DEB747
:100630006C01B62E4A0162E279830E946D02F82EA7
:1006400090E09C01280D391D79812F3F310531F053
:1006500028F02FEF30E04901881A990A0B2D172F47
:100660005801A80CB91C0A151B0541F0F80141916D
:100670008F0160E8C6010E941702F5CF482D4F0D8B
:1006800062EAC6010E941702C4010F90DF91CF9168
:100690001F910F91FF90DF90CF90BF90AF909F90F0
:1006A0008F900895CF93DF931F92CDB7DEB7698304
:1006B000DC01ED91FC910280F381E02D41E050E0FE
:1006C000BE016F5F7F4F09950F90DF91CF91089525
:1006D000089580E090E008950C9477060E94D50B71
:1006E0000F931F93CF93DF93EC018881998100973B
:1006F00029F02A813B812617370788F48B016F5F29
:100700007F4F0E940B0B009761F0998388831B83B6
:100710000A832C813D81232B11F4FC01108281E09E
:1007200001C080E0DF91CF911F910F910895CF9389
:10073000DF93EC0188819981009711F00E94730A80
:10074000198218821D821C821B821A82DF91CF912E
:100750000895EF92FF920F931F93CF93DF93EC01D5
:100760007B018A01BA010E947003811104C0CE018D
:100770000E94970307C01D830C83B701888199816C
:100780000E94EC0BCE01DF91CF911F910F91FF9052
:10079000EF900895FC01118210821382128215825B
:1007A00014826115710551F0FB0101900020E9F7F9
:1007B0003197AF01461B570B0C94A9030895BF92C4
:1007C000CF92DF92EF92FF920F931F93CF93DF931D
:1007D000CDB7DEB72C970FB6F894DEBF0FBECDBFF6
:1007E0006CE571E0CE0101960E94CA0384E192E0BB
:1007F0000E94F902892BF9F084E192E00E94DE0266
:100800008F8318860D811E810F5F1F4FB801CE01A7
:1008100001960E947003882349F329813A818D81D2
:100820009E81BE01695F7F4F820F931F0E94EC0B78
:100830001E830D83DBCF67E571E0CE0107960E9432
:10084000CA038D819E81E980FA800B851C85E114A5
:10085000F10409F418C10097A9F0080F191FB80195
:10086000CE0107960E947003882309F40CC12F81E2
:1008700038858B859C85B701820F931F0E94EC0BF6
:100880001C870B87CE0107960E9477068F8198857B
:100890000E94730AED80FE808091380290913902A7
:1008A00009811A81E816F90631F5609134027091D8
:1008B00035020115110519F061157105C1F46115B5
:1008C000710549F0E114F10409F4C9C0FB0180810C
:1008D000811111C0C4C00115110509F4C0C0E11493
:1008E000F10409F4BCC0F801808190E0D1C0C801D6
:1008F0000E94E30BCDC00115110539F0A701B80125
:1009000084E392E00E94A90304C084E392E00E9481
:100910009703CD80DE80F3E0CF16D10409F056C0F6
:1009200089819A81009719F00E94650903C060E0EF
:1009300070E0CB01209140023091410200913C02D5
:1009400010913D02F80180E090E0281739070CF47F
:1009500086C0419151914617570779F48F3F2FEF89
:10096000920709F47CC0DC0111967C01EE0CFF1C9F
:1009700060E070E020E030E015C00196E6CFFD01B8
:10098000E20FF31F4E175F07C4F0FB01EE0DFF1DD2
:10099000E00FF11F42815381518340832F5F3F4F0E
:1009A0006E5F7F4F4091400250914102FA013196B3
:1009B000E81BF90B2E173F0714F38A1B9B0B480FFC
:1009C000591F509341024093400249C0E0906B018F
:1009D000F0906C0183E0C816D10428F4860183E00E
:1009E000C82ED12C02C003E010E06CE571E0CE010E
:1009F00007960E94CA038D819E810817190738F552
:100A00008C159D0508F46C01E981FA81EC0DFD1D42
:100A1000B080108269817A81600F711F6115710544
:100A200069F0FB0101900020E9F73197AF01461B07
:100A3000570BCE0107960E94A90304C0CE0107966A
:100A40000E949703A981BA81AC0DBD1DBC92CE0155
:100A50000796F70109958F8198850E94730A89810D
:100A60009A810E94730A2C960FB6F894DEBF0FBECF
:100A7000CDBFDF91CF911F910F91FF90EF90DF904D
:100A8000CF90BF900895CE0107960E949703FACEAB
:100A9000892B09F033CFE3CF1F920F920FB60F923D
:100AA00011242F933F934F935F936F937F938F9373
:100AB0009F93AF93BF93EF93FF9387E791E00E94DB
:100AC000FB00FF91EF91BF91AF919F918F917F912B
:100AD0006F915F914F913F912F910F900FBE0F90AB
:100AE0001F9018951F920F920FB60F9211242F93FB
:100AF0008F939F93EF93FF93E0918701F09188018B
:100B00008081E0918D01F0918E0182FD12C0908173
:100B1000809190018F5F8F7320919101821751F026
:100B2000E0919001F0E0E958FE4F958F809390019D
:100B300001C08081FF91EF919F918F912F910F9034
:100B40000FBE0F901F9018953FB7F89480916401E5
:100B500090916501A0916601B091670126B5A89BAF
:100B600005C02F3F19F00196A11DB11D3FBFBA2F3F
:100B7000A92F982F8827820F911DA11DB11DBC019F
:100B8000CD0142E0660F771F881F991F4A95D1F764
:100B900008951F920F920FB60F9211242F933F9337
:100BA0008F939F93AF93BF93809160019091610168
:100BB000A0916201B091630130915F0123E0230FA6
:100BC0002D3720F40196A11DB11D05C026E8230F85
:100BD0000296A11DB11D20935F0180936001909347
:100BE0006101A0936201B0936301809164019091CF
:100BF0006501A0916601B09167010196A11DB11D2B
:100C00008093640190936501A0936601B09367019E
:100C1000BF91AF919F918F913F912F910F900FBEF8
:100C20000F901F9018951F920F920FB60F921124DC
:100C30002F933F934F935F936F937F938F939F93E4
:100C4000AF93BF93EF93FF93E0910201F091030103
:100C50000995FF91EF91BF91AF919F918F917F91F6
:100C60006F915F914F913F912F910F900FBE0F9019
:100C70001F9018951F920F920FB60F9211242F9369
:100C80003F934F935F936F937F938F939F93AF9314
:100C9000BF93EF93FF93E0910001F091010109955B
:100CA000FF91EF91BF91AF919F918F917F916F9144
:100CB0005F914F913F912F910F900FBE0F901F901A
:100CC000189522E331E0FC013183208382819381F6
:100CD000009711F00C94730A0895CF93DF93EC0101
:100CE0000E946106CE01DF91CF910C94730ACF93DD
:100CF000DF93FC01448155816081718187E791E038
:100D00000E948900EC0142E050E06AE571E087E76B
:100D100091E00E9489008C0F9D1FDF91CF91089573
:100D2000CF93DF93009779F0FC0101900020E9F761
:100D30003197AF01481B590BBC0187E791E00E9436
:100D40008900EC0102C0C0E0D0E042E050E06AE57A
:100D500071E087E791E00E9489008C0F9D1FDF9171
:100D6000CF9108958F929F92AF92BF92CF92DF92D0
:100D7000EF92FF920E94A4054B015C018AE0C82E0D
:100D8000D12CE12CF12C0E94A405DC01CB018819A7
:100D90009909AA09BB09883E9340A105B10558F0FD
:100DA00021E0C21AD108E108F10888EE880E83E03C
:100DB000981EA11CB11CC114D104E104F10419F75F
:100DC000FF90EF90DF90CF90BF90AF909F908F906B
:100DD0000895789484B5826084BD84B5816084BDB3
:100DE00085B5826085BD85B5816085BD80916E00C9
:100DF000816080936E0010928100809181008260FA
:100E00008093810080918100816080938100809136
:100E100080008160809380008091B1008460809325
:100E2000B1008091B00081608093B00080917A0021
:100E3000846080937A0080917A00826080937A0047
:100E400080917A00816080937A0080917A00806836
:100E500080937A001092C100E0918701F09188019F
:100E600082E08083E0918301F09184011082E0911F
:100E70008501F091860180E1808310928F01E091DD
:100E80008B01F0918C0186E08083E0918901F091E3
:100E90008A01808180618083E0918901F0918A01DB
:100EA000808188608083E0918901F0918A0180814E
:100EB00080688083E0918901F0918A0180818F7D33
:100EC000808361E0809124020E94DB0161E08091D7
:100ED00024020E948F0180912602909127028F3F69
:100EE0002FEF920789F061E00E94DB0160E08091C2
:100EF00026020E948F010E94B20661E080912602C4
:100F00000E948F010E94B206CFB7F89480916A01C7
:100F1000811127C0EEEAF0E08491EAE9F0E09491D3
:100F2000E82FF0E0EE0FFF1FEA57FF4FA591B491B5
:100F3000EC91E92321F461E08AE00E948F0161E0F5
:100F40008AE00E94DB018CB580618CBD8CB5806429
:100F50008CBD61E08DE00E94DB0161E08BE00E94CE
:100F6000DB0180916A018F5F80936A01CFBF62E4E9
:100F700084E192E00E946D02823109F01CC140E8D8
:100F800061E884E192E00E94170280E49EE0AFEC09
:100F9000B9E180932A0290932B02A0932C02B09384
:100FA0002D024CE666E884E192E00E94170240E4DC
:100FB00067E884E192E00E94170240E068E884E17B
:100FC00092E00E94170240E06EE884E192E00E9405
:100FD000170240E06FE884E192E00E9417026CE0A3
:100FE00084E192E00E946D02482F43606CE884E146
:100FF00092E00E94170244E066EA84E192E00E94D7
:1010000017024FE869E884E192E00E94170241E884
:1010100061E884E192E00E9417028FED93E09093E3
:1010200033028093320260E0809128020E94DB014B
:1010300040E060EC84E192E00E9417028091280277
:10104000909129028230910521F0039721F08FEFD2
:1010500003C080E001C081E09FB7F894882349F085
:10106000813011F482E006C082E08093690180E063
:1010700001C081E020916801822B809368018091FA
:101080006901811103C081E0809369019FBF809154
:101090002802909129028230910519F00397A9F452
:1010A0008FC080E0E82FF0E0EE0FFF1FE050FF4F11
:1010B00021E732E031832083813009F483C08091BD
:1010C0006900836080936900E89A80916F018111C3
:1010D00009C08CE693E090936E0180936D0181E0EE
:1010E00080936F0180916D0190916E0190936C01DE
:1010F00080936B0162E184E192E00E946D02C82F4F
:1011000010923102109230026DE184E192E00E946F
:101110006D02482F4E7F6DE984E192E00E94170234
:101120004C2F62E984E192E00E941702C6FF2DC0B5
:10113000C5FD2BC010922F0210922E02809130021A
:1011400090913102892B11F062E201C063E184E1E8
:1011500092E00E946D02C82FD0E060E184E192E04D
:101160000E946D02482F6DE884E192E00E94170210
:1011700041E861E884E192E00E941702CD2BC1F0C2
:1011800086E391E00E94900613C061E084E192E062
:101190000E946D02863861F040E06DE884E192E0E3
:1011A0000E94170246E861E884E192E00E9417027B
:1011B0000E9485019FCF81E491E00E949006FFCFBD
:1011C00081E070CF809169008C6080936900E99A1A
:1011D0007CCF80913402909135020E94730A8AE399
:1011E00092E00C946106CF93DF93E7E7F1E013827E
:1011F000128288EE93E0A0E0B0E084839583A6831A
:10120000B7838EE091E09183808385EC90E09587B1
:10121000848784EC90E09787868780EC90E0918BC0
:10122000808B81EC90E0938B828B82EC90E0958BAD
:10123000848B86EC90E0978B868B118E128E138EAA
:10124000148EE4E1F2E01382128280E291E0918355
:10125000808380E5848781E0858784E492E09787B6
:1012600086878AE090E0918B808B89E090E0938B79
:10127000828B82E090E0958B848B168A178A108E81
:10128000118E138E128E158E148E178E168E14825A
:10129000158216821782CAE3D2E082E391E0998335
:1012A000888380E090E00E94DE099B838A832FEF91
:1012B0003FEF3F832E839D838C836CE571E084E355
:1012C00092E0DF91CF910C94CA031F93FC01992700
:1012D0008827BC01E89411911032E9F3193010F01D
:1012E0001E30C8F31B3251F01D3249F4689406C019
:1012F0000E948C09610F711D811D911D1191105368
:101300001A30B0F33EF490958095709561957F4FBB
:101310008F4F9F4F1F910895592F482F372F262FFA
:10132000660F771F881F991F660F771F881F991FE9
:10133000620F731F841F951F660F771F881F991FE9
:1013400008952F923F924F925F926F927F928F9269
:101350009F92AF92BF92CF92DF92EF92FF920F9344
:101360001F93CF93DF93CDB7DEB7CA1BDB0B0FB64E
:10137000F894DEBF0FBECDBF09942A88398848880B
:101380005F846E847D848C849B84AA84B984C884A1
:10139000DF80EE80FD800C811B81AA81B981CE0F98
:1013A000D11D0FB6F894DEBF0FBECDBFED0108957D
:1013B000EE0FFF1F0590F491E02D0994CF93DF937A
:1013C0008230910510F482E090E0E0914702F091C4
:1013D000480220E030E0C0E0D0E0309711F14081D9
:1013E000518148175907C0F04817590761F48281A5
:1013F0009381209719F09B838A832BC09093480296
:101400008093470226C02115310519F04217530772
:1014100018F49A01BE01DF01EF010280F381E02D93
:10142000DCCF2115310509F1281B390B243031059A
:1014300090F412968D919C9113976115710521F08E
:10144000FB019383828304C09093480280934702F8
:10145000FD01329644C0FD01E20FF31F8193919389
:10146000225031092D933C933AC02091450230918E
:101470004602232B41F4209106013091070130935D
:101480004602209345022091040130910501211567
:10149000310541F42DB73EB7409108015091090143
:1014A000241B350BE0914502F0914602E217F30749
:1014B000A0F42E1B3F0B2817390778F0AC014E5FC4
:1014C0005F4F2417350748F04E0F5F1F50934602B9
:1014D000409345028193919302C0E0E0F0E0CF0198
:1014E000DF91CF9108950F931F93CF93DF930097D0
:1014F00009F48CC0FC0132971382128200914702DA
:10150000109148020115110581F420813181820F6B
:10151000931F20914502309146022817390779F52B
:10152000F0934602E093450271C0D80140E050E0DC
:10153000AE17BF0750F412962D913C911397AD0151
:101540002115310509F1D901F3CF9D01DA0133836A
:10155000228360817181860F971F8217930769F438
:10156000EC0128813981260F371F2E5F3F4F3183D1
:1015700020838A819B8193838283452B29F4F09376
:101580004802E093470242C01396FC93EE931297F1
:10159000ED01499159919E01240F351FE217F30780
:1015A00071F480819181840F951F029611969C930E
:1015B0008E938281938113969C938E931297E0E091
:1015C000F0E0D80112968D919C911397009719F035
:1015D000F8018C01F6CF8D919C9198012E5F3F4FC1
:1015E000820F931F20914502309146022817390738
:1015F00069F4309729F4109248021092470202C011
:10160000138212821093460200934502DF91CF911C
:101610001F910F910895A0E0B0E0E1E1FBE00C9490
:10162000A509EC01009721F4CB010E94DE09B8C0A6
:10163000FC01E60FF71F9C0122503109E217F30766
:1016400008F4ACC0D9010D911C911197061717072A
:10165000B0F00530110508F49FC0C8010497861743
:10166000970708F499C002501109061B170B019344
:1016700011936D937C93CF010E94730A8DC05B011F
:10168000A01AB10A4C01800E911EA0914702B091A0
:10169000480240E050E0E12CF12C109709F44AC0D8
:1016A000A815B905D1F56D907C901197630182E082
:1016B000C80ED11CCA14DB0480F1A3014A195B09CE
:1016C0006A0182E0C80ED11C1296BC901297139644
:1016D000AC91B5E0CB16D10440F0B282A383518324
:1016E0004083D9016D937C930AC00E5F1F4FC301E5
:1016F000800F911FF90191838083EB2DFA2FE11464
:10170000F10431F0D7011396FC93EE93129744C085
:10171000F0934802E09347023FC08D919C9111974E
:101720004817590708F4AC017D0112960D90BC9141
:10173000A02DB3CF8091450290914602881599055E
:10174000E1F446175707C8F4809104019091050110
:10175000009741F48DB79EB740910801509109015F
:10176000841B950BE817F907C8F4F0934602E09341
:101770004502F901718360830FC0CB010E94DE092D
:101780007C01009759F0A801BE010E94DA0BCE013E
:101790000E94730AC70104C0CE0102C080E090E03D
:1017A000CDB7DEB7EEE00C94C10981E090E0F8948B
:1017B0000C94F30BFB01DC0102C001900D9241502F
:1017C0005040D8F70895FB01DC018D9101908019FC
:1017D0000110D9F3990B0895FB01DC0101900D92E2
:1017E0000020E1F7089510E0CDE5D0E004C0FE014F
:1017F0000E94D8092196CE35D107C9F7F894FFCFBA
:1018000088008800000049028000000000001C01E0
:101810008900B4006301E500C300D70000000000A8
:1018200052030A036903AF02F902DE02B0020000AC
:10183000000061066D066E6577206D736720696E26
:10184000005374617274696E67204C6F5261206638
:0E18500061696C656421002020000D0A000013
:00000001FF

@ -1,494 +1,393 @@
:100000000C945E000C9407040C94E0030C9486009E
:100000000C945E000C943A060C9413060C94860033
:100010000C9486000C9486000C9486000C94860048
:100020000C9486000C9486000C9486000C94860038
:100030000C9486000C9486000C9486000C94860028
:100040000C9496030C9486000C94AB020C948502DD
:100040000C94C9050C9486000C9472050C944C0514
:100050000C9486000C9486000C9486000C94860008
:100060000C9486000C9486000000000024002700F9
:100070002A00010204081020408001020408102018
:10008000010204081020040404040404040402020D
:100090000202020203030303030300000000250021
:1000A00028002B00000000080002010000030407E4
:1000B0000000000000000000ED0AE50A11241FBE48
:1000C000CFEFD8E0DEBFCDBF11E0A0E0B1E0EEE3BE
:1000D000FEE102C005900D92AE36B107D9F722E0DD
:1000E000AEE6B1E001C01D92A237B207E1F710E021
:1000F000CDE5D0E004C02197FE010E94F70CCC357D
:10010000D107C9F70E9418070C94120F0C94000035
:100110000E94F40EEF92FF920F931F93CF93DF9301
:10012000EC01FB0184819581E080F1800C811D81CF
:10013000E114F104B1F00097B9F0080F191FB801EC
:10014000CE010E94E001882361F0288139818C81F1
:100150009D81B701820F931F0E940B0F1D830C839B
:1001600003C0CE010E940702CE01DF91CF911F9103
:100170000F91FF90EF900895CF92DF92EF92FF9250
:100180000F931F93CF93DF936C017A018B01C0E033
:10019000D0E0CE15DF0589F0D8016D918D01D60133
:1001A000ED91FC910190F081E02DC6010995892B1C
:1001B00011F47E0102C02196ECCFC701DF91CF91EF
:1001C0001F910F91FF90EF90DF90CF900895FC0169
:1001D000538D448D252F30E0842F90E0821B930BAC
:1001E000541710F0CF96089501970895FC01918D52
:1001F000828D981761F0828DDF01A80FB11D5D9689
:100200008C91928D9F5F9F73928F90E008958FEFF6
:100210009FEF0895FC01918D828D981731F0828DAA
:10022000E80FF11D858D90E008958FEF9FEF089501
:10023000FC01918D228D892F90E0805C9F4F821B65
:1002400091098F739927089580EA91E00E9418011F
:1002500021E0892B09F420E0822F0895FC01848D90
:10026000DF01A80FB11DA35ABF4F2C91848D90E0E0
:1002700001968F739927848FA689B7892C93A089BB
:10028000B1898C9180648C93938D848D981306C072
:100290000288F389E02D80818F7D80830895EF921D
:1002A000FF920F931F93CF93DF93EC0181E0888F30
:1002B0009B8D8C8D981305C0E889F989808185FD17
:1002C00024C0F62E0B8D10E00F5F1F4F0F73112708
:1002D000E02E8C8DE8120CC00FB607FCFACFE8892F
:1002E000F989808185FFF5CFCE010E942E01F1CFE3
:1002F0008B8DFE01E80FF11DE35AFF4FF0820B8F4B
:10030000EA89FB898081806207C0EE89FF8960836A
:10031000E889F98980818064808381E090E0DF91C1
:10032000CF911F910F91FF90EF900895CF93DF939E
:10033000EC01888D8823C9F0EA89FB89808185FDDD
:1003400005C0A889B9898C9186FD0FC00FB607FC3E
:10035000F5CF808185FFF2CFA889B9898C9185FF7F
:10036000EDCFCE010E942E01E7CFDF91CF9108950E
:1003700080E090E0892B29F00E94240181110C94E7
:100380000000089508950895CF93DF931F92CDB78D
:10039000DEB76983DC01ED91FC910280F381E02DF1
:1003A00041E050E0BE016F5F7F4F09950F90DF91F4
:1003B000CF910895089580E090E008950C94B806D8
:1003C0000F931F93CF93DF93EC018881998100975E
:1003D00029F02A813B812617370788F48B016F5F4C
:1003E0007F4F0E942A0E009761F0998388831B83B8
:1003F0000A832C813D81232B11F4FC01108281E0C2
:1004000001C080E0DF91CF911F910F910895CF93AC
:10041000DF93EC0188819981009711F00E94920D81
:10042000198218821D821C821B821A82DF91CF9151
:100430000895EF92FF920F931F93CF93DF93EC01F8
:100440007B018A01BA010E94E001811104C0CE0142
:100450000E94070207C01D830C83B7018881998120
:100460000E940B0FCE01DF91CF911F910F91FF9052
:10047000EF900895CF93DF93EC016115710559F06A
:10048000FB0101900020E9F73197AF01461B570BA4
:100490000E94190202C00E940702CE01DF91CF9193
:1004A0000895FC01808191810C94920DFB01DC0187
:1004B00011961C921E9213961C921E9212971596DC
:1004C0001C921E9214978617970749F060817181DC
:1004D0006115710521F0448155810C94190208952C
:1004E000FC0111821082138212821582148261151E
:1004F000710551F0FB0101900020E9F73197AF0140
:10050000461B570B0C94190208951F920F920FB6B9
:100510000F9211242F933F934F935F936F937F9389
:100520008F939F93AF93BF93EF93FF9380EA91E0F4
:100530000E942E01FF91EF91BF91AF919F918F91FA
:100540007F916F915F914F913F912F910F900FBECF
:100550000F901F9018951F920F920FB60F921124B3
:100560002F938F939F93EF93FF93E091B001F091BE
:10057000B1018081E091B601F091B70182FD12C016
:1005800090818091B9018F5F8F732091BA0182179A
:1005900051F0E091B901F0E0E056FE4F958F809365
:1005A000B90101C08081FF91EF919F918F912F91AF
:1005B0000F900FBE0F901F90189590E0FC01EC5526
:1005C000FF4F3491FC01EE58FF4F2491FC01EA5794
:1005D000FF4FE491EE2309F43BC0332339F133306C
:1005E00091F038F43130A9F0323001F584B58F7DC7
:1005F00012C0373091F03830A1F03430B9F4809126
:1006000080008F7D03C0809180008F778093800071
:100610000DC084B58F7784BD09C08091B0008F77FD
:1006200003C08091B0008F7D8093B000F0E0EE0FAA
:10063000FF1FE656FF4FA591B4918FB7F894EC9148
:10064000611103C020952E2301C02E2B2C938FBF48
:100650000895CF93DF9390E0FC01EE58FF4F249173
:10066000FC01EA57FF4F8491882361F190E0880FE5
:10067000991FFC01E859FF4FC591D491FC01E65642
:10068000FF4FA591B491611109C09FB7F89488817B
:10069000209582238883EC912E230BC0623061F475
:1006A0009FB7F8943881822F809583238883EC91BB
:1006B0002E2B2C939FBF06C08FB7F894E8812E2B6A
:1006C00028838FBFDF91CF9108953FB7F894809131
:1006D0009C0190919D01A0919E01B0919F0126B532
:1006E000A89B05C02F3F19F00196A11DB11D3FBF6A
:1006F000BA2FA92F982F8827820F911DA11DB11DF8
:10070000BC01CD0142E0660F771F881F991F4A95F3
:10071000D1F708952FB7F8946091980170919901DD
:1007200080919A0190919B012FBF08951F920F9283
:100730000FB60F9211242F933F938F939F93AF93F4
:10074000BF938091980190919901A0919A01B091E5
:100750009B013091970123E0230F2D3720F4019660
:10076000A11DB11D05C026E8230F0296A11DB11DD4
:10077000209397018093980190939901A0939A01F7
:10078000B0939B0180919C0190919D01A0919E014D
:10079000B0919F010196A11DB11D80939C01909382
:1007A0009D01A0939E01B0939F01BF91AF919F9136
:1007B0008F913F912F910F900FBE0F901F90189522
:1007C0001F920F920FB60F9211242F933F934F93C6
:1007D0005F936F937F938F939F93AF93BF93EF93A9
:1007E000FF93E0910201F09103010995FF91EF91D0
:1007F000BF91AF919F918F917F916F915F914F9139
:100800003F912F910F900FBE0F901F9018951F9240
:100810000F920FB60F9211242F933F934F935F9334
:100820006F937F938F939F93AF93BF93EF93FF93B8
:10083000E0910001F09101010995FF91EF91BF91C5
:10084000AF919F918F917F916F915F914F913F9168
:100850002F910F900FBE0F901F901895EF92FF925F
:100860001F93CF93DF931F92CDB7DEB77C01162F76
:1008700060E0FC01808949830E94DD02F701548514
:10088000358580916F014981882399F02FB7F894BD
:1008900080916F01813059F48DB3809396019DB39F
:1008A00080916E01809589238DBB2FBF02C020935C
:1008B00096015CBD3DBD1EBD00000DB407FEFDCF21
:1008C0008EB54EBD00000DB407FEFDCF1EB5809164
:1008D0006F01882361F08FB7F89420916F01909198
:1008E0009601213019F49DBB8FBF01C09FBF61E00D
:1008F000F70180890E94DD02812F0F90DF91CF9157
:100900001F91FF90EF9008956F7740E00C942E04B4
:10091000CF9362E18DE392E00E948404C82F482FB8
:1009200062E98DE392E00E942E04C5FD2DC0109275
:100930005802109257028091590290915A02892BC5
:1009400011F062E201C063E18DE392E00E94840451
:10095000C82F60E18DE392E00E948404482F6DE887
:100960008DE392E00E942E04E0915B02F0915C0224
:10097000309719F08C2F90E0099540E06DE88DE3F9
:1009800092E0CF910C942E04CF910895EF92FF92B4
:100990001F93CF93DF931F92CDB7DEB77C01DC01AD
:1009A000ED91FC910084F185E02D0995892B99F05A
:1009B0006DE0C7010E948404482F60E0C7014983AD
:1009C0000E948404182F49816DE8C7010E942E04FB
:1009D000812F90E002C08FEF9FEF0F90DF91CF91BA
:1009E0001F91FF90EF900895CF93DF93EC01E88182
:1009F000F9810084F185E02D0995892B59F08A8DC4
:100A00009B8D01969B8F8A8F60E0CE010E948404AB
:100A100090E002C08FEF9FEFDF91CF910895CF93C9
:100A2000DF93EC0163E10E948404282F30E08A8D7B
:100A30009B8DA901481B590BCA01DF91CF910895E5
:100A4000BF92CF92DF92EF92FF920F931F93CF93BB
:100A5000DF93CDB7DEB72C970FB6F894DEBF0FBE8D
:100A6000CDBF6AE671E0CE0101960E9470028DE36F
:100A700092E00E940F05892BF9F08DE392E00E942D
:100A8000F4048F8318860D811E810F5F1F4FB801FC
:100A9000CE0101960E94E001882349F329813A8121
:100AA0008D819E81BE01695F7F4F820F931F0E94DF
:100AB0000B0F1E830D83DBCF6BE671E0CE01079633
:100AC0000E947002BE016F5F7F4FCE0107960E94A9
:100AD0008A000E94B806CE0107960E945102ED805E
:100AE000FE80809161029091620209811A81E8166C
:100AF000F90631F560915D0270915E0201151105F4
:100B000019F061157105C1F46115710549F0E11421
:100B1000F10409F4B7C0FB018081811111C0B2C09A
:100B20000115110509F4AEC0E114F10409F4AAC0DD
:100B3000F801808190E0BAC0C8010E94020FB6C0DF
:100B40000115110539F0A701B8018DE592E00E9469
:100B5000190204C08DE592E00E9407020D811E81FA
:100B60000330110509F056C089819A81009719F068
:100B70000E94BB0B03C060E070E0CB0120916902D2
:100B800030916A020091650210916602F80180E0DE
:100B900090E0281739070CF475C041915191461720
:100BA000570779F48F3FFFEF9F0709F46BC0DC0113
:100BB00011967C01EE0CFF1C60E070E020E030E05C
:100BC00015C00196E6CFFD01E20FF31F4E175F0738
:100BD000C4F0FB01EE0DFF1DE00FF11F42815381B8
:100BE000518340832F5F3F4F6E5F7F4F409169027B
:100BF00050916A02FA013196E81BF90B2E173F0754
:100C000014F38A1B9B0B480F591F50936A024093A1
:100C1000690238C0E0907001F09071010330110555
:100C200020F4680103E010E003C083E0C82ED12C5B
:100C30006AE671E0CE0107960E9470028D819E8166
:100C4000C816D906B8F48017910708F48C01E98119
:100C5000FA81E00FF11FB080108269817A816C0DFA
:100C60007D1DCE0107960E943A02A981BA81A00F8C
:100C7000B11FBC92CE010796F7010995CE010796E8
:100C80000E945102CE0101960E9451022C960FB68D
:100C9000F894DEBF0FBECDBFDF91CF911F910F91B2
:100CA000FF90EF90DF90CF90BF900895892B09F0CF
:100CB0004ACFE8CF8F929F92AF92BF92CF92DF92AE
:100CC000FF920F931F93CF93DF931F92CDB7DEB7A1
:100CD0006C01B62E4A0162E279830E948404F82EE8
:100CE00090E09C01280D391D79812F3F310531F0AD
:100CF00028F02FEF30E04901881A990A0B2D172FA1
:100D00005801A80CB91C0A151B0541F0F8014191C6
:100D10008F0160E8C6010E942E04F5CF482D4F0DCB
:100D200062EAC6010E942E04C4010F90DF91CF91A8
:100D30001F910F91FF90DF90CF90BF90AF909F9049
:100D40008F90089526E331E0FC0131832083828176
:100D50009381009711F00C94920D0895CF93DF9337
:100D6000EC010E94A206CE01DF91CF910C94920D6E
:100D7000CF93DF93FC01448155816081718180EACA
:100D800091E00E94BC00EC0142E050E068E671E0B6
:100D900080EA91E00E94BC008C0F9D1FDF91CF91F3
:100DA00008958F929F92AF92BF92CF92DF92EF926F
:100DB000FF920E9465034B015C018AE0C82ED12C92
:100DC000E12CF12C0E946503DC01CB018819990903
:100DD000AA09BB09883E9340A105B10558F021E05E
:100DE000C21AD108E108F10888EE880E83E0981E47
:100DF000A11CB11CC114D104E104F10419F7FF9046
:100E0000EF90DF90CF90BF90AF909F908F9008951C
:100E100010925A02109259026DE18DE392E00E9405
:100E20008404482F4E7F6DE98DE392E00C942E04EC
:100E3000CF93DF93CDB7DEB7C754D1090FB6F8947F
:100E4000DEBF0FBECDBF789484B5826084BD84B50B
:100E5000816084BD85B5826085BD85B5816085BDB5
:100E600080916E00816080936E001092810080916D
:100E700081008260809381008091810081608093F5
:100E80008100809180008160809380008091B1001A
:100E900084608093B1008091B00081608093B00045
:100EA00080917A00846080937A0080917A008260D9
:100EB00080937A0080917A00816080937A0080919B
:100EC0007A00806880937A001092C100E091B001AE
:100ED000F091B10182E08083E091AC01F091AD012D
:100EE0001082E091AE01F091AF0180E18083109219
:100EF000B801E091B401F091B50186E08083E09102
:100F0000B201F091B301808180618083E091B201F0
:100F1000F091B301808188608083E091B201F0910B
:100F2000B301808180688083E091B201F091B301C8
:100F300080818F7D808361E080914D020E94290332
:100F400061E080914D020E94DD0280914F029091FC
:100F500050028F3F2FEF920789F061E00E94290332
:100F600060E080914F020E94DD020E94D10661E0A4
:100F700080914F020E94DD020E94D1061FB7F894B3
:100F800080917201811127C0E0E9F0E08491ECE7E3
:100F9000F0E09491E82FF0E0EE0FFF1FE859FF4FCB
:100FA000A591B491EC91E92321F461E08AE00E94DB
:100FB000DD0261E08AE00E9429038CB580618CBD6E
:100FC0008CB580648CBD61E08DE00E94290361E0F6
:100FD0008BE00E942903809172018F5F80937201E0
:100FE0001FBF62E48DE392E00E948404823109F025
:100FF000D2C240E861E88DE392E00E942E0480E4D2
:101000009EE0AFECB9E18093530290935402A09319
:101010005502B09356024CE666E88DE392E00E94DA
:101020002E0440E467E88DE392E00E942E0440E045
:1010300068E88DE392E00E942E0440E06EE88DE3C4
:1010400092E00E942E0440E06FE88DE392E00E945F
:101050002E046CE08DE392E00E948404482F4360EC
:101060006CE88DE392E00E942E0444E066EA8DE392
:1010700092E00E942E044FE869E88DE392E00E941E
:101080002E0441E861E88DE392E00E942E0480E2A4
:1010900095E090935C0280935B0260E08091510246
:1010A0000E94290340E060EC8DE392E00E942E0450
:1010B00080915102909152028230910521F0039764
:1010C00021F08FEF03C080E001C081E09FB7F8946A
:1010D000882349F0813011F482E006C082E08093D9
:1010E0006F0180E001C081E020916E01822B80932E
:1010F0006E0180916F01811103C081E080936F01C7
:101100009FBF80915102909152028230910519F057
:101110000397A9F451C280E0E82FF0E0EE0FFF1F23
:10112000E050FF4F28E834E031832083813009F418
:1011300045C280916900836080936900E89A80913C
:101140007501811109C08EED91E090937401809337
:10115000730181E080937501809173019091740116
:101160009093710180937001B0ED8B2EB7E09B2EB0
:10117000A12CB12C14E8212E13E0312E412C512C3E
:1011800080918E0181110DC00E948A0360938A01B3
:1011900070938B0180938C0190938D0181E08093FB
:1011A0008E010E948A0300918A0110918B01209187
:1011B0008C0130918D01DC01CB01801B910BA20BC6
:1011C000B30B89359B41A105B10508F4E1C10E942B
:1011D000AD0B22961FAE1EAE229724961FAE1EAEFA
:1011E000249726961FAE1EAE2697A50194010E9455
:1011F0005D0C2AE0AE014F5F5F4F0E94ED0BBE0118
:101200006F5F7F4FCE01805C9F4F0E943A026AE37E
:1012100071E0CE01CA960E947002BE01605C7F4FF1
:10122000CE01CA960E948A008C010E94AD0BA201D9
:1012300091010E945D0C6B017C0124E6C20ED11C61
:10124000E11CF11C1CA21BA21EA21DA218A61FA21B
:101250004AE0BE016F5F7F4FC6010E94E20BBE01F4
:101260006F5F7F4FCE0183960E943A02BE016D5D93
:101270007F4FCE0101960E945602B801CE01019621
:101280000E948A00BC01CE01C4960E945602CE0183
:1012900001960E945102CE0183960E945102289627
:1012A000DFAECEAE28972091690230916A02A90183
:1012B0004E5F5F4F00916502109166028091670258
:1012C00090916802801B910B9595879584179507DF
:1012D0000CF044C0C9010196880F991F8417950727
:1012E0000CF4CA01281739073CF09C012150310940
:1012F00030936A02209369026C01CC0CDD1C8138AA
:101300009F4310F4C60102C08FEF9FEF0E94FD0CB7
:101310007C01C80ED91E6090690270906A02D801E3
:10132000FC0180E090E06816790634F02D913D9143
:10133000219331930196F7CF0115110519F0C801DA
:101340000E94920DF0926602E0926502D0926802CD
:10135000C092670270926A026092690220916502EF
:10136000309166028091690290916A020091670251
:1013700010916802021B130B15950795081B190B9A
:10138000023011051CF40150110902C001E010E007
:101390007801EE0CFF1C0196880F991FA701BE0172
:1013A0006A5B7F4F820F931F0E94F90E41E050E06D
:1013B000401B510B440F551F66E470E06C0F7D1FFE
:1013C0006E0D7F1D80916502909166020E94F90E5C
:1013D0008091690290916A02019690936A028093CB
:1013E000690241E861E88DE392E00E942E04C12C7D
:1013F000D12C760100E010E07724739489E891E025
:101400009CA38BA3BE016C5C7F4FCE0185960E948E
:1014100056021CA70BA78091810181110CC00E946C
:101420008A0360937D0170937E0180937F01909386
:101430008001709281010E948A0320917D01309188
:101440007E0140917F0150918001DC01CB01821B24
:10145000930BA40BB50BC816D906EA06FB0608F0D9
:1014600071C041E861E88DE392E00E942E040E9481
:10147000080740E06DE88DE392E00E942E0440E012
:1014800062EA8DE392E00E942E04E0913D02F09129
:101490003E0249A55AA56DA17EA10280F381E02DEF
:1014A0008DE392E0099543E861E88DE392E00E94C4
:1014B0002E0462E18DE392E00E94840483FFF9CF61
:1014C00048E062E98DE392E00E942E048BA59CA582
:1014D0000797C1F50E94080745E861E88DE392E0AF
:1014E0000E942E040E94AD0B1FA61EA619AA18AAC0
:1014F0001BAA1AAAA50194010E945D0C2AE0AE0164
:101500004F5F5F4F0E94ED0BBE016F5F7F4FCE01BB
:101510008E960E943A026AE471E0CE0101960E9422
:101520007002BE01625D7F4FCE0101960E948A006B
:101530000E94B806CE0101960E945102CE018E96FD
:101540000E945102CE0185960E9451020F5F1F4FEB
:1015500094E6C90ED11CE11CF11C0830110509F0FC
:101560004DCFCE01C4960E945102CE01CA960E9470
:101570005102CE01805C9F4F0E9451020E948A035B
:1015800060938A0170938B0180938C0190938D01FD
:101590000E94B801F5CD45E150E062E571E080EAD6
:1015A00091E00E94BC0042E050E068E671E080EA11
:1015B00091E00E94BC00FFCF81E0AECD8091690038
:1015C0008C6080936900E99ABACD8DE592E00E9423
:1015D000510283E692E00C94A206CF93DF93E0EAF7
:1015E000F1E01382128288EE93E0A0E0B0E0848301
:1015F0009583A683B78382E191E09183808385EC14
:1016000090E09587848784EC90E09787868780ECCC
:1016100090E0918B808B81EC90E0938B828B82ECBD
:1016200090E0958B848B86EC90E0978B868B118E67
:10163000128E138E148EEDE3F2E01382128284E296
:1016400091E09183808380E5848781E085878DE6C2
:1016500092E0978786878AE090E0918B808B89E083
:1016600090E0938B828B82E090E0958B848B168A3E
:10167000178A108E118E138E128E158E148E178E61
:10168000168E1482158216821782C3E6D2E086E394
:1016900091E09983888380E090E00E94FD0C9B8319
:1016A0008A832FEF3FEF3F832E839D838C836AE6EF
:1016B00071E08DE592E0DF91CF910C9470028F92F2
:1016C0009F92AF92BF92CF92DF92EF92FF92CF9311
:1016D000DF93EC01688179818A819B8161157105B5
:1016E0008105910521F464E279ED8BE597E02DE128
:1016F00033EF41E050E00E945D0C49015A019B012B
:10170000AC01A7EAB1E40E947C0C6B017C01ACEE59
:10171000B4EFA50194010E948A0CDC01CB018C0D71
:101720009D1DAE1DBF1DB7FF03C00197A109B048A5
:1017300088839983AA83BB83BC01CD019F77DF9106
:10174000CF91FF90EF90DF90CF90BF90AF909F90A0
:101750008F9008950E945F0B089584E091E00E94AD
:101760005F0B089560930401709305018093060157
:101770009093070108951F93FC0199278827BC01C6
:10178000E89411911032E9F3193010F01E30C8F3CB
:101790001B3251F01D3249F4689406C00E94FC0BC4
:1017A000610F711D811D911D119110531A30B0F3FD
:1017B0003EF490958095709561957F4F8F4F9F4F28
:1017C0001F910895BB274A3031F4992322F4BDE2DA
:1017D000909581959F4F0C94340CBB272A3051F47F
:1017E000992342F4BDE290958095709561957F4F65
:1017F0008F4F9F4F0C94120C592F482F372F262FA5
:10180000660F771F881F991F660F771F881F991F04
:10181000620F731F841F951F660F771F881F991F04
:101820000895BB27FA01A62F62177105810591055E
:10183000330B30FB66F0AA27660F771F881F991FAE
:10184000AA1FA21710F0A21B63953850A9F7A05D3C
:10185000AA3308F0A95DA19336F7B111B1931082B4
:10186000CA010C944D0CBB27FB015527AA27880FF2
:10187000991FAA1FA41710F0A41B83955051B9F704
:10188000A05DAA3308F0A95DA193009779F7B11183
:10189000B1931192CB010C944D0CDC01FC01672F2C
:1018A00071917723E1F7329704C07C916D93708337
:1018B0006291AE17BF07C8F30895052E97FB1EF47B
:1018C00000940E94740C57FD07D00E94C60C07FCC0
:1018D00003D04EF40C94740C50954095309521959E
:1018E0003F4F4F4F5F4F089590958095709561954C
:1018F0007F4F8F4F9F4F08950E94E80CA59F900D3A
:10190000B49F900DA49F800D911D11240895B7FFE1
:101910000C947C0C0E947C0C821B930B08952F92DC
:101920003F924F925F926F927F928F929F92AF926F
:10193000BF92CF92DF92EF92FF920F931F93CF93BC
:10194000DF93CDB7DEB7CA1BDB0B0FB6F894DEBF53
:101950000FBECDBF09942A88398848885F846E8479
:101960007D848C849B84AA84B984C884DF80EE80C3
:10197000FD800C811B81AA81B981CE0FD11D0FB6CC
:10198000F894DEBF0FBECDBFED010895A1E21A2E7F
:10199000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F13
:1019A000A217B307E407F50720F0A21BB30BE40B63
:1019B000F50B661F771F881F991F1A9469F76095AA
:1019C0007095809590959B01AC01BD01CF01089564
:1019D000A29FB001B39FC001A39F700D811D112470
:1019E000911DB29F700D811D1124911D0895EE0F60
:1019F000FF1F0590F491E02D0994CF93DF9382307F
:101A0000910510F482E090E0E0917002F091710293
:101A100020E030E0C0E0D0E0309711F1408151810A
:101A200048175907C0F04817590761F4828193811C
:101A3000209719F09B838A832BC090937102809327
:101A4000700226C02115310519F04217530718F40A
:101A50009A01BE01DF01EF010280F381E02DDCCFAE
:101A60002115310509F1281B390B2430310590F47B
:101A700012968D919C9113976115710521F0FB01D0
:101A80009383828304C09093710280937002FD015E
:101A9000329644C0FD01E20FF31F819391932250CF
:101AA00031092D933C933AC020916E0230916F0220
:101AB000232B41F420910A0130910B0130936F02E6
:101AC00020936E0220910801309109012115310502
:101AD00041F42DB73EB740910C0150910D01241BEC
:101AE000350BE0916E02F0916F02E217F307A0F45C
:101AF0002E1B3F0B2817390778F0AC014E5F5F4F64
:101B00002417350748F04E0F5F1F50936F02409324
:101B10006E028193919302C0E0E0F0E0CF01DF918B
:101B2000CF9108950F931F93CF93DF93009709F4FC
:101B30008CC0FC01329713821282009170021091C6
:101B400071020115110581F420813181820F931FEB
:101B500020916E0230916F022817390779F5F093C2
:101B60006F02E0936E0271C0D80140E050E0AE1702
:101B7000BF0750F412962D913C911397AD0121159A
:101B8000310509F1D901F3CF9D01DA0133832283B5
:101B900060817181860F971F8217930769F4EC01AA
:101BA00028813981260F371F2E5F3F4F31832083D5
:101BB0008A819B8193838283452B29F4F093710260
:101BC000E093700242C01396FC93EE931297ED01DE
:101BD000499159919E01240F351FE217F30771F4C3
:101BE00080819181840F951F029611969C938E930C
:101BF0008281938113969C938E931297E0E0F0E09C
:101C0000D80112968D919C911397009719F0F801C5
:101C10008C01F6CF8D919C9198012E5F3F4F820FE2
:101C2000931F20916E0230916F022817390769F4D3
:101C3000309729F4109271021092700202C0138240
:101C4000128210936F0200936E02DF91CF911F9169
:101C50000F910895A0E0B0E0E0E3FEE00C94930C57
:101C6000EC01009721F4CB010E94FD0CB8C0FC01EF
:101C7000E60FF71F9C0122503109E217F30708F421
:101C8000ACC0D9010D911C91119706171707B0F040
:101C90000530110508F49FC0C801049786179707FF
:101CA00008F499C002501109061B170B01931193F8
:101CB0006D937C93CF010E94920D8DC05B01A01AA1
:101CC000B10A4C01800E911EA0917002B091710278
:101CD00040E050E0E12CF12C109709F44AC0A8151F
:101CE000B905D1F56D907C901197630182E0C80E23
:101CF000D11CCA14DB0480F1A3014A195B096A01F3
:101D000082E0C80ED11C1296BC9012971396AC912B
:101D1000B5E0CB16D10440F0B282A3835183408357
:101D2000D9016D937C930AC00E5F1F4FC301800FD2
:101D3000911FF90191838083EB2DFA2FE114F104B7
:101D400031F0D7011396FC93EE93129744C0F093B1
:101D50007102E09370023FC08D919C9111974817DA
:101D6000590708F4AC017D0112960D90BC91A02D8D
:101D7000B3CF80916E0290916F0288159905E1F4BE
:101D800046175707C8F48091080190910901009700
:101D900041F48DB79EB740910C0150910D01841B09
:101DA000950BE817F907C8F4F0936F02E0936E0201
:101DB000F901718360830FC0CB010E94FD0C7C018F
:101DC000009759F0A801BE010E94F90ECE010E94B1
:101DD000920DC70104C0CE0102C080E090E0CDB7F3
:101DE000DEB7EEE00C94AF0C81E090E0F8940C9438
:101DF000120FFB01DC0102C001900D9241505040D6
:101E0000D8F70895FB01DC018D9101908019011034
:101E1000D9F3990B0895FB01DC0101900D9200208C
:101E2000E1F7089510E0CDE5D0E004C0FE010E9486
:0E1E3000F70C2196CE35D107C9F7F894FFCFF5
:101E3E00C201C20101000000000072028000000019
:101E4E0000004F01BC00E70096011801F6000A01E0
:101E5E0000000000C4015A06DB01C3010F05F404A3
:101E6E00C60400000000A206AE0668656C6C6F200A
:101E7E00736F636B65742121210073656E64206F2F
:101E8E006B005374617274696E67204C6F526120DF
:0E1E9E006661696C656421000D0A0020200059
:100060000C9486000C9486000000000025002800F7
:100070002B0000000008000201000003040700003C
:1000800000000000000000000000240027002A00FB
:10009000010204081020408001020408102001021F
:1000A00004081020040404040404040402020202EC
:1000B0000202030303030303F308E90811241FBE2C
:1000C000CFEFD8E0DEBFCDBF22E0AEE5B1E001C0AA
:1000D0001D92A934B207E1F711E0A0E0B1E0E0E041
:1000E000F8E102C005900D92AE35B107D9F710E0E6
:1000F000CDE5D0E004C02197FE010E94D809CC359F
:10010000D107C9F70E94E9060C94F30B0C94000088
:100110000895CF92DF92EF92FF920F931F93CF93A8
:10012000DF936C017A018B01C0E0D0E0CE15DF05D2
:1001300089F0D8016D918D01D601ED91FC9101906E
:10014000F081E02DC6010995892B11F47E0102C0D2
:100150002196ECCFC701DF91CF911F910F91FF90B6
:10016000EF90DF90CF900895FC01538D448D252FA3
:1001700030E0842F90E0821B930B541710F0CF9641
:10018000089501970895FC01918D828D981761F073
:10019000828DDF01A80FB11D5D968C91928D9F5FBE
:1001A0009F73928F90E008958FEF9FEF0895FC0169
:1001B000918D828D981731F0828DE80FF11D858D1C
:1001C00090E008958FEF9FEF0895FC01918D228DAF
:1001D000892F90E0805C9F4F821B91098F73992734
:1001E000089587E791E00E94E50021E0892B09F45A
:1001F00020E0822F0895FC01848DDF01A80FB11D3E
:10020000A35ABF4F2C91848D90E001968F7399274C
:10021000848FA689B7892C93A089B1898C91806439
:100220008C93938D848D981306C00288F389E02DFA
:1002300080818F7D80830895EF92FF920F931F93AB
:10024000CF93DF93EC0181E0888F9B8D8C8D981389
:1002500005C0E889F989808185FD24C0F62E0B8DC3
:1002600010E00F5F1F4F0F731127E02E8C8DE812E7
:100270000CC00FB607FCFACFE889F989808185FFA9
:10028000F5CFCE010E94FB00F1CF8B8DFE01E80F70
:10029000F11DE35AFF4FF0820B8FEA89FB898081C1
:1002A000806207C0EE89FF896083E889F9898081CF
:1002B0008064808381E090E0DF91CF911F910F9166
:1002C000FF90EF900895CF93DF93EC01888D882302
:1002D000C9F0EA89FB89808185FD05C0A889B989B3
:1002E0008C9186FD0FC00FB607FCF5CF808185FF8E
:1002F000F2CFA889B9898C9185FFEDCFCE010E94FC
:10030000FB00E7CFDF91CF91089580E090E0892B4B
:1003100029F00E94F10081110C940000089590E0F2
:10032000FC01EE58FF4F3491FC01E057FF4F249140
:10033000FC01EC55FF4FE491EE2309F43BC033235D
:1003400039F1333091F038F43130A9F0323001F521
:1003500084B58F7D12C0373091F03830A1F0343041
:10036000B9F4809180008F7D03C0809180008F77E9
:10037000809380000DC084B58F7784BD09C08091C3
:10038000B0008F7703C08091B0008F7D8093B00064
:10039000F0E0EE0FFF1FE859FF4FA591B4918FB722
:1003A000F894EC91611103C020952E2301C02E2BEF
:1003B0002C938FBF0895CF93DF9390E0FC01E0571B
:1003C000FF4F2491FC01EC55FF4F8491882361F18C
:1003D00090E0880F991FFC01EA57FF4FC591D49117
:1003E000FC01E859FF4FA591B491611109C09FB775
:1003F000F8948881209582238883EC912E230BC06A
:10040000623061F49FB7F8943881822F80958323FE
:100410008883EC912E2B2C939FBF06C08FB7F89446
:10042000E8812E2B28838FBFDF91CF910895EF9223
:10043000FF921F93CF93DF931F92CDB7DEB77C015E
:10044000162F60E0FC01808949830E948F01F7012B
:1004500054853585809169014981882399F02FB7AA
:10046000F89480916901813059F48DB380935E01D5
:100470009DB380916801809589238DBB2FBF02C0F9
:1004800020935E015CBD3DBD1EBD00000DB407FEA6
:10049000FDCF8EB54EBD00000DB407FEFDCF1EB5DD
:1004A00080916901882361F08FB7F89420916901E8
:1004B00090915E01213019F49DBB8FBF01C09FBF99
:1004C00061E0F70180890E948F01812F0F90DF91F9
:1004D000CF911F91FF90EF9008956F7740E00C94BB
:1004E0001702CF9362E184E192E00E946D02C82F6F
:1004F000482F62E984E192E00E941702C5FD2DC0F9
:1005000010922F0210922E028091300290913102AF
:10051000892B11F062E201C063E184E192E00E9464
:100520006D02C82F60E184E192E00E946D02482FC5
:100530006DE884E192E00E941702E0913202F091AE
:100540003302309719F08C2F90E0099540E06DE868
:1005500084E192E0CF910C941702CF910895089511
:10056000EF92FF921F93CF93DF931F92CDB7DEB729
:100570007C01DC01ED91FC910084F185E02D099571
:10058000892B99F06DE0C7010E946D02482F60E051
:10059000C70149830E946D02182F49816DE8C70188
:1005A0000E941702812F90E002C08FEF9FEF0F9003
:1005B000DF91CF911F91FF90EF900895CF93DF933C
:1005C000EC01E881F9810084F185E02D0995892B02
:1005D00059F08A8D9B8D01969B8F8A8F60E0CE01AA
:1005E0000E946D0290E002C08FEF9FEFDF91CF91EC
:1005F0000895CF93DF93EC0163E10E946D02282FF1
:1006000030E08A8D9B8DA901481B590BCA01DF91EF
:10061000CF9108958F929F92AF92BF92CF92DF9227
:10062000FF920F931F93CF93DF931F92CDB7DEB747
:100630006C01B62E4A0162E279830E946D02F82EA7
:1006400090E09C01280D391D79812F3F310531F053
:1006500028F02FEF30E04901881A990A0B2D172F47
:100660005801A80CB91C0A151B0541F0F80141916D
:100670008F0160E8C6010E941702F5CF482D4F0D8B
:1006800062EAC6010E941702C4010F90DF91CF9168
:100690001F910F91FF90DF90CF90BF90AF909F90F0
:1006A0008F900895CF93DF931F92CDB7DEB7698304
:1006B000DC01ED91FC910280F381E02D41E050E0FE
:1006C000BE016F5F7F4F09950F90DF91CF91089525
:1006D000089580E090E008950C9477060E94D50B71
:1006E0000F931F93CF93DF93EC018881998100973B
:1006F00029F02A813B812617370788F48B016F5F29
:100700007F4F0E940B0B009761F0998388831B83B6
:100710000A832C813D81232B11F4FC01108281E09E
:1007200001C080E0DF91CF911F910F910895CF9389
:10073000DF93EC0188819981009711F00E94730A80
:10074000198218821D821C821B821A82DF91CF912E
:100750000895EF92FF920F931F93CF93DF93EC01D5
:100760007B018A01BA010E947003811104C0CE018D
:100770000E94970307C01D830C83B701888199816C
:100780000E94EC0BCE01DF91CF911F910F91FF9052
:10079000EF900895FC01118210821382128215825B
:1007A00014826115710551F0FB0101900020E9F7F9
:1007B0003197AF01461B570B0C94A9030895BF92C4
:1007C000CF92DF92EF92FF920F931F93CF93DF931D
:1007D000CDB7DEB72C970FB6F894DEBF0FBECDBFF6
:1007E0006CE571E0CE0101960E94CA0384E192E0BB
:1007F0000E94F902892BF9F084E192E00E94DE0266
:100800008F8318860D811E810F5F1F4FB801CE01A7
:1008100001960E947003882349F329813A818D81D2
:100820009E81BE01695F7F4F820F931F0E94EC0B78
:100830001E830D83DBCF67E571E0CE0107960E9432
:10084000CA038D819E81E980FA800B851C85E114A5
:10085000F10409F418C10097A9F0080F191FB80195
:10086000CE0107960E947003882309F40CC12F81E2
:1008700038858B859C85B701820F931F0E94EC0BF6
:100880001C870B87CE0107960E9477068F8198857B
:100890000E94730AED80FE808091380290913902A7
:1008A00009811A81E816F90631F5609134027091D8
:1008B00035020115110519F061157105C1F46115B5
:1008C000710549F0E114F10409F4C9C0FB0180810C
:1008D000811111C0C4C00115110509F4C0C0E11493
:1008E000F10409F4BCC0F801808190E0D1C0C801D6
:1008F0000E94E30BCDC00115110539F0A701B80125
:1009000084E392E00E94A90304C084E392E00E9481
:100910009703CD80DE80F3E0CF16D10409F056C0F6
:1009200089819A81009719F00E94650903C060E0EF
:1009300070E0CB01209140023091410200913C02D5
:1009400010913D02F80180E090E0281739070CF47F
:1009500086C0419151914617570779F48F3F2FEF89
:10096000920709F47CC0DC0111967C01EE0CFF1C9F
:1009700060E070E020E030E015C00196E6CFFD01B8
:10098000E20FF31F4E175F07C4F0FB01EE0DFF1DD2
:10099000E00FF11F42815381518340832F5F3F4F0E
:1009A0006E5F7F4F4091400250914102FA013196B3
:1009B000E81BF90B2E173F0714F38A1B9B0B480FFC
:1009C000591F509341024093400249C0E0906B018F
:1009D000F0906C0183E0C816D10428F4860183E00E
:1009E000C82ED12C02C003E010E06CE571E0CE010E
:1009F00007960E94CA038D819E810817190738F552
:100A00008C159D0508F46C01E981FA81EC0DFD1D42
:100A1000B080108269817A81600F711F6115710544
:100A200069F0FB0101900020E9F73197AF01461B07
:100A3000570BCE0107960E94A90304C0CE0107966A
:100A40000E949703A981BA81AC0DBD1DBC92CE0155
:100A50000796F70109958F8198850E94730A89810D
:100A60009A810E94730A2C960FB6F894DEBF0FBECF
:100A7000CDBFDF91CF911F910F91FF90EF90DF904D
:100A8000CF90BF900895CE0107960E949703FACEAB
:100A9000892B09F033CFE3CF1F920F920FB60F923D
:100AA00011242F933F934F935F936F937F938F9373
:100AB0009F93AF93BF93EF93FF9387E791E00E94DB
:100AC000FB00FF91EF91BF91AF919F918F917F912B
:100AD0006F915F914F913F912F910F900FBE0F90AB
:100AE0001F9018951F920F920FB60F9211242F93FB
:100AF0008F939F93EF93FF93E0918701F09188018B
:100B00008081E0918D01F0918E0182FD12C0908173
:100B1000809190018F5F8F7320919101821751F026
:100B2000E0919001F0E0E958FE4F958F809390019D
:100B300001C08081FF91EF919F918F912F910F9034
:100B40000FBE0F901F9018953FB7F89480916401E5
:100B500090916501A0916601B091670126B5A89BAF
:100B600005C02F3F19F00196A11DB11D3FBFBA2F3F
:100B7000A92F982F8827820F911DA11DB11DBC019F
:100B8000CD0142E0660F771F881F991F4A95D1F764
:100B900008951F920F920FB60F9211242F933F9337
:100BA0008F939F93AF93BF93809160019091610168
:100BB000A0916201B091630130915F0123E0230FA6
:100BC0002D3720F40196A11DB11D05C026E8230F85
:100BD0000296A11DB11D20935F0180936001909347
:100BE0006101A0936201B0936301809164019091CF
:100BF0006501A0916601B09167010196A11DB11D2B
:100C00008093640190936501A0936601B09367019E
:100C1000BF91AF919F918F913F912F910F900FBEF8
:100C20000F901F9018951F920F920FB60F921124DC
:100C30002F933F934F935F936F937F938F939F93E4
:100C4000AF93BF93EF93FF93E0910201F091030103
:100C50000995FF91EF91BF91AF919F918F917F91F6
:100C60006F915F914F913F912F910F900FBE0F9019
:100C70001F9018951F920F920FB60F9211242F9369
:100C80003F934F935F936F937F938F939F93AF9314
:100C9000BF93EF93FF93E0910001F091010109955B
:100CA000FF91EF91BF91AF919F918F917F916F9144
:100CB0005F914F913F912F910F900FBE0F901F901A
:100CC000189522E331E0FC013183208382819381F6
:100CD000009711F00C94730A0895CF93DF93EC0101
:100CE0000E946106CE01DF91CF910C94730ACF93DD
:100CF000DF93FC01448155816081718187E791E038
:100D00000E948900EC0142E050E06AE571E087E76B
:100D100091E00E9489008C0F9D1FDF91CF91089573
:100D2000CF93DF93009779F0FC0101900020E9F761
:100D30003197AF01481B590BBC0187E791E00E9436
:100D40008900EC0102C0C0E0D0E042E050E06AE57A
:100D500071E087E791E00E9489008C0F9D1FDF9171
:100D6000CF9108958F929F92AF92BF92CF92DF92D0
:100D7000EF92FF920E94A4054B015C018AE0C82E0D
:100D8000D12CE12CF12C0E94A405DC01CB018819A7
:100D90009909AA09BB09883E9340A105B10558F0FD
:100DA00021E0C21AD108E108F10888EE880E83E03C
:100DB000981EA11CB11CC114D104E104F10419F75F
:100DC000FF90EF90DF90CF90BF90AF909F908F906B
:100DD0000895789484B5826084BD84B5816084BDB3
:100DE00085B5826085BD85B5816085BD80916E00C9
:100DF000816080936E0010928100809181008260FA
:100E00008093810080918100816080938100809136
:100E100080008160809380008091B1008460809325
:100E2000B1008091B00081608093B00080917A0021
:100E3000846080937A0080917A00826080937A0047
:100E400080917A00816080937A0080917A00806836
:100E500080937A001092C100E0918701F09188019F
:100E600082E08083E0918301F09184011082E0911F
:100E70008501F091860180E1808310928F01E091DD
:100E80008B01F0918C0186E08083E0918901F091E3
:100E90008A01808180618083E0918901F0918A01DB
:100EA000808188608083E0918901F0918A0180814E
:100EB00080688083E0918901F0918A0180818F7D33
:100EC000808361E0809124020E94DB0161E08091D7
:100ED00024020E948F0180912602909127028F3F69
:100EE0002FEF920789F061E00E94DB0160E08091C2
:100EF00026020E948F010E94B20661E080912602C4
:100F00000E948F010E94B206CFB7F89480916A01C7
:100F1000811127C0EEEAF0E08491EAE9F0E09491D3
:100F2000E82FF0E0EE0FFF1FEA57FF4FA591B491B5
:100F3000EC91E92321F461E08AE00E948F0161E0F5
:100F40008AE00E94DB018CB580618CBD8CB5806429
:100F50008CBD61E08DE00E94DB0161E08BE00E94CE
:100F6000DB0180916A018F5F80936A01CFBF62E4E9
:100F700084E192E00E946D02823109F01CC140E8D8
:100F800061E884E192E00E94170280E49EE0AFEC09
:100F9000B9E180932A0290932B02A0932C02B09384
:100FA0002D024CE666E884E192E00E94170240E4DC
:100FB00067E884E192E00E94170240E068E884E17B
:100FC00092E00E94170240E06EE884E192E00E9405
:100FD000170240E06FE884E192E00E9417026CE0A3
:100FE00084E192E00E946D02482F43606CE884E146
:100FF00092E00E94170244E066EA84E192E00E94D7
:1010000017024FE869E884E192E00E94170241E884
:1010100061E884E192E00E9417028FED93E09093E3
:1010200033028093320260E0809128020E94DB014B
:1010300040E060EC84E192E00E9417028091280277
:10104000909129028230910521F0039721F08FEFD2
:1010500003C080E001C081E09FB7F894882349F085
:10106000813011F482E006C082E08093690180E063
:1010700001C081E020916801822B809368018091FA
:101080006901811103C081E0809369019FBF809154
:101090002802909129028230910519F00397A9F452
:1010A0008FC080E0E82FF0E0EE0FFF1FE050FF4F11
:1010B00021E732E031832083813009F483C08091BD
:1010C0006900836080936900E89A80916F018111C3
:1010D00009C08CE693E090936E0180936D0181E0EE
:1010E00080936F0180916D0190916E0190936C01DE
:1010F00080936B0162E184E192E00E946D02C82F4F
:1011000010923102109230026DE184E192E00E946F
:101110006D02482F4E7F6DE984E192E00E94170234
:101120004C2F62E984E192E00E941702C6FF2DC0B5
:10113000C5FD2BC010922F0210922E02809130021A
:1011400090913102892B11F062E201C063E184E1E8
:1011500092E00E946D02C82FD0E060E184E192E04D
:101160000E946D02482F6DE884E192E00E94170210
:1011700041E861E884E192E00E941702CD2BC1F0C2
:1011800086E391E00E94900613C061E084E192E062
:101190000E946D02863861F040E06DE884E192E0E3
:1011A0000E94170246E861E884E192E00E9417027B
:1011B0000E9485019FCF81E491E00E949006FFCFBD
:1011C00081E070CF809169008C6080936900E99A1A
:1011D0007CCF80913402909135020E94730A8AE399
:1011E00092E00C946106CF93DF93E7E7F1E013827E
:1011F000128288EE93E0A0E0B0E084839583A6831A
:10120000B7838EE091E09183808385EC90E09587B1
:10121000848784EC90E09787868780EC90E0918BC0
:10122000808B81EC90E0938B828B82EC90E0958BAD
:10123000848B86EC90E0978B868B118E128E138EAA
:10124000148EE4E1F2E01382128280E291E0918355
:10125000808380E5848781E0858784E492E09787B6
:1012600086878AE090E0918B808B89E090E0938B79
:10127000828B82E090E0958B848B168A178A108E81
:10128000118E138E128E158E148E178E168E14825A
:10129000158216821782CAE3D2E082E391E0998335
:1012A000888380E090E00E94DE099B838A832FEF91
:1012B0003FEF3F832E839D838C836CE571E084E355
:1012C00092E0DF91CF910C94CA031F93FC01992700
:1012D0008827BC01E89411911032E9F3193010F01D
:1012E0001E30C8F31B3251F01D3249F4689406C019
:1012F0000E948C09610F711D811D911D1191105368
:101300001A30B0F33EF490958095709561957F4FBB
:101310008F4F9F4F1F910895592F482F372F262FFA
:10132000660F771F881F991F660F771F881F991FE9
:10133000620F731F841F951F660F771F881F991FE9
:1013400008952F923F924F925F926F927F928F9269
:101350009F92AF92BF92CF92DF92EF92FF920F9344
:101360001F93CF93DF93CDB7DEB7CA1BDB0B0FB64E
:10137000F894DEBF0FBECDBF09942A88398848880B
:101380005F846E847D848C849B84AA84B984C884A1
:10139000DF80EE80FD800C811B81AA81B981CE0F98
:1013A000D11D0FB6F894DEBF0FBECDBFED0108957D
:1013B000EE0FFF1F0590F491E02D0994CF93DF937A
:1013C0008230910510F482E090E0E0914702F091C4
:1013D000480220E030E0C0E0D0E0309711F14081D9
:1013E000518148175907C0F04817590761F48281A5
:1013F0009381209719F09B838A832BC09093480296
:101400008093470226C02115310519F04217530772
:1014100018F49A01BE01DF01EF010280F381E02D93
:10142000DCCF2115310509F1281B390B243031059A
:1014300090F412968D919C9113976115710521F08E
:10144000FB019383828304C09093480280934702F8
:10145000FD01329644C0FD01E20FF31F8193919389
:10146000225031092D933C933AC02091450230918E
:101470004602232B41F4209106013091070130935D
:101480004602209345022091040130910501211567
:10149000310541F42DB73EB7409108015091090143
:1014A000241B350BE0914502F0914602E217F30749
:1014B000A0F42E1B3F0B2817390778F0AC014E5FC4
:1014C0005F4F2417350748F04E0F5F1F50934602B9
:1014D000409345028193919302C0E0E0F0E0CF0198
:1014E000DF91CF9108950F931F93CF93DF930097D0
:1014F00009F48CC0FC0132971382128200914702DA
:10150000109148020115110581F420813181820F6B
:10151000931F20914502309146022817390779F52B
:10152000F0934602E093450271C0D80140E050E0DC
:10153000AE17BF0750F412962D913C911397AD0151
:101540002115310509F1D901F3CF9D01DA0133836A
:10155000228360817181860F971F8217930769F438
:10156000EC0128813981260F371F2E5F3F4F3183D1
:1015700020838A819B8193838283452B29F4F09376
:101580004802E093470242C01396FC93EE931297F1
:10159000ED01499159919E01240F351FE217F30780
:1015A00071F480819181840F951F029611969C930E
:1015B0008E938281938113969C938E931297E0E091
:1015C000F0E0D80112968D919C911397009719F035
:1015D000F8018C01F6CF8D919C9198012E5F3F4FC1
:1015E000820F931F20914502309146022817390738
:1015F00069F4309729F4109248021092470202C011
:10160000138212821093460200934502DF91CF911C
:101610001F910F910895A0E0B0E0E1E1FBE00C9490
:10162000A509EC01009721F4CB010E94DE09B8C0A6
:10163000FC01E60FF71F9C0122503109E217F30766
:1016400008F4ACC0D9010D911C911197061717072A
:10165000B0F00530110508F49FC0C8010497861743
:10166000970708F499C002501109061B170B019344
:1016700011936D937C93CF010E94730A8DC05B011F
:10168000A01AB10A4C01800E911EA0914702B091A0
:10169000480240E050E0E12CF12C109709F44AC0D8
:1016A000A815B905D1F56D907C901197630182E082
:1016B000C80ED11CCA14DB0480F1A3014A195B09CE
:1016C0006A0182E0C80ED11C1296BC901297139644
:1016D000AC91B5E0CB16D10440F0B282A383518324
:1016E0004083D9016D937C930AC00E5F1F4FC301E5
:1016F000800F911FF90191838083EB2DFA2FE11464
:10170000F10431F0D7011396FC93EE93129744C085
:10171000F0934802E09347023FC08D919C9111974E
:101720004817590708F4AC017D0112960D90BC9141
:10173000A02DB3CF8091450290914602881599055E
:10174000E1F446175707C8F4809104019091050110
:10175000009741F48DB79EB740910801509109015F
:10176000841B950BE817F907C8F4F0934602E09341
:101770004502F901718360830FC0CB010E94DE092D
:101780007C01009759F0A801BE010E94DA0BCE013E
:101790000E94730AC70104C0CE0102C080E090E03D
:1017A000CDB7DEB7EEE00C94C10981E090E0F8948B
:1017B0000C94F30BFB01DC0102C001900D9241502F
:1017C0005040D8F70895FB01DC018D9101908019FC
:1017D0000110D9F3990B0895FB01DC0101900D92E2
:1017E0000020E1F7089510E0CDE5D0E004C0FE014F
:1017F0000E94D8092196CE35D107C9F7F894FFCFBA
:1018000088008800000049028000000000001C01E0
:101810008900B4006301E500C300D70000000000A8
:1018200052030A036903AF02F902DE02B0020000AC
:10183000000061066D066E6577206D736720696E26
:10184000005374617274696E67204C6F5261206638
:0E18500061696C656421002020000D0A000013
:107800000C94343C0C94513C0C94513C0C94513CE1
:107810000C94513C0C94513C0C94513C0C94513CB4
:107820000C94513C0C94513C0C94513C0C94513CA4

@ -20,10 +20,10 @@ void setup(){
void loop(){
socket.core();
setInterval([](){
socket.udp("hello socket!!!"+String(random(2000)), [](int e){
Serial.println("send ok"+String(random(2000)));
});
}, 7000);
//setInterval([](){
// socket.udp("hello socket!!!"+String(random(2000)), [](int e){
// Serial.println("send ok"+String(random(2000)));
// });
//}, 7000);
}

@ -28,10 +28,10 @@ void setup(){
void loop(){
socket.core();
setInterval([](){
socket.udp("hello socket!!!"+String(random(2000)), [](int e){
Serial.println("send ok"+String(random(2000)));
});
}, 7000);
//setInterval([](){
// socket.udp("hello socket!!!"+String(random(2000)), [](int e){
// Serial.println("send ok"+String(random(2000)));
// });
//}, 7000);
}

@ -71,7 +71,9 @@ void Socket::ini() {
}
void Socket::core() {
if(LoRa.parsePacket()){
Serial.println("new msg in");
}
}
void Socket::_received(int size) {

@ -18,10 +18,10 @@ void setup(){
void loop(){
socket.core();
setInterval([](){
socket.udp("hello socket!!!"+String(random(2000)), [](int e){
Serial.println("send ok"+String(random(2000)));
});
}, 7000);
//setInterval([](){
// socket.udp("hello socket!!!"+String(random(2000)), [](int e){
// Serial.println("send ok"+String(random(2000)));
// });
//}, 7000);
}

@ -71,7 +71,9 @@ void Socket::ini() {
}
void Socket::core() {
if(LoRa.parsePacket()){
Serial.println("new msg in");
}
}
void Socket::_received(int size) {

@ -0,0 +1,125 @@
/**
* ovo-arduino Main File
*
* @category ovo-arduino
* @package ovo.cpp
* @copyright Copyright (c) 2019 EEENeko (https://github.com/eeeneko)
* @license GNU General Public License 2.0
* @version 0.0.1
*/
#ifndef _OVO_H
#define _OVO_H
/**
* Like set Timeout in JS
*
* @Author yimian
* @param auto function (allow Lambda)
* @param int millisecond to dealy
* @return void
*/
void setTimeout(auto function,const int delay)
{
static bool on = 1;
if(on == 1){
static unsigned long startTime = millis();
if(millis() - startTime > delay){
function();
on == 0;
}
}
}
/**
* Like set Interval in JS
*
* @Author yimian
* @param auto function (allow Lambda)
* @param int millisecond of interval
* @return void
*/
void setInterval(auto function, const int delay)
{
static unsigned long startTime = millis();
if(millis() - startTime > delay){
function();
startTime = millis();
}
}
/**
* Switch between function1 and function2 for delay1 and delay2
*
* @Author yimian
* @param auto function1 (allow Lambda)
* @param auto function2 (allow Lambda)
* @param int millisecond of interval
* @param int millisecond of interval
* @return void
*/
void setSwitch(auto function1, auto function2, const int delay1, const int delay2)
{
static unsigned long startTime = millis();
if(millis() - startTime < delay1){
function1();
}else if(millis() - startTime >= delay1 && millis() - startTime < delay1 + delay2){
function2();
}else if(millis() - startTime >= delay1 + delay2){
startTime = millis();
}
}
/**
* Make direct voltage change to gradually change
*
* @author yimian
* @category ovo
* @package ovo
*/
class slowWrite
{
public:
inline void set(int t_pin, unsigned int t_delay){
pin = t_pin;
delay = t_delay;
};
inline void high(){
startTime = millis();
state = 1;
};
inline void low(){
startTime = millis();
state = 0;
};
inline void run(){
if(state == 1 && millis() - startTime < delay){
analogWrite(pin, ((millis() - startTime) * 255 / delay));Serial.println(((millis() - startTime) * 255 / delay));
}else if(state == 0 && millis() - startTime < delay){
analogWrite(pin, 255-((millis() - startTime) * 255 / delay));Serial.println(255-((millis() - startTime) * 255 / delay));
}else{
state = -1;
}
};
private:
unsigned long startTime;
int state;
int pin;
unsigned int delay;
};
#endif

@ -0,0 +1,98 @@
#include <SPI.h>
#include <LoRa.h>
#include "ovo.h"
int counter = 0;
int lastTime=0;
int ledPin = 6;
//int interv = 500;
char* input="0";
void setup() {
Serial.begin(9600);
//while (!Serial);
//Serial.println("LoRa 2 way comm (control LED and send data)");
if (!LoRa.begin(433E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
pinMode(ledPin,OUTPUT);
digitalWrite(ledPin,HIGH);
delay(5);
digitalWrite(ledPin,LOW);
//LoRa.onReceive(gotPacket);
//LoRa.dumpRegisters(Serial);
}
void loop() {
//Serial.print("Sending packet: ");
//Serial.println(counter);
// unsigned long currentTime = millis();
//if(currentTime - lastTime > interv) {
// lastTime = currentTime;
int aVal=analogRead(A0);
// Serial.print("\nA: ");
//Serial.print(aVal);
// send packet
/*LoRa.beginPacket();
LoRa.print("hello ");
LoRa.print(counter);
LoRa.print(" ");
LoRa.print(aVal);
LoRa.endPacket();
delay(200);//wait for SPI to do its thing, maybe
counter++;*/
//}
//Serial.println(counter);
int packetSize = LoRa.parsePacket();
//Serial.print(packetSize);
if (packetSize) {
gotPacket(packetSize);
}
LoRa.idle();
delay(1000);
if(LoRa.beginPacket()){
LoRa.print("hello ");
LoRa.print(counter);
LoRa.print(" ");
LoRa.print(aVal);
LoRa.endPacket();
Serial.println("sent");
}
delay(3000);
//delay(500);
}
void gotPacket(int packetSize)
{
char inputBuff[999];
int i=0;
// received a packet
Serial.print("Received packet : ");
// read packet
while (LoRa.available()) {
// Serial.print((char)LoRa.read());
inputBuff[i]=(char)LoRa.read();
i++;
}
inputBuff[i]='\0';
Serial.println(inputBuff);
}
Loading…
Cancel
Save