对基于请求的分布式消息树的分析

在MVC时有过滤器System.Web.Mvc.ActionFilterAttribute,它可以对action执行的整个过程进行拦截,执行前与执行后我们可以注入自己的代码,这是我们实现对请求做监控的前提,对于一个请求来说,如果它是从Get或者Post过来的,我们会在发起端将初始catContext进行链条式的传递,从第一个节点开始生成并传递,最后到尾结节,开始执行cat,生成新的context,将新的context回写到响应头,由上一个节点拿到这个响应头,开始写自己的cat,这个过程最后执行到第一个节点,整个过程结束!

对消息树流程的设计

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnkAAAELCAIAAAAqaQehAAAdGUlEQVR4nO2d+3MT192H3z9l/yd+yEznbftOJ00yk8Sqba6BEK4Ot3I1Bgom2GAwYEKMbMsGY66xLd+wDSkB342w5QskGULTmKZ6f9CMq2p3j1baXa3Od59nnmHk9dmzZ89H0kdy+/b9nxQAAAD4yf8EvQAAAADh0LUAAAD+QtcCAAD4C10LAADgL3QtAACAv9C1AAAA/kLXAgAA+AtdCwAA4C90LQAAgL/QtQAAAP5C1wIAAPgLXQsAAOAvdC0AAIC/eNy1r9/8OjT+quHuVMPdqaM3nh5pRkREDMZ0GT34bnHxx1+8Lbt88bJre54unYiNHWwd2x0dP9A+tbdj+lDn7OGuF4iIiEV2b8f0gfapL1vG99wYq2kbi/Yl/rnyLw8rLy+86drXb36tuz15qG18V+tk9d1Ebff8Vz2IiIjBe/zey6rY1N7o+Omb4/Ov/+FJ6+WLB127+OMvJ9qe746O7+2YPv3w5dnuOURExNKxtnvuYOfszuhETWzsxdJb98WXL2679l+//furzold0fEjXS9qu+cQERFL0xMPXu5qmTgVe178Pya77dr73y0eahvfd3P6zLdziIiIpezhrtm90fFoX8KTBnWOq659/ebXE7Gx3a1TJx+8PP1wDhERscT9MjZ1vOh/SXbVtd1Pl/a3jB3pevG3By+xRDQMw/kwh4M10qs7KuY8dmOMXDifJ99VrQ5Qj3S5S5mnZ01l9yvnVyzsrLxu2dfNQf88fjdRdWOsdaCoX21ddW3D3amq6PjJBy9PYdAahpH1oLDxmW/lOc/N6yzns7k5S3FcjVcLK2wGxQKc32nOyAq7d8WFXG6Rw6vYbYX6XrIee5W7es3q5bnZK/TWL2OTp2LPvepRJ7jq2lOx53tiU6fuv8TANQwj64F5gOodR3mu3bXyOsvhbC7PcjJbYVvkfJ1O5nF+LfV1C1uz+Xi+86zehcvcnVxIPSbn2vJapN19FbDPbjYH/fbAzZkjzU+96lEnuOraozee7uuYPnn/JQau3VtA5oCs8eYZ1DObL+TkrMwTc86mONFyEud34XxMYXPmO7/zNeRMNq9F5pwn55PBzc4o7tH5eLsTzc+0k1ZPGId76GQH8n0iYel4qPOFTl17pPnp/o6ZE/cSGKyGYVg+thtjOczuRPOAnJezvFb63S2v2bLGOLzNLOyW53CjnOxMXuMzr+5kDQ6vrt7GnOmbZ7AMqLC12cWk3vPMp41lpna/UjxbnD/ZCrs7yyXZPQ8xQA/d1q5rb83U3EtggBqGofgx8/gqmcPMD3JeKHOk5VmWS7Jbp2K2rDE5r+vkLpzcspMLOZw/a9tz3q/DNJ1suGUEltitPOcCCticnIuxC11xLctT7PbZ8pmvGJxztU6eLYVtFPqnhl17c+b43QSWjoZhqI+nH2T9qD5xFfNIy7OyDmZdUXFd87uYek7nt283Juf67QYoLqTeKLuDigtZoliMeSq7lNV3Zx6sxuH+qJeUNSDntexuSn265TwOn0KKq6vvBUvHg9r9DXnfzZnquwkMXMv3kawBmQ8y/80aYHmWeQaHZ1leK6/ZnK9WcTzn8nJe0bzbOed3snvqqRxeIvNHyyeA3QDzpe2eHnlttZObcr5m84Sry7O8HfOeOM89512r53HztMRiqmXXHrubwNLRMAz1cScPLGezG6Y+a/VHu7MsL2E5RjEy5/Gcy8t3KsVv1bfm5C5c3oIiEYcnKp4SWYMLDsJygGLHnDxPLMfbnejVyrPmtKOwoNEn/6pd1+69OXP0zgssHQ3DUBxPv+wzf8w6JfPdwe5I5jzOz8pamN1s6hMVa1DffmFj1JuZc/6sd1v17eQ8PXMexWZaTquY0y5Qh4tUX875LtndRda+OQ895zZaTuVk8TmfhFj6Hrg1S9eiK53Ug+A3i7ze5e1+63J/cs6vHlnALTjpWicl7WRC522X7y3ke1NZ5yo+LuQVU8Enrv4q6/NBYfuDvqph13bMHOl6gYiIqIv6de2ejpnDt18gIiLq4v6b2nVt+/ShzllERERd3KfX/0bjkeanX7ZPH+ycRURE1EU9u/bWDCIioi7u69Cwa/96awYREVEX92rXtVWx6QM3ZxAREXVxb7uGXbv/5gwiIqIu7tGua3e1Te7rmEZERNTFL2PTOnXtqdjz3a2TezumERERdXF3bEqnrq27Pbm7ZXxP+zQiIqIu7mqdrGl97lWPOsFV13YMzX8Zfb67ffpLRERETayKjjXen/GqR53gqmunF95Ux8Z3tExWxaYRERFL3x2tk4dbx0enXnvVo05w1bWpVKrx/kxVdGxX2+TutilERMRSdlfb1K7o+FedE//67d+elKhD3Hbt23++Oxl7vqNlYmf6HhAREUvVnS2TJ2Jjiz/+4kmDOsdt16ZSqb+/+LE6Nr6jZWJn6xQiImIJuqN1akfL5NHYWN+zZffFly8edG0qlXo8/cPJ2POq6NiOlskd6VtCREQsDbe3TO1qmTjRHkzRprzq2lQq9faf7xrvzxyNjVVFx7a3TGxvmUzfXrBuvdAd+Bqw+JK7PMlUdwNKcHJby8Tu6PjB1rHaWxPzr//hVeXli2ddm+a7mR+bumePND8tBfec7aiIlO2qvhL4SrCY7jnbUR4p21XTFPhK0CvJVHeDTbDu9uTQ+Ksi/5ehsvC4a0uKa9eulkfKTtRUB70QKCrxeG95pKw91hb0QsAzyFR3SFBy136+eVN5pGz92sp3KytBrwWKB69qeZCp7pCg2K4dHR3ZsHZteaRsbUV51+3OoJcDxYNXtTzIVHdIUGzX7tqxrTxSlnbzpo18tQ0PvKrlQaa6Q4Iyu3Z0dOSzDRtWu3bDurV8tQ0PvKrlQaa6Q4IyuzbzSy1fbcMGr2p5kKnukKDArs36UstX27DBq1oeZKo7JCiwa81favlqGyp4VcuDTHWHBKV17ejoyPq1lZZdu66ygq+2YYBXtTzIVHdIUFrXPrh378C+fWl3bNtWHol8sWXL6pGW6I2gFwi+w6taHmSqOyQorWszId1wQu7yIFPdIUG6FqRB7vIgU90hQboWpEHu8iBT3SFBuhakQe7yIFPdIUG6FqRB7vIgU90hQboWpEHu8iBT3SFBuhakQe7yIFPdIUG6FqRB7vIgU90hQboWpEHu8iBT3SFBuhakQe7yIFPdIUG6FqRB7vIgU90hQboWpEHu8iBT3SFBuhakQe7yIFPdIUG6FqRB7vIgU90hQboWpEHu8iBT3SFBuhakQe7yIFPdIUG6FqRB7vIgU90hQboWpEHu8iBT3SFBuhakQe7yIFPdIUG6FqRB7vIgU90hQboWpEHu8iBT3SFBuhakQe7yIFPdIUG6FqRB7vIgU90hQboWpEHu8iBT3SFBuhakQe7yIFPdIUG6FqRB7vIgU90hQboWpEHu8iBT3SFBuhakQe7yIFPdIUG6FqRB7vIgU90hQboWpEHu8iBT3SFBuhakQe7yIFPdIUG6FqRB7vIgU90hQboWpEHu8iBT3SFBuhakQe7yIFPdIUG6FqRB7vIgU90hQboWpEHu8iBT3SFBuhakQe7yIFPdIUG6FqRB7vIgU90hQboWpEHu8iBT3SFBuhYkkEgk2mNtaWvPnC6PlB0/dnT1yNjYWNALhLwhU90hwUzoWpBA1+3Oyoq/lEfKLK2prg56gZA3ZKo7JJgJXQsSeLeysnnTRsuX9Gcb1icSiaAXCHlDprpDgpnQtSCErtudG9atNb2qPw3bx2dJkKnukOAqdC0IwfJDdAg/PkuCTHWHBFeha0EOpg/RYfz4LAwy1R0STEPXghyyPkSH8+OzMMhUd0gwDV0Loui63bmusiLMH5/lQaa6Q4IpuhaE8W5lJf0Hq/WVFeH8+CwPMtUdEkzRtSCPunNnyyNlO7dvD3oh4Blkqjsk6HHXJpbfRvtebKwb3Fg3+N7ee2uq7gTo77eeL4+U/WlzTbDLWFN1J70h57smppJvvN3wEqGkcv/D53XlkbI/bzpE7m4gUzIVmWBQmXrZtVcfTn9U07vxwsjB2MTJrtmGeLJpYPHaYGA29c0dOtvUcG8swDVcG1y81Ldwsmv2SMfklsYnH9b0Hmz+7udf3nm47YFD7vJyJ1MyFZlggJl607WJ5beVtf1bLj2u655vHl6OPX7V8eQ1ZnljeLkhntx9/dnHJ+PPEj95svPBQu7ycidTMg2nfmfqQddOJd98UN1zuH2ysW+hbfR1+2O0NTb6+urA4ok7sx+fij+Z+cH95gcIucvLnUzJNMz6mqnbrl1591tFbf+xW9NfDy3FHr9GJ94YeXX6/osPj/do9AeoLMhdXu5kSqboX6Zuu7bh7uQXl5809iXbRl+hc68NLe2+/uxg83eepFh8yF1e7mRKpuhfpq66NrH89qOa3rruuZaR4HdHOy/Gk5/8ra+U//pkB7nLy51MyRR9zdRV1zbem9py6cnXQ0uto6/81jCMrAd2A5xPFazNw8s7v/7+UPPfvcqyaJC7vNzJlEwJ1NdMXXXtxrrBw+0T0ZFXLaO+aBhGzsfmg0YGeU2rmNwnax8k3j/a7VWWRUNY7jlPDEPuZEqmJRuoeXxxYvU2U1dd+/7R7rMPEi0jyz5pGIblY/Ow/+Rnf7ollvP4d0dZXu5fWFN1x6Moi4ek3BXnhip3MiXTUg5UQKauuva9vfcuxpPRkWWftMtglazB5tPtps352+LYNLhYaq9PJ4jMvZjpl2DuZEqmJRuo+aCOmbrq2jVVdxr7F24ML/utYRjOx2TmbT5iSb7X8sqmwaVSe306QWTuxUy/BHMnUzIt2UAz/9U3U7ddezno16ddMAU/M4qToh9ZFg2RuRcz+hLMXV6mivYlU70CzSxmJ9GXZqYedG3zoyW/NX/YsRyT9SDnJJZT2Z3uh00DJfd3pzSJRCIe77X7rbzc7SaXlHvYMjXPRqaaBpp5Vvqxjpl68Dfkbx4t+aphGKv/Zh6xG2AeuZqc3eTqI/55tVS7tj3WVln+ly2fbbJ8JQvLvZiJB5h7qDJ1cpxMdQnU8iztMtWmaxW7nJmZIni7j052l9MuSw9pj7WVR8rKI2Ub168zv5Il5V78og0q99BmquP7si6ZBhWojpm67tq+hetDS/5pGIbix8yDmb/KTMvJueazLAd77pWS71rLV7Kk3M0vb6m5hydTu7PIVNNAzRfS8XXqtmsv9S18PbTkk4ZhZD5O/7j6IOtXWQctZ7PEv/Xn9MrA4u+2XxsrPS42XMh8Daddv7Zy04b10eiN3227Su7a5U6mZEqg+WZaWl17bWjJV9Obbndw9Vd2aWWeYjm53+tXeLq13/xS0cHIkYZYgPumuyWZO5mSKf6Xl8PWtYJtjM/9aXNNe6yt1Dx+7KjVS/fT9ZUVO7dv//OmQ+fuPA989/Q1kNzJlEwxL0uray/2JZsGF7EwS/B/1y1N1n8OVB759LMN62uqqxOJRIrc9cydTMkUA8zUg669OriIhdmoQdf+16s3DbnrmDuZkikGmKnrro0nrw4sYmGWeNeaX71pyF3H3MmUTDHATN12bUM8eWVgEQvzUql2bTzea/nqTUPuOuZOpmSKAWbqQdde7l/AwrzUV6Jdq4bc5eVOpmSKvmZK18rJsmiQu7zcyZRM0ddM3Xbt+d5kY98CFubFeLLUXp9OIHd5uZOp0EznA98ZffU2U1dd+/7R7jP3E5f6FrAwL/SW3OvTCeQuL3cyFZnpaTItmUxddW1lbf+xm1MX40kszLMPE3889NCrLIsGucvLnUxFZnqUTEsmU1dde7zt++1NTxuC3hFd7U0eaB3f2jDsVZZFg9zl5U6mZIq+Zuqqa4cmXkXODNT3zDfEk5iv9b3z688Pdwy+9CrLokHu8nInUzJFXzN11bWpVGprw/D+1vHz8eQFzMfz8eSxW9MVtf0r737zJMgiQ+7ycidTMkX/MnXbtT/8/OsH1T1nHrwkzjzsTZ77du6TU31TyTeepFh8yF1e7mRKpuhfpm67NpVK3X+SjJwZOPPw5fneecxpfe/8V9/Orat/9E3vrPvNDxByl5c7mZJpyPUvUw+6NpVKdQ7PfVDds791vL5nvr4Xba3rmTt+e6bsdH8pvzidQ+7ycidTMg2tvmbqTdemUqkffv51a8PwuvpHe6Jj53rm63rm63vm64L2RHQg8DWk9+Fc99zh9smNF0Y+ORV/lvjJq20PHHKXlzuZkimZeo5nXZuma2R+5+WRNVV3SsH//aKxIlL2f5vPBL6StJW1/dG+FyX4X6BwD7nLy51MydTvTMsjZX/ccjbwlRQnU4+7tqS4du1qeaTsRE110AuBokLu8iBTecTjveWRsvZYW9ALKRKSu/bzzZvKI2Xr11a+W1kJei1QPMhdHmQqD7pWCKOjIxvWri2PlK2tKO+63Rn0cqBIkLs8yFQkdK0Qdu3YVh4pS7t500Y+DocEcpcHmYqErpXA6OjIZxs2rL4+N6xby8fhMEDu8iBTqdC1Esj8IMzH4fBA7vIgU6nQtdqT9UGYj8MhgdzlQaaCoWu1x/xBmI/DYYDc5UGmgqFr9WZ0dGT92krL1+e6ygo+DkuF3OVBprKha/Xmwb17B/btS7tj27bySOSLLVtWj7REbwS9QPAFcpcHmcqGrpVD2LKENOQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVR9gypWtBGuQuDzKVQSKRaI+1pa09c7o8Unb82NHVI2NjY0Ev0EfoWpAGucuDTGXQdbuzsuIv5ZEyS2uqq4NeoI/QtSANcpcHmcrg3crK5k0bLYv2sw3rE4lE0Av0EboWpEHu8iBTMXTd7tywbq2paz+V/aU2RdeCPMhdHmQqBsuvtuK/1KboWpAHucuDTCVh+mor/0ttiq4FeZC7PMhUEllfbcPwpTZF14I8yF0eZCqMrtud6yorwvOlNkXXgjzIXR5kKox3KyvpPyOvr6wIw5faFF0L8iB3eZCpPOrOnS2PlO3cvj3ohRSJPLo2sfw22vdiY93gxrrB9/beW1N1p8T9/dbz5ZGyP22uCXwlWEzJXZ5kKs8/fF5XHin786ZDga/EieniO981MZV842/XXn04/VFN78YLIwdjEye7ZhviyaaBxWuDJW1T39yhs00N98YCXwkWU3KXJ5nKU6NML/UtnOyaPdIxuaXxyYc1vQebv/v5l3fed21i+W1lbf+WS4/ruuebh5djj191PHmNiIgYKm8MLzfEk7uvP/v4ZPxZ4icvu3Yq+eaD6p7D7ZONfQtto6/bHyMiIobU2OjrqwOLJ+7Mfnwq/mTmB2+6duXdbxW1/cduTV8fWgr8DhEREUvB6Mir0/dffHi8x/kfk1Vd23B38ovLTxr7F2KPXyMiImLaa0NLu68/O9j8nduuTSy//aimt657rnXkVWwUERER/+PFePKTv/U5/Euybdc23pvacunJ9aGlttFXiDk1DEPxY9avzBQwj3+LVw+zHJzzYCD3VQpaxm0ZfQHpqE/PK1bEfL0xvLzz6+8PNf/dVddurBs83D7ROhL8/aAWqrsk84119VfmBznnaVO+dxe85nzflLMWnLWGnB8gnF8x51me3L6vZyk+oGT+VpGm+tyCV5tv+ohmzz5IvH+021XXvn+0++zDROvoK0QnZr5Lpn80D8jrgZmsMYrHztesPteu1DPXo5jWchLL7cp3wQXfsvvT/TvL7jmz+m/ms0vx9HAemWHzXEV06JX+hTVVd1x17Xt7713qSwZ+J6iLWb1lfmtTvxuaZzA/Vpyeb2mpp7K7uuUlzOMVZ5kHWG5L1hHLAXb3azlPztkUJ1pOku9u57XV5pVb/qt4+uVcTM5YEZ14bXDRbdeuqbpzuX+hZfQVYk4Nw8h6nPlv1hi7B6vvv3Yz213LbmS+a1aPyTks83Yy7yXrQpZzqhdv3jG7U+wmVwehuFNFjgXvtuVvzWRd3e55le8W5TUMUe3XQ0sedO2VgYXoyDJiTg3DyHq8emT1xzTmX1mennnK6omWxy3H5LVg84+W17JbuXkNdoMV965evHqqnPdld7OK2RTLy2uf8z3F8rqKfxXRKG624OUhZnmNrsWiqS4YJ/3k5A1RcWm7XxXwFm93XP2GHrVqI7v7Ve+b+Rbs9sfzrlWvU3HdnFttmbjlWYr1O/lXkZT66adYEqJCuhaLrd17XNYAxZGs9zvLd0Dnb5RO3jdzvtVavoMrlm05LGtVljum3pycUym21O6gk9ksZ7BcamEVpY7VcovU/9pFlvMGEQvTm6693L9wY3gZ0aGGYVg+zjpi+cZa2GyZ/6pncL5yuzXbPbBbreVI9Y3kvH3FRRUD7M5SLCxrjPoW8trqgtef+VSxO+J823PuP6ITmwbpWiyuioJZPZKzKjKHOW8Cu8vlu3jFTZmr3bKNFANyrtP8ycPys4jlj+qz1B8LHJ6oXoN6by1xnppibx0+JdT5FvCEQUzrWdc2P1pCzKlhGJaPMw+aj2cdyRqT9dZsN0Z9iQLW7+S+Vq+VuTDFA/ON5Lx0GLTcDfNGOdk087ard5gs0BObBrz4v/lp7F/45tESIiIimr1K1yIiIvqqR13bt3B9aAkRERHNXqFrERERfZWuRURE9FdvuvZS38LXQ0uIiIho1rOuvTa0hIiIiGYv07WIiIi+6k3XXuxLNg0uIiIiotnL7v9/xdO1iIiICj3r2quDi4iIiGi20ZuujSevDiwiIiKiWW+6tiGevDKwiIiIiGYv0bWIiIi+6lnXXu5fQERERLOX+uhaREREP/Wmay/Ek439C4iIiGj2ojdd25ts7FtAREREsxfjHnXtpb4FRERENNtA1yIiIvqqN11b3zt/MZ5EREREsw29Sbdd+/7R7jP3E4HfCSIiYml6vnfebddW1vYfuznVEE8iIiKi2dqHiT8eeuiqa4+3fb+96en5ePICIiIiZtmbPNA6vrVh2FXXDk28ipwZqO+ZD/5+EBERS8z63vn154c7Bl+66tpUKrW1YXh/6zhfbRERETM9H08euzVdUdu/8u43t137w8+/flDdc+bBy/O984iIiJj2q2/nPjnVN5V846Roc3RtKpW6/yQZOTNw5iF1i4iIOF/fO//Vt3Pr6h990zvrsGhzd20qleocnvugumd/63h9z3x9LyIiYkit65k7fnum7HR/XkXrqGtTqdQPP/+6tWF4Xf2jPdGxcz3zdT3z9T3zdYiIiNJN99257rnD7ZMbL4x8cir+LPFTXkXrtGvTdI3M77w8sqbqDiIiYtisrO2P9r1w+F+GKrxrAQAAoADoWgAAAH+hawEAAPyFrgUAAPAXuhYAAMBf6FoAAAB/oWsBAAD8ha4FAADwF7oWAADAX+haAAAAf6FrAQAA/IWuBQAA8Jf/Bxsvjw/DCxDMAAAAAElFTkSuQmCC" alt="" />

代码的实现

下面开始设计咱们的Filter拦截器,用来生成catContext,并将处理后的context写响应头中

   /// <summary>
/// Cat拦截器,主要拦截Http请求
/// </summary>
public class CatFilter : System.Web.Mvc.ActionFilterAttribute
{
/// <summary>
/// 请求来到时
/// </summary>
/// <param name="filterContext"></param>
public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
} /// <summary>
/// 请求结束时
/// 调用次序:A->B->C->c->b->a,从c开始执行,把context结果在响应头里依据向回传
/// </summary>
/// <param name="filterContext"></param>
public override void OnActionExecuted(System.Web.Mvc.ActionExecutedContext filterContext)
{ var context = PureCat.CatClient.GetCatContextFromServer();
if (context != null)
{ context = PureCat.CatClient.DoTransaction("youDomain", filterContext.HttpContext.Request.Url.AbsoluteUri, () =>
{
PureCat.CatClient.LogRemoteCallServer(context); PureCat.CatClient.LogEvent(filterContext.HttpContext.Request.Url.AbsoluteUri, "Action Finish..."); if (filterContext.Exception != null)
{
PureCat.CatClient.LogError(filterContext.Exception);
}
}); #region 响应头写数据
if (filterContext.HttpContext.Response.Headers.GetValues("catContext") != null
&& filterContext.HttpContext.Response.Headers.GetValues("catContext").Length > )
{
filterContext.HttpContext.Response.Headers.Remove("catContext");
}
filterContext.HttpContext.Response.Headers.Add("catContext", Lind.DDD.Utils.SerializeMemoryHelper.SerializeToJson(context)); #endregion
} base.OnActionExecuted(filterContext); }
}

最后就是修改我们之前封装的GET和POST方法,让它处理一下响应头,使用响应头的context作为当前cat的上下文

  /// <summary>
/// Get数据
/// </summary>
/// <param name="requestUri"></param>
/// <returns></returns>
public static HttpResponseMessage Get(string requestUri, bool isCat)
{
var handler = new HttpClientHandler() { };
using (var http = new HttpClient(handler))
{
PureCat.CatClient.SetCatContextToServer(http, GetCurrentContext("Get Request Sent...", isCat));//设置接口api的头,发送
var response = http.GetAsync(requestUri).Result;
var context = response.Headers.Where(i => i.Key == "catContext");
if (context != null && context.Count() > )
{
var cat = Lind.DDD.Utils.SerializeMemoryHelper.DeserializeFromJson<CatContext>(context.First().Value.FirstOrDefault());
PureCat.CatClient.SetCatContextToServer(System.Web.HttpContext.Current, cat);
}
return response;
}
}

日志的生成

最后生成的cat日志也是我们可以理解的,即从a,b,c,d的调用,在执行结束的监控顺序是d,c,b,a,呵呵,并且在在step2时故意放了一个异常出来,让cat记录一下,呵呵。

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABLUAAAJuCAIAAADJjqe5AAAgAElEQVR4nOzdv2ojW5f3cd/Ey7mJFzzQka5A+AKKKTx00jjoVFBjcNbJ8NCBmkoMpoMnOYNgUNIOdAEPhkEwEzg4RvQFGE6k7ulzhumh5x29Qal2rbX22qVSWbZk9/fDCY7Vpapd/6T9q7WrdLQ6AB9ef/nw6bv889Xrb3tsDwAAAAD8hI723YDK91dHy6P6P8IhAAAAADy9A8mHAAAAAIA9Ix8CAAAAAFYr8iEAAAAAoEI+BAAAAACsVuRDAAAAAECFfAgAAAAAWK2qfPjvAAAAAICf3tFqtVoCAAAAAH565EMAAAAAwHJJPgQAAAAAVMiHAAAAAIDlkny4L+UoLyfzfbcCAAAAz9V8Uuaj8imXuLiZZlmx2MWsQmf46ddiTxZFlk1vdrLxHtc6H07HhYkri5vpcDDU6zDPB2vt2aYc5cP1odO8pWbmuZxPSvnPYc7TcVG/lnsLWxTZ0MzTzGowGAz1Eby4mQ43Nf4xzfN66eRDAAAAPEQ6Wc3PRB847ud3MR0XYuaLIhuWk/mh5kO1vjETAao/1zGjWXQTW2SCEPnCSTFDvZ2Hbc3YLh+Wo7zLZkklqYdY50MTV+aTcjAYZmodFkU2LMbT6t/zaAPJ956NRu6h4x5S7jExn5QhFppNX5EHupzYTFM3OKzC2egwghn5EAAAAA+RSlamy92r27kOhGGGw0E+P9T64aZWmQjQFGzEasrw1qQeWTALG0Gugsga89ymp7gZO64flqM8UUh7kKPV6l4U4qqNNc8H+Vyvg9kiIXpNx4VsVrV7bhI7KRwHMsRHKW49pXhRHaCeqsEbXqyW3uUM0dcYFkU2zEdl1Aw5/6aYWR3fVcCut948HwyK8VQeFuUofzceD6OrEfIawM9RagcAAEAf80mZj955vdBQBzs70/38xc30bFSWo9z0NnXf1Sau0F2XryeqcOp1kRfUK0ubD+1ahOXGlTG9gsVM/7loOt5LuaBS5cMmI+jQITdsubRF1DgQNvOp3hJnXbGp34kgcPZx8lEEgZuw+mH+cpvLXTZU29+v2Lm7Jt71YkuGFZmfZUVVP3QDmMqHpogX/tSF1PVb3BAfHU/r9ZE7PszKpLj2UOeWX03sDHur4xWUkIfFYZHMh6IBzTRhE4kjSeVDvXfXs1rchJ0sr20AAAAAStW/j8tiut8eVwJVFaTqpprheLoj3fRgRX/eVuHEMEPbgw39WxkBZD5MrcWg6SGHNzplIb2+qgFuBAhd99QgxNB7N4FC/qmjYNhEqnkyKMkELoNAFYVECa2JSKKG6Wxqk13l9nB3jZ7PPNfJq57VPB8MtsiHsgWpMZ/xpQW5oTemndC4aGs6SSlEXm/TmENHZbmOoWs6LoZZNtRFQi8fqtG2ckOVozzLsjg/L7sVSBmDCgAAgBTTIQ/dy/Z8mHklHzNj07mVVY3q7eaNqdcjqjPspdlmLUxlrw4aMou2r8WyJQJUqcx9l5xblFEHourjb1WRIePsMIyDQLSzMi8fqszp1jZTWyO0Tc9HtU3kl3k+GD60fiibIsuXJh/GA3ZdcjJZ/WxPSqYgvnRuqG1WZJvQZa5/+PlQFnA3lX2dUyK0Sib7uJIOAAAASKZ+0yMful30eLbx20048UbeqRnKnnKcD721sPFEztmku0Q+TEWAVEnN3yBhqOMwKz4mimFyOKRomHliix8EuuRDs6z2fJjaNXo+Lfkw75oPU8k1CHEu3v3LxNDeWCJGurcXmqb66Xzp5bdEydEqR3kxHotZ+ffpppu3KLLhu/FYJ/W2+qHJk9QPAQAAkNIvHw71XXNxstJdUNXR7VE/1GM4/fqhuxaJ+qGa8zBdtExFgJZBkd2Ln7oxJguEyUxC2XE+TJXfWuqHW+fDKL+ZZ+z4A4vdB7luvDIhgpC44c6/k1Aut/n/m5sbb25qq7k6hi73gJPNk88LSt0AGYV7//7DcNroGxH3+1McAAAAOGgt+VBHsqafv/H+w/aaUI/7D6Phmh3rh6n7DxsylMonrLiP8NCPyVTPpwn3IraGQ3OTnn9zmdloLfcfPjwfLpPPL03ef7hVPmzKvm7GlQuryEfrbMyHcfHQ3JzqlfXc31ps1lCXK+Xh0vbbG8tu+dAMWDW3bNZb4GORnclja9D801Q/1jU0e5F+bNHCzKcqYZMPAQAA4Eolq2X9aP1hE5/Wneqql/7Of37peoCo+2Sa9d+qk990jFufX6qe81+Ozjrmw6Vo+UA/WCWKAHJ9N+RDM9v0b7ZXPfmm8ekn08TDMNWthi3rvnxYPlzaoa3q1xPMrtk6HwIAAAB42Xb4A4Z4qciHAAAAwE+BfIiNyIcAAADAT4F8iI3IhwAAAACA5bLKhwAAAAAAkA8BAAAAAKsV+RAAAAAAUCEfAgAAAABWK/Jhyuzy4uJy9pRLvLu+Oj2/2sWc7i/yfHZ7v9rHWuzF/e0szy/u990MAAAA9La7zjAepCUf3l/kJwPh6vpO/pMJHrPLi2qyk9ae+t311WBwEtLLQIuOibtT/1+b1938I+dcT2BXp14j9XpofCpZ3d/O3opGXp2/rdZlG/cX+YnYmHeng5PZ7f1h5kOzvjG5Q+s/7a65v52FTSzXUeym0zs926vzU9nyq/PTlo2zZT50jl7X1bk6+u42vmFP7m9nJ4PTO73xN56JAADgpbg7VR113+zyIkwzu7x4eD9B95QGF5ezu+urTV2mtqaSDw9Eez7MvfBzdzoY5Hkue9jyaJhdXqR37d3b/O1bf7arq/PT6HC5O3UOMtm/N1lrtbKRJnUUhjn7q5lKVvrATW2iNqE3H2ZYnZ+HmQ83tUrt0Pvb2UmTFde5V+/EZnfIYyZshFUzWZM5729neZ6fpD9uHqF+eHfqXK04UOGM41MVAICf0OzyIs/zjX0Ar6f9IDufIT2ZA7F1PqwOBRM8dLVnnQeqqpGuOuaz21t3tqKLf3+Rn1QHh9vvT+WrFPfYFe13I2g1waWpUsqy5Om5vGayLgBeXP4aqpFhg8wuL+SllHjThbwUTgm3CqcbUMUnWfwMgcrkQ7sW9TRNSe/Omf/g9PzK/Llxh+r95UR3ufr6mFETm0+H6i1R1m1qyH+5vBQHz9vrZuud3onJwvzlNpe7LCy05aKau2viXR+X07tM03H++qOz2d3up+rd9dXF5ay6wndxOVut7t7mF3+7vgrLdau71UWWqoV8UgMAcMD8DrbsUVxd/00Ol7u6vpN9hpaeQKgQuv2iuI+t+/OyS+Z0U2ULRbHkL4kOD55Oj/rhamVDjkkC6z91NSm8pS12hrdXM5fHaziwTGhsrx0lyty2oiVPmNBaucQTMSZWD3M1Qytl9Ww9Nx02zOo3LQknalSFcwpuwe3tbWjwSXNCNvnQXQs5XDO80d2Scn077NBm3yUiVnOomM8U+af+p+Zygwmf4Qi8Oj89iS4urNbDHk7EZ9B668l86O0yP9lu2jVyO4dPtKadXabpMn9TEpebJZUPB+rSwN2p+pSXc7OnHp/LAAAcuPDtLzvnps9WvZa4Ft/WE4hflzblwxPvynvoNzoVmqrTUs+z06BZPIbu9x+qXRjlQ5l5/DGfeZRevH9NEv17exx7OSSkvlRt0L+3MJEDmzVqz4em6uV21mVr5TTy9JZvDK+bW/LixsdbOLEWqtn6RLXnYWq0cMsOrS41ue+Sc5MBUn4cxPVhmfdS08h8KEO+3llOPpS7o97CyXyY2jV6PmrzhoOtyzTd5q+OBPn/5v5Db7l20eZfw241WxgAABwmEdKaro7Xf/PzYceegNsh1Pcfnsxu700+lJezT+yNXU7mbOnw4Ck9Yv1QTC6vEDiz7bb7m9mKuuLJr9e/tmbLu1P7DBuTjpTQktQKds+H7sBXfaFFbYpUDqzn44cWeWa69cN4LaKuv5qzSXeJfJjaoamSl79BQuNPz6/ClonH38rM0/5ZZjZpl3wo125jPkzsGjOfZD7cOE23+cvJ1LW3VP1Qv6jeYvZvODZ4JCwAAM+BGgcXrrZ7XWs/H3bsCaTyYceCkJcP17Md6JtxEh0ePKmd5MP4/kMbDAYRXQHvUqnYcD9bijmgWx+f89B8mKoNiumbNTUnXo/6oRwmmqofemuRqh86Gy1VBXV3qNkXplrY/pwb93FBUUqRt7a6W3In+TDZ2pb63k7yYbf5N+2ML0lsmw9brhqSDwEAOHCm65XqTK5Wqx71wyfIh6Exmy6I40ntJh+a55eK517ElTpnOKLe9025OdxcZxaxablykaZ4bbOrnNiML03lw8S9W5vvPzSnVlws2vb+QzPOsGP9cJW4/9Bs2PD5Ev514w7VHzHqXsTWcKhu0jMZO47EocTXvu7RcrfIh6vE80tbds1O8mG3+SfrnD3yYctdB+RDAAAOW9xXX3cwUvcfyntSNt5/+GT5MLyr5cJ93dNrWtv+42d4iH6/f+h03OPfsuuSD73ioXmkh3MDpPvgx3DouHdhhWnMkeQ+AidaQdkRX9fxQ3wKbzTPXJLPL60HiPpPpln/nXiQVMvzS+VkV9fXbzvnw5Uatyn3V7y1m/XtskPNI0+j2cq91vZk0XrRdnHigJFvd9Y92t1b5cOVOf51SLa7Zlf5sNv81+2MI5z7+4eb8qHakl45GgAAHCL3Vib5q1ehSyAqDes/o27Jhp7AI+RDOTK2eZog+fAQtORDbIffbAEAAADwrJEPd4Z8CAAAAOBZIx/uDPkQAAAAwLNGPgQAAAAArFbkQwAAAABAhXwIAAAAAFityIcAAAAAgAr5EAAAAACwWu0qH87ef33z/s/Hmx4AAAAA8NiS+fD33/785Wh5dLT85fjr75vmksp7H15/efX6W/fpu5i9/3p0tDw6WpIwAQAAAGCH2vPhl8/d5vL09cMPr7+QDwEAAABghzrmw++v6nrd7P3Xoyg3zt5/ffP+26ujpansyRz4+dO3o/UEX94nXp/99sM048PrL1UBs6pnfvj0PbxOPgQAAACAHdoiH1bZbPb+azzitAqNVbqr3lj9f8iH8kWZNuXrnz99i+ccRqjqOZAPAQAAAGDHdja+VNxn+OPN8ZcQJkPVUd6IGNJd/Ma4hOgiHwIAAADAbj3G/YdOPjRxTr5eDy5d/xdGkLYjHwIAAADAbj1RPjT1Q/l6v5hHPgQAAACA3drZ/Yft+bDL/Ycu7j8EAAAAgKfxRPlwpZ9T+unTt/B6+KHF6p9MxXJf+VC09kG/tTh7/1WMmP3+qnNJtqONAbsHPeh3xw3Wvg/FsfTh9ZeOo4u7S/0CJwAAAIDYbsaXPr0nyIciVzTxeFs68+w+Hz4G2Wb3csCu/P7bn8ePnA8BAAAAdNeeD5dHR8vHiwf9zN5/fWBNrwudD1UcFeU1Wbj78eb4i665yVeqeOnnQ3eGpoBZ/WikuYfz1etvep7NEqspZf1W/3BlW1KNM23VKllXFD9E+XX223++ahpv21Cty5v3f5jX5QpWx5ibD2V52TzqVhd4v71Su2Pd7GgLyB0kN0Iz5nn1gNtiAQAAgGctmQ9/cqn6oaynff70LSQuOY5RTNMMta3nY1NZYobfX6nbNb98thXdMOdmnqIN638VPyn5483xl+O6MSb9Gql8+Ntv/xU2jlzxIz3u17QhTC/vPg2v/7Khfigrtz/eHDs/i+I+IzfMOfyrbHP9dtXCX46/HItttdshuwAAAMCzQD706fJdSAsm74VI8/1VVEsMxbTWfNhlhqqCV00sRmaGeao21AmwyZbHx1//mvi5EUPmtA+vv3gFZBVKxazcNjg5MGS29nxoJghrbfJhuEM1jFYNs0r8wsq6/fJfP3z608vhAAAAwE+EfOgTFTY/qlWq1BElipD6NuZDf4YrHVBlWSwaOCqri+qXJOWgzWr6OkFtqI/JcaRmRGv83BoZ6lJtSA3W3ZgPzc+iiO0cj+ZdiVjebOd6Q9nxqFXmrzfIevqqAe3FVQAAAOAFIx/6ZEgQKeXJ6oepW+CqOciAp+qHcdVr9v5rde9faM9fP/1x3HpPqXsfoH5QjaofbnwAT+98mKoftq7sn2bfiQph/PCb76+OvnwSdc5Xr7/xmBwAAAD8tMiHvh3efxgPa5RaZuimlA+vv/zj+2/HiagWF75+/+3P4+bOutXs/dfj4w0/+ZDKh3IFU+1029CSD+XvZ3S//9A8+FSv7Nd/1M9fdZclG3PcRPTvr46+HHPzIQAAAH5W5EOfiTTm6Sbe80vVY0g/qzfK55faIY6pGZqxmmYMZ6pkJ4eGigGozTDR6O2OdKktzPmPN8dfUzk2bkP6YbDrYZ9hKKz3m5PNcs1MzCjW8Lr8M/ELnM1bqqwrn69zaA/sBQAAAJ4M+fAQpcdVYtUyKBcAAADAQ5APD5G5+fBRf6T+GTLDdOUYVAAAAAD9kQ8Pk3reJuHQ0L8+QjgEAAAAdoN8CAAAAABYrciHAAAAAIAK+RAAAAAAsFqRDwEAAAAAFfIhAAAAAGC1Ih8CAAAAACrkQ8e/AwAAAMDPh3zoWAIAAADAz4d86Nj3TgEAAACAPSAfOva9UwAAAABgD8iHjn3vFAAAAADYA/KhY9875Wc0n5T5qNx3KwAAAPBAiyLLpjeL57jExc00y4rFcrlczvNBPn/4HA/edFwU46l8hXzoWC6Xi5vpmY0r83wwKCfqOClH+WAwGAwG7dlmOi4G9REW3hKYXbK4mQ69f5Wvm2ZoiyIb6vYsimwYv3E+KasXh+vTYA/KUV41lXwIAADwIiTT2nRciL7o/Gz7LujiZjoUsW0+KYdZsTjUfKjX11GOctkPFzFhGFZnOi4GTgRouvdRF3qei7e7EcY0kny42TKKK4ub6XAwzLKh3LjTcRH2aDnKzZaV7z0bjRJHmHM0i+PS7Omwa81et/t4NBqJxvvHhGz8ISAfAgAAvAjJtFaO8tApTfR4N5iOC9ljrHvgB5oP5frG5pPybDQKG0F2zuvcq3rI80kpC07hdRNDwnuX9WyzLGvpZpMPO5ExPR+V4ZjT+3hRiLgYDqaqyicvjeSDfJ44wsQub4p+blKK97S7m6v3yjnEu1y0qjtVkwzl0PgUDSsern8Mm3OsqYWGiyWhefNJmY/ehQshos1zUW/9Kar8AAAAz9miyLLx+J0uhTX1rsFgMBqNwv9XfcJydPZx8nGo3rI0HcgoB4YOrXrdrcLJBgxFp90MpjP5cNyEgqYXKt9oSjJiuTdyfcvJXA4nDAu6ESFZdtpNmTRafVUrMhNHgSWb3tyY/BxGEQ4G+bhebjV8shzl5EPHMhHA9OaOS7fD6c2iqjTKA7SczBN5TB7KiyIbhqTUHF31u0xoTFTb1kvRsTOLT7Zqgo6DY0Vrh+VkLg/BVD5MVFbXm0hmXZkPxTkss/fiRmxMaowAAACHbVFkw6FTFlPFFVP8kCMtRaFMjYMzJUfT4626kaYK5xbcQjtvon64zocDWaOr/182qXmjVypU66vH7q0bLNdIhIhmtrq5oRNukoX8U/1T2ERR+HQSeKhykQ8dy6750OwYO+ZTHLVOPuwyojIcSfGObGmeKUu6peqBPrLbx0ZX4kG2iXzoV1brBmRDPaI65MONBVLGoAIAABw82xUcNlW+tnyYGqa3FNPoWuJQ9GazkKzkG0WpJnlz1lL0SHU+bN4ie9Gy2WF679atZB/bW9x6Obm9z9CdmwqQ5SgfbCreyDCSGKPb7CnyoSPecNEmtgdNfNjp/R3nw46prJmtLARPoqQkrwq4V1Pk3EzQSo1WjZlLL4lDcG6fwNOsu70coseXqgKpvNTUzIh8CAAAcNBU/7NXPnQf7aG607qn7Q+8DPNJDNdUXVYvH8YPwrG9XznnetypOyBOLFV0ek0dRVY7TdqMNkjT+HIyccfZxn3yqjFmVnFYJR86lp3yYerSSLOtbUoSFwPMKZHmX+2IStgqRIlUZo5LZ4RnamWdpkzKYVa8E4eUfmNYVttDq6qbDGUFsrV+qPIk9UMAAICD1zMfJmqDyzC9qVJ49yV2rx+qkauJ+qGTD1P1Qz3noduY0KSo0z6MbhG01cL259xUW8Y0xjyFRI41dbck+bDNMvF4T5PKzF12YccMnURn6ofxbm6C0M3NjbsI90V3AvOko03jvzc89FaswtBcmJHXOeSYVbdV4dPB3MHo3X8YmmTPDfIhAADAYWvLh/K6v3xey6b7D/2aR7zEzvcfyjmoe/Da82Hq/kNv9dW/prrHmUgT3i2CG8KhjB5Rxs6iSBw/LcVZd/KhI2wsM6AxvvE0ekpnp3zoFQ+bA0gWHt1fRDGJvz0f6hmaGyZVPb2VeniUOdlCUz+K33gxz4A1j3UNzZb5sBh/jJ9fKkbVDj9OPkY/SgkAAICDksqHTb8uRL5B8/zS/N147D6/tHo+YuLJNM4SRS+07fmlsoc8mZSd8+FS9qLlA2xC1zfux1bPL23Ph2Y8YCi6mFJj9DzL5JNp3CJT+LmElnUnHzpaj3gAAAAAu9T+U4F4SuRDx753CgAAAPATIR8eDvKhY987BQAAAPiJkA8PB/nQse+dAgAAAAB7QD4EAAAAAKxWqxX5EAAAAACwWpEPAQAAAAAV8iEAAAAAYLUiH6Kj+9tZnl/cP88lzi4vLi5nq9Xq7vrq9PxqF7M8cPcXeT67fcrdBQAA8CL9dN0q8uEWrs5PB0IVOSqzy4sTHWburq/qCU/v2uZ6d1rPSrxl7SQKSLoNYc73F/nJ+qXW/HN3fTUYnMhDfHZ54b3xrl7MeuJ0Wru/yN+GFby7vpKbpaPZ5YVc+tX56cXl7FDzoVpfT7NDV6vV/e3sJOytZtHN/pKHh5z46lot5O76Sh4Md9dXrcfVdh9k8dHrr5g+Pk0LD8n9RX5ydX2nt3PY/hv3YIcF3M5ODnoLAACwf106GPe3s7dNB+nu9MFfr7I3VXe07i/yk/YOamtTyYdIuzo/dQ/Zq/PTkzyXYeb+dnZSJyvTs4/e+/b8/K17yIZUs7ENV+enIXtU4SqxtLu3+du34hCXbwxk4+WLibR2dyqCitvmTUJvPszwZHZ7f6j5UK1vTO9Q+THXrKbciWIXyInXG0HMVu7W+4s8z9VGM3b/QXZ1frrpSsehuL+dnQxO7xKH98Y92GUJF/nb88SnAQAAWK1WVWcm39Qh2fnYrkcY8kY+RJqbzarD2hyLuiAWjqr7i/xEngNVbklkqqYXO7u8qLvm7gGqskToHEeq996GOaTOH3c1q4n/Ulcvq8Srr9Ccnova5sXlbLW6e5tf/FrXJ0NINjVM04zwMaFfD/VMVVOVDai2YSiHDkQRT+fDv7i1VvnGsPqyYnaSX9zq9b3bvENVFHGje1hNcx1BH0JqPtVbbqPdF2rLp+d/CXt5dnlxdX19KlZNTHYVb/O351dXei+vEpcM4l0gG2x2vdh0YT5dpkntevVeE1zD9o+P5Hu7B9V2k4foxeWv4Tgxe62abepqEQAAWNW9iyj+NUN7TtRXedWLkB1df7DV1fnbX69/TY23WiX6t+Fb23zFx30h2fGoOyT3F3l+efkX/eJLRj7cQkuP0ByLJgnUf6rqdniLmw/li6LkrcbLuSEkVR6pZ3gvk4PXCb47HZxeR4Njq451PU2zIiaO6hVXIy1DMceMjTSrHzay2KRquyUKbmFH3MaRRubDgarRDcKHhV7T6o3OltTru3mHptZa7pcwgfwAlX+af6o3kbpYIMdFyAQuLi6sVz+ubcp8eKILniF1J67t2QKpnLk8WgbiYkfdzi7TtO167/WV3CzxaOpVdMTK7RaOXv1GdZiFbUU+BAAgLXwd22vlpkeRqKmoKc2Xte7wOF219nzofsW3fr/fX+QnYaEd78p51siHW9D3/ql+Z5wP5bHlFY5MTjP/2mUIXDimbR+69VRRy9VnSAhFA3lCiuSgetXu61E+NDfXxSuVLH6GNkdvXM+2feCuu4XNW0JrzQ4SWdqOVt9UnnV2aFWZdJtq1vdEf2CJ++XM+Nsm76WnafJh2JvxzvLyobOXU/nQbE9xmKndKjfvVtOkdr15r2xGdFSsrwImNoLabrKWa8rCIpc2VUfyIQAALtkx1uOq7HXbRD40U6rcqLua7oVgMVhIp75UVzB89Xvxz/YWEl3Bl4N8uIUH1w/9WcX5MF2uWSUmuxMDCK+jbClzWjLG1I30Q11qAG33fOiew3FHPA4JXo//ZHZ7724l/QwVp34YPwgnCldq+5t0l/pQSOxQU2g11U67QeQzja79cbbxQ4ycvJTay13yobuXUwekeV3MPzmwVufDDdOkdr15r5ys9SbhOHPKMSTN9oxruSf5xb0u2JIPAQBIkbftDNR9SbYT5ebDaEr/IQ6pfNheP/S6gur1OmGGOasOAPkQSvd8GB3rJ1EwsOS9VfGx7koFJPNi/FjUapCh+9TQVEGvbz7ccGOk3qT29Nu2fqiHGfj1Q/dDIVE/VHNu+WhL7dC/+TEjuTXcLaMbY29AFWNNT9wtuZN8mGpta/1wB/mwtX7o5sNk4V0eySfeQdKyXtV2iJ6H1lyVBAAAgvk6TlUFV6te9cPHzofRzMmHSOueD83zS8XTZZyn68bDEeOR2XU4kWeAe/dds9zEM0XkId6cVOZuPfk01A7JQY0S1E9Vabv/0Jxg6bDR9f5DM86wc/0wdf+h2rAiscjrSW07NM5j7XFLzkEEnuSzfOQqt9x/+PB8uEo+v7Tl/sMd5MPWXe8cOS2Fd3ESqf3r3kXQcv9hQP0QAABXnLXCF7R7/6H4Iu50/+FT5UP5gEknH8oehe7jPfsH2JAPt9Dy+4dux92McuyWD/0rK/KRHoH3mE0zNLQ9HyZ/cM99gmVrchiIyBc2zt3p4PTSf37p6V36yTTeJlVPu9I5XO4O9TuQV+dvO+ZDvQ3VA2yinSjXd/MONU9ADZnH1BrDh4upSrU0WOzQZsRFy7qvHpYPV3asiIpPUTFtV/lwldj1bj40xUC1ncTWJiQAACAASURBVM3NBvJkmdmHp9nn3Lo/2UI+BADAE4+bW+lanPlal08KsLdyhO/nuPeiZysW/7B8eGWfxr8iHwI79PAfmgP2YOe/xQQAAPBckA/xeMiHeJbIhwAA4KdFPsTjIR/iWSIfAgCAnxb5EAAAAACwWpEPAQAAAAAV8iEAAAAAYLUiHwIAAAAAKuRDAAAAAMBqRT58JL//9ufx8dffH216AAAAANg58mF3318dLY+OlkdHXz5vmjSV9z5/+ua+/SH58Pff/vzlaHl0tPyFhAkAAADgAciH3X1/dfRl9tuPLpM+ff3w86dv5EMAAAAAD0E+7E7lww+vv1R5rCrfffj0XU5a5b1/fP3lSFf2dA4MBcnlP77/diym+aV+3cx2VVcgZ7/9qN7+5v2f4XXyIQAAAICHIB92Z/Phq9ffVus4Z+uKVcarw9uPN8dfqv8X+bB5cSXSZpX6qlhYzdkMRhUjVJspV+RDAAAAAA9GPuxuu/GlMtrN3n8NYfK4qTo2E4R0Z2Leh9df4hKii3wIAAAA4IHIh931v/8wzocmzoXXZ++/HtWDS6v/Qo2xHfkQAAAAwAORD7vbZT409UOZG6spt0U+BAAAAPBA5MPutrv/sD0fdrn/0MX9hwAAAAAeCfmwu93mw5V8fumHT38OvdePojnvLx/KVvX/rcXff/tzKAqk3W+w7EwF7534/OmbHPG76wYrH15/DXu8dzG5xez9V64jAAAAIIV82N0W40uf3pPkw2ZAbIjH2zKZ5xHy4e7JNruXA3bnx5vjL4+aDwEAAIAW5MPuQgHN/ubEfoXfS3zKfCjjqCyvycKdfNZOFQLlK1XycfNhYoaqgFn9aKS5h7P6U85TLPHLZ12/NT9c2ZJU40xbtUq2M0zw+dO3N+///PD6S2i8aUO1LsPjr3+1r9u6cSIf/nhz/CWaoX2y0S/HX4fHco1+vDn+8uHT9yjryh0k0+mPN8df5EqRVAEAAH4G5EN05NcPdT2tGfIqxsGqacJQ2zAfk8pSMwypTLxrnXmqF8OcwzxlG+p/bYrAs/dfj5sIpNbOSOXD33/7LzkkWCy0ibVeG9bTy9WRzWivH8rKbRgsKh93JJ+Fa8qen9U8nV/aFKv25/HxlzDPZ1HmBQAAwMORD9GRKt+FbGPyXogfMs5Vk4ViWns+7DJDWcGrJ25qX2Geug3rBCiz5V8//eH+3Ighc1qV9+LxpTKUml+wjNsQ50DxdKL2fGgGOa/X2uTDX8RSQjQ1W8z9pc3wr7P3X9+8/6PepAc9shoAAAA7RD5ER03YcKNapU4dqrK3EqlvYz5MzHAlA+ov6lk+duCoTID6xySbQZv19Ot8FeKTSz+fxoxotc+t0aHOb0N6sO6GfGh+FkVWUOPRvGZTVLOVCdD7pc2qYWqzmIctAQAA4AUjH6KjJtLIlPJk9cNUSqnmIAOerB/GoyKr+fxVtEcUynzuOE/zoBpZP+zwAJ6e+TBVP0wtSIdhNc+WmxtDWdVsKwAAALx45EN0tLP7D+NhjXIxLTN0H5Hy+dO3V6//QwY89/5D4ceb4y/H9fTmRjtXSz4UK+i3M9GGlnyofrOk4/2H5sGnZkHvRcBz7z+Uqtsy6+nX24qbDwEAAH4S5EN0ZJ7gYp5u4jy/VA7LFAFjPUw0lBmjIY6pGaqxmmYMZ6pkJ9vwixiAKjKbfXssFU1D4385/vrX919TOdZrQ/JhsPWwz/VQWPNI0t/1co/0TKJRrGGGajLRPOeXNqv56AfAHtYDewEAAPB4yId4FpLjKrFKD8oFAAAAtkI+xDNgbj585B+pf37MMF05BhUAAADojnyI50E/b5NwaKhfHyEcAgAAoB/yIQAAAABgtSIfAgAAAAAq5EMAAAAAwGpFPgQAAAAAVMiHAAAAAIDVinwIAAAAAKiQD9HJvwMAAAB46ciH6GQJAAAA4KUjH6KTfR+oAAAAAB4d+RCd7PtABQAAAPDoyIfoZN8HKgAAAIBHRz5EJ/s+UH9C83yQz/fdCAAAgBdgOi6K8fQplziflPmo3MWcFkWWTW8Wy6daC/IhOlkuF0V2ZuJKOcrNcT+flIO1tmyzuJkOB4NyMtdvWRtmxUJPXmRD71+b19tPv+m4MO2Zjgv5xg5teCLTcVEvmnwIAACwG6lktbiZnolu5HRcVB3UrZSjXMx8ng+G05vFYeZDs76x+aQkH6KTKK4simyYZZk87hc30+FgWB2+80mZjliLIjsbjXL39POO++askGQ61adlfBqMZOPjWNuhDU+PfAgAALAbqd6dSXFlooPaah0IwwyrPvBh5sNNrZqfZWfkQ2x2fztr6neDfF4fneYIm44L8Wc4lOf5YCAP5erES5x+TSgqR3lrJU2dioub6dBPU9V7mzksbqbZhtpgp2AmmleVH9cXimQqluewKFFWzV4U2TBsrlDhFJt0ng/ycV3nlLMtR3nYGT0ucQEAAPxspuOiGI9DF6rqoYUBZYPBIB+9kwPWysl8PimL8cfwYujUmYFpqYQpX6+GzsWj3uQQtupdXjfP5EO7FmG5uqsZmtos1/wZ9dKrBd2QD9GJG8Di88EcpsV4Wh15IcaEt7j5UAYqUeWbNydKMyuT4vxQVy+l+dfpuHBPdbcN7cQK+lXTMKtEZXVRZMNyMpfbVudD9UkUNvXNzU3YmO3jeAEAALBcJ6V1Z0x2zKLyxlD2WkXWajq04m6g5dL2aZs+p+nUibA3jPuHgdfNU/kwtRa6bpHPE0URvb6ql153XBfkQ3TSMR/KyOeN+VTlwSgfbi7ciTOhObuW60smLc1T+VCf6ua03GpU5zwfDDPRjFQ+TFRW16uT6U8i0eaNBVLGoAIAAGyWyoHt+TA9UK5+g+6hyWnC203/MMQ2d4ZC6OapfOi1VjV7qQokdqxZaqEiTJIP0c0D6ofNgSdvI4zz4aaTJJ5tU1csJxOTlPQlE1M/TDayYxvk9PKET+VDOVTAjAs1N0O6mbb+cyguHanhvgAAAGihe4B98qH7cI1otpm8EbF6u+lehk61+/gMr5uXuv8wtNYWPOScq16ovKfJ6+vKbif5EN10yYctJ1h9Mli6wG0r7C73XIrvtdVnV5PKzFnhPm9qYxvEGuVjfaHIjDcI9cPULdHDrHgn2rCxfqgTKfVDAACAzfrlQ3PdP0pWKhCa8Zw96oeJbt7GfJiqH6o5u2E1NFV2mMmH6MQdIW1SmbnLrr7m4ZS24wM3PlhDYW1xcyPPqLgZieWqlooc1eQuM7cti4fOOSlnWOXhlvHloiXqDkb3/sOwNWQj49/tAAAAQKwlH5rfTtMPF2y7/zBVGAhv3/b+w0Q3b2M+9O8/lGQxU0fQuJdO/RDdLJtBksnnNS3V5QfndJKie3ltfBL5UBYe1eOD4zGWHfKhmmF7G9LU00fN/cGhVZNJGc5hvRbVI1UH+gPIPr/0LCs+Os8vnYuHVn2Mf5QSAAAARipZhZ6V+U3s6vml8qGm8qmBVccs9WSa9d+qn9z031qfX+p28zbnw6XqgqpaRdRblutLPsQD9D4bAQAAgGdndz9g+MyQD9HJvg9UAAAA4OmQD4E2+z5QAQAAgKdDPgTa7PtABQAAAPDoyIcAAAAAgNVqtSIfAgAAAABWK/IhAAAAAKBCPgQAAAAArFbkQ6Cvu9PB6d2TLvH+Is9nt/cPn9Hd9dXp+VX1v0++Fvsxu7y4uJztuxUAAAA78KgdG/Ih+ru7vhoIJ/lFyC73t7OTwYkOM3en9ZRX122R5Or8tJ5V85awEBOQTBvCnGeXF/Vr7fnn7nQwkCfY/e3sRL3x/iI/GWhX13ctyerq/K1o5N1bsVk6ur+dnYiZ311fneQX94eaD/X6uhOcimNDbs9m0WJ/ycOjOQCiD8G7U3Uw3J22HldbfYzeXV9tOmxs8waDQb1JD9Hs8qJqntzOYR1nlxftp2SLq/NTb8cBAHCIvA6qQ/Ztrs5PH/wVbzuTV9d3s8uLk9YuYntTyYc4UCJm2NcHg5NchZn7i/ykPo5Nz96+9+35ee6dMPe3s/h1tw2yf1+HK9/V+dvz87fhBOsQDEKgSiUrleLcNm8UevN1I08vLmeHWj/c0CqzQ+WHbFhNuRPFLpDHzP1FfiLjh9mts8uLPM9bPr53/jFaXZh4JolovfVSh/fV+Wm/Fbm7vgpbteM3LgAAe3R1fprn+aYuwc56XI82Q/IhDlUiH1aRw8akE10sqo7p2eWF7LBWaeo2kalCL7Yq8VX/754edaBaz9VEi6B6r5jD5rNXTHx3Oji9tFVKWVA6ubz8S/PHugD49ropeIYVNzVM04wQ4dTrom5zYnK4WKIshzYFXpMPo7VYrfQbxV5WKzi7/Zv+837jDpVRJBHd16uZKKKuVtF86rfcmt0nasunl/WOu7+dvT2/Clvv9PzqLtojItWbXRY2tcyucfvjAmm8651y+tX521+vfz1plnUbZiWX5e56/V4VXMPqeCesuqIZzqn4EH2bX/xav5644LL7Lz8AAHaq6lPZi+NyMNrV9XXct9GFhIH5ar67vrq4/DV8n3p9Y+crUnbG5Jes7h82I33CcsOAoIvLy/QwqwchH6K/VP1wtVqZM8F07sOfurbeBIM4H8oXZaVCnjAnXgiJ/zQznInkkG/oBMsPlLtT8REgymKqOqpX/P4iP5HVMzmMNrTQrL7YyM0mldtNFoW8IRD3t1Gk0fkwtRahSc0bvS2p1nfjDhWt9UeEhlhotoP+U32yh9WRn+C6nNUkcHlxoXr9JKpt6nzo7DKTXSVTID3x5nN1fhqindl9oTHVgS0uiJxs3PXu6yt7USP+ClEXUOR7RR1bvdEdabNxnAwAAPsVvhBlfyZxS5Tq24guhOpaVDOpxs3Frwsb8mHiS3bd23E7xrPLi7DQnQ/hIR+iP3Pvn+532nwoO5Ru4cjkNPOvXYbAhTMq6kO3naj6tFfnp+lJ61plKge250NTGHRO5nTxM7zdVkTrjdM2cFe2X38kOa01O0hm6WjHJRea2qF1ZdJ9l1w1m1FldjLjb8Vb4myznkbsZVnWU9HIzYf6K2T9SZ3Ih2Zr+LtMt61ps9z1iSMntevNYSObYXdQXX70N0I0H2c0tVz9UGcmHAIADlvTDZM9E9NhWK1WqXxopgzdhniIk3spVnSZT+86dMb0t7DtyurGJMfK9UM+RH8Prx+6s4rzYUu5ZpWYTA4gjLOlfCUVY6JGxg9EcUc/ds+H7slsO+K583anx39xOUtsJfUMFS8fOmthPgG9PJCMH2FW7g5NldTkiujlrqu5v17/KjKbidmKl5dSe7lLPnSGSacOyOj1MH81n5Z8mBh8u2HXr+wFlGay9puEo8wZP43ppF6uXC9np+vCLAAAh0XeOCO+4Nw45+dDM6W8qu5ekpYL31Q/THUpm9ernq0co9TlXqp+yIfor3s+jO8/jIPBwJL3VsVnmrfIZEAyL8aPRR2c5Be3rTe8RW3ulw9P3E78SsxHLiU6+betH6oLTon6obMWqfqhnvOJm1hCk7wd+rd0zNjw0ZaK8eYGVDnW1N2SO8mH6da21A93kg/b6ofuoZUuvMvsquqHG9crFY87nqcAADw98wWXqgquVqse9cMnyIehMfE9NeRDHJDu+VA/z6MJLe49S95wRHV6iGHW4ea61Spx9515Bmbcf5UnmDilzcRu9EqdzAPZyzcD+VrvP2wPkD3uPzTjDLvWD+OxnelPOhtBW3do6la3DZ9rZh3Tz/JpVrnl/sNd5MPk80vT9x/uJB+27fr4yGkpvMuTSO7fxDNO/Vsjbm9vzTTUDwEAB8lmLT0mqNPl9Zb7D58sH7rPXJD9GfkwBfeLvgvyIfpr+f3DRMddjXJcdcuH8Wkmz09Zp3Ifs6mfcrkhH8rxdab65F1b8ouN9SNzmnNy0Dy/NBcPNVWPurm6vks/mcbZpOLBPG3PL5XPoryuf42gw0eS2ob6wSrOTgzN6LBDzRNQ7/W6qJnPnGcFtTTY7iz5YNKw7rvKh/Wfts16K8lLA7vJh6vErnfzoSmu6u2sqtzyZJHntfyKuox2h9lxhEMAwGHyOnJND1M/v3RdwJB9G/30O/u9/9j5UPc3mucskA+BF4AfAMAz9fDfyQQAAM8D+RB4MuRDPFPkQwAAfhbkQ+DJkA/xTJEPAQD4WZAPAQAAAACrFfkQAAAAAFAhHwIAAAAAVivyIQAAAACgQj4EAAAAAKxW5EM8lR9vjr/MfvvRefrvr46+fH7E9gAAAACwyIfo78PrL0dHy6Oj5YdP3zdNm8qH31/5b39IPvzx5rhq2FaJFAAAAPjZkQ/R34fXX968/7PbtE9fP/z+inwIAAAAbIN8iP5kPvz86Vtdr/vx5vjLq9ff9LQ/3hx/ef/+P6p6o6jsydwY6n7LN++/iXzYvB7NdvX7b3/+UlcgP7z+8svx19/X/0I+BAAAALZDPkR/cT78vFpVcS6qK/54c9yEt9n7r/X/N/nww+smVc7ef63nJl//8eb4ixmM+vtvf/5y5MyBfAgAAABsi3yI/rYdXxqiXRXqQpic/fbDxDkxgXr986dvcQkxgXwIAAAAbId8iP56338Y50PxSmV9/2E1fPRI/CdGkLYjHwIAAADbIR+ivx3mwyjOhefT9H5QDfkQAAAA2A75EP1te/9haz7scv+hg/sPAQAAgF0hH6K/3eZD/fzSP94cfw1lw/BDi0dHSzPn/eXDprXVE1kf8GuNzZrO3n/tXJLtSjwNaFe+vxIjfjvfEdrH7P1X8USih//qiSWPHwAAAJAP0d8240uf3lPkwzD/B2QwlXkeIx8+gu/m10cer80fXn951HwIAAAAiXyI/kJZz/zmxL6Fyt7T5UP9fJ2mvCZDo3zWTlVz00/f+fI5mQ/9Gcqy6tHR8tXr/9C//7F+Zqx86OvnT9/0T1Da+q2cMl0YVDnt86dvdatkXXE9we+//Tl8/W32/qu71nVrf7w5/vrJa9uRmtLPh2I7qEfdyo1zdPTl/fuvco1m6z9t1pU7SO4OOeaZpAoAAF4q8iHQT6p+qOppYsjr91cqDq2nMQ9u9fKhP0ORyposNxMRKMw5/KscSxneHorAv//25/Hxl1/EbZ/p2J/Khz9+qzdIaGeVBvW43/V2MMOM5d2ncmO21w9l5VYMcpbVY/ksXBUFTeaMf2lTrtqb4y/HdWO2+Z0VAACA54R8CPSjqltxKqut44eMc6t1GPv6e4d82GWGuoK3njjMyk2PId/Kf33z/o/E42QNmdO+v4puCl1FodQLk6tVk0Lbfh6zNR+aCcIMbT4Md6iGaHpst5j7S5tNtjw+/vrXepMe9shqAACA/siHQD9N/VDmLpN/QurQ2ayJQBvzYWqGq8S4Spm4QqmwWrQZj6oHba6nrxog4pNLPZ/GjGg1mdnMqhpoKv978/7P9scXteZDm2NDcpPjS+VTlKKBoxt+abPannqzqNYCAAC8JORDoB8ZEpqU8mT1w1UipVQRSKYyLxTZFfnrpz9Ce2ShLMG9+06Ng5X1Q5kPEyMze+fDVP2w5U7OJgzrefq3FOqyqtpWAAAALw/5EOhnl/cfyvl0vP8w/YiU76+OvrwX83HvP5Rm778eN4tQN9olJPOhXEE3H+rtoN6byodig3S//zB5/+SH11/+8f030ST3/sNGdVtmmL7aVtx8CAAAXiryIdCPKd/JJNMMs4yGhjq/GVgP+1w/v1Q/kvRbywz1xKoIeaRv+dO3R9q3VEMxQ5oyb/f40VQ+HPWvn/4Y+vlwpYenxo9RVSXTMM96KKx6JGkY3xuPszXjRfXNjctUTdL7pc3vr+z9pYf2wF4AAICdIR8Cz5J5RMoz+eHEJ5IazQsAAIB25EPgOWqpXsKmZTkGFQAAAC3Ih8CzZMZPEg419SRVwiEAAEBH5EMAAAAAwGpFPgQAAAAAVMiHAAAAAIDVinwIAAAAAKiQDwEAAAAAqxX5EAAAAABQIR8Cffw7AAAA8OKQD4E+lgAAAMCLQz4E+tj3mQsAAADsHvkQ6GPfZy4AAACwe+RDoI99n7kAAADA7pEPgT72feb+jMpRXk7m+24FsLX5pMxH5VMucXEzzbJisYtZhfPu6ddiTxZFlk1vdrLxAOBZIh8CfSyXy3J0ZvoQ80k5GOQ6wczzwVprtlkU2VD0vRZFNqzfl3tvayYoxtPwajkKSxtG/Rs5z6ZJ80lpXhxmxUI0Oz3Dp7C4mQ7rRZMP8Uylk9X8TKS4+aSUp3NH03EhZ16O8mI8PdR8qNbXnSAXn2mLm2nzObjp41F8lNkPq/mkHOrtnPhcDfPfIh+Wo7zLZjGftAf8UbYosmE5mZuvjHodF0V21rfpG7/XABwK8iHQR9yHmI6LYZYN1dfeosiGdV9nnqcj1nRcjEaj0MmQHQ7T+YsmCN/ly+m4CP2q6bgYbu6HOd/QcibNauyur/kQ5EM8U6lkZc4s9+zbpPkEqBZVfc4cZj7c2KpydDYanYnPzJCjmtWUnwPhk1BeSFrcTPXn8Dozh1YUWZapjWabufP6YTnKn0siClsvkXv9L44u3B0H4DCRD4Ee7kR5TfbG1Hen6aaEzl85ys3F7HxUyr6X/B4NV77nk7K+Lq6iZqLTtuFbPNET9d/VJZiJ5i1FEUA1VfcOmxJl1ZLpuAhdqKpuUE7msknlKH83Hg/FZheLjosMwKGYT8p89C4UT6qjVB63w6x41xT/B1UB8GxUhhEB4cDWJ5pNXOHTIHWuyU8eWZ0T56B6ZWnzoV2Linyj/OySKzjTfy7soIn1h5L4aFIfRzrjNatQraZbRA1bxXwsZ1lxEyVVsanfhXw4HRflZCLHgMR7JDTY7LKwqWV2jdsfF0jjXS+2ZFiR+VlWfKw3+zArbppZyWW5u1691wRX+T1lPvZla+t3LeLjYT4pi/FHd4RLvOMAHCbyIdBHoh6oOiLxoKbqT33pdP0WGfPE8KfmCnp40cTO+GJ5vOjIoxQP5Qq6VVMxK7+yWnfyZElE5UPd5Qph8kb2g6kx4tBU/XtxSDcntTxPZaoRl0iW8nwxYyPNORv69IlzTX74OCdLOJXccd0ta6Gv7ITLWO2fS6phMunFrU2NCA2x0GwH+ae5glavjioSygEXMoHLi1bV6se1TZkP3V3mjgGJdkEzvZ7PPBfRzuy+ujFVSFu3U6xL2673Xl/KzWKuRITdNNShPR7JEl8rjD+T09sEwEEgHwJ9dMyH8ivQzWypsVv1lVrnqrMJbF4+bBvLunyE4qGcOMuyoSpcOPkwVVmtOhlZlsX5eekMEnNGiDEGFQcolQPb82HmXV0yMzbnl7ho4p9r8oJU6yWkJifIzyi3taayV5/OKpy0roVaXJz0TNmzeY9YtSijquykx982b4mzTT2NuWJlFyc3i86H6mMtZFc3C5mtkdhlqm2izWrXu0dOatfHI1BkNtabel1+TGwEfySL+S6LV9+9pgngoJAPgT4eUj8MUhe5zQXg9i/X6LvWD066kU56dDsx236RRyOp/HwYPxTHq52GOTT5UK5X6BLpUU/UD3Fw4hLWtvkwNUwgHp9p3u71+IfTm4V7vusT06kfemthP3DknE26S+VDeWqbq0VeSU2tiFxuGEj5UWQ2E7PNB0+cl1JhtUs+NHeTtudD83qYv55PSz70B99u3PUt31Op62th7Ia5BmGeeBZuhWi9MLrh8iWAQ0A+BProkg9Tl5PDv8cPFB0M8rmt48ULSl797fLVm+is+G907/lJWxTZ8N143HKBOXQyEmNW5/lgOB6/02vUVj80iZT6IQ5Qv3w4TF9sCtOLo10NmOxRP9SXZvz6obsWifqhmvPQTyyhSVZ1v2IqZmy6bpWqRtoHz4ixpkN3S+4kH6Za21I/3Ek+bK0fuodW8q51mV31x/vm9WqpwQI4WORDoI/EbRXm+9LcZTcIz99zr9y7g51Cp0323sxdH62PSDXtfMTioXe9XDZvUWRD98aYwOtx+vcfundjekUGYP9a8uFA9/J1T7rt/sP2ANnj/kMzzrBz/TB1/2FDDxxQIyfjD4HUcE39qNK2zyW9jsln+chVbrn/8OH5cJl8fmny/sOd5MPWXe8cOS33BIbtE1+PS1ShnfsPCYfAM0I+BPpYNsOZzHDK5O8fJp4HUE+n+l7ygvpQPC1Ada3MyEzx44dypKXqBT5e8VA+yCEeGFa3Z3Km+z2yqfqxrqHZMh+efZx8jJ/RJx8Y+HFckA9xaFLJKpwFovO9/qyoevnv/OeX5vP0k2kqccaQIwDDNPr5pepTJfy+68Z8WLdKfuws3Q8xvb4b8qGZrby0ZGqN05uFfL3lyTTR4tTPZsTrvqt8uNSPeDXxyezi3eXD1K5386EprqrtbKrcVXvn6s9my5vn3JpD3dsIAA4O+RDoY99nLoCXjB8AwDP18N/JBLB35EOgj32fuQBeMvIhninyIfACkA+BPvZ95gJ4yciHeKbIh8ALQD4E+tj3mQsAAADsHvkQAAAAALBarVbkQwAAAADAakU+BAAAAABUyIcAAAAAgNWKfAhgV67OT6+u755yibPLi4vL2S7mdHc6OK2a/vRrsRf3t7M8v7jfdzPwHN1dX52eX+27FQCAx0I+BHbo7nQgncxu7+U/meBxdb6evL2zNbu8GNTppf5zzU0yYYITEQDurq/Cu+JMJecpmmRWZ71GiYmTyeru+kou8er8rdgsHd1f5Cdh5ve3s5PB6d2h5kOzvrEuO/T+dnaiN++qbl68c8M/ieXeX+QnLc3YMh86R68rNK9q+MHm7Lvrq2oDyu0ctv/97ext3/yT2nHVYrtsxtnlRZhmdnkR7+ht6Z0yuLic3d/OTtSnU6ytqeRDAHjZyIfADjUxQ6p6Y7lIOCvd89M9e/vet+fnYbZ311eh2x1ikmqBmGB2eVF142QY6NA19DNSKlGEiVPJSqe4+4s83zYfmjUN63WY+bC9Vd12CcSFQwAAIABJREFUqDyQmp66PGbCRhCr0OzWu+urkzxvSYCPUD+8O910peNw1Gecn4IekH/8HVeZXV7keb5xzjuvYO98huRDAHjZyIfADrn5cJ2IdC/NFsRyUc0Qk1UzvJNxQvTMQiS4v8hPQhFPhBM/r7b3FzfmwNTEV+enf7m8PNGlGFm7uLi8FIWMdSny6vr6VL+lepcsm6QSpnw9VSAV1blmW+lXViYfxmtRL7epDIVX9QrOzJ99d6hSr6Y6ZuJAaMqMV9d30S5rCsJ/ubysd9z9Rf72utl6VfPM6qttLndZ2NQtlS63QBrv+ricfnd9dXH5a9jsF5cztzbeZf46sYft75wgcm7h8kp8PFydv/31+tf6df+Ci3fc3prrI3LmcmWrZcnd6lYmq1JnS1V55Z+5YcXN3g8r0uxxeWZV87+7vjo9/0toKlkRAF4Y8iGwQ34eq+hemkkC6z9Nca9+i1+UuDo/rXtmYTChiRDmT3fR7e2sZ9QhNF6dnw68slgUWZuly5GWct3Fqq1MyVG2JPS/9XZrNpFsRnB7exuWXvenVT5MrUVoUnijW0iR69t3h0phJ5rSq/pT7oiwiXTz1IhTkcCbiwv16p+IYBBSRJMPvV3mHml2G8qtIedTJZC6bWb3raev0lF0wHeav9kLcrOYKxEVXZtt2iPr2PKN7mFmtklYqA6NcQHTf5eesll9fQHCH1S8KR+exAe22OPOZ1q1v+p5dh17DAB4LsiHwA6pG/ZMvzPKh7LX5WQ23TWUE68LWd4gxjhC2F57y1jW1QOKh9GcmzVqz4f61kSnbeFWsXia8HYz2DJsus4rq/Kh11qzg9bb2R2sm1porx2qVs1kVJ2d1PjbelbN8WCmEVtVHSRRNHLyocmcdXb186HZGu4uM20LB5ve9f6R02X+unm2qaE+5m6E+PDzRlM7q2+OSTG9qh5H6dTPh2ZKPeLAGXot6fsPT3Tq8+/sFXvcyZwtpyQA4AUgHwI79ND6YZhYR69mtqkKSXhfe/3Q7T6aRsZdPfdGx3ji1Ap2z4ep3m0qV6dCQt1/9UOL7C679cN4LaItYPOGTHepbdhjh0b5oRnjenH5qzvOVo+DbYZWpgKGuabQJR+aZbXmw+QRKOfTkg9Tg28TY25T96Y2k6VvvLw7rbeV3Ajx05jCISeXmzgC1cylcENpdMAnq45yyrDFzOp0OINCe+yeXfn5sNkIsl5qoi/5EABeEvIhsEPd82Hqsv1a3Csd1PdotfRKo1dUl3pjN65jDkxN3C8fbupoqk1qOqY96oeyBJeqH3pr4dcP3a3kbq4eO7Q9zKcCntlEqULTrvNhsrUt9b1d5MNO8zftTJ0FMlvK+mGH9WqpwapWmXnupH74BPkwNMYdVk0+BIAXhnwI7FD3fGifXyqehBHfHNjMNnFnlH871sZHpJpnijykeBitoMqH7t1cqw73H6ZHCa7fvu39h7LZ4hayjfnQv//QbMyQWPTIyR47dGOlV62jOwAy2mgt9x/uIB+uEs8vbbk/cCf5sMv8RTtbbr5tto/ev/79dan7DxMlQZO15HUH5/5D+dSljfcfPlk+TNzX2pxT+oZe56G7AIBngXwI7FDL7x86vbT4qYMb44R8lxjTqPqUolSlnv8hhfSlF92/eBitYNMRD89dDJ3IsHFmlxfyoabyUTen51dx59WMDIwyhtksZmuEkaJhcddvO+dDveWdDau35LoZ/Xao+VG+MHPxevzMm+R+EQFSPpg0rPuu8uHKDG3V8cnu4l3lwy7zD+2Mi6tyO5vHxgyauCvP6+Z6gXjOrT3U5Ub4m1MkVL89Y45beT9ktAXq48+pgce7z25PoXs+dNadfAgALxv5EMDe7O4HDIEntfMfFQQA4ECQDwHsDfkQzxT5EADwUpEPAewN+RDPFPkQAPBSkQ8BAAAAAKsV+RDoZwkAAAC8OORDoI99n7kAAADA7pEPgT72feYCAAAAu0c+BPrY95kLAAB2phzl5WQevbwosjPn1ZtplhXvRnkxntaTDavfCc1HZT3VPB8MzDyn46J6SzWHRaIB03ExaDOc3si3AjtGPgT62PeZCwCHItGxBg7ddFwMBnl17IbDeD4pZQBb3EyHUR4L6a5+16LIsunNIsS/aoZno9Gwnn9YYphA/v+y9TziFMMTIx8CfSROqHmevMLnXEcsR3l0udEhv8CW+rKi+4URJhiKa5PzSRneJb+Q4nmKJpnVadZIzK1ZRzOT9pUCfiZNbWH7U2N+posMu22M+RgpR3m6eYsiG8afHsvNndeWD0ZnVuZDx13iVuSnn/lg3DW5s5KbC9L//P3frY6Own//792/LJfL/373D/LF//nnf6smTr2+XC6Xy3/732g+lf/853+KFxHMJ2V1zNeHsXPGzSel2ZVR9a/KhzdVSqzmVh1p80kpDzmdCee5+HIX55E9SWN8w+JRkQ+BPhInlPqsD6qrj1k2lF2o6bgI3xllM0bFee/ZaBRmO5+UISsubqbDaHFygum4qL5C5DeZeynUcHt7YSZyDrIN5lIogEpr6NogHoT2YIvQhV0ul1V4e2Bfs0M+bD6p5GfUhoZ6H3E9hADw2B5hZ718//P3f6dj3nK5XP73u38IKe6Pf/2X1dH/+e9//dzy+h//+i86Ln7+f//3//zv3/9T9cd//vM/hf+vYuT//PO/eRdA2zNYy/T5fLkosuzj5OPZqKzSXXR9dv2lab4odb3xrD4xzUlqT7EnO6Tx0yIfAn0kTig3H64/6PXn+6IQcVFHL3k5v5rhXOZDfW9D9ZWzKLJhuAKaujYZtHfmUl2c8K4QO8Pr1RLdfFhddq1qAsV4uriZno3KqtIYsusw+jKOJwOer/iMM8kn/CkrXcOsmOk/F8ul7KTKUWrlZBJeLyfz1rEJtuspPknWZ3Gqee79UcOseOffNxXmYD6I1n+a62LRZTL1Iene32U+XpaJ4RVeZ3qeiw0YSj1yKfL6nXml+oAyG3ke7azU7WTyRbnjfs7raxvzYRX2qmlSr//P3/+dqQoul//2v3V61PkwTOx/PwbVYVPtuLjm7NYPx+N3+agsR3k+snXwYjyuzrL0hVR7YoZjpjqjh1nxcf0KNx/i0ZEPgT4SJ1Tb943uIzYdMvmnKe6F4S656mmtuxeiKBEGMjk9qigKmkW3t7OekfguTF3+TOVD2e+p0mDi9v1mOFY0GfCMmduZKiY81CO6nREBQ3/Iogp1AzXEYCCmiUehx/kwvsqjPjrCJSF9g5YcyDCIXxcXktR6haETuodtP5dM0dV83InFNR8vUaua8fDeh8l6iXILx5Ved6CHvpDX7BQzkjC9uZwd12Vkx4u0i/phEwXNnKuJE/XD5bL1MTDy+9ob421etONLw/xTz6eJtIw/GuSjsnvhHXg48iHQR+KEUuNPzBXHKB+aC+q2ZyD6NGbi9RVu7zvG9PycfNgylnXZoXi49LqG8ZX7gegvyu1g6hLxv4o6Kl+EeEnWHw6y9iVrVvUjLuwda/IcMeeFvDQja+9yGu9yT5d8KD9/FvKWqnBxSrSz+ZxJjF9QH4wigKmkZ8bj6c9P9QkZ2hbnMffSlbn/UObJYZaJVBZ/DicHemRea1P5MNUwPRbDvZz38un7D5scKF78u/+sJ068vjkfxovYRhUFzV3Eo+h7OasuNxTjsTsStdrXqXwYf/lWx+0wK26af5rnj3sDLbBGPgT6SJxQD60fhomjK+sbrj2H97XXD83QULeR8VdXnNbk0LKPm+qHconmK9C0JyyI23jwUumhjFk1asCcFPLqkowcJue4Pc5d5cPwsSObJx7VqD5Y5Ou6gdWHVXz/oa3stX48qlHo8uqb/nhJftylb9ZSgdy7LBXfcuZ8QMnhwV4+TDZMf2b+vPmwpX74x7/+i8mH3uvd64fNlPHZ5Ga66gLHmfN1bH73QuZDdS2gY/1QfvlWbUt9dYbT4Sc8WvBkyIdAH4kTqns+tJelUwFMqm5CMN0y800TXb9Xo1Xb729JVe1a39j0NXvkw5b6IfkQL1L8SKfUiROXpFLnxQPzobnqJO/KKyfz+JWld+tgeN3rszojIOrJ7C3W8cy9OTRbyb0X2myWVD6cjot89E43Jq4f2iy9TI+D6FE/JB9uHF8q7y1Mvd79/sP/fvcP8l7EirxSOR2Po31Q5cP5eDyVh6L+ZYub+uKIuiZS5UPx4BlT1jaPBFcHeXxZpPJz3qeKJ0Y+BPpInFDd86G9rUU8rCW+BaWZrS64hZuL1A0w8v6f9kekyglS07QP9ZS36/TIhy33H5IP8SLpk25+lp2dJRJIVkcO0Wv0fzKhSz4Uy1WZRw4RN7OaT8p89E5OvNX9h4L6YDSfctNxMRqNvGG3ivsMWPPxstX9h3K0wlD0+FvuP9Tv9e8/HHgbv+X+Q/Lh/p5fuhZ98cWXCarzdGgeByBu1j2bq9NKXTat3zUIZ6KurjdBMXXwB/HRWM+N2zGwY+RDoI/ECdX2M1/xlXX3sXjt+VC+S1xHVL3G+PmBLcPSUrc2yUZG/dFmFJm5KB4vYlM+VBtN3kNFPsRLoUZdxrclmys+0afH+u3xAzYHose5ZT5M/v5hnFhMgc59fulHMYgufoxnPEpTLlF/6Dk/+xYaEH/0xcFPLt1t0qC+oWuonyPa8vxS+ckmfzHonfOQWLWzotu2bcPIh8v07x/KeuB/v/uH1f/9hz/Sry+Xy/bfP5Q1w//853+qx6a2/GTFMHENJbwl1L3D3Yn2Nt2lGl9aTWzOqeqAUSdsdM9Fw/suzqpnov6ERw4eFfkQ6GPfZy6AF+AnjQTSxprJAeIC1otX/YRJ9f/1ZYh1MpQhTdwomPp1iuQzaU3pPrzsDmkOS4/vZqzDKrBL5EOgj32fuQCePR5Ynxoxe+DIhwBeNvIh0Me+z1wAz1g9bOxn/L27oBov+hx/5pR8COBlIx8Cfez7zAUAAAB2j3wI9LHvMxcAAADYPfIh0Me+z1wAAABg98iHQB/7PnMBAACA3SMfAn3s+8wFAAA7Mc9/7odFAQb5EOhj32cuAADYgaf8Ec761xRxaOZ5/WtD5Sh/4p+lPcCjgnwI9LHvMxcAAPRU/8ZMO1NUdH68fjoutsqWbhKof+Z+TU8wz9NNan2jmkPcyHKUH+ZP7FS/fBPWqUdQW9xMz7aOW4+aDzf80OuW+XCeDwYdWrgosuYY3/YKCPkQ6GObswwAAByixc102DWEOPlwW6l8KMNDOcpFLmpyS93aQZi49Y3NMs+yszPb8nk+GGYPXp1dm+e7+E3UXuW4R8yH80k5zLKWH03def3QHCc9kA+BPnZ4GgMAgL0oR7noRs/P2sosTj4UPfv5WVZ8bAp6NtRVVZzx+N3GfKhbpfLhUgfa1jc2bcwH+VhPOR0XxfhjWB1ZTQ2FpvmkLMYfQw1KNFuWNJu26brfeno55xC6ytHZ9GaWe+XQVJlLVkrDfKbjopxMwlKrFZRT5qNyuVwU2dls3YyqtU37xeL8fBhWKkxZFSerpVTrKFfcjWTVDE3sTBwV6igaZsWNmKzeVs1x6G6BaompwNllS5aTOfkQ6MM96wAAwHMR3Xn4oHyY+x10ORpwUWTDLvlQNMzmw2om1Qxb39i8lg/ymSqTVisyE0/lWdw02WM9EnI+KUUmUWtRT9ysplyu2SbVu2SsTQxtbdbLmE/KEEQXN9Nh/d7puEi9LjZyNcxSrvswsZtsPpR5NQTvKteF+W8s/S1uplXlUE+ZOirkUaRaLhqj8qG3BZLPW+qyJeeTcjAYkA+BPlo+CwAAwMFb98WrDnEsyiob82HTKQ95yQQ2HV2aFx87H85F7Knb7KeIME8zK68y2ay+yYfuuocGuLNqyYdm+tDCOAeGzeK+vnSGE4fNG+dD+8Yq5pk5yJTlEvuoOX7SR4XaKXLFQwNMPvTWNJkPu2zJagXJh0AfqQ8CAABw8NZP79BB5YH1wyY2hABgAmGX+w+Xj5MPwz/V+UemCPUUnJAPZVNFtFAPPgnTiGGWsiqlVHNI3OCXyof29bBJ9eq35MMszu1i44Sam8mH5slA6+GpIqepFiYGl6ptNRCDYBNHhdrdXfKhtwVS+bDTliQfAv1FZx0AAHgeqh55lK92nw9NIOmWD+UYSJsP5RDB1jc27xAlsuH0Zqb/XJjnYcr6oZcP1SLENO0bR0k9AMYtri5bq17b5sMt64fO83u8fOi3M94Ccqxp4qjYST5MVWg7bUnyIdCf98kAAACejSfIh6k7zczdX6aX7z43ZVnfGxZnueiNfsKsCnri9fh2teb+t5Z8mLhxznl0qvtLDCYfijvr/OeXttw1l8qHYgOavdbz/sOgJR/W7WkWESVhWeJL3X+4g3yYen5ply1JPgT68z4ZAADAs7F9PlRjBcvJvEM+VE+q/Dj5eOblQzWKcQe/f+jnQ32zXBMLxXzyyaRsH18qbtdsVidqjPx9Dtv4dD60G1ne0yg3u7f7ZHBdL7R+fqlJ9c0iNj6/NHoaqs2HsmEmnLs/nRIODPeo2FU+jLa8eqBO+5YkHwL9LQEAwHM2HRfFeBzdZuaHMbRIDVzEM0U+BPrY95kLAABwCNrGcOI5Ih8Cfez7zAUAADgIYrTkYJD4mXg8I+RDoI99n7kAAADA7pEPgT72feYCAAAAu0c+BPrY95kLAAAA7B75EOhj32cuAAAAsHvkQ6CPfZ+5AABgJ+QPxAMgHwK97PvMBQAAOyB/y759wjz6ufNtdfthwPgn3Z/Iw363cLvtI3+G/icXNvviZpp1OhQfHfkQ6GPfZy4AAOjJ/B5Dgikqvsx8WI7OwrJ2lw/NTyDOc7FZ81G5PMh8uJNf6ZDbs6Pe+TA6jB96fAbkQ6CPHZ2AAABgbxY302HXXvWLzIdqWbvKh/NJWYXA6v8Hg0EcBQ8tH07HRXRFoIc+++4h+VBOPx0X3Srhm5EPgT52cfYBAIB9Kke5LHOdtXWvm/wzHRdxlWk6LsrJJBTKysm8HOWyYrZcJ4GxnEa2pJ74XcgYskDU0vXvsmjd7GpFZFlvOL1ZmObJrBhmqEPUosiG9cTjevssimxYr5opJKotH1Zfbs/wYhUs5bpPx4VcnTCH+aQsxtOqhdWyxHs7Rr557oXY8E/RLpifZcXHTdszbpi7pol8OI93RDk6m97M8nr+Jh/KP1OHaHgxbMmwZ+UBRj4E+ujwWQMAAA5XdOdh13y4uFlnjsXNdFgnkOm4GIgCmuiXN9lDTiOfiyMrP/NJKVJNs6hU0Oq46PmkHIh8W8cD9WweWUMzq6abt55POcpl9K1elyXZlvKsTHcDNX21UKda25IPZQqSLe94c2l6MrXZxfrOcxXbcnd7moYl1tTNh3K5zTzLUS4Tr8mHcnfEh6hbnJR7Vl4rIR8CfWz6qAEAAIds3cWXdSopqia540ub8YQyvZhcFJJMnHCK8VQX3Jap56m2DP7ssmhTKc2bkpfKh6J5oVWmeWGe6r1huTKHdMmHumFhNZ083JIPh3qYpV6LzQM+U/kwar+/3cTbU68v02vq5EOz3DCBmUO3GybDFohrpGrPyh1HPgT6aP+gAQAAB2w9MFJ3qbvWD3WktFWgZWs+NAkhH5VRIJSRRj3ZpSUfblp0MxBUN9vmQ7GIEB5sXq1SSio7yVDUIR/a8CnTXTUecijGTKbyoXl9U9S3UvkwrjDnXnmzJR96eduuaZwP42sW7kN94vsPB62HaNg4sgpqllO9nXwI9NH+QQMAAA5W1XGPKnKd8qEcJWjqh13yYYf6oV/waa8fblx04nkwXfJhp/qhmw/j90YzSVbVmibWM0yUN20+7PWUHb9m21o/3DYfblc/dB9U054Pw9JTh6hcdD4qW4qr5EOgj/hcAgAAz0jvfOjeK9gxH6buQPPmKcOGuuGtZUVSi9aZQa5UKoI2Aaz3/Yf19G3PL03dlRfoqpqqj7n50J2JWXS8JRPPL225/zCVD9UjdmTD+t5/6Gw0s2XM/FOHqGxJKF26hVPyIdBHdCoBAIDnpF8+lGM181EZfu+uYz40DxpdimnceYaBf5NJ+ZB8uPSeCCoWEZ5f6uRD3ZLU80s/FtlZ9PzS0CQ7SjbVsPpF+yxQs5WGWfFxXLj5MFqiScXJopkZ1SkfwWo2Wjofqu0ZN8xb09TzS9WQYLcIHP3+YfNYo/gQTW0T96Gm5EOgj/hjBQAAPCPm5xwiD/81vJ9UnIsOx7a/MfhzIh8Cfez7zAUAAD8dWe0xZahD0vZrHDh85EOgj32fuQAAAMDukQ+BPvZ95gIAAAC7Rz4E+tj3mQsAAADsHvkQ6GPfZy4AAACwe+RDoI99n7kAAADA7pEPgT72feYCAICdkD9DD4B8CPSy7zMXAADsgPxx8xcv/BQ7unjYDzkuiiw7qOsO5Sjv+Gso5EOgj8c+hwEAwCNZ3EyHg41sUVH/9mC+zc8OLorsbFc/U2gC7XxS6sa0lUM75MNFkQ3jtavW/WG/tdjpRxHnkzJME63adsvqtxbl6CxsvV3lw/mkVAdW2+57iPlZ65UO8iHwuHZzIgMAgP1Z3EyH3XrnD+vHz/OdZQDb5nKUy8zTXg7tlg/PRjZILIosy7LhQ/LhfFIOsyzbVKrdUYWz91qoot8O86Gcz3RcxFcfHm5xM23fvORD4HHt6mQGAAD7Uo5ykUbayi9eVDCVuvWfujiZz/Sf8+Wyrm4NBoNBmOd8Uhbjj+H1YjwN5coo7y2KJuTM80E+EW0T+cpZynRcFONxXrfGSwuLIsvG43dyZat1r9JFXL2s/5yH2bqZqnp7FFHUu6qsG7aADjzNlKIB87Os+NjUdUNs3rAWYWvoNzaLqPLbfFLmo3fxZtTvVZsxrEI+epfKh9Xbq1fkOprVXy6X5ejs4+TjUDQprEtzSI1K80pqj5Sj/N14HI5G0Wx7qJAPgT7iDz4AAPCMRKW29uF587zutQey2FXPzbnrLK741WmhSXrzSRkCQJUw5TSp5dbBI9Qnmxm6S5mOCxGi3JGoVftn8p/KUV5OZvVM5uafivF049jRkIJ0UnLeJRO7yE5qSrFqaqfoVW5fC1UQDmnNrF0VukQUH8TvXdxMh/VbpuMiHFFyh8b5MBwSiS3TbA09w7DQGxmbQ6vE8exv2zAHObf4UCEfAn0sAQDAM7aOFubeMLcoFNQVHpkNmk52XfPJU2GgXu4wHsGoO/dqmnjIZZg4VMOq/xEL8pcigpBqs2xslW/DQusAo0Jm/a51Lt04TFdXNTMRg+273HwYTRnysF3NYZMnN6yFKR1vmqFqm9lu9VJkXVfNqks+lDlTbg1T5YsPyzCNbO3GbSua5xwq5EOgjyUAAHiu1gPqdDra8HiPZjpRGqp75+oOwzpzOjEyfjTO0CkfbciH9QRNfawKfmEmqaWYWZm4WG+ZrB4lm8+98BOXvDY9A7YZvigHT7rvcvNhXOkV2UZtdpMP02thmzRIh6WobTan1ZvR1GOT9x8uvXwoN5SsiJrBqyHuytbH+TC1beP46h4q5EOgj8QnIAAAOHRVfz3KXV3zoRkXKoOZmkhkAF0/dEptW+bD9b1kmagXZVnxrglX/lK61w/rdZzpP+dympA32uuHZuOkq4K2Sd3qh235sGUtEg9r6ZIPO9YP2/JhKDK7D5VJLGg9f1Np3Kp+6JU3nUOFfAj0EX2gAACA56R3PtQddPdRmesZiuGXqkMfh8ku+dDcMpdlmQkPg01LkfcfylZFd+41v8oQ38S4bJ5zI58H49ztFh6LEj1HtCnipd617Hr/YXs+TK5F4oG0ze18y3Q+fOD9h/I+QDcfhj3u3n8Yl6O9NfK3rTv8NT5UyIdAH/bzBAAAPCtb5UP944fqPjGZCszAxdAdNzcuxk+q3DYfxrer6Wb4S5mOi3IyiZ9f6uZDHZbim+vs6Nz4aZn5qHQLWS1PPQ3DHaPnlzYbVt+ouSEftqyF98zPsKPD80v9cqt8b+L5pWX4KcWW3z+UY2jjCfQTR1X4D1N+HBdy7Qatzy9182F8qJAPgT6WAADgOTM/9hDp+gt13ihNYAe6/2LhbpEPgT6e/lwFAACHxn3sJLAT5EPgOXn6cxUAAByS9fi9vfTg8TMgHwLPydOfqwAAAMBjIx8Cfez7zAUAAAB2j3wI9LHvMxcAAADYPfIh0Me+z1wAAABg98iHQB/7PnMBAMBOqB+CA0A+BPrY95kLAAB2QPyo+ss3HRf8VGN380lZ/bJ8L4siyw7qukP3p6GSD4E+HvscBgAAj2RxMx0ONrJFxem4EP+ab/OzA4siO9vVzxSYQDuflLoxbeXQDvlwUWTDeO2qdX/Yby0simy4MZ3OJ2WYJlq17ZbVby3K0VnYervKh/NJqQ6stt33EPOz1isd5EPgce3mRAYAAPuzuJkOu/XOH9aPn+c7ywC2zeUol5mnvRzaLR+ejWyQWBRZlmXDh+TD+aQcZlm2qVS7owpn77VQRb8d5kM5n+m4iK8+PNziZtq+ecmHwOPa1ckMAAD2pRzlIo20lV+8qGAqdes/dXEyn+k/58tlXd0aDAaDMM/5pCzGH8PrxXgaypVR3lsUTciZ54N8Itom8pWzlOm4KMbjvG6NlxYWRZaNx+/kylbrXqWLuHpZ/zkPs3UzVfX2KKKod1VZN2wBHXiaKUUD5mdZ8bGp64bYvGEtwtbQb2wWUeW3+aTMR+/izajfqzZjWIV89C6VD6u3V6/IdTSrv1wuy9HZx8nHoWhSWJfmkBqV5pXUHilH+bvxOByNotn2UCEfAn3EH3wAAOAZiUpt7cPz5nndaw9ksauem3PXWVzxq9NCk/TmkzIEgCphymlSy62DR6hPNjN0lzIdFyJEuSNRq/bP5D+Vo7yczOqZzM0/FePpxrGjIQXppOS8SyZ2kZ3UlGLV1E7Rq9y+FqogHNKaWbsqdIkoPojfu7iZDuu3TMdFOKLkDo3zYTgkElum2RrBf5rGAAAgAElEQVR6hmGhNzI2h1aJ49nftmEOcm7xoUI+BPpYAgCAZ2wdLcy9YW5RKKgrPDIbNJ3suuaTp8JAvdxhPIJRd+7VNPGQyzBxqIZV/yMW5C9FBCHVZtnYKt+GhdYBRoXM+l3rXLpxmK6uamYiBtt3ufkwmjLkYbuawyZPblgLUzreNEPVNrPd6qXIuq6aVZd8KHOm3BqmyhcflmEa2dqN21Y0zzlUyIdAH0sAAPBcrQfU6XS04fEezXSiNFT3ztUdhnXmdGJk/GicoVM+2pAP6wma+lgV/MJMUksxszJxsd4yWT1KNp974ScueW16BmwzfFEOnnTf5ebDuNIrso3a7CYfptfCNmmQDktR22xOqzejqccm7z9cevlQbihZETWDV0Pcla2P82Fq28bx1T1UyIdAH4lPQAAAcOiq/nqUu7rmQzMuVAYzNZHIALp+6JTatsyH63vJMlEvyrLiXROu/KV0rx/W6zjTf87lNCFvtNcPzcZJVwVtk7rVD9vyYctaJB7W0iUfdqwftuXDUGR2HyqTWNB6/qbSuFX90CtvOocK+RDoI/pAAQAAz0nvfKg76O6jMtczFMMvVYc+DpNd8qG5ZS7LMhMeBpuWIu8/lK2K7txrfpUhvolx2TznRj4PxrnbLTwWJXqOaFPES71r2fX+w/Z8mFyLxANpm9v5lul8+MD7D+V9gG4+DHvcvf8wLkd7a+RvW3f4a3yokA+BPuznCQAAeFa2yof6xw/VfWIyFZiBi6E7bm5cjJ9UuW0+jG9X083wlzIdF+VkEj+/1M2HOizFN9fZ0bnx0zLzUekWslqeehqGO0bPL202rL5Rc0M+bFkL75mfYUeH55f65Vb53sTzS8vwU4otv38ox9DGE+gnjqrwH6b8OC7k2g1an1/q5sP4UCEfAn0sAQDAc2Z+7CHS9RfqvFGawA50/8XC3SIfAn08/bkKAAAOjfvYSWAnyIfAc/L05yoAADgk6/F7e+nB42dAPgSek6c/VwEAAIDHRj4E+tj3mQsAAADsHvkQ6GPfZy4AAACwe+RDoI99n7kAAADA7pEPgT72feYCAICdUD8EB4B8CPSx7zMXAADsgPhR9ZdvOi6ew081Nr/zPtO/UP845vkg5xG0EvkQ6GPfZy4AAOhpcTMdDjayRcXpuBD/ulWiWBTZ2a4SiAm080mpG9NWDu2QD6tsZteuWve+v7Ww/iGQ9WbdlMan4yJkwvn2+XA+KbfMwDYfTsdFh0sG87Nmmnned+Pog2rwSGE4Okgc5egsHDbkQ6CPxzh7AQDAU1rcTIfdkl6XHnbLu3dYoTJtLke5TG7t5dBu+fBsZH92b1FkWZYNH5APVYPbU5BsZI98uH2N1OydeT4YZlnWPuR4cTPNdlF2Nq0tR/kDDrOHWBRilcmHQB97OHMBAMBOlaNc9M5lRcjygoqp1K3/1MXJfKb/nC+XYfykrBfNJ2Ux/hheL8bTUFmK8t6iaKLaPB/kE9E2kTecpUzHRTEeh2qel/cWRZaNx+/kylbrXv1We1y9rP9sioTehmoyj5yD3FblZC7bXL0iN/t8UnqlXbXcKi2HbegtotmG9WRj07x8VMa7W8w5nzQtqfaOCldiyqF48ezj5GPckjjNymPSXeV4HeXqVNt2Oi7Kyax6sZzMRZpdFNmZaH+14rLAO5zeLMiHQB/R5ykAAHhOolJbWz6s+tCmK28qXXFUqMQVvzp7NElvPilDBqgijZwmtdw6xoQA1szQXcp0XIjylDsStWr/LNeBpAob5WRu3lWHGaeRetO5q98My5SbyK0fLm6mw3q5Ysc5yzWZ312ErGHqbRJ2n2pzPOJUHzzNTpdTyppzOcrd1+N8GObsrrJbUI1LsmY8sM6HQ7nuIt4PqR/i/7f3/rqNK9ni9XmL+xgnmEhPIPgBCBAGJhk46FQAYcCZs4MJeMHEgNHpAZQomQ70AD84YdjBGMI8gIGJdOYbTHCBCfQFRRb33rWLlGh1y+peK7Iksv6Kci3uqiK8iz0AAABcMZ3viRCNwp1L2YduusG9UY4w0E8H69oP1UA8Dve1b6hjRhSi6SeChj9ERn4ucmnf3qpUV9igOjHTXi2UZPZndRI1NU1XrT9MjHooTJJ+ruRdId18TfzNy0I1jkxEzho1kVjzfcj4oT1SdpC21mX0yVzn5qtsrN7xfNPR2g+LNOiNHwKcgT0AAABcK918PD00H48fiuNErE8oh5qjmNPIdGscLy404Yf9AVupGXJWZC4Xk5SxiL5llHr1pwzmE2UjI7dOg5WJRe+TrVlid7h+KCdVRoF3853MIrHKoXjmeDe2Fgvm+aE9Ut41EN54lB+6Ve6zG769riSbZPN+uPPCwswvBZjFHgAAAK6TYB3J0PxYPzTzQt3lansxcE/ih06o7UQ/3Der8rGuY7ArCMDjoEZ+LsfHD/s6br3IWHdMdJ4j4oeOKuf2nsnFD9NGOCZ+6GWRLhyNQVeZWjYquJ8VPzzOD4cZs5Mb7fQ19eOHeT9ceiUhfgjwbkYuVwAAAPj4zPZDPcfP3fCzS1BMv1Rr9lJpOcYPzbq1oihE+UNMaSIXudZOlkovVizimreFXgapd1WR27r46wDFOsOJ9YemkOPrDwXj+WazcNcfpjIZddpdf+itWhxbf3iEH+6qYqk378k+qkSe664/HPHDzPrDoaHwQ4A55K5VAAAAuApO8kM981CN2rU82B04w7tm4WK6BeWpfpjKQ+owaS6bumrW63T/UtcPtTOkcSc7O9fsX5rzQ52s3Tlzn/HDvsoRGY9V+cbDRCg17Ti5f+nnqrhrvSCh7Ai5f6nchDbdlEh8VcweP74fyhmk3spVVeXWbp26N9VxJxKb+aV1/Zg0YywJ+5cCzGUPAAAA14x52EPCWOhG4s3SBPiYOPvrpuCHAHP4PhcxAAAAfGQmJwECfCTwQ4Bvxve5iAEAAOCj0k1cdJ+EAfAhwQ8Bvhnf5yIGAAAAAPie4IcAc7j0lQsAAAAAcH7wQ4A5XPrKBQAAAAA4P/ghwBwufeUCAAAAAJwf/BBgDpe+cgEAAOAsqIcNAgB+CDCHS1+5AAAAcAbadWMeK/8DYx6b/sMjngvfluJZ8D8B76ovfggwh3NewgAAAPAd2b1slotJbFBxU1fi05MG37uquDuXnBihbdeNLsxYOPQIP9xVxTKtXaj7O57k0T0LpGu7VTMniXVzqty+3w+bVTlZWlmwdzwP86gnTxwNfgjw3TnT1QsAAAAXY/eyWR43jE407CTOGbwyZW5WpTS38XDocX54t1qVWgV3VVEUxXKeH7br5ixPiZwR/HynH+5eNkVRTH5DzhSVxQ8BrpwzXb0AAABwMZpVKUb27V3erNp1k8SRTKSue6mDk+VWv2z3+z5GpyJp7bqp6s/x/arexHBl4nu7alC1tlyUa1E24SpOLpu6quo6hvI8Z9tVRVHXj7Kyoe7NqmzWbRq9XA4C5oYHd1WxzOlTkFsTrW1Wd5/Xn5e6kOLIRVVvdi+bu1UTmihkFyw0HtDl7fthrv03IZd4emjMRP9UTU3BdEbDkaLR2rui+jzEomWpOj80X4ZYwcmWl7nEYrTrJjZvLG08Mm3JPX4IMA/3Zw4AAACuhSTUNuaHYRRuPEeaQ5+aEwVKI379QHwwPTmID4Ypj8nl21trlIEhQTeXTV0tlL2kMyFD+belErayWW/7RFrzUVVvRiRwJEK7qavY/jI826zK3Pt6GufgM3pWZ1v2Vun6Yb79F4kHlq1KxO8Oc5dB9kV8X2Sqvki6MIMfLpzqTLe8zsUWXjZ4LLNpyQB+CDAH53cOAAAAroZumC7jThJ3PmQffulMQ8pPHHCnK9a0I6lRfgxLallVx6TTF+PBTT8RNPwhMvJz2dSVLJsWm66wwVJipr1gKMnszxokJCeB+Y9kFHS/13XRujXEvrQfDsmaesX6en54TPurj2TZ3Oq4fpgcmS1An6/yQ1mYmP4RLS9zCbFrFTWNDR5bxq0Rfggwhz0AAABcK90MQxMvGo0fiuP0hL0+tjMMsnvndDQy3RonmICevzrhh/0BQ5QvCJL0IjcXk5TRqr5lin6WbNkOpwx2EdViRK6G5LJ+aKOXUrCFN2b9sPAMKrb/spcf44fHtX+XpjxspKauH6bR6b4i9qvi+qGr8Ue0vMxlWRRLfdPBkEZHO/BDgDnYXzkAAAC4EsLwOl1XdqQfmnmJUszUQb0aJfFDx5dO9MN9syof6zqO7MMo/3EQFT+X4+OHfR23+mUrjxmPqqVtNf6+iYWmTTHihyfGDyfbP7WmsUjp6fHDmX54RMubKOVLVSzT+asS/BDgbCQ/LAAAAHBNzPZDvdrN3fCzS1Coglo5lsrkMX4oF+Nt6qooClH+EBGdyEWuP5Slyq+CU8sgYx37fW7U3MV0VZ7cOSZtn5H1hzk/lAsOpdXMXX+Ya3/HyUdWWuoEj1l/ONsPJ1rey2VoDdngEc+EF/ghwBz2AAAAcM2c5If64YdqYqQedg97Y0opMgsXk00vT/bD9Dl76eg/zWVTV816ne5f6vqhVIsk3Jfu1mP3LzU6J2d1SttJmzTnhzGRsH+piXrJLKb2Lz2t/UX6g3HJmsqC6YyGL4O7s+j+dD/0Wn4il1A8sUGRLTx+CHAe9gAAAHDNmIc9JBz7lHNvlibAFYMfAszh0lcuAAAAXJ40jgdw7eCHAHO49JULAAAAl6WbZ+g+CQPgesEPAeZw6SsXAAAAAOD84IcAc7j0lQsAAAAAcH7wQ4A5XPrKBQAAAAA4P/ghwBwufeUCAAAAAJwf/BBgDpe+cgEAAOAsOA+7A/iZwQ8B5nDpKxcAAADOgHhA+Y/Ppq54VOMPxK4qinBr47w9ix8CzOFcVyAAAAB8Z3Yvm+ViEhtU3NSV+LQ85aEWu6q4O9dDMIzQtutGF2YsHHqEReyqYpnWLtT9fU/y2FXF8jvb6Xd7OqX+bszLsb07+T7Fe/0w+fJ04IcAczj1CgQAAICPxu5lszzO9HIj6eNoy/nnWkyZm1UpzW08HHqcH96tVqVWwV1VFEWxfI8ftutmWRTF9w3VNquyKIpvLKW7qli+PwS9e9mc3jjv9MNst+KHAHM48QoEAACAD0ezKsWoeiyA066bctWY93Skrnupg5PlVr9s9/s+RrdYLBYxzXbdVPXn+H5Vb2JIKnGPXTWM6dtyUa5F2YQnOLls6qqq67Ivjed7u6oo6vpRVjbUvVmVzbpNo5f9yzYmmzRU19TNum20eQa5jVXW3dH1zu5lc7dq4pFJ7HSkLkHLlZzvbHf4nbipq2a9LkXZvDKX7eiNA1m8mILp6NBW8shQwWZ1t3nZlkM0cuhNkZ3vhyKYGY9s74pqu25kAwYjfUm8tFmV+CHAHLzfAQAAALgaklDb+AS/ttSesNeD8j61YcgeSSN+vUENpteumzgvMTiMPCaXb2+tUYGGBN1cNnUlncGbiRrKv5UfNauyWW/7RFrzUVVvJueOxuCY1OxUuXUMTfl2r39DRpNzR2MrCSl1esfrRNVQMqNNXS0Tm3IrrovXln0VZEeb92XKzapc6HaWkt8f6fih9NVNXfVntWVyo6FvFtUmIXH8EGAOuR8jAAAAuAY635OhG4k7l7KPHUlz6P6OniCH8vvkMONX0ZG0Hqhj0qmD8eBoPuEPkZGfixAGVWZZ2GALMdPe2ZRk9md1Xjo5TVdHNQuhwUbwlDCHOprEYxVMXRJURlE7x3snNohOPJZKRm5H2nCfpJDr6OH03PvhbG3ysWqOHyYnOt8H/ZEU9a6C+CHAHPzfIgAAALgCutl6emR/7AYhMgTUG5qaxNg7p6OR6dY4yySwNumH/QFDlC/YSEwkl4tJylOsTjlimftTBjVKg4FTe8DKuZFmuqbtiJhmVF+zMC+WOSdme7+dlS3ruZdOJ+qG2rmx03iuWwzzfmwiEzUd8cMoool+S181fmibuq+4XQGb3BZRGokfAswh93sEAAAAH5wwRk+86/gNJFWYS4qZOqgf1ifxQyfUdqIf7ptV+VjXhV5L9jg4iZ/L8fHDvo5b/VLN0pQKNxI/NI3jbsTS2JIP5c/54Xj80Cx0TNtQljntxIwfOvHDnBuPxA9P9cNT44f5pZj7JAWTHfFDgHeQXHgAAABwTcz2Qz0x0t3ws0tQTL/015INhx7hh2Zpmd6ZMwSOJnLJLavTixU7cwghpnQRY1+kWiiHs/4wppkYi2NZZnuV1WoVC5/zw3R6qnjH6rFnsK0uv+rEjB866w9z+5eOrD/M+aEX0rSNqcswsf4wU1lH0eXCS9YfAszEXncAAABwVZzkhyMPuNPOoCb4xSG+Wbho9u3cn+6HqR25W6eYXMy2nLJ4qR9Kq0mkLt2tx+5fGtJ0Q4vBRrbJpp17r2o5P+wbZKhLPNENLTarUm4cutBLTE3r5fxQt6p9yoh5X85xTSfQilKp/WbNytK9k8XE/qXpbqjGDzNx42FnI/wQYA57AAAAuGbMwx4Sjn3K+fhCODiVqdWM3wQ6UYIfAszh0lcuAAAAXJ7JpyzAiUw8KuObZEknavBDgDlc+soFAACAy9LNqHSfhAEzCFMoR59acXboRAf8EGAOl75yAQAAAADOD34IMIdLX7kAAAAAAOcHPwSYw6WvXAAAAACA84MfAszh0lcuAAAAAMD5wQ8B5nDpKxcAAADOgnrYIADghwBzuPSVCwAAAGfgIk/buxT6se9w7eyqogi3Ns7bs/ghwBzOdQUCAADAd2b3slkuJrFBxU1diU/LU56HsKuKu3M9P8EIbbtudGHGwqFHWMSuKpZp7ULd3/cQiB/5wYb6uzEvx/bu5PsU7/XD5MvTgR8CzOHUKxAAAAA+GruXzfI408uNpI+jLeefazFlDs8MjOY2Hg49zg/vVqtSq+CuKoqiWL7HD9t1syyK4vuGaptVWRTFN5bSXVUs3x+C3r1sTm+cd/phtlvxQ4A5nHgFAgAAwIejWZViVD0WwGnXTfLcdhOp617q4GS51S/b/b6P0S3ks+DbdVPVn+P7Vb2JIanEPXbVMKZvy0W5FmUTnuDksqmrqq7LvjSe7+2qoqjrR1nZUPdmVTbrNo1e9i/bmKz7gPtweqPNM8htrLLujq53di+bu1UTj0xipyN1CVqu5Hxnu8PvxE1dNet1KcrmlblsR28cyOLFFExHh7aSR4YKNqu7zcu2HKKRQ2+K7Hw/FMHMeGR7V1TbdSMbMBjpS+KlzarEDwHm4P0OAAAAwNWQhNrGJ/i1pfaEvR6U96kNQ/ZIGvHrDWowvXbdxHmJwWHkMbl8e2uNCjQk6OayqSvpDN5M1FD+rfyoWZXNetsn0pqPqnozOXc0BsekZqfKrWNoyrd7/Rsympw7GltJSKnTO14nqoaSGW3qapnYlFtxXby27KsgO9q8L1NuVuVCt7OU/P5Ixw+lr27qqj+rLZMbDX2zqDYJieOHAHPI/RgBAADANdD5ngzdSNy5lH3sSJpD93f0BDmU3yeHGb+KjqT1QB2TTh2MB0fzCX+IjPxchDCoMsvCBluImfbOpiSzP6vz0slpujqqWQgNNoKnhDnU0SQeq2DqkqAyito53juxQXTisVQycjvShvskhVxHD6fn3g9na5OPVXP8MDnR+T7oj6SodxXEDwHm4P8WAQAAwBXQzdbTI/tjNwiRIaDe0NQkxt45HY1Mt8ZZJoG1ST/sDxiifMFGYiK5XExSnmJ1yhHL3J8yqFEaDJzaA1bOjTTTNW1HxDSj+pqFebHMOTHb++2sbFnPvXQ6UTfUzo2dxnPdYpj3YxOZqOmIH0YRTfRb+qrxQ9vUfcXtCtjktojSSPwQYA653yMAAAD44IQxeuJdx28gqcJcUszUQf2wPokfOqG2E/1w36zKx7ou9Fqyx8FJ/FyOjx/2ddzql2qWplS4kfihaRx3I5bGlnwof84Px+OHZqFj2oayzGknZvzQiR/m3HgkfniqH54aP8wvxdwnKZjsiB8CvIPkwgMAAIBrYrYf6omR7oafXYJi+qW/lmw49Ag/NEvL9M6cIXA0kUtuWZ1erNiZQwgxpYsY+yLVQjmc9YcxzcRYHMsy26usVqtY+JwfptNTxTtWjz2DbXX5VSdm/NBZf5jbv3Rk/WHOD72Qpm1MXYaJ9YeZyjqKLhdesv4QYCb2ugMAAICr4iQ/HHnAnXYGNcEvDvHNwkWzb+f+dD9M7cjdOsXkYrbllMVL/VBaTSJ16W49dv/SkKYbWgw2sk027dx7Vcv5Yd8gQ13iiW5osVmVcuPQhV5ialov54e6Ve1TRsz7co5rOoFWlErtN2tWlu6dLCb2L013QzV+mIkbDzsb4YcAc9gDAADANWMe9pBw7FPOxxfCwalMrWb8JtCJEvwQYA6XvnIBAADg8kw+ZQFOZOJRGd8kSzpRgx8CzOHSVy4AAABclm5GpfskDJhBmEI5+tSKs0MnOuCHAHO49JULAAAAAHB+8EOAOVz6ygUAAAAAOD/4IcAcLn3lAgAAAACcH/wQYA6XvnIBAAAAAM4Pfggwh0tfuQAAAHAW1MMGAQA/BJjDpa9cAAAAOAMXedrepdCPfYePzK4qikvdtsAPAeZwkcsVAAAA3s/uZbNcTGKDipu6Ep+WpzwPYVcVd+d6foIR2nbd6MKMhUOP8MNdVSzT2oW6v+8hED/mgw3Nd+l8D+cY/HD3srnrkt1VxVL0gm3STV2dpQD4IcAc3n/tAQAAwGXZvWyWx5leomEn0Zbzz7WYModnBkZnGA+HHueHd6tVqVVwVxVFoczkZNp1syyK4vuGaptVWRTFN5XS3ctGVOqMDjz4YbtuovU1qzKmH9R0qXM/y4Mc8UOAObz/2gMAAIDLIkfb+317l7cXOUaP7+lIXfdSB5TKrX7Z7vd9jE6Fm9p1U9Wf4/tVvYnhysT3pAa05aJci7IJA3Ry2dRVVddlXxrPJXZVUdT1o6xsqHuzKpt1m0Yv+5dtTNYNYYXTG22eQW5jlXV3dL0TomfxyCR2OlKXoOVKzne2O/xO3NRVs16XomxemcvW+qGK4ImAcyzA0Cl9mVUBRGqdH8qodblqZPtv6qqqP4tpqLGm7V1RbddNbC7Zzn1D7aribj00oCzhHX4IMIf0hw8AAACuiCTUNuaHwX9MaEiG4/rUnGVjacSvTKYLtusmzmgNDiOPyeXbW2sUgyFBN5dNXQkTcGeihvJv5UfNqmzW2z6R1nxU1ZvJuFnUHqnZqXJr11K+Laymy2hy7mhsJSGlTu94nagaSma0qSuj67n4oQw4R2n04rcTfri3s0ZlX3cCGXOUri7L+fLyEisob1JIlV0O+S7xQ4A55H6MAAAA4BrofE/GoCTuPL0+DiPNofs7xr6EmHVoP1Q+EB1Jy6o6JpWKeHA0n/CHyMjPxaxPM/G6UFhjHb2xKMnsz+pcZXKaro5qFkKDjeApYQ51NIlL1xpda6cyigo33juxQXTisVTOBE6z/jB+akLToaG8Wcqn+mFXhnhk/EPkOLIG1eplUoxdVRT4IcAc8r9HAAAA8MHppvlpOxqPH4rjRKyvNzQ1ibF3Tkcj061xlklgbdIP+wOGKF9QiJhILheTlKdYnTbEMvenDGqUBgOn9oBVkyp1s9uOiGlG9c1N4PTkVmRpW0DZsp5R6XSibqidGzuNGQmjW8o458IvQDcRV8wQPskPu5fizZDCizfRdDhFlMT1Q+nA+CHALHK/RwAAAPDBCRKSeNexfmjCXFLM1EG9YiXxQyfUdqIf7ptV+VjXUZyCVzyqCJKTy/Hxw76OW/1SzdKUCjcSPzSNY3wvKYldNJjzw/H4oVnomLahLHPaiRk/9OOHsXjSkxu7x4/Bd06RQtYPY1/LWOVjXee+Y3pOrDMVuX8/xg+ZXwowi/wFDwAAAFfAbD/UEyPdDT+7BMX0S7VmLxWbY/zQLGnTO3OGgNVELrlldXqx4rBt5kIvg4x17Pe5UduuGAGLaSam5FiW7ItNXa1Wq1j4nB+m01PFO1aPPYNtdflVJ2b8cOb6Q5e+WWTT7api6fqhWShbLpaFeGKK7ql96od6yxzWHwJ8G/LXOwAAAFwBJ/mhnqGntEQP39MNKvf7ZOGi2bdzf7ofpnaUqkuai9mWUxYv9cMwE1JOmNThJjs71+xfGtJ0Q4shSrYVKz9lyU3VRjYINfuXxhPd0GKzKuUOsQu9xNS0Xs4Pdas6+5fKwrdJBc1mpOKUWKT1XeKHsW3lUy50BWVP7RM9bsVGrJ/7R3F2G9XqSad75pcCzGcPAAAA14x52EPCsc9VH18IB6cytZrxm/DzdaKzlWt8Hz8EmMMFLmQAAAD4YEw+ZQFO5IyPmD86y5+xE/FDgHNzgQsZAAAAPhBmI0p4L2Hq5uhTK87OT9uJ+CHAubnAhQwAAAAA8I3BDwHmcOkrFwAAAADg/OCHAHO49JULAAAAAHB+8EOAOVz6ygUAAAAAOD/4IcAcLn3lAgAAwFlQDxsEAPwQYA6XvnIBAADgDFzkaXuXQj/2HT4yuf1Fvwf4IcAcLnK5AgAAwPvZvWyWi0lsUHFTV+LT8pTnIeyq4u5cz08wQtuuG12YsXDoEX64q4plWrtQ9/c9BOLHfLCh+S6d7+Ecgx/uXjZ3XbK7qliKXrBNuqmrsxQAPwSYw/uvPQAAALgsu5fN8jjTSzTsJNpy/rkWU+bwzMDoDOPh0OP88G61KrUK7qqiKJSZnEy7bpZFUXzfUG2zKoui+KZSunvZiEqd0YEHP2zXTbS+ZlXG9IOaLnXuZ3mQI34IMIf3X3sAAABwWeRoe79v7/L2Isfo8T0dqete6oBSudUv2/2+j9GpcFO7bqr6c3y/qjcxXJn4ntSAtlyUa1E2YYBOLpu6quq67EvjucSuKoq6fpSVDXVvVmWzbtPoZf+yjcm6IaxweqPNM8htrLLujq53QvQsHpnETkfqErRcyfnOdoffiZu6akatSEYAACAASURBVNbrUpTNK3PZWj9UETwRcI4FGDqlL7MqgEit80MZtS5XjWz/TV1V9WcxDTXWtL0rqu26ic0l27lvqF1V3K2HBpQlvMMPAeaQ/vABAADAFZGE2sb8MPiPCQ3JcFyfmrNsLI34lcl0wXbdxBmtwWHkMbl8e2uNYjAk6OayqSthAu5M1FD+rfyoWZXNetsn0pqPqnozGTeL2iM1O1Vu7VrKt4XVdBlNzh2NrSSk1OkdrxNVQ8mMNnVldD0XP5QB5yiNXvx2wg/3dtao7OtOIGOO0tVlOV9eXmIF5U0KqbLLId8lfggwh9yPEQAAAFwDne/JGJTEnafXx2GkOXR/x9iXELMO7YfKB6IjaVlVx6RSEQ+O5hP+EBn5uZj1aSZeFwprrKM3FiWZ/Vmdq0xO09VRzUJosBE8JcyhjiZx6Vqja+1URlHhxnsnNohOPJbKmcBp1h/GT01oOjSUN0v5VD/syhCPjH+IHEfWoFq9TIqxq4oCPwSYQ/73CAAAAD443TQ/bUfj8UNxnIj19YamJjH2zuloZLo1zjIJrE36YX/AEOULChETyeVikvIUq9OGWOb+lEGN0mDg1B6walKlbnbbETHNqL65CZye3IosbQsoW9YzKp1O1A21c2OnMSNhdEsZ51z4Begm4ooZwif5YfdSvBlSePEmmg6niJK4figdGD8EmEXu9wgAAAA+OEFCEu861g9NmEuKmTqoV6wkfuiE2k70w32zKh/rOopT8IpHFUFycjk+ftjXcatfqlmaUuFG4oemcYzvJSWxiwZzfjgePzQLHdM2lGVOOzHjh378MBZPenJj9/gx+M4pUsj6YexrGat8rOvcd0zPiXWmIvfvx/gh80sBZpG/4AEAAOAKmO2HemKku+Fnl6CYfqnW7KVic4wfmiVtemfOELCayCW3rE4vVhy2zVzoZZCxjv0+N2rbFSNgMc3ElBzLkn2xqavVahULn/PDdHqqeMfqsWewrS6/6sSMH85cf+jSN4tsul1VLF0/NAtly8WyEE9M0T21T/1Qb5nD+kOAb0P+egcAAIAr4CQ/1DP0lJbo4Xu6QeV+nyxcNPt27k/3w9SOUnVJczHbcsripX4YZkLKCZM63GRn55r9S0OabmgxRMm2YuWnLLmp2sgGoWb/0niiG1psVqXcIXahl5ia1sv5oW5VZ/9SWfg2qaDZjFScEou0vkv8MLatfMqFrqDsqX2ix63YiPVz/yjObqNaPel0z/xSgPnsAQAA4JoxD3tIOPa56uML4eBUplYzfhN+vk50tnKN7+OHAHO4wIUMAAAAH4zJpyzAiZzxEfNHZ/kzdiJ+CHBuLnAhAwAAwAfCbEQJ7yVM3Rx9asXZ+Wk7ET8EODcXuJABAAAAAL4x+CHAHC595QIAAAAAnB/8EGAOl75yAQAAAADOD34IMIdLX7kAAAAAAOcHPwSYw6WvXAAAADgL6mGDAIAfAszh0lcuAAAAnIGLPG3vUujHvsNHJre/6PcAPwSYw0UuVwAAAHg/u5fNcjGJDSpu6kp8Wp7yPIRdVdyd6/kJRmjbdaMLMxYOPcIPd1WxTGsX6v6+h0D8mA82NN+l8z2cY/DD3cvmrkt2VxVL0Qu2STd1dZYC4IcAc3j/tQcAAACXZfeyWR5neomGnURbzj/XYsocnhkYnWE8HHqcH96tVqVWwV1VFIUyk5Np182yKIrvG6ptVmVRFN9USncvG1GpMzrw4IftuonW16zKmH5Q06XO/SwPcsQPAebw/msPAAAALoscbe/37V3eXuQYPb6nI3XdSx1QKrf6Zbvf9zE6FW5q101Vf47vV/UmhisT35Ma0JaLci3KJgzQyWVTV1Vdl31pPJfYVUVR14+ysqHuzaps1m0avexftjFZN4QVTm+0eQa5jVXW3dH1ToiexSOT2OlIXYKWKznf2e7wO3FTV816XYqyeWUuW+uHKoInAs6xAEOn9GVWBRCpdX4oo9blqpHtv6mrqv4spqHGmrZ3RbVdN7G5ZDv3DbWrirv10ICyhHf4IcAc0h8+AAAAuCKSUNuYHwb/MaEhGY7rU3OWjaURvzKZLtiumzijNTiMPCaXb2+tUQyGBN1cNnUlTMCdiRrKv5UfNauyWW/7RFrzUVVvJuNmUXukZqfKrV1L+bawmi6jybmjsZWElDq943WiaiiZ0aaujK7n4ocy4Byl0YvfTvjh3s4alX3dCWTMUbq6LOfLy0usoLxJIVV2OeS7xA8B5pD7MQIAAIBroPM9GYOSuPP0+jiMNIfu7xj7EmLWof1Q+UB0JC2r6phUKuLB0XzCHyIjPxezPs3E60JhjXX0xqIksz+rc5XJabo6qlkIDTaCp4Q51NEkLl1rdK2dyigq3HjvxAbRicdSORM4zfrD+KkJTYeG8mYpn+qHXRnikfEPkePIGlSrl0kxdlVR4IcAc8j/HgEAAMAHp5vmp+1oPH4ojhOxvt7Q1CTG3jkdjUy3xlkmgbVJP+wPGKJ8QSFiIrlcTFKeYnXaEMvcnzKoURoMnNoDVk2q1M1uOyKmGdU3N4HTk1uRpW0BZct6RqXTibqhdm7sNGYkjG4p45wLvwDdRFwxQ/gkP+xeijdDCi/eRNPhFFES1w+lA+OHALPI/R4BAADABydISOJdx/qhCXNJMVMH9YqVxA+dUNuJfrhvVuVjXUdxCl7xqCJITi7Hxw/7Om71SzVLUyrcSPzQNI7xvaQkdtFgzg/H44dmoWPahrLMaSdm/NCPH8biSU9u7B4/Bt85RQpZP4x9LWOVj3Wd+47pObHOVOT+/Rg/ZH4pwCzyFzwAAABcAbP9UE+MdDf87BIU0y/Vmr1UbI7xQ7OkTe/MGQJWE7nkltXpxYrDtpkLvQwy1rHf50Ztu2IELKaZmJJjWbIvNnW1Wq1i4XN+mE5PFe9YPfYMttXlV52Y8cOZ6w9d+maRTberiqXrh2ahbLlYFuKJKbqn9qkf6i1zWH8I8G3IX+8AAABwBZzkh3qGntISPXxPN6jc75OFi2bfzv3pfpjaUaouaS5mW05ZvNQPw0xIOWFSh5vs7Fyzf2lI0w0thijZVqz8lCU3VRvZINTsXxpPdEOLzaqUO8Qu9BJT03o5P9St6uxfKgvfJhU0m5GKU2KR1neJH8a2lU+50BWUPbVP9LgVG7F+7h/F2W1Uqyed7plfCjCfPQAAAFwz5mEPCcc+V318IRycytRqxm/Cz9eJzlau8X38EGAOF7iQAQAA4IMx+ZQFOJEzPmL+6Cx/xk7EDwHOzQUuZAAAAPhAmI0o4b2EqZujT604Oz9tJ+KHAOfmAhcyAAAAAMA3Bj8EmMOlr1wAAAAAgPODHwLM4dJXLgAAAADA+cEPAeZw6SsXAAAAAOD84IcAc7j0lQsAAABnQT1sEADwQ4A5XPrKBQAAgDNwkaftXQr92He4doY9SM/bs/ghwBzOdQUCAADAd2b3slkuJrFBxU1diU/LU56HsKuKu3M9P8EIbbtudGHGwqFHWMSuKpZp7ULd3/cQiB/5wYb6uzEvx/bu5PsU7/XD5MvTgR8CzOHUKxAAAAA+GruXzfI408uNpI+jLeefazFlDs8MjOY2Hg49zg/vVqtSq+CuKoqiWL7HD9t1syyK4vuGaptVWRTFN5bSXVUs3x+C3r1sTm+cd/phtlvxQ4A5nHgFAgAAwIejWZViVD0WwGnXTfLcdhOp617q4GS51S/b/b6P0S3ks+DbdVPVn+P7Vb2JIanEPXbVMKZvy0W5FmUTnuDksqmrqq7LvjSe7+2qoqjrR1nZUPdmVTbrNo1e9i/bmKz7gPtweqPNM8htrLLujq53di+bu1UTj0xipyN1CVqu5Hxnu8PvxE1dNet1KcrmlblsR28cyOLFFExHh7aSR4YKNqu7zcu2HKKRQ2+K7Hw/FMHMeGR7V1TbdSMbMBjpS+KlzarEDwHm4P0OAAAAwNWQhNrGJ/i1pfaEvR6U96kNQ/ZIGvHrDWowvXbdxHmJwWHkMbl8e2uNCjQk6OayqSvpDN5M1FD+rfyoWZXNetsn0pqPqnozOXc0BsekZqfKrWNoyrd7/Rsympw7GltJSKnTO14nqoaSGW3qapnYlFtxXby27KsgO9q8L1NuVuVCt7OU/P5Ixw+lr27qqj+rLZMbDX2zqDYJieOHAHPI/RgBAADANdD5ngzdSNy5lH3sSJpD93f0BDmU3yeHGb+KjqT1QB2TTh2MB0fzCX+IjPxchDCoMsvCBluImfbOpiSzP6vz0slpujqqWQgNNoKnhDnU0SQeq2DqkqAyito53juxQXTisVQycjvShvskhVxHD6fn3g9na5OPVXP8MDnR+T7oj6SodxXEDwHm4P8WAQAAwBXQzdbTI/tjNwiRIaDe0NQkxt45HY1Mt8ZZJoG1ST/sDxiifMFGYiK5XExSnmJ1yhHL3J8yqFEaDJzaA1bOjTTTNW1HxDSj+pqFebHMOTHb++2sbFnPvXQ6UTfUzo2dxnPdYpj3YxOZqOmIH0YRTfRb+qrxQ9vUfcXtCtjktojSSPwQYA653yMAAAD44IQxeuJdx28gqcJcUszUQf2wPokfOqG2E/1w36zKx7ou9Fqyx8FJ/FyOjx/2ddzql2qWplS4kfihaRx3I5bGlnwof84Px+OHZqFj2oayzGknZvzQiR/m3HgkfniqH54aP8wvxdwnKZjsiB8CvIPkwgMAAIBrYrYf6omR7oafXYJi+qW/lmw49Ag/NEvL9M6cIXA0kUtuWZ1erNiZQwgxpYsY+yLVQjmc9YcxzcRYHMsy26usVqtY+JwfptNTxTtWjz2DbXX5VSdm/NBZf5jbv3Rk/WHOD72Qpm1MXYaJ9YeZyjqKLhdesv4QYCb2ugMAAICr4iQ/HHnAnXYGNcEvDvHNwkWzb+f+dD9M7cjdOsXkYrbllMVL/VBaTSJ16W49dv/SkKYbWgw2sk027dx7Vcv5Yd8gQ13iiW5osVmVcuPQhV5ialov54e6Ve1TRsz7co5rOoFWlErtN2tWlu6dLCb2L013QzV+mIkbDzsb4YcAc9gDAADANWMe9pBw7FPOxxfCwalMrWb8JtCJEvwQYA6XvnIBAADg8kw+ZQFOZOJRGd8kSzpRgx8CzOHSVy4AAABclm5GpfskDJhBmEI5+tSKs0MnOuCHAHO49JULAAAAAHB+8EOAOVz6ygUAAAAAOD/4IcAcLn3lAgAAAACcH/wQYA6XvnIBAAAAAM4Pfggwh0tfuQAAAHAW1MMGAQA/BJjDpa9cAAAAOAMXedrepdCPfYdrZ1cVRbi1cd6exQ8B5nCuKxAAAAC+M7uXzXIxiQ0qbupKfFqe8jyEXVXcnev5CUZo23WjCzMWDj3CInZVsUxrF+r+vodA/MgPNtTfjXk5tncn36d4rx8mX54O/BBgDqdegQAAAPDR2L1slseZXm4kfRxtOf9ciylzeGZgNLfxcOhxfni3WpVaBXdVURTF8j1+2K6bZVEU3zdU26zKoii+sZTuqmL5/hD07mVzeuO80w+z3YofAszhxCsQAAAAPhzNqhSj6rEATrtukue2m0hd91IHJ8utftnu932MbiGfBd+um6r+HN+v6k0MSSXusauGMX1bLsq1KJvwBCeXTV1VdV32pfF8b1cVRV0/ysqGujerslm3afSyf9nGZN0H3IfTG22eQW5jlXV3dL2ze9ncrZp4ZBI7HalL0HIl5zvbHX4nbuqqWa9LUTavzGU7euNAFi+mYDo6tJU8MlSwWd1tXrblEI0celNk5/uhCGbGI9u7otquG9mAwUhfEi9tViV+CDAH73cAAAAAroYk1DY+wa8ttSfs9aC8T20YskfSiF9vUIPptesmzksMDiOPyeXbW2tUoCFBN5dNXUln8GaihvJv5UfNqmzW2z6R1nxU1ZvJuaMxOCY1O1VuHUNTvt3r35DR5NzR2EpCSp3e8TpRNZTMaFNXy8Sm3Irr4rVlXwXZ0eZ9mXKzKhe6naXk90c6fih9dVNX/Vltmdxo6JtFtUlIHD8EmEPuxwgAAACugc73ZOhG4s6l7GNH0hy6v6MnyKH8PjnM+FV0JK0H6ph06mA8OJpP+ENk5OcihEGVWRY22ELMtHc2JZn9WZ2XTk7T1VHNQmiwETwlzKGOJvFYBVOXBJVR1M7x3okNohOPpZKR25E23Ccp5Dp6OD33fjhbm3ysmuOHyYnO90F/JEW9qyB+CDAH/7cIAAAAroButp4e2R+7QYgMAfWGpiYx9s7paGS6Nc4yCaxN+mF/wBDlCzYSE8nlYpLyFKtTjljm/pRBjdJg4NQesHJupJmuaTsiphnV1yzMi2XOidneb2dly3rupdOJuqF2buw0nusWw7wfm8hETUf8MIpoot/SV40f2qbuK25XwCa3RZRG4ocAc8j9HgEAAMAHJ4zRE+86fgNJFeaSYqYO6of1SfzQCbWd6If7ZlU+1nWh15I9Dk7i53J8/LCv41a/VLM0pcKNxA9N47gbsTS25EP5c344Hj80Cx3TNpRlTjsx44dO/DDnxiPxw1P98NT4YX4p5j5JwWRH/BDgHSQXHgAAAFwTs/1QT4x0N/zsEhTTL/21ZMOhR/ihWVqmd+YMgaOJXHLL6vRixc4cQogpXcTYF6kWyuGsP4xpJsbiWJbZXmW1WsXC5/wwnZ4q3rF67Blsq8uvOjHjh876w9z+pSPrD3N+6IU0bWPqMkysP8xU1lF0ufCS9YcAM7HXHQAAAFwVJ/nhyAPutDOoCX5xiG8WLpp9O/en+2FqR+7WKSYXsy2nLF7qh9JqEqlLd+ux+5eGNN3QYrCRbbJp596rWs4P+wYZ6hJPdEOLzaqUG4cu9BJT03o5P9Stap8yYt6Xc1zTCbSiVGq/WbOydO9kMbF/abobqvHDTNx42NkIPwSYwx4AAACuGfOwh4Rjn3I+vhAOTmVqNeM3gU6U4IcAc7j0lQsAAACXZ/IpC3AiE4/K+CZZ0oka/BBgDpe+cgEAAOCydDMq3SdhwAzCFMrRp1acHTrRAT8EmMOlr1wAAAAAgPODHwLM4dJXLgAAAADA+cEPAeZw6SsXAAAAAOD84IcAc7j0lQsAAAAAcH7wQ4A5XPrKBQAAgLOgHjYIAPghwBwufeUCAADAGbjI0/YuhX7sO1w7u6oowq2N8/Ysfggwh3NdgQAAAPCd2b1slotJbFBxU1fi0/KU5yHsquLuXM9PMELbrhtdmLFw6BEWsauKZVq7UPf3PQTiR36wof5uzMuxvTv5PsV7/TD58nTghwBzOPUKBAAAgI/G7mWzPM70ciPp42jL+edaTJnDMwOjuY2HQ4/zw7vVqtQquKuKoiiW7/HDdt0si6L4vqHaZlUWRfGNpXRXFcv3h6B3L5vTG+edfpjtVvwQYA4nXoEAAADw4WhWpRhVjwVw2nWTPLfdROq6lzo4WW71y3a/72N0C/ks+HbdVPXn+H5Vb2JIKnGPXTWM6dtyUa5F2YQnOLls6qqq67Ivjed7u6oo6vpRVjbUvVmVzbpNo5f9yzYm6z7gPpzeaPMMchurrLuj653dy+Zu1cQjk9jpSF2Clis539nu8DtxU1fNel2KsnllLtvRGweyeDEF09GhreSRoYLN6m7zsi2HaOTQmyI73w9FMDMe2d4V1XbdyAYMRvqSeGmzKvFDgDl4vwMAAABwNSShtvEJfm2pPWGvB+V9asOQPZJG/HqDGkyvXTdxXmJwGHlMLt/eWqMCDQm6uWzqSjqDNxM1lH8rP2pWZbPe9om05qOq3kzOHY3BManZqXLrGJry7V7/howm547GVhJS6vSO14mqoWRGm7paJjblVlwXry37KsiONu/LlJtVudDtLCW/P9LxQ+mrm7rqz2rL5EZD3yyqTULi+CHAHHI/RgAAAHANdL4nQzcSdy5lHzuS5tD9HT1BDuX3yWHGr6IjaT1Qx6RTB+PB0XzCHyIjPxchDKrMsrDBFmKmvbMpyezP6rx0cpqujmoWQoON4ClhDnU0iccqmLokqIyido73TmwQnXgslYzcjrThPkkh19HD6bn3w9na5GPVHD9MTnS+D/ojKepdBfFDgDn4v0UAAABwBXSz9fTI/tgNQmQIqDc0NYmxd05HI9OtcZZJYG3SD/sDhihfsJGYSC4Xk5SnWJ1yxDL3pwxqlAYDp/aAlXMjzXRN2xExzai+ZmFeLHNOzPZ+Oytb1nMvnU7UDbVzY6fxXLcY5v3YRCZqOuKHUUQT/Za+avzQNnVfcbsCNrktojQSPwSYQ+73CAAAAD44YYyeeNfxG0iqMJcUM3VQP6xP4odOqO1EP9w3q/Kxrgu9luxxcBI/l+Pjh30dt/qlmqUpFW4kfmgax92IpbElH8qf88Px+KFZ6Ji2oSxz2okZP3Tihzk3HokfnuqHp8YP80sx90kKJjvihwDvILnwAAAA4JqY7Yd6YqS74WeXoJh+6a8lGw49wg/N0jK9M2cIHE3kkltWpxcrduYQQkzpIsa+SLVQDmf9YUwzMRbHssz2KqvVKhY+54fp9FTxjtVjz2BbXX7ViRk/dNYf5vYvHVl/mPNDL6RpG1OXYWL9YaayjqLLhZesPwSYib3uAAAA4Ko4yQ9HHnCnnUFN8ItDfLNw0ezbuT/dD1M7crdOMbmYbTll8VI/lFaTSF26W4/dvzSk6YYWg41sk007917Vcn7YN8hQl3iiG1psVqXcOHShl5ia1sv5oW5V+5QR876c45pOoBWlUvvNmpWleyeLif1L091QjR9m4sbDzkb4IcAc9gAAAHDNmIc9JBz7lPPxhXBwKlOrGb8JdKIEPwSYw6WvXAAAALg8k09ZgBOZeFTGN8mSTtTghwBzuPSVCwAAAJelm1HpPgkDZhCmUI4+teLs0IkO+CHAHC595QIAAAAAnB/8EAAAAAAAAA6HwwE/BAAAAAAAgMMBPwQAAAAAAIAAfggAAAAAAACHA34I8HH4x9/+/ac///vSpQAAAACAnxf8EOBs/ONv//7ll/0vv+znad5388N//v0///PL/pdf9v/z67/++R3yAwAAAIArAT8EOBv/+Nu/32Nc3zl++M7SAgAAAMCPB34IcDa0cf3fn37Z/+Wv/zkcDtu//uuXX/74R3JwCDbGON4//vbvP/35//vLr3+kQcjtX/8VD/7fv/3f4XD43z//Ef4If8d8//n3//yqrU/kPhQpKS0AAAAAAH4IcD5SPwwKt/3rvxIT+78/ZYyxt77h9H/87d9RL//59//8zy9/bP/+3+1f/9UL5P/96Zc/fv31j+3f/xvyigYYELkPaSalBQAAAADADwHOxynG9d+//PqHETlz+v/+uTsg/hEIBhjjhGFWah9O/O9ffh3iiucrLQAAAAD8FOCHAGfjVOMKs0bjKWb9Ya+FVvn6yOF///LrH9u//zeYYX+uE5Y8V2kBAAAA4IcHPwQ4G/OMK56V8UM/fnjoliD+50/D2sI//nbKDjf4IQAAAAAY8EOAs3HK+sMBM1M0vh+10F1/2Gf3x7I/5X///MevyZzVA+sPAQAAAOBo8EOAs3Hi/jT7fkvSwfdcPzzozU6j4IXHGOpjuqQk+CEAAAAAHAl+CHA2rsu4rqu0AAAAAPAdwA8BzkaM8n3Px9zPIAQe5dY4AAAAAAAH/BAAAAAAAAAC+CEAAAAAAAAcDvghwDz2AAAAAAA/HPghwBwufeUCAAAAAJwf/BBgDpe+cgEAAAAAzg9+CDCHS1+5AAAAAADnBz8EmMOlr9yfkWZVNuv20qUAOJl23ZSr5nvmuHvZFEW1O0dS8br7/rW4ELuqKDYvZ2k8AICrBD8EmMFrubAsxWisWZVmILWpq/SwlN3LZrlYRAtq101Mv6o3ueNDwnFAI95cpOM5+Wk8qt3vqsK+HYohj//+erZ72Sz7quGHcKXkzaq9Ez8I7bpxL/NxNnUlE29WZVVvPqofqvq6B5Tity7zUyZ/rMr4iyB+LZfG7tp1s9TtLE9MOM0P0197v2Lix/wiv6VHs6uKZbNudTvH9t9Vxd3covsdd1Ha+K8896+5WZXpP1PRmx+kIgBnBj8EmEO4fnYvm6X997CrimVRFMn/ku4wM5jb23PvVv1oTKrRft+WyaAn/G8TB4cs2nIo0nBAjsyYLyYiU3DL8P3AD+FKyZmVsbhNXZ3uh3E032UVLtKP6YeTpWpWd6vVXd8I8sdnqKb8HYhuJn8t05/l4MyxFFVRFKrRbDHPHj9sVuW1iERsvYz3yv8vp+F23EWRHb2rimV69W3qKnpj/BbJL5u59QDww4AfAswhXD/pQCSM8MxASo9OlHrJf0jh32cj/FCMpdTwKPxDMv+ZXH2aGnH6I6F4lsliRG7bdbNQNhuqppRS12i4cRvy2tRVHEKJOOowHGlW5WNdp/FSeWP+A4w5ACztuilXjzF4Er6l8nu7LKrH1TApIQQA71ZNGrvQF5o1rvjLk7vW5OUso3PiGlTv7K0f2loE5Inu9IdlUW31y91+VxVLk0hVb8RPllIR/Ss6VCFU0w2ixlaR6YRTXhJTFU39GH8VN3XVrNelqFraI7HApstiU+s7fbb8aYA07XovWtXeFdVnMS3lxZtLkul6de7C+xe29/6h6Lkn4axd+n1o101Vf47v52a+nOv+xbnwbn+omy+ZL9vwP7RZ3X1efxa98JI2QmuvAoAPCn4IMIdw/Xjxw/3e/qcxN/jjSxXci6eI/8rDHU1zFzMcaYZEnryZrMfLObwdh1PmgPEAQpRJMTjL+aG8WTsc01dBFlv5oR5yRZl8keNgYozw0QiDQvGVXkTjMrd4zNTK9KfAzI00N4C8u0sqMCLiNs7FEi8ld173SC30nZ1wohNo0vVVBZOD77S0uRmh8UfPtIN8md6t6ydPDrfG5A+sNHB50ypUP41tSj90uyx/W80GSL102lKIhOm+vjBB0oYpKssjut57fy+bxdyJiN201NIu5p0uxfdB3St0b1x+tHt53g0Iu8HVHQAAFV1JREFUM2Wme2mOjC/lf6hwxySZCjQ/+grwncEPAeYQrp+j/VDG6FxnUxYkPw13kd1/pemQKF30OPo/eCJ4uN+bO99tORWga1ZlURRLFbhw/NC0m8gxnZ2rWkZPEnPUlzmo8AHJeeC4H5rAoBdtsNeXuGniX2vxgpqaFyejIuW4zZrhcn85OxP28pnuZMjOpJaLtMiqJY6q3EnPv01vfvlzdPf6JzRVI88P1c+aeyMv1xqZLlNlE2VWXe9+c3Jdb86VxUg6qAs/ZhrBphNlfvzGZe7/5gXJX1+mATs/NP+j0wshuRUSvt7+LFaADwh+CDCHcP28L364F+8U8j995g69vZU7Hj+cXBdxzIizz7qbQLSeWoCUzKTy/dBs1bCw0+fcMY1jzvJ2ewQ/hI9GbsL58X7o/tSkA/H0dG/Ev9y87Fxp0RemEz/0amF/0GTKxu5yP0ry0jZ3i7yQmqqIzDdO2/ssnM1otvnhSX0pJ6vH+KFZTTruh+b9mH5uZYHuguzk28muN+fKw3L312JkzNyDMHuaxYUPo/+JLryOPSXvqyfHD2VPeX6434/e8gD4OOCHAHMI189xfpguhlH/Hb0NRRflqpkMD44MLo+YvePH38ZPnIrO7api+VjXIzeY4yAjs/ikLRfLun7UEcix+KExUuKH8AGZ54fLzCBepqNvPBWTsfqR+KG+NePHD91aZOKHKmV3ybQokiWsV8xpxlQAKheNtDMmxFzTpduSZ/HDkX8TufjhWfxwNH7ofrWysx+lu+qf9+l6jcRgPwKjN1Lt+sNQ+GT9obNz0ogfHpEvwOXBDwHmEK6fI/3Q7F8q/hk7wa7MbK7hVrq7gkhqUj4yMDHcHL+zK5fo5A5I7pfL6TS7qli6C2Nk3ZMRp7/+MFYnvZ+NH8JHY8QPF3qUr0fSY+sPxwVyxvpDM8/w6Phhbv3hgJ44oGZOujtGutM19ValY46h65jdy0dWeWT94fv9cJ/dvzS7/vAsfjja9c43Z+TmYGyf9H5c5n+Ns/7wWuTQ/DNNF3+a/UsX4j/U8X74AXfoAZDghwBzCNfPkX64V/v7TTx8wky1SmdgpoNIOa9yZM6PGZkdGTx0n/6UIjdySCeG9SVc3+lxj5wUKvVPNI70Q7M73DBGkfPK8EP4aOQnFHRXgRh8Lxb9/qWF2NQ0nYCd25kmkDqG/DWIx+j9S9VelM3q7kg/7Eulfoh0VDBerbK+E35okpW3lswvXFzZJeoy3uxDO8ngT1r3c/nhXv+YG30yXXw+P8x1veuHzjr5pPH3oqEGKYqHxfsFcp9b81X3GuFSpIHreOfF///iTVT2Z69k/NC9KAA+IvghwBwufeUCwI8M4QW4Ut7/nEwAuDj4IcAcLn3lAsCPDH4IVwp+CPADgB8CzOHSVy4A/Mjgh3Cl4IcAPwD4IcAcLn3lAgAAAACcH/wQAAAAAAAADofDAT8EAAAAAACAwwE/BAAAAAAAgAB+CAAAAAAAAIcDfgjwUXm9Xdy+XroQAAAAAD8A26eHh6ft98zx9cvz7f3zOVJ6eyjL7de3w/eqBX4I07x93d4sLOIb/3q7WDx/kS7z9lB2Z4x/ibdPD4vOgoZTIjpNW4yY8uuX5/69m3Dx5OrxUN7oC/X1Vp/4fH+rizBR/rOzfXq4KR/eurLhhwAAAABnIGdWb1+3n8TgcPv0YMafx/B8fysSf71d3Gy/vn1MPzT1TXn98owfwgm8fnnu7aXj7ev2ZnFTljfyWnq+v+2vh7cH/dFBn/vp/j5jQY4dvX3dljr3WIBwzbx93d7knWr79HB/fx8vVHlihuFqvAT4IQAAAMB5yJmVsbjn+9vT/bATwphgGC1/TD+cKtXrp/ITfggnkPhh933V15K9SMK38PXLs47vBf/xLUh8+19v+yCe+4XePj2Yq3rk4pcpTF7/49fP8/1tbIpYNdM+8hpOgpwqmBnjqCLT19vF7dPTQ3eOSFYGOWfc4gIAAAD42dg+PTw8Pd3qCWLbfqC1WCxu73+Tc9mev7y+fnl+ePo9nRMnpr8dDnnDlO/LSXDyYDE+7AZ13jDP+KGtRcw3nU+nK/hsXsphtsjoK34IJ5DGDwPStUwQL758/fIsr6X+FNcP5ZvD5FV5CcWkzH2UzG2VLkFjX1+GBNMyTAcPexcdfDjnhzJWKY7pgquyxXQJ1S9R/DX5+vXroT/YKzkAAAAAKLZPDws14+wmGpcQNjXxTcc2hhGpWA10ONiQwzCINYM6IXs36fgw4g3zlB/maqHjFrevmZl3ur5qjVg/cH3DD+EEjvRD+V1053waTzOfHhM6j5eBdKRwbyY917uR83or7t+YIKQ+coTX28VN2V/kh7wfJj89pbywS/1LJEo4/GRkps4yBxUAAABgmpwHjvuhHA2mw8VDMkKTx8g5dDd6bByGym6CgjjMU37oldau5xJhGDvXLJepGMDjh3AK74kfHsQ7QiBTw1FeNFKWW3HLJE7C/D1xSzPJ0/XSpJBjyyZN4rJBcn6YbnsTExdrNcdK6NY3E/kEAAAAAIUOP8zxQ3cYnCRbpmusjJLFYae7Ksob5uXWH8bS2sGzTDmMQkeCIqGwYtiJH8IpHOOHuUW6Ef29t740dStlKIunkemkUGdb1EW37jEbnctV0xDOetI3isx8gxg/zK2KvCkffhPX8GT8UBsp8UMAAACAaeb5obnvn4xR1cjTzKGbET/MDPMm/TAXP1Qpu7IaiyoHyvghnMBxfmj3L427y3jBrmyUTLzT2WOckH1IAndJvjYuF8vv3j7RBx8ZPHSuyWQz1cXI/HJRWbWC0V1/GEsoi22WRwMAAACAy4gfiiHlMHA9HLH+MBcYiKefuv4wM8yb9EN//aFEBjO1gqabHRI/hFM40g9l1E7G1ib90Luloa7GeGPDXMnhTbOJ07gfHsS0z5E5ohnU7qNmfXCMUn758hyLpB/eGAKY5hGOdgedT+XD787+pa9i06rfH8pP+CEAAADAODmziiMrsd9+N7Xt9cuz3NRU7hoYBma5nWm612rYOYzfRvcvdYd50354UENQFasQg09Vkrh/KX4IAAAAAAAwwfkeYHhl4IcAAAAAAAAK/BAAAAAAAAAOB/wQAAAAAAAAfnLwQwAAAAAAADgc8EMAAAAAAAAI4IcAAAAAAABwOOCHAAAAAAAAEMAP4UPw0+4QBQAAAPBjMTzP/epyfPu6LcuHt8Mhfd79j8r26eHhaSvfwQ8dtk8Pi4TnL9035PXL88J+XV5vk8M83h7Km96ChlN6bszXWhdj+FS8P/atffu6vdHlCe8kJ749lDdHFP6b8Hx/GxoEPwQAAAD4Icja2vbpQYw2Xz91JnZK0l+3N2Ic+/rl+aZ8ePuofqjr6/B8f3sjGuH5/nZ05C/H6sMAPhlCv94qrXi9HR3k44en8Xx/a9pr+/RwU5Y3iV/1h5n+OJhz7+/vXQsS30V1vMn9oO20vyRc3h7KT/f3t6Nae5j8xnw38EMAAACAH4KsrT2Loak7+p1k+/QgR4z9WP2D+qGsb8rrl+dP9/exEbZPD3FgHwf5coQsB/MxxHJIhMUIwvbpoSzLkWE2fngaprn7b4z6upjbGLGJzf2A0Ls5C4rfntcvz/GGgfuV0kV6eyhv3K9dOFek4F82roJ6yMhnuI1x++pdorEw8f7HzXCNLWJesXFiAV6/PN/e/xZvhIhSyUDrTxHlBwAAALhm3h7K8unpNx0KG+Jdi8Xi/v5+mCNXPrwdDs/3n37/8vuNOuVgBpDJgDaOydX7bhROFiDkKCbWxfGq9cMnb9aePFGMhOWQ9Wb79aus7/OX1zh+PoiMvgpJlsNy4xdJ9VVEyhysDSKc8tWIwOuX51iDpz7ft6/bT/fPz/e3+OEYafzwcDiY2wnG0eNLqfXxFNcP5e0Tc2NgkXz5jDS6DhlziZ+GLH7vv+J9gd8eytK7FF06F5VfwZwfyvsfog27r7JsMemHogDSe9++iqudGCMAAADAx+btoby5ccJiKrBhhtAysiLGw2qmmwk5inH14IcmCucG3GI5v4qRZ3Qk4YdqBC7XiIkAzE2MDCVjclVfWbBYYFmjt6/bG+HSqYOIQbiJbcqX1lNCsRP5dAw8rk3DD8c40g/lt82d8ynDg6nhjIeeD4eD/JYkX/p0duhQPOmHNzp818fib9JAdrYQX7c3i5tSf9E9P1QXg7Hfm7K80TOqox+aUHjaUMxBBQAAAPjw2KHgzRDlG/NDs7julGl00Q/tiX2yY0vADmJEqv1wOEVO+JTFjsdr/RurRSa7Lp9bu87QTU0J5PP97WIqeCMFITNHd+gp/HCM98QPI9LXU8PJhI+TLEWyMa54e/+cuKUNr8v4YVLINEY/HkK0t14yX8F0651YQXs7RM8vdTVbzUbADwEAAAA+NmqEOcsP3UG4XeFVJuG4dDQb0smMt9WQ1fNDZ8BvRr8y5X7eqTshTuQqBr0jswiNUCQNInfH/OLOs03H5KEwJqlUVvHDMY7xw3T9oXYYpTfpDOZMFkmWfnDPLpyV86GlU+X3epLf2gk/DGf9JgqsKxtTG9u0KiwylBHI0fih8knihwAAAAAfnpl+OL7FhhkH6k00ZsQP1czVTPzQ8cNc/FCnfOMWJhYpGa3fJEsEbbRwfJ+b0DKmMGafETnX1G1J/PAojvHDZP/SQc0nZ0imNzPEnYNh3V1mFrKfrym/3DCmP3g40SwFHJ1fGr/rwwVmNlONtyXcpGJlzQpGb/1hrI69NvBDAAAAgI/NmB/K+/4mZDK6/nA8qjFj/aFMQa3BG/fD3PpDr/rq09zwuBQzBL0lghNyKBcTJo5dJkp8ExY95tYf4ofTHOeHBxm9lVOBJ/0wTV/6oQw8uvt56otkwg9lguaeQRrV9Kq8cK9nuU/p7+IZL/JRLX0AU92kSfcvfXj6Pd2/VGyvdPP7l98/4YcAAAAAH5qcHw7juqh8i2H/0tvfnp7c/UvD/oiZnWmcHMUodGz/UjkG/vLl+Wg/PMjRuNzAJh23y/pO+qEZ/Megiwk1isiKGcCPrYCLLRMfPD5Sd/wQAAAAAAAuyRH7NcJ3Aj8EAAAAAIBLgh9+HPBDAAAAAAC4JPjhxwE/BAAAAAAAgMMBPwQAAAAAAIAAfggAAAAAAACHA34IAAAAAAAAAfwQAAAAAAAADgf88FKwRxMAAAAAvIfkMfHfHPOc+vcQB8PfvxYX4u2hLLdfz9J435ZfDoe3h/JmYbmN7vJ8f2v67PXLc3pYytvX7c1iETveZHBjv1uqGOLT4X33qyNTjgc839+a7B6etsn7Y4X/Nrze9g2CHwIAAADAe8ib1esnMdLePj3MGHZunx5E4m8P5c3zl9eP6oeqvinSSuLLxC9eoydITxGucWPs7vXL841u50RwVClO8sNUwVyMZJ3FL2T88PXWVvvtobwpy1IW7u3r9qY/zDSK5u2h/HSfsaDt00MQNn2802SyaZ7vb5Oz5Lfh7aG8SQ5QKX8cK/s4JQEAAACAayRnVsbiZg07OyGMCd4sbl8/avxwqlTGSoaAjaimNJHBKaT4xEaQVRDq8Xq7uCnHDPD88cPn+9tvEfEa88NgcabPknsJoZ6vt32MLhb3+ctr5uv4etvX5Pn+tjfM4c1ckdJeMXjaKb9zx/aKvsfw9lDe3N4/m+tEF9gGOV+/PIt7DLFxlKn+9vR0k9yNcMOhAAAAAACG1y/Pt/e/eaPQGAf79ElM0AsBwE/3z3FKXRxt6rGrNa44xpbvZ6Jw6v1w1vbpwczpO1g/tLWI+aaRMV3Bh/+nX75NW4mSDi/+NOiDFp9UCId0wimp64qm/k2IwKffv/wuROBrrH5MX7a57LIb1f42pJl2QSxP2vXenNDXT+XDePxQNZDbiP1LKeLDKa4fSosT4cFXOfXT7b+MQ8qGSMtvbwak3858arev6muR9UNRi+GYGFwVLab8UPdul9Tb11gB1aQAAAAAAJIwvk/DYnqKXxoJVFGQMEx9/fIsI1E66DKMYIUf2ihcf7wzgo3jWzlcl36Yq8ViGCHHEx0d0PWdtpI4dDe1jsTRuwk+yZdakWTMTDVjLJg0cCkCwYFD2WT7SD90u8y4q2wPt2t0Oq+3QjWNkc3xQ9nl7pxPKU6J4Yw5XkA0jZoymgmhRuubLrwuxoR9bZ8ebsryRgcJPT9U7SZzfL6/LctSX5+DH+qr7iYtDHNQAQAAACCHWeoVh5fjfljqxXXeYjE7uJVRjXC6OTH3foKz7CtXC2MZvS85C8rymWatJFiZe5ZMLXHUhYj6+K0qHDJ1h5tUBJLOKj0/VM7pxjZzrRHLptNRZRP+8nq7uDlX/DCi5nCmhpM3XYVIdogrPn/5MuqWcSKoeienWEeUxDik74cygDsV9s2uhIz1NanhhwAAAADgkhulH++H7uqtkeBQPN0MpL2ZdypBOVJO/dCrhR3Gy5SN3WX8MGcluZCa3yBxjutN+fC7N8/2oOfBioIZt/JF4Bg/NHmN+2Gua3Q6I354e7IfunsZ6RJY9L5A/jRZw/hU4BzmyzF+A2PSD5/vbx+enkSB/XW6+Yjo20N589vTkzb1sfih8UnihwAAAACQY54f3uhVc+loWQ9B1UB3RvxQz+H044duLTLxQ5XyTT5ombMSk52JFh4Z/NSFMS4QDzOidGY/zO3MMhI//FZ+aPYvXQyO5AS70khuumSzr+FXWY10JaGbrzxLppZW+2APnphf6n7hzGaqC2f94YAn9/76Q1EduRDR3s8AAAAAAIiM+KFWsmFC5uT6w9xsxnj6qesPk+maR8YPc+sPB6SUyh1Wxq3EVFCuRRyVQ7NIz19cZhptZP3h+/3wkF18l11/+K38sK+eChAf54dO+sIPpeK7+3mqWx0Lb25n7maAbKxjpm6aHZzcTXQenn5/KD/J79Zi+Gi7fXrwLsu3/LZFbyadEMLGDwEAAADAJb8KrNue42bQp270GyThN3//0m6CqLszTfdaOcYwMB7dv1Tt8/98/+lIPzwoEVAbqyTKIOs7bSWvdstTk6xUj6Hw+Z1p0uVsaqnhSN0P7/PDg53aqtTMdM08PwQAAAAAgB+WMz7AEH5U8EMAAAAAgJ8C/BAmwQ8BAAAAAH4K8EOYBD8EAAAAAACAwwE/BAAAAAAAgAB+CAAAAAAAAIcDfggAAAAAAAAB/BAAAAAAAAAOB/wQAAAAAAAAAvghAAAAAAAAHA74IQAAAAAAAATwQwAAAAAAADgc8EMAAAAAAAAI4IcAAAAAAABwOOCHAAAAAAAAEMAPAQAAAAAA4HDADwEAAAAAACDw/wPOR25tYUU+UAAAAABJRU5ErkJggg==" alt="" />

感谢您的阅读!

大叔还会继续对cat进行更深入的研究!

实时监控Cat之旅~对请求是否正常结束做监控(分布式的消息树)的更多相关文章

  1. 实时监控Cat之旅~对Get和Post进行封装,支持分布式消息树

    对第三方接口的调用我们需要对GET和POST进行监控,看一些请求的执行是否成功,如A调用B,B调用C,C调用D,这一连串的东西需要我们使用cat进行记录,进行记录之后,我们可以很容易的发现请求响应的时 ...

  2. 实时监控Cat之旅~分布式消息树的实现原理与测试

    大众点评的老吴在InfoQ上讲了Cat之后,有不少同仁开始关注这个实时监控系统,但学习的文章甚少,在GitHub上也是一言代过,给我们这些开发人员留下了N多个疑问,一时间不知道去哪里问,向谁去问了,通 ...

  3. 实时监控Cat之旅~配置Cat集群需要注意的问题

    在配置cat集群时,有一些设置是我们应该注意的,从它的部署文档中我们可以看到相关信息,但说的还不够明确和重要,大叔今天总结一下Cat集群配置的注意事项 1 服务端datasources.xml用来设置 ...

  4. 调用链监控 CAT 之 入门

    简介 CAT 是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,基本接入了美团上海所有核心应用.目前在中间件(MVC.RPC.数据库.缓存等)框架中得到广泛应用,为美团各业务线提供系统的性 ...

  5. 第四模块 :微服务调用链监控CAT架构和实践

    采样率:每一个请求为都进行记录,或者100次请求为记录50次 各个开源框架都满足opentracing的标准,只要使用opentracing标准埋点的客户端,可以使用不同的客户端去展示,opentra ...

  6. 调用链监控 CAT 之 URL埋点实践

    URL监控埋点作用 一个http请求来了之后,会自动打点,能够记录每个url的访问情况,并将以此请求后续的调用链路串起来,可以在cat上查看logview 可以在cat Transaction及Eve ...

  7. ss命令结合zabbix对socket做监控

    本文为博客园作者所写: 一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 最近天冷了,socket也出问题了,一直没有做监控,现在就把监控加起来,目前我们使用的有z ...

  8. 开源框架是如何通过JMX来做监控的(一) - JMX简介和Standard MBean

    相关文章目录: 开源框架是如何通过JMX来做监控的(一) - JMX简介和Standard MBean 开源框架是如何通过JMX来做监控的(二) - Druid连接池的监控 相信很多做Java开发的同 ...

  9. 【转】开源框架是如何通过JMX来做监控的(一) - JMX简介和Standard MBean

    原文链接:https://www.cnblogs.com/trust-freedom/p/6842332.html#autoid-0-0-0 相信很多做Java开发的同学都使用过JDK自带的 jcon ...

随机推荐

  1. vim 按照字段排序文件

    假设有如下数据,以空格为数据列分割: 1  何维川   124.63     172  0.72 2  张子寅   99.67      172  0.58 3  周广滨   93.34      1 ...

  2. [JZOJ 5911] [NOIP2018模拟10.18] Travel 解题报告 (期望+树形DP)

    题目链接: http://172.16.0.132/senior/#contest/show/2530/1 题目: EZ同学家里非常富有,但又极其的谦虚,说话又好听,是个不可多得的人才.        ...

  3. hihoCoder 1403 后缀数组 重复旋律

    思路: 后缀数组 第一次写 留个模板吧 先求出后缀数组,问题转换为询问height数组中连续k-1个数的最小值的最大值,单调队列扫描一遍即可.-yousiki 手懒用得STL //By SiriusR ...

  4. elementUI 易错点

    1.element table里面添加单选时,如果存在下拉框的筛选功能,那么每次下拉框筛选条件变化时 都得清空之前选中的信息,如果不数据更新后如果更新后的数据跟之前选中的相同 则会无法选中

  5. Fork and Join: Java Can Excel at Painless Parallel Programming Too!---转

    原文地址:http://www.oracle.com/technetwork/articles/java/fork-join-422606.html Multicore processors are ...

  6. 简易的CSS下拉菜单 - 1

    <!DOCTYPE html> <html> <head> <style> body{ margin:0; } .dropmenu{ backgroun ...

  7. Hibernate框架学习(二)——api详解

    一.Configuration对象 功能:配置加载类,用于加载主配置,orm元数据加载. //1.创建,调用空参构造(还没有读配置文件) Configuration conf=new Configur ...

  8. 「JavaSE 重新出发」01. Java介绍

    「白皮书」关键术语 简单性(C++--) 面向对象 分布式 健壮性 安全性 体系结构中立 可移植性 解释型 高性能 多线程 动态性 Java 发展历程 SUN公司--Stanford Universi ...

  9. 洛谷P2617 Dynamic Rankings 主席树 单点修改 区间查询第 K 大

    我们将线段树套在树状数组上,查询前预处理出所有要一起移动的节点编号,并在查询过程中一起将这些节点移到左右子树上. Code: #include<cstdio> #include<cs ...

  10. vue循环遍历给div添加id

    html部分 <div class="img-preview" v-for="(img,i) of list" :key="img.imageK ...