说起Qt,真是个不错的ui库,不仅仅ui做的好,其他方面也不差,在平台扩展方面也是非常的强大。这篇文章我将会分析下qt的托盘,QSystemTrayIcon是qt的托盘类,托盘类的用途是什么我就不说了,自行百科就好,关键问题是我们要实现自定义的托盘。

说起常用的客户端软件,qq,微信等聊天工具,有这么几个托盘事件:

1、来消息图标闪烁

2、气泡消息提示

3、鼠标左键单击、左键双击、右键单击、滚动单击

上述这三种事件QSystemTrayIcon类都完全能够解决,但是托盘的hover事件却无能为力,如图1所示,途图中是帮助文档中的一段描述,指明了只有在x11系统中,可以捕获到系统的tooltip事件,其他系统都无能为力,我自己也看了下qt的源码,果真是这样的,有兴趣的同学可以自行在研究下。

aaarticlea/png;base64,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" alt="" />

图1 帮助文档

如图2所示,qq有消息时,鼠标hover在图盘弹出菜单,那么qq是怎么做的呢,既然qq都到做到了,这个功能我们自己想必肯定也能实现。

图2 托盘hover弹框

好了,上边说了这么多,仅仅是为了铺垫我自己实现的托盘,完全脱离了qt中的托盘类QSystemTrayIcon,不过也不能说完全脱离,部分代码还是从qt源码中摘出来的。文章的最后我附上我自己用qt实现的自定义托盘和下载别人用mfc自定义实现的自定义托盘。

因为win32我自己也不是特别了解,因此我也是大概说下自定义托盘需要了解的东西,首先是NOTIFYICONDATA结构,这个结构百科讲的特别详细,看一下就知道怎么用,然后是Shell_NotifyIcon这个api,这个方法就是对托盘操作的接口。具体参数百科中说的很详细,不过如果你不想看也无所谓,直接往下看也可以。对盘托的操作在windows平台下都是一样的,关键问题是用qt怎么接受这个图盘的hover和leave消息。

关于这个托盘的实现我也是从mfc的示例代码中获取的启发,然后用qt方法实现,接下来我就直接说下用qt实现的步骤:

1、首先我们需要了解下QAbstractNativeEventFilter这个接口类,继承这个接口类的类可以把自己注册到app中,然后就能获取到整个app

的事件,事件的处理函数为nativeEventFilter,该类有3个参数,具体可以参见这篇文字qt捕获全局windows消息 这个文章中说的不全是对的,不过能抓取到app消息应该是没问你的,本篇博客的demo也是印证了这个问题。注册代码如下:

qApp->installNativeEventFilter(this);

2、第二步就是创建托盘图标,创建托盘图标的时候,windows提供了api,代码如下:

 NOTIFYICONDATA    nid;
QLabel *l = new QLabel;
nid.cbSize = sizeof nid;
nid.hIcon = qt_pixmapToWinHICON(QIcon(":/trayIcon/Resources/childrenWidget.ico").pixmap(, ));
nid.hWnd = HWND(l->winId());
nid.uCallbackMessage = WM_TRAYNOTIFY;
nid.uID = ;
nid.uFlags = NIF_ICON | NIF_MESSAGE; Shell_NotifyIcon(NIM_ADD, &nid);

此处代码中有一个标签l,创建他是因为创建图标时需要一个接受鼠标事件的窗口句柄hWnd,如果没有句柄,那么托盘也不能创建成功;其他成员的含义从变量的命名上应该也能理解,我重点说下uFlags这个变量,他其实本身没有什么含义,主要是为了标示NOTIFYICONDATA结构中其他成员那个是有效的,这个也方便了我们后续对托盘图标的修改。比如说修改tooltip、修改图标等信息。uCallbackMessage是消息id,在我们后续处理的逻辑中会用到

3、鼠标事件处理

 bool trayIcon::nativeEventFilter(const QByteArray & eventType, void * message, long * result)
{
if (eventType == "windows_generic_MSG" || eventType == "windows_dispatcher_MSG")
{
MSG * pMsg = reinterpret_cast<MSG *>(message);
if (pMsg->message == WM_TRAYNOTIFY)
{
switch (pMsg->lParam)
{
case WM_MOUSEMOVE:
m_traypos.OnMouseMove();
break;
case WM_MOUSEHOVER:
m_Menu->show();
break;
case WM_MOUSELEAVE:
m_Menu->hide();
break;
case WM_LBUTTONDBLCLK:
// m_Menu->show();
break;
case WM_LBUTTONDOWN:
// m_Menu->show();
break;
case WM_RBUTTONDOWN:
// m_Menu->show();
break;
}
}
} return false;
}

上述代码主要是针对鼠标事件的一个处理。WM_TRAYNOTIFY消息是我们开始的时候注册到图盘中的消息,当托盘发生鼠标事件的时候我们只需要关注自己注册的消息,对于windows托盘稍微有了解的同学可能也知道,微软没有提供给我们托盘图标的进入和离开事件,而仅仅提供了鼠标move的事件,不过仅仅有这一个事件我们就可以模拟出其他的事件来。细心的同学将会注意到 m_traypos.OnMouseMove();这句代码,其实m_tryapos这个对象是一个move事件处理类,他可以模拟出鼠标hover和leave事件来。关于这个类的解释我就不说了,是一个国外的大牛写的,demo中有源文件。

4、程序退出时销毁托盘图标

Shell_NotifyIcon(NIM_DELETE, &m_NotifyIconData);

通过上述的代码整理,简单的托盘就可以实现了,因为我是自己做的demo,因此不是所有事件的处理了的,高级定制的功能如果有兴趣的同学可以给我留言,或者私信我可以,如果是我实现了的,我将愿意和大家一起分享。我下边链接中的这个demo其实比较粗糙,就仅仅的可以实现鼠标在托盘图标上的hover和leave请求。

最后我上两张效果图,图3是mfc示例的鼠标hover截图,图4是qt示例的鼠标hover截图

图3 mfc示例demo

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA3sAAAJ4CAIAAABTTG2uAAAgAElEQVR4nOzdfXhU5YH4/fnnyfP8kX+4rs3VmMqpoiIkICgiIYkJb/o8W5pCLUqEjajZRYFi2ghldx9EbDG/bvNsJbtapc4mdputPw2VXaXGIKH1BayKiCJB3hLerLovtvzXq63m+eO83Pc55z5nzkzOnZmc+X6u+/KCmTlnzswkzNf7nDOTqqq6xhyVldMrK6dPnTrNHlVTpsij0hxXXx041jx15MiRI0+tCbuNhvG19j3KOw26PCFD9Wwn/CHLI7Xu+ZzH8n3Dw8PDXU/IF+7dfMhzSYwjaOVa7zSekddXOaG/2mt+emTPD74a8cZf/cGeI5Y97V/LfHluayuCEfT25Ly1OW92U6dWTZ06rbJymvme6LxFmmPatBmeMX36zCSMv33p4tEnb837ZoSN5TuOXuz72+iXMwpupDy56fSl9Ds59eqrp06ezGAU0Ejd8wvGGIy8v9AMxtgM853ObtAqc+bFH53TpiU3OhkMzcMsTis3ywEAKHrSZKcZndNDpjmJTgYjykiZE5zm7GZ5efkIAABFrLy8PLX2P1LrX0y17kl9ZyDV9qvU/b9ObXglteG11MbXUt/dn/rugdSmA6lNb6T+9jepv30z9Xdvpf7urdTfvZ36e3McZDAYikFxAgDgKC8vT927K7Vud+q+l1LfflmKzldTG15LbXw99d39quJ0ojPf7+sMRmGOysrplZXTpk6dNmVKJcUJAChy5eXlkyebx3R6ziIK27ee912WDEaBj5QzwXn11RQnAKDYlZeXV1fX1NTU1dbW19U13HjjvPr6+Q0N8xsaFjQ0LJg3b+G8eQvnz19kjgULbnLGwoU3MxiMoEFxAgAglJeXV1ZOr6qaMX36zGuuufaaa66bMWPWjBmzZs683hzXXjvbHNddd4MzZs2aw2AwQoZcnFMpTgBAkbOL85pp02ZOn24W53UzZsyaOXOWXZzX28U5m+JkMCIOpzgrKU4AAMrLy6dOdRWnZ5qT4mQwchipykrz64UqJ0+mOAEAxa68vHzq1GmVldeY5wPZO9Y905wUJ4OR3Ug5B3GGF2cqS2P5rwMAAHFxitM8lFPesS5Nc3IoJ4OR3ZCLc0qm4hyJPChOAEiswplxSKVSBw8e9F9+8ODBnLfELs7pVVUz7B3r3vOHpB3rFCeDEWnEUpz+q7T8i/Pi6lTN9pM61gwAiC7kH/kxLs6DBw/+H//n/+WJTuWF0Znfcuk+eUjesc6hnAxGLiOL4oz+66q68cntNanVL+b022+jOAGgEBROcY74+nKUuTniLU71oZwUJ4OR7aA4AQDZKajiHJEqc/S5OWIXp326uvdQTk4eYjByG1kXZyq11RzOnz0Xjqj+xVntHOBTs/2kVZ8vrrb+auaoZfWL1t9FXNql6S7OF1fLq3RfkhJx++LqVM327avdtwQA5K7QinPEjs7R5+YIxclg6BnxFKfvz+FznGZgOlF4cvtquwRfXG1dLtXli6utm7ov8+Sj+xJnPWaGmn90dywAjDsFcsoOxUlxMhjZjjGa4/QXp2cPu3eWU+SlE5xScfr3r3svce5CvuLk9hqKEwBGq9CKk73qDEbhj7wcx+kuzpPba5zpSekaMw/lm2ZZnE6wUpwAEKeCKk5NZw5RnAxGvKMAilNqwpPba1LyrWpWr67xH885Iu81Hxl5cbt1kKfi0E+KEwBiVzjFqe/TkShOBiPeMWbFae83F2cOea9JpVI1q1d7WtRzrpD4m1hIPkko4MwhihMA4lMgh5OOaPsEeIqTwYh9ZPUJ8FnI7ffcg49DAgCMMYqTwdAxohZnHsTwCZ4AAGSH4mQwdIwCLU5zBzm9CQAYYxQng6FjFGhxAgCQFxQng6FjUJwAAAgUJ4OhY1CcAAAIFCeDoWNQnAAACBQng6FjUJwAAAjl5eXXXz/nhhvmVlfX1tTU1dbeWFdXX1fXcOON8+rr5zc0zG9oWDBv3oJ58xbOn79o/vxFCxbc5IyFC29mMBjKQXECACCUl5dfccXkq666evLkKVdfPXXKlMopU6qmTq2aOnVaZeW0ysrplZXTq6quMce0aTOcMX36TAaDETQoTgAAhMKc43R2TeZ9porByG1QnAAACAV4HOdCd3Hm/YA8BiOH4S3O3wMAUMQoTgZDx6A4AQAQKE4GQ8egOAEAEChOBkPHoDgBABDGXXHWzrp5y23dL/7gxJbbumtnFWqPrugavDiYXmH+tTk9ePHixYv9m/O9VQW0JRHHln7xNMY0Nu+5ONi1Qv/GU5wAAAjjqzjvXLDx51sO/PDOZ/6fmtt+eOczP99y4M4FGyNUiyVyaZll5m6drEpFKs4V6cGL/VuCbrm5/+JgujmW5y3jqsK3xHez5vSg+xlb0TV4cc/mWXM291+U17MiPSg/M/Zfw59Dq31tezYHvnZjXJy+e1zRNWjfXnqGwx7d5v6LFy9epDgBABDGUXE+cs9zT2954/b56+fMqTPH7fPXP73ljUfueS54bVv6RWg2pweDymaOO7Ca04MX+/vdaZK5OH2J5s0UxRjL4ox0XyKwAovT/VR428u+l/Dn0L3yzXsC/n+goIsz/CeE4gQAQBhHxfniD048cf9uT3E+cf/uF39wIkI/ZRy+4tzcnB6UEq04inNzv+dJcD+ZZnG6jhnY0n9xT79rKfOq8OcweOWuUdjFGfoTQnECACCMr+Ksr/7q33/zcWev+t9/8/H66q+GFadrjtN7uWkw3Sz/1dkj3L/ZzCB7cVdPSLe3Osm9BnkHtH3poKpO3BXo2SrlHdlVlN7jvqW8KsUNpC3xbbBYs9OL4VEoXbV5z8X+LWJ/vf826ufQX+fKXnc9EPMu3A/Ts2b1M+N+sBfjK86QnxCKEwAASR6Lc/Xqe3dIVq++N2NxmlObS2+8+8UfnFh6493mX0OL09pj6z5SUK4KJ3T8c5xzZplHJXp3JW/pv+huR3+HSTN2IlOkInGmEj395J6DDLqjLf12fsnTjZ5VZbxBwJrl+rzoY13rJKb1QJws27zHPsQz/DmMXpzeByLqdvOewcFBp6fF/zl4H7jr/zo298danOpHR3ECAOCW3znOb33rPjM3v/Wt+5SVqSxOszLlP2e8oxXWSdpbpAaV5ryc4w4VO5Sb04MXL/ZvET3h3S2ralZlcYqaEWGn7FERguo78hSzMihDbxC0ZtdBCKE7vq1byvvQB9Mr1E2meA7Vxenfga56IGL+eDC9Yku/azNUt9+c1fG4WRen6tFRnAAAuOV9r/q3vnWfnJshxSmfOWQWZ4QzhzwxcbF/c1BzBBWnvee0P6Q45SMXQ4pzzor04GC6WT5nPMviDO6q0RanN4UzHWq5pf/ins3uGuvfHLxT3vMc+leuflGUD8T8g9Sam53NGH1xhm1YQHH6Hx3FCQCAW96L0z+ifDrSiz84EenTkVZ0DYrP8ZGnGOXdrL594r7ssKZIg/aq+ysqoDhnregaHNzTL03mqY9KnLUlbe8jVt3RqIsz6prDTu7Z3H+xv3+PayX9e/qDp0jdz6H/XHXlGULqB7IiPTg4aFW7+efQB+75vILwverSXnLfExVYnN5HR3ECAOA2vopzVvafAL9COhrRMynluVCKBvVRhqFnDrnXEFScvuMIvT2qOEko4MyhURVn4EOIdK66yET5BtIxlMrFXc+h+yDRwARUPxDX+TreE+dVtxfHUQym03Zeq8+Ot18j1xEX/hcr408IxQkAgGTcFed4HzF+HJKWkcXnSY3zIU5y0jIoTgAABIpzTEfwvFrhjIhfTTTex4r0oNZv+6Q4AQAQKM4xG+a+2vHzneaMUQ2KEwAAgeJkMHQMihMAAIHiZDB0DIoTAAChvLz8+uvn3HDD3Orq2pqautraG+vq6uvqGm68cV59/fyGhvkNDQvmzVswb97C+fMXzZ+/aMGCm5yxcOHNmobztq3vLhgMrYPiBABAKMA5TgYjAYPiBABAKC8v/9KXvlReXn7JJZdUVFRUVFR82XapZKLEAJAJxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnChqv0ME+X6VgDFFcQI6UJwoLhEb67OiRIACv6c4AT0oThSLrLLyf4pSVjGa79cT0IXiBHSgOJF8IaHpr67/LnrhJUp3IvEoTkAHihMJF96a/t76r6IX1KBB3ZnvVxiIGcUJ6EBxIsmUuSm3pr+3/rPoBTWopzuJTiQVxQnoQHEiyTy56ZnXlBPzU9snRc95KuQAVc53UpxIJIoT0IHiRGIpc1Oe3XRC85NPPvnY9tui5zwVTn2a3ek5ypPoRFJRnIAOFCcSKyg3ndY0p/TMyvzIdsF2vsg4D9x5Ksz6dCY+ne5URme+X20gNhQnoAPFiWQK2p8u56bTmnJinjt37ty5c2eLkvnY5QCVu9MfnUxzIpEoTow7NevT6fU1+d6KDChOJJO/OD256cxrmpVpJteZM2eGh4eHh4eHipL52M+cOeME6Pnz5535Tn90UpxIJIpzPKju6Fs3YI+OW7O4tql93UDf0iYN21TX2jzQ19xWq2HVGdSsT+/evXt3gUcnxYlkipKbFy5cOHfunFmZZnKdPn361KlTp06dOlmUzMd++vRpJ0DPnDljdueFCxcyRme+X3MgHqMpzqaH1+59UbSOOXpaqwzD8GTQQN+6gfbqGN/ON3anRo6VbnRdVpF+OTXy8oRGwzCMsn3HUiPeUZJeYBiG0fi9kpFjzi2lZbvLrD8olvXfXU5uXSo9J9mH4K1LVcUZdm1+irN2UU/fuoHuRXXiIvPnIbZCXbat0JuT4kQyKYvT2Zn+0UcfmfOaw8PDZmWePHnyxIkTx48f//DDD48dO3bs2LHBImM+6g8//PD48eMnTpwwA9SsT3PW8/z5884edooTCRbHHGdVW7cnLwyzMOz6NOIODjkuHWX7jpnVKDR+r8QJTcfGbleAOssOf68i47Kj0dTumYOs7si2wsdLcVphLV1rp3bgxmetZn26oJuT4kQyKSc4ndw8f/782bNnP0VkZneaO9k//vjjTz/91B+d+X7NgXiMVXFal/hulhtFXBoLJgz7qjF4KrRk+FhqX4t9WUvpiPzXwGVHITwWY1lJYRXn0o528QPQ1L6up31pT5zFac1zblsW3wpjRXEigZwJTic3nQlOc3/6uXPnhoeHRxDZ8ePHT506dfbsWWf3uvM5nWZ0Ms2JxAgvzlse+Ovndy5eJorzhh+8sGbPtjnu99aIxWnWTxzTnKq4NFpKfVOSqqlQa9kJcrM2fq/EF5dl+7x73jPwtV11hziWoKqtO1P5mXuiAw/WNAxjNMVpboDq8IaM9+u6gXgInuKsa20W85q3Lh3oW9pk/td6KpY21S5yF6e0Sf6fCvdWBWxbQScnxYkE8heneQSnM8F55syZ06dP57vixpOjR48eP3789OnTZ8+e/eijjz755BPP0ZwUJxJjLIvTjJLRz3IF7ytXVaNnKtSeztzYLYJS/rNFGbWhQotT/rNSdYf0BPr2v9tyLE5pbbcuHfAc7RB6v+ZL5rq9/ShcxWnuNHddtbTJqO4w13br0oH2asP5q/OEiLuuamuXfn5qF/WIOzXDVP0/KoWcnBQnEkhZnOYEp3m20NDQ0MmTJ/NdcePJ4cOHjx49euLEieHhYfOATs+OdYoTiTGWxRnPnuXMpw3ZWkpH1Ednlm50Zatz2pB3Wc9+9nBhxWnO2EU/atOVXJJci9M7sxh0bIPnfoM2wzAMuTjduWmI4jTqWpsH2qub2s0NkH4kQtfsfSZDHvWybQV7LCfFiQTyF6czwXnhwoWzZ8+ePn36+PHj+a648eTgwYPvv//+hx9+ePr06XPnzjk71ilOJM84LM5RnzZkLitmMeM5bSjO4lQ+e0Y8x3GGHtnput/wzz+yrm315qZ1lfnzULuop7u5R+xb936UgTI6syzOAp3kpDiRQCHFae5SP3Xq1IcffpjvihtPfvOb3xw+fHhwcNA8mtPcsU5xIpHG4V71UZ82ZC1rryem04ZGWZz2cZD+z5mSxFGczgRkxvsNP+tIXlBxwK7181DV1u06tEC6ZfBxnIq96gGbQXECYyljcZ48efLYsWP5rrjx5MCBA++8884HH3xw8uTJM2fOUJxIsDE/c2jU502r4lI1JRly2pC1rJmVacVpQ8pp1AwyH8cZfJ6+r8XHaI4z/H4jzXHWKo7+lIpTFvCg7JOExBpcn1oa+jPDXnVgLDnFqTyIc3h4+OTJk4ODg/muuPHk9ddff/vtt99//33zUM4LFy58/PHHzslDFCeSJLw4q+9d7irOb369P+fiVM7z5fD1MYriVM16Bp42JIVpS+nIsZLhaPvoM/LMHapOpgmKRf80nr7iDD+D3n2/oXcn9ag1W+ncMqQ41RO9/knNaEcgFPAUJ8WJJIpSnEePHs13xY21j3I1MjLy6quvvvXWW++///7x48eHhoYoTiRYhs/jXLL4+Z1/s+0bl06cOHHi3AXdz9+bY3EqvoTGMAwrGXZnlw3m9wk5s5LmtwT59oAHToVKt1wwYdj8PqFRnzZkGO4+cz7cR5ST/5xrcd6363Oj7GV1FKfnA6oy3m/Ip9a7Z0Bdn/AfUJxSSlpnrxuqVUWfC69Zny7Y4KQ4kUQhJ6qfPXt2aGjoxIkTFGe2xfnmm2++9957yuJ0dqzn+5UHYpDxE+Dnrml64bnVv9y1+sV/b7xtYuW306I4s/qWy4BOsiY5s+wG95dYyr3oRKTqCyp9n4JkfadlXN82JB3aaH8EpnuuzvmsIt/OYvnpam6rrWrr9s41+ob7k4mCrvV8sKXqfwwC79f7oMI+j1PaOR50OrzrCXGv1rPv3vcVqcqfn0Ke4aQ4kUhBxWl+1ZBZnB988EG+C3CsjaY4X3nlFbk4z58/T3EiqeL4zqFRMZOzYLsBY87MTf+xp54q5VsugTGXsTiPHz+uuziH9u7oPfSZ1rvIFsUJRJHn4jR7s4C7AWNNdbyv/yjYQu9NihOJNOri/OxQ7469Q6PKO4oTGKfyV5zWIZwFXQ3IA98cp7W/Xrpk2bbC/8mhOJFAFKcSxQlEkfe96oCP/FGd/u+Cr1mfLvTcNChOJNIoi3PvDlvvoc+s+hzaa/3VzFHL3iHr7yIu7dJ0F+fQXnmV7kt2iLgd2ruj99Chve5bUpzAmKI4AR0oTiRQrHOcZmA6UfjZob12CQ7ttS6X6nJor3VT92WefHRf4qzHzFDzj+6OjYWyJs1PNZL/QHGiyFGcgA4UJxIo9uL07GH3znKKvHSCUypO//517yXOXchXfHaodyyK02nNoNykOFFsKE5AB4oTCaSxOD871OtMT0rXmHko3zTL4nSCNQ/FaUZnyLUjFCeKCcUJ6EBxIoE0FqfUhJ8d6t0h36p3795e//GcI/Je85GRoUPWQZ6KQz+Z4wQKAcUJ6EBxIoFG/3mc1n5zceaQ95odO3b07t3raVHPuULib2Ih+SShgDOHxrY4OY4T8KA4AR0oTiRQXj4BvgA/DskjZL95uBGKE8WE4gR0oDiRQHkozhg+wVM7ihOIguIEdKA4kUBjXJzmDvJC702KE4iG4gR0oDiRQIXwveoFiOIEoqA4AR0oTiQQxalEcQJRUJyADhQnEojiVKI4gSgoTkAHihMJRHEqUZxAFBQnoAPFiQSiOGNHcaJ4UJyADhQnEojijB3FieJBcQI6UJxIIIozdhQnigfFCehAcSKBKM7YUZwoHhQnoAPFiQSKWJz53szxhOJE8aA4AR0oTiQQxRk7ihPFg+IEdKA4kUAUZ+woThQPihPQgeJEAlGcsaM4UTwoTkAHihMJRHHGjuJE8aA4AR0oTiQQxRk7ihPFg+IEdKA4kUAUZ+woThQPihPQgeJEAlGcsaM4UTwoTkAHihMJRHHGjuJE8aA4AR0oTiQQxRk7ihPFg+IEdKA4kUAUZ+woThQPihPQgeJEAlGcsaM4UTwoTkAHihMJRHHGjuJE8aA4AR0oTiQQxRk7ihPFg+IEdKA4kUAUZ+woThQPihPQgeJEAlGcsaM4UTwoTkAHihMJRHHGjuJE8aA4AR0oTiQQxRk7ihPFg+IEdKA4kUAUZ+woThQPihPQgeJEAlGcsaM4UTwoTkAHihMJRHHGjuJE8aA4AR0oTiQQxRk7ihPFg+IEdKA4kUAUZ+woThQPihPQgeJEAlGcsaM4UTwoTkAHihMJRHHGjuJE8aA4AR0oTiQQxRk7ihPFg+IEdKA4kUAUZ+woThQPihPQgeJEAlGcsaM4UTwoTkAHihMJRHHGjuJE8aA4AR0oTiQQxRk7ihPFg+IEdKA4kUAUZ+woThQPihPQgeJEAlGcsaM4UTwoTkAHihMJRHHGjuJE8aA4AR0oTiQQxRk7ihPFg+IEdKA4kUAUZ+woThQPihPQgeJEAlGcsaM4UTwoTkAHihMJRHHGjuJE8aA4AR0oTiQQxRk7ihPFg+IEdKA4kUAUZ+woThQPihPQgeJEAlGcsaM4UTwoTkAHihMJRHHGjuJE8aA4AR0oTiQQxRm7jo6Ozs7Oxx9/PJ1OP/XUUz09PU8//fQzzzzz7LPPPvvss729vTt37ty5c+cvRiffjxL4/e8pTkAPihMJRHHG7pe//OXevXtff/31t99++/Dhw0ePHj1+/PjJkydPnz49NDQ0NDQ0PDx85syZs6NAcaJAUJyADhQnEojijB3FieJBcQI6UJxIIIozdhQnigfFCehAcSKBRl+cqVQqlUqNfksKbT05ozhRPChOQAeKEwk0yuJ02m6UkVdo6xkNihPFg+IEdKA4kUBxFecoFdp6RoPiRPGgOAEdKE4kEMUZO4oTxYPiBHSgOJFAWRWn5xDJlMRzoXwX8iXmH+T/RlmPcqmI2zP2PMWZSqU8xZlKpShOJAPFCehAcSKBohen8hBJf1yG/yGkHUPWE9SpGbcnLyhOFA+KE9CB4kQC5TDHGV6KQbOV/hlNz4Lh6wlZbaEVp7lJZnHKG2kWp3yJU5DyX5U3oDhRmChOQAeKEwmkaY7Tf4ly2jLb9WSMy0Iozl/+8pdOcUaZ45RbM+gPFCcKE8UJ6EBxIoFym+N0+i/jjKZyqd/72jHjeoI61XMb/3rGHsWJ4kFxAjpQnEggvnModhQnigfFCehAcSKBKM7YOfOsTnGa5OI0ydGZ8h3H6bmc4kQBojgBHShOJBDFGTs+jxPFg+IEdKA4kUAUZ+woThQPihPQgeJEAlGcsaM4UTwoTkAHihMJRHHGjuJE8aA4AR0oTiQQxRk7ihPFg+IEdKA4kUAUZ+w6Ojo6Ozsff/zxdDr91FNP9fT0PP30088888yzzz777LPP9vb27ty5c+fOnb8YnXw/SuD3v6c4AT0oTiQQxRm7V1555c0333zvvfeOHz8+NDR0/vz5jz/++D//8z//67/+67//+7//53/+57PPPvvd736X780EYkBxAjpQnEggijN2FCeKB8UJ6EBxIoEozthRnCgeFCegA8WJBKI4Y0dxonhQnIAOFCcSiOKMHcWJ4kFxAjpQnEggijN2FCeKB8UJ6EBxIoEozthRnCgeFCegA8WJBKI4Y0dxonhQnIAOFCcSiOKMHcWJ4kFxAjpQnEggijN2FCeKB8UJ6EBxIoEozthRnCgeFCegA8WJBKI4Y0dxonhQnIAOFCcSiOKMHcWJ4kFxAjpQnEggijN2FCeKB8UJ6EBxIoEozthRnCgeFCegA8WJBKI4Y0dxoniUl5d/5Stfueyyyy6//PJJkyZdccUVV9quuuqqq666arLtarcpAIJRnEggijN2FCeKB8UJ6EBxIoEozthRnCge5eXl5k5zwzDM9DRdfvnlZoM6rpBcCSAUxYkEojhjR3GieFCcgA4UJxKI4owdxYniQXECOlCcSCCKM3YUJ4oHxQnoQHEigSjO2FGcKB4UJ6ADxYkEojhjR3GieFCcgA4UJxKI4owdxYniQXECOlCcSCCKM3YUJ4oHxQnoQHEigSjO2FGcKB4UJ6ADxYkEojhjR3GieFCcgA4UJxIoYx+BF+8AACAASURBVHGeOHGC4swKxYniQXECOlCcSKCg4rxw4YJTnEePHs33Zo4nr776qlycFy5coDiRVBQnoAPFiQT63e9+Z0anvzjPnTs3PDx88uRJijMrr7766ltvvfX+++8ri9PMTYoTyUBxAjpQnEigKMU5ODiY780cT1577TWzOE+cODE8PExxIsEoTkAHihMJ5BSns2P9008//fjjjz/66KPz58+fOXOG4szW66+//vbbbx85csQszo8++uiTTz7x7FKnOJEMFCegA8WJBMpYnKdOnTp27Fi+N3M82b9//8GDBz/44IOTJ0+eOXOG4kSCUZyADhQnEiikOM2Th06fPv3hhx/mezPHkwMHDrzzzjsUJ4oBxQnoQHEigfzF6TmU0/xIznxv5nhy4MCBQ4cOHT169NSpU2fPnv3tb3/76aefUpxIJIoT0IHiRAIpi9OZ5jRPHjpx4kS+N3M8eeONN959993BwcHTp0+fO3eO4kSCUZyADhQnEshfnOaOdWea0zx5KN+bOZ68+eabhw8fPnbsmFmcyg/jpDiRDOXl5WZomn0p1+RVV1111VVXTbZd7TYFQDCKE8lkFqd/x7ozzTk0NJTvbRxPDh48aH4Y5/DwsPOFQ05u8vHvSBKKE9CB4kQyOdOcnvOHzGlOszjNbx56991333zzzQMHDrz22mu//vWv90kGiob8qH/1q1/9+te/fuWVV1599dXXX3/9wIEDb7311qFDh5zThi5cuGCeNiTnJsWJxCgvL//Sl75UXl5+ySWXVFRUVFRUfNl2qWSixACQCcWJZFIWp3w055kzZ06fPn38+PEjR468++67b7/99ptvvvnGG2/s379///79rxcl87EfOHDgjTfeeOONN37zm9+89dZbBw8efPfdd48cOfLhhx96DuKkOJFIFCegA8WJZPqdTblv/be//a35wZzmxyQdPXr0/ffff/fddw8dOvTOO++88847B4uS+dgPHTp06NChd9999/Dhw++9996RI0cGBwePHz9unqXufNuQ+VVDTm5SnEgMihPQgeJEMvmL0xOdzqfBnz59+uTJk8ePHz927Njg4ODRo0ePHj36QVEyH/vg4ODg4OCxY8eOHTv24Ycfnjhx4tSpU0NDQ+b+9I8//vjTTz/1HMFJcSJJKE5AB4oTieUvTv8BnebHc545c2ZoaOj06dOnTp06derUySJmPgOnbWZonj179ty5c05uyqeos0sdyUNxAjpQnEgs5TSn/9R1pztNZ21niozzwJ2n4vz58+fPn79w4cJHH3308ccff/LJJ0G5SXEiSShOQAeKE0kWtG/diU6zO830NP226H0s+cQmf/omuYlkozgBHShOJNnvJJ/ZPN3ppKfp06InPxvm82M+V3JryrlJcSJhKE5AB4oTCaeMTk93yv6r6PmfE09rkptINooT0IHiRPL9zs3fnTJ/bxUb/3MS1JrkJhKJ4gR0oDhRLH7n81kwf3UVg5AnxP/s5fv1BHShOAEdKE4UF385KYW0V4JFfHLy/RoCelGcgA4UJ4paxMYqcvl+lYAxRXECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAQHECOlCcAAAIFCegA8UJAIBAcQI6UJwAAAgUJ6ADxQkAgEBxAjpQnAAACBQnoAPFCQCAkLE459zzz4/eMyeoOGvWP5leX5OvN3WgYFGcAAAIvuK8dvPPVj3611fbxXnDPf/8bG9v72P3zlEVZ836J1/YvXs30Ql4UJwAAAiZivPSSy+9dOkDvTt3PramWr1Xfdk2mhPwojgBABCiFOell86597Gdz/3Yak7fe2vN+jTNCbhQnAAACNGK89KJS7c899xzW28JOHNo2bbdu3dvWzbm7+pAoaI4AQAQysvLv/Slad95bHnXjhX/+i9/9fOf3vG/lcU5cemDzz23a+stAeeqk5yAC8UJAIBQXl6+9ZFlO9ZPzzDHOXHiNx58bteurbcEfDoSyQnIKE4AAITy8vJHN8++NuNe9YkTJ37jwV27nlg3N+DzOJdt41hOwEFxAgAglJeXP7pmWubjOK3i3PXQLSHFySQnYKE4AQAQysvLty6fRHEC8aI4AQAQsixO9qoDkVCcAAAInr3qs++6JeBcdc4cArJAcQIAIJSXlz/6yF82zyy/5JJLrl+19Of/382b/1FZnHPW/Djk05Fq1qcJTkCgOAEAEMrLy29as2yH+Xmc98+sqJj8N8ri5BPggWxQnAAACL7vHKr4so1vuQRyRnECACBEKc459zy6c+djVm/6ipPeBPwoTgAAhMzFuWRzb2/vY/fOmThRVZzLvr+b3gR8KE4AAIRMxXnDPf/87KP3iNx0F2fN+idfIDcBP4oTAAAh2nGclwYUJwA1ihMAAIHiBHSgOAEAEChOQAeKEwAAgeIEdKA4AQAQKE5AB4oTAACB4kTOatan+aSCIBQnAAACxYlc1axP7+bTWINQnAAACKMpzqaH1+59cd1An2v0tFYZhmEY1R3uywfaq2N7M6/c1NOyv2N24OV183oHWvb3zKt3rjEvGVi+qS7TuiMsW9+2fP9AizXkWzYt3j/Q0tnkWl9923LX/TYtFst6buy+yhy9bZUR16zeKnPjg56rgcUrw+/XMFZ2uK/yrGrZNppTjeIEAECIY46zqq173UD3InfMVXeI+jTsAG1uq43jzXx2p5RE/svt9lq80r7CziZxSZBMy0qhZt+jE2HeuBSLy8vKN6jc1CP+Kt1SuVUZ16zcqtmdniyWHqaZsCH364l7cynPM8+3nKpRnAAACGNVnNYlvpvlZHanb8LPMMy5uuWb6oyVHS29HYt7nUSrm9fbM29ThyK8/MKX9ceZ3IKqdKvc1GMtK0eeirilcqt8axZZGbpVnhiVlrXuK+x+zSlSKTFdhW1btm337t3blgU9sCJFcQIAIIQX5y0P/PXzOxcvE8V5ww9eWLNn2xz3e2vE4jSa2uOZ5qyb16vaP17ftnx/z7x6q0edKjXnEYN2xHuELuvNL/NBOfu7lekmpmNXdoTv1lfGnEm1ZmdjMmxVUI867Rtyv769+QH76IOT0zzUsyhnQClOAACEsSzOutbmgb51HbeO9r28abGTUCs73HN1HbPtays39bT0tlUaTYv3d8w2nL9GWrN62fq25Yq9z06TZSo/+3DJgP3XysUtqqMI7DVn2CrFHnn3fvaw+/WuPHCaNig5rXOLijI5KU4AAISxLE7j1qVxFKc9l+mc02MmkTUx6Vy7sqOlt222faBkwI74gDWrllXvfRY9F+HkHuksHHUjuoe9oOrMHvsGmbbKl4nhZzK57tcV9PYt1bOhy7aps5I5TooTAIDfj8viXNkhjl8Ux1xK05PmtdY5QGYhBeyIdwtfVr332dlnnenkHve9uM8HD7ilJXTNGbbKMKxStO/Le/vQ04Zmd7pjNDjZOZTTh+IEAEAYh3vVV3Y4xy8uXmmnpPsgTsMwxIlE9p8znqgeuqx673PY6TuhJ+WYMed0ZK6nDWXaKsNw7Tf3xWvk04Zc2epHcfpQnAAACGN+5tDSTLu2MxFHVfa2Vcq7vK0jL4NOKspYnOHL5nDaUOZDJKOcvqM65ynyaUOulStuHP20odA2DdyrXsQoTgAAhPDirL53uas4v/n1/pyLs3ZRj/9z4HP42prZnQMtnW3zeqWPouxtm9cZchpNhlqyZFrWH2fyJYq7CN1h7T51PaRNMzRl+Fa5HsIm//ZkbmLPQagBRyYETnEW8dcSUZwAAAgZPo9zyeLnd/7Ntm9cOnHixIlzF3Q/f2+OxWnmpv/DOJdt222KvEfWOlvI/6U4roM43UJn8iyZl3Unl/dzLs3NcJ+gI+2jd6/Z81HqYR/VmemEpPCtkrfNv1s8/CNCV3YovlFJmac169MBr2D2r29iUJwAAAgZPwF+7pqmF55b/ctdq1/898bbJlZ+Oy2KM6tvuQw4fNP+/JzIReL7jCErpzpmB34XUehMni3SsvJXPvpv7P5CSMVHYAZd6/0mSek0HdVpQ9751PCtMlxRHrLBntODosyemsIO4sz69U0MihMAACGO7xwaFTNJii9IEiPDt1wW7ecjUZwAAAh5Ls6i7ZGkyPSt6su2FevrS3ECACDkrzitQ/yKskaSIqwni/31pTgBABDKy8sffWTZjseWd+1Y8a//8lc//+kd//tnq579tzt3Pn3346unjMFe9bFhn28UNDJ+HRH8atanizcoM6I4AQAQ8n4cJ5BIFCcAAALFCehAcQIAIFCcgA4UJwAAAsUJ6EBxAgAgUJyADhQnAAACxQnoQHECACBQnIAOFCcAAALFCehAcQIAIFCcgA4UJwAAAsUJ6EBxAgAgUJyADhQnAAACxQnoQHECACBQnIAOFCcAAALFCehAcQIAIFCcgA4UJwAAAsUJ6EBxAgAgUJyADhQnAAACxQnoQHECACBQnIAOFCcAAALFCehAcQIAIFCcgA4UJwAAAsUJ6EBxAgAgUJyADhQnAAACxQnoQHECACBQnIAOojivuoriBAAUO4oT0MEpzqkUJwAAFCegA8UJAIBAcQI6UJwAAAgUJ6ADx3ECACBQnIAOnKsOAIBAcQI6UJwAAAjltpDinOiW77dyYBygOAEAEJzcpDiBGFGcAAAInuLMuEud4gSikItzKsUJAChyGXepU5xADlKVldOmTp02ZUrl1VdTnACAYkdxAjqkKiunOx/JSXECAIpctrvUKU4gCqs4p06tmjKlshwAgKLHBCcQu1Rl5XR7x3rV1VdX3nBDXVVVVWVlZWVl5VTbFNvVAb4Uk0sWbbi8tX3iDfJlDRNb2y9v3XCpdCcVt7Rf3tpS8SXfze76xiVxbQoAoDh4WjOr3KQ4gYjM4nSmOavmzLlx2rRp06ZNq6qqctJTrk+l2P638v/+u0n3dxjVrgu/fGvHpL9edom4YL5xf8ekW+dnXBAAgIgusVXY/LlJcQI5S1VVTZejs7q6Yfr06dOnT59mq7JVBrskJhV/+cAVm7Z/Za770srll2/afkXTQvNvlzZtv2LT2ktdt1j4lU3br7hneUVc2wEAKD4VEiY4gXilqqquMYvT3Lc+d+68a665ZrptmqQq2Ch/yb+8eOuVf//PvrF+orjJTZepLxeLX1Y7yq0AABSdCp8vS8Jzk+IEoktVVV3jTHNWVk6vqZk3Y8aMa2zTJdOC+X9jAQAYX77slnF/OsUJRGcWp4jOmpr5M2bMkKPT051K+f5XAgCAHH1ZhdwE4uUUpxWdtbVWcfq7M6Q+lb+uAACMO5f6kJvA6MnFeU1V1fTa2gUzZ86cOXPmDDd/esry/e8DAACj5W/NoNykOIFspaZNmyFHZ12dVZzK7gxKz3z/KwEAQI6UoUluAvFKTZs2wxx2cS6c6ePvTo+QX1cAAMYjchOIkShOMzpvvHHhtddee+211/q7M0S+/1kAACA2Qa1JbgI5cxXntGkzbrxx0bVuFCcAoBiEhCa5CYxS5uKMEqD5/lcCAICsZUxMchOIi7c46+sXXXfdddddd114d3pk9UsLALmZc+9jO7cs9Vzy2L1z8rU9KBL5fqcGksBfnDdd50NxAsi76jU/fu655x78hv+y5368pjpfW4XEy/fbNJAQqenTZ2Yszozi+bW+7p6r//HZyn989qpF/uuWXvWPz1Za49ErvHcoX6tcPEc19T9/6c5f/a/rfVdM3dB9569e+sumiRMnTpxY13rrr1660xrd9XXS7Zr+153iKnv8vHXqxIkTJ972l57L//G2rDbuztI/vJeyR2mbeeG8CcffS/3hxQmLxe3+ov+91B/eK3liXnaP3WPxlhLp7lyj/85RrTmjtic99zjaxxKfv+jfnPqDNUqeuCbaQtdMOL459YdvuV+jrNagy1/0b0794a/+Ir8bEah67RO7dj2xVlGWt2zdFXANkLt8vzsDSZOaPn2mOfJanEuv+lFv5f977+XLH6v8Ue9VN6muXWPtSrt8TW/ljx4T0XndvVfLi9y0pfJHvVcvj+nN5/of9d/1yk8bbnRfeuO3b32l/64f3TZx4sSpG3961yv9f3m7fPsf+Aq1tuHp/rue/vZU30pu3VjrWqdiWaX706k/Hkntucu5oGxPumzixIkT7yr945HUH4+U7JhvX2NdIt94lC7Z0Zf6Y58cTHrdn0798Ujp/a6/pk48eMlY3X+AayaceCB1otHajMWNJX98ILWnPsKC9aV/fCD1xwdKdlzjuSTa4hqV7Xkg9cfmsvxuRIC563b8+7/vWDc3l2uBLOT7TRlILFGc5sitOEe3DdVXbN551U2GYRhfafpx5SPWnx2Xr9lZ+ciDl4sLvnHVIzsr13xDXLv53q+41+a+RO1fg4kbTd3407te3fPVFa4lr39kz12v/rThRsNY8Q/ea2/89m2v7rltY637vpZ/9dU9dz2y3HWZf9kV/3CXYlmFu0r/dCT18l1BV5W+nE6d3FphXnB/OnUyXXoy6Pa5qNjxUupPL034Wlzry+T+dOpPR0rv92yA65KxV7FjfepP611Pwv3NqT9tibBV9aV/2lL6cnPq5Nft16g5dbK59OSW1Mv1WrY1srKXt6T+1FyW341Q++b3/uM//uN73xzFDQAAeaUozlk+motTuKzpx5WP/GKyqzi/MfmRX1Su/Ya44KYHKx/5ReUjD04yDMMwJq0VfzYMwzCqr9z8i8rNay7LdF8/+9nPIly+4h/ufu1ld1N+57bXXr77keWGUdvwzMt3P/Odqa7Fl3/Vuta7iCclp27817tf+4frfTfzLutX8ZP+1J8/KN2gvPLu0j9/ULrB/K9hGEbZ3g9KN8yfcOqD1N67PWswR8lP5rvXMH/CqQ+ca60hLWsv3u8rzvkTTn1Q8pP5xte2lqhX7l6zs07z9u67MB+IdeGGf/E+3g3/4ll52d7Arc30eA3DML75veeff/4n35rrvybo2msmnNqS2lvvvmF96Z/tCzfckfrzfRO+ZpTt3ZL6sznuKJNuVrrB/K+58VtKN3hXKC3ovqMNd6TsBaVb3iFnYsVP7nOWLfnJNZ6HI6/Zc61/VdGXtZ4T/zZ/7eslfw59rjKv2XwNAl8gcZPnSU4AKFTe4mxouNlfnBnFtTWXNT1etd1dnLPWTNn+iylN1dJft17Z9HjV9sevnCUWETe4aavrr8F6enoiXG7G4ndFLM7e/vLdr/2s4UbrKs/0p1Wc2z3TmT/0Zqu5nme+UylfZBbn9kzFWbb3aOrzLnUWfO2hks+Plm4wyvYeTe292zDuLv28q8xw/uosLnqx4skuqR3nTzh9NHX6oQrrqv7U50dLnvQmWsWT/fIaXMt+LrbNc7OyvdIiG7pSnwduknPXVldt6BJ/lha3N+zu0s/FNpvPgPhrhsdr+ub3n3/++eeff1JdNMpr60s/f7DkyRnuW86YcPrB1OmvVxiGseGO1OcPpj5/0I6q+lLnz1/7esnnD5ZuMMr2mpfUl35+R5nh/NW+8Wl7BvRrXy+R/7rhjtTnD7qL88HU5yITy/Y+mPr8Punx3iE/XteNv/b1Evej8KzKI9Oy90mv7x3SY1et1v0owtdsWK/B9zPUZKQbAQDypMCK8/bHq7Y/N/lm6aJZa6Y4l8xaM8UMzZu3OsVpGHOvfOC5qu3PTbl9rnnjqgcyT3AaUYuz/jvLX9979/Ym+a/Lv1tnGEbld3929+s/m1fvXlq6gWP29r2+WzYtlldrWvnDu33L+i2YMDSY+iKgOBsfKvlisHSD+Yeusg1dqYG7DcMoGxhMDZkRtmDCkPNnnw1dKXNxy92lXwyaa5BVPLkn9cWeCY2ZNqzxoZIvBkueXBD4KJzN2NCVct1Sca3cWPIGKDbGdfvQx2tb9v0XXnjhyW/VRL62cUnJF/7iNMoGHkwNLakwDGPDqtQXD6YGGlxXfbGqzF62dIP5h1VlG1aZN3OWrXjyvtQX97kf0arUF3afyX/2rNkwDGPGhCF7G/x8y1Y8eZ+0rGdV2S3r5t6MDatS7qdLPFGR1lzzrSdfeOH7y9R3JSz7fsirCADIr8IvzrVWcc5aO8WpTFdxigWrtj9Xte6WiPdlluVZN8NXok2LX9/b8mybORk5e/veltd/ONv3Z2HlD1te37t4pXxR3bxnxRos9W3LX9+7fJMrLis3/cy3rELG4jTza8GEoT0lQ4OlGw3DVZxG2cBg6ouACNvYlfrCWsQwDMNoKf1iMDXQ4rlVWHH6bhxE3iRvF5rd7GyGZ6s2ynmqCkp36YY93pw1Lin5YquqOLdaIbVxVeqLrdIzaZQNbJWKs3VCo2EYMyYMtZYMbbVfI3PZGROGtnqTUb67kDWLv/rWoLqlvbZW56VU3CDysoFPhWE+Uumv7mcvwpqXff+FqMUZ4WYAgHwotOJ8oqpzl7c4O3dNvn3tlM4nnMS87PYnqsRfb5ncuatqy9rLDMMw5l65ZZd3DQH+7d/+LcrldfN6B1p62yoNw6hvW75/wM5E6XLJ7M6Blv0d7gxtWrx/oKXTM53Z0bJ/wBumvf5lFRZMGD6WGulWF+fG7tTIy9bkX/pl52Zl+46lhr/nJEhF+uXUyDFzlKTlOcgFE4bFLc2byXEjLf6yojiHj6X2BRdn4/dK7Du1hneTFFtuPyh5QfmulXfaUup+XMGPN1eNS0pGtpakfXvVh7emhu3iHHF34b6tqZFVZdZVrfYjbbUuNG8wvKTCXMm+BveaG0qduwtZs3i8ramRreaQN7Js31bncnk4a/OvKvqy5nPiunZ4ifT6tiofdaQ1G8u27d69e1vm4ox2MwBAPhR8cZpBKeWmYRiT1u2q6nxokmFYiWnlpsmMzocmGRlELE4nIj2JqSxOVVy6OtVSuamnZX+Paz97fdty/7JKZfuOqYLPMAxXcXoXkfLOZsarXGwtpe4o9OemkVtxmrkpXevbJCcTF0wYdnfhxu6gLfEksnxfqrL0P96cjaILpeKUuYpz2DfHmU1xujZyRGxnSFBmvEGGZc3clJ4Q++E4nCfH+9Rl3CrDqFmfjlqc6fXsVQeAglT4xWlMWudpylsmd+6y957LE5ymuIvTqsNN3llJ/3SmaoIz4nRm1AlOwzAU9SaEFKd6WtQ/qRkweyrJoTj906X+CLY20v8QwopTtc0BT4LYSF98L9u2O6RVlNcqOklOydyKc2RVmW8K0LvmxiUlrjU3lI6EFJu7XwPuOuxBKbfBx5xV9T5edzdblzQuKfGsJ9NWGRFnL5niBIBCNg6K09yx7hygKU1wOn/dNeX2ufIaohzN+W/B3Ddc2dGyf6Blv29Gc2VHizR5Wbmpx1eWzuU93tOG5LWZs5tRc9MwDDvg5Gm8sn3dZUZgbElZ1lIq95lnOjC07dxry3KOc2O3tMH2XKNqblIxB5lhq1pK5VV5czz08VqWbdu9Ozg5g65tKJV3HHv2s2dfnFJoKtYsTQo2lIq/2rOYIhMbSuVk9O79N28fOKEYOt0YuuzGVdIefHurFDO1raX7Wr2XZ9oqw5rkzFCTESdCAQD5URDFaWWid8jzlOa+df/lhmFHpzOc+oyJXZyKc3qcGPX1qBmg3mHuNLcSU4yMZwupuI9uNOMmoAXdE4Hu4yk9+VW2z32opWoyNbfjOOU1l6QXVKRf9s01WiXqjcvMHew6GMB7y9DHa8phjtMwDCn4PMcdhhWnfESjzD21ac5cqtZsuI6YLN3omxN1H0/pO9jUd9yk1H/KQyp9jyLzsiXpGRXpoLJUbFL4mg3DiDCByQwnABS2gijOQhC0k72YmFHoLqfuoErTIPSkKBS3mvXpkP8rCL8WAJB/FKeF4lQGX8gxo7ELPOMHMMJ2rdObAFD4KE4LxamY4wzYza2F+3BMwM9sTm9ahh8TAQAoDBSnheI0DMP90ZWpkTHZx+0ckDo2M6kY12rWp91xWbM+TW4CwDhAcVooTgAAAE0oTgvFCQAAoAnFaaE4AQAANKE4LRQnAACAJhSnheIEAADQhOK0UJwAAACaUJyWjMVpfb02n8QCAACQpUIqzllrp3TuqurcNflm/3Xy96o/ceUs9YJVnbuqtqy9LKc7Dy9OvrQZAAAgZwVSnLdM7txVtWXtpNufUBXnLZM7d1Wtu8X8y6R17ui8+SF5kUnrdlV1PjQp+y0ILc5l25jbBAAAyFUhFOfcK7dYyXiZqjh9ESkHqCtGnUum3D43240IK06+thkAAGAUCqE4BVVx+pry5oeqOu0GnbV2ircv5165xdOgkVCcAAAAmhR8cXqactbaKZ0PXXn7E/aOdcWM5qR1uRzNSXECAABoMj6K07pk1topZmje/JBzKKfnsE5zDTqKk/OGAAAAcjN+itPJTcNVnIYVndaYcvstV26JuTgJTgAAgNEYT3oO1gAAIABJREFUJ8V5u5Sb1s18n5FkifM4TvMzONmfDgAAMBoFX5zWJ3G6+jLsI5AU5xJFkmmOk+wEAADIUeEXp/9MIP8nIrlvHPvncZKcAAAAozAOitP6SiHXJ8Arm1IxGxodxQkAAKBJQRSndYK5d/g+9V1xufPxnLuqgic+o6A4AQAANCmI4iwEFCcAAIAmFKeF71UHAADQhOK0hBZnzfr0bj6SEwAAIDcUpyW0OA07Ovl0TgAAgKxRnJZMxQkAAIAcUZwWihMAAEATitNCcQIAAGhCcVooTgAAAE0oTgvFCQAAoAnFaUlqcdasT/OxTkAi8dudLzXr0yGfWhJ+LVC0KE5LQRZny4L04G3pPXNnh9/AGgu+6r063s8RbWpfN9C3tCmeleWguqNv3UBfc1tt+A2s0XHrWG6bde89rVXZLLJsW/F83Jbz8WLKRxx+bZ6V7duaGtma2tcwutXMmDC8NTW8pCKejeK3e0x5frutn9eAn9Xwa4HiVUjFOWvtlM5dVZ27Jt+c7bXyt64/cWVOmzMOi7NlQXrwtv/10NVBS8f95Zyh70nW+4H8TpDle1hVW/e6ge5FdYE3CH9Pqu7oC1/cK2Dzqtq61w20V0dejWsDCqE46+b1DrTsH1i+SXoq6tuW7x9YvNIwjKbF+wdaOt2Pur5tubh93bzegZbetsqQlQdeG0z61q5l23ydFH5tRlYRukdJekam5WZMGFZ2pPdyc/0RVhiuoTSGlTj47Q41Br/d4b+9xfR/k0BUBVKct0zu3FW1Ze2k259QNWWEa9fdYv5l0roco7MgizPUV7uU85q2+L8MPsp7kvyuEPd7Uqhbl2Y781HX2qzavBzCMecF43+NDKsp97u7cGVHy/6eefWeuJSvNXvUUCepZ+WB1wZyfU2sLyrDr42scUlJdkkXlIDxpqGtcUnJyNbSjfGsjN/uDMbktzv8VdDy2w2Ma4VQnHOv3GJ15GWKpgy/1kzMhyaJC1wBGt34LM7gHe65v3EHyvye1N3cI70xjPl7UsguOYW61mbVIuO9OM2m7O1p2d/h/GzM7hyw/uqKS0vlph6rR42AJPWsPOjaQO7H6f3RDL82uo2rUtklXUOp8vYbV6VGWic05rAFYSrSrfGtlt/uTMbotzv8hdDwMgHjWiEUp6BsytBrfX1580NVnZ4GjaTAijPDAZqGkaE4XdNGjtpFPX3NbbViH1lda/NA5N1V9ntMVVu3dTSV9E9wdUffuoH2RfJOK997kvpILGsbFMNZNsIhXKr3JHPN3ts78yXqt7HqDnuRpnbzmZHu3bs/zrVhA4VQnFY+bpLLsm5erzUx6YpL2+xOaUJUlaRC+LXBpF2MiqMPw6+NKjjpZkwYVu1tb1xSorp9RbrVPNqyIt1qL6W4Wdk+66BMaZ/+qrLg+/XdoKFUukqEr7p3G0rlA0n57TYK5beb5ASyMM6Lc9baKZ27ptw+V/rrQ1fe/kQOO9YLrDht/l3nX+26TYpRMVwHdAb8S1e7qKevuae7ua3WnHJo7mmvjr7Hqqnd/a7gWtB8T6qW/6F3vSfdulT+J9t8t3D/Cx5hFsS/qbcuVb+fWevxH/5lvqEubTIM76Za7zfu96TAx2s+mfK7VGHMcdrTmU2LxWSk82flUZiuHeWzOwf8SepeeeC1YexzKdLp3YqfzPBrIyrb528+w9tqhlGRbrXybuMq5/ZOPoqDODeustvUuwZD3GzJhGE7YRuXlMg327jKfbKR+7Shjavk9jXT1tyqinSr4lG4Dxjgt7uAfrtJTiC6JBSndcmstVPM0Lz5oSQXp+uqgDnOmvVp5b9z0j+jTe32cfq1i3qyeU+Sbin/K2y/J0kXSu9Jivcb3xxJTu9JrqsU+93Ew5SeAWubxdqkNyrp2VA+Xtccj2tr4ypO6bRttyhvXM50phSXeT9tyDAM67038GSK8GujaCgdUZ0JHryL3JnLtGLR6jz/rnZlcVozlNLhnvLN/ItIx4YqjjcV14qtkhdxHTDAb7frXvL9262ecI52LVBkklKcTm4aFGfw/1l7/8H1/iscTr0fTZo8MP/sHLPvuQvPv9e+A620vCd57tp1PoHzwGsX9XQv7ei2/6ycxQl+vPK1uRRnrDMgYmpT7EDP92lDdk9aU5i7ty1zt3b4tREFnTZkzjUq5j6Nsn1WFJbt21qyb5W1h12a+JTX7Dvc0yxO715yUY2ezJVWoprFFIXqbFVFurVkuNX5s7QIv93uh5zn324mOYHIElGct0u5ad2M4szbe5Kzwgx34X0X0fOe5Fqt+7NR7K2qa23uaa1qal/X01qV1XuS+x0ol5MSlm2L9+1ITGeKlMz3aUP+wzR3b1smWjv82shCThuyotP7mZpl+7aWpGcYjUtKRlaV2cd0SlOMFvXhof7AlTbAv39fWonqUzmltdnF2VA6vKQsbRanZxF+u4UC+O2mOIHIxnlxWp/E6epL39nrkSSqOEP3u2l/T7L3SbUVwiyIfJX0fuNss/luZJ1q0L2oLuhINdXj1VOco9ir7j4xyJySbAs9bci9o1zLaUPuCUvvR72HXxtZlDPBrTOBrOicYR6CWZFuLUnPsHemzxDHZdrUh4f6dtaHNqU8IaraRy+tzSxOa6s2rkoNL6nw1i2/3cqr8vXbzV51ILLxXpzGpHW7qrasvUxckKxPR8qtOMPOLRiL9yT7JAb3kV7uU0F9R0ppe0+yty3g2KxFHdZGVnf0Nbe1LnUeY+jj9T4i1dkSY8511rn1157l/v3sDndE6jltyLeL3DpmU5rXDLw2soDThjzkFmwoHdlaml5SYi1ltuYS30Gc6i8K8t+d99wjaRHrZHbpft3FKX/gvLMZq8oMaxd/qe+++O2W5fm3mylOILpxX5zWdxG5PgE+6wlOI2nFGfAhM2P2niQ+YyXsbFbPnao/7kSW43uS+IgW97L2Rsp75aRtDn28rlmcutbmge6lHd05fedQfG9I4lOQTJWbelr2D7S497OLG9S3LXcdl2l+WVGH+icqw7WhPF+/Yp8lZD3w8GujCepC96ynvOfdOltIzB3aH3Kk+oQjkZIiT9135/qaIrlHy/ZtTQ2vKpVuX7ZP/rgl8xOUnDu1P1DJXJVvI038divWnKff7vADQOI/UBsY1wqiOM2U9A0rHMOvNQzD/S2XueSmUWjFqf4IJHdf5vAJ8GP3nuR8sol0e9dnnag/O9r96X2u9zPfcL8DhX9GtHkar/dOrTchzzulM1MS/p5k38D5JL+qtnwXp/yJSIZh2E0pT0ya0WkP9y5y+8uKXMNJzPBrM3E60nrA9u5zKToDrw3m/8BL92dbem8gBajvjKKgL09XfSqnb57Su+Nbul/nQEzf12b6Dy2197/bd2QWp+Kr2Pnt9j3w/Px2M8MJZKMgirMQFFZxxoDvWJN4P10PGNf47Zbk7bebb7kEskNxWhJXnKP6/paECfjKO2Dc4rfblq/fbnoTyBbFaUlgcdrvSsX+z577IDMgGfjtNoz8/XZ7Dj/O6lqgWFGclkQWp2EYNevT0f7h836JsGeMx2LzfpEdkCz8dufpt7tmfTokKMOvBYoXxWlJanECAADkHcVpoTgBAAA0oTgtFCcAAIAmFKeF4gQAANCE4rQUSHEuXLhw4cKF+d4KAACAOFGclgIpTiRSzfo0H50IAIkX+RMkihHFaaE4oUm8n9Xt+3a+MWZ+zk7IB267PohnzD+5prpjfH7WT2ThT2/Ytfp+cviGBcBmfUcv0alUSMU5a+2Uzl1Vnbsm3xz3tREUSHHmf6+677uqFV/rPBq+76Q2+b9C2rxE/i7scSnu7x4J7QYrOOTUyLIzqtq6xXdPB99FUF5Ud/SFL+4VsHlVbd25fW/h+CnOCF9EnnHxwKBXXZuf4jS/gtL1I5Hxf1rGN/GF7IpPPPV9MGqMX85ZuamnZX/H7MDL6+b1DrTs75lX71xjXjKwfFPGX9gIy9a3Ld8/0GIN+ZZNi/cPtHS6f/Dq25a77rdpsVjWc2P3VebobauUN0P81SN8WfdtxJ2aDy3omRxYvDLjmvkGgCAFUpy3TO7cVbVl7aTbn1BV42iujapAijP/GkpHtpakZ1h/84fgKDUuKRnZWrrRe3FFujU1sjU1sqrMvqRs31bPJeNR/N91F6U45Tf4uIszVHgGqdS1Nqs2L+dwHB/FaUaJ9ERVd2RbHuOlOK2wlq61Uzvp38ug/FXy/HzGGt+zO9XtZV1uF+HilfYVKztaPJcEybSslGL2PTrF5o1Lsbi8rHyDyk094q/SLVVUOau6lyCVm3paOtvm9bpWMrvTE83igVg3y7hmvuVUrRCKc+6VW6xSvExRjaO5NgsUp8lXhGX74pxorEi3KtdWtm9ryb5VJc5VjUtKhpdM2Bf7DOsYW7Yt9u++zlyc3c090tv5mBdndm+fAbGS6OLMvsuzXklhFefSjnbxojS1r+tpX9pDcUqX5P4bJ5vdqWyvpsVmz63saOntWNzrtF3dvN6eeZs6FGnlF76sP7/kylTFWeWmHmtZOeNUxC2VlDkbcVlr8Z559d5Y9wS0Sc7QzGvW8o9/AhRCcQrh1TiaazMqkOLM9151fxH6irOhVNrn7putdO2UF3OlG1e59tSLYa65oXRka+lG87/mSlonNM6YMCzvf3etOer9Zn+tb2I1i2u9W7Vsm+p/c2sX9fQ1t9WKPeB1rc0Dkd917G6oauv2f0VhdUffuoH2RfIuaV9nqA/1s7ZBMZxlIxygqSpOc83e2ztJpI7U6g57kaZ285mR7t07HejdUxlDccbzGrm30Nps84ULLT9zT3Tmpzq34hQ/Od5nMuP9um4gHoKnOO2fpea2Wqs4m8z/Wk/F0qbaRe7ilDbJ/8Pg3qp45kc1vr7uB5W5OM21xTDNWTevV9VeclR1NjlVas4jBu2I9whdVrlfW0w9KuNMFN7KjvDd+q7pUr/QucYMy0qb4b1lQEM7ZZxxzYYRlpzmoZ5FOQNKcVoKpDjzrWyfsqjsSzaukovN3BUuZZb3GM2KdKs7wmZMGFZNW25clRpZVWbMmDC8tSQ9w9i4KrWvwXD+atg79+01Z3m/ode61+zdwmyu9W1V0L84tYt6+pp7upvbas33pOae9uro817er5N2LWi/80kZ53p3vHWpHGTmu6z7/S/CHKd/U12HJErDWo9/FkeqLs+mWm/b7uIMfLx2jog3+5jmOGN4jYKKRFknsuoO70ERqjvNsTi9z6Trf1dC79f30yKOBHAVp/nD4LpqaZPzgt66dKC9Wn59fT8eVW3t0o9K7aIecafmj00c+6A1vr6OqMWp/l+y7DUtdiJpZYd7Nq5jtn1t5aaelt62SqNp8f6O2Ybz10hrVi9b37Zc0XxOcWboUeeAyIBqDD9MM2D3d7RlDWnLvVnsmzp131GmNVuCktM6t6gok5PitFCchqEowsYlJSOu7HNPELoP+ty4KtP+d/ftbRXpVvNOy/ZtLUk3TBiWJz6tPwRuVcb7DbvWfxqTfInvWldiZtoq898Vxb83UiSJ6Q3vrE8gxSGAnvMS7Hd080Lp3VHxFuh778ypOF1XKYLAO4sjZ4RYm5Sh0rOhfLyuGVzfWSkxFecoX6OAIvEmcqQtUTyiXIvTO7MY9Fp77jdoMwzDkIvTnZuGdJxuXWvzQHt1U7u5AdLLFLpm7zMZywEJhs7XV4hanDE9KHsu0zmnx2wpa2LSuXZlR0tv22z7QMmAHfEBa1Ytq96/LIotwmlD9iGhqu5UnKAjhWDWpw15I9JZdmWHvzjFZoef5+Rbs0O9k4s5ToqzYIozz3vVw04bqki3+s7jcTeZtes8+FyfjasCd4jvazCc84fMFTYusQ7r9C5lTrtKERl+v8HXKg4qlQ5jVVwrT/Fm3KrA/8P15pS3scJFnD9z3uk9d6GaX5EbUUtxeu7adbaQ88BrF/V0L+3otv+snKMNfrzytXEVp5bXKNviDHpEcRzHmfGYYPdLFji5aF3b6s1N6yrzx6l2UU93c4/Yt+49fVv5qmktTj2/g44xLs6VHdZ+Xtcxl9L0pHmtdQ6QuUc4YEe8W/iy6v3Lzl7pTKcNue/Fdy65vtOGPFOz3hs3LZa2JPM+9wAcyulDcVoKpDjzy3e0pbeoPDvE/bOe8hp8H4EUcNqQM5fpno+0drU7J62HfmBT6P0GXes7hMC1hf5r5UNaI2xVXovTWWGGu/A2op7idK3W/clH9lbVtTb3tFY1maeYZFOc/vMwxntx+o+p1VScng8KCLnf8LOO5AUVBykqXnfPyxR8HKdir3ocJz8VUnHGtFd9ZUdLb1ulUTevd2DxSjsl3Qdxmhu/WCSgtCM+WOiy6llGkWjhpw0p70sqVG2nDfk227sq6Qa+e4ly2pCJ4vShOC0UZ/CJ5IZhqD9HM3iHtWu20uZvuJCV2FOqAYd+hj0EVXQqrvWv2TwpytzCbK/1C92rrr047Tf7tkKY45SvkmrS2WazNa3j/LoX1QUdh6p6vOOsODOdm+zrjzGa4wy/30hznLWKoz99hz2EPij7JCGxBu8hwjGda19IxRnPZwiIoyqdU2HMXd7WkZdBJxVlLM7wZXM4bSh0V3hWJ+jkfNqQtB/fNbwfkKQ+LyrSaUOGYQTvVS9iiuJcuHD8jfr6BQwGg8FgMBiMwhzq4pw1a844GhQng8FgMBgMRiEPipPBYDAYDAaDoXdQnAwGg8FgMBgMvaMoinPHjh3+C+8FAABAgDEuzi39g10rnD9fNO3ZHHiJtKDnqhVdg4qbaS/OHTt2UJwAAABZGbviXJEevHjx4kW7ODf3X+zfbF/ev0V5iRib9zi3GUw3yzcey+LcYaM4AQAAohvbOc4VXYNWcW7pl2crB7tWKC4JLk7/DfQX5w4JxQkAABBdARSn9Wf/JXIINpszpOZe9VgmOP/pnx69KPmnf3o0pDh3uFGcAAAA0Y2X4pzjW0nIQZ9RR1fXU+YqurqeYo4TAABAkwIozih71V2TnYPpFa797KOZ7+zqekrOzZDirOc4TgAAgJzkqzizPHPIGXZoxlWc/sG56gAAAPEau+JcYR+JefGi2YhZfTqSe4JTvnHcpxDxeZwAAADxGts5zvEw+M4hBoPBYDAYjEIeFCeDwWAwGAwGQ++gOBkMBoPBYDAYeoe6OMfdyPvzyGAwGAwGg8EIGoriZDAYDAaDwWAwYhze4mQwGAwGg8FgMOIdFCeDwWAwGAwGQ++gOBkMBoPBYDAYegfFyWAwGAwGg8HQOyhOBoPBYDAYDIbeQXEyGAwGg8FgMPQOipPBYDAYDAaDoXdQnAwGg8FgMBgMvYPiZDAYDAaDwWDoHRmLc13X4ZcebhyTrWls74t+X2u6D/e1N47Fc7Su63D3mny8NgX2nCx5uO9w15oCfN7y+gLF/KSpRlY/A4X/AAv64eRrOD/DWn+Y4/hpZDAYjFxHXMW5ruvw4b6Hl2Rz30se7jss9LU3xlBXvnXG8Bzl/B5QIM+JtSWmUbzfxFKcBfUCKcaarng3bxwUp+shWz8l6+J7gL4bxP5wGtuln6lCa1nxqxf6rGYszrz8CjMYDEacI5Xpn6GMxWk2RHdXVy51lfs/f8HF6axzTVdW750hz4D5HhB9gwvqOVnXJd6lljzcl3OcxVacBfACBY410ksWx+aNwXt8XHeRW7hnX5zxPpY13a7KbGzvy9BkOT9duW2btMia7uB/DcKLU/krnMMDoTgZDEY+x+iL0xprCqKu3Otc053foCmI56SxvS+eqcT4izPvL1D4S9b48EsU56jvXWtxyilmjzXdh8MeyJgVp2rbMj/5qldB/StMcTIYjHE2UmKnj/WPmth90/fwEqs4H+7OuGMohrpqbO8T/+yKO5VWu861AzDDv8JLHu5TL+tKCkv3GtcGeDame418133tjf5lC/c58b/zuZ8Zq1PXdR1+6eE11g7KrjXWDI10X+a2KffuydvgPBsZizP/L1DoS+bdVOuxq39NnE3yPDnSSsxru9Zl/UyG/QzE86jVr5fi4fjXr3yAEX+kPWvzPpbM2xw4qf/Sw43KnxbPXQS8EJkXzHnbgp7Y6HOcvp8T815UL5bvpzTji8VgMBgah2eO03/o4bou5x+m0AOwcqurw/I/iK53Vv+duv7ZXdMVWJw2eVPlmVr78crvK+YIC5qZvn+vM7+jF8Zz4rSjtMHS2+GaLnMNUk6Ztxf3JR6+WImYSXL/zLguDz+OM/8vkPIlk14A58l0P3bl1k5f8nCXfXvxJNjXunb+ZvlMZvgZiOFR2w9KXlb1cBTrVz5A1Q38L2LI2iJuc/iODvVPi/d/JBQvROYFc962oJ+TTMdx+n+FPQ9EvU7Pvz8ZXywGg8HQONzFqfhX0vPmGnNxhs3nee7Us22Z9qq7DsKzp+tcMWdNAHgOAosWNP5lC/c5sYY1n2Q9J87a5Lc6Z/3KP3u2TXr3ct2pc7MMc5yF8AJleMn84Ri2tdKTLOJgycN9h7u6uoNbIcIzGf4zEMejtpf1vl6+h+Nfv/IBRv+RVq0thuIMmuOc6S9OxQuhtziDntjM56q7f4W92+Ndp2IDMr5YDAaDoXEktjhd839h//qb8xwhb1EhhwlKyxbuc+J5Na31Nz78Ut/DS6RDFWMsTk/LFu4LlOklC3jsQcfLOunpmRjue6kvrKsyPZNZFGeOj9p+sNLrpX44/vUrH2DEH2n12mI7jjO/xRl0BLz6iY3+6UjOQ/buIveuM6A4Q18sBoPB0DgUe9WdPz/sHMfZaF6S1+L0nrCZ8TjOmY0PvyQfdSftfbbekB72vPFIhw00PvySb/rB9U+8d9mCfU4a2/vE0VrSShrb+/q6u/rCK3Omp7qcWUn38+M/KnRmhOLM/wuU4SULmuNUbq30Bi9tm7zl7lcq+jMZvThzfdT/f3tnGxxHcebxPSRZLz7Cy3KWkSXLkix5jWRJjmIbMCE5CE6F1NVxZYqNZJkipcTAAQXGNnHOwVmvJcBxIr+hEB+HSXJfUnqBwsF3YLvsEIpATivsD1qZC9rDINVh+Q5ZiyjBXVw396F3entet2d3Znp29z/1K2q3PTP7TM9M94+ne0byQenPu0hGqLN/3QPku6RN9sYd9t/0vGb4rLr+1aIZVdeeiNQbphUbeVZd/zpJ9eSQzi2snylQXU7KxjzlyQIAAAfxraDDMeoZ6CadnA7O2xU7mvlaTw/Hs+psj6I3sz45aU/R65w9e/bsvx55UZN+UFSUdluv1gk73KbYuXLeJ1+O8wj9ObZfTO/JIfEnSPeUMQuNX/e8qKJNTlFlYtMOeb/4oNWaTHUNZH7UeudL93C0+9c9QPUZTy6JV8wa7U3ZFnFi/D5OvauF/QnDE5FqQ+7Y2AkYTI0ZX8P6OU7dW1h1INqANY15ypMFAAAOgr9ymb9YF2JgC2kkIIET4EQAAIB7wDjzlYyeawaZANHxCDgRAADgHjDOfISMZqKvFQRExyPgRAAAgHvAOAEAAAAAgLPAOAEAAAAAgLPAOAEAAAAAgLPAOAEAAAAAgLP4vva1dbbD88NO/K6XQZ2g/nHUuRG5l2Nz4lgAAMAWYJweatmFB5nD5Gf9Z+9RezlyL8fmxLEAAIAtwDg91LILDzKHyc/6z96j9nLkXo7NiWMBAABbgHF6qGUXHmQOk5/1n71H7eXIvRybE8cCAAC2AOP0UMsuPMgcJj/rP3uP2suRezk2J44FAABsAcbpoZZdeJA5TH7Wf/YetZcj93JsThwLAADYgu/f/g4AAAAAAAAHER8BAAAAAADIbcRHAAAAAAAAchvxEQAAAAAAgNxGfAQAAAAAACC3ER8BAAAAAADIbcRHAAAAAAAAchvxEQAAAAAAcNA1Ix37QHwYoo79/QvbhIeRPuIjAAAAAPKAVRc+lmb60tiwa0aSvji6SlUiSZKkUBDdwqyARi5JI12p1tQzzr5jUrYeO3+dcBint+tBfAQAAABAHpCGca668LEkScdmRljjXHXhY/lr3zEpYWC6hdlA3zFJYqql75jSrVXoGmfXzMe90eTesufYrdVJSuP0ej2IjwAAAADIA9LOcfo+YI1zW+8XSZmQ96lbKP6QU9I1I1kKNeWoetYPPRvXiaVD82I9iI8AAAAAyAO0Itg1I71/4WhiJNQkt6cwzr5j7NBz4p90C8Ufcir6jkk0LaeGGVZOWmYq4/Rkbs+mOlFcLSmmH3iyHsRHAAAAAOQBusYpq8O23i+Mk1KsQUaPvq+VS91C0cfLgZldKSU74U+mxrmt9wtrGVNPYlonPFeLZ+tBfAQAAABAHmCQ49xG/5XLOPMix6kup1VnaJzRo+9783EZ2+qE72rxcj2IjwAAAADIA+wzzqSRyPvULRR/yCkxmG6oY5xkNX3j/GAk5UPuWYTRFMzUV4vH60F8BAAAAEAeYJNxsvtJmpluYRagzskln8vWlWw941Q8NZULGNeJ6dXi+XoQHwEAAACQB5BXHcnLx73RNI0zMVFP+UiNQWFWkHyLJJui435yiN1ckiRPTmG0o05SXS2erwfxEQAAAAAAgNxGfAQAAAAAACC3ER8BAAAAAADIbcRHAAAAAAAAchvxEQAAAAAAgNxGfAQAAAAAACC3ER8BAAAAAADIbcRHAAAAAAAAchufr6A4ryks9hWWAFNKTeFf0yq275CPIosUlulTlC3MTzBPSdF89p/a1tySKTcas+aWthu/KmO6pmtoI8/wkC1vvpYTZ64HzeVhiJvXqvXbM/X9m2774FQTJLzBd5cCg8KCkoqqGmssJtTKJL5m1tOl3V2KrlhvIt75YJzZiurWcqjlhXG6ZZxFxsZZ5LxxJqVTtGumJ5cpDzxjs3TROA0uDyXV/it1qbu6hOBd0cywfbDWiFlt64Q37AwFMk7/hN6PWjbOKtY4a2CcXkS888E4sxhLLSz/TnLCOLPGRNXpzBw3TkfykZngNeOQiWlaAAASa0lEQVRMcYUYiabWOHlovbZUF6eM072WJGX7ZrSm8Fa9xFfIuGayo6SQdYoNSOuH9H46XeNkqKqpWFyTcY+WXp8o+gx6E/HOJxzh5yC74XdEnj2o1nddN2GcRbkyqp52ePYYpBuu6b5xptRNu4xTaZ92KKMY3eRpOVWFwpt0VjdLjM3SonEWmKK3ZqbGWQXj9B7ihU84ws9BdsNvnGm02m52EkzP5CzCFTOVceo5qLPGmUCocVrWSh6PdFw3XTTOMh7ddMI4Kd/51jItYlqJFI2VpZZTeBuuwWXjNFg5HeOsSm2cTdVLllX4+WmprXCIVYEl/DRVL+RnzfIafhZfU8ZPV+v15qS4tMQLn3CE395ewaQx5dzKfD9ZYpyOS6dwxfSycTo8pG6PiZrb5Fo+6cwy4+TUTfeN04jmxdc1L77OLd0s0XzlbG+FN/sa9HWQccpEv6lgif8veVh2/bUqXDPOpuolFBinc8aZQj3FC5/HYe+xggzmqTg6+doTCLJD4WS9cRpJhqKEL29nh4Dan4+0SzE9igvXA79ues04dTH1xQy9M2thOym2zzLtH2+5tZLTNY2Mk1FP9c5NzXKJTOqxdZ9SN2Gc7hinvnSKVzqPU1jsKyyWmGXfgYPp3MkwTmdQnppDMM6sMU4j7xTvlzDOHDdOLd9oqflGS82xY8eOHj368ssvh8Php5/ZI3uk2e1/z2/eq+2NcHLPb97jaUuvXVC5tL55WX1LXc3yxVV1NbXLyq68hrMdfmDpjofrw39f99RDS3/yQMPTmwLh+xv2PFj/04freh+r6X188dNP1u99fOGPvtvw4wer932/cp9V47zl1koVdhmnVjo5dNPAOJWZTpVuwjhdM85FX5oH47RsnJIkHdp05NEVoUObjvSHX5UkCcbpEePUOzUwTq8Zp5WtYJzeM86Kq0ryxDgJkiSFw+GXXnrp6Wf26DVuiq9LfvLOpnf+z4jvva2gtjeSsiGtD6y+ee1dK1Z8vXZJY2318prqZTXVDRUVVVdds4CnHb6/+sebA3u3Bg48Xn9wc8OBRxsOPNawf3PD/scaDm5edujBmr3bv/yPD9XvfWR5eFv1/i2LnzUxTq1c6mKjcaqkk0M3jY1TRqubME43jVMtneKVzjNc7S/XFhKneaDmHygwzlTSmd5WZlx93UIj3dScGhinI+gap8/iIlocYZwwztTGmZKb7vi2ERtPfX736csbT32uS0rjnP8l/5fb7vjr27/z1hsnJUm64oorJEl6642TNdX1VVW1JfOvStmcPry4d9vyvi2BA1vqD25d+twTNf+0veb5J+p+vjnQ+2Bz9577fv0fv/uvXd87/EjLk9vr9m+t3K/upwpL1tYt53RNJ4yTlU5WHK02NSa6CeN02TgV0hlobH73zBn/guvpaQ62d05NXQw0NpOvgcbmqamLwfYNzqleoLF5YmKS/qLrlOzbf5COzLKTprVOk6FxBts7p6cvBds7A40tExOTgcYWWiJaFj1qnPsOHEqeGlPdzNA4gx0bp6cvBTs2umac/vLK8VgsFO7JxAYCTSsnJicDTa08Kwc77p2evhTsuNdW45S4yVLjFO+UMM5sMU4td5++fPfpy3ed/PPdpy9XP/OWeWNYvqB6+bIbb73lm0Q3H931LJHO2ur6+rpAZVXql5lva3hhc8OBh5c/9VjzM4/U79lS2/fDhn/evPTZ+5fvfGrjz/730heXL8f/588X9373l1tbDj627BBRTBVijZNKJ5vLtNrUwDg9apzsNLjhSMRXUDwcidCSubm5V47+VrsOxb/g+vHx2CtHfzsajVJtDbZvmJubo3vgsdVg+wZ2Dy4bpyRJL/f9y46v7v3V1kEqnbpOY2ScgcaWeDwuV9FIRsbJ/woJF/GXLxqPxdSHpi+O6ZilEepTY6ybAo2zf3BoODJCDJLeKfF4PNDU6rxxthLjHI6MDEdGaHn/4NB4LOZfWMl+/f4DD7lonNp/st84o2PnTpw8BePk5L6uTfd1bYJxummcS5fW89NWV87PVxYu5UerlSZkm3HqNDUmugnjFGmco9Eoa4TE/G5aeytJfPoXXD86Gg22bxiORMbHY7pGOByJsMYZ2rWbtUxin6Fdu6meks+BxmaqaNpF5bUuGCe1FmI2Kqf51dZBE+MMhbslSQqFu+nX/oEhXeNkDZUYp46ZedI4gx0bz5//cGrqon7MThqnxVOTpnGaQ4Q7FO7RVdXR6Ji/vJIxyFJfUWko3CNJEv3qgHHO95Ec58RkoGllKNwzHov5y6t8RWX+hZXjsdjc3ByVy+HISP/gUCZqa2ScRrewdlEZ523r7pyYnDz8/AswTneM876uTeREWJVOGCeM0wvGaampgXF6yjiT0smmZIhoktHtYPuGF3/569Cu3e+eOUMTlv0Dg1pje+P3b/b9/BfEOIlHEqekhHbtjsfjgcZm1jiNCIWJsHYKMU6iL4c2HaFOs7kl/IfBEdZ7VMZJsptUN80MktM4PUn/wFD/wNBwZMT4SJ01Tu5T47ZxDkdGiFaqjNNXVBrs2Dg1dVGT6bTROOfLo+or2RFzUjh27j2yc//CytHoWHqpTRincKG0xTiJbpIcp1XpLCq9snnlKn6qS0r4qbfCj+69gZ8lC6/m5+avtPCzauM2fv6q8SZ+7r9jDT+rGm7j58bG2/n5VnAdPzV1y/hpal7JSebGecOKNiOqaxv4WVxbz09j80p+bljRys+i6lp+6uqX81Mwr4yf0N/eys+isnmUhAaQXCadSalNPRqlNvV9cddu7fpkJuiWbT+gezbapyo/6hrUWiRJYnNm3d8+NBH9TxKzQmuY1GMo3D0+HvMvqJDfJZH8b7C9k8o6ETV5jmwLO6pOE4fa9QONLVNTF+nEBpI69S+oGI/F+p77Ba1PsjJbPh6L+csr2LF+mnbtHxgiJfF4nPyutkSFv3zRaDQa7OgMhbvHYzF/+SKfPM6uDcNeLJ8ajSb2PXdYGWEiMamsamqHLYEmUuev0noLNCWrUT785E+MRsfIWLzWStmSQFNr8lwMDlFD7XvucDz+qRxJj8pT5c8riUeSNefm5l45+irJaFLj9JdXUX8NhXtIUpOMswc77iU7oR8yM07GdeRuwOcLEehnVaGkMc7Z2c9I+cTk5F13BycmJ/sHX5qd/WxicvK2dXdu37Hz888/Jyscfv4FoqdULg8//wJZjTXO9cEOuk9SyJbMzn62PthBCj/5ZPp3b7zJrGmudF6XTn7d1HzlmnkM44Rxesc4OZsaGKdHjZP2giQNqTJFlX2apyeNjJOmNs1znMORiDYG4cb53xPTFoyTwb+g4rXXj/sXVPgKS0LhbiJzJsapuz5RRjJ7ks74JGZJ7ZCurConthrs6PQVlvjLK8ZjsVC4O9jRqRoZ15ZooaKp3Oci3TBcM079U6Mxzng8Hmhq8RWWJiJsavGXL3rt9eNEHGlh0jjZOpcnd8ru2K1KcAaaWicmJgNNrebGGWhqnZq6KItpIrVJPsTjnxK5DIV7yNRPXeMkupnIWZZXjcdiKuP0FZVRxSRp12DHvaPRMX95FRFQVj3dMU7NZ8McJ/ksS+Ha29bd+Ye337lt3Z1ELmdnZ9cHO6hlktQm2ZAaJ5FLNt+pKjn8/Atk/+vv6ZidnY2OnWtbs3b7jifj8U+373gyh41TL6lZaiadejl+GCeM08vGqW1qYJweNU5VjpN96EeymOA0MU4yW9TIOInaujt3U984dYduzx6PpmGcBGX6sJm+B0CucEWOU5NubJZfFNBJFHY0Gk0Y53iMJhTpV1U5mV3KLv0DQ0Sn5ubmiDX65FkBbImW4cgITZHSz4yElWi/2m6cvKdGZyi8W/eroqqVxinbIU3uGhpnsGPjaDRK5FXXOEkGlMzpVJyLwSHVKDz9qmecrfI0zcSTQPSr/OTQSiKUo9Gx+uXNZAydDqbTSZyeynFqjVMeYU/s/MTJU2RDYpwkN7l9x871wY4LF6ZIwpIaJ+ujqjyo6ufW30P28yRR2/FYLIeNU6ObSbM0lE4YJ4wz24wTOU6PG2eyTzfPcf7pT++zAiqleqYnjXmcoV27JY7sqTvGSczm/Pnz58+fZx9P6Q+/amScCUFp71S5Jhki7x8YIp+JaGqMs5n9J+36KYxTTqYaGWdChXVGySvkJ0s6jUoo7NA8c6m0uGyc8qn58Pz5D81Ojb5xlrBfyZB6/8AQO5iennGa5zhlL1yU9MXCZNduu3GSfOeWJ344Gh0jT6kPR0b2/mw/ncTpnHHyLD6fj93WxDjJkDpRye07dn7yyTTxyxMnTxGiY+dU8zh5jHM8Ftu+Y2deGefMTFyV3VRJ58xM3Mgy05ZOGCeMM0PjJP1yhvM4TaQTxum2cVI1UuU42VcjJdziBmvD3P0DgzzPqlPXNEmjBts3TE9PB9s3BNs7p6eng+2d9IPtxql8O1Kxr6BYJZ1GxkkSmfLTTomsZ//AEJv77B8YMshxJkt01zcxzuHIiPzrg7LQU+Ms9hXK9i9/ff34CfJzW7b9wKccZ1eVqJxPNVxOn5RSvS9Jjrkl2NE5PX0p2NGp/ZCecSrfjlTiKyxRSae5ccoRliYibGphZqMmC9M2Tma4XGGcoXDP3Nwc+ScyiTPxT0Wlrx8/GWhqJYo5HBkh3X//4BAdVU+8pylR+GmgqTXQ1MqMqlfKo+oK4ySK+fY7f6SPpYfCPWPn3nv3zFkioOyETvKYkfaDCONUfG5bs5aVxRMnT5EcJ7HPDz/66MOPPtq+Y6fSONeuD3bMzs6SPawPdvQPvkRK6DRNuk85V5oXxqm1TJ6Mpi5fv/2bME4YJ4wTxpmBcRarjVOVsJyYmGSN843fv8n5ck2jofn+gUFSsvenvfF4/PXjJyTjBKdrxql8A3yyXFc6tcZJLJPugbgg8T9S8u6ZMylznLrrmxjn2+/8Mfl/BY3NvoJilXH6Cos1jyIV+wqLhyMjyTjlgXJViWpIXVVOSohgKcNo8RWW2GucyjfAJ8t1pVPSM05FhE0ttFyu6rM8OU46Cq96csiXeFa9W7Vb7ZrKZ5WSz7Yrw2ul9qkMr5X4ItkD8+SQ2jiZVzKV+eSHjeh7Oj1lnG3yuPnE5ORd64OscRIBJVude+/faY6TKCabuaTG2SZnRiV5FL5tzVoyZZPsZ3Z2dv09HcRHNca50ynjXO1h47T4uob7ujZxSieME8bpEeM0kk4Yp5vGmdTNgmKdN8CzqFKeVqd1sjtRbUtSblo9NQlGCFrplJRWyoHxKzbTQjWqrvitQh7sGe92aBidH610SqbzOLnR/pbZ+vL7OBfx7t+Ov4qpGVXn+ptDmWBknJYW6zrF8zokl1KJaRqn89Jp+Yqy6Jpyzr6bc3gdxgnjzMQ4aXemeQO8hYX9C5kwToHGyahLsa+gGH9X3YJ0Htp0pD/8qneNk0s3c8c4WelMnhrXjZOkP4cjI2qntEc3E8bpL69898xZYpZkhJ0MnYs1TudR6CY7pzMLjHN11hmn2dVO7yN6l7GWmcgtFZbCOGGcmRgn23WyxmmRGsXfZC8ogXEKMU5fIes/ME5uLjHLvv0HxQbDGKeVDfmMU/uckJFT+heIN05fYcmlSzOXLs0kTs2BQwZOrPJIHuPUFdA080Mc0mky365MHhNPjsvTmZq5bpxJomPnJEmiI+8e5maLZPpz6aYwee6vTLY1oKjsL4rm6zBvvq+oFMaZz8ap6rMyME7WO5eQvcE4XTbOhG+oPES4zAGXsDvHmT1YFUePGqdYRGtcFmHVODPxzpvVxmnhUhRknNzAOPPKOLV9lr3GSYFxOmqcat9QnVY7bGaeAaIdC2iBcZr1o540zsIyXyGMM4tIzzi10mm+WrLEbsvMFophnDlgnCa9lUPGmWa/adal6gmWUblldP5Ktg6qwWs3RML00GCcwFcA42RLeIzTaG8wTmCTca428k7ePeS6cfLPUFe0bzBOUcZpV2/lIeNM0aXqqVWmoknJTuM0qgE7fh7GKRYrDx6J7z/cB8YJ4/S2cVK4xtnTME7h92AmpGmcWmCcjhqn7V1bdhun7f27+W3innFqgjGXDdXmdkQA4xQLjNOcTIzT0oYOGCd1TdHeKVrjsogMjFPhnRz7X31z22pz4xR+92WObcapBcaZiXE63bVljXG607+bX8weNE6ymmrz07m+mNSd6NCwnDa6f0THheW0yjhFh4PFcIFxZvb2N6elwdLL75zWhWwiO4zTcWCcWbWY1J3o0LDAOL27wDizZYFx2mCcJthlDDBOi+SgcaZzOeWUcf4/y7emo2bNwAkAAAAASUVORK5CYII=" alt="" />

图4 qt示例demo

注意:这个demo非常粗糙,不过我已经讲明了怎么实现一个自己的托盘,关于需要怎么实现一个完美的托盘,同学们可以参考qt的源码中qsystemtrayicon_win.cpp文件,该文件就是QSystemTrayIcon类的真正实现。

qt示例链接:http://download.csdn.net/detail/qq_30392343/9608076

mfc示例链接:http://download.csdn.net/detail/qq_30392343/9608078

如果您觉得文章不错,不妨给个打赏,写作不易,感谢各位的支持。您的支持是我最大的动力,谢谢!!! 

 

很重要--转载声明

  1. 本站文章无特别说明,皆为原创,版权所有,转载时请用链接的方式,给出原文出处。同时写上原作者:朝十晚八 or Twowords
  2. 如要转载,请原文转载,如在转载时修改本文,请事先告知,谢绝在转载时通过修改本文达到有利于转载者的目的。

Qt之自定义托盘的更多相关文章

  1. Qt之自定义托盘(二)

    上一篇文章讲述了自定义Qt托盘,不过不是使用QSystemTrayIcon这个类,而是我们自己完全自定义的一个类,我们只需要处理这个类的鼠标hover.鼠标左键点击.鼠标右键点击和鼠标左键双击,就可以 ...

  2. Qt之自定义托盘(两种方法)

    http://www.cnblogs.com/swarmbees/p/5789482.html http://www.cnblogs.com/swarmbees/p/5812031.html

  3. QT中自定义系统托盘的实现—c++语言为例

    将要介绍的是:QT中自定义系统托盘(systemtray)的一个Demo,希望能帮需要的读者快速上手. 前提假设是诸位已经知道QT中的signals .slot以及资源文件,所以关于这些不会再累述. ...

  4. Qt之自定义QLineEdit右键菜单

    一.QLineEdit说明 QLineEdit是单行文本框,不同于QTextEdit,他只能显示一行文本,通常可以用作用户名.密码和搜索框等.它还提供了一些列的信号和槽,方便我们使用,有兴趣的小伙伴可 ...

  5. Qt之自定义搜索框

    简述 关于搜索框,大家都经常接触.例如:浏览器搜索.Windows资源管理器搜索等. 当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定. 方案一:调用QLineEdit现有接口 void ...

  6. 【Qt】Qt之自定义搜索框【转】

    简述 关于搜索框,大家都经常接触.例如:浏览器搜索.Windows资源管理器搜索等. 当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定. 简述 效果 细节分析 Coding 源码下载 效果 ...

  7. Qt之自定义检索框

    1.效果展示 今天这篇文章主要讲解的是自定义搜索框,不仅仅支持搜索,而且可以支持搜索预览,具体请看效果图1.网上也有一些比较简单明了的自定义搜索框,比如Qt之自定义搜索框,讲的也比较详细,不过本文的侧 ...

  8. (四)Qt实现自定义模型基于QAbstractTableModel (一般)

    Qt实现自定义模型基于QAbstractTableModel 两个例子 例子1代码 Main.cpp #include <QtGui> #include "currencymod ...

  9. Qt之自定义搜索框——QLineEdit里增加一个Layout,还不影响正常输入文字(好像是一种比较通吃的方法)

    简述 关于搜索框,大家都经常接触.例如:浏览器搜索.Windows资源管理器搜索等. 当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定. 方案一:调用QLineEdit现有接口 void ...

随机推荐

  1. 20175305张天钰《java程序设计》第五周学习总结

    <java程序设计>第五周学习总结 接口与实现 知识小点: (1)用Arrays.sort方法对所有实现Comparable接口的对象进行排序 (2)接口体现了has-a关系,继承体现了i ...

  2. maya cmds pymel selectType() 选择类型切换

    maya cmds pymel selectType() 选择类型切换 import maya.cmds as cmds cmds.selectType( polymeshFace = True ) ...

  3. Linux-硬件

    1.服务器 计算节点服务器-用于后台逻辑运算,所以cpu,磁盘读写性能要求较高 web服务器-用于用户请求访问一些页面,如果高并发,磁盘读写性能要好,可以使用raid0或raid1或raid5技术(r ...

  4. 使用Cordova打包Vue项目

    因为公司项目要求, 原本的vue移动端项目, 现在要求能使用定位, 调用摄像头等功能, 并且开发成混合APP. 一个小白的孤军奋战史, 记录一下, 以备后用.... 第一步: 安装cordova 在命 ...

  5. Shell脚本学习 - 运算符

    继续shell脚本学习.上一篇是基本数据类型和语法的总结,这一篇是运算相关的操作. 运算符 bash不支持简单的数学计算,需要依赖其他命令实现. expr可以代为实现. # 表达式一般这么写 ` + ...

  6. Fiddler和app抓包

    1:请在“运行”,即下面这个地方输入certmgr.msc并回车,打开证书管理. 打开后,请点击操作--查找证书,如下所示: 然后输入“fiddler”查找所有相关证书,如下所示: 可以看到,我们找到 ...

  7. ubuntu 安装lnmp、swoole、redis

    1.安装lnmp (此处也可用于centos) 登陆服务器后  cd /var screen -S lnmp wget http://soft.vpser.net/lnmp/lnmp1.5.tar.g ...

  8. 使用POST下载文件

    一直以来,JS都没有比较好的可以直接处理二进制的方法.而Blob的存在,允许我们可以通过JS直接操作二进制数据.一.下载util.fetchDownload= function (opt,data) ...

  9. R语言读入数据库的中英名词互译测试并计分脚本(考试用)

    1. 分子生物学中英文.csv,输入文件,两列,以tab键分隔的txt文本,没有列名 2. 错误的名解.csv, 如果在测试中拼写错误,会写出到这个文件,可用这个容易犯错的名词进行新的测试 3. 注意 ...

  10. JPG、PNG、GIF、SVG 等格式图片区别

    1.图片 2. 前言 首先,我们要清楚的是,图片从类型上分,可以分为 位图 和 矢量图. 位图:位图又叫点阵图或像素图,计算机屏幕上的图是由屏幕上的发光点(即像素)构成的,每个点用二进制数据来描述其颜 ...