From 51b143c82824e7db22e9881d45a7d6779c706d72 Mon Sep 17 00:00:00 2001 From: Apex Liu Date: Tue, 31 Oct 2017 14:52:03 +0800 Subject: [PATCH] =?UTF-8?q?web=E7=AB=AF=E5=81=9A=E4=BA=86=E5=BE=88?= =?UTF-8?q?=E5=A4=A7=E6=94=B9=E5=8A=A8=EF=BC=8C=E5=B0=9A=E6=9C=AA=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../packages/packages-common/mako/__init__.py | 4 +- .../packages-common/mako/_ast_util.py | 2 +- .../www/packages/packages-common/mako/ast.py | 2 +- .../packages/packages-common/mako/cache.py | 2 +- .../www/packages/packages-common/mako/cmd.py | 2 +- .../packages/packages-common/mako/codegen.py | 2 +- .../packages/packages-common/mako/compat.py | 1 + .../packages-common/mako/exceptions.py | 2 +- .../packages-common/mako/ext/autohandler.py | 2 +- .../packages-common/mako/ext/babelplugin.py | 2 +- .../packages-common/mako/ext/preprocessors.py | 2 +- .../packages-common/mako/ext/pygmentplugin.py | 2 +- .../packages-common/mako/ext/turbogears.py | 2 +- .../packages/packages-common/mako/filters.py | 2 +- .../packages/packages-common/mako/lexer.py | 28 +- .../packages/packages-common/mako/lookup.py | 8 +- .../packages-common/mako/parsetree.py | 2 +- .../packages/packages-common/mako/pygen.py | 2 +- .../packages/packages-common/mako/pyparser.py | 2 +- .../packages/packages-common/mako/runtime.py | 13 +- .../packages/packages-common/mako/template.py | 34 +- .../www/packages/packages-common/mako/util.py | 2 +- .../packages-common/pymemcache/__init__.py | 1 - .../pymemcache/client/__init__.py | 12 - .../packages-common/pymemcache/client/base.py | 1095 - .../packages-common/pymemcache/client/hash.py | 333 - .../pymemcache/client/murmur3.py | 51 - .../pymemcache/client/rendezvous.py | 46 - .../packages-common/pymemcache/exceptions.py | 40 - .../packages-common/pymemcache/fallback.py | 123 - .../packages-common/pymemcache/pool.py | 114 - .../packages-common/pymemcache/serde.py | 69 - .../packages-common/pymysql/__init__.py | 61 +- .../packages-common/pymysql/_compat.py | 3 + .../packages-common/pymysql/charset.py | 8 + .../packages-common/pymysql/connections.py | 549 +- .../pymysql/constants/CLIENT.py | 16 +- .../packages-common/pymysql/constants/CR.py | 1 + .../pymysql/constants/FIELD_TYPE.py | 1 + .../packages-common/pymysql/converters.py | 159 +- .../packages-common/pymysql/cursors.py | 98 +- .../packages/packages-common/pymysql/err.py | 31 +- .../packages/packages-common/pymysql/times.py | 4 + .../packages/packages-common/pymysql/util.py | 3 + .../packages/packages-common/rsa/__init__.py | 45 - .../packages/packages-common/rsa/_compat.py | 160 - .../packages-common/rsa/_version133.py | 442 - .../packages-common/rsa/_version200.py | 529 - .../www/packages/packages-common/rsa/asn1.py | 35 - .../packages/packages-common/rsa/bigfile.py | 87 - .../www/packages/packages-common/rsa/cli.py | 379 - .../packages/packages-common/rsa/common.py | 185 - .../www/packages/packages-common/rsa/core.py | 58 - .../www/packages/packages-common/rsa/key.py | 612 - .../packages/packages-common/rsa/parallel.py | 94 - .../www/packages/packages-common/rsa/pem.py | 120 - .../www/packages/packages-common/rsa/pkcs1.py | 391 - .../www/packages/packages-common/rsa/prime.py | 166 - .../packages/packages-common/rsa/randnum.py | 85 - .../packages/packages-common/rsa/transform.py | 220 - .../www/packages/packages-common/rsa/util.py | 81 - .../packages/packages-common/rsa/varblock.py | 155 - .../packages-common/tornado/__init__.py | 6 +- .../packages-common/tornado/_locale_data.py | 135 +- .../packages/packages-common/tornado/auth.py | 67 +- .../packages-common/tornado/autoreload.py | 13 +- .../packages-common/tornado/concurrent.py | 31 +- .../tornado/curl_httpclient.py | 19 +- .../packages-common/tornado/escape.py | 51 +- .../packages/packages-common/tornado/gen.py | 100 +- .../tornado/http1connection.py | 40 +- .../packages-common/tornado/httpclient.py | 75 +- .../packages-common/tornado/httpserver.py | 113 +- .../packages-common/tornado/httputil.py | 178 +- .../packages-common/tornado/ioloop.py | 102 +- .../packages-common/tornado/iostream.py | 244 +- .../packages-common/tornado/locale.py | 22 +- .../packages/packages-common/tornado/locks.py | 8 +- .../packages/packages-common/tornado/log.py | 93 +- .../packages-common/tornado/netutil.py | 35 +- .../packages-common/tornado/options.py | 20 +- .../tornado/platform/asyncio.py | 20 +- .../packages-common/tornado/platform/auto.py | 11 +- .../tornado/platform/caresresolver.py | 12 +- .../tornado/platform/common.py | 25 +- .../packages-common/tornado/platform/epoll.py | 2 +- .../tornado/platform/interface.py | 6 +- .../tornado/platform/kqueue.py | 2 +- .../packages-common/tornado/platform/posix.py | 8 +- .../tornado/platform/select.py | 2 +- .../tornado/platform/twisted.py | 40 +- .../tornado/platform/windows.py | 8 +- .../packages-common/tornado/process.py | 26 +- .../packages-common/tornado/queues.py | 14 +- .../packages-common/tornado/routing.py | 625 + .../tornado/simple_httpclient.py | 46 +- .../packages-common/tornado/stack_context.py | 4 +- .../packages-common/tornado/tcpclient.py | 55 +- .../packages-common/tornado/tcpserver.py | 39 +- .../packages-common/tornado/template.py | 25 +- .../packages-common/tornado/testing.py | 65 +- .../packages/packages-common/tornado/util.py | 198 +- .../packages/packages-common/tornado/web.py | 570 +- .../packages-common/tornado/websocket.py | 329 +- .../packages/packages-common/tornado/wsgi.py | 8 +- .../x64/PIL/.dylibs/libfreetype.6.dylib | Bin 0 -> 1800576 bytes .../x64/PIL/.dylibs/libjpeg.9.dylib | Bin 0 -> 717656 bytes .../x64/PIL/.dylibs/liblcms2.2.dylib | Bin 0 -> 945468 bytes .../x64/PIL/.dylibs/libpng16.16.dylib | Bin 0 -> 593276 bytes .../x64/PIL/.dylibs/libtiff.5.dylib | Bin 0 -> 1242044 bytes .../x64/PIL/.dylibs/libwebp.5.dylib | Bin 0 -> 1095692 bytes .../x64/PIL/.dylibs/libwebpdemux.1.dylib | Bin 0 -> 51584 bytes .../x64/PIL/.dylibs/libwebpmux.1.dylib | Bin 0 -> 91420 bytes .../x64/PIL/.dylibs/libz.1.2.8.dylib | Bin 0 -> 249092 bytes .../packages-darwin/x64/PIL/BdfFontFile.py | 132 + .../packages-darwin/x64/PIL/BmpImagePlugin.py | 288 + .../x64/PIL/BufrStubImagePlugin.py | 72 + .../packages-darwin/x64/PIL/ContainerIO.py | 117 + .../packages-darwin/x64/PIL/CurImagePlugin.py | 88 + .../packages-darwin/x64/PIL/DcxImagePlugin.py | 86 + .../packages-darwin/x64/PIL/EpsImagePlugin.py | 428 + .../packages-darwin/x64/PIL/ExifTags.py | 193 + .../x64/PIL/FitsStubImagePlugin.py | 76 + .../packages-darwin/x64/PIL/FliImagePlugin.py | 188 + .../packages-darwin/x64/PIL/FontFile.py | 115 + .../packages-darwin/x64/PIL/FpxImagePlugin.py | 226 + .../packages-darwin/x64/PIL/GbrImagePlugin.py | 71 + .../packages-darwin/x64/PIL/GdImageFile.py | 92 + .../packages-darwin/x64/PIL/GifImagePlugin.py | 685 + .../x64/PIL/GimpGradientFile.py | 137 + .../x64/PIL/GimpPaletteFile.py | 62 + .../x64/PIL/GribStubImagePlugin.py | 72 + .../x64/PIL/Hdf5StubImagePlugin.py | 73 + .../x64/PIL/IcnsImagePlugin.py | 366 + .../packages-darwin/x64/PIL/IcoImagePlugin.py | 283 + .../packages-darwin/x64/PIL/ImImagePlugin.py | 355 + .../packages/packages-darwin/x64/PIL/Image.py | 2500 ++ .../packages-darwin/x64/PIL/ImageChops.py | 283 + .../packages-darwin/x64/PIL/ImageCms.py | 970 + .../packages-darwin/x64/PIL/ImageColor.py | 279 + .../packages-darwin/x64/PIL/ImageDraw.py | 407 + .../packages-darwin/x64/PIL/ImageDraw2.py | 111 + .../packages-darwin/x64/PIL/ImageEnhance.py | 100 + .../packages-darwin/x64/PIL/ImageFile.py | 513 + .../packages-darwin/x64/PIL/ImageFilter.py | 275 + .../packages-darwin/x64/PIL/ImageFont.py | 437 + .../packages-darwin/x64/PIL/ImageGrab.py | 61 + .../packages-darwin/x64/PIL/ImageMath.py | 270 + .../packages-darwin/x64/PIL/ImageMode.py | 52 + .../packages-darwin/x64/PIL/ImageMorph.py | 251 + .../packages-darwin/x64/PIL/ImageOps.py | 461 + .../packages-darwin/x64/PIL/ImagePalette.py | 237 + .../packages-darwin/x64/PIL/ImagePath.py | 66 + .../packages-darwin/x64/PIL/ImageQt.py | 198 + .../packages-darwin/x64/PIL/ImageSequence.py | 42 + .../packages-darwin/x64/PIL/ImageShow.py | 179 + .../packages-darwin/x64/PIL/ImageStat.py | 147 + .../packages-darwin/x64/PIL/ImageTk.py | 292 + .../packages-darwin/x64/PIL/ImageTransform.py | 103 + .../packages-darwin/x64/PIL/ImageWin.py | 239 + .../packages-darwin/x64/PIL/ImtImagePlugin.py | 95 + .../x64/PIL/IptcImagePlugin.py | 267 + .../x64/PIL/Jpeg2KImagePlugin.py | 276 + .../x64/PIL/JpegImagePlugin.py | 753 + .../packages-darwin/x64/PIL/JpegPresets.py | 241 + .../x64/PIL/McIdasImagePlugin.py | 74 + .../packages-darwin/x64/PIL/MicImagePlugin.py | 103 + .../x64/PIL/MpegImagePlugin.py | 86 + .../packages-darwin/x64/PIL/MpoImagePlugin.py | 99 + .../packages-darwin/x64/PIL/MspImagePlugin.py | 104 + .../x64/PIL/OleFileIO-README.md | 180 + .../packages-darwin/x64/PIL/OleFileIO.py | 2305 ++ .../packages-darwin/x64/PIL/PSDraw.py | 235 + .../packages-darwin/x64/PIL/PaletteFile.py | 55 + .../x64/PIL/PalmImagePlugin.py | 241 + .../packages-darwin/x64/PIL/PcdImagePlugin.py | 59 + .../packages-darwin/x64/PIL/PcfFontFile.py | 252 + .../packages-darwin/x64/PIL/PcxImagePlugin.py | 187 + .../packages-darwin/x64/PIL/PdfImagePlugin.py | 258 + .../x64/PIL/PixarImagePlugin.py | 68 + .../packages-darwin/x64/PIL/PngImagePlugin.py | 809 + .../packages-darwin/x64/PIL/PpmImagePlugin.py | 174 + .../packages-darwin/x64/PIL/PsdImagePlugin.py | 312 + .../packages-darwin/x64/PIL/PyAccess.py | 317 + .../packages-darwin/x64/PIL/SgiImagePlugin.py | 89 + .../x64/PIL/SpiderImagePlugin.py | 322 + .../packages-darwin/x64/PIL/SunImagePlugin.py | 81 + .../packages/packages-darwin/x64/PIL/TarIO.py | 57 + .../packages-darwin/x64/PIL/TgaImagePlugin.py | 198 + .../x64/PIL/TiffImagePlugin.py | 1476 ++ .../packages-darwin/x64/PIL/TiffTags.py | 402 + .../packages-darwin/x64/PIL/WalImageFile.py | 128 + .../x64/PIL/WebPImagePlugin.py | 80 + .../packages-darwin/x64/PIL/WmfImagePlugin.py | 173 + .../x64/PIL/XVThumbImagePlugin.py | 75 + .../packages-darwin/x64/PIL/XbmImagePlugin.py | 96 + .../packages-darwin/x64/PIL/XpmImagePlugin.py | 130 + .../packages-darwin/x64/PIL/__init__.py | 58 + .../packages-darwin/x64/PIL/_binary.py | 76 + .../x64/PIL/_imaging.cpython-35m-darwin.so | Bin 0 -> 719328 bytes .../x64/PIL/_imagingcms.cpython-35m-darwin.so | Bin 0 -> 43652 bytes .../x64/PIL/_imagingft.cpython-35m-darwin.so | Bin 0 -> 45752 bytes .../PIL/_imagingmath.cpython-35m-darwin.so | Bin 0 -> 55068 bytes .../PIL/_imagingmorph.cpython-35m-darwin.so | Bin 0 -> 26284 bytes .../x64/PIL/_imagingtk.cpython-35m-darwin.so | Bin 0 -> 26628 bytes .../packages/packages-darwin/x64/PIL/_util.py | 27 + .../x64/PIL/_webp.cpython-35m-darwin.so | Bin 0 -> 32240 bytes .../packages-darwin/x64/PIL/features.py | 67 + server/www/teleport/.idea/teleport.iml | 18 +- .../www/teleport/app/eom_app/app/__init__.py | 19 - server/www/teleport/app/eom_app/app/const.py | 4 - .../app/eom_app/app/database/create.py | 114 - server/www/teleport/app/eom_app/app/util.py | 159 - .../app/eom_app/controller/__init__.py | 124 - .../teleport/app/eom_app/controller/auth.py | 266 - .../teleport/app/eom_app/controller/base.py | 233 - .../teleport/app/eom_app/controller/cert.py | 22 - .../teleport/app/eom_app/controller/config.py | 181 - .../app/eom_app/controller/dashboard.py | 9 - .../teleport/app/eom_app/controller/group.py | 22 - .../teleport/app/eom_app/controller/host.py | 928 - .../teleport/app/eom_app/controller/index.py | 37 - .../teleport/app/eom_app/controller/rpc.py | 133 - .../teleport/app/eom_app/controller/user.py | 296 - .../www/teleport/app/eom_app/module/host.py | 741 - .../www/teleport/app/eom_app/module/record.py | 207 - .../www/teleport/app/eom_app/module/user.py | 361 - .../www/teleport/app/eom_common/__init__.py | 2 - .../app/eom_common/eomcore/__init__.py | 7 - .../app/eom_common/eomcore/eom_mysql.py | 243 - .../app/eom_common/eomcore/eom_sqlite.py | 153 - server/www/teleport/app/eom_main.py | 37 - server/www/teleport/app_bootstrap.py | 20 + server/www/teleport/static/css/auth.css | 1 - server/www/teleport/static/css/dashboard.css | 2 +- .../www/teleport/static/css/dashboard.css.map | 1 + server/www/teleport/static/css/doc.css | 1 - server/www/teleport/static/css/error.css | 1 + server/www/teleport/static/css/error.css.map | 1 + .../css/img/desktop/icons-tree-24x24.png | Bin 2969 -> 0 bytes .../static/css/img/desktop/mimetype-16.png | Bin 15779 -> 0 bytes .../teleport/static/css/img/loading_01.gif | Bin 381 -> 0 bytes server/www/teleport/static/css/login.css | 1 + server/www/teleport/static/css/login.css.map | 1 + server/www/teleport/static/css/main.css | 1 - .../www/teleport/static/css/maintenance.css | 1 + .../teleport/static/css/maintenance.css.map | 1 + server/www/teleport/static/css/single.css | 1 + server/www/teleport/static/css/single.css.map | 1 + server/www/teleport/static/css/style.css | 1 + server/www/teleport/static/css/style.css.map | 1 + server/www/teleport/static/css/sub.css | 1 - .../www/teleport/static/download/example.csv | 4 - .../download/teleport-example-asset.csv | 5 + .../static/download/teleport-example-user.csv | 6 + .../teleport/static/img/css/disable-bg.png | Bin 0 -> 1627 bytes .../static/img/login/input_right_clean.png | Bin 2116 -> 0 bytes .../teleport/static/img/login/login-bg-0.png | Bin 0 -> 35703 bytes .../teleport/static/img/login/login-bg-1.png | Bin 0 -> 33535 bytes .../teleport/static/img/login/login-bg-2.png | Bin 0 -> 25952 bytes .../teleport/static/img/login/login-bg-3.png | Bin 0 -> 35363 bytes .../teleport/static/img/login/login-bg-4.png | Bin 0 -> 35757 bytes .../teleport/static/img/login/login-bg-5.png | Bin 0 -> 35359 bytes .../teleport/static/img/login/login-bg-6.png | Bin 0 -> 31269 bytes .../teleport/static/img/login/login-bg-7.png | Bin 0 -> 34301 bytes .../teleport/static/img/login/side-001.jpg | Bin 20701 -> 0 bytes .../static/js/asset/account-group-info.js | 553 + .../static/js/asset/account-group-list.js | 442 + .../static/js/asset/host-group-info.js | 585 + .../static/js/asset/host-group-list.js | 543 + .../www/teleport/static/js/asset/host-list.js | 1476 ++ .../teleport/static/js/audit/record-list.js | 427 + server/www/teleport/static/js/audit/replay.js | 300 + server/www/teleport/static/js/auth/login.js | 237 + .../teleport/static/js/common/xterm.js.map | 1 - .../teleport/static/js/maintenance/install.js | 197 + server/www/teleport/static/js/ops/auz-info.js | 1990 ++ server/www/teleport/static/js/ops/auz-list.js | 633 + .../www/teleport/static/js/ops/remote-list.js | 434 + .../teleport/static/js/ops/session-list.js | 436 + .../www/teleport/static/js/system/config.js | 215 + server/www/teleport/static/js/system/role.js | 207 + .../www/teleport/static/js/system/syslog.js | 225 + server/www/teleport/static/js/teleport.js | 280 + .../static/js/{ui => teleport}/common.js | 191 +- .../teleport/static/js/teleport/controls.js | 1702 ++ .../js/{ui/teleport.js => tp-assist.js} | 141 +- server/www/teleport/static/js/tp-const.js | 351 + .../static/js/{ywl_common.js => tp-utils.js} | 612 +- server/www/teleport/static/js/ui/auth.js | 750 - .../www/teleport/static/js/ui/auth/login.js | 218 - server/www/teleport/static/js/ui/cert.js | 248 - .../www/teleport/static/js/ui/config/info.js | 141 - server/www/teleport/static/js/ui/controls.js | 1672 -- server/www/teleport/static/js/ui/group.js | 208 - .../www/teleport/static/js/ui/host/admin.js | 1495 -- server/www/teleport/static/js/ui/host/user.js | 305 - server/www/teleport/static/js/ui/log.js | 382 - server/www/teleport/static/js/ui/pwd.js | 45 - server/www/teleport/static/js/ui/record.js | 282 - server/www/teleport/static/js/ui/user.js | 318 - .../teleport/static/js/ui/user/personal.js | 145 - server/www/teleport/static/js/user/me.js | 184 + .../static/js/user/user-group-info.js | 603 + .../static/js/user/user-group-list.js | 452 + .../www/teleport/static/js/user/user-list.js | 981 + server/www/teleport/static/js/ywl.js | 180 - server/www/teleport/static/js/ywl_assist.js | 708 - server/www/teleport/static/js/ywl_const.js | 170 - server/www/teleport/static/less/_base.less | 407 +- server/www/teleport/static/less/_color.less | 14 +- server/www/teleport/static/less/_gritter.less | 151 - .../www/teleport/static/less/_mimetype.less | 144 - .../static/less/_overwrite_bootstrap.less | 285 + .../static/less/_overwrite_gritter.less | 156 + server/www/teleport/static/less/_role.less | 120 + server/www/teleport/static/less/_table.less | 392 +- server/www/teleport/static/less/auth.less | 246 - .../www/teleport/static/less/dashboard.less | 265 +- server/www/teleport/static/less/doc.less | 287 - server/www/teleport/static/less/error.less | 100 + server/www/teleport/static/less/login.less | 175 + server/www/teleport/static/less/main.less | 844 - .../www/teleport/static/less/maintenance.less | 186 + .../static/less/{sub.less => single.less} | 4 +- server/www/teleport/static/less/style.less | 1094 + .../static/plugins/blur/background-blur.js | 392 + .../static/plugins/blur/velocity.min.js | 4 + .../css/bootstrap3/bootstrap-switch.css | 195 - .../css/bootstrap3/bootstrap-switch.min.css | 22 - .../bootstrap-switch/js/bootstrap-switch.js | 744 - .../js/bootstrap-switch.min.js | 22 - .../plugins/bootstrap/css/bootstrap-theme.css | 587 + .../bootstrap/css/bootstrap-theme.css.map | 1 + .../bootstrap/css/bootstrap-theme.min.css | 6 + .../bootstrap/css/bootstrap-theme.min.css.map | 1 + .../plugins/bootstrap/css/bootstrap.css | 6757 ++++++ .../plugins/bootstrap/css/bootstrap.css.map | 1 + .../plugins/bootstrap/css/bootstrap.min.css | 6 +- .../bootstrap/css/bootstrap.min.css.map | 2 +- .../static/plugins/bootstrap/js/bootstrap.js | 2377 ++ .../plugins/bootstrap/js/bootstrap.min.js | 8 +- .../static/plugins/bootstrap/js/npm.js | 13 + .../static/plugins/bootstrap/version.txt | 2 +- .../css/bootstrap-datetimepicker.css | 836 +- .../js/bootstrap-datetimepicker.js | 3674 +-- .../locales/bootstrap-datetimepicker.zh-CN.js | 32 +- .../static/plugins/echarts/echarts.min.js | 62 +- .../font-awesome/css/font-awesome.min.css | 4 +- .../font-awesome/fonts/FontAwesome.otf | Bin 109688 -> 134808 bytes .../fonts/fontawesome-webfont.eot | Bin 70807 -> 165742 bytes .../fonts/fontawesome-webfont.svg | 3320 ++- .../fonts/fontawesome-webfont.ttf | Bin 142072 -> 165548 bytes .../fonts/fontawesome-webfont.woff | Bin 83588 -> 98024 bytes .../fonts/fontawesome-webfont.woff2 | Bin 66624 -> 77160 bytes .../static/plugins/font-awesome/version.txt | 2 +- ...CpsQm3Vp6mXoaTegdm0LZdjqr5-oayXSOefg.woff2 | Bin 16152 -> 0 bytes ...Brn4kERxqtaUH3VtXRa8TVwTICgirnJhmVJw.woff2 | Bin 15572 -> 0 bytes ...OKiLJc3WVjuplzOgdm0LZdjqr5-oayXSOefg.woff2 | Bin 16276 -> 0 bytes .../static/plugins/google-cache/open-sans.css | 224 - .../plugins/gritter/css/jquery.gritter.css | 204 +- .../plugins/gritter/js/jquery.gritter.js | 838 +- .../static/plugins/html5shiv/html5shiv.min.js | 6 +- .../static/plugins/jquery/_jquery.min.js | 5 - .../static/plugins/jquery/ajaxfileupload.js | 412 +- .../static/plugins/jquery/jquery-1.12.3.js | 11015 --------- .../plugins/jquery/jquery-1.12.3.min.js | 5 - .../static/plugins/jquery/jquery-2.2.3.js | 19684 ++++++++-------- .../static/plugins/jquery/jquery-2.2.3.min.js | 8 +- .../jquery.mCustomScrollbar.concat.min.js | 5 + .../jquery/jquery.mCustomScrollbar.min.css | 1 + .../static/plugins/jquery/jquery.min.js | 4 - .../plugins/jquery/jquery.mousewheel.min.js | 8 + .../static/plugins/jquery/js.cookie.js | 165 + .../static/{js => plugins/json2}/json2.js | 1038 +- .../teleport/static/plugins/jstree/jstree.js | 7781 ------ .../static/plugins/jstree/jstree.min.js | 5 - .../jstree/themes/default-dark/32px.png | Bin 1562 -> 0 bytes .../jstree/themes/default-dark/40px.png | Bin 5717 -> 0 bytes .../jstree/themes/default-dark/style.css | 1105 - .../jstree/themes/default-dark/style.min.css | 1 - .../jstree/themes/default-dark/throbber.gif | Bin 1720 -> 0 bytes .../plugins/jstree/themes/default/32px.png | Bin 3121 -> 0 bytes .../plugins/jstree/themes/default/40px.png | Bin 1880 -> 0 bytes .../plugins/jstree/themes/default/style.css | 1061 - .../jstree/themes/default/style.min.css | 1 - .../jstree/themes/default/throbber.gif | Bin 1720 -> 0 bytes .../static/plugins/keypress/keypress.js | 2286 +- .../static/plugins/keypress/keypress.min.js | 66 +- .../plugins/underscore/underscore-min.js | 10 +- .../static/plugins/underscore/underscore.js | 3070 +-- .../xterm}/addons/attach/attach.js | 0 .../xterm}/addons/fit/fit.js | 0 .../xterm}/addons/fullscreen/fullscreen.css | 0 .../xterm}/addons/fullscreen/fullscreen.js | 0 .../xterm}/addons/linkify/linkify.js | 0 .../xterm}/addons/terminado/terminado.js | 0 .../{js/common => plugins/xterm}/xterm.css | 46 +- .../{js/common => plugins/xterm}/xterm.js | 1230 +- .../static/plugins/xterm/xterm.js.map | 1 + server/www/teleport/tools/restart.bat | 8 - server/www/teleport/view/_footer.mako | 10 + .../www/teleport/view/_sidebar_nav_menu.mako | 211 + .../view/asset/account-group-info.mako | 152 + .../view/asset/account-group-list.mako | 145 + .../teleport/view/asset/host-group-info.mako | 152 + .../teleport/view/asset/host-group-list.mako | 148 + server/www/teleport/view/asset/host-list.mako | 421 + .../view/{log => audit}/record-sftp-cmd.mako | 45 +- .../view/{log => audit}/record-ssh-cmd.mako | 21 +- server/www/teleport/view/audit/record.mako | 105 + .../{log/record.mako => audit/replay.mako} | 49 +- server/www/teleport/view/auth/login.mako | 149 +- server/www/teleport/view/auth/page_base.mako | 100 - server/www/teleport/view/cert/index.mako | 130 - .../view/common/_sidebar_nav_menu.mako | 170 - server/www/teleport/view/config/index.mako | 114 - server/www/teleport/view/dashboard/index.mako | 45 +- server/www/teleport/view/error/error.mako | 47 + server/www/teleport/view/group/index.mako | 110 - .../www/teleport/view/host/admin_index.mako | 384 - server/www/teleport/view/host/user_index.mako | 115 - server/www/teleport/view/log/index.mako | 100 - .../www/teleport/view/maintenance/index.mako | 138 +- .../teleport/view/maintenance/install.mako | 305 +- server/www/teleport/view/ops/auz-info.mako | 552 + server/www/teleport/view/ops/auz-list.mako | 141 + server/www/teleport/view/ops/remote-list.mako | 80 + server/www/teleport/view/ops/sessions.mako | 62 + server/www/teleport/view/page_base.mako | 162 +- server/www/teleport/view/page_login_base.mako | 96 + .../teleport/view/page_maintenance_base.mako | 116 +- .../teleport/view/page_no_sidebar_base.mako | 32 +- .../www/teleport/view/page_single_base.mako | 68 + server/www/teleport/view/pwd/index.mako | 67 - server/www/teleport/view/system/config.mako | 345 + server/www/teleport/view/system/role.mako | 142 + server/www/teleport/view/system/syslog.mako | 63 + .../view/uidesign/_sidebar_nav_menu.mako | 110 - server/www/teleport/view/uidesign/index.mako | 126 - server/www/teleport/view/uidesign/table.mako | 126 - .../view/uidesign/without-sidebar.mako | 119 - server/www/teleport/view/user/auth.mako | 222 - server/www/teleport/view/user/index.mako | 131 - .../view/user/{personal.mako => me.mako} | 55 +- .../teleport/view/user/user-group-info.mako | 151 + .../teleport/view/user/user-group-list.mako | 141 + server/www/teleport/view/user/user-list.mako | 335 + .../{app/eom_app => webroot/app}/__init__.py | 3 +- .../eom_env.py => webroot/app/app_env.py} | 20 +- .../eom_ver.py => webroot/app/app_ver.py} | 2 +- .../database => webroot/app/base}/__init__.py | 3 +- .../app => webroot/app/base}/configs.py | 197 +- .../teleport/webroot/app/base/controller.py | 161 + .../teleport/webroot/app/base/core_server.py | 61 + .../webroot/app/base/database/__init__.py | 2 + .../webroot/app/base/database/create.py | 748 + .../app/base}/database/export.py | 2 - .../app/base}/database/upgrade.py | 2 +- .../eom_app/app => webroot/app/base}/db.py | 475 +- .../eomcore => webroot/app/base}/logger.py | 129 +- server/www/teleport/webroot/app/base/mail.py | 151 + .../app => webroot/app/base}/session.py | 42 +- .../eomcore => webroot/app/base}/utils.py | 373 +- .../core.py => webroot/app/base/webapp.py} | 80 +- server/www/teleport/webroot/app/const.py | 206 + .../webroot/app/controller/__init__.py | 240 + .../webroot/app/controller/account.py | 307 + .../teleport/webroot/app/controller/audit.py | 277 + .../teleport/webroot/app/controller/auth.py | 312 + .../webroot/app/controller/dashboard.py | 9 + .../teleport/webroot/app/controller/group.py | 205 + .../teleport/webroot/app/controller/host.py | 1310 + .../teleport/webroot/app/controller/index.py | 32 + .../app}/controller/maintenance.py | 64 +- .../teleport/webroot/app/controller/ops.py | 663 + .../app}/controller/record.py | 42 +- .../teleport/webroot/app/controller/rpc.py | 133 + .../teleport/webroot/app/controller/system.py | 198 + .../teleport/webroot/app/controller/user.py | 825 + .../module => webroot/app/logic}/__init__.py | 3 +- .../app/logic/auth}/__init__.py | 3 +- .../webroot/app/logic/auth/captcha.py | 57 + .../app => webroot/app/logic/auth}/oath.py | 61 +- .../webroot/app/logic/auth/password.py | 54 + .../teleport/webroot/app/model/__init__.py | 2 + .../www/teleport/webroot/app/model/account.py | 349 + .../www/teleport/webroot/app/model/group.py | 315 + server/www/teleport/webroot/app/model/host.py | 349 + server/www/teleport/webroot/app/model/ops.py | 904 + .../www/teleport/webroot/app/model/record.py | 310 + .../www/teleport/webroot/app/model/syslog.py | 69 + .../set.py => webroot/app/model/system.py} | 29 +- server/www/teleport/webroot/app/model/user.py | 616 + 494 files changed, 87356 insertions(+), 64150 deletions(-) delete mode 100644 server/www/packages/packages-common/pymemcache/__init__.py delete mode 100644 server/www/packages/packages-common/pymemcache/client/__init__.py delete mode 100644 server/www/packages/packages-common/pymemcache/client/base.py delete mode 100644 server/www/packages/packages-common/pymemcache/client/hash.py delete mode 100644 server/www/packages/packages-common/pymemcache/client/murmur3.py delete mode 100644 server/www/packages/packages-common/pymemcache/client/rendezvous.py delete mode 100644 server/www/packages/packages-common/pymemcache/exceptions.py delete mode 100644 server/www/packages/packages-common/pymemcache/fallback.py delete mode 100644 server/www/packages/packages-common/pymemcache/pool.py delete mode 100644 server/www/packages/packages-common/pymemcache/serde.py delete mode 100644 server/www/packages/packages-common/rsa/__init__.py delete mode 100644 server/www/packages/packages-common/rsa/_compat.py delete mode 100644 server/www/packages/packages-common/rsa/_version133.py delete mode 100644 server/www/packages/packages-common/rsa/_version200.py delete mode 100644 server/www/packages/packages-common/rsa/asn1.py delete mode 100644 server/www/packages/packages-common/rsa/bigfile.py delete mode 100644 server/www/packages/packages-common/rsa/cli.py delete mode 100644 server/www/packages/packages-common/rsa/common.py delete mode 100644 server/www/packages/packages-common/rsa/core.py delete mode 100644 server/www/packages/packages-common/rsa/key.py delete mode 100644 server/www/packages/packages-common/rsa/parallel.py delete mode 100644 server/www/packages/packages-common/rsa/pem.py delete mode 100644 server/www/packages/packages-common/rsa/pkcs1.py delete mode 100644 server/www/packages/packages-common/rsa/prime.py delete mode 100644 server/www/packages/packages-common/rsa/randnum.py delete mode 100644 server/www/packages/packages-common/rsa/transform.py delete mode 100644 server/www/packages/packages-common/rsa/util.py delete mode 100644 server/www/packages/packages-common/rsa/varblock.py create mode 100644 server/www/packages/packages-common/tornado/routing.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/.dylibs/libfreetype.6.dylib create mode 100644 server/www/packages/packages-darwin/x64/PIL/.dylibs/libjpeg.9.dylib create mode 100644 server/www/packages/packages-darwin/x64/PIL/.dylibs/liblcms2.2.dylib create mode 100644 server/www/packages/packages-darwin/x64/PIL/.dylibs/libpng16.16.dylib create mode 100644 server/www/packages/packages-darwin/x64/PIL/.dylibs/libtiff.5.dylib create mode 100644 server/www/packages/packages-darwin/x64/PIL/.dylibs/libwebp.5.dylib create mode 100644 server/www/packages/packages-darwin/x64/PIL/.dylibs/libwebpdemux.1.dylib create mode 100644 server/www/packages/packages-darwin/x64/PIL/.dylibs/libwebpmux.1.dylib create mode 100644 server/www/packages/packages-darwin/x64/PIL/.dylibs/libz.1.2.8.dylib create mode 100644 server/www/packages/packages-darwin/x64/PIL/BdfFontFile.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/BmpImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/BufrStubImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ContainerIO.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/CurImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/DcxImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/EpsImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ExifTags.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/FitsStubImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/FliImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/FontFile.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/FpxImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/GbrImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/GdImageFile.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/GifImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/GimpGradientFile.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/GimpPaletteFile.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/GribStubImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/Hdf5StubImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/IcnsImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/IcoImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/Image.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageChops.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageCms.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageColor.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageDraw.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageDraw2.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageEnhance.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageFile.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageFilter.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageFont.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageGrab.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageMath.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageMode.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageMorph.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageOps.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImagePalette.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImagePath.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageQt.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageSequence.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageShow.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageStat.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageTk.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageTransform.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImageWin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/ImtImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/IptcImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/Jpeg2KImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/JpegImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/JpegPresets.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/McIdasImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/MicImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/MpegImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/MpoImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/MspImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/OleFileIO-README.md create mode 100644 server/www/packages/packages-darwin/x64/PIL/OleFileIO.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/PSDraw.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/PaletteFile.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/PalmImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/PcdImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/PcfFontFile.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/PcxImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/PdfImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/PixarImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/PngImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/PpmImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/PsdImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/PyAccess.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/SgiImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/SpiderImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/SunImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/TarIO.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/TgaImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/TiffImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/TiffTags.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/WalImageFile.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/WebPImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/WmfImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/XVThumbImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/XbmImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/XpmImagePlugin.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/__init__.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/_binary.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/_imaging.cpython-35m-darwin.so create mode 100644 server/www/packages/packages-darwin/x64/PIL/_imagingcms.cpython-35m-darwin.so create mode 100644 server/www/packages/packages-darwin/x64/PIL/_imagingft.cpython-35m-darwin.so create mode 100644 server/www/packages/packages-darwin/x64/PIL/_imagingmath.cpython-35m-darwin.so create mode 100644 server/www/packages/packages-darwin/x64/PIL/_imagingmorph.cpython-35m-darwin.so create mode 100644 server/www/packages/packages-darwin/x64/PIL/_imagingtk.cpython-35m-darwin.so create mode 100644 server/www/packages/packages-darwin/x64/PIL/_util.py create mode 100644 server/www/packages/packages-darwin/x64/PIL/_webp.cpython-35m-darwin.so create mode 100644 server/www/packages/packages-darwin/x64/PIL/features.py delete mode 100644 server/www/teleport/app/eom_app/app/__init__.py delete mode 100644 server/www/teleport/app/eom_app/app/const.py delete mode 100644 server/www/teleport/app/eom_app/app/database/create.py delete mode 100644 server/www/teleport/app/eom_app/app/util.py delete mode 100644 server/www/teleport/app/eom_app/controller/__init__.py delete mode 100644 server/www/teleport/app/eom_app/controller/auth.py delete mode 100644 server/www/teleport/app/eom_app/controller/base.py delete mode 100644 server/www/teleport/app/eom_app/controller/cert.py delete mode 100644 server/www/teleport/app/eom_app/controller/config.py delete mode 100644 server/www/teleport/app/eom_app/controller/dashboard.py delete mode 100644 server/www/teleport/app/eom_app/controller/group.py delete mode 100644 server/www/teleport/app/eom_app/controller/host.py delete mode 100644 server/www/teleport/app/eom_app/controller/index.py delete mode 100644 server/www/teleport/app/eom_app/controller/rpc.py delete mode 100644 server/www/teleport/app/eom_app/controller/user.py delete mode 100644 server/www/teleport/app/eom_app/module/host.py delete mode 100644 server/www/teleport/app/eom_app/module/record.py delete mode 100644 server/www/teleport/app/eom_app/module/user.py delete mode 100644 server/www/teleport/app/eom_common/__init__.py delete mode 100644 server/www/teleport/app/eom_common/eomcore/__init__.py delete mode 100644 server/www/teleport/app/eom_common/eomcore/eom_mysql.py delete mode 100644 server/www/teleport/app/eom_common/eomcore/eom_sqlite.py delete mode 100644 server/www/teleport/app/eom_main.py create mode 100644 server/www/teleport/app_bootstrap.py delete mode 100644 server/www/teleport/static/css/auth.css create mode 100644 server/www/teleport/static/css/dashboard.css.map delete mode 100644 server/www/teleport/static/css/doc.css create mode 100644 server/www/teleport/static/css/error.css create mode 100644 server/www/teleport/static/css/error.css.map delete mode 100644 server/www/teleport/static/css/img/desktop/icons-tree-24x24.png delete mode 100644 server/www/teleport/static/css/img/desktop/mimetype-16.png delete mode 100644 server/www/teleport/static/css/img/loading_01.gif create mode 100644 server/www/teleport/static/css/login.css create mode 100644 server/www/teleport/static/css/login.css.map delete mode 100644 server/www/teleport/static/css/main.css create mode 100644 server/www/teleport/static/css/maintenance.css create mode 100644 server/www/teleport/static/css/maintenance.css.map create mode 100644 server/www/teleport/static/css/single.css create mode 100644 server/www/teleport/static/css/single.css.map create mode 100644 server/www/teleport/static/css/style.css create mode 100644 server/www/teleport/static/css/style.css.map delete mode 100644 server/www/teleport/static/css/sub.css delete mode 100644 server/www/teleport/static/download/example.csv create mode 100644 server/www/teleport/static/download/teleport-example-asset.csv create mode 100644 server/www/teleport/static/download/teleport-example-user.csv create mode 100644 server/www/teleport/static/img/css/disable-bg.png delete mode 100644 server/www/teleport/static/img/login/input_right_clean.png create mode 100644 server/www/teleport/static/img/login/login-bg-0.png create mode 100644 server/www/teleport/static/img/login/login-bg-1.png create mode 100644 server/www/teleport/static/img/login/login-bg-2.png create mode 100644 server/www/teleport/static/img/login/login-bg-3.png create mode 100644 server/www/teleport/static/img/login/login-bg-4.png create mode 100644 server/www/teleport/static/img/login/login-bg-5.png create mode 100644 server/www/teleport/static/img/login/login-bg-6.png create mode 100644 server/www/teleport/static/img/login/login-bg-7.png delete mode 100644 server/www/teleport/static/img/login/side-001.jpg create mode 100644 server/www/teleport/static/js/asset/account-group-info.js create mode 100644 server/www/teleport/static/js/asset/account-group-list.js create mode 100644 server/www/teleport/static/js/asset/host-group-info.js create mode 100644 server/www/teleport/static/js/asset/host-group-list.js create mode 100644 server/www/teleport/static/js/asset/host-list.js create mode 100644 server/www/teleport/static/js/audit/record-list.js create mode 100644 server/www/teleport/static/js/audit/replay.js create mode 100644 server/www/teleport/static/js/auth/login.js delete mode 100644 server/www/teleport/static/js/common/xterm.js.map create mode 100644 server/www/teleport/static/js/maintenance/install.js create mode 100644 server/www/teleport/static/js/ops/auz-info.js create mode 100644 server/www/teleport/static/js/ops/auz-list.js create mode 100644 server/www/teleport/static/js/ops/remote-list.js create mode 100644 server/www/teleport/static/js/ops/session-list.js create mode 100644 server/www/teleport/static/js/system/config.js create mode 100644 server/www/teleport/static/js/system/role.js create mode 100644 server/www/teleport/static/js/system/syslog.js create mode 100644 server/www/teleport/static/js/teleport.js rename server/www/teleport/static/js/{ui => teleport}/common.js (69%) create mode 100644 server/www/teleport/static/js/teleport/controls.js rename server/www/teleport/static/js/{ui/teleport.js => tp-assist.js} (60%) create mode 100644 server/www/teleport/static/js/tp-const.js rename server/www/teleport/static/js/{ywl_common.js => tp-utils.js} (65%) delete mode 100644 server/www/teleport/static/js/ui/auth.js delete mode 100644 server/www/teleport/static/js/ui/auth/login.js delete mode 100644 server/www/teleport/static/js/ui/cert.js delete mode 100644 server/www/teleport/static/js/ui/config/info.js delete mode 100644 server/www/teleport/static/js/ui/controls.js delete mode 100644 server/www/teleport/static/js/ui/group.js delete mode 100644 server/www/teleport/static/js/ui/host/admin.js delete mode 100644 server/www/teleport/static/js/ui/host/user.js delete mode 100644 server/www/teleport/static/js/ui/log.js delete mode 100644 server/www/teleport/static/js/ui/pwd.js delete mode 100644 server/www/teleport/static/js/ui/record.js delete mode 100644 server/www/teleport/static/js/ui/user.js delete mode 100644 server/www/teleport/static/js/ui/user/personal.js create mode 100644 server/www/teleport/static/js/user/me.js create mode 100644 server/www/teleport/static/js/user/user-group-info.js create mode 100644 server/www/teleport/static/js/user/user-group-list.js create mode 100644 server/www/teleport/static/js/user/user-list.js delete mode 100644 server/www/teleport/static/js/ywl.js delete mode 100644 server/www/teleport/static/js/ywl_assist.js delete mode 100644 server/www/teleport/static/js/ywl_const.js delete mode 100644 server/www/teleport/static/less/_gritter.less delete mode 100644 server/www/teleport/static/less/_mimetype.less create mode 100644 server/www/teleport/static/less/_overwrite_bootstrap.less create mode 100644 server/www/teleport/static/less/_overwrite_gritter.less create mode 100644 server/www/teleport/static/less/_role.less delete mode 100644 server/www/teleport/static/less/auth.less delete mode 100644 server/www/teleport/static/less/doc.less create mode 100644 server/www/teleport/static/less/error.less create mode 100644 server/www/teleport/static/less/login.less delete mode 100644 server/www/teleport/static/less/main.less create mode 100644 server/www/teleport/static/less/maintenance.less rename server/www/teleport/static/less/{sub.less => single.less} (99%) create mode 100644 server/www/teleport/static/less/style.less create mode 100644 server/www/teleport/static/plugins/blur/background-blur.js create mode 100644 server/www/teleport/static/plugins/blur/velocity.min.js delete mode 100644 server/www/teleport/static/plugins/bootstrap-switch/css/bootstrap3/bootstrap-switch.css delete mode 100644 server/www/teleport/static/plugins/bootstrap-switch/css/bootstrap3/bootstrap-switch.min.css delete mode 100644 server/www/teleport/static/plugins/bootstrap-switch/js/bootstrap-switch.js delete mode 100644 server/www/teleport/static/plugins/bootstrap-switch/js/bootstrap-switch.min.js create mode 100644 server/www/teleport/static/plugins/bootstrap/css/bootstrap-theme.css create mode 100644 server/www/teleport/static/plugins/bootstrap/css/bootstrap-theme.css.map create mode 100644 server/www/teleport/static/plugins/bootstrap/css/bootstrap-theme.min.css create mode 100644 server/www/teleport/static/plugins/bootstrap/css/bootstrap-theme.min.css.map create mode 100644 server/www/teleport/static/plugins/bootstrap/css/bootstrap.css create mode 100644 server/www/teleport/static/plugins/bootstrap/css/bootstrap.css.map create mode 100644 server/www/teleport/static/plugins/bootstrap/js/bootstrap.js create mode 100644 server/www/teleport/static/plugins/bootstrap/js/npm.js delete mode 100644 server/www/teleport/static/plugins/google-cache/fonts/DXI1ORHCpsQm3Vp6mXoaTegdm0LZdjqr5-oayXSOefg.woff2 delete mode 100644 server/www/teleport/static/plugins/google-cache/fonts/cJZKeOuBrn4kERxqtaUH3VtXRa8TVwTICgirnJhmVJw.woff2 delete mode 100644 server/www/teleport/static/plugins/google-cache/fonts/k3k702ZOKiLJc3WVjuplzOgdm0LZdjqr5-oayXSOefg.woff2 delete mode 100644 server/www/teleport/static/plugins/google-cache/open-sans.css delete mode 100644 server/www/teleport/static/plugins/jquery/_jquery.min.js delete mode 100644 server/www/teleport/static/plugins/jquery/jquery-1.12.3.js delete mode 100644 server/www/teleport/static/plugins/jquery/jquery-1.12.3.min.js create mode 100644 server/www/teleport/static/plugins/jquery/jquery.mCustomScrollbar.concat.min.js create mode 100644 server/www/teleport/static/plugins/jquery/jquery.mCustomScrollbar.min.css delete mode 100644 server/www/teleport/static/plugins/jquery/jquery.min.js create mode 100644 server/www/teleport/static/plugins/jquery/jquery.mousewheel.min.js create mode 100644 server/www/teleport/static/plugins/jquery/js.cookie.js rename server/www/teleport/static/{js => plugins/json2}/json2.js (97%) delete mode 100644 server/www/teleport/static/plugins/jstree/jstree.js delete mode 100644 server/www/teleport/static/plugins/jstree/jstree.min.js delete mode 100644 server/www/teleport/static/plugins/jstree/themes/default-dark/32px.png delete mode 100644 server/www/teleport/static/plugins/jstree/themes/default-dark/40px.png delete mode 100644 server/www/teleport/static/plugins/jstree/themes/default-dark/style.css delete mode 100644 server/www/teleport/static/plugins/jstree/themes/default-dark/style.min.css delete mode 100644 server/www/teleport/static/plugins/jstree/themes/default-dark/throbber.gif delete mode 100644 server/www/teleport/static/plugins/jstree/themes/default/32px.png delete mode 100644 server/www/teleport/static/plugins/jstree/themes/default/40px.png delete mode 100644 server/www/teleport/static/plugins/jstree/themes/default/style.css delete mode 100644 server/www/teleport/static/plugins/jstree/themes/default/style.min.css delete mode 100644 server/www/teleport/static/plugins/jstree/themes/default/throbber.gif rename server/www/teleport/static/{js/common => plugins/xterm}/addons/attach/attach.js (100%) rename server/www/teleport/static/{js/common => plugins/xterm}/addons/fit/fit.js (100%) rename server/www/teleport/static/{js/common => plugins/xterm}/addons/fullscreen/fullscreen.css (100%) rename server/www/teleport/static/{js/common => plugins/xterm}/addons/fullscreen/fullscreen.js (100%) rename server/www/teleport/static/{js/common => plugins/xterm}/addons/linkify/linkify.js (100%) rename server/www/teleport/static/{js/common => plugins/xterm}/addons/terminado/terminado.js (100%) rename server/www/teleport/static/{js/common => plugins/xterm}/xterm.css (96%) rename server/www/teleport/static/{js/common => plugins/xterm}/xterm.js (83%) create mode 100644 server/www/teleport/static/plugins/xterm/xterm.js.map delete mode 100644 server/www/teleport/tools/restart.bat create mode 100644 server/www/teleport/view/_footer.mako create mode 100644 server/www/teleport/view/_sidebar_nav_menu.mako create mode 100644 server/www/teleport/view/asset/account-group-info.mako create mode 100644 server/www/teleport/view/asset/account-group-list.mako create mode 100644 server/www/teleport/view/asset/host-group-info.mako create mode 100644 server/www/teleport/view/asset/host-group-list.mako create mode 100644 server/www/teleport/view/asset/host-list.mako rename server/www/teleport/view/{log => audit}/record-sftp-cmd.mako (66%) rename server/www/teleport/view/{log => audit}/record-ssh-cmd.mako (75%) create mode 100644 server/www/teleport/view/audit/record.mako rename server/www/teleport/view/{log/record.mako => audit/replay.mako} (51%) delete mode 100644 server/www/teleport/view/auth/page_base.mako delete mode 100644 server/www/teleport/view/cert/index.mako delete mode 100644 server/www/teleport/view/common/_sidebar_nav_menu.mako delete mode 100644 server/www/teleport/view/config/index.mako create mode 100644 server/www/teleport/view/error/error.mako delete mode 100644 server/www/teleport/view/group/index.mako delete mode 100644 server/www/teleport/view/host/admin_index.mako delete mode 100644 server/www/teleport/view/host/user_index.mako delete mode 100644 server/www/teleport/view/log/index.mako create mode 100644 server/www/teleport/view/ops/auz-info.mako create mode 100644 server/www/teleport/view/ops/auz-list.mako create mode 100644 server/www/teleport/view/ops/remote-list.mako create mode 100644 server/www/teleport/view/ops/sessions.mako create mode 100644 server/www/teleport/view/page_login_base.mako create mode 100644 server/www/teleport/view/page_single_base.mako delete mode 100644 server/www/teleport/view/pwd/index.mako create mode 100644 server/www/teleport/view/system/config.mako create mode 100644 server/www/teleport/view/system/role.mako create mode 100644 server/www/teleport/view/system/syslog.mako delete mode 100644 server/www/teleport/view/uidesign/_sidebar_nav_menu.mako delete mode 100644 server/www/teleport/view/uidesign/index.mako delete mode 100644 server/www/teleport/view/uidesign/table.mako delete mode 100644 server/www/teleport/view/uidesign/without-sidebar.mako delete mode 100644 server/www/teleport/view/user/auth.mako delete mode 100644 server/www/teleport/view/user/index.mako rename server/www/teleport/view/user/{personal.mako => me.mako} (85%) create mode 100644 server/www/teleport/view/user/user-group-info.mako create mode 100644 server/www/teleport/view/user/user-group-list.mako create mode 100644 server/www/teleport/view/user/user-list.mako rename server/www/teleport/{app/eom_app => webroot/app}/__init__.py (96%) rename server/www/teleport/{app/eom_env.py => webroot/app/app_env.py} (60%) rename server/www/teleport/{app/eom_ver.py => webroot/app/app_ver.py} (73%) rename server/www/teleport/{app/eom_app/app/database => webroot/app/base}/__init__.py (96%) rename server/www/teleport/{app/eom_app/app => webroot/app/base}/configs.py (75%) create mode 100644 server/www/teleport/webroot/app/base/controller.py create mode 100644 server/www/teleport/webroot/app/base/core_server.py create mode 100644 server/www/teleport/webroot/app/base/database/__init__.py create mode 100644 server/www/teleport/webroot/app/base/database/create.py rename server/www/teleport/{app/eom_app/app => webroot/app/base}/database/export.py (94%) rename server/www/teleport/{app/eom_app/app => webroot/app/base}/database/upgrade.py (97%) rename server/www/teleport/{app/eom_app/app => webroot/app/base}/db.py (58%) rename server/www/teleport/{app/eom_common/eomcore => webroot/app/base}/logger.py (88%) create mode 100644 server/www/teleport/webroot/app/base/mail.py rename server/www/teleport/{app/eom_app/app => webroot/app/base}/session.py (74%) rename server/www/teleport/{app/eom_common/eomcore => webroot/app/base}/utils.py (72%) rename server/www/teleport/{app/eom_app/app/core.py => webroot/app/base/webapp.py} (61%) create mode 100644 server/www/teleport/webroot/app/const.py create mode 100644 server/www/teleport/webroot/app/controller/__init__.py create mode 100644 server/www/teleport/webroot/app/controller/account.py create mode 100644 server/www/teleport/webroot/app/controller/audit.py create mode 100644 server/www/teleport/webroot/app/controller/auth.py create mode 100644 server/www/teleport/webroot/app/controller/dashboard.py create mode 100644 server/www/teleport/webroot/app/controller/group.py create mode 100644 server/www/teleport/webroot/app/controller/host.py create mode 100644 server/www/teleport/webroot/app/controller/index.py rename server/www/teleport/{app/eom_app => webroot/app}/controller/maintenance.py (75%) create mode 100644 server/www/teleport/webroot/app/controller/ops.py rename server/www/teleport/{app/eom_app => webroot/app}/controller/record.py (84%) create mode 100644 server/www/teleport/webroot/app/controller/rpc.py create mode 100644 server/www/teleport/webroot/app/controller/system.py create mode 100644 server/www/teleport/webroot/app/controller/user.py rename server/www/teleport/{app/eom_app/module => webroot/app/logic}/__init__.py (96%) rename server/www/teleport/{app => webroot/app/logic/auth}/__init__.py (96%) create mode 100644 server/www/teleport/webroot/app/logic/auth/captcha.py rename server/www/teleport/{app/eom_app/app => webroot/app/logic/auth}/oath.py (81%) create mode 100644 server/www/teleport/webroot/app/logic/auth/password.py create mode 100644 server/www/teleport/webroot/app/model/__init__.py create mode 100644 server/www/teleport/webroot/app/model/account.py create mode 100644 server/www/teleport/webroot/app/model/group.py create mode 100644 server/www/teleport/webroot/app/model/host.py create mode 100644 server/www/teleport/webroot/app/model/ops.py create mode 100644 server/www/teleport/webroot/app/model/record.py create mode 100644 server/www/teleport/webroot/app/model/syslog.py rename server/www/teleport/{app/eom_app/module/set.py => webroot/app/model/system.py} (52%) create mode 100644 server/www/teleport/webroot/app/model/user.py diff --git a/server/www/packages/packages-common/mako/__init__.py b/server/www/packages/packages-common/mako/__init__.py index 74526ec..eaa24dc 100644 --- a/server/www/packages/packages-common/mako/__init__.py +++ b/server/www/packages/packages-common/mako/__init__.py @@ -1,8 +1,8 @@ # mako/__init__.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php -__version__ = '1.0.3' +__version__ = '1.0.6' diff --git a/server/www/packages/packages-common/mako/_ast_util.py b/server/www/packages/packages-common/mako/_ast_util.py index cc298d5..8d19b0d 100644 --- a/server/www/packages/packages-common/mako/_ast_util.py +++ b/server/www/packages/packages-common/mako/_ast_util.py @@ -1,5 +1,5 @@ # mako/_ast_util.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php diff --git a/server/www/packages/packages-common/mako/ast.py b/server/www/packages/packages-common/mako/ast.py index c55b29c..8d2d150 100644 --- a/server/www/packages/packages-common/mako/ast.py +++ b/server/www/packages/packages-common/mako/ast.py @@ -1,5 +1,5 @@ # mako/ast.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php diff --git a/server/www/packages/packages-common/mako/cache.py b/server/www/packages/packages-common/mako/cache.py index c7aabd2..94f3870 100644 --- a/server/www/packages/packages-common/mako/cache.py +++ b/server/www/packages/packages-common/mako/cache.py @@ -1,5 +1,5 @@ # mako/cache.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php diff --git a/server/www/packages/packages-common/mako/cmd.py b/server/www/packages/packages-common/mako/cmd.py index 50d47fc..dd1f833 100644 --- a/server/www/packages/packages-common/mako/cmd.py +++ b/server/www/packages/packages-common/mako/cmd.py @@ -1,5 +1,5 @@ # mako/cmd.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php diff --git a/server/www/packages/packages-common/mako/codegen.py b/server/www/packages/packages-common/mako/codegen.py index bf86d79..d4ecbe8 100644 --- a/server/www/packages/packages-common/mako/codegen.py +++ b/server/www/packages/packages-common/mako/codegen.py @@ -1,5 +1,5 @@ # mako/codegen.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php diff --git a/server/www/packages/packages-common/mako/compat.py b/server/www/packages/packages-common/mako/compat.py index db22b99..a2ab243 100644 --- a/server/www/packages/packages-common/mako/compat.py +++ b/server/www/packages/packages-common/mako/compat.py @@ -5,6 +5,7 @@ py3k = sys.version_info >= (3, 0) py33 = sys.version_info >= (3, 3) py2k = sys.version_info < (3,) py26 = sys.version_info >= (2, 6) +py27 = sys.version_info >= (2, 7) jython = sys.platform.startswith('java') win32 = sys.platform.startswith('win') pypy = hasattr(sys, 'pypy_version_info') diff --git a/server/www/packages/packages-common/mako/exceptions.py b/server/www/packages/packages-common/mako/exceptions.py index 84d2297..cb6fb3f 100644 --- a/server/www/packages/packages-common/mako/exceptions.py +++ b/server/www/packages/packages-common/mako/exceptions.py @@ -1,5 +1,5 @@ # mako/exceptions.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php diff --git a/server/www/packages/packages-common/mako/ext/autohandler.py b/server/www/packages/packages-common/mako/ext/autohandler.py index 9ee780a..9d1c911 100644 --- a/server/www/packages/packages-common/mako/ext/autohandler.py +++ b/server/www/packages/packages-common/mako/ext/autohandler.py @@ -1,5 +1,5 @@ # ext/autohandler.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php diff --git a/server/www/packages/packages-common/mako/ext/babelplugin.py b/server/www/packages/packages-common/mako/ext/babelplugin.py index 53d62ba..0b5e84f 100644 --- a/server/www/packages/packages-common/mako/ext/babelplugin.py +++ b/server/www/packages/packages-common/mako/ext/babelplugin.py @@ -1,5 +1,5 @@ # ext/babelplugin.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php diff --git a/server/www/packages/packages-common/mako/ext/preprocessors.py b/server/www/packages/packages-common/mako/ext/preprocessors.py index 5624f70..9b700d1 100644 --- a/server/www/packages/packages-common/mako/ext/preprocessors.py +++ b/server/www/packages/packages-common/mako/ext/preprocessors.py @@ -1,5 +1,5 @@ # ext/preprocessors.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php diff --git a/server/www/packages/packages-common/mako/ext/pygmentplugin.py b/server/www/packages/packages-common/mako/ext/pygmentplugin.py index 1121c5d..4057caa 100644 --- a/server/www/packages/packages-common/mako/ext/pygmentplugin.py +++ b/server/www/packages/packages-common/mako/ext/pygmentplugin.py @@ -1,5 +1,5 @@ # ext/pygmentplugin.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php diff --git a/server/www/packages/packages-common/mako/ext/turbogears.py b/server/www/packages/packages-common/mako/ext/turbogears.py index 2e7d039..eaa2d78 100644 --- a/server/www/packages/packages-common/mako/ext/turbogears.py +++ b/server/www/packages/packages-common/mako/ext/turbogears.py @@ -1,5 +1,5 @@ # ext/turbogears.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php diff --git a/server/www/packages/packages-common/mako/filters.py b/server/www/packages/packages-common/mako/filters.py index 525aeb8..c082690 100644 --- a/server/www/packages/packages-common/mako/filters.py +++ b/server/www/packages/packages-common/mako/filters.py @@ -1,5 +1,5 @@ # mako/filters.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php diff --git a/server/www/packages/packages-common/mako/lexer.py b/server/www/packages/packages-common/mako/lexer.py index 2fa08e4..cf4187f 100644 --- a/server/www/packages/packages-common/mako/lexer.py +++ b/server/www/packages/packages-common/mako/lexer.py @@ -1,5 +1,5 @@ # mako/lexer.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php @@ -95,31 +95,37 @@ class Lexer(object): # (match and "TRUE" or "FALSE") return match - def parse_until_text(self, *text): + def parse_until_text(self, watch_nesting, *text): startpos = self.match_position text_re = r'|'.join(text) brace_level = 0 + paren_level = 0 + bracket_level = 0 while True: match = self.match(r'#.*\n') if match: continue - match = self.match(r'(\"\"\"|\'\'\'|\"|\')((? 0: - brace_level -= 1 - continue + if match and not (watch_nesting + and (brace_level > 0 or paren_level > 0 + or bracket_level > 0)): return \ self.text[startpos: self.match_position - len(match.group(1))],\ match.group(1) - match = self.match(r"(.*?)(?=\"|\'|#|%s)" % text_re, re.S) + elif not match: + match = self.match(r"(.*?)(?=\"|\'|#|%s)" % text_re, re.S) if match: brace_level += match.group(1).count('{') brace_level -= match.group(1).count('}') + paren_level += match.group(1).count('(') + paren_level -= match.group(1).count(')') + bracket_level += match.group(1).count('[') + bracket_level -= match.group(1).count(']') continue raise exceptions.SyntaxException( "Expected: %s" % @@ -368,7 +374,7 @@ class Lexer(object): match = self.match(r"<%(!)?") if match: line, pos = self.matched_lineno, self.matched_charpos - text, end = self.parse_until_text(r'%>') + text, end = self.parse_until_text(False, r'%>') # the trailing newline helps # compiler.parse() not complain about indentation text = adjust_whitespace(text) + "\n" @@ -384,9 +390,9 @@ class Lexer(object): match = self.match(r"\${") if match: line, pos = self.matched_lineno, self.matched_charpos - text, end = self.parse_until_text(r'\|', r'}') + text, end = self.parse_until_text(True, r'\|', r'}') if end == '|': - escapes, end = self.parse_until_text(r'}') + escapes, end = self.parse_until_text(True, r'}') else: escapes = "" text = text.replace('\r\n', '\n') diff --git a/server/www/packages/packages-common/mako/lookup.py b/server/www/packages/packages-common/mako/lookup.py index 5cfd16c..0d3f304 100644 --- a/server/www/packages/packages-common/mako/lookup.py +++ b/server/www/packages/packages-common/mako/lookup.py @@ -1,5 +1,5 @@ # mako/lookup.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php @@ -96,7 +96,7 @@ class TemplateLookup(TemplateCollection): .. sourcecode:: python lookup = TemplateLookup(["/path/to/templates"]) - some_template = lookup.get_template("/admin_index.mako") + some_template = lookup.get_template("/index.html") The :class:`.TemplateLookup` can also be given :class:`.Template` objects programatically using :meth:`.put_string` or :meth:`.put_template`: @@ -180,7 +180,8 @@ class TemplateLookup(TemplateCollection): enable_loop=True, input_encoding=None, preprocessor=None, - lexer_cls=None): + lexer_cls=None, + include_error_handler=None): self.directories = [posixpath.normpath(d) for d in util.to_list(directories, ()) @@ -203,6 +204,7 @@ class TemplateLookup(TemplateCollection): self.template_args = { 'format_exceptions': format_exceptions, 'error_handler': error_handler, + 'include_error_handler': include_error_handler, 'disable_unicode': disable_unicode, 'bytestring_passthrough': bytestring_passthrough, 'output_encoding': output_encoding, diff --git a/server/www/packages/packages-common/mako/parsetree.py b/server/www/packages/packages-common/mako/parsetree.py index e7af4bc..879882e 100644 --- a/server/www/packages/packages-common/mako/parsetree.py +++ b/server/www/packages/packages-common/mako/parsetree.py @@ -1,5 +1,5 @@ # mako/parsetree.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php diff --git a/server/www/packages/packages-common/mako/pygen.py b/server/www/packages/packages-common/mako/pygen.py index 5d87bbd..8514e02 100644 --- a/server/www/packages/packages-common/mako/pygen.py +++ b/server/www/packages/packages-common/mako/pygen.py @@ -1,5 +1,5 @@ # mako/pygen.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php diff --git a/server/www/packages/packages-common/mako/pyparser.py b/server/www/packages/packages-common/mako/pyparser.py index 96e5335..15d0da6 100644 --- a/server/www/packages/packages-common/mako/pyparser.py +++ b/server/www/packages/packages-common/mako/pyparser.py @@ -1,5 +1,5 @@ # mako/pyparser.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php diff --git a/server/www/packages/packages-common/mako/runtime.py b/server/www/packages/packages-common/mako/runtime.py index 8d2f4a9..769541c 100644 --- a/server/www/packages/packages-common/mako/runtime.py +++ b/server/www/packages/packages-common/mako/runtime.py @@ -1,5 +1,5 @@ # mako/runtime.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php @@ -749,7 +749,16 @@ def _include_file(context, uri, calling_uri, **kwargs): (callable_, ctx) = _populate_self_namespace( context._clean_inheritance_tokens(), template) - callable_(ctx, **_kwargs_for_include(callable_, context._data, **kwargs)) + kwargs = _kwargs_for_include(callable_, context._data, **kwargs) + if template.include_error_handler: + try: + callable_(ctx, **kwargs) + except Exception: + result = template.include_error_handler(ctx, compat.exception_as()) + if not result: + compat.reraise(*sys.exc_info()) + else: + callable_(ctx, **kwargs) def _inherit_from(context, uri, calling_uri): diff --git a/server/www/packages/packages-common/mako/template.py b/server/www/packages/packages-common/mako/template.py index facb7e5..c3e0c25 100644 --- a/server/www/packages/packages-common/mako/template.py +++ b/server/www/packages/packages-common/mako/template.py @@ -1,5 +1,5 @@ # mako/template.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php @@ -109,6 +109,11 @@ class Template(object): completes. Is used to provide custom error-rendering functions. + .. seealso:: + + :paramref:`.Template.include_error_handler` - include-specific + error handler function + :param format_exceptions: if ``True``, exceptions which occur during the render phase of this template will be caught and formatted into an HTML error page, which then becomes the @@ -129,6 +134,16 @@ class Template(object): import will not appear as the first executed statement in the generated code and will therefore not have the desired effect. + :param include_error_handler: An error handler that runs when this template + is included within another one via the ``<%include>`` tag, and raises an + error. Compare to the :paramref:`.Template.error_handler` option. + + .. versionadded:: 1.0.6 + + .. seealso:: + + :paramref:`.Template.error_handler` - top-level error handler function + :param input_encoding: Encoding of the template's source code. Can be used in lieu of the coding comment. See :ref:`usage_unicode` as well as :ref:`unicode_toplevel` for @@ -171,7 +186,7 @@ class Template(object): from mako.template import Template mytemplate = Template( - filename="admin_index.mako", + filename="index.html", module_directory="/path/to/modules", module_writer=module_writer ) @@ -243,7 +258,8 @@ class Template(object): future_imports=None, enable_loop=True, preprocessor=None, - lexer_cls=None): + lexer_cls=None, + include_error_handler=None): if uri: self.module_id = re.sub(r'\W', "_", uri) self.uri = uri @@ -329,6 +345,7 @@ class Template(object): self.callable_ = self.module.render_body self.format_exceptions = format_exceptions self.error_handler = error_handler + self.include_error_handler = include_error_handler self.lookup = lookup self.module_directory = module_directory @@ -475,6 +492,14 @@ class Template(object): return DefTemplate(self, getattr(self.module, "render_%s" % name)) + def list_defs(self): + """return a list of defs in the template. + + .. versionadded:: 1.0.4 + + """ + return [i[7:] for i in dir(self.module) if i[:7] == 'render_'] + def _get_def_callable(self, name): return getattr(self.module, "render_%s" % name) @@ -520,6 +545,7 @@ class ModuleTemplate(Template): cache_type=None, cache_dir=None, cache_url=None, + include_error_handler=None, ): self.module_id = re.sub(r'\W', "_", module._template_uri) self.uri = module._template_uri @@ -551,6 +577,7 @@ class ModuleTemplate(Template): self.callable_ = self.module.render_body self.format_exceptions = format_exceptions self.error_handler = error_handler + self.include_error_handler = include_error_handler self.lookup = lookup self._setup_cache_args( cache_impl, cache_enabled, cache_args, @@ -571,6 +598,7 @@ class DefTemplate(Template): self.encoding_errors = parent.encoding_errors self.format_exceptions = parent.format_exceptions self.error_handler = parent.error_handler + self.include_error_handler = parent.include_error_handler self.enable_loop = parent.enable_loop self.lookup = parent.lookup self.bytestring_passthrough = parent.bytestring_passthrough diff --git a/server/www/packages/packages-common/mako/util.py b/server/www/packages/packages-common/mako/util.py index c7dad65..2f089ff 100644 --- a/server/www/packages/packages-common/mako/util.py +++ b/server/www/packages/packages-common/mako/util.py @@ -1,5 +1,5 @@ # mako/util.py -# Copyright (C) 2006-2015 the Mako authors and contributors +# Copyright (C) 2006-2016 the Mako authors and contributors # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php diff --git a/server/www/packages/packages-common/pymemcache/__init__.py b/server/www/packages/packages-common/pymemcache/__init__.py deleted file mode 100644 index 5b8f37a..0000000 --- a/server/www/packages/packages-common/pymemcache/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__version__ = '1.3.5' diff --git a/server/www/packages/packages-common/pymemcache/client/__init__.py b/server/www/packages/packages-common/pymemcache/client/__init__.py deleted file mode 100644 index a6ff93b..0000000 --- a/server/www/packages/packages-common/pymemcache/client/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -# API Backwards compatibility - -from pymemcache.client.base import Client # noqa -from pymemcache.client.base import PooledClient # noqa - -from pymemcache.exceptions import MemcacheError # noqa -from pymemcache.exceptions import MemcacheClientError # noqa -from pymemcache.exceptions import MemcacheUnknownCommandError # noqa -from pymemcache.exceptions import MemcacheIllegalInputError # noqa -from pymemcache.exceptions import MemcacheServerError # noqa -from pymemcache.exceptions import MemcacheUnknownError # noqa -from pymemcache.exceptions import MemcacheUnexpectedCloseError # noqa diff --git a/server/www/packages/packages-common/pymemcache/client/base.py b/server/www/packages/packages-common/pymemcache/client/base.py deleted file mode 100644 index 4eab540..0000000 --- a/server/www/packages/packages-common/pymemcache/client/base.py +++ /dev/null @@ -1,1095 +0,0 @@ -# Copyright 2012 Pinterest.com -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -__author__ = "Charles Gordon" - -import errno -import socket -import six - -from pymemcache import pool - -from pymemcache.exceptions import ( - MemcacheClientError, - MemcacheUnknownCommandError, - MemcacheIllegalInputError, - MemcacheServerError, - MemcacheUnknownError, - MemcacheUnexpectedCloseError -) - - -RECV_SIZE = 4096 -VALID_STORE_RESULTS = { - b'set': (b'STORED',), - b'add': (b'STORED', b'NOT_STORED'), - b'replace': (b'STORED', b'NOT_STORED'), - b'append': (b'STORED', b'NOT_STORED'), - b'prepend': (b'STORED', b'NOT_STORED'), - b'cas': (b'STORED', b'EXISTS', b'NOT_FOUND'), -} - - -# Some of the values returned by the "stats" command -# need mapping into native Python types -STAT_TYPES = { - # General stats - b'version': six.binary_type, - b'rusage_user': lambda value: float(value.replace(b':', b'.')), - b'rusage_system': lambda value: float(value.replace(b':', b'.')), - b'hash_is_expanding': lambda value: int(value) != 0, - b'slab_reassign_running': lambda value: int(value) != 0, - - # Settings stats - b'inter': six.binary_type, - b'evictions': lambda value: value == b'on', - b'growth_factor': float, - b'stat_key_prefix': six.binary_type, - b'umask': lambda value: int(value, 8), - b'detail_enabled': lambda value: int(value) != 0, - b'cas_enabled': lambda value: int(value) != 0, - b'auth_enabled_sasl': lambda value: value == b'yes', - b'maxconns_fast': lambda value: int(value) != 0, - b'slab_reassign': lambda value: int(value) != 0, - b'slab_automove': lambda value: int(value) != 0, -} - -# Common helper functions. - - -def _check_key(key, key_prefix=b''): - """Checks key and add key_prefix.""" - if isinstance(key, six.text_type): - try: - key = key.encode('ascii') - except UnicodeEncodeError: - raise MemcacheIllegalInputError("No ascii key: %r" % (key,)) - key = key_prefix + key - if b' ' in key: - raise MemcacheIllegalInputError("Key contains spaces: %r" % (key,)) - if len(key) > 250: - raise MemcacheIllegalInputError("Key is too long: %r" % (key,)) - return key - - -class Client(object): - """ - A client for a single memcached server. - - *Keys and Values* - - Keys must have a __str__() method which should return a str with no more - than 250 ASCII characters and no whitespace or control characters. Unicode - strings must be encoded (as UTF-8, for example) unless they consist only - of ASCII characters that are neither whitespace nor control characters. - - Values must have a __str__() method to convert themselves to a byte - string. Unicode objects can be a problem since str() on a Unicode object - will attempt to encode it as ASCII (which will fail if the value contains - code points larger than U+127). You can fix this with a serializer or by - just calling encode on the string (using UTF-8, for instance). - - If you intend to use anything but str as a value, it is a good idea to use - a serializer and deserializer. The pymemcache.serde library has some - already implemented serializers, including one that is compatible with - the python-memcache library. - - *Serialization and Deserialization* - - The constructor takes two optional functions, one for "serialization" of - values, and one for "deserialization". The serialization function takes - two arguments, a key and a value, and returns a tuple of two elements, the - serialized value, and an integer in the range 0-65535 (the "flags"). The - deserialization function takes three parameters, a key, value and flags - and returns the deserialized value. - - Here is an example using JSON for non-str values: - - .. code-block:: python - - def serialize_json(key, value): - if type(value) == str: - return value, 1 - return json.dumps(value), 2 - - def deserialize_json(key, value, flags): - if flags == 1: - return value - - if flags == 2: - return json.loads(value) - - raise Exception("Unknown flags for value: {1}".format(flags)) - - *Error Handling* - - All of the methods in this class that talk to memcached can throw one of - the following exceptions: - - * MemcacheUnknownCommandError - * MemcacheClientError - * MemcacheServerError - * MemcacheUnknownError - * MemcacheUnexpectedCloseError - * MemcacheIllegalInputError - * socket.timeout - * socket.error - - Instances of this class maintain a persistent connection to memcached - which is terminated when any of these exceptions are raised. The next - call to a method on the object will result in a new connection being made - to memcached. - """ - - def __init__(self, - server, - serializer=None, - deserializer=None, - connect_timeout=None, - timeout=None, - no_delay=False, - ignore_exc=False, - socket_module=socket, - key_prefix=b'', - default_noreply=True): - """ - Constructor. - - Args: - server: tuple(hostname, port) - serializer: optional function, see notes in the class docs. - deserializer: optional function, see notes in the class docs. - connect_timeout: optional float, seconds to wait for a connection to - the memcached server. Defaults to "forever" (uses the underlying - default socket timeout, which can be very long). - timeout: optional float, seconds to wait for send or recv calls on - the socket connected to memcached. Defaults to "forever" (uses the - underlying default socket timeout, which can be very long). - no_delay: optional bool, set the TCP_NODELAY flag, which may help - with performance in some cases. Defaults to False. - ignore_exc: optional bool, True to cause the "get", "gets", - "get_many" and "gets_many" calls to treat any errors as cache - misses. Defaults to False. - socket_module: socket module to use, e.g. gevent.socket. Defaults to - the standard library's socket module. - key_prefix: Prefix of key. You can use this as namespace. Defaults - to b''. - default_noreply: bool, the default value for 'noreply' as passed to - store commands (except from cas, incr, and decr, which default to - False). - - Notes: - The constructor does not make a connection to memcached. The first - call to a method on the object will do that. - """ - self.server = server - self.serializer = serializer - self.deserializer = deserializer - self.connect_timeout = connect_timeout - self.timeout = timeout - self.no_delay = no_delay - self.ignore_exc = ignore_exc - self.socket_module = socket_module - self.sock = None - if isinstance(key_prefix, six.text_type): - key_prefix = key_prefix.encode('ascii') - if not isinstance(key_prefix, bytes): - raise TypeError("key_prefix should be bytes.") - self.key_prefix = key_prefix - self.default_noreply = default_noreply - - def check_key(self, key): - """Checks key and add key_prefix.""" - return _check_key(key, key_prefix=self.key_prefix) - - def _connect(self): - sock = self.socket_module.socket(self.socket_module.AF_INET, - self.socket_module.SOCK_STREAM) - sock.settimeout(self.connect_timeout) - sock.connect(self.server) - sock.settimeout(self.timeout) - if self.no_delay: - sock.setsockopt(self.socket_module.IPPROTO_TCP, - self.socket_module.TCP_NODELAY, 1) - self.sock = sock - - def close(self): - """Close the connection to memcached, if it is open. The next call to a - method that requires a connection will re-open it.""" - if self.sock is not None: - try: - self.sock.close() - except Exception: - pass - self.sock = None - - def set(self, key, value, expire=0, noreply=None): - """ - The memcached "set" command. - - Args: - key: str, see class docs for details. - value: str, see class docs for details. - expire: optional int, number of seconds until the item is expired - from the cache, or zero for no expiry (the default). - noreply: optional bool, True to not wait for the reply (defaults to - self.default_noreply). - - Returns: - If no exception is raised, always returns True. If an exception is - raised, the set may or may not have occurred. If noreply is True, - then a successful return does not guarantee a successful set. - """ - if noreply is None: - noreply = self.default_noreply - return self._store_cmd(b'set', key, expire, noreply, value) - - def set_many(self, values, expire=0, noreply=None): - """ - A convenience function for setting multiple values. - - Args: - values: dict(str, str), a dict of keys and values, see class docs - for details. - expire: optional int, number of seconds until the item is expired - from the cache, or zero for no expiry (the default). - noreply: optional bool, True to not wait for the reply (defaults to - self.default_noreply). - - Returns: - If no exception is raised, always returns True. Otherwise all, some - or none of the keys have been successfully set. If noreply is True - then a successful return does not guarantee that any keys were - successfully set (just that the keys were successfully sent). - """ - - # TODO: make this more performant by sending all the values first, then - # waiting for all the responses. - for key, value in six.iteritems(values): - self.set(key, value, expire, noreply) - return True - - set_multi = set_many - - def add(self, key, value, expire=0, noreply=None): - """ - The memcached "add" command. - - Args: - key: str, see class docs for details. - value: str, see class docs for details. - expire: optional int, number of seconds until the item is expired - from the cache, or zero for no expiry (the default). - noreply: optional bool, True to not wait for the reply (defaults to - self.default_noreply). - - Returns: - If noreply is True, the return value is always True. Otherwise the - return value is True if the value was stgored, and False if it was - not (because the key already existed). - """ - if noreply is None: - noreply = self.default_noreply - return self._store_cmd(b'add', key, expire, noreply, value) - - def replace(self, key, value, expire=0, noreply=None): - """ - The memcached "replace" command. - - Args: - key: str, see class docs for details. - value: str, see class docs for details. - expire: optional int, number of seconds until the item is expired - from the cache, or zero for no expiry (the default). - noreply: optional bool, True to not wait for the reply (defaults to - self.default_noreply). - - Returns: - If noreply is True, always returns True. Otherwise returns True if - the value was stored and False if it wasn't (because the key didn't - already exist). - """ - if noreply is None: - noreply = self.default_noreply - return self._store_cmd(b'replace', key, expire, noreply, value) - - def append(self, key, value, expire=0, noreply=None): - """ - The memcached "append" command. - - Args: - key: str, see class docs for details. - value: str, see class docs for details. - expire: optional int, number of seconds until the item is expired - from the cache, or zero for no expiry (the default). - noreply: optional bool, True to not wait for the reply (defaults to - self.default_noreply). - - Returns: - True. - """ - if noreply is None: - noreply = self.default_noreply - return self._store_cmd(b'append', key, expire, noreply, value) - - def prepend(self, key, value, expire=0, noreply=None): - """ - The memcached "prepend" command. - - Args: - key: str, see class docs for details. - value: str, see class docs for details. - expire: optional int, number of seconds until the item is expired - from the cache, or zero for no expiry (the default). - noreply: optional bool, True to not wait for the reply (defaults to - self.default_noreply). - - Returns: - True. - """ - if noreply is None: - noreply = self.default_noreply - return self._store_cmd(b'prepend', key, expire, noreply, value) - - def cas(self, key, value, cas, expire=0, noreply=False): - """ - The memcached "cas" command. - - Args: - key: str, see class docs for details. - value: str, see class docs for details. - cas: int or str that only contains the characters '0'-'9'. - expire: optional int, number of seconds until the item is expired - from the cache, or zero for no expiry (the default). - noreply: optional bool, False to wait for the reply (the default). - - Returns: - If noreply is True, always returns True. Otherwise returns None if - the key didn't exist, False if it existed but had a different cas - value and True if it existed and was changed. - """ - return self._store_cmd(b'cas', key, expire, noreply, value, cas) - - def get(self, key): - """ - The memcached "get" command, but only for one key, as a convenience. - - Args: - key: str, see class docs for details. - - Returns: - The value for the key, or None if the key wasn't found. - """ - return self._fetch_cmd(b'get', [key], False).get(key, None) - - def get_many(self, keys): - """ - The memcached "get" command. - - Args: - keys: list(str), see class docs for details. - - Returns: - A dict in which the keys are elements of the "keys" argument list - and the values are values from the cache. The dict may contain all, - some or none of the given keys. - """ - if not keys: - return {} - - return self._fetch_cmd(b'get', keys, False) - - get_multi = get_many - - def gets(self, key): - """ - The memcached "gets" command for one key, as a convenience. - - Args: - key: str, see class docs for details. - - Returns: - A tuple of (key, cas), or (None, None) if the key was not found. - """ - return self._fetch_cmd(b'gets', [key], True).get(key, (None, None)) - - def gets_many(self, keys): - """ - The memcached "gets" command. - - Args: - keys: list(str), see class docs for details. - - Returns: - A dict in which the keys are elements of the "keys" argument list and - the values are tuples of (value, cas) from the cache. The dict may - contain all, some or none of the given keys. - """ - if not keys: - return {} - - return self._fetch_cmd(b'gets', keys, True) - - def delete(self, key, noreply=None): - """ - The memcached "delete" command. - - Args: - key: str, see class docs for details. - noreply: optional bool, True to not wait for the reply (defaults to - self.default_noreply). - - Returns: - If noreply is True, always returns True. Otherwise returns True if - the key was deleted, and False if it wasn't found. - """ - if noreply is None: - noreply = self.default_noreply - cmd = b'delete ' + self.check_key(key) - if noreply: - cmd += b' noreply' - cmd += b'\r\n' - result = self._misc_cmd(cmd, b'delete', noreply) - if noreply: - return True - return result == b'DELETED' - - def delete_many(self, keys, noreply=None): - """ - A convenience function to delete multiple keys. - - Args: - keys: list(str), the list of keys to delete. - noreply: optional bool, True to not wait for the reply (defaults to - self.default_noreply). - - Returns: - True. If an exception is raised then all, some or none of the keys - may have been deleted. Otherwise all the keys have been sent to - memcache for deletion and if noreply is False, they have been - acknowledged by memcache. - """ - if not keys: - return True - - if noreply is None: - noreply = self.default_noreply - - # TODO: make this more performant by sending all keys first, then - # waiting for all values. - for key in keys: - self.delete(key, noreply) - - return True - - delete_multi = delete_many - - def incr(self, key, value, noreply=False): - """ - The memcached "incr" command. - - Args: - key: str, see class docs for details. - value: int, the amount by which to increment the value. - noreply: optional bool, False to wait for the reply (the default). - - Returns: - If noreply is True, always returns None. Otherwise returns the new - value of the key, or None if the key wasn't found. - """ - key = self.check_key(key) - cmd = b'incr ' + key + b' ' + six.text_type(value).encode('ascii') - if noreply: - cmd += b' noreply' - cmd += b'\r\n' - result = self._misc_cmd(cmd, b'incr', noreply) - if noreply: - return None - if result == b'NOT_FOUND': - return None - return int(result) - - def decr(self, key, value, noreply=False): - """ - The memcached "decr" command. - - Args: - key: str, see class docs for details. - value: int, the amount by which to increment the value. - noreply: optional bool, False to wait for the reply (the default). - - Returns: - If noreply is True, always returns None. Otherwise returns the new - value of the key, or None if the key wasn't found. - """ - key = self.check_key(key) - cmd = b'decr ' + key + b' ' + six.text_type(value).encode('ascii') - if noreply: - cmd += b' noreply' - cmd += b'\r\n' - result = self._misc_cmd(cmd, b'decr', noreply) - if noreply: - return None - if result == b'NOT_FOUND': - return None - return int(result) - - def touch(self, key, expire=0, noreply=None): - """ - The memcached "touch" command. - - Args: - key: str, see class docs for details. - expire: optional int, number of seconds until the item is expired - from the cache, or zero for no expiry (the default). - noreply: optional bool, True to not wait for the reply (defaults to - self.default_noreply). - - Returns: - True if the expiration time was updated, False if the key wasn't - found. - """ - if noreply is None: - noreply = self.default_noreply - key = self.check_key(key) - cmd = b'touch ' + key + b' ' + six.text_type(expire).encode('ascii') - if noreply: - cmd += b' noreply' - cmd += b'\r\n' - result = self._misc_cmd(cmd, b'touch', noreply) - if noreply: - return True - return result == b'TOUCHED' - - def stats(self, *args): - """ - The memcached "stats" command. - - The returned keys depend on what the "stats" command returns. - A best effort is made to convert values to appropriate Python - types, defaulting to strings when a conversion cannot be made. - - Args: - *arg: extra string arguments to the "stats" command. See the - memcached protocol documentation for more information. - - Returns: - A dict of the returned stats. - """ - result = self._fetch_cmd(b'stats', args, False) - - for key, value in six.iteritems(result): - converter = STAT_TYPES.get(key, int) - try: - result[key] = converter(value) - except Exception: - pass - - return result - - def version(self): - """ - The memcached "version" command. - - Returns: - A string of the memcached version. - """ - cmd = b"version\r\n" - result = self._misc_cmd(cmd, b'version', False) - - if not result.startswith(b'VERSION '): - raise MemcacheUnknownError("Received unexpected response: %s" % (result, )) - - return result[8:] - - def flush_all(self, delay=0, noreply=None): - """ - The memcached "flush_all" command. - - Args: - delay: optional int, the number of seconds to wait before flushing, - or zero to flush immediately (the default). - noreply: optional bool, True to not wait for the reply (defaults to - self.default_noreply). - - Returns: - True. - """ - if noreply is None: - noreply = self.default_noreply - cmd = b'flush_all ' + six.text_type(delay).encode('ascii') - if noreply: - cmd += b' noreply' - cmd += b'\r\n' - result = self._misc_cmd(cmd, b'flush_all', noreply) - if noreply: - return True - return result == b'OK' - - def quit(self): - """ - The memcached "quit" command. - - This will close the connection with memcached. Calling any other - method on this object will re-open the connection, so this object can - be re-used after quit. - """ - cmd = b"quit\r\n" - self._misc_cmd(cmd, b'quit', True) - self.close() - - def _raise_errors(self, line, name): - if line.startswith(b'ERROR'): - raise MemcacheUnknownCommandError(name) - - if line.startswith(b'CLIENT_ERROR'): - error = line[line.find(b' ') + 1:] - raise MemcacheClientError(error) - - if line.startswith(b'SERVER_ERROR'): - error = line[line.find(b' ') + 1:] - raise MemcacheServerError(error) - - def _fetch_cmd(self, name, keys, expect_cas): - checked_keys = dict((self.check_key(k), k) for k in keys) - cmd = name + b' ' + b' '.join(checked_keys) + b'\r\n' - - try: - if not self.sock: - self._connect() - - self.sock.sendall(cmd) - - buf = b'' - result = {} - while True: - buf, line = _readline(self.sock, buf) - self._raise_errors(line, name) - if line == b'END': - return result - elif line.startswith(b'VALUE'): - if expect_cas: - _, key, flags, size, cas = line.split() - else: - try: - _, key, flags, size = line.split() - except Exception as e: - raise ValueError("Unable to parse line %s: %s" - % (line, str(e))) - - buf, value = _readvalue(self.sock, buf, int(size)) - key = checked_keys[key] - - if self.deserializer: - value = self.deserializer(key, value, int(flags)) - - if expect_cas: - result[key] = (value, cas) - else: - result[key] = value - elif name == b'stats' and line.startswith(b'STAT'): - _, key, value = line.split() - result[key] = value - else: - raise MemcacheUnknownError(line[:32]) - except Exception: - self.close() - if self.ignore_exc: - return {} - raise - - def _store_cmd(self, name, key, expire, noreply, data, cas=None): - key = self.check_key(key) - if not self.sock: - self._connect() - - if self.serializer: - data, flags = self.serializer(key, data) - else: - flags = 0 - - if not isinstance(data, six.binary_type): - try: - data = six.text_type(data).encode('ascii') - except UnicodeEncodeError as e: - raise MemcacheIllegalInputError(str(e)) - - extra = b'' - if cas is not None: - extra += b' ' + cas - if noreply: - extra += b' noreply' - - cmd = (name + b' ' + key + b' ' + six.text_type(flags).encode('ascii') - + b' ' + six.text_type(expire).encode('ascii') - + b' ' + six.text_type(len(data)).encode('ascii') + extra - + b'\r\n' + data + b'\r\n') - - try: - self.sock.sendall(cmd) - - if noreply: - return True - - buf = b'' - buf, line = _readline(self.sock, buf) - self._raise_errors(line, name) - - if line in VALID_STORE_RESULTS[name]: - if line == b'STORED': - return True - if line == b'NOT_STORED': - return False - if line == b'NOT_FOUND': - return None - if line == b'EXISTS': - return False - else: - raise MemcacheUnknownError(line[:32]) - except Exception: - self.close() - raise - - def _misc_cmd(self, cmd, cmd_name, noreply): - if not self.sock: - self._connect() - - try: - self.sock.sendall(cmd) - - if noreply: - return - - _, line = _readline(self.sock, b'') - self._raise_errors(line, cmd_name) - - return line - except Exception: - self.close() - raise - - def __setitem__(self, key, value): - self.set(key, value, noreply=True) - - def __getitem__(self, key): - value = self.get(key) - if value is None: - raise KeyError - return value - - def __delitem__(self, key): - self.delete(key, noreply=True) - - -class PooledClient(object): - """A thread-safe pool of clients (with the same client api). - - Args: - max_pool_size: maximum pool size to use (going about this amount - triggers a runtime error), by default this is 2147483648L - when not provided (or none). - lock_generator: a callback/type that takes no arguments that will - be called to create a lock or sempahore that can - protect the pool from concurrent access (for example a - eventlet lock or semaphore could be used instead) - - Further arguments are interpreted as for :py:class:`.Client` constructor. - """ - - def __init__(self, - server, - serializer=None, - deserializer=None, - connect_timeout=None, - timeout=None, - no_delay=False, - ignore_exc=False, - socket_module=socket, - key_prefix=b'', - max_pool_size=None, - lock_generator=None): - self.server = server - self.serializer = serializer - self.deserializer = deserializer - self.connect_timeout = connect_timeout - self.timeout = timeout - self.no_delay = no_delay - self.ignore_exc = ignore_exc - self.socket_module = socket_module - if isinstance(key_prefix, six.text_type): - key_prefix = key_prefix.encode('ascii') - if not isinstance(key_prefix, bytes): - raise TypeError("key_prefix should be bytes.") - self.key_prefix = key_prefix - self.client_pool = pool.ObjectPool( - self._create_client, - after_remove=lambda client: client.close(), - max_size=max_pool_size, - lock_generator=lock_generator) - - def check_key(self, key): - """Checks key and add key_prefix.""" - return _check_key(key, key_prefix=self.key_prefix) - - def _create_client(self): - client = Client(self.server, - serializer=self.serializer, - deserializer=self.deserializer, - connect_timeout=self.connect_timeout, - timeout=self.timeout, - no_delay=self.no_delay, - # We need to know when it fails *always* so that we - # can remove/destroy it from the pool... - ignore_exc=False, - socket_module=self.socket_module, - key_prefix=self.key_prefix) - return client - - def close(self): - self.client_pool.clear() - - def set(self, key, value, expire=0, noreply=True): - with self.client_pool.get_and_release(destroy_on_fail=True) as client: - return client.set(key, value, expire=expire, noreply=noreply) - - def set_many(self, values, expire=0, noreply=True): - with self.client_pool.get_and_release(destroy_on_fail=True) as client: - return client.set_many(values, expire=expire, noreply=noreply) - - set_multi = set_many - - def replace(self, key, value, expire=0, noreply=True): - with self.client_pool.get_and_release(destroy_on_fail=True) as client: - return client.replace(key, value, expire=expire, noreply=noreply) - - def append(self, key, value, expire=0, noreply=True): - with self.client_pool.get_and_release(destroy_on_fail=True) as client: - return client.append(key, value, expire=expire, noreply=noreply) - - def prepend(self, key, value, expire=0, noreply=True): - with self.client_pool.get_and_release(destroy_on_fail=True) as client: - return client.prepend(key, value, expire=expire, noreply=noreply) - - def cas(self, key, value, cas, expire=0, noreply=False): - with self.client_pool.get_and_release(destroy_on_fail=True) as client: - return client.cas(key, value, cas, - expire=expire, noreply=noreply) - - def get(self, key): - with self.client_pool.get_and_release(destroy_on_fail=True) as client: - try: - return client.get(key) - except Exception: - if self.ignore_exc: - return None - else: - raise - - def get_many(self, keys): - with self.client_pool.get_and_release(destroy_on_fail=True) as client: - try: - return client.get_many(keys) - except Exception: - if self.ignore_exc: - return {} - else: - raise - - get_multi = get_many - - def gets(self, key): - with self.client_pool.get_and_release(destroy_on_fail=True) as client: - try: - return client.gets(key) - except Exception: - if self.ignore_exc: - return (None, None) - else: - raise - - def gets_many(self, keys): - with self.client_pool.get_and_release(destroy_on_fail=True) as client: - try: - return client.gets_many(keys) - except Exception: - if self.ignore_exc: - return {} - else: - raise - - def delete(self, key, noreply=True): - with self.client_pool.get_and_release(destroy_on_fail=True) as client: - return client.delete(key, noreply=noreply) - - def delete_many(self, keys, noreply=True): - with self.client_pool.get_and_release(destroy_on_fail=True) as client: - return client.delete_many(keys, noreply=noreply) - - delete_multi = delete_many - - def add(self, key, value, expire=0, noreply=True): - with self.client_pool.get_and_release(destroy_on_fail=True) as client: - return client.add(key, value, expire=expire, noreply=noreply) - - def incr(self, key, value, noreply=False): - with self.client_pool.get_and_release(destroy_on_fail=True) as client: - return client.incr(key, value, noreply=noreply) - - def decr(self, key, value, noreply=False): - with self.client_pool.get_and_release(destroy_on_fail=True) as client: - return client.decr(key, value, noreply=noreply) - - def touch(self, key, expire=0, noreply=True): - with self.client_pool.get_and_release(destroy_on_fail=True) as client: - return client.touch(key, expire=expire, noreply=noreply) - - def stats(self, *args): - with self.client_pool.get_and_release(destroy_on_fail=True) as client: - try: - return client.stats(*args) - except Exception: - if self.ignore_exc: - return {} - else: - raise - - def version(self): - with self.client_pool.get_and_release(destroy_on_fail=True) as client: - return client.version() - - def flush_all(self, delay=0, noreply=True): - with self.client_pool.get_and_release(destroy_on_fail=True) as client: - return client.flush_all(delay=delay, noreply=noreply) - - def quit(self): - with self.client_pool.get_and_release(destroy_on_fail=True) as client: - try: - client.quit() - finally: - self.client_pool.destroy(client) - - def __setitem__(self, key, value): - self.set(key, value, noreply=True) - - def __getitem__(self, key): - value = self.get(key) - if value is None: - raise KeyError - return value - - def __delitem__(self, key): - self.delete(key, noreply=True) - - -def _readline(sock, buf): - """Read line of text from the socket. - - Read a line of text (delimited by "\r\n") from the socket, and - return that line along with any trailing characters read from the - socket. - - Args: - sock: Socket object, should be connected. - buf: String, zero or more characters, returned from an earlier - call to _readline or _readvalue (pass an empty string on the - first call). - - Returns: - A tuple of (buf, line) where line is the full line read from the - socket (minus the "\r\n" characters) and buf is any trailing - characters read after the "\r\n" was found (which may be an empty - string). - - """ - chunks = [] - last_char = b'' - - while True: - # We're reading in chunks, so "\r\n" could appear in one chunk, - # or across the boundary of two chunks, so we check for both - # cases. - - # This case must appear first, since the buffer could have - # later \r\n characters in it and we want to get the first \r\n. - if last_char == b'\r' and buf[0:1] == b'\n': - # Strip the last character from the last chunk. - chunks[-1] = chunks[-1][:-1] - return buf[1:], b''.join(chunks) - elif buf.find(b'\r\n') != -1: - before, sep, after = buf.partition(b"\r\n") - chunks.append(before) - return after, b''.join(chunks) - - if buf: - chunks.append(buf) - last_char = buf[-1:] - - buf = _recv(sock, RECV_SIZE) - if not buf: - raise MemcacheUnexpectedCloseError() - - -def _readvalue(sock, buf, size): - """Read specified amount of bytes from the socket. - - Read size bytes, followed by the "\r\n" characters, from the socket, - and return those bytes and any trailing bytes read after the "\r\n". - - Args: - sock: Socket object, should be connected. - buf: String, zero or more characters, returned from an earlier - call to _readline or _readvalue (pass an empty string on the - first call). - size: Integer, number of bytes to read from the socket. - - Returns: - A tuple of (buf, value) where value is the bytes read from the - socket (there will be exactly size bytes) and buf is trailing - characters read after the "\r\n" following the bytes (but not - including the \r\n). - - """ - chunks = [] - rlen = size + 2 - while rlen - len(buf) > 0: - if buf: - rlen -= len(buf) - chunks.append(buf) - buf = _recv(sock, RECV_SIZE) - if not buf: - raise MemcacheUnexpectedCloseError() - - # Now we need to remove the \r\n from the end. There are two cases we care - # about: the \r\n is all in the last buffer, or only the \n is in the last - # buffer, and we need to remove the \r from the penultimate buffer. - - if rlen == 1: - # replace the last chunk with the same string minus the last character, - # which is always '\r' in this case. - chunks[-1] = chunks[-1][:-1] - else: - # Just remove the "\r\n" from the latest chunk - chunks.append(buf[:rlen - 2]) - - return buf[rlen:], b''.join(chunks) - - -def _recv(sock, size): - """sock.recv() with retry on EINTR""" - while True: - try: - return sock.recv(size) - except IOError as e: - if e.errno != errno.EINTR: - raise diff --git a/server/www/packages/packages-common/pymemcache/client/hash.py b/server/www/packages/packages-common/pymemcache/client/hash.py deleted file mode 100644 index 55b6287..0000000 --- a/server/www/packages/packages-common/pymemcache/client/hash.py +++ /dev/null @@ -1,333 +0,0 @@ -import socket -import time -import logging - -from pymemcache.client.base import Client, PooledClient, _check_key -from pymemcache.client.rendezvous import RendezvousHash - -logger = logging.getLogger(__name__) - - -class HashClient(object): - """ - A client for communicating with a cluster of memcached servers - """ - def __init__( - self, - servers, - hasher=RendezvousHash, - serializer=None, - deserializer=None, - connect_timeout=None, - timeout=None, - no_delay=False, - socket_module=socket, - key_prefix=b'', - max_pool_size=None, - lock_generator=None, - retry_attempts=2, - retry_timeout=1, - dead_timeout=60, - use_pooling=False, - ignore_exc=False, - ): - """ - Constructor. - - Args: - servers: list(tuple(hostname, port)) - hasher: optional class three functions ``get_node``, ``add_node``, - and ``remove_node`` - defaults to Rendezvous (HRW) hash. - - use_pooling: use py:class:`.PooledClient` as the default underlying - class. ``max_pool_size`` and ``lock_generator`` can - be used with this. default: False - - retry_attempts: Amount of times a client should be tried before it - is marked dead and removed from the pool. - retry_timeout (float): Time in seconds that should pass between retry - attempts. - dead_timeout (float): Time in seconds before attempting to add a node - back in the pool. - - Further arguments are interpreted as for :py:class:`.Client` - constructor. - - The default ``hasher`` is using a pure python implementation that can - be significantly improved performance wise by switching to a C based - version. We recommend using ``python-clandestined`` if having a C - dependency is acceptable. - """ - self.clients = {} - self.retry_attempts = retry_attempts - self.retry_timeout = retry_timeout - self.dead_timeout = dead_timeout - self.use_pooling = use_pooling - self.key_prefix = key_prefix - self.ignore_exc = ignore_exc - self._failed_clients = {} - self._dead_clients = {} - self._last_dead_check_time = time.time() - - self.hasher = hasher() - - self.default_kwargs = { - 'connect_timeout': connect_timeout, - 'timeout': timeout, - 'no_delay': no_delay, - 'socket_module': socket_module, - 'key_prefix': key_prefix, - 'serializer': serializer, - 'deserializer': deserializer, - } - - if use_pooling is True: - self.default_kwargs.update({ - 'max_pool_size': max_pool_size, - 'lock_generator': lock_generator - }) - - for server, port in servers: - self.add_server(server, port) - - def add_server(self, server, port): - key = '%s:%s' % (server, port) - - if self.use_pooling: - client = PooledClient( - (server, port), - **self.default_kwargs - ) - else: - client = Client((server, port), **self.default_kwargs) - - self.clients[key] = client - self.hasher.add_node(key) - - def remove_server(self, server, port): - dead_time = time.time() - self._failed_clients.pop((server, port)) - self._dead_clients[(server, port)] = dead_time - key = '%s:%s' % (server, port) - self.hasher.remove_node(key) - - def _get_client(self, key): - _check_key(key, self.key_prefix) - if len(self._dead_clients) > 0: - current_time = time.time() - ldc = self._last_dead_check_time - # we have dead clients and we have reached the - # timeout retry - if current_time - ldc > self.dead_timeout: - for server, dead_time in self._dead_clients.items(): - if current_time - dead_time > self.dead_timeout: - logger.debug( - 'bringing server back into rotation %s', - server - ) - self.add_server(*server) - self._last_dead_check_time = current_time - - server = self.hasher.get_node(key) - # We've ran out of servers to try - if server is None: - if self.ignore_exc is True: - return - raise Exception('All servers seem to be down right now') - - client = self.clients[server] - return client - - def _safely_run_func(self, client, func, default_val, *args, **kwargs): - try: - if client.server in self._failed_clients: - # This server is currently failing, lets check if it is in - # retry or marked as dead - failed_metadata = self._failed_clients[client.server] - - # we haven't tried our max amount yet, if it has been enough - # time lets just retry using it - if failed_metadata['attempts'] < self.retry_attempts: - failed_time = failed_metadata['failed_time'] - if time.time() - failed_time > self.retry_timeout: - logger.debug( - 'retrying failed server: %s', client.server - ) - result = func(*args, **kwargs) - # we were successful, lets remove it from the failed - # clients - self._failed_clients.pop(client.server) - return result - return default_val - else: - # We've reached our max retry attempts, we need to mark - # the sever as dead - logger.debug('marking server as dead: %s', client.server) - self.remove_server(*client.server) - - result = func(*args, **kwargs) - return result - - # Connecting to the server fail, we should enter - # retry mode - except socket.error: - # This client has never failed, lets mark it for failure - if ( - client.server not in self._failed_clients and - self.retry_attempts > 0 - ): - self._failed_clients[client.server] = { - 'failed_time': time.time(), - 'attempts': 0, - } - # We aren't allowing any retries, we should mark the server as - # dead immediately - elif ( - client.server not in self._failed_clients and - self.retry_attempts <= 0 - ): - self._failed_clients[client.server] = { - 'failed_time': time.time(), - 'attempts': 0, - } - logger.debug("marking server as dead %s", client.server) - self.remove_server(*client.server) - # This client has failed previously, we need to update the metadata - # to reflect that we have attempted it again - else: - failed_metadata = self._failed_clients[client.server] - failed_metadata['attempts'] += 1 - failed_metadata['failed_time'] = time.time() - self._failed_clients[client.server] = failed_metadata - - # if we haven't enabled ignore_exc, don't move on gracefully, just - # raise the exception - if not self.ignore_exc: - raise - - return default_val - except: - # any exceptions that aren't socket.error we need to handle - # gracefully as well - if not self.ignore_exc: - raise - - return default_val - - def _run_cmd(self, cmd, key, default_val, *args, **kwargs): - client = self._get_client(key) - - if client is None: - return False - - func = getattr(client, cmd) - args = list(args) - args.insert(0, key) - return self._safely_run_func( - client, func, default_val, *args, **kwargs - ) - - def set(self, key, *args, **kwargs): - return self._run_cmd('set', key, False, *args, **kwargs) - - def get(self, key, *args, **kwargs): - return self._run_cmd('get', key, None, *args, **kwargs) - - def incr(self, key, *args, **kwargs): - return self._run_cmd('incr', key, False, *args, **kwargs) - - def decr(self, key, *args, **kwargs): - return self._run_cmd('decr', key, False, *args, **kwargs) - - def set_many(self, values, *args, **kwargs): - client_batches = {} - end = [] - - for key, value in values.items(): - client = self._get_client(key) - - if client is None: - end.append(False) - continue - - if client.server not in client_batches: - client_batches[client.server] = {} - - client_batches[client.server][key] = value - - for server, values in client_batches.items(): - client = self.clients['%s:%s' % server] - new_args = list(args) - new_args.insert(0, values) - result = self._safely_run_func( - client, - client.set_many, False, *new_args, **kwargs - ) - end.append(result) - - return all(end) - - set_multi = set_many - - def get_many(self, keys, *args, **kwargs): - client_batches = {} - end = {} - - for key in keys: - client = self._get_client(key) - - if client is None: - end[key] = False - continue - - if client.server not in client_batches: - client_batches[client.server] = [] - - client_batches[client.server].append(key) - - for server, keys in client_batches.items(): - client = self.clients['%s:%s' % server] - new_args = list(args) - new_args.insert(0, keys) - result = self._safely_run_func( - client, - client.get_many, {}, *new_args, **kwargs - ) - end.update(result) - - return end - - get_multi = get_many - - def gets(self, key, *args, **kwargs): - return self._run_cmd('gets', key, None, *args, **kwargs) - - def add(self, key, *args, **kwargs): - return self._run_cmd('add', key, False, *args, **kwargs) - - def prepend(self, key, *args, **kwargs): - return self._run_cmd('prepend', key, False, *args, **kwargs) - - def append(self, key, *args, **kwargs): - return self._run_cmd('append', key, False, *args, **kwargs) - - def delete(self, key, *args, **kwargs): - return self._run_cmd('delete', key, False, *args, **kwargs) - - def delete_many(self, keys, *args, **kwargs): - for key in keys: - self._run_cmd('delete', key, False, *args, **kwargs) - return True - - delete_multi = delete_many - - def cas(self, key, *args, **kwargs): - return self._run_cmd('cas', key, False, *args, **kwargs) - - def replace(self, key, *args, **kwargs): - return self._run_cmd('replace', key, False, *args, **kwargs) - - def flush_all(self): - for _, client in self.clients.items(): - self._safely_run_func(client, client.flush_all, False) diff --git a/server/www/packages/packages-common/pymemcache/client/murmur3.py b/server/www/packages/packages-common/pymemcache/client/murmur3.py deleted file mode 100644 index 787eeaf..0000000 --- a/server/www/packages/packages-common/pymemcache/client/murmur3.py +++ /dev/null @@ -1,51 +0,0 @@ -def murmur3_32(data, seed=0): - """MurmurHash3 was written by Austin Appleby, and is placed in the - public domain. The author hereby disclaims copyright to this source - code.""" - - c1 = 0xcc9e2d51 - c2 = 0x1b873593 - - length = len(data) - h1 = seed - roundedEnd = (length & 0xfffffffc) # round down to 4 byte block - for i in range(0, roundedEnd, 4): - # little endian load order - k1 = (ord(data[i]) & 0xff) | ((ord(data[i + 1]) & 0xff) << 8) | \ - ((ord(data[i + 2]) & 0xff) << 16) | (ord(data[i + 3]) << 24) - k1 *= c1 - k1 = (k1 << 15) | ((k1 & 0xffffffff) >> 17) # ROTL32(k1,15) - k1 *= c2 - - h1 ^= k1 - h1 = (h1 << 13) | ((h1 & 0xffffffff) >> 19) # ROTL32(h1,13) - h1 = h1 * 5 + 0xe6546b64 - - # tail - k1 = 0 - - val = length & 0x03 - if val == 3: - k1 = (ord(data[roundedEnd + 2]) & 0xff) << 16 - # fallthrough - if val in [2, 3]: - k1 |= (ord(data[roundedEnd + 1]) & 0xff) << 8 - # fallthrough - if val in [1, 2, 3]: - k1 |= ord(data[roundedEnd]) & 0xff - k1 *= c1 - k1 = (k1 << 15) | ((k1 & 0xffffffff) >> 17) # ROTL32(k1,15) - k1 *= c2 - h1 ^= k1 - - # finalization - h1 ^= length - - # fmix(h1) - h1 ^= ((h1 & 0xffffffff) >> 16) - h1 *= 0x85ebca6b - h1 ^= ((h1 & 0xffffffff) >> 13) - h1 *= 0xc2b2ae35 - h1 ^= ((h1 & 0xffffffff) >> 16) - - return h1 & 0xffffffff diff --git a/server/www/packages/packages-common/pymemcache/client/rendezvous.py b/server/www/packages/packages-common/pymemcache/client/rendezvous.py deleted file mode 100644 index 32ecc2b..0000000 --- a/server/www/packages/packages-common/pymemcache/client/rendezvous.py +++ /dev/null @@ -1,46 +0,0 @@ -from pymemcache.client.murmur3 import murmur3_32 - - -class RendezvousHash(object): - """ - Implements the Highest Random Weight (HRW) hashing algorithm most - commonly referred to as rendezvous hashing. - - Originally developed as part of python-clandestined. - - Copyright (c) 2014 Ernest W. Durbin III - """ - def __init__(self, nodes=None, seed=0, hash_function=murmur3_32): - """ - Constructor. - """ - self.nodes = [] - self.seed = seed - if nodes is not None: - self.nodes = nodes - self.hash_function = lambda x: hash_function(x, seed) - - def add_node(self, node): - if node not in self.nodes: - self.nodes.append(node) - - def remove_node(self, node): - if node in self.nodes: - self.nodes.remove(node) - else: - raise ValueError("No such node %s to remove" % (node)) - - def get_node(self, key): - high_score = -1 - winner = None - - for node in self.nodes: - score = self.hash_function( - "%s-%s" % (str(node), str(key))) - - if score > high_score: - (high_score, winner) = (score, node) - elif score == high_score: - (high_score, winner) = (score, max(str(node), str(winner))) - - return winner diff --git a/server/www/packages/packages-common/pymemcache/exceptions.py b/server/www/packages/packages-common/pymemcache/exceptions.py deleted file mode 100644 index 416fa0a..0000000 --- a/server/www/packages/packages-common/pymemcache/exceptions.py +++ /dev/null @@ -1,40 +0,0 @@ -class MemcacheError(Exception): - "Base exception class" - pass - - -class MemcacheClientError(MemcacheError): - """Raised when memcached fails to parse the arguments to a request, likely - due to a malformed key and/or value, a bug in this library, or a version - mismatch with memcached.""" - pass - - -class MemcacheUnknownCommandError(MemcacheClientError): - """Raised when memcached fails to parse a request, likely due to a bug in - this library or a version mismatch with memcached.""" - pass - - -class MemcacheIllegalInputError(MemcacheClientError): - """Raised when a key or value is not legal for Memcache (see the class docs - for Client for more details).""" - pass - - -class MemcacheServerError(MemcacheError): - """Raised when memcached reports a failure while processing a request, - likely due to a bug or transient issue in memcached.""" - pass - - -class MemcacheUnknownError(MemcacheError): - """Raised when this library receives a response from memcached that it - cannot parse, likely due to a bug in this library or a version mismatch - with memcached.""" - pass - - -class MemcacheUnexpectedCloseError(MemcacheServerError): - "Raised when the connection with memcached closes unexpectedly." - pass diff --git a/server/www/packages/packages-common/pymemcache/fallback.py b/server/www/packages/packages-common/pymemcache/fallback.py deleted file mode 100644 index d70d83c..0000000 --- a/server/www/packages/packages-common/pymemcache/fallback.py +++ /dev/null @@ -1,123 +0,0 @@ -# Copyright 2012 Pinterest.com -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -A client for falling back to older memcached servers when performing reads. - -It is sometimes necessary to deploy memcached on new servers, or with a -different configuration. In theses cases, it is undesirable to start up an -empty memcached server and point traffic to it, since the cache will be cold, -and the backing store will have a large increase in traffic. - -This class attempts to solve that problem by providing an interface identical -to the Client interface, but which can fall back to older memcached servers -when reads to the primary server fail. The approach for upgrading memcached -servers or configuration then becomes: - - 1. Deploy a new host (or fleet) with memcached, possibly with a new - configuration. - 2. From your application servers, use FallbackClient to write and read from - the new cluster, and to read from the old cluster when there is a miss in - the new cluster. - 3. Wait until the new cache is warm enough to support the load. - 4. Switch from FallbackClient to a regular Client library for doing all - reads and writes to the new cluster. - 5. Take down the old cluster. - -Best Practices: ---------------- - - Make sure that the old client has "ignore_exc" set to True, so that it - treats failures like cache misses. That will allow you to take down the - old cluster before you switch away from FallbackClient. -""" - - -class FallbackClient(object): - def __init__(self, caches): - assert len(caches) > 0 - self.caches = caches - - def close(self): - "Close each of the memcached clients" - for cache in self.caches: - cache.close() - - def set(self, key, value, expire=0, noreply=True): - self.caches[0].set(key, value, expire, noreply) - - def add(self, key, value, expire=0, noreply=True): - self.caches[0].add(key, value, expire, noreply) - - def replace(self, key, value, expire=0, noreply=True): - self.caches[0].replace(key, value, expire, noreply) - - def append(self, key, value, expire=0, noreply=True): - self.caches[0].append(key, value, expire, noreply) - - def prepend(self, key, value, expire=0, noreply=True): - self.caches[0].prepend(key, value, expire, noreply) - - def cas(self, key, value, cas, expire=0, noreply=True): - self.caches[0].cas(key, value, cas, expire, noreply) - - def get(self, key): - for cache in self.caches: - result = cache.get(key) - if result is not None: - return result - return None - - def get_many(self, keys): - for cache in self.caches: - result = cache.get_many(keys) - if result: - return result - return [] - - def gets(self, key): - for cache in self.caches: - result = cache.gets(key) - if result is not None: - return result - return None - - def gets_many(self, keys): - for cache in self.caches: - result = cache.gets_many(keys) - if result: - return result - return [] - - def delete(self, key, noreply=True): - self.caches[0].delete(key, noreply) - - def incr(self, key, value, noreply=True): - self.caches[0].incr(key, value, noreply) - - def decr(self, key, value, noreply=True): - self.caches[0].decr(key, value, noreply) - - def touch(self, key, expire=0, noreply=True): - self.caches[0].touch(key, expire, noreply) - - def stats(self): - # TODO: ?? - pass - - def flush_all(self, delay=0, noreply=True): - self.caches[0].flush_all(delay, noreply) - - def quit(self): - # TODO: ?? - pass diff --git a/server/www/packages/packages-common/pymemcache/pool.py b/server/www/packages/packages-common/pymemcache/pool.py deleted file mode 100644 index f800f90..0000000 --- a/server/www/packages/packages-common/pymemcache/pool.py +++ /dev/null @@ -1,114 +0,0 @@ -# Copyright 2015 Yahoo.com -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import collections -import contextlib -import sys -import threading - -import six - - -class ObjectPool(object): - """A pool of objects that release/creates/destroys as needed.""" - - def __init__(self, obj_creator, - after_remove=None, max_size=None, - lock_generator=None): - self._used_objs = collections.deque() - self._free_objs = collections.deque() - self._obj_creator = obj_creator - if lock_generator is None: - self._lock = threading.Lock() - else: - self._lock = lock_generator() - self._after_remove = after_remove - max_size = max_size or 2 ** 31 - if not isinstance(max_size, six.integer_types) or max_size < 0: - raise ValueError('"max_size" must be a positive integer') - self.max_size = max_size - - @property - def used(self): - return tuple(self._used_objs) - - @property - def free(self): - return tuple(self._free_objs) - - @contextlib.contextmanager - def get_and_release(self, destroy_on_fail=False): - obj = self.get() - try: - yield obj - except Exception: - exc_info = sys.exc_info() - if not destroy_on_fail: - self.release(obj) - else: - self.destroy(obj) - six.reraise(exc_info[0], exc_info[1], exc_info[2]) - self.release(obj) - - def get(self): - with self._lock: - if not self._free_objs: - curr_count = len(self._used_objs) - if curr_count >= self.max_size: - raise RuntimeError("Too many objects," - " %s >= %s" % (curr_count, - self.max_size)) - obj = self._obj_creator() - self._used_objs.append(obj) - return obj - else: - obj = self._free_objs.pop() - self._used_objs.append(obj) - return obj - - def destroy(self, obj, silent=True): - was_dropped = False - with self._lock: - try: - self._used_objs.remove(obj) - was_dropped = True - except ValueError: - if not silent: - raise - if was_dropped and self._after_remove is not None: - self._after_remove(obj) - - def release(self, obj, silent=True): - with self._lock: - try: - self._used_objs.remove(obj) - self._free_objs.append(obj) - except ValueError: - if not silent: - raise - - def clear(self): - if self._after_remove is not None: - needs_destroy = [] - with self._lock: - needs_destroy.extend(self._used_objs) - needs_destroy.extend(self._free_objs) - self._free_objs.clear() - self._used_objs.clear() - for obj in needs_destroy: - self._after_remove(obj) - else: - with self._lock: - self._free_objs.clear() - self._used_objs.clear() diff --git a/server/www/packages/packages-common/pymemcache/serde.py b/server/www/packages/packages-common/pymemcache/serde.py deleted file mode 100644 index c7a00ee..0000000 --- a/server/www/packages/packages-common/pymemcache/serde.py +++ /dev/null @@ -1,69 +0,0 @@ -# Copyright 2012 Pinterest.com -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import logging -import pickle - -try: - from cStringIO import StringIO -except ImportError: - from StringIO import StringIO - - -FLAG_PICKLE = 1 << 0 -FLAG_INTEGER = 1 << 1 -FLAG_LONG = 1 << 2 - - -def python_memcache_serializer(key, value): - flags = 0 - - if isinstance(value, str): - pass - elif isinstance(value, int): - flags |= FLAG_INTEGER - value = "%d" % value - elif isinstance(value, long): - flags |= FLAG_LONG - value = "%d" % value - else: - flags |= FLAG_PICKLE - output = StringIO() - pickler = pickle.Pickler(output, 0) - pickler.dump(value) - value = output.getvalue() - - return value, flags - - -def python_memcache_deserializer(key, value, flags): - if flags == 0: - return value - - if flags & FLAG_INTEGER: - return int(value) - - if flags & FLAG_LONG: - return long(value) - - if flags & FLAG_PICKLE: - try: - buf = StringIO(value) - unpickler = pickle.Unpickler(buf) - return unpickler.load() - except Exception: - logging.info('Pickle error', exc_info=True) - return None - - return value diff --git a/server/www/packages/packages-common/pymysql/__init__.py b/server/www/packages/packages-common/pymysql/__init__.py index 2236ff1..43fb9a0 100644 --- a/server/www/packages/packages-common/pymysql/__init__.py +++ b/server/www/packages/packages-common/pymysql/__init__.py @@ -1,7 +1,7 @@ -''' +""" PyMySQL: A pure-Python MySQL client library. -Copyright (c) 2010, 2013 PyMySQL contributors +Copyright (c) 2010-2016 PyMySQL contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -20,30 +20,29 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -''' - -VERSION = (0, 6, 7, None) - -from ._compat import text_type, JYTHON, IRONPYTHON -from .constants import FIELD_TYPE -from .converters import escape_dict, escape_sequence, escape_string -from .err import Warning, Error, InterfaceError, DataError, \ - DatabaseError, OperationalError, IntegrityError, InternalError, \ - NotSupportedError, ProgrammingError, MySQLError -from .times import Date, Time, Timestamp, \ - DateFromTicks, TimeFromTicks, TimestampFromTicks - +""" import sys +from ._compat import PY2 +from .constants import FIELD_TYPE +from .converters import escape_dict, escape_sequence, escape_string +from .err import ( + Warning, Error, InterfaceError, DataError, + DatabaseError, OperationalError, IntegrityError, InternalError, + NotSupportedError, ProgrammingError, MySQLError) +from .times import ( + Date, Time, Timestamp, + DateFromTicks, TimeFromTicks, TimestampFromTicks) + +VERSION = (0, 7, 11, None) threadsafety = 1 apilevel = "2.0" -paramstyle = "format" +paramstyle = "pyformat" + class DBAPISet(frozenset): - def __ne__(self, other): if isinstance(other, set): return frozenset.__ne__(self, other) @@ -73,11 +72,14 @@ TIMESTAMP = DBAPISet([FIELD_TYPE.TIMESTAMP, FIELD_TYPE.DATETIME]) DATETIME = TIMESTAMP ROWID = DBAPISet() + def Binary(x): """Return x as a binary type.""" - if isinstance(x, text_type) and not (JYTHON or IRONPYTHON): - return x.encode() - return bytes(x) + if PY2: + return bytearray(x) + else: + return bytes(x) + def Connect(*args, **kwargs): """ @@ -87,27 +89,26 @@ def Connect(*args, **kwargs): from .connections import Connection return Connection(*args, **kwargs) -from pymysql import connections as _orig_conn +from . import connections as _orig_conn if _orig_conn.Connection.__init__.__doc__ is not None: - Connect.__doc__ = _orig_conn.Connection.__init__.__doc__ + (""" -See connections.Connection.__init__() for information about defaults. -""") + Connect.__doc__ = _orig_conn.Connection.__init__.__doc__ del _orig_conn + def get_client_info(): # for MySQLdb compatibility return '.'.join(map(str, VERSION)) connect = Connection = Connect # we include a doctored version_info here for MySQLdb compatibility -version_info = (1,2,2,"final",0) +version_info = (1,2,6,"final",0) NULL = "NULL" __version__ = get_client_info() def thread_safe(): - return True # match MySQLdb.thread_safe() + return True # match MySQLdb.thread_safe() def install_as_MySQLdb(): """ @@ -116,6 +117,7 @@ def install_as_MySQLdb(): """ sys.modules["MySQLdb"] = sys.modules["_mysql"] = sys.modules["pymysql"] + __all__ = [ 'BINARY', 'Binary', 'Connect', 'Connection', 'DATE', 'Date', 'Time', 'Timestamp', 'DateFromTicks', 'TimeFromTicks', 'TimestampFromTicks', @@ -128,6 +130,5 @@ __all__ = [ 'paramstyle', 'threadsafety', 'version_info', "install_as_MySQLdb", - - "NULL","__version__", - ] + "NULL", "__version__", +] diff --git a/server/www/packages/packages-common/pymysql/_compat.py b/server/www/packages/packages-common/pymysql/_compat.py index 0c55346..252789e 100644 --- a/server/www/packages/packages-common/pymysql/_compat.py +++ b/server/www/packages/packages-common/pymysql/_compat.py @@ -7,12 +7,15 @@ IRONPYTHON = sys.platform == 'cli' CPYTHON = not PYPY and not JYTHON and not IRONPYTHON if PY2: + import __builtin__ range_type = xrange text_type = unicode long_type = long str_type = basestring + unichr = __builtin__.unichr else: range_type = range text_type = str long_type = int str_type = str + unichr = chr diff --git a/server/www/packages/packages-common/pymysql/charset.py b/server/www/packages/packages-common/pymysql/charset.py index 1cf7d91..968376c 100644 --- a/server/www/packages/packages-common/pymysql/charset.py +++ b/server/www/packages/packages-common/pymysql/charset.py @@ -11,6 +11,10 @@ class Charset(object): self.id, self.name, self.collation = id, name, collation self.is_default = is_default == 'Yes' + def __repr__(self): + return "Charset(id=%s, name=%r, collation=%r)" % ( + self.id, self.name, self.collation) + @property def encoding(self): name = self.name @@ -249,6 +253,10 @@ _charsets.add(Charset(240, 'utf8mb4', 'utf8mb4_persian_ci', '')) _charsets.add(Charset(241, 'utf8mb4', 'utf8mb4_esperanto_ci', '')) _charsets.add(Charset(242, 'utf8mb4', 'utf8mb4_hungarian_ci', '')) _charsets.add(Charset(243, 'utf8mb4', 'utf8mb4_sinhala_ci', '')) +_charsets.add(Charset(244, 'utf8mb4', 'utf8mb4_german2_ci', '')) +_charsets.add(Charset(245, 'utf8mb4', 'utf8mb4_croatian_ci', '')) +_charsets.add(Charset(246, 'utf8mb4', 'utf8mb4_unicode_520_ci', '')) +_charsets.add(Charset(247, 'utf8mb4', 'utf8mb4_vietnamese_ci', '')) charset_by_name = _charsets.by_name diff --git a/server/www/packages/packages-common/pymysql/connections.py b/server/www/packages/packages-common/pymysql/connections.py index f6c06ce..31dd85a 100644 --- a/server/www/packages/packages-common/pymysql/connections.py +++ b/server/www/packages/packages-common/pymysql/connections.py @@ -17,9 +17,8 @@ import traceback import warnings from .charset import MBLENGTH, charset_by_name, charset_by_id -from .constants import CLIENT, COMMAND, FIELD_TYPE, SERVER_STATUS -from .converters import ( - escape_item, encoders, decoders, escape_string, through) +from .constants import CLIENT, COMMAND, CR, FIELD_TYPE, SERVER_STATUS +from .converters import escape_item, escape_string, through, conversions as _conv from .cursors import Cursor from .optionfile import Parser from .util import byte2int, int2byte @@ -36,7 +35,8 @@ try: import getpass DEFAULT_USER = getpass.getuser() del getpass -except ImportError: +except (ImportError, KeyError): + # KeyError occurs when there's no entry in OS database for a current user. DEFAULT_USER = None @@ -117,26 +117,24 @@ def dump_packet(data): # pragma: no cover try: print("packet length:", len(data)) - print("method call[1]:", sys._getframe(1).f_code.co_name) - print("method call[2]:", sys._getframe(2).f_code.co_name) - print("method call[3]:", sys._getframe(3).f_code.co_name) - print("method call[4]:", sys._getframe(4).f_code.co_name) - print("method call[5]:", sys._getframe(5).f_code.co_name) - print("-" * 88) + for i in range(1, 6): + f = sys._getframe(i) + print("call[%d]: %s (line %d)" % (i, f.f_code.co_name, f.f_lineno)) + print("-" * 66) except ValueError: pass dump_data = [data[i:i+16] for i in range_type(0, min(len(data), 256), 16)] for d in dump_data: print(' '.join(map(lambda x: "{:02X}".format(byte2int(x)), d)) + ' ' * (16 - len(d)) + ' ' * 2 + - ' '.join(map(lambda x: "{}".format(is_ascii(x)), d))) - print("-" * 88) + ''.join(map(lambda x: "{}".format(is_ascii(x)), d))) + print("-" * 66) print() def _scramble(password, message): if not password: - return b'\0' + return b'' if DEBUG: print('password=' + str(password)) stage1 = sha_new(password).digest() stage2 = sha_new(stage1).digest() @@ -149,7 +147,7 @@ def _scramble(password, message): def _my_crypt(message1, message2): length = len(message1) - result = struct.pack('B', length) + result = b'' for i in range_type(length): x = (struct.unpack('B', message1[i:i+1])[0] ^ struct.unpack('B', message2[i:i+1])[0]) @@ -196,7 +194,8 @@ def _hash_password_323(password): add = 7 nr2 = 0x12345671 - for c in [byte2int(x) for x in password if x not in (' ', '\t')]: + # x in py3 is numbers, p27 is chars + for c in [byte2int(x) for x in password if x not in (' ', '\t', 32, 9)]: nr ^= (((nr & 63) + add) * c) + (nr << 8) & 0xFFFFFFFF nr2 = (nr2 + ((nr2 << 8) ^ nr)) & 0xFFFFFFFF add = (add + c) & 0xFFFFFFFF @@ -209,6 +208,20 @@ def _hash_password_323(password): def pack_int24(n): return struct.pack('= 7 def is_eof_packet(self): # http://dev.mysql.com/doc/internals/en/generic-response-packets.html#packet-EOF_Packet # Caution: \xFE may be LengthEncodedInteger. # If \xFE is LengthEncodedInteger header, 8bytes followed. - return len(self._data) < 9 and self._data[0:1] == b'\xfe' + return self._data[0:1] == b'\xfe' and len(self._data) < 9 + + def is_auth_switch_request(self): + # http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchRequest + return self._data[0:1] == b'\xfe' def is_resultset_packet(self): field_count = ord(self._data[0:1]) @@ -379,9 +405,9 @@ class FieldDescriptorPacket(MysqlPacket): def __init__(self, data, encoding): MysqlPacket.__init__(self, data, encoding) - self.__parse_field_descriptor(encoding) + self._parse_field_descriptor(encoding) - def __parse_field_descriptor(self, encoding): + def _parse_field_descriptor(self, encoding): """Parse the 'Field Descriptor' (Metadata) packet. This is compatible with MySQL 4.1+ (not compatible with MySQL 4.0). @@ -494,20 +520,23 @@ class Connection(object): The proper way to get an instance of this class is to call connect(). - """ - socket = None + _sock = None + _auth_plugin_name = '' + _closed = False - def __init__(self, host="localhost", user=None, password="", - database=None, port=3306, unix_socket=None, + def __init__(self, host=None, user=None, password="", + database=None, port=0, unix_socket=None, charset='', sql_mode=None, - read_default_file=None, conv=decoders, use_unicode=None, + read_default_file=None, conv=None, use_unicode=None, client_flag=0, cursorclass=Cursor, init_command=None, - connect_timeout=None, ssl=None, read_default_group=None, + connect_timeout=10, ssl=None, read_default_group=None, compress=None, named_pipe=None, no_delay=None, autocommit=False, db=None, passwd=None, local_infile=False, - max_allowed_packet=16*1024*1024, defer_connect=False): + max_allowed_packet=16*1024*1024, defer_connect=False, + auth_plugin_map={}, read_timeout=None, write_timeout=None, + bind_address=None): """ Establish a connection to the MySQL database. Accepts several arguments: @@ -516,15 +545,19 @@ class Connection(object): user: Username to log in as password: Password to use. database: Database to use, None to not use a particular one. - port: MySQL port to use, default is usually OK. + port: MySQL port to use, default is usually OK. (default: 3306) + bind_address: When the client has multiple network interfaces, specify + the interface from which to connect to the host. Argument can be + a hostname or an IP address. unix_socket: Optionally, you can use a unix socket rather than TCP/IP. charset: Charset you want to use. sql_mode: Default SQL_MODE to use. read_default_file: Specifies my.cnf file to read these parameters from under the [client] section. conv: - Decoders dictionary to use instead of the default one. - This is used to provide custom marshalling of types. See converters. + Conversion dictionary to use instead of the default one. + This is used to provide custom marshalling and unmarshaling of types. + See converters. use_unicode: Whether or not to default to unicode strings. This option defaults to true for Py3k. @@ -532,27 +565,29 @@ class Connection(object): cursorclass: Custom cursor class to use. init_command: Initial SQL statement to run when connection is established. connect_timeout: Timeout before throwing an exception when connecting. + (default: 10, min: 1, max: 31536000) ssl: A dict of arguments similar to mysql_ssl_set()'s parameters. For now the capath and cipher arguments are not supported. read_default_group: Group to read from in the configuration file. compress; Not supported named_pipe: Not supported - no_delay: Disable Nagle's algorithm on the socket. (deprecated, default: True) autocommit: Autocommit mode. None means use server default. (default: False) local_infile: Boolean to enable the use of LOAD DATA LOCAL command. (default: False) max_allowed_packet: Max size of packet sent to server in bytes. (default: 16MB) + Only used to limit size of "LOAD LOCAL INFILE" data packet smaller than default (16KB). defer_connect: Don't explicitly connect on contruction - wait for connect call. (default: False) - + auth_plugin_map: A dict of plugin names to a class that processes that plugin. + The class will take the Connection object as the argument to the constructor. + The class needs an authenticate method taking an authentication packet as + an argument. For the dialog plugin, a prompt(echo, prompt) method can be used + (if no authenticate method) for returning a string from the user. (experimental) db: Alias for database. (for compatibility to MySQLdb) passwd: Alias for password. (for compatibility to MySQLdb) """ if no_delay is not None: warnings.warn("no_delay option is deprecated", DeprecationWarning) - no_delay = bool(no_delay) - else: - no_delay = True if use_unicode is None and sys.version_info[0] > 2: use_unicode = True @@ -565,24 +600,10 @@ class Connection(object): if compress or named_pipe: raise NotImplementedError("compress and named_pipe arguments are not supported") - if local_infile: + self._local_infile = bool(local_infile) + if self._local_infile: client_flag |= CLIENT.LOCAL_FILES - if ssl and ('capath' in ssl or 'cipher' in ssl): - raise NotImplementedError('ssl options capath and cipher are not supported') - - self.ssl = False - if ssl: - if not SSL_ENABLED: - raise NotImplementedError("ssl module not found") - self.ssl = True - client_flag |= CLIENT.SSL - for k in ('key', 'cert', 'ca'): - v = None - if k in ssl: - v = ssl[k] - setattr(self, k, v) - if read_default_group and not read_default_file: if sys.platform.startswith("win"): read_default_file = "c:\\my.ini" @@ -610,15 +631,40 @@ class Connection(object): database = _config("database", database) unix_socket = _config("socket", unix_socket) port = int(_config("port", port)) + bind_address = _config("bind-address", bind_address) charset = _config("default-character-set", charset) + if not ssl: + ssl = {} + if isinstance(ssl, dict): + for key in ["ca", "capath", "cert", "key", "cipher"]: + value = _config("ssl-" + key, ssl.get(key)) + if value: + ssl[key] = value - self.host = host - self.port = port + self.ssl = False + if ssl: + if not SSL_ENABLED: + raise NotImplementedError("ssl module not found") + self.ssl = True + client_flag |= CLIENT.SSL + self.ctx = self._create_ssl_ctx(ssl) + + self.host = host or "localhost" + self.port = port or 3306 self.user = user or DEFAULT_USER self.password = password or "" self.db = database - self.no_delay = no_delay self.unix_socket = unix_socket + self.bind_address = bind_address + if not (0 < connect_timeout <= 31536000): + raise ValueError("connect_timeout should be >0 and <=31536000") + self.connect_timeout = connect_timeout or None + if read_timeout is not None and read_timeout <= 0: + raise ValueError("read_timeout should be >= 0") + self._read_timeout = read_timeout + if write_timeout is not None and write_timeout <= 0: + raise ValueError("write_timeout should be >= 0") + self._write_timeout = write_timeout if charset: self.charset = charset self.use_unicode = True @@ -631,13 +677,12 @@ class Connection(object): self.encoding = charset_by_name(self.charset).encoding - client_flag |= CLIENT.CAPABILITIES | CLIENT.MULTI_STATEMENTS + client_flag |= CLIENT.CAPABILITIES if self.db: client_flag |= CLIENT.CONNECT_WITH_DB self.client_flag = client_flag self.cursorclass = cursorclass - self.connect_timeout = connect_timeout self._result = None self._affected_rows = 0 @@ -646,44 +691,68 @@ class Connection(object): #: specified autocommit mode. None means use server default. self.autocommit_mode = autocommit - self.encoders = encoders # Need for MySQLdb compatibility. - self.decoders = conv + if conv is None: + conv = _conv + # Need for MySQLdb compatibility. + self.encoders = dict([(k, v) for (k, v) in conv.items() if type(k) is not int]) + self.decoders = dict([(k, v) for (k, v) in conv.items() if type(k) is int]) self.sql_mode = sql_mode self.init_command = init_command self.max_allowed_packet = max_allowed_packet + self._auth_plugin_map = auth_plugin_map if defer_connect: - self.socket = None + self._sock = None else: self.connect() + def _create_ssl_ctx(self, sslp): + if isinstance(sslp, ssl.SSLContext): + return sslp + ca = sslp.get('ca') + capath = sslp.get('capath') + hasnoca = ca is None and capath is None + ctx = ssl.create_default_context(cafile=ca, capath=capath) + ctx.check_hostname = not hasnoca and sslp.get('check_hostname', True) + ctx.verify_mode = ssl.CERT_NONE if hasnoca else ssl.CERT_REQUIRED + if 'cert' in sslp: + ctx.load_cert_chain(sslp['cert'], keyfile=sslp.get('key')) + if 'cipher' in sslp: + ctx.set_ciphers(sslp['cipher']) + ctx.options |= ssl.OP_NO_SSLv2 + ctx.options |= ssl.OP_NO_SSLv3 + return ctx + def close(self): """Send the quit message and close the socket""" - if self.socket is None: + if self._closed: raise err.Error("Already closed") + self._closed = True + if self._sock is None: + return send_data = struct.pack('= 5: self.client_flag |= CLIENT.MULTI_RESULTS @@ -1000,48 +1118,114 @@ class Connection(object): data_init = struct.pack('=5.0) + data += authresp + b'\0' - if self.db: + if self.db and self.server_capabilities & CLIENT.CONNECT_WITH_DB: if isinstance(self.db, text_type): self.db = self.db.encode(self.encoding) - data += self.db + int2byte(0) + data += self.db + b'\0' - data = pack_int24(len(data)) + int2byte(next_packet) + data - next_packet += 2 - - if DEBUG: dump_packet(data) - self._write_bytes(data) + if self.server_capabilities & CLIENT.PLUGIN_AUTH: + name = self._auth_plugin_name + if isinstance(name, text_type): + name = name.encode('ascii') + data += name + b'\0' + self.write_packet(data) auth_packet = self._read_packet() - # if old_passwords is enabled the packet will be 1 byte long and - # have the octet 254 + # if authentication method isn't accepted the first byte + # will have the octet 254 + if auth_packet.is_auth_switch_request(): + # https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchRequest + auth_packet.read_uint8() # 0xfe packet identifier + plugin_name = auth_packet.read_string() + if self.server_capabilities & CLIENT.PLUGIN_AUTH and plugin_name is not None: + auth_packet = self._process_auth(plugin_name, auth_packet) + else: + # send legacy handshake + data = _scramble_323(self.password.encode('latin1'), self.salt) + b'\0' + self.write_packet(data) + auth_packet = self._read_packet() - if auth_packet.is_eof_packet(): - # send legacy handshake - data = _scramble_323(self.password.encode('latin1'), self.salt) + b'\0' - data = pack_int24(len(data)) + int2byte(next_packet) + data - self._write_bytes(data) - auth_packet = self._read_packet() + def _process_auth(self, plugin_name, auth_packet): + plugin_class = self._auth_plugin_map.get(plugin_name) + if not plugin_class: + plugin_class = self._auth_plugin_map.get(plugin_name.decode('ascii')) + if plugin_class: + try: + handler = plugin_class(self) + return handler.authenticate(auth_packet) + except AttributeError: + if plugin_name != b'dialog': + raise err.OperationalError(2059, "Authentication plugin '%s'" \ + " not loaded: - %r missing authenticate method" % (plugin_name, plugin_class)) + except TypeError: + raise err.OperationalError(2059, "Authentication plugin '%s'" \ + " not loaded: - %r cannot be constructed with connection object" % (plugin_name, plugin_class)) + else: + handler = None + if plugin_name == b"mysql_native_password": + # https://dev.mysql.com/doc/internals/en/secure-password-authentication.html#packet-Authentication::Native41 + data = _scramble(self.password.encode('latin1'), auth_packet.read_all()) + b'\0' + elif plugin_name == b"mysql_old_password": + # https://dev.mysql.com/doc/internals/en/old-password-authentication.html + data = _scramble_323(self.password.encode('latin1'), auth_packet.read_all()) + b'\0' + elif plugin_name == b"mysql_clear_password": + # https://dev.mysql.com/doc/internals/en/clear-text-authentication.html + data = self.password.encode('latin1') + b'\0' + elif plugin_name == b"dialog": + pkt = auth_packet + while True: + flag = pkt.read_uint8() + echo = (flag & 0x06) == 0x02 + last = (flag & 0x01) == 0x01 + prompt = pkt.read_all() + + if prompt == b"Password: ": + self.write_packet(self.password.encode('latin1') + b'\0') + elif handler: + resp = 'no response - TypeError within plugin.prompt method' + try: + resp = handler.prompt(echo, prompt) + self.write_packet(resp + b'\0') + except AttributeError: + raise err.OperationalError(2059, "Authentication plugin '%s'" \ + " not loaded: - %r missing prompt method" % (plugin_name, handler)) + except TypeError: + raise err.OperationalError(2061, "Authentication plugin '%s'" \ + " %r didn't respond with string. Returned '%r' to prompt %r" % (plugin_name, handler, resp, prompt)) + else: + raise err.OperationalError(2059, "Authentication plugin '%s' (%r) not configured" % (plugin_name, handler)) + pkt = self._read_packet() + pkt.check_error() + if pkt.is_ok_packet() or last: + break + return pkt + else: + raise err.OperationalError(2059, "Authentication plugin '%s' not configured" % plugin_name) + + self.write_packet(data) + pkt = self._read_packet() + pkt.check_error() + return pkt # _mysql support def thread_id(self): @@ -1065,7 +1249,7 @@ class Connection(object): self.protocol_version = byte2int(data[i:i+1]) i += 1 - server_end = data.find(int2byte(0), i) + server_end = data.find(b'\0', i) self.server_version = data[i:server_end].decode('latin1') i = server_end + 1 @@ -1097,7 +1281,22 @@ class Connection(object): if len(data) >= i + salt_len: # salt_len includes auth_plugin_data_part_1 and filler self.salt += data[i:i+salt_len] - # TODO: AUTH PLUGIN NAME may appeare here. + i += salt_len + + i+=1 + # AUTH PLUGIN NAME may appear here. + if self.server_capabilities & CLIENT.PLUGIN_AUTH and len(data) >= i: + # Due to Bug#59453 the auth-plugin-name is missing the terminating + # NUL-char in versions prior to 5.5.10 and 5.6.2. + # ref: https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::Handshake + # didn't use version checks as mariadb is corrected and reports + # earlier than those two. + server_end = data.find(b'\0', i) + if server_end < 0: # pragma: no cover - very specific upstream bug + # not found \0 and last field so take it all + self._auth_plugin_name = data[i:].decode('latin1') + else: + self._auth_plugin_name = data[i:server_end].decode('latin1') def get_server_info(self): return self.server_version @@ -1117,6 +1316,9 @@ class Connection(object): class MySQLResult(object): def __init__(self, connection): + """ + :type connection: Connection + """ self.connection = connection self.affected_rows = None self.insert_id = None @@ -1144,7 +1346,7 @@ class MySQLResult(object): else: self._read_result_packet(first_packet) finally: - self.connection = False + self.connection = None def init_unbuffered_query(self): self.unbuffered_active = True @@ -1154,6 +1356,10 @@ class MySQLResult(object): self._read_ok_packet(first_packet) self.unbuffered_active = False self.connection = None + elif first_packet.is_load_local_packet(): + self._read_load_local_packet(first_packet) + self.unbuffered_active = False + self.connection = None else: self.field_count = first_packet.read_length_encoded_integer() self._get_descriptions() @@ -1173,22 +1379,33 @@ class MySQLResult(object): self.has_next = ok_packet.has_next def _read_load_local_packet(self, first_packet): + if not self.connection._local_infile: + raise RuntimeError( + "**WARN**: Received LOAD_LOCAL packet but local_infile option is false.") load_packet = LoadLocalPacketWrapper(first_packet) sender = LoadLocalFile(load_packet.filename, self.connection) - sender.send_data() + try: + sender.send_data() + except: + self.connection._read_packet() # skip ok packet + raise ok_packet = self.connection._read_packet() - if not ok_packet.is_ok_packet(): + if not ok_packet.is_ok_packet(): # pragma: no cover - upstream induced protocol error raise err.OperationalError(2014, "Commands Out of Sync") self._read_ok_packet(ok_packet) def _check_packet_is_eof(self, packet): - if packet.is_eof_packet(): - eof_packet = EOFPacketWrapper(packet) - self.warning_count = eof_packet.warning_count - self.has_next = eof_packet.has_next - return True - return False + if not packet.is_eof_packet(): + return False + #TODO: Support CLIENT.DEPRECATE_EOF + # 1) Add DEPRECATE_EOF to CAPABILITIES + # 2) Mask CAPABILITIES with server_capabilities + # 3) if server_capabilities & CLIENT.DEPRECATE_EOF: use OKPacketWrapper instead of EOFPacketWrapper + wp = EOFPacketWrapper(packet) + self.warning_count = wp.warning_count + self.has_next = wp.has_next + return True def _read_result_packet(self, first_packet): self.field_count = first_packet.read_length_encoded_integer() @@ -1239,7 +1456,12 @@ class MySQLResult(object): def _read_row_from_packet(self, packet): row = [] for encoding, converter in self.converters: - data = packet.read_length_coded_string() + try: + data = packet.read_length_coded_string() + except IndexError: + # No more columns in this row + # See https://github.com/PyMySQL/PyMySQL/pull/434 + break if data is not None: if encoding is not None: data = data.decode(encoding) @@ -1254,21 +1476,30 @@ class MySQLResult(object): self.fields = [] self.converters = [] use_unicode = self.connection.use_unicode + conn_encoding = self.connection.encoding description = [] + for i in range_type(self.field_count): field = self.connection._read_packet(FieldDescriptorPacket) self.fields.append(field) description.append(field.description()) field_type = field.type_code if use_unicode: - if field_type in TEXT_TYPES: - charset = charset_by_id(field.charsetnr) - if charset.is_binary: + if field_type == FIELD_TYPE.JSON: + # When SELECT from JSON column: charset = binary + # When SELECT CAST(... AS JSON): charset = connection encoding + # This behavior is different from TEXT / BLOB. + # We should decode result by connection encoding regardless charsetnr. + # See https://github.com/PyMySQL/PyMySQL/issues/488 + encoding = conn_encoding # SELECT CAST(... AS JSON) + elif field_type in TEXT_TYPES: + if field.charsetnr == 63: # binary # TEXTs with charset=binary means BINARY types. encoding = None else: - encoding = charset.encoding + encoding = conn_encoding else: + # Integers, Dates and Times, and other basic data is encoded in ascii encoding = 'ascii' else: encoding = None @@ -1290,28 +1521,20 @@ class LoadLocalFile(object): def send_data(self): """Send data packets from the local file to the server""" - if not self.connection.socket: + if not self.connection._sock: raise err.InterfaceError("(0, '')") + conn = self.connection - # sequence id is 2 as we already sent a query packet - seq_id = 2 try: with open(self.filename, 'rb') as open_file: - chunk_size = self.connection.max_allowed_packet - packet = b"" - + packet_size = min(conn.max_allowed_packet, 16*1024) # 16KB is efficient enough while True: - chunk = open_file.read(chunk_size) + chunk = open_file.read(packet_size) if not chunk: break - packet = struct.pack('Q", b)[0] -# +# # the snippet above is right, but MySQLdb doesn't process bits, # so we shouldn't either convert_bit = through @@ -309,7 +371,9 @@ encoders = { tuple: escape_sequence, list: escape_sequence, set: escape_sequence, + frozenset: escape_sequence, dict: escape_dict, + bytearray: escape_bytes, type(None): escape_None, datetime.date: escape_date, datetime.datetime: escape_datetime, @@ -350,7 +414,6 @@ decoders = { # for MySQLdb compatibility -conversions = decoders - -def Thing2Literal(obj): - return escape_str(str(obj)) +conversions = encoders.copy() +conversions.update(decoders) +Thing2Literal = escape_str diff --git a/server/www/packages/packages-common/pymysql/cursors.py b/server/www/packages/packages-common/pymysql/cursors.py index 266e137..dc3ce1e 100644 --- a/server/www/packages/packages-common/pymysql/cursors.py +++ b/server/www/packages/packages-common/pymysql/cursors.py @@ -5,33 +5,37 @@ import re import warnings from ._compat import range_type, text_type, PY2 - from . import err #: Regular expression for :meth:`Cursor.executemany`. #: executemany only suports simple bulk insert. #: You can use it to load large dataset. -RE_INSERT_VALUES = re.compile(r"""(INSERT\s.+\sVALUES\s+)(\(\s*%s\s*(?:,\s*%s\s*)*\))(\s*(?:ON DUPLICATE.*)?)\Z""", - re.IGNORECASE | re.DOTALL) +RE_INSERT_VALUES = re.compile( + r"\s*((?:INSERT|REPLACE)\s.+\sVALUES?\s+)" + + r"(\(\s*(?:%s|%\(.+\)s)\s*(?:,\s*(?:%s|%\(.+\)s)\s*)*\))" + + r"(\s*(?:ON DUPLICATE.*)?);?\s*\Z", + re.IGNORECASE | re.DOTALL) class Cursor(object): - ''' + """ This is the object you use to interact with the database. - ''' + """ - #: Max stetement size which :meth:`executemany` generates. + #: Max statement size which :meth:`executemany` generates. #: #: Max size of allowed statement is max_allowed_packet - packet_header_size. #: Default value of max_allowed_packet is 1048576. max_stmt_length = 1024000 + _defer_warnings = False + def __init__(self, connection): - ''' + """ Do not create an instance of a Cursor yourself. Call connections.Connection.cursor(). - ''' + """ self.connection = connection self.description = None self.rownumber = 0 @@ -40,11 +44,12 @@ class Cursor(object): self._executed = None self._result = None self._rows = None + self._warnings_handled = False def close(self): - ''' + """ Closing a cursor just exhausts all remaining data. - ''' + """ conn = self.connection if conn is None: return @@ -83,6 +88,9 @@ class Cursor(object): """Get the next query set""" conn = self._get_db() current_result = self._result + # for unbuffered queries warnings are only available once whole result has been read + if unbuffered: + self._show_warnings() if current_result is None or current_result is not conn._result: return None if not current_result.has_next: @@ -107,17 +115,17 @@ class Cursor(object): if isinstance(args, (tuple, list)): if PY2: args = tuple(map(ensure_bytes, args)) - return tuple(conn.escape(arg) for arg in args) + return tuple(conn.literal(arg) for arg in args) elif isinstance(args, dict): if PY2: args = dict((ensure_bytes(key), ensure_bytes(val)) for (key, val) in args.items()) - return dict((key, conn.escape(val)) for (key, val) in args.items()) + return dict((key, conn.literal(val)) for (key, val) in args.items()) else: # If it's not a dictionary let's try escaping it anyways. # Worst case it will throw a Value error if PY2: - ensure_bytes(args) + args = ensure_bytes(args) return conn.escape(args) def mogrify(self, query, args=None): @@ -137,7 +145,19 @@ class Cursor(object): return query def execute(self, query, args=None): - '''Execute a query''' + """Execute a query + + :param str query: Query to execute. + + :param args: parameters used with query. (optional) + :type args: tuple, list or dict + + :return: Number of affected rows + :rtype: int + + If args is a list or tuple, %s can be used as a placeholder in the query. + If args is a dict, %(name)s can be used as a placeholder in the query. + """ while self.nextset(): pass @@ -148,17 +168,23 @@ class Cursor(object): return result def executemany(self, query, args): + # type: (str, list) -> int """Run several data against one query - PyMySQL can execute bulkinsert for query like 'INSERT ... VALUES (%s)'. - In other form of queries, just run :meth:`execute` many times. + :param query: query to execute on server + :param args: Sequence of sequences or mappings. It is used as parameter. + :return: Number of rows affected, if any. + + This method improves performance on multiple-row INSERT and + REPLACE. Otherwise it is equivalent to looping over args with + execute(). """ if not args: return m = RE_INSERT_VALUES.match(query) if m: - q_prefix = m.group(1) + q_prefix = m.group(1) % () q_values = m.group(2).rstrip() q_postfix = m.group(3) or '' assert q_values[0] == '(' and q_values[-1] == ')' @@ -247,7 +273,7 @@ class Cursor(object): return args def fetchone(self): - ''' Fetch the next row ''' + """Fetch the next row""" self._check_executed() if self._rows is None or self.rownumber >= len(self._rows): return None @@ -256,7 +282,7 @@ class Cursor(object): return result def fetchmany(self, size=None): - ''' Fetch several rows ''' + """Fetch several rows""" self._check_executed() if self._rows is None: return () @@ -266,7 +292,7 @@ class Cursor(object): return result def fetchall(self): - ''' Fetch all the rows ''' + """Fetch all the rows""" self._check_executed() if self._rows is None: return () @@ -307,14 +333,18 @@ class Cursor(object): self.description = result.description self.lastrowid = result.insert_id self._rows = result.rows + self._warnings_handled = False - if result.warning_count > 0: - self._show_warnings(conn) + if not self._defer_warnings: + self._show_warnings() - def _show_warnings(self, conn): - if self._result and self._result.has_next: + def _show_warnings(self): + if self._warnings_handled: return - ws = conn.show_warnings() + self._warnings_handled = True + if self._result and (self._result.has_next or not self._result.warning_count): + return + ws = self._get_db().show_warnings() if ws is None: return for w in ws: @@ -322,7 +352,7 @@ class Cursor(object): if PY2: if isinstance(msg, unicode): msg = msg.encode('utf-8', 'replace') - warnings.warn(str(msg), err.Warning, 4) + warnings.warn(err.Warning(*w[1:3]), stacklevel=4) def __iter__(self): return iter(self.fetchone, None) @@ -373,8 +403,8 @@ class SSCursor(Cursor): or for connections to remote servers over a slow network. Instead of copying every row of data into a buffer, this will fetch - rows as needed. The upside of this, is the client uses much less memory, - and rows are returned much faster when traveling over a slow network, + rows as needed. The upside of this is the client uses much less memory, + and rows are returned much faster when traveling over a slow network or if the result set is very big. There are limitations, though. The MySQL protocol doesn't support @@ -383,6 +413,8 @@ class SSCursor(Cursor): possible to scroll backwards, as only the current row is held in memory. """ + _defer_warnings = True + def _conv_row(self, row): return row @@ -411,14 +443,15 @@ class SSCursor(Cursor): return self._nextset(unbuffered=True) def read_next(self): - """ Read next row """ + """Read next row""" return self._conv_row(self._result._read_rowdata_packet_unbuffered()) def fetchone(self): - """ Fetch next row """ + """Fetch next row""" self._check_executed() row = self.read_next() if row is None: + self._show_warnings() return None self.rownumber += 1 return row @@ -443,7 +476,7 @@ class SSCursor(Cursor): return self.fetchall_unbuffered() def fetchmany(self, size=None): - """ Fetch many """ + """Fetch many""" self._check_executed() if size is None: size = self.arraysize @@ -452,6 +485,7 @@ class SSCursor(Cursor): for i in range_type(size): row = self.read_next() if row is None: + self._show_warnings() break rows.append(row) self.rownumber += 1 @@ -482,4 +516,4 @@ class SSCursor(Cursor): class SSDictCursor(DictCursorMixin, SSCursor): - """ An unbuffered cursor, which returns results as a dictionary """ + """An unbuffered cursor, which returns results as a dictionary""" diff --git a/server/www/packages/packages-common/pymysql/err.py b/server/www/packages/packages-common/pymysql/err.py index 9b6f24e..2486263 100644 --- a/server/www/packages/packages-common/pymysql/err.py +++ b/server/www/packages/packages-common/pymysql/err.py @@ -68,10 +68,12 @@ class NotSupportedError(DatabaseError): error_map = {} + def _map_error(exc, *errors): for error in errors: error_map[error] = exc + _map_error(ProgrammingError, ER.DB_CREATE_EXISTS, ER.SYNTAX_ERROR, ER.PARSE_ERROR, ER.NO_SUCH_TABLE, ER.WRONG_DB_NAME, ER.WRONG_TABLE_NAME, ER.FIELD_SPECIFIED_TWICE, @@ -89,32 +91,17 @@ _map_error(OperationalError, ER.DBACCESS_DENIED_ERROR, ER.ACCESS_DENIED_ERROR, ER.CON_COUNT_ERROR, ER.TABLEACCESS_DENIED_ERROR, ER.COLUMNACCESS_DENIED_ERROR) + del _map_error, ER -def _get_error_info(data): +def raise_mysql_exception(data): errno = struct.unpack(' -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -"""RSA module - -Module for calculating large primes, and RSA encryption, decryption, signing -and verification. Includes generating public and private keys. - -WARNING: this implementation does not use random padding, compression of the -cleartext input to prevent repetitions, or other common security improvements. -Use with care. - -If you want to have a more secure implementation, use the functions from the -``rsa.pkcs1`` module. - -""" - -__author__ = "Sybren Stuvel, Barry Mead and Yesudeep Mangalapilly" -__date__ = "2015-07-29" -__version__ = '3.2' - -from rsa.key import newkeys, PrivateKey, PublicKey -from rsa.pkcs1 import encrypt, decrypt, sign, verify, DecryptionError, \ - VerificationError - -# Do doctest if we're run directly -if __name__ == "__main__": - import doctest - doctest.testmod() - -__all__ = ["newkeys", "encrypt", "decrypt", "sign", "verify", 'PublicKey', - 'PrivateKey', 'DecryptionError', 'VerificationError'] - diff --git a/server/www/packages/packages-common/rsa/_compat.py b/server/www/packages/packages-common/rsa/_compat.py deleted file mode 100644 index 3c4eb81..0000000 --- a/server/www/packages/packages-common/rsa/_compat.py +++ /dev/null @@ -1,160 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Python compatibility wrappers.""" - - -from __future__ import absolute_import - -import sys -from struct import pack - -try: - MAX_INT = sys.maxsize -except AttributeError: - MAX_INT = sys.maxint - -MAX_INT64 = (1 << 63) - 1 -MAX_INT32 = (1 << 31) - 1 -MAX_INT16 = (1 << 15) - 1 - -# Determine the word size of the processor. -if MAX_INT == MAX_INT64: - # 64-bit processor. - MACHINE_WORD_SIZE = 64 -elif MAX_INT == MAX_INT32: - # 32-bit processor. - MACHINE_WORD_SIZE = 32 -else: - # Else we just assume 64-bit processor keeping up with modern times. - MACHINE_WORD_SIZE = 64 - - -try: - # < Python3 - unicode_type = unicode - have_python3 = False -except NameError: - # Python3. - unicode_type = str - have_python3 = True - -# Fake byte literals. -if str is unicode_type: - def byte_literal(s): - return s.encode('latin1') -else: - def byte_literal(s): - return s - -# ``long`` is no more. Do type detection using this instead. -try: - integer_types = (int, long) -except NameError: - integer_types = (int,) - -b = byte_literal - -try: - # Python 2.6 or higher. - bytes_type = bytes -except NameError: - # Python 2.5 - bytes_type = str - - -# To avoid calling b() multiple times in tight loops. -ZERO_BYTE = b('\x00') -EMPTY_BYTE = b('') - - -def is_bytes(obj): - """ - Determines whether the given value is a byte string. - - :param obj: - The value to test. - :returns: - ``True`` if ``value`` is a byte string; ``False`` otherwise. - """ - return isinstance(obj, bytes_type) - - -def is_integer(obj): - """ - Determines whether the given value is an integer. - - :param obj: - The value to test. - :returns: - ``True`` if ``value`` is an integer; ``False`` otherwise. - """ - return isinstance(obj, integer_types) - - -def byte(num): - """ - Converts a number between 0 and 255 (both inclusive) to a base-256 (byte) - representation. - - Use it as a replacement for ``chr`` where you are expecting a byte - because this will work on all current versions of Python:: - - :param num: - An unsigned integer between 0 and 255 (both inclusive). - :returns: - A single byte. - """ - return pack("B", num) - - -def get_word_alignment(num, force_arch=64, - _machine_word_size=MACHINE_WORD_SIZE): - """ - Returns alignment details for the given number based on the platform - Python is running on. - - :param num: - Unsigned integral number. - :param force_arch: - If you don't want to use 64-bit unsigned chunks, set this to - anything other than 64. 32-bit chunks will be preferred then. - Default 64 will be used when on a 64-bit machine. - :param _machine_word_size: - (Internal) The machine word size used for alignment. - :returns: - 4-tuple:: - - (word_bits, word_bytes, - max_uint, packing_format_type) - """ - max_uint64 = 0xffffffffffffffff - max_uint32 = 0xffffffff - max_uint16 = 0xffff - max_uint8 = 0xff - - if force_arch == 64 and _machine_word_size >= 64 and num > max_uint32: - # 64-bit unsigned integer. - return 64, 8, max_uint64, "Q" - elif num > max_uint16: - # 32-bit unsigned integer - return 32, 4, max_uint32, "L" - elif num > max_uint8: - # 16-bit unsigned integer. - return 16, 2, max_uint16, "H" - else: - # 8-bit unsigned integer. - return 8, 1, max_uint8, "B" diff --git a/server/www/packages/packages-common/rsa/_version133.py b/server/www/packages/packages-common/rsa/_version133.py deleted file mode 100644 index 230a03c..0000000 --- a/server/www/packages/packages-common/rsa/_version133.py +++ /dev/null @@ -1,442 +0,0 @@ -"""RSA module -pri = k[1] //Private part of keys d,p,q - -Module for calculating large primes, and RSA encryption, decryption, -signing and verification. Includes generating public and private keys. - -WARNING: this code implements the mathematics of RSA. It is not suitable for -real-world secure cryptography purposes. It has not been reviewed by a security -expert. It does not include padding of data. There are many ways in which the -output of this module, when used without any modification, can be sucessfully -attacked. -""" - -__author__ = "Sybren Stuvel, Marloes de Boer and Ivo Tamboer" -__date__ = "2010-02-05" -__version__ = '1.3.3' - -# NOTE: Python's modulo can return negative numbers. We compensate for -# this behaviour using the abs() function - -from cPickle import dumps, loads -import base64 -import math -import os -import random -import sys -import types -import zlib - -from rsa._compat import byte - -# Display a warning that this insecure version is imported. -import warnings -warnings.warn('Insecure version of the RSA module is imported as %s, be careful' - % __name__) - -def gcd(p, q): - """Returns the greatest common divisor of p and q - - - >>> gcd(42, 6) - 6 - """ - if p>> (128*256 + 64)*256 + + 15 - 8405007 - >>> l = [128, 64, 15] - >>> bytes2int(l) - 8405007 - """ - - if not (type(bytes) is types.ListType or type(bytes) is types.StringType): - raise TypeError("You must pass a string or a list") - - # Convert byte stream to integer - integer = 0 - for byte in bytes: - integer *= 256 - if type(byte) is types.StringType: byte = ord(byte) - integer += byte - - return integer - -def int2bytes(number): - """Converts a number to a string of bytes - - >>> bytes2int(int2bytes(123456789)) - 123456789 - """ - - if not (type(number) is types.LongType or type(number) is types.IntType): - raise TypeError("You must pass a long or an int") - - string = "" - - while number > 0: - string = "%s%s" % (byte(number & 0xFF), string) - number /= 256 - - return string - -def fast_exponentiation(a, p, n): - """Calculates r = a^p mod n - """ - result = a % n - remainders = [] - while p != 1: - remainders.append(p & 1) - p = p >> 1 - while remainders: - rem = remainders.pop() - result = ((a ** rem) * result ** 2) % n - return result - -def read_random_int(nbits): - """Reads a random integer of approximately nbits bits rounded up - to whole bytes""" - - nbytes = ceil(nbits/8.) - randomdata = os.urandom(nbytes) - return bytes2int(randomdata) - -def ceil(x): - """ceil(x) -> int(math.ceil(x))""" - - return int(math.ceil(x)) - -def randint(minvalue, maxvalue): - """Returns a random integer x with minvalue <= x <= maxvalue""" - - # Safety - get a lot of random data even if the range is fairly - # small - min_nbits = 32 - - # The range of the random numbers we need to generate - range = maxvalue - minvalue - - # Which is this number of bytes - rangebytes = ceil(math.log(range, 2) / 8.) - - # Convert to bits, but make sure it's always at least min_nbits*2 - rangebits = max(rangebytes * 8, min_nbits * 2) - - # Take a random number of bits between min_nbits and rangebits - nbits = random.randint(min_nbits, rangebits) - - return (read_random_int(nbits) % range) + minvalue - -def fermat_little_theorem(p): - """Returns 1 if p may be prime, and something else if p definitely - is not prime""" - - a = randint(1, p-1) - return fast_exponentiation(a, p-1, p) - -def jacobi(a, b): - """Calculates the value of the Jacobi symbol (a/b) - """ - - if a % b == 0: - return 0 - result = 1 - while a > 1: - if a & 1: - if ((a-1)*(b-1) >> 2) & 1: - result = -result - b, a = a, b % a - else: - if ((b ** 2 - 1) >> 3) & 1: - result = -result - a = a >> 1 - return result - -def jacobi_witness(x, n): - """Returns False if n is an Euler pseudo-prime with base x, and - True otherwise. - """ - - j = jacobi(x, n) % n - f = fast_exponentiation(x, (n-1)/2, n) - - if j == f: return False - return True - -def randomized_primality_testing(n, k): - """Calculates whether n is composite (which is always correct) or - prime (which is incorrect with error probability 2**-k) - - Returns False if the number if composite, and True if it's - probably prime. - """ - - q = 0.5 # Property of the jacobi_witness function - - # t = int(math.ceil(k / math.log(1/q, 2))) - t = ceil(k / math.log(1/q, 2)) - for i in range(t+1): - x = randint(1, n-1) - if jacobi_witness(x, n): return False - - return True - -def is_prime(number): - """Returns True if the number is prime, and False otherwise. - - >>> is_prime(42) - 0 - >>> is_prime(41) - 1 - """ - - """ - if not fermat_little_theorem(number) == 1: - # Not prime, according to Fermat's little theorem - return False - """ - - if randomized_primality_testing(number, 5): - # Prime, according to Jacobi - return True - - # Not prime - return False - - -def getprime(nbits): - """Returns a prime number of max. 'math.ceil(nbits/8)*8' bits. In - other words: nbits is rounded up to whole bytes. - - >>> p = getprime(8) - >>> is_prime(p-1) - 0 - >>> is_prime(p) - 1 - >>> is_prime(p+1) - 0 - """ - - nbytes = int(math.ceil(nbits/8.)) - - while True: - integer = read_random_int(nbits) - - # Make sure it's odd - integer |= 1 - - # Test for primeness - if is_prime(integer): break - - # Retry if not prime - - return integer - -def are_relatively_prime(a, b): - """Returns True if a and b are relatively prime, and False if they - are not. - - >>> are_relatively_prime(2, 3) - 1 - >>> are_relatively_prime(2, 4) - 0 - """ - - d = gcd(a, b) - return (d == 1) - -def find_p_q(nbits): - """Returns a tuple of two different primes of nbits bits""" - - p = getprime(nbits) - while True: - q = getprime(nbits) - if not q == p: break - - return (p, q) - -def extended_euclid_gcd(a, b): - """Returns a tuple (d, i, j) such that d = gcd(a, b) = ia + jb - """ - - if b == 0: - return (a, 1, 0) - - q = abs(a % b) - r = long(a / b) - (d, k, l) = extended_euclid_gcd(b, q) - - return (d, l, k - l*r) - -# Main function: calculate encryption and decryption keys -def calculate_keys(p, q, nbits): - """Calculates an encryption and a decryption key for p and q, and - returns them as a tuple (e, d)""" - - n = p * q - phi_n = (p-1) * (q-1) - - while True: - # Make sure e has enough bits so we ensure "wrapping" through - # modulo n - e = getprime(max(8, nbits/2)) - if are_relatively_prime(e, n) and are_relatively_prime(e, phi_n): break - - (d, i, j) = extended_euclid_gcd(e, phi_n) - - if not d == 1: - raise Exception("e (%d) and phi_n (%d) are not relatively prime" % (e, phi_n)) - - if not (e * i) % phi_n == 1: - raise Exception("e (%d) and i (%d) are not mult. inv. modulo phi_n (%d)" % (e, i, phi_n)) - - return (e, i) - - -def gen_keys(nbits): - """Generate RSA keys of nbits bits. Returns (p, q, e, d). - - Note: this can take a long time, depending on the key size. - """ - - while True: - (p, q) = find_p_q(nbits) - (e, d) = calculate_keys(p, q, nbits) - - # For some reason, d is sometimes negative. We don't know how - # to fix it (yet), so we keep trying until everything is shiny - if d > 0: break - - return (p, q, e, d) - -def gen_pubpriv_keys(nbits): - """Generates public and private keys, and returns them as (pub, - priv). - - The public key consists of a dict {e: ..., , n: ....). The private - key consists of a dict {d: ...., p: ...., q: ....). - """ - - (p, q, e, d) = gen_keys(nbits) - - return ( {'e': e, 'n': p*q}, {'d': d, 'p': p, 'q': q} ) - -def encrypt_int(message, ekey, n): - """Encrypts a message using encryption key 'ekey', working modulo - n""" - - if type(message) is types.IntType: - return encrypt_int(long(message), ekey, n) - - if not type(message) is types.LongType: - raise TypeError("You must pass a long or an int") - - if message > 0 and \ - math.floor(math.log(message, 2)) > math.floor(math.log(n, 2)): - raise OverflowError("The message is too long") - - return fast_exponentiation(message, ekey, n) - -def decrypt_int(cyphertext, dkey, n): - """Decrypts a cypher text using the decryption key 'dkey', working - modulo n""" - - return encrypt_int(cyphertext, dkey, n) - -def sign_int(message, dkey, n): - """Signs 'message' using key 'dkey', working modulo n""" - - return decrypt_int(message, dkey, n) - -def verify_int(signed, ekey, n): - """verifies 'signed' using key 'ekey', working modulo n""" - - return encrypt_int(signed, ekey, n) - -def picklechops(chops): - """Pickles and base64encodes it's argument chops""" - - value = zlib.compress(dumps(chops)) - encoded = base64.encodestring(value) - return encoded.strip() - -def unpicklechops(string): - """base64decodes and unpickes it's argument string into chops""" - - return loads(zlib.decompress(base64.decodestring(string))) - -def chopstring(message, key, n, funcref): - """Splits 'message' into chops that are at most as long as n, - converts these into integers, and calls funcref(integer, key, n) - for each chop. - - Used by 'encrypt' and 'sign'. - """ - - msglen = len(message) - mbits = msglen * 8 - nbits = int(math.floor(math.log(n, 2))) - nbytes = nbits / 8 - blocks = msglen / nbytes - - if msglen % nbytes > 0: - blocks += 1 - - cypher = [] - - for bindex in range(blocks): - offset = bindex * nbytes - block = message[offset:offset+nbytes] - value = bytes2int(block) - cypher.append(funcref(value, key, n)) - - return picklechops(cypher) - -def gluechops(chops, key, n, funcref): - """Glues chops back together into a string. calls - funcref(integer, key, n) for each chop. - - Used by 'decrypt' and 'verify'. - """ - message = "" - - chops = unpicklechops(chops) - - for cpart in chops: - mpart = funcref(cpart, key, n) - message += int2bytes(mpart) - - return message - -def encrypt(message, key): - """Encrypts a string 'message' with the public key 'key'""" - - return chopstring(message, key['e'], key['n'], encrypt_int) - -def sign(message, key): - """Signs a string 'message' with the private key 'key'""" - - return chopstring(message, key['d'], key['p']*key['q'], decrypt_int) - -def decrypt(cypher, key): - """Decrypts a cypher with the private key 'key'""" - - return gluechops(cypher, key['d'], key['p']*key['q'], decrypt_int) - -def verify(cypher, key): - """Verifies a cypher with the public key 'key'""" - - return gluechops(cypher, key['e'], key['n'], encrypt_int) - -# Do doctest if we're not imported -if __name__ == "__main__": - import doctest - doctest.testmod() - -__all__ = ["gen_pubpriv_keys", "encrypt", "decrypt", "sign", "verify"] - diff --git a/server/www/packages/packages-common/rsa/_version200.py b/server/www/packages/packages-common/rsa/_version200.py deleted file mode 100644 index f915653..0000000 --- a/server/www/packages/packages-common/rsa/_version200.py +++ /dev/null @@ -1,529 +0,0 @@ -"""RSA module - -Module for calculating large primes, and RSA encryption, decryption, -signing and verification. Includes generating public and private keys. - -WARNING: this implementation does not use random padding, compression of the -cleartext input to prevent repetitions, or other common security improvements. -Use with care. - -""" - -__author__ = "Sybren Stuvel, Marloes de Boer, Ivo Tamboer, and Barry Mead" -__date__ = "2010-02-08" -__version__ = '2.0' - -import math -import os -import random -import sys -import types -from rsa._compat import byte - -# Display a warning that this insecure version is imported. -import warnings -warnings.warn('Insecure version of the RSA module is imported as %s' % __name__) - - -def bit_size(number): - """Returns the number of bits required to hold a specific long number""" - - return int(math.ceil(math.log(number,2))) - -def gcd(p, q): - """Returns the greatest common divisor of p and q - >>> gcd(48, 180) - 12 - """ - # Iterateive Version is faster and uses much less stack space - while q != 0: - if p < q: (p,q) = (q,p) - (p,q) = (q, p % q) - return p - - -def bytes2int(bytes): - """Converts a list of bytes or a string to an integer - - >>> (((128 * 256) + 64) * 256) + 15 - 8405007 - >>> l = [128, 64, 15] - >>> bytes2int(l) #same as bytes2int('\x80@\x0f') - 8405007 - """ - - if not (type(bytes) is types.ListType or type(bytes) is types.StringType): - raise TypeError("You must pass a string or a list") - - # Convert byte stream to integer - integer = 0 - for byte in bytes: - integer *= 256 - if type(byte) is types.StringType: byte = ord(byte) - integer += byte - - return integer - -def int2bytes(number): - """ - Converts a number to a string of bytes - """ - - if not (type(number) is types.LongType or type(number) is types.IntType): - raise TypeError("You must pass a long or an int") - - string = "" - - while number > 0: - string = "%s%s" % (byte(number & 0xFF), string) - number /= 256 - - return string - -def to64(number): - """Converts a number in the range of 0 to 63 into base 64 digit - character in the range of '0'-'9', 'A'-'Z', 'a'-'z','-','_'. - - >>> to64(10) - 'A' - """ - - if not (type(number) is types.LongType or type(number) is types.IntType): - raise TypeError("You must pass a long or an int") - - if 0 <= number <= 9: #00-09 translates to '0' - '9' - return byte(number + 48) - - if 10 <= number <= 35: - return byte(number + 55) #10-35 translates to 'A' - 'Z' - - if 36 <= number <= 61: - return byte(number + 61) #36-61 translates to 'a' - 'z' - - if number == 62: # 62 translates to '-' (minus) - return byte(45) - - if number == 63: # 63 translates to '_' (underscore) - return byte(95) - - raise ValueError('Invalid Base64 value: %i' % number) - - -def from64(number): - """Converts an ordinal character value in the range of - 0-9,A-Z,a-z,-,_ to a number in the range of 0-63. - - >>> from64(49) - 1 - """ - - if not (type(number) is types.LongType or type(number) is types.IntType): - raise TypeError("You must pass a long or an int") - - if 48 <= number <= 57: #ord('0') - ord('9') translates to 0-9 - return(number - 48) - - if 65 <= number <= 90: #ord('A') - ord('Z') translates to 10-35 - return(number - 55) - - if 97 <= number <= 122: #ord('a') - ord('z') translates to 36-61 - return(number - 61) - - if number == 45: #ord('-') translates to 62 - return(62) - - if number == 95: #ord('_') translates to 63 - return(63) - - raise ValueError('Invalid Base64 value: %i' % number) - - -def int2str64(number): - """Converts a number to a string of base64 encoded characters in - the range of '0'-'9','A'-'Z,'a'-'z','-','_'. - - >>> int2str64(123456789) - '7MyqL' - """ - - if not (type(number) is types.LongType or type(number) is types.IntType): - raise TypeError("You must pass a long or an int") - - string = "" - - while number > 0: - string = "%s%s" % (to64(number & 0x3F), string) - number /= 64 - - return string - - -def str642int(string): - """Converts a base64 encoded string into an integer. - The chars of this string in in the range '0'-'9','A'-'Z','a'-'z','-','_' - - >>> str642int('7MyqL') - 123456789 - """ - - if not (type(string) is types.ListType or type(string) is types.StringType): - raise TypeError("You must pass a string or a list") - - integer = 0 - for byte in string: - integer *= 64 - if type(byte) is types.StringType: byte = ord(byte) - integer += from64(byte) - - return integer - -def read_random_int(nbits): - """Reads a random integer of approximately nbits bits rounded up - to whole bytes""" - - nbytes = int(math.ceil(nbits/8.)) - randomdata = os.urandom(nbytes) - return bytes2int(randomdata) - -def randint(minvalue, maxvalue): - """Returns a random integer x with minvalue <= x <= maxvalue""" - - # Safety - get a lot of random data even if the range is fairly - # small - min_nbits = 32 - - # The range of the random numbers we need to generate - range = (maxvalue - minvalue) + 1 - - # Which is this number of bytes - rangebytes = ((bit_size(range) + 7) / 8) - - # Convert to bits, but make sure it's always at least min_nbits*2 - rangebits = max(rangebytes * 8, min_nbits * 2) - - # Take a random number of bits between min_nbits and rangebits - nbits = random.randint(min_nbits, rangebits) - - return (read_random_int(nbits) % range) + minvalue - -def jacobi(a, b): - """Calculates the value of the Jacobi symbol (a/b) - where both a and b are positive integers, and b is odd - """ - - if a == 0: return 0 - result = 1 - while a > 1: - if a & 1: - if ((a-1)*(b-1) >> 2) & 1: - result = -result - a, b = b % a, a - else: - if (((b * b) - 1) >> 3) & 1: - result = -result - a >>= 1 - if a == 0: return 0 - return result - -def jacobi_witness(x, n): - """Returns False if n is an Euler pseudo-prime with base x, and - True otherwise. - """ - - j = jacobi(x, n) % n - f = pow(x, (n-1)/2, n) - - if j == f: return False - return True - -def randomized_primality_testing(n, k): - """Calculates whether n is composite (which is always correct) or - prime (which is incorrect with error probability 2**-k) - - Returns False if the number is composite, and True if it's - probably prime. - """ - - # 50% of Jacobi-witnesses can report compositness of non-prime numbers - - for i in range(k): - x = randint(1, n-1) - if jacobi_witness(x, n): return False - - return True - -def is_prime(number): - """Returns True if the number is prime, and False otherwise. - - >>> is_prime(42) - 0 - >>> is_prime(41) - 1 - """ - - if randomized_primality_testing(number, 6): - # Prime, according to Jacobi - return True - - # Not prime - return False - - -def getprime(nbits): - """Returns a prime number of max. 'math.ceil(nbits/8)*8' bits. In - other words: nbits is rounded up to whole bytes. - - >>> p = getprime(8) - >>> is_prime(p-1) - 0 - >>> is_prime(p) - 1 - >>> is_prime(p+1) - 0 - """ - - while True: - integer = read_random_int(nbits) - - # Make sure it's odd - integer |= 1 - - # Test for primeness - if is_prime(integer): break - - # Retry if not prime - - return integer - -def are_relatively_prime(a, b): - """Returns True if a and b are relatively prime, and False if they - are not. - - >>> are_relatively_prime(2, 3) - 1 - >>> are_relatively_prime(2, 4) - 0 - """ - - d = gcd(a, b) - return (d == 1) - -def find_p_q(nbits): - """Returns a tuple of two different primes of nbits bits""" - pbits = nbits + (nbits/16) #Make sure that p and q aren't too close - qbits = nbits - (nbits/16) #or the factoring programs can factor n - p = getprime(pbits) - while True: - q = getprime(qbits) - #Make sure p and q are different. - if not q == p: break - return (p, q) - -def extended_gcd(a, b): - """Returns a tuple (r, i, j) such that r = gcd(a, b) = ia + jb - """ - # r = gcd(a,b) i = multiplicitive inverse of a mod b - # or j = multiplicitive inverse of b mod a - # Neg return values for i or j are made positive mod b or a respectively - # Iterateive Version is faster and uses much less stack space - x = 0 - y = 1 - lx = 1 - ly = 0 - oa = a #Remember original a/b to remove - ob = b #negative values from return results - while b != 0: - q = long(a/b) - (a, b) = (b, a % b) - (x, lx) = ((lx - (q * x)),x) - (y, ly) = ((ly - (q * y)),y) - if (lx < 0): lx += ob #If neg wrap modulo orignal b - if (ly < 0): ly += oa #If neg wrap modulo orignal a - return (a, lx, ly) #Return only positive values - -# Main function: calculate encryption and decryption keys -def calculate_keys(p, q, nbits): - """Calculates an encryption and a decryption key for p and q, and - returns them as a tuple (e, d)""" - - n = p * q - phi_n = (p-1) * (q-1) - - while True: - # Make sure e has enough bits so we ensure "wrapping" through - # modulo n - e = max(65537,getprime(nbits/4)) - if are_relatively_prime(e, n) and are_relatively_prime(e, phi_n): break - - (d, i, j) = extended_gcd(e, phi_n) - - if not d == 1: - raise Exception("e (%d) and phi_n (%d) are not relatively prime" % (e, phi_n)) - if (i < 0): - raise Exception("New extended_gcd shouldn't return negative values") - if not (e * i) % phi_n == 1: - raise Exception("e (%d) and i (%d) are not mult. inv. modulo phi_n (%d)" % (e, i, phi_n)) - - return (e, i) - - -def gen_keys(nbits): - """Generate RSA keys of nbits bits. Returns (p, q, e, d). - - Note: this can take a long time, depending on the key size. - """ - - (p, q) = find_p_q(nbits) - (e, d) = calculate_keys(p, q, nbits) - - return (p, q, e, d) - -def newkeys(nbits): - """Generates public and private keys, and returns them as (pub, - priv). - - The public key consists of a dict {e: ..., , n: ....). The private - key consists of a dict {d: ...., p: ...., q: ....). - """ - nbits = max(9,nbits) # Don't let nbits go below 9 bits - (p, q, e, d) = gen_keys(nbits) - - return ( {'e': e, 'n': p*q}, {'d': d, 'p': p, 'q': q} ) - -def encrypt_int(message, ekey, n): - """Encrypts a message using encryption key 'ekey', working modulo n""" - - if type(message) is types.IntType: - message = long(message) - - if not type(message) is types.LongType: - raise TypeError("You must pass a long or int") - - if message < 0 or message > n: - raise OverflowError("The message is too long") - - #Note: Bit exponents start at zero (bit counts start at 1) this is correct - safebit = bit_size(n) - 2 #compute safe bit (MSB - 1) - message += (1 << safebit) #add safebit to ensure folding - - return pow(message, ekey, n) - -def decrypt_int(cyphertext, dkey, n): - """Decrypts a cypher text using the decryption key 'dkey', working - modulo n""" - - message = pow(cyphertext, dkey, n) - - safebit = bit_size(n) - 2 #compute safe bit (MSB - 1) - message -= (1 << safebit) #remove safebit before decode - - return message - -def encode64chops(chops): - """base64encodes chops and combines them into a ',' delimited string""" - - chips = [] #chips are character chops - - for value in chops: - chips.append(int2str64(value)) - - #delimit chops with comma - encoded = ','.join(chips) - - return encoded - -def decode64chops(string): - """base64decodes and makes a ',' delimited string into chops""" - - chips = string.split(',') #split chops at commas - - chops = [] - - for string in chips: #make char chops (chips) into chops - chops.append(str642int(string)) - - return chops - -def chopstring(message, key, n, funcref): - """Chops the 'message' into integers that fit into n, - leaving room for a safebit to be added to ensure that all - messages fold during exponentiation. The MSB of the number n - is not independant modulo n (setting it could cause overflow), so - use the next lower bit for the safebit. Therefore reserve 2-bits - in the number n for non-data bits. Calls specified encryption - function for each chop. - - Used by 'encrypt' and 'sign'. - """ - - msglen = len(message) - mbits = msglen * 8 - #Set aside 2-bits so setting of safebit won't overflow modulo n. - nbits = bit_size(n) - 2 # leave room for safebit - nbytes = nbits / 8 - blocks = msglen / nbytes - - if msglen % nbytes > 0: - blocks += 1 - - cypher = [] - - for bindex in range(blocks): - offset = bindex * nbytes - block = message[offset:offset+nbytes] - value = bytes2int(block) - cypher.append(funcref(value, key, n)) - - return encode64chops(cypher) #Encode encrypted ints to base64 strings - -def gluechops(string, key, n, funcref): - """Glues chops back together into a string. calls - funcref(integer, key, n) for each chop. - - Used by 'decrypt' and 'verify'. - """ - message = "" - - chops = decode64chops(string) #Decode base64 strings into integer chops - - for cpart in chops: - mpart = funcref(cpart, key, n) #Decrypt each chop - message += int2bytes(mpart) #Combine decrypted strings into a msg - - return message - -def encrypt(message, key): - """Encrypts a string 'message' with the public key 'key'""" - if 'n' not in key: - raise Exception("You must use the public key with encrypt") - - return chopstring(message, key['e'], key['n'], encrypt_int) - -def sign(message, key): - """Signs a string 'message' with the private key 'key'""" - if 'p' not in key: - raise Exception("You must use the private key with sign") - - return chopstring(message, key['d'], key['p']*key['q'], encrypt_int) - -def decrypt(cypher, key): - """Decrypts a string 'cypher' with the private key 'key'""" - if 'p' not in key: - raise Exception("You must use the private key with decrypt") - - return gluechops(cypher, key['d'], key['p']*key['q'], decrypt_int) - -def verify(cypher, key): - """Verifies a string 'cypher' with the public key 'key'""" - if 'n' not in key: - raise Exception("You must use the public key with verify") - - return gluechops(cypher, key['e'], key['n'], decrypt_int) - -# Do doctest if we're not imported -if __name__ == "__main__": - import doctest - doctest.testmod() - -__all__ = ["newkeys", "encrypt", "decrypt", "sign", "verify"] - diff --git a/server/www/packages/packages-common/rsa/asn1.py b/server/www/packages/packages-common/rsa/asn1.py deleted file mode 100644 index 706e6cf..0000000 --- a/server/www/packages/packages-common/rsa/asn1.py +++ /dev/null @@ -1,35 +0,0 @@ -'''ASN.1 definitions. - -Not all ASN.1-handling code use these definitions, but when it does, they should be here. -''' - -from pyasn1.type import univ, namedtype, tag - -class PubKeyHeader(univ.Sequence): - componentType = namedtype.NamedTypes( - namedtype.NamedType('oid', univ.ObjectIdentifier()), - namedtype.NamedType('parameters', univ.Null()), - ) - -class OpenSSLPubKey(univ.Sequence): - componentType = namedtype.NamedTypes( - namedtype.NamedType('header', PubKeyHeader()), - - # This little hack (the implicit tag) allows us to get a Bit String as Octet String - namedtype.NamedType('key', univ.OctetString().subtype( - implicitTag=tag.Tag(tagClass=0, tagFormat=0, tagId=3))), - ) - - -class AsnPubKey(univ.Sequence): - '''ASN.1 contents of DER encoded public key: - - RSAPublicKey ::= SEQUENCE { - modulus INTEGER, -- n - publicExponent INTEGER, -- e - ''' - - componentType = namedtype.NamedTypes( - namedtype.NamedType('modulus', univ.Integer()), - namedtype.NamedType('publicExponent', univ.Integer()), - ) diff --git a/server/www/packages/packages-common/rsa/bigfile.py b/server/www/packages/packages-common/rsa/bigfile.py deleted file mode 100644 index 516cf56..0000000 --- a/server/www/packages/packages-common/rsa/bigfile.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -'''Large file support - - - break a file into smaller blocks, and encrypt them, and store the - encrypted blocks in another file. - - - take such an encrypted files, decrypt its blocks, and reconstruct the - original file. - -The encrypted file format is as follows, where || denotes byte concatenation: - - FILE := VERSION || BLOCK || BLOCK ... - - BLOCK := LENGTH || DATA - - LENGTH := varint-encoded length of the subsequent data. Varint comes from - Google Protobuf, and encodes an integer into a variable number of bytes. - Each byte uses the 7 lowest bits to encode the value. The highest bit set - to 1 indicates the next byte is also part of the varint. The last byte will - have this bit set to 0. - -This file format is called the VARBLOCK format, in line with the varint format -used to denote the block sizes. - -''' - -from rsa import key, common, pkcs1, varblock -from rsa._compat import byte - -def encrypt_bigfile(infile, outfile, pub_key): - '''Encrypts a file, writing it to 'outfile' in VARBLOCK format. - - :param infile: file-like object to read the cleartext from - :param outfile: file-like object to write the crypto in VARBLOCK format to - :param pub_key: :py:class:`rsa.PublicKey` to encrypt with - - ''' - - if not isinstance(pub_key, key.PublicKey): - raise TypeError('Public key required, but got %r' % pub_key) - - key_bytes = common.bit_size(pub_key.n) // 8 - blocksize = key_bytes - 11 # keep space for PKCS#1 padding - - # Write the version number to the VARBLOCK file - outfile.write(byte(varblock.VARBLOCK_VERSION)) - - # Encrypt and write each block - for block in varblock.yield_fixedblocks(infile, blocksize): - crypto = pkcs1.encrypt(block, pub_key) - - varblock.write_varint(outfile, len(crypto)) - outfile.write(crypto) - -def decrypt_bigfile(infile, outfile, priv_key): - '''Decrypts an encrypted VARBLOCK file, writing it to 'outfile' - - :param infile: file-like object to read the crypto in VARBLOCK format from - :param outfile: file-like object to write the cleartext to - :param priv_key: :py:class:`rsa.PrivateKey` to decrypt with - - ''' - - if not isinstance(priv_key, key.PrivateKey): - raise TypeError('Private key required, but got %r' % priv_key) - - for block in varblock.yield_varblocks(infile): - cleartext = pkcs1.decrypt(block, priv_key) - outfile.write(cleartext) - -__all__ = ['encrypt_bigfile', 'decrypt_bigfile'] - diff --git a/server/www/packages/packages-common/rsa/cli.py b/server/www/packages/packages-common/rsa/cli.py deleted file mode 100644 index 527cc49..0000000 --- a/server/www/packages/packages-common/rsa/cli.py +++ /dev/null @@ -1,379 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -'''Commandline scripts. - -These scripts are called by the executables defined in setup.py. -''' - -from __future__ import with_statement, print_function - -import abc -import sys -from optparse import OptionParser - -import rsa -import rsa.bigfile -import rsa.pkcs1 - -HASH_METHODS = sorted(rsa.pkcs1.HASH_METHODS.keys()) - -def keygen(): - '''Key generator.''' - - # Parse the CLI options - parser = OptionParser(usage='usage: %prog [options] keysize', - description='Generates a new RSA keypair of "keysize" bits.') - - parser.add_option('--pubout', type='string', - help='Output filename for the public key. The public key is ' - 'not saved if this option is not present. You can use ' - 'pyrsa-priv2pub to create the public key file later.') - - parser.add_option('-o', '--out', type='string', - help='Output filename for the private key. The key is ' - 'written to stdout if this option is not present.') - - parser.add_option('--form', - help='key format of the private and public keys - default PEM', - choices=('PEM', 'DER'), default='PEM') - - (cli, cli_args) = parser.parse_args(sys.argv[1:]) - - if len(cli_args) != 1: - parser.print_help() - raise SystemExit(1) - - try: - keysize = int(cli_args[0]) - except ValueError: - parser.print_help() - print('Not a valid number: %s' % cli_args[0], file=sys.stderr) - raise SystemExit(1) - - print('Generating %i-bit key' % keysize, file=sys.stderr) - (pub_key, priv_key) = rsa.newkeys(keysize) - - - # Save public key - if cli.pubout: - print('Writing public key to %s' % cli.pubout, file=sys.stderr) - data = pub_key.save_pkcs1(format=cli.form) - with open(cli.pubout, 'wb') as outfile: - outfile.write(data) - - # Save private key - data = priv_key.save_pkcs1(format=cli.form) - - if cli.out: - print('Writing private key to %s' % cli.out, file=sys.stderr) - with open(cli.out, 'wb') as outfile: - outfile.write(data) - else: - print('Writing private key to stdout', file=sys.stderr) - sys.stdout.write(data) - - -class CryptoOperation(object): - '''CLI callable that operates with input, output, and a key.''' - - __metaclass__ = abc.ABCMeta - - keyname = 'public' # or 'private' - usage = 'usage: %%prog [options] %(keyname)s_key' - description = None - operation = 'decrypt' - operation_past = 'decrypted' - operation_progressive = 'decrypting' - input_help = 'Name of the file to %(operation)s. Reads from stdin if ' \ - 'not specified.' - output_help = 'Name of the file to write the %(operation_past)s file ' \ - 'to. Written to stdout if this option is not present.' - expected_cli_args = 1 - has_output = True - - key_class = rsa.PublicKey - - def __init__(self): - self.usage = self.usage % self.__class__.__dict__ - self.input_help = self.input_help % self.__class__.__dict__ - self.output_help = self.output_help % self.__class__.__dict__ - - @abc.abstractmethod - def perform_operation(self, indata, key, cli_args=None): - '''Performs the program's operation. - - Implement in a subclass. - - :returns: the data to write to the output. - ''' - - def __call__(self): - '''Runs the program.''' - - (cli, cli_args) = self.parse_cli() - - key = self.read_key(cli_args[0], cli.keyform) - - indata = self.read_infile(cli.input) - - print(self.operation_progressive.title(), file=sys.stderr) - outdata = self.perform_operation(indata, key, cli_args) - - if self.has_output: - self.write_outfile(outdata, cli.output) - - def parse_cli(self): - '''Parse the CLI options - - :returns: (cli_opts, cli_args) - ''' - - parser = OptionParser(usage=self.usage, description=self.description) - - parser.add_option('-i', '--input', type='string', help=self.input_help) - - if self.has_output: - parser.add_option('-o', '--output', type='string', help=self.output_help) - - parser.add_option('--keyform', - help='Key format of the %s key - default PEM' % self.keyname, - choices=('PEM', 'DER'), default='PEM') - - (cli, cli_args) = parser.parse_args(sys.argv[1:]) - - if len(cli_args) != self.expected_cli_args: - parser.print_help() - raise SystemExit(1) - - return (cli, cli_args) - - def read_key(self, filename, keyform): - '''Reads a public or private key.''' - - print('Reading %s key from %s' % (self.keyname, filename), file=sys.stderr) - with open(filename, 'rb') as keyfile: - keydata = keyfile.read() - - return self.key_class.load_pkcs1(keydata, keyform) - - def read_infile(self, inname): - '''Read the input file''' - - if inname: - print('Reading input from %s' % inname, file=sys.stderr) - with open(inname, 'rb') as infile: - return infile.read() - - print('Reading input from stdin', file=sys.stderr) - return sys.stdin.read() - - def write_outfile(self, outdata, outname): - '''Write the output file''' - - if outname: - print('Writing output to %s' % outname, file=sys.stderr) - with open(outname, 'wb') as outfile: - outfile.write(outdata) - else: - print('Writing output to stdout', file=sys.stderr) - sys.stdout.write(outdata) - -class EncryptOperation(CryptoOperation): - '''Encrypts a file.''' - - keyname = 'public' - description = ('Encrypts a file. The file must be shorter than the key ' - 'length in order to be encrypted. For larger files, use the ' - 'pyrsa-encrypt-bigfile command.') - operation = 'encrypt' - operation_past = 'encrypted' - operation_progressive = 'encrypting' - - - def perform_operation(self, indata, pub_key, cli_args=None): - '''Encrypts files.''' - - return rsa.encrypt(indata, pub_key) - -class DecryptOperation(CryptoOperation): - '''Decrypts a file.''' - - keyname = 'private' - description = ('Decrypts a file. The original file must be shorter than ' - 'the key length in order to have been encrypted. For larger ' - 'files, use the pyrsa-decrypt-bigfile command.') - operation = 'decrypt' - operation_past = 'decrypted' - operation_progressive = 'decrypting' - key_class = rsa.PrivateKey - - def perform_operation(self, indata, priv_key, cli_args=None): - '''Decrypts files.''' - - return rsa.decrypt(indata, priv_key) - -class SignOperation(CryptoOperation): - '''Signs a file.''' - - keyname = 'private' - usage = 'usage: %%prog [options] private_key hash_method' - description = ('Signs a file, outputs the signature. Choose the hash ' - 'method from %s' % ', '.join(HASH_METHODS)) - operation = 'sign' - operation_past = 'signature' - operation_progressive = 'Signing' - key_class = rsa.PrivateKey - expected_cli_args = 2 - - output_help = ('Name of the file to write the signature to. Written ' - 'to stdout if this option is not present.') - - def perform_operation(self, indata, priv_key, cli_args): - '''Decrypts files.''' - - hash_method = cli_args[1] - if hash_method not in HASH_METHODS: - raise SystemExit('Invalid hash method, choose one of %s' % - ', '.join(HASH_METHODS)) - - return rsa.sign(indata, priv_key, hash_method) - -class VerifyOperation(CryptoOperation): - '''Verify a signature.''' - - keyname = 'public' - usage = 'usage: %%prog [options] public_key signature_file' - description = ('Verifies a signature, exits with status 0 upon success, ' - 'prints an error message and exits with status 1 upon error.') - operation = 'verify' - operation_past = 'verified' - operation_progressive = 'Verifying' - key_class = rsa.PublicKey - expected_cli_args = 2 - has_output = False - - def perform_operation(self, indata, pub_key, cli_args): - '''Decrypts files.''' - - signature_file = cli_args[1] - - with open(signature_file, 'rb') as sigfile: - signature = sigfile.read() - - try: - rsa.verify(indata, signature, pub_key) - except rsa.VerificationError: - raise SystemExit('Verification failed.') - - print('Verification OK', file=sys.stderr) - - -class BigfileOperation(CryptoOperation): - '''CryptoOperation that doesn't read the entire file into memory.''' - - def __init__(self): - CryptoOperation.__init__(self) - - self.file_objects = [] - - def __del__(self): - '''Closes any open file handles.''' - - for fobj in self.file_objects: - fobj.close() - - def __call__(self): - '''Runs the program.''' - - (cli, cli_args) = self.parse_cli() - - key = self.read_key(cli_args[0], cli.keyform) - - # Get the file handles - infile = self.get_infile(cli.input) - outfile = self.get_outfile(cli.output) - - # Call the operation - print(self.operation_progressive.title(), file=sys.stderr) - self.perform_operation(infile, outfile, key, cli_args) - - def get_infile(self, inname): - '''Returns the input file object''' - - if inname: - print('Reading input from %s' % inname, file=sys.stderr) - fobj = open(inname, 'rb') - self.file_objects.append(fobj) - else: - print('Reading input from stdin', file=sys.stderr) - fobj = sys.stdin - - return fobj - - def get_outfile(self, outname): - '''Returns the output file object''' - - if outname: - print('Will write output to %s' % outname, file=sys.stderr) - fobj = open(outname, 'wb') - self.file_objects.append(fobj) - else: - print('Will write output to stdout', file=sys.stderr) - fobj = sys.stdout - - return fobj - -class EncryptBigfileOperation(BigfileOperation): - '''Encrypts a file to VARBLOCK format.''' - - keyname = 'public' - description = ('Encrypts a file to an encrypted VARBLOCK file. The file ' - 'can be larger than the key length, but the output file is only ' - 'compatible with Python-RSA.') - operation = 'encrypt' - operation_past = 'encrypted' - operation_progressive = 'encrypting' - - def perform_operation(self, infile, outfile, pub_key, cli_args=None): - '''Encrypts files to VARBLOCK.''' - - return rsa.bigfile.encrypt_bigfile(infile, outfile, pub_key) - -class DecryptBigfileOperation(BigfileOperation): - '''Decrypts a file in VARBLOCK format.''' - - keyname = 'private' - description = ('Decrypts an encrypted VARBLOCK file that was encrypted ' - 'with pyrsa-encrypt-bigfile') - operation = 'decrypt' - operation_past = 'decrypted' - operation_progressive = 'decrypting' - key_class = rsa.PrivateKey - - def perform_operation(self, infile, outfile, priv_key, cli_args=None): - '''Decrypts a VARBLOCK file.''' - - return rsa.bigfile.decrypt_bigfile(infile, outfile, priv_key) - - -encrypt = EncryptOperation() -decrypt = DecryptOperation() -sign = SignOperation() -verify = VerifyOperation() -encrypt_bigfile = EncryptBigfileOperation() -decrypt_bigfile = DecryptBigfileOperation() - diff --git a/server/www/packages/packages-common/rsa/common.py b/server/www/packages/packages-common/rsa/common.py deleted file mode 100644 index 39feb8c..0000000 --- a/server/www/packages/packages-common/rsa/common.py +++ /dev/null @@ -1,185 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -'''Common functionality shared by several modules.''' - - -def bit_size(num): - ''' - Number of bits needed to represent a integer excluding any prefix - 0 bits. - - As per definition from http://wiki.python.org/moin/BitManipulation and - to match the behavior of the Python 3 API. - - Usage:: - - >>> bit_size(1023) - 10 - >>> bit_size(1024) - 11 - >>> bit_size(1025) - 11 - - :param num: - Integer value. If num is 0, returns 0. Only the absolute value of the - number is considered. Therefore, signed integers will be abs(num) - before the number's bit length is determined. - :returns: - Returns the number of bits in the integer. - ''' - if num == 0: - return 0 - if num < 0: - num = -num - - # Make sure this is an int and not a float. - num & 1 - - hex_num = "%x" % num - return ((len(hex_num) - 1) * 4) + { - '0':0, '1':1, '2':2, '3':2, - '4':3, '5':3, '6':3, '7':3, - '8':4, '9':4, 'a':4, 'b':4, - 'c':4, 'd':4, 'e':4, 'f':4, - }[hex_num[0]] - - -def _bit_size(number): - ''' - Returns the number of bits required to hold a specific long number. - ''' - if number < 0: - raise ValueError('Only nonnegative numbers possible: %s' % number) - - if number == 0: - return 0 - - # This works, even with very large numbers. When using math.log(number, 2), - # you'll get rounding errors and it'll fail. - bits = 0 - while number: - bits += 1 - number >>= 1 - - return bits - - -def byte_size(number): - ''' - Returns the number of bytes required to hold a specific long number. - - The number of bytes is rounded up. - - Usage:: - - >>> byte_size(1 << 1023) - 128 - >>> byte_size((1 << 1024) - 1) - 128 - >>> byte_size(1 << 1024) - 129 - - :param number: - An unsigned integer - :returns: - The number of bytes required to hold a specific long number. - ''' - quanta, mod = divmod(bit_size(number), 8) - if mod or number == 0: - quanta += 1 - return quanta - #return int(math.ceil(bit_size(number) / 8.0)) - - -def extended_gcd(a, b): - '''Returns a tuple (r, i, j) such that r = gcd(a, b) = ia + jb - ''' - # r = gcd(a,b) i = multiplicitive inverse of a mod b - # or j = multiplicitive inverse of b mod a - # Neg return values for i or j are made positive mod b or a respectively - # Iterateive Version is faster and uses much less stack space - x = 0 - y = 1 - lx = 1 - ly = 0 - oa = a #Remember original a/b to remove - ob = b #negative values from return results - while b != 0: - q = a // b - (a, b) = (b, a % b) - (x, lx) = ((lx - (q * x)),x) - (y, ly) = ((ly - (q * y)),y) - if (lx < 0): lx += ob #If neg wrap modulo orignal b - if (ly < 0): ly += oa #If neg wrap modulo orignal a - return (a, lx, ly) #Return only positive values - - -def inverse(x, n): - '''Returns x^-1 (mod n) - - >>> inverse(7, 4) - 3 - >>> (inverse(143, 4) * 143) % 4 - 1 - ''' - - (divider, inv, _) = extended_gcd(x, n) - - if divider != 1: - raise ValueError("x (%d) and n (%d) are not relatively prime" % (x, n)) - - return inv - - -def crt(a_values, modulo_values): - '''Chinese Remainder Theorem. - - Calculates x such that x = a[i] (mod m[i]) for each i. - - :param a_values: the a-values of the above equation - :param modulo_values: the m-values of the above equation - :returns: x such that x = a[i] (mod m[i]) for each i - - - >>> crt([2, 3], [3, 5]) - 8 - - >>> crt([2, 3, 2], [3, 5, 7]) - 23 - - >>> crt([2, 3, 0], [7, 11, 15]) - 135 - ''' - - m = 1 - x = 0 - - for modulo in modulo_values: - m *= modulo - - for (m_i, a_i) in zip(modulo_values, a_values): - M_i = m // m_i - inv = inverse(M_i, m_i) - - x = (x + a_i * M_i * inv) % m - - return x - -if __name__ == '__main__': - import doctest - doctest.testmod() - diff --git a/server/www/packages/packages-common/rsa/core.py b/server/www/packages/packages-common/rsa/core.py deleted file mode 100644 index 90dfee8..0000000 --- a/server/www/packages/packages-common/rsa/core.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -'''Core mathematical operations. - -This is the actual core RSA implementation, which is only defined -mathematically on integers. -''' - - -from rsa._compat import is_integer - -def assert_int(var, name): - - if is_integer(var): - return - - raise TypeError('%s should be an integer, not %s' % (name, var.__class__)) - -def encrypt_int(message, ekey, n): - '''Encrypts a message using encryption key 'ekey', working modulo n''' - - assert_int(message, 'message') - assert_int(ekey, 'ekey') - assert_int(n, 'n') - - if message < 0: - raise ValueError('Only non-negative numbers are supported') - - if message > n: - raise OverflowError("The message %i is too long for n=%i" % (message, n)) - - return pow(message, ekey, n) - -def decrypt_int(cyphertext, dkey, n): - '''Decrypts a cypher text using the decryption key 'dkey', working - modulo n''' - - assert_int(cyphertext, 'cyphertext') - assert_int(dkey, 'dkey') - assert_int(n, 'n') - - message = pow(cyphertext, dkey, n) - return message - diff --git a/server/www/packages/packages-common/rsa/key.py b/server/www/packages/packages-common/rsa/key.py deleted file mode 100644 index b6de7b3..0000000 --- a/server/www/packages/packages-common/rsa/key.py +++ /dev/null @@ -1,612 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -'''RSA key generation code. - -Create new keys with the newkeys() function. It will give you a PublicKey and a -PrivateKey object. - -Loading and saving keys requires the pyasn1 module. This module is imported as -late as possible, such that other functionality will remain working in absence -of pyasn1. - -''' - -import logging -from rsa._compat import b, bytes_type - -import rsa.prime -import rsa.pem -import rsa.common - -log = logging.getLogger(__name__) - - - -class AbstractKey(object): - '''Abstract superclass for private and public keys.''' - - @classmethod - def load_pkcs1(cls, keyfile, format='PEM'): - r'''Loads a key in PKCS#1 DER or PEM format. - - :param keyfile: contents of a DER- or PEM-encoded file that contains - the public key. - :param format: the format of the file to load; 'PEM' or 'DER' - - :return: a PublicKey object - - ''' - - methods = { - 'PEM': cls._load_pkcs1_pem, - 'DER': cls._load_pkcs1_der, - } - - if format not in methods: - formats = ', '.join(sorted(methods.keys())) - raise ValueError('Unsupported format: %r, try one of %s' % (format, - formats)) - - method = methods[format] - return method(keyfile) - - def save_pkcs1(self, format='PEM'): - '''Saves the public key in PKCS#1 DER or PEM format. - - :param format: the format to save; 'PEM' or 'DER' - :returns: the DER- or PEM-encoded public key. - - ''' - - methods = { - 'PEM': self._save_pkcs1_pem, - 'DER': self._save_pkcs1_der, - } - - if format not in methods: - formats = ', '.join(sorted(methods.keys())) - raise ValueError('Unsupported format: %r, try one of %s' % (format, - formats)) - - method = methods[format] - return method() - -class PublicKey(AbstractKey): - '''Represents a public RSA key. - - This key is also known as the 'encryption key'. It contains the 'n' and 'e' - values. - - Supports attributes as well as dictionary-like access. Attribute accesss is - faster, though. - - >>> PublicKey(5, 3) - PublicKey(5, 3) - - >>> key = PublicKey(5, 3) - >>> key.n - 5 - >>> key['n'] - 5 - >>> key.e - 3 - >>> key['e'] - 3 - - ''' - - __slots__ = ('n', 'e') - - def __init__(self, n, e): - self.n = n - self.e = e - - def __getitem__(self, key): - return getattr(self, key) - - def __repr__(self): - return 'PublicKey(%i, %i)' % (self.n, self.e) - - def __eq__(self, other): - if other is None: - return False - - if not isinstance(other, PublicKey): - return False - - return self.n == other.n and self.e == other.e - - def __ne__(self, other): - return not (self == other) - - @classmethod - def _load_pkcs1_der(cls, keyfile): - r'''Loads a key in PKCS#1 DER format. - - @param keyfile: contents of a DER-encoded file that contains the public - key. - @return: a PublicKey object - - First let's construct a DER encoded key: - - >>> import base64 - >>> b64der = 'MAwCBQCNGmYtAgMBAAE=' - >>> der = base64.decodestring(b64der) - - This loads the file: - - >>> PublicKey._load_pkcs1_der(der) - PublicKey(2367317549, 65537) - - ''' - - from pyasn1.codec.der import decoder - from rsa.asn1 import AsnPubKey - - (priv, _) = decoder.decode(keyfile, asn1Spec=AsnPubKey()) - return cls(n=int(priv['modulus']), e=int(priv['publicExponent'])) - - def _save_pkcs1_der(self): - '''Saves the public key in PKCS#1 DER format. - - @returns: the DER-encoded public key. - ''' - - from pyasn1.codec.der import encoder - from rsa.asn1 import AsnPubKey - - # Create the ASN object - asn_key = AsnPubKey() - asn_key.setComponentByName('modulus', self.n) - asn_key.setComponentByName('publicExponent', self.e) - - return encoder.encode(asn_key) - - @classmethod - def _load_pkcs1_pem(cls, keyfile): - '''Loads a PKCS#1 PEM-encoded public key file. - - The contents of the file before the "-----BEGIN RSA PUBLIC KEY-----" and - after the "-----END RSA PUBLIC KEY-----" lines is ignored. - - @param keyfile: contents of a PEM-encoded file that contains the public - key. - @return: a PublicKey object - ''' - - der = rsa.pem.load_pem(keyfile, 'RSA PUBLIC KEY') - return cls._load_pkcs1_der(der) - - def _save_pkcs1_pem(self): - '''Saves a PKCS#1 PEM-encoded public key file. - - @return: contents of a PEM-encoded file that contains the public key. - ''' - - der = self._save_pkcs1_der() - return rsa.pem.save_pem(der, 'RSA PUBLIC KEY') - - @classmethod - def load_pkcs1_openssl_pem(cls, keyfile): - '''Loads a PKCS#1.5 PEM-encoded public key file from OpenSSL. - - These files can be recognised in that they start with BEGIN PUBLIC KEY - rather than BEGIN RSA PUBLIC KEY. - - The contents of the file before the "-----BEGIN PUBLIC KEY-----" and - after the "-----END PUBLIC KEY-----" lines is ignored. - - @param keyfile: contents of a PEM-encoded file that contains the public - key, from OpenSSL. - @return: a PublicKey object - ''' - - der = rsa.pem.load_pem(keyfile, 'PUBLIC KEY') - return cls.load_pkcs1_openssl_der(der) - - @classmethod - def load_pkcs1_openssl_der(cls, keyfile): - '''Loads a PKCS#1 DER-encoded public key file from OpenSSL. - - @param keyfile: contents of a DER-encoded file that contains the public - key, from OpenSSL. - @return: a PublicKey object - ''' - - from rsa.asn1 import OpenSSLPubKey - from pyasn1.codec.der import decoder - from pyasn1.type import univ - - (keyinfo, _) = decoder.decode(keyfile, asn1Spec=OpenSSLPubKey()) - - if keyinfo['header']['oid'] != univ.ObjectIdentifier('1.2.840.113549.1.1.1'): - raise TypeError("This is not a DER-encoded OpenSSL-compatible public key") - - return cls._load_pkcs1_der(keyinfo['key'][1:]) - - - - -class PrivateKey(AbstractKey): - '''Represents a private RSA key. - - This key is also known as the 'decryption key'. It contains the 'n', 'e', - 'd', 'p', 'q' and other values. - - Supports attributes as well as dictionary-like access. Attribute accesss is - faster, though. - - >>> PrivateKey(3247, 65537, 833, 191, 17) - PrivateKey(3247, 65537, 833, 191, 17) - - exp1, exp2 and coef don't have to be given, they will be calculated: - - >>> pk = PrivateKey(3727264081, 65537, 3349121513, 65063, 57287) - >>> pk.exp1 - 55063 - >>> pk.exp2 - 10095 - >>> pk.coef - 50797 - - If you give exp1, exp2 or coef, they will be used as-is: - - >>> pk = PrivateKey(1, 2, 3, 4, 5, 6, 7, 8) - >>> pk.exp1 - 6 - >>> pk.exp2 - 7 - >>> pk.coef - 8 - - ''' - - __slots__ = ('n', 'e', 'd', 'p', 'q', 'exp1', 'exp2', 'coef') - - def __init__(self, n, e, d, p, q, exp1=None, exp2=None, coef=None): - self.n = n - self.e = e - self.d = d - self.p = p - self.q = q - - # Calculate the other values if they aren't supplied - if exp1 is None: - self.exp1 = int(d % (p - 1)) - else: - self.exp1 = exp1 - - if exp1 is None: - self.exp2 = int(d % (q - 1)) - else: - self.exp2 = exp2 - - if coef is None: - self.coef = rsa.common.inverse(q, p) - else: - self.coef = coef - - def __getitem__(self, key): - return getattr(self, key) - - def __repr__(self): - return 'PrivateKey(%(n)i, %(e)i, %(d)i, %(p)i, %(q)i)' % self - - def __eq__(self, other): - if other is None: - return False - - if not isinstance(other, PrivateKey): - return False - - return (self.n == other.n and - self.e == other.e and - self.d == other.d and - self.p == other.p and - self.q == other.q and - self.exp1 == other.exp1 and - self.exp2 == other.exp2 and - self.coef == other.coef) - - def __ne__(self, other): - return not (self == other) - - @classmethod - def _load_pkcs1_der(cls, keyfile): - r'''Loads a key in PKCS#1 DER format. - - @param keyfile: contents of a DER-encoded file that contains the private - key. - @return: a PrivateKey object - - First let's construct a DER encoded key: - - >>> import base64 - >>> b64der = 'MC4CAQACBQDeKYlRAgMBAAECBQDHn4npAgMA/icCAwDfxwIDANcXAgInbwIDAMZt' - >>> der = base64.decodestring(b64der) - - This loads the file: - - >>> PrivateKey._load_pkcs1_der(der) - PrivateKey(3727264081, 65537, 3349121513, 65063, 57287) - - ''' - - from pyasn1.codec.der import decoder - (priv, _) = decoder.decode(keyfile) - - # ASN.1 contents of DER encoded private key: - # - # RSAPrivateKey ::= SEQUENCE { - # version Version, - # modulus INTEGER, -- n - # publicExponent INTEGER, -- e - # privateExponent INTEGER, -- d - # prime1 INTEGER, -- p - # prime2 INTEGER, -- q - # exponent1 INTEGER, -- d mod (p-1) - # exponent2 INTEGER, -- d mod (q-1) - # coefficient INTEGER, -- (inverse of q) mod p - # otherPrimeInfos OtherPrimeInfos OPTIONAL - # } - - if priv[0] != 0: - raise ValueError('Unable to read this file, version %s != 0' % priv[0]) - - as_ints = tuple(int(x) for x in priv[1:9]) - return cls(*as_ints) - - def _save_pkcs1_der(self): - '''Saves the private key in PKCS#1 DER format. - - @returns: the DER-encoded private key. - ''' - - from pyasn1.type import univ, namedtype - from pyasn1.codec.der import encoder - - class AsnPrivKey(univ.Sequence): - componentType = namedtype.NamedTypes( - namedtype.NamedType('version', univ.Integer()), - namedtype.NamedType('modulus', univ.Integer()), - namedtype.NamedType('publicExponent', univ.Integer()), - namedtype.NamedType('privateExponent', univ.Integer()), - namedtype.NamedType('prime1', univ.Integer()), - namedtype.NamedType('prime2', univ.Integer()), - namedtype.NamedType('exponent1', univ.Integer()), - namedtype.NamedType('exponent2', univ.Integer()), - namedtype.NamedType('coefficient', univ.Integer()), - ) - - # Create the ASN object - asn_key = AsnPrivKey() - asn_key.setComponentByName('version', 0) - asn_key.setComponentByName('modulus', self.n) - asn_key.setComponentByName('publicExponent', self.e) - asn_key.setComponentByName('privateExponent', self.d) - asn_key.setComponentByName('prime1', self.p) - asn_key.setComponentByName('prime2', self.q) - asn_key.setComponentByName('exponent1', self.exp1) - asn_key.setComponentByName('exponent2', self.exp2) - asn_key.setComponentByName('coefficient', self.coef) - - return encoder.encode(asn_key) - - @classmethod - def _load_pkcs1_pem(cls, keyfile): - '''Loads a PKCS#1 PEM-encoded private key file. - - The contents of the file before the "-----BEGIN RSA PRIVATE KEY-----" and - after the "-----END RSA PRIVATE KEY-----" lines is ignored. - - @param keyfile: contents of a PEM-encoded file that contains the private - key. - @return: a PrivateKey object - ''' - - der = rsa.pem.load_pem(keyfile, b('RSA PRIVATE KEY')) - return cls._load_pkcs1_der(der) - - def _save_pkcs1_pem(self): - '''Saves a PKCS#1 PEM-encoded private key file. - - @return: contents of a PEM-encoded file that contains the private key. - ''' - - der = self._save_pkcs1_der() - return rsa.pem.save_pem(der, b('RSA PRIVATE KEY')) - -def find_p_q(nbits, getprime_func=rsa.prime.getprime, accurate=True): - ''''Returns a tuple of two different primes of nbits bits each. - - The resulting p * q has exacty 2 * nbits bits, and the returned p and q - will not be equal. - - :param nbits: the number of bits in each of p and q. - :param getprime_func: the getprime function, defaults to - :py:func:`rsa.prime.getprime`. - - *Introduced in Python-RSA 3.1* - - :param accurate: whether to enable accurate mode or not. - :returns: (p, q), where p > q - - >>> (p, q) = find_p_q(128) - >>> from rsa import common - >>> common.bit_size(p * q) - 256 - - When not in accurate mode, the number of bits can be slightly less - - >>> (p, q) = find_p_q(128, accurate=False) - >>> from rsa import common - >>> common.bit_size(p * q) <= 256 - True - >>> common.bit_size(p * q) > 240 - True - - ''' - - total_bits = nbits * 2 - - # Make sure that p and q aren't too close or the factoring programs can - # factor n. - shift = nbits // 16 - pbits = nbits + shift - qbits = nbits - shift - - # Choose the two initial primes - log.debug('find_p_q(%i): Finding p', nbits) - p = getprime_func(pbits) - log.debug('find_p_q(%i): Finding q', nbits) - q = getprime_func(qbits) - - def is_acceptable(p, q): - '''Returns True iff p and q are acceptable: - - - p and q differ - - (p * q) has the right nr of bits (when accurate=True) - ''' - - if p == q: - return False - - if not accurate: - return True - - # Make sure we have just the right amount of bits - found_size = rsa.common.bit_size(p * q) - return total_bits == found_size - - # Keep choosing other primes until they match our requirements. - change_p = False - while not is_acceptable(p, q): - # Change p on one iteration and q on the other - if change_p: - p = getprime_func(pbits) - else: - q = getprime_func(qbits) - - change_p = not change_p - - # We want p > q as described on - # http://www.di-mgt.com.au/rsa_alg.html#crt - return (max(p, q), min(p, q)) - -def calculate_keys(p, q, nbits): - '''Calculates an encryption and a decryption key given p and q, and - returns them as a tuple (e, d) - - ''' - - phi_n = (p - 1) * (q - 1) - - # A very common choice for e is 65537 - e = 65537 - - try: - d = rsa.common.inverse(e, phi_n) - except ValueError: - raise ValueError("e (%d) and phi_n (%d) are not relatively prime" % - (e, phi_n)) - - if (e * d) % phi_n != 1: - raise ValueError("e (%d) and d (%d) are not mult. inv. modulo " - "phi_n (%d)" % (e, d, phi_n)) - - return (e, d) - -def gen_keys(nbits, getprime_func, accurate=True): - '''Generate RSA keys of nbits bits. Returns (p, q, e, d). - - Note: this can take a long time, depending on the key size. - - :param nbits: the total number of bits in ``p`` and ``q``. Both ``p`` and - ``q`` will use ``nbits/2`` bits. - :param getprime_func: either :py:func:`rsa.prime.getprime` or a function - with similar signature. - ''' - - (p, q) = find_p_q(nbits // 2, getprime_func, accurate) - (e, d) = calculate_keys(p, q, nbits // 2) - - return (p, q, e, d) - -def newkeys(nbits, accurate=True, poolsize=1): - '''Generates public and private keys, and returns them as (pub, priv). - - The public key is also known as the 'encryption key', and is a - :py:class:`rsa.PublicKey` object. The private key is also known as the - 'decryption key' and is a :py:class:`rsa.PrivateKey` object. - - :param nbits: the number of bits required to store ``n = p*q``. - :param accurate: when True, ``n`` will have exactly the number of bits you - asked for. However, this makes key generation much slower. When False, - `n`` may have slightly less bits. - :param poolsize: the number of processes to use to generate the prime - numbers. If set to a number > 1, a parallel algorithm will be used. - This requires Python 2.6 or newer. - - :returns: a tuple (:py:class:`rsa.PublicKey`, :py:class:`rsa.PrivateKey`) - - The ``poolsize`` parameter was added in *Python-RSA 3.1* and requires - Python 2.6 or newer. - - ''' - - if nbits < 16: - raise ValueError('Key too small') - - if poolsize < 1: - raise ValueError('Pool size (%i) should be >= 1' % poolsize) - - # Determine which getprime function to use - if poolsize > 1: - from rsa import parallel - import functools - - getprime_func = functools.partial(parallel.getprime, poolsize=poolsize) - else: getprime_func = rsa.prime.getprime - - # Generate the key components - (p, q, e, d) = gen_keys(nbits, getprime_func) - - # Create the key objects - n = p * q - - return ( - PublicKey(n, e), - PrivateKey(n, e, d, p, q) - ) - -__all__ = ['PublicKey', 'PrivateKey', 'newkeys'] - -if __name__ == '__main__': - import doctest - - try: - for count in range(100): - (failures, tests) = doctest.testmod() - if failures: - break - - if (count and count % 10 == 0) or count == 1: - print('%i times' % count) - except KeyboardInterrupt: - print('Aborted') - else: - print('Doctests done') diff --git a/server/www/packages/packages-common/rsa/parallel.py b/server/www/packages/packages-common/rsa/parallel.py deleted file mode 100644 index e5034ac..0000000 --- a/server/www/packages/packages-common/rsa/parallel.py +++ /dev/null @@ -1,94 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -'''Functions for parallel computation on multiple cores. - -Introduced in Python-RSA 3.1. - -.. note:: - - Requires Python 2.6 or newer. - -''' - -from __future__ import print_function - -import multiprocessing as mp - -import rsa.prime -import rsa.randnum - -def _find_prime(nbits, pipe): - while True: - integer = rsa.randnum.read_random_int(nbits) - - # Make sure it's odd - integer |= 1 - - # Test for primeness - if rsa.prime.is_prime(integer): - pipe.send(integer) - return - -def getprime(nbits, poolsize): - '''Returns a prime number that can be stored in 'nbits' bits. - - Works in multiple threads at the same time. - - >>> p = getprime(128, 3) - >>> rsa.prime.is_prime(p-1) - False - >>> rsa.prime.is_prime(p) - True - >>> rsa.prime.is_prime(p+1) - False - - >>> from rsa import common - >>> common.bit_size(p) == 128 - True - - ''' - - (pipe_recv, pipe_send) = mp.Pipe(duplex=False) - - # Create processes - procs = [mp.Process(target=_find_prime, args=(nbits, pipe_send)) - for _ in range(poolsize)] - [p.start() for p in procs] - - result = pipe_recv.recv() - - [p.terminate() for p in procs] - - return result - -__all__ = ['getprime'] - - -if __name__ == '__main__': - print('Running doctests 1000x or until failure') - import doctest - - for count in range(100): - (failures, tests) = doctest.testmod() - if failures: - break - - if count and count % 10 == 0: - print('%i times' % count) - - print('Doctests done') - diff --git a/server/www/packages/packages-common/rsa/pem.py b/server/www/packages/packages-common/rsa/pem.py deleted file mode 100644 index b1c3a0e..0000000 --- a/server/www/packages/packages-common/rsa/pem.py +++ /dev/null @@ -1,120 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -'''Functions that load and write PEM-encoded files.''' - -import base64 -from rsa._compat import b, is_bytes - -def _markers(pem_marker): - ''' - Returns the start and end PEM markers - ''' - - if is_bytes(pem_marker): - pem_marker = pem_marker.decode('utf-8') - - return (b('-----BEGIN %s-----' % pem_marker), - b('-----END %s-----' % pem_marker)) - -def load_pem(contents, pem_marker): - '''Loads a PEM file. - - @param contents: the contents of the file to interpret - @param pem_marker: the marker of the PEM content, such as 'RSA PRIVATE KEY' - when your file has '-----BEGIN RSA PRIVATE KEY-----' and - '-----END RSA PRIVATE KEY-----' markers. - - @return the base64-decoded content between the start and end markers. - - @raise ValueError: when the content is invalid, for example when the start - marker cannot be found. - - ''' - - (pem_start, pem_end) = _markers(pem_marker) - - pem_lines = [] - in_pem_part = False - - for line in contents.splitlines(): - line = line.strip() - - # Skip empty lines - if not line: - continue - - # Handle start marker - if line == pem_start: - if in_pem_part: - raise ValueError('Seen start marker "%s" twice' % pem_start) - - in_pem_part = True - continue - - # Skip stuff before first marker - if not in_pem_part: - continue - - # Handle end marker - if in_pem_part and line == pem_end: - in_pem_part = False - break - - # Load fields - if b(':') in line: - continue - - pem_lines.append(line) - - # Do some sanity checks - if not pem_lines: - raise ValueError('No PEM start marker "%s" found' % pem_start) - - if in_pem_part: - raise ValueError('No PEM end marker "%s" found' % pem_end) - - # Base64-decode the contents - pem = b('').join(pem_lines) - return base64.decodestring(pem) - - -def save_pem(contents, pem_marker): - '''Saves a PEM file. - - @param contents: the contents to encode in PEM format - @param pem_marker: the marker of the PEM content, such as 'RSA PRIVATE KEY' - when your file has '-----BEGIN RSA PRIVATE KEY-----' and - '-----END RSA PRIVATE KEY-----' markers. - - @return the base64-encoded content between the start and end markers. - - ''' - - (pem_start, pem_end) = _markers(pem_marker) - - b64 = base64.encodestring(contents).replace(b('\n'), b('')) - pem_lines = [pem_start] - - for block_start in range(0, len(b64), 64): - block = b64[block_start:block_start + 64] - pem_lines.append(block) - - pem_lines.append(pem_end) - pem_lines.append(b('')) - - return b('\n').join(pem_lines) - diff --git a/server/www/packages/packages-common/rsa/pkcs1.py b/server/www/packages/packages-common/rsa/pkcs1.py deleted file mode 100644 index 15e4cf6..0000000 --- a/server/www/packages/packages-common/rsa/pkcs1.py +++ /dev/null @@ -1,391 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -'''Functions for PKCS#1 version 1.5 encryption and signing - -This module implements certain functionality from PKCS#1 version 1.5. For a -very clear example, read http://www.di-mgt.com.au/rsa_alg.html#pkcs1schemes - -At least 8 bytes of random padding is used when encrypting a message. This makes -these methods much more secure than the ones in the ``rsa`` module. - -WARNING: this module leaks information when decryption or verification fails. -The exceptions that are raised contain the Python traceback information, which -can be used to deduce where in the process the failure occurred. DO NOT PASS -SUCH INFORMATION to your users. -''' - -import hashlib -import os - -from rsa._compat import b -from rsa import common, transform, core, varblock - -# ASN.1 codes that describe the hash algorithm used. -HASH_ASN1 = { - 'MD5': b('\x30\x20\x30\x0c\x06\x08\x2a\x86\x48\x86\xf7\x0d\x02\x05\x05\x00\x04\x10'), - 'SHA-1': b('\x30\x21\x30\x09\x06\x05\x2b\x0e\x03\x02\x1a\x05\x00\x04\x14'), - 'SHA-256': b('\x30\x31\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x01\x05\x00\x04\x20'), - 'SHA-384': b('\x30\x41\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x02\x05\x00\x04\x30'), - 'SHA-512': b('\x30\x51\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x03\x05\x00\x04\x40'), -} - -HASH_METHODS = { - 'MD5': hashlib.md5, - 'SHA-1': hashlib.sha1, - 'SHA-256': hashlib.sha256, - 'SHA-384': hashlib.sha384, - 'SHA-512': hashlib.sha512, -} - -class CryptoError(Exception): - '''Base class for all exceptions in this module.''' - -class DecryptionError(CryptoError): - '''Raised when decryption fails.''' - -class VerificationError(CryptoError): - '''Raised when verification fails.''' - -def _pad_for_encryption(message, target_length): - r'''Pads the message for encryption, returning the padded message. - - :return: 00 02 RANDOM_DATA 00 MESSAGE - - >>> block = _pad_for_encryption('hello', 16) - >>> len(block) - 16 - >>> block[0:2] - '\x00\x02' - >>> block[-6:] - '\x00hello' - - ''' - - max_msglength = target_length - 11 - msglength = len(message) - - if msglength > max_msglength: - raise OverflowError('%i bytes needed for message, but there is only' - ' space for %i' % (msglength, max_msglength)) - - # Get random padding - padding = b('') - padding_length = target_length - msglength - 3 - - # We remove 0-bytes, so we'll end up with less padding than we've asked for, - # so keep adding data until we're at the correct length. - while len(padding) < padding_length: - needed_bytes = padding_length - len(padding) - - # Always read at least 8 bytes more than we need, and trim off the rest - # after removing the 0-bytes. This increases the chance of getting - # enough bytes, especially when needed_bytes is small - new_padding = os.urandom(needed_bytes + 5) - new_padding = new_padding.replace(b('\x00'), b('')) - padding = padding + new_padding[:needed_bytes] - - assert len(padding) == padding_length - - return b('').join([b('\x00\x02'), - padding, - b('\x00'), - message]) - - -def _pad_for_signing(message, target_length): - r'''Pads the message for signing, returning the padded message. - - The padding is always a repetition of FF bytes. - - :return: 00 01 PADDING 00 MESSAGE - - >>> block = _pad_for_signing('hello', 16) - >>> len(block) - 16 - >>> block[0:2] - '\x00\x01' - >>> block[-6:] - '\x00hello' - >>> block[2:-6] - '\xff\xff\xff\xff\xff\xff\xff\xff' - - ''' - - max_msglength = target_length - 11 - msglength = len(message) - - if msglength > max_msglength: - raise OverflowError('%i bytes needed for message, but there is only' - ' space for %i' % (msglength, max_msglength)) - - padding_length = target_length - msglength - 3 - - return b('').join([b('\x00\x01'), - padding_length * b('\xff'), - b('\x00'), - message]) - - -def encrypt(message, pub_key): - '''Encrypts the given message using PKCS#1 v1.5 - - :param message: the message to encrypt. Must be a byte string no longer than - ``k-11`` bytes, where ``k`` is the number of bytes needed to encode - the ``n`` component of the public key. - :param pub_key: the :py:class:`rsa.PublicKey` to encrypt with. - :raise OverflowError: when the message is too large to fit in the padded - block. - - >>> from rsa import key, common - >>> (pub_key, priv_key) = key.newkeys(256) - >>> message = 'hello' - >>> crypto = encrypt(message, pub_key) - - The crypto text should be just as long as the public key 'n' component: - - >>> len(crypto) == common.byte_size(pub_key.n) - True - - ''' - - keylength = common.byte_size(pub_key.n) - padded = _pad_for_encryption(message, keylength) - - payload = transform.bytes2int(padded) - encrypted = core.encrypt_int(payload, pub_key.e, pub_key.n) - block = transform.int2bytes(encrypted, keylength) - - return block - -def decrypt(crypto, priv_key): - r'''Decrypts the given message using PKCS#1 v1.5 - - The decryption is considered 'failed' when the resulting cleartext doesn't - start with the bytes 00 02, or when the 00 byte between the padding and - the message cannot be found. - - :param crypto: the crypto text as returned by :py:func:`rsa.encrypt` - :param priv_key: the :py:class:`rsa.PrivateKey` to decrypt with. - :raise DecryptionError: when the decryption fails. No details are given as - to why the code thinks the decryption fails, as this would leak - information about the private key. - - - >>> import rsa - >>> (pub_key, priv_key) = rsa.newkeys(256) - - It works with strings: - - >>> crypto = encrypt('hello', pub_key) - >>> decrypt(crypto, priv_key) - 'hello' - - And with binary data: - - >>> crypto = encrypt('\x00\x00\x00\x00\x01', pub_key) - >>> decrypt(crypto, priv_key) - '\x00\x00\x00\x00\x01' - - Altering the encrypted information will *likely* cause a - :py:class:`rsa.pkcs1.DecryptionError`. If you want to be *sure*, use - :py:func:`rsa.sign`. - - - .. warning:: - - Never display the stack trace of a - :py:class:`rsa.pkcs1.DecryptionError` exception. It shows where in the - code the exception occurred, and thus leaks information about the key. - It's only a tiny bit of information, but every bit makes cracking the - keys easier. - - >>> crypto = encrypt('hello', pub_key) - >>> crypto = crypto[0:5] + 'X' + crypto[6:] # change a byte - >>> decrypt(crypto, priv_key) - Traceback (most recent call last): - ... - DecryptionError: Decryption failed - - ''' - - blocksize = common.byte_size(priv_key.n) - encrypted = transform.bytes2int(crypto) - decrypted = core.decrypt_int(encrypted, priv_key.d, priv_key.n) - cleartext = transform.int2bytes(decrypted, blocksize) - - # If we can't find the cleartext marker, decryption failed. - if cleartext[0:2] != b('\x00\x02'): - raise DecryptionError('Decryption failed') - - # Find the 00 separator between the padding and the message - try: - sep_idx = cleartext.index(b('\x00'), 2) - except ValueError: - raise DecryptionError('Decryption failed') - - return cleartext[sep_idx+1:] - -def sign(message, priv_key, hash): - '''Signs the message with the private key. - - Hashes the message, then signs the hash with the given key. This is known - as a "detached signature", because the message itself isn't altered. - - :param message: the message to sign. Can be an 8-bit string or a file-like - object. If ``message`` has a ``read()`` method, it is assumed to be a - file-like object. - :param priv_key: the :py:class:`rsa.PrivateKey` to sign with - :param hash: the hash method used on the message. Use 'MD5', 'SHA-1', - 'SHA-256', 'SHA-384' or 'SHA-512'. - :return: a message signature block. - :raise OverflowError: if the private key is too small to contain the - requested hash. - - ''' - - # Get the ASN1 code for this hash method - if hash not in HASH_ASN1: - raise ValueError('Invalid hash method: %s' % hash) - asn1code = HASH_ASN1[hash] - - # Calculate the hash - hash = _hash(message, hash) - - # Encrypt the hash with the private key - cleartext = asn1code + hash - keylength = common.byte_size(priv_key.n) - padded = _pad_for_signing(cleartext, keylength) - - payload = transform.bytes2int(padded) - encrypted = core.encrypt_int(payload, priv_key.d, priv_key.n) - block = transform.int2bytes(encrypted, keylength) - - return block - -def verify(message, signature, pub_key): - '''Verifies that the signature matches the message. - - The hash method is detected automatically from the signature. - - :param message: the signed message. Can be an 8-bit string or a file-like - object. If ``message`` has a ``read()`` method, it is assumed to be a - file-like object. - :param signature: the signature block, as created with :py:func:`rsa.sign`. - :param pub_key: the :py:class:`rsa.PublicKey` of the person signing the message. - :raise VerificationError: when the signature doesn't match the message. - - .. warning:: - - Never display the stack trace of a - :py:class:`rsa.pkcs1.VerificationError` exception. It shows where in - the code the exception occurred, and thus leaks information about the - key. It's only a tiny bit of information, but every bit makes cracking - the keys easier. - - ''' - - blocksize = common.byte_size(pub_key.n) - encrypted = transform.bytes2int(signature) - decrypted = core.decrypt_int(encrypted, pub_key.e, pub_key.n) - clearsig = transform.int2bytes(decrypted, blocksize) - - # If we can't find the signature marker, verification failed. - if clearsig[0:2] != b('\x00\x01'): - raise VerificationError('Verification failed') - - # Find the 00 separator between the padding and the payload - try: - sep_idx = clearsig.index(b('\x00'), 2) - except ValueError: - raise VerificationError('Verification failed') - - # Get the hash and the hash method - (method_name, signature_hash) = _find_method_hash(clearsig[sep_idx+1:]) - message_hash = _hash(message, method_name) - - # Compare the real hash to the hash in the signature - if message_hash != signature_hash: - raise VerificationError('Verification failed') - - return True - -def _hash(message, method_name): - '''Returns the message digest. - - :param message: the signed message. Can be an 8-bit string or a file-like - object. If ``message`` has a ``read()`` method, it is assumed to be a - file-like object. - :param method_name: the hash method, must be a key of - :py:const:`HASH_METHODS`. - - ''' - - if method_name not in HASH_METHODS: - raise ValueError('Invalid hash method: %s' % method_name) - - method = HASH_METHODS[method_name] - hasher = method() - - if hasattr(message, 'read') and hasattr(message.read, '__call__'): - # read as 1K blocks - for block in varblock.yield_fixedblocks(message, 1024): - hasher.update(block) - else: - # hash the message object itself. - hasher.update(message) - - return hasher.digest() - - -def _find_method_hash(method_hash): - '''Finds the hash method and the hash itself. - - :param method_hash: ASN1 code for the hash method concatenated with the - hash itself. - - :return: tuple (method, hash) where ``method`` is the used hash method, and - ``hash`` is the hash itself. - - :raise VerificationFailed: when the hash method cannot be found - - ''' - - for (hashname, asn1code) in HASH_ASN1.items(): - if not method_hash.startswith(asn1code): - continue - - return (hashname, method_hash[len(asn1code):]) - - raise VerificationError('Verification failed') - - -__all__ = ['encrypt', 'decrypt', 'sign', 'verify', - 'DecryptionError', 'VerificationError', 'CryptoError'] - -if __name__ == '__main__': - print('Running doctests 1000x or until failure') - import doctest - - for count in range(1000): - (failures, tests) = doctest.testmod() - if failures: - break - - if count and count % 100 == 0: - print('%i times' % count) - - print('Doctests done') diff --git a/server/www/packages/packages-common/rsa/prime.py b/server/www/packages/packages-common/rsa/prime.py deleted file mode 100644 index 7422eb1..0000000 --- a/server/www/packages/packages-common/rsa/prime.py +++ /dev/null @@ -1,166 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -'''Numerical functions related to primes. - -Implementation based on the book Algorithm Design by Michael T. Goodrich and -Roberto Tamassia, 2002. -''' - -__all__ = [ 'getprime', 'are_relatively_prime'] - -import rsa.randnum - -def gcd(p, q): - '''Returns the greatest common divisor of p and q - - >>> gcd(48, 180) - 12 - ''' - - while q != 0: - if p < q: (p,q) = (q,p) - (p,q) = (q, p % q) - return p - - -def jacobi(a, b): - '''Calculates the value of the Jacobi symbol (a/b) where both a and b are - positive integers, and b is odd - - :returns: -1, 0 or 1 - ''' - - assert a > 0 - assert b > 0 - - if a == 0: return 0 - result = 1 - while a > 1: - if a & 1: - if ((a-1)*(b-1) >> 2) & 1: - result = -result - a, b = b % a, a - else: - if (((b * b) - 1) >> 3) & 1: - result = -result - a >>= 1 - if a == 0: return 0 - return result - -def jacobi_witness(x, n): - '''Returns False if n is an Euler pseudo-prime with base x, and - True otherwise. - ''' - - j = jacobi(x, n) % n - - f = pow(x, n >> 1, n) - - if j == f: return False - return True - -def randomized_primality_testing(n, k): - '''Calculates whether n is composite (which is always correct) or - prime (which is incorrect with error probability 2**-k) - - Returns False if the number is composite, and True if it's - probably prime. - ''' - - # 50% of Jacobi-witnesses can report compositness of non-prime numbers - - # The implemented algorithm using the Jacobi witness function has error - # probability q <= 0.5, according to Goodrich et. al - # - # q = 0.5 - # t = int(math.ceil(k / log(1 / q, 2))) - # So t = k / log(2, 2) = k / 1 = k - # this means we can use range(k) rather than range(t) - - for _ in range(k): - x = rsa.randnum.randint(n-1) - if jacobi_witness(x, n): return False - - return True - -def is_prime(number): - '''Returns True if the number is prime, and False otherwise. - - >>> is_prime(42) - False - >>> is_prime(41) - True - ''' - - return randomized_primality_testing(number, 6) - -def getprime(nbits): - '''Returns a prime number that can be stored in 'nbits' bits. - - >>> p = getprime(128) - >>> is_prime(p-1) - False - >>> is_prime(p) - True - >>> is_prime(p+1) - False - - >>> from rsa import common - >>> common.bit_size(p) == 128 - True - - ''' - - while True: - integer = rsa.randnum.read_random_int(nbits) - - # Make sure it's odd - integer |= 1 - - # Test for primeness - if is_prime(integer): - return integer - - # Retry if not prime - - -def are_relatively_prime(a, b): - '''Returns True if a and b are relatively prime, and False if they - are not. - - >>> are_relatively_prime(2, 3) - 1 - >>> are_relatively_prime(2, 4) - 0 - ''' - - d = gcd(a, b) - return (d == 1) - -if __name__ == '__main__': - print('Running doctests 1000x or until failure') - import doctest - - for count in range(1000): - (failures, tests) = doctest.testmod() - if failures: - break - - if count and count % 100 == 0: - print('%i times' % count) - - print('Doctests done') diff --git a/server/www/packages/packages-common/rsa/randnum.py b/server/www/packages/packages-common/rsa/randnum.py deleted file mode 100644 index 0e78274..0000000 --- a/server/www/packages/packages-common/rsa/randnum.py +++ /dev/null @@ -1,85 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -'''Functions for generating random numbers.''' - -# Source inspired by code by Yesudeep Mangalapilly - -import os - -from rsa import common, transform -from rsa._compat import byte - -def read_random_bits(nbits): - '''Reads 'nbits' random bits. - - If nbits isn't a whole number of bytes, an extra byte will be appended with - only the lower bits set. - ''' - - nbytes, rbits = divmod(nbits, 8) - - # Get the random bytes - randomdata = os.urandom(nbytes) - - # Add the remaining random bits - if rbits > 0: - randomvalue = ord(os.urandom(1)) - randomvalue >>= (8 - rbits) - randomdata = byte(randomvalue) + randomdata - - return randomdata - - -def read_random_int(nbits): - '''Reads a random integer of approximately nbits bits. - ''' - - randomdata = read_random_bits(nbits) - value = transform.bytes2int(randomdata) - - # Ensure that the number is large enough to just fill out the required - # number of bits. - value |= 1 << (nbits - 1) - - return value - -def randint(maxvalue): - '''Returns a random integer x with 1 <= x <= maxvalue - - May take a very long time in specific situations. If maxvalue needs N bits - to store, the closer maxvalue is to (2 ** N) - 1, the faster this function - is. - ''' - - bit_size = common.bit_size(maxvalue) - - tries = 0 - while True: - value = read_random_int(bit_size) - if value <= maxvalue: - break - - if tries and tries % 10 == 0: - # After a lot of tries to get the right number of bits but still - # smaller than maxvalue, decrease the number of bits by 1. That'll - # dramatically increase the chances to get a large enough number. - bit_size -= 1 - tries += 1 - - return value - - diff --git a/server/www/packages/packages-common/rsa/transform.py b/server/www/packages/packages-common/rsa/transform.py deleted file mode 100644 index c740b2d..0000000 --- a/server/www/packages/packages-common/rsa/transform.py +++ /dev/null @@ -1,220 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -'''Data transformation functions. - -From bytes to a number, number to bytes, etc. -''' - -from __future__ import absolute_import - -try: - # We'll use psyco if available on 32-bit architectures to speed up code. - # Using psyco (if available) cuts down the execution time on Python 2.5 - # at least by half. - import psyco - psyco.full() -except ImportError: - pass - -import binascii -from struct import pack -from rsa import common -from rsa._compat import is_integer, b, byte, get_word_alignment, ZERO_BYTE, EMPTY_BYTE - - -def bytes2int(raw_bytes): - r'''Converts a list of bytes or an 8-bit string to an integer. - - When using unicode strings, encode it to some encoding like UTF8 first. - - >>> (((128 * 256) + 64) * 256) + 15 - 8405007 - >>> bytes2int('\x80@\x0f') - 8405007 - - ''' - - return int(binascii.hexlify(raw_bytes), 16) - - -def _int2bytes(number, block_size=None): - r'''Converts a number to a string of bytes. - - Usage:: - - >>> _int2bytes(123456789) - '\x07[\xcd\x15' - >>> bytes2int(_int2bytes(123456789)) - 123456789 - - >>> _int2bytes(123456789, 6) - '\x00\x00\x07[\xcd\x15' - >>> bytes2int(_int2bytes(123456789, 128)) - 123456789 - - >>> _int2bytes(123456789, 3) - Traceback (most recent call last): - ... - OverflowError: Needed 4 bytes for number, but block size is 3 - - @param number: the number to convert - @param block_size: the number of bytes to output. If the number encoded to - bytes is less than this, the block will be zero-padded. When not given, - the returned block is not padded. - - @throws OverflowError when block_size is given and the number takes up more - bytes than fit into the block. - ''' - # Type checking - if not is_integer(number): - raise TypeError("You must pass an integer for 'number', not %s" % - number.__class__) - - if number < 0: - raise ValueError('Negative numbers cannot be used: %i' % number) - - # Do some bounds checking - if number == 0: - needed_bytes = 1 - raw_bytes = [ZERO_BYTE] - else: - needed_bytes = common.byte_size(number) - raw_bytes = [] - - # You cannot compare None > 0 in Python 3x. It will fail with a TypeError. - if block_size and block_size > 0: - if needed_bytes > block_size: - raise OverflowError('Needed %i bytes for number, but block size ' - 'is %i' % (needed_bytes, block_size)) - - # Convert the number to bytes. - while number > 0: - raw_bytes.insert(0, byte(number & 0xFF)) - number >>= 8 - - # Pad with zeroes to fill the block - if block_size and block_size > 0: - padding = (block_size - needed_bytes) * ZERO_BYTE - else: - padding = EMPTY_BYTE - - return padding + EMPTY_BYTE.join(raw_bytes) - - -def bytes_leading(raw_bytes, needle=ZERO_BYTE): - ''' - Finds the number of prefixed byte occurrences in the haystack. - - Useful when you want to deal with padding. - - :param raw_bytes: - Raw bytes. - :param needle: - The byte to count. Default \000. - :returns: - The number of leading needle bytes. - ''' - leading = 0 - # Indexing keeps compatibility between Python 2.x and Python 3.x - _byte = needle[0] - for x in raw_bytes: - if x == _byte: - leading += 1 - else: - break - return leading - - -def int2bytes(number, fill_size=None, chunk_size=None, overflow=False): - ''' - Convert an unsigned integer to bytes (base-256 representation):: - - Does not preserve leading zeros if you don't specify a chunk size or - fill size. - - .. NOTE: - You must not specify both fill_size and chunk_size. Only one - of them is allowed. - - :param number: - Integer value - :param fill_size: - If the optional fill size is given the length of the resulting - byte string is expected to be the fill size and will be padded - with prefix zero bytes to satisfy that length. - :param chunk_size: - If optional chunk size is given and greater than zero, pad the front of - the byte string with binary zeros so that the length is a multiple of - ``chunk_size``. - :param overflow: - ``False`` (default). If this is ``True``, no ``OverflowError`` - will be raised when the fill_size is shorter than the length - of the generated byte sequence. Instead the byte sequence will - be returned as is. - :returns: - Raw bytes (base-256 representation). - :raises: - ``OverflowError`` when fill_size is given and the number takes up more - bytes than fit into the block. This requires the ``overflow`` - argument to this function to be set to ``False`` otherwise, no - error will be raised. - ''' - if number < 0: - raise ValueError("Number must be an unsigned integer: %d" % number) - - if fill_size and chunk_size: - raise ValueError("You can either fill or pad chunks, but not both") - - # Ensure these are integers. - number & 1 - - raw_bytes = b('') - - # Pack the integer one machine word at a time into bytes. - num = number - word_bits, _, max_uint, pack_type = get_word_alignment(num) - pack_format = ">%s" % pack_type - while num > 0: - raw_bytes = pack(pack_format, num & max_uint) + raw_bytes - num >>= word_bits - # Obtain the index of the first non-zero byte. - zero_leading = bytes_leading(raw_bytes) - if number == 0: - raw_bytes = ZERO_BYTE - # De-padding. - raw_bytes = raw_bytes[zero_leading:] - - length = len(raw_bytes) - if fill_size and fill_size > 0: - if not overflow and length > fill_size: - raise OverflowError( - "Need %d bytes for number, but fill size is %d" % - (length, fill_size) - ) - raw_bytes = raw_bytes.rjust(fill_size, ZERO_BYTE) - elif chunk_size and chunk_size > 0: - remainder = length % chunk_size - if remainder: - padding_size = chunk_size - remainder - raw_bytes = raw_bytes.rjust(length + padding_size, ZERO_BYTE) - return raw_bytes - - -if __name__ == '__main__': - import doctest - doctest.testmod() - diff --git a/server/www/packages/packages-common/rsa/util.py b/server/www/packages/packages-common/rsa/util.py deleted file mode 100644 index 5bbb70b..0000000 --- a/server/www/packages/packages-common/rsa/util.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -'''Utility functions.''' - -from __future__ import with_statement, print_function - -import sys -from optparse import OptionParser - -import rsa.key - -def private_to_public(): - '''Reads a private key and outputs the corresponding public key.''' - - # Parse the CLI options - parser = OptionParser(usage='usage: %prog [options]', - description='Reads a private key and outputs the ' - 'corresponding public key. Both private and public keys use ' - 'the format described in PKCS#1 v1.5') - - parser.add_option('-i', '--input', dest='infilename', type='string', - help='Input filename. Reads from stdin if not specified') - parser.add_option('-o', '--output', dest='outfilename', type='string', - help='Output filename. Writes to stdout of not specified') - - parser.add_option('--inform', dest='inform', - help='key format of input - default PEM', - choices=('PEM', 'DER'), default='PEM') - - parser.add_option('--outform', dest='outform', - help='key format of output - default PEM', - choices=('PEM', 'DER'), default='PEM') - - (cli, cli_args) = parser.parse_args(sys.argv) - - # Read the input data - if cli.infilename: - print('Reading private key from %s in %s format' % \ - (cli.infilename, cli.inform), file=sys.stderr) - with open(cli.infilename, 'rb') as infile: - in_data = infile.read() - else: - print('Reading private key from stdin in %s format' % cli.inform, - file=sys.stderr) - in_data = sys.stdin.read().encode('ascii') - - assert type(in_data) == bytes, type(in_data) - - - # Take the public fields and create a public key - priv_key = rsa.key.PrivateKey.load_pkcs1(in_data, cli.inform) - pub_key = rsa.key.PublicKey(priv_key.n, priv_key.e) - - # Save to the output file - out_data = pub_key.save_pkcs1(cli.outform) - - if cli.outfilename: - print('Writing public key to %s in %s format' % \ - (cli.outfilename, cli.outform), file=sys.stderr) - with open(cli.outfilename, 'wb') as outfile: - outfile.write(out_data) - else: - print('Writing public key to stdout in %s format' % cli.outform, - file=sys.stderr) - sys.stdout.write(out_data.decode('ascii')) - - diff --git a/server/www/packages/packages-common/rsa/varblock.py b/server/www/packages/packages-common/rsa/varblock.py deleted file mode 100644 index c7d96ae..0000000 --- a/server/www/packages/packages-common/rsa/varblock.py +++ /dev/null @@ -1,155 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2011 Sybren A. Stüvel -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -'''VARBLOCK file support - -The VARBLOCK file format is as follows, where || denotes byte concatenation: - - FILE := VERSION || BLOCK || BLOCK ... - - BLOCK := LENGTH || DATA - - LENGTH := varint-encoded length of the subsequent data. Varint comes from - Google Protobuf, and encodes an integer into a variable number of bytes. - Each byte uses the 7 lowest bits to encode the value. The highest bit set - to 1 indicates the next byte is also part of the varint. The last byte will - have this bit set to 0. - -This file format is called the VARBLOCK format, in line with the varint format -used to denote the block sizes. - -''' - -from rsa._compat import byte, b - - -ZERO_BYTE = b('\x00') -VARBLOCK_VERSION = 1 - -def read_varint(infile): - '''Reads a varint from the file. - - When the first byte to be read indicates EOF, (0, 0) is returned. When an - EOF occurs when at least one byte has been read, an EOFError exception is - raised. - - @param infile: the file-like object to read from. It should have a read() - method. - @returns (varint, length), the read varint and the number of read bytes. - ''' - - varint = 0 - read_bytes = 0 - - while True: - char = infile.read(1) - if len(char) == 0: - if read_bytes == 0: - return (0, 0) - raise EOFError('EOF while reading varint, value is %i so far' % - varint) - - byte = ord(char) - varint += (byte & 0x7F) << (7 * read_bytes) - - read_bytes += 1 - - if not byte & 0x80: - return (varint, read_bytes) - - -def write_varint(outfile, value): - '''Writes a varint to a file. - - @param outfile: the file-like object to write to. It should have a write() - method. - @returns the number of written bytes. - ''' - - # there is a big difference between 'write the value 0' (this case) and - # 'there is nothing left to write' (the false-case of the while loop) - - if value == 0: - outfile.write(ZERO_BYTE) - return 1 - - written_bytes = 0 - while value > 0: - to_write = value & 0x7f - value = value >> 7 - - if value > 0: - to_write |= 0x80 - - outfile.write(byte(to_write)) - written_bytes += 1 - - return written_bytes - - -def yield_varblocks(infile): - '''Generator, yields each block in the input file. - - @param infile: file to read, is expected to have the VARBLOCK format as - described in the module's docstring. - @yields the contents of each block. - ''' - - # Check the version number - first_char = infile.read(1) - if len(first_char) == 0: - raise EOFError('Unable to read VARBLOCK version number') - - version = ord(first_char) - if version != VARBLOCK_VERSION: - raise ValueError('VARBLOCK version %i not supported' % version) - - while True: - (block_size, read_bytes) = read_varint(infile) - - # EOF at block boundary, that's fine. - if read_bytes == 0 and block_size == 0: - break - - block = infile.read(block_size) - - read_size = len(block) - if read_size != block_size: - raise EOFError('Block size is %i, but could read only %i bytes' % - (block_size, read_size)) - - yield block - - -def yield_fixedblocks(infile, blocksize): - '''Generator, yields each block of ``blocksize`` bytes in the input file. - - :param infile: file to read and separate in blocks. - :returns: a generator that yields the contents of each block - ''' - - while True: - block = infile.read(blocksize) - - read_bytes = len(block) - if read_bytes == 0: - break - - yield block - - if read_bytes < blocksize: - break - diff --git a/server/www/packages/packages-common/tornado/__init__.py b/server/www/packages/packages-common/tornado/__init__.py index 85bacc7..f054e40 100644 --- a/server/www/packages/packages-common/tornado/__init__.py +++ b/server/www/packages/packages-common/tornado/__init__.py @@ -16,7 +16,7 @@ """The Tornado web server and tools.""" -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function # version is a human-readable version number. @@ -25,5 +25,5 @@ from __future__ import absolute_import, division, print_function, with_statement # is zero for an official release, positive for a development branch, # or negative for a release candidate or beta (after the base version # number has been incremented) -version = "4.3" -version_info = (4, 3, 0, 0) +version = "4.5.1" +version_info = (4, 5, 1, 0) diff --git a/server/www/packages/packages-common/tornado/_locale_data.py b/server/www/packages/packages-common/tornado/_locale_data.py index 47c1df6..6fa2c29 100644 --- a/server/www/packages/packages-common/tornado/_locale_data.py +++ b/server/www/packages/packages-common/tornado/_locale_data.py @@ -17,78 +17,69 @@ """Data used by the tornado.locale module.""" -from __future__ import absolute_import, division, print_function, with_statement - -# NOTE: This file is supposed to contain unicode strings, which is -# exactly what you'd get with e.g. u"Español" in most python versions. -# However, Python 3.2 doesn't support the u"" syntax, so we use a u() -# function instead. tornado.util.u cannot be used because it doesn't -# support non-ascii characters on python 2. -# When we drop support for Python 3.2, we can remove the parens -# and make these plain unicode strings. -from tornado.escape import to_unicode as u +from __future__ import absolute_import, division, print_function LOCALE_NAMES = { - "af_ZA": {"name_en": u("Afrikaans"), "name": u("Afrikaans")}, - "am_ET": {"name_en": u("Amharic"), "name": u("አማርኛ")}, - "ar_AR": {"name_en": u("Arabic"), "name": u("العربية")}, - "bg_BG": {"name_en": u("Bulgarian"), "name": u("Български")}, - "bn_IN": {"name_en": u("Bengali"), "name": u("বাংলা")}, - "bs_BA": {"name_en": u("Bosnian"), "name": u("Bosanski")}, - "ca_ES": {"name_en": u("Catalan"), "name": u("Català")}, - "cs_CZ": {"name_en": u("Czech"), "name": u("Čeština")}, - "cy_GB": {"name_en": u("Welsh"), "name": u("Cymraeg")}, - "da_DK": {"name_en": u("Danish"), "name": u("Dansk")}, - "de_DE": {"name_en": u("German"), "name": u("Deutsch")}, - "el_GR": {"name_en": u("Greek"), "name": u("Ελληνικά")}, - "en_GB": {"name_en": u("English (UK)"), "name": u("English (UK)")}, - "en_US": {"name_en": u("English (US)"), "name": u("English (US)")}, - "es_ES": {"name_en": u("Spanish (Spain)"), "name": u("Español (España)")}, - "es_LA": {"name_en": u("Spanish"), "name": u("Español")}, - "et_EE": {"name_en": u("Estonian"), "name": u("Eesti")}, - "eu_ES": {"name_en": u("Basque"), "name": u("Euskara")}, - "fa_IR": {"name_en": u("Persian"), "name": u("فارسی")}, - "fi_FI": {"name_en": u("Finnish"), "name": u("Suomi")}, - "fr_CA": {"name_en": u("French (Canada)"), "name": u("Français (Canada)")}, - "fr_FR": {"name_en": u("French"), "name": u("Français")}, - "ga_IE": {"name_en": u("Irish"), "name": u("Gaeilge")}, - "gl_ES": {"name_en": u("Galician"), "name": u("Galego")}, - "he_IL": {"name_en": u("Hebrew"), "name": u("עברית")}, - "hi_IN": {"name_en": u("Hindi"), "name": u("हिन्दी")}, - "hr_HR": {"name_en": u("Croatian"), "name": u("Hrvatski")}, - "hu_HU": {"name_en": u("Hungarian"), "name": u("Magyar")}, - "id_ID": {"name_en": u("Indonesian"), "name": u("Bahasa Indonesia")}, - "is_IS": {"name_en": u("Icelandic"), "name": u("Íslenska")}, - "it_IT": {"name_en": u("Italian"), "name": u("Italiano")}, - "ja_JP": {"name_en": u("Japanese"), "name": u("日本語")}, - "ko_KR": {"name_en": u("Korean"), "name": u("한국어")}, - "lt_LT": {"name_en": u("Lithuanian"), "name": u("Lietuvių")}, - "lv_LV": {"name_en": u("Latvian"), "name": u("Latviešu")}, - "mk_MK": {"name_en": u("Macedonian"), "name": u("Македонски")}, - "ml_IN": {"name_en": u("Malayalam"), "name": u("മലയാളം")}, - "ms_MY": {"name_en": u("Malay"), "name": u("Bahasa Melayu")}, - "nb_NO": {"name_en": u("Norwegian (bokmal)"), "name": u("Norsk (bokmål)")}, - "nl_NL": {"name_en": u("Dutch"), "name": u("Nederlands")}, - "nn_NO": {"name_en": u("Norwegian (nynorsk)"), "name": u("Norsk (nynorsk)")}, - "pa_IN": {"name_en": u("Punjabi"), "name": u("ਪੰਜਾਬੀ")}, - "pl_PL": {"name_en": u("Polish"), "name": u("Polski")}, - "pt_BR": {"name_en": u("Portuguese (Brazil)"), "name": u("Português (Brasil)")}, - "pt_PT": {"name_en": u("Portuguese (Portugal)"), "name": u("Português (Portugal)")}, - "ro_RO": {"name_en": u("Romanian"), "name": u("Română")}, - "ru_RU": {"name_en": u("Russian"), "name": u("Русский")}, - "sk_SK": {"name_en": u("Slovak"), "name": u("Slovenčina")}, - "sl_SI": {"name_en": u("Slovenian"), "name": u("Slovenščina")}, - "sq_AL": {"name_en": u("Albanian"), "name": u("Shqip")}, - "sr_RS": {"name_en": u("Serbian"), "name": u("Српски")}, - "sv_SE": {"name_en": u("Swedish"), "name": u("Svenska")}, - "sw_KE": {"name_en": u("Swahili"), "name": u("Kiswahili")}, - "ta_IN": {"name_en": u("Tamil"), "name": u("தமிழ்")}, - "te_IN": {"name_en": u("Telugu"), "name": u("తెలుగు")}, - "th_TH": {"name_en": u("Thai"), "name": u("ภาษาไทย")}, - "tl_PH": {"name_en": u("Filipino"), "name": u("Filipino")}, - "tr_TR": {"name_en": u("Turkish"), "name": u("Türkçe")}, - "uk_UA": {"name_en": u("Ukraini "), "name": u("Українська")}, - "vi_VN": {"name_en": u("Vietnamese"), "name": u("Tiếng Việt")}, - "zh_CN": {"name_en": u("Chinese (Simplified)"), "name": u("中文(简体)")}, - "zh_TW": {"name_en": u("Chinese (Traditional)"), "name": u("中文(繁體)")}, + "af_ZA": {"name_en": u"Afrikaans", "name": u"Afrikaans"}, + "am_ET": {"name_en": u"Amharic", "name": u"አማርኛ"}, + "ar_AR": {"name_en": u"Arabic", "name": u"العربية"}, + "bg_BG": {"name_en": u"Bulgarian", "name": u"Български"}, + "bn_IN": {"name_en": u"Bengali", "name": u"বাংলা"}, + "bs_BA": {"name_en": u"Bosnian", "name": u"Bosanski"}, + "ca_ES": {"name_en": u"Catalan", "name": u"Català"}, + "cs_CZ": {"name_en": u"Czech", "name": u"Čeština"}, + "cy_GB": {"name_en": u"Welsh", "name": u"Cymraeg"}, + "da_DK": {"name_en": u"Danish", "name": u"Dansk"}, + "de_DE": {"name_en": u"German", "name": u"Deutsch"}, + "el_GR": {"name_en": u"Greek", "name": u"Ελληνικά"}, + "en_GB": {"name_en": u"English (UK)", "name": u"English (UK)"}, + "en_US": {"name_en": u"English (US)", "name": u"English (US)"}, + "es_ES": {"name_en": u"Spanish (Spain)", "name": u"Español (España)"}, + "es_LA": {"name_en": u"Spanish", "name": u"Español"}, + "et_EE": {"name_en": u"Estonian", "name": u"Eesti"}, + "eu_ES": {"name_en": u"Basque", "name": u"Euskara"}, + "fa_IR": {"name_en": u"Persian", "name": u"فارسی"}, + "fi_FI": {"name_en": u"Finnish", "name": u"Suomi"}, + "fr_CA": {"name_en": u"French (Canada)", "name": u"Français (Canada)"}, + "fr_FR": {"name_en": u"French", "name": u"Français"}, + "ga_IE": {"name_en": u"Irish", "name": u"Gaeilge"}, + "gl_ES": {"name_en": u"Galician", "name": u"Galego"}, + "he_IL": {"name_en": u"Hebrew", "name": u"עברית"}, + "hi_IN": {"name_en": u"Hindi", "name": u"हिन्दी"}, + "hr_HR": {"name_en": u"Croatian", "name": u"Hrvatski"}, + "hu_HU": {"name_en": u"Hungarian", "name": u"Magyar"}, + "id_ID": {"name_en": u"Indonesian", "name": u"Bahasa Indonesia"}, + "is_IS": {"name_en": u"Icelandic", "name": u"Íslenska"}, + "it_IT": {"name_en": u"Italian", "name": u"Italiano"}, + "ja_JP": {"name_en": u"Japanese", "name": u"日本語"}, + "ko_KR": {"name_en": u"Korean", "name": u"한국어"}, + "lt_LT": {"name_en": u"Lithuanian", "name": u"Lietuvių"}, + "lv_LV": {"name_en": u"Latvian", "name": u"Latviešu"}, + "mk_MK": {"name_en": u"Macedonian", "name": u"Македонски"}, + "ml_IN": {"name_en": u"Malayalam", "name": u"മലയാളം"}, + "ms_MY": {"name_en": u"Malay", "name": u"Bahasa Melayu"}, + "nb_NO": {"name_en": u"Norwegian (bokmal)", "name": u"Norsk (bokmål)"}, + "nl_NL": {"name_en": u"Dutch", "name": u"Nederlands"}, + "nn_NO": {"name_en": u"Norwegian (nynorsk)", "name": u"Norsk (nynorsk)"}, + "pa_IN": {"name_en": u"Punjabi", "name": u"ਪੰਜਾਬੀ"}, + "pl_PL": {"name_en": u"Polish", "name": u"Polski"}, + "pt_BR": {"name_en": u"Portuguese (Brazil)", "name": u"Português (Brasil)"}, + "pt_PT": {"name_en": u"Portuguese (Portugal)", "name": u"Português (Portugal)"}, + "ro_RO": {"name_en": u"Romanian", "name": u"Română"}, + "ru_RU": {"name_en": u"Russian", "name": u"Русский"}, + "sk_SK": {"name_en": u"Slovak", "name": u"Slovenčina"}, + "sl_SI": {"name_en": u"Slovenian", "name": u"Slovenščina"}, + "sq_AL": {"name_en": u"Albanian", "name": u"Shqip"}, + "sr_RS": {"name_en": u"Serbian", "name": u"Српски"}, + "sv_SE": {"name_en": u"Swedish", "name": u"Svenska"}, + "sw_KE": {"name_en": u"Swahili", "name": u"Kiswahili"}, + "ta_IN": {"name_en": u"Tamil", "name": u"தமிழ்"}, + "te_IN": {"name_en": u"Telugu", "name": u"తెలుగు"}, + "th_TH": {"name_en": u"Thai", "name": u"ภาษาไทย"}, + "tl_PH": {"name_en": u"Filipino", "name": u"Filipino"}, + "tr_TR": {"name_en": u"Turkish", "name": u"Türkçe"}, + "uk_UA": {"name_en": u"Ukraini ", "name": u"Українська"}, + "vi_VN": {"name_en": u"Vietnamese", "name": u"Tiếng Việt"}, + "zh_CN": {"name_en": u"Chinese (Simplified)", "name": u"中文(简体)"}, + "zh_TW": {"name_en": u"Chinese (Traditional)", "name": u"中文(繁體)"}, } diff --git a/server/www/packages/packages-common/tornado/auth.py b/server/www/packages/packages-common/tornado/auth.py index ff7172a..f02d289 100644 --- a/server/www/packages/packages-common/tornado/auth.py +++ b/server/www/packages/packages-common/tornado/auth.py @@ -65,7 +65,7 @@ Example usage for Google OAuth: errors are more consistently reported through the ``Future`` interfaces. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import base64 import binascii @@ -82,22 +82,15 @@ from tornado import escape from tornado.httputil import url_concat from tornado.log import gen_log from tornado.stack_context import ExceptionStackContext -from tornado.util import u, unicode_type, ArgReplacer +from tornado.util import unicode_type, ArgReplacer, PY3 -try: - import urlparse # py2 -except ImportError: - import urllib.parse as urlparse # py3 - -try: - import urllib.parse as urllib_parse # py3 -except ImportError: - import urllib as urllib_parse # py2 - -try: - long # py2 -except NameError: - long = int # py3 +if PY3: + import urllib.parse as urlparse + import urllib.parse as urllib_parse + long = int +else: + import urlparse + import urllib as urllib_parse class AuthError(Exception): @@ -188,7 +181,7 @@ class OpenIdMixin(object): """ # Verify the OpenID response via direct request to the OP args = dict((k, v[-1]) for k, v in self.request.arguments.items()) - args["openid.mode"] = u("check_authentication") + args["openid.mode"] = u"check_authentication" url = self._OPENID_ENDPOINT if http_client is None: http_client = self.get_auth_http_client() @@ -255,13 +248,13 @@ class OpenIdMixin(object): ax_ns = None for name in self.request.arguments: if name.startswith("openid.ns.") and \ - self.get_argument(name) == u("http://openid.net/srv/ax/1.0"): + self.get_argument(name) == u"http://openid.net/srv/ax/1.0": ax_ns = name[10:] break def get_ax_arg(uri): if not ax_ns: - return u("") + return u"" prefix = "openid." + ax_ns + ".type." ax_name = None for name in self.request.arguments.keys(): @@ -270,8 +263,8 @@ class OpenIdMixin(object): ax_name = "openid." + ax_ns + ".value." + part break if not ax_name: - return u("") - return self.get_argument(ax_name, u("")) + return u"" + return self.get_argument(ax_name, u"") email = get_ax_arg("http://axschema.org/contact/email") name = get_ax_arg("http://axschema.org/namePerson") @@ -290,7 +283,7 @@ class OpenIdMixin(object): if name: user["name"] = name elif name_parts: - user["name"] = u(" ").join(name_parts) + user["name"] = u" ".join(name_parts) elif email: user["name"] = email.split("@")[0] if email: @@ -961,6 +954,20 @@ class FacebookGraphMixin(OAuth2Mixin): .. testoutput:: :hide: + This method returns a dictionary which may contain the following fields: + + * ``access_token``, a string which may be passed to `facebook_request` + * ``session_expires``, an integer encoded as a string representing + the time until the access token expires in seconds. This field should + be used like ``int(user['session_expires'])``; in a future version of + Tornado it will change from a string to an integer. + * ``id``, ``name``, ``first_name``, ``last_name``, ``locale``, ``picture``, + ``link``, plus any fields named in the ``extra_fields`` argument. These + fields are copied from the Facebook graph API `user object `_ + + .. versionchanged:: 4.5 + The ``session_expires`` field was updated to support changes made to the + Facebook API in March 2017. """ http = self.get_auth_http_client() args = { @@ -985,10 +992,10 @@ class FacebookGraphMixin(OAuth2Mixin): future.set_exception(AuthError('Facebook auth error: %s' % str(response))) return - args = urlparse.parse_qs(escape.native_str(response.body)) + args = escape.json_decode(response.body) session = { - "access_token": args["access_token"][-1], - "expires": args.get("expires") + "access_token": args.get("access_token"), + "expires_in": args.get("expires_in") } self.facebook_request( @@ -996,6 +1003,9 @@ class FacebookGraphMixin(OAuth2Mixin): callback=functools.partial( self._on_get_user_info, future, session, fields), access_token=session["access_token"], + appsecret_proof=hmac.new(key=client_secret.encode('utf8'), + msg=session["access_token"].encode('utf8'), + digestmod=hashlib.sha256).hexdigest(), fields=",".join(fields) ) @@ -1008,7 +1018,12 @@ class FacebookGraphMixin(OAuth2Mixin): for field in fields: fieldmap[field] = user.get(field) - fieldmap.update({"access_token": session["access_token"], "session_expires": session.get("expires")}) + # session_expires is converted to str for compatibility with + # older versions in which the server used url-encoding and + # this code simply returned the string verbatim. + # This should change in Tornado 5.0. + fieldmap.update({"access_token": session["access_token"], + "session_expires": str(session.get("expires_in"))}) future.set_result(fieldmap) @_auth_return_future diff --git a/server/www/packages/packages-common/tornado/autoreload.py b/server/www/packages/packages-common/tornado/autoreload.py index 1cbf26c..60571ef 100644 --- a/server/www/packages/packages-common/tornado/autoreload.py +++ b/server/www/packages/packages-common/tornado/autoreload.py @@ -45,7 +45,7 @@ incorrectly. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import os import sys @@ -83,7 +83,7 @@ if __name__ == "__main__": import functools import logging import os -import pkgutil +import pkgutil # type: ignore import sys import traceback import types @@ -103,16 +103,12 @@ except ImportError: # os.execv is broken on Windows and can't properly parse command line # arguments and executable name if they contain whitespaces. subprocess # fixes that behavior. -# This distinction is also important because when we use execv, we want to -# close the IOLoop and all its file descriptors, to guard against any -# file descriptors that were not set CLOEXEC. When execv is not available, -# we must not close the IOLoop because we want the process to exit cleanly. _has_execv = sys.platform != 'win32' _watched_files = set() _reload_hooks = [] _reload_attempted = False -_io_loops = weakref.WeakKeyDictionary() +_io_loops = weakref.WeakKeyDictionary() # type: ignore def start(io_loop=None, check_time=500): @@ -127,8 +123,6 @@ def start(io_loop=None, check_time=500): _io_loops[io_loop] = True if len(_io_loops) > 1: gen_log.warning("tornado.autoreload started more than once in the same process") - if _has_execv: - add_reload_hook(functools.partial(io_loop.close, all_fds=True)) modify_times = {} callback = functools.partial(_reload_on_update, modify_times) scheduler = ioloop.PeriodicCallback(callback, check_time, io_loop=io_loop) @@ -249,6 +243,7 @@ def _reload(): # unwind, so just exit uncleanly. os._exit(0) + _USAGE = """\ Usage: python -m tornado.autoreload -m module.to.run [args...] diff --git a/server/www/packages/packages-common/tornado/concurrent.py b/server/www/packages/packages-common/tornado/concurrent.py index 5f8cdc4..667e6b1 100644 --- a/server/www/packages/packages-common/tornado/concurrent.py +++ b/server/www/packages/packages-common/tornado/concurrent.py @@ -21,7 +21,7 @@ a mostly-compatible `Future` class designed for use from coroutines, as well as some utility functions for interacting with the `concurrent.futures` package. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import functools import platform @@ -31,13 +31,18 @@ import sys from tornado.log import app_log from tornado.stack_context import ExceptionStackContext, wrap -from tornado.util import raise_exc_info, ArgReplacer +from tornado.util import raise_exc_info, ArgReplacer, is_finalizing try: from concurrent import futures except ImportError: futures = None +try: + import typing +except ImportError: + typing = None + # Can the garbage collector handle cycles that include __del__ methods? # This is true in cpython beginning with version 3.4 (PEP 442). @@ -118,8 +123,8 @@ class _TracebackLogger(object): self.exc_info = None self.formatted_tb = None - def __del__(self): - if self.formatted_tb: + def __del__(self, is_finalizing=is_finalizing): + if not is_finalizing() and self.formatted_tb: app_log.error('Future exception was never retrieved: %s', ''.join(self.formatted_tb).rstrip()) @@ -229,7 +234,10 @@ class Future(object): if self._result is not None: return self._result if self._exc_info is not None: - raise_exc_info(self._exc_info) + try: + raise_exc_info(self._exc_info) + finally: + self = None self._check_done() return self._result @@ -324,8 +332,8 @@ class Future(object): # cycle are never destroyed. It's no longer the case on Python 3.4 thanks to # the PEP 442. if _GC_CYCLE_FINALIZERS: - def __del__(self): - if not self._log_traceback: + def __del__(self, is_finalizing=is_finalizing): + if is_finalizing() or not self._log_traceback: # set_exception() was not called, or result() or exception() # has consumed the exception return @@ -335,10 +343,11 @@ class Future(object): app_log.error('Future %r exception was never retrieved: %s', self, ''.join(tb).rstrip()) + TracebackFuture = Future if futures is None: - FUTURES = Future + FUTURES = Future # type: typing.Union[type, typing.Tuple[type, ...]] else: FUTURES = (futures.Future, Future) @@ -359,6 +368,7 @@ class DummyExecutor(object): def shutdown(self, wait=True): pass + dummy_executor = DummyExecutor() @@ -500,8 +510,9 @@ def chain_future(a, b): assert future is a if b.done(): return - if (isinstance(a, TracebackFuture) and isinstance(b, TracebackFuture) - and a.exc_info() is not None): + if (isinstance(a, TracebackFuture) and + isinstance(b, TracebackFuture) and + a.exc_info() is not None): b.set_exc_info(a.exc_info()) elif a.exception() is not None: b.set_exception(a.exception()) diff --git a/server/www/packages/packages-common/tornado/curl_httpclient.py b/server/www/packages/packages-common/tornado/curl_httpclient.py index 22f2502..eef4a17 100644 --- a/server/www/packages/packages-common/tornado/curl_httpclient.py +++ b/server/www/packages/packages-common/tornado/curl_httpclient.py @@ -16,12 +16,12 @@ """Non-blocking HTTP client implementation using pycurl.""" -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import collections import functools import logging -import pycurl +import pycurl # type: ignore import threading import time from io import BytesIO @@ -221,6 +221,7 @@ class CurlAsyncHTTPClient(AsyncHTTPClient): # _process_queue() is called from # _finish_pending_requests the exceptions have # nowhere to go. + self._free_list.append(curl) callback(HTTPResponse( request=request, code=599, @@ -277,6 +278,9 @@ class CurlAsyncHTTPClient(AsyncHTTPClient): if curl_log.isEnabledFor(logging.DEBUG): curl.setopt(pycurl.VERBOSE, 1) curl.setopt(pycurl.DEBUGFUNCTION, self._curl_debug) + if hasattr(pycurl, 'PROTOCOLS'): # PROTOCOLS first appeared in pycurl 7.19.5 (2014-07-12) + curl.setopt(pycurl.PROTOCOLS, pycurl.PROTO_HTTP | pycurl.PROTO_HTTPS) + curl.setopt(pycurl.REDIR_PROTOCOLS, pycurl.PROTO_HTTP | pycurl.PROTO_HTTPS) return curl def _curl_setup_request(self, curl, request, buffer, headers): @@ -341,6 +345,15 @@ class CurlAsyncHTTPClient(AsyncHTTPClient): credentials = '%s:%s' % (request.proxy_username, request.proxy_password) curl.setopt(pycurl.PROXYUSERPWD, credentials) + + if (request.proxy_auth_mode is None or + request.proxy_auth_mode == "basic"): + curl.setopt(pycurl.PROXYAUTH, pycurl.HTTPAUTH_BASIC) + elif request.proxy_auth_mode == "digest": + curl.setopt(pycurl.PROXYAUTH, pycurl.HTTPAUTH_DIGEST) + else: + raise ValueError( + "Unsupported proxy_auth_mode %s" % request.proxy_auth_mode) else: curl.setopt(pycurl.PROXY, '') curl.unsetopt(pycurl.PROXYUSERPWD) @@ -461,7 +474,7 @@ class CurlAsyncHTTPClient(AsyncHTTPClient): request.prepare_curl_callback(curl) def _curl_header_callback(self, headers, header_callback, header_line): - header_line = native_str(header_line) + header_line = native_str(header_line.decode('latin1')) if header_callback is not None: self.io_loop.add_callback(header_callback, header_line) # header_line as returned by curl includes the end-of-line characters. diff --git a/server/www/packages/packages-common/tornado/escape.py b/server/www/packages/packages-common/tornado/escape.py index 2f04b46..2ca3fe3 100644 --- a/server/www/packages/packages-common/tornado/escape.py +++ b/server/www/packages/packages-common/tornado/escape.py @@ -20,34 +20,28 @@ Also includes a few other miscellaneous string manipulation functions that have crept in over time. """ -from __future__ import absolute_import, division, print_function, with_statement - -import re -import sys - -from tornado.util import unicode_type, basestring_type, u - -try: - from urllib.parse import parse_qs as _parse_qs # py3 -except ImportError: - from urlparse import parse_qs as _parse_qs # Python 2.6+ - -try: - import htmlentitydefs # py2 -except ImportError: - import html.entities as htmlentitydefs # py3 - -try: - import urllib.parse as urllib_parse # py3 -except ImportError: - import urllib as urllib_parse # py2 +from __future__ import absolute_import, division, print_function import json +import re + +from tornado.util import PY3, unicode_type, basestring_type + +if PY3: + from urllib.parse import parse_qs as _parse_qs + import html.entities as htmlentitydefs + import urllib.parse as urllib_parse + unichr = chr +else: + from urlparse import parse_qs as _parse_qs + import htmlentitydefs + import urllib as urllib_parse try: - unichr -except NameError: - unichr = chr + import typing # noqa +except ImportError: + pass + _XHTML_ESCAPE_RE = re.compile('[&<>"\']') _XHTML_ESCAPE_DICT = {'&': '&', '<': '<', '>': '>', '"': '"', @@ -116,7 +110,7 @@ def url_escape(value, plus=True): # python 3 changed things around enough that we need two separate # implementations of url_unescape. We also need our own implementation # of parse_qs since python 3's version insists on decoding everything. -if sys.version_info[0] < 3: +if not PY3: def url_unescape(value, encoding='utf-8', plus=True): """Decodes the given value from a URL. @@ -191,6 +185,7 @@ _UTF8_TYPES = (bytes, type(None)) def utf8(value): + # type: (typing.Union[bytes,unicode_type,None])->typing.Union[bytes,None] """Converts a string argument to a byte string. If the argument is already a byte string or None, it is returned unchanged. @@ -204,6 +199,7 @@ def utf8(value): ) return value.encode("utf-8") + _TO_UNICODE_TYPES = (unicode_type, type(None)) @@ -221,6 +217,7 @@ def to_unicode(value): ) return value.decode("utf-8") + # to_unicode was previously named _unicode not because it was private, # but to avoid conflicts with the built-in unicode() function/type _unicode = to_unicode @@ -269,6 +266,7 @@ def recursive_unicode(obj): else: return obj + # I originally used the regex from # http://daringfireball.net/2010/07/improved_regex_for_matching_urls # but it gets all exponential on certain patterns (such as too many trailing @@ -366,7 +364,7 @@ def linkify(text, shorten=False, extra_params="", # have a status bar, such as Safari by default) params += ' title="%s"' % href - return u('%s') % (href, params, url) + return u'%s' % (href, params, url) # First HTML-escape so that our strings are all safe. # The regex is modified to avoid character entites other than & so @@ -396,4 +394,5 @@ def _build_unicode_map(): unicode_map[name] = unichr(value) return unicode_map + _HTML_UNICODE_MAP = _build_unicode_map() diff --git a/server/www/packages/packages-common/tornado/gen.py b/server/www/packages/packages-common/tornado/gen.py index bf184e5..99f9106 100644 --- a/server/www/packages/packages-common/tornado/gen.py +++ b/server/www/packages/packages-common/tornado/gen.py @@ -74,7 +74,7 @@ See the `convert_yielded` function to extend this mechanism. via ``singledispatch``. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import collections import functools @@ -83,16 +83,18 @@ import os import sys import textwrap import types +import weakref from tornado.concurrent import Future, TracebackFuture, is_future, chain_future from tornado.ioloop import IOLoop from tornado.log import app_log from tornado import stack_context -from tornado.util import raise_exc_info +from tornado.util import PY3, raise_exc_info try: try: - from functools import singledispatch # py34+ + # py34+ + from functools import singledispatch # type: ignore except ImportError: from singledispatch import singledispatch # backport except ImportError: @@ -108,12 +110,14 @@ except ImportError: try: try: - from collections.abc import Generator as GeneratorType # py35+ + # py35+ + from collections.abc import Generator as GeneratorType # type: ignore except ImportError: - from backports_abc import Generator as GeneratorType + from backports_abc import Generator as GeneratorType # type: ignore try: - from inspect import isawaitable # py35+ + # py35+ + from inspect import isawaitable # type: ignore except ImportError: from backports_abc import isawaitable except ImportError: @@ -121,12 +125,12 @@ except ImportError: raise from types import GeneratorType - def isawaitable(x): + def isawaitable(x): # type: ignore return False -try: - import builtins # py3 -except ImportError: +if PY3: + import builtins +else: import __builtin__ as builtins @@ -242,6 +246,26 @@ def coroutine(func, replace_callback=True): return _make_coroutine_wrapper(func, replace_callback=True) +# Ties lifetime of runners to their result futures. Github Issue #1769 +# Generators, like any object in Python, must be strong referenced +# in order to not be cleaned up by the garbage collector. When using +# coroutines, the Runner object is what strong-refs the inner +# generator. However, the only item that strong-reffed the Runner +# was the last Future that the inner generator yielded (via the +# Future's internal done_callback list). Usually this is enough, but +# it is also possible for this Future to not have any strong references +# other than other objects referenced by the Runner object (usually +# when using other callback patterns and/or weakrefs). In this +# situation, if a garbage collection ran, a cycle would be detected and +# Runner objects could be destroyed along with their inner generators +# and everything in their local scope. +# This map provides strong references to Runner objects as long as +# their result future objects also have strong references (typically +# from the parent coroutine's Runner). This keeps the coroutine's +# Runner alive. +_futures_to_runners = weakref.WeakKeyDictionary() + + def _make_coroutine_wrapper(func, replace_callback): """The inner workings of ``@gen.coroutine`` and ``@gen.engine``. @@ -251,10 +275,11 @@ def _make_coroutine_wrapper(func, replace_callback): """ # On Python 3.5, set the coroutine flag on our generator, to allow it # to be used with 'await'. + wrapped = func if hasattr(types, 'coroutine'): func = types.coroutine(func) - @functools.wraps(func) + @functools.wraps(wrapped) def wrapper(*args, **kwargs): future = TracebackFuture() @@ -291,7 +316,8 @@ def _make_coroutine_wrapper(func, replace_callback): except Exception: future.set_exc_info(sys.exc_info()) else: - Runner(result, future, yielded) + _futures_to_runners[future] = Runner(result, future, yielded) + yielded = None try: return future finally: @@ -306,9 +332,21 @@ def _make_coroutine_wrapper(func, replace_callback): future = None future.set_result(result) return future + + wrapper.__wrapped__ = wrapped + wrapper.__tornado_coroutine__ = True return wrapper +def is_coroutine_function(func): + """Return whether *func* is a coroutine function, i.e. a function + wrapped with `~.gen.coroutine`. + + .. versionadded:: 4.5 + """ + return getattr(func, '__tornado_coroutine__', False) + + class Return(Exception): """Special exception to return a value from a `coroutine`. @@ -682,6 +720,7 @@ def multi(children, quiet_exceptions=()): else: return multi_future(children, quiet_exceptions=quiet_exceptions) + Multi = multi @@ -830,7 +869,7 @@ def maybe_future(x): def with_timeout(timeout, future, io_loop=None, quiet_exceptions=()): - """Wraps a `.Future` in a timeout. + """Wraps a `.Future` (or other yieldable object) in a timeout. Raises `TimeoutError` if the input future does not complete before ``timeout``, which may be specified in any form allowed by @@ -841,15 +880,18 @@ def with_timeout(timeout, future, io_loop=None, quiet_exceptions=()): will be logged unless it is of a type contained in ``quiet_exceptions`` (which may be an exception type or a sequence of types). - Currently only supports Futures, not other `YieldPoint` classes. + Does not support `YieldPoint` subclasses. .. versionadded:: 4.0 .. versionchanged:: 4.1 Added the ``quiet_exceptions`` argument and the logging of unhandled exceptions. + + .. versionchanged:: 4.4 + Added support for yieldable objects other than `.Future`. """ - # TODO: allow yield points in addition to futures? + # TODO: allow YieldPoints in addition to other yieldables? # Tricky to do with stack_context semantics. # # It's tempting to optimize this by cancelling the input future on timeout @@ -857,6 +899,7 @@ def with_timeout(timeout, future, io_loop=None, quiet_exceptions=()): # one waiting on the input future, so cancelling it might disrupt other # callers and B) concurrent futures can only be cancelled while they are # in the queue, so cancellation cannot reliably bound our waiting time. + future = convert_yielded(future) result = Future() chain_future(future, result) if io_loop is None: @@ -923,6 +966,9 @@ coroutines that are likely to yield Futures that are ready instantly. Usage: ``yield gen.moment`` .. versionadded:: 4.0 + +.. deprecated:: 4.5 + ``yield None`` is now equivalent to ``yield gen.moment``. """ moment.set_result(None) @@ -953,6 +999,7 @@ class Runner(object): # of the coroutine. self.stack_context_deactivate = None if self.handle_yield(first_yielded): + gen = result_future = first_yielded = None self.run() def register_callback(self, key): @@ -1009,10 +1056,15 @@ class Runner(object): except Exception: self.had_exception = True exc_info = sys.exc_info() + future = None if exc_info is not None: - yielded = self.gen.throw(*exc_info) - exc_info = None + try: + yielded = self.gen.throw(*exc_info) + finally: + # Break up a reference to itself + # for faster GC on CPython. + exc_info = None else: yielded = self.gen.send(value) @@ -1045,6 +1097,7 @@ class Runner(object): return if not self.handle_yield(yielded): return + yielded = None finally: self.running = False @@ -1093,8 +1146,12 @@ class Runner(object): self.future.set_exc_info(sys.exc_info()) if not self.future.done() or self.future is moment: + def inner(f): + # Break a reference cycle to speed GC. + f = None # noqa + self.run() self.io_loop.add_future( - self.future, lambda f: self.run()) + self.future, inner) return False return True @@ -1116,6 +1173,7 @@ class Runner(object): self.stack_context_deactivate() self.stack_context_deactivate = None + Arguments = collections.namedtuple('Arguments', ['args', 'kwargs']) @@ -1135,6 +1193,7 @@ def _argument_adapter(callback): callback(None) return wrapper + # Convert Awaitables into Futures. It is unfortunately possible # to have infinite recursion here if those Awaitables assume that # we're using a different coroutine runner and yield objects @@ -1212,7 +1271,9 @@ def convert_yielded(yielded): .. versionadded:: 4.1 """ # Lists and dicts containing YieldPoints were handled earlier. - if isinstance(yielded, (list, dict)): + if yielded is None: + return moment + elif isinstance(yielded, (list, dict)): return multi(yielded) elif is_future(yielded): return yielded @@ -1221,6 +1282,7 @@ def convert_yielded(yielded): else: raise BadYieldError("yielded unknown object %r" % (yielded,)) + if singledispatch is not None: convert_yielded = singledispatch(convert_yielded) diff --git a/server/www/packages/packages-common/tornado/http1connection.py b/server/www/packages/packages-common/tornado/http1connection.py index 1c57706..53744ec 100644 --- a/server/www/packages/packages-common/tornado/http1connection.py +++ b/server/www/packages/packages-common/tornado/http1connection.py @@ -19,7 +19,7 @@ .. versionadded:: 4.0 """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import re @@ -30,7 +30,7 @@ from tornado import httputil from tornado import iostream from tornado.log import gen_log, app_log from tornado import stack_context -from tornado.util import GzipDecompressor +from tornado.util import GzipDecompressor, PY3 class _QuietException(Exception): @@ -257,6 +257,7 @@ class HTTP1Connection(httputil.HTTPConnection): if need_delegate_close: with _ExceptionLoggingContext(app_log): delegate.on_connection_close() + header_future = None self._clear_callbacks() raise gen.Return(True) @@ -342,7 +343,7 @@ class HTTP1Connection(httputil.HTTPConnection): 'Transfer-Encoding' not in headers) else: self._response_start_line = start_line - lines.append(utf8('HTTP/1.1 %s %s' % (start_line[1], start_line[2]))) + lines.append(utf8('HTTP/1.1 %d %s' % (start_line[1], start_line[2]))) self._chunking_output = ( # TODO: should this use # self._request_start_line.version or @@ -351,7 +352,7 @@ class HTTP1Connection(httputil.HTTPConnection): # 304 responses have no body (not even a zero-length body), and so # should not have either Content-Length or Transfer-Encoding. # headers. - start_line.code != 304 and + start_line.code not in (204, 304) and # No need to chunk the output if a Content-Length is specified. 'Content-Length' not in headers and # Applications are discouraged from touching Transfer-Encoding, @@ -359,8 +360,8 @@ class HTTP1Connection(httputil.HTTPConnection): 'Transfer-Encoding' not in headers) # If a 1.0 client asked for keep-alive, add the header. if (self._request_start_line.version == 'HTTP/1.0' and - (self._request_headers.get('Connection', '').lower() - == 'keep-alive')): + (self._request_headers.get('Connection', '').lower() == + 'keep-alive')): headers['Connection'] = 'Keep-Alive' if self._chunking_output: headers['Transfer-Encoding'] = 'chunked' @@ -372,7 +373,14 @@ class HTTP1Connection(httputil.HTTPConnection): self._expected_content_remaining = int(headers['Content-Length']) else: self._expected_content_remaining = None - lines.extend([utf8(n) + b": " + utf8(v) for n, v in headers.get_all()]) + # TODO: headers are supposed to be of type str, but we still have some + # cases that let bytes slip through. Remove these native_str calls when those + # are fixed. + header_lines = (native_str(n) + ": " + native_str(v) for n, v in headers.get_all()) + if PY3: + lines.extend(l.encode('latin1') for l in header_lines) + else: + lines.extend(header_lines) for line in lines: if b'\n' in line: raise ValueError('Newline in header: ' + repr(line)) @@ -479,9 +487,11 @@ class HTTP1Connection(httputil.HTTPConnection): connection_header = connection_header.lower() if start_line.version == "HTTP/1.1": return connection_header != "close" - elif ("Content-Length" in headers - or headers.get("Transfer-Encoding", "").lower() == "chunked" - or start_line.method in ("HEAD", "GET")): + elif ("Content-Length" in headers or + headers.get("Transfer-Encoding", "").lower() == "chunked" or + getattr(start_line, 'method', None) in ("HEAD", "GET")): + # start_line may be a request or response start line; only + # the former has a method attribute. return connection_header == "keep-alive" return False @@ -531,7 +541,13 @@ class HTTP1Connection(httputil.HTTPConnection): "Multiple unequal Content-Lengths: %r" % headers["Content-Length"]) headers["Content-Length"] = pieces[0] - content_length = int(headers["Content-Length"]) + + try: + content_length = int(headers["Content-Length"]) + except ValueError: + # Handles non-integer Content-Length value. + raise httputil.HTTPInputError( + "Only integer Content-Length is allowed: %s" % headers["Content-Length"]) if content_length > self._max_body_size: raise httputil.HTTPInputError("Content-Length too long") @@ -550,7 +566,7 @@ class HTTP1Connection(httputil.HTTPConnection): if content_length is not None: return self._read_fixed_body(content_length, delegate) - if headers.get("Transfer-Encoding") == "chunked": + if headers.get("Transfer-Encoding", "").lower() == "chunked": return self._read_chunked_body(delegate) if self.is_client: return self._read_body_until_close(delegate) diff --git a/server/www/packages/packages-common/tornado/httpclient.py b/server/www/packages/packages-common/tornado/httpclient.py index 9179227..8436ece 100644 --- a/server/www/packages/packages-common/tornado/httpclient.py +++ b/server/www/packages/packages-common/tornado/httpclient.py @@ -25,7 +25,7 @@ to switch to ``curl_httpclient`` for reasons such as the following: Note that if you are using ``curl_httpclient``, it is highly recommended that you use a recent version of ``libcurl`` and ``pycurl``. Currently the minimum supported version of libcurl is -7.21.1, and the minimum version of pycurl is 7.18.2. It is highly +7.22.0, and the minimum version of pycurl is 7.18.2. It is highly recommended that your ``libcurl`` installation is built with asynchronous DNS resolver (threaded or c-ares), otherwise you may encounter various problems with request timeouts (for more @@ -38,7 +38,7 @@ To select ``curl_httpclient``, call `AsyncHTTPClient.configure` at startup:: AsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient") """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import functools import time @@ -61,7 +61,7 @@ class HTTPClient(object): http_client = httpclient.HTTPClient() try: response = http_client.fetch("http://www.google.com/") - print response.body + print(response.body) except httpclient.HTTPError as e: # HTTPError is raised for non-200 responses; the response # can be found in e.response. @@ -108,14 +108,14 @@ class AsyncHTTPClient(Configurable): Example usage:: - def handle_request(response): + def handle_response(response): if response.error: - print "Error:", response.error + print("Error: %s" % response.error) else: - print response.body + print(response.body) http_client = AsyncHTTPClient() - http_client.fetch("http://www.google.com/", handle_request) + http_client.fetch("http://www.google.com/", handle_response) The constructor for this class is magic in several respects: It actually creates an instance of an implementation-specific @@ -211,10 +211,12 @@ class AsyncHTTPClient(Configurable): kwargs: ``HTTPRequest(request, **kwargs)`` This method returns a `.Future` whose result is an - `HTTPResponse`. By default, the ``Future`` will raise an `HTTPError` - if the request returned a non-200 response code. Instead, if - ``raise_error`` is set to False, the response will always be - returned regardless of the response code. + `HTTPResponse`. By default, the ``Future`` will raise an + `HTTPError` if the request returned a non-200 response code + (other errors may also be raised if the server could not be + contacted). Instead, if ``raise_error`` is set to False, the + response will always be returned regardless of the response + code. If a ``callback`` is given, it will be invoked with the `HTTPResponse`. In the callback interface, `HTTPError` is not automatically raised. @@ -225,6 +227,9 @@ class AsyncHTTPClient(Configurable): raise RuntimeError("fetch() called on closed AsyncHTTPClient") if not isinstance(request, HTTPRequest): request = HTTPRequest(url=request, **kwargs) + else: + if kwargs: + raise ValueError("kwargs can't be used if request is an HTTPRequest object") # We may modify this (to add Host, Accept-Encoding, etc), # so make sure we don't modify the caller's object. This is also # where normal dicts get converted to HTTPHeaders objects. @@ -305,10 +310,10 @@ class HTTPRequest(object): network_interface=None, streaming_callback=None, header_callback=None, prepare_curl_callback=None, proxy_host=None, proxy_port=None, proxy_username=None, - proxy_password=None, allow_nonstandard_methods=None, - validate_cert=None, ca_certs=None, - allow_ipv6=None, - client_key=None, client_cert=None, body_producer=None, + proxy_password=None, proxy_auth_mode=None, + allow_nonstandard_methods=None, validate_cert=None, + ca_certs=None, allow_ipv6=None, client_key=None, + client_cert=None, body_producer=None, expect_100_continue=False, decompress_response=None, ssl_options=None): r"""All parameters except ``url`` are optional. @@ -336,13 +341,15 @@ class HTTPRequest(object): Allowed values are implementation-defined; ``curl_httpclient`` supports "basic" and "digest"; ``simple_httpclient`` only supports "basic" - :arg float connect_timeout: Timeout for initial connection in seconds - :arg float request_timeout: Timeout for entire request in seconds + :arg float connect_timeout: Timeout for initial connection in seconds, + default 20 seconds + :arg float request_timeout: Timeout for entire request in seconds, + default 20 seconds :arg if_modified_since: Timestamp for ``If-Modified-Since`` header :type if_modified_since: `datetime` or `float` :arg bool follow_redirects: Should redirects be followed automatically - or return the 3xx response? - :arg int max_redirects: Limit for ``follow_redirects`` + or return the 3xx response? Default True. + :arg int max_redirects: Limit for ``follow_redirects``, default 5. :arg string user_agent: String to send as ``User-Agent`` header :arg bool decompress_response: Request a compressed response from the server and decompress it after downloading. Default is True. @@ -367,16 +374,18 @@ class HTTPRequest(object): a ``pycurl.Curl`` object to allow the application to make additional ``setopt`` calls. :arg string proxy_host: HTTP proxy hostname. To use proxies, - ``proxy_host`` and ``proxy_port`` must be set; ``proxy_username`` and - ``proxy_pass`` are optional. Proxies are currently only supported - with ``curl_httpclient``. + ``proxy_host`` and ``proxy_port`` must be set; ``proxy_username``, + ``proxy_pass`` and ``proxy_auth_mode`` are optional. Proxies are + currently only supported with ``curl_httpclient``. :arg int proxy_port: HTTP proxy port :arg string proxy_username: HTTP proxy username :arg string proxy_password: HTTP proxy password + :arg string proxy_auth_mode: HTTP proxy Authentication mode; + default is "basic". supports "basic" and "digest" :arg bool allow_nonstandard_methods: Allow unknown values for ``method`` - argument? + argument? Default is False. :arg bool validate_cert: For HTTPS requests, validate the server's - certificate? + certificate? Default is True. :arg string ca_certs: filename of CA certificates in PEM format, or None to use defaults. See note below when used with ``curl_httpclient``. @@ -414,6 +423,9 @@ class HTTPRequest(object): .. versionadded:: 4.2 The ``ssl_options`` argument. + + .. versionadded:: 4.5 + The ``proxy_auth_mode`` argument. """ # Note that some of these attributes go through property setters # defined below. @@ -425,6 +437,7 @@ class HTTPRequest(object): self.proxy_port = proxy_port self.proxy_username = proxy_username self.proxy_password = proxy_password + self.proxy_auth_mode = proxy_auth_mode self.url = url self.method = method self.body = body @@ -525,7 +538,7 @@ class HTTPResponse(object): * buffer: ``cStringIO`` object for response body - * body: response body as string (created on demand from ``self.buffer``) + * body: response body as bytes (created on demand from ``self.buffer``) * error: Exception object, if any @@ -567,7 +580,8 @@ class HTTPResponse(object): self.request_time = request_time self.time_info = time_info or {} - def _get_body(self): + @property + def body(self): if self.buffer is None: return None elif self._body is None: @@ -575,8 +589,6 @@ class HTTPResponse(object): return self._body - body = property(_get_body) - def rethrow(self): """If there was an error on the request, raise an `HTTPError`.""" if self.error: @@ -610,6 +622,12 @@ class HTTPError(Exception): def __str__(self): return "HTTP %d: %s" % (self.code, self.message) + # There is a cyclic reference between self and self.response, + # which breaks the default __repr__ implementation. + # (especially on pypy, which doesn't have the same recursion + # detection as cpython). + __repr__ = __str__ + class _RequestProxy(object): """Combines an object with a dictionary of defaults. @@ -655,5 +673,6 @@ def main(): print(native_str(response.body)) client.close() + if __name__ == "__main__": main() diff --git a/server/www/packages/packages-common/tornado/httpserver.py b/server/www/packages/packages-common/tornado/httpserver.py index ff235fe..d757be1 100644 --- a/server/www/packages/packages-common/tornado/httpserver.py +++ b/server/www/packages/packages-common/tornado/httpserver.py @@ -26,7 +26,7 @@ class except to start a server at the beginning of the process to `tornado.httputil.HTTPServerRequest`. The old name remains as an alias. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import socket @@ -62,6 +62,13 @@ class HTTPServer(TCPServer, Configurable, if Tornado is run behind an SSL-decoding proxy that does not set one of the supported ``xheaders``. + By default, when parsing the ``X-Forwarded-For`` header, Tornado will + select the last (i.e., the closest) address on the list of hosts as the + remote host IP address. To select the next server in the chain, a list of + trusted downstream hosts may be passed as the ``trusted_downstream`` + argument. These hosts will be skipped when parsing the ``X-Forwarded-For`` + header. + To make this server serve SSL traffic, send the ``ssl_options`` keyword argument with an `ssl.SSLContext` object. For compatibility with older versions of Python ``ssl_options`` may also be a dictionary of keyword @@ -124,6 +131,9 @@ class HTTPServer(TCPServer, Configurable, .. versionchanged:: 4.2 `HTTPServer` is now a subclass of `tornado.util.Configurable`. + + .. versionchanged:: 4.5 + Added the ``trusted_downstream`` argument. """ def __init__(self, *args, **kwargs): # Ignore args to __init__; real initialization belongs in @@ -138,7 +148,8 @@ class HTTPServer(TCPServer, Configurable, decompress_request=False, chunk_size=None, max_header_size=None, idle_connection_timeout=None, body_timeout=None, - max_body_size=None, max_buffer_size=None): + max_body_size=None, max_buffer_size=None, + trusted_downstream=None): self.request_callback = request_callback self.no_keep_alive = no_keep_alive self.xheaders = xheaders @@ -149,11 +160,13 @@ class HTTPServer(TCPServer, Configurable, max_header_size=max_header_size, header_timeout=idle_connection_timeout or 3600, max_body_size=max_body_size, - body_timeout=body_timeout) + body_timeout=body_timeout, + no_keep_alive=no_keep_alive) TCPServer.__init__(self, io_loop=io_loop, ssl_options=ssl_options, max_buffer_size=max_buffer_size, read_chunk_size=chunk_size) self._connections = set() + self.trusted_downstream = trusted_downstream @classmethod def configurable_base(cls): @@ -172,21 +185,55 @@ class HTTPServer(TCPServer, Configurable, def handle_stream(self, stream, address): context = _HTTPRequestContext(stream, address, - self.protocol) + self.protocol, + self.trusted_downstream) conn = HTTP1ServerConnection( stream, self.conn_params, context) self._connections.add(conn) conn.start_serving(self) def start_request(self, server_conn, request_conn): - return _ServerRequestAdapter(self, server_conn, request_conn) + if isinstance(self.request_callback, httputil.HTTPServerConnectionDelegate): + delegate = self.request_callback.start_request(server_conn, request_conn) + else: + delegate = _CallableAdapter(self.request_callback, request_conn) + + if self.xheaders: + delegate = _ProxyAdapter(delegate, request_conn) + + return delegate def on_close(self, server_conn): self._connections.remove(server_conn) +class _CallableAdapter(httputil.HTTPMessageDelegate): + def __init__(self, request_callback, request_conn): + self.connection = request_conn + self.request_callback = request_callback + self.request = None + self.delegate = None + self._chunks = [] + + def headers_received(self, start_line, headers): + self.request = httputil.HTTPServerRequest( + connection=self.connection, start_line=start_line, + headers=headers) + + def data_received(self, chunk): + self._chunks.append(chunk) + + def finish(self): + self.request.body = b''.join(self._chunks) + self.request._parse_body() + self.request_callback(self.request) + + def on_connection_close(self): + self._chunks = None + + class _HTTPRequestContext(object): - def __init__(self, stream, address, protocol): + def __init__(self, stream, address, protocol, trusted_downstream=None): self.address = address # Save the socket's address family now so we know how to # interpret self.address even after the stream is closed @@ -210,6 +257,7 @@ class _HTTPRequestContext(object): self.protocol = "http" self._orig_remote_ip = self.remote_ip self._orig_protocol = self.protocol + self.trusted_downstream = set(trusted_downstream or []) def __str__(self): if self.address_family in (socket.AF_INET, socket.AF_INET6): @@ -226,7 +274,10 @@ class _HTTPRequestContext(object): """Rewrite the ``remote_ip`` and ``protocol`` fields.""" # Squid uses X-Forwarded-For, others use X-Real-Ip ip = headers.get("X-Forwarded-For", self.remote_ip) - ip = ip.split(',')[-1].strip() + # Skip trusted downstream hosts in X-Forwarded-For list + for ip in (cand.strip() for cand in reversed(ip.split(','))): + if ip not in self.trusted_downstream: + break ip = headers.get("X-Real-Ip", ip) if netutil.is_valid_ip(ip): self.remote_ip = ip @@ -247,58 +298,28 @@ class _HTTPRequestContext(object): self.protocol = self._orig_protocol -class _ServerRequestAdapter(httputil.HTTPMessageDelegate): - """Adapts the `HTTPMessageDelegate` interface to the interface expected - by our clients. - """ - def __init__(self, server, server_conn, request_conn): - self.server = server +class _ProxyAdapter(httputil.HTTPMessageDelegate): + def __init__(self, delegate, request_conn): self.connection = request_conn - self.request = None - if isinstance(server.request_callback, - httputil.HTTPServerConnectionDelegate): - self.delegate = server.request_callback.start_request( - server_conn, request_conn) - self._chunks = None - else: - self.delegate = None - self._chunks = [] + self.delegate = delegate def headers_received(self, start_line, headers): - if self.server.xheaders: - self.connection.context._apply_xheaders(headers) - if self.delegate is None: - self.request = httputil.HTTPServerRequest( - connection=self.connection, start_line=start_line, - headers=headers) - else: - return self.delegate.headers_received(start_line, headers) + self.connection.context._apply_xheaders(headers) + return self.delegate.headers_received(start_line, headers) def data_received(self, chunk): - if self.delegate is None: - self._chunks.append(chunk) - else: - return self.delegate.data_received(chunk) + return self.delegate.data_received(chunk) def finish(self): - if self.delegate is None: - self.request.body = b''.join(self._chunks) - self.request._parse_body() - self.server.request_callback(self.request) - else: - self.delegate.finish() + self.delegate.finish() self._cleanup() def on_connection_close(self): - if self.delegate is None: - self._chunks = None - else: - self.delegate.on_connection_close() + self.delegate.on_connection_close() self._cleanup() def _cleanup(self): - if self.server.xheaders: - self.connection.context._unapply_xheaders() + self.connection.context._unapply_xheaders() HTTPRequest = httputil.HTTPServerRequest diff --git a/server/www/packages/packages-common/tornado/httputil.py b/server/www/packages/packages-common/tornado/httputil.py index 471df54..818ea91 100644 --- a/server/www/packages/packages-common/tornado/httputil.py +++ b/server/www/packages/packages-common/tornado/httputil.py @@ -20,7 +20,7 @@ This module also defines the `HTTPServerRequest` class which is exposed via `tornado.web.RequestHandler.request`. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import calendar import collections @@ -33,33 +33,37 @@ import time from tornado.escape import native_str, parse_qs_bytes, utf8 from tornado.log import gen_log -from tornado.util import ObjectDict +from tornado.util import ObjectDict, PY3 -try: - import Cookie # py2 -except ImportError: - import http.cookies as Cookie # py3 +if PY3: + import http.cookies as Cookie + from http.client import responses + from urllib.parse import urlencode, urlparse, urlunparse, parse_qsl +else: + import Cookie + from httplib import responses + from urllib import urlencode + from urlparse import urlparse, urlunparse, parse_qsl -try: - from httplib import responses # py2 -except ImportError: - from http.client import responses # py3 # responses is unused in this file, but we re-export it to other files. # Reference it so pyflakes doesn't complain. responses -try: - from urllib import urlencode # py2 -except ImportError: - from urllib.parse import urlencode # py3 - try: from ssl import SSLError except ImportError: # ssl is unavailable on app engine. - class SSLError(Exception): + class _SSLError(Exception): pass + # Hack around a mypy limitation. We can't simply put "type: ignore" + # on the class definition itself; must go through an assignment. + SSLError = _SSLError # type: ignore + +try: + import typing +except ImportError: + pass # RFC 7230 section 3.5: a recipient MAY recognize a single LF as a line @@ -95,6 +99,7 @@ class _NormalizedHeaderCache(dict): del self[old_key] return normalized + _normalized_headers = _NormalizedHeaderCache(1000) @@ -127,8 +132,8 @@ class HTTPHeaders(collections.MutableMapping): Set-Cookie: C=D """ def __init__(self, *args, **kwargs): - self._dict = {} - self._as_list = {} + self._dict = {} # type: typing.Dict[str, str] + self._as_list = {} # type: typing.Dict[str, typing.List[str]] self._last_key = None if (len(args) == 1 and len(kwargs) == 0 and isinstance(args[0], HTTPHeaders)): @@ -142,6 +147,7 @@ class HTTPHeaders(collections.MutableMapping): # new public methods def add(self, name, value): + # type: (str, str) -> None """Adds a new value for the given key.""" norm_name = _normalized_headers[name] self._last_key = norm_name @@ -158,6 +164,7 @@ class HTTPHeaders(collections.MutableMapping): return self._as_list.get(norm_name, []) def get_all(self): + # type: () -> typing.Iterable[typing.Tuple[str, str]] """Returns an iterable of all (name, value) pairs. If a header has multiple values, multiple pairs will be @@ -206,6 +213,7 @@ class HTTPHeaders(collections.MutableMapping): self._as_list[norm_name] = [value] def __getitem__(self, name): + # type: (str) -> str return self._dict[_normalized_headers[name]] def __delitem__(self, name): @@ -228,6 +236,14 @@ class HTTPHeaders(collections.MutableMapping): # the appearance that HTTPHeaders is a single container. __copy__ = copy + def __str__(self): + lines = [] + for name, value in self.get_all(): + lines.append("%s: %s\n" % (name, value)) + return "".join(lines) + + __unicode__ = __str__ + class HTTPServerRequest(object): """A single HTTP request. @@ -323,7 +339,7 @@ class HTTPServerRequest(object): """ def __init__(self, method=None, uri=None, version="HTTP/1.0", headers=None, body=None, host=None, files=None, connection=None, - start_line=None): + start_line=None, server_connection=None): if start_line is not None: method, uri, version = start_line self.method = method @@ -338,8 +354,10 @@ class HTTPServerRequest(object): self.protocol = getattr(context, 'protocol', "http") self.host = host or self.headers.get("Host") or "127.0.0.1" + self.host_name = split_host_and_port(self.host.lower())[0] self.files = files or {} self.connection = connection + self.server_connection = server_connection self._start_time = time.time() self._finish_time = None @@ -365,10 +383,18 @@ class HTTPServerRequest(object): self._cookies = Cookie.SimpleCookie() if "Cookie" in self.headers: try: - self._cookies.load( - native_str(self.headers["Cookie"])) + parsed = parse_cookie(self.headers["Cookie"]) except Exception: - self._cookies = {} + pass + else: + for k, v in parsed.items(): + try: + self._cookies[k] = v + except Exception: + # SimpleCookie imposes some restrictions on keys; + # parse_cookie does not. Discard any cookies + # with disallowed keys. + pass return self._cookies def write(self, chunk, callback=None): @@ -577,11 +603,28 @@ def url_concat(url, args): >>> url_concat("http://example.com/foo?a=b", [("c", "d"), ("c", "d2")]) 'http://example.com/foo?a=b&c=d&c=d2' """ - if not args: + if args is None: return url - if url[-1] not in ('?', '&'): - url += '&' if ('?' in url) else '?' - return url + urlencode(args) + parsed_url = urlparse(url) + if isinstance(args, dict): + parsed_query = parse_qsl(parsed_url.query, keep_blank_values=True) + parsed_query.extend(args.items()) + elif isinstance(args, list) or isinstance(args, tuple): + parsed_query = parse_qsl(parsed_url.query, keep_blank_values=True) + parsed_query.extend(args) + else: + err = "'args' parameter should be dict, list or tuple. Not {0}".format( + type(args)) + raise TypeError(err) + final_query = urlencode(parsed_query) + url = urlunparse(( + parsed_url[0], + parsed_url[1], + parsed_url[2], + parsed_url[3], + final_query, + parsed_url[5])) + return url class HTTPFile(ObjectDict): @@ -743,7 +786,7 @@ def parse_multipart_form_data(boundary, data, arguments, files): name = disp_params["name"] if disp_params.get("filename"): ctype = headers.get("Content-Type", "application/unknown") - files.setdefault(name, []).append(HTTPFile( + files.setdefault(name, []).append(HTTPFile( # type: ignore filename=disp_params["filename"], body=value, content_type=ctype)) else: @@ -895,3 +938,84 @@ def split_host_and_port(netloc): host = netloc port = None return (host, port) + + +_OctalPatt = re.compile(r"\\[0-3][0-7][0-7]") +_QuotePatt = re.compile(r"[\\].") +_nulljoin = ''.join + + +def _unquote_cookie(str): + """Handle double quotes and escaping in cookie values. + + This method is copied verbatim from the Python 3.5 standard + library (http.cookies._unquote) so we don't have to depend on + non-public interfaces. + """ + # If there aren't any doublequotes, + # then there can't be any special characters. See RFC 2109. + if str is None or len(str) < 2: + return str + if str[0] != '"' or str[-1] != '"': + return str + + # We have to assume that we must decode this string. + # Down to work. + + # Remove the "s + str = str[1:-1] + + # Check for special sequences. Examples: + # \012 --> \n + # \" --> " + # + i = 0 + n = len(str) + res = [] + while 0 <= i < n: + o_match = _OctalPatt.search(str, i) + q_match = _QuotePatt.search(str, i) + if not o_match and not q_match: # Neither matched + res.append(str[i:]) + break + # else: + j = k = -1 + if o_match: + j = o_match.start(0) + if q_match: + k = q_match.start(0) + if q_match and (not o_match or k < j): # QuotePatt matched + res.append(str[i:k]) + res.append(str[k + 1]) + i = k + 2 + else: # OctalPatt matched + res.append(str[i:j]) + res.append(chr(int(str[j + 1:j + 4], 8))) + i = j + 4 + return _nulljoin(res) + + +def parse_cookie(cookie): + """Parse a ``Cookie`` HTTP header into a dict of name/value pairs. + + This function attempts to mimic browser cookie parsing behavior; + it specifically does not follow any of the cookie-related RFCs + (because browsers don't either). + + The algorithm used is identical to that used by Django version 1.9.10. + + .. versionadded:: 4.4.2 + """ + cookiedict = {} + for chunk in cookie.split(str(';')): + if str('=') in chunk: + key, val = chunk.split(str('='), 1) + else: + # Assume an empty name per + # https://bugzilla.mozilla.org/show_bug.cgi?id=169091 + key, val = str(''), chunk + key, val = key.strip(), val.strip() + if key or val: + # unquote using Python's algorithm. + cookiedict[key] = _unquote_cookie(val) + return cookiedict diff --git a/server/www/packages/packages-common/tornado/ioloop.py b/server/www/packages/packages-common/tornado/ioloop.py index c23cb33..ad35787 100644 --- a/server/www/packages/packages-common/tornado/ioloop.py +++ b/server/www/packages/packages-common/tornado/ioloop.py @@ -26,8 +26,9 @@ In addition to I/O events, the `IOLoop` can also schedule time-based events. `IOLoop.add_timeout` is a non-blocking alternative to `time.sleep`. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function +import collections import datetime import errno import functools @@ -45,20 +46,20 @@ import math from tornado.concurrent import TracebackFuture, is_future from tornado.log import app_log, gen_log +from tornado.platform.auto import set_close_exec, Waker from tornado import stack_context -from tornado.util import Configurable, errno_from_exception, timedelta_to_seconds +from tornado.util import PY3, Configurable, errno_from_exception, timedelta_to_seconds try: import signal except ImportError: signal = None -try: - import thread # py2 -except ImportError: - import _thread as thread # py3 -from tornado.platform.auto import set_close_exec, Waker +if PY3: + import _thread as thread +else: + import thread _POLL_TIMEOUT = 3600.0 @@ -172,6 +173,10 @@ class IOLoop(Configurable): This is normally not necessary as `instance()` will create an `IOLoop` on demand, but you may want to call `install` to use a custom subclass of `IOLoop`. + + When using an `IOLoop` subclass, `install` must be called prior + to creating any objects that implicitly create their own + `IOLoop` (e.g., :class:`tornado.httpclient.AsyncHTTPClient`). """ assert not IOLoop.initialized() IOLoop._instance = self @@ -612,10 +617,14 @@ class IOLoop(Configurable): # result, which should just be ignored. pass else: - self.add_future(ret, lambda f: f.result()) + self.add_future(ret, self._discard_future_result) except Exception: self.handle_callback_exception(callback) + def _discard_future_result(self, future): + """Avoid unhandled-exception warnings from spawned coroutines.""" + future.result() + def handle_callback_exception(self, callback): """This method is called whenever a callback run by the `IOLoop` throws an exception. @@ -685,8 +694,7 @@ class PollIOLoop(IOLoop): self.time_func = time_func or time.time self._handlers = {} self._events = {} - self._callbacks = [] - self._callback_lock = threading.Lock() + self._callbacks = collections.deque() self._timeouts = [] self._cancellations = 0 self._running = False @@ -704,11 +712,10 @@ class PollIOLoop(IOLoop): self.READ) def close(self, all_fds=False): - with self._callback_lock: - self._closing = True + self._closing = True self.remove_handler(self._waker.fileno()) if all_fds: - for fd, handler in self._handlers.values(): + for fd, handler in list(self._handlers.values()): self.close_fd(fd) self._waker.close() self._impl.close() @@ -792,9 +799,7 @@ class PollIOLoop(IOLoop): while True: # Prevent IO event starvation by delaying new callbacks # to the next iteration of the event loop. - with self._callback_lock: - callbacks = self._callbacks - self._callbacks = [] + ncallbacks = len(self._callbacks) # Add any timeouts that have come due to the callback list. # Do not run anything until we have determined which ones @@ -814,8 +819,8 @@ class PollIOLoop(IOLoop): due_timeouts.append(heapq.heappop(self._timeouts)) else: break - if (self._cancellations > 512 - and self._cancellations > (len(self._timeouts) >> 1)): + if (self._cancellations > 512 and + self._cancellations > (len(self._timeouts) >> 1)): # Clean up the timeout queue when it gets large and it's # more than half cancellations. self._cancellations = 0 @@ -823,14 +828,14 @@ class PollIOLoop(IOLoop): if x.callback is not None] heapq.heapify(self._timeouts) - for callback in callbacks: - self._run_callback(callback) + for i in range(ncallbacks): + self._run_callback(self._callbacks.popleft()) for timeout in due_timeouts: if timeout.callback is not None: self._run_callback(timeout.callback) # Closures may be holding on to a lot of memory, so allow # them to be freed before we go into our poll wait. - callbacks = callback = due_timeouts = timeout = None + due_timeouts = timeout = None if self._callbacks: # If any callbacks or timeouts called add_callback, @@ -874,7 +879,7 @@ class PollIOLoop(IOLoop): # Pop one fd at a time from the set of pending fds and run # its handler. Since that handler may perform actions on # other file descriptors, there may be reentrant calls to - # this IOLoop that update self._events + # this IOLoop that modify self._events self._events.update(event_pairs) while self._events: fd, events = self._events.popitem() @@ -926,36 +931,20 @@ class PollIOLoop(IOLoop): self._cancellations += 1 def add_callback(self, callback, *args, **kwargs): + if self._closing: + return + # Blindly insert into self._callbacks. This is safe even + # from signal handlers because deque.append is atomic. + self._callbacks.append(functools.partial( + stack_context.wrap(callback), *args, **kwargs)) if thread.get_ident() != self._thread_ident: - # If we're not on the IOLoop's thread, we need to synchronize - # with other threads, or waking logic will induce a race. - with self._callback_lock: - if self._closing: - return - list_empty = not self._callbacks - self._callbacks.append(functools.partial( - stack_context.wrap(callback), *args, **kwargs)) - if list_empty: - # If we're not in the IOLoop's thread, and we added the - # first callback to an empty list, we may need to wake it - # up (it may wake up on its own, but an occasional extra - # wake is harmless). Waking up a polling IOLoop is - # relatively expensive, so we try to avoid it when we can. - self._waker.wake() + # This will write one byte but Waker.consume() reads many + # at once, so it's ok to write even when not strictly + # necessary. + self._waker.wake() else: - if self._closing: - return - # If we're on the IOLoop's thread, we don't need the lock, - # since we don't need to wake anyone, just add the - # callback. Blindly insert into self._callbacks. This is - # safe even from signal handlers because the GIL makes - # list.append atomic. One subtlety is that if the signal - # is interrupting another thread holding the - # _callback_lock block in IOLoop.start, we may modify - # either the old or new version of self._callbacks, but - # either way will work. - self._callbacks.append(functools.partial( - stack_context.wrap(callback), *args, **kwargs)) + # If we're on the IOLoop's thread, we don't need to wake anyone. + pass def add_callback_from_signal(self, callback, *args, **kwargs): with stack_context.NullContext(): @@ -966,26 +955,24 @@ class _Timeout(object): """An IOLoop timeout, a UNIX timestamp and a callback""" # Reduce memory overhead when there are lots of pending callbacks - __slots__ = ['deadline', 'callback', 'tiebreaker'] + __slots__ = ['deadline', 'callback', 'tdeadline'] def __init__(self, deadline, callback, io_loop): if not isinstance(deadline, numbers.Real): raise TypeError("Unsupported deadline %r" % deadline) self.deadline = deadline self.callback = callback - self.tiebreaker = next(io_loop._timeout_counter) + self.tdeadline = (deadline, next(io_loop._timeout_counter)) # Comparison methods to sort by deadline, with object id as a tiebreaker # to guarantee a consistent ordering. The heapq module uses __le__ # in python2.5, and __lt__ in 2.6+ (sort() and most other comparisons # use __lt__). def __lt__(self, other): - return ((self.deadline, self.tiebreaker) < - (other.deadline, other.tiebreaker)) + return self.tdeadline < other.tdeadline def __le__(self, other): - return ((self.deadline, self.tiebreaker) <= - (other.deadline, other.tiebreaker)) + return self.tdeadline <= other.tdeadline class PeriodicCallback(object): @@ -1048,6 +1035,7 @@ class PeriodicCallback(object): if self._next_timeout <= current_time: callback_time_sec = self.callback_time / 1000.0 - self._next_timeout += (math.floor((current_time - self._next_timeout) / callback_time_sec) + 1) * callback_time_sec + self._next_timeout += (math.floor((current_time - self._next_timeout) / + callback_time_sec) + 1) * callback_time_sec self._timeout = self.io_loop.add_timeout(self._next_timeout, self._run) diff --git a/server/www/packages/packages-common/tornado/iostream.py b/server/www/packages/packages-common/tornado/iostream.py index 4e304f8..a1619c4 100644 --- a/server/www/packages/packages-common/tornado/iostream.py +++ b/server/www/packages/packages-common/tornado/iostream.py @@ -24,7 +24,7 @@ Contents: * `PipeIOStream`: Pipe-based IOStream implementation. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import collections import errno @@ -58,7 +58,7 @@ except ImportError: _ERRNO_WOULDBLOCK = (errno.EWOULDBLOCK, errno.EAGAIN) if hasattr(errno, "WSAEWOULDBLOCK"): - _ERRNO_WOULDBLOCK += (errno.WSAEWOULDBLOCK,) + _ERRNO_WOULDBLOCK += (errno.WSAEWOULDBLOCK,) # type: ignore # These errnos indicate that a connection has been abruptly terminated. # They should be caught and handled less noisily than other errors. @@ -66,7 +66,7 @@ _ERRNO_CONNRESET = (errno.ECONNRESET, errno.ECONNABORTED, errno.EPIPE, errno.ETIMEDOUT) if hasattr(errno, "WSAECONNRESET"): - _ERRNO_CONNRESET += (errno.WSAECONNRESET, errno.WSAECONNABORTED, errno.WSAETIMEDOUT) + _ERRNO_CONNRESET += (errno.WSAECONNRESET, errno.WSAECONNABORTED, errno.WSAETIMEDOUT) # type: ignore if sys.platform == 'darwin': # OSX appears to have a race condition that causes send(2) to return @@ -74,13 +74,15 @@ if sys.platform == 'darwin': # http://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/ # Since the socket is being closed anyway, treat this as an ECONNRESET # instead of an unexpected error. - _ERRNO_CONNRESET += (errno.EPROTOTYPE,) + _ERRNO_CONNRESET += (errno.EPROTOTYPE,) # type: ignore # More non-portable errnos: _ERRNO_INPROGRESS = (errno.EINPROGRESS,) if hasattr(errno, "WSAEINPROGRESS"): - _ERRNO_INPROGRESS += (errno.WSAEINPROGRESS,) + _ERRNO_INPROGRESS += (errno.WSAEINPROGRESS,) # type: ignore + +_WINDOWS = sys.platform.startswith('win') class StreamClosedError(IOError): @@ -158,11 +160,16 @@ class BaseIOStream(object): self.max_buffer_size // 2) self.max_write_buffer_size = max_write_buffer_size self.error = None - self._read_buffer = collections.deque() - self._write_buffer = collections.deque() + self._read_buffer = bytearray() + self._read_buffer_pos = 0 self._read_buffer_size = 0 + self._write_buffer = bytearray() + self._write_buffer_pos = 0 self._write_buffer_size = 0 self._write_buffer_frozen = False + self._total_write_index = 0 + self._total_write_done_index = 0 + self._pending_writes_while_frozen = [] self._read_delimiter = None self._read_regex = None self._read_max_bytes = None @@ -173,7 +180,7 @@ class BaseIOStream(object): self._read_future = None self._streaming_callback = None self._write_callback = None - self._write_future = None + self._write_futures = collections.deque() self._close_callback = None self._connect_callback = None self._connect_future = None @@ -367,36 +374,37 @@ class BaseIOStream(object): If no ``callback`` is given, this method returns a `.Future` that resolves (with a result of ``None``) when the write has been - completed. If `write` is called again before that `.Future` has - resolved, the previous future will be orphaned and will never resolve. + completed. + + The ``data`` argument may be of type `bytes` or `memoryview`. .. versionchanged:: 4.0 Now returns a `.Future` if no callback is given. + + .. versionchanged:: 4.5 + Added support for `memoryview` arguments. """ - assert isinstance(data, bytes) self._check_closed() - # We use bool(_write_buffer) as a proxy for write_buffer_size>0, - # so never put empty strings in the buffer. if data: if (self.max_write_buffer_size is not None and self._write_buffer_size + len(data) > self.max_write_buffer_size): raise StreamBufferFullError("Reached maximum write buffer size") - # Break up large contiguous strings before inserting them in the - # write buffer, so we don't have to recopy the entire thing - # as we slice off pieces to send to the socket. - WRITE_BUFFER_CHUNK_SIZE = 128 * 1024 - for i in range(0, len(data), WRITE_BUFFER_CHUNK_SIZE): - self._write_buffer.append(data[i:i + WRITE_BUFFER_CHUNK_SIZE]) - self._write_buffer_size += len(data) + if self._write_buffer_frozen: + self._pending_writes_while_frozen.append(data) + else: + self._write_buffer += data + self._write_buffer_size += len(data) + self._total_write_index += len(data) if callback is not None: self._write_callback = stack_context.wrap(callback) future = None else: - future = self._write_future = TracebackFuture() + future = TracebackFuture() future.add_done_callback(lambda f: f.exception()) + self._write_futures.append((self._total_write_index, future)) if not self._connecting: self._handle_write() - if self._write_buffer: + if self._write_buffer_size: self._add_io_state(self.io_loop.WRITE) self._maybe_add_error_listener() return future @@ -445,9 +453,8 @@ class BaseIOStream(object): if self._read_future is not None: futures.append(self._read_future) self._read_future = None - if self._write_future is not None: - futures.append(self._write_future) - self._write_future = None + futures += [future for _, future in self._write_futures] + self._write_futures.clear() if self._connect_future is not None: futures.append(self._connect_future) self._connect_future = None @@ -466,6 +473,7 @@ class BaseIOStream(object): # if the IOStream object is kept alive by a reference cycle. # TODO: Clear the read buffer too; it currently breaks some tests. self._write_buffer = None + self._write_buffer_size = 0 def reading(self): """Returns true if we are currently reading from the stream.""" @@ -473,7 +481,7 @@ class BaseIOStream(object): def writing(self): """Returns true if we are currently writing to the stream.""" - return bool(self._write_buffer) + return self._write_buffer_size > 0 def closed(self): """Returns true if the stream has been closed.""" @@ -743,7 +751,7 @@ class BaseIOStream(object): break if chunk is None: return 0 - self._read_buffer.append(chunk) + self._read_buffer += chunk self._read_buffer_size += len(chunk) if self._read_buffer_size > self.max_buffer_size: gen_log.error("Reached maximum read buffer size") @@ -791,30 +799,25 @@ class BaseIOStream(object): # since large merges are relatively expensive and get undone in # _consume(). if self._read_buffer: - while True: - loc = self._read_buffer[0].find(self._read_delimiter) - if loc != -1: - delimiter_len = len(self._read_delimiter) - self._check_max_bytes(self._read_delimiter, - loc + delimiter_len) - return loc + delimiter_len - if len(self._read_buffer) == 1: - break - _double_prefix(self._read_buffer) + loc = self._read_buffer.find(self._read_delimiter, + self._read_buffer_pos) + if loc != -1: + loc -= self._read_buffer_pos + delimiter_len = len(self._read_delimiter) + self._check_max_bytes(self._read_delimiter, + loc + delimiter_len) + return loc + delimiter_len self._check_max_bytes(self._read_delimiter, - len(self._read_buffer[0])) + self._read_buffer_size) elif self._read_regex is not None: if self._read_buffer: - while True: - m = self._read_regex.search(self._read_buffer[0]) - if m is not None: - self._check_max_bytes(self._read_regex, m.end()) - return m.end() - if len(self._read_buffer) == 1: - break - _double_prefix(self._read_buffer) - self._check_max_bytes(self._read_regex, - len(self._read_buffer[0])) + m = self._read_regex.search(self._read_buffer, + self._read_buffer_pos) + if m is not None: + loc = m.end() - self._read_buffer_pos + self._check_max_bytes(self._read_regex, loc) + return loc + self._check_max_bytes(self._read_regex, self._read_buffer_size) return None def _check_max_bytes(self, delimiter, size): @@ -824,35 +827,56 @@ class BaseIOStream(object): "delimiter %r not found within %d bytes" % ( delimiter, self._read_max_bytes)) + def _freeze_write_buffer(self, size): + self._write_buffer_frozen = size + + def _unfreeze_write_buffer(self): + self._write_buffer_frozen = False + self._write_buffer += b''.join(self._pending_writes_while_frozen) + self._write_buffer_size += sum(map(len, self._pending_writes_while_frozen)) + self._pending_writes_while_frozen[:] = [] + + def _got_empty_write(self, size): + """ + Called when a non-blocking write() failed writing anything. + Can be overridden in subclasses. + """ + def _handle_write(self): - while self._write_buffer: + while self._write_buffer_size: + assert self._write_buffer_size >= 0 try: - if not self._write_buffer_frozen: + start = self._write_buffer_pos + if self._write_buffer_frozen: + size = self._write_buffer_frozen + elif _WINDOWS: # On windows, socket.send blows up if given a # write buffer that's too large, instead of just # returning the number of bytes it was able to # process. Therefore we must not call socket.send # with more than 128KB at a time. - _merge_prefix(self._write_buffer, 128 * 1024) - num_bytes = self.write_to_fd(self._write_buffer[0]) + size = 128 * 1024 + else: + size = self._write_buffer_size + num_bytes = self.write_to_fd( + memoryview(self._write_buffer)[start:start + size]) if num_bytes == 0: - # With OpenSSL, if we couldn't write the entire buffer, - # the very same string object must be used on the - # next call to send. Therefore we suppress - # merging the write buffer after an incomplete send. - # A cleaner solution would be to set - # SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER, but this is - # not yet accessible from python - # (http://bugs.python.org/issue8240) - self._write_buffer_frozen = True + self._got_empty_write(size) break - self._write_buffer_frozen = False - _merge_prefix(self._write_buffer, num_bytes) - self._write_buffer.popleft() + self._write_buffer_pos += num_bytes self._write_buffer_size -= num_bytes + # Amortized O(1) shrink + # (this heuristic is implemented natively in Python 3.4+ + # but is replicated here for Python 2) + if self._write_buffer_pos > self._write_buffer_size: + del self._write_buffer[:self._write_buffer_pos] + self._write_buffer_pos = 0 + if self._write_buffer_frozen: + self._unfreeze_write_buffer() + self._total_write_done_index += num_bytes except (socket.error, IOError, OSError) as e: if e.args[0] in _ERRNO_WOULDBLOCK: - self._write_buffer_frozen = True + self._got_empty_write(size) break else: if not self._is_connreset(e): @@ -863,22 +887,38 @@ class BaseIOStream(object): self.fileno(), e) self.close(exc_info=True) return - if not self._write_buffer: + + while self._write_futures: + index, future = self._write_futures[0] + if index > self._total_write_done_index: + break + self._write_futures.popleft() + future.set_result(None) + + if not self._write_buffer_size: if self._write_callback: callback = self._write_callback self._write_callback = None self._run_callback(callback) - if self._write_future: - future = self._write_future - self._write_future = None - future.set_result(None) def _consume(self, loc): + # Consume loc bytes from the read buffer and return them if loc == 0: return b"" - _merge_prefix(self._read_buffer, loc) + assert loc <= self._read_buffer_size + # Slice the bytearray buffer into bytes, without intermediate copying + b = (memoryview(self._read_buffer) + [self._read_buffer_pos:self._read_buffer_pos + loc] + ).tobytes() + self._read_buffer_pos += loc self._read_buffer_size -= loc - return self._read_buffer.popleft() + # Amortized O(1) shrink + # (this heuristic is implemented natively in Python 3.4+ + # but is replicated here for Python 2) + if self._read_buffer_pos > self._read_buffer_size: + del self._read_buffer[:self._read_buffer_pos] + self._read_buffer_pos = 0 + return b def _check_closed(self): if self.closed(): @@ -1124,7 +1164,7 @@ class IOStream(BaseIOStream): suitably-configured `ssl.SSLContext` to disable. """ if (self._read_callback or self._read_future or - self._write_callback or self._write_future or + self._write_callback or self._write_futures or self._connect_callback or self._connect_future or self._pending_callbacks or self._closed or self._read_buffer or self._write_buffer): @@ -1251,6 +1291,17 @@ class SSLIOStream(IOStream): def writing(self): return self._handshake_writing or super(SSLIOStream, self).writing() + def _got_empty_write(self, size): + # With OpenSSL, if we couldn't write the entire buffer, + # the very same string object must be used on the + # next call to send. Therefore we suppress + # merging the write buffer after an incomplete send. + # A cleaner solution would be to set + # SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER, but this is + # not yet accessible from python + # (http://bugs.python.org/issue8240) + self._freeze_write_buffer(size) + def _do_ssl_handshake(self): # Based on code from test_ssl.py in the python stdlib try: @@ -1498,53 +1549,6 @@ class PipeIOStream(BaseIOStream): return chunk -def _double_prefix(deque): - """Grow by doubling, but don't split the second chunk just because the - first one is small. - """ - new_len = max(len(deque[0]) * 2, - (len(deque[0]) + len(deque[1]))) - _merge_prefix(deque, new_len) - - -def _merge_prefix(deque, size): - """Replace the first entries in a deque of strings with a single - string of up to size bytes. - - >>> d = collections.deque(['abc', 'de', 'fghi', 'j']) - >>> _merge_prefix(d, 5); print(d) - deque(['abcde', 'fghi', 'j']) - - Strings will be split as necessary to reach the desired size. - >>> _merge_prefix(d, 7); print(d) - deque(['abcdefg', 'hi', 'j']) - - >>> _merge_prefix(d, 3); print(d) - deque(['abc', 'defg', 'hi', 'j']) - - >>> _merge_prefix(d, 100); print(d) - deque(['abcdefghij']) - """ - if len(deque) == 1 and len(deque[0]) <= size: - return - prefix = [] - remaining = size - while deque and remaining > 0: - chunk = deque.popleft() - if len(chunk) > remaining: - deque.appendleft(chunk[remaining:]) - chunk = chunk[:remaining] - prefix.append(chunk) - remaining -= len(chunk) - # This data structure normally just contains byte strings, but - # the unittest gets messy if it doesn't use the default str() type, - # so do the merge based on the type of data that's actually present. - if prefix: - deque.appendleft(type(prefix[0])().join(prefix)) - if not deque: - deque.appendleft(b"") - - def doctests(): import doctest return doctest.DocTestSuite() diff --git a/server/www/packages/packages-common/tornado/locale.py b/server/www/packages/packages-common/tornado/locale.py index 8310c4d..7dba10d 100644 --- a/server/www/packages/packages-common/tornado/locale.py +++ b/server/www/packages/packages-common/tornado/locale.py @@ -19,7 +19,7 @@ To load a locale and generate a translated string:: user_locale = tornado.locale.get("es_LA") - print user_locale.translate("Sign out") + print(user_locale.translate("Sign out")) `tornado.locale.get()` returns the closest matching locale, not necessarily the specific locale you requested. You can support pluralization with @@ -28,7 +28,7 @@ additional arguments to `~Locale.translate()`, e.g.:: people = [...] message = user_locale.translate( "%(list)s is online", "%(list)s are online", len(people)) - print message % {"list": user_locale.list(people)} + print(message % {"list": user_locale.list(people)}) The first string is chosen if ``len(people) == 1``, otherwise the second string is chosen. @@ -39,7 +39,7 @@ supported by `gettext` and related tools). If neither method is called, the `Locale.translate` method will simply return the original string. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import codecs import csv @@ -51,12 +51,12 @@ import re from tornado import escape from tornado.log import gen_log -from tornado.util import u +from tornado.util import PY3 from tornado._locale_data import LOCALE_NAMES _default_locale = "en_US" -_translations = {} +_translations = {} # type: dict _supported_locales = frozenset([_default_locale]) _use_gettext = False CONTEXT_SEPARATOR = "\x04" @@ -148,11 +148,11 @@ def load_translations(directory, encoding=None): # in most cases but is common with CSV files because Excel # cannot read utf-8 files without a BOM. encoding = 'utf-8-sig' - try: + if PY3: # python 3: csv.reader requires a file open in text mode. # Force utf8 to avoid dependence on $LANG environment variable. f = open(full_path, "r", encoding=encoding) - except TypeError: + else: # python 2: csv can only handle byte strings (in ascii-compatible # encodings), which we decode below. Transcode everything into # utf8 before passing it to csv.reader. @@ -187,7 +187,7 @@ def load_gettext_translations(directory, domain): {directory}/{lang}/LC_MESSAGES/{domain}.mo - Three steps are required to have you app translated: + Three steps are required to have your app translated: 1. Generate POT translation file:: @@ -274,7 +274,7 @@ class Locale(object): def __init__(self, code, translations): self.code = code - self.name = LOCALE_NAMES.get(code, {}).get("name", u("Unknown")) + self.name = LOCALE_NAMES.get(code, {}).get("name", u"Unknown") self.rtl = False for prefix in ["fa", "ar", "he"]: if self.code.startswith(prefix): @@ -376,7 +376,7 @@ class Locale(object): str_time = "%d:%02d" % (local_date.hour, local_date.minute) elif self.code == "zh_CN": str_time = "%s%d:%02d" % ( - (u('\u4e0a\u5348'), u('\u4e0b\u5348'))[local_date.hour >= 12], + (u'\u4e0a\u5348', u'\u4e0b\u5348')[local_date.hour >= 12], local_date.hour % 12 or 12, local_date.minute) else: str_time = "%d:%02d %s" % ( @@ -422,7 +422,7 @@ class Locale(object): return "" if len(parts) == 1: return parts[0] - comma = u(' \u0648 ') if self.code.startswith("fa") else u(", ") + comma = u' \u0648 ' if self.code.startswith("fa") else u", " return _("%(commas)s and %(last)s") % { "commas": comma.join(parts[:-1]), "last": parts[len(parts) - 1], diff --git a/server/www/packages/packages-common/tornado/locks.py b/server/www/packages/packages-common/tornado/locks.py index a181772..4f9ecf6 100644 --- a/server/www/packages/packages-common/tornado/locks.py +++ b/server/www/packages/packages-common/tornado/locks.py @@ -12,15 +12,15 @@ # License for the specific language governing permissions and limitations # under the License. -from __future__ import absolute_import, division, print_function, with_statement - -__all__ = ['Condition', 'Event', 'Semaphore', 'BoundedSemaphore', 'Lock'] +from __future__ import absolute_import, division, print_function import collections from tornado import gen, ioloop from tornado.concurrent import Future +__all__ = ['Condition', 'Event', 'Semaphore', 'BoundedSemaphore', 'Lock'] + class _TimeoutGarbageCollector(object): """Base class for objects that periodically clean up timed-out waiters. @@ -465,7 +465,7 @@ class Lock(object): ... ... # Now the lock is released. - .. versionchanged:: 3.5 + .. versionchanged:: 4.3 Added ``async with`` support in Python 3.5. """ diff --git a/server/www/packages/packages-common/tornado/log.py b/server/www/packages/packages-common/tornado/log.py index 040889a..654afc0 100644 --- a/server/www/packages/packages-common/tornado/log.py +++ b/server/www/packages/packages-common/tornado/log.py @@ -28,7 +28,7 @@ These streams may be configured independently using the standard library's `logging` module. For example, you may wish to send ``tornado.access`` logs to a separate file for analysis. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import logging import logging.handlers @@ -38,7 +38,12 @@ from tornado.escape import _unicode from tornado.util import unicode_type, basestring_type try: - import curses + import colorama +except ImportError: + colorama = None + +try: + import curses # type: ignore except ImportError: curses = None @@ -49,15 +54,21 @@ gen_log = logging.getLogger("tornado.general") def _stderr_supports_color(): - color = False - if curses and hasattr(sys.stderr, 'isatty') and sys.stderr.isatty(): - try: - curses.setupterm() - if curses.tigetnum("colors") > 0: - color = True - except Exception: - pass - return color + try: + if hasattr(sys.stderr, 'isatty') and sys.stderr.isatty(): + if curses: + curses.setupterm() + if curses.tigetnum("colors") > 0: + return True + elif colorama: + if sys.stderr is getattr(colorama.initialise, 'wrapped_stderr', + object()): + return True + except Exception: + # Very broad exception handling because it's always better to + # fall back to non-colored logs than to break at startup. + pass + return False def _safe_unicode(s): @@ -77,8 +88,19 @@ class LogFormatter(logging.Formatter): * Robust against str/bytes encoding problems. This formatter is enabled automatically by - `tornado.options.parse_command_line` (unless ``--logging=none`` is - used). + `tornado.options.parse_command_line` or `tornado.options.parse_config_file` + (unless ``--logging=none`` is used). + + Color support on Windows versions that do not support ANSI color codes is + enabled by use of the colorama__ library. Applications that wish to use + this must first initialize colorama with a call to ``colorama.init``. + See the colorama documentation for details. + + __ https://pypi.python.org/pypi/colorama + + .. versionchanged:: 4.5 + Added support for ``colorama``. Changed the constructor + signature to be compatible with `logging.config.dictConfig`. """ DEFAULT_FORMAT = '%(color)s[%(levelname)1.1s %(asctime)s %(module)s:%(lineno)d]%(end_color)s %(message)s' DEFAULT_DATE_FORMAT = '%y%m%d %H:%M:%S' @@ -89,8 +111,8 @@ class LogFormatter(logging.Formatter): logging.ERROR: 1, # Red } - def __init__(self, color=True, fmt=DEFAULT_FORMAT, - datefmt=DEFAULT_DATE_FORMAT, colors=DEFAULT_COLORS): + def __init__(self, fmt=DEFAULT_FORMAT, datefmt=DEFAULT_DATE_FORMAT, + style='%', color=True, colors=DEFAULT_COLORS): r""" :arg bool color: Enables color support. :arg string fmt: Log message format. @@ -111,21 +133,28 @@ class LogFormatter(logging.Formatter): self._colors = {} if color and _stderr_supports_color(): - # The curses module has some str/bytes confusion in - # python3. Until version 3.2.3, most methods return - # bytes, but only accept strings. In addition, we want to - # output these strings with the logging module, which - # works with unicode strings. The explicit calls to - # unicode() below are harmless in python2 but will do the - # right conversion in python 3. - fg_color = (curses.tigetstr("setaf") or - curses.tigetstr("setf") or "") - if (3, 0) < sys.version_info < (3, 2, 3): - fg_color = unicode_type(fg_color, "ascii") + if curses is not None: + # The curses module has some str/bytes confusion in + # python3. Until version 3.2.3, most methods return + # bytes, but only accept strings. In addition, we want to + # output these strings with the logging module, which + # works with unicode strings. The explicit calls to + # unicode() below are harmless in python2 but will do the + # right conversion in python 3. + fg_color = (curses.tigetstr("setaf") or + curses.tigetstr("setf") or "") + if (3, 0) < sys.version_info < (3, 2, 3): + fg_color = unicode_type(fg_color, "ascii") - for levelno, code in colors.items(): - self._colors[levelno] = unicode_type(curses.tparm(fg_color, code), "ascii") - self._normal = unicode_type(curses.tigetstr("sgr0"), "ascii") + for levelno, code in colors.items(): + self._colors[levelno] = unicode_type(curses.tparm(fg_color, code), "ascii") + self._normal = unicode_type(curses.tigetstr("sgr0"), "ascii") + else: + # If curses is not present (currently we'll only get here for + # colorama on windows), assume hard-coded ANSI color codes. + for levelno, code in colors.items(): + self._colors[levelno] = '\033[2;3%dm' % code + self._normal = '\033[0m' else: self._normal = '' @@ -183,7 +212,8 @@ def enable_pretty_logging(options=None, logger=None): and `tornado.options.parse_config_file`. """ if options is None: - from tornado.options import options + import tornado.options + options = tornado.options.options if options.logging is None or options.logging.lower() == 'none': return if logger is None: @@ -228,7 +258,8 @@ def define_logging_options(options=None): """ if options is None: # late import to prevent cycle - from tornado.options import options + import tornado.options + options = tornado.options.options options.define("logging", default="info", help=("Set the Python log level. If 'none', tornado won't touch the " "logging configuration."), diff --git a/server/www/packages/packages-common/tornado/netutil.py b/server/www/packages/packages-common/tornado/netutil.py index 4fc8d04..c34c8c8 100644 --- a/server/www/packages/packages-common/tornado/netutil.py +++ b/server/www/packages/packages-common/tornado/netutil.py @@ -16,7 +16,7 @@ """Miscellaneous network utility code.""" -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import errno import os @@ -27,7 +27,7 @@ import stat from tornado.concurrent import dummy_executor, run_on_executor from tornado.ioloop import IOLoop from tornado.platform.auto import set_close_exec -from tornado.util import u, Configurable, errno_from_exception +from tornado.util import PY3, Configurable, errno_from_exception try: import ssl @@ -44,20 +44,18 @@ except ImportError: else: raise -try: - xrange # py2 -except NameError: - xrange = range # py3 +if PY3: + xrange = range if hasattr(ssl, 'match_hostname') and hasattr(ssl, 'CertificateError'): # python 3.2+ ssl_match_hostname = ssl.match_hostname SSLCertificateError = ssl.CertificateError elif ssl is None: - ssl_match_hostname = SSLCertificateError = None + ssl_match_hostname = SSLCertificateError = None # type: ignore else: import backports.ssl_match_hostname ssl_match_hostname = backports.ssl_match_hostname.match_hostname - SSLCertificateError = backports.ssl_match_hostname.CertificateError + SSLCertificateError = backports.ssl_match_hostname.CertificateError # type: ignore if hasattr(ssl, 'SSLContext'): if hasattr(ssl, 'create_default_context'): @@ -96,7 +94,10 @@ else: # module-import time, the import lock is already held by the main thread, # leading to deadlock. Avoid it by caching the idna encoder on the main # thread now. -u('foo').encode('idna') +u'foo'.encode('idna') + +# For undiagnosed reasons, 'latin1' codec may also need to be preloaded. +u'foo'.encode('latin1') # These errnos indicate that a non-blocking operation must be retried # at a later time. On most platforms they're the same value, but on @@ -104,7 +105,7 @@ u('foo').encode('idna') _ERRNO_WOULDBLOCK = (errno.EWOULDBLOCK, errno.EAGAIN) if hasattr(errno, "WSAEWOULDBLOCK"): - _ERRNO_WOULDBLOCK += (errno.WSAEWOULDBLOCK,) + _ERRNO_WOULDBLOCK += (errno.WSAEWOULDBLOCK,) # type: ignore # Default backlog used when calling sock.listen() _DEFAULT_BACKLOG = 128 @@ -131,7 +132,7 @@ def bind_sockets(port, address=None, family=socket.AF_UNSPEC, ``flags`` is a bitmask of AI_* flags to `~socket.getaddrinfo`, like ``socket.AI_PASSIVE | socket.AI_NUMERICHOST``. - ``resuse_port`` option sets ``SO_REUSEPORT`` option for every socket + ``reuse_port`` option sets ``SO_REUSEPORT`` option for every socket in the list. If your platform doesn't support this option ValueError will be raised. """ @@ -199,6 +200,7 @@ def bind_sockets(port, address=None, family=socket.AF_UNSPEC, sockets.append(sock) return sockets + if hasattr(socket, 'AF_UNIX'): def bind_unix_socket(file, mode=0o600, backlog=_DEFAULT_BACKLOG): """Creates a listening unix socket. @@ -334,6 +336,11 @@ class Resolver(Configurable): port)`` pair for IPv4; additional fields may be present for IPv6). If a ``callback`` is passed, it will be run with the result as an argument when it is complete. + + :raises IOError: if the address cannot be resolved. + + .. versionchanged:: 4.4 + Standardized all implementations to raise `IOError`. """ raise NotImplementedError() @@ -413,8 +420,8 @@ class ThreadedResolver(ExecutorResolver): All ``ThreadedResolvers`` share a single thread pool, whose size is set by the first one to be created. """ - _threadpool = None - _threadpool_pid = None + _threadpool = None # type: ignore + _threadpool_pid = None # type: int def initialize(self, io_loop=None, num_threads=10): threadpool = ThreadedResolver._create_threadpool(num_threads) @@ -518,4 +525,4 @@ def ssl_wrap_socket(socket, ssl_options, server_hostname=None, **kwargs): else: return context.wrap_socket(socket, **kwargs) else: - return ssl.wrap_socket(socket, **dict(context, **kwargs)) + return ssl.wrap_socket(socket, **dict(context, **kwargs)) # type: ignore diff --git a/server/www/packages/packages-common/tornado/options.py b/server/www/packages/packages-common/tornado/options.py index ba16b1a..0a72cc6 100644 --- a/server/www/packages/packages-common/tornado/options.py +++ b/server/www/packages/packages-common/tornado/options.py @@ -41,6 +41,12 @@ either:: # or tornado.options.parse_config_file("/etc/server.conf") +.. note: + + When using tornado.options.parse_command_line or + tornado.options.parse_config_file, the only options that are set are + ones that were previously defined with tornado.options.define. + Command line formats are what you would expect (``--myoption=myvalue``). Config files are just Python files. Global names become options, e.g.:: @@ -76,7 +82,7 @@ instances to define isolated sets of options, such as for subcommands. underscores. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import datetime import numbers @@ -132,8 +138,10 @@ class OptionParser(object): return name in self._options def __getitem__(self, name): - name = self._normalize_name(name) - return self._options[name].value() + return self.__getattr__(name) + + def __setitem__(self, name, value): + return self.__setattr__(name, value) def items(self): """A sequence of (name, value) pairs. @@ -300,8 +308,12 @@ class OptionParser(object): .. versionchanged:: 4.1 Config files are now always interpreted as utf-8 instead of the system default encoding. + + .. versionchanged:: 4.4 + The special variable ``__file__`` is available inside config + files, specifying the absolute path to the config file itself. """ - config = {} + config = {'__file__': os.path.abspath(path)} with open(path, 'rb') as f: exec_in(native_str(f.read()), config, config) for name in config: diff --git a/server/www/packages/packages-common/tornado/platform/asyncio.py b/server/www/packages/packages-common/tornado/platform/asyncio.py index bf0428e..830ee1f 100644 --- a/server/www/packages/packages-common/tornado/platform/asyncio.py +++ b/server/www/packages/packages-common/tornado/platform/asyncio.py @@ -14,12 +14,12 @@ loops. .. note:: - Tornado requires the `~asyncio.BaseEventLoop.add_reader` family of methods, - so it is not compatible with the `~asyncio.ProactorEventLoop` on Windows. - Use the `~asyncio.SelectorEventLoop` instead. + Tornado requires the `~asyncio.AbstractEventLoop.add_reader` family of + methods, so it is not compatible with the `~asyncio.ProactorEventLoop` on + Windows. Use the `~asyncio.SelectorEventLoop` instead. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import functools import tornado.concurrent @@ -30,11 +30,11 @@ from tornado import stack_context try: # Import the real asyncio module for py33+ first. Older versions of the # trollius backport also use this name. - import asyncio + import asyncio # type: ignore except ImportError as e: # Asyncio itself isn't available; see if trollius is (backport to py26+). try: - import trollius as asyncio + import trollius as asyncio # type: ignore except ImportError: # Re-raise the original asyncio error, not the trollius one. raise e @@ -141,6 +141,8 @@ class BaseAsyncIOLoop(IOLoop): def add_callback(self, callback, *args, **kwargs): if self.closing: + # TODO: this is racy; we need a lock to ensure that the + # loop isn't closed during call_soon_threadsafe. raise RuntimeError("IOLoop is closing") self.asyncio_loop.call_soon_threadsafe( self._run_callback, @@ -158,6 +160,9 @@ class AsyncIOMainLoop(BaseAsyncIOLoop): import asyncio AsyncIOMainLoop().install() asyncio.get_event_loop().run_forever() + + See also :meth:`tornado.ioloop.IOLoop.install` for general notes on + installing alternative IOLoops. """ def initialize(self, **kwargs): super(AsyncIOMainLoop, self).initialize(asyncio.get_event_loop(), @@ -212,5 +217,6 @@ def to_asyncio_future(tornado_future): tornado.concurrent.chain_future(tornado_future, af) return af + if hasattr(convert_yielded, 'register'): - convert_yielded.register(asyncio.Future, to_tornado_future) + convert_yielded.register(asyncio.Future, to_tornado_future) # type: ignore diff --git a/server/www/packages/packages-common/tornado/platform/auto.py b/server/www/packages/packages-common/tornado/platform/auto.py index fc40c9d..1f4d700 100644 --- a/server/www/packages/packages-common/tornado/platform/auto.py +++ b/server/www/packages/packages-common/tornado/platform/auto.py @@ -23,7 +23,7 @@ Most code that needs access to this functionality should do e.g.:: from tornado.platform.auto import set_close_exec """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import os @@ -47,8 +47,13 @@ try: except ImportError: pass try: - from time import monotonic as monotonic_time + # monotonic can provide a monotonic function in versions of python before + # 3.3, too. + from monotonic import monotonic as monotonic_time except ImportError: - monotonic_time = None + try: + from time import monotonic as monotonic_time + except ImportError: + monotonic_time = None __all__ = ['Waker', 'set_close_exec', 'monotonic_time'] diff --git a/server/www/packages/packages-common/tornado/platform/caresresolver.py b/server/www/packages/packages-common/tornado/platform/caresresolver.py index 5559614..fd6e9d2 100644 --- a/server/www/packages/packages-common/tornado/platform/caresresolver.py +++ b/server/www/packages/packages-common/tornado/platform/caresresolver.py @@ -1,5 +1,5 @@ -from __future__ import absolute_import, division, print_function, with_statement -import pycares +from __future__ import absolute_import, division, print_function +import pycares # type: ignore import socket from tornado import gen @@ -61,8 +61,8 @@ class CaresResolver(Resolver): assert not callback_args.kwargs result, error = callback_args.args if error: - raise Exception('C-Ares returned error %s: %s while resolving %s' % - (error, pycares.errno.strerror(error), host)) + raise IOError('C-Ares returned error %s: %s while resolving %s' % + (error, pycares.errno.strerror(error), host)) addresses = result.addresses addrinfo = [] for address in addresses: @@ -73,7 +73,7 @@ class CaresResolver(Resolver): else: address_family = socket.AF_UNSPEC if family != socket.AF_UNSPEC and family != address_family: - raise Exception('Requested socket family %d but got %d' % - (family, address_family)) + raise IOError('Requested socket family %d but got %d' % + (family, address_family)) addrinfo.append((address_family, (address, port))) raise gen.Return(addrinfo) diff --git a/server/www/packages/packages-common/tornado/platform/common.py b/server/www/packages/packages-common/tornado/platform/common.py index b409a90..a73f8db 100644 --- a/server/www/packages/packages-common/tornado/platform/common.py +++ b/server/www/packages/packages-common/tornado/platform/common.py @@ -1,10 +1,27 @@ """Lowest-common-denominator implementations of platform functionality.""" -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import errno import socket +import time from tornado.platform import interface +from tornado.util import errno_from_exception + + +def try_close(f): + # Avoid issue #875 (race condition when using the file in another + # thread). + for i in range(10): + try: + f.close() + except IOError: + # Yield to another thread + time.sleep(1e-3) + else: + break + # Try a last time and let raise + f.close() class Waker(interface.Waker): @@ -45,7 +62,7 @@ class Waker(interface.Waker): break # success except socket.error as detail: if (not hasattr(errno, 'WSAEADDRINUSE') or - detail[0] != errno.WSAEADDRINUSE): + errno_from_exception(detail) != errno.WSAEADDRINUSE): # "Address already in use" is the only error # I've seen on two WinXP Pro SP2 boxes, under # Pythons 2.3.5 and 2.4.1. @@ -75,7 +92,7 @@ class Waker(interface.Waker): def wake(self): try: self.writer.send(b"x") - except (IOError, socket.error): + except (IOError, socket.error, ValueError): pass def consume(self): @@ -89,4 +106,4 @@ class Waker(interface.Waker): def close(self): self.reader.close() - self.writer.close() + try_close(self.writer) diff --git a/server/www/packages/packages-common/tornado/platform/epoll.py b/server/www/packages/packages-common/tornado/platform/epoll.py index b08cc62..80bfd8a 100644 --- a/server/www/packages/packages-common/tornado/platform/epoll.py +++ b/server/www/packages/packages-common/tornado/platform/epoll.py @@ -14,7 +14,7 @@ # License for the specific language governing permissions and limitations # under the License. """EPoll-based IOLoop implementation for Linux systems.""" -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import select diff --git a/server/www/packages/packages-common/tornado/platform/interface.py b/server/www/packages/packages-common/tornado/platform/interface.py index 07da6ba..c0ef290 100644 --- a/server/www/packages/packages-common/tornado/platform/interface.py +++ b/server/www/packages/packages-common/tornado/platform/interface.py @@ -21,7 +21,7 @@ for other tornado.platform modules. Most code should import the appropriate implementation from `tornado.platform.auto`. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function def set_close_exec(fd): @@ -61,3 +61,7 @@ class Waker(object): def close(self): """Closes the waker's file descriptor(s).""" raise NotImplementedError() + + +def monotonic_time(): + raise NotImplementedError() diff --git a/server/www/packages/packages-common/tornado/platform/kqueue.py b/server/www/packages/packages-common/tornado/platform/kqueue.py index f8f3e4a..3a5d417 100644 --- a/server/www/packages/packages-common/tornado/platform/kqueue.py +++ b/server/www/packages/packages-common/tornado/platform/kqueue.py @@ -14,7 +14,7 @@ # License for the specific language governing permissions and limitations # under the License. """KQueue-based IOLoop implementation for BSD/Mac systems.""" -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import select diff --git a/server/www/packages/packages-common/tornado/platform/posix.py b/server/www/packages/packages-common/tornado/platform/posix.py index 41a5794..9bf1f18 100644 --- a/server/www/packages/packages-common/tornado/platform/posix.py +++ b/server/www/packages/packages-common/tornado/platform/posix.py @@ -16,12 +16,12 @@ """Posix implementations of platform-specific functionality.""" -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import fcntl import os -from tornado.platform import interface +from tornado.platform import common, interface def set_close_exec(fd): @@ -53,7 +53,7 @@ class Waker(interface.Waker): def wake(self): try: self.writer.write(b"x") - except IOError: + except (IOError, ValueError): pass def consume(self): @@ -67,4 +67,4 @@ class Waker(interface.Waker): def close(self): self.reader.close() - self.writer.close() + common.try_close(self.writer) diff --git a/server/www/packages/packages-common/tornado/platform/select.py b/server/www/packages/packages-common/tornado/platform/select.py index db52ef9..a18049f 100644 --- a/server/www/packages/packages-common/tornado/platform/select.py +++ b/server/www/packages/packages-common/tornado/platform/select.py @@ -17,7 +17,7 @@ Used as a fallback for systems that don't support epoll or kqueue. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import select diff --git a/server/www/packages/packages-common/tornado/platform/twisted.py b/server/www/packages/packages-common/tornado/platform/twisted.py index d3a4e75..0f9787e 100644 --- a/server/www/packages/packages-common/tornado/platform/twisted.py +++ b/server/www/packages/packages-common/tornado/platform/twisted.py @@ -21,7 +21,7 @@ depending on which library's underlying event loop you want to use. This module has been tested with Twisted versions 11.0.0 and newer. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import datetime import functools @@ -29,19 +29,18 @@ import numbers import socket import sys -import twisted.internet.abstract -from twisted.internet.defer import Deferred -from twisted.internet.posixbase import PosixReactorBase -from twisted.internet.interfaces import \ - IReactorFDSet, IDelayedCall, IReactorTime, IReadDescriptor, IWriteDescriptor -from twisted.python import failure, log -from twisted.internet import error -import twisted.names.cache -import twisted.names.client -import twisted.names.hosts -import twisted.names.resolve +import twisted.internet.abstract # type: ignore +from twisted.internet.defer import Deferred # type: ignore +from twisted.internet.posixbase import PosixReactorBase # type: ignore +from twisted.internet.interfaces import IReactorFDSet, IDelayedCall, IReactorTime, IReadDescriptor, IWriteDescriptor # type: ignore +from twisted.python import failure, log # type: ignore +from twisted.internet import error # type: ignore +import twisted.names.cache # type: ignore +import twisted.names.client # type: ignore +import twisted.names.hosts # type: ignore +import twisted.names.resolve # type: ignore -from zope.interface import implementer +from zope.interface import implementer # type: ignore from tornado.concurrent import Future from tornado.escape import utf8 @@ -354,7 +353,7 @@ def install(io_loop=None): if not io_loop: io_loop = tornado.ioloop.IOLoop.current() reactor = TornadoReactor(io_loop) - from twisted.internet.main import installReactor + from twisted.internet.main import installReactor # type: ignore installReactor(reactor) return reactor @@ -408,11 +407,14 @@ class TwistedIOLoop(tornado.ioloop.IOLoop): Not compatible with `tornado.process.Subprocess.set_exit_callback` because the ``SIGCHLD`` handlers used by Tornado and Twisted conflict with each other. + + See also :meth:`tornado.ioloop.IOLoop.install` for general notes on + installing alternative IOLoops. """ def initialize(self, reactor=None, **kwargs): super(TwistedIOLoop, self).initialize(**kwargs) if reactor is None: - import twisted.internet.reactor + import twisted.internet.reactor # type: ignore reactor = twisted.internet.reactor self.reactor = reactor self.fds = {} @@ -554,7 +556,10 @@ class TwistedResolver(Resolver): deferred = self.resolver.getHostByName(utf8(host)) resolved = yield gen.Task(deferred.addBoth) if isinstance(resolved, failure.Failure): - resolved.raiseException() + try: + resolved.raiseException() + except twisted.names.error.DomainError as e: + raise IOError(e) elif twisted.internet.abstract.isIPAddress(resolved): resolved_family = socket.AF_INET elif twisted.internet.abstract.isIPv6Address(resolved): @@ -569,8 +574,9 @@ class TwistedResolver(Resolver): ] raise gen.Return(result) + if hasattr(gen.convert_yielded, 'register'): - @gen.convert_yielded.register(Deferred) + @gen.convert_yielded.register(Deferred) # type: ignore def _(d): f = Future() diff --git a/server/www/packages/packages-common/tornado/platform/windows.py b/server/www/packages/packages-common/tornado/platform/windows.py index 817bdca..e94a0cf 100644 --- a/server/www/packages/packages-common/tornado/platform/windows.py +++ b/server/www/packages/packages-common/tornado/platform/windows.py @@ -2,9 +2,9 @@ # for production use. -from __future__ import absolute_import, division, print_function, with_statement -import ctypes -import ctypes.wintypes +from __future__ import absolute_import, division, print_function +import ctypes # type: ignore +import ctypes.wintypes # type: ignore # See: http://msdn.microsoft.com/en-us/library/ms724935(VS.85).aspx SetHandleInformation = ctypes.windll.kernel32.SetHandleInformation @@ -17,4 +17,4 @@ HANDLE_FLAG_INHERIT = 0x00000001 def set_close_exec(fd): success = SetHandleInformation(fd, HANDLE_FLAG_INHERIT, 0) if not success: - raise ctypes.GetLastError() + raise ctypes.WinError() diff --git a/server/www/packages/packages-common/tornado/process.py b/server/www/packages/packages-common/tornado/process.py index daa9677..fae94f3 100644 --- a/server/www/packages/packages-common/tornado/process.py +++ b/server/www/packages/packages-common/tornado/process.py @@ -18,7 +18,7 @@ the server into multiple processes and managing subprocesses. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import errno import os @@ -35,7 +35,7 @@ from tornado.iostream import PipeIOStream from tornado.log import gen_log from tornado.platform.auto import set_close_exec from tornado import stack_context -from tornado.util import errno_from_exception +from tornado.util import errno_from_exception, PY3 try: import multiprocessing @@ -43,11 +43,8 @@ except ImportError: # Multiprocessing is not available on Google App Engine. multiprocessing = None -try: - long # py2 -except NameError: - long = int # py3 - +if PY3: + long = int # Re-export this exception for convenience. try: @@ -70,7 +67,7 @@ def cpu_count(): pass try: return os.sysconf("SC_NPROCESSORS_CONF") - except ValueError: + except (AttributeError, ValueError): pass gen_log.error("Could not detect number of processors; assuming 1") return 1 @@ -147,6 +144,7 @@ def fork_processes(num_processes, max_restarts=100): else: children[pid] = i return None + for i in range(num_processes): id = start_child(i) if id is not None: @@ -204,13 +202,19 @@ class Subprocess(object): attribute of the resulting Subprocess a `.PipeIOStream`. * A new keyword argument ``io_loop`` may be used to pass in an IOLoop. + The ``Subprocess.STREAM`` option and the ``set_exit_callback`` and + ``wait_for_exit`` methods do not work on Windows. There is + therefore no reason to use this class instead of + ``subprocess.Popen`` on that platform. + .. versionchanged:: 4.1 The ``io_loop`` argument is deprecated. + """ STREAM = object() _initialized = False - _waiting = {} + _waiting = {} # type: ignore def __init__(self, *args, **kwargs): self.io_loop = kwargs.pop('io_loop', None) or ioloop.IOLoop.current() @@ -351,6 +355,10 @@ class Subprocess(object): else: assert os.WIFEXITED(status) self.returncode = os.WEXITSTATUS(status) + # We've taken over wait() duty from the subprocess.Popen + # object. If we don't inform it of the process's return code, + # it will log a warning at destruction in python 3.6+. + self.proc.returncode = self.returncode if self._exit_callback: callback = self._exit_callback self._exit_callback = None diff --git a/server/www/packages/packages-common/tornado/queues.py b/server/www/packages/packages-common/tornado/queues.py index 129b204..0041a80 100644 --- a/server/www/packages/packages-common/tornado/queues.py +++ b/server/www/packages/packages-common/tornado/queues.py @@ -12,9 +12,17 @@ # License for the specific language governing permissions and limitations # under the License. -from __future__ import absolute_import, division, print_function, with_statement +"""Asynchronous queues for coroutines. -__all__ = ['Queue', 'PriorityQueue', 'LifoQueue', 'QueueFull', 'QueueEmpty'] +.. warning:: + + Unlike the standard library's `queue` module, the classes defined here + are *not* thread-safe. To use these queues from another thread, + use `.IOLoop.add_callback` to transfer control to the `.IOLoop` thread + before calling any queue methods. +""" + +from __future__ import absolute_import, division, print_function import collections import heapq @@ -23,6 +31,8 @@ from tornado import gen, ioloop from tornado.concurrent import Future from tornado.locks import Event +__all__ = ['Queue', 'PriorityQueue', 'LifoQueue', 'QueueFull', 'QueueEmpty'] + class QueueEmpty(Exception): """Raised by `.Queue.get_nowait` when the queue has no items.""" diff --git a/server/www/packages/packages-common/tornado/routing.py b/server/www/packages/packages-common/tornado/routing.py new file mode 100644 index 0000000..6762dc0 --- /dev/null +++ b/server/www/packages/packages-common/tornado/routing.py @@ -0,0 +1,625 @@ +# Copyright 2015 The Tornado Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +"""Flexible routing implementation. + +Tornado routes HTTP requests to appropriate handlers using `Router` +class implementations. The `tornado.web.Application` class is a +`Router` implementation and may be used directly, or the classes in +this module may be used for additional flexibility. The `RuleRouter` +class can match on more criteria than `.Application`, or the `Router` +interface can be subclassed for maximum customization. + +`Router` interface extends `~.httputil.HTTPServerConnectionDelegate` +to provide additional routing capabilities. This also means that any +`Router` implementation can be used directly as a ``request_callback`` +for `~.httpserver.HTTPServer` constructor. + +`Router` subclass must implement a ``find_handler`` method to provide +a suitable `~.httputil.HTTPMessageDelegate` instance to handle the +request: + +.. code-block:: python + + class CustomRouter(Router): + def find_handler(self, request, **kwargs): + # some routing logic providing a suitable HTTPMessageDelegate instance + return MessageDelegate(request.connection) + + class MessageDelegate(HTTPMessageDelegate): + def __init__(self, connection): + self.connection = connection + + def finish(self): + self.connection.write_headers( + ResponseStartLine("HTTP/1.1", 200, "OK"), + HTTPHeaders({"Content-Length": "2"}), + b"OK") + self.connection.finish() + + router = CustomRouter() + server = HTTPServer(router) + +The main responsibility of `Router` implementation is to provide a +mapping from a request to `~.httputil.HTTPMessageDelegate` instance +that will handle this request. In the example above we can see that +routing is possible even without instantiating an `~.web.Application`. + +For routing to `~.web.RequestHandler` implementations we need an +`~.web.Application` instance. `~.web.Application.get_handler_delegate` +provides a convenient way to create `~.httputil.HTTPMessageDelegate` +for a given request and `~.web.RequestHandler`. + +Here is a simple example of how we can we route to +`~.web.RequestHandler` subclasses by HTTP method: + +.. code-block:: python + + resources = {} + + class GetResource(RequestHandler): + def get(self, path): + if path not in resources: + raise HTTPError(404) + + self.finish(resources[path]) + + class PostResource(RequestHandler): + def post(self, path): + resources[path] = self.request.body + + class HTTPMethodRouter(Router): + def __init__(self, app): + self.app = app + + def find_handler(self, request, **kwargs): + handler = GetResource if request.method == "GET" else PostResource + return self.app.get_handler_delegate(request, handler, path_args=[request.path]) + + router = HTTPMethodRouter(Application()) + server = HTTPServer(router) + +`ReversibleRouter` interface adds the ability to distinguish between +the routes and reverse them to the original urls using route's name +and additional arguments. `~.web.Application` is itself an +implementation of `ReversibleRouter` class. + +`RuleRouter` and `ReversibleRuleRouter` are implementations of +`Router` and `ReversibleRouter` interfaces and can be used for +creating rule-based routing configurations. + +Rules are instances of `Rule` class. They contain a `Matcher`, which +provides the logic for determining whether the rule is a match for a +particular request and a target, which can be one of the following. + +1) An instance of `~.httputil.HTTPServerConnectionDelegate`: + +.. code-block:: python + + router = RuleRouter([ + Rule(PathMatches("/handler"), ConnectionDelegate()), + # ... more rules + ]) + + class ConnectionDelegate(HTTPServerConnectionDelegate): + def start_request(self, server_conn, request_conn): + return MessageDelegate(request_conn) + +2) A callable accepting a single argument of `~.httputil.HTTPServerRequest` type: + +.. code-block:: python + + router = RuleRouter([ + Rule(PathMatches("/callable"), request_callable) + ]) + + def request_callable(request): + request.write(b"HTTP/1.1 200 OK\\r\\nContent-Length: 2\\r\\n\\r\\nOK") + request.finish() + +3) Another `Router` instance: + +.. code-block:: python + + router = RuleRouter([ + Rule(PathMatches("/router.*"), CustomRouter()) + ]) + +Of course a nested `RuleRouter` or a `~.web.Application` is allowed: + +.. code-block:: python + + router = RuleRouter([ + Rule(HostMatches("example.com"), RuleRouter([ + Rule(PathMatches("/app1/.*"), Application([(r"/app1/handler", Handler)]))), + ])) + ]) + + server = HTTPServer(router) + +In the example below `RuleRouter` is used to route between applications: + +.. code-block:: python + + app1 = Application([ + (r"/app1/handler", Handler1), + # other handlers ... + ]) + + app2 = Application([ + (r"/app2/handler", Handler2), + # other handlers ... + ]) + + router = RuleRouter([ + Rule(PathMatches("/app1.*"), app1), + Rule(PathMatches("/app2.*"), app2) + ]) + + server = HTTPServer(router) + +For more information on application-level routing see docs for `~.web.Application`. + +.. versionadded:: 4.5 + +""" + +from __future__ import absolute_import, division, print_function + +import re +from functools import partial + +from tornado import httputil +from tornado.httpserver import _CallableAdapter +from tornado.escape import url_escape, url_unescape, utf8 +from tornado.log import app_log +from tornado.util import basestring_type, import_object, re_unescape, unicode_type + +try: + import typing # noqa +except ImportError: + pass + + +class Router(httputil.HTTPServerConnectionDelegate): + """Abstract router interface.""" + + def find_handler(self, request, **kwargs): + # type: (httputil.HTTPServerRequest, typing.Any)->httputil.HTTPMessageDelegate + """Must be implemented to return an appropriate instance of `~.httputil.HTTPMessageDelegate` + that can serve the request. + Routing implementations may pass additional kwargs to extend the routing logic. + + :arg httputil.HTTPServerRequest request: current HTTP request. + :arg kwargs: additional keyword arguments passed by routing implementation. + :returns: an instance of `~.httputil.HTTPMessageDelegate` that will be used to + process the request. + """ + raise NotImplementedError() + + def start_request(self, server_conn, request_conn): + return _RoutingDelegate(self, server_conn, request_conn) + + +class ReversibleRouter(Router): + """Abstract router interface for routers that can handle named routes + and support reversing them to original urls. + """ + + def reverse_url(self, name, *args): + """Returns url string for a given route name and arguments + or ``None`` if no match is found. + + :arg str name: route name. + :arg args: url parameters. + :returns: parametrized url string for a given route name (or ``None``). + """ + raise NotImplementedError() + + +class _RoutingDelegate(httputil.HTTPMessageDelegate): + def __init__(self, router, server_conn, request_conn): + self.server_conn = server_conn + self.request_conn = request_conn + self.delegate = None + self.router = router # type: Router + + def headers_received(self, start_line, headers): + request = httputil.HTTPServerRequest( + connection=self.request_conn, + server_connection=self.server_conn, + start_line=start_line, headers=headers) + + self.delegate = self.router.find_handler(request) + return self.delegate.headers_received(start_line, headers) + + def data_received(self, chunk): + return self.delegate.data_received(chunk) + + def finish(self): + self.delegate.finish() + + def on_connection_close(self): + self.delegate.on_connection_close() + + +class RuleRouter(Router): + """Rule-based router implementation.""" + + def __init__(self, rules=None): + """Constructs a router from an ordered list of rules:: + + RuleRouter([ + Rule(PathMatches("/handler"), Target), + # ... more rules + ]) + + You can also omit explicit `Rule` constructor and use tuples of arguments:: + + RuleRouter([ + (PathMatches("/handler"), Target), + ]) + + `PathMatches` is a default matcher, so the example above can be simplified:: + + RuleRouter([ + ("/handler", Target), + ]) + + In the examples above, ``Target`` can be a nested `Router` instance, an instance of + `~.httputil.HTTPServerConnectionDelegate` or an old-style callable, accepting a request argument. + + :arg rules: a list of `Rule` instances or tuples of `Rule` + constructor arguments. + """ + self.rules = [] # type: typing.List[Rule] + if rules: + self.add_rules(rules) + + def add_rules(self, rules): + """Appends new rules to the router. + + :arg rules: a list of Rule instances (or tuples of arguments, which are + passed to Rule constructor). + """ + for rule in rules: + if isinstance(rule, (tuple, list)): + assert len(rule) in (2, 3, 4) + if isinstance(rule[0], basestring_type): + rule = Rule(PathMatches(rule[0]), *rule[1:]) + else: + rule = Rule(*rule) + + self.rules.append(self.process_rule(rule)) + + def process_rule(self, rule): + """Override this method for additional preprocessing of each rule. + + :arg Rule rule: a rule to be processed. + :returns: the same or modified Rule instance. + """ + return rule + + def find_handler(self, request, **kwargs): + for rule in self.rules: + target_params = rule.matcher.match(request) + if target_params is not None: + if rule.target_kwargs: + target_params['target_kwargs'] = rule.target_kwargs + + delegate = self.get_target_delegate( + rule.target, request, **target_params) + + if delegate is not None: + return delegate + + return None + + def get_target_delegate(self, target, request, **target_params): + """Returns an instance of `~.httputil.HTTPMessageDelegate` for a + Rule's target. This method is called by `~.find_handler` and can be + extended to provide additional target types. + + :arg target: a Rule's target. + :arg httputil.HTTPServerRequest request: current request. + :arg target_params: additional parameters that can be useful + for `~.httputil.HTTPMessageDelegate` creation. + """ + if isinstance(target, Router): + return target.find_handler(request, **target_params) + + elif isinstance(target, httputil.HTTPServerConnectionDelegate): + return target.start_request(request.server_connection, request.connection) + + elif callable(target): + return _CallableAdapter( + partial(target, **target_params), request.connection + ) + + return None + + +class ReversibleRuleRouter(ReversibleRouter, RuleRouter): + """A rule-based router that implements ``reverse_url`` method. + + Each rule added to this router may have a ``name`` attribute that can be + used to reconstruct an original uri. The actual reconstruction takes place + in a rule's matcher (see `Matcher.reverse`). + """ + + def __init__(self, rules=None): + self.named_rules = {} # type: typing.Dict[str] + super(ReversibleRuleRouter, self).__init__(rules) + + def process_rule(self, rule): + rule = super(ReversibleRuleRouter, self).process_rule(rule) + + if rule.name: + if rule.name in self.named_rules: + app_log.warning( + "Multiple handlers named %s; replacing previous value", + rule.name) + self.named_rules[rule.name] = rule + + return rule + + def reverse_url(self, name, *args): + if name in self.named_rules: + return self.named_rules[name].matcher.reverse(*args) + + for rule in self.rules: + if isinstance(rule.target, ReversibleRouter): + reversed_url = rule.target.reverse_url(name, *args) + if reversed_url is not None: + return reversed_url + + return None + + +class Rule(object): + """A routing rule.""" + + def __init__(self, matcher, target, target_kwargs=None, name=None): + """Constructs a Rule instance. + + :arg Matcher matcher: a `Matcher` instance used for determining + whether the rule should be considered a match for a specific + request. + :arg target: a Rule's target (typically a ``RequestHandler`` or + `~.httputil.HTTPServerConnectionDelegate` subclass or even a nested `Router`, + depending on routing implementation). + :arg dict target_kwargs: a dict of parameters that can be useful + at the moment of target instantiation (for example, ``status_code`` + for a ``RequestHandler`` subclass). They end up in + ``target_params['target_kwargs']`` of `RuleRouter.get_target_delegate` + method. + :arg str name: the name of the rule that can be used to find it + in `ReversibleRouter.reverse_url` implementation. + """ + if isinstance(target, str): + # import the Module and instantiate the class + # Must be a fully qualified name (module.ClassName) + target = import_object(target) + + self.matcher = matcher # type: Matcher + self.target = target + self.target_kwargs = target_kwargs if target_kwargs else {} + self.name = name + + def reverse(self, *args): + return self.matcher.reverse(*args) + + def __repr__(self): + return '%s(%r, %s, kwargs=%r, name=%r)' % \ + (self.__class__.__name__, self.matcher, + self.target, self.target_kwargs, self.name) + + +class Matcher(object): + """Represents a matcher for request features.""" + + def match(self, request): + """Matches current instance against the request. + + :arg httputil.HTTPServerRequest request: current HTTP request + :returns: a dict of parameters to be passed to the target handler + (for example, ``handler_kwargs``, ``path_args``, ``path_kwargs`` + can be passed for proper `~.web.RequestHandler` instantiation). + An empty dict is a valid (and common) return value to indicate a match + when the argument-passing features are not used. + ``None`` must be returned to indicate that there is no match.""" + raise NotImplementedError() + + def reverse(self, *args): + """Reconstructs full url from matcher instance and additional arguments.""" + return None + + +class AnyMatches(Matcher): + """Matches any request.""" + + def match(self, request): + return {} + + +class HostMatches(Matcher): + """Matches requests from hosts specified by ``host_pattern`` regex.""" + + def __init__(self, host_pattern): + if isinstance(host_pattern, basestring_type): + if not host_pattern.endswith("$"): + host_pattern += "$" + self.host_pattern = re.compile(host_pattern) + else: + self.host_pattern = host_pattern + + def match(self, request): + if self.host_pattern.match(request.host_name): + return {} + + return None + + +class DefaultHostMatches(Matcher): + """Matches requests from host that is equal to application's default_host. + Always returns no match if ``X-Real-Ip`` header is present. + """ + + def __init__(self, application, host_pattern): + self.application = application + self.host_pattern = host_pattern + + def match(self, request): + # Look for default host if not behind load balancer (for debugging) + if "X-Real-Ip" not in request.headers: + if self.host_pattern.match(self.application.default_host): + return {} + return None + + +class PathMatches(Matcher): + """Matches requests with paths specified by ``path_pattern`` regex.""" + + def __init__(self, path_pattern): + if isinstance(path_pattern, basestring_type): + if not path_pattern.endswith('$'): + path_pattern += '$' + self.regex = re.compile(path_pattern) + else: + self.regex = path_pattern + + assert len(self.regex.groupindex) in (0, self.regex.groups), \ + ("groups in url regexes must either be all named or all " + "positional: %r" % self.regex.pattern) + + self._path, self._group_count = self._find_groups() + + def match(self, request): + match = self.regex.match(request.path) + if match is None: + return None + if not self.regex.groups: + return {} + + path_args, path_kwargs = [], {} + + # Pass matched groups to the handler. Since + # match.groups() includes both named and + # unnamed groups, we want to use either groups + # or groupdict but not both. + if self.regex.groupindex: + path_kwargs = dict( + (str(k), _unquote_or_none(v)) + for (k, v) in match.groupdict().items()) + else: + path_args = [_unquote_or_none(s) for s in match.groups()] + + return dict(path_args=path_args, path_kwargs=path_kwargs) + + def reverse(self, *args): + if self._path is None: + raise ValueError("Cannot reverse url regex " + self.regex.pattern) + assert len(args) == self._group_count, "required number of arguments " \ + "not found" + if not len(args): + return self._path + converted_args = [] + for a in args: + if not isinstance(a, (unicode_type, bytes)): + a = str(a) + converted_args.append(url_escape(utf8(a), plus=False)) + return self._path % tuple(converted_args) + + def _find_groups(self): + """Returns a tuple (reverse string, group count) for a url. + + For example: Given the url pattern /([0-9]{4})/([a-z-]+)/, this method + would return ('/%s/%s/', 2). + """ + pattern = self.regex.pattern + if pattern.startswith('^'): + pattern = pattern[1:] + if pattern.endswith('$'): + pattern = pattern[:-1] + + if self.regex.groups != pattern.count('('): + # The pattern is too complicated for our simplistic matching, + # so we can't support reversing it. + return None, None + + pieces = [] + for fragment in pattern.split('('): + if ')' in fragment: + paren_loc = fragment.index(')') + if paren_loc >= 0: + pieces.append('%s' + fragment[paren_loc + 1:]) + else: + try: + unescaped_fragment = re_unescape(fragment) + except ValueError as exc: + # If we can't unescape part of it, we can't + # reverse this url. + return (None, None) + pieces.append(unescaped_fragment) + + return ''.join(pieces), self.regex.groups + + +class URLSpec(Rule): + """Specifies mappings between URLs and handlers. + + .. versionchanged: 4.5 + `URLSpec` is now a subclass of a `Rule` with `PathMatches` matcher and is preserved for + backwards compatibility. + """ + def __init__(self, pattern, handler, kwargs=None, name=None): + """Parameters: + + * ``pattern``: Regular expression to be matched. Any capturing + groups in the regex will be passed in to the handler's + get/post/etc methods as arguments (by keyword if named, by + position if unnamed. Named and unnamed capturing groups may + may not be mixed in the same rule). + + * ``handler``: `~.web.RequestHandler` subclass to be invoked. + + * ``kwargs`` (optional): A dictionary of additional arguments + to be passed to the handler's constructor. + + * ``name`` (optional): A name for this handler. Used by + `~.web.Application.reverse_url`. + + """ + super(URLSpec, self).__init__(PathMatches(pattern), handler, kwargs, name) + + self.regex = self.matcher.regex + self.handler_class = self.target + self.kwargs = kwargs + + def __repr__(self): + return '%s(%r, %s, kwargs=%r, name=%r)' % \ + (self.__class__.__name__, self.regex.pattern, + self.handler_class, self.kwargs, self.name) + + +def _unquote_or_none(s): + """None-safe wrapper around url_unescape to handle unmatched optional + groups correctly. + + Note that args are passed as bytes so the handler can decide what + encoding to use. + """ + if s is None: + return s + return url_unescape(s, encoding=None, plus=False) diff --git a/server/www/packages/packages-common/tornado/simple_httpclient.py b/server/www/packages/packages-common/tornado/simple_httpclient.py index 37b0bc2..8fb7070 100644 --- a/server/www/packages/packages-common/tornado/simple_httpclient.py +++ b/server/www/packages/packages-common/tornado/simple_httpclient.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function from tornado.escape import utf8, _unicode from tornado import gen @@ -11,6 +11,7 @@ from tornado.netutil import Resolver, OverrideResolver, _client_ssl_defaults from tornado.log import gen_log from tornado import stack_context from tornado.tcpclient import TCPClient +from tornado.util import PY3 import base64 import collections @@ -22,10 +23,10 @@ import sys from io import BytesIO -try: - import urlparse # py2 -except ImportError: - import urllib.parse as urlparse # py3 +if PY3: + import urllib.parse as urlparse +else: + import urlparse try: import ssl @@ -126,7 +127,7 @@ class SimpleAsyncHTTPClient(AsyncHTTPClient): timeout_handle = self.io_loop.add_timeout( self.io_loop.time() + min(request.connect_timeout, request.request_timeout), - functools.partial(self._on_timeout, key)) + functools.partial(self._on_timeout, key, "in request queue")) else: timeout_handle = None self.waiting[key] = (request, callback, timeout_handle) @@ -167,11 +168,20 @@ class SimpleAsyncHTTPClient(AsyncHTTPClient): self.io_loop.remove_timeout(timeout_handle) del self.waiting[key] - def _on_timeout(self, key): + def _on_timeout(self, key, info=None): + """Timeout callback of request. + + Construct a timeout HTTPResponse when a timeout occurs. + + :arg object key: A simple object to mark the request. + :info string key: More detailed timeout information. + """ request, callback, timeout_handle = self.waiting[key] self.queue.remove((key, request, callback)) + + error_message = "Timeout {0}".format(info) if info else "Timeout" timeout_response = HTTPResponse( - request, 599, error=HTTPError(599, "Timeout"), + request, 599, error=HTTPError(599, error_message), request_time=self.io_loop.time() - request.start_time) self.io_loop.add_callback(callback, timeout_response) del self.waiting[key] @@ -229,7 +239,7 @@ class _HTTPConnection(httputil.HTTPMessageDelegate): if timeout: self._timeout = self.io_loop.add_timeout( self.start_time + timeout, - stack_context.wrap(self._on_timeout)) + stack_context.wrap(functools.partial(self._on_timeout, "while connecting"))) self.tcp_client.connect(host, port, af=af, ssl_options=ssl_options, max_buffer_size=self.max_buffer_size, @@ -284,10 +294,17 @@ class _HTTPConnection(httputil.HTTPMessageDelegate): return ssl_options return None - def _on_timeout(self): + def _on_timeout(self, info=None): + """Timeout callback of _HTTPConnection instance. + + Raise a timeout HTTPError when a timeout occurs. + + :info string key: More detailed timeout information. + """ self._timeout = None + error_message = "Timeout {0}".format(info) if info else "Timeout" if self.final_callback is not None: - raise HTTPError(599, "Timeout") + raise HTTPError(599, error_message) def _remove_timeout(self): if self._timeout is not None: @@ -307,13 +324,14 @@ class _HTTPConnection(httputil.HTTPMessageDelegate): if self.request.request_timeout: self._timeout = self.io_loop.add_timeout( self.start_time + self.request.request_timeout, - stack_context.wrap(self._on_timeout)) + stack_context.wrap(functools.partial(self._on_timeout, "during request"))) if (self.request.method not in self._SUPPORTED_METHODS and not self.request.allow_nonstandard_methods): raise KeyError("unknown method %s" % self.request.method) for key in ('network_interface', 'proxy_host', 'proxy_port', - 'proxy_username', 'proxy_password'): + 'proxy_username', 'proxy_password', + 'proxy_auth_mode'): if getattr(self.request, key, None): raise NotImplementedError('%s not supported' % key) if "Connection" not in self.request.headers: @@ -481,7 +499,7 @@ class _HTTPConnection(httputil.HTTPMessageDelegate): def _should_follow_redirect(self): return (self.request.follow_redirects and self.request.max_redirects > 0 and - self.code in (301, 302, 303, 307)) + self.code in (301, 302, 303, 307, 308)) def finish(self): data = b''.join(self.chunks) diff --git a/server/www/packages/packages-common/tornado/stack_context.py b/server/www/packages/packages-common/tornado/stack_context.py index 2c0d9ee..61ae51f 100644 --- a/server/www/packages/packages-common/tornado/stack_context.py +++ b/server/www/packages/packages-common/tornado/stack_context.py @@ -67,7 +67,7 @@ Here are a few rules of thumb for when it's necessary: block that references your `StackContext`. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import sys import threading @@ -82,6 +82,8 @@ class StackContextInconsistentError(Exception): class _State(threading.local): def __init__(self): self.contexts = (tuple(), None) + + _state = _State() diff --git a/server/www/packages/packages-common/tornado/tcpclient.py b/server/www/packages/packages-common/tornado/tcpclient.py index f594d91..33074bd 100644 --- a/server/www/packages/packages-common/tornado/tcpclient.py +++ b/server/www/packages/packages-common/tornado/tcpclient.py @@ -16,7 +16,7 @@ """A non-blocking TCP connection factory. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import functools import socket @@ -155,16 +155,30 @@ class TCPClient(object): @gen.coroutine def connect(self, host, port, af=socket.AF_UNSPEC, ssl_options=None, - max_buffer_size=None): + max_buffer_size=None, source_ip=None, source_port=None): """Connect to the given host and port. Asynchronously returns an `.IOStream` (or `.SSLIOStream` if ``ssl_options`` is not None). + + Using the ``source_ip`` kwarg, one can specify the source + IP address to use when establishing the connection. + In case the user needs to resolve and + use a specific interface, it has to be handled outside + of Tornado as this depends very much on the platform. + + Similarly, when the user requires a certain source port, it can + be specified using the ``source_port`` arg. + + .. versionchanged:: 4.5 + Added the ``source_ip`` and ``source_port`` arguments. """ addrinfo = yield self.resolver.resolve(host, port, af) connector = _Connector( addrinfo, self.io_loop, - functools.partial(self._create_stream, max_buffer_size)) + functools.partial(self._create_stream, max_buffer_size, + source_ip=source_ip, source_port=source_port) + ) af, addr, stream = yield connector.start() # TODO: For better performance we could cache the (af, addr) # information here and re-use it on subsequent connections to @@ -174,10 +188,35 @@ class TCPClient(object): server_hostname=host) raise gen.Return(stream) - def _create_stream(self, max_buffer_size, af, addr): + def _create_stream(self, max_buffer_size, af, addr, source_ip=None, + source_port=None): # Always connect in plaintext; we'll convert to ssl if necessary # after one connection has completed. - stream = IOStream(socket.socket(af), - io_loop=self.io_loop, - max_buffer_size=max_buffer_size) - return stream.connect(addr) + source_port_bind = source_port if isinstance(source_port, int) else 0 + source_ip_bind = source_ip + if source_port_bind and not source_ip: + # User required a specific port, but did not specify + # a certain source IP, will bind to the default loopback. + source_ip_bind = '::1' if af == socket.AF_INET6 else '127.0.0.1' + # Trying to use the same address family as the requested af socket: + # - 127.0.0.1 for IPv4 + # - ::1 for IPv6 + socket_obj = socket.socket(af) + if source_port_bind or source_ip_bind: + # If the user requires binding also to a specific IP/port. + try: + socket_obj.bind((source_ip_bind, source_port_bind)) + except socket.error: + socket_obj.close() + # Fail loudly if unable to use the IP/port. + raise + try: + stream = IOStream(socket_obj, + io_loop=self.io_loop, + max_buffer_size=max_buffer_size) + except socket.error as e: + fu = Future() + fu.set_exception(e) + return fu + else: + return stream.connect(addr) diff --git a/server/www/packages/packages-common/tornado/tcpserver.py b/server/www/packages/packages-common/tornado/tcpserver.py index c9d148a..f47ec89 100644 --- a/server/www/packages/packages-common/tornado/tcpserver.py +++ b/server/www/packages/packages-common/tornado/tcpserver.py @@ -15,12 +15,13 @@ # under the License. """A non-blocking, single-threaded TCP server.""" -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import errno import os import socket +from tornado import gen from tornado.log import app_log from tornado.ioloop import IOLoop from tornado.iostream import IOStream, SSLIOStream @@ -39,7 +40,21 @@ class TCPServer(object): r"""A non-blocking, single-threaded TCP server. To use `TCPServer`, define a subclass which overrides the `handle_stream` - method. + method. For example, a simple echo server could be defined like this:: + + from tornado.tcpserver import TCPServer + from tornado.iostream import StreamClosedError + from tornado import gen + + class EchoServer(TCPServer): + @gen.coroutine + def handle_stream(self, stream, address): + while True: + try: + data = yield stream.read_until(b"\n") + yield stream.write(data) + except StreamClosedError: + break To make this server serve SSL traffic, send the ``ssl_options`` keyword argument with an `ssl.SSLContext` object. For compatibility with older @@ -95,6 +110,7 @@ class TCPServer(object): self._sockets = {} # fd -> socket object self._pending_sockets = [] self._started = False + self._stopped = False self.max_buffer_size = max_buffer_size self.read_chunk_size = read_chunk_size @@ -147,7 +163,8 @@ class TCPServer(object): """Singular version of `add_sockets`. Takes a single socket object.""" self.add_sockets([socket]) - def bind(self, port, address=None, family=socket.AF_UNSPEC, backlog=128): + def bind(self, port, address=None, family=socket.AF_UNSPEC, backlog=128, + reuse_port=False): """Binds this server to the given port on the given address. To start the server, call `start`. If you want to run this server @@ -162,13 +179,17 @@ class TCPServer(object): both will be used if available. The ``backlog`` argument has the same meaning as for - `socket.listen `. + `socket.listen `. The ``reuse_port`` argument + has the same meaning as for `.bind_sockets`. This method may be called multiple times prior to `start` to listen on multiple ports or interfaces. + + .. versionchanged:: 4.4 + Added the ``reuse_port`` argument. """ sockets = bind_sockets(port, address=address, family=family, - backlog=backlog) + backlog=backlog, reuse_port=reuse_port) if self._started: self.add_sockets(sockets) else: @@ -208,7 +229,11 @@ class TCPServer(object): Requests currently in progress may still continue after the server is stopped. """ + if self._stopped: + return + self._stopped = True for fd, sock in self._sockets.items(): + assert sock.fileno() == fd self.io_loop.remove_handler(fd) sock.close() @@ -266,8 +291,10 @@ class TCPServer(object): stream = IOStream(connection, io_loop=self.io_loop, max_buffer_size=self.max_buffer_size, read_chunk_size=self.read_chunk_size) + future = self.handle_stream(stream, address) if future is not None: - self.io_loop.add_future(future, lambda f: f.result()) + self.io_loop.add_future(gen.convert_yielded(future), + lambda f: f.result()) except Exception: app_log.error("Error in connection callback", exc_info=True) diff --git a/server/www/packages/packages-common/tornado/template.py b/server/www/packages/packages-common/tornado/template.py index fa58899..3b2fa3f 100644 --- a/server/www/packages/packages-common/tornado/template.py +++ b/server/www/packages/packages-common/tornado/template.py @@ -19,13 +19,13 @@ Basic usage looks like:: t = template.Template("{{ myvalue }}") - print t.generate(myvalue="XXX") + print(t.generate(myvalue="XXX")) `Loader` is a class that loads templates from a root directory and caches the compiled templates:: loader = template.Loader("/home/btaylor") - print loader.load("test.html").generate(myvalue="XXX") + print(loader.load("test.html").generate(myvalue="XXX")) We compile all templates to raw Python. Error-reporting is currently... uh, interesting. Syntax for the templates:: @@ -94,12 +94,15 @@ Syntax Reference Template expressions are surrounded by double curly braces: ``{{ ... }}``. The contents may be any python expression, which will be escaped according to the current autoescape setting and inserted into the output. Other -template directives use ``{% %}``. These tags may be escaped as ``{{!`` -and ``{%!`` if you need to include a literal ``{{`` or ``{%`` in the output. +template directives use ``{% %}``. To comment out a section so that it is omitted from the output, surround it with ``{# ... #}``. +These tags may be escaped as ``{{!``, ``{%!``, and ``{#!`` +if you need to include a literal ``{{``, ``{%``, or ``{#`` in the output. + + ``{% apply *function* %}...{% end %}`` Applies a function to the output of all template code between ``apply`` and ``end``:: @@ -193,7 +196,7 @@ with ``{# ... #}``. `filter_whitespace` for available options. New in Tornado 4.3. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import datetime import linecache @@ -204,12 +207,12 @@ import threading from tornado import escape from tornado.log import app_log -from tornado.util import ObjectDict, exec_in, unicode_type +from tornado.util import ObjectDict, exec_in, unicode_type, PY3 -try: - from cStringIO import StringIO # py2 -except ImportError: - from io import StringIO # py3 +if PY3: + from io import StringIO +else: + from cStringIO import StringIO _DEFAULT_AUTOESCAPE = "xhtml_escape" _UNSET = object() @@ -665,7 +668,7 @@ class ParseError(Exception): .. versionchanged:: 4.3 Added ``filename`` and ``lineno`` attributes. """ - def __init__(self, message, filename, lineno): + def __init__(self, message, filename=None, lineno=0): self.message = message # The names "filename" and "lineno" are chosen for consistency # with python SyntaxError. diff --git a/server/www/packages/packages-common/tornado/testing.py b/server/www/packages/packages-common/tornado/testing.py index 54d76fe..74d04b6 100644 --- a/server/www/packages/packages-common/tornado/testing.py +++ b/server/www/packages/packages-common/tornado/testing.py @@ -2,7 +2,7 @@ """Support classes for automated testing. * `AsyncTestCase` and `AsyncHTTPTestCase`: Subclasses of unittest.TestCase - with additional support for testing asynchronous (`.IOLoop` based) code. + with additional support for testing asynchronous (`.IOLoop`-based) code. * `ExpectLog` and `LogTrapTestCase`: Make test logs less spammy. @@ -10,7 +10,7 @@ for the tornado.autoreload module to rerun the tests when code changes. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function try: from tornado import gen @@ -23,16 +23,16 @@ try: except ImportError: # These modules are not importable on app engine. Parts of this module # won't work, but e.g. LogTrapTestCase and main() will. - AsyncHTTPClient = None - gen = None - HTTPServer = None - IOLoop = None - netutil = None - SimpleAsyncHTTPClient = None - Subprocess = None + AsyncHTTPClient = None # type: ignore + gen = None # type: ignore + HTTPServer = None # type: ignore + IOLoop = None # type: ignore + netutil = None # type: ignore + SimpleAsyncHTTPClient = None # type: ignore + Subprocess = None # type: ignore from tornado.log import gen_log, app_log from tornado.stack_context import ExceptionStackContext -from tornado.util import raise_exc_info, basestring_type +from tornado.util import raise_exc_info, basestring_type, PY3 import functools import inspect import logging @@ -42,19 +42,19 @@ import signal import socket import sys -try: - from cStringIO import StringIO # py2 -except ImportError: - from io import StringIO # py3 +if PY3: + from io import StringIO +else: + from cStringIO import StringIO try: - from collections.abc import Generator as GeneratorType # py35+ + from collections.abc import Generator as GeneratorType # type: ignore except ImportError: - from types import GeneratorType + from types import GeneratorType # type: ignore if sys.version_info >= (3, 5): - iscoroutine = inspect.iscoroutine - iscoroutinefunction = inspect.iscoroutinefunction + iscoroutine = inspect.iscoroutine # type: ignore + iscoroutinefunction = inspect.iscoroutinefunction # type: ignore else: iscoroutine = iscoroutinefunction = lambda f: False @@ -62,16 +62,16 @@ else: # (either py27+ or unittest2) so tornado.test.util enforces # this requirement, but for other users of tornado.testing we want # to allow the older version if unitest2 is not available. -if sys.version_info >= (3,): +if PY3: # On python 3, mixing unittest2 and unittest (including doctest) # doesn't seem to work, so always use unittest. import unittest else: # On python 2, prefer unittest2 when available. try: - import unittest2 as unittest + import unittest2 as unittest # type: ignore except ImportError: - import unittest + import unittest # type: ignore _next_port = 10000 @@ -96,9 +96,13 @@ def bind_unused_port(reuse_port=False): """Binds a server socket to an available port on localhost. Returns a tuple (socket, port). + + .. versionchanged:: 4.4 + Always binds to ``127.0.0.1`` without resolving the name + ``localhost``. """ - [sock] = netutil.bind_sockets(None, 'localhost', family=socket.AF_INET, - reuse_port=reuse_port) + sock = netutil.bind_sockets(None, '127.0.0.1', family=socket.AF_INET, + reuse_port=reuse_port)[0] port = sock.getsockname()[1] return sock, port @@ -123,7 +127,7 @@ class _TestMethodWrapper(object): method yields it must use a decorator to consume the generator), but will also detect other kinds of return values (these are not necessarily errors, but we alert anyway since there is no good - reason to return a value from a test. + reason to return a value from a test). """ def __init__(self, orig_method): self.orig_method = orig_method @@ -208,8 +212,8 @@ class AsyncTestCase(unittest.TestCase): self.assertIn("FriendFeed", response.body) self.stop() """ - def __init__(self, methodName='runTest', **kwargs): - super(AsyncTestCase, self).__init__(methodName, **kwargs) + def __init__(self, methodName='runTest'): + super(AsyncTestCase, self).__init__(methodName) self.__stopped = False self.__running = False self.__failure = None @@ -547,7 +551,7 @@ def gen_test(func=None, timeout=None): # Without this attribute, nosetests will try to run gen_test as a test # anywhere it is imported. -gen_test.__test__ = False +gen_test.__test__ = False # type: ignore class LogTrapTestCase(unittest.TestCase): @@ -617,7 +621,7 @@ class ExpectLog(logging.Filter): an empty string to watch the root logger. :param regex: Regular expression to match. Any log entries on the specified logger that match this regex will be suppressed. - :param required: If true, an exeption will be raised if the end of + :param required: If true, an exception will be raised if the end of the ``with`` statement is reached without matching any log entries. """ if isinstance(logger, basestring_type): @@ -652,7 +656,9 @@ def main(**kwargs): This test runner is essentially equivalent to `unittest.main` from the standard library, but adds support for tornado-style option - parsing and log formatting. + parsing and log formatting. It is *not* necessary to use this + `main` function to run tests using `AsyncTestCase`; these tests + are self-contained and can run with any test runner. The easiest way to run a test is via the command line:: @@ -731,5 +737,6 @@ def main(**kwargs): gen_log.error('FAIL') raise + if __name__ == '__main__': main() diff --git a/server/www/packages/packages-common/tornado/util.py b/server/www/packages/packages-common/tornado/util.py index a67ddf5..981b94c 100644 --- a/server/www/packages/packages-common/tornado/util.py +++ b/server/www/packages/packages-common/tornado/util.py @@ -10,37 +10,92 @@ interface of its subclasses, including `.AsyncHTTPClient`, `.IOLoop`, and `.Resolver`. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import array +import atexit import os +import re import sys import zlib +PY3 = sys.version_info >= (3,) -try: - xrange # py2 -except NameError: - xrange = range # py3 +if PY3: + xrange = range # inspect.getargspec() raises DeprecationWarnings in Python 3.5. # The two functions have compatible interfaces for the parts we need. +if PY3: + from inspect import getfullargspec as getargspec +else: + from inspect import getargspec + +# Aliases for types that are spelled differently in different Python +# versions. bytes_type is deprecated and no longer used in Tornado +# itself but is left in case anyone outside Tornado is using it. +bytes_type = bytes +if PY3: + unicode_type = str + basestring_type = str +else: + # The names unicode and basestring don't exist in py3 so silence flake8. + unicode_type = unicode # noqa + basestring_type = basestring # noqa + + try: - from inspect import getfullargspec as getargspec # py3 + import typing # noqa + from typing import cast + + _ObjectDictBase = typing.Dict[str, typing.Any] except ImportError: - from inspect import getargspec # py2 + _ObjectDictBase = dict + + def cast(typ, x): + return x +else: + # More imports that are only needed in type comments. + import datetime # noqa + import types # noqa + from typing import Any, AnyStr, Union, Optional, Dict, Mapping # noqa + from typing import Tuple, Match, Callable # noqa + + if PY3: + _BaseString = str + else: + _BaseString = Union[bytes, unicode_type] -class ObjectDict(dict): +try: + from sys import is_finalizing +except ImportError: + # Emulate it + def _get_emulated_is_finalizing(): + L = [] + atexit.register(lambda: L.append(None)) + + def is_finalizing(): + # Not referencing any globals here + return L != [] + + return is_finalizing + + is_finalizing = _get_emulated_is_finalizing() + + +class ObjectDict(_ObjectDictBase): """Makes a dictionary behave like an object, with attribute-style access. """ def __getattr__(self, name): + # type: (str) -> Any try: return self[name] except KeyError: raise AttributeError(name) def __setattr__(self, name, value): + # type: (str, Any) -> None self[name] = value @@ -57,6 +112,7 @@ class GzipDecompressor(object): self.decompressobj = zlib.decompressobj(16 + zlib.MAX_WBITS) def decompress(self, value, max_length=None): + # type: (bytes, Optional[int]) -> bytes """Decompress a chunk, returning newly-available data. Some data may be buffered for later processing; `flush` must @@ -71,11 +127,13 @@ class GzipDecompressor(object): @property def unconsumed_tail(self): + # type: () -> bytes """Returns the unconsumed portion left over """ return self.decompressobj.unconsumed_tail def flush(self): + # type: () -> bytes """Return any remaining buffered data not yet returned by decompress. Also checks for errors such as truncated input. @@ -84,26 +142,8 @@ class GzipDecompressor(object): return self.decompressobj.flush() -# Fake unicode literal support: Python 3.2 doesn't have the u'' marker for -# literal strings, and alternative solutions like "from __future__ import -# unicode_literals" have other problems (see PEP 414). u() can be applied -# to ascii strings that include \u escapes (but they must not contain -# literal non-ascii characters). -if not isinstance(b'', type('')): - def u(s): - return s - unicode_type = str - basestring_type = str -else: - def u(s): - return s.decode('unicode_escape') - # These names don't exist in py3, so use noqa comments to disable - # warnings in flake8. - unicode_type = unicode # noqa - basestring_type = basestring # noqa - - def import_object(name): + # type: (_BaseString) -> Any """Imports an object by name. import_object('x') is equivalent to 'import x'. @@ -121,8 +161,8 @@ def import_object(name): ... ImportError: No module named missing_module """ - if isinstance(name, unicode_type) and str is not unicode_type: - # On python 2 a byte string is required. + if not isinstance(name, str): + # on python 2 a byte string is required. name = name.encode('utf-8') if name.count('.') == 0: return __import__(name, None, None) @@ -135,35 +175,39 @@ def import_object(name): raise ImportError("No module named %s" % parts[-1]) -# Deprecated alias that was used before we dropped py25 support. -# Left here in case anyone outside Tornado is using it. -bytes_type = bytes - -if sys.version_info > (3,): - exec(""" +# Stubs to make mypy happy (and later for actual type-checking). def raise_exc_info(exc_info): - raise exc_info[1].with_traceback(exc_info[2]) + # type: (Tuple[type, BaseException, types.TracebackType]) -> None + pass + def exec_in(code, glob, loc=None): - if isinstance(code, str): + # type: (Any, Dict[str, Any], Optional[Mapping[str, Any]]) -> Any + if isinstance(code, basestring_type): + # exec(string) inherits the caller's future imports; compile + # the string first to prevent that. code = compile(code, '', 'exec', dont_inherit=True) exec(code, glob, loc) + + +if PY3: + exec(""" +def raise_exc_info(exc_info): + try: + raise exc_info[1].with_traceback(exc_info[2]) + finally: + exc_info = None + """) else: exec(""" def raise_exc_info(exc_info): raise exc_info[0], exc_info[1], exc_info[2] - -def exec_in(code, glob, loc=None): - if isinstance(code, basestring): - # exec(string) inherits the caller's future imports; compile - # the string first to prevent that. - code = compile(code, '', 'exec', dont_inherit=True) - exec code in glob, loc """) def errno_from_exception(e): + # type: (BaseException) -> Optional[int] """Provides the errno from an Exception object. There are cases that the errno attribute was not set so we pull @@ -174,13 +218,41 @@ def errno_from_exception(e): """ if hasattr(e, 'errno'): - return e.errno + return e.errno # type: ignore elif e.args: return e.args[0] else: return None +_alphanum = frozenset( + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") + + +def _re_unescape_replacement(match): + # type: (Match[str]) -> str + group = match.group(1) + if group[0] in _alphanum: + raise ValueError("cannot unescape '\\\\%s'" % group[0]) + return group + + +_re_unescape_pattern = re.compile(r'\\(.)', re.DOTALL) + + +def re_unescape(s): + # type: (str) -> str + """Unescape a string escaped by `re.escape`. + + May raise ``ValueError`` for regular expressions which could not + have been produced by `re.escape` (for example, strings containing + ``\d`` cannot be unescaped). + + .. versionadded:: 4.4 + """ + return _re_unescape_pattern.sub(_re_unescape_replacement, s) + + class Configurable(object): """Base class for configurable interfaces. @@ -201,8 +273,8 @@ class Configurable(object): `configurable_base` and `configurable_default`, and use the instance method `initialize` instead of ``__init__``. """ - __impl_class = None - __impl_kwargs = None + __impl_class = None # type: type + __impl_kwargs = None # type: Dict[str, Any] def __new__(cls, *args, **kwargs): base = cls.configurable_base() @@ -223,6 +295,9 @@ class Configurable(object): @classmethod def configurable_base(cls): + # type: () -> Any + # TODO: This class needs https://github.com/python/typing/issues/107 + # to be fully typeable. """Returns the base class of a configurable hierarchy. This will normally return the class in which it is defined. @@ -232,10 +307,12 @@ class Configurable(object): @classmethod def configurable_default(cls): + # type: () -> type """Returns the implementation class to be used if none is configured.""" raise NotImplementedError() def initialize(self): + # type: () -> None """Initialize a `Configurable` subclass instance. Configurable classes should use `initialize` instead of ``__init__``. @@ -246,6 +323,7 @@ class Configurable(object): @classmethod def configure(cls, impl, **kwargs): + # type: (Any, **Any) -> None """Sets the class to use when the base class is instantiated. Keyword arguments will be saved and added to the arguments passed @@ -253,7 +331,7 @@ class Configurable(object): some parameters. """ base = cls.configurable_base() - if isinstance(impl, (unicode_type, bytes)): + if isinstance(impl, (str, unicode_type)): impl = import_object(impl) if impl is not None and not issubclass(impl, cls): raise ValueError("Invalid subclass of %s" % cls) @@ -262,6 +340,7 @@ class Configurable(object): @classmethod def configured_class(cls): + # type: () -> type """Returns the currently configured class.""" base = cls.configurable_base() if cls.__impl_class is None: @@ -270,11 +349,13 @@ class Configurable(object): @classmethod def _save_configuration(cls): + # type: () -> Tuple[type, Dict[str, Any]] base = cls.configurable_base() return (base.__impl_class, base.__impl_kwargs) @classmethod def _restore_configuration(cls, saved): + # type: (Tuple[type, Dict[str, Any]]) -> None base = cls.configurable_base() base.__impl_class = saved[0] base.__impl_kwargs = saved[1] @@ -288,6 +369,7 @@ class ArgReplacer(object): and similar wrappers. """ def __init__(self, func, name): + # type: (Callable, str) -> None self.name = name try: self.arg_pos = self._getargnames(func).index(name) @@ -296,6 +378,7 @@ class ArgReplacer(object): self.arg_pos = None def _getargnames(self, func): + # type: (Callable) -> List[str] try: return getargspec(func).args except TypeError: @@ -306,11 +389,12 @@ class ArgReplacer(object): # getargspec that we need here. Note that for static # functions the @cython.binding(True) decorator must # be used (for methods it works out of the box). - code = func.func_code + code = func.func_code # type: ignore return code.co_varnames[:code.co_argcount] raise def get_old_value(self, args, kwargs, default=None): + # type: (List[Any], Dict[str, Any], Any) -> Any """Returns the old value of the named argument without replacing it. Returns ``default`` if the argument is not present. @@ -321,6 +405,7 @@ class ArgReplacer(object): return kwargs.get(self.name, default) def replace(self, new_value, args, kwargs): + # type: (Any, List[Any], Dict[str, Any]) -> Tuple[Any, List[Any], Dict[str, Any]] """Replace the named argument in ``args, kwargs`` with ``new_value``. Returns ``(old_value, args, kwargs)``. The returned ``args`` and @@ -343,11 +428,13 @@ class ArgReplacer(object): def timedelta_to_seconds(td): + # type: (datetime.timedelta) -> float """Equivalent to td.total_seconds() (introduced in python 2.7).""" return (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10 ** 6) / float(10 ** 6) def _websocket_mask_python(mask, data): + # type: (bytes, bytes) -> bytes """Websocket masking function. `mask` is a `bytes` object of length 4; `data` is a `bytes` object of any length. @@ -356,17 +443,18 @@ def _websocket_mask_python(mask, data): This pure-python implementation may be replaced by an optimized version when available. """ - mask = array.array("B", mask) - unmasked = array.array("B", data) + mask_arr = array.array("B", mask) + unmasked_arr = array.array("B", data) for i in xrange(len(data)): - unmasked[i] = unmasked[i] ^ mask[i % 4] - if hasattr(unmasked, 'tobytes'): + unmasked_arr[i] = unmasked_arr[i] ^ mask_arr[i % 4] + if PY3: # tostring was deprecated in py32. It hasn't been removed, # but since we turn on deprecation warnings in our tests # we need to use the right one. - return unmasked.tobytes() + return unmasked_arr.tobytes() else: - return unmasked.tostring() + return unmasked_arr.tostring() + if (os.environ.get('TORNADO_NO_EXTENSION') or os.environ.get('TORNADO_EXTENSION') == '0'): diff --git a/server/www/packages/packages-common/tornado/web.py b/server/www/packages/packages-common/tornado/web.py index 1c2ac8c..d79889f 100644 --- a/server/www/packages/packages-common/tornado/web.py +++ b/server/www/packages/packages-common/tornado/web.py @@ -56,7 +56,7 @@ request. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import base64 import binascii @@ -77,6 +77,7 @@ import time import tornado import traceback import types +from inspect import isclass from io import BytesIO from tornado.concurrent import Future @@ -89,25 +90,32 @@ from tornado.log import access_log, app_log, gen_log from tornado import stack_context from tornado import template from tornado.escape import utf8, _unicode -from tornado.util import (import_object, ObjectDict, raise_exc_info, - unicode_type, _websocket_mask) -from tornado.httputil import split_host_and_port +from tornado.routing import (AnyMatches, DefaultHostMatches, HostMatches, + ReversibleRouter, Rule, ReversibleRuleRouter, + URLSpec) +from tornado.util import (ObjectDict, raise_exc_info, + unicode_type, _websocket_mask, PY3) +url = URLSpec + +if PY3: + import http.cookies as Cookie + import urllib.parse as urlparse + from urllib.parse import urlencode +else: + import Cookie + import urlparse + from urllib import urlencode try: - import Cookie # py2 -except ImportError: - import http.cookies as Cookie # py3 + import typing # noqa -try: - import urlparse # py2 + # The following types are accepted by RequestHandler.set_header + # and related methods. + _HeaderTypes = typing.Union[bytes, unicode_type, + numbers.Integral, datetime.datetime] except ImportError: - import urllib.parse as urlparse # py3 - -try: - from urllib import urlencode # py2 -except ImportError: - from urllib.parse import urlencode # py3 + pass MIN_SUPPORTED_SIGNED_VALUE_VERSION = 1 @@ -152,7 +160,7 @@ class RequestHandler(object): SUPPORTED_METHODS = ("GET", "HEAD", "POST", "DELETE", "PATCH", "PUT", "OPTIONS") - _template_loaders = {} # {path: template.BaseLoader} + _template_loaders = {} # type: typing.Dict[str, template.BaseLoader] _template_loader_lock = threading.Lock() _remove_control_chars_regex = re.compile(r"[\x00-\x08\x0e-\x1f]") @@ -166,6 +174,7 @@ class RequestHandler(object): self._auto_finish = True self._transforms = None # will be set in _execute self._prepared_future = None + self._headers = None # type: httputil.HTTPHeaders self.path_args = None self.path_kwargs = None self.ui = ObjectDict((n, self._ui_method(m)) for n, m in @@ -183,7 +192,7 @@ class RequestHandler(object): self.initialize(**kwargs) def initialize(self): - """Hook for subclass initialization. + """Hook for subclass initialization. Called for each request. A dictionary passed as the third argument of a url spec will be supplied as keyword arguments to initialize(). @@ -313,13 +322,14 @@ class RequestHandler(object): try: self._reason = httputil.responses[status_code] except KeyError: - raise ValueError("unknown status code %d", status_code) + raise ValueError("unknown status code %d" % status_code) def get_status(self): """Returns the status code for our response.""" return self._status_code def set_header(self, name, value): + # type: (str, _HeaderTypes) -> None """Sets the given response header name and value. If a datetime is given, we automatically format it according to the @@ -329,6 +339,7 @@ class RequestHandler(object): self._headers[name] = self._convert_header_value(value) def add_header(self, name, value): + # type: (str, _HeaderTypes) -> None """Adds the given response header and value. Unlike `set_header`, `add_header` may be called multiple times @@ -345,13 +356,25 @@ class RequestHandler(object): if name in self._headers: del self._headers[name] - _INVALID_HEADER_CHAR_RE = re.compile(br"[\x00-\x1f]") + _INVALID_HEADER_CHAR_RE = re.compile(r"[\x00-\x1f]") def _convert_header_value(self, value): - if isinstance(value, bytes): - pass - elif isinstance(value, unicode_type): - value = value.encode('utf-8') + # type: (_HeaderTypes) -> str + + # Convert the input value to a str. This type check is a bit + # subtle: The bytes case only executes on python 3, and the + # unicode case only executes on python 2, because the other + # cases are covered by the first match for str. + if isinstance(value, str): + retval = value + elif isinstance(value, bytes): # py3 + # Non-ascii characters in headers are not well supported, + # but if you pass bytes, use latin1 so they pass through as-is. + retval = value.decode('latin1') + elif isinstance(value, unicode_type): # py2 + # TODO: This is inconsistent with the use of latin1 above, + # but it's been that way for a long time. Should it change? + retval = escape.utf8(value) elif isinstance(value, numbers.Integral): # return immediately since we know the converted value will be safe return str(value) @@ -361,11 +384,11 @@ class RequestHandler(object): raise TypeError("Unsupported header value %r" % value) # If \n is allowed into the header, it is possible to inject # additional headers or split the request. - if RequestHandler._INVALID_HEADER_CHAR_RE.search(value): - raise ValueError("Unsafe header value %r", value) - return value + if RequestHandler._INVALID_HEADER_CHAR_RE.search(retval): + raise ValueError("Unsafe header value %r", retval) + return retval - _ARG_DEFAULT = [] + _ARG_DEFAULT = object() def get_argument(self, name, default=_ARG_DEFAULT, strip=True): """Returns the value of the argument with the given name. @@ -509,7 +532,7 @@ class RequestHandler(object): Additional keyword arguments are set on the Cookie.Morsel directly. - See http://docs.python.org/library/cookie.html#morsel-objects + See https://docs.python.org/2/library/cookie.html#Cookie.Morsel for available attributes. """ # The cookie library only accepts type str, in both python 2 and 3 @@ -696,6 +719,8 @@ class RequestHandler(object): def render(self, template_name, **kwargs): """Renders the template with the given arguments as the response.""" + if self._finished: + raise RuntimeError("Cannot render() after finish()") html = self.render_string(template_name, **kwargs) # Insert the additional JS and CSS added by the modules on the page @@ -731,45 +756,21 @@ class RequestHandler(object): if body_part: html_bodies.append(utf8(body_part)) - def is_absolute(path): - return any(path.startswith(x) for x in ["/", "http:", "https:"]) if js_files: # Maintain order of JavaScript files given by modules - paths = [] - unique_paths = set() - for path in js_files: - if not is_absolute(path): - path = self.static_url(path) - if path not in unique_paths: - paths.append(path) - unique_paths.add(path) - js = ''.join('' - for p in paths) + js = self.render_linked_js(js_files) sloc = html.rindex(b'') html = html[:sloc] + utf8(js) + b'\n' + html[sloc:] if js_embed: - js = b'' + js = self.render_embed_js(js_embed) sloc = html.rindex(b'') html = html[:sloc] + js + b'\n' + html[sloc:] if css_files: - paths = [] - unique_paths = set() - for path in css_files: - if not is_absolute(path): - path = self.static_url(path) - if path not in unique_paths: - paths.append(path) - unique_paths.add(path) - css = ''.join('' - for p in paths) + css = self.render_linked_css(css_files) hloc = html.index(b'') html = html[:hloc] + utf8(css) + b'\n' + html[hloc:] if css_embed: - css = b'' + css = self.render_embed_css(css_embed) hloc = html.index(b'') html = html[:hloc] + css + b'\n' + html[hloc:] if html_heads: @@ -780,6 +781,64 @@ class RequestHandler(object): html = html[:hloc] + b''.join(html_bodies) + b'\n' + html[hloc:] self.finish(html) + def render_linked_js(self, js_files): + """Default method used to render the final js links for the + rendered webpage. + + Override this method in a sub-classed controller to change the output. + """ + paths = [] + unique_paths = set() + + for path in js_files: + if not is_absolute(path): + path = self.static_url(path) + if path not in unique_paths: + paths.append(path) + unique_paths.add(path) + + return ''.join('' + for p in paths) + + def render_embed_js(self, js_embed): + """Default method used to render the final embedded js for the + rendered webpage. + + Override this method in a sub-classed controller to change the output. + """ + return b'' + + def render_linked_css(self, css_files): + """Default method used to render the final css links for the + rendered webpage. + + Override this method in a sub-classed controller to change the output. + """ + paths = [] + unique_paths = set() + + for path in css_files: + if not is_absolute(path): + path = self.static_url(path) + if path not in unique_paths: + paths.append(path) + unique_paths.add(path) + + return ''.join('' + for p in paths) + + def render_embed_css(self, css_embed): + """Default method used to render the final embedded css for the + rendered webpage. + + Override this method in a sub-classed controller to change the output. + """ + return b'' + def render_string(self, template_name, **kwargs): """Generate the given template with the given arguments. @@ -915,8 +974,8 @@ class RequestHandler(object): if self.check_etag_header(): self._write_buffer = [] self.set_status(304) - if self._status_code == 304: - assert not self._write_buffer, "Cannot send body with 304" + if self._status_code in (204, 304): + assert not self._write_buffer, "Cannot send body with %s" % self._status_code self._clear_headers_for_304() elif "Content-Length" not in self._headers: content_length = sum(len(part) for part in self._write_buffer) @@ -934,6 +993,9 @@ class RequestHandler(object): self._log() self._finished = True self.on_finish() + self._break_cycles() + + def _break_cycles(self): # Break up a reference cycle between this handler and the # _ui_module closures to allow for faster GC on CPython. self.ui = None @@ -1072,8 +1134,8 @@ class RequestHandler(object): def get_current_user(self): user_cookie = self.get_secure_cookie("user") - if user_cookie: - return json.loads(user_cookie) + if user_cookie: + return json.loads(user_cookie) return None * It may be set as a normal variable, typically from an overridden @@ -1089,7 +1151,7 @@ class RequestHandler(object): may not, so the latter form is necessary if loading the user requires asynchronous operations. - The user object may any type of the application's choosing. + The user object may be any type of the application's choosing. """ if not hasattr(self, "_current_user"): self._current_user = self.get_current_user() @@ -1265,6 +1327,8 @@ class RequestHandler(object): raise HTTPError(403, "'_xsrf' argument missing from POST") _, token, _ = self._decode_xsrf_token(token) _, expected_token, _ = self._get_raw_xsrf_token() + if not token: + raise HTTPError(403, "'_xsrf' argument has invalid format") if not _time_independent_equals(utf8(token), utf8(expected_token)): raise HTTPError(403, "XSRF cookie does not match POST argument") @@ -1385,7 +1449,9 @@ class RequestHandler(object): match = True else: # Use a weak comparison when comparing entity-tags. - val = lambda x: x[2:] if x.startswith(b'W/') else x + def val(x): + return x[2:] if x.startswith(b'W/') else x + for etag in etags: if val(etag) == val(computed_etag): match = True @@ -1603,6 +1669,7 @@ def asynchronous(method): result = method(self, *args, **kwargs) if result is not None: result = gen.convert_yielded(result) + # If @asynchronous is used with @gen.coroutine, (but # not @gen.engine), we can automatically finish the # request when the future resolves. Additionally, @@ -1642,9 +1709,8 @@ def stream_request_body(cls): * The regular HTTP method (``post``, ``put``, etc) will be called after the entire body has been read. - There is a subtle interaction between ``data_received`` and asynchronous - ``prepare``: The first call to ``data_received`` may occur at any point - after the call to ``prepare`` has returned *or yielded*. + See the `file receiver demo `_ + for example usage. """ if not issubclass(cls, RequestHandler): raise TypeError("expected subclass of RequestHandler, got %r", cls) @@ -1702,7 +1768,38 @@ def addslash(method): return wrapper -class Application(httputil.HTTPServerConnectionDelegate): +class _ApplicationRouter(ReversibleRuleRouter): + """Routing implementation used internally by `Application`. + + Provides a binding between `Application` and `RequestHandler`. + This implementation extends `~.routing.ReversibleRuleRouter` in a couple of ways: + * it allows to use `RequestHandler` subclasses as `~.routing.Rule` target and + * it allows to use a list/tuple of rules as `~.routing.Rule` target. + ``process_rule`` implementation will substitute this list with an appropriate + `_ApplicationRouter` instance. + """ + + def __init__(self, application, rules=None): + assert isinstance(application, Application) + self.application = application + super(_ApplicationRouter, self).__init__(rules) + + def process_rule(self, rule): + rule = super(_ApplicationRouter, self).process_rule(rule) + + if isinstance(rule.target, (list, tuple)): + rule.target = _ApplicationRouter(self.application, rule.target) + + return rule + + def get_target_delegate(self, target, request, **target_params): + if isclass(target) and issubclass(target, RequestHandler): + return self.application.get_handler_delegate(request, target, **target_params) + + return super(_ApplicationRouter, self).get_target_delegate(target, request, **target_params) + + +class Application(ReversibleRouter): """A collection of request handlers that make up a web application. Instances of this class are callable and can be passed directly to @@ -1715,20 +1812,35 @@ class Application(httputil.HTTPServerConnectionDelegate): http_server.listen(8080) ioloop.IOLoop.current().start() - The constructor for this class takes in a list of `URLSpec` objects - or (regexp, request_class) tuples. When we receive requests, we - iterate over the list in order and instantiate an instance of the - first request class whose regexp matches the request path. - The request class can be specified as either a class object or a - (fully-qualified) name. + The constructor for this class takes in a list of `~.routing.Rule` + objects or tuples of values corresponding to the arguments of + `~.routing.Rule` constructor: ``(matcher, target, [target_kwargs], [name])``, + the values in square brackets being optional. The default matcher is + `~.routing.PathMatches`, so ``(regexp, target)`` tuples can also be used + instead of ``(PathMatches(regexp), target)``. - Each tuple can contain additional elements, which correspond to the - arguments to the `URLSpec` constructor. (Prior to Tornado 3.2, - only tuples of two or three elements were allowed). + A common routing target is a `RequestHandler` subclass, but you can also + use lists of rules as a target, which create a nested routing configuration:: - A dictionary may be passed as the third element of the tuple, - which will be used as keyword arguments to the handler's - constructor and `~RequestHandler.initialize` method. This pattern + application = web.Application([ + (HostMatches("example.com"), [ + (r"/", MainPageHandler), + (r"/feed", FeedHandler), + ]), + ]) + + In addition to this you can use nested `~.routing.Router` instances, + `~.httputil.HTTPMessageDelegate` subclasses and callables as routing targets + (see `~.routing` module docs for more information). + + When we receive requests, we iterate over the list in order and + instantiate an instance of the first request class whose regexp + matches the request path. The request class can be specified as + either a class object or a (fully-qualified) name. + + A dictionary may be passed as the third element (``target_kwargs``) + of the tuple, which will be used as keyword arguments to the handler's + constructor and `~RequestHandler.initialize` method. This pattern is used for the `StaticFileHandler` in this example (note that a `StaticFileHandler` can be installed automatically with the static_path setting described below):: @@ -1744,6 +1856,9 @@ class Application(httputil.HTTPServerConnectionDelegate): (r"/article/([0-9]+)", ArticleHandler), ]) + If there's no match for the current request's host, then ``default_host`` + parameter value is matched against host regular expressions. + You can serve static files by sending the ``static_path`` setting as a keyword argument. We will serve those files from the ``/static/`` URI (this is configurable with the @@ -1752,8 +1867,10 @@ class Application(httputil.HTTPServerConnectionDelegate): `StaticFileHandler` can be specified with the ``static_handler_class`` setting. + .. versionchanged:: 4.5 + Integration with the new `tornado.routing` module. """ - def __init__(self, handlers=None, default_host="", transforms=None, + def __init__(self, handlers=None, default_host=None, transforms=None, **settings): if transforms is None: self.transforms = [] @@ -1761,8 +1878,6 @@ class Application(httputil.HTTPServerConnectionDelegate): self.transforms.append(GZipContentEncoding) else: self.transforms = transforms - self.handlers = [] - self.named_handlers = {} self.default_host = default_host self.settings = settings self.ui_modules = {'linkify': _linkify, @@ -1785,8 +1900,6 @@ class Application(httputil.HTTPServerConnectionDelegate): r"/(favicon\.ico)", r"/(robots\.txt)"]: handlers.insert(0, (pattern, static_handler_class, static_handler_args)) - if handlers: - self.add_handlers(".*$", handlers) if self.settings.get('debug'): self.settings.setdefault('autoreload', True) @@ -1794,6 +1907,11 @@ class Application(httputil.HTTPServerConnectionDelegate): self.settings.setdefault('static_hash_cache', False) self.settings.setdefault('serve_traceback', True) + self.wildcard_router = _ApplicationRouter(self, handlers) + self.default_router = _ApplicationRouter(self, [ + Rule(AnyMatches(), self.wildcard_router) + ]) + # Automatically reload modified modules if self.settings.get('autoreload'): from tornado import autoreload @@ -1831,47 +1949,20 @@ class Application(httputil.HTTPServerConnectionDelegate): Host patterns are processed sequentially in the order they were added. All matching patterns will be considered. """ - if not host_pattern.endswith("$"): - host_pattern += "$" - handlers = [] - # The handlers with the wildcard host_pattern are a special - # case - they're added in the constructor but should have lower - # precedence than the more-precise handlers added later. - # If a wildcard handler group exists, it should always be last - # in the list, so insert new groups just before it. - if self.handlers and self.handlers[-1][0].pattern == '.*$': - self.handlers.insert(-1, (re.compile(host_pattern), handlers)) - else: - self.handlers.append((re.compile(host_pattern), handlers)) + host_matcher = HostMatches(host_pattern) + rule = Rule(host_matcher, _ApplicationRouter(self, host_handlers)) - for spec in host_handlers: - if isinstance(spec, (tuple, list)): - assert len(spec) in (2, 3, 4) - spec = URLSpec(*spec) - handlers.append(spec) - if spec.name: - if spec.name in self.named_handlers: - app_log.warning( - "Multiple handlers named %s; replacing previous value", - spec.name) - self.named_handlers[spec.name] = spec + self.default_router.rules.insert(-1, rule) + + if self.default_host is not None: + self.wildcard_router.add_rules([( + DefaultHostMatches(self, host_matcher.host_pattern), + host_handlers + )]) def add_transform(self, transform_class): self.transforms.append(transform_class) - def _get_host_handlers(self, request): - host = split_host_and_port(request.host.lower())[0] - matches = [] - for pattern, handlers in self.handlers: - if pattern.match(host): - matches.extend(handlers) - # Look for default host if not behind load balancer (for debugging) - if not matches and "X-Real-Ip" not in request.headers: - for pattern, handlers in self.handlers: - if pattern.match(self.default_host): - matches.extend(handlers) - return matches or None - def _load_ui_methods(self, methods): if isinstance(methods, types.ModuleType): self._load_ui_methods(dict((n, getattr(methods, n)) @@ -1901,16 +1992,40 @@ class Application(httputil.HTTPServerConnectionDelegate): except TypeError: pass - def start_request(self, server_conn, request_conn): - # Modern HTTPServer interface - return _RequestDispatcher(self, request_conn) - def __call__(self, request): # Legacy HTTPServer interface - dispatcher = _RequestDispatcher(self, None) - dispatcher.set_request(request) + dispatcher = self.find_handler(request) return dispatcher.execute() + def find_handler(self, request, **kwargs): + route = self.default_router.find_handler(request) + if route is not None: + return route + + if self.settings.get('default_handler_class'): + return self.get_handler_delegate( + request, + self.settings['default_handler_class'], + self.settings.get('default_handler_args', {})) + + return self.get_handler_delegate( + request, ErrorHandler, {'status_code': 404}) + + def get_handler_delegate(self, request, target_class, target_kwargs=None, + path_args=None, path_kwargs=None): + """Returns `~.httputil.HTTPMessageDelegate` that can serve a request + for application and `RequestHandler` subclass. + + :arg httputil.HTTPServerRequest request: current HTTP request. + :arg RequestHandler target_class: a `RequestHandler` class. + :arg dict target_kwargs: keyword arguments for ``target_class`` constructor. + :arg list path_args: positional arguments for ``target_class`` HTTP method that + will be executed while handling a request (``get``, ``post`` or any other). + :arg dict path_kwargs: keyword arguments for ``target_class`` HTTP method. + """ + return _HandlerDelegate( + self, request, target_class, target_kwargs, path_args, path_kwargs) + def reverse_url(self, name, *args): """Returns a URL path for handler named ``name`` @@ -1920,8 +2035,10 @@ class Application(httputil.HTTPServerConnectionDelegate): They will be converted to strings if necessary, encoded as utf8, and url-escaped. """ - if name in self.named_handlers: - return self.named_handlers[name].reverse(*args) + reversed_url = self.default_router.reverse_url(name, *args) + if reversed_url is not None: + return reversed_url + raise KeyError("%s not found in named urls" % name) def log_request(self, handler): @@ -1946,67 +2063,24 @@ class Application(httputil.HTTPServerConnectionDelegate): handler._request_summary(), request_time) -class _RequestDispatcher(httputil.HTTPMessageDelegate): - def __init__(self, application, connection): +class _HandlerDelegate(httputil.HTTPMessageDelegate): + def __init__(self, application, request, handler_class, handler_kwargs, + path_args, path_kwargs): self.application = application - self.connection = connection - self.request = None + self.connection = request.connection + self.request = request + self.handler_class = handler_class + self.handler_kwargs = handler_kwargs or {} + self.path_args = path_args or [] + self.path_kwargs = path_kwargs or {} self.chunks = [] - self.handler_class = None - self.handler_kwargs = None - self.path_args = [] - self.path_kwargs = {} + self.stream_request_body = _has_stream_request_body(self.handler_class) def headers_received(self, start_line, headers): - self.set_request(httputil.HTTPServerRequest( - connection=self.connection, start_line=start_line, - headers=headers)) if self.stream_request_body: self.request.body = Future() return self.execute() - def set_request(self, request): - self.request = request - self._find_handler() - self.stream_request_body = _has_stream_request_body(self.handler_class) - - def _find_handler(self): - # Identify the handler to use as soon as we have the request. - # Save url path arguments for later. - app = self.application - handlers = app._get_host_handlers(self.request) - if not handlers: - self.handler_class = RedirectHandler - self.handler_kwargs = dict(url="%s://%s/" - % (self.request.protocol, - app.default_host)) - return - for spec in handlers: - match = spec.regex.match(self.request.path) - if match: - self.handler_class = spec.handler_class - self.handler_kwargs = spec.kwargs - if spec.regex.groups: - # Pass matched groups to the handler. Since - # match.groups() includes both named and - # unnamed groups, we want to use either groups - # or groupdict but not both. - if spec.regex.groupindex: - self.path_kwargs = dict( - (str(k), _unquote_or_none(v)) - for (k, v) in match.groupdict().items()) - else: - self.path_args = [_unquote_or_none(s) - for s in match.groups()] - return - if app.settings.get('default_handler_class'): - self.handler_class = app.settings['default_handler_class'] - self.handler_kwargs = app.settings.get( - 'default_handler_args', {}) - else: - self.handler_class = ErrorHandler - self.handler_kwargs = dict(status_code=404) - def data_received(self, data): if self.stream_request_body: return self.handler.data_received(data) @@ -2163,13 +2237,32 @@ class RedirectHandler(RequestHandler): application = web.Application([ (r"/oldpath", web.RedirectHandler, {"url": "/newpath"}), ]) + + `RedirectHandler` supports regular expression substitutions. E.g., to + swap the first and second parts of a path while preserving the remainder:: + + application = web.Application([ + (r"/(.*?)/(.*?)/(.*)", web.RedirectHandler, {"url": "/{1}/{0}/{2}"}), + ]) + + The final URL is formatted with `str.format` and the substrings that match + the capturing groups. In the above example, a request to "/a/b/c" would be + formatted like:: + + str.format("/{1}/{0}/{2}", "a", "b", "c") # -> "/b/a/c" + + Use Python's :ref:`format string syntax ` to customize how + values are substituted. + + .. versionchanged:: 4.5 + Added support for substitutions into the destination URL. """ def initialize(self, url, permanent=True): self._url = url self._permanent = permanent - def get(self): - self.redirect(self._url, permanent=self._permanent) + def get(self, *args): + self.redirect(self._url.format(*args), permanent=self._permanent) class StaticFileHandler(RequestHandler): @@ -2194,8 +2287,8 @@ class StaticFileHandler(RequestHandler): the ``path`` argument to the get() method (different than the constructor argument above); see `URLSpec` for details. - To serve a file like ``admin_index.mako`` automatically when a directory is - requested, set ``static_handler_args=dict(default_filename="admin_index.mako")`` + To serve a file like ``index.html`` automatically when a directory is + requested, set ``static_handler_args=dict(default_filename="index.html")`` in your application settings, or add ``default_filename`` as an initializer argument for your ``StaticFileHandler``. @@ -2240,7 +2333,7 @@ class StaticFileHandler(RequestHandler): """ CACHE_MAX_AGE = 86400 * 365 * 10 # 10 years - _static_hashes = {} + _static_hashes = {} # type: typing.Dict _lock = threading.Lock() # protects _static_hashes def initialize(self, path, default_filename=None): @@ -2693,6 +2786,7 @@ class OutputTransform(object): pass def transform_first_chunk(self, status_code, headers, chunk, finishing): + # type: (int, httputil.HTTPHeaders, bytes, bool) -> typing.Tuple[int, httputil.HTTPHeaders, bytes] return status_code, headers, chunk def transform_chunk(self, chunk, finishing): @@ -2713,7 +2807,8 @@ class GZipContentEncoding(OutputTransform): # beginning with "text/"). CONTENT_TYPES = set(["application/javascript", "application/x-javascript", "application/xml", "application/atom+xml", - "application/json", "application/xhtml+xml"]) + "application/json", "application/xhtml+xml", + "image/svg+xml"]) # Python's GzipFile defaults to level 9, while most other gzip # tools (including gzip itself) default to 6, which is probably a # better CPU/size tradeoff. @@ -2732,10 +2827,12 @@ class GZipContentEncoding(OutputTransform): return ctype.startswith('text/') or ctype in self.CONTENT_TYPES def transform_first_chunk(self, status_code, headers, chunk, finishing): + # type: (int, httputil.HTTPHeaders, bytes, bool) -> typing.Tuple[int, httputil.HTTPHeaders, bytes] + # TODO: can/should this type be inherited from the superclass? if 'Vary' in headers: - headers['Vary'] += b', Accept-Encoding' + headers['Vary'] += ', Accept-Encoding' else: - headers['Vary'] = b'Accept-Encoding' + headers['Vary'] = 'Accept-Encoding' if self._gzipping: ctype = _unicode(headers.get("Content-Type", "")).split(";")[0] self._gzipping = self._compressible_type(ctype) and \ @@ -2961,90 +3058,6 @@ class _UIModuleNamespace(object): raise AttributeError(str(e)) -class URLSpec(object): - """Specifies mappings between URLs and handlers.""" - def __init__(self, pattern, handler, kwargs=None, name=None): - """Parameters: - - * ``pattern``: Regular expression to be matched. Any groups - in the regex will be passed in to the handler's get/post/etc - methods as arguments. - - * ``handler``: `RequestHandler` subclass to be invoked. - - * ``kwargs`` (optional): A dictionary of additional arguments - to be passed to the handler's constructor. - - * ``name`` (optional): A name for this handler. Used by - `Application.reverse_url`. - """ - if not pattern.endswith('$'): - pattern += '$' - self.regex = re.compile(pattern) - assert len(self.regex.groupindex) in (0, self.regex.groups), \ - ("groups in url regexes must either be all named or all " - "positional: %r" % self.regex.pattern) - - if isinstance(handler, str): - # import the Module and instantiate the class - # Must be a fully qualified name (module.ClassName) - handler = import_object(handler) - - self.handler_class = handler - self.kwargs = kwargs or {} - self.name = name - self._path, self._group_count = self._find_groups() - - def __repr__(self): - return '%s(%r, %s, kwargs=%r, name=%r)' % \ - (self.__class__.__name__, self.regex.pattern, - self.handler_class, self.kwargs, self.name) - - def _find_groups(self): - """Returns a tuple (reverse string, group count) for a url. - - For example: Given the url pattern /([0-9]{4})/([a-z-]+)/, this method - would return ('/%s/%s/', 2). - """ - pattern = self.regex.pattern - if pattern.startswith('^'): - pattern = pattern[1:] - if pattern.endswith('$'): - pattern = pattern[:-1] - - if self.regex.groups != pattern.count('('): - # The pattern is too complicated for our simplistic matching, - # so we can't support reversing it. - return (None, None) - - pieces = [] - for fragment in pattern.split('('): - if ')' in fragment: - paren_loc = fragment.index(')') - if paren_loc >= 0: - pieces.append('%s' + fragment[paren_loc + 1:]) - else: - pieces.append(fragment) - - return (''.join(pieces), self.regex.groups) - - def reverse(self, *args): - assert self._path is not None, \ - "Cannot reverse url regex " + self.regex.pattern - assert len(args) == self._group_count, "required number of arguments "\ - "not found" - if not len(args): - return self._path - converted_args = [] - for a in args: - if not isinstance(a, (unicode_type, bytes)): - a = str(a) - converted_args.append(escape.url_escape(utf8(a), plus=False)) - return self._path % tuple(converted_args) - -url = URLSpec - - if hasattr(hmac, 'compare_digest'): # python 3.3 _time_independent_equals = hmac.compare_digest else: @@ -3109,6 +3122,7 @@ def create_signed_value(secret, name, value, version=None, clock=None, else: raise ValueError("Unsupported version %d" % version) + # A leading version number in decimal # with no leading zeros, followed by a pipe. _signed_value_version_re = re.compile(br"^([1-9][0-9]*)\|(.*)$") @@ -3267,13 +3281,5 @@ def _create_signature_v2(secret, s): return utf8(hash.hexdigest()) -def _unquote_or_none(s): - """None-safe wrapper around url_unescape to handle unamteched optional - groups correctly. - - Note that args are passed as bytes so the handler can decide what - encoding to use. - """ - if s is None: - return s - return escape.url_unescape(s, encoding=None, plus=False) +def is_absolute(path): + return any(path.startswith(x) for x in ["/", "http:", "https:"]) diff --git a/server/www/packages/packages-common/tornado/websocket.py b/server/www/packages/packages-common/tornado/websocket.py index 11e5266..69437ee 100644 --- a/server/www/packages/packages-common/tornado/websocket.py +++ b/server/www/packages/packages-common/tornado/websocket.py @@ -16,7 +16,7 @@ the protocol (known as "draft 76") and are not compatible with this module. Removed support for the draft 76 protocol version. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function # Author: Jacob Kristhammar, 2010 import base64 @@ -30,24 +30,20 @@ import zlib from tornado.concurrent import TracebackFuture from tornado.escape import utf8, native_str, to_unicode -from tornado import httpclient, httputil -from tornado.ioloop import IOLoop +from tornado import gen, httpclient, httputil +from tornado.ioloop import IOLoop, PeriodicCallback from tornado.iostream import StreamClosedError from tornado.log import gen_log, app_log from tornado import simple_httpclient from tornado.tcpclient import TCPClient -from tornado.util import _websocket_mask +from tornado.util import _websocket_mask, PY3 -try: +if PY3: from urllib.parse import urlparse # py2 -except ImportError: + xrange = range +else: from urlparse import urlparse # py3 -try: - xrange # py2 -except NameError: - xrange = range # py3 - class WebSocketError(Exception): pass @@ -69,6 +65,10 @@ class WebSocketHandler(tornado.web.RequestHandler): override `open` and `on_close` to handle opened and closed connections. + Custom upgrade response headers can be sent by overriding + `~tornado.web.RequestHandler.set_default_headers` or + `~tornado.web.RequestHandler.prepare`. + See http://dev.w3.org/html5/websockets/ for details on the JavaScript interface. The protocol is specified at http://tools.ietf.org/html/rfc6455. @@ -126,10 +126,20 @@ class WebSocketHandler(tornado.web.RequestHandler): to show the "accept this certificate" dialog but has nowhere to show it. You must first visit a regular HTML page using the same certificate to accept it before the websocket connection will succeed. + + If the application setting ``websocket_ping_interval`` has a non-zero + value, a ping will be sent periodically, and the connection will be + closed if a response is not received before the ``websocket_ping_timeout``. + + Messages larger than the ``websocket_max_message_size`` application setting + (default 10MiB) will not be accepted. + + .. versionchanged:: 4.5 + Added ``websocket_ping_interval``, ``websocket_ping_timeout``, and + ``websocket_max_message_size``. """ def __init__(self, application, request, **kwargs): - tornado.web.RequestHandler.__init__(self, application, request, - **kwargs) + super(WebSocketHandler, self).__init__(application, request, **kwargs) self.ws_connection = None self.close_code = None self.close_reason = None @@ -181,18 +191,42 @@ class WebSocketHandler(tornado.web.RequestHandler): gen_log.debug(log_msg) return - self.stream = self.request.connection.detach() - self.stream.set_close_callback(self.on_connection_close) - self.ws_connection = self.get_websocket_protocol() if self.ws_connection: self.ws_connection.accept_connection() else: - if not self.stream.closed(): - self.stream.write(tornado.escape.utf8( - "HTTP/1.1 426 Upgrade Required\r\n" - "Sec-WebSocket-Version: 7, 8, 13\r\n\r\n")) - self.stream.close() + self.set_status(426, "Upgrade Required") + self.set_header("Sec-WebSocket-Version", "7, 8, 13") + self.finish() + + stream = None + + @property + def ping_interval(self): + """The interval for websocket keep-alive pings. + + Set websocket_ping_interval = 0 to disable pings. + """ + return self.settings.get('websocket_ping_interval', None) + + @property + def ping_timeout(self): + """If no ping is received in this many seconds, + close the websocket connection (VPNs, etc. can fail to cleanly close ws connections). + Default is max of 3 pings or 30 seconds. + """ + return self.settings.get('websocket_ping_timeout', None) + + @property + def max_message_size(self): + """Maximum allowed message size. + + If the remote peer sends a message larger than this, the connection + will be closed. + + Default is 10MiB. + """ + return self.settings.get('websocket_max_message_size', None) def write_message(self, message, binary=False): """Sends the given message to the client of this Web Socket. @@ -236,11 +270,22 @@ class WebSocketHandler(tornado.web.RequestHandler): If this method returns None (the default), compression will be disabled. If it returns a dict (even an empty one), it will be enabled. The contents of the dict may be used to - control the memory and CPU usage of the compression, - but no such options are currently implemented. + control the following compression options: + + ``compression_level`` specifies the compression level. + + ``mem_level`` specifies the amount of memory used for the internal compression state. + + These parameters are documented in details here: + https://docs.python.org/3.6/library/zlib.html#zlib.compressobj .. versionadded:: 4.1 + + .. versionchanged:: 4.5 + + Added ``compression_level`` and ``mem_level``. """ + # TODO: Add wbits option. return None def open(self, *args, **kwargs): @@ -256,6 +301,10 @@ class WebSocketHandler(tornado.web.RequestHandler): """Handle incoming messages on the WebSocket This method must be overridden. + + .. versionchanged:: 4.5 + + ``on_message`` can be a coroutine. """ raise NotImplementedError @@ -269,6 +318,10 @@ class WebSocketHandler(tornado.web.RequestHandler): """Invoked when the response to a ping frame is received.""" pass + def on_ping(self, data): + """Invoked when the a ping frame is received.""" + pass + def on_close(self): """Invoked when the WebSocket is closed. @@ -320,6 +373,19 @@ class WebSocketHandler(tornado.web.RequestHandler): browsers, since WebSockets are allowed to bypass the usual same-origin policies and don't use CORS headers. + .. warning:: + + This is an important security measure; don't disable it + without understanding the security implications. In + particular, if your authentication is cookie-based, you + must either restrict the origins allowed by + ``check_origin()`` or implement your own XSRF-like + protection for websocket connections. See `these + `_ + `articles + `_ + for more. + To accept all cross-origin traffic (which was the default prior to Tornado 4.0), simply override this method to always return true:: @@ -334,6 +400,7 @@ class WebSocketHandler(tornado.web.RequestHandler): return parsed_origin.netloc.endswith(".mydomain.com") .. versionadded:: 4.0 + """ parsed_origin = urlparse(origin) origin = parsed_origin.netloc @@ -367,6 +434,16 @@ class WebSocketHandler(tornado.web.RequestHandler): if not self._on_close_called: self._on_close_called = True self.on_close() + self._break_cycles() + + def _break_cycles(self): + # WebSocketHandlers call finish() early, but we don't want to + # break up reference cycles (which makes it impossible to call + # self.render_string) until after we've really closed the + # connection (if it was established in the first place, + # indicated by status code 101). + if self.get_status() != 101 or self._on_close_called: + super(WebSocketHandler, self)._break_cycles() def send_error(self, *args, **kwargs): if self.stream is None: @@ -384,18 +461,17 @@ class WebSocketHandler(tornado.web.RequestHandler): return WebSocketProtocol13( self, compression_options=self.get_compression_options()) + def _attach_stream(self): + self.stream = self.request.connection.detach() + self.stream.set_close_callback(self.on_connection_close) + # disable non-WS methods + for method in ["write", "redirect", "set_header", "set_cookie", + "set_status", "flush", "finish"]: + setattr(self, method, _raise_not_supported_for_websockets) -def _wrap_method(method): - def _disallow_for_websocket(self, *args, **kwargs): - if self.stream is None: - method(self, *args, **kwargs) - else: - raise RuntimeError("Method not supported for Web Sockets") - return _disallow_for_websocket -for method in ["write", "redirect", "set_header", "set_cookie", - "set_status", "flush", "finish"]: - setattr(WebSocketHandler, method, - _wrap_method(getattr(WebSocketHandler, method))) + +def _raise_not_supported_for_websockets(*args, **kwargs): + raise RuntimeError("Method not supported for Web Sockets") class WebSocketProtocol(object): @@ -411,14 +487,20 @@ class WebSocketProtocol(object): def _run_callback(self, callback, *args, **kwargs): """Runs the given callback with exception handling. - On error, aborts the websocket connection and returns False. + If the callback is a coroutine, returns its Future. On error, aborts the + websocket connection and returns None. """ try: - callback(*args, **kwargs) + result = callback(*args, **kwargs) except Exception: app_log.error("Uncaught exception in %s", - self.request.path, exc_info=True) + getattr(self.request, 'path', None), exc_info=True) self._abort() + else: + if result is not None: + result = gen.convert_yielded(result) + self.stream.io_loop.add_future(result, lambda f: f.result()) + return result def on_connection_close(self): self._abort() @@ -432,7 +514,7 @@ class WebSocketProtocol(object): class _PerMessageDeflateCompressor(object): - def __init__(self, persistent, max_wbits): + def __init__(self, persistent, max_wbits, compression_options=None): if max_wbits is None: max_wbits = zlib.MAX_WBITS # There is no symbolic constant for the minimum wbits value. @@ -440,14 +522,24 @@ class _PerMessageDeflateCompressor(object): raise ValueError("Invalid max_wbits value %r; allowed range 8-%d", max_wbits, zlib.MAX_WBITS) self._max_wbits = max_wbits + + if compression_options is None or 'compression_level' not in compression_options: + self._compression_level = tornado.web.GZipContentEncoding.GZIP_LEVEL + else: + self._compression_level = compression_options['compression_level'] + + if compression_options is None or 'mem_level' not in compression_options: + self._mem_level = 8 + else: + self._mem_level = compression_options['mem_level'] + if persistent: self._compressor = self._create_compressor() else: self._compressor = None def _create_compressor(self): - return zlib.compressobj(tornado.web.GZipContentEncoding.GZIP_LEVEL, - zlib.DEFLATED, -self._max_wbits) + return zlib.compressobj(self._compression_level, zlib.DEFLATED, -self._max_wbits, self._mem_level) def compress(self, data): compressor = self._compressor or self._create_compressor() @@ -458,7 +550,7 @@ class _PerMessageDeflateCompressor(object): class _PerMessageDeflateDecompressor(object): - def __init__(self, persistent, max_wbits): + def __init__(self, persistent, max_wbits, compression_options=None): if max_wbits is None: max_wbits = zlib.MAX_WBITS if not (8 <= max_wbits <= zlib.MAX_WBITS): @@ -517,6 +609,9 @@ class WebSocketProtocol13(WebSocketProtocol): # the effect of compression, frame overhead, and control frames. self._wire_bytes_in = 0 self._wire_bytes_out = 0 + self.ping_callback = None + self.last_ping = 0 + self.last_pong = 0 def accept_connection(self): try: @@ -553,46 +648,42 @@ class WebSocketProtocol13(WebSocketProtocol): self.request.headers.get("Sec-Websocket-Key")) def _accept_connection(self): - subprotocol_header = '' subprotocols = self.request.headers.get("Sec-WebSocket-Protocol", '') subprotocols = [s.strip() for s in subprotocols.split(',')] if subprotocols: selected = self.handler.select_subprotocol(subprotocols) if selected: assert selected in subprotocols - subprotocol_header = ("Sec-WebSocket-Protocol: %s\r\n" - % selected) + self.handler.set_header("Sec-WebSocket-Protocol", selected) - extension_header = '' extensions = self._parse_extensions_header(self.request.headers) for ext in extensions: if (ext[0] == 'permessage-deflate' and self._compression_options is not None): # TODO: negotiate parameters if compression_options # specifies limits. - self._create_compressors('server', ext[1]) + self._create_compressors('server', ext[1], self._compression_options) if ('client_max_window_bits' in ext[1] and ext[1]['client_max_window_bits'] is None): # Don't echo an offered client_max_window_bits # parameter with no value. del ext[1]['client_max_window_bits'] - extension_header = ('Sec-WebSocket-Extensions: %s\r\n' % - httputil._encode_header( - 'permessage-deflate', ext[1])) + self.handler.set_header("Sec-WebSocket-Extensions", + httputil._encode_header( + 'permessage-deflate', ext[1])) break - if self.stream.closed(): - self._abort() - return - self.stream.write(tornado.escape.utf8( - "HTTP/1.1 101 Switching Protocols\r\n" - "Upgrade: websocket\r\n" - "Connection: Upgrade\r\n" - "Sec-WebSocket-Accept: %s\r\n" - "%s%s" - "\r\n" % (self._challenge_response(), - subprotocol_header, extension_header))) + self.handler.clear_header("Content-Type") + self.handler.set_status(101) + self.handler.set_header("Upgrade", "websocket") + self.handler.set_header("Connection", "Upgrade") + self.handler.set_header("Sec-WebSocket-Accept", self._challenge_response()) + self.handler.finish() + self.handler._attach_stream() + self.stream = self.handler.stream + + self.start_pinging() self._run_callback(self.handler.open, *self.handler.open_args, **self.handler.open_kwargs) self._receive_frame() @@ -622,7 +713,7 @@ class WebSocketProtocol13(WebSocketProtocol): else: raise ValueError("unsupported extension %r", ext) - def _get_compressor_options(self, side, agreed_parameters): + def _get_compressor_options(self, side, agreed_parameters, compression_options=None): """Converts a websocket agreed_parameters set to keyword arguments for our compressor objects. """ @@ -633,9 +724,10 @@ class WebSocketProtocol13(WebSocketProtocol): options['max_wbits'] = zlib.MAX_WBITS else: options['max_wbits'] = int(wbits_header) + options['compression_options'] = compression_options return options - def _create_compressors(self, side, agreed_parameters): + def _create_compressors(self, side, agreed_parameters, compression_options=None): # TODO: handle invalid parameters gracefully allowed_keys = set(['server_no_context_takeover', 'client_no_context_takeover', @@ -646,9 +738,9 @@ class WebSocketProtocol13(WebSocketProtocol): raise ValueError("unsupported compression parameter %r" % key) other_side = 'client' if (side == 'server') else 'server' self._compressor = _PerMessageDeflateCompressor( - **self._get_compressor_options(side, agreed_parameters)) + **self._get_compressor_options(side, agreed_parameters, compression_options)) self._decompressor = _PerMessageDeflateDecompressor( - **self._get_compressor_options(other_side, agreed_parameters)) + **self._get_compressor_options(other_side, agreed_parameters, compression_options)) def _write_frame(self, fin, opcode, data, flags=0): if fin: @@ -729,8 +821,7 @@ class WebSocketProtocol13(WebSocketProtocol): if self._masked_frame: self.stream.read_bytes(4, self._on_masking_key) else: - self.stream.read_bytes(self._frame_length, - self._on_frame_data) + self._read_frame_data(False) elif payloadlen == 126: self.stream.read_bytes(2, self._on_frame_length_16) elif payloadlen == 127: @@ -738,6 +829,17 @@ class WebSocketProtocol13(WebSocketProtocol): except StreamClosedError: self._abort() + def _read_frame_data(self, masked): + new_len = self._frame_length + if self._fragmented_message_buffer is not None: + new_len += len(self._fragmented_message_buffer) + if new_len > (self.handler.max_message_size or 10 * 1024 * 1024): + self.close(1009, "message too big") + return + self.stream.read_bytes( + self._frame_length, + self._on_masked_frame_data if masked else self._on_frame_data) + def _on_frame_length_16(self, data): self._wire_bytes_in += len(data) self._frame_length = struct.unpack("!H", data)[0] @@ -745,7 +847,7 @@ class WebSocketProtocol13(WebSocketProtocol): if self._masked_frame: self.stream.read_bytes(4, self._on_masking_key) else: - self.stream.read_bytes(self._frame_length, self._on_frame_data) + self._read_frame_data(False) except StreamClosedError: self._abort() @@ -756,7 +858,7 @@ class WebSocketProtocol13(WebSocketProtocol): if self._masked_frame: self.stream.read_bytes(4, self._on_masking_key) else: - self.stream.read_bytes(self._frame_length, self._on_frame_data) + self._read_frame_data(False) except StreamClosedError: self._abort() @@ -764,8 +866,7 @@ class WebSocketProtocol13(WebSocketProtocol): self._wire_bytes_in += len(data) self._frame_mask = data try: - self.stream.read_bytes(self._frame_length, - self._on_masked_frame_data) + self._read_frame_data(True) except StreamClosedError: self._abort() @@ -774,6 +875,8 @@ class WebSocketProtocol13(WebSocketProtocol): self._on_frame_data(_websocket_mask(self._frame_mask, data)) def _on_frame_data(self, data): + handled_future = None + self._wire_bytes_in += len(data) if self._frame_opcode_is_control: # control frames may be interleaved with a series of fragmented @@ -806,12 +909,18 @@ class WebSocketProtocol13(WebSocketProtocol): self._fragmented_message_buffer = data if self._final_frame: - self._handle_message(opcode, data) + handled_future = self._handle_message(opcode, data) if not self.client_terminated: - self._receive_frame() + if handled_future: + # on_message is a coroutine, process more frames once it's done. + handled_future.add_done_callback( + lambda future: self._receive_frame()) + else: + self._receive_frame() def _handle_message(self, opcode, data): + """Execute on_message, returning its Future if it is a coroutine.""" if self.client_terminated: return @@ -826,11 +935,11 @@ class WebSocketProtocol13(WebSocketProtocol): except UnicodeDecodeError: self._abort() return - self._run_callback(self.handler.on_message, decoded) + return self._run_callback(self.handler.on_message, decoded) elif opcode == 0x2: # Binary data self._message_bytes_in += len(data) - self._run_callback(self.handler.on_message, data) + return self._run_callback(self.handler.on_message, data) elif opcode == 0x8: # Close self.client_terminated = True @@ -843,9 +952,11 @@ class WebSocketProtocol13(WebSocketProtocol): elif opcode == 0x9: # Ping self._write_frame(True, 0xA, data) + self._run_callback(self.handler.on_ping, data) elif opcode == 0xA: # Pong - self._run_callback(self.handler.on_pong, data) + self.last_pong = IOLoop.current().time() + return self._run_callback(self.handler.on_pong, data) else: self._abort() @@ -874,6 +985,51 @@ class WebSocketProtocol13(WebSocketProtocol): self._waiting = self.stream.io_loop.add_timeout( self.stream.io_loop.time() + 5, self._abort) + @property + def ping_interval(self): + interval = self.handler.ping_interval + if interval is not None: + return interval + return 0 + + @property + def ping_timeout(self): + timeout = self.handler.ping_timeout + if timeout is not None: + return timeout + return max(3 * self.ping_interval, 30) + + def start_pinging(self): + """Start sending periodic pings to keep the connection alive""" + if self.ping_interval > 0: + self.last_ping = self.last_pong = IOLoop.current().time() + self.ping_callback = PeriodicCallback( + self.periodic_ping, self.ping_interval * 1000) + self.ping_callback.start() + + def periodic_ping(self): + """Send a ping to keep the websocket alive + + Called periodically if the websocket_ping_interval is set and non-zero. + """ + if self.stream.closed() and self.ping_callback is not None: + self.ping_callback.stop() + return + + # Check for timeout on pong. Make sure that we really have + # sent a recent ping in case the machine with both server and + # client has been suspended since the last ping. + now = IOLoop.current().time() + since_last_pong = now - self.last_pong + since_last_ping = now - self.last_ping + if (since_last_ping < 2 * self.ping_interval and + since_last_pong > self.ping_timeout): + self.close() + return + + self.write_ping(b'') + self.last_ping = now + class WebSocketClientConnection(simple_httpclient._HTTPConnection): """WebSocket client connection. @@ -882,7 +1038,8 @@ class WebSocketClientConnection(simple_httpclient._HTTPConnection): `websocket_connect` function instead. """ def __init__(self, io_loop, request, on_message_callback=None, - compression_options=None): + compression_options=None, ping_interval=None, ping_timeout=None, + max_message_size=None): self.compression_options = compression_options self.connect_future = TracebackFuture() self.protocol = None @@ -891,6 +1048,9 @@ class WebSocketClientConnection(simple_httpclient._HTTPConnection): self.key = base64.b64encode(os.urandom(16)) self._on_message_callback = on_message_callback self.close_code = self.close_reason = None + self.ping_interval = ping_interval + self.ping_timeout = ping_timeout + self.max_message_size = max_message_size scheme, sep, rest = request.url.partition(':') scheme = {'ws': 'http', 'wss': 'https'}[scheme] @@ -954,6 +1114,7 @@ class WebSocketClientConnection(simple_httpclient._HTTPConnection): self.headers = headers self.protocol = self.get_websocket_protocol() self.protocol._process_server_headers(self.key, self.headers) + self.protocol.start_pinging() self.protocol._receive_frame() if self._timeout is not None: @@ -1007,13 +1168,18 @@ class WebSocketClientConnection(simple_httpclient._HTTPConnection): def on_pong(self, data): pass + def on_ping(self, data): + pass + def get_websocket_protocol(self): return WebSocketProtocol13(self, mask_outgoing=True, compression_options=self.compression_options) def websocket_connect(url, io_loop=None, callback=None, connect_timeout=None, - on_message_callback=None, compression_options=None): + on_message_callback=None, compression_options=None, + ping_interval=None, ping_timeout=None, + max_message_size=None): """Client-side websocket support. Takes a url and returns a Future whose result is a @@ -1042,6 +1208,10 @@ def websocket_connect(url, io_loop=None, callback=None, connect_timeout=None, .. versionchanged:: 4.1 Added ``compression_options`` and ``on_message_callback``. The ``io_loop`` argument is deprecated. + + .. versionchanged:: 4.5 + Added the ``ping_interval``, ``ping_timeout``, and ``max_message_size`` + arguments, which have the same meaning as in `WebSocketHandler`. """ if io_loop is None: io_loop = IOLoop.current() @@ -1057,7 +1227,10 @@ def websocket_connect(url, io_loop=None, callback=None, connect_timeout=None, request, httpclient.HTTPRequest._DEFAULTS) conn = WebSocketClientConnection(io_loop, request, on_message_callback=on_message_callback, - compression_options=compression_options) + compression_options=compression_options, + ping_interval=ping_interval, + ping_timeout=ping_timeout, + max_message_size=max_message_size) if callback is not None: io_loop.add_future(conn.connect_future, callback) return conn.connect_future diff --git a/server/www/packages/packages-common/tornado/wsgi.py b/server/www/packages/packages-common/tornado/wsgi.py index 59e6c55..68a7615 100644 --- a/server/www/packages/packages-common/tornado/wsgi.py +++ b/server/www/packages/packages-common/tornado/wsgi.py @@ -29,7 +29,7 @@ provides WSGI support in two ways: and Tornado handlers in a single server. """ -from __future__ import absolute_import, division, print_function, with_statement +from __future__ import absolute_import, division, print_function import sys from io import BytesIO @@ -41,12 +41,12 @@ from tornado import httputil from tornado.log import access_log from tornado import web from tornado.escape import native_str -from tornado.util import unicode_type +from tornado.util import unicode_type, PY3 -try: +if PY3: import urllib.parse as urllib_parse # py3 -except ImportError: +else: import urllib as urllib_parse # PEP 3333 specifies that WSGI on python 3 generally deals with byte strings diff --git a/server/www/packages/packages-darwin/x64/PIL/.dylibs/libfreetype.6.dylib b/server/www/packages/packages-darwin/x64/PIL/.dylibs/libfreetype.6.dylib new file mode 100644 index 0000000000000000000000000000000000000000..11af9fe0d1d456285186791f33b919655297366f GIT binary patch literal 1800576 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 G|`R~`mFdV2dK7`N}pk4 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�b=7?n&jPNXYM>O?i&a;PvXd33sMa64!VI}?ws}Tnj!2GC-AWoNvQ>P4mag|7RC72NGPwC?Cv>Ls`uro_%Dq0{ z{=*fXv{=9kCb!|Mx8KeVG`&Hc}l85yG@))ij~W!9<$>-v3!?(|ub z8$u95w@kVT`-;ii#!GP!EnPR6ykoMo?xp^)+XKKti-x#r!JMPbTY9k2G`Ij2PitVc zmdwfF?mS>8hYwcB;rJUun|w#<9#Z&kRJ5E#kRD75N6W7xE}d=Q$&2HnXSo+A;0mkx zGS!mF&cutF5UoNUCJceLDIwa%=T61A`S@{y$OX}&QTl;w)ytYhRuD}NPb;NcW$BLe z4OYKUR{|YDr<|=l8cq$%*16BRr{-w>A@2%_pI>v(Q#;ASEb6J}LC3=9F^Xu|f@eBA zGp=CbLSV66po+;`1Btz)Onnf2Hu-@0=mi9B6vmm)t+r#vflg{7)3Lymph$c(v-!hc zllzD*=h#$@a1*?V4dvlSs38{DKER9jVSb0hFE1v@xA~bsRJ4oK}mON=(d# z#!Pc!j4>lu^Et9z_`|b@MQ48njs4X;b(vYm{RK9AcD`MO=|e;O;dzSkvv^2Tz;lG5 zDasN}SxV41KaCt~8DV;$?>eOOA`-(;TH{)07;mH@om)tDKC0V<=%gd(X3IEc{k3mz zv2Uu2q0;>Cl(FNRB(U-Eg9NZ5=sCz7Bc*`oXB+zm2i37?LC!v$VN`+57Fca{Bq}$l z`EwpSRX`!rxq$t~-Tz_X8w<3txzm$X?2XRRv2?;>_HNSA?_$%Q!Yw*DvC!VBMcFpY zaoVLV@_ZUh(Ovt*7zLZ;W$paU>^YlE*LeO`?+SA#EUHqhdcj?m-5k{H2uX3KPJb&G z&YsrzDeAoIM_0#g!l0kf3g1=rz*-h}B8j%09^pE}$+Tl2)2X~&9i28gyDzgMI=eoe zI|w0wc1U)%+6_apUBCSx@3-vG*kX+DEHvf-gS{>s-!e}_N>$!0c)0^Gn{H(f)~Otz zJK1?AcHRGRK2jT%3OGJ5W3Pk}u74Pdy&;LAMm)67Cj-ZJen$Cj(&z>r zg}eGSbKMO*%PGP5V_l@*%Dx_}0^HFs-Pi=2nY%jR%-rixy28QO^L5u#n(=N~lTT&I zY;xZpIpNxFfIx}~3MnZRo^1qTOqW;=J{aygPY6pR%1sW^c;4^i!MPTV?TQP#9ft`V z!out$CbK;qN zcDk>#whiOhbs8E%SY_+gCeute={veeW>8=liJVCXtx2Qd?XG7rB%GC;WK;bIwH)4z z+>M8q>wBb142KR}L$oH`WZiZw+pTcx3ho@7JEL%$^qug$-8g-frUo%Kj(s}{ELJC11WW+Hg~4A z1(hl2I=hQ7bjCGLQ3KUoqIWhchB%W-$EYT_bTooPp>`N{bMcQ1l?iamjfh}`JttJ)%5lk7gSAiL|9i_{JoT1-G5qaARmRI={aU=ZG8b!#Qx{w3`N-NQ4Z z`QX>voUq6QQ=cLfF&!m(Vaj4T7)s|Fea}%TbdO7!U$A2c@f|N^zQN~`FB)lC2Yq>E z`CnU#FUwnob>IPh#YuRA4)c=$E$$lz7t429w&Mk6^N00PcUlH8EZOWEjosT0EDbG6 z8*-V!gQci?xfe4_rwH0ek1+v-lnp|FWX~=-O3`2JQQbnX=E1%{Rpq6A9%Fl5-_NV$ z5PyXIbllP0_e4#hoxoL9Q-8;tVH+Oy*?XpTJ${WZxjk3ebG1D$vFGLXTxZV>_S|UCt@doQ=MH;*+@78G%-XZZp1bXN zqdjl7=dJd<&7OPgd8a-1+Vd`Z?z89J_UyIietRCUXTLoU+VhY-58LyIJ&)S+m^}yW zIb_ekp2PMWvFE5g$Lx9Bo~b@TxSHpNY8S!t#tj;?kP~B1=<*Vrw-kDtLO)b!nL>vY z+N97!3KbOURp<)}{j);fROn8HzNgTq6%wrpZ&c_n3SFzv%QQ12lx}#FLfaJ5cI8l- z&4v{UeNZ7R6RB{OLfRY}p0AK?b*oqCTZ(&!LcdUGu0ryg316?!425PWWSfaztWcBU zsukL<(4WA;4F!dCjQWPX3jJK6dlk}ouN%Ij(DxORq8sY8&J9l~^ngOLVT3wSal>CJ z^aX{^P)LWvZOAC}w+daX&~Am=6xyj!UZEWd{U3!kE2P_&L*1si;bDb7ppcG03zsYO z3xyUb^q&fyt}I;>E?LUt7AHx&Af;`S-@p9+0ep%)<=gtsYlib9_t)V8g? zrS0miEvXN+Y}?$r`O4Il8?WBFVcxpdwQZ@bTei1tU%Rb!Yumi_TQ;}N+q`B|OKSUi zLTziV*w~V4Yn!)r)0(Z@Q!3!Bx2B@9=Cy3TvUPJy>Madhw{C1{+|o|s(^IokZ`sze zeM|ecwY)^3x2)gxq0>{RZ`;0YZR+&5yhSyvTfc=ki+Rgssjb_#Y;D=r*4nZ?wQSX@ zWvR96*IRXGrq;HuOI@*Ued^pLjVWs$`8KU7Yjx}9^;_arUAbf4Rcki3u3OXAl3KfQ z&GzlBYt`pcdfa>Y~qlEsD>ts$+?IOF<}GdOTGppl0rORY zdFy7X+PbZU=e(<^v~|no)Yk1AEIJ8&2j#8X*R=0Qt!TNjeIu9KF5I$lU25URHETbV zYH8WgvX(w=+1|3gm2p`_iyB+EwXAL1vhC{Bxf|AOTS;p-U%5RMRdT@=+D5|mjTkk&SAzLJ7kw=Zhl(XwuNYunllspie=TDEOuT$gXz-rA<7#xbil z0L#rS+qb6{t+b9cZ*Ki?dkX`zv1Rj;3sXziY`(I6&6O?ZZQIhmHMJGke`L!xwZ6S& zB_L{Xp$)C;+bp!G{i7eXz=dl_!N9j|XxXO3ly419h7%uGwyj%yQHtk<7p0n7H!o^g z)7HKX;J3AGTDf`6*2Qt?!c=C*)-{_2??r0_B|rvR8b}2^1H|$*jDz(?Q5FD8Isvx5jV`X)yl&05 zb#blql=&0CE?K#3>6*6I&1c3jvtPG-<-CSB+Em+_nxwNE8ka3>fg-5jMiCaKtilFnAHL9| zzkfAwgX*o@+d$!E+dw@BLQ#}W%*<5tlE#H=wzsG(K(%cB`t2=ksYQ(ouWkcU=lQ>U zJaKJqXM8YMy%QZvD%>7wy4p;x&*O#Z+pubbt^noo9ElEG1%7D zxTbAQ>U2@d?WsA7TXvkPmezTYLPAo@7p+KrX!DkjY&P1l9l$dV5oxfYu*A?+;bonh zmnr|}qSnppwtQrJ-J%OtrM9kJpE~o5cbxT()cpBxe^=_v)S`x_B}?Cb*#!+vnN-7t znH3G^WiGpDN#m-;spZR-T(Ii0l}kR5NiAQpI@b=iu{c}rHVT2YF~TyXBP#w8b=ms+{BfhH`wVxuN}>Y~h&^A@jiHIvUO_3dbE zylmyF_b<)3*X8FfO08VpaIT6tcUePDM8hsyy=X-yGyffzowxM;%NJj^qTzz`Xl}!W z=UsMg!}2Ao8kTyvD`x4ki!v+DZCDwN1t~6DZ19S~eD1QPOEc$cAXWmE(`p&IrxF~|U1SEe!Z6FMf}x}%ii=ceyiyC%BBXOs5Zwb zm?%r$n_1QzFMJ7A+|FZWca8*@p-|*V|49o}!2#5&CB;z^EATm$Rv#FKIB%lli zIObg&95XXDGgC`5H8U;eoJ}h&E62*}Zr}h%IEg|CXp_AEwfEZR9INNKpZmSP-}im* z_xo1;S!-Q;U2DFsb*;7cI*yx=J}zVIkkL#g#e_x@WRWr&lj6rPN*sXZ*Ai9nN@Vv~ufO~$60NTz18>Kj}7#E1#d zPw5a*v71I^XQRnPq8i%_ZG}v;NP1>A(T2x{M`}pk?3&8yr8QU+ne|+Ql~A&qVIGs| zd1Yn!u+tcgzy!>LsVPTGD+;QLu#$z%3oDWA$GLe`v*>D9l}AlcEvYWAtb{=+d0}M* zg=WDys6=FVytL-fRbvFROsO$W(y9w!WuRWvh!~!iUsNWB#ML#OWRMK}pGz`e8%ZTo zdqOgAXb7fJQPnsstHww*wQ^XNvH>x!pad&2%$!162=!@lxf(QDS&p4VDP5NllMGX8 zJ|bdXVMK?)9v9b57KRB1iwTkOsLM?Hlw?&G(Co>OYP$N1%jA%1dEp&mZm+V)L^5nN z{?7#_0h7sa0z-iIFRM7KDcV_0Mv~F!5^?<&8zY9ynlYq(O5iR~lP>UeE$z&26&RNwJu+`|9 z@!z;NS9_2gD|^CuTaf2oRFL?K90}GF@^Td+!|@Vqrzauf?D5YO;NbElY;5tE;4z`u z(RXD106Z4|T|?|J33lJ~GZxWdEB_1y;sOOD|5sir9>@^$pb?rEMJ6CSD}stJ$Kk1% zhWpQ4&x8Mr|KH{26-t%b!qQ5ivaqtT>*e_G^8Y!#)E(ZU<9RaLfjL4P2n{+p5MR#G z!J9aEJ5UNuFD4=0-b8|SvvE^wR zYhyZEXPS=#@^Mru0ZV}9;Q-K=6?l=W= zx(WWDq*D27oV4kUg^r8}Z>;NwQIsD1(N_U8=tTkM`W5Xje--sp467(x>nBt3E|ukT z<<~JknCDYCr)dezM;mm0=WfWp?Edh4HjL&Il|5~13l)0ihR@xd`YGt^cR#jiBYo+? z+^2@Yc4?qbpX>C6;44${oBsi&L+P&oWoOt$Uo=avJRkiz{dJyfhr4C_%+kAzd-HKx z?h{jLQtQp=xxY_nKL`5tA4r0m7xY8+u)NZ7C6!_0(v5{N+H4~M0g+~&2(;YUdE-m- zDv-hW(iE1M(Z*F)6dQ>+O(+h+`I0xb&*D~VAfYD=#luS{m={4t{|!+hMblGTqvH{x za*V&woA?EzdpbL+OO^P~l5+qY0Vklhk>@`NNTn!=im0KlEr}JeCN{(tAJN#8UQ{-S z6X}il??PNjAL2&bi3jORJfY*gNPpr@e26a@K>Toq7eE3@5E)2j4LUKqh8A67VVRR+NiaUyoCSwRT zWn?^=Kqit$$RskEOd*ew$H?PkDtY2RX}FPh8p$L1q<|EXA~Ky6lM+%&W{{brjFgiK zq^cyd$dd$1AJ(@TGMmgHbICk1pDX}{UT;~5f8_dU@(dA3EvX}mKv_(d;O|nhj4UV5 zBJ|(86?jaK<|Vh1JWp1U7vv~>C{L|GCp}S}sz|DT<5cVz^i?4zYNVBK=L| z=nsk!lEe+>lEo1IjTEwpyg^d9R4$E6=Q6lVE=zop&8;Wf$y+3c%jJe}L%CtxaBc)Q zk{iX1=EiVixpCZhZUQ%vdxV?BP3ER>k8+Q3k8@MGC%9=`9+%G*aD`kEH=QfyO1M&P z1~-!{qnoIr;+(|7T0^e=mKq?EP8tp8AW_QJIq^ zZUy8?mZQ~V4UuJLJ$adIAg_>(7`x5nRgB>lvX#6}wqYcT75IIbakoWKlD96Zga)O*Br|^T`XUO~HEICI$ARm&C$a!*sd`vze z7s;pOGx9mPL@wj^Qm>M0@MTGSm@DC|nW=It6R$JJuw$%2eb}Q^&TctDLMx2$NfH%T^@PmL*gf;M^fp}u6OafAYOduB+ z4*F8VjMjBozYLfK)By89UkG2ov&FztU^#K(R}eRcmFQL4 z7pb5T;+}}QVKXGrf+U(RRwK~tu}_fb_mLN+DFHQc$7fvj*cZ5i%^rILcbElE=u0Q` zrMuK@@Z143sb6SbG#`8HMeMN`k;>ek}$J6x2zaG}NP@ zdn$_m*vT7GE0&YBjjf%%*@o)R1^kQWJ;M9-?e~9wAhE%A`fpv2>0sk;(qUJCeWx3y#nWj?fEsydMw%1OdS)2l{~z zM_2tMQ z08hXR_4EdO0AFAL;0O2v0YD%S1Pnx(p@0U62B1SZ=umDjkPM`t{8S(v$V9%`KrS#8 z@!`NoT3ytaj@M{lJd0Z+%_Lw7(mV!C1*WlQbnNqiLKatxvPIiTof7*sdiL>Ojf*YX zYm4^UqP@0guPxeZi}p&qey9WOH+E0c`KbC%8_xnJaYbNr7K&mynN-gE3aSKD-(7Z30Id~IdkRI)#X8rKm zs&IAD)y1TK`%CrP->Kieq<;I-`t3XFx4&7xeQ*8tBY3d9e*5bB?Jw4EUsu2VO#Kd_ ze#dk5J68TT96M_3cPt{8Uc9vS(o2`tU)peK%cZvnBI^)&jYi3(1DB3oI&|sCr4yG< zlS}(A9lmtz(wWP`c;xx z&x@pY#An;^U{n3^ZS}{u)E|G9)SsxUKe4#}#3GQF)gNC`e|&xY@l*9DmewDCmyFNN znldV5%s2vn_^6BtV88Zv>OUS$hRh4)HL1sN!JYzm-s1q9M7B$o@X{cM)P`6x) z*EZDEiPYspcX(UF{*w)LFE!MyZ>W12&sR6pt!b!R+fesnL)|M4b(?gDcjyjp*ByQX zX?N-lzo|RCOLzFK2K?N9L+!qE2ODY+H`KnTJ1po99nu}zuRC;7q#rwX;M_qmeiS6# z;aYGn(;Z%}JN&}MeHRbtj%;nH-4EKcy2EQP9{hCMr*G(vY}Oq)0n+-5M|FpvC-wW5 z)$dzbzwed$eXrH;d!v5e{`&pzg1V%B-%IuTHrDUkSHJI6{r+9``}dIgqZ{jw3H8Tn z>yPfOKZ?HxMAFes^+(^TKl-jn-By3}9Z*4fwf^W9Qh%(j{@9}WW0-75SJfYVq5kOh z`lCA$dA|PWYCK(Ce{4rWT9)r?*}c2v-9s&BUNH!-7*4HNs9(BC zzj~$qy#qHFpSk(+wwoKa+}!Z)%~#&Nxo=JLk~f=I?Q4GFbo1(^&FgkGpL(ZdXKl-g z=M8ml7?wP5Shmuz{yD>@_Y9j47+&3Gc>OeKI=Z{*=<%lG$HfZnFstKprfP0~(^yTj zIzG$lhyuh4E^In_qUrc1{idz@cNX1Tbnxcl7sOg@X@2QQ^XBK8UlnL|ge5J@cDJl~ zx#f-5Th1(NIkTbV%qD|yz)-u&Q2U~xZZWOntJ_4KKy?(od`2DpD3j_bs$Zz1KNCTp zhtdcf{YIJUDC$!uX?|0Bn3!UE94CuDJx#O#s88Ki@vkZUn~2l=k1+ZNEPe$(Erb9X*5pfkvWaVsoiW&qj5Sf%xN@E*JN`Vjnj|SDUH^P z#wn<^NollRYzrjHhB=Lf>F&pzM)RPSwK+}B!<c6I zIsb`9+vf5o8f}LwqtX7RH&`i+`ZPaU2P)T;M&+H-XdQe2>gbgka~ciPE34)-+Fn^V z$h@?@)N(aXN6VtGSj=fOJ+;)#X|%ol|3sth_5Kr$w%6xRG};bdMx*%z0hBg?(P%yq zjOGWQI+_o4G@U;{>q5h^%nx8RI!EZcVfri(ply_PBod95MQO7Br0E7S8l5B5QCcuS z)5*IpN(*5$d7e=k)w496{5p)%!WfOt5$Y%{9H8msw<(lH+em42j!;Kw8i3O19HEZV zv;d{iIYJ$!MFNyY=LmI_MqlvIai()54WKkSQF?&U=;$6`D>|3H{2Ton{67eph23Ef zK<;p)2QWJDr~n7R0~iK80nB3f3jTM%k3bX9473100k?rhR?Y#Ga~7cGP*gG0z^9nQ zFb_V(0)~a~DV}C9)(ZmCLxltrH3FzdXZHZ9I|fC~&>NJ}9*0m9HD3j~P!5vDixxpbIxvB7`0Z%i~A*cQE4zLfP{UP@W?U$3lY2aVAUv6I?Z^%55%&;7F zqqq;yy2>seeK7+NkZv=u5N)LRv)c^<#R1?Ta11yO?86vPTcjSK-yDP@uRLHL!zTD= zfLY$?H{c)0n_?E~Ktb#C3-B2F>IvFk|H|1SAHe8n7)SBIB)FNC5oMbo)|6|~D zh6ebJfYBlRj9HvRm>!uX0m(obFb0?fJPFKZkog6)y~nKmwFpz3WH(LzrR&FcQcI3ILJwrb#he2~$I*t>wp!7Q6bzm=GbP&u4 zGkwe>Ord75fluKN1OT!VP`4hl`qd#!@jh@4_?$sbPYsA3*@ytq4Pkd6h9M31=tFl0p17NfOendqMEBwU3ZJ=P zv>^hJ>n+mmiPv|Y4)w4JoQ-hj!Ow-SB)Z#rUp7r_{%cMT4X zPQ9I7T>H4Wd-V0}=hffa$9I5~;9oqK>qSS9wt<>()X`c}&^UcYp=NRU8KOqI{G9r< zVDnbW{51W4;{MP6(&0a8xy(E5|NmAAUGcyBg~b22zg0>QMehI2-ztSy;8rQAsH`Z* zok4sfiR-Pit13XKDSC2tUKuXEPA{z}t(lLzq1DwA32AU8vPz2Jf?-W*URhx&Zu(Zw zF2|K#`ei-t0T<3L!0p~r@z!i{6>=I?UR0ciTN1dej2J%Zud19U<&jxbhTC_jLq2k* zm8hPTS5QRCDi`3cVi8S>OQ+MT@+t~Q4wB3%BE^z7q_DCkuK+h3aAmNdsIauGERW#A zgA~ZfE0|3$4@+J~L0%OqRv>wW1yz-}d@Nt_mC7rchl|GLR_zQ~!6q>CC71IEre-HsvEIRh3cY_7#+t7L-;M z%q}Oh>D`s;g378Qsar(8|L!}^|LRLJT0#*kwTg%_v(jpCleUORgN0j_7*jg_w4ZU^ zxtPwA0;Zk3g%1ot44B6EP1@e0*i4^7gts*rAE`3n9BG} zj7gQ5UW)8V5$^9|{0j4mi*a#B^62D|MweC%l2S;gL>{DIRtd?6yy23LSgM#?K5oVs zEAdc7D#utQDOyxkRywO1S9efCO-bc!HVvhb7W)I`VA8PJFAmN0vZ8rJ>bLSdO#KRU zDitG>_!O3+nlxAO;;t-0C9^Av^QvZ-m*LJ7sVv6)oC$fN{6*zrv(vH&u7*#?Boyc5 zaA}5&VxIUAH}nf;(~IaNPb`qm(^66rUZaigD(=LCskf*HpIBgX`ZW3rTHvXMST;?0xjd1ky&@@ziQSx;x9 z*la8gRCb}UB^6yHaTb|z;tAu#NKwvGDGgIHVyBiG)09eSaIu}{TPY>2G|LWm`B`?A zQd0bs0!>;iReiR^G24t|wvl7D#4%q=Gv7#Gz(hb?E~?9MUl2DFOoAd&q!j~K!K-WL zL&-={89&<0@iIYg$c=BurI^E?sRP4^?!+n@8zdVk{WXjA5{u!gP%> z#^_pOieSw#MzHpn!gLKX#>BPA7^CuUjEL);skXEzS=IpQJ%Bj?pM_36oNdrFNz$ycv=8)H<~j1emB#s;EnV;IGo!c+u} zF5Pys8S(HWzXoExK}Vlc*}B~j{SY3*cTlR9Pu zQE9WVtcO{YE-Wm_ghyUgC91S~vaqPiS@_R|7#CdWxwN9Puo<7(`pX_ZTp?H{5?xx0 zrLeT-vanfZW-By%Xx38WlFc5m=1JC-M3Yu#7BD2aSL@VK*TE^3m8z*mYzaOvHRB0o+Vd zaW=SL)RzmueW4gG1^02rpwZWs3scZfU2o#8&= zE^%LQ-*I}bh5LzX?p^@{2Z)o#^()hX2l)g{%Js_#@Sst(mJxKe1L zwpV+o{nR1qNOh7rLp@YIQ9VsvtS(pAsQ;l}tX{3&sD53&OMOUvTK$pwGxc@#k7|Ru zU42jeK&`THwCHQ$YcbFw$|BJs+hUSMvBeyVB^IkKwpkpu_|W3IMZHC<#eEC4Wp7Jw z%TUWi%UsI|mIan`EtguZvwY2Rm*rv0GnSuNUbp<-vf1)y%ikII?g)HI@fxfb%FIP>xI_Kt=Cy^v)*fc)cS(;b?YCjZ(ILjt*~*h z@wExHNwCSX8Ef;XO_5EN%`-MDZ8q5Kv^ivR*5;DUw>CFzI&m4!-qyo5$TrqC!*;ao z6Sft$3vHL%uCv`?yWjSG+fQw;+v;p@+x}u}ZRc+1Z>P0Ow;N+O#csM?mEF^JFW7Ce z+iiEi?zG)SyRYn;?Yi+Hvz@)Cy`O!keYAa&eY$;){c!uS_LJ@N?2GOHz{#2VPZH71 z|KBYU*A@SXL_C36N9Wun%rFnkr)lDhD#whX^J$|vqh7~cqBDxlCxbYn+A*8@TG08F zqi9o7nbPx5LT;8TT``~cD!+k@^dZTR3UBg(av)x*e9P}vrjp^fb2=3#u4#}J+z5rF zoL3y>x8T;v5Bxl`nDi1QZUrfYB>bX!6mpcRh*R>A#EEk$Wo<3F8BdQWn#=;Pfd$8AL4 z&HaY-zvn&E`v;#m-;D#lO|(v3kb81;`J|G^2j}ma@n}_L_3Z_Rp6OY({e{IZefe71 z>(#s7eecDOE?ji~Z0D7$SI6A&NP7VXRx8n6XK^9*Mb5ze##=yvC-7tWN1>jV^Bc1k z;cDM{To-&(*VxrrByhjq)-`stRR~GU47$@j)%_0v=-&T|`ezLvJOTe^le8a~iz zXl;Ujs6dIEvEI1x`K(SX_;W)?0nY_-VXZ}i-;u7{H(T}dmXdS0iaHe6OCQJ8(I;79 z+f60xVI}M|D`6L_Zv!i7HyT*m{Rvmg=!c9|btqJDo46g^)rM9nAD$TW9s0Y5>P6&3 z?lAX0_lc=p*W@1hf#uWGR>N~&bM>sTTjl5VVqUf6eeNzxS#MUmZKXVK$GhuI8Gmu7 zTi?;CZxXv#;Q7|}mb_ZU8eZGkcBidcP%JIyvGV4y@gX4IZPzsx2|Ye-&24w|GX+lB zVYpMghl#BY5$w7-f-yZ{|Dr2d0KO-Z5nx z*_kIO)}kL!-P%^e9X(@H-!`?!7xRnNvb&SjEx)s^y+KzcaCI5ak_^QJ#WRYtiff8` z<=e`W%8!*_ks+Ns*BYF2fsiP~1}sn)0yrqpsjtN2E#??24r zRSv4Yrfi~bcA!E~KF<~?RpF`_RkCWbl+<1tCc(>r4v8vTHH;3)F{yHF3ORMO>1qVd zfzC`-i3(amnwi$@xowd`RjXR5T5swkXG3FKdndG&;!bO4UahZM^;&a>9-^dJCr!~6 zrM&8(>RYA^x<6H&Q(aVDJ1b7D?$0iWYOVWo*7{w|y4$yPEQ9ZUGV4;_Y^K|r^`T!| zr&voi%e(JY^J-u9z*gPe5;R0oz=iV6e{R7dt^=0AF!e0ffgcs|>M`n~znL2KrZ%ct z%qr3=Yc0uA?@+&|K4UT2;uVV>7VlYHx3sYIvz%)AmgOnSE0*`ILaoZJszphtC7-C@ zWsNgPYKe0$P^mvvUsKnsTP;ROgX1C1e<^{Nr`g1dp`)elRR2Op>$oI9%g99w2Mad~ zZ;KF^zbO__XmsWAI?aa3&7{@OGp+uhlxR>K_`lxUx`Tk!LZ};u)hBS28VL zOFp$=@_+AETTLD3YO&m6jV!*dtl*aMPe~GL=wR##`E1x|s-lq4e%B?iu9@nEkny<3wd& z$2nQXTc)ypa%G+3Y-05^=}!L&rDcg_wdFF)ji%@QnwTo-FwwRZ*K$KGpEsWz+i5qO zQe3FyE#I|#kF70k?Rp62>h`;aRwz`(OO_wAWoda8Z~2v_&cx@9hIHK37uIsCEN`30 zVbw}2-pbC($I9PC^!b~b?Z(`HOPc#dH43X}tC3cZ<<%)(wo0!ei?8&i+2j!MCM&#xtQ+V*lJ76(R$|{s2&4@xX zxesXT>R{voR`uyQD@l%Zl=Wcinby_T`>fAee{K_K6K#`bGsR}+xw}7i={kypsAYKy z>n!Wx)>Ea$t@HM6mxVvlvg;WLbzI7dtNl$Hsu&)u1po>yiJbHD9H};@;1%=K&p;w zyD!Txd&M>j#8Kim(e)0dZd2|`l54ZW=CsXun=7`C*r|@Noo!od z`zm&*r}iI>QP{kT{p_)WQG);FL-@1%uvYMY`@n&H?;-N~6?sTL%~RNXZPRK?{zeV& z`kU!}prh%oq1mjx!TG#xA6rjq+yu~h$);{_0dE^_8z(P(L3E^SQ*1NoNS%^L%CC^O z9cTME({qAX0M%yzA*cT=(IvSqM^&Bl_hJI%U|uG_7; zuA18J%eIFldiVWbE0VfVmZV?WWpz<#Iw z3H#5_nuH-@sK7;jX^MxlRpxU$7gp|VHe*8z6n0^D(RSmd`Ffc)-Y&^5jW+(Y)c9I* z$!<7fyJM6$b)f=B2(#=q85aRdqbYycPOw{U_af7y;ih^tv25Dt+Mu!9ZnsyS>l)U7 z7mIki6Lz1{+L_J%uS{9E-0aZZ>g=i#d>q-*@tNIEEZbHp0c_jzajC*yZSQFBZDMtM zc&V_y+tSw2X?pBl&fCY@4-=<*Ef;K`YI@XQn)?G`wHuY=ph|`PO#3mB#uec>*bRGrhW^nz!F$e^64xrA%U8mbMIBko`xjUqXLvF?8O| zF}PB=XSIi zyJd^sOz{pgo6W(jlV=QDNrv^R?)8se%kb-eX%533W;ndyu-Rdk!y$(&M*X?uQ+fV= zo@deP~I@9ZVuZCVNy|DMW+j0vAuW>4EMV;R5byze`G)Ah&--z_ahgIAM?d{m) zZ2YsLd+on6xHlIl9XuTdID|SxOVhnYR?o3)xAnfcLXI^VNRdUn!&rx@W?eJhY_FA4 zqHw5kc-rAvv-QYdZ$7{f?)g1uhI1y3geCj=daRrIjqR2TUaf+C( z)+^R=A={gK#T)LKbyU)fTJB@VSIp*{m03q5nsr2IHShR=;}_IGujSGlKa(b3_b*b5 z%SJp)MmYZL_?wfPlaEuPQ;yR(r$?O%jk9m5t^jB0PS~hmOM1o0noZqz#VM978y)B9 z2F7WiQ>3iKQ&~IH^=5U>G^9o{oh0|K6FPv^W-S4gF z?b6$)cUbSl-s!!^V-PM%nvlyVP&#dPdc$dt(*>#1bL39XqMhz^$mtjr%nu&w^r7aR zo+VcKJ14zdz3=wEPrL6!Nv|y>UpU)2yEuD02RTPOC$YuI?6B->X5U{k zTQ$C5wd`b@p0AAR$g5D{Jkhz_c~wIh@BFxP5gXFcQYO4DQ|xu*E9a-2mzo-NljYcL zJf!=qn0J27c{fgyZn0kaO|+-THRppYaYu>L`6K5m&R@9rnnqdlM~fg4>~%WZRseRz?yFIT#Z za+&FJ)CH3m;#9{CcX`yMfR!_rWjs}b=w0rM%WW<9lM9T0 z=|Htr+(0d@R=BENeO!a63aKMsyE?kMvoU+XdilPjOe)1=8TnZa?>fje+f=Ei=}u=6 z`O!YsIS-XcD*Kx0rEVHiB%gJchI@cAhFS>4Vz3$rR+TDj|$;ZnY=OeRi&cq^x z>zl3zT+I%b`kSpUL;udE-&w-De&hN*&W(18Ys&W0TE$jZ!@UmEEE#7e)S7C(k7XZs zB-+)--qfU7QoCo3SwzP43GNfsCq=H`c{64$YuJ-xSCFxNp6D~T&(1#I^tsumy-$~0 zZ@2z#A$feCqCT@sB@dStnDGV5KDB+8_gT~D6-ibn$x3b_TVyYoYqW`le4jmiju@>- z2k7KJr}~_i72G7YrcCK`MP5@LGdEF28|^{QmP$eKx}k#a^Shg>S*m^a@6;AB9`!nz zX}_svZH*LD*WRmgi!n&^zp$3CbxXh7)voU_v{ecGk#WzFac;#PjvjFyM?Ajw__go& zzNLL<_g&Wag>1FkY`3d!Kf8}`pX>g;#>(wkw>56BxV`T7mfL=}V{T{NKH0x--#(4t zZ+k%UoexUB!y(CcJ1qH0M9br{3y@Cd8Jbdo0U)9Lswq%X>y1@6pF2lupxH zZi z$7~P5BxYa#bvgT%u2UYHJhswx>SNjde#}fBc$~`B@E)f(`%dXQt@$=g$T#jYE2GFvlA_vfc0Ro84rO|zy3^2XJhc6G{PSdd-{XDH^!>=w z!qeMxn&*q2`#n#2e&X5PPu(wE2Qy>4_!eS%fwJ%AzF+nIvG1>vHYt?*JfHSu-{!up zv@bt-$Yh#j)}dTJ?NHBNo^Eo7&R`}}S&`B+*fYj+i04>Sm-zn8u49jUT3Fh7*UXeU zRHE=K@vQJ%uBWeBHdOMSHJy|wo6}99CPk}Z30S>xZPvw{Lp09XrZ$%-Z4(@(n zZXJ&@(@qs;eHx9dFMED#8p4D-MGDVG&!0ToZyKn1bn>oYp1>{cyjLl3Z+7Uhp5a~I zeJuE>%sbVJe)j!5`URTRJiz=g(neYhYUc9&qWh)lTaD*vGuv3L^Cqk!6Z)0*d#c}} ze&@ZiydLp7@AZ{eLw}e4Uj0|~f2sdJ#bvIReA};@HThR|x=>c2==WT|wf#;?V|Sen zS-*|_w$LHFC{6!5^3Q&I`W<3pGKXdGo6+tXP^jp4sh{3!5bUmgU-tW+t<$rZ-Q~>e zuBGI=e!qDsyllLDy@I`>SgIQ=+o}TI%hAhCs>L_PyxXNrxPQu~!GUzrw7N z4w#oHcJ$ZwkLf?9|NQ<-wSwYW9^ZdZ|1r>!;&I~LUv4+F;a#oxs^+?U_PJlqx>oUa z|6AAI=i#a^0(vpYLUVs)xRxdpuU zO7Asv#(yR&{F*}Ed#m?u`7Fq5F*KC-e(&S5hFZ#+vYeUMf>|}EAY-p2ZT=yS#Fv?HYJuM6sZ)JgwdS*dz28;M`wsJcvcXWy`;POSYRY1U;V*BR%32Mb zovlT@??T^Yri9b~ny_Tbax%sD9pCf5cL&%H7&Bn+fMWwb%Hw?x`JOQ;`B=%Eo?pQG ze&+in>h7Tv%UAFF6Yb~Ate?GBW38*>p7Q-;fSPqE_Y~{UwMB{nt^<4q z3^&!RPa!`ba6sZ;Us-LC2Fh$7{sUd&*0&TX2Rt^Qc);8Nb*6eI{^_jN>=@b=1uP%1 z>8}N>|4RYinXP^6%myT}nji4#0DKBUKap9$jzhIU0D=NIW$ z<+suATYnG#DgGP%zYXvRn4(z`=;JrkZ=~N?zlnZR{HFTl`%U+o;a8y%0;g()z`RHy zFh5ENEQl5Y3uA;phgc!7C{75R9xntICkO%4v`Yi}`qlX@^;_Y$%5SaTdW{fJq!j|D zM+yN2NN0s~mI*?jMdXSAFTVqRNBoZao%TEDci!)!-zC3meqU(>ziC>*59Row96yxf zhjRRiVg=oAo!I=tq8RB>+tLL`_=D(Kku*hxAwR9ck*{dJ?EgFb5YNE zsONmta{=o46zaJU<^KcaKaKLAiCz(C=O5`G>!0YK?4RzR?LX9ir2km|iQpH&Ukm;^ z@Gk=YV(>2k|5ETT1OIaHKO3_m(B8kwe~$kG|EK-y{FnN#@L%P>)*tN+Tmk;)z`qjw z&x3yz_+J43YVfZC|61_B7`q~{m;V9(BmT$zPy3(qKkt9h|C0YTf3!bvomTK!3;s8v z1fO-$g3n9fe+B%Tz`q&%uY&)zxD|np{vH0^{=fP^2;c+M0oDQb0Zsw5{aaA}R`9=$ z^0%S+fVzOC0V@Jl1*{FA?LP(n)8O9-{@vg| z0{&y*-vItY;C~PNdm>i^@&N||>I0erS^`=F+5cGu`TLZTT?h4!! zxG(Tf;L*U7f$xJq4*c=pPXK=+_y>VM3H*b>pA7yK@TX#?^b7nhus*OUuqCiHusyId z@P6R$K?MA1;71l}@k1^+1UkBJrh55x)nC*uYG^WdKt|7>9YpeaF9gYtu>2h9ko2&xL2 z6SM%FH^4awB~J$D6mV9e=E0sfibuL1vT@IMOv$H4!1o<-25ps#~|47wTAGqBe{j|M&76tga z1l{#X+_U7GE@^9TyWMuPQqX$PbKIqzV&Im6Zw@>#@YKMM23}=0(z~VwiEeP&a`hft z*!NRglC9|n*`j>7Ksm5+;7`E`!Out*{Uy2>4(u3sk1mE+q{VOvX$ZCsb_(tn>>sRU zMeQ)Hj)$BMITvz1(KVl&d~dzzlV`9Wte4{ZJ0xtGq{t%odWJuaHoMg9o!k<&IETB zxU<2XlVBYd9u^rE8%zUkL^dosnN=?y5>l3qwcrxsMGvL-RCWcb+diQ!Yi zr$!3uX;FeYFIrIN#|Y|zSV3JFC#Z{%dU}GOE{?VcuL@rqekH;_B0OSx#A_N=_|xHa z;Y-6;gs;*F>JsE!3jV&}>5ue2TI=v#;d{dOg&zt(8h$eT{qPUNKMwy4DSeT007~;i zYJZd#fYJg{S`at~qO@ReheTS3-wgjL{7!gBcz5`(;SVDC2z7)txM>T*z#R_m2ykn_ ztp#@^xTC-w4eppIRfI=`SA=gwKtwQjV!;y!o_O#ifG089Dk421J7Q?W$cV8K6CTe~L%MXN%RstJ4>_Br4cJ4Rz<9hSRa8opdJdo zVc;7Mz7gOX3BFO_8;v@R0q@xNkSHfc5%G4!rxCX_s)+X@PDGrE_#ol}5^hJrr;%_e z5^g{t?`l;MHzNKS@nb||L^Cp;kBpZi<2A_mIG$fSh`^Vz7P$MR(pYPHX<{_hn*9f3 z1@GO5Vg%Lc!|{UZgIKkupTGQX{Co(h4dp`l_#^1l2d-{ubQ-1owB~{vO;vfcwXIYt6Ho z=QV3IFKJ%UysCL!vqSTiW-qww!L0*#1GpQ(-2`quxNm~H8Qd-4HY6xC$26xjXOaG= zXyG>~t=~f8l$y($?=?Sbx;4D!OU*YL;kRL+_tz>kdW}JI8+o)NkDrl8$AKu}x0nPA zty*iXwbwdnU9}!s=ug!l6nGc~9zo(0NPHBDVTY>r#VfSI+KJjnH5S@LZL&69o2?zH z9jS#bP#r*pVRfqTRhH@;_|Jm(7J*oI<-*yIs30O7ISi7QDk^1n=-8 zM-Z|-xc>-7z5LLzgK+|Xs+iZF*M2U3`b+9(^V;j$?_{fFiEP!VN_g!pZI=O-j_yvL zph-8G3vZNKL^?zcjMPLXMNWt;iaeapN4iG#myMIvM&rawTEiX8PDsCmRTY^LIb1Gp zwOk&)6@JL7%B@gEJ{h?na(U#2$TwkvHQ*a(b;3=<9bGGnJ-BGNW9T%P;-B8e5wN0FB!zcQL;A4|2&HJN4~&*USUBYSk6_~!ghUae+Z&<(Hrp^+f z=SjBwk1A6{^@`4k9$myoxkRT=U#_|mH83hNDlKYM)UK!_(f-j)su0d+M@19tD{}zL_;1* z)c&X5zx#0ScebPZj4clTS%>kxE7v8Wy+rVdY1QMK&@#byxOh!ufAl1FqPeGB89gJq zD*7MMTiBat&UDV2h8Kr-b$1HuNI>*+(Jz~wXsFo{Q-ExZpQ}(tABa8`6Bm=#V4Rb_ z#meXl(buBuVGTT6+aglFi?CZ3<#!&toXzrq^(omsyE=gXW48% zCMRZGldiLqZ8pZuK_?VAlK8IC*zo(;;kNG0zJ6&Uo zzFP1dJ&%uRi0Kwbrq(w%rnRjDZ>gG#1mCgn(STprpk-AlV|&F0$A-r~s?+E3v3+8F z^s-^RN)9|a&kn7B90Bn(1_>ZMs>lig%AMieDSA zk8dmBtGnDf20r7+Bxp`N4EtwjxHIve0aW7a)o{rBkqfYHGwAa+~W8xoUAAs>= z>B%G?UlBjQ#kdBg-7>1=*W;I(spMjOvt+2|<2T3aW-cPZ@jK(s#eb8>$M1`m(&7kN-ISk`D9Aw~tA;u+P~Z0Rs#g>J(yx7#~$CXI_m#@U}yvzVkN z^h$6|@J$F7uK|)qv*vh9s_4N?>1#HA^lWuPYQp4%X$kWao=x{a| zTatHYtdR-D3A5xia-Fxz@h!7VA2Vrt zmHb8r$09X+;?=}&<(DK1riN5S>csXzszIKEb`Lr{=qz1E?;7rR>hW=0%N?lkY9XMk zfFEQt$Vt})dGU=g9!Y3RRD*&BX$PeYdVJ6ZdD;a%v~aF2yKSvd$+)*5S^>XX-f3&QV_wwn<)$9_#_Y?>{F=q8 ztAjotq#M*V=mD-@92j){q4$heM02I2_BZXIR(Z^|@|a)k(B0I_)Zrz3l4DXvo+8OT zX+To2acK8SLl}l3OwuML%0swU9>OsC3Y{NUs!E!WG%aan()^@lCNZxz)%toXnx<=Q zY&A3@{RX^xHJ$A6rgJxKnIdUpa$ItH9-p)|IkIu4I_ce{qe8x6|C42WQsdyEMSK$eLF}8IEI~1!bbl}} zM)XyJ|A(gZ?}NXw3pS~2DGc@*49kXE3J!yVO-8{WQGwQK90#YEh)Fmutl|fc8=Mc0 zPE)3hG_hH{0g2`fUZijAWVPHwpBw8oc-`RFjCDJ1%H~M5V(|XKmj~Y{=Lf$x_yg!K zW+eFUHsG~T^G$mBHeir+Gsk~xCoXUVsJhx`@q_irHnd``gMWLtV&Y0-Rx!QQf5m)q zpX5NQ^jb}&A2J0G+?gr(4KUr6wP?d|`Y$&V&-6+~@?*)R$u$i+*ck>%pgl};VxehH zeAliMO`KPMmQ9`ys+7r_QeH~=AytL%lasfl#1|=&cPGD_e3!0Jopdyokf)O0PyQ(R zpUI8MEe$oo{k!FS@~6pH421%|wlQ8rev~QhM>}T;_kT7GRGc_^OUOS`R4LXe-YG#T zVKkEm<$Q`miVMx;4^t+OvrHbNnTX%XNycLQEf|t1sVOsPg%*=XQ%0qXPnn!jM00AV zHN}~(u_l8k^Bu9+#pLmn1u4&@EKXTXlm14N{%V$VFirXk&Vd*4U#GmDvM1#LRb$e* zYPfi0s+K>#Q>2_t`7Gs{>3M|s+_9;xtD#joUd=N!H5c(I%_$wGRKdn?C5#y-;>Ink zg(`vUtmac)Qv0!2h=Ot5{7Js{xoEZ`H9j>Xb);!H=a`1`D=hP=6H=@7HFe&;sZ&!+ z#Im4O{l9L*5)8|>O7L~RtN#U*O9d~Gg4E4vrD-*3htjU6Ycg(RUdRf`dMtN*?qj*r zbE|S+%(F_}mwF=gqtwq*ucx-AcBciWVH+l!zZFIewNWxWEhI(d0Y#PiZEB;es5Z)q z%0m{JsO5K>sGhykG+UWwndX${me${xS*_TM4pLs6X@RY6zl-m1X9_+)RVmU2rKP1k zs&AW)O*_7Q<1eHQO`Blq;!rUQTj-%?e18oq2zKpZ)0*X0piFx@ZAsdOw0ESVc{}NI zty9tk^=++9 zcRT4_*?ZfJpLllHm#ET{(w|CSnvtBbF;AJEojxZ0(e!-NsLVHZba9=MH&KyushYdPc2bdj9)4IV@34kGl*+1-&)AxAt+7Or@m9u} zj8AkGe8#?vqp%t2zSdguEa`eD60F+vQoxpe(6+pk&-gwwL*G@P%D9zjpV==nATt^@ z`#F<5T=<-a%5;7BVToL`+=o(Gc0CmJ#7xZ`n)z01(PIBkGat#!&n(V-=5`l8+iGu} zFZjOPRwMYnGKHia^{y=HhO5W0fDeEl$pBB*37QV9vwc`gKdTTjOUtQ z^I@mYy-!W84jMWue+YuMH^3a=P1PsNu8vW(|<45>Oy*lLCs%6m_}su4BI7{kr^H8Xnbr*7mI3cn1lh_<6^J3DQaoE2WChdOr&{fLm{hJJYM; z-z(*O)>qjt+|FA{LbIB)1G6Kuld~VouFg|rwPjmnJJO#!;j`{%JrKLCw`iM)K^N)w z3A#V1;|?m53=2;W zt%ZZ8@Q${!RRa{+|IF59w`cd{gyc-hnVvHQggC$hK>-3`=v1gQC%J{5asm@f%F~E=Zwx7pDvI-lLVs3 z=5wazYR-^TXMD!5lF95wZuMW zJyP;tARF#W4;kavqrNwew9@QJR=%oyIQLCD+F+Nr5RzdV3p|a6{W2 zdG0?W2QDDdt!6oPo~j3&TfNrN^{d`Mue@)A;?#HIR0=PDU+${nbLZzi*E*li6>^v2 z_)qY?Oznb8P?3%E1+x8@DrN3#xjS?B<{myLUTx~WdLBQ!BXnP*FV~BN?l0)C@Ce;s z7Oo|QxlKbWhAka-Zg|y*%n@}X2aU`fIcDU{k&8z@KkCY;uSYeGx;MIao=xuWLo9|k z4w*b;!;m+IyfftPQ0>sTp%YBfSZG|eb{49J^cxZ|By>pPkfHLXFIIf<9Pq#BdJecK zj<1io16!gd#>7NL>>5+Bm)K%7i6Sa0(kvWsa7R0;Ad1}4n{-eq0wRKlbOZ#Yh*%IS zpcqYpdI*sw#fBl@+cLX*`2YN6!rkrc?#!DvufI23eQfa35SwYavdy%@g1=F?(P5)Z z0m*r)Wg8_}=PG-laFA-?U%L zQOn(W#HPSa5n6n$QCbtVW@#rJV_D9u*Bv&fDb5HBDuy_S_{aF3rRyAXhGz+HQiuYRge_y0v-y|+N)(o2-O;2 z5@CBRr5nxIh(_QYbInws6{dAmD@m)Ak_gAp0sQKp5ptkby4E>D4!lqDK%8hgj;b*8 znVCTA=H|(pXKywX3bY!v{?>Z2na7}WG9`pf1tCnUQ|k@Jvt*2CQ?1cvwasJj;`?(k zWgy@=wkPdw74kQ0ZeFqZXXeQ#sV7f^CvX0JvkrdpN&Mt#V2{}>+-yn9r|P2!o(<)< zJ{1k$?7g{UbH(PS&CfP>YERT&V~REhZq5c>vAtITw1ZF+(B}Bfsd!XYgr9(@1Eprg z2!4wo-dZH%<+MuB=Bu0UU_3mBZ7&u~W-)}uP|hEj=2e(&pY|w4p9pRKpv@=oVEQ}? z52nw8nmhag?ay)A>XFW_4scQRb@jlX{$4OWcJ_CWN(^XIv>op4d$A0i5+m(R+J}UE z?d{sTwN06eX%vKJ1BA3KwH+~p(lCT(lZF#LiJEqpcBS^eTZV5Lw`H;rX~$@1w!iCZ zgJA=wb(Hgcv`>>*MkLvq$!D2s7lMe=M@uCppkY91FdtsJcD?pv?HAe|+WnLc@tO?m zr&PxonYtp>`(%t&jrMQ@7WN#_iQoZH&)~~is+B$n{?A8KEzybFPDdmoSu6Rj(`hp$1gdO|!c94s_c{8^B zxutDO|5hF=ws1|l0#>z|;fS`XZT*yzQ6!9v@*KkOHO{g|saZ~HTNiKrb?fe}7F+$c zhEO;yM@?JTl7JmX%A=-etIpP4M8MN@GVEzOJ1!tOz3?VGD9|obnQtk7eQB#3rA&}9 z^vD}XC4lq_SO7^88~}Nf(Bj{9Jtur`V7{BO^(?0AQ{E6oU98a7@~t;mL0Fw6KMgeR zO=MNJmriJF+t#k;Hc%aR(RIs$ozd2Rw+&}uC}PKY#m!r#ciWV0bGH4o&6qS6i)1Lp z6m9!q+hU43)sSjvst9fSd7JM4(6%tqhq`;Z+$@@XqN6;~w#03D+v;^L=)B$j_4b+D zS8li8(Y$lwPWjG$-9x%pbz64L*kzzMK`%isSMQ1bG9lWQx-F9m=4XXGtXO+(HtNDK|(_wd47y`J{OrTS(b4#aQ z=T9bFPL-5X#?S$BG9Fo8>MNZWI#8OAEI+3575%yr5z-mlK7zHtjv3;6_^pLinb%vO z?en%Tpn?oqnW)E5v0(eJ+jX|@-fqqU!h+T6Co@+4-`RkJQi)*u!R@{~Dt3S)4@W*u z0dY2jw`_a*_T25I+ncuky+duslpULQ*zR!K;j`oPj;tLem=}l{^4dx56!{E`?KPC0 zNdeB}-d<7+o*hoDqpd<=i?+9Je?@Pr8TNK)`gn~ zEMRwQ+cRn}E|`sVCk?KZbOK9+mf4{lK|3G2r0c}u;dJ&TtIUw@6x{{n zo5tzRX5X~n<4lbd3r`g-U2R=`_DM6jbT5_I$n2x9QI#?^kd&|MtsATxO;^MD8k<{o zKytn(GSW@dO@G$jMHB`@u~^ggM7wp1bSv=hdnx|0#}4V%>DE(#Pok@$73%&;Gx~F{ zoRMzFuCJS|J$b8iU++R39e%PS+BJL^Y=1}|88pWnP~%YB>t=9Kf>U9d(1E|}yIo6n ztz)M*i=E9{+5{j+`n$HUKWjUx?XuYAu*-MX13iHrC$awL|B*a;R_u+uc17$uzN>iG z)n_Dk@$KqyLc5Z8LD4EAf_pS3(scOruQWWKw|8~f$y723Ap>+wSSAu&KE!m;uD^G^ zWLeyAn8nF8({{b(sJNDWWH^MGZ0Zkq`mfuaRP|=)t=3zow?i))>b(`|eW$mCF+GcE zxMqoEJi5x;MLjK=v`*}7ZtWBD_4es`==ryF^}iG&J&B$JmQcgFno{`x{*^AA^28bG zrRZg1v=EZj<1ip>`FfRlwR&Lxr)ANr6r_G*IoDNJr1wn!yJzjqHr~9cdOdpo>QB(0 z!P4s8W=Nl}Kb+7*!FvVyxXJosDSyYCWDbU?(7#P>>+J&zS{q@0;lCGqp$Pq7^mpkC zO_Baa{cV(J05%#BGa{LlP$}sn1P_%9=D|F3eQ*6n{bv1t^j{n7F|aXmHu5xz-!pa3 zT%kZeL_b|NfmTHu=xZbTKnc+=)W4*E1JmIx9KCf5=&ks7Ef!OU zW5VA63>NDmQ$&3IL4(Z(yTk&6;RaI-zBgC}<}`yb247P2{by|V^5yD7gZGB0{P&er z{(45`PyqUYH*T%D=K#+@WFV2q2Kd&p0fEGSK*d0AaK@m(;D+IPLtVo?hL$bhinc`t zK?YHHq_%d*Al4w6+RUCb6^#LyfO{AOZ;j8}+ri>yaM9rM(=J!p%%mR0Gbh>1%+6+O zRfC5H{~3-ooN74#WwW`b>LY`v2CuPYV1+>kmLOMPw0qQ{u#u}iF&u_}c+%N#D_8x? za033}uWpfC^_k%u{QX&9Z}W4BTvcKC6aESI9H+S!!sYV_z((P ztQ3R;wbfBJbq}y{!+OIfn2o>0Y}~3)!uUUh`ZKu`Y6Z|gZS5iG_cUI=LkMq? zQMb{%-Td8CchA}V^X}cd5AP1#ov=H7_x0U(cR$8JW-VU-U?7|B9{n+pk5E9i1kmpO zarZI|+J7);EdjK1+5td?Ff;PA;JBU)Jjx4mDoY3y4dxjI+Yxh69d-3+Nfk(aD!=oN0r?*$M z80{IoXB+|Dol3Y|ODj~#JwmicbI-D8L~4&rV|}NoOe4i2jAyY&xOd*(b$dPbhVA>= zc!hDOalCM}aJKLlp@GRXlVv6+gd_Gi@A25UhVm?SDiudqm<{ep91n% z=7K#(_ayDf+H(mnQ#O|X4MZvvpn)hQ0yGc}i?pYH4}31*3(7Pz!4T-l z&)=)IcN{oG+BzvRk4zZ|qQANIJ71chz4Q0}#0c%50+ELlnklA&y_@&$*t>hL1H}Sf z(6%d;>4Xxr*KDtZP=Xq<4|6iN?!=g34I-rt+QaG261Ap(MeWUh`2g56W@AJLAdq0p5@5AIO9)IZV=zsOR852d- z1lUXvlIJMn{RJZOyEYrNPh;PY%J-hY_d>KMWg{6UR^6w)@1F5z#@`xi3I+T0_6hg7 z?h9vD_?Q{mXR!}JgIS6LDbGxRrP}AQ&mZrnV|b}1wAl*w#qUeqm%r~aMuHVwBpAG< zj0A(Xm5^ZYj)=eS(Y`KY-v6qN6g|{~89B7xX*ld>;|a!7D2y~@Ik6#WtukgxZbnM@ z#_No=jrG}u*}^VNmJKrAYb;@>ZK|;LRJ~{HVC;+e(E?+48kz$OFj((#ZAv@Zy8z7A z$T-co7+Z76@dMUf>h0^Y^F~p|SB>u(KQw+zUk6D!hO~oJUP5w=agx?F7u~Xg2PPG7v5ehd6w~^Z0Nld&m z9guLJumUcLgf@_qPiRcTAia-gEIcd>5XK6Vg&D&0toi0kQzQ%(MiJH{9%((|Q7ZsI zppxcpacJdQl0*@G*DAo32^O!_!aKre!Y-3<=xAS&@KF~8l7cgB+8>-7)nOj}CSzc1 z117_vD<$N^&>X40E+9bDLBSRjIT#cxv}V+9M%oSxxoSzX_9Qo1<7U0ah6{RKQ(DJ9b@{n=~B~e zrYB4@OfQ?>Gwm|{V79~zRCtq4QjUSfK!MwpHN4Z z!}c{@ZTcJDz9o43E*A?-4NXl=?M*}R?)_eA_rggFrY@$wO3{CVDcEW)Ro=^|+WHt+ ze2ZZu*Su|7#8F=Y+d&9m_o+6Kdtmy=6pBkz!t7LzkUX{XMSpt>oG}2AZ}ZI@;KU@e z&xaHM-qhU%-e|LlW^)Kd1tLhv5bQEyrI>FOcv)`rHJkIzHkzf1c%+@uS2fRUkC};? zo!J31f3st`kPnl$0GWx+tRX`t&m0=w>3JZm_jJ8sz7pMZX3xxeb4?)iCJ*v-@*%ZJH6P!bul(rzA&<`IK03cw@uJJxPc>Kc zrD&o^Lo`$LgJ_jVI~S68av`%_H8&s9d~)%VbCsW*JLJi^+$ZOn@I@vf3z0n$dN7;e znqvrRLu-ojOp(Y-6pVd6a|wPaiV__s_~ir4FK3z|QMxD(+w|0D!`2d&h^nwIGo60e zOp(88z35NTf9B)N-&zc}SZuM{LaVvQNj^&?Y9V79L|vjcbWDSY_8tf^FV&z>zW7co9zptLeaOk+rT-xr0%=OGo*+A`qw7xe` z6^6vc!GG}IR!EVdb63oL&7-(mWFWOoIT&`}lmwZdHLs)g47{eu{0etG1L^crU*c`# zN^K+P`qaEzsp}cKYkOO-0zle~5&57MvKVbKi-}2pXz>kaiyi6jg9^dSR$S8gf-<{U z^z^eEbh(pU^?`*B#+3&|7dbMw;K)(sj?pZ)Z8z$o^sHe@|R~5=~iHD276i*TV zAYPpdcwVpoiARe+hh((^GiZ1c1O1e9AW57~hSPaGf)@1~TRd3X&EvNQNYoW_|!2$(bcR7=EH#W%%w#f{>> z#GT^7Tu8Vp$s^M5@*&x-1dqQ&dHf|q#$Uo6e@SN-qz%#Tr5~h7qAoGB5=iDq7D-k} zwo(3Dk~5DWeLf?)Aw3NOnIIj6Of;t)ZBubT5$UC+ew)SwOssQ25+_Nh1WDW^UbtLb z+xsr?=d_cq;_;p2vnTfTf=9XY1%$$giJSV)-fg@=^O`D$(z{TNSq6yzeb%TQ0C%ZK=yT(tx)! zOZ%xKvRrSeMcEEb8RJflHm8I ze9Ie_cP(KigrDXPK}0Q^EdL~k=tG)_^4OB>yUYZZ16HcG+idL_x5)?*vKnQpMVjr! z!>lx{ez5wsA}S&963hYyc?j#F09LM;q+=3)YwltemVotd3Yk!4>+)6<|+epO^~9UXe^w zP0F{5w>oQ8PMoKpsbY1C6qf!2y&7EO5coxe;L!Ikg$lvX`tXQSM0~3Tt7fYnV$5`p zABh^kfJ~%kofyZex6c&7|2vtx63mhH2^ZnFq;p^gX|HgKHfCMSor13&u@mIad?% z5Pn3uqpHnz8>x-EO^i*R2-)b{h@KGvPxQ!-x3|#GSl9KeP0{y`{HYSVk2I&tGm(#*)-ZbCE^?DTfgff ze8?mUe*azpCS=WFHpu3^?Jx*7Y{w%E0jS~6fdts_m#E%;=0cbYvRz=ihIlr<91IV~ zpN|lNF)pd*$?LM+YimwBaeid=cm-3vq*lbY^|Fn$JwZfuae`_eu$>q8cUlN+Gi>W@ zAKOA=qHT_CIr%n*OF9!XW4Ppa<%<@WOa7+RYnTPHeJABn-pqDqBvq4+!E(GGmg9$s zkyKqehw)&pXFZtLCBvl~q+6wiQlZpM8Yn$3J;P`X{_NP7QTp3(&=jO%sXcy!KYqjT zAr9BI%AUMYLk?b8&f5K@CDO}M@ch%7N(J?zwXEI0!cwNP&_Cf)%fZg3a zU2jR>36o5>Ln-ll4a+Jv+N#<)+j-de+eO*6!sY<>4{E0x2!3sS5GAb6IWWS?3E9Qk z{V76rNp|;v=2?49n`d{VnaXy5{( ztaQ`nwqf~BbwA&(+wPq`dfE@f56tBcX|$c$)Z5Vp1eQvlk@D@ow4Z7}mz}8&?VS6O zII5z=ev$n~dmXm2;|=?tX;)AfL6>c1NJ4+lruN*7Q=m98<%Jv^1@^A?srLEyrKE$( zUTz=E^6Xz&Hl1RBoU>YDut%{mNAD>W9Ellz+u?-lYwgL{B%{Ao)Q)Qa} zk_Qs0%(Z__i)r6GBL{)Q7}i_DnfMkK;T*noSmeOgKPsmXZViiY<@CWD4mu9ISgWgySe!Ox+_;jSa!ah#*K<8{Ydj*lFl3Iz_~4)G4B9nP_mp*@4*@zfh9!CrDG zaJY!~Qas*Elh_%IHRU@rIsEMaIoO0a&`pQ~4y_IyggDTIb*jZZT@WYmoODg01aJ(2 z^`n}A|D;$4!)W>S|cU+xi@Wc?KT%xifpCm?(Hjex8 zy~nus4g|r)K*us6-!Z~5-jU6zOrT~x8D{O6;h2wSoq%UOnOmvyV4I^%Q^1kU$ZP_L zCrD*Q#yqPCo|V)1{kHoL>@V71KewuzLEF(;1pL4gAD~-QXik zv;G*e0DmYiz+-Nvqc%X)>4UQ>hG;Z~=y)-5{=!+Eq54`%e*0>?ljNFbotJa==YBin ztmSOn4e^5)oVP2bUv|G!boJZvovoeSoZ~y%ASMSdEy-AxPjWdUjnMRShz6x z-!T}~z7z{wyj+4^VqG#Yynj%_?9)RKI!zg&)7e7gFTiB)QtNV$dZPi$ZVUi*Uc!4` zx{h|8>^cj2y>cCr|KqA88ck3Zpe!*aYAN*^DHXV`c9pswa6Jr9cirf^-POodgcCgx zXtSi3QWYXHs89Si_@bbrpZ?8=NK-lv$5cVJ4myQNjqxpnO9ZY-u4i4VUHe%^rp>P5 zIoD#&8oKmI`L1=Yk6qhg>KyCw_zr~vqIVgy&6ijh_yRVimFfY(f!PO^99VNeTZj&f zJn*&h+-;SnJX-mpF$Tt2(jt4ZSw$zMss}C|cz9sYZKT@-F*;Cv04n>@g?)B(;Kx?Hgh~B%;02w1tAfkl zVTurtY>t0ReSD1t2Z`IZ4*6WeYsII@@|lL%}cL_;CBh zZ6oRUIE|l^(aR}EEOkO|A~#!n?KWLQ;e<1CJLJYm6W_|NZMIt!XKh_y<9mzW;7^yV zBY4(sj}N_Z|H6Hj`=P^M9G-mm`@m9B;{My6a!^h*aN47_iN562GTf5t9w|@@` z4o*J!{UNr{LLTLIT|w=b1+YgCjym`SW(RqAk1lvgV&}W&E((t~*o-{*%OSNxUmaR? zNbAtvL$-%J55*ihCqxG~9vo~}mq;Y5w=D;ft&BGjcCFZ%0m7e}*E3gD5zs855Rh|C&N1=dVdTyns z57z<4L+`7FYDaL!+K}P?+XM9!4iy}#`%L#A+&5A}Py`n=~9#GU~+KxcF#CGro{=l2f4=qA#CU5iF^am zGk~(-y&-qogkDE)-b(i(_d55c!^3DdpP74QR}Zi$!U-sw_J||?O_Cz_zuZ4KAa{j3 z;nHI~eGW`_A_|js_R)uR44M)747QMjNhb9N6LE{!py?_@HWGAr;o)UHLMVaBEe>uC zCum(iti=%z46MChR~$AyeDJXE;ZPwuEIDjP?X`uh(vZ(m!=Kvex+RNVcR`wMn<@Wr z!r`>TS&RZeUluYt2|8SMxQ4m>jC#1K4gYY%;ircw&o>n@jjUKwx*1cDJ5n_dfyY>n z6&@Qrv^<=jwGvh}l4*VSg2?aZdrb0}=CPQ}O`F{bAqu=qk8c?_@$|7oy4oC~>H>As zOu|yD;z6beArD;-s3+oKBC{*P>9SU{Fq}NDc-;12>z@TvfcS)klgD$9 zP6kd-smmsBF(B^Sgz-R?_6+kp<5}(b#QSsaIX?S*+dve;;ytAV@h-fX)fY9p!}Yn|`r3)qB1ZUw%Y> zM&8=o_OjI($&boUvV8)mKEJg}`SLvZUHLFX#?*RKTEQgIUVde-RDy?C`Soa`E!@O7yDsx+6lKyR`ti0_#*ZX*w z1!=QaBnPAsHlC_~dZl@lVm7?m3wzK9R%6)x$CHbjtoNKsoPhlCBHrbPv{S&3CJ{NrIeL8&J`0~War^4q3L-ITs*}syV}m@`Y)>W0<-I=^)(uYWTt#(7>S5@rchlBHzWntMS)-hC_AX z$w{4$@CtpUzK*``zR|vkzJT}zVH1e`04wZKz4m0<8=3YCPu#Az9Ec6VnszE zS+?L81Y02ARNqYMXq__r>k)QAW$ax4_O0VAXt*`<{mZu%-x5t#qu@PYpcL2HEJl9F zZxr4IDcmiQ;)wjz{kDQ6;s+->`2Et{4w*h8`7BGn1w`KVEUOlf7>MHVvRO8Sbrv#P zh|f~|zC1>6InU@VW&4qzgP%u-;spbN65PMY1^I>e#c{8d<7*dfV|ccH_5Ozb4*muH zbpgWyJ`30x;1QG@lpl06=w+~K@UJ0@LRN<8hU^Jl75ZDKj&QhNi{E>H760M>Q~kg5 z-{7xfg8bV3pqK(x96ufGD$|BhI?#HG^UeXz>p#YS0_MEwnDc^N32T>@EUa(%bM0R~ zphbdx2r5*{R5s#K%T18KvA-ol$wyIHFT5mEf&U?YFaKcwG)lVu9ZT2064JGQls_5& z@MU^Ujv*1mIkcFa5|3R^fl~pS~vsWQGj89 z83VUSprt6lIsjtqAnzPGa3pF+i69^#a6#azKo>>7?XZBjfJ*^?2DAtC2YwkiU5Emb z19Fs!qEv}uj(H|Q0apUbTaGyo6w*x)|j#Q$hVh$}; z;gU}aNJUok_u-q(S>Re(p}=1PjTj$OZQxc8grTToD^yYm6b0I`vc_?W>}Yq2j_{TT z#snq?o(a4fcq{Nl5DJcVT4y0~V=R8QkL>AZ?_>PTIm*6P%xe^pKJO~cb9+I^;hlx@T;E1bVvmxor?NHFq zL68GVP{>0Nk{+}*NS6#r52HfT-_arIu8aj<$uMnU(2{)Pf6gl`(`vT&3b_$6>m&PE#) z^eX5B%U!nMtr}~Kf=30f67qw`1y2s1!N5F)g6edDYVf?^MHs3n7^>4dX}xT&R4sUC z@V;Qz;N&CrAsmun%Z~L{ur+6_0k-^LS#VhJad7@NzXVMRQwLC*$a#;WH`CW$w!?z+ zf=h$12fqv+I5OkNK8zc`DhX{ZFIxLMp>RcTeK1&nDY5PXx5q%@5V7tBVT_QVBdSNf zP!{6u4H4qBK>j;2?}(E8*Gk^H_Q(+VuVKioTRtk|c*JSg5&4neBWI4>Jo4~Jdx+XI zBKoHd3b;)B1YQ$y1Vn$rH!7bt;z$A%7@IZ%BxA_zAPxy8w0!wA>5;-th@3cb@yHcg zd$*_9<^izu6BP`J?k2=f@@ck5nmfVOOFhEQ4jt(^@&TX&E>P$Ly#1NtIZ-KC*6Yj< z858nl$dspKf}}TO3oD+(1vyc9fk>J3f%+iWPEOX00-QhNh(gwdQ1(f1ALL?TK*NJl zy?L*kz4;eIBq2^AS3)PSWW(ADg}8-8Fl6Iq2)F*LALP!3#D%1WWHNYIM&aQ~z{8OI zkTQ&iWf%`v+MtlykdCJ?R^Y;(yy+oLA>1$}J{`)u4>oB?U+5Q5X9D`6kpDu50aO)M zGQJb2rV7H4LVR(SLIHNDmil+7Mkr(dS{usPzt&=j;cte?7cxw~^qr6&Y8Yx3YQ+ry z1T}nh7=EZj=s`UE6L|RQ(ny{(G%K_^?DMd)a6$OE@SnoZhu4O`3jYw16*WBS_b5r! z(dY@$zeVp5qR@iSQj&A?da?Q8dlNzEt}`bLgW`4#j|4aA4_ybXeBD z3kCluSs;>O&=aY6s;#E{uy4Xl!}5eEOe1U$nK>UeFKj{BDry>^u@;q zG?l40&>8R#7#sC!GeKBQ*psklVejGG%domIPyh+fqlyl7JNlGNwHQZ-&dPbO!#D?N zzhDAU>O^vt9pNJ}gEO??hffUuHXKrl6%fGrM>thHV-6KC(!->`M~VgE8^X7R8-}N| zd&7s}`kSOE+&J8l8UJnK@XO@z1L5-U;P9yMBzo3=u%4`E^sJw7X8jjE>t@d3moPy% zg*+v^OgUm?j1>yM8xCg=fuVt@be|FaghOzh>4*=#b|$R)tc_a4$cR}H-$(dHgh#+> zoUmM;D%ufWMyS(++d+>=hgw?V1alw$^@vpwKSykiFpRK-voIT3oDvct5S=(P*=5LS z<_Dcngk6M(@@eMoz>VNE^II&=z+r|k3^~6%B94xvxXE&?t(~H9-u#G$h(9A*Bh@0O zM9ztvAGs;gIx-|OHu79#ab#2Ev&ff`;QOZ-fRNdPFR=Jv905rPgwn$;77%ELB0q`z zoJ1E3$ms6`JM43?sA|k0a|@wjxls!oTL`wh*NU$Sah@-~@Cn@@C{c zQuy$vgpXH*L4~ji^U7#3#Eua|cqLGDFY@0gM5MdvwDmyd^A0ILYHZYksC5=7>dUA( zB+r-E;y>Q29nx=C;U|H#;ys3%daEYI1<3Lp`9J}x)!Y-_8hN1(bBWUCB#;5IXh+6Q2o2frqz0bP9JI~8zjw6dMiM|}o z#(&jPV9{dtP_11!&n|l4*ui7I$3l!>qZ1>K366=4NsXzGd3v<-*!W{oA&Qw2Gq0nYwhqV^%7|D<#$7m%*;*Nt z30IdI#O^Q}{=7LyCm;Rp==`Hgj{ba9`>5Gb2~{ecrY8TcCMx!J5D{mv zsC3CxjU${bJKPZ+-Eq{AKtI`_0mdZ_ccP~6OFAY3t}G_xb9mj{qrpexjwT&VJ(_d0 z?CAZY50ziHhIrju;&pG>*M)FiHv(Q)b@V#*Iz#4lhl$s{W?#32I9KI)TMNjN$dP~a z^)Z!WpDJEq8Kwfx7r>v76Ep)PIS8i}`>GZln|*BYu@%RDIkx?n$$WI|`(yJVJ)j8E z1B&v5@IQQ4k#dZE5k+{IOr9ccjC~PApyKvSW9S zJwDcbeAjW|@%^zIS$?wy8%5V2yGlQFV7&r-r1UhXNFlNlb9l)wV%1|Gj*mM&@%Y^1 zzd_FbasKg<6t6gp#alNztL3?p_Mj(0$A3J&T1itF(8s0`H>Kc=0Rt9yAN{X1%rpnp z<9&PpNy@GS5@0ng%bv&DoAF1>!idG2UO6gxV0JcUc!F)qDs?S&FOiq1Ad zGJZ)qan^M!ARdOOk`6wwRG`@X#0f4k4b5H!9Dl2k#u!op#r#;4*r>S4LVm1etW)ek zhG5WD9_9fjjrEKT!X)7=CJFN-KKz>4ld-2`Kg0>*;Ak>_14KoM1+n?Djj@VYQ1W6+ zVy}@X!&o}plD_bQt(!Tlpi-U?%TNaM660`w;09E zk6VE=?$tpeqg2&Nz0DontvE1}iM!ecK`bxv#Be$Yh#~azyc2@r4wA znqd6YaD)4<#NS~h#BF%Sz@3K9efV-qGN%q5O~ zp%db!5T+{n^CZ%aLVr>3@1{RZX6O8*8~cqX;+n>C&Ce5b$!KCt4Pr4s7&_~~Pq0q# zO-K}>1cwASTIY7_B~ofh;b^LQ8<-dpLK33LH02V;)2y*rDo8k!kdtsB;p+2#sPZvw z3?xWHo(7}@sS<&Aisyu^FVp;BhZ5=%df*}V6CSmo{uV(f{DEP1tudQJbUh^H?GagH-OvF-%NtL4H% z<^iJ`7ci>v1$%#<{RvrOZem&DmBgEg4-*HI)P#Z)fhUqrG$$sRp%Y;zVn`WWzk}gP z>E?nHXHOKIs5)^E)5CRK!aUeG#H{l`i4+e$1aZ~TU$ywe+r&>2ze${uI3w}<#FdGW z^ZALqL_y+kNbf8LZdPmxZ2?OBJn>87>^I0JD<%$gD~8B;)nd%Cij_HCu{}y$m*@>* ziLD@UYodOlMWW09*L4U}Eao!BV&&9Vug-iH4WV0ks`}-j2wlrye z(vqZ~lGY||Owvyh=R&@1X&xMuSDFvvKq-DysWNOzhfKJXJK<6y*Qm?ZhqorlKPfRO zC#g888hCM1Xc9z75og0q!IWb!AwkM{H+}=PGiN7Ta9%jfA)M!s zeEej>$@G&CQbwMdcxvIPh|>k9n@%gzCZ!=*4a#>jl(Fv%WT|Y}yhQ*S|CsoXk5}aOh=XskUVwUh}d8&bq6i7CY? zP39;?J!KxqPmsY!Ca!7x)UJ37BsFDm%1Vl)`eKsm_kyU5<$zMQrRWm!R+b}5F-j4V zRk>Tinh#aEABp)Xb}4=-(SYYEE-8m8JfDy8T&6_QvKS*$FbmxFluVA=8rv)ORBcVE zOrg&AVdPt;Aam<}eoAvn=c&k+5UpK3bQdg^uR zjMN3G{;AQa#qjd7Q?<%cl)aMdLlH+tJ~UPGgsrtgr#_@kBIF?}l&Y3G2Fp<^xQ;Ig zEg>yeirfFmj-R?B)i6~eM5$|2wk_=`ELx+%lrCHek9YU$~sgH?3LI_rv0^gpdLR2p&ituZEIMTFob_)lx zSoY89&pB9j%od%Var&5r7kYI1httbXuVF>EnWQ!_5;~is)4!kIPY_BkRDN3bwDD;x zmPU~qjS66##3&@_K1p6Z(WTR#r;o7DT+a5mN9eDRSWVib(KyKXV&k}VtkLNUr?0S{ zt$k#Cg@qg)I(-MnA-HiU?sh5vbjRtpX`iuEKEh79BTbbv<+vUQTPHnG(`n{-&Vipc zFKug@jgX(VFl|-ZdIskoQ#e1Ljkw>f5TmqRX^f95oV%|FpwcWE-6%+NPxDI)NjuIw z>2K;u#;gtJZ*1kV<)@uV%TK$&^sT1)u4nsJGaKvmD<_oJm1(wy?2;c*NOA~V%96V6OMGyBZqGaIn5xtJ74mvPr|@WK$0vs78+ECa52 z#^{V0=99X)HJmbTG_d%#&4gY~&4dn$OBlAsjFYz4!PqK`E-*+fp0_kr) zQ+9?q+U@5vjQ!(hOxocHQq?mp8JZc(GAuJ3;B(KJ_ZcW-YQ|g|y%*5u#rzBjoKWj3 zo&CnsVCbGj@U#cH*Y#RNG z5B19;I*5LqGe5&EBQqmk#Lw`|h|Pd9(i#34k!*i|s{c~<7eDHkCDfl~w64CKl@7i( zRn54U@gk%9?9{VM3Hd;-BFrE>E12I~U}<4r>l>jLGRXLFcG%f(SY4;-V-MLMlu&I* zc(2aRJ^KUUy?Tlh2={P=4Fsi|ozU6MXLa%0!0iC>hjMk(v->z>kcdW{^*9@PHt%e2 zreUUYW=Q5=neUsS9uLSyILLb?yes*_yNU zXCWp=aI@^vqXA&jPaG&H2n>nd39R$()|KAah-&_I#B2Y3663@tlVuJ?Ha4 z8#<3M>AbRJe}0H$f1b4;MsS7v^J0`~oXKGY?u=Ap#3FxbrY8sa4}(8GGdi>48Dy2g z={P@SretPj7UNk?j~c>#jCXs0q46dA;H@?{glQ*y)5aTQa*Do8UCYfIS_` z7l-hco||-T=D8owX`kD9Ztppla}nnX&Q+YNJ=cD&@7#a*#TE?R=%7?C`3&=OD?WB3 zg;Dg%hABw77bw9w(K%a82|6$(uz`4#bBE6bu&yEt>?N8lLFbO0%lODkG>b7g`*Gm# z73&gOYKP9QUZwJjyYWE9ybmC|Mjt#yck-mbE#1LH4R_t(-4%rsiA`s%05wiL#_w zZrLNUr?EnS3j@FN?3Vl83}wl({(deLWCdkKW#wm8VsPs~Q9d}}I_pFhM2L|H{z1s5 zB7WH0LQpV#1x`olg}lYA+N^r~lL@EuJ~)&rBC9>CH)|kU0Q&`wmWpgA6gJt+aAI5Z z+sI}{5Lu{8V5zdlW`B*B>O5YmCG8L>)(&KkHVa3xWM@1?ma`MuC=z7rX2)bFW#_^c z%{I=KWV>Yh;Ylr0+M?%&Y|$d+En3V}l703{VJ+9l$WEtUuaWUu=&PEOU6p+|`>*WQ z>^C{X=A-Ou*>$;~k>?O?0m^=m{Rb4m$pOw z;JX|#zVaRY)AuPBXYmU{XSPKcSo*q-l!KHkhFg}r!A)=rytD7Rm2)t!{7FPIM+j=q=WRZvXCB2 zo{Dm(a;V9n_I`VmyEvDLyuL{AC_LngP)C3;im!z6F+WyyIjZGKb0c!|a&P56&ix=n zxz4%X%8HAVlH&3On16GR=caPZzlXWzUvn#zTbx^?WXpAq1>mr zP?ysxZ*1m?-}f>{!1j!EDw3CfGhgL7wxgyhX+ zNT4r=1b)eqz$JDluRiY&if$bM5}5ZCPzWl%%s4`kz}GYhbY@B5ekYVaJbx=e0`te_ zuP{aVU*>X0I{LK76^VOCw{U(A2aL28fow&(qhsNj==$%I9jJlClC z9jVtVUE7)AH6Qo8;Fq=b5c%!fe^=-G1UtnI~RuKCPtY8`i zHb7Wj(s;zvfKz2=85hXO(sTuZ1rc;Z8dXqMaJ8VJptIn=!mkVG z6mBduD~vBZ%gRkZnWBQag1e@&h1E8)g$dZM1fe9o5S3r`e|dDh(BMw}72@Rl_yoKiU5R<`hN7hJw)BPd)@xTNr>!Zq+M z1WKAOY=Ae#la@2E`7BHZvpN;N&_497r-@`52UKWV=tIi1AlyK(8R=Z0Mv+E-hUgCB zccKgRb2{zAB?>me;8O{}DB!@vRzmh^rw>X@>A}XkKO9lv-SY>9g2F!v6@~4EkVHzy zcok7waVe`u6?Iw+KR@#Pg!8k`FFOCrd7bn7&RaueA~uY8qmpI8haf92u;D`XQi=F1 zP$D`arFsRwaLpROD$|=~*o*TT!aL3foj*w?%UQ^IDd)N6<3OB$DMIJZo-Z4Uo=ZML z&&AHe&i{FSu;`1TDMh~*Z7)LztE{7JE4u~o5maYS(pv*M@Vc%Y&`iy%Gc4GifN;1tY@ z4(FW#6uIbqF&|4hr!YmHAr=&WSv;lq`(iCTt))s*OO*r_FDzcCg;-Fc zRx+k!a>@7j<-Xkc4jfdL(gqGG&2Rt|8dFrVzGNf8DxN9jE7)`NLlsjqRAO1;M28{D z)Zs)_RC2Jy8>@>}q`D|mw-JpfNhQhwq3g{P&{N=2oXr6*WozV3ex2?SaX5l!aWq0%j-x|B5FPD=yf zw6t*mPHjMGPF|`HOPxynOT)2CZds`ZM(Abubq}F<6%*lF_`1yjm7Xrm##iIG0%x39 zt@K8jN!jCz#+UfzD}}11jirB=z9{3BO=bu|DnW@>1QUzc0Nk|D=3c`M2eZ@r|YoZb1n~DkaC{(*KbE=~Q$HV+`31IC#n75)=R4 zhH+2=+wfA*r5HvwR5Qhzz;p?^lzIu|mm%A28lwq#air^UABW7oW|ae|ws`5)rMJ}j z><5AD(tqWuq;e2Q0fH2yAY{r>&bw6pwW5POZRPc!^d@#-R0du?1^FFJc5IYnSoyAU zVR?PUl8SW|juqal1R=CSj@qG$-z&@&u!t4gDhx2Cis4eK zm~KuHJUd8DqDdSTzv;!TB?0OPld&Y_tnE(eu!@q3>WbSHt(C@=)|C~kc}c=TTg=KB z*D4-!0PStdujsDaUa2P%RJ^ZTQ~7JBRXlJ$+qJ zsgp1#wd130E4?a{3F*vJ^NY%m${5Mw>4V`s%BPwTlHhrqUW}KGWW3c+|)m}dh2!*>@dTd)d;Sg;DY7A&}leTxyJXY@J=s@`0ld)e}Gf{aqqFjuSDFngY_|H#kQ8n962Ujt$# z{xtwpj(^$lvioIk=AB8@J2i-R23?NA?@Yq))S$~H`8o41pSxUq`7Vp-W-OvtU%tXY zbWajT(B(fax3IlU+1{5ggF?(ize`;nscCa4;mn4gKg_m5o<)uZXWWUWvLAf29CJ)`Wo(T}N0xLs*^pv5_gr3{_vLt|fhR zVi2pV?^Qoxvo~f^X&iEmnbocAmeB-oSHHi)=s&F(++rYMSH@jYXZer`=0npY=*st3 zpi0RQJ~Wl#L!KO3_4&tqsGsFS3+&L916O1eWSoHyUGckegycg36d!_f5ju#YjO-oJ zm6KO8hy(?oF{K!dd3lh%ai#Q11tAY?Z|i|Py{S8$!+FkEI^^#|JsESTz@fBtud{!t?{V|s(CO&K+uN6hP9 zQ4dmijMG&bndB~o1*&;b(@7<7y>mu2eKr5$jTV4ceuS8Rb@bHYv@wK(&LG@p8@OurrnHEw> zDqAJ!n)bErg#F`NxY$dWS$IS;59Cv-INGURv%BVU&Es0gHE{9}1R;kGP>_MJ!LgQC zlP6bt@vmHqzm|Kg1dm$Iuf2AL&IZe&gSG?d?{(ngwL;f!Tx(#ZoXI3_u6ID!ny+<$ zhZQfgV;hkYEp_By8@N95`cg0k_Oa01OT-qV>*KDgvvhL*3drUC+JFo;wpr?Ua!~q^>7k zPsgYli03eJNcz<}HhSXv-Rpl`f67qKD(Xq=SgT(Zr|-WvhTRy=^sS`&{>=8R+#kf- ze`Dc|t2gf4_@g$eHm>&Hn&WjOBAG`;p-t%yU})|uXa)Gn%WJuoXXq_#DW`xwZm%1*UrTJ z=9CgAw;IC9t(7@BQ&U2w`Hl!!pS2busv*)6)o!bWIxvuOcL;=7k)YPJ*0%OQttUYY zC<*&h7Dwk|S@I@{tk>SK^6X(s0t=GxYg1~oY8zN6zJ>CZLVj&Y?d4iF|ErE#1#Nci z>U!ZgU+C9d`?8j;8|_8)}DMM@F@1- zeJ-Iqmz&q>a_dU#?$y1&wd&S}J9F;n+}U#{{Z7uEqB~W0YK6mZKDya_^X1Lgb(88= z*8N^*O{JxI;Sj+22JE9ltEp@x76FM~~z3Ybr1Co#uVZu~S{@@}Pew|aDdtDI5y5G52H`vKJ6Q?e=E(Q0R zq14OwDSqV>kh)A!U3J}cf*rTu&=hAgRQIs%DPwK)0kNpAtquxq5y?d|bw7H01c(H; z1h>ZAns|$Iv|c#e1~jZ0&JCM7!3y1)dTSmHB$?(b8Z3Leu-dtYV!P^ca7>7X-!i;q zdaLO6XSYSSBW~B+9%K?gP0=mMEijf6(hfMQJa_BP6uShEy`#hK1enXyD!alFak$*e(cJb{B8+1GAb|y@N zUhtV`+kmXRpeog`ApK&pnaO=XZ)T}Eq1!iaKY%a=(#k2DH3nGQN4nfj5v`v*(TnXWN7MXjK)pr1v|d(UQGc`Hdc&)Re;bE4 zPJV!dqwWUXJ$g6!Zu;HqyCrw;-FZtaIT#WS`^3 zF4?nt3pkIk=EzUPA@HW?-i~|v1UYKO7(C>1FJx`qUw$q)yI{zncBC_D*CmLR_Ll0pI=;9X2?cR?OZ>irxJ_9>+3e%1Y2 z+(CC}Jh-m||Nis(;q_lMw*or7>*|31J@*H&%#;DNfQeJd;1q4v>i;+z@?9_C0=D4S zFRou*zXiWi-VODkIW@1nxL-UWPYu5-mgW@Tv4yk%m4bR#T0?pxQLPWIKU#mX{%n0d zyV0Ckxm*vw%%l_2!!2a9e&m`9xoWq8bXfi4hG`AoH!N+~(-71UW#*;YRNqqnzJZU; zQp@Xc{MgO(qJc~QZ2RckrrranA+`Zdg=h<2DW$qUo_3JMtT?8zUM^ zpSD?`MyEy(c5$uRy87B$pw>V8lTABR+5jfpn9!Kc{%Y}YM+r%(8mk*`v%vLXfvafb z+J9}{!4tb0-{J)fVuYB$cS7`F#Dj4R#r=ySwfo#ccy13?JY4rs`=RT@$fom;rajvH zNdJ-9BiSSWN5>u|3r9ZK_Q2?Y$pgs)rw3IJ{(kWC;h2XLSsXSeDYuFn^*AF|4K)%A z9vpt)_aOQKU_50>RE{sNk)Q{04>FV}$lz7%hTWx1l&-beq6gO>Fxim{lqgyb28c}a z{40eydeHk&9hynU8D)Wq9j3BIL~ z<)>en@*nCx-2KpjvdFBTFh)kRtOx|xlqVMlG>ZD76zpI=i{Q$o|3e?TUK$}NNcb#`^q zpEW+A3Z!X_f-HMJ#8x+zHC<&PKTafQy4&=)slAD#M_LX!SgVSK*b+0;^zWmwAA|Df zN1%Kn;XnHJ(c(vIS&-_pAT5USVi*&$Ks?38=AtEqf=2w~{zdS8+bAAy5&R`uV%SLdKlPap ze?Ngc$C7uGKP&z3aV6Xc|0YC?D&Za1<}TX%z2^C!=^}(9HfE#q)0&#WQ|6ikA-UIkaW%qj*lx za-fav8pS)*O~J1mo=5!qyPy2SvwKag7w-*^N374^@RwMNvF~_10sLM2p2t%qeuuwm z@K-j#;|+tq#vgdR;ly=y6<#+qjVUU;Bn@Kasei=!Iyy;Ac)!7#{;tB?295YvLI0ft zpRJvorJ5VzerTGTRCpE8)@rHn{*S$LkGEp_|Nnc>zVA-8yXRJ0HzC>OPMEHWE?b3s z_dc@D4!3;J#v{3A%uw#!h8s!*sc{}+~X4l`N-wN^btbzd%b7Br}o)x zkG{YEO}*EC&U?MrTJN=Htu>c3doLXlK%paGbB^aPr)BR@{>lJZ5F64Rj;0Z1LT^7E zAnkeN@dCy>~g6_h;iT&O2xfq|N zn>G)A)G1^%DP-TNkQNV8G7>=_r`u7RB#_Y8bmX0NO;GEkA=VS@$omVp;ltU@ufCrm)P(zEVa=~ zY%0pwtU^86GvA+N8Jl^MPoX7Hlj%`Mj*vuBa-#^%9Y>CY|Wo#yv*yP2A)APoke=V`mMbB;U58>%0Ha8d9oGW~$ z*c3)>VXXVd4klh%7l@5tkMp4S*|(Vo8`klh%iBgsaXuV3Uu^t(41lsYALiRiYz`=6 zbC1~gKA#So(y|_b4Ucu6`~9udW(90G-uI_7pxB1>`4XG%Wo%x64fi*{ALhg#o?}e$ z{|&L>zM}ob_Z&O2!Hm`y+32U2xB0xt#;D%ehJ8LAW03vfveLEXZN4tfr+H@^_UHQ| z8~YDzVheVZrOhs%Pq!i)`yb_P`W4xv&o6ItP>~H?xU&t{{r|GvfODs_rVY)*=LUT8 zx%CF*JrmS zsq^r8CB(qFwr%0sU_azn=!r4V%qbWfn1Cz0P%$a@9yTZ#N3 znWqc&w(*&K7W(Id-g$~%L_9=?z2eBdLHg61Y=fze$9{l|P;#glU zjye?P-g0pY(((LME-r{TF0x!)2oa^{V)li{cL3#ay|}*?Z`{HP;`qE;nkUBv5tsUd zxDev{l!@aq!ieK@NNJuN7eU;BGI2b|L=oq2$=Ht6oUSeEm%--_ZNZY$g}G7uEwRIb z)5VZyH9mJ}3x*um9_eQML0l4Xb$<}o0dZQHIQFF@;)sD>Jf@k8H$G2BQU$#q$JZOYaa=S-Gz6c1oIi7LTnus5MRA;t`!vVJQ?2XA z>3Ed0#P=q80iS-JKyTyrOdxJGKFh_mLEPFuh)bk!4f+RhZ4mc%nK<^d0(q`4io+C1 z>mVH07IDeI4qrI#eF%^Dc8D8+IQ(z5asAsPj&Ik>)gg(vv40TP0dbi!ahzvI#7!;} z2NiWf+>}3xOW{2H2XUPdm-~abE{Llx6NlpdaO3mWt#bZaj{9vszpce5pWkeJK8DYA z_#6Ve_4wp_#f|v%H|MoNiy3xN%du{4i1Lu+DIdxGWi@;VpDD& z99?2lZa&PE*p!kkY=|P-3&CjLq34 zHf|Z43rcKWC}VS-*!bhL+_|RozOLLkXIIZVQ1mXJcd*T_o_Da#uAXo_Da#uAXCu@w}byWtZTS&-p9x>2FrsFr^?mq*zEaI$RXE=I_wpuTvOP)R!Ko!_RnK9Xnwt$$BG$u>F zR#^;juZnpXJ{J7(s#qHsrznFR3 z)pJI+DLsdlK4)Z`(sO9(b4Io)Js*|3p8vnh6~*&_ab4^F!{zYC&;B@uN2+#xc^iJN zx7}u8d7Iyh<|Xy6@-|%Ft~S1R*u1`QFR>M$Jf9H$cE@9^>&=DhY0e|{AjS`bSRM#d z2BJeu2yX!#K%OI>;PkDoNH`Yv1P_J1dv%^8Oo)#C++&5b*xkO_rMjn3)`~FAhEF_S zTG*cIWh*5&J#}zOygOk=FR%&E?2;0>rBB>8!3JHMR6;oIr>`zZUmsi>Xv@d*BI7uoJ7+m&li2R2I( zhHgH zOY427WPfwX{x<9v=XY;O{tHU>e=FJVw6JyhTaX`LYx@4|h4|wAeM{_*#D1~=BTC}O zmy|cY#C~vz|EHCtA5~J{i6#59O6*%o_RlXV@5++>8%p-glKuO!U);V;s84ZyXO!$e zT#|le$^Pn+{SQj^-ID#-t*y)JR@!?Ej-=e_qM{O(pyH zlBuK(&1|IaP4zqDk3VaYzv*9UJX%#9gshudr%B!%A?=p(b2X21{Z_;;iqPR;8=t(XcVM1}l-u}OfqiF$)caePV`4wI zw0s)Y<{v_~gySXZrc_Y52LbgE;f0i1#<2NcTN_=oqC8#Of5KTxW3CC~4jCxf}i>vS*ZB zNIn%MyH}Kq-uQ$V8&F<9==TBdAEo4h&_mQiqGUo`h<0R@oFV*ImBRDO=ZdZol6c?B z-`J1)aecQQI=)}rh)=%W`v#xfPdDR}pBZn(r@yh^na!y052){VsLy9;3y6ulw12}l zd=5eX)*y=^>mU`MqrXF%Axj|ZA^x`R*#wRS-cv(%2S8K^&nHWuvmwWz1NPufh>iR2 z7UIPDU2ZqZ`^0MKsVzhy!*Bn{!RnYQiZ?&YtYSx6mPtzLuWvy zp(9S`&WMd$V>xuIA%o%1NJs|4(Ho)L0%3prjr(K&RS7yAQmp5y%z$ooiM~DbOQ2g` zqEABaLPx7x=Yv00Q3|?riM}KB8R&8)`cBX>0d63Q0poK&C+IAUb3|WC>&i#D;8u zY=KndF_s_)LqtQ8qz&$; z{d^W8jkP>R>Jx={e%Dh|;^ab7!8qk0Y9#LU5f!Prnmf{BmvqGW8>e-!pH9T_9%Y=g zHgQ^u{8?{jkk5(GK`e-S(vCcPl;oK{xpkff@1KHn5OoUt!n?9OH>!}nyGjfDKT4b4 zMcU-4JEzspj8n2PP8o;+@i%X7nG4_EE$D1~_CaLwV%WWfG;hbrgxGJO9&e)lH=>R3 znL(TiJM~4xKZEpZ&_)n*HS|xR{a=oI?=u)HkjF}-{V$IDlX21^>172Q8+J30hi@~V zZLps*kw4P-n+-OeM!GU_4$8?#F>d1Ms|obSHVMj9V4OgxEyf2#PoiH#r~~?cNA!7! z4Kcbv-xbmW@8s@{_}=K>5Eo+gLE669?}vSe-XCfALpc!hIOs>?6Ow{Y`Ef`)9&wP= z1aO%x1)arlyRh?~&%#d2Ab$v*SUx|VQ!T`)6HyO{4Jo&c_!j*bG9R)6vKno?4pIRg z0C5{JKj8Cl2yc8Y>+6j(?x_lG7Cp!DHU)jJ5;7Cg4DsF-!{2oI-Ltc>KO6FQ$a#>t zkZU2gL+*ntgFFv;1@Zx8Bjg82Xc3MbWG~2m5dM22Kd0kohx~kXFmy*lj)P2w@ZSml ziq9OR8ZrY?2dRhr12PxF&u*{4=hct}kb5CdK!%~b)%biD@;T%ONcfI~_qP%L+ec?G z|NW5vKG*}iH)LPPAjm=0oaa*4PTYpYF-Q6({64G~u53O{30RG(mY=J*p;LjHLvjzTafj?W|&ldQz z1^#S-KU?6>7WlIT{%nCiTj2kz1v>0qp@ni2hU$sX->L^!%rXfH!p)JLnjTLJZf@!v!WfW%?)T7ZCL~{AuV>Q7k|odEuwb8<+o$JdM4o$f1(RZBoaS zxoAIqh@u5F<;2cvHk)l~uB@7wt(q}2JH4f{v6@aiGiIpSx`z7cXUx(_4;gCpoVse5 zwM@-Ut*x)FX(audZL$T7Gdp)sv%~%}I6L*65j9l}v$V#VrY3yD>CEnB^dsx5Icm=` zQDf?Bn>jAkQO#=g)3a5LHI>aZ+1mPP4Jf;@rOJ!#(>fM5?3o|iUt+6kplg_uEr}i= z(KU^Y4UJq@S`^c3nzLg@kC@21gNt;YVODGQj1Mo0sBQ4ILyEL#Ro2yd^;1RZm0we+ z^N30R$A1Rm1B#QEn2nT4jh+}xF)zhz+h+WO|2#=6R?n(Pc@Usqc{oh@=j7ScJg z)9N{orp$FRfJF(p1x!ZEmcrZ<^N7I7>=wF0#Ur zuGO-G4rNbf7wMZPj-SNkRn}=UDmn5WomB2kb!biA)dM^BrCVNHq~h*4ILn4}i?kDK z(C)0fGT@D!?LEmT?9Zy1Ri(}0!Nf-Mw<~8goK@p%7i`z^F%;8<1!a@gh}NIxYfaH^ zAEDDKYwI}Y#ePI%Rps_PmTXtn7df$%wUx~cUOJ0+s_Gh=YWkcse$14?>GVOI-7;2B ztEz9VYo%W9sT*s&_FCcXV6tfLGiLmR5hD*hm{aCi>(3R~e}VUBRo2xtRB`lbZx@X+ z!|Q-+{as8fh_(G)Z4U3gExXdh>%84rm0ByG)_dBP`cl2a`Ub70zLoU`)}Gna(C8hs zjl9R5t(DC;qV;`tc^^LT><6zld%MkzRfXLxvRhZ<_5H1~TQAYN!ik$38>Pk<%RW@d zi~?D_>zWufnWj%`&eB)G$&<76SpQ1;cYlqZ+pn2k8CW%KT9$qqeKvY(eRHR>--$#ejb+J*jGB%ptiJe?i)!fhs zk7DEK#rOpJU;9iWTDh@#PL>|pZCGtHjzgAKrznI9{u-#E>)W$KlPjmfpD{e2E$d!e zPj~kurKWOLmabG9W}-s$Szk&_z|o>t6?jMU+OaQmW4qzpH|f@PlW1A+#w z8B8w@q_D)_9z3pYjy7XbT|+bd)@~H$Hrmi(Qtdf4^j62QwNo1_k;m)11@VGPAnV0m z*pZZm`kE}Q4A!1Cs&+R065pQL=fP3*d)Uj6E^6=PlJDf_@*{H5d*Q1u)iqOFrengv zS?!xpRYPMvSNns+EPB386J6cbJ6B*>LiuUi>2znix^vFv!G$8P95}VmuG86PIjWbB zZfI%7TwIea)?PEZv9bxX^&oU>J~MCcE02uBxAftL(nwoFmG!g~2Y_dEG+mai54U*7 z{kSPvTHKqI;SDYI&2)EoeC4bfx<8C&=!Mq;Y$Oj=SECz+o9W|@Rn4_$v3rI3cCVj~ z13aR3+BA9@S&yihR@qY5oE_(N#3tGtE)Z?NPXM@_o7Cp&RmVQs*&}C1m-+m#X52SWOtIw*eM*q6tExsZJ_1RT3U#{fXfWBqYX1#wCwiGU+PYUZbjclhtH^N zq@^7uZSVZ_AZngJ5Vb?&R&x)!I#xqpCM&C|aD9|Lj(*w$O?)((xTdy_qnF3V@laaO z1s(q8o;;FktGKFJdZ9Pk=@__E*U-?&rgn@EC0&4DD>7L>M?<&%U#zkzo0*jL`el|6 zWfR?o8s%XT9a~dBy?F-ZT=qvPqG zqZ%7#WxaiRp(hR_m)BB9Z^Y4n+wfQZ5w&O0$8q-R2mA<=IW&+R-;kZibtV@IYYdLP zH5P$64k;UJXJ_f!MAeK!H+rcPDdW&@YPGsKv?MX69+O=&J)S^069U;uRh4x$)wBY; z`H9>iCnE=6YbWTlBo5Ol9C0cl8X9YB>fwKFLp^Oy)HY@LOiw=}v6bWEt8pmCHt>PY z(hY5RCdksFy|c8c7e#mqdb$nfn`*oq|16#w`lZkPd*c@ zM@t&D$P3eaHQiRhXS_QrkpCI*)R@V^EUwoq_>4T7Yevq-B@n$`F{7qxCVf=Vpv}oN z;6kB^E@!Xm*%t3kDWd$LVp7XguOBqgFUZzuWP{lV^uIH4VBxoNLIuyWb+t{+IEi!b zruA*-)HlzlX~NOZ^3kZpLCDUk!9`Y86Rqvkj4MLiBxDQI4m~h#RzpMcj4VAf4&RQ} z@%Bp4oAG{b+t^Z1+u9bck1lB!BK^VuUUjj((Dg#=BG%}aap-uVJr@}$JP$N^hv%7g zxUy~X%X(rQ1-V^u6T)X5`nnxoKgrIfc3w;SyFZ~s<8sc~yuvHj3*C8~zjqS2ragVz z3pUrX20dYM`#PNIvh-#ritZRA-?aC}_063#wXk2T zZQQsl&Fgb=C3@J3KB(G!&Rk|~x;V+FyRSMBPhv^03|f^OL09k2z3-mg`K0#6?&yOL z>@jlI)P}lhSUY==;vMp5lQ`t`@7+bUx7N+---nHz9NqnLGcCKaK^y<0@79l8eg=w&30MQH$BWU!+$SBAY z+o}%U-1L3tF(b0{`ra6YW03!B`lth+{tJ9<7o@n09kA|Z7YpantsVFRBTGM{J*;~? zCm-Y3nwpt(L&upoXRqHAmBR1Hk-~mG(9t^?XX%~YD9pp|)sCb1`k~WAoaoQ0p(i_? zq|v(WW9X-zNQR%4L--Ph&Kk}F7s}|2-*v34A50J9yfmt|u7)n?G^rV*Xck@83Dta^ ztzCqO<+G5v{nWi?H`L%wj;N+(op3LQ3Gjv#IxTbv-|~ui+v9Z{>L0>3I8MgKcb&X5 z<|D%R%*){$FSq})QDH{BuQMn8FD&w|7xzC7t<7w~ zx9R@L?~~4jQ+Re{{dB%4@Gj#nME|h1cnN;t(D|K{$=UA8E@La}afd%0*JUHzruHM7O~*Dg2*N#}U58*;mfbK`FQc-P_Ft0y-W>X5+%$8*_DeJ9m4pH#1TyEWCL zF~RY9{`S74c*Vcm6+^4G5|=6$cOyl33~lJzG+~+_vjj0-*WA*zNiIt0_pYex)m$O- zTJ~^K4UhGP#wJ?W4N1Mc?|_5ub!_9#_bhMV(7uuFy$h4)yHz%6^lUF2DDN`K?nawY zXX|FJR6|p9Qx$GQn+tJ2cN;Y^OLz61RJh!r-}XW6Z{w`^@_=saF0(Tl2N%e5cPGWW zUZy48y{vEB3niPL7k7B!VlTX#Lt_bt`n?=F_j&sJJ*H24w8U zC)w;c?^=hC49?+?8JPr`cZ|5L&q#AG7BX<2=VP#%c~- zFU+rDtCMRQoA|Wr?gsm@Rk+%z!!$x0dZWc(@iJS>q5cMkju+~0aYFBT5nu2x+MQ3k zPow|p?{EZKMkb==yVE;R+Z$V}U*DZRf!h7X%lJDET`zS02g4vPqW2h6-&9*&GpwPJ zukGIJJE5hyX#c~$6dXRRVK&{f$1r+%j|oK=51aNtvwY9R;rs{Rp5BA!QhEVu{YNgy z-olZElh6lya3%{=sMjwXXKYmhQ%TRM0dy!JO;Pj6E zoqLX`Y_6OzZ5mEyxW&VvH}E4{e8EX8_pGa_Y^oX6$d~08;JxwuwZYIy^y!{Mo9XGj zyl%U-$Eezxy6PsHkLl334he&kX7Jta);-7K0UlkoS0QJbi+Ja{U|{S>x{yur!(Q<1 zc299N6!sllXtr=Cuyika7>>A$*~q@j3-9I7^+J6q+s>x-d+|Xkxc4h+g-evG=ECj| zd({dpg5S;qUKS5}S^UeZop)JuOAr47$!7N+_TnGmc&~EHdYnX0a`I(RNxk0gAr<<( zhgZR`5pO-}RpVpE$2bq`aW7o%segnzkKY|bP4LTOVEpbFYJy)HLj&Nq#*jaLZ4COg zp1u&i>czh1#d@Lnz8CwUr}>z}yu+dOi5G5Qr}_Hs>z;V@Qcs&upZw>Z*?%~y9v6wt zbVUm7#aGxy3Z;I*(auH=jjuSgAHzHTUe(bTc#>X`@^7~3Ii#>(4Z+HN9ai4`JAIqt z`Fe9|cmw^C+J4b+&EDQ*e#_pl#c$If-J6^*t{*PnyKsShJ)*3)yeRx&4T|5uq5cD# zO`wPO-k#M@``{9_K0Bh8D{J3q!vx9 ztC@ufoo?+lrfK^?uA7q`j;n_gYUbdQ{?1HgaX z^?39T5`0l6!S_hOUo1v-9`{OqqLtHE_4O)sU0-DTB**J3Ikdgdd=a+WFKJ%v>tAlX z($~KSe*@|A_-ZlIy}_aLrpIq{m`6wn?vs!8<1@#KeiLiFJDlhGd0ldKzp=PhncP6H z^&3ua_Zx=JQ;$0pod0Lg=6)mTmwtSvxnZA7CFWhs*ZjDH-sO|$J6`thc?GWX!uL6J z|IJlvsIRR;rW^aUO!eT~eyG}iycBwbt@ztuxGM0AGWMCR@f^7VIopdlu5gm@CO=%? z?<4RS;;k1r2Mgbc@~!CQeaPmRmpMj%okPb9^$#KeIo*5>1Ls4IvcLAiZ;(OIoA4L( z&)}gRcdy0$(bF)T?(2_yHnExeKMpN?BMEa8zGH=O3zv*0MW4WIJG+@)??17n9_KcC z2g%&|`~`yi0(@;lnMObLZ)t9rh6j7Co(C=(hl!o8-gj0OceDI7eOgOB?&ajzchC%a;Ltj{?67+8@z=kPYNoq}%*0J!mYzR$R^1%j{Jy8+ zksJ0G4Q-;YhvE*lwkmseV=Z5-Wt-;Uanvk%W_8iHa%%MR%W*4*VOvGF?blc{GfTf5 z)Iy7n!I8unm;W&G*nYT%#qwRs28T=ah3J(8(!TsV0=S$4IW@M)=Z;q1BT91HAi{wFA&YF6oE%Fs|Xyx|T!z z#(wAmIB(GR1NcUXO>qYKnT>B^19KsV&K+#VMciqqce-{m` zrF#Ze^Yz~o0}=Heq7;4}^~k^mdIlO}9Vf}Z&!O>eFZ`L4u>zf4?~il;G;J;(US+_ z!5Mn|(IHy!-F^YSM0@GL5H0zM4I3+`X6fq#3uBIZoY(KX>*!m?;nC?dJP>Vap0oYI z{6p!M`dXZZreg$rI1=M)Dz5IbJ9M9ol$(gcbNqjw5Tez;azS$%>$0>iea6i4!|b=Q z6ssCcuMfhBq`p;&+XiV>xIr&=;*!BlG;eToZF5~K^|rw~xqHb$J6!v+jJw~BB&Di# z=HCx$s%n+(&x1m=9(BNh_ri;}GA}?#q1yUst!$qkjK7_=(ySTWLaz@l+*lRb!8;wHMThKkgzh<{i5@s)rz5oJ(4CIZJ%{c%LKlqM zxkFtxYNsP~{UIes=$1o5v>XnGXss7IUbvZE-suQ^en{yN`udO-+H^?q5&ADGJok6b zZy~~+j?ndomK>p54#k-F>|gN0bzb<5m$qgqX4I93R@T>M>AI0+4#owC?P!3j$~3@r zqgsuq@8O%ijlHU*`G?ic!tlLH#aSmyw;$F_UmjMbgwKjfxT#DDx3@0gXOu9XO9KRWRu~W}@_J}50b;M3RKV@-xuaq3 zD&zM3JNJx-jwtCFj~;=E4s{993NN(1aD!L7(y_bkh|->M$&oEI@5thwu?=mr#mnPL zegB<%#zRMz^o&Q3#90fLAzJ2ztG#eNr`>sOop;oZ3jeE2g&%KyoGuxQ8L50u?-b>< zvP@3Tx6WxEa=Q3}vOe8DWQR{{%H;HV>zw|HoECUF)zr1%YHP@hO7#1yj;@@A*?-&c z+Nn6v7;we@%uzi1f#5{Rp$VRPy*%|1H3 zXhOhM&^6AneYvZq&yjjJk|5cRll&{G{!*}HLYMGqgYMs+t$Z2!= zoPI9K>HRV}ecU>y_mR`wi^?AH=SS@D>GLu^%H;G@>zqDE zPFDGx-Yd%Kw=y|hG`iKu_!>FAfSf|K&I^r;nU`F`q3wlRywJLoHLe%Vy^MLa7dl>O z%w>(~g?TSreTA39JTH|OZt=p6S9%&R+~S4$Rje_*aJd(*_QH)`xWx;XT+KGiy>O!! zZt=n;*LZp_biGhFSYvvj<%PBvI$pTopB%fy3-eyM&I?^H)UWkoy>Ph~uJgi;1o^o-Ubupc>a?* zZkpwWd(&t55 zD^Dmc>G=~5D#~rm3B~2Uj(qb-k2%2$m%PHf-V5ix%Dm(?4)b2P&I?^HoclWKO)p&T zg|-)N^g`X{*aco_dEsg=bi8nj7aDJP`FmmB3)gv}>xFaQ^z!$@XoukHP9-MG4{YWip#29_6H z`WDh9hsZw}Xa;g#!|mwMrHgcQP^df|P89sO(5c)a$Cr|CsU z>ZkEl^xOEI`>QztGn1FwH=LW&($tKXS$1S~^91hhIPu&K!}%X_;VZmwgBKbfv1Y4t zAYL?cqnUIjt!2{5WJ(Vhft(R^15U_jmrkY9mSP2+K+aV3U|O{mTQL+bI^qWPkY)rl zT~RYuzzJ9ZH|z$~3@B&@GAY##<}}p^q|Jb>Aisc%&q8uNz{TW|7O8;kjes4_2dt2x z=z)CDP|RS?P%@s8VnL6@NJG$R}rqa_lgQ$eEnHlL;R*SIHnLO0oiJC+>! zox{xorySH2MFs4T#f9eV3Nx$+k=hEoVK@UuURDHYP_10fjN}t;(h3+c&Vy^@dO2IL zG89$Q@&T1gRW-QJr3X=lVn$Jl9mu59MgX-$`GtSBlF8`Nw5#Z$JhFG7R#iUsFy$KR zA+&kG2)Z2|1z7oS+r51No4p=m8z=%vrc- zYDY<@bj6IL&@}3W{1sEN(Ke=%@2zGsxl}r>T49rGf`lxps#>vhI?d%dC?lh)+_?fU zOeJBivtF^e9fNkz337|rVMlR-I@&GY#tm9QmA!G0nfzl%!)bJMq~|S{)0JcyJ$#L>#RNM(hsh#f>d(9ReaG0j3H^rV$YqgD|dxwz3j zkIrC*?GUUZHqtwxJlfBWyNVt+`epLbJQ@)Pwu>8a!X^fd5z9FW+AxGPd~jp=5IPy! zK4gYWIGVy>ZKp>u^36cX?Es%5dYB{NTTF+~dPqf}=wZD*GT{!`$x6a6?{K+cBV;7a zxYJdIe=#RyhciyhR8WO5T;g^KT8f3^oXQzJawtwmDFLIGg;vQU3+(9JLr{%e3I*91 z1DT8&$e?0@Tw2SidJ>r_s;f9*=-rSTMuRJMgA4sFwkT9<1N2;n3M9;|?Q4UjSEu{z3CiZbGvhLDYa z7RC&!U4{VXI`Em&vLZq&uh>9o;Qn77Gy&ZM}dFie+)#u{4Ih#PISJbG(BrpIw` zp|UXx2UNE+{0P~KhNcWS3A9ThhgP-})lks9&VGj1T85I3o56h2L~ zkco>vYg8B&mRaTGJCZpcM@;BZ9HGVN1t9D_07)zRd$mJv0gc1%YigKHAdtSAmx)ZGpJ6~_+6 zndmN-cRW!_&EXS$^+8qB&r^;6(f*R-KZY1k=#|B1k6Ke zCum{B>RpW(PUdZOMKyObJ6I7TV&bf;nPI)c3Fygu$c*MA=tr>D15Q-6&`oR{Z98GN z&4=M`$2=nRh_Qze)B{!wv!qplv~7(8b@UuNp_)oQ082CtX0xE1K%ICn1XP^Z0-0P+ zMYMPM;7uP;=|K}+iM1I+v4b|Ofk>p-AzZ#-Xxl;dNHZ~)xe)`C3MO_w0&Yw*+BiWQ zB|iXi!UKBnf-t&t5X9&jrlL9}4d!0AH|=S;M>s%BiAGwp;e6(x zH^Z1+w~*Wjn!%KFWImvp3BKfj?>c%ZS|Nawyb&}M&A@eAUa`YY1g(lhR>HxFz*KMz zqe6$Ft-~Qxv4WVxP^gl}DCTOaM#SbB3>PB8>6ecx@W*x1A$Zfn+Xf)yDBkc2 zl(*sS7McQE-tprjV2)4XE&hT0chs7Jb+uEco--J_pxE{Yb6&n}8(2*8{&+la7}ONx z4BEj$ZBK-sqV(7R<4=Dc=fSFQGD$Q>*aDvu+>xDDDu#T~Cx;N3q!Up(S;T-;` zd55rtALYvnt9VcU6Q7SOtUJTLrAOo4dVDfxP9WMt*uuN+M+&PG3Tth#jeQzXR`j_n z(Rso~CDB#FZVk~b!sbk(dxdR{2yeQ2Wu?x;Z|e&i7hz3H;mlmD?S+Q(%EE$2y@hp? z=pfsaF}2p;oV)}w@ZJ!@Vrl>Ov2t($~-UF&Ovd2MUFH|E)>zY)DCZ2eB;3TxZ&^L6N* zUVQ@r!h1~~TS|cNmq(8&7@*^YGvL#GeJDV+zCIG5*}{4(K-UYWD+094*Mt8p?0~=b zZ8`<04MvLRLze*c63%oB&>_NVclaP|f~WiX9sz0*=JmTT66SThul4Oy0m92kUjE5m z0eVE3dI#tk;dH+M;cXnxCVf!${2lCWAGpax-mdVtOq&dm%E-gfcIvg+W2ub&m5=Y`#d0DUOzXaU+HY@QjQ4zWU7 z^B)1)Us%TgJW5zSKS0O%dT^z1245QZyKw570L}CDMu2V>Ho(h-9lZ7bg0OXCfIbn{ z@#6l^!YT%M1%A5GYqwhi-tYf1J9h-=Xwm2KE`3eXH;2doRHmIVkuHR;)8 z9>tpM!n{6vUf5fwU6|Kv|J3KFu_n7Pui5^)Ft6RtKMU!Vix=#77v{Cx@$-(Jp4W3f zOqkbo$4@;L^s53iMVQxkuNCIC-scFXUJ1};!t_yqZWmU;j|dy!)x!J={d(W#WAts| z9C)*D58fu62glnK{2>SH(+gXl2528)`?CNYB%I$6pkstHp9g4+Zv&nzocm9Jvce8{ zhH&bO0G;XEfX@{+!E=S}uQ8T|>6-v86i$Qh7S4e!VHMv7cv3j^E&7r$eHWnDgmJY( zSQ^M{a})fjumk=^IJGH2Klt|GZNe@%j?*_KyL&S~!I-FWe~XfbSB{71nY2@vg7OmBh!wR!E_Z!bU`)O~T2TLR*FPI9}UsTku(JuTXp8 zbO(j@6n1cu?I)b-q~P~c3-*~V3Jvk~T@@NFOx^ICzQQ_qim%7Q+f}|EJj>VbrcjH| zyDN0Q&wD6znXs{!Le~oC!M6yz;CqCVJrr6doCZH5oB^*A*1>NGTj2MF9q?zu$({;* zEv$k!3v1xtgl%vXKibX5I-Nqh`MkG6-Gx=~-ogfWUttH#zZK4Dlf4u=#<%aI&~d^V zI3t_~pDOHtrwUVFg=YHp;AUY9e6DZPPoYbNQ{aCJtKi#&HSoQ{HuzEBejf$vhZX#^ zz-xV*eHB_KtnR1Ke|#ITE9`=Q5l-)qK8EX8uCE4eCv1Vc3%lUn!Zbjk{e_d@!-UfZ zC^XWy8K}@?VH-SESW7EZFRTw%=#9QQh1H=7eIZQ46#7-z1;=o`&h3!HMQL|o6Wm8QHA11Igmv&p;rvMS z2jR>pg{p-e@L9h7aj2uPJ4T`Fh3N!^?(p^C<-*2Tg;on|;}qH;tWH2b7tWukP!hkF z&ORFx;iqtVl0pXw+u&n_lP4)OMpy+;7S_Oj70!ca`t~O)G~4G>6uLs#0pBE?nWE4G z!X|iyZ-1&nwr~#og|GwuQP}ce<=C2A363+cip%KC+_!MEvDl|=4 z%b_p%`bvea7PhL;XM~+;3O(ZMXDIZNuu+S7Mp!!o^RO`0;U)q=dxev@!Fftpn}@ON>#tGhBVqnVm@BN` zf-#HxN%l>>O`*Mn(~A^3RM@^#p|QfLyA_%tY=JKocJ5VZp|8IW^Ruvdze3Lo(}N1V zEu4Qyq0fa?3v;h<@==At_}zc@M}JJAF2eK_+DbTy8?+;ZbKnz&Q*WZJgdOm?!t^$L z6VAMYapBv1jB)MjKg017PX9-twpi$ZeaL);z9gLbTA>4k)88p{tgr!|AndxBqlC3h zn5%{L@6qRl?H?4nS=jkep@)6mg0>P){ie`6!nth`&e|7l?d z{D!aZ7NiZrCir_{BZZq>{D3+8oZK7!3+sJ?)JvH53DQBrCU}H!8aLe&g;VmNF06y!6iy8a(x*NT4$>xJ^WY$D^Yuf5)NQwd&*@`=w2v?y z8>B;h{jeYn6Shx4JNq`1(ayfjNkRI%um!$cICpZ8ZV}c`3DQzw4G$BZ^Yy30XJMl{ zNFNKQYlHMZU*8<0!0rVzm#&vMvqM zLSg%|ApOhN&kfS^!YaPn_qMOUGDx5KYy{~?VeOwmitQn7cpchPI5$5?2M8P2qYZ@} z@D$-Z+2f-kJF4-UACaPn1*3t=66ly3u`D4fD~4l8|r7yV6`-V4$^;pDm? z-6)&^-zA*KHx-`|HrEH~ePI{u3LE$yBlRr!Moy5r3%j2NX+L59e&R90>X$*v2piu8 zsY;lB4AQy6nV*8Rz_$V4E1cdEq$h;U--5JSIQ2Vx6V8A)3G3irg^g`NYLhDXsYOE6 zLpT`=(ILW=2+{FAw+YcyVHe!ub47@*7S`H@=x$-XLx`RePInB^`@)2;z;6^b@rAcv zeLcR`)pqZKKS_N3YHwi&e5h~^-&Z{A7NT#2GgpLY zo3IY<*sqXJ?&=WjFKpl;`B33J_(WkBJWV)xLx|21PJ`zO=fJlKr)~_>I`}DJ8~nO(Y6a#fVGaDdunF$CZ^2I&+)vn98KNVFbI*imlCKBX2y1!FQNpQb z;g4|oxez@dY=NKg_0Nas4PosC^lf4HCA6EbUmYT4zk)x`8u%uhc^Q3MIQdG5h6~f$ z5S=2N2ha5NufaEA2YjutVTb5G-yZywZv$Q{OmBqfV__Bit}!s!n}w4bjBA0h05#|!5_2~kcs^JxgrbPD+-H-?D6Wy1Mqz<7hWa7_YUDxCWg zJ`3C5!e`<1cX+*2IP(+6rm+4C#-_0Qdx+W(DC9}uFr|dk;6cJVc(||;4bvpyR6I;) z2y6HQ)`h}J{Mq*!-yVFsunk@*oN61Uw}f@@SHc!Jc!2oRE=(PT^WeROUGSm8X8SN5 zFYF}4beeFg1AG&skvtgTi#2aB4`H{wl12>xB*Qxx#s{A#5KVraOhLW8j-`QVo+W ztPTy+7sAf4Fm3boBeBNzf#MtffH+XtJ|RrQgtf6@`kOF~M_UP}GGW5I+FpONPYlyy z-+p44mI*uHRl?TfF!4*g+*j3;a7=|w@bAL8lf%>@U9h3k!_-IEm=>nPgkAh`bBb`L zE=(=L$ys5#Uf8M+({kZlW0=>xb?{SIyB>b}yf92>39EO(PhYbnB`@MvD&HF*ZDt@+Nq^}207Up&AtAzPyCYpo^ zYu8^Q%xl=+Anbzg63*jCCRPaN)`aO5pI?EWz76<0VP5k-c(Ak~xT`R)TR%XU*Q`HE zIQ0hR6JcJn{x8D3UVWV~uUmhvunE3OIP*c6ZWgw{OMH9$#>C^oyw?3ozJ5cP-Vx4$ zzYyQ& zu!a{TZW2yT!g|5NnbRV)LfAb$LaT(GzeQ-Bu$hg}Mqi(U|A!a+r|JlG5l%K>EoNbD zUW5)2cEGA|{;CL_!=)sBd#W`mivs&;6k=uhYFrnAhbF9Vz|cA@pHk6Ffke*XUM-c}?y~!n`*3 zG+|zs`yax*KKDO;`==swmoTr({e&>D&AmpL*XRCNnAhpvEX?b2$Brua#_MzMDa>nh z4-n>cx`zq#dflf8^ZMK~g?XLs^M!e>?rVg3&F4I?)GlNy#Dq;pEpEkxN!bI5t=OQeu42Toc?cwnuU1{?@N9C_Yqnk z%xiov5$3hNpAhEX*jeM-{2HP6g?U}`FNJws^R2!OxcxB&pLw10Uc$WI`60r*?)h=T zy#D!LeEn`wnkCHZq4O{L^0gMPi+-IjuaADWFt3yTgfOp{zSh@+KNse;)3*xq8tNU6 zE#%2-srMJ=HPw$2=C#$w3-cQ5mBPH%`Z>b9=K77oy!QH1VP1p%Y2nP!D19Vs42#n5 z!ujE7AGP3vGb&1bh4nE}8Y-MVF-oThXTX}UdUBM`7dHMHrE7$fe~Z#0-v<1YFlD3k zs&G0Nr47P1c(ZV_GD;nX7W~nsM(IFdnii#r!bWYBnuVQNI2OV=ElLjv=g*ANE5deD zlr{>R%~7IZh5S=3QR*aYfcp!pbD}gv*a43f*6?E6>B6}y&^LS=ur935i_!w&%#~4E zCahhBx(nM^N9hY+e@&Er7ET*c>OQ>STkfAxI#SrUHcH0}r}08vjj(e=lv;%C1yM4D z^S4ClK3{)3`lPR46s5O>)Azy$VY)wxUn?k-%WIT(9wF@y-cOjjl#VC`CMUMtNRXNUYq+dVP2#AW#0z8UYOVD{;x2v)&0BAFGOk2Q3Zb-@F3yj zOPDu=^;J=7@NL#c>0)8^)hNvuHo^A^+pkCINn!j3r&?i8cPh0V?}dfDeaW3)lo=@FyYm_k{4 zuNdtoobMZ>V};FrF&gjN^pDZ$!s&fube6CMo+oS^5TnJyHuxD~eNc?v^m%ZMzVmGk zjZwSf3qGU{hY!Nq(J>k&td5A$--P)E)Y-!Nm>69r>`aW2DQr%P;k{eQb8?J6^ZAq* zZ4tJr(at9nY}9EnI#f6ho+Rv^5ux`ZnMvh0S|o^scbFG)BJ) zCm)PaYFwdQ{gD`r5KcZGqtk@(qxv*c*aH7uSbYM=R9FY!EbM?E@NJ%q(X+lD{El$? zDYUt;0sfz`3r>ueHe3;-p29BpU}0-zjD`z4;7P*z(=n z=6M_!VH5n0aO%YveJPv=|1500gnl@o;9F)@jQR*CSI6im;T-sQVQmfk5msM8pY-k5 z#^`e4Jot8D{nZ%#OV|d#?AyE+qm9Du>zD_G)i-05%oO~wz&(ZOtr!g!PJ@RE=fD}? z=It0w6}I0&TM1k5#^`EcV;#neZ~s1g6E@e!=q2Iwhv?6~-ieXx>pzK6^u&U1+GjE9 zEo^{~6t=)83ftgm!up07T`a8qCr0-OJ72}26T^Z$!caAKj{p|$EaF3{|m;iu>M<&76_{pr)9z}_!Z%l5~mM^HSpKI4ft2zCKx9y z!{S||=Dodz=mu&Vi2?ws(tDrLePCoMsDCk2qcC>r-*MPT1`S z--MI<#A%7J0k(vxf1Dl@R`-q5Dq-v3IK3^LJ~U3>`1-@pw!(BoobXG|UfZURMmr1Z zYMi?J`Vn#JD{PF6(_mrkxHugxY#om}3g=IV(<#FG*f`~c?Fn(3>Dy=GbdIkF&l6Tp zjMHtx8hDv+4_+zzqCX4UXT<4q;oQtPZ4%aJ#pyR;(&E(q6zR|4p2GT> zaXLUa*%+szgfrmdg$?kj!Vb7j*gh*x=Lys7I2pp3bK`Wo&*#PIVPW-xIKAN8Ul^x% zgp(JepZNMq(4N8uxb2jJ&+gnf_3`-`qoLmXtgfrmeUkbk2-~qzM(>RX8 z>N98`VI4eE*aZJwIF(0R`S#DoX_2r2e#GY&;G1v%B7F1h!Cwg5;Gcw(FJWAqR`5*+ zr-ak1^L1PoOvToV|*L%>B82VacUHHz}NWpZ^h|OVFUcQaPsXq ztra%Gj<5^fBAj{`{`^(^0jGpB@5SjDVf}+RP4;cpV?Gg9KSCe#_23(YH78E@3DYNN zA7K;xmaz3%oIdq!HpIylPJ=^#EBNDrdk9;f$LVlk=Ra{e(bs<&r)k2OuW;TGrmy34 zg|7$S?(4sg)1$)4AL8_?aQeqM{YO~+DNer#r?#MdvIT!~;5~i*B~AwlyWr8nv=!$; z;pFe|N7x2mDXdb0Oko53xUdU;MOY6c=tJRDFhTzlPKFZHHYdjm++WxYCuo?k8cond zVFO$#oCi1fHt__VC!9xFfE5$}BA)P4yvgjMi^!sc-adPX=mIzhIt2Y)J@ zAD5t?g=u_(+Ef+%QNg{1Qxg(&q_72^Anbyxg|$qA<_MeM`NDJ}{1LXmF9@p>6ZCi2Gpnk&Uo#@-2o1m$}`STKVjV;GcypaQia~WsUw9 z<`d!5!AA%;gEPWQz%ztbgU=V<2wo_>1^lFN@?ne@;WT)Ia0aZ*ERoj%mds=zGF_z?TRg48B@;GWa^-x551T2;3jmgYOmI3Vv94&t(|z z!YS|u;lsfdb%nGU@L|G>!6yrE1pi%lD|nG`_eas+ghzls6y6LD%qrv=dJM-}I0YUf zoCeSMf9$<`c%4UeF8+xm)UiXQKw8{FK@n{4E?c&+ zE*o8ZNpX>goqDrzFfFu((&DzXxNQLUmN+3Ka!4Z)Qcx}hwGC8&30q)5K+cJ2)8xGG zT5IN;@7r5>IDh<}=RCiI9?M#@X3d&4Yu2o}&u4HW;KK&L8}Mxg&jS9c!ELvrehq#* z;1>@o|JestMz1w^;fpJyHyOPB!Ie?F!4CrNb?}!~MtdAQhyKFgH~a_sQ-j~~&6Uxu z26voZ8U2&NdjbEu!E=Dm8hjS;^F|=g`FPy?)T-!Z2EQHfRR(_oaI3@LyDGZY;P(R_ zGx!+b!;T*CCk(#e^Q)r2HTd`!Rz-Ikya4!NgHHoqH24hQ|28;!U{!QsL1jA^@MQ+i z0)Df>d*@a~?FOF&++*;AfcF?Y2lxX9&jbEzgC7GtZEzXzyulq0t%|;9@Vn<%ML#w8 z6M%p5T`JFUz%MuWF2GkA+<^<-od)j(+->j?z&9HF6yQS!Kls?H=no8j0`R9D4d7XW zqpz)szGm<^;O`r}7jVs}%5x0x^9?=;_>~5~`0J~pD-CW2+-&gM0e2aEAK<*fX8`Xu z_{FDJMF$MN0`P|ou6uk{^cM!-3iuxkehlzG8(aqbErZVhe#+n{0RQ5c%KQ}IOAL;_ z105QC;Crj07K1+o_#Fm+4Dh=QK7$MLQwE>=edy5O)qwxT;MV{?WpEqduNzzd{GSGY z2=EKXRh|=of5YG>egGK^zT$__mBDXcS{3ay_!!_D0oT?<(d6%A-N4}K4`Qxl@b-_M zAKhti^kf7{^b`1#QX4Q~AO`O&8gp8h1}N(R?`D2g67xNsrfeld9AXcYa_;Kn8Rh21L8 z_V3_b8iS9ZAO3ZNmjGX3aNRn*BVq7~OKYO*44%Y8Iy(%Wdkx;=FnH+_yv1Q~2k1X) z@WNCS9XFVd{QRSXUm8WH3_fyQP4pFmr?0JverRyx<5Bda!N*>SM~wEU{0kTl))_qc ze8_L`iFUj*V{lz-6g3;%@t1gm$lwV2$s4>Kedd_KbH7y+ebCYWZWMjm;QC?|ec8b! z=+@vR;D2GS%2RkBWH9&`-cD&WxE^I}H+TVZzQf?{zl3*?492%vqJsu6y$X7B_zgAD z?GE3Bw{8rcZp5b~_i4Tzlem&-aQ*K`(OQEix1#I@H$wk67`)Jow_FUKJ{U#sb@0ZT z=no98YpIF;+~9`IHPPQX_;3{6=inQo=uv~~Z>WjBGazsj@lX}m{d z@X|Fk(NzY|ZK;Xc9Uf~k-3Ax#z#B~lH^R=}>uAuvK4fqm>its&FQAS8v%$yy0`GS@ z81vm9IQst?p^#QD1MuYrFZ?8mUSja}C!*-J2G4=!%?3w*7)5V&Fzo+r22Z~bIyAWc zgHiNugD2rLj~Lv6G2_P#ZoD*#{?_27SK*y2NAqgj8#MS>eH4Aq;1jQaT^ZZ}AGPv5 zDt|*KY|P-LOcY&e@bo95=qiI7>!K*@;NOg*w;NoK`S*aqlkiKwZE(Xo;G+ya0sbF1 z_*ffcHhAgwD7x3+$-j=Gd4sp#5k-pz7jDCYZtxwn!@9fSLkw;N{91#fch*F2b$Gx# z4eodm-qkU9`{z*C2A=@`zcRS~^U#~YlaS|M4DR>`)U|`}!h>^DDnsZgSY=_6!kj%7o+Gs1|RvSDEg?u9S=qLtcLN2o!nz^0et?&;JH7F zqVE`dn&0AGJ}u2y(W6I z!5!f9TL#zvUKEWQy!1HaaWu_QRC4fFqv%f^&A&#`Z3ZuV1#ikZcw-cO-Qey27DYcY zxZyEe;Xk1AOap$A!6*J5{gHz~-(qkB@b7T=rYIUTxMLOCrol(BF8VHIoM3R_ zKOmc<2haB!-1v3an88c)cz@5}W50!VXYdiwKWuOW9e&&3!UyrLm%$BVHPQ3Y|4|;i z92vdR;DtfF6I)f+Ce!pz+ z0{D~--j2Nf%i!r*{j=fEf_}m9lPK3Sgkc-oaqjNcsN zE+DU62A5I42Mu07gLNvx$ZI?5_cp^{0{j;YehT#8GI%fWPaFMS&|idcFw46W_*WTx zAMC2h;1gI2dOKn8-wC~q8vf)LAcMh^kn`gPFF?*ajs6hIK42f^yhs*WtangHDTm?46?n>@W+wYH3r`Wc$dL%r~VDjBJDAQ=Rk9(!KVQ~N*Fv( zBCqcn{w(n49?^U+0H2o_Tn~7?!B+s@YH$|tpuvqO*Lw^;0Q^S`-ifyS4}_6d8F@Wm z__L7hYX-jpdVbPiK7RQ84=Vj}==l=Duz@A$`D%mLgTBk)2GAFbej4;Q8@?X+j~ILu z^8CHQdm+!4j6MSWX~P$Qf70MK@V^j!IrH5PKCdAR`R75u!SEfxcNzYo?_zz!(If49 z4L%NC(OQhT@-!A z;D!c_Z5(`I6g_2dM+S3^KT!H3%@}tXTo3$P2t&?#th4>5;iu1>9}O8?2lzb(ANfAc z2^f3=``~}(@K;3934-9|t6hby9+4L^_d#y@oQ zfIn$)9o8E^Yw&T%^RU71#(HDf;6qqD{V#(rfc-r0BPzpbz%McQLx9&CJP3HJ!Oeh& z4ZaI-(csqr{v(5L#Tx#t1~1KFo!sD$VeR^1gWrHP;l~Yb{5Iq6`X(7%r`+U(gsTN(X@;h#cX-)8Vd(D@euqq^`9s5vBY=Mpz)uD61%E8%l6+qjz-t5engH$&;N1cIdjb5H0epJ^e>s2`0yz4U zScc~Z@TCfi{u=`L%>kSZ;En*kK7h9e@IU~M2Jnpmj4Ly|Dih&aOoZzp5w3+qkKh+q zLZW}c?^p2qRs7E5_h0e*Z}|Op{62=?ui^LW_{EixXaT?9!0$Kli|ZlLY5aa0zmMbh zJNU)bmgt}Gi)$^>41RCJ@9p?KiC+dP#xJhQMEBzN^Z1>` z?-%g<0DixSUtEQWaP1}f5`J;zg;!moGJY5F`(6CvI!c6VDAD)v`vd&`5Wh?K{Skig z(}?Ri{Fx-*{}=U8ALaV_;j|HacO0KM&vy^ydiLdpCWiT?bVhX#4vzFzCF&o|=Ow}e zNUqdO$giH~#(KN)vGeY}-QB~z_^KN5LlcAJBUfG#<(0oymQ`^qbN_FcYC z@a+?WEdzUV1DCJAQo@@C_Z4=wjdb%vhE09%#8=yL9V7U*Iyiz$mDtXSo*hi1St>X< zGLG-D<1_NiFGk6C=98%2!F=~R9vm6jHBnGz{Xl&p{RW!cBI5Je27&pBl zrI%#@-&FOVyW814>Z-4oUxj25^;7i2-Ge9>iFbF84s=tJ{9wL!d<5T%3{rLX^##Rg zHmTZ2`X&ZdlENs;I6A%$tVK_w-My$^d})0IpWz$L_tS_5`Xmb4+L0^ZGl3(cC@@s7 zh_U=c-$<@7G6*@Wcwxlo$awd-<|XL9kv+p=Oi|9|wPS)g%Ev??#zYTAs}?tg&sbK* z^>vT#!6&#U`p0tkdLYD3CpLoN{GQ$YsO=~iRv4V9h~3@aUBPZ}V0dD0u9vMU z$x0)t7eM2N^Uy{2;I263Q1`Apsu4|VxO=Fg*da%?xn)UJdpq*OdDyhpWPWI5cfLyP zH_K;5g=Q=dmoYJlI%Q?+_aAZU&dkIN30i3#YwzyeFfiOby3Ybz^J60uqrDJWEMI&C zY9T+=lke-x!|3`)Mo~^!iBr-jOpexM8c)^*R#HIB8moh3q`J zX9RTt?8wA8EHiK3(tF}0+H+2#J?kWTe6)Lb4CPVBl8jp>UzEJiJ*u9CH7i1jd}53{ zU{XVH()rQd12ogzxbM zBctrxyjGIv(L9=*2${rtZ7F&*H#X4&5qE-XH$9r?&l(>Q58XR5ipCy9xvW_?G+AkR^=x#F+V5?&3!1}JzPaX zv3q0b3M>vaD5myY`2I1*GlTj5PzSD{GS~^&Q|n^`eOft=FKj7=bIEBTy(1H11wLaJ z>ADghF`DZhMfVzH=SY{s?-(7~Q-z#fnS5Y(_BCa-l{l=%fG{P*;3z*zirbgw=fkMta`(fqs6Piw})Tn8NJ4=@zV z!E=r0_ab(qbtfH#{7|kFqoZ*&5ey*2e{Z~YTZp@EbO1x36jFR^3KuesSw%U|0DS~q zGLk_88(OtY40Cknf?HA5kfU{YEZ4br-?oiS26tS$t#cgUa zpc6?Pvb8g_5!p)yTRR#&wAMoy6HDw3KK6zV7kfiT9P4s!+p?uYlWg6#$pKk|I@_BS zm1*nDDD;;0j;#uHLK7QX4eq=y02SBVWsEyq4jbDtO)l|uxST7JHfK7vWfk1my16-X zy~6DQ+|<^(X>-Rm6S-^iTQ_gHZnKhgZ8J73$Ht~MQ*#WpG-q0rG_$$cp!Q~$d8?DL zGi!W0vm2GXGkb#rI$BMrRwHWfY~5<0$mRlDw>6vQ+FM-~n>)HXvm2C^z}G2!ofQX{ zUPTYrL7m2PtJoN;ag!5fqq7fJBkdg>nRZRt-eD|S+FCodm|_HOu>v<|HguU_ZDu}g z+cMW^@=b=>r{RjGHrU+nhE!n@ts+%_ek{ zz(SrK6d^ToU+gdjpe(RPlC&%UhrgFV5AdORNK+<`| zZv>&YY<1EDvXlTE)aBbsvx7RDHgB@3ZL)UHI_NMZ5Z<~etQ~|Lzs`+Kn>TLT>U>0V z>@PNDwzY0<*`hVo>TP-J7H8@0O>u)!Dl*&lHmtFWS+#EN+!nKL_jcRf?2MN7X@Uo) zx@ly51b(eAzg5Q~oATqGJ2CTtRaVZr#qZ@dW9As;wr$JljC}1CaR0+Qq+$PML;d$vpb6tfP(}}DnFoQJjssw_`;T1efAYm5(vu2s( z8BcNCHx$`%z=izCi>uQ>gV(UEsz`kccE*MS%U8yMx9C%OlN&;Taz8PD-Enz*X!R% zv>z7u0R#-87n25135p9rxt)DO&<0S-Y7p~73F>GWllk6V`-U-dkCVw%&?gg4f=V(M zRPSz7k;_h}kcAx>{U=Zy;s;sk{69B5GTxW(m!iY)bM5W9Yq`h+O~4ol=djK(umb~6 zpk#2eNya;ESfY_34$w`y%ApZ0qcZmfnk2dkmCItj$>Fubb`A{TW2YJ!V>!4O8RIBM zSV=_7$S6lt3Eo|WKG-QHvd}1olvuNo;a9F3kR+n$D9HxZa!9g6NSs~}*q0OK84V}? z`*PzG5YDs4l2l)zyLVTwG6`;8W=>Is1_$P z5 ztPH}@nEV8c0jyI^RCx}s= zDl~uQ{Z=<|19zEY#cgG+w5BG%X7BRf>Sl64kZ;Z>8DDF2PFZ$y96MStm}Miua*Iq9 zv3fEvO0!;@>*(eL-K;Jd&NX4IKoK`$L7LM(alTmQPizVxji`Zyn+8XEx(CN{HgiK% zx`ZOGIY~rs;rcu^EV8f_a7`Uv7MlyQQ-KOyD|2FV3qrRUt3@I=TrbK5`TGWXwYHdF z2i8aFteXXi^nKKkx)rTbEQE55Gmr#!^mSVAUoZaeLNe!1h3syzB8 zcyv#kh?T7c<*WGay;$0zr}XrD@&h||qQ8=z1)s&lz+fLGk%Guh5%ncJU?{S_MlNf) zLW#nO(x_Qf{P+N>XAC1ZL0Yfp`)k+&$$US!O)bE8@fr_T>brO>@u`es*fo&?0VCzG zpt0D7W$0aTV_^l1iLFZw3=H>kMJ9>Fat0St6}z(=2kW6<2di(p6YeWHpMhRtuVh2xgluj(!`iNiX@(<=u}wA zO=5>-ZOTWw4YpVb!qK5q898*-d=imyHdu4ajgJH-qXm+RmKr00w&aQ!^OTfUtTPrz zlgDBBh7^TYVoXG_(YIM8Zft2$r{B_y#>Oo}Q?*ga(7#v4a$bPAx?}lmze+cmAO~|m zpWRPK#)K$aFLx2JKf#r`vGIKzpfW~z*ghj9(5YP<1E)cgt`Z}jb)>%^d4;UvT8zb$ zfiD)1O&HUY7KAEj;V#&{GuH#%a< z)gDAd$@T4nU2p@Ev|1ZfT}~^_)dn2`t9Xa?_x-w3%QUhfTA8hQp|}$I(RRdk$wo8l zlZkGqW6gmp-P#M2y`!?hF_W%~kunyLYII#J(@2X@zZWy=VIPQThBmYGpoUx}*}yP1 zaByNmGjjV{&S2M3{7#;%z)*?9^OivlAeb5vUGU#y9r@9W7{xm6SkaHUjWQ$K#9nEO zZpmp{G!H>uH_$hZ>5d4)N(X)d^J#{iBsTFPO1hB3wsjlf2;5*TB(>cZqQEFKIyz!z zD+_P}B?Xr(#d-;H5J z$S=*z^M{-pxxtgl7F;&iRw_$_ZPnbsSca<`E=WhS0c$6UiG>@x76U({>l^7D&ku=7 zLnBfi*-g?kia<_VtwlPT!bqXTwQE!}D^ChZFS!ka5Q-3ExtHg#mWLi`Ns?g?KThq7 zkKAPuP1}DUK&w*;HLHW}t@#}oCx&WaTpLyd1}mfbMp_2BFP{>EXOB1{@4&{TMZ&!E z-MunB)k!Opuw_(1do@%0n%)ICE8T^-}rLKq=sxgkGlwI7!do7dx65X8Bq ziVeF(6=9u6DS9y09OKcHaU2(j6Uh+*Ic!B{X0e*_SSOcd^5g2VRZcM7He!B4WkI_{ zVK8k{o?bh4yowq#b{&`)rifSzDHNGa3}v+IPs+1lWPE(Y9G>wE+MHmpOvSSk$xKrc z7toPZDS~(d>xB|WzHlyOY+U9vx?D=XkE&w39>#%{K5U)4Ss62q8z@WHF`D1a!l+Pj zoDC6Rg51UK)upv$au!J1=rU=y_`!~J3D==Z#oVubgkvThETo0ua(b*C^{HdN>QJUm z9Sd28a1q$3#d5RAh1l`FYq8ijpcUT8;)tXDZ!9hT*5(bfD!ry1xrC3su9-d zGui^P8znwQwa5x%HCz?qHf()NV9jsS=!omoTt^hTQils2sl(wIf;m?lbF=;&6^?^% zGJ2$_n40Ku5nD$k#*y-bLO>XzgHEstJ+^#>vyC8o2DlI#a(4Q}I5Dv}MH-JmRcb2Q zsUM6nfJrYhjk#N#ZMAi(y#)+KF=${(aPCyeSy(kj6d052L_3C5TFIm_g!Dz4YH(zSrm{H)sXQ)D=$Xf; zZk%2gXC9+sH78W4odP+h2}E9YG1Vfmx{Gs{!`%f_TRO2BIUJm9B9H}bKT%;s*eW6x zimzCg+JlJ^&9V$iicLr&LoGH{r0H^wCvNMba%c2VO*@PH`xpHT}EUAfTCYy+%Vh$pTXFQl2oYwh4e zO93yjNFA||oLFsWNnALJ!L0%AMw8Tg`j*Yx!u>lR)cR(Swe0r07*5u;$GEy?4ngad zAgz+Q_Tfk_1RKe4HK1c-OIS=F)M7Fy zrY?n5>SQrVAsAQ84Fls_c<#A%7@OW~ZhJUF`^CzIvr?NiCi2!E2bH!j@aisOh$-rYYOtq~N)LD5EsHWF37QpV2(fVaVct=( zN*K*kJ<5{_LR)rB_&3f7=Pm+suuy{}bVKzdQtRL2u+KVxfgrma<)>mU^ z$OOCfmF(76vRhlVY8*Df5XcH`0!On*sB2TwgY!&IQVnvDK3VOI!cs`xvC&x7LKo^>>h@TWDY_X%BTYXwSS4E>5Ec~spc$WXo;s0S$rZ3j`LEQ+X-9>Mc0}_ z4R!BLqejLsWleCWE>b8PPrDlALE$7yBhU97N5|Tmp1R__Ma&1am?EUx@%Fwo zftAXN&(0>|yx$56*Tc*FdepX!WB5)C{Bs?=H-@vWynBw*U_IE{jdFXsNQP zYqVfkyuvoK48<^Vwo9zM9?TPSSU~4QLRVinVpg=L>K-iYR3lG_EX4`6Tp6oFc~NMU zNX%LAPy&w5aZ3$4uR?+XKRX5YO>~K^DuaUEvP-a*Lv((f&zXl5$L@678c@nIt9VKA z6v_4{TNBcApsk2I5zp%;F^1z>v`xzPU=iCMKalw;i^Rj9{uqZa(UG*fH4UNZX3#eY zbL&+^Uc<8q43D5En8&rgFQ2yRW!MFZYg3I33+!t=~=b zyD=A>7#i9qJF#On&PgHVu0WIn7Pn?_&DmN?Oq@j9GYy_xdNQ{mx`&5LP=!90TbV(= z%1V)OzP<0!9=e&er5>F{r zTxpZ4PABtNeg{_`D%%-+2@hoivGQUIPAlZzHG$_~xV9b0DJPt2({sHjYP>3NIj#6oiZM_c9agO z=TNL1@FzUViGi?-W}`q8_VMHEC{+R>!*k9=6Q!j^NdYkJQUPVcDmWmG^XEM&CKO^-n7Z#o3Ap}0zSc(sHI&N9g!bHQlV`cC z(;^P#aqEGP^ra)l;qJ9t;u*qptR#z(vYAZX2}%p)>ozXBx&m(}O5uZv!eYZrN`HC4 zaeS?f$tpAzT7gyyr8jx#h}2qT{27`r?yK>=Jm!Hd9QGbE=i${&F`J!SN5D`XH~V(V zm9(mqIV{nEfi_K!4_$tC!5|Tb;#NiDe6n6gpeR9gyC#@G;^dQF7IcP`h+WRvgY^j}><#?;UuQK5G}G(RxJusN6%;>!A|w5J3`$O1@9#ur#q=_bQr0#xiV$he02) zNoRkZAkN}8CGMBzdk5GTM7e9R#x($q=Q{V~^94I;l0tUkm|X>BGj{kYke%avF2Qo` z#FijxvIB3&MY-$<-e$x~PAaDgwB}WT*4!%4njfxVqn7;5^5)U*Jz5;Tae~FNHW@C< zgD0C=dARq!h3E7;<*CMIc?pw`mf~Rxj>B;egZJV2&>>C^_?xzh$!*hz+3;`&vwT}_ z+XUB{k%d0M2U+Z~y^Zo78Lv)s@{Kca$1{9*--K6x9rq3S8wXH7T~L~VeC@=iATQ%h z63Ijfym6_8%VT_6{c4{f!b~(o#TF7`oz;anZ>wWNBN(YzuZ`?2?9#-Tq@fyF!cGkr z3lS$)cDcb`R8KW*Zg&;De{)gf3O$p`8AO*KY=_4bH7Ew;gQgmJxy~qL zt6$%6^a4nO4@9DtgZv#AH7&`V-^7M(4 zq?$H~k~ZoBb~UjT*O?>}y(cA!QMzIyVT^2$T>-CJ$V;6n%$Ot`)}9LWCqccX9!k3- z@LPGfV` za2GlSjzv`Tuv(=_#0ix#!&>Vta-oYEC8|Uv9!OTE2E)o!Ok7!&dNoJK3|lv|$$EJ- z80W7_#grpZp&T@dHR#oYCrs;xCnSpFxZvl=c_j%D5Yq~KjDGB}?e3qDjVV7j^#yyo9Au_2D zVv=G9n7DXA;-npRSk)8RL#-Z*I1KRptEnCjo5tnxDiOr9tA}2gpUC7j>@lWDAC6V! zQE5&2h_s@5U?SY=;|s!pjVL;)6U8O9lEB4!36gv91Dq8gz{Euekm*7MQPqnf@=8=( z;hHG6H)A3W5|e#hO_83>hg4)A6zAnbqwvVxTuK5aae6%t`}7ts<&fj!G6QwV1daE& z$MMKAMv`%Q91g&QKZTLk2vRschL>Q8l)WRIjM{al1W(~mHKv*bf~%yKZnb|P&-qTw zJ;wUeOl$qELiI9OoN)IERX+hj&Ce}s1`%AU5;Rus;`APit12lpM&f!`Kfudb*eYzq zT%oTxMe1Y;-bu127`(&|AvLRe{_bIg?*1WHvs&T+q3HvJq!;O>M}dfXDc9@D(0b!7 zB*fX>@W|&{9b)3Dui|aL-_UsTnX}3y*Is<10?*M`Mf!qD{zh3X!!RnDr+Ypo$=_j< z88~dU91?MwMW8?;c1p`y+1~@(mS|d=lJOO z2>OhGNy_2yeiS<>UFWjXS%KkbO{KR{#@AvIbri>>aTgFvdSZh%Oi@PZ8|G+o$>w3B zM8%KpD+EGk@_X~W&C_iN&V&$()uZbY!b%8)m)+$@M|&b*&)635fGEFu)0Tl#O+d* zdg;esw?P)paA9S9C@aReJ&F($T7CsytsZFB9zMkaV;;eRq}HIJz3Wg7Xm_9vRj;Xq zwT?8EQ6?{ssObn22;|1gZXBN>>+Zghp7`Ska&C8cLI+&BG5|WLcn7+RUU)L6Frjf% zu#p1aA;81;!#ntvM#o4Y*MWIAY+MdOfdkH0+2ImEYxqbg20-X&AP1jrgdF;6+M51n zkCNS9my(Bz^dO;s-Br(v;XSA|dQKHRSv4x1dapsbxJb*I7CNix_z6xFNEU2(H(btS zvNK%6kdCK(A&By|6`xci+Wd49IWPuBR6K12%Py#(n6wJco~-gQg^@j2-M~j7AUIzw zfc4-?Pxu_p8hW7?e4C_`1J$36>UBRG+4`T2>?*X6_%^7kG`sbc(jTxxH>Q;eB$m7? zDGT|_vDK%yP6M`rwwEh>#efIC(K0$V+KYXN*yvJdJ;$2hWodW-G#SgwQo1Le8yf2| zIZ)IXt)eL^m~vU7Fjj7IRj^TPNav4JrE~NVA@%r3Z$c~`2RjP61T#|L2Io$H{Ab+& zJ~%Vb!}GYh*MUbJaiRz`eGbSE6~@seqdCc3RfmNbU{SAY^r)qcxSbxYak^8!Yg7(a zLsFv&mdOL8YgB4qoe5GN$X>($szK;nbKKFZ))8&I_~b#9Xv^-r)<|&bG{&| z@V)4Yyqk_YPYBKkJk(%)0Yd1KgHYJrTA!+k!iYF=8XF%)2IsKHtU_3K250Ea*5lx z6wvB&eOq(-+#=#`%!WwPI%z5DE2!3+F+#A`~ZLoFfj^6XH>eG8D2} z4^sI0jcae?BX^N90KB9w@os?JuG5yNqcAjD41E`{>!dasg8R~Oa} zFCfI}gOH}zF=PCSkA!3TFj#p>%IM-sO^}D$Ohky_K?CHNJg`2*#0qey6usfYQ~GSf z%j51;i3|(XPw<#X=r{aAv|QFTh5422G*V@deVu?*HxJ~7jqR{hM9RGp-6*IY=XSx& zQqW<9T$8bdF-~`bLUCRUTXvI@!WiYGmx0IAVmnk^i`+%n*xp^xZJRb(oVSe}kBzrH zczdXlvNetF6X(A^izpIJ^6WWpKS3A-8vGzc``-&%n za@M1HpkIW^HDOwb!44zFF<04%a};u#!iTX6A{Vbf0Rh>*xp;!bFG=K4e7`p)ahi5X zGDAHhcmoxSu`x}nZ7Mq&S2CK1JUcAJ67o^`0e&M^BWSY&y>I2}knW0s^~L~sEsjR% zHE%}nSTX)K5A1dfD5E_H&j<-&@p>CxBUe&lHtB&JM<7AI^b%9F4fKr4w=Nw`J2toY z?MoN-6+|<`1NYbv*oLo6Fdw{rsVDY9E3uf1Z^WGRTD_CosyBI;i5#=amYl-WV_W)- zK_bdum)L$AE;N!AqR@qzTF2n%~EZcma)` z8o(7vd2R%P=kReMeEUQfxf~&_4WD6=x93Bgdo(bVmExy`0g8i2xQ`X2@Mzau z{d3s(VYh@{w#r!|?G>biogDBaNIb?Zl^ILHZ`0Fb4mHu^ERi?W4T}esv4WK@sB7Ff zp2qd7oOdX!fa?Z^`R-3v)=xa6>(}B_AZb&e=V`-26_%Rd!j(3_i6iN#{y}Vs!{ePI zvl(ER6sJ&@O9^K`p3ms#3|Pz{nRn_T(z)gk$KwHZ_9($%t2-i;!ea0llusVgN^}^) zThLp21_$tQfLIxd#dpWFBZ?zXr`9D&YB7P08~9aPS1Mj9#s*;pVgn`)&Td$Ge!#4P zJF4EjtxbMB4$$Ry_=RN_?+3xYHFw&b)q*HtwiVgK7-B?x?nb%maWeZb zkLxyQvRZ0Q$Y82P>FCN%pIQ;yyYcZ)d0t48A&Bpsz%lrdhGFEpAoz?`Nab)j88T^! zfJ0xeR03iYrr&vUIM;c>g5zNT1K!+(l9;fMXE^BM<6x4B@AbD}Jw`hN*%?R8cuZo1 zLTt>!9%@9&aNGTTPyssm{yd>+E_OiBGmDt&rEPkv^7WWkk`L0K?@%SGr>Xe zpq02Jhy%EMqy$K0HQE+SjE~2?@Te6gNCbL};&&LczpR z%1gFxmy2L=e@YeY#w_$K!q6kod__diIek~ zYqPBmffhlpgY6N6E)erB&KQ^qcrCkGocgn*81#DG)wS`0yiq^=k`C zD-oE=5A^cpLx|&P_7u(!{h&8Vh^rUX_+|DM*IBY0GH_0uf@q19P^N=YzOY6>Tu4mZMI{NYz)Is>H;g$7)nyvI+P>ZI>MuoAyv|K zSyGP-$3+&`C5tcE{byGRE6@+JBa9C_qJ!t57i{u$_vHHeu`eQDWOD1eE(R~7V6iaI zQyKE!NRY^0+O{=EmmozLKYS6a7=pG3YN?*B#8l5#qAIc#Y%*K9BR(d_R#e~+k*C2y z1YTd~bI)8e7~6*(9G<+D#dJpQ8y(E`uIuG3JAA0BGG+`1lB>m3Ri$vNUM7h`Pd8kh zT>&5Os2)?H2jMh^HUDMkhn6c0Pd+S@W&%sSRf{=3FwRp$RaBF#34ABDyLvrKOm&?| zR7Lp&o8m4H+$>v(JJ8B|xtfC+5I;|YdKFaS&5}{Pz*@DUcW6wNik6tF6)iE<3nfui zD_UZzRl6XGC@0jHzHvWSaB%GTjp9W~EbL8|!#rLX1_ zG^UzQu$U@7L1L=<1c|9oGoD_nZXe@?<#mD{Pru?3_s8H~NLS*(&~hfim}NB1s7mg{ zCS@NQ+&5HRc8RIZU7{+u3pU9e$#Dz6nr0-XI(Lbx;4auCckE0p)959pI(Lbx;4auC z_mIYImk$i%5rS&Pfl1=TZPh`fM1{L?h;kOU9c(c`N3s6%5lal!<|u;+=)$b-`TxP zM>)=zWwR7E-#~HH>cScomCpO8wnzvVT@)u9+oez6|&kl;Yp+AqZ z*yH-xyreG1NDKWg)O5>@PMl@UA4?yGHevfhSIf zG5^B{hcVAKW(a%UxFrSk zyqth4uS}({Hz0QRvqV=*=x#cxNFw!^e6ev1%Ln)@yFDLb$I>Kzw;qwe3WYq$o5K0Z zipk_7#60+iw{bvB@>sT(x|c2)V6=gW>KK9d}sRg?Zvg4`n*V z;)xhpE~r2cbBis79pf@=GCfW@y4!M=D=@L_Z1x_Z*SUh$>0<0;Yn2#(zO_nRmF5nH z?q*LcO;T&)Yk58~g~PeO6h=>~;i-MDQ)ms?={3HzUx~!k)Jo*#)sRJOM zaum4}HHu45agxztpBpZMA(h;jd_~vh*6Y_bG+d6B*gHHv7=~r{u%EhlMeF7*&6z8& zh_HA;&ySTr1Ei=1vxMt%KFapq2eI`3&LOx_yg-S2Son)_@5Hhs{|a98AYl|4f3YbO zh%q!VoJ5RZ5kH8>i`BVaxLbIC$bn(c_~?YZL>A)_i@{caw}%H{w5bSlO5{m@+?s9P z3a?=yeMG##kK;Pjz(_6;7Qdy@!W-T;2-(}@Of0dKH;A4n@bH+FLb0>}G<-grDzCAu z&8^E_fqQg0+{hsl#`B6aca&UM2thKsqbEj+|H2DZxLpHgxaWn<7?;562ZwfJ96pb= zD?wDiaYwuu%)Aqfr5IsKK}?_{;?+t$uaMx3TEM{tz8UZGAK$u}_omVD%A@J;;+ve2 z=qIRTuvOzhk;Ry3-83HjmB+>Kci16D#k_#Qzo>5?&SsB|PxN2_!LBd*`OnWa@N*6P zTmwJX!2jhM`0{^#|LI?dqMCCc=X3FUA%3?5I2hH5;He6FVkaBegi208S?I;KaZ`Q5om`3%=6 z3Bv{oVukTznfasqaKm#DclafoEbk?)%5N09;19zFDxyNZUUZD?-t{Lf-$&o7{J#A> zjdx)qPx1ybhh>3bTx)YbX?~M$Q+}U&nU<2_g#KJY`j6L53(Mz_|4_oS~tHn)7LHw{3iFM{C<_2M2n%_A`$2^=qzNg8}70 z4+x@PM~yTP0RIIrTzKdLk%uV$T=MV*(F!=4hOb@_oqSa!Hp)CYRz5HKA%s|8dR~XMgvC7ysm6 zU-ZM*zXCX^`}0>u5q@9o!uZP{YR&0^?dd$xQcd*QiLp`YfWJLAu3NKqO+&1ND(Rx= zVqhtHuyx~{7U??{N<-Fh{{mGr52t$Ume|LL3k4I&wqZdfuC#O=NkCA2LA8RKv%Z- z?d;Tcxnaop{;LqY}j6&`vI$PRbJ`t5a{)SaiF>`uq z|7jv?57*=WMS`jSke)rz;yil4yV(QY$zW;!Y4G?J@W>wi$Bt*7c?O8$!8ZUX*8wRb zu-d~MjHK9UuoH~3Cqd1h_hhfioT$B}Hc8w-lBxYCfJI4CkuN}`aLS%!Jby&2J1Ahb zG;sojgf8~10KAl)X<-jX{8F~Gdqs08b2?j`X)T^A--6kTpo`DVmNJNqvTvkFwFlT+ z3u=nJe^h(mA|ei-cLt@;mfFF*sbTSz2vjRy_8z9;k8&-nD4)yXPyoxx*dAO~MGeeo z=3o}mkP-CjBs@ouB1EZmMfS48q{$ZV&lVpj|I6!9pyI(sVx~UFKTKTvfkymq2;iQn zJ^0H&lz$D>Q|mdLtUZYFRkXO4|KYddzxM-|Eh*oUW>|A7TU4kN3v_kUirRy;2dJtk zP!+^4fBPyb8>%avpDlGk6K`3KVA%k)>2`rIui<|LZTEh+Hmm@dk z@*bDV3=k9=8O}7V2w*V=FuMl0;=wDBQ7Q9OcIv)4gx~S`e)(Bb`_cnU5=r~I=}a9O z*I5`9e%}MBGx&>2?UKAE&cebtwnSzETV{l1x?0RUk-h1@x_5lO_N7UFMH(c?iui@W zmcOwc8WPI>iu}Ey$CB(>4Kprt#3~ZaG@1~QZl=+MAWYGW?~z1#()n+Bmi+Ij7dEh( zt4UP^yh_4wOVC!(8nn!Ud3 zrIeJf*j3IJ+ZRxeAjhw?JsQz|;3mrD#n*|>>Z#p0eOOl67k_}Xl*b*Ze z%In_;PMIgB_CGAo=wfC8HM77}+RWo- z1f$3FDO#j^HU%z~U;PKn{mj(A~a4kEi4ddnY*0A+MQ<+mUkYuYheUnf?+2J$aXoN?BW?&4m~oL)eO z%A677DYe!YAGm6+RwmXUpgUNc$A4PP$rA!LqLoh`Cs@qPgDDA6 zH6JFX7u9w#C-qtF=fs(!f=`{TyO?$NMtYvwg9G?qdL=NPXR%8YXW;MJN|}Xc=8Bm| zr}jSz3K0HUOb8{GCKf$?>f|vZ@Z(1puRvh& zqxcVcS;$^Yb(&rdtR^hRGkHwF#!INqMJ^>I@vxuF{7gm^f}&lWIbD0xn@M$NBmU

He150=``oYP(|w$B2%y8Xf0o2Z0RX7=jL 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�T5|Vg^3ARuLH=knIqBU^-rRTyM~w^GBlO#e>8v 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 z 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%0As7R7O0Py# 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%0A1d{bfnM985;FMu#7*5=Dyay%;m68DUL0B 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

  • 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 literal 0 HcmV?d00001 diff --git a/server/www/packages/packages-darwin/x64/PIL/.dylibs/libjpeg.9.dylib b/server/www/packages/packages-darwin/x64/PIL/.dylibs/libjpeg.9.dylib new file mode 100644 index 0000000000000000000000000000000000000000..0f6141e1307b45aa86021d05b5bf2b86d80c6fef GIT binary patch literal 717656 zcmeFa4|rWwl{cKUw~}J;6eojG>t~Q4#TEgrPMOp(#avCHR|_;+#}<%*3L|2bMk_Q! zF1Z(SdV1T!v`l>m9p<(3S+z>N_s#S4KJCfb|JGi6?X}lld+oLNdF=NOJzP~)H4Fbw!T;G+Rr9K<=A0M9 zdu_Fio70TA@2qAV{-6Avq`*lEoTR`>3Y?_CNeY~#z)1?6q`*lEoTR`>3Y?_CNecWo zqrl_8{maf7~VxVZe)sKohFtcrgP6wMr~>a?YT#+hMPWN;!0sOAC6Vs^xCQ_{*C^kI9+vB`%Ry};ihY^ zy5XjEpGKxq82f$@t7=6&|3=G2;gL=;>CcvBtCmGl*q3Mn`;vbxKfo9yzpJjg3H_km zv3|p6QFnRy76M24Xx;3C(-j2D-1zaCV6;3Dt7<`B{*A&QF4qJwO8cT1k8YG@Vg8N6 zFvaB$(OiQ6S6#JY`3EnJw=B1Ook!V~NWkA%LTSLf_IDay7UO?C{%icJ@%HMf^IKND z@BEd^SDb(24cGkT`s+UN_KV(r?HBNl#HzPcRdrs#7rdi-S{+27R&F95Lar(#tr zU|A#1%(wX2SXBY>V{_+J)t|*$6g8GR5ApoJ2k-xkzjch9=GTD1aC3#UHzJPp{PMS{ z=bn1}g5;hHp08Q)v5(%`h&ZxA)!b9%|J!Vsarn{rXK6rOtE;~WqE%O&-+uFF*?#`N z;tMx#xb9PLzt~dYt;k21L;o48Y6L@_Yr>P`D2m_0NO-BloP3<5z)1?6q`*lEoTR`> z3Y?_CNecXTra+tfvk!NTwfJnqYA-R*YpeCzYuxrpw{5~rjC+a6+%nMwlN}R(jy!HW z@1)*=7cV~PRppxNsCb+AdS>wA6DZ`(b(hVTXs-%Ex3=-vV6tO;A2j0P;%7vPGu4Z; z&Pv65khAI_^E`A6Kd*h#d$-%}^Y7Bz%8DfjU3;yj%>go?-dG_A6;GM0foEUAI#oYR*rV&t+qqS=*gxpM8J z>+pNK^Jc9W{LwX5>o)a$}AD@}Dqg&DuwuH#b*RNOyl+nqKF{LFgJcG3A1+ z@d?%rev09bleq{_VVWrqv~%O*?_si&;%bH*lo)rDop>+cKQkICOccllrNFM%JYIsp zHh|ovz{cEU9jQVto${2t(`PHI^RH27SGJCAkI<(+pigpR-E~00Ns*;MFNA3Yanj2* z>~(U1kE)xNH8@>d=pmDgqqu$NfSHm3!=%m>^EcPnxWb=lJ^-ekAaaO0%Pum#+qY;ksS4I+=obU`;vVi&@ne*N6OiPqR%?o#+?UV zYXGqDxFPCz;fM@_MhFX?KhS=VtJZ6)aUpjS6Bxy8=Kq&1A1`WoSC+^+Z&rB)%7yYs zm_x}{PZmT2lxD{UgYKSI9-^lxIA7v0WR)1yQ4aISa=|D^2D04wJIO8>sES@${vblc z@pk^uA6I}O8*B@;D<(?toDh+t95o>vHDSaBQpiygpn=TTXdGI{L1)G&Q|u%Q2KV3i zTMi=@V|%n5!=^n!1l#i;TLFfgevm@a1B2czqw=+0`vm50u%w$9J@!Ks&xxEwCbWMd z*)za5{G6SSKL2R72i8rDIxT&G;9gwUm2J54V;Gjsn_H^bzaK&SFNiQC^%xn7qyj6p zy>)_AU~7!no}k#iowI!pM-AHR&BfgLSBQ{zkz5l-axn+grDIR9305{<$gB~7RziYc z4FqAtBZ49x1M=xakle^w5e=xbU{tEbiYQM&3zL*OZhRDjyeU5F-0>-#z)9N^2ue>xWNZr9l=K9^FxG2EPegLgQ@ow~ll6ELCLC{ykJ*`DNl>qd>A;H= zmZ?wxlFzM7GSeXWz_#oS0$_|tmvqvYYHeNF1#2G_@gVYn17wjf05txZ%=XVh5zBNQ z0hEV z^J52Ms$bpH`lAg^uAy(Cs}Bpc(%aU)dZL9dhJ5B=>fYmtOjX70*fZD)w$_2iOZz2tSu2!-Z~f6eo_a|SSz zvzOIE59RbZfl$-3S|{^IOu_1}s#9{f%W4aAHHs2G#c!Y%k4$+JZiFP1r>Hv9e}gE?WcvjKCOHbp!;-2w8m^l#B4`gBuI^eFm^`KrWgZ&PC>7iOhxmK!KY4^dt#ruf(pVK zyCBk~z_=AWSOkwJdnmp5b5bA26EkOWBih0-b+LrUIc+R&wf*us&b~m~NIhSqp6|7` z+Hu#)$rr(==pNy=YOuw&u_YJJBOV~~(3qN%OF;@J(byQTD=p!6P;-pUqg-*~H%i<3u4Oc!rP zZjR1@^O%xgKu9oPND%6QNQVM6?!k25F>qGLP?FNmEb+0pkE}!eb*QcIkCp@RQPI; zns6-XCGyTAv1Q;4C8klw$GvU}0kDn80Ym6HAZFn*KDf#eu2~o#5U!e`Km!Zlzn#Aa z=g8b^IXJx@LBWkH2|HxK{!Q^g6=8-wMHFojjrE4MAr8IjC)|Wcv$l~kzU}o>Lee4H zBLNu9icvj^p@j8xNt-{1WMWXM&230C{EI<5GOb8B1GRo=hU#^oH9b|Zza zikW-Fh|`f=Jj^jy7o|6so147DKyLv09yd5(-f z*)H)qDa&9A&c#PT0YHWwVbUr|aftx}W6(HYHTLT6aUOvc0fyte`|OjyO+GC&h&4h@ zf(0{%y^k7y0lF+Ym3|E}%#des#r@9JmOR|A6a&1H2deB;xv~i3F6YfaS)8IpBqYx- zuv!)vBrA1UE|DjS$s@s#JP1a~gAD+kEZ9AqEXD+0Fj+uHLKdAYtjfsAVoWCsqw$%^ zV#*56Ax;)1Emd){fKD?+&_>dh7id6>qLamlnJh+hOqj`H1k+ivV;Fg%1#ZSu^rUf_ z&!$6>);0`>G88XmjTho!WO0DvbOqkP0{Cy|vtfhcaN!1-$w0WsOqK`RG{H!iX@K@A zoHqewoKoqAL|!Jbe%UuereSBxTM%zVGPaHUGMO>xe+zvtwUZr#sZDfznc7O4|7`%A zj^NuRZ3r^Q2poFK87=gjyI9n;AM1o8V>Q8b-?r&+0zPHqd=w-Y(%1#i_^dMh!+D ztu`AfQF|Hm*W}o}z{X0YS7Hgf3M*65<5ViWH7aZ_-b-S6@m`s}bUFL)*l>~< zu2n_9WoodrJ>~05)q9Wm?U3kH5wMH0oUl5KW|ZM)b;+yPb$Ntt}yuwr;l{1Kbkj z&US-Y%)Si0>we*Zne?ui`t4r-(t#hjGOOYcUko7fSQ z-VrWlS-Rq4_LWuozKF>-T+GTq>Xb2HtOV+SvlTroV?tMh;R?$NZLy4KzYU2Q1mLB3I7eOIS=-! zxQzN1QiTiU5$XI$3s6CoD;lA{OW?e+gQ^8Ebx=7nHS0=>uk^l=t^Nhx z%@FG~3&-BVycf+9BAMmPY__9Y0{@d{J6BJL-5VQZx`Ke_J^?GT|C>>iS8M+ScA5BQ z_bnds#lkXY5OG{Cm@TBQAiCmSuRu{34ZGKi1p#)f!@b`11Xa9=y%tf@Q3spx7HlPc zuI_mIs^UsJvi^Acs#rJx1*%5;IVq6F)Q6qLNPYFJ?>M`cvXy%Ss)WtK^hCIO`75z+ zV9&Ca6}|M`%dTuQHz_0job;b+rdm|BI`HZ9I=AgW{cuxi8;3suS9r#^0BRj(rMYl0 z_7cO%r*0z>v2Ia#^0Lv={b={vpF{uen}iQ-9xp-cGtpSiJ(tZp7h8Pu&nzi0(UEu3KCOojebXR7N7(g+RXPlb^BHnaD+<0g4JhTQf+tZL{? zgOZX)a7mY^8Vd&?UnPpz4*-FUBmEs_orzlZQ2Hdz#|g*nq*TI2{O zX={7kH8^C^(l`%(gLSaZx`{(>TMs;j>AvH`eWy8MeS@r;vl``qbKwKj8$OSK(aIp0 zxFH0`ApC0|H|{K!O1#4W{wr=`-?1M;bmZd0tR9vnEa@@JpN%Janv(OWQ>y#%S1YfF zP&D)QaN%*(2-@bFn~@t1DrUQ=XuqgyY(ca$UAUsdv(7rF!@D`RtcIl#M&Vo%E3~3@c(YLg-%V^fc_yK@CD$ z-|1L2h5ivg>`eD>SRuRu;b->yfmugTwq&;^&B9jHCV212^og~7Lrv_2@3&0Hst{-uZ8s49yBH*oGc}*|y1e@m(pCC1YSVQ8USY zFTP)#OvgO;KGew_GB>^tgNhKlxHlm=mS8K$_(vgsD?(m;FUGZK3j3Y=m$it=1^6+r z0Cuiiyq{#i@I_qHvZYSuF~VnCYH01eUFn&fZ8EHIGQW}h`@|T(-)rCReJ^Qcz~D3jeTyMCpvLUR99{?Ufq}Y*?A*a3os(b3Cwj~SOd;6X_#RyYk&tndN1|r|*FIh+7*6Su9RPXh$ zJI`hTD$PY$$F;v~h4O6nl0$9ixI)sii*!LICp~;dp!!l$d z2MXKO?N3)GhNs#_lSk@_VTrf#|0QL~&7x%H<)tIU|M6d3DPpqh5$fw?xdH<-Sop%*nNuNL5(df08y;-tpWAA@wLQ-Lx7Om1_pw?# zg>C|?Vcx_1J&y>3!8vndfI`W{h#9q`5oS&BW45qJFh;1sOY~g$!xuhNi=EG8M;6gl zP8t#wZMJzCC!zTwE)b2i!vF>^%C!%;ZN15kUgmMOYPo@h7+W0OU|+Zdg_2=UIINrE zStsKFRpDMQ(eJhG_i8s|I`tBJq|rTI$Dp@%%v<_hZ|yz|Ax`BSIvBjWy!gGant6#` z6c^ALN~pluAC#a|2vu?n3HHBw%%;dfHeSJ@#QvEM(`#!I2pEvz5-tK?q z8V=)q>%1>?u5&vcHuBPqZ^4*piuXF1w*dG$Fa9uw0bp_Ne{7vQ3#o?Th6+ElqYZ8gz^Es>4=rp4R7?FxTF56q)GjhNOkwPXiZyxk~RY}F{ED?kP11CxWzyciw z4EvlR1q#QYsER~WRT-gX*+`QTNJemnQRjLJ{~!Z<9P@!ST5vu}W;s@kg@osG)E~!3 zBp2A!m%V-ONTZi=oOj%9qw6=7H#rIj>1}LoGL1k24cpmq1Iim#7US@i%`!!zF(_2{jqlIJxyyz;Fi-E5iTMi} zoXz^P-U^_|-QNA8_CgtmZpWYiraT%xz4$&FZ#(fSL%!dA%$R1|APEMcrDM>B2Cj!~ zhofFIkPa1Se>4mb(&Rj$$#7&If#N+l(>y}5$vlEq;sx`_2(T)eN5X09TQWokgL$OK zVAE6Bq$$Po$S~)TzxfU4kr7ZH&EDg63wL1<&u!vKu=||!t0m<=>mK3PUm2?k&d0#~ zbFJl0%r2AOWjLtdKI6V7_x>6xjk)*72pM`m*C7+sE0enr1B(}=Z|1Hnb}gtqOky@} zb&quY;#FJ{wE51RPe`>KAl{Dd8s$zEQqTb0*RdPEc9v|@>8?7 zONHt4Q-f0YCzk)}Ab;$H;9n5r7yL828kim*WEXsTM9r5fnk9o^kgGPjnKSy`co%mNc#r!Yrg+H>w~k*Wc6 z1Tc38Fvm09LkO6q*q>@9#MR(L)%M-otAok#43iwCPKBlvekF?pa6@Z(Z%vCPonw}* zaMD~x6Y)-xmZ-yl6wa}Odf3s7+957Fxo2X+K!0>@fd2Uw{Za7V3F3UbHofuXw8^Za zu|ER?=#miK0a-_99ob_Fn^1>QSx)VsHT&tGq-*8lVf!gralOPIAhxGK`-0N#q&U|Z z%zC?g7z28o)as%*SOWGtY0mDITY&2Q8TR;~CHM*%bqk!dE{f3wtrF8%ERrh>a>%7Avy?wa57Akulo)5;wGt}O{Po<*+57?6I zak3(N9p>vsG|^Zq8#pshiX`NuEay+qKQT-i?e>Bg4lFt8z|62v;?VgZ_vz@Ihoh=v zNQPZ;Om-%=J%Yduu<@)wbI}?YZ)2Mgem{E0gj1WVKmo*^|0Z6v+8Is2M1X|HhoCoV zVPvkAxOaRb8aI!`9P7(F=-W;OVk`nuB}!p!1xQcqh?c6?YX5gM4on9~MoStiEEdY? z?FTKgKPme6k}?JucX3;U5JUPMOK7DZdUQnApTnF}$qa|kQ-&Gxh8eyIB5@HPFoQU? z_k(LfW*Fs;l`=y%)KQz_hn%h(q(;P5a4+Z5;S{62g&AEw2oA; zL5v&(hcswf4FrNUTH%{)^)hKSPEOOsEb3pz?Td1DsM!AA^7iY-U1|H-rm+3!$Y}dP z#c2D{L6P=n(PXevmTUX2P4Ye@e1R6>g?s^W@(p|eO6C{BC%Y5*bX&ELYpJ$Dp~XnI zh6W@wTq$F}Bn=s&0qbyGBa59{%PJt6J>Mqdr@4$_PJI0AFCRbef=H@7ejTQUGE{d3>Mixlgki_{TDc(TmAt4+*i(@*SsS9DcoBtr0OYR z*ZoT6{Y~+GPS>*t7~dH1>|FQAxsSPR;5P)8S8HfcL$l6>ff8NUzj^g+TE7!LA)B4R zRDl97otaVSr86@MS!UL5gv{G-M(h5pYydW@0WI8#VAEFBL zFvTPGBk7F-p)l8j5?8!GD;e5HF`?t!49(NyoWr5!B=3_B#e3eh8V~Ik+)MT$h>%D2 zk}qRlu&#q#jbIhUo!JVvHZT<<0;W4&R{)=fRS_M8@_jW?jr)cB&{lJEOhle0#})xV z&_;9lh}f~=ZDVYs*82&H=JJ&|OC|AbK7?{Cz=)7vdcR%j;Kz{_Wvm|z(lX?U6iNfr;gm~z@Sx~dFf#z)EY#ijRCTJ`+ zQqN=kAH>d**xgR5Eeba#vG+NtufQTu_y&LzZZ)#NzFvaaY^iM*Zb^(nc$LKNa8ef& z!VLyO49X&$GfOa=C2+SmsrN)Ni%D#^lX?-L0(@&EHsz$g&%CD_xDEul8}D?seI%Oq z6vm1tqqFVoXu@k8CUCxVw*4AS4WOTfm6w~Q@1V1-FPiWwN#I#RXWO=DLM_(nZkm2~ z&bGDDgjvAPO;s(ogf|Q{wn-+(`y9O$|$JW zQpaj3@pKXOC1I5$Oh&P)m4ua&a4GBf0U}t(X;Q}use_wm0ZC4ggjOjrKu}*YC1!*6 zZn~ws#A~EPvy|v3R-ZH_=78hf^inCorAko8saUAH=_QizPtk-J>^g3mD*|WR?a_pq zxlFh~5{gI?6RZ|7A+;|`-5N<)APKK#%K=VWK2H)FCE>R$aR{j-$y}+UK@y(DKr4L3 zB+L=4=1T&-(gIMYNw5tC3O z17}hae#L~ZnS^4g=O@3P6~ zS4{q_P5zUL$yeCqri#gnZSwmnCjYTb{y@d#=fOFG`K1+;e`J&2TQRxECcm>{@)vFL zITe#{vB`f^G5KRQxvOIGQk(qAipg)X$sehh{CjY-wEM3sCjW;`_9`a#+T`0RCjY%n z{(Qyc+imjA6_fwMCV!%0a*IvAs$%llHu;K*$*+=R*iJ?v4r!;H<)+6mzTM22jPmt? z)RpKizuHavk`hj8l0rlMH9=;MoUc}_@S`Gjk^Gg?WMEQN&>aaR|6MeB6$A?Uud1N- za4cxxXhr>q+M(<>@%GGPg9RcbaY)BBgm;*N8tG%8H+~_sz=YtrDl$ygNuYRTUwoCE>TTO6*0$hSH-#>AcXB z9<@4?q!}%g9+8y006LOFO1}lvFw+j21fbY;&LbP}%{SwZlWD=Tho~RKfQM+#IpWc`qsD1J0y^g%Mw%2*&(5-iVC|2d%|AN;slDsW~j+=8@UQBY* zsd6*JB+rXaK3)AUJYjZ=$<~KUf4!Ydb6SqLeNXr$PL-?@?z1Df4;Z4E z?e1hpKXd`mZZDo@?;HLu8rOw5Sy#526Mhs-LFQLyr);q)I#g z1G9OgkB&D|&>Zw(urx<^nkCOj;Um93b}X6Y0w-{1Dzd+cKNC+%_yn@rOEh?GaM#7j zh&pfWJU6`$T?21KH@#P0YTWc5zG!^so3DkY0QMU9B-%|=(0GzpMT`3-85V~*EZhSe z0@3{wA6|+N!Iks-n(6tSND99z!)bB+Pk*kZAN>SWWYIYY&*5#;^m0FYc~Z2ZC|5-y({>7 zLo2|F&1)PNoh?Nm3@s`OttkqvFd?M}zU+VvJuq(3^|4r8vf5l{H#6gBZ%vMzH=})T zy_NlRhqIsF2+o)l-CtV=D41R{-QR&aB6q;ng!jV!l(qrhKMNCc5h8Dr_QO<&D>^p{ zA@FjeWLl3T{+t6PB^!`GOQu&|lna!S z2Q7J=^hL;_7Dt~;t7$EcObsoL_^bm#hy*ipI?h}+veC`h=tf&Np@(ywoyf$W1XB85 zRiI0_xgywJtql}^iUt_8fvnQ}oo57bENo4Z+|Qb5GH(0doW;zH2|W7pC8T+;_D1wp zVd@9eS|1)hNdO=hwRbkR+`)Z|1Zeu+2n(k3`Ph1Fs>h&u^_D`oR@|83jHO$?bpKn4*rt-4#W_BvduYJY}pJY5AvKme{dpjQtD4M zNRQ34&oVmFL72p_P`8|3U0#*!>>eovg85I-Hr+ODB5odK=1$Z(BVK67S+ zKdCy_ztM?6?PZjcVE&-&lIFb1-=sNWd$CD3!R zJ*@_eCRktOJ~vK)AR(@0i;@sQkPx3}5ne_`PU>xVLNkDKFw_8zL`60?IZ^J7vEvau+GMH>a{`fZ|<<24DYZVqZ-D`YsYa}Epqxn*hLtV zsvCzcG$#0EFcq716&#OH4y$h{VDM10SI60$DeZ;8Jpw@G>b|kUkC7iUDg}|VHR>En z)-CBbAq8C9N26ooG{`MGKbvYmFkCTTlPK$ z=NS|`*@M!*kkaE`>jHbKYJmxwd*w9PXpiJK$}HTK)f@1l{y<%0t(Kjp^kk-GC$QF( zVJ97t5(-CT(dBr`PB@oZ#7-0J_>i4`2cjEU5?o<7#9GWPfP?bBNkjzpt}&3%)8@Q@ zBvIWIj>4gtA!pkc5yW8@@@(V=JYT)kj5H3ffBYD7+i9A%6VVzllIc&g0wy7nZ`qzzw4jZ9%jzoNXFxzCsrA+=%dd9%_5Q z?|RNy`Mu~{VHBS1t4$b?eNV?`x8V((bi5J7J@*dFY80I*8OhafD3mFA69YY3R5{pQ92`!6(C882dhfK(VI%L3HI%L4Z z7&5qQF*;-<7!DZ(%Z5y=ID>J16@R1uqw;qEvxgZlkn+51PX>hWA9_C`i(7%6(X_|K zkQrQ-2`ArCUX}^v8#)#(Z)7j>53JPwk3nfbGOJp@@PC76C`tZ*AgA>EU02{byp_OK z+6;3km(1S2@eg7~#tE_scPH&2y5ZufO+;1DjMz0bW_dmIubqr=FIjJLA&y2*johG- z$%9f0Nu&0^l$@m!lUN|xWa3aOnbr}?w>Q1cc9)ty^_I@`AS(7ujPzkz3{ECS#GUL~ zcxuf><$09IrD@dxE-)O5tw*k|bj85x$+JlyJKMf2d4^a^W|U6|LoukzjiBifL?sXN zNnlQfLQO@VB)Rf5W?FfN7}Pj@?j&S4wR0kXL*{YPwRkEbuAr)nDwr9g5epXRFOf^r zh=}|VBdM`8imk*GO3qGll(}jVK2Dqel*?|VMJi3q6lEj&sVsO>r@=&QnB%}(klY6= z8)GPjyVKw0+g8zk3|UEd=gWQF876I(414US61NLzVH+rdA45$l!j%_OtHY4B^t2S@z zkSH~HJ6RjNVGESeiUDf%w}1*3AE^`bfovaON-z$Mk;ThjvGJ_rApTc*!YAGV;lR3k zyaQxn=aIS(Cpj-xIrr+V&i!tN$k|%>ZrW?blK=j&&C^h22WmDDDpDonH|3EiKkmmG zSi4`)+Qx}BvRQD)XAm~9%V#XzInchoi`)vYPWh`Pbn2JsETue1DkgiF^J_3+Id{OF zBtq}`cBO7Agw(YX3+owUiZ{ZEGa%+X85hxM@5%sTAfjkhvqFOsO@|lfKLr_`0)v=f z7Bn&8L})fZx<%+>u{YtQIdY`ylUWL9UX|nbHPZIaUsS&o|LH|m#T*ya9XsZ_4urB* z^gWL2h%7HgYQzgf%=__-Ed{Y)-^1Q8{qy^O8bK{JV&nI8^{nE7!9 zQ`n^7LLKf&+x5&=0mGPJJ(HJ880LCLT!^9ZLkkiwVD1a!4oR$4+DANIrp8+YR$y1w zyA5|?__z`yy0pf16}7N%&GVlD6NmwC%r1)Zn6hyu7i*qi*;1e{o6*|s2hf7^)N7QU z4?#Vs%Cz^wYtpQq3|&XLlHy8Gye8$fIfiQql1FQ_jr1nt2c&S4KU{6X(DL51xY7kQ zG<+<|W$X!H7xc`9teKa0j7IeP!%!@Z1SWiYW5lOGI+45bh@No9(xJ`qto@OP#*Z=96 zLfa@+S4h<%RaIrh4Kp%odH)6&7k6hwRaOZGgO#aKw&om%j>2^s_Ohe$@t7Rj1h+R) zb)Zm%$HKf_e-{UeZ*=hqz{8`zgpP6AiG1K6QDlkp&!<(~3#V2E9h;_Db zQRAgqTKr5FOOVOXP52a75|a)~g+z+`N%Al&Lv|P^RL6>x;^&>ydy!s{)qOgWWWMSw zsn`ie9_UDTCJ*x|@Z{3qmxUB&Yl2#$U|R6UOnCGg+$jwb7wH2+E;V7Y2RN6>4OZzr zL@2WxPZ)-UhLr4tiqV-K#NS+c08iF{-E_RMeDW~gNLy!HKc3hoN7&1-NzMZ?_!0Hv zEqRzvB!ljlGm(psW=q<8ssP8?N0Uu>ZxIhWp#Cu*s39!?V!RB(y5 z#L=RihqS1ZB3VpL%;G$(K(TYrQ2I{Gv6qpu zI|>v{}4jQyaVKmeuxB&3?%u0uG8|Eo9RKmkkQ=q4uqAWO+tPr zBVtf`*0Nbk_37n&M!~Oq(v&7pXWN^D7%xM-(G%6g+;Gl`6N=sBrP9(d!h7&ZK@?74 zDyEz7mA=>7wXW`ar7BG~R3(@KJ&)luLx|lX)uMaS6o0xWecJp|e+8`XF%8$sRYMbE z@fC~2KbB5ylW28S;W@S)MunPyz2+UQ=C*L9kDS5Q&&*V`e+>+ZrXmIR6~e@SN^rRn zmS@@~ym{`w1Yb})l@TkUjgwJayr_1ajsU->GH_1e0^FQ=rH(+8PeW6YQpHGYyHWN4 zjqqscKcPN+5T4Qrrn#;xzqw}i@0*W*{0R3Tb#{_>xrYJs0)lGi%c2fk^}dj1xM3(* z)@&3t_~P)#2rsRXCdcjBVw=-gVuLfpu$GBgY^3mG6u=kB)Zi<8s8!Pe68%Xk6B9Al z!|dH4^AIC>xzMPn88Fq4IuB#L!J!yg`|#UnMIAUndKKt9Zoh$+lBtl;U`HN`7LHdg zJRi}fg9ZsL_}th)6OP7i`v%A-8(P_@wR6~D!T$0hr^{$66=2DZL5c=vYeI4WoxJDv zVle_!p7ZeC<0TFI8p>5@82b+3jTv&#*ojWO!%!UMO~)vFW3LSQt)TYGA+=YYcy|r< zqZ_y>u}aCFI|U?1vId{>vBM)LJP%;QmME8rgHw95N%EXnjstRk1gk_uR}V~ z+4^VFbfG(T0ZH>xW+J0hz=+zU;fD#O-$eQS#gJFf5$CC4OnphP#Dpi&UWN_Z`1oAbND_CkPFkS5T<*}8C_Ku#%CSo_B@EQmit}f*|0cz`fsf|iX z9>)*P6L*c(%MA^a+}}X2G}p@}9_WWT2OF6xgo@fag_^1gZ^DD^K(9@j%}#8N;_}NF zz6`GHG1Zl=FFo&#`%QUW!fh!15Y|6HnKeTiK}C%*ma3{G;L?=Dxc@bnM=I1V8ac1% zWV3+>-pHO90b$+v?6@rdi`M^gp0R9xC_8U%CI_s#;K`#i!vKb}%nV$P!Zn-KIT;Fb zQI{6-RBqmEKGz75S%+03pN$xDOgF``-5C+l93M84Rxh!& z&8yIQ#mBT#Yc_&4Ac7IBBhihZ8QMN9@)Q&ptv~@Y4nm<#({%8?r_)S>>|KvF!Qsyo zQtbXopkHCTZ9b0&9l&qEOMax3m2D`(#!CpG9TW;iV zKZCgq3>9cnlitepfhx6reK&L|L~XFT)CQ|dML=8v5T?x-t{bD?Bku)@#>62L4+ihX zrXp1eGJi7kU>aBbG(KLSDph!cwlM0YHks>GI?|SRwR3|y;J0EFda|fMmb^fsQ?{tb5-GTKJY)F-5t#c=)x1!YnyZ)el18}yjwT! zFG42tu<1<*@(H68PZYibo~m^Ja%K8h|3{-AkhLQ$ph1~wLKX-KDlM3g&WtJz6THHk zpXGzr6;&GG;Q<;>&i?Q`Xa>;oL0DB9;KG4=u$?zXr2!g?uS&zWrH$~}uu21rnWI!1 zUdHI%0$9*Sj^U4!=6EHP5;>xAGs=-TN*W=6OM9RI(EY?H0Dj?OQ2?-P(ht*fR~Gjj z2Fy`ne~XT1Ql0a^>H?VmgAr$@kVZi{7@%VNGUK&mfKE!-di_8#n1aiXQ3r~~i`F02 z2Pj!E=*sm0jwSz~xC~AOE`xZZOab#_B&t7BRR27I@wa07@we!N$KP9kRzTvYJdpD> zTfj;_v4nkdp4V3Ewbwkt;CEv&2$=M}FC06TN%!OaVK==C?>%QC4K@)*$A93ax8uc= zTwdoR7r-P60Xyy<=tZ=<^AMkz9?8OthI9lE64nT)FKuDM;ch(r=Uxo}QcX!t;^Ge> zHJ9Flj0BK8%r{aqXPR9Xo$I@{JGx5D(KNy(*2;^CyI_(l_;;4}#=XWN3t`N-R%L466`)$k`Td8ckD@;CPBnW9T#7sGY!5s0pH|dW?*}qjEKHEkPfybL@HWT z{xWQ|w^P_+@#gBI?qV3N!YsL%&=tl&X4@jXXB0jSXiD;s^t9Bqu%R5+_RsT@n@iWVT2 zJ*NW^xpY6%_5<$#vus}Tt{-$hdaN6NyaOWeLeC-QhLb8R&?)5f559^5Y%g9BZ$uee z=B7Ilr<86$*x7csq_dHDK_BpquekdIPi?2^&?f0!Cw*>^z+DGc;)(q2UNP%*4I5F& zBtsK|HL-jx{Bwujs}r>N0*7`HP8_Xq3x+QqC4 zZ?ugq$OP#rcq57?7uCS0yyh0p?|PED#PtpZ8(5!n2mc75`5HEb?Y8SSU4|>*Gc_-U z1$Fg6QE#4)5N?xhG%I~Bu_l`0llHPoE!4PFnT= zL}~CJg2R~V5B{${X;$W?Fvk2<9~T&y0R7iLCic;L$bD@^beAlDAZuIy47PUZS>l$eq4 z@sJvF9&jpo(DEV})O;IroiuqOFi_#G7EvGr-pFBi!@>@>IhY?Nc?|%yX_XngrS%_} zBYJPJjuWM1(Rfv@+MaLF{`cZ_fu>n}wJLmF1aT4@=e=sg--L@Nr|TT)UPMCkhZ9P@ zM1D*#MX4=JZH6W{D$~h3?qmeu{b}M79})J)E>uqg!=O9mI{k~@XHcS*{((yW3n+SWmjFUvH-F^omfY}Wok(A>o$DfmmNZEge zAeB_HG?%7+08W9*^OSdTdnlH`Q^w!~LpR}}xQG;4)#E$a{507T6VJO)=Yf1Y+Tzbe z_h1#IvsNbJZ411nD`I~I)j9apObz!o)T3<`s3%M&%%>YX3k9qlfg!0sbQ8B z*~vN~J)-Z@ebb}-0RcLOZ{IPaBhG<94Id_y@KzunK*TE$sMvz9V;}@pv1a76_7-s{ z?qNx5IiyaITUM7q6la>b}C=y?E$^%K90?nDWmI z>hCK`X9xq#uVy;ltw=_@WUfa{5w9+X>9PbxHSnQ8*z*zQUIIDQm0iM1GwDAU)z_j! zCrVkAU>#IIP6a2)NwUDc3R59I1K$9Ca58%&BVz&&!Er(Eda?_CdONv9tq-EkMuPAF z%kc|%brDk^OF@$OPe5o%x$q>Qlp_>du0B$Z@ep#pd~cdSXdKkYiNgEsqzj1FxeOl? zn2);;C8sp?({rW9Al+RyAK6KS14t2_N9YIHRCDlOrMigeNFoxGzB|iEi$Gp2VE*CK z{1O2f#T|1aLy{f5?;K?PGeHWo^;FVc7nFh!B0XqaGm_*Hl*IfmOcNQ0g#&1;P%aoM zY0ht@m87DTY(M~f_7*(Dp5X~TYk_4ty9IX`01ZLykhrTe!4wR-CR)(;3-5m{L-o_P zUwTMBwATz;rS7P|6s3jm&YL?~k)?mBeHpUmcUVd}cSP3*lzyaG$@(B9;J=#;i3weB zTEdX)d9#?wthuXYd!_sGt#OE2R_H zpV&0_-={ni;jRl2qqAPAeZK-d`d+NT*F_1-@aC_fvnaO~$Nxlh8SY_N{ZZ!AD1FIW z*os(%Z38=nn7gu6Bh{%;a#dJNnrS8K;sa^bi5_*f(X1f~1{O5jVwFwH30}mcpTV`W z8DG!5?l8hHsTfD0#z# zVlF7-o)#c$5^=HVvMrnEphVC4>jM%)hGJK$`Uy+?&(Rj8_xfvdEdl<5xKb@EBLF04 zFo^|{#_ucCSeUdoONaW!9eS$7hh*ZF^IURtcA_pK4+b~0Pm3A9kcSn_r7S zOe~!rf;q3Wu5+a>h<;kn0_aD^5x^M13FxL>!&%R?o$dqZ2>IaUt%ozr`_}AxOL!^Pi zlY;R8axoeUeXCh;LeiK(v*?GbL3ICF)gDBJnuV%8{kXk=HQ_`&QbYYANUbM6)n+yd zk-0^X86+~MDM34wj04WY0E_$EorhPPHq5W?4zk+^qb=fogmryNy#P>Rw4ez?^-;DJ zrxN^+(>0TKBMjmb;>GjNJxD4=KsBv_&P^a7?nMR=b-b{>dHah7+yH#-oCmg?x`SET z26%Db13S*xjZl${xLooR-Z0?N0ZZW(^XH;csQZ!8R_P$IjE0w@`6e=p>k-Hu(d!X- zj^E$)?Ch$D{1<)d-v}6!b+8pD5zwbDLM?I?VK_Wvl6S(tNwCu`bh4yH?8AtcsY~Z? z(Z7CN3SS};zW=Y2W(YziHh}Ge-mv4977z=0swA_Gk0Cx-2vRy(HqN22kyrKz4TJNoJnNkc;#iWv@4v0UX^?x5>R%A z3?h#aG12`?S>H$XfvC#6D5&p--9- zMUk>X5=vD)Q`yu~tr1qy7Tdf(4x6{U*+%9gkxOml_al+5Hu7KOgMAY~Kx(2TlG-8J zhGv6nOgyYF0grqIMWh2@k*N`Cj?ccN)&fjNQUgQ7dWj6yKoIT5z%X9ehVGOBBKmZz z_~VKFUY4BbBTS2w->4Das^S1}%*XCj1*2W2ghoA+j0RmNc{}ag76>HC5`ym>5_*1@BJD8N%F8k4ACU8b-Gf6 z{>{@R4fq?U1K97sXSz~Z|1C)B%JQs#nLT*j?8uNRQWV+F%K?8!rxqma?^dsoDleSL>!uQ*e6t35oaQ&T^iX-!jL|}gTSAr2{ z57>|);{O`re+dF%*Dyr<|A?jDUzEfUIdt+_BrPvWVu-ehe`8XmQltJ6CLvp-E{4cg zUqzA<#CgD_)UXuT8cq03B%wW;@O&g;O_=bYI~hqh3+*v=Jm~&5l5i>;if|cTBfbM* z6_bYjiE(xSY)<5+V*N3&KedSx%Bu%bs8RZp4 zeVS1li=rq@{p*UNu4B~YMNtCl%|$gLQ^O5S@pOkTn@w9BI zpwLhf+l<(7ogsmGjBos_Dtu@zu?LQeu|}>`*R9B93Fa-IA0lEDY^C0$fA#lfR~;0> z!km1uMTElScA|$tL<5NAh8gZ1$c@_EWg%`-mWUEJ1`6M*5!`NQ<~8}uUPcH(E=Vj# zPUos||IvORC;4VVPI4#4{GG^Mf}E7K$T3i;Rpf+lv!=z3y0avf>Hp{K{zUE(;^onmLta`3d7B)?x5tG2|3A~81dJXBPV4o zatsu{hxtm8!^`x@1&QUzF^M+*|2zuhB;QQPN$$ju{|IuI^s1D#$T3hj2Tw%~B%B_( zAh8@dCgF;AevKBc83Te>Kj@8-I_A2;N5iiG$NjMSb@Bd%G zP4dlzo8-prns*>~3E`xy#f^c&C>T!(2Z1s@;ey0+j`s;|CHdI242Fr+vwt*y1;pBPVrOq_F@k%oP9hKPUBCJSBZlB2fHFjfrfD%S}8|&O!`6 z;G)~^gzIc=umwZZbReR3R>)k^r-9d+x)P$PAwJ50pp5KM$fp%RIs`=rRe8-IU;%Hu zH3V<<`c?!^eU9KE#pa7njr)M+n@iM9G`1EHCm+|uO-4oMC9Z(MzgdZIO}tTv9`X7_}7K9)0I zbtKm&hH*0q0q(W{QImH!JA`{}xG<1zV@Tf~rjI9Yp$}V?^LM<}3tumL_ar7!m|cG$@nh*!lp!Um!w)!i{+ITI-D?Kb^LsO;g8kMgFW1`AO_ADp~+V zm&097wVDz**i^B&e&+HK9 zsb?p314^6WIw3=N3_~~)$07WgFbtnM!vNT%;7H+5uSFy9)&|QH4PxLxoRwdTkP#R~ zN~Kh!F$a0Rq`U+}7E_mm2>puvAL)Or6PA&%7~s~yS|*P-oQ`&?S}Ebjeo31W1STam zt9Q2OP%=@Rg`KVHIiSA9x(tHgWC^l{ZZQ`}%xAxgbW-nQ2Bkn(@9&M>Xc#xfJ9qxA zw0MMfWbEkvG3LGMBggPPtr4&L$|>jvm~A)HRl#_sA^Mu4=$lOO?sY}cAF3}h@~@cgOm*$Z;U_Zk(5|<>Za3sO#pw;y@MP$;*vpF z8=DzxJ^vA2s$tcI5N?&Q@%+~=I1^Fj1O_M?t?X70K}pzb^=Q$z*`nC$Q4?2bKUs%L zx!FrFY@u@RY*jKT7=xW0Y6v-?xWj=uIa}{J7IeYkDsUhZTBEFkji>oK3QDobb#fvg zH31>lInM-wU4B4PM|S8~>c~DOdEuX|LTT#-L73B_v#r5~*(zYCO+o%zNjDdRYctJI zDC1<}gnLw)men|0F`%R~1W`!s!d$HYzTODQ9zMETN^lUc1yZy&Qk0Rf1B69u<(`~= z;S?zmI#$3@I&h}vQJxt{u?5o?wN4z%{2Xo!RHJ)wnt8qQ|@AIeY;aaqL2AB;Y}~JNG9>v041Z7hW{S=65{Wy*9Two(rx@ z<;n&p40!hyc4@n04;3J^LSB>sv>K;FtNyrX9gU!6sOl}Rt%%mq&GDnhLrW_(XkpI> ze)5gdQhZ;!8q?lZOyOt_q8Er3N#qL)gE-0BXtJsbO9(dW0yDXQUzZ{)&gax{0Jy>z z@M_T=9xedrB)$7PTpOVVk)zGcS^~SmC?QQPEAd%dqJiBcb)b)U-OT-$G&=Y9%~08& z*rJQ1C@TXUwdev{v~sOe|7h^M0EEdkF9tP0qQD0z%Bt6iqZCjB{ApXUSKwi|P`L~p z->bd{xOx1iKgny5bT@H?r0 zz%!E`3XsVqxro9)9w|g@F5QbKfFh!ap9_Q2E-aAJB#DnB|``p+@o-F zwn|)Ojf`wC?ry`IX<(9l;%r;S)vi#CHzH<{j@u9MBv2L48fF`vtu1&)`c38&DWpJE z8wolR*Sm$;i#oEjZA}8i$vh_ov>T**Taqz1-6L4>iDc+V(BXjv!(nHct1nAfDr|2N zYDKu<`e6%stEespGGkTk_I47Nrk2eyXWP4^?w3)`G~GW%M@pqXl;ZS$Hp&F+am!~U zI3IU#MuH9aHl+lKOY|7R+h9RW9ws2A)@SiY!_9az9v%W2XS9*a*|Jh{urAHPXYw#B z!wcw5Zr8A=6f%k9Y-y0rNnFDbl_TJSI#J~!tT$6v1Zbx(5uij0FBr!qgg(OPA9!V>oljYuvN}O~9o{@1NUP%$YfBB7= zj)%IWZI#5Iio4_{mG)&ktP|*oNIM0@X+viORu-K$cvfF%W(YUH^hV(2s#KD3YznZx z!dK}BDT6&KggQ~8w3VT-&a6Rlbg;+}vBQA1MJAcIM}kFydz!ALe_7%4GuMBGz!V8@ zNt*rxtKDS@=ZTKvb&Dzl_tPmS&BahMOH~ODsISAeuswgE_XA<60y_!5F(P^m{MX~- zC;&HLuBM>U!TycUK4tOlWFFR-CLXkm4xZ!(jLiJbhP^Ac+1!@J1V?Ka87PZ-WgI+<;)=7XVQBl0c!8WejiDQlRuzO932VT2Uw< zE-eMjTY;{UvAo&pR4PN5?LMIfKN^fA?nbe3{0Yg`>SdjL#Lgp)(k3G}8*6gs}klFHYCUlO=29&fQ#l z2Gl|BX34E9)zaLT+uTY#(=cKlJ=h7+LiC(WoJhhhj_R%7x^@Uw?I6t(=?$#M@ea=_ zbkq{OV^I%;5!D=xf)N2x>;~yhA^wtz#9tC2eyilSowc-Le!Z;@q8aefS%BXx0sus2 zug#8+zX$RjU1Mp_eo&)K5vg?+!{(yB_&qUBL5G6p;%Ufm7eNM>Cw`kDQa^PUc|yKQ zX21j<*M+YI$`3z1C^Lyb6}1!H+bO0xd^_@f;cys&VR{`B7!L;WH2JSK$-(4(yqmujQohbKDysw@k^-mZKuzXC&oXnH}#t1Ti z6x6s;2qOa{)f8gDix01JF`19Rgy+3>om+b`-i`h^hYwwvR(tVq0DmLa3pB z6vZ_L#SKJp)a}UoUqDR;#nH@Nr&<(oF^BymG4U_PZ^VD!wD_&m-OOai6lvm^-kj3j zoFXUK&XNG~krm8W*}5@_e({A49JHP)kh?_xgFJv)`CKS>QxF7Q*;vW`DKy=A_WJMO zzEQdV_EYF<8Lm^D$cisx{WiKrwUT20box8Mnu`SiR7`B`zMOF<1y=%ph~9Uz8GJps zo_=*@UwCH{Tor1Viun&6hdpmz)3dVYQkD|#X`9GhOeKira~CfO-sHM1HcYQ{VgbTp zI=dIQJN=jgQ^)9s5N*~qkOd^KllfD^ly%6_RP_!7!q9F6aDtMu0craYnuCxTN8@ry ziSUg`UgC8-rvm;Ykkxk$41|H?EqX_oI8Hb%Fw9T5$w8Llso^1;k%8f8fIBnNZl>g; zDWlNQ9DKZ+-ojZz}T61a4ZC06L5_5U5CL$dFZ>|cvyX9dYztU{r$*+SPp!aBZyXS9yW zg*Kp2SGIwlJ}*DNu_S0MZWG|wuO93A#VHtOXfNcWbLZ*kCeDzUQ+9M;h5)y;WeDiZ z4h|)v2=+AB$**SmPneG30V!(J83Kp<{~Lb`-<>W!?|+}^f6H`M z8I~7H;R=^;F#T4hQ$-5X8KOtG$Mlae9Y*>{Izv37^+~2TF`W}oSe_v|U0=%dH!=yr zi|VIQj-Z>E+{Xs>pv?C3k?TYFPh;LT{J$Une}MnL!hZ*3F!wo7J_Y=y?hf?e0JW1} z5LpGXyhJrY2f66b7+d40k3VpHu2Y1#1fU&v70}Ijd>O&H^RgOd80A*kj_zM0pl%D$ zMW97OctL%K?37iPej-c5s*a11)i~WKZBP!Y+=vbm?1vZWBf(ZLCbtRMAG%U-V=%Ig z*Ms=5!SFKyxJF9kp}cV=1-ubQ@uzPXgXXPX--7Ksy*e?8z7$%JFj^irs+k2P5XbgA zmy9`+_EPIBoC)|Pf|OL3nken%{3S%Hclk<8?6@vEH|ug@jF*eGWqi|?@l9KX@2WpU z7zE?&pp%+=#A$f~w|ToC#uv|KNX5l}tSfnBHHz9AKX3vyqHd)nu~1qXNc$p?Ew; zqAmXD9|DM#+krF2SB)w>d_&+PXK5+syo|yEy<^&+UZ0Yqn&`%gLprzGY zXEC~2XM&XTiCE^C(EFkgf>Q}z=UzlL#eFA3T{GDs@SUwnBR?<@vet-!&@9Tv-P>8*!zxbfRj^vLkKgbB z;~H5YauYBwu}$!TR61u84HoL;3lvJdC)Z8(qYw?P%##~k~d2?|V0o3oKFO8~Q; z9i<`?Zi@jF7p|hjK<$QStp6-%r$#-XQ1vhsa$b06u)$i)E+g!Mm*trYe?=zaued0? zxTG{;E-CeIMGiR>%+pX+55JdC@xK@$8F#5pG~NYeTZ4b zUZg}bXfo-z0NeMuiM?*y9{)!{%gHf{~<6Pxo!8l?YsPB05xp+ zv``Jg0aQZ~8U1d@4mYvgZQJ6ucl!$oRay=_ET^Dr;m2ooJS`|mZ%es}PX7!r!^`dj z15fl6_wXiKcrqLL+_{0z1MBhhcd!OQ>!o!_5%2>y3h?U%__YN49)e{qZ`l$mC7UK z@CpIi%ID4&J`dpboMZm~0)ld`IpptYE0~cX599J3^w$!pV6jxd{b>JMRzTFW0Di^N_1sD#4B4KSR}Cdm0foyKPv0LCV+~37U1;ExwAn4%xBS?Q6Pd)r2LEs8R{x? z9;g?1b$sreN2nc0N4t_)&QJF8?~?m5%zgk&`o^~Fw$rSlpE$QR{B1V@00lJG+Az6~ z5LF<8h&&ew1v64jfP8{+d%t*MKx!fWoU^^J-opjrU%3TPF`Ms_lUdz?{R}S z=YCjth0dXWgV@iJ{rL5pZ{A@$L2lB!42_APH2gAA8a5Wx;lfv>FM#5FgQD0IVcuC> ze4F}Y@Ks9?vUu-BtlS^@8TVem2;qk;xP-?sFCNvja+q6euq49nnD^&kGZ>l*V(>@2 z;z4fgt8m`5R~wSRdbOd?JMOUi8*s2&)9=@K(+>#Th{u2@fDaUnJ<@=(T%*&3%at4aerL6eHNT&E&BdI z`S~9;GO4}?5zcN@1DrjaGm`1P9r&wQZ)Ohe(Zsy>df>|WqH3_QIFzzj1i6Nm(FJ`Y!DL)eLdh+0h8^0q|Z;QB-SP z5JIC)*E&*`f(TY@+Qjg#9a*qPK{nXi&rn+BU!*C zy9fo!IS`P+;Jv%=nOW7(;ed4VCCRx z#b6*9ZhO|bxLe}t+y5W--Uq&}tGe@*V}&R|a0KJFYR7F2F<|O24G^dqyCA2&)Co2? zc`@T=k|~AYl0FKCiGvy9q8r`Y==%8DhT5s=nAQcun2sSTbrJ<^BD-oN7?lbTt$3qp z1*1vt>1e1*Rbo1Rc)q{2_db8FuKWl3=JVd?^X|t!I%oe~d+oK?UVH7e*Jj9;hCF*4 zN)7}X$$Q6qdltw_qY*!E$=Mn{ka?eoZ@Y<)+hBg~>&BPzbz`#6z@8}Yx{(*wMG|q6 zR|;ur`b}h9yMCQBsb1Lh9ugZSCb0JE5RT9IXN1;N31qenh(Y|P$_jom#ZHpYAi8~Z@Vy;~bLLUX(5o`c1u(c0!=fiNlb zZEl?T=2i06I_a~V`PNkui8*Pco~OfY&iUITniZ#oTim|D?rhcF!zW`NRIu*CKFobWPwpu_nI0Z{o3X&a z^x%!2Kxjse?~S(Ld!zrfeDCtu2i+eyM|HRLq#qle2iD&~;6lFf3zl?@MlIwU92v9` zkr5CqxwG*r5Okh(e8&1c!w%fThB6#0FyQJosxbyE&Qz1QV7Ff|lc&tzvyM!TBa2vW zCkwi+TIr+?bHfq*z%THUtmU7w=7d@7-}99=*^NvlFBf{|Nm#;oZgd%PHdvXdr)4HVPu;`GgN7$2 z;Hlb@#F+a#^PEcC&kOBe))ggWZ}DPFMybSX?9N1WZB?XV68EzI4Q+51IG|OgJ6gbm z2{oP1?$Y9As&U{0n$M=wf&3o;G>AJv1P$w%O(sikGXsFzVM_IZn|VH|>OQ}N2OG3- z7OP!zklm>>#@GQ*RNJly$(ELM_h{|z;o8=r+RjsjJ9UgaWQcxB;w2k_L+(zU^u{Mn ztWQ#qe&Mb&C-OQw@q)*Ekdrk|OX{z$~ z|FL!8Z2w(Lmgt~+XYi4|C&1`}(V9u(+FzoB_akU=NO*BG2oO}?{ULsYn+ z-IU}hOVhJ2)_BCrlfsr&}4GUv#p5o58=#fni z-{hkav5B5$9)SGNe&Fe4B1WZLWFC^lQyW8iz~gH&k%CfAKTv+S`*&o&@s=X{%Je%n z9+v~5#+{9$*{jcsK~l3VNu0lH+o4~M%b8|At1IroK6XsXFinHceDhja&J776y%sS2 zES5s4WX4QBALhcRZR}`n2N_6O8tWWn(K~pY@wWahz!(9MIvuLT&V-DoH8SPZ;xXzU zPcN(AIvzcCt%+au*TjIyEcqnK?Xb725d#+1#KbDm~*57T5t&_3x4$@2RE>o;ncMBbOo;b>rF3a*{5cv^6 zW5@lgn(ErO5YCfV1n1c%IJ=5)PJ7$yX}j+f_yU@8wXld}=DsL4R7*car_1=H!^FwA zXge*8uN(99_@uCsS2}94fh15Vd8NTTcOv?k%hF<>#_Z*^e|I32+{XmEd#3TG`!s5H4-uW5;JAK$(_bQba8_D zZv!89TqZtPZ_Ro3;gJ&9heOR&3)K7$)9GMak9hXEdyRu^0Zy@yQ_|&m7Q&bx^oU3$ z2{4u7aUIf6j(adZQ#`^+?A;g#h-i4W;;=lP#&#G364kTla)@PO_JfYU!nBb;+(qmr zBpLHb_^TwAIdGp_Y!#RL?{N??;a`ofI69!=V?GqVyO2rA5YjP$A08dIT<~~F@!>**)z%2JKpq`)32P4grR zDwCqqUc zy(P~;-A-n1lg&gWt+q_GWPy|kWXKPEw`=+H*oGx{nOu|$*lyA!D`3PS2}R={d4}@` zG=vG%3vgi)9Aue1**q`(B$avrHbZGnK$GD*%pnM910$s&LdbGTf1uR0rNOB0qy?Q& z&`4=me^_s8)m49+y-zPiYOon@sdV2bM@pkE(WsQ%^_NMAUIQfvI)zS&NSBn^KEl2D+TRv-fwhr`nmL`}W)GHqbjqWbSv33Ws@`^hFx)J>dq&d8glQ z!nj)(U(ygPNSo|CFSqv<$cApG+|1s2hcb~!S6TQfd*5O2>+JnLdj}YnVjIAeK5cu` zLN z+#>59S6U6h`SPjqF+TK*Di83q;JL!Nzgd`Aaqrmx{J>MxEJORjUh+Kw-Cxi)7JJW= z9Ak-3KCXguyU`_AFQ%IfDf_9t6=?D%K5>RZIi!2WeTk;tz{c&ebdPTeQR$d zoS%3788&@;Hj>YeAd6|`Y0nGyhBYB8?00OjIRL)obfY>#B?%R{XLPuLBgY+j#hIDj z(Gc+7Y440a-kHzPmv!Y>(%zL6pLW8J@v*QI{AGr&9XdefIwWg^00?{6>Ol@^8={#T z1P4&3OspcM;z-HHA@|bt@DO~Ek(CctdvO~Gf57gvCF}$eo>{LC%q6oX6NL8Ug43y z`!)@f#2i(HM^f(TUtygx*WW)MLUb`FWYXX7CQQ=2FofvD7rC~_2UfbE?X?5v(y$k& zVLAfl^)^NM!R?pX+HspZb?6MP+R$BpUi8mW(R9ux98A@FKTMfU%T(`ug}sjtZlLt+ zEUEOt^7QGfF-c;|U`vB4!|8)}4oMjd_9T7P$_ETk-p8d3W^q0dE?95WUf(SSA$Hj= z6Oe3sOe$u9sg1E2`T_PqP&@Tmg^JSlwCpdEa&9l|6ceJ2ulkEfYJ%bPnQvaBMFbmO z4K}mjhnZCNWss1n^%m&w7tVjqv9hxdu&%wdeE>EA9Rk}=5sxA<8vA$p`0}iTpL`d^ z15bVeX7g&(8V*Q~**p-}gv8qBF<}?eAGfjlOg2DNa>*Jt5xr#adGJ&Db|)n zcu~Dd_@E-=%?IPH1M%KHqAX{WsDkL-TUIFI(Ot@We|x<9c>KZc_@>A0r6c~R!lOq% z(COadf8FUBCfht6Z1dPoyDF$vcaT!%83$_{>eGPX$JfE+UKL$BZmgz1F7?NokFQ<7 zEULc_gjzWE565Eu32wDD>bs7pk|0lC*M~^uLV^p3sx^Q@%-|B83l1B4DRgb= zXwV+Vz{F`a4}N1%mKR;Gw-7Z|*gMtW~9N9Vs1fMITsOszh~TpcWySwwI_{UCH9j zhcmJ6Fc?L;Kj1NXz@BcCh)oRapdFv(tL@=vA;jlyf1$@|o z_uPmRN)$_gr>WWGtH9Zu$>DBR^;XJ8srgcdRRq6$DQDDLz)9VX@FBXq?rEj7*Vmo3 zSEy!`%+7YurlZ1sa-RNFz%Mb0Tkog$r$h26BhUM}<|81w7{4m4F3vk&1FSAop}P}K zl)P)%7w!9{)`rVm->Euo$ZLFrOw5h7Gu0t;)V_;vPquS?jjPatM-@%WSs2D>ji|ac zgyG*uJ()Dk7*2xsL8m7l^{erxEDM&P37Xw&r;uDb~EJw4G)4s?6tMrsV+1 z`QUI%C&QPO&#a-FbUyq#H37D;bvAnFm@7m=Dj~qydxQ15 zjx1OkClwAQiMPh)S|RS)Mz3U_y#pj+ft+GdNPxYm`=jb|`_(C50oDVOHe%IA0QdOi7zO^YA8yani77_rQ zUuiV8;YULX!=TEj$WVq%tVM)Nbq*NU;iRatQibxL_(@%jpa$kT!60>uEcJ;YX(LGn z84k!DxN~D?{61yJH{oM770;bPcx}G5+hT2MKkpX=%7Z#lmOg1=ZwvL=Qp56;&xjw} zRXzARnH4){yL#5y8QY6Zm#X)LOUxv7=_4z|0j)jv$oE4^ZjQdnot{GOT$*+cB!hM9^48h-terAZY z?l2zMHpArnCnCc6??lhT4VsGRQAT^)kiMxEE^Lz!ZLwR@w>#3nf%oTnwi9nf}gX?pP2%yUS>1lqVp-`i|Gar z5I=l<+@I3y|I5~s%+K((bJX{zs?Q(I)c2S5UDa^0_#R&P{y*Gz+`CsV>|3tCFY0p& zBXh{N%!&2|Nsat*?q_r%-h^?(EGV83Ph3qZlqLIMe%gOTK$%iFfq&v%c(ff^@+81wtpWBc=1on5@#{ z)8a`Ir%@5Ze$tjn0{D+uK$F;0qRn!dHapX2XZW}NuCAqAic|?7dAYpm&=oy|(KTMS z1#QBUFFW})BXD8sKM`u_?JcUdyBJ4t<=}trFGv+|ksh&-mRTEsd?$!S9QFfU0)JY#$Y?=Fr~ov3pu;sFwMhMF7P zXmz{&6!RzJEQMKSKvAxWpAi5oI~>IWOHem*3CUjK^dp`QQ+f}$Po8#&h%AdzHp;QF z_9>S=P5E;79R?&ek{x#53q96-5)}0bALG;d)&Vm}CY8v^4PI>K<9$d7*3uX=+PU&m z7F9gwoEoc?8k!q`T8VVX%hQ7qMM}&ZrD3lz#illIIs95g*9O>D?AJU1~vmg?7{{BpUupz$1xO~h;HP~c{&g+7v?jG zhJxMJcsb5Etjwk)VPo3cG+r2QF;o166`&P*GxBExLt#yb{&k^#7fjofXm_L|xTHMB z(d}hQ9bxI}9SYh)kHW&d;3h(U1KT-7w6$gN&}d($0Zux7Ix#^4oH17Niz|NjAGM_S z{P42miC0>o*`#*8`(8vo7$-Kz!}a-t@Nna#I;?>)ml}hvX6+u$5B;TQqWwRv5K-p> z!JvQhGkZ$Uq$fBoUpmlKoj4l{&CI#^8pP%F?R~T9`AZz&$qu^StK*bk;D6hbLp)ge zYuMUG$AS};mSF2tZ8v-GcBqn#4sAD*qgI{}f$Dw2TfI-!wsd%#GmfBkQFv6pfv4?^ z%#Lg*uj3>8dcc2q^;09!r7RTqRPQNb-Xk_TIIT4NqROXv`W2Oj)@G6T{*`B*epZWf zPPSSSm`BNIoK-LEuH?-(V6!XTS%eJk9+E}%l|040!UZ;)XZ-ConeBDL)^3msvMrWl zAut?B$j&!wzSz;A;I?fXNANxfYeJ)S!hHFOX+`p5O&L|zBh0`$%Y#SMS^T2vPx7>& zqany0y3?GU-0mXdUPZFPTw7MgXs=^1>^Z05Cl&4-*}prKcn4wp1Jfp7NuDyQw(6wQ z)-S5OgeO7nMow=ZNKMC8qRS~5vz&^MI2P^Gk|>1Rd}s=26(umWB6hd+Wq^96tgpHit4|r^v>3&Qr@PIo^~_h#@Gb&pQFHbX1YTLE|b>a z6y+6%)k(j>UjGGB`YBmQpw}_#Zxj2X_;%^01?^eP^kZSr4+W2uu-vQr}Sa+ajC=jdd2?OCYW$PC#0SZlP z7gdX0WKH`!(n>7j?xa!!mTY;0R{-PB1&`COu;dMc-W)g-#+BROE-?rTnX=rr zCvvj3d7v@-R%e*9b#7$C9x*m>&3P+*tY1wmN6Un zU$-ET*Zoh4Je&0L$P?3D9C?bZm5$doAIl-{0f#)r6_NKq6Y?y#A@697yXYVJ6+GXT z4lfwBzu^uJr8{jb9Yq`5Ye(P-GXrmUT%3$=}C@<=J?Eo@_oABJ6n z2?kDndWWg*po*w|(nb_a)0wh29Lr_%{62#Q(;S-z!qmWUVH%heX(6;Y_vlNZFgFfm zJ>;#so?#$+iQJufqZkP~MvF<8)jCgluXgacq3qZOj1*x*#l8R&HxpLiS38wx5q>qQNkA?#h3bIh zcY`vRik}E(lHJ4^Nf|SUH;>stEG&W!{-{P3s^!{OzBbLVi+JnsYtBaX7Kr*~0VP@} z5a zh$=6$M0wo*1cc`i@5pfso1Sawqw(ZP+RO~*aWG!qJwa{?Q92u(tFfInGh^>t|Gqul zOP;FnG)fa$bqnb=%{gD2-d@Alx?zS0nIQQu8I>OAEFSuX?U+eH{}B8Gbec5DVh_5W z4I>Ofnq4@;W|~Hr{7*I3Yc7Qd3nPq_g%LKV{z?9uku;SI@M&i}u(&fBhOljf8M|cg z@F`Ym5~5)Os-2^fobuOCyHk&k#%# zV!kLabJpQ0WAL3wkB=$d4M3n9wE-BA@iNPvN5)4O;T{=o0FJ^RGyuo^08CGaQ>C~Y-O0w&Y50|HNBh9 zWOcG|w4s43%x9+P{o1uc(_DVEdESRvuh9|^OOfDs1EV^q;iO>W9M=xII;!7d=sE}V zf%bk4Bzbf>l{S(bRwMJe*yG9PU3+$W?a#N@UhX?1f8AJxl5^+#I^9~; z%(H)x`TM_isJ)jpf4_$jZ&&?b@u8Qb;n}#Q*4Q-%eM-nBDg>v%S{gSFYn(fMe9to>2>X%!w@+wOeRkOi(dK z-7KhFueSVtX0DeneI3CIC)XzZe(>MoM!*j~zkZW0zs&jdKUmUqe&r;mNft)8%wcZm z%Tua_xWnLZQmA@1m1f5sQ{!6$#VZ)J1a$0BvoJC(qh!X(v^HBqex6jXzb15{Upt9L znq*oS)MSx1{s&8W(?;YDhQY2Uy-GzHLIr0n=_yYpPNo%g3NA0xHi2}296q_5x=z{D zMG?JMJaw5{mgcGJ#&%&eJJ^s;U7j| zJ^to<9=UKh@X@B;|1eGWFk3mln#qOf;WiU>nn?1_rhNAp$|gO#p^{;n`UPclWpd&1 zR^rdBSh_RzhT5Ct!Y|Xd=HZba6Q8m8&~K?+nD*N~;yn(Yq8Wpyd3d?-l*xsT#=KlO z9Pb`mTrO-v?<=#Sf9Sz=tQBIu=J9S*Nog`$F#5Ugiix-k0sPQJY}3$iymc^ce~=?K z?k=)CMf?iFpocI$ER+0O_M^C{Nlh^c(K&7N_JaOATZh~7%!!5w594Gpt7xaBcHmbf zc4#`+_ORO}DyZCAY6mx}BuVx%M|E>&33v{LaCS5R_>L?5*6kbhY)uWa{14 zb%_3$-`Wb3m+z^7s6NZn)(|%1D5xU1`~lhIJuaFlwDC%)pJi=%_tXU?tKP=bH}0I` z|5-7<^53Y5#H1pzFHsoNpj=cHZGOOQuP-(&dt(>An`#@ol1b}|$+&;+y%5z_bVtbg)7%kQ{?-STzw<+O zXrAxwT?Qoy=i=Ks<=oO*+S6rj2CuhBDgpytXbxZ0OF;D4=5N1zREOl}`@6hN z^1>v4ns z%3MG2&-5JlxC-Fx>j%5>XC33x`h9q{{Ss6R= z__K^*PetjDi&co@LwAg^F@MWarb}uFuIHR}nwumFb|=PrG_l;Go2JZ6d1QSaxT5_| zfY0hPVlt|dz0c~6?erukXutt}oVM{S6pjIy0p6Jc9vr=5V9>Z3i0uw{H$N^4uO~ea zArv(Jo?BQ9`eibg;flH`0=%GbiIP0>i|s4WXIH$nGv3*edSCKwgW`g{p;$O9Hb19} ziq+YsZh`WFi3Yw|+_rdAw2Y$;)yN_oeZMM=HM%oP{ zZTwj~(&lBE7K-w44fQof)@#gwvbnMbKlBmlGdoTG%X|*1cSqV+x=x;Ke3nBEVued6 zz&WKa@3LZ|YEXMfnptBdnPk)L=71(Fa4VaN)Qm!T6tzN6#>1@tUTLB2ek{trM2r0; z^l^w=;$ud7v&!DH(pHBeLs7*N0JftOjut(Xj;0)x_U@r9jt8+bO$wZwzkLO)0&A1J zcR3x$z2o&J2bJG%ND#-WXfmP7!7 z;m$Sv@p4ZzodbN7fr8?pR&{U!WN20I|!Tr*r&1*#GU5 ztxPHopvqg{9_>?628KxTrDz&J89=2%217IXQw=j(3DJA6dsj1;eu26#*wVzQQXSQJ!yg=Wx*=_ekW+R_)9GnP z(}b-1=&^2wlqd(l{r$7~;|Ai-)*lb#`AdD^tPSN4^ZdMq6$`P!`}Ei3AyDNE5BVy3 zSgGG+b?r{eoNfE%ZZ?asiZ@%Rfh8BE!rB28zQ zEJ`OEM~L#<8q@L4!6x4i!cDyUqAq3rYu@ilrg*ja=n3;Gp+ykx-52pkfjtdw z7%qI3g{)Uav(+ZdMBd@Vq`BlZhZ7SH%oV7kJ(v@T98PFJ<#d5Rr~3KN^nyCi8?a0^ zTdol0jzS-+Z9dxghu4Z_9K0@OXD#L zG^U@~YqDMn#4MJ_vM8>J_Qb#s}Uj>nN7aOzQN@WPlcD z|D!6#jH5=02v(8rBhZT`wy(T*&o*n`fHHgM7&z4(FwYpebz-A7oSzit;=2dTFUH*i zt({_spfOy6jW9~hBSz+(?0rTQ6E=CAg3KYIwdRyH6agX-hCTs~B|7D&%@? z*ku^D4EU6AmgVMst(Pb+)?hn2UF5PsfTx!YdsfJUI?&SkVdtsB6_YB~lU+35_i=`k zml;kbozl>bv9SrrT@@=-l5=RBF35k1Fo!miwZIeCNN`+5BfBlB>Y+EPLU z6W?yNoQV64B;l~;d7^YI@|Io4`i9@>98SD=tsG9+d3B@byMl<3?zh>HlZ_PHVuHup zluQq>1YvLgfU4R$8|>{LkM^!5M8^0FBOi;Zn%S)=YoiQ9G|Hlf&-QP9Y)|R2{?g-n zN{=^Lx@YBUEiw50n{G_0a?>^-Q-Ko}tPDR#A19C?+W^Gg^^M&h{B&Tem z8&7UfS}*eO;2J7PyFO0RI)VESRnt51*wsL$6%`-a_`0kU7j10hKIGhv$PEwTT z>|==xd;CP8<^~+$CCEkyd+1jw4^7IZp_gZQvdLpR!@?JonI|4)dkjKLXOwKxdzZzu z9!0TDEn#T6X(k<7&T7d_5@nPRndGLKz=O4NbWAuu^4w(7Bp>DFy|~v+Bdk90hamdm zAE#2B#)~sl%k`ajK@JC&>I(^cnsJ=3v4RUD2}(BQ;j3tQ=EBGYZ$dm&FlErWI-r%l zb?YrC7nOshEBC+Mgm`GvimbNWag6L?z4?r?FMZ3fjs z(~p`{yLogK_uju!0Ob~6cIAqBw9qnkhb?<{U^$ig5@#=SQdz`Z8kA%Q_ z==(ffs3o7ZNonG0!?P^V8h(H_U?qO$nN9}W%;QvHM0+f0Dm*=s%VDKj4QtDX33vC*7)ja`>1r&0F5UG#=q*`m)luQbS8T)5 z1FDI6XXZC87b>135rZ?O2YygonwMykts zs`|tx1D|+BTo(XNQahv^<7b*Y)Y9CVL&Jt{^}#CU4>4p|wgc3RbRaY3Njd#7W+}?7cdetKL=OaAYm(*>P`O z4P~{{=BEB?H=nMz#pbFqj*smLSF2UKa-Tg{)vBHO@2*<4J^#I;Ry|McA$!mBYt^=V ze0#0hVc&*pPwta|XTo=NWiIX>y(4BEvSCpd5rvvFm71OHv`Zg*q5o#Hw-szw# z^d=Q*#;JMGw7jS)Dz;iNW35$ZK~}9gXU};N%@U0 zMlfP4#%J!+wpwUMZ?C0PTjHvN-v_A;v4`6S3HI2L90yga<9zxV?+sKKJz0G(u=pA8 zHH6%21ZeYPU1(TcSE11(XKK}Ryp&JtN&Q&5N$C?CeV&=VW~oKTb&>0tZ+3j-neWxA zW0pZxT84e=`Qv1Vx}xGkimKHI^yFkud`NHDG1@_6pHNA@Hto@?TuEQP+SNaJwI|YQ z^>(Rhja{s^Cb@>i_Kxw__F7#y3`p)MAX&?Z=*d#A$MCD0Fg!=itLvhyi(ptIK8IoZ zyfO?QPn)W@OEuMF*jF1c`~y^bEUi{=m#X$+7~b3)(93iulJGRV#i93rN3WzuN5JqY zrXrztsi8MMq>+t*<4eDC5loAh<}huaSBB}Ml;CJtZ(Q?dsO>s1FC<3Y7eH>>g`h1UKG_222?LAp!&^*YIC^jvArS1wxeq?=B37%FORMz z1LTlxpI3(L18J-EcBxi-Wcz9ZvVVYT_omhA?NZfV4B7Sjz(L)dYsdAKyt{Qm{OBsZ zpO(-Qe^k?YkTRK(Q?21w;)2W|GIvr$T+Is%nkj1*5?963owN{FH56(V;^ynCdl@q| zo4Vbc?gJ$Kxar#mIO)Y8L^D$tcqm%zuM-d43eY5lWZyH&?Gmqw>uQmgeywpP8u|2_ zh)Z7hT^<0!9KMBbAEj4Uid#}zfyu3Zuh4fWZlOxk!h=>bTMwDaMLT?MdDLz-4TFlf z-xiv-X!4Gv`w0#*o!-mCTAez*{u{4f+LqrSW`7v{#(iPw%7)sx_%=4vYfsmnJM#LD z6{_*|?PN!_Fslv6c_~rK(}ZaIdGl=jLo1QS<*XYkmsPd1wWs>NeGNO+SaR057xJN} z$T~R2gALE<(691s(ztzVHB$s( zxl8NpA2R1tJvVHWPt~j0_LWc7hYrzLsWs7p9PA%w?r?sA(QNHfwXRDn3pZGfb3ikC zNF8li#>vu7%`VGqz5gaYoUI8OJePfrzP2T`gH@mGHc-O7L)&;RIWw|e8Y~K&a|Dmk z2-lljNIq(T9K%%ey&Kq3^Je-|V%#_>nKx4{zWp~a97|zHe%6X0YyvfogUj!1Ijpxv zk@mvwrI1S{O-`8ZU6>NV6fre~_BDFw|8fAZqXDLL@py`<`D;^%#sieYjLl%FqYi8Q zJqwiN4;PKzK>FmvzUn-h22mF~UsoP2gL3*>MAJNc!J{Na(|lJNmM6{@Xu2eB4$x^} zB*P6f3r<;l+9HL4o(Fh<%OMH?5BzTj_^%uu0oeGW<3!Fg^l^N2M3prp@aR0=*I@h{ zjjFjYsB9%F%R>LX60*w?A&TA0BSP=*31)bMjhG z^+$Qv9eNAqp!ClJ8m9gLCl&4zYhM3A-|&50g@{f{PG?>xfPX00lwC&_S zn?`N3x&J6E+rCGhH)Y=KYyXU`Gut>z?TgkmT{!%Cfm*{Z5wj%>T-a%n zX4)B%vM2+jICfxfa>NUl=JPv4kl+8O7)VA%b&!O-yct+L`3gHnY1r%P}q;^sIL<*(=t&f`?th!|?)tf3iOS)m^+0 zx~Xff3}18qPvUFe72#`XY5Zlq`x(K zZ~5%$k6k0iX6qveN^GM;7Ys4IatdL&-&n$2P7R9oZ{~R~BWIK7fIVGq5!=J}>mN?P z9gz_Bvp?B}@m6m>0)k=Kc@mjTK55jk()a`EY(HG&K?9n|W5Ipl8aYtzj6a7z<42CO z*O`?^K873SH;5zhgsM?9#W2ZS^*NU$Bc(~zi=l$fhU1ACZwxz+FYSEz%=fx%#`ld;P^Wm99xV@yY)nFJixv#e>^C$9}hMdI?}Pj%$6NWv7H0b z`hz>2mz4@)^5gJgWi3;x-Yt-_0nqJ@A{dmtG?mjOZcsizcQD|R?MvK%gDIN@DyN`2 z-1z+1pDc{(bW#7}7M5+YS0#0q3;Js=vi2j_g>!OdPfo1Pk73#A^?9ctI`8P&doX}! zlK+Axjd0x6&4P2@*juMjykW71YrrHI-*7?;*BwGBJIo*++hRK+pp&sAvo&By?o)yI z%SZ*{FC!I*Uo;g>@-@;QvlWo2Wl*zJH<(fyrCWaxkO2*?5*%XFRLbTVwE_u`K}= z+}2$_tBkeVLgQGgrQH7oG?vcSwXhD5?*2{&V+x2}4rHRO?5h#rqB@g+vZ(A^x}R!a zf;~u<{LhVe{E68ODgVD=0lRF;{~7zu{Qpx~Z7I`tbvv#HqjH~)>oJ3*z_gqlw4wt1 z@wKI~sP7ludp0{jOAzQ}m@8mcd`^T$v&rPu5$@Z*U&+{zdNmgvQUB z%WMD8!uJ1VbNk0bgI)VUS-$s$qmd_rdJS zM>ZdDOYu}D3F!>%gl>nPa&KG2+FPX1d^_QhM(1SqLc73M(rHLrV@NB=-*+rP*d^!J zlkhXgTEooB6ni2}vB$#{%goAL%M^Qb;S}p`o4lea)`a-Z%aGccaSKxWqu_o}+&RcQEJs`(fu50{6)vL(Rl z)M-)+>OS;eW(nZuhZ`1j*TV6=(gZe`FoGV1HV^cVQ(NZ6Q3j0lox+aDds>_pu|h&0 zM1-Wblyi|foKP6fH(L6MOjexO1A$H&mC|yVy}>TBaXYNmkcUb#3%3svSR6zi5sl;* ziL!$@x{1#HXuqu&H#JnwHcm;^dtb=RXUA~9panGtVvSYG`YJs~7v@Gwu#=`t=^S0& z&GsZotnE{^;9cA3Thgt0e}qciX%>lYetuBJz<9y@eA@!JJ$_xhz`wVQ;6NlqRogmN z+c|pSFU&%dF^6U89sU>_rMl_c02#yMe`n*K=V(sB9T(m%_ejBwx4hxpT%}&!<^W7& zb({K9%k#rGmuIDQO%dkKRX8(aPAmDNJDwE0e3WViIZ0<#f>WnD{E8G~P{hWSsE66h zrjtisX7k2Ke7QO}g(x3YzOJ;7Q@GMDA&E3ZMaY&~ZAUQ3 z$d~Xe3q2fFKA;kI`V!g^SZbw%O^{t>xhIhs3%2(&H+hGwJ_gs9J$5od_Xg7;-p&b8-SfNC| z<7#HP6jg>8WyxoK#MK6slu1$Lkvw*sHzdNKU55dNNG`0s}B_ZP!|GlcIhhQBL>my6+V4&ghC;jazh z_ZGun9K!D|hCeri|7kJ&yL7VQ;fZ4SUxx7CFNQxA!t2HG&xG(V7Q-J7;b)5BzY)S8 zErxFo;h!#szcGY=su(UaD1-l_#qggB;fIRh&kEtSV)(aVKBgnF9Yc&I=NSVvGy91u zZ%sLq1#7d`?Ej+5jl~#k{zzr%86V{SUy9Yd!Kxwr8)-NIwI#0%;a^X~>9FEXo@51q zm^*i$XyUOj?D^r!yf>V?1%Gh`U#ldZw75zbu~MQR2kbZOX(wN>7xrfS$T0JmcHXcS zXChVjds`x&W94r_B22wES=5&;3j1?k9uhY?y}krI%D|*nmu&+xm5Sj%b^;1EJeo~l zdOXsKJ4~Q9^#^PH9+F4(>s68@aBS_{*P9Z9^MGiM(nV%64)04=2f!(W zMP{*(bqfm_j-K3mYi-%mHjIw0cDoLpDt+fft$km<^v6}Y<}*VJrE|>CO83V?%e%*z zdw{gY)1MK=hoK95i{%^sPSn*~rY-}YhIHP_?U7$(<@BBCm-dcc`y+}OP2YLpvOA7oJ> z2^lSVw*S>o7F%B&xSi>%-uqcnn4JIQ6fyZ##sYcY5?s-JJ}foz_fGs3H8>Mb$PfGL zYqcKRi4N-jg}3lzSNbq_Lm2MZtk(2+GZixtDf!-NBwtr=l?ZIkc7sdkvf0L{D9{So z&|HXaFfuv_TZx79e*cOE&jGTeJ?LFBEOG_VXjIv3QU|Ae(qj?-{}n*B^(&;o?L96| z1K)(*vI|h~F623b@vBQ*0fZ6(?Mm@{5Q?=t%Ka5U=65Xc*UC@WC-!o6e%F(80AT!x!4szIUv#hT>J_kbMl@d zS~@3V`02^nAN~rU(R%+h!aO_#$1~m)0%1dDbz))8mMPyG)nzswNp>S|%~{(xPvFBe zHd_*c2B;&A^jIkx&O#khU09Itsb5s>;psUa{ymnNTfuoVFqlEVQXUaQ;Tp0f&*XM7 zWNcv8h^4_s=W?dlEh>cn5H5vuU$PJ-%?df$7-2e*ZU*KH3*%31eUCMT3vkNaR&Z`Y z)&?s4+aEtn{)?@E3+=o|ps49tJ8ug?8ejTFRUO8(RGL2Yi!xuHM@iMApnsYhk~q6= zHJzl`*QwY_+TC+628t$1X#?vntYuH1p#}kx$!N0|np?_f?ik~muhbI~vIRcY{ zM_Rz^;d!wh)r65RlFwX^9&h}^kE=*2?pyVsyh5ZWFPU`G3vD`03!o5a_&$(TqYM?3 zIfaF$rQUY5vcZ&fbBLe!Sa7!szQYGs_Ur{NVp74hYBLW7tg@1MS!ufh@B{UY1kRsD zqlI&pXulNLUivxK*LWe0TB7~+LfDVhN{6HUZ!d&B*A!RU+z)w?L@T|y@4m*;S_w7Q zgM~13`6#jeyTaaP3r^~cY9&-y{|dko+|tqz!q{K0cwGZ7CS2I{wNh_X(dFpLOG4O< zUU^kHq~I5{+0cxaioJ#RonZp07(9Uf|@G_o~&|xG*_Na zU_Okj@^`eX{NC?&Qo^G3?`%;&)REP%kLLRG38wX7_3v$2|Cy)T7p?pp*lBLOmO&}z z_0e2;KEbp;tn#szmEZeaahOHx-_@di_-IzYKAP*#Cz#fU)qmr)t$P06?}~3PTK_pK zzDRkZxwQTIXs$n>U|Jtm|Ii}!Gche*|1K-OSih~Q0_E$Yx&C~DX?@Lm?F1*i~wxWyEapn?WT!q}$tsBC-iSd4;-J$;c{)XiJqZHQQzgBFW9M{eqpLwZY zt#fz1m^3g~enK$nXZ&j&FRVApyKYcW@Ue+$*2=~o5aev5{Gs=GB}r~)=o?4%Y?Zv$ z{-}xvvbI4{dwug^&6-<>c*eJP%VpGnf4#lEw)Ld=56;Wv(ukKXyLG5hKC7%qHwYwl z^3gs^y^T+z_0Np0Xim7N;@`kH%*M=9{-%JmPP#6Xl;Cg$JHgK_0IMLoxk$kbr8g4t*>XwvagCkeAVPTpr>6d;965!Al zn80^k<@(CQ2Mrr0VuZPDtqYCzJCz4A7FjE+D|;-h?E`stD^qS)D7G+@DkkC$)gxrk z#_Y5y%W$PtKVok){(dwrj?o^jU$9Rm2XHfzQ8WHh%o65DW60ON$^jm<;+)`uY+kw` zXivx430|XPJGa&N&sZ^Qb-(e3;L7@j>=yX)@KJCqj*>a8{v4^e0WO?@_AVV-+JcUmN4V$-< z$-7-ixV2Hfo^BZ!V=G~=x-9pE6@iVS_Ib@laYzy;sUUX(ddyal+TEIVn$DBq<^FG* z_%NiQ6xDx?XT5aXkL2Na=TNJWy!l|`qpcB<*f1V2AWpItF7NgQyD=gp6oxT&D?`~Z zK79Ry6aQ1g7|J>l?>v?co|4+r@i8Ptu^;6r5Hn2>H12#! zOIrFQIKl@|ib84h<=13Lqg=NwGRiTVKg=jUX~=S;e8x$vjBzjh*4w(^tDbn)b6r zW;F6FbAAMTvWb&R<`e!^9$Y~*?uk3m*Vv2LnY}F209u6S^irXCjn-gZ^+FYj-w^R_y>#KET(PZhuS?gje?U$2ym~mQZ{k@mjXq)htr^C8H8;I0g5lWc zZw>JgqOs<2Gl`8MV3~4GCjdtTJ$(Ixo1VGKv)0OwS%!v@z08R&c0Hc9-kDcji`Aht zSa>j(ylS&`C~fA24xKIb<2h@SuJ619C4Q5?CzB6JknhuYVBook$++{GuN|@ztLD!k zwnN&!pKXW7h2(m>YNs(PCAG~?v!;EHFhP(NMz{al7pC1VA|A0bvb?ksI zj)**<)d7VY&~7fO>STTvAg>t5EJWK~@@r@gT^!Jwoy;Xi_~fLvPV>60Fs7{PP%djv zt*YbqBUK$pS7UuGZXz?+A?4G`?hx^L7Lv+{scct{zt&-jumr0Ta8*POFxtS<1xSuIm}!R+N``4IOV_Dp?F2v8C3O=?`cN4mWXHO!>3|gp{b# z0hZji(B;nP872EcrCVU%PfYmKzLpz$xw~Mi4^ZBPueffoa_V=J$M?Ac;>G)1(Y5+6 zN@)DaPZ#@qJ561@k@@~~g$SK6G~cVc=vCiswpR9zPOMWT5ydvh9BLD7yO&Q-Qh=Lq zC0020ZoW2{W^ItTB*cL#n>KAEtu;JHb**Dsb+C$U>e|LP*l}~vxlQeV$6Dx8ZB;q3 z5e?#q{WXc?kcB^Lv|M@kJ|kuea@~Juf^5vy_BUCEaFwV5_K4kJuTNRY!+Lh^;o>1~ zAg-R$mp%Rcn$HExKTIFrM}duR{$#P;4@$CLWLy`=>?Qj6|D;V0TpS!-Z=LP&t0^>% zabbI<*KzJ{;<_4|zx~r@K*xa>#F5RT4_S&5glD%(uvb@l-G-><29IQ+*R9QrW5)Je zYraULeY=Rv56L%K!PX;n>k;gEt9wc0#ytdor}eI!wd!%+qP?oug~Dj@^z|y9poKWQVDKjURHnFYf$W@jhj=WVED-(P zg>i&!jp?S42_8NR;r}Jal#=hJ?na}l_gt^ zRL6K%og>v@-b7L5(|Qxaqy3{iV~dIF%4>&as-wJ>PwPoEo#8mHN?K}hKi@_<{(6+G zkFK?{tR*r%%eus~DV3K|tG*l)sfZIhAUMHg0N2iz&k9t8Z<6)zz4~t<&P48>eOYRO z=a+g-%mjw3h*Sv0g3-f#l%&4Ya41hxEPr zki|g;tp4~$kmE@ijI+0?C_hMD4nu!skJ{--*LB^VyOunUiARMR59mK)I(!%8>B3^I z3O}K#o}`{3T}|_8_3Fy^0qWG``x=Xa%)#WN1b*^GqVf#*w@KyD=F+RcwKgQ9`u$dd zRpD9Bh9%FdRZozld|FRs2@`|9P4ahlGF=(d$+aeTfrU*xalg$~y5YfH?@%7rq~_c} z{o*%J7XI`GfBv&PI|M)tLB({p=zdsUtFZ&D1~pd8ZLp8C^6`?CmOSX|ReZ7+;xP<6 zG;0fOl_H|*UBvi}gX7xu`mm|U(Ru3Kj2m?KDBEM>3US+GL;h9UW5Z#4Y%*+*VO15j z6`Hok%v)BYGN~Q1DOGPO({zVyw^sbp?7AJYWA?7?uX}2xqujIuq$n5M_ScZpETE2* zZETC}FZuauyuCFxe#0snHAU(e+XQLZ4rTosk;&Wj;6EUt?3+mS=7-b=*FSh{Mym5l z%s&noh8?heKLNeK^7WHXs&n@CDlxVp=?>TtuR8C)mUML~K*64!RNUR)v~Dz&!2gY# z9Q5?A@Pg|6kE9kTWlixotJqu(+D1x;jlT%34K^1~QX$&t@@|cExUx<`ly^&K$j51( zSOBiYWW}qNQ^<}qfz`N<>AnS_UB3VxkavW}NuNI9^yx?9M-7LShbxA}gK_C#y!A+` zQdg)u_@fAN8_LnDTk`5X;w(ZOu{HaO?P(hsG&9>%-5ZzovX_R^`H1$?Y@cKEUiQ-1 zy*XmHvmdikxRkf8H zyJwEpdOfYJG*tAawB{1FBDda!iQ_&d|22&e7Tf0@SK+D{G#**1xo)Xr>wgQl%=oOoRu48K`>|H(qU}}>5gVZSAE*!S&WH)E6zC;QkEN#1GM{HVLr&~$mD?jW?&V$^-w zD$R3&BY_+YfB=Q|!}p(u@KRdbLFF)@OL0@3_iOxE>&kCzsyr=QSQ)WxZ6o#f@#z6s zl%d+jbL^fOsaqMI+Fv4USwLu^PhKQ=A=TA=EpG)DdwLg*X+`$G4dJyW`^_|ytNLE1F@J!_%u7xuZNOF&}2Er@|>ByM{v4Ogn+;g9>vG>m;_eh=x zDQp9$a?iU>93jNXJxor#d%5R0`+`7}$~~igq_)@>RKYcK%ij3))~()Q6=hq4Y1wW@ zI$*;zC-<DFYxehGIJ-T_VxXWoc3v$o#k&<*x4$+z1bGW?w zFrlg3bIg65wvEH2jm^2aguwcoZNFPe$;S?%HEJ@ z^2pX>sobN`Aosw(k2#bh_gHchp1s_2#2x>REzB%UL{F(LnF&-IswXK!GcSVlF$}Pf zdrtCZa?c5qdycNf5ZTK;S4L$fU0*|+TcARR>K;L}d%4>&2e*g)M^!QdWCfwqvIY1pGw_y&&Lcn$n&O?LleOuh6z?RRE2j8AqaRvyrjv9ERfi^fIXh2pD-0=%)7!IxPRUbZ zb_dl5&!v(MGd!k{LDIoIGL>|gU!A1G>~wKSN6Uo9z{o`<9mzG4bhhXGUvZzVd2~G| zbLw6*S>oJY=^PVIWA|4Xe+o9^>Yfe`QrlKU0c+guLjNR2f(pXEVQI#PI4MKFb-lXev^RHg+40l1>&Dsq~%!Sq?U z^SUW6VX%x@X=l8%LpD3ePgnwB&ZQHHX8tB;b7q>vOP5(EP35byLo2F9+dpaSGg-CH$TRN5O)46J07FToXgcdm~^NBPQJw{R)gi1{qRZsBr z>|>hOE2wa&VY_#t^1PDP!cd0IL9if9%jaxqMsKpRumy+pSRv?HmITMi5gbt_q z5+DtLX&Y3Rt=7RS`h8r>WlSA`ha*9X2_sQNhUpmW5MpbWQLSD&WG<$c&XLkNl?D~| z4d3K^DhGd3>l#F8beqLIae1l0w3~VDCGl1&!2oGm`9PoMgwk zXdDaCHzVPj)$xR-m|okyC))QrR{4bXRHSK~QPZOO?L2LSN$S@Drx|~iAQoJGSwhW3+hl z`P%v&mSDw#1hc4VEWv#w80poJ<)4Zh>D}l*lGiYXEPt``_?DY6m|<_`p0Vp^xMQ@@We=?!DzE(KkY(3=~TjP@<1yd23J%C08}0kghk>Egfk=_BuCQuZz0F<|cT72)cOtdy6 z%0RJn0Tg{C?_LxXx~&Nmg)9K&>qm=NX_;ssB+5XsbO987B!5LWwV+uel%>stvUC9; zn?fBap)5?ZDx}Ha(4gf(esGhiIMXNOP|9(M>CG3#F@eF+={Quz}2(cn}<}oz1~@kx8~XNh_!0N+YM^mS*=fSAw7iM|v!{VjVLYl~i3b z*&W$?3)1|ocI0?ztMT|?lQbT_I28$QNN{eW? zJGr;c1|JpGYeOt6=UE1r<=mvM>)k<4mzj_I^u{mw8AeNy+V`17Ul?3sP0_wJJV|AS zyn%vy@1P8t;r$O>ag_MG62o|aaiF^($R(BZJd?G?gK zToVEorv6w+?U3giMz!#!dHs>@E7QuAREUM7C;c1N1L*ib>Kc3RwD)!PzJ~Yck@f2= zs3#wkb%S-MA%9J+74p~QkiXH2phcE`UCZ?Aa_Q+Tcbs`n2)ABaTAKTLiILI1fcrN1 zjguS-Y%664!J>TgoKv&xdufW8_(LLu+MoMF41cIEVZZVr(M0kE<~v`^yq^!}lTS&f zCEWJ4xQ~NbBCiikJ)T`-m}kDroB|2+7Z$F7bpl+Y}T`U812=~bXk-< zUp`enro8;3>Wg`*V}%OGYL&zjW5FNWV1=ZzJicJw(Bqx+@%`=bs~6r7qIBp=(P+sF z`k#m6!|03Tyh&AilGRkL#OUM9ANiLDM8PxYm1?(camV02?&gxe26uL)lIGmJe~$93 zIC#o}9WyGwf5jB~Q0CBRzvJTP%e$5+sg;;xmB3eAFE(E#Eo67i4Gk;^#Jvs`Hx zf;A%J8zJ>HQYf((CY7W5Pn0~kGd;f~?t+o;G8bo?s1IKp&QUH5g zz@PGMiw!IYXzlurXrI&iG6e`$2-EKZqe4eMa%}Z{t!&&(6NNDbdm#*xI388{6?QA+W^KSD81DA}Kw+;AVcoUT(Wo+}uos3f zJc8kBUp}~!=Z3Hw<*lsJB~1UL$w9#OI(aLryh345hcFlo-pSsiu&;)&w_z!Q)UB{D zgs@%aovfy?KX73$+fO6SzYl8Lw&b7>J#L}BQRPX6{)P|zV};s=X;k?OMZDcdOk2b* z$Th0`ts*x02-p!hWP%e_t|2UWrA0JTCXFsoW?T~;8m)>%le_CI!FYcTu3Uy{%M7-*Yn?$HZXrnG^m%;cYPh~- z2GjYpuEA+sn(5QztJWFLsPY9^vK46S3nang%H>HlE9vJd#cKUC zk64Y=%>vVA&aLb(71jZx@F-H%)>~V&2v81Wb8^^(xgf{GA%`_~VI5(G@ve~W27_fm z$syhAL%JK0EJu27qG_~^w=KNz)>1<>hkzG~T@=#Uezgr0Zwlx#vUb|3Og@`dJ^Z4| zkMK0Kj;RNFx&%t%{9RjIHfpW-D*$`hw#!z z;ZMX|Y0vw8MO7sU*V3R;LcLTP&ooi2Y;ieW>)@_H)e$cCb^^KaTM6e9vUIZ^ z_uBE(7O+}B~x(Z1jiKI4)!?BOxP3@T{Tv;=!4Fv;+ zAuI)UPQ~{xk8vFI$op2tyJw!4o09zX(|^18*T zW>y|s(WM=rLO+gYkyfe)vu~)R zfNcpj@T_|OR?P{t^HwQL=$gh3lRTjE9+C*LBRw0^w@rHU&XLJ{NHU|#taR!lm*XZ& z_p|m%x=%1OxpdwKy<=sLE_fGRxTT6IrQ~0}aKB@?)zO*`rxo!O`$EOrQV!qmOYm{q z+y$E_{auPI@$n+YvK~5LdFGo}=^{{EFs@5|_NMePZ8YuZ<4IcL>0{dHV>+de3DL(m z^f4ajgI+cIa4it>nrhv<=KS^}qQa2+vDoteH$){A^inPmd@&TGukHIzD2maU@h zCV)s=BwSa#0wL!1ux+H*V0cAFTESk(-49l@7{c6o)~>RG!ttHvuniif%e$;=qv{(e z(Bg(6LNfxIlN-Lvcod-Bgw@2_^&6u;Q=Pggk*4?|!JTh% zfA*k7>P)GJiWD{k3|FF5Enpz>>Du~@R_rFAU2E(=XtK?X<}2x8LzOCWn7)G6jauu5 zS#$V)2;9fDZa8b*Xv@}Zw>s%K6`7}h3qO-jA3d_UkxQ3Z7Va<9D{Hg*3#`g1G1o{iN}abyvzi)_Mdwy}gVGHD=3arI%>QJG3@+ghmHjuXuW(6Pt&=D<(JW zr)ri%Kzh4|2%(N^2p#8mUcnZ3G3 ze76QG0+x8YyV}tGHRTn|w2MK!i~-zT+dX|@Jga=ce%(sjuPcn7g=1#gh~4diN?Bs< zr5l*f)~`xcQu&bs54@3$1DjpQ}wVUC1 zZoKvI8E@L-M`5ec;S`y!5Q$gemeD!>aME~u9UBszlgJ4 zE`M=2hTS;+GL<#dhNH7coJAgVlOPj%Ze+U=I_>821!){c3ZuBdLISfgl(|CSF)o+! zm_mYPoZi_Irx_oRdpyIb@#{5l3Bu|49GTcVJ7+Q)TNDzLkV%oJ+=zACL=PCP0ZZ5* zGK$Di)iR!sztG1%jTowxRGEB= zhw<=vhvf1%r5q`rQ8qYvWkoJt?6oQ0Tm8DSBt`kM61Ax*ZN4mH)lKoCELD>T3XdA& zxY;9YsJ$)J7BB^+WcPS=usYMm`pC`gVi?++oYnmYTuxw`+KNm>JugR7h`5AU^@>6m zhOm=S_3kW;O*4~i3GvqD$p+p5NXx4&yn1QQA^1E2C@o!zw7+e^6|$Q+^jfzP?i*fn zN&A8xw4q4#bFxxrvPM8}m$F$Mb_YSV+g1Z}+5$%wXT{KdWsn6$SD}TMf^0irXB2W} z6)qF}%_zN8g%0B$6%SE+VDA;{QYZf~$W!EqsB0S+A}4vB^}bJW z53T0!u;j*m=Ud1m^?}baVC#dj2df``K2L_(plU)=96X`F2r&F}COnc!7&7_E+|r;m zxqE^|Vr}PGrZ}0am95Q^@g}?p&tx#+84D&nTU2Xy9atA%QQd9w%+&h@ ztl6>8);2x7!l@d#4EY{qQlA4kAUBe;ppI#*-v3^7vQkIfy2765gy!JB4Q+>IB1V3H zGH;*Z`rk|)Fx-+bt{=ksNbdpn?mhxnp_@i}#5@Qt*pK*5g8?1$`OH*9>;Jylcch(> z&Mx`0D)+kL94zeZses^8*cjJKIP}nhMf?eTGkJ;2EdI9Re>Pe8JO1{&N~SXHVT5Kg z8yjO1?3~sm+D{!J#hk5JQNx^K21;~4F63}^4;UANW`D{U^h4KJ1k>M4e6asT467w) zFMNyg1Uo-o@_w)aL?tjny-0$FjEPN_q6^F19Q^azPW4rA487TcstwMA>z9*%>ib6OFP?dJg;lE zh}mv#XWRGVU9(-sY<4-P$o@mubj|id%+_nQnVqqv=}0hjv8@VGx1ueuKn(mT3j{6U zaaZ&|cNrr^b?bioWYGR|tbhuN(6)B!J`cwq`E2Wz)*|QpeoR7_hF-#kuC#2TrI-4% z%rMO{4@1n-5?Tm9K>7aW)wY?n^zU@2Id z9bDRCXE@FLo^m}KMFsCxyEm`z^oCHs!GghWPwP4S;S&q{N2=?k<1gp>BI$l@Xnoq~ z!RMmO{cXe-I?&DjUY)&Z{M=!}pU>XJ_maTL>Kb`SgI+}=up{YEKkGbw)|_d!eIf(& zmVmGA$DA*!=@>A!XkP%uOJDZBEx=bd3=8Xithl;+0N-|wy{hl) z&Y11*Ja^0Hp2HyhP?n}Inqf-*1GlqO)Gd&h z;3xq>^}{>3ZfOB*-+Bddo-flofl609&6L{l-mq>9^g|+D#YRKAVq%u7UhI?2YSrub zHyVd`5W)*Ij-IJo+Wna-Es{%gKf5Ryo_QR}2p`e$yay#8-#d9LJ}zGR$UE2e(B5bK zbfEu%@Cp05uqo{eMBOR^$69Z^{i?h9`zd9C4>Le)eo0{TMHGi2YFoxN*twv( zadY;xov{hwJHHjdj(d%Y=aJpDmi!B}`fS2{XJykivn(!aknSXQyTeHPjl&Mma z5Kr*qL|ab-h(lFDs7SPo2?l5CVIYSUaA`qw03QSo!`u5gm4ITKqlkfGo70g5Aa3-7 z&981QpDfMOK`?6Y7>0=h37TW2Pv!R-cN&rWb_1ZhOP@NjCU3jdwnddDEQ@Ee<`7#ZHe09csLcABlRyH#WmrD{#LN+H~Gsm+W^aelQ8DHFU@KNaPBXIYqWuZ&1D+kFo&xn z=h6%ehYg&*8(SO*lA8FF-+#Him|Qm2M!s`FF7t}xK^MXn@nS;w9OHPpMAeH@+n*O@ zz7K#nepPn2)s>@p%yV#T<7*1nXK(*~F~V7h#A|P0Pe%_1Kyl5r>_mR_9SLOZwc7=G zV*<%}p4TRj-fNKsrEU@gOVN$Ml4JMo>-(T&#>NKm4rJeb{Y83xT6leeUY~BS`3H*q zFe(wQlYijmi`U>HMVxJQ?sc_eo09ZPlJrYc>CaU9x%>kawsS51!CQYDeo;IC(K!Hb z!f(dO{8r{FBUepbY%kLQQ7<3G)7-?e9#y0q1J#q9ZRqlJwTrb&?A7XAtTCqQT>fJ< z4Go8t+|Y0D8VcW`{Maj@hVP(9bBn*mdfe67vp{|T_NY4XXZsT`p0>%^$EkL%vubv! z8fHRBTUeZ`jK6kqt`o5kCTwJB3ze6t6>AICp!m&CL_9>q6JfQN_5%FPH2X6E$Oj#o z>|7698~C2J^;JBAYN_(_Z+{P7G_*jq`vV}M+P5ZFq5KYHO5Y?0M7Ww`-kQ`y%pAF5iB8tB(rHp^U@Jci*PLs{g6 zaj9G9Li`!z+0`q_vtV$)J&_qb*AAfyD9>af*Iaw6AdleJ*kSFpL~4HYzbBB~wXYTA z3kjt6T1t%k=&1zKM`0sAx(Jsr(Sibj7oU(o`w3;F5ug_*&`Sty8uU^aHEkRR$v|t1 zQ9KX{_!4YhvH)u&JfJz~S3HpW<%4)Rd&B20u3az*1l&|*Ge(a8G1diKszGskC0<)_ zux2Ni!Vjt{$2gz!(+7fh?SQA(*?!CB#D6Ap9{aGmP!$+~@!AU{ggZdp)xZOp(Cg*K zyE&;Y(o}U+0lUwQcN&Lnn`$Yu6)S5qtPviing3fjSyeMo?Y6@?YKGvMdDIcUn6kwZ zi5;`6Ns%x1j6Y&CF0*cuC4^6TNdUBRVYkANmHj%@+u`cT=yN+?NxLQY?P`}1 zu?UDj$ZyKZFP~*}lG`U?zso-$H{+t16b1!YIIRck!(bUeV!lpt;RwnPKeTU+mfOkO zIV7R$p4N}?P^*}GgYOYr>f+DqzV#0v)IP*)R1+Zd@ghE zV4@MyP9F#9p3hA^V`}kC%IxYzvZ!`9lDOb^%(v`x;bqM{ipLGSHjPRksnTw}6&tw( zo{27FS-BAiC9YwED`GWm{VsI%D%%3$<}etkfz=J{xvOo=By??PaCPmR>RbJw;#Umf zmcLgFUcj(^X0^?QVQpO9u)f)QA;a3pVQsvCVeP$u=5+MR;+B5U2ULtp7<{-L^ynn` zF02|SsZ9~LzY%xnN}=L;P|sB1i09Wc&0?w5*P%{5ORc8AXTf)&GNME90EHtozz?wi zq&_7vSy|8Yg&O1GwYp~z@SglT_($&>?VUB~eUsk(-g&F)X_jVg)ld~w#Mx;3reH&- zo2K~a()0w?6#ujPsuEN&_Qbw^h~Bh`HgQ^O@beRG4^w)vg7nod_HD!av1+=2$^I=A zTa_Gu!IU`WlaDOmG=$S@Az%Lh`UWQ{JV0CFiP@vKbS^n{nsC&4RPr3^k`D0lCMS`L zex-XzPVUreYHVo6RTA@J?g1^{Ug!=O1Bf>7@=yO;t9r{f?@V{_a)EQ|B z6V-U8mau&ci3J4r@rzD(lY?6&;~0){0l2A1t*#0;_*!O>y>&l({de>X8y0KPGdR6u zCpt$tdxzlIDjT#G=0FD5#d}3kQLeCH(G+Qybcw>iyaf?^g zL|a!=Tw^`K#I+g!<@3zA_D#T2+|PhPi=32k{1d(>#~B9)2tA1$JvBYkqRVW?;S(aJ zLichL1&8Q+yp{RyU|gQ1TIOmR9-T!>f+qjcVZe)rrIV`l8>+&%O&KhWrk=^#6!4sY z90e{#TB|HO@DU!~?)!eGy=XRnPr7?QY?Z9gJP}m%cGiA{6(Jsm*Kr@f_!5&fJ}_8=^@y0Tv$%7cUsu>KBExh!xLpwrG}ccjk(bre zo~=*d0oSnNxB4KT*+72uC-EDPDihqesw(Zt%_DhAH>opw>t;HbEH@7GQ3GDKw`Lck z>(^M-0nC*!tUBd9tGm)Kye|*YEd5^e1$XSCi{NhkwJY3>$GwM476IP#ZP*>gf)|X! z{P(Kcwb2>$%Q)3Yfc7t=Q*l`{QsVnX9b!{Y=ORncv`H{}1eqWC>_erm@Je4ibEc<8 zXYoXdUwx2I8veZvyg$z2575AW+_QG~K&%cT(C#btgu4vzSZDt^ll*H5W_K!g>naS? z=a=CZxCI{BCLo4^G9fEiTlM2e$Ugux`F=jtF2VDE^XD6S@$%L1(vO#~g_m`BSqd)$ zcxi=~^?3Puc-erL|2MpB3{7M5Xt;*g&beYQafLm4J{{lBC-wWk`?LD} z58;LV{ziCVzt4mh_WK{h3;X@e@WOt7E4-|(-{a~x?w-eAIP$T)x{PBLy=~Prglp$D z4>VLRRt9^8HfW2c2_)dAaMV)2|0^7&?T!$t4`7f`8$HB?`a%3IjsN^wr)Op{s@STQ z^Ysq{@;E8_C#c51cNBeJAIGFVEhpd?i-1Mk5>|*Lb)iL$znolZdk_1xT#|&4qBLQF zJHL_5P+2`WiQIO6NPUt`N(pCj9M9&cKFH#LK^3zpd*{k3zyJC8jYpHod#YaBt(jW) z^vrDHvT;=EkxrxEpH#ySCyxH^cX=B-(rarb$gw)Fv%cdi@ka@ae+-wwGn$&yE{48Q z7r`TG=@qxEH5$=($@PyCsqup<1>cM^!#DFrD@$5JJ-9^v0NbkXXAODOP#Yb?W9vKL zq0*$VKp&vqHzmDnul~D_t*wKh?M)#{OH=1dt)gY%?I@~_$E4T=Wt8mM+UP!j^P@y{ ztmo<^O#xcpOM7=&yzJi7dlJ(C!AsnpWQ_Q7Z0)Xghwz7z>1nAZ*Z>>X|Ifjb@0$K|Nc=a$t1qKQkqB6z&EqOg`%U zzraW81^gR_+ZF9ojHgy;i-3Z%>D~lBD}1T{1b+QIB$(hu!8YR8JZG<)>K($CEH1es z4RdYsx0Ft$vnS8t)ABPOjemy4bl)hd<#S%XqzkCFvrg27)^V!*-quyv$f=cap69y& zGtpT(v3CjQXyQE2C4< zD~;#(4HI@xfNiSr{LWhlQ^*NBV1<;X9(oj_cy3sXj>ig{w_7& zswG5ob&b4ewT-}$M+wo?_1+gSs%c=!6>^!{4H}=J&b8YefTzV&w0Ohd%W>YJf@cd z5kqc=NYVd|vBF)oJiZBg`1;<>hW*%rsA{WiB&bOsuorj;d)lT-x**W`WHo*IC*gOs z1BcgaHH{otZ6m=?=c?HP>t4lLu);~SaQ7HH#P^B-5y!Pb2!~ERUmRC*K4HoN16|`Y z4On3C@bF72Y(?QO_Y<+h(7B&D7xok9>SG_d^+NX(XP54}dD(s1n+HEanqEkN3nOi;uS;7FPWHrifyYZKQBIU**%~S1(TCcuap45gfAEWL!-nU$|tI zjbLgh=F!Y)S~`KkSKN=gfPuekwS9sJfbB*vXMW$6_$4*bc6+HmS4fp4gDzW87tp^C zUc5@2N%WwLtC^VVR@(>+O->9k!R3-)>F|mE3!=SA6k8ST*%UCG#v8uw!W#a`)iU&s*qR@+GTA^s+8 zm^{Z`t8TmW}JYPV=c9QujhJ7KpeZ4H)RWy>qZHj!p0z6;9 z5Kp7ns)+YOhWO6aHj)~mkd+t}ajxG&NI602`n|7WNSj)nZbD^#o5k^jM;c}h%IBNE-Dzi-<mgppdOi+Yr-vsy<9_lpF)js%aQN`TFzE&=t>nGR8jbNSafqJD)cQYdR-`b zRmz{0?((qDXYtDG>5;t%!F$++$iK6!jy4&xcHh_spfv25yE9Y8J(#DS){AT)ctsj6 z9?ZU4I6O0xI{h*Sj2g3nudw%E7}Y&o+(Vgh)uly0zUT4lwUBX-f8E3EcOg5uq3lH1&|i&0(h#zH+D1JkBT$4csloY@UI{J{Q>_M-gRCfg0kV@IR`&q zb&qk+==Z5UoJVyvE5m=uwW)k*eS{Rt?3;;${OC*Yt9M(xk7_TE=~tp%q(3913upOu z^^`*VFI)Yqta=No#625U$s3W6zDR{yR`(3EXnyqPGSG<$yjnsjldxx5^0n&Q1z$RzWfI z=r!4b6~3}sOSJ%>P*5mor)Ij1RS^Vd+qu|};{>wjV{Xv=Kdf)`P5>cxJ|^zV{Yw-L z^4z}EGkN~7PW|e75&$Ym2z&>-%=g>zfQoEJaR1vF-|?Rv@XI;HDG0n(W)ZEc8+xFR z$G!$cmZ>6Teoy8a4x3DVbO_W~PCJAkJ-!ZoRX^}+pxJum-Kfm&kfDYQVfFkX<(4zG zjXDaIw84#9Wx$M7(u_>UJH@RZwPV_{+^^fBLF=VHw=p^9NnfTqp)n!nG*jq+-DR=1F#s1zSem-b1J~a{_+$2H8ejB)8 z)jiwP-sm6Wj}Say?=oQ3!R{Zz-FV1wgZcYE^Ut4wp)$?D0DO4iQ`R{ztmlzg*T6uVmEHHB0XDioA4wPS&FfhG zoBC_7hMKh3)79V1G<9;#r#bhy1M;Q;PU@Z_%3=nGSOtk<29<@|vPWqoq?`x61Y z(CHz7w_@ya2HUu)t3utGiJ(k4GdahM+jQaEHDVL#)U+FM(xN{;7mUP8_fYSoKb#{o z;@xYl?%AXFNB?jR!NzxDmjm||K*z(hT{8a{zemV?z;`|BV|T@~;j24X6zkZIcW&D` z^b?#i#2Lg8EeTH>JX1oWNjHm3$&VUe;?5&+9;%xv-tJ|likevs+UMp9(ms)3e3R+t zRVaqEY(J6Jbo@R~Mnj^_?hQ><#@IOiYnisdBnC)+UmkGlA*;~ok?M?#oFw@UCBye^ zxz%7=JfKq=ZGPVmS{_by^^1%J09AYs=&p2%9c7~{sEj# z3~h#EBu~2-Tl%GMGZ^D+^({U&+PIQz0J=(HEij;$ZhW^o$U^`q_yhF<%j|)KaRN)E zm>E{UU6Iw~NB}4`wN7Sr^s&a2 z0df;wq00Jt&<1EESOBbuIT0A3yPePd7-9-bOB_3n&zp5sHkYaln<1^*5OMIs-spe{wU#k)^eA7Z(b znWE7mgF@L#Iu-jS^z-9vrCq23hT$iQpW;xdC-1T#IOejF4IY3!fRgwuG2GB3w?&wb zD>d+)_<*v0fCo01-La|uETO1mQxX} zk_z*q6s=nKVKrNS*L4_N{f}OYR2T)dH}?Wf(%rZ~t(X7HScu=Y`Q+CE;*hlmD1ZW- zhqZwH-l4(P<$wYI^|9+8YVXl87D%o2FtB2QqU*Ig258)Ye9Pb#<_1=B*97Z%R_+jOl0~*_P zG*m|uPU9RuxIcRLMmSlg$6yTuFy9931Q?LH6a+$ex(|ZEM)R*x=ZSVdPju_&WM@Ao z$2$872>Lnc{RFcAHR?R(F&oEPTNR4N3B8=$;QlbP9okcP!SmJ)36FWQ9uEr1W_HBm zHhn)8?qeH_%Q!A%L%e%^JTeg90}WhO?*QMZaEhC z-y{O~-y{O~9}+>#ZOjjHO0zm;fiE=4`49ww)e{b%sE$Y%U}Yu_U&b{+-!cj{4nLOS zaB{LZ{79C=j|L8(Y;(?JmS~Q5a(Do=IVXW+Is9Lv&I#w7iI%=3kSI)ZP6bQ^d8Hu` zH7U+n9X=ih5_q&8X+KS0Ag@idp2_5Y($gEv54#3fU+uzO2-7*Aaq6{bR}nvF+`iuda=LWghlIDlmcZd8HzX?!60LjG)?I zx2C7Br-H9o&JB>9x!f4Qjd@6V-=8i|T5n0u*{;RDa&Iuu*FN~jBdRFWvQhW$CAVpU zUEGL2-Fh=RvUhS5&MZIBUY`W}3}T|cUimekCFKmosRCRBO40gxA8Fjl9}1IrcN6h- z;q+!?uT|yXqM5QlXXsL566491R9q3eYk@uBGRSu_u*oxk$T$G8s2%k*%rlQ@2clpO z-w9hd|KV5fk%Q}v6l`xB@YMhWAogx>QPt9Kz|Zfb!#Z$H<(mfLkvSY|k{$tDiEo+3 z<&^8NIMPLx*#Csxh6}Sv73fTV>pEm|J6)LIo)ttYylZ!2HG*5S_jn&tXWjXw*|0re zis`Uwc?Oa-Nm!3ulg587!FP=a)W;a7c}2G0jaNhb^uAA_H|}L<>UzBS{JyWJV7xZ_ zDJboE+IapIj+HlO{V`JMp1z?MJ*&P&6Jnp!rfq0jcfe+clM)#2k8fFue>UJ5IHYCR zL&V|PY-cPm%d=dG0Bh@7`bv(|s^t+Tkl^0d@2D3`Va-44`(*OZ(a<3!Bu;AjYSCd{ z`Dh(({mcave=Wp;7k|{&K%g7Y1iFDI+T^f)uQ4BH_w`L&TCSgAcw$j@W|@AT4*J<< z7y21TM=umE(aHw4n3xmOPRAn-oWB)^P65jLt9!1-0~{4k)%#3+?B+fs>{y~x>&D-@+K;Dd zy$JcSvf*Vp+NgpOCr`GE@qYW|#r{RLF2LKMlAH8uB`F9XPN6L`CH*?Kq{y?Zh-yH4 zNvXHf@s@P6b+@w3;a2Gd4>I!O*k%Em51?(K&G*51*DejpV?o`60SDgLp*8!JQDsxm z-vTtVS!$ij%&M${j-TpC6D477{UUxjDYUjQuWf59en3;^vKBs*^6{k~%(;O@zJE8T zG2VSVWr)L`>ZendE|&5!8B;dB>)bL)oWz)Cj~`lW{SM9|Nr|xZdSC^AB=!r{I31DD zK8aIuSWd~*`FX(~zg%BKfp*o`lR;mTvHZ*A?Yl7Et#`A@{Qg5gSWwR-Y~vHkrNAe5 z3Z;0ZQ}1fwbSB8N-6ZEdYCjPD?Q9^j6%k>`u#h zC1Z4CO45c*hU%x)Ln`E5@kleiWg-5dlV4f8=1cJ{)9L&1brJ0g9*#OWy@l-Aq;);~Hg{QUVL zhVcQFWk>83>me1ve?j))4 zkiGf*-k(tZ#kPB4@$P}K9bdY8$Cr?!4Q-AMbOE&<00lUQ%{hh4wSHMkzs(qW%74oP zC2!1*=u8a~7=}7`qZT=$=2U5#BbqAB@QvEyTsVbcBAMDxnad{wI=at5fTa&<%;|k+P;0pKyM|A<)*{4bqcmPgM@DBuJo7(GN5#&U`De#EYh2V1n;TTS_#F*1nOD|XcH1>$o z&%qz7-961({+?$b*WIPhf$3_0R{bJ3JRu}-kuV32wFU0l<$My-xthhYEud60nmkQgq zrw|Mz@Ryw@AL0)cMw}nTJ~*n;9jk9aqjjd$P?6(kM#fde__2-l?v zaifMfHGO?=h+FAppHvKqvi;JCiTPUE37y*KMx~msz}j> zh8|`#!o9C%ZxPS8$gKD;bW^D(|1gP0(0dhO4$jAn?*W_28Hb5jy6A5aU_ccP17t%x z{0AytlSZQ?gajd)&?ox0(V$vyvT6L6_jrJZv+)4u91mVw5|M$Z3YJG8Cuq;lemKX` zIY}X=mj5s&6KD4`1^^B&%R=(8nvh>E5n(X1|GaLAnRaUb`R;4i;(m5| zC+ZW|fzav)c~T_o`FiD>$fVdHJpVDDwJcz8KJ?O3?RpT?nc7aYe5SSs_Q09iolt#< z`njF8>xtBAPoxMw)o!{|DR2DEkg~^9riyokr%HuS_zzk4POj4;rsIBE&OcZxGa00U zi+}pNHm_5?n}|MObLsc6i5ldo_#2CY{u(9`=wmJ7zH@9ZU%yVRCV@90QU-xHVzK=; zPiHd?pN+4-BQV$bI~57iJ0THi#l{o>H)b@6)$K!_;pGMphd$d?B<^7sA?{Qc;9{KDHZN?6QTz__ji z#PY=VGm%1b>D~VU4b)jWewP}%Y%AP=qXPisM;XLZon$9%2li#i9PlaqbQku~?KEhu z17Yi1NE!GWO5B%6;lp*Q0V=EV($=9j=I=FG!Pj{Eoo0{d-ZQN8LNwdH9}`Zk$X)sU zwxrN&wSuJly(UlyDGVXr8CC7^s*ns3+TWBIcA_`gPp0&_t;cq zU&w#*)4s#^T-Ni+(ig71TowLDm0HMuvgg`g7XWJ}NbfmuF4k;4tv>_`t0Su3E{&7c z)j>>h{=nh2)3JvrB*ZeGDdsLkagpPjOxh2emv#tHOQ^Fbl3v@Ew20?y|oJD)#r_KK%VS_iw(HfA*K- z@Y$1(vc2 z?GiAUSORB^u!+8Q2@q^LpCObdlue>=WVF&HBEqSJ3$cM zcHRbKQJMN3vMYgXAOzjpdD}dTuxEVQdD|Rc*%dzRyls}R?25IDr`LRiprd%$!QSn_ z)01~h;I+(Nl=)gdh5}_&@*4bma``ykN~maO2~STh9r4#)_IjAF_}NKwmc1QX?~q*y zWE~+Ww-dX=mZ#StyAsGoq*PB1k_yY?ap|Djmj_#~*YW!25Jv(kr6>T2;unkbUwv#O zswM}XrawF1+eA_H@-~|h2k%P2AVdse;1>oxd&9GX4pZ=5?+tK}q2NW&KkoTKg(>*1 z_XaqKQ1D^TU-A5)!4!Pgdjp&#c-v{9?zSd-J>##t?6twyC8jPi71O2HUG_T3SCrTp zsO@PENXXBdd2|XavLsqdD9{n`Z~>Ow zy1}tI2U~BK59@aAvu4&ex5lM`<@a?W;$f;p^#YPTWKxw2tr&q&SQ+$Ia|rn@f!4>d zzm6s$f}X&;+spSc$q5cNPx?UXDA7HE@m*?O0!*F7N?raW+?)*+LBvmk-m1oh=|4kKC7^&Xp#k z#z!&wljr)SGADCfD)$vIYvJ>8SDAP|2|f4mf+s zm5xFEMy2VO1Epv|@5iIkOwuA$@?4G~hez>H;KPx)bR>t+67~T*D@O|c3`6^94w{>A z7~n?>{=6|R9qt=Mdx~8-;J!2y`g z!>}imrJ>p}n+_>d4T8x8q^LaO%CnR}3ZiaJCGrd_Pepkam4}c*)gY^wNR&#?p(;4< zG#1;_s9yi?nMoldHJQVy$sBA?rZG0=6Vw{!)A;&O>srhw?tGWkr1kJMEAaCSB1BOf z{LDjOU?sg=Drhpr&)|w_@iTrCe#SGom!QDC1c6lv3am;H_>!Q&m&SygL@^<#!k7?T zY)lARLjE2r^#rmm#0M)1%@G9hA}BOR5U7cu&>TS^9&)1i8E3E}M2h6lER?V(qBn9i zIWua!;>pC}EEvAe;&=EMmFItR1HR3iK6&m^7ABhmIQO)zJv~<>K=3;TwIp$cu|Tq5 z2v+NRFYl~1D$Vcv7G>{z1h3dhJ|Q=Bbhzdmk8|`r0ZLRwjpu!ZnP#KXnM)Dc4QxcE z#d|L16NU$I1^pWi&Bq(G_aciUjd+b3|MDR(e)?4qI>201TKdQkpMWqcU`ITK%IsVr zv>pcCi>ksiB%DP>Ct`ke;8iti2$%Kv>>h5K`^-f=Ft& z7X%R6BUPO|mmw&7a}l$griw&O2TkQgQ$-*?MN+Jp&c8fJ z&zc#qy4BYwSgx+C?LJl;IlA;_e0K`=!j~FTrQ^&4jawZ#PD0Mt2Svfqv8QGEV5Xp- z8PyB#aS)536+BaP5hStLG!Te~Ac;lDKITH`6vQE(LJgE*kONE$H4p?cA}G{A5b&}n zn`0VMFh}~F-@;E&BOo8d5rfBRZk{1;@(8ozCU|gUqAWr{MvXVYYat_v@-k{% zhELUG^Uw-{*&{J2_CI0fPrFi-Z$^z5Z1nPGBsB}=`RLSp@eSD()0wgZ>hWX-29XLw zXEthlL!AK1VD8}c*ZWu}(8WGU04`t)gYphpAk1c>#+N@wd50{i6x4;3-@`Ww!Y~FM zWaNBQp80!7^EFt#F0dXHT+DO@(yy5TtV7iq0Oa5amwhMV(s7r4$6KG1>^lRS&WR_X zoTrF#PEhup2$Bwzaze5Xka1BOh6G4ac`AaSbASwM5LPOvz? zW9AB6J=;^H!3lnQjFd73|7MC(-ug_RX`_^9VHY$@DedZqieTVQO8NXIFQ2BAdoc5) zly+H{t)#yUxY0v_Vf6BpXR#_^&gkWb!KsfzFT)S5L@)2h2@Bom<+<3$>Y$f)Cx-?_ zFDbyV=%o$N>|%0UqGd?t^O9(`-SoOH@c_OgyAXNSsEwRh`XDZwkUR@!A7mCRzl(rD zIJITzV|EgGMq!eeViI1U(v&GC;RVu5nPNFEzsN+AMi6HdCK6exn%p)^*F+GeEnO2q zsEN9COHYtxu;8N7>~k^AZ5}kkY`(xrhbc!HlSzbxVRxd&1CVebC7Ib=xq0%-YdN8) z2i#8Sg+2!h5$q0mu~10o0>^i?cK%4KC~$m0Z-QHGo}Qz#9Q^TV3`VC| z|C$uP0-1veGNVRk^FzZ4Ub~fbCdsIMkSE%lY<*B`8`}Z*{hkmn^EmipvNqCKdgsH= zABbd~MssNIM0EtCB7a;Z{s5gM`~itNBmTf|vcSPJwKYLv22KdIb(qhl@J1?=az`48 zf)zMhFn6fH*#c9zu%!a6ak7c^%`ACf?na3xkc^S4g~LRpc~j%yJV?a(K7PM>@*M6v zo0XOZhh$;K8&KE(1#xvYqfvSBR|jk|Q-#49P?pWZAQ_6~R0=p`wr^0#g3_6G{WsnE zOyGuq%mkB96(-^LK(|s>{H*lfY>spbtl_n|0@AE#AbAKSFDjBpQQ|9V{Bwqa4QsDO zM}_weto?>mT7tErD@0(eC}jeywP9^m0OHm?J%zYSvBi|;0+b&##BF*_R-Ykdn276L zjyPU{5u)!cp67c&-_x~`$)yi|$LSjv`p%$XprV0;;@O9M{qy*x@MzOFrgK*0iC-gT zqT0xlAV^J{sdgq8+UZOLQ4zo_-6Fba_AJqj)q`|fleeR7o+k* zSczZE!V=V2o`;pV0YQm#PKgwyPKh%uo`{Y`BIezPos9Vt8uJ_}aSn9X2eP&n5!f{- zSWzRi96_RbVqpl0J~FKa+k@h25WNKLEFV;{%b;L;Av;I~BTWWnKv2n?Q%Pn}FT|h% zm8=v${W#>|Ol@R(>CNAEdYSjoLCD|g$gDQG>+ccn;IByJA^JBbQoyef2c{9vMTAH< zGigpHqKOJ-SyV6|Xace^sBxy9!|dX^&i<&hV2VEl>;-rElw&4leadHB2=lNh4?R!1 z9jn{(obve`XApgy$84*M2G+!y5rd9oRadr?StW^17SYM9S_KgEI`31M>E!L{DNM(Y zir=q!Te;MEIpW*GAi-j^S{ngtI;G<@)JRe@c{9Fr$SL{7cC*Q4P;svgJ zT;pG?jWm}&hGQYQ&yVjXF3Uf#?viS&g4sX$W!%z$ZbG@NaK0784ewk+R))X$26H^| zeOR~Q^YxLlwcWF|9Wz`&^TUaQQ>FdPS}TpkrTx(5atA=@9f(T@#18n~-cMOMDG0SY zLE0N>7zpx$Ao)^H7zmo4Alcm$2I|#rJfIjA)B4Fr$Fh|YbTnHjK}WKc5_A}AF>D@a zM`1iJHLzizPujT=8{1XLktSn%$hIBNONgs$y#|qrpI2<*M{Zob4 zMWv$zYRJcOr6W<}2ZG-MuPE|XoVWumCl@+K+sM=n>0uSW>q_PV;xQI%mYm4sTCXu- zKP3y^h}m{|v%fmBAH7027sd!*`hNIldps7;zFj!zLh4|Pi>*30gATU-0?R!-8WkZ_ z0fYn`usnXT9egp=5jKt~s_x4{hJt(!N-rG@9#f19kRoOx_z^G$K!ybwM=kP79gHg# zJs%I%@v9XOj#n2PqM#eEE;trIHeOwDES!&OqQ<*^G`(ub($1%!kxi>M&?liB$O@@c2Lsg_XCH?Gb0VQ3f>L|}@7&TZi< zkZlz7CTsy@DX3lj&|sjTH@uX&(iGIrRUPl)K*1PBM5&afQVzOyIEeTZf4q;>1^obL z*8bMl=F!@E~z^q&E6S0r^Y$Q@4lh7gMesj+H9QFeFIejVB3f zlM)hpV@X0TNs#b6m?ZQj2@-)o$l+Y+K8e-C1wQP9T*{RW0znc`c&LQJss5Ry>(W0a zbnPD#4uzVqp%g}R5fi%hj|u4Cfm~^St~9mTz zf++7Vl*gh|55r%^C6$XcE5x0teYsL4EX)p|WK`Z47G~MJ5TQt{gtb{VaYG7k5Uz$U z^kP2*Ed{){w?5|U6EX6rboe6>hf#U_m7BSmfxwQ+2lr#ezh*ir-?tuw$0bg-m0q-h zNr@W2^1~e2c&>afI`x;Aab(hqL`~HA3gjY&ee%oe)=Z;$P2pIsw6C+abwF8RIe4Sd zqzPS-XZ1l6ExH2HTfncq!&M!mFYw$GkCMLo2Ju+aqfXnZL)+QgWfH@1URQ&dY>SOf^6%Q~Dp4Ml4$*sH-0*@Ii5uSY zyf!!72ycnFVE`1JTJU?PpcRZ8{t2$}zzyFAJ(A&uBhXk;dH-*Sv$E_^GzI6?4F`6} zfU8Y()F#bzhRvUd*8wC1=NUZVVrp_r>q=@9lksCx2&PcTHMsi{ztSo1Y^_P+cd1Vr zNLa$Zj6UhX_3CaCAE@ovPYG8(P^;gFW~N4q_+^3G=rwqX^^UohJ{hZxZWEBd(kJ$? z{SxYveX&wapLl{4O(jWyKJf%98XvkrD6&0`x<&{|%0a7m8r6*}H80m^2nu<@NuKo* z%$qAk&kDKeX%{n%E4fe%8*?Fz_W9_o>9kbWm^PeFOLdKDyO<^=kkjyT8c0rE&S@sM zRDz-*!l7tPW!E{&P&fJ;)c8K`_yMm>i^~wl?0Y=gxtW83u2MLoUfS##C zQR5CsUYA!&icbA1j9g-OCmSnO3ZC)zXqu0{O2B;uD!0qPAGOh&2vO#oQX{qcTZ816 zNLB8ILQ3mMjTb&6WzVSs2m$PFkSjF~b}E$q3+SP=%Cge9-J1OirT2XS{LK=Sg4e>i zy1cy&#x*%jchq?H6_gOb;vK4n^Bgs<#tI;iqro}HQRB_DB8?PFmGp#0b!NNd1=ctx zy#cuZ?2!vdS2B+-iP4cRXz-Q?wD)S#};mj2L0H?AaAqvQ}t`px5kg zP81k5*kqt^wvf}9qB`?@;Kl8({W<0VTP4B~DU7%>iU}pyrzs#Nv`QqQRm~_%h@R4_ z-6jL}1Be-loa;)-51xl0y6*(9kA=ogFpPsD+IHiBkJShHi#ikIfbW;`eH4t-(=y|L z9dP4-k8T{?R~yw^>Hp&z?Y=~;)kd#JCKGOE9I#T<2IGKh=2*pO95A08OqfSj71KB{ zAS?z>@ac7ds@_MwpjDg0WLUf_(+C3u!Zhc(-d5I)xZk z$w7#H1V+lTCaVojmWwQkh^Vn2qH>uWdk&Z*P~;t?WS12G54W9GmSZpaaciFfX9NqI zE^_RLzuH}ny=Qi1Ire;XF-R2lY$Z9yCIgjs%CQ~rFc3BD+Am@@9$k+8sHB~hAd_z8E|#HhZ8}0*ipa@J67m+93Nu|9tTj2xV*y?#6N{l>rTk3 z*o>_)S!QX&u7T!c*!|&`;4H|Vw?g}_iS#A>%h-2=41ki$^P`j~wfjj5HK~?Z=0&Z3 zH6T-?oAJxSwb4y@iuE2#v(em>zN(F0sU-f&;V(O94rU^`87G!G}zGL;wOcqlM z1}R8D1gn?imXoCsOkP3?4tZf}+z>(D#Y@|Eqe0*@4r#JQhf~GUC`s(bFtij(n6?s1 zn6?s1m}V%sQA3dmlYPFW2U0Q?1xw$whY5Wun$q4qqJSansw6cAWllu z_!@nVzA`ZaAjYCb9bVip>DvIwX|OqU+N`AClCLAG6H`mDE=ZhgF&2p$0Yr@rxNbR+ z3h`)&G70m=8%#d22DV4}#I|TP@vjL0LvU1QzkVDaXHzP&1ba^TMAWea|HeKI97#bX z;FFPU7E21|R5Cin;AhUVNfq|G6WzToeL7|V78-ljnHv@wo9_g}LZg^)3yqJ}2l<<} z(D)8pG+1cQ!ecy25z{v)>B2|dP*j(#TT@zVKaDgqjZ;#oHhL9un`|;ujkTj1m})QS z4HeT=V?Kr*xENw1vepb<3?j(j#gKn6h#!LwI~;ZsC&#)SS1M@F$UN9`uS%tkr&1eu z4y?v0vz198BTeGJiu6(U9Shvz?uG?fkK`#I7WN#3HCd13od9<%(0c5SgN3U(GU*Fg zw$dES^aEQF8JTn&cb=BXq(4=J$a0x<@72bGFVw(o`b{Q%T{b8AEUejx*r+k06{Ybx zQlq0PV$=ce)v@zL9X={s> z%GxUajjXNZ_7;O%mf2g!{>PeNZ*kIU_mf&{S~bQ(X|3K5$kgb=h!H{)Ah2@`v(mdQ z!DMe;&tjuJ_>J`|dyB8wG=}dzs5pbrxbQUDV#QQ38W)}>TkM*28jK51lPzYXYmg%B zEl-mzW;pdU*jt_^Tg=ewX%_`E(cU4JJnK4A0}&ral8itVl*f6U%ZM6|8q11PGs5 z-y0!7C`?$-N97)iRQ@t7fVs*H_L)XV*Bl4n)=J|$o2Ud?O+ghzr@o1mT96F|>&U4= zxS)yI0pzptZecZ^k_+W?UjDoAC5G}jFMmH|28nx}%CnZ7o;y1SYmB^9AnOFI`?(fB*Jm3=5wST{1mqP*>8^YmDh8eu?UAX8DX*q#sN{C7`pGJ zMp7(sQch2!3zjepaon9V2K$qU>jcC8WGkIu*q^Mb6Ab&4V$9Jwc3*=HNg@h@g7`@@ z)^ZUXHLisT)3(~!?|+N3_jAc=f#ZT`ww&P5`1+GD|Am{C8Abco` z2i-o_2x*sYLt>D{YhXfWW$^(>oFGesEdB#fY_~L#FD_+w zyUF5A=c<(+GQxoRN4ee6c{kcOBPB@Wb*Lb)gTYBwQRDgi;7sx$NN|!>)c6E?mzBs@ zgX14fBLDMMhE@{bp8yxkPb|hF$sm!fZjyVD$gI1&ME-Mr$h(3>{zR5;+5|j`whu zS!?I~HkCp`bz_^4u_UJhdIg~9w0I~9@z#eSa$_@o$7D69t#8`avc5n4XKQ%A5dE8j zfGwf1jDNF;z$y1{l5A`DQ?=Ekl5KrktDi>0Q=?6n+_ljKJjHr9`%U&X>997ss3iW% z-nNJBPbBG(L}Fzy|E8zO7B{JA5E`zYCR^Mjqo=`e^)%VyL`hO73|CK+EpC$0%fWE< zG}+>0wxrxeNt$eNvS6&X_$ zxAZ`4#G)T+8O>Imzho?%I~FV`C2BmhnYl^q1*Jx(_{lBVw=EbYKLd-Kv4nZrNE)ukT1R`%|$Ivbjl zdLR^HD@?F)F6XkKigPYIHAusqp=SuDnM5A~(DV=~|2O2BP?v<=bLd7OHmgH(D)WU% zwGp$uV7uN7X&B2o&DA+q(W&+FVuV^)!e-8_({KM|TYCO2u(%vYuq~|t4n1mo3<5K* zYtY`nH}NGAIi9m-_%xz0gZbTB_CzXi&1<`16*eu$7AT1$G*-0p{K7Z}HgziuJDHNI z53&xJ;$!te{$lErO>n-Wk69C!1kg9AQhan1m-a<%RDg@+VkICg7;B?T$Zg^g)QP;KiD8l{Hdf4IybT z@U)6l#@k6SDvhHprJ)o)2Lt$jy$DoKyz7N3`x+#mQfOKeN5SeQuEIFi+E zg3pFq(QvKEia4U--5p24@IIg1iyB{rHPhDfZ1}MV!1rQRniYWe!DZ4Z0N9DO=Zd7mOESWswz(A9v@8)zT># z58+75U{>C)ZKn>ziEOj7@xNgcD=Qm6bMg6P;};>N*ak`OSw$0X8Eg;1y6lvV=FzC5 zODsyd{2 zK^JfO`z_j=H+8c&XBQKDlcTKN&knod(zt8&6KHK}^ca3I{h0NmY+diMh9`TI(^DHg zt|b1--n579Ponm*Su_Y8rJg2R)HIW)!QS*V*`j8bcpB_YPm?Wbo@P&j0p)43MbD9o|4m^Py{qtml^&dJcNjZO^!d=aiZgWJ^W%BV*Bq9rh|IAlR#qV1aDbZLn9zUq;3Y1LdrTymd(%q9o)!EhY_vSBj7lHMYUX z3-z*&=+yP_YP8h=yBVG0*YBkB_P7m6ZIjkU2a}d4=$;6(nM73(i4;T(IZbU&lW3s| z!N#zhB#MIaM2$<}Gmq;{Lh2->LY-3|o#LnT!2*m_w?0vGLbQ66v$1wds3BKp&Cw~= z$+5D&T%BYVow{A&t2Hz3)yo$_R!1tq4?-yTSl{cl+&2Z7Q)?y%B8_tVEb3Bk?K_c3 zwSN{e`if~QV|WPbJI+ZbHep_pRyx5jSxLT~V3^7zm`*Tk{bK~1jmpRBgZxd~sC>s5 zvo&Ca#q73K^{MVnPG;%2Iq8Vn0$HB@P| zOTjv$ddA;_ql}>^SeHyfegON$v4N1k2R8f5ksia{~;z;J(@YG0TXOenMAj@O_Y&Rx(UzU)@q#t3}QAdJkLpeEEk^JBzkV&tt|UC4gfkmWcwX~U zM865o4?LC6D+|vI&W2!tn()kmhlB9UfUDy@7@f<{Y)VrpCxBPCUHKSG$T@%l#Dy$m zA*3S(UaMEe>`|tT$qr2$v$R%a%pUmY3h@eecC%-DKA+gLq`2Ds6ihWONnq-UhwXV%DzX+8v?nBKvUSY>X04d^GlL93EeEW61thT61thT61tgY=$;e`8u~q<-wFI~ z(WfR&5X)h_Q7U5Uej_$zA6!Gf_ROQB9S zi%$I_L?Ee`m0J^0oxHdkUqR9h!Cdbw@wu~Vw_78vfIbaB2xSf%`_9w&+?gFl{2~%_ znw+Tda#^NCPN7aTM5mqszhhhKTV769)M!16y(W@#o_B|bs1aSEUQS-rco_O5mfacZ zeZaK|k!tH_vpl25oxoKryR_hT?8UHl*@xq)yjJfYAjH7x&AAQz1M^tdATO~MXx;Mu z@f`EAzXi9M!`O&TTNmYIg5_*FwXyK*?S?{P<6G_mwpn3sayEmqj>~IpZiu}XV{42X zqa>g9D$7c+wWv-UUIarUsDzgRn^Zx>9ZMJvIf|TC@{uh24bsb|goZW$W-GCTVUm68 zoMc$v>_{gV);C+}1jG7fRh?j1-vzj|&2l<<}zWI)IMb`R0%u<6A;e2%K`z#)7 zqXIlj);9rZ(O(-K2gDSBS>LQ3)xi4x&wU^f6{hvge8C61$XYCg-cL(vsPSehsTh*R zmBh&irG`UNMM?ARqzWOPN{e7TAW* zf&DqAf(w357YSSfXp!*CzmG*i>U`S0r*|cXb=7t}T*HNh zrL(v-4TtJXl@6mTxa~@Rsw0P`XzItYip3!bscQys($Eo_{bl^h=I6Qpc!sN2Ae#C- z_n#n~mc?AO@Og|qK{zdoAR6{O(TyOSG)55Z`BKwBeFmZ#&$DHj>mmcudgoz&1U5!5j}f-t;UoQ|E-|Q_c{)C&m<%tekm*xA>PE>BViCaG2Vc#+f zPO!lgoOZLeJYOi!B?c|dt7IZBI*=V(UdS=gEm&UYg2Y8PTzT#s65V9w0Z*q@QkE*K zU5HM(jp~z(k}^$ofL(OTjZ&X)B+3@m;lS+)-vpZ( zg%kGcs*@;*w}DIpD22I>Z+D9E@VAZ|d01*r%E+UAVu#AvV^9x!4~Q(!kdV2sw3 z+cBx8+*-Du5Dy#dmEF|*NZf#G$|rb+VA0n8eFZ;E1-*v-wXFg0?X^-9sQp~ ziJngl;^z}8k-E>JuL&rw_zYJS@=^z8v`ZcCtBo93df)rtvnu0KhxR3bIKNL9vE}PO zD7|zrb*Skf9E>Hs#2fXbaX_PZrd}dQ8mDO>=p}-raUg%03v@-0G|mYFK`#*`jRX11 zT+mAdN#j675CpwM5To)acz~2?;)Vp#P_w`XC>WeIYx-$HiVAd!8ZcJY z!>~G%JgW{pC#a+61a2`=v>R zsId_8;%wBwxR||#sG(>y95h^>N#f8F8BkvE*t7Cn2s}&m3o@GagvXneXA7*tBh9F* z(7y&w=l1Bb@@xn#OI5KBebO}GaBLj%j8j`tMTjCx>o~ zI7E5bt%W!iwFiYL{l|l>2c?Zm`U5gf{v)9QQdFLbAfPiqhDBXgI*4yz-%AJa4UBr} zAignbVpWpkC~%|0qwP8iR4<7vD#I+KEnubZjTNr5Xmq*GqTR`%L7*Ysy`f=Pm^?3{g5~nO!D_SeoEc4?AE}KTUizy;F3*oom5w5b zy{L{Hh0hd+n(MqiX#Vyg)zsdSiug524O+!Br6NI+)J+3Ho)aWV4QgdB$a8`usUZ~! zf>b0(k{VKxAjorqc$@^KA_x@{8nO@+hKGiv41^2l97Ki(h(I0`E^!0ljRy#L)Bu)Z zJv zrd<;GxFj+&#^pwii-2%&Ln=qV4Llt34us4=YWXn@L;_y@cD1mE0z>Lh1_@&ExXxlA z4o#fFmR|J37s|7+I_P31s)^6Y4qT9OK+kZBydSbqp7j$J5_?J-s66jSDwJpaJcV+D z8VZeJSc^EeIypdrD~;LY=mfTqGP8k4 zNoHUjLE5(K2+|gm=5-Xj4iZb`hohq%30%+%bl`_d+<0%pC?!EMz%UBfiRtY`7lZ6k z)UazsNET91&GywG?E(}@U?UUGb~bw|aad(}T}!vJ)$yL59*o3=m9T8W>Zo5Ua))lF z?s}g7t`2!MjJlS~E4I)fub44)so2vGy1WYaLfNHapj^nS9nz&Zi!?b@AA+ELC72`; zW+!zem?TltK#*5RF-e43XD-Mqf+UF`2nd3_B1os|LJ$D;kU*4D!Qi1T6%PT)cxb2? z=!2zr+#y8~D}pE@NT-l@^nkfQXv`IQKu|{y2tp5L%>&`*=3)@KhYD+#U_QYV1L@eI zx#o!ohvo+1f=kE-Od^C6b1@(|7AC`qxv7khLUcKV<8o6ekZlPzZ0w*#G!E*u`$Evn zdWaSoehX1)(GJROhJ$h!aC<{ID0eO#l$)x**N_}e$>p*5?Nf3wVMIhYC3nV8$u<6@ zJ+ z1F7Hv$O+ewbrzMBKv9ece4V|C1+yEKW?nnU#!!V}c9w?OY*d=Hn^-V=5HN6M6e(JC zHJOW%46H3ZV0f*2I%~9fU+g$779>T%fq8Fs92LuyVImImgyJVC9!w@2Z*kKC>rj&k zDSxNzmri*=6fBnqgm%aSfpp2>@!H6-rOWPfdC-_DO&~WqakM%z!S00XSfP9pd4LX{ zkYRvd<8*K%p2>{_iPJf00Fjjd5~nX12;4}JuI>Uig51I3lmcRPOoy$1fJI7JnJCB) z=4UBg$J)^xdAOrFXMU6*^Q$>$e%{jN*Rdj{LGuDv63yybqlQ@6)QUM;CZ#eV5v8Ig zaaUis1O``3AUhZt!0B)ai~)^@(Q_LMMhC{STFuRpt`&4>9+w%c;>_cM+>^M(fodN$ z;4ugxqAFa+Itkvl>sS|~(!5>A3T#f=(u!q)CA>j~g~bQ)8m?nS@upqJ+KfsIb{#9` z#|kuA92m9Al3NLNixURji&QL4-3f5WrTOr@k*39_vNJ$ z2Q-r)R=Y3HQlz`FYKGqc_vPVcGuBOFoH84$Fv%KNxpjuucT?r964xiIaCbZPh1ui3)Xb-g0%{i&&2?ti%Eamk1I+Q{6} zPw(gah5MCoJJJH~SEB6a!}c{4<6;eg>yf}jdb^<)qBC586z)Ib_d{Ld zEe{++gLWS08Q3P>;w`zaJEbT~;1cnc2e_AOQJ4DIHWhEl9bel5riQQcl}a89Xb%81 z2rP?`M&rT*06h&MbY6~Dh6ez88Ug@4jpl}jjxVB>oSw6RG4p_jNXDk}Fwi6$7-NtL zz`JxCCdP{0W*RFE#TX{)UF%~SD^Ai<-DVm)mX3u^u9H_-5+ses4mOaFP7(t%IFMWR z9-!bSRN5{)e#~R)`|h7L zvW&HCIJ1vnm|`=~CJHyBye-0IOj+=w=29k=&#JX0d?>(=HL^@-OSn@YA5(}=i{46> zRz9KO+v>1)>R^Q5u}o)fgx|5-onVCDF}T7kGCfuwBp@Ar$M-EXlE)4ZpJ_$Fe)=oVS#e!ZMBZ6|hXh-Q%mRR2$2Mp%tw@Vm@BV-eut zcUkao2*1mKtK&VS3X*l=?lzLQ*oNiNc88di+!4NYkuK0eR=U8$?_{!#$=2%{es{Wx z@VoT)=I}>VPjfS133aCqIQkS{KcPjf0+uJNDT|#|1asx*KLCpoR{fdUN3TR`?f%XD z)iHr~(qxwva%@q|+cvGMy=Rgv{$K;YOWV;cI}^#&=#)eYyAbR;Mf%$5N<0;Q6Pt3; zG=~~wh1!GMSbo%xL1=|~nk>zYC>*P>99ov(4f)crNS|ikbSV*PdDy-k_7FARq(dOgiXw6XoW}?S>zAc+DLK|QPt-eFo~l4y zXm`b$VWm-np%}r?HZ9v^cXha9!H>M8OCkM{id7DaxZQqd%P?s9#j&52)A)u4V{>d@ zhjTKb#;;?WBpl_`9%MK-M)R(o5VcmCngFn}abj!hY{ zz)@sB*VC^$j9n~{7u`6d|!5$ z57FH>D8A#P+lp7A30vv3e(hn}iUg$j)s{MKuC>-^HRkJfm=9~Ctw?ju_Zyu@l|n1V zk}7K4Ccu)4o zRN0{!oMVI7p;X}uY<4!Bc}AMCsS0PFo#DvU@o?tZ!wDpud3IV5^~Ad#Y&N49r34%W zo2?6uWUzI?k*qb77pf|SBUx)aQN$J_aixtTT5H{L6zovLQJedWTkMdEa57Diwi!O7 zX2TR>=Qvg!D@KafoA@_;i)@Ga5RV0=MyJAIJ`ba0fQ7?+GPS$qcNY2VWALb9hxypd z@i(e7H5}$cyobYlGBwf4v+SI{e|Uy{rp4^xFrQ3zxAKe-i2tA+h`un%MjD*Zf(tCp zNI|;72&yZ}WD!J?^LCgIOGT=|4)akzRf`?wW9n45VyZm4?ZxG7 zW45H~RI{|JcBRu`bA@J^wo_?r%C3Xh(i3c}s{q5UvJOek#3cz)@~E*`!4Jaa*uq`r zAQ`#dR0X|u?O}x-5X(~Y`%zd?tovnhx<%#Wm)G)(Pb&`%Z%E)c3>7l|EES60N^>NI z<)xwVIfbtA`B;6BziExn_jQ@*yCEf0o9ky{FI|@%{2q>k{=ze96DQ#t&K<>Y8xn^W zHSC5IafJB7?m-GSq}cQ@)ow5eH>B8I505*&@)J{4|AVTo`<3j4?s z)>n;C5~iU0s-jcjh7|QmcLzqN!VM|bFXE{a-B6QE>;w6tXb7%D;r+NEz9YEKn&w_G5)XC6*LfmT;2r3olL;TI z5Arvy;`k1yMNn~@@aPvM4r(sgQ@^J5nB7I$`URMLb$%-4Q)hRgwkOaU0f%EP`xn5J z)kn?tMpTv?8We_EG2>kfh|AJ3Sq3Zmz3$?LT4`T^4+nUIJ;Ob*mfv+6%Z9kz1H#~e zFx7ad;G>#c={`--p#mOK7kG!B6}t5ds$*HtTxo!!yvN?N@JU6Np84vugr0$dKn(jj zBK4e-Uso7`=d+y3(RKMxQ`Xe`=V2w*SK@gHB%DdrsEKsXJk|9h|P1#D3WY+ zqi{!ro~4^|A{81Ag)ve$dIX9+*tPG~aZF28I%t=BT? z#aX4LkqjZa0IYc+YS?A&hjQinqEq2AcVYy%iyC&B`&hWl{h+3IUoL$cs8u%%bQYF@ zUB)tti&Q?wy3@`9B-CZh(|QJDJ5BbDN%o~>EJdiv*pL4*Z*#BUJ&9l0^|<066uS7+ zs8yfRWkVOm%k|HrEyQW96uKy3xR?oDgdH7X2~jQM26L2f2sFbpHi%(Z47ACt(nRYioC$c$6-I~T zo+MoJB@`_Pi$nJt;X_!AF$B?xhCPlByQj=EuIdrTggnE7R0Q$Z%sy0z=79nX4zY|g zahCv156W}d)NU{Eep9uxy}WjZvo$i7V?R52Br zX~B9$0h7>70iA;p$MdMsnO5~DLK8|TrfTq1R^_mH1l-&g4 zItGSrhcj+#^XrX|i(eJb_`zRte$B=+UWDG{>+eyY5b&CW8c!p}oQ6#qzuU!}pe;NX zp?^SAsWkE=Xo?|PTPhfdM+2s#@Ro%c_9OJw*6L(pMzLBzVb@T>R|l30Jx{_g?Hd>m z6?Aq&HyJI68pAg*U?4!i0yA92w!eWPn<08p62;>Rm(>wi1Vi>ZxCUe$_>^+4OYC7( zn*C5Ib@(I)Rz&UsgPl>JGa%8GB^e`p1A~5fux0x@mZGicSlghw&A7|u&6Dmt1hZRN z4R3{5#}C4a+B<2nj_LC~6z~4{=uh#E&$`X&FB|XJEBgC+(I3A2N$3w!eirm6k&Oo@ zI}w@U=_u;k!GQKg>$7Xn;eCOELfc88HzsL>QJvmk-8;@Y4^keBT!9F zH&Y$qBd2>=_#|)J2hq3m3k^8i4UsZ_v)!RZ z1lZs(Zcs?3w;$74ykIkiX%jtc1--t0-G;SUhjkXQIILOBwwJLx4%p-=(MBR@28DP) zF!~rZF^pc&fQA_2fQR1SpQ?N7$+}8+NLc=~Ke=ArQ>RWtG%Yu~)e_lM0(eC^mg#n+DUycSclks*}O96iRkUSr0~CiSkge@{FM z$r75Q#}Q7Ajv%DD(zwbPBI_zoJ_LQ}V_KE>^>6t`0Y`rfv~yrz0KP2+?hL?vDX>2P z|5*wg3c%N-z~KP=!W4KQ05>GSb&oVBK3;isJJZq5k5}Hb?&FoaM;}M^KVI3Q-%O1I z6e%kp{e8EC`fmpf-v$~P0UvIMj;{)BuL@lNG#r1ERpUdcYDF+{PoNR5d;qYM9%;6I z06(3dfttYL#_b&W$p5sS)fxL8|DO1d{yqJl@SC+x0;}@AJHe)BvlgiW^;KZiAA%|G z*6V?Q@?c*VPQ5=OT|=fw=RrUdLccJg=9$=RiZ|Si*G}+eTnQD9%KQ@ZeY~73~8(n^O=tGoe!{(cFAe`{{(m!$Op6q@%>9^^eNIUs7IjVe4*SGY0lThmn~g4c-u>+H3v`Qe z4c{N&Z~7?94$OU*%i8xY(|FVGA?;n~Oz%|qjcLD&j{OMIPlZm?<)G-qQ>O8zS)_vl zck8}Uz;(kVU^?&%xXw8d?y~oX=eu<*j&Rf6AD-{lksre6%m>lQTF3Qt_xd8mCFChu zlrYu8vQOpYsRIy&nB*$tNm?y1HH;KhBu^daFOpoxJV^!)Q!Tptd{tnq=>X&^ChhM| zvKc1D(3p^hQrrrpF+nS(DP`iKB7`h>q(=blF>vLHdtRDJ*v7t)!^vG4bxRrQn?8rQsU9dN`zC1=<3`<7O7|tCo2rR5 z=-yG_M%`9QcO!8vj@BY;(CsO3tyb2+4RY3)=z|_;O6G#*fSCsimP5NU|5p$`nLF8- z?BH}`kG8Zo_7=W#{W@CN#lPoaZy!Vf(cZS+A|xAm1siH8FepqtShT3XDegKTUzr=ze($j7Il=Lw$2YJ{sMNDKHw{A4!0)DNnF& zPvfoa<7%ry^&Q`@CQk!>-H-j3a1oM>sn4)S&*MZP!!+9d>8*fM^<#Tj5S9_IyFZ^p zsv3Ir_V=L|CvI-4>hO8I5uBuaqjq%AA|&E)%=&XszS%oAgT?tW-xYO-*MYltpf6r6 z99p$APZ^H>Y9VDPrl`lFqgqHjkS8vP8CO)JHbQ^WsX2N&hg4V;HNbtPbAWR^ z5m-%3$ENp^rS#3vh>X!TD`b`*DUYKMGKrIYf+Bn*hx=mgNM!ia7+bg7eqRC&9=S58mTo7({=>tt^~w`K>*!E7&Fq7 z44^+uK=>pILBExNa3wxLbQp*kan73{zC$u7!!X?VN*Mty>iZ|Qt{*$~Zx~USslH=d zx}JvCcR$|I{n*p}xS{)TWB21rx*tEswc6N+3VLSgY?OKORQV0a7wZ6NHtI? z*2YvHm15yI;S4&?+Nl()=eCh>yE)mEIeCz>FeWo^b#wA323MMs`Tp%=&@;4?=wGyA z|CT}*HC>^!aQGD`dtTuF?Zy!eXAA9h(2e79kyYm=?m0%JYdjYGZ3!wvf5`$7Y~udZ zMyjpzz)kGQJyMkc812c|rNC%UzB&a)dy-RSPBYq*d=rraqdob@s6!5n_T+CTK&U6S z1NJ1&=EQyKlWbZ3&4T1@rZgaoVa&inEZ{&hMPXJAdFN zY{r`LR6ha0Xy*$we?^|gX3=!K$mYZ@fOY5wYvzvT1X04rSAvH;jR$L0`(}pA0X3;d zI5n@`;-i)6;tQs(D7-%}d<3mb3+GKs4?-407PfQVYeN>1k&T|dvZg0Fvz-1Bcn*$iDi*LSJ zVD>hO#2`if#(@0XawG-G^mLv9j(g%mIuo14U25>POSz3ewuFo{2g z!Xm9;68}yD3MTPn0tzPa|C57oQ4NU|Gc)Hc*~R}0Bc~YpwglS6$rJ73^bvM(`Utx? zeS}?{KEf_eA7K}#kFa>y%#D4hn7Q2fE!o9{X8m~GDmk?s*$;bHLqxzhz;(t)Zvdjo zWtQisidBl)(p?fP?v*7;-FmdL0P9i#ud%KY!>E`zVxq;zp%quY#EhE)-IAa{Sv>jxP@@%P@lCsOeUft0U3KXV*uqS%L+%ORT6v zOR!+%r|Pr>3r0S%qH-<4f{~x<*%B<6@5G8)w*(7I0Sam|tb=-muERK&dVP<+-g6vi zIB-wfJ2moYzkAR4{J?7W2kbz4iG9xz)f(M_b0=|-Xnc;m;*s3G-_AriD>X0i#DDYD zJq&|0G*f*(W8;XbJI^}G!7zTzm>vVN?-!NiA$}e4DUDj>!W_Zz`#FeJT1TbQmhh~d zOlH#N>@7t6MOEpM;xX8A1~?ygI-QZ`>P_VgDXn%@ zu|y~NO>C0rR{inrwtex}3C>h|Wd`?jIko=re@|b@=y}RI#V;anRW60Xq#FgtMA;T7yXCr z_wU@R;TCL;e*es!h1--^2I;yi)l+PZe*dJ%bkldY5?2NkC71>u!Bu(k7U0G?h);B# zWvz>(0bCTdL0P)tjpNF~9LXpg*4V?l&e1LWS68s^?W ztp?{*Q~sX`gIvwLh2iw-{7@_L?lmY==~zOhbZrfQnl z&ph(!uF6)d>h=KbZz_jc>=tTvx(E228p#efvj7hq&cs0bHv4uVehE-OyYWXLHZ8~; z`#&cXb{bxlvugr>Ad>)v!9oc#kHX})O#reg%yo>0dwVuO)GUOZ5joTkBW*3Ie4C_F zWweG!hm+q!%ET$qWb?_-vdA!zRdOlgY)AHfI>Hzw(S$IIlHZ@6_?ZOe9Ewe-d_U%# z9myl+97=`-p-1u0o@in7_IA;VT9rCQQvzAdDS-`-g0?!+5Y#xwt;MdG61qtZL1>9( zIV{D38czkYq(n>!#EN2Cf(4aN=5OStRJ>q>VwFg7=crr(WrdDO6Q?Sl+T1Gt|NdI3 z{M-DkuK=S&-;;5z+VLn!e9T5(frIXTx%2Q?^T@I0p^@gP$B|;+X}A%0DR^~LZ6w@z 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 z z#+e}-&9N1GHJB`ixbD%KRoVuX-6PS$qG7yL)g3x8KESN#Up*6{L$C8VbW~h2_$be+_~CZdv2iPF)0p2+o;<{D z$md<2{v1k$*<~QX$1w78x>WcfmS`z)nm-mx*wf@ALoBh+h#Oe3gk!{LL+zM233=m= z5u=TAjs{~1$B5B}G&g{`2qj>|XhTXEz=$QnW8C@>%)A(OZEZ}CSkVHO3?-T>S3psY zc2B^P4JtM?qbOCtT|Ya@Bmhh1586l_nWDStReWR!C&WSk=L8ur`U^5(^cQ5n=r72C zq3T9HvVsg4J4|L0T_L#5!vtPFfMKG+53LNR6yFRHUXmYzA8LO)o!?ch1xg+Sgs+!e zqjzHCq6{iUHej?!1PUw4g;~AT?)s3d6_@pO=cP9x;YGV>8?Hj@t0p#a8o2VwI|A)WRN;W=JF}c{{Us=5- z-V~~ANm&see##y6#O6;6^4bBH&_O5itZMaYFm`ZNs8=E#baCD*kq)|e>y-!xoyIOW z=z6}Lf3prc-?zasx`U1(2i}nMIXdW6Zo8y;)`nfPs_Qq)NB5D~LiENgkx}I}{FvD_ zPo2fk02hxw-aK{U$x|n0SPU9GWhH9#vedHq(N#9OF=yYEE!Dl^ayFHNn^N76cS9h; z!4=|5)|KCxArJ;Y!$~O>x$-*r-S_Hx#+gn>L8WhgPqE=CkRWfx|)L%d;m zgX}^?(NA{SprW7bvO$H*PTe4HNNeeU<7|pY&@!Q!kby~!w_Yjv#D?&`(+4D zs!EA=_Alsk_aGlsVZe$o<7%{%d6iq3H{i+7axO={br+NJ)Ft3(ajz=^JC3(v#%8$x z*jN8{SX}vvZ+|v2!Nu!iale#{I$QZ!xx%GrL8PifcW=&E9JZNrPuA22+aArX?jf9BiPV2_-Xk&C1+mvFy+uTOfR9B<>}-23*KPV^a%Gtl9WG8{NN8S01tWjWB#x`O>PVR@J=Ic zV7YOQ5k2M|ISj5NaE$0NyYe{=`ooS9J!WrC$KY`37|~;PO>+#oagGr^W>+Z3INxU9 z2eQo3=ki?Jg7atk=iprZ0){uP)6Lc|V60_@sM&WfCC=c}IgW+P-*=3#*l_w(4kKH? zP|B)ds6l*WDp5QRYNTl}2Rrd0^E<~g9qJ5G(3NEW8`){A#)vv5lNaTt(D z!wY7kYUw^(?&(eFX=^O8mi`FMZX7E-O{!Z?vXvW~Ga@yZ)T@7th|rBAeIB znj)I_l&#h^QFvC&C*dci{iSIm8_H70E6f^mR+eO~MsW*VP}~XL@AxY)7DHX3gh?>D ztbd{pyZjQvDt!4x#!h0syn2C)M8!q28($JxQ{C`^MsGDS_7biI1XneQuc!U_%_ zA*|5z?fjb!EBKCH(GgZG0UE;!zJ#!1AB}_!PU{E1f#+Ed1?)>p;hg%!li>^%$9;!4->FNEMbd*fPa8FVbQY@W5`dm0M z!Jia@haRqvmfi%j&Sp0B7-Idc1biV#i4+|~Wu&)HqM7Y))^h_}BLN{)=?t))qyEgi;q=PZ3`&D!8|;9QmI??Z3{dmL{IM7@k%1Fe7(3pq>I>rC<^&)TulA$QKtR!yI9aJ} zO^ki_Q$oEcl4X7hLcJ1waj+Q9yM{D73{dl=e*JR{xh84udRpK}q7+9i)Sc{Ry>xg4 zc1K+IN}NEV%I=XEY>o=(mEIZvH*QbEqU|N{?1nBzVT*tz3V}Qd7)1ymIn}z@ey93 ziJjjkh#%syIVDc>$Ko-2n!G5)V`|~V5fraDMvU0hkP(CNietoxP3jTAidP&XMr>)8 z4aF;t5hJ!UISj@tju9g^AAtisS>VVN-)B&Tvr~}4EPLOozoR1hh zp2=ZkMIC7L7j?jJQPZ@*cC6aZiv6guFCT!(Yw%M?6Hvv8f+w^3kw0pH;H>MdmVTV! zRbmlA$&hPz=_D!y2Fa|-h;SV+1$Q~`b~ag}R<5fH7vu=R+`q!UK!|BK!8JLGx67>4 z>s~-so%@8sdJ&~trTn$oMWCJ+ml-kR6P`|!);l93Cs#MMVN}dDWW=DRMu|G;+Unxn zFceAIRJbkJeK>*896PObx5t`z{IX5Q8M|tu4Kf%DaeAVjSR|%qQHI!!#BD9ThIT)( z+4{n4iyYPNdMsTp#cQJFqH%qwX-44wA2XTMl=U-gfj**T45505VJ!Va4iSk3Y^6}< zR~{A0lq$qB^=1+JuU!<%q;Q}23VZ9-oD6Ejdci{9LWpiv!Ng+hSlwa9@_pL(ykwq+ zI0QL*zMX%wK@Q)+en*f)b&Wv|UqXrccd_z>$Prlix%;kHEW%V@lwe*YhH1kds1)=~f6_4}! zk&9=54x9gOPNpR0WS0!NcJkL5pv$*Z*N*UC)<@vZAV(zzEn6~f7x`05zlUFIqf)3Q zwRxi4%HDwzYV!+t`}8(@>roR0Po9xP|AA&q&OI}(GK#=kkBmWUzkQY;_30`{ZM+R-xmXmCCQ)I@OxzNWND zp?31aMF1hrIKU`t7!4GJ-}p=uRZUqB>N9$8!8KWzSghn%OaG3`1QH97N}(FyxMQ;Q#-;rJFmNM4Ow*;}m2*A$~ZMMNs_U7%{@2 z$Wgq3wZ6$QVuV3ywlVlU$1!4r;Y#Q<=+rt!j4)PnH0abiMvO3|4*{(B!7*Zlk>+ST z!oK({Wr1|-J=ddxE4-LR$VnhzEaWg4K{<{1)yUPuz>1(8BQAfUvc!yvpd2Ia`rx+1yww%iMAMs%VuAIlFx|yR=D^wSsERN?zs9iH$9Aw$-No zlbBW1d;rNAs3r9$q+Td0bp)EYB(a z)Y3h4&SN>ESG%jq89fC)szoV$DbeY0^1Kf+H_n&f54PFxC-3Q+AQ-r)*t6hJyBA5I zq@WEy$BgQX{nYv6CulS*l#UtZET1rI>4p5vmMEI4mS#nzG;7)K(*9wwz9xDq%g)`f zVk1p2Z|mi4Vue{1RJ%(hNHE6Ztd)G%LEpvVgHTOXcrHh#nzCw>G8(QXc78$gSJ(_3 zqJSn@@(=Je38VQ{R$5gFyOwJz?9VtDfs*HSnMFV23@P<$30g1JyjLOvl2*T*jF3+C zOT7Tbs>uos+|oSnpuQU?HD*5%cN$j9b*UeBA42XighMKwbh*hLQ1|I!K+=j5~Ss^ z_efUJB(4$VVU85Fw8o%2zv7%?RdjJsOw8*?&Z+^-7{)W1DeWy$A zes#?AGJf_4t8ti>&`VZaE&VBeGLGelUhU*-z7IeJPpU;Je89Miv5I{3gU0hA{=_k% zOBRZJB)R@LLBSTSDoy*53KphkjDDRzwe-Jpj63_#v7zBs5gA%bR7&%f{p22vhLnVA zRnvIkG*xWp(D5AZP)v+iVSY|boKy*tjqx}y9&0E6(Z87FhK_5vtG%YIw|L-L6FXme zzDY7FzZl339gpIjDHdEl?8$~9WZgZ+Clf@rULRrOfF%kUJZ7P(U)Sb4eE%qQ$1Ds_`27QC+G%@6*Y}TA|Nh~5 zEq+lY8@IAL4XsHI6~|s3z?P?6WnBC=1nw2Z85wh+qnZ?=HZzu5wYm2w zhve$fNA0dBU1ViPE%rPqv)0n}ry|)SmV!krwY$c&_L@;%omjD)CCl?o4zh_p1cfLE z8*Mbgc1DICDc90TF5gIO=DuVBQthq_E)Tr1>L_Q0KORWqh(s_`)3skvaVu7fKX!bqO!X5RZ(m!CJ*-E zZoAwZmbwVwgsWFFdx$8?swda1UfRP>EzWu+G8$9ay%HIXiF&U@L}MJ6LNuo5+xa&e zjqx2*79G*pKJq>|!okf(yAX|?VS8fnOra1n09t0(9T1Sd0`)NiM=xnWQl(~`- zgdBOJ(4acG5;b=BelMELk2K0p}O_7R#{_ka-SS9_eAn2pD*ie$-Cd2*^CFJ$Umx zUXG1`R!+gP)=t_8$UFxvk1EnJ0){|REM{deVR>fwlXs?UeVUDcYypbGMnIM|XZgft z7y;+Wt&M=p(8QaKfU5{TRf47o^wco|YJR{*KxSP)RvQ7CRWesrJz9X_UtXCpUxXSL47=lU_&?~*gj%i&o29Wz$1G8ljRs}3k z9OpqL2gdauwMBJfkM9mD88afN{Ng`u8R&>7Z#aEL*PVg4j^i^JrYG?i3=OoOrfw%p zBl2v53h-kX060SCO#Tvpu+4NIQvEZSo?;kTX|bMy*%u&74lyJyi;2nl{A0->faLkg zA-BGMS#pRTaV&pKrn_S0#3Kf9e?ovMZuI03H{$H~n5<7eMmz+KJj*eZ&CtVhhlml! z$MW(9-agr=H1%B4a~;pTjc^h0V|wP<-01Qkk5`_7w}hlQJ(u|G`+iXyURc$@scpP) zpv32Jq>dFn+-4)hd;R3=0a8EthU7l-4at4v8=hA3_nXQ7YIg-zpdm-9}ja%lzJLAD2mLH^WI8^A_!-ngBYmI>a} zx=nb}L~Vy{lX&YLwpkfNVy!k>ZwG8FvUk8{S+*k!Rf>1rSg3}(gG)G2G!vjmr-%g0 z=CK*B+{Pu@K#EbBw2Mdx08$%@MpLI0!!YR?HImFsmHi{CPq!8OEF}EMhJHfJxDYo`bvzHM$;H3jm{W4dt$Sv2Ep8*C3@)=LL-R3 zR|?`H$h=nymnu>PVsyh7%qHURAT0VoLyzm%X$1uLr3%~ZwS_Xlh8K_iDksH_oPAgV zkxVEfgCX)7-}sdI>?C_(sbwdUSrsR9Y^f75wGRH|G}9VOeG%fT0bA&pe1_0v5#c06 zi^yk4SM`W&W_*gq2f)q|Rn?Qb?bvkD!fzT&~Xh40qOtovf8Qs2QfWqu15jrwAJz=(9-b@aTNQV@Aw z8r|rT(e2_m!lQxdb{#^ok&)r}G#R!m$UOBBQE*=Rh$tklMvAti$toEZEYU*s5>d$A zM?@jHkBCAtMYMn_n+aqm){X=mFuPSV+%kixGJAJs*hHQZKw%pKZb&dUD{erDj#qo@ z0kzO?sg|MF#5vkRr$GCr12q$zm(iK_UIR+Mz1N_d%8;r6*Q&kCfLYqR47#&yM;5b0 zrWo)|)aXHQhwp2_RRCE?L|IAZ;dL+$1!5Dz5t< zU1~4-?8d-#*i~}>Ub>6 zSBKy!>!7gTS!&szGCP-}Ur>#gcz60A?Q+n1PHDuSvK|K1rlXv!hjA>ne2DGL^9|S3 z$IHFzs8!BEpk_mbvg0RSyAJjwPA9OYGVHqV;Am5`SD__#Mq3l^=fGdx&Rw zDlGC7N_&ik@?eD1#ej7rDy3Zp9%9!l#RPZccHRo!C4?}=I7yYlOp-Kfpc_q%6^t1U zf#CNMyP}V_3K3iS;BE*vm9M4!ZwU8}l%D;D@MC>%2=C&ZzBk&Tmw+dbayBnTdKYJi zr0fZ2gn)?Ng}d-x^l&V2GAwA8g|m`#0tn-G9|45qJ^~2IeFPAa`v@Q;Qvi#o zkd0V6v@wj8mAWQlj-iTk_3fFw%VixHg)`(--9ha^R#%v_ltRC9Fv?uKQVwYRxbT&VfKH9|SK}dyqf7AwML13J3|OeUQ==>K$i&g5cwS<5YGX!&Ft4u6 z9FT}BFAEs-Ge;w;^hH>d4qR3+h-=&@z=i@ zhxUpa2b-1%W}6BHDh&23_3W745?B@y@H&l(M*0PVmxW)QFd)=hU64`nqMkXH znN#nyv*UD@c6NkDCju)R%qsQp$qsaacE^ic!A%&TA%`J4eDALSmNVQ)5hcvksaY4G zOMb^|K7W`$2s-FD(z71;zsHUA`Ro!Ahx9Ojf8mN=tV}pLSeuR;>GR}5)Qg6N&T!}q z4T~1VNTP;)F271l-Pr^}{yyxf({q6Ncrt-U{yW=v(nNZ8Jo&-DjN{4Na^(oKd*C&7 z_z1cgMv`HTB$XrG!-%@_j0TVje%kl2vB3eLZ&GQv%3usf!MH21WKY!W^<@yuZ$m}p5x{HBVBae(zt-$j z`&u)AM_1yVW}|8QLbDF`*y7fx@hUU4t65+zb!DqUZZ6qyeHnxm?=A~A$wtbq>e2j~ zliHO;TRRtR?OakhVurSIWc^;cb#{3*yNpciVfCEi(bt-Nos)f?%i2+@*_^_q%3L@e z7JAB34wTChm&y7Ro|gbO6Jz$(>1AzamR_`-q(?pD(5efda%*kTK(w8UuNaY?VI!*X zVDy%BY!H5Gm8D;Ol#qnmwhV}`K?jj&X1kNJwv{o+HZFj&`hfOWtLN2OBsn6^ zYh$N+-k3#<31FZ_pd_TI7LkQSiySudNK;7jsJ00E59qz!HynGj7K4GsV@ zj!ZbuR|mtcna;2$qCyG-U0%{_A?o7OM1Td3qFTW*#Q&gMcyMt z%-4=-CisV`&EAuY>7{-w56WJfWp zsQywsx)OOlD%rK9WrY<8)R zivH9eDgM9V^rRajEa}p}{>CWt)nV>a(F!dtSB^6yBzJ7;@Nt+QSfTfE*f~%+4h1-q zkMz~$7p%+Ur)^VMc>v_1F(KL%ikS&?(U?#O#>N!Lj0&}rA`S)yh{KLQ7%V|o2_b=v zn=2tCumsL{rkD(;T@7|(5w-&ZlLxJ|3qdCr8!`ebV1=e7Melnz4@NWVk-;K&)Dw=3 zA9`dK1A=62@c$?f&~r|FzJTCTHU{K_7h)!~&Cx#g7G{Ej-<63S2T|aNwbNo!Iqv=B z_&OI8A$0@AhNeU_+MLZT#79o`lf~E>D9A;42_wiu*?D^G1EFC!;Ce7pmW+z(5Q~`( zQ38P&7Uhx9Lu!>(kE=S8M#MoFdvo=90hAqI+a~R6Tj%$-8%|GbM&FxvM}1G1D-;X$ zePQbGEi@X%*%8zCTYBjG5?Ea_ZNyJodnrT!r0-1F8q}H+&1T3dV=hBTFx{ugxm;t^ ziPoT$CDjP$h9|kl`Ksv zx44qsvi|9|k_GuecIL7C97|=+1L!6h8w^0yu)IZ0GYS+eYHCIi<&!EJCs+R4O(`az z6#4J3H=HhSMjz%rA$>SgO)f~TKi&9Bb<3aGh&H-f{LnM22R?~6h>>rv++we2R`1VK z>$J7#)`N{t0=Ut5rjo4J2G}dlLmgJ2$Ytwr?eJCea3W*J~!OAIUwkahod9-gbc? z%Hi_zMa_Pcp2(}lF<9@r}pJ9TJG!cHAM-_F0;ojQE)-li{Y!H%6eOkdaM;8{QDAneppPAq5vg4r^gM`kg!YH_Cy@#w4wGqb!c^lhaxws(Y7 zCJ~wxy0#&dBSJGGcw-sDL`0}Z1lI;3__TwS;*-?2SJReqCt)o(YZUyda3ZErNJ-fF z1jpKc(gZeOhS16&{Kwp>qk4qa%B=G1-CCK2e!W{OGs7Q-7?r@88nr}bx+;t?CdztS zlp(t7+gicP?b}+NJ9WBRtCVl8IW}tVojP)5!a_vSq2m+A1(~C;zPayC9aIg$i7hr1 zg`k?_EcV;KQ>Uvuxbbm|&m_w1w^OGpn z1=uT*Mxov(F<566&?ECqYe2@C9V!GIvdW-IiymQoN#t?+P92U|VW-af*3E_ARoN&` z!yg&I7d79h^SqC43I2W)u|nSvWp8rPb)YhuT(Gw>%0OTT1D*Uq*tZ(2y=3&$x3k=E zCMpGlg&X(_4(KIG<*-l#5MYgvppJ>S1WzGMaLMz>!UTJ22LZ#%CV$RiTz`!7J>ejB z%V>)>L@iGI_@x7ZM!}Ak+Ynn0q?a5@4*vD2EP?_Q#|ZO4VRSKYuH-;t#b~G!ek6M% zoVBGfINtHILCnkRHaTSeI|VBLU1^D3C@F`|0Cr@qZ)v}bUaUy^sl;9InhM^>DWb@O z7%TZrkLhdeT*_m{^bjQ<)3gpVhEC4AFbg)0JKTGf$7am3)(eLL$SKy)&w#^0pRQ{|; z;)R+6(oj2?OReLCM4@0FMlJokU1x8|u94k&oH40QE!7&;c*Wd?n#E2=Ryp1^1h=yQ z{$>}r)fRr0BP=gb$i3u2?_M1DN~Cu$0=*I+o6NIs2M1oyxASk-f#*9uyLD`}r+P#O zo-e_H-$`NGKH2q@i#|F}URF+v*4xGg%fmo}u6%LUPhKXT9QZmOGRr~iq-#5RKy&l5 z-I?#1!JdeKd=60vzPF3hQiJJ_j(3W}ATp%}|H!ht<9#NJ(4?KT!K2`=+*&q0wRBR; zh9E7&QH%QZ5%KUl0sk#dURD+9M6!BWhglqS$~WsUd-o85DBtKU_mppRm8}nS%Qw2p z{p1^5<$m(b1`RG>?~B=P9Jf;YNx)^aUpT>x^^sSds(JpEPG0URF=*KmON|HaKjf2_ zyXdNABm&#u{0~n;U3HGu0!nJ1yxf&Bc-v~`IOd6xpP}_o&)moKazA;S|MVa7eAUyUhXC{;&v~(tn3hOA0mv#0;~J**Jkwf7*1aP z!ryeev2Y#{wf)%wN`a?pV4WeGxsTpw z{Wf_meVnr1CvQQ=4!S=}bCdZ@Y1g^gVWjr4(vjmApKu4TNck<_@v=VwONJ6%6f1(> zkrx(S*#7JU7q*&Xn6vOsqYyC4hB3k)zriwmPG9WkfUQp+~m>RrfE%g`W8b(c`Z zIAIxMrMf>Tjyy38^`w*aS9V(e6ZtUVU^pp96ixW}x`-00nvAq@R0rDUFVE%h6{yRqv78t;10?ti0q7Zv#_67YZC=#5QV!)z#>KBFhU z95h7n{|+~LcQ+Uvh3#ZBxBAkIu=HP?_ec!7EuHL@-ZF)v@{wGG@#5`2lb-^f&isy>z{56Q)k}o`D0UO_7tbRxI;x|&ixEej;o$# z+R0lrC040p^~4+&bj+aagKQzbmh?KIS0~4DHx%YhK)=F5G7A$)?#;ctu9Z%{A-D|E z@(x&rj@J)+27!vvH+W>4JQ9tXNcl{bG3s0Rt&IF+h3IQ4N|nHu3f83;4(jFgucfxu z+;E-s+UQ)*73Xrcw4Tb)vDdigx^u_dmdvw_gKMDY+xa&;ZNhh42pXnME~7$VN?4qa zn0D}G9kY1@)mbc}vQ7Hye=5HK?`@Sr5=W7?W=*Ly+X8VBT_q!|QH_`d|4OJfWhpkK zDanQlP03%ci6#n`dY}WY+B9{!gcJhlnQM>Epb;`XFxRgK( z<|BnQ?)g42Pn4dE-Hk^ng!R&SioWNncSCh|p+^&Enom{m4p_2YUV`}h3&}=_TBWXS z0uAC;=6>k8sCsQ|=3P9N94CVJO?>x-a97xZPE)o$x0)f?%>0T}U z+Eaj<;Bb?I=-@oU$7}~g$Hiyc#2dGkE^I?G&Lc#jzv>5`vnDuK6p+xe1$*mNJ~d5* zOMP*|=Oi*5M?k%p-bdIKKu9#OcpOf9vwp93*$wXh)E3lipql-h)Iz_+2>8E#XUjm? z?^_3`@A%hs7F>J8dlzWHJmDkLXvf9_I}py7Kpq9onT{pDb8G@z0?EbvaVTpUTuUIC zkXr(o%@Bs8v@=6USVDrW5e!Qp!-9Se4q*vofN2S23T?s`kd7sgzQ~`PwXl%i*Iwt= zoZAB2+NiI+&ZQyF?6)30vjj58FK*iS8VA<6z&vAgYlg6j)7HwT@LsSfBd(u!Gl$`kI}&1(HBo-k`@C(lYrB zE?*XAZOr#&WYdB*qxP`+i$Hx4TQkZKEXzFW){HT1&EQE&qzPunur-6P3wUL54{d7( z_JJyQOT@G_BYPgiL*JT#U7#XJRceAAaG5_wDI>rU;BZGnl;{KiIWab=YFvQcMsl;( zxfwyed*$f*x9l{6Ix=#Tlzs2sXoDzcZVJHi zT{N0>JF}@^Yp^`*aBNI0zOJKYxh(=r;R1JCa!pULBMaP!vJUNem*_al}LL!+R7*{gzjXM@P*QZZxX0Sf< zTd_Zc_4a5+?pGiK#o0IEFZ#n-_bW*4Td1OKI*7f%wS6F~?fI<+HqNHDR|PBbM_5|N ziu_l$H8^k>cT;?c_}CG^(58|`jU+FrsV{(K8`!8{j+j%gfEd0(x(=hGHn=G(vxUIl zrJ{5(yZ1#5U@0s3XZdgn#(ZA{&EG{K^N6SUzKC4f1j~y}pWByk0i|%mofBB&Z~oa0 zr+03qy$61C%K$eb{3De6Of`9Q@k7tP(03tZz}F15;gH)XS`s^j9^7_>5eQ%vtnS3g zG4{{Tk6EN1*m_;8M*7U1nc0)~ywHtP! zLD;Eq^>|qCZD(FDPwxi>`kqs_^9c_F#kWnv-oxRp15o@}b$IF<0#CnNHZg!l0{E>t z@Xi2!bq-t(;Qcx9z5uS|z!L%dj2w6}fWI>f9{TylC+;gg4GO7cO!pP99k{P}v2H)R zuQ;q9B^2Fmk)0iA5U9!dmK@r?JlaAtBj?2&=A`wXwk}-T zYzg_|_uS-_W(G9GdsqZ@WF`mSAK}05aB@t1%YX5E=5p};5q{L+mOk!u+vOU3zr(M+ zmu0(<-(_WuzsqP``&USN*D<4KhvyfEL)u@Wfj^COE%rqt>ZTq1&Kr$uSCI}AaVvMII09`a`KuvEga& zI2~y+fS^=I)i!IpUWUAh1|nbIyB~n{U(8%KlO3$Ust;B+WisJL@6lK;0X{E!l>I*L zLi>IE`S$zdt@y>pJ<`UAxvC#-+`Ai3;j_X)LA{-5631m1T&>>2-zc^533S+tgFVQn z?YA_lOT-_ZfFtIl$0xQk?~VP^_cNX9zF#=R&D*B&2sb?ncBzeT%@u6YxaYt4J*GSX zzCXg<7Fm-IPjL5=J&#XpWBD_AUfb#WEuCE{<{6&gf`X9$66T-lm%e{O>HmK+1@{%7 zzB=`{4{*IR0)j-hl$GE5>@AQPHLyGb8y}2EFhb|ZG5H8)$y$wb7Bab|oh6vGbCq&F zvzQSv19R?Dwzjhb19`4e2ARba*lf|cODVLo?055fu2O=EhR{m->UIeJB|eSPR;6vnQT{VL8uK~0%(wuLpWL`DyJa)#_Wv|QWAud z1-0}S*rq2oh8ibI!mzCuc8g)bA*_i(0*-OOGVC%zt5GsbNJ)-YXC;PX9jhY^+b|p} zxU-!$(U_&%)t1e^n5HSChTTILvre{?*_4f0I(c@_VL_A{x~$S5C5LcyvrWqd;Wu=x zyFp40;Ru!pUJ!*qnIm7xF2L-NUqiJ|W=Xv;%lsx`oZjaWZrG)e2d0%+OCJ|g?21Wi zN4PZ_erxFgegaq9*maVjZRkA&J{R#E~l+;_l3esulV?iRNGl55R^jVHACiDPRBPPo z5_UiSy7Z}OHwLFZZ!QUDQgm}1T#~KjnOlDne3jp-A5e7% zr4ul@r3u!ZlvZx!UiZscn4skxd?-|hy^C0mm{4K@ZI6>m zs=+%iRJWVu>q;qAxBnYiK-HldeC$GXo7tquQAjBd4q?^BIR|GVL74x$TKIcM(R;*FTSu6Ubiw5zkk=*}rFniE>Y$ zi0SRMAEv+NM01rLOA2cu!rXgZKwWAXP7iE^2{}(=zHoYABOGSYC4YTn>tL$fW~xqc z@cVC$DIK>PGKoKf=+POsg`DwJCc6BgGL3M0hkzv`-3YUHsbMbir=jUiup?l}Y8bC; zT{6rC!#u_xKi8&Y^^Nf{2>#l-go9>J#@a7~N@fy>I z+vy{gE)L@%4_-4>-uW#AezOvcP4DL`)mg#r)0AqGpP#to`Gwl!&QpgAi)%yd=HAGe z_>AW(d3h;{_0yF22o8wmCoXx-gc?pb>fU1M$;O-=YoXFTx3}Y>sQcNYrsy>(g`cJ* zw3>9lPh3(Ci=KjRCAtJw3t#LhCY!wN%3PK1xtlE38-V+m;9|NB!h;fBn{tV!KygdF zXyp(TBOfDeSKC~wuS&8l`hL1r4uM~*E!9s#%caVg0b#~?Px+HWP@JLEk|}sDRpt@d z4>F&x7qb^r{%FxAh+yJ~uyMc=4MIL8&QWOnzviaIiDLs5`VgkX!;n>+eF+Du1Imse zZdLRkN^JUMn+^1s;O1D*#W zf7yoV{6dn1s0SM-vLQ(oY?G)h zqvzs4WTjxujRe|R_;BySZIqF=`zYgshb1go1(fbvuD@LahzsQs@a4rj}kVo!NCF$8p<;OC{A2yD_#GVyk5l8HD3Ji2j5_6vyjZGHjS2R!s< zJSj&U7tWPql3nna6`~?fY@9O-%Tty(e4H~2Z?m4WQkMAhAWGrBVP%P<%sETp^^7xC zO8Ov6VNj+laWFb(DV!1*C;7nn%7z4w8x>^kd1HP(nsl5ws`2Qq~e z6bQUA*A!9GGU>RWff2b0qap&s8=wJ|;f1+OW;3gutiOMrP*|?xfryyvE6@nODnKeFPb7xcX*&WwWq4WTlL`o4?MV9tWhIrz?MQou38kuooajfPNW&HdQ#pc>vJ+ZQw<86kThTnf>B2W!w0wKXlB9TC<2~KsmZ=WLj{Qbee+-G2#^}1Wip<97Nv=6XfKQUukdI-jfg>)i&dk?(9c(r1l-$7! z*_4k%t%m#vTa8WBmD-!!2ED}%T)yGUR)bh-7sAq8(P}u{5iIl?TBL(m)*_wAvK9-D zrcgh*hM@NnJ4t^|L(oeT8B=8+YzUe*1gwLSA&{y&*QD*SxkyoZi*w@15OjGD3&4&& zDocEoho(A8*5NRUY5Gn(l$z|tp(OOsM3Riip(OO3)GP*Vj(a?`o}x_CLla4|HHS)} z@3h6T^ueC4*)nm581SOi@uSC5wSU1oP5#r5_xf4%r{HJ(qyH6t)f zx-JaR>7Yh_i;!sJ!jHzB+)kg}$A}~^G9DO0P$$FAPe>X`l5)>Z6m=2mq*23J&&)V3 z;7GD1E#0(oti*e`!#n(!=%yiiv;zyV!$U8yx_k?9~P%*_;DprD!MgbH(}6T z$@hD-q>)eic)h%!g2QPAo^PypFd!&BgEKKdk2f$B!0+IjL6^c5peN@Pac zM|>^O6zlrAy2YUO{Yg5wkEv;Jc8+~9_Y`DV!X_0w1?er?aH-EQ12y{vs;0k4cSv0! zm~z_clhF8s8;9WmcZW#fFuX5S+Xi16<1pNJd-fPN=z((mDYR#LDxoPid0l5#i(6C^ ziWGH=_DmzdPeU|9QJHL!{Ko-xfWuNl~G0TVMd4``}4xBiW} zk0awA(D;U(Js8k_)B_sHJfM*x4QOK$s_PwafR!z%n34}@k!Bv6KroYhn3*z{fOEhz zyfENhG>S0Oy%}+N%;^HGn%{^Kx5Y%C7$Zs=ucDRfkuCw7G#4eNOTcPQ6c=4hvnWoQ zA<&y|hvU+C%5@%~hv*To0GyUNN*x1S#OrUa~UkX4C8!(}Kp;0PKzE<^7ER2nHKpUTv#V#r~$ zg8ipTI>D*FVvZ|~E+G6$B;>8CN<2%D5h!M)gDu8J(PrFh)7Zs zK9q#kU7GBPd3wsAkZPEP7~*1JG|-+7(EcX2;B4qWH+n|`+I)-zKlmMpdCKRxXK(J1 zXLEcNUzDHyqyRf-wa(DqenR)T@zy z2trW9H%=8*n(yOCWX*XDAVod~jAJN~QeosqLRp1fDO5)WoVc-xMifg?d1}?SHaYdO zQgdE3sFsr()aYZZz%Zx*4}+@qgV}wuiF92IlllG!nv zQkDe9ny;{m^-kwNdSPow_0CikJ}xY}G)6;pu_$AVhHBC&0z6mU))m*M72`r3>N42Q za`9C&RE~H%R8RLl1%xnBEV50M&{45{pik3ssAzf9?_Qhhksu#eB)NVLC!xbCz2`Hl z{OD;n?N@5#9s2&cBk0NH^{gG#KWxrz-`2IBwTg7Kl`YttzYDUCy+N#Tr3HJl279v# zdvibR4Q42P6hAFpxpz$v2_0#o6%MEL?v{Xq_{ghUAKwro!r0s?V>3QuOGETzX_jG0 zmhETa$@l2W`T~UvkV(R~#2qsA@g>iZ@QycN>b^tX1c!HCcBl&vfroYp4m3N#VMGfl zz^ISUd-_9ia6=uQxtqfl!9LHc!n%_g#)EMQwRRkvMnMyuny=8#OzP28mVNcqbEUHI zVp1aIwiUvoilS>BtkApMokP;9yYu~dcUE)5)>h`D(4D(f9dJ57&qt#<8T#}s)z~!x zv)M$qW7gE|l5P*f7zxVDdOvWIT6iyp9pZt^7RdB3}x(7f{6GY-VO@pEGLT;;vU+{E&^%Daxd{u25c zey7{XXNM#G?1%vvuwIg zI!iQ2c>S>+5iN+o-Cl=?XhFntW1T$`Kk!@jullVosw1y2DmkyOE!G!mdAoLL0#~DW zk#S1zzsG*t)Py@s@Oyr!V1ggv^a%D7wDj

    L;$z=!-fc@+bEwjY)y2{)BX|{PX~+&Fn0=%jky!}YwOH6?hLOqf7<&ANNEF2 zirheZ!awHyJsq$NFuIx^x!)CO<{^`9Ci!&0MbiX)4CICvrUNERC{rDj7INwJ?;26+ z`f;t8BA+khC4M$9{Q{BlRLwV&2s3T+Reo>@qZs;ExxJhLu?tKbbotU|GbL7?7!QO@ zmM&)SV9e}CzC^}H((Bra@^8ODDPmC<+LPGH0Rt7eUn&TU{HEWs6)XhCuQb81S#H3@ zHx>S}VW;tkp>LG0X^+9h5_~kN89O+%2Vt@VpG@$=9DS{XGTlMhNi{V_6qoe_+jxby zXCjHm?WBUYUhy|Nnt_+kMEn?nVgI61)KRgJQE#cj#H^ar{pg*dTe3Wft$KG1QA`$@Y41XfDWA4b{aC2bqhiC7 z9u*swQn-*J%_i-0bM2UQ%}V(1$j0d8wD%({xDaY3xsCAwYHe4TH(1T;`Pi5)NBAVz zgm=xx?Vxssyp!QMjAEL$>MBW+DLRw{UY$vjeL9pRop+6atS3J2DT=1wrd<|kvkwyP z&baKdNW*=QD6F@Xeo466HARv>*mG9%6mf?}V5h=_^;pUFmwVsDPhaT`Oz1ZvF!@_= z=!)k@I49oJhC%p~-vi1N(m%37iH!%B_0UyPm?oqW;ZMenGNE+)le?PA^nv|G^BBqF zcPQ;o4v690KF~Jip21&~2~&%Fvp@MN-_Jox`;(+d{^W=l&go%)vY3+llaXc~8q5a7 zq~I^IvB1>w@l&ssT1Pu6AHO{*8p;*!t5)xDyoP zT*nGUzDB^?`O5uVQDC_dOyPaeiH&@>So3nQBsUra7W|dxe2qwQ?Hl8oaWdB;QPl)jV;`m{FABR1|n7Do5ls;B+Jh zKmkWH97*OLi2m59wRPQ1(qepUjH--SN_ zw9uHOxTy^rhXwt<&nvbN0g~p#v99*=ZhDhgMj>I6KVvr3zzKTt(TWm$%5aMLz{`8Y zL|tTy%JKTs$Gw$VLZg1860qZgoMM9AOeyr6xO+K-rt(u7%1`(`SgXk4DN~Y`oNN^# z_ubf+<*!~OkE-3)5^#RR{^}$V;_zMxLH??snCB!?37WgRHIq-{p*e90R`(Xfn(07t zH+Rfr)>j<6GbwwRprNs{RCPMcrJ8(-k21mx+gTuBm8utE83>uIT==szbFhcUh?@La zePzu7Cx$<(FZ|*!3G(?IeYHQ}i#S$^jy)ql=r*MK*^uT1U&Ik27lXZMsJ zF)8}9BSOxb4`<{fMcJ|UdXhMw8Ut$AzG`QF{V5nwOnT)mTx8)GQcgLWk#e$=O#zHCfos>g8p_X81^bTunViXd-_B)-iIfl~_xO6s^RTQs~4URxNaE zRV`_J(AV>`cy)EavVD`_RQ9NOD(jPL-y|ltZ@!yg{VCWt)_#;rHI(;Oti^|o3u|rr z^~tkuT|Oy&oA8y{aqKH!WHlwDcNoR=i_y#`Ns`Rqp(ON`MUrgep(OOkYnC$2M~|D? zQxy5iB8dv%Y3E|LIM`%YOW;j^z8b#_V4&AlLA(Uj&+te?8BlG#;GML$@oy zzh+%=;}#P$$9moV^`_^653_;wFj5qt&f8F{tj($)1C`oEMC7R4D^6kNNwVoaPO zm%7rww+flsAUtf=(Htdca88N!MKU^{j+TuYGhocbgI{Yd*`mlbQK&cUVzeyg`1?kI zrK4lwE-bwTR<@{oD_w8cL}qHr_V+zDW>{VF8Z7s>r@`lI6B!)3}`SbCj2 z0~YpEF%es?kr>m#QPJVWmn)iHe89ttr}z#%z4)l*C$$K_v}$ktq4CIkUL0OYKx;6=%Jz2p!6 zcAg`tP;^#im-+U^7uyh}sNpmpfUYcg66@;Ns~(vWrP{F@94d;I#5Pv8DW?l%8+G1 zu%8$jjJSfY7%|w1I&p=*uyfyu5m)F7JNHY8{Az#L_i8Lq+`$6~IsxX%zuot0gve>4 zE3V+EmB$rZWRFeIe025@?WdiQt zIWoP);8@p}M+W+*s-@(pj4;dj$e_s1BLguJRC|@nUI5LR4M+S25;WEVxySyG53gwN8V+2#KI7To7 zrHW$&6BQR!j8{UZBF3pZQY15dkzb#D+wSmt(A8Q0HQRQUspkBK*hx!QVqG-0?ZlKy za@+369cM4tD(k;y+fJ;|h#qxe*|t;55~8}&TUchd2itaHDG$QZTR20{Y1?nfnVPn3 zCubE)oLxYv-nLx@v2Di>*ho#b?W7x{Rz#<_)Z(R)o&aDIG9zNz;_EzJgwte^41Skq z-a|2s-6HNYX$Ux!gb~xIrAWJn=Sy+fDc87E-3JLb+KD6$ABSe_7)VAeMQZOu3L_?w zq*3NjDU8cbT8b*E4=Ie8M3P3LL!~e-8>W;#*y}VZyGI^f(E{|0VC_ZUvGLouHLyFn zVl0K|>Ysc$)-dwlpPY7lHH}OlzWO;(b>geb%vs|>HOq!QsfM}};;Zw7WpVjo*Cxef z<}$h`PH+25TpVAmF$LG|;IT3HllY4<5%Cq@9AACh>ldVSd_{^BU$GZJZ+duAxtNm2 zSCM8On&32(Lj1&jg6TItVn=~eg7u&P$fxQ*603QlIv_6AV8*;d((Lo_ZO6R%c!;47 zj*K(Ko_U<=5l-U4_${*7f<7F-ZJS6Bmo-vETlEm1#zU1kt+E_b6Sst4C_72FDnwnm|G*upBIVL4@A^Y&X2jW7hHzO4^PL(*sLO0x z&CeB!lP1ukzDSgBN1KkLv4)NEffG`E)ECM6*@PmVoaAykN*B)UQ<4orCnwLg#$OHW~yKL$qz@Q;+}O8UH9JqaJA| zuO=N#iIN8nqn@o|RgN+0i5ep6r^tNEQMdVKD55T&<$knHs%8dkzKJrXX6Vd@|L~mV zyUAkNd^0eR1O)~mOT99z53a5OvduS-8MlthnAHGkIOW#uztrv+TjSz=Q;o8?e6ww(o z4kcmqBa$?b97@6%YtK?tNqv-s(T_;dU~{Mx##pudiTU%$I%${2<18EjOwcNKW6L|lZb=v(PMg8H2!L>Upn;lVq;*~dL#ijal zu7gw$DAhe&L5*Bj^HObhM1B45bwnlj7U3x(V2-fLqshpmxRz0(PKQ&4q58GqO!`fA z&bVv=6rBxcVw&KL%M35XWvbMK!niC@cDmbygyCXfXLRyQR1q<31x(E9t*_!rP?|mt zSTvh`k<0$w=KW?e>!F8ob>Mwwk8z+!g4f#H{8HC41iDZM2*%6Pr?=x_DNxix3fy#4EP`6{6}M_Hw(=w9{K z{vRB`xhFTubLKU?4zId2`5)aYq}v!O=Jv<|x+q zB+nUe>#r}8^zXy-H+PnI{VUBq^MasgB1d}wqpOXua`KpF9%%{)1x$mK1404kXB-gj znmUH00)nidplS3eK=XKV$K+CINw@++L8I%Ipm{vGZF1FI2|)p&pwXpE&^(^pGP#sj zMwnp-OVd~fAPl(po8}-@mN_h&gAiiLsEn{`l1o-qgm#p<)?Kl^8$PhH@Ia0XrR<2cspygU+ z2pY92;=kOHO4BJGsTg<4(xnkZ89jKU(u|8ossrOenT2|j96VAH%VPsqZ}pbssQ3qu zRK1aAa3+mMDsuKnMb3SXRK2+o=N?|S9;u`|k5r71SFtmp>ngA#_MPFYV&6ToNW)iG^wUEzeH=z@mn3P5?@$uP zz9LDZ+@U0luy-s)O{6E1>&+Nf{zQ@n!$YMo!rr!&7#eUKaj$)=_3^U((hV_%V^vG>rjFv4#2$)0iYJaO|lnIAo4cKc`cfszef z!^WcS^+m?Qh?8H2UvNq5i!H~;9CQ&MzYbKL`1q6t?gvNo@SZ%I7{tfNnHZB?-SP1x za~YFa*zoBuadCWnnJL&{fXBw%dHjVJfcThij*qt;ACuDYF)31fynqkrLJyDm#gsfg zj*R*`eY(rB4XP6xDsglM5 z&M?{V`Q@b4P+XueOb(QtgmTqV^l&rXb&ABNMzT{%oaa})^&Usl(u$WQ-uT6;usvf7 z5L;wIzjamLFsEKr1yZwVPvDA9RCY+x!`OeyDG_0BnXkm-5&(W_RZwqr^|e1?w3zB` z+XQ}SmD9fx7L2Y6Y(|Rw#3&3{l)c{iBhQmaFF3(rmU_5Bz3q1A?|=|8uvibzetnL$ zM-CFFH=JEz0uJc&fxw#Wvn(emkC>nHcXCG3kr?R>=Xk|It^6HadeuC_HWP)Vx9DRy zC&6?dNmJ3%NTNE)1FtDyDd62CdK#G=u?jf9?1-;LgxDiiqE^5wXc}^gK^~l#}E*Itpnl^X{Vk6F$di|AihZUu8m?qyx?R# zN`s@a<6~`CiSt)F?s>LgusOq=RGZ3BIs~^`ESVzsC{z@I@%ntBm@x<+Jg8~1!h;&a zhh5W2Ze6+XphnmZVYYQ1)CBjSM)^_;plK9qD0Unl8{C4YMN!T8ih`nW%yIh`kx`WZE@>&{}BrMg@w&=8a>u|2f zsC)Pc(r6lbxM_I!IWR5^EUMST53%+rRS~D&ZZZ56<=}uEY3k|-9)8GZCo$4ngnQ1E zhaY08kP_$OxgRysF^? z6NrazGD|VZ)g2F?GHjm@+(YayadA96CcxZjJa9KH{=x}BJj^%8!z1(uaM~3Kj)zH+ z;^E8q08|fK^kPaL4@X)}Jmff$Wy1^c^2HL$6tDxOh5R~nnj{KtHNzt= z7}@Eh#3dx#W}^(H=uRyr3X%4`ZW>brd28Rn^w*+j6`<%XT10hDImB%prgM=Nl_)n| zZ*^h4-w{?JcRxsS(fQrs_0=l30) z{XyJ6=tdojDQ@&qTxXBTJF6-wt_s<=4406Dr!O|qu=0$ zY-K_P!%vNqpW0SvVTB3N)*f=ZTeCyWXqYz~LmdQJfZH}5vzI^N0 z(d1(&^peS?o>JEGMd}6TUBxaTC~_9GYVDVxdC)y?@)jRugc&y6m`JJSlgGvUk2(J{ z=CIbwVc8sn5RIfPV#FM-n!{=@hn6`AAr@iE90tr`x|ehZq`0UXfQYO4ih;AnM~bWU zg@ag5j1XF1*mhM)wWN!{Zp8YbfEpLbjxBKOEhdy+YL=W+F@QpKbg zS6_Cr9;HE6*@+*>D3WTS`C=)Bf$JnwKIH?XXCxFVMaHKnH+5^}B6=eZ0uiP_LT{fQ zAakRW#p<|lKA6JHN;6n&BT!Hv^=sPlwERYmnC^XVaunFwTMSIBxh zB=$Q677>z<@>L=E3gxA7uPa>Yp_qOd#)@T z_ee7j#ph;Hh|kB!sICYnPTZ_@Qohl#r2N`0{@ZpKrk{^Sr@n3lk=ebnpuYdYpSco}dPCuR|y0k{9!YgF`<8 zERt~WjX+gwq+H@areWm$AGm}s*cuZP9bsR^g={T`t{N6}(o?vs#H8tq##}O{@`7IyDkN4tHJBWQ5x^qa zKFQYw1mRgI#6~}wVpDHgyGl?zwqM&r9=s;xBk8l zVXqNZ7fSnog3i-EzhEJT_14F~Krku5Aw7n~fIZ}G8p|C{7kv3qQEs%cdg}{s7pDd1 zN#dii4_cKtBn;S>ygqLLEn|v3?tJa`=o_J0F?0v^!c}H7^NB<$5t^2)gAEOi9>#}eIcAs|CZz{zShlO4aEpre;)m^;IVZGMcLh8 zoEj=PrE+WT%I*eXYZf@#f!W<4Y}K%!W7h0$5Vm62G9Ui~xErBj?oN7>Ko+u=EzbZ?yh;>mY|g9PBWVgYqspddnRK<;D&Ju~al+=`D8{ zJa4OX74X&$!!66h#$ktna?~}%Pj9z&7@DNB!$3M!gy{5^5AwbF9;L#b(_!eod+*i;tdZg8`(*oY679YR*U$$&2WU=X)roD;RmNTF6>|LbQ!TB)6KI z=#|2mscB1D?NbWpj6{-rl0(bFnW@W`qGocq!u%7aBuTEzp;99>AYvrPxgH!*C3v*rCFF9L_c ze3SNhKDeXD;CtsRo41BEgJ8s%;u7;sO!0YYcy=frXPIUn;Tv8C zD)-L%`~)c({Lg+&$#ehI{%RzTdTRPzfSvl9hFfa=8MLL$ZhC(b)j1cP%bTKa`cCBlvybHSJ{ zc1<%@NI}6=&$>b(@)9VMoeEiI?faI65|`10f|*Uhm95m~hdb~Q!$bL!luD+;XD)Rr z#Hb|+ma6`zeVf7aG9x7mCse zd-qw%5?Wnt;G4foDWd3RFEp{&TLPaZd(5KoA#hMHGhxsrNwGT8G#evew5Af!4G0Tb zrWUUfg1Ww-(QHdl_jasQnOr$7A*d4y3jc~oC8+0Qu>@suskwxpId?(f1oo28uxY!& zz91`y0Tn~f5PrD&6Ait#zt0C9_9&}3P(e@(R9+a#ryw{)XBrw~3Ic>_3W7|+wiZtQ zs~lMr$EzkqL~XwqV+y7q@W>ZLIw|>rh^fR57p?HCk^k7G5<}z3qy(nw7z-i=@@|VX zOqjQZFbk;=`W?*EP7we>7{B5QGk4*9#e)E+U{}p^x{#PudC`eW zd_=dzibo+a8TTnC4)fvd6Jwlh*FBCAeHH#8<$j#R*3|r$P#*xqvCKixbn1V3ovN4%a5G?Rv z%)%6eF(oLCIQg1|VbVce4X-c-L70MSWhcxmrXY}Bn1V=HtL8;8!YqmFOhFhHa)?rx zf*?$CREi{r912qq32T9G2*35{zIxuHXTD}(Oi9I*O5&imB!`R&QxFMjg>UAUuURk! zlM4dqGQh$VM50rb1Qw=FQhMZ@g-2CI3(D6ln3!l*6OG{5#x(VxL0Z2OW8{_ z%8jQ+N-~y`4838^f(c;^dIMJg^C<|vdJ2LRY4qt1+`1_|1woRqBZmv|6ojR$@zDo~ zrXVau%IkwfQxKNYFNvlgEJc;lhZJsGxoj!@l4uITQdEt7NYNC8rSwapDF{nZQ|LpA zrXVb(UlL70Sjqw)eMr$1gr)RLqA3VVneS7IrXVb(UlL70kR(k(;3GUH1jhs6F~t9*`(1tnpRM7wo&;@fWBX-B=J z^nMpor2Q@n_(1#C!;xY!C65#%ZBjhsKATA%IZvBQz{kMQ@IsJ!xrD;tI#60vtYWn( zqX@I=pS-BI;-ZHY!z8Hc?pSZdwGe8_nZtzmMd*A))sL3`m$VB&Jqy#8WQH>#d|BTTlv8f!vNZARk*IQ5hrf7oEt!SpnInn4OaPl}^ zyhSNka$JMaI8-mca|XH9js^)3R!CeiXVK*G*%;D%o`FE@>*S*Z%!9*aQ>$bp1a%HU zv0<~9e3^|sg{I0%nVfxR$tbZshA=Z}?Z_I?H^-1v7p2Ah&n z_0Qd;^YIHNj|?9JZMg_s;FkDuX43h1F~#D8N}%6k?3|C^H1B|sOXqxiO9T=Y=i>?Q zoR42K?G7JrSy*7a1kn z7uT}{>854rQC9=)oR3$D#Yk_NE4r@s+c_VoqMW3pDUf!~$4eJt z6v`=Ns&hVGg%p)H9ZtM zAHPfzY{uu~a3P9nM3QX#p;8zLELn>5+=mox#&=ozC1E76U@1~xA5yd#-%|P|VI(kb zDXQu|q-Zm~rSwa}NMOcN)KvPAqRsf0(k}@kfvc9X%10kkv>D%0`XynAGDea--rz^i zNS&XL|CT?Yb5M>q7*ZhK`2EKYiZ@mrZ;U$Lcm>Ei@y02~8zYW4PU_KQWP*6(IKOaT zoE}~4om0#%_P3cp6@e{q!hHQjge+2;N4br;e*k1S0hmVSo8yf?r7!F%bi6@|6mK|k znbX4-y_k~68<9ro@Oht_!&Nuv#hVotvxx*SB=Tsb)02>wf`UP+icFUCqk`E>h2ua z1psF`euyVTvO9W>g*`HNmM=?+m=w2pE;v~a_nb(fGU3MM&DiQiG%F_i?QNr&jFQDC#le@AWG1bX0iKhc&tKg6R# zWiFe07}gocy7NOk!CINc{as|1eu!t+tn~1DpkKiwkJWCgoC#~up(5YHw_qSg)LKOK1t})ty;=XpCt58MRKdS zp|@V>)2&#_cArw{pNiyGaYL^ZI-ApEpL>q{=oz;1AL4oCZm;J^=MbLbFFZUjkpF(^ zjQzz)7zoTy|Nie6{lyx`BK-c29*d{-XmUJ*zj!CVFmt3wm%q5cOyVL46G)f1D?*s^ z7gcVLB^z`10NMT`-|R2G-Tope?Jtrd`HLPRHKiUu1X@hV{l!Q#5BUvdl6!H-lpob} z_>+bg{K+ta!VEvA-iix+wvZ##hhWix>#exTXVWm{U@)IkQTIq4OXS$A=1d5d=1k>h zM~F^`Dq9pMO+c4RMgK8M75-z0j#ATq40!mDkqe>4%uc#gAc~|1?#4kOI``&;wgN^j zoqKaaO)3k11BgY+J+EaT%H0zXcZl}@bH7c6?s67It*R3=*-0OCGIR<>lu}9}Yh#%j zR=9I)S!j^dO2?hk7q)^s5i24H82lB(Nb>P0sr?VQ2c|hU$r2pgb}_QO7Tvj)ll8Eh6e&iOJ16^Bml=%fx?Cqpi7UNSyU*R!gwmLc zre-nT-&1W0mS!_|i+R;;pTRyd#o5frrU1{`s>HiIhAxl?t4x zdroxVDN|9)`)p+R!69<%aRe3s49{taukxHkQSFyPKdruJALgYD#r0S;C2MN86 zT}zQ-`XHg_B$B9rK1k?o>{yD_*9QqbCz0fJxZmY#_UL$;-p012sO9t_g`Sg0lBGUW z3f-V(O38g1e)QPx_P^pqy4T;w?B7hIWx>CB5g2sl z!!EPA;rH3~SiGo5a}p2uH|P0z9>fM+rSM1ynBWz=w?VGkI;Jnu460AM3g2QX{^a~iA0!7;oB zb*4N&HF^yJ53fPpAoHA1#Kb9P8Zd7?a^I_%R@cUceA_!lX;_u90!@99-1DvPhDQlU zh=w0F#iPL~AhxZdH&F&?6Rk>WrF2N7LqV*S0t9{nt0nvdzM|4qqiNbF>X#bn%<$+7 zSNxU|`PDwbq~_c-^L}s}psP`7{sA8F6GG&qG(tat4KMc-w#X~`l=rDdO-ZijR{E`* zdXu!Bcy?40Jv&#|u9HqYd&)3N8K@2MJTeMX7S73~1B82oj2ae29usO4@M*IaJQ{Cu zgOwN!7r#PjOc7v<9lw&pqD1V@bfT&@sfojJh<5?TIEaVbNa55>C?Hbk3`DWZc~cRv z1COFoHV!Cvy%ih(2Z&jhvSQ=ESk$Gg*!UmxLd7W;Rvy?GD`XHf;Ad;$kPah;{yw3;k zZRozopte7QyGF91?8Ci-H%Dg--mkoWVBkWn@tk6)rgGB4=J>_BB@$SeUQ+2o}!c?+}=c2i61@vr+q@_sD@@g z*lP)C_h1QM{&NUpDxZHY*~1<3vpswR$eyn~RHkeXYs_EA9;$uWFT!QKfI$#1wa1$s z)L*7#>>ovf?I9_0dziN$L$wjrVEEeHMXL5Eg|qSCY$IrE4Qf`2>==3C*NotLL4d>1 z@D=7mxlM+~d3Q@rhDIewCW(<%SpD|jCJ!4L3hpi+EDQ|I6SVi2B>DhDGpcNOz(vFv z2Z>cIl_isLxhgEA=51JgM@6K8$(yNCFBds#BJE-+g%fF$P7z?xUn$U0(AXP^EAZ(+RjXqf5f#w@bCu?oOCTHikm-M29?Yq<&zCt)|1 zHgf$OPQsRRno@FCgC9NZru|BeFxk+^2iSDGcFmyD(ZT-R&!Fy8|7u*@hg-1+w_+D= z#SYwxC(#!6yWNV3Riy6Ok(g-VeW#Ya_*^#ro36yPi*0HD~*EsB-U9JM`&k{8gEm0gA<#z^^XmnZET*M-C-3Gm|a+X>rpJpO{~q6 zIWBKM1ncaPH~nhm^K*ZyeBb7a-d`{wkL=PMefqvlw3z%?an_`fPv5sW20eWGzD*8y zm{roLh|?On(H-r)N(0h1tnbk44pc zj6NR8iO=tu3>dj|{P^f+!=&rXd*t_II$06P0m5U=nxv7d=&1&*8PMV*ZkomZhC*W1 zIZO8+ieNCm$a=|`O04FI3r>uDaYkP3F^@^WCC$i(+(_Xh$ZCm-6D3jXa^6lCB&KYP zI#IBs^!zFw!Z1gTM}8HLQ%ICw#lw`S7{rwP^5k?WT~a(N?exf*@|kAj#|XpuB0Tb| zc$`AC{3;%%ggjiuqpzm8iM`$u*oEu9Q4yQrNEUULX5>RUVfj@&M8j1)c;r{{Fr}Nl zxJkO+68N-`d+$@O|c-J)r*IRtfb`6t#9wzgn$Drmj z@*jI|ZAm&sUQX{h&pyNHSuAfN(8d(~d%z)0Nj-9z(Kpu9^;o>9hYp-_J)K`z zPuHVsJzc8A&m5UxmHEedx-h+8kSVrF*e{3=3?rDT;+xN#{zu=ZN6OeQ$hUVLvtPc2 z59mb?o4jI5zGfY1tKxy_d+eMOlfr&L)iw5BAwABWZj!ZA;@qh!*C}!CR8%2;F#kcf zF_q4F3SS3vafQTaSr|UoH<5X=xC1_%GA|kJ;J5P*CWcM zoa&Ua#i3bYjLKBbZ#tSPxe+bb^{etenz{wir<_qMKpFMXRKi9G!!{t~&PP)P_t8|s zPnuR*iR)Cb09;6{ntlBIBZe`;uwjS~99}S{60s-9i91$>^fzb;Si&wOVqcFjcS}ke zPD+Wn%=}l5qiKwG;1L^!#sbdR&`K}FhM~AXVQd&EJ4x@+PV{gy4UJN3D63ec>kT7O zqSL`vDWEO|#KG2RJ)y49h4{Mqe6W>OAl;ib4z@~8CT#79t+*3e^E?-7a7sU1va~SR|*orv_0o(L?5pDnho7TV}-*8M`aiw<(TUMR8 z!be)f&{te~of4_C_UHPJzG;d(c<_4}#8#SLi{%<_I5zi5qU&b@IO68Zrb`0at1pBP zs*tD`o192t2H>W1!E>ufst{wdl){Lo+{M-UFmU4i+F~O3xc}5ZQs&@S@xzf zA@4VGEVgz1{*-TNA(rweEWOobDtt>z@6XGJ7PZf~q%#IPWi4u-v2mh|E<}Fuiu!W5 z7USZTQI+2vIyz=5s$tz1t7TnwH7;HWMz^9VD!<-}i&vr;e&|{|$4yZ;E`?O>i&v;b z36K&)Vl)8J^tj&(P)kG-OMF!%A&O)JyZquF3hlZXa4QR|cqj=MsYH@Y<)I|>@uLx| zV22lFnvsM^l0`jK3Vr-NHkCfuGlWnp9Kw$-ab21pJ(jBd3*MpA#va=4Wi$HwST_3? z^S6ixc=;9Lfh{N(@xaf4Lnj{Cq{bT$w)9wB(?f?a5D(nXFZ?>A9$oQ()E;;IHJT&F z6qj4vuZ^6~a3WtOERjzeQ;CVZRv?e=+not% zCUKcEff5s!i%uNDBla_&c)?*;sgrK$f>?y-Fr{1R0Mklf z7Uy=C$k!=xZg<9##`wUr6d&k>PShiJDD!i>R}Isnt`qt`w@asc!7x4YqpOQ#?Q^?C z3Dy#nSZBW@vGXR^W6<|$U1zTi^eQuY?VkG3?JVOEa zl{GwkZg&e`r1803(x_abiGmW0bkaD2&|7q&@Z%L(oED-7`)GJ+R#n9f8q3f3n`3p& zbVBhJ?D<~vbW83uQ3kEM+%+6Vn!IfRs|Nt*kJ)j(Y--6VQP)nQ)d(62EJ5eB(=qPY ziRNBH(7wDWGLLp&g3fQVk7GXH(&zaoA=GL)G>-F^p!ua`lO~_(C8s$NwCbi(CJ&dm zX7a1O3*buo&bUDl%l5&Unm{RTQ7aZngC+lHz8Y#+-FI-q4PFRAW1|^S;(atx9RS$(WB1+?7Qx6xSX=ah6o_(kkx@}V~iVEI`6gr0@Ne19h zDRlUTDJ9>C$d8_$*8Z>hO}U}{e?uEm-X|5enKu6A!RM)#Y4m)n3Fm*opyThI;s&k8 zgClw@p46kC`-R-x^ZSM7nf=oJLNiS9t#li6-;ED+WB7Y~^O@U|_V-9>e~%Q&-&@89 z)S^eJ(<&wR_X5j2R($Z&FF5LVdQHBY@Dy$Q4E0rr`3*px1c0Dffix8VJgz0ZDll&+*^k4bi~Br-lCYOi)?Y1XzNeoa4((3D5=yM zm5^IaO-8CT78-|p#Wa;)N-;bR_m(pyX>l&A>uCQ~WJK=OHgi-hUlJwY`~$2JOnDF? z-FM>60z#;r$e~rAOv^nKlP{Zm)8s6Q<{V9W3Z#NqGabl$%oeICMr$qct=$DuK|^C@ zDBYeli&T}Ap=^?ZR(%?`4E^p*#x150Y29E3=lMt;k-pNsRN)cL7?UOI%q#M%z0G5@ z=?W?)b=%LEKueY8PcewUBFY!qU?AIakogS zDMaZ8v$_Q2R|w@dYpfbuu+URIzgc6&Fo_t<4e7EI^|*z}70+aH#YH!3=-i|41uAD- zn-9!43PLX_B#Hhx4XN&t=-hLlvgAfqcNBH*IS5sRAr)qiYj7Dk2`^`wukvz4ks4u_ zXV612P5)z`CA!rGn!O~P0uxDUu7^sY{~=8tUIxv5Nx4I~8Gw^h{OIWe?Qh~-S2lG1 zr)dt#z6zZYOiumwmCk)OWA;zDgB||KD?rroPqgR!FXOy7JLc>oJlcyF{N7vL>(i`U z&R68Wvi3d9t9t>G)9<~-GE88n-+Oy)2|NAX+ZU9Q)9<~#w3M8F@9iVhbP}0<@9npX z$;W`eRtX16zxUQ+wdi&Z0JibL-+NBG6qk7n4S#%PoO?i+L4{*PQBNo5|v>kg7JTQp|(Xx~K%eNQF0V`NSBgmDmN zjM-`OLH#g}ua*zHBZ#u&=h3@#(A`IbQnm^@KPXdUolMQJs(LbI(;Fpm2UHAI%y{nU z23D~!2nn52C3;Xqht!D+%oP%b7?2MvKpRtuh}WEW%!wkvypt0Z0c7TaiBBgE8#A=c znssf=@1%l7UIK-KW}qx5l*n12j3$(PhA$K!@Zk=8#JW>vx=R*{DHo!s!Bq7x^r*Lg z|ZlB~&0Srj2DG zov`P1)Z2%@#6GG`obq$%i;^O6)Y=Gj5@pX_q-}IkIgA2EYbpV2Y)dCiDn?}}+kl|a zX3J3a`eD;5k7X!rhM<_HAW|7R3FtA?j`c!Eb10^}d!g*uY@{#9vc*wraK-PsakOdw zNURxC(7~5a@R(esd6T2V^SOMYa|whB5oXrzUDTQYVI^#iMwpH0WVzO5m88qWgT7Yu z2G%mxo#|^G*ze*u;ReiDkM4Udl#SdRcin3dIaR*mOl^;!vWYB&ueHTj`C6h#71-qk z^-$wPvY=|BhMqU`NVq+XZ%vHgbOu>S5p;c zZKl~+Uf2O}^mDYtDYrKEe7b2#M(#gcwg5h!=aKMWNz>$P=QACXC6P2C0iW{lRV%@1 zfDA9pbVNT8r{_FBzG#$1@yxG*mR7GyiU*Hs8J?g26>azVac*QXt&e&7;Hg9RQ{X8( zPIc9M#9`6bXgbbal=teMQ`(4t zPm@auy7krnEeEFi%`^O$!w106FUlz!) z+yY&trd`*1_3$fwGBrPDt+7|Nk{|2uJ-F|xPjGgvkQJs!JwEj}eWg%nO8KzCtm{Ix zv<@qSB6wW}r?Uv_%y*8c=l23|cvBJBg!06%VTM$MIBuQ*!#N;In*g8u>jl1!Ez3Rp zG)mlky#S;CO7lP9Z~xZ|49ut{yUHT&;`TeKO{t%n)BEg8EJM2Eiyyt`>c3DGJG6OU zZ(rI$IpITm>vtctUexdT`Zb(v-z%K2e;!BaQSUxVKhnoh`ZXM-_qqLb9IW4|WiOxC z+4@_as_!9q<1tXY=~owgfAZZoM{CWY@8^PY^Y(AkYs~G3-zA-jUk?}qm@B6cB3wTw_y!XotM{Wi-#!kJq_;n{SKuehZ zqx=sbLr9vvdUXKBs&vug=hSkFjj=n4aUlJ*{oS{!7}~3I*#vsJm~DQFo0iAF=x0D^);s(Bz2ZG}e}#f!%ES6jK_jKN&g7rl%W!e0Te{ z#+B{H#1ob4Pa(aH{|B=1?Yno6K-HD&-&jbSYgOjBgIYK$v6Lq7bWT&0&7rrvm|34d zWt~0Nu7DWT|3OTmr?m5-04uyi`&;}CjxO2{-QG!q$lZ;x^UNV%XRn^-Yy8Y4wbNh& zV@sL6s){Xuz5{t_Z;`S&^fkj>JZD(<{1?R2d@m6HLoJ_gWBf@{;Jyns$TPEKS83jbzrVut+AqR7=wIy;QE-<=cJ9$>b+E?9?pI6!r7^w< zaxZO+KiU3wKySZ_v~Fu?hhN_LDz&`3Z;W;Bvp`#T)2|lp$GQ9FaHns5^~UQ?xoxwj zeYO5WOKx1-t2H(tXbq; zmHpXYVewtDn0Iz-QGbuJ)Q0X9)%aRA0gCZ8_t=cCEk0_Ph#%j}7_0D0y*aC$^A~(v z^*!igicI`f%PGTGgMde-NTWTPiXU3nw4cdTjjB|ez zd+Hf<)8?1z{l@%yHoiGHzFoVtRl9TrS)w6$&9n2zKO2bAxVGCHY+R;(Je$}&vfh~3 zZ2#*{Vy78iL}EtSkE4J=ztgTD6$%7vj7g2NBhu0MUSskUn$Kic`;&bt8z;3N*fy54 zGWQDn-57uT&+!GOdmCe?ncl_?%uL4LJejYzsH4YcAGKlat*MNy`*ovaoz+gk&TWi8 zLrxi6Yp1g^GpI49MU8EvDo|tFjqxXDuPGmu>z@n491Ei{xSm+A%|6Oij9TNw`Y(}j z8Ge*^J?(CcZwZ8!lwElS1MK$M*%@gzMwM!hwuk5N3bSm-fz)9tL6X+qI zY?6GKfPppq51A9YZ~e?FS~G9k0izT6*=Z#GDD%m7q2ec4v8B8VLR5w*$TN}aXWG~3 zB8KU@PAR^R=kA*$x3D+akI?oGaXf6aV6N7GAEx&jG<#5Oa?I^+D(KP}tZ95TU|*u` zxq!BD?tRl}3n^p&o{jtN8zX4O`d7X$*<)?v!d_$ICRz$EfuCKc)@qkNR;z0@3)O$K zc4Q-)xXByhxefuvHTG-oK-KNkp2Z@2W3ywgbNk9WmS8)xx6sNoz=0oMcU4VC)l$%E z?a~A|PHe)CP&Dkrnem&I=7_Q(o3mM~ylayv#UbU1ye`lcHo;@J_S((Lz3)V->JU%l z6typpqgfbjU_bF=!0d&aoKukfEt*h3!t|mtn4_YBL&n%{Ap#;f_U$!}z7=0+#FcmL zHQ1Cp=7#N7EoEc;2@rKNV)vr_*{frAi|`v}9M7MAGb>=?$?U{@X0NGWmATK6-k-6-Oylhu z%f$`=ht7=*viG88p-G`VG&bLX&iCxc&R=SsKeBP2t&Oeg_0R4%9&7B$_!jyTSmpP3 zHPqnI1KwsI5&kiKGVlRiAz1I1B<1u`%7QTn^y@K!k?5*sDjftP!7=I^TpyzjL zNcuhI`_lM3sT9uD(4UF#-S}>07k;vFVR`o2G6^eh`9Da)riexroe0%Yd1zSou1%~} z9y)OZ`7H0{P$l>9=uVtEjyD{h_Wtv9dA#0NG{Z4@i^0j(2G8fr2Jm@ttdO zExT|(>Sy-aDhVrZxf_3DsN5LeWE#|ZW_+d69K(BWQA5X<(6X~D$l3AtOF`EjKl0(m zHH`F|QQ*z?11K;Y7Yrg9+DGFa~ zq>Ou9DEG;1kj?)MvNpygDI32oP5ub7io$PaweyXMd!WPXCCWNp##uz`*P|6&Z~tSD^v7aAEsv*n-<&?QNx<11&z@2@of8^4PN?Gi3i*2S^# ztYzoea&kMjLSA+VmF6Bx61AxF?~5h{{E4-VarN8m%1`3L=41~4F$Kb}t2}fJ0#-q| zHhBDp=|E%`T9t>6W43P`)^YU6`^V;=rLmfTI>wQi-_Xxe;*GXcT4(dlCRS}!XP;8- zOsp2I+gm!_btNilrF}$I>h2p=`T(pFi>4~=*ui;M=`^dfyFN!%p9&CDym+va_HV4> zXCNS4?k8&-cU9&z_(zO|czPYSWqh~&SwIa# z)bVv`#%i5p(PwxH%XAD3GA=0Bvg@VZN23iSrHw?1mXb@UP%Z*8oVP-j8jBn~ zW*^~S2!gqO1q34eLyO>;uvU5RYu<2VZ|E3c>-$F$5P~@@uY8Zk=zCn6K$2>&^3c(j z5J4#ymi_tmZ2awG^BZH8hcL}D0R#NyM;=ozel76c4hc)dgC}zbxk0dk{U0lLIB zDNjTBy0JBzqe5))_1gYV==X33-pnxI!rGe~Z~;1Y{>QPbrzY}?tS#2j>@U%7^WRuy z@v*UwK6a#Xj+EPtA0~jq2~jbJ-+md_1ZQt7<5Mo|xfBmhvTF>~eo1q)e6x4#83oN2 zqbQujf+P6>G#>ctpFsA)hOadc(Xw6QgXz zg^`+7w$uK4R8CmBXCm<#4a;D#>$qZ}_%F>DH-}!u`ON0+|2s{KwR@3y#lMd6j){29 z4`K#>17rFQ`Ws8~+%xdNIEF0jp`y1i1AkKQ8)IW)&-9J4$#{=hcg+=Ee-*{2*}c)u zS8=v8vdhUH{xd#j>+s4}ps9GxN{w!e-z3WHwVNY&RGMf~d1(h&)A-jRCySi^(!@>V z9r;IO)HwRSZ2V@Z_hy^(87xmsQjvakO{NyyD%aP8XI8t~nApXDLyJ*qepwR5^@NC} zVfFEKCo!B2JUWHoV1+WiptS_)=ohKfLivVKqu3b8VlaDkny;1XFO3AOprGO8Fuqpiz7BtHHQ}3Wc=qv!p?qo&g?9l@FvHEE7qRCUKP_+kSYdesC?A2I3M}`t1b44A0dFUH?n)hznA zI~?^l*6pQehInkuc3@-o{Odw5v;TaOtYJtt3u`QoFiAB~BUF}+-}x%f^(myr%o4OQ zg0D*REdE;TFQq=+wb;VuadZO<9J{}cMoK$eoN>}@pX(j0qVW~hPw3c{eOdOJjn}D_ zD55F*gIMnj6ZP>Iks&1>!~$Gn?2>_n&Ex{iwpSKd?Ap-Bi>|5M(yy6}v8sC*8-pB; zIJ|g0293t?A8)KzCw8iw{X$>AvWt|0S6duP-klF67#K&vtJ3_gemP34MtrOS#9Y{g zXZZd!oAT_R;ZJe+M-I8(u+#q0f=mvgmHYlS{yyJQw10&bS-$!6nvZG89L8i8;=hNP z&20Q(x!mu=JI3FK(fjtoecZ|}Jb)>(*=x#R^04@4+kf}in5fun6pxoQD zS7nka*Js3q`PLd;z2!l6VhJk}@jC}g*<6By^+E@N$)W3@WPAr_7bRDGGG=_$nE8n! zdEv{%+c;~R_(hNpF6>y~V&R;KhLLTI19NT>>~`32&}y2O%MtHKf}b)80lz_b zE`bdXA=qbkM08Se8J!faE3EIM(<8{*T;E53--A|^vJW?T>-E`P`-m3cv$M;iuYVXF zWFDgDEAP4O?@@7;xhji|k;R0_9_&VT;l}!(4PqK!2Lc-J^FGVncSGx_TM!?MmA)ot zBr^S-e;+^#^TTMmnx@Deyr{Aq|BUR~<9B?3?p}hhlVBzZkWE5Ru$-orAU6m>%{<=F zkICQ#%UF%(T@t9jm?kFMY~q2ziN_I((ugh7bY;d$@D|{Wi3f210f-wDt#0^cE@HDs z#3n_c4XxrAKMEqoZp(S(2oD3Hfw`@a@o+c%MlRzHJtl)YzeZ1keZ2bPt*U^a0*})pJS?$l`6;-o0XpXr=F_y2VPQ4)GJh2>eqM8rI zo&(N^U`$+rIm*XGv>$!%hONW`&vN6!J7=%a$Aq=`0RE!jo27LYOkobQkzc^P;(?&s zwDNQy2vqk&CjRGS#uad2EX{HCDfG4XcgEE<@LsFDXV~6HWsZ9Z)Y+~)faxk!`R;c* zZ$OGZrGC`HR+i2ZM{9nVi$AKO@prag%}N3pEMRBO^tU||I+gFo!a!IWZ)a}~z`&hv z#%YbApTmw?y7mpaeYy|0@gNT}W3c1j=0706xD+Rw@j_jGrPQQgW22bWtKl_kk`QL2 zp%-5W42Pqkn}IX25|lgx`Kcjaq1b4iQzC_~Gm%ypT}6q+S0V;UB;JM3TBf{a4~k5e z5uq0Vu=^pli{>NKct79NX_Cg=EBWC<^ipI3qwvGTYHVOK>%8wfJ>NL->fMKqC4N5X zietzP9lZ8cAL~1VzOW^mQ$7jh3mBflV?!6Uu$E>YIgM`?q0&5xOm57*2H%G84RQcc z8@(hBR^VWhKnzIM*r2auLD$V5q0$d>;~pFVU_<5(TM14-QL_7#mNOA+oRKK`(LGos3HZ3*>1n817hg|#Mkys{HbL_U;Mwg z0iGG(kKk+e2Ae2$sJ;g~9ed}uXILTG&>w!c>D+L4pG9MR@EQJH+~MEmllXfc*H++x z!VsR#EADMR&i5v9XV*_cAGm%pr3~tQ{bLwm9#$fm&91*vXg5;IV3Y4cTT>#X<=k2+ zWw6P2p*?_?+Q!^69{Be|8*{68W9{IOIo{69F;|sl#&G_Ul5nblxyCPBEdvcdU#0cu z#ru(#>F=3EmZ8$TBrZ&^&M}4FJhu`w=kWn9dQ{%!XQR1<)NIb^EchYl3qWZzr=~eG zN1DpLMWKCgDGKc)j}kh^VsFfm6mLmB>!otvYf?&8IqIhroc78~-ft!-*`fczwetF7 zz16}tQ)yl+NMlMk=eMkxY>_3c9eE$(grd4`^hHaJnO3?x1p|{;7#URVEoP@bmIr62 zzoK+y=j}-sXXe(Jo%_zFlIZnxBb9{%d&7l$F<`4ZXcoOON1XnTg!~GmS-(1{-OMX84 z8}EJ-k4b&*`No^*^X(!LLnr?(?(lE(N&LlyuiJQ>Z#1{?fQPrKuf-KSHs;pw_lF>P z_7T3}WuS5oXUm{$BG_%9LxWLB2^#|(^>CLCps|3**Y+od($DcFAx%7TydFG082}deNO=^e^{0*kFlK;K@Jl_CsCq^9F8j+$nVZ4a#@r43 zWtnj?3f}O7T3)17TqHpL)TY_Xr&L$ zkdZS0+!Z2e&IoDxFsFPAi`Zt$XtZGFRI8q#X4xT0C6pw+Mf%W)>Pkqsiwda0fv@e~ zlp`#igM&0H4tm4oaO6Bhml*lt2M&yPIPkUo?ewQnnCL)Z#nuS=HwfZkKU&{PRhG|^ z(=fnVd?Oa3(tghx)(gD8jleM-;_0kvU%K!SES8;;;;vzlzzf{lUf_=1wlFrk8_W$P zaslh;=ciYigh)O9)#-J(lX}9qoa()@yZiG(@dsw`vx$%F{v4VX&UJL{$MNQ1AbR`F zE`HKZc|5YtGh>bS@9w=A$||0?W`)j^z5Ro#^KwR0&K7$+n`0{nw zy@5GGz8&L|yxxvCIM>g#VXeRO?L=c7o1bo+!5Y=QA5`u(v8@AJGtP|PsNDC?+m zW63{1P(88TnY+0DnG(evA)IWYC^!<+$$&QJ&m-}Pz9j~-mc`}3S*iZzO} z)&9;-;uA4d^F;e}o)~4svQDdVugh30k;_=D*iUg8agqjYj%7S{Xc;?IRw!eq;LlaY zhx3Nn%Ionjw~SgjYn(m)Ld%Hi!zS#lo_fR%>9xwePpG-9X{VDr(IZMJmhs2g<}Pu; zV4`(ccWgDTVItq%`1PbiTjjjq$MB8~1#X>>%QCR$hT9jB9xW@?2Wl02fMU#_*lz#Z zya}RVr@r?coy1Pp{mMKsSQZQUKwikT$~}KMg~X&P3wh#`R7jK!HTihEyO1}kSUK4l z%%>41RuMoFSEMq>rI=&`ER3~D-i6!K31&1@VwRRaV*rJW?YFOss`;y-= z!~TYo*h@;+43?$XFn&=fMI-Pwq`VNbHcq;7Q*p3^xqsDo4cm#MPE&11Gw~E3nn^k! zRkUf}mA8mu+c|?oh+AO&@X(z$AN1@;z5C`=KHuNCa1)!5uzTsu_->_n9wPA$h4b^i z&r;@b>gCGK-5+Dbg7KwI#{kphO8h*|jB(JJy|#&DtXLsopglyth-Xfii!|z^USQU+ z=r?&3k5)qud>!`}ANV@qFFrQ2VSVr~Ajb^h178N|fiH60tPZa~J&2_=?4mJ_SXL*G ztv`KR{eyI5F|ZmU_SH!fAo&UIH@v`|e{c#1aKiG;g{{iHxAUE6gb2VpJ}|NaKvx<` ztROffjddQ69)B47Oe@#vA4h#Yd^e9rKTx^;#zGp8N7FG7j!*JnT`&7alwe|W@G~3Z ztBtL9WLH+7{c{|&;%+)5W3bEpBz(3oy#I4>C=jEdApXW?Hp`AV7mM423#m-n~1`>#LB)~1iv?%VKD+y%FS^=o{?ADhx*N3TDIwg(5O z;F6)R^oQhzOlW&YU}UW(*l#|FG5wnc&SFyqP`;_meuz!C?`{M`eV0w0Chv zb?g$)UA#&)~UF@5jdqOsi)PmWOpO`Q7^S$TCN3d5B|~1%0$S7z=IIKU_@y$b&znazk1J zAOZ-dS0>uQNqgK@#Csk)h!V|@(E=&(4|d7#dM_tN>P_qBJdFxVdBPpmW+@W4Ef`d> zMm|{t{v>On3|%IuOwwBy~g=s)M?nm+X0Hj0Txy=$l*=OhJ!Q z3MzUFo&PXHyfvBtV8Zw`2-JxVvZKX_+fm}yf;HHlU$b?{>yXr%tt0l~ZM0_V)KW}? z)@(iYek^=lytUww0ptvM1{GVpb;MMRpo_O2cn8@JTMs-QYH#t@sbP%0i?^J&XG!<; z#n|<+u=@waHCtBhS=@c5V=>$%-OEQW#yGvCdy#W74Cy7^)#I^{2JyNoKssKI*UkW^ z;hy3`Q^H+TgANL}x)zjTKylS+Zjy#(|I@G`k_LRU#r@(csw%w^Q1}z`cDCrcTRghR z10#pX#xuQGafefkjvY4_33Vai%@hTfKy6-TAdP9%Fgg^14C;z|wsFJkFe3yN3l6?K zha9Yj+q&ew$LHVIg<9^2sh$mp%|pp0G?14(IRCz5+vvwent0Z53H{hK7|$Bt{6r6I zA1wstx71#%GYDhNnbkk2c2lP{>p^O%XG?$8opK8;pu@Dy`ty2vp1kJhk_*U+l@-5O zlRaX8lt3!9oJ=E>71uILR9vth`RpjhlP(-(76*5Gcx>u1E3YpmTMK|hy5wSB_k@0| z#hhxTm4o)k*;IbsK1iTBIiX=bR0wVVLd$`OjG%8kii)Q8p%XjExZR*FRnqs`TXzu( zCgS(>(o_^`um{25<3h-Yu3dqSPcM1v&(mW}$tLZywctif*uh*t@%g)uL#%f=<-E1v z+8lrE`9O!JY(Z!Y%-B&gb7#o~^!jKCB5%rsQ6kL)2ntS2Xz3kf(r>|h7tGdleuk0IySh!#(P3(7TZp`RbOBqI7Hf*&WV{^u z?^`W(z-t%lWIBK$d%U9aq`r~-qF9f8@S9X3z0PqPTUrkB5y*M>GoMQ1 z`3_P8IxTZr4kFMs!PGPcKAIwU4nw)Bd=i8Fr!W?Dzu7^FN-mX=45CdVSq&3GNdMQp z8UjkE89Y@p6KB^@{XrErJz>G7oZf(w4#GVw(z@yW-IDXSBRbNefFqae!WkFmldQr6FKoRSs_^sOBWX?m^Sd;^LQ|K)%5%m3TJoPPoTVPZYi zQ$*iW`tpC?e~JG)_ZIQmOic4-+CWde(8AYD8+@I<;a&jqwg=|zTO>4k3rF{PdoZ?< zrBSl+zdE+vPnwx75y76*_i=4Wa%!H?LHbJu3q26$-aITaMjhSP@49D`2!s-SnSuhOso9rg9mcXS?~|M%-l)>uFFWp7mf zE9zTEZfxWriyc?V#??BI?4cRjW0Sn!#kbTrXjL@c zdln6bjw`wIVZ1RAZ5UeU6A%yPky=)aV22;78U9 zYh6PPe6p$8VW`<*rKTvG8bo4h`b5g5W`|I-gQu!^D28O>K6-w#MB9a6@-8x)dJku2@;=xeM9j=QURq3Hh)BK6aD|w_O=2-f zH;!X-F4H9ck9P^{+DFVa)C3EfxdyWgeS(Br0}7VECzS#kVE z>ta1Srq!ND>+ZymLBTY^sSUb#O#!t5$0x<|aRxJl#@L*3&>*fwmBJqt$SV+2*KJs+<0RCMCyPgUQL6`8l3`8h*voQuHiO z{PZtH!oZ9a2?Iqy3gZ}m$%XWt7sOy1M*45I83n76 zg7;a?D4K(XopE&an34_jDyHWPaF)i>G31@Mv<%kO1&>R<>$~*eP_ijI-{bqqm&jP( zrE6cZ5wi#CeiBdV*r}e61`y~>J+VMXu~2b=exGBix~s?ZQcXY<4+%l&O9p!L3 zS|DSBZ!M;r%}X8)Wr$0Ak;mMRfJ~V`(q+;Se$JzpBumae0u)h1jbZamLu71Tq%`TN z6yg;c@hdoo6Zd*Ce_?XLlvO%Cc?&PQtDVe^ah&ye=@f&Zy-BOKswu(W{qv{CA6b?aD{wd<-q$)}>hZ!0<1b$}+DBn?7b9!$L9^OvcvPcp?Yx zGU|HcVd9Z7?$I8u8rH^`Sy{hR+Zx@^;^bRIr9Mp&$YR{pdm~$nJvC2Q=Ps#aZ5CT6 z^GwO{+>*&Wk&NS(l3`=@Etw*)t!gQmiqaYIv;|6^x3df6VMa+$>VZ0V=on^RZlfCz zHQ7VMonCoCKlLFUdusBk9cDU(-fFbTg;09adA#R)g*qYpF_E){XS@!#%ze@9+n(MZ z6JJc}GNqVId!%QFaT+F(Rbt3VGC46&hM$_8WWVGfl*u_>>k=Zfe{y0VC&}dS(Ybxz z#~h?@pO~*-G1GEL_6pS;^Am}!bB0Jy1e3ve8bj9@lJ{ zrawyKlLtP7B*52gSXBw?wxN^L)Eo+>^fSJ3`Ut0w&{rfajeB@Xb`RyWrG{H%2fuml z=$%ck2kRC71Cq^hHmd)ASYbVGr{=&Eq@q73SV-KWJ zpR}C*UW!kp4x?|7D%ImArC~X5!kiB+M~Lb;hjScR5tTcim7QP7H^}c5>R{;;ptJL% zxgt|GUg*$!deBL%>$x>Q(sA@b6~msGGk&t}we-b$nEsDx@E5p{tncYscOoi!lio?3 ztBjnBnuQ$EB=+_GR^&tH^ zi+<7Ji!E#D7p+=o*+{>l^y_l^btV0}o_<|SzwV%48|W9k|Mhm!uU+)3oqoMczZ&V+ zUix(g{h}2;y>zlc3+?jlU4UQk!L{CY;2Go&wO>$9t|PCEMiezHe~=#e$_n<-M9VZ+XK5*|PNH}saKjwsup={R!4`*_n+YU0T2VFoKTY1C2lg;iCI z{yv6dr7HI;#8|D=K~oNJ(WgE&ZOmP|z!?Y5)9%cJhy_X=eeiwSJ;r&Fc8?pY zTTIP9gltNsoQLXwAl9D7^ZxA+yMxJN|=70pA#!Rn$IUy6>_~M|6bRt zYRaE=y{e{`aQ&t=aQ&w5*7ch@w9z^*Y}um?an&(6Dm#}ecaR9 zJ$Cl3>^d*i?#}9AXVQ<_Ir&S-T{?F{HMz^??U_#Q^7%bSk$dujV-6?xl;hVOO75vO zuhSHXI(6YKy5VaUov7Qb=7e!1_iEANYq{P_R?&2aI^o2nS}>NJbg$IkHIV!hORG*J z_q1hWbor+*zho}qGfw`KZiq8i{Cx`H@1Jsq=J(1|uMs*%YI)srdVqS8a-VU_Vsh)w zd}SWFp6?%W9JviE$Ia004}MKwgVoAYM(KQBuiJhKVXtSwN#r)wzfF@os=47gUH_KG zV~-)+u<{3*55A_#WrWXaF45(zYMHr!aC5^Cbo}144%7Lyu6n1I{M(v0oj`7T+f|xA z|EiO;|KI%%El+{AL$rU&|F_dA-s;ud59v3g(4`$!;Zm;0PP=aToD-C5Vb#wM*VA5`(f(bp~iJXGCwa{YD7e^p&QaoDIiC)Br`T>rz<=A1D0==;Y% zQkI*3Vbw$Pe^ov9=!I1q4x4^Ja>&mQ8B|d{@&55YKVx=#rEfCD_dCeiR%OXf*&LR)cEv!H16@ZN%NC(q|Qz^brzagCgGwE zM~y)ZLH;C2*0eK$=i{b^rf?Fxk+=`UP5GXRo0v}mF$_0_k?>G_5|%dH&A3Sbi5?Pg zD$9j?DQ?mbt8srHcO`BY?h|oSzLahq?k?P3+@vHZo*Q>P?f~va+!U_?H_=8kP&w4G z$j^FH7%2{__ne$Cibv@vY(_s}6i#{em(E(o|Kx9_Yy~!bflz(f?0NYGg+;{!25QBi z@;DgJ{=@CIygYk;UO_=VgwuAO$rV>#we9L_Zut3)H{JY;?YI2$?qB`- zo_p`x@tgY}e&o@|9)DujlTW?y;_g4Z^zxopUVY=uzr6MK-gkO>|N6m)AAS7qpM1LS zKRz>*8rN>K=jZ3;7g2p|_O-^_xTsKRe!|%UKcFh<8hx`0ZTMC-N>?adpD$lAq$(AkovUyDuhUnk3<;hccb-&? zaDn)dLL|$E!isR~!5gmiGVv)MZ&@%cJ~r%cL^)!)+~>$}#%Llucz( zIS1f&;->PcY@%fhZZeX_;wJitX427QNF0LuP~3F&M-S!KA5EkSDc@YWh*rw`d$_H% z5xrC%>HouU8~TW5qHP@R@wg}AHav9VH_>)D?g_Xj;U?Ot9z^#MxR1n5y0-#%?)6pm zA-cb+PDDH9+h4tiexilS%&i;Mf#@eXr{cEO&k0O*rn-?)H4V3^Bh`g?MRlVwb2{#0 za8o_0j>IpjUlnc|d&oFD7B}&Qct-W6v2iBuS-5GeosF9=sz23(`T)rm(MVxG!u=)P zh(P`l7PvBEIS?UXdF7%rT$mJu>;DlILcB8Fs}27cc(Zx#!RQRp`=_9{Q0p z=}1g?cg$;t{$==!N4(RPM?QN~se*fnUKVE*P|2lW^t{MCCAD!~?pr?=iN6{10 zKiyojqif^5Uw3Rd;kV~pc>H~9$M=lhGw!Xj-ADfIfIlAg&Zw8Sw`@D@#>StVeCw*8 zp81RBt4_5)T=n75XOH{BwzKksA-_NNpBv`f9lYek2Yif_v9=FZ|8AP4n;RJmRnWzxutsBVRhacfVK4-yZRYU!HZ%886;|KB!?tRBx@wE zB)24^5DzWKB&#IjB&Q^cB+n$HB)dlbAVyl&zO9So|E>J{D&F(_g2g!q>@!PsouWwtQ+`eJ$4@UM$#=k9XCLPgey}k*( z*1l}|FZETE=eKosNUf?C+V#?$I+glAj8 z-|lVia4wvOVx7KrC()D+4*CPmpm%krH`Jl#%{>|My-iKN1|OyHcj9hx20iV~UL6=} z@U(gxo%OB$hE>jx?`*0_7cy=4cQ`|xfq*~Q;cZlN(?$B)8@*kKGt1fL3$=MV8d`kq z&CZagEzn9of}ReapMuL9C#0PQ;a3eR)#hn;c6jPry-vJA`PzMm-Y&tu_5i4B@VEMd zp@65sE8dH0=O5qKx6Kn=1qQWx+nYOD)TzX4r;gd`s}FjD>zr%6!4UGE5+Vxq zZAC(FSHRoQL0)RPA->7e(1Eg@9e%&F)e}U^Hu-~KZ-+OCMqC3nfm`iqMz?v}{3s~k zM*|rVSkazl8k5uL>F_uML2rYPsG;IaI|YLN<{%`2+at$6-t$vkK-5Qj(57wB-Jtw9=+u{fpMN2-|4&6);Tq?0Xd19<_GK(Gr8$>uF2 zF4W=a&_b`7o~9rE!On(`v~XnD-vL2c6=D&irs(Y36rDot8eg!Z)6?qo1cRP+PESJv zxTNNAj|g}|Av8oEin!Gvk*%$2d1ol#ZP)xJF@~3aEz-1jgI+av?!sl$Dk?J)OEG+q zUT+&Jk67!x9qMEV00ea%iyfZQ;X<>t2(@{r2PkV>YpF%Vb`iUD2W0-wtDXxv;+`Xw zBro*mPOr0~tGvs2)|}iY-cpO#{I)>HI&KSJ8>yc0^G;lx-B%A+%e@u9uIHjCdpUt{}WXms5bpksoF&;l8Paxs!lJ+cWIpgzdd8w~n`>ZHz& zwD($_t@d|LoH)_wmquR*+JrjsY_%YWZUxy#gQmr>Kc*Y)pu3XRM64(LU}+OtP%ZJH zv!I)2MdUbIZq*V`m#?j}Eu**4u*9TBAKF%ngBCnzz}Mw%4Jl?OYaObisttOf(K^8f zZ+j!DNlVyVPdgFa0nHiG6gHyez|OYL)(#(}$Jq%bk0h%*J?$O7vq=paMF&w?Zt0qh zes4%Ona-=trv=nWdLrE`S(>u4q7lH^fYyQDKCvH>UB(I@0^H=~I;{1CoPK0aLXECX zLQD?}fsG3?gLu%%D8dhoj4!!8jmNR9Vfm`4!GSJ$A z>IS{w^|VnB>G1g4sT6J;wX`q8z9KKGwugnEnrjy6pdeKETGWL)5mkU4Ffs&nA!DBC z>G2IT4wp9`uB0u6zg~;vm(%Eq@ket@kFlXXvC-&F-nCGTy04fN{l?35sZ2DZ{xxTG z*J70kv4eIAIqSU`bi5eR7o^3Z->4mH{S*m$iUz{a*GI-!t-B8F1WAyky;z3_{iJAT z>0CS31+-!UPrp8ACSzfmj0IZVP|s*UgOkefLV4;DSy#3^B>IWtQ76fYpq6{Rt3+u* z5#@%m8e^T-H~6bmP;~&-NrUuB>cOzBg6I}B(4#H2vV-~J4P|jfObjb4PRSaX#5yB$ zf=oeV*cng@waTHK*ZR<9$%4Sp7s`w=nhcAQKCK@mZSkAy53CFNnp--Yg<+IXm3)$U*0PI**F7S8dcXcjG4xZv;!V#dKJKm(*>rc2|fnu@Hr^T>h( zVHst1vbHQ)3CuFeK%yCaWsRdGEK3P-1oYT!yG^1lgINu=<6KB)AqH?FdO^^O#;1`L z3c3+W7JetylcMY6Js%^>Nli{ICCVvR`Q%3D*W8M@WaXWe{ga^gVAeL$2nXAMt#{)2 zsh(gvWMLM>ud}Vb9sNy)Lp`>pM*2@J3c5gVSBDIn+!K&fMk`p`jB25kFnC6m zQErJeayNKeTOq4{dTnCUom303{<8d+Cl~9fMUh?AmPFVb_y+LPn|{@WJ+F%TJ~Ozs>I_i?=y@ z&}25X``aNy?Twxw-YCq=hkkPkspVR@AR#cD+KdXGMY^N|F9R@|TfC$U^v{f4N-qe+ zq|AF7y`hyiw%}E6jdL{xbH=bxSoG56kZD3utwUbltQs5WO~gY_6r|r#COGv=$^?E( zfumnj=C=B^eV(P%F|MhTV3LEq+1j20zCzY$OqxhFq<17rm@UOtx%rA50(i59_46%K zE<1kC*QHv~PVL^@j<;nC+we9{uao?Lf)np4ooyrlr_ZgQ8x$2mdc7YNk?oyUfm-dd zJ)&(ztxe6F=3IX;*oikiJ$93YH49oBO_WiF6cd9tMyZf5gs$8HeI~D*7+6DOFt#_a zzE4XM3qoeT0L|S`LFJuzX&{nxf39EG0gG1bmaGoaUs|+hwvnyhkVD>PdjIM#0oBUr zZe69cV(XN#Lbrd=yM|w}+oA0+B9}L6&DhtdPg_&{71reMgo4hh1l|I`JrIGu!=2lh zaAZxT-+V(_UoclYd>9v~9QAdUhknDP7jQN`%0mMcrCBn6i7IbxEN{Sk6U}YWTp_tm z+;ll{%l8Xg7!&F=Z%+5E<7h^nf7AT^V9d6U*E9J_MWZS&c0CrLZMWOwzqG5w7x}h2 zTY>V}@@%Dp@@-?4or=(N_2k;lUZ!ka4x3|eQE>zzG>1>ucmCh;;X8Twu3zNp0qzz5 z`O{g>I_d~biF=2*d&C_*i_=XP_e60U#qARJ9&z6m*LF0g8z=6W;$AN9E#f{Y z?nmOfj^T7?ihF^$H;DU$xbKNO>{yOpF77OGmxx;@?j~`s5%&&ppA+|Oam$Y5{EiWK zrMN#7_jYj~6!%qeN6+STv&C%^_iS;ui<=PlU2#iYoNltXE5+R`?#<%v7WZ>;53S~O zCyINHxVMV?2XXClI9|E9bH(+DdzH95#Z8KvH5%B<|>WoNkV| z?c!b`?p@-(Chn)=4w}#D4iWb#aZeTZVsUqg`-!-t7I3=b#64BqABlT|xc7_uXL0jr z?-i~A;?5EGTycLY?k~lCLfp5-wc`|cx(*O`inwdUjfuNg-2E4F{7K@@7k8Domy5ew zT*o4gUoEaz+#id3hq!yiEj@wbYofk;e8++BIPe_@zT?1m9Qcj{-*MnO4t&Rf?>O+k z#eveX&brd-x*wIg+-^6%aWt%QH?*vBH+SMwhg!PY5n=yEe0~k6h^uj3Ya^m{*1PLz zbxcr&lh}HyFI$8NS?$z0;R}94U>#+pB5L(`;}`OF7{3ZGF%ZORttR6+BZmz7Y)l!r z#6Q?>$+ZTa-Y#DUMX1GZ`b3PyE30|X*2`lE zg>8V%SmD*ahTvv`v{uRAKro`At|Y;20#QGLQGy|wC~gAe%jP}{3#tnO-e$L&LCfge z>av1H-x_z2Ca~T34*mC$>7O5uY`{lkxB6_PDw(Ul%Bvl=Mz4C==24g1L+UMiliHrA zX?3gKyasi7F}{1X;&Y-KrP8`S^^XBqJ9X_KpZaJ}iznnZt6nI)J)|xlj23dMzYK0y z4-7>u-D>+NtR8E3*Yo-jv@zB+sK1U{dLUK^qD^@<#;rs1R0Ol;d1#wZi(Bo?YivNm2TSm!*sbEDR9?C^Z{=BPvu!X| zXkvAhx_2-*f~D^TZR%(Fx(Xrn`~1w;f(r|Rp0#ehYUttu%L>nsdT^k!Ybw-j`EGSr zex8b9dA_{`GKwDdNIre8QM<@{489H|55yyiwcR1XifP`9DLLfy{{bumzv zI2b7tV<`_TV;-nKJfW=$8q_6)_)@hNUEYmKtMiLmuolOyx{KP>3q_6Urh&e8_2!Vy zfd2Fek}fZ)q*Z;~T==FIRBw)~%JJzLsqFY#g)dq`)m=y=(XZcuj41XTphdS8`qi#N zBHWAq&&y`9Fhf03*yd5U7NH>nR`2TuqW%G-#9|+}dZUo#5Y2~AJwbI-5lI`Z|t?4cMj$eFVH+N~u&Q$$4=ANBiUM0=8= zdDLq~Uez;H*-3=lY9B|mu>Vbj>0TOC7Z;PxAyQFTG@;YCLhi4_#`{Mh0B4bANUwVf zsV9nAuB?9dA!+y@cF-BU4BH}A>UnxbUc|>EyS3|lUaT9C`_YC0`6`Jh`6|Afp3y(( z=pv!N7{K4o_43`V0}++Z2PmKqT%I5`Few%F?*q)Q^#dEdx~qrOg##@~e>{*o67?`z zlmtb57pRTDqKkZ0)A>hwCiFA*hW`B*?Z1zn(F?If#f~K>M#y#ybgQ4C>7xIZkKoi! z1n1F^0O~CG5i-OVf+dKjF z+E7|92?_8AsXuKPjf^%7MAYa;>{_s66*vv2MvN{fp*7#`w&tL^0X2_btz-U*p0SD?!eN_A1`%&wX0$VaV>;4Lbk35rTx>Il)g*ee|HeV+=C@1wBk>Sjmf z6tx$TBb%^WD{q?mtz)u!c35SVdKaFt%iw9Bs-AIFR;Ujt*3}eiib^`F)b3$3)IRt{ zqZDbfN;#&fFM#7WQJgBZv9waXI&6yC2)Rq#0>9!e^_$X)F7;e#WmjdTN|u7`y`_`8 zDkrN?OHrABmQL-eoT@GvhARGKn6g)@M@p;IMI^Sj4Fb*K+o>Q>@@nZ+bstJf{Fc09 zzt`SX>Vwj0>MnSv-qx`{*WOdq=3&#-t?-UqH5joIcVf4Vy>gnm4&>iN-cOQu@@@Ux zr=Q(JDBCNs70o_H?HY#2Nh&Q$-pO0&nYdH`{uMnV_s}!^d+q(Px>>LPlE zFVnw&f?ZkCqE8R^spp5IMc*5a>V7dCE&Ag!FyY2BwCIj9ux3|TrFyN5TJ)zQ(4v=) z1goz^2Hc`=4A(9C4!D!LoidL-N@3I0zTs%m9f+KI9Uf@Wt!0x{bR=5zL3k!Vq*znc z&&t5ZN8u4CV+t*LcUhIXdE^ZB6#NnwlYuo^JzO?TB`D4n6sJnP1d47OIYqq$zwov2 zLyK-1ffl`fgl^HhM}X`dBXo;CIRce=ZiH^pYpPh69;8NXB|_EelTK& z`V`*bKaqE8eJMR}pl9;8^o%61Nf9l2%}7MP8`-AbAn)i0^o;#ON7*n8zfHQ>X58{NM$oRh?{(pvl6#hu1pDF!}?joPKeukf<-%Zik>O`j9pLr z=;#WUB=Viklr5GYw#RI)m@RCNQkHXkMZ?mX|`LI6@Ky z;Sxu}mbAz15qrWO&X3q*`ABp?q9B!roCd`6Q}$GTqA;8nAB0%>v4L@WvJhdmx)_3@ z_J}QPOXi`-h%GWCoS#6(DdZKlMG9heXVf03h}vAPaDFT=o?jcuOWKnN3){o?=*W0} zval{}kC!BeQ$Df$1SqYotBdE=)dgI!{Fp6jkC#OTBy0hM+M{_9Tf8umA1Mq(iX2H> ztT2oSi2+G_BtLG8+ak8afVe%791ydG!3(NSbO6e-Me|Z%1yEkXM$gDlN3cB5$o)!k%_#>=-Oy;Vn8AUaGJ*nqN@?3IGy$Nqd511OM_X!h;gUiNVpq$)ZS6v;Zu$ z2NFY*rSZ{`k&y%9qvQJ}#)OB5OA%#YWIzfLVz$(%#E5WdcxZG$1R?-#jEawpACMZB z91d+@JZyQY{aElLAanIoEJr-3`*G@@q*aUSaIAQ85%A~AVI`d z;YuJ`LA)S|3PzABWlIz%3z7wqf-tc=zt&lSe=euu>$5)(rVog;rC6_*f?EbZ3Z$*i z^ob&4z_;Vq&a|!mSpLGp%hCx9@MrX934%eykDAdm==BEqW#Q-owN}e z7wvV{>BnlQ&#fUGD`(s!;c-fc>s;JA{gE1~&4OLDVHnqyxG6k2SwnTB!L$(@*FCr? zyp{^a^%!o#ngeil3y#x9)Dp%;2-E3LWW2xNgkU;`j>0QyIs9nB zfu)RV1c#R~K0|O~Ipb9ZuVB1RaPkz!cyH7Br%q=a6&z`1e7oSfvlzz(*S0Z!Ua$%> zep|4sgYl<=W1Wl#LlUSy&MwAd1qaSyJY8^#8Vc7E!LbdD>jXPCGF~mX_5#Ki2@Y>z ze2w7v#f)zg?2It}jbO*+jCTo+2!2U$O7J@-{S_SlQxl&A2Nz}$bp2viF)kDA+QxXi z;JDzaf}_`P_&mY2KV`g3a71vuVCS_QezstBGvh6SV}frITyYDB?=azlpAqc3jl*9T z9JrnFM}i}Q3-R7X?H9X)!w(Sbyp!=H!L@>C3Qh@LAh;sN@s|q@2wrLM-5lO5*!gS5 zs|DBH%lI6@F~OSzyLNE+rGlfsVT_kuO~3jr<2wY01wUx;?>IamIQbOgHwC+%Wt7Qu=8yWUn^Lp7;hFFRVWnKRe}RH z#y1L13XYj@Uf!zWf?Wk1AFr&Me*P2GO6?Ww7{KBG6zm+txTKKdS5T#K9cu6}#^z9^V}dK3jQ0qRjb;3aV8>yM zhhx1kkzT8huE!Z0g5!ee4-e}0oXGL#3rBwon(m?U!gOd7 zt}6vcY#6w4-67a%XB-zC75t*$l;FPzt}W#FpPKkZj0<7U`HF{?Sj>h7(XC5zJc*e25(~gSHaE;7=JFy1_YM~j@-=Q2MLY~t`wXS>=K;#1;;ulyY6QExJmyo3@==-3Z^d)biFS)A-K@N=^c-8_$a}( zPcS}0aQI2a#|d^m#dx{kfZzrb{}~QnEjS@~gW!s1Is9_Lb9pqCj>7s;T0U;BeC z@i~H{g0B!96MT!{xa^O)UvNV3)4=rS08}C8_nP2}0>AF;Kpn~JyEI9gC4*#8Cm*5u#Cwn>kZ-gNViE@^oeG(pifWwFH$MuPy z&Gc3Xj#hGc^8~vNVccM_{?k9`*Megy&hKi$b?-91Q*cD+c|dSN>bF~Pt<>*56aFWr z=L^9VCtxB8*HEmyq5cuu%i#wLPJJl!3r^BR7%rD!^#zA76-E-2P;j`3 z!>g*Huwwbdg0e@!2z+)-WHs?kMsLPui^g#M72ccZI#6(A z2FvGE!O?2Q3k9cSJUqjM3tlBSA^04@VZmDjJ0$-b1xK)ChOT=|cnj;>#{{R|=J1yU z*V05Nu6G0{X`&L>r-CDjaWTG2X!)j2i)%l@fu)QO7aTu`@hrjNNsLbroN_TfQ*i7# zF8?gSfjEb+6YN;ec(Y*jEXTh}u=4>9zgcknDGtBKgzw<+M+L{uWBj7v+Q&Kmn}U;f zaQFv;T{knfVc{IrA79UO{T+g9ujO#3;Aj`)qXgIehT|V+(nmP_M8T;$IeewTQr|X% z104TclRm-mw+MF9#5k^NP5dhv-!8b~2F4Exj!b9yd(ot)iCbLnm~bzLe?0$oF$oIWD@-6^dVo{O%l1*c^G`EJ2Uyob~EnBWS*uNsVb z1-jl7T!;4ny6lHA{RzDH(KTAIQ|fo5;8Z@-I}O;D`4+3@<=|yG*pq`pIrxGcd|3{T z=HQ!i@Etk$-W>c;4t_ibKa+!Z=it|J@LM_f-5mUJ4*om`{{hT<3HQsm_u!^!$k%ZH z3HP6Izm7YJ`wiT0;{FTnw{X++J}S8@L<@^mWNJ%9ztv7ZDw zqGsU5nTBq?h}q36g57Nmo$h&a5i1z#P*%_C{yY&gs1FXyjoQ~2F{m)Jg44}woViph zg;-7KZ89FdC39Ek1wrtYWyN}#b_Qxfr8em}vhLg6-r3sf#?g!|{zm0)#sR3b1mBCq zdI7R>2b=5N>lzxEKMW~Wc7&|hNKu&`OzG26bb)Eq(6(+B<&TXUro>E3xSO!%l-54F z%>r+nFPsJ3yt2{KdTv@goYjQxW={vsV$JsBSpTORG+nf%ATC)im~Qi|0;k^ z8{HlCt=SUbhAc`-91iK$YriB$y{{ug!Hu150XLuCOi*td!R{6gY{5ZE9q!zuB3^E< zWaahO2RqvZc+k@8+Uos=63!aLQJ&Vak=j}|prve+bz>$sUEyZz(eMXwBq-Lu^7?LT z%h8%$WtL#;y$0?OZ+zeo-Z4VQI=W?Hvs=9A?6Mp`TJfCYrBmV*W~sD0u>U$L&tZKN97b^q8BU7z0_}{y^YNfXp35EOfU3@H#T}$aTD|@ zop|UD=_C3253?p{sajK+6$>6!{iW9a)|A+LmX%Pb)~9z0(Yk4j^3j`3q-}6Ir{ac_ z(Alj%3Ck*;@g9mX3977OxCDv!oGPMQ^sr8DuSx8CHDJI-Rm1n3EM_}cjtRdhuhh;6FFx)E%|#)Rx> zIw9>*>nAaJ3qP_l=o4LM67qKj8%Vj5@ar8SX|WBh@&&|;rB>5n5~N8m9y$jqBqtYb z_pl!uJlrytCPT-;nSQiIh07sEWmy^+2->to(0?QhK-Qcy0>fPd`~BShRow8Bt?4^- zNVQcE8}&Adue4M87$%k4qRE&R^_@QK0M#aq8Gm#d@=4ntWUXX*a4O?1;}(0?H*4dF zqKki4N`T7jyx7zsqbFTnwn1d=7n$Fz>{vqkwPZ5#Z81$Pp5Lz5WULhIt+QGwmYhSK z_0~??PxsQfXz_y)krrR=t93YMmXR_ZPN6nnsh}^iY?9K(pQg}5H}l0RvtqGZy>iEz zR{G-+);*difI5j~$g}X9Ee^e7*4@Px(db6O9jBsPgz_zGmqKx4dU zb+QJp9D3K4)`GgiTKzSXVSy1Nl-YC&v!ly{6GyepK}JXhkp;pp9VTjU7C;fwLB>Dk!NV#$9JziF_Hc9F6J8kS_sV$L;EI;0IX&nWP ztpxTrd)=)*vex=BPIF5YGOE_3w`(c49-{luCmxkKF)RDlq+d;Ak;+Dv4!xDl$d2C3 z3MSC@HshzOL~pWLzIu~umOeEb%}C$^mU^`N{Z^Q^X)^J()sh9PEa}NI$pmU6#Au8@ zMu^_K##`ap(v?kYX{#ZP={#Bw1RWbR@n;r{df@c>Ez!cMO77`dwuL+G*=}~^p-%)d z-f8<#_UdH}MtJDIr=i@U5<>2^{@^P9yD@IP*#_)q^`rmF260r|z}Q5L#AphULJ8Hr z=`F~UN%(c5eWcxW%+LlhoZ6f2G(`)@?BI>_)k|hsS zhHKdjN_%Ugf*G#+iSB#apf`nOF}xDtm{6&5TPR?Uc7K{A%VbMc+Row4m<_aH5}E|2 zIBn>yCmVyAsr~Bd?bi4RyAA9NKs)1=+25rgFpWOE3^rh!JEFH?b0@t6AS21U-q+lm z&I(<|lxh6e_*-H8n5O3)Rw4(y%}PK>7|J42FG&70lAHd@4D=`cjTsVM{r8gCGZPd0 zmC?33rj7`);Xg-{o!aVW65~(^FKDM1cd(*KTb}f%aWFRfaV`QC>-PCIVj?txP`dq1 z;1F#y%@PHfdYR;*KR|*RA&_F}Ub&(CcYY{JqZ`bEy^N!tS(tcQg8~{_@JC|$56ZmD zg(m6Q3%moS^Wki*QP7F#E%9q&m`p5Xeq}aa8%Jk^S&^?Pi>Uef7$%diElIM;iqo&r zKB;Y;d2`4#N&gL%_B9Qpt**0u&1ZXHbkh!G^tnEMP)B|Iru5@CwI9D}{rFAq$4|NI zF%-k>&(@QZa2C33jfT|HhHS05pr<>6_>*R0R*;;#v2_(aRUZtl1z$YQ(ua>^_DQWWlUi%S8Fr!mm?%hd_ATRjeP>L51^3v=%W2oO15Lals2-3(U+pkJVlxh zW)7DQ>5u{~=6^bx_Tx#3v|ry>0Is)>>Lt7OCCePcm*a`29A=S@sd-H7VQv_zSR3k1 z_aEB>}nvQe?=43?lVqBaLA0%8D-R8|Ms+hf!*b z^_FyNgsLuVg3tCaDvwj>jqBD3Q@ZGVNR!MlrgRyF$XIW0w?>%Og}vq39y79V7c47F zhFw_{fkJC&Rc>e&F_XKDve&ds?#e27N_N^QU0G?TbY)S6YGm94r)8Hs zExY9DIZT_L&9fOf9Ga0$8J%}vVUT%NzW(KOJ26xHbVu>$ zK4JG-Hd{ zvWG=%jfW9i#ul+<4~y6u4>H zi`eSmjM!>u5nI8g!wAeO*&?<&I3usw zD#kPSFedi5%$}K2Xil%sct@V;gQ_Gc&46VeYn2HQ^G0TW=)G3cOW8=BjZfcm^0`J=+IVHPoOtpvb=Ev{T9f1DHYfY0ZIARhhd6T*y~UjA$Vj&*&W)t=C@rT$ zW*twd&xOqL;R7qR7hcJ5R;B)#IWJPC$K;Gib2?=DTu3<)k{k>uatb6(n$q!)Fx~aJ Zk3uU=hqQr8ym(PPn^d1eF|oMje*vyz7P$Zb literal 0 HcmV?d00001 diff --git a/server/www/packages/packages-darwin/x64/PIL/.dylibs/liblcms2.2.dylib b/server/www/packages/packages-darwin/x64/PIL/.dylibs/liblcms2.2.dylib new file mode 100644 index 0000000000000000000000000000000000000000..81c171fcc10d39cdf92b7cc7e60050508d8b8d74 GIT binary patch literal 945468 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 HX>g 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%0AK$=%F1@^(CQX>I_l)tg_8dQL%J`Yn_m?RRQ}>?G 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�>^Q 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 z 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
  • |_tk5F9+kLsdq;)k8}KSNsw2DY*PX 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

    NiWHMV#NC|ol)OzkO_folt(~ux=oAzi?6DNB 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 literal 0 HcmV?d00001 diff --git a/server/www/packages/packages-darwin/x64/PIL/.dylibs/libwebp.5.dylib b/server/www/packages/packages-darwin/x64/PIL/.dylibs/libwebp.5.dylib new file mode 100644 index 0000000000000000000000000000000000000000..5a868be6f104af3efbc3baba83a99432c1825e43 GIT binary patch literal 1095692 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�~|)ll&YUGKbHbzMze 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°krIGW%uv z^9%BFNASiS|FJPEC##@V@9tgtHg~&?r0@O@FZo%6ax#pJ?)#5zFJ$~%@Yuh2K_Uu_ zj2^zz`Ptm8oPXKp@jJH;9ai8UerKXj{pVIrHRmV(pPNw3#(}-?pPPo|m>aL~#^>^L z^EeiCrs{{@6%ON5pLFyKq^BP9_xIvceV-Jc9@3b@9Pt2fD0uq1g^EeVo#fwxm3W zV-`;B;ip(34l}7pPYm*sPJb48n2r>EoQ{<5L|;^Em-*~4bDup6^87i23I@|QSGSBI zep*w%7roWsvAnDTzc(+pe?~ri(6D`0f#Hxx2b=cp(=9jC|H#0Bs2%xqwfPVl*Rqc! ze{ZYKLT6i%>c^+T`2m_znzRA%!e8fhGhFpHHv}8z&13H=g-e? zmmL_K(IfYTe0-dp>8B0&Y+bL1o@hwB)(!(6bitqz>GYlbLA=xQ(hVoF`(B9-e%f53 z8+})*CylMpCnGy66J?v8n=>$L5RI$akw({TpY6}dG~&j?$H#m3Y1y(Rwm*+E-Jh3F zk(Rw_Q%lmavjXjh4IGH0u|va&)WJVMtV`|2LCU9f_>4c?1|MVcS%;liUS72Y0@)*s zU35b>vtXf{@Ey4qed)MXZL;xEnU#jbE=_9}2p~Zi1gCd^(@L)u>gg}&@<`|0+#&h& zd7<1c2+=7ocjzO5f~;J8diG5zvSVK~(VmXOmpimeE-fi!>XI`sm%cCB*+_6ctuETbpP!XEEF;?p`&rd=+Fup*eVCudH0p`g z)SsEOO>AVNI7f)`AL^$!(~@n>Iv1Q@g|miZ!WDqRX+0inPe;;lO3=wPylKNssH6^{ z)oI2#doT@Ufz$BUG;Unp#F!@0&lM%ps0EW@3x*XWJ-CDewWAAZbPaKYzhTGt3O1uF z4PI}Uo7fxg@54gaUptzQ7$RGFQwSZX5D>3T5d<$7Ni!Nl+FJ-mH7|oJ0w0a3g^kvO zW)w!iU+~UVLrau&noxK^ZeC`3u7BV_dZ*gZjDU5VFJmZ|$aZ{1Ou-#&h7KU4LrS0z z&J~0!mUZgj`Qi~BDs0~ zWK-I+AOr2}CKr-_LRGqzJ2^vuyDlH3&tOPw!MRN|-*W)suGALd>T*=4jG9V-(ll2(ET(Puq*q z!J>$63dZTB`1^)A2QSh~q|=pRTt9v)&Mn-T;vMK(akR^uO7|SrA4hLM!GmZ_bGSKc zkE+@(C$k4ms!OHY(Q9RHpVaBO*+|}xWxC|hs4&o=YdoWMmH* zmW?*oyasp5%}dW1FxYRLvRA7l?<}Gi1}O3kGN&2U;&}1)xS@Ojw~{^lxIFlC&_2-l zDxI^?7SmxIpwLn-j>rl&!{2c@KfUYB4{)PMv&-k=fM)Zh6gQrz$IBbx0>anxg-)(T z6h{As_zxT^d5PNSOrG%+cXk=d$NZ9$RB<|-bmD7w#!&hTA;YV9uc7Tm3NV}y4&pV$ zrE-&Iwj6JjK;fWT(`y*ZNdE)fDb#!lmk8iS1?SHozVgzMhG?V;a9(&b&}yJ2mOvZl zr}G#MDfBmoFw%Og#B=|8pK`h}+4-a%SF#ydLM2AYTd9D-}BRb!m!{|}bB^)ZBu9c$8u*SaTsDexF zO3$7ho73`2oIg~C_e=BDiB2^`h|_khTNiK77R@PAx_ie*y3@MShUXtDArT9CZo9By zMqr|?Gg|&+g@~6Pn4dl@4>y`Lx=Kc-aW4FTMnB3v)qd%um!TPVAv_P;re*Mcb=v_n_TO&I;QiejX zhkj-|pTF137%e0nElXO@0Gh$u=Qk}W+XX+mhD%hp-IEpm+p@+fNNbRV@CGB}`#DZy zx3~RLtZY_+)viy2=g1%I4K=P^uUxuO)@Wm3p_Ap3SDH!XxHkS?j%>)toO11GUb$AS zThYdH6h{_A7ZIAX_)R(75VoZ6%F!jx`6Z4N&TGrjtDL_pV&7SgCUE|*iv37Ay1~(0 z=M+b8aAd=BGP7~(iNffX5ulmnt!5*i_Eg64e+#MB(Z379#;2Hv|J(A$;a^qWIQ(mH z`1Rk|OVBVwh8h1YMKydKO#1qTePN7mQhWC?YS!iQ!=6Ve{08^nXQ|0*7e%$ppg9%% z1^<41!gR2><;JZdeO_UppZ z&^{w46L&bxxgn>o+n7Iw+8e*DmfejrE7_R-S<(0@l-${7BtqYiYLldmuVfU^luGUT z^leVlD;Wv>3gr>mO?P2JJ}2` zEyDb6QJ9e(=$WbZ7}TE*S86{fk1lih;`}{V3C1L(CTe(Kr?Hh`1UZ3wiXmiZADht_ zn~@`I#zz-tmvQJjs%GV6F3J0TJp7me~006HW8Qb;CS{LnZRc38xD|8M=KkN zzh0TICAbB+SQ+<}^idV~KF|I_m)M`-XJ(b|{^145qMXehuCRyTRm0mgc(Y~X4^AJP zk(EQgRpD!z(HwkP9lwQ!qOCgC2p1dwgL%2b0{Jw#u|#^TO1iP%(}*y9i=&E+al(v` zWi$8zo8i-JM*empC34v{e%M@p~pb|ar1p zNgOIPnN2;&Ve@H0HMw(-@;%aYcFdwkHLJDxs0|X0Lty?)=EeoT!wWL#NVVa9+-q_k z-b4Ch?{eTS-RM%aj&vBI+R>{nz9IV9#cgl$Htqx0fC0mX8h0Ma6D;CFx@L2V;_sJG zdg7{znxDK&TY*iX4|!8;E}P+nY(_t0Gq~I^zh^VPpLfg$%eZ;bs~Z=Go+F0#&&30T zr8N+81$ttuIC@qq|9Nyn?F zC+~;G)i4gv>ov@~CgX}T7kh|tK(!}+iDmn}S;HT}T{5a+qB@O5=uh>kRj;C6)HWvWHL@PWpDk({99>(v!~A=s};<>_Tg6-o8mWQM2Q4zH6b2 zHM`UGn#LVruiWkuGpcP>DX4# zA@>E`XVyd!yo;XisAvfJZOvTVZ~Ng{$30SLPAQ}|_5n6)`5ki6AnvcpZN;B8hZ?&- zi@@Oz4L^n%pUWKmm`!~NM>-OhTjPFpYAu|66sm>HFXPRTm4??J*bM)~J4pWWrJrgU zKY3|=t>lvy+JZ3p8uk}jYlK|K5f8}<(2-jHK|}F-oKCWrpN)+_mr~@;?T7ksT+fd2 zUl1a#3+9zWOvT$=Bs!tkRKy>g8og0t)4&X;c$EQ23aUu;aWN4tvQ6tJg!R zpI|?eK>A6hASif>eTPo789vKll8-QOwOdq=zJiYkdLqKd6*l8Ald*29$0^#&+eep1 z%W}M4U%CKWXad{Lz;=zdO)QO2u}N&kUuRRt!#DW4fiFc=J|kz;$1?}|1P38FvkY%} z-!SK}8J)|fzL3q}O2b@ln7i=ZipH&Kv(|iF&Zl$r(+8s&%xIIeUaoKadTg1r-Q%4JL*EC2T)L;1G zHxsvSq`%E(+%RJcnIm7Y8T=aG{@618Mnd>O0e;gqG=AE?-Xc5OKcK*B`DV5WjA%K$ zC2hbJCi)Er4y{38qmKA#MMJJ6#)FlOccDc~{=nMYFnPnhogX5sH^S)UIUz^c)Q=f_ zoXyZ*hRdW1;NUbiV}_}}$sC`-ralv$G1cVrC)7PDh_4zYuk|z=zdD2O8bRk6-algR zMuF^Xlq`_n`3`xW5#uLphUc@FUVKVlY?Pi$^Kp4LPVm96qw0H)Z0XGd~H=@0FWw6yfT|`2~pW5UvvO9Y!K>ub4Fe4d5S*(Eum$ z7{{{TNX2P3Ls!{n9*u9(-S5xzXYzBCeAxn*A5 zgm&Qi9-oR&)eMK9n$TW$2v#%-j?MT|Hlxc7UcqJry;V^N-?OQ&LQt(+^3}$ars+wT z-qgtPJ5AwXGkc3hjey(OGp=IvebeMKv+Ygqe1f(I{)5{qD!p^Ej2gO`!|yS|?=`~z zj_@|)(2RBC;RJ5qXp&nV>jvGAWd;0?;9=rS9MSkbBiJ8oh7TEm5A)8Az{}ko@D70A zqWoY+^9#a+j~KpBuo?Qx2y+%;)b!lsV{(6H=j6?qapbSK@3h@Q_*k67#IG9RXI4T| zAI=@r+;|X5E1LDRED?Tkg4bEe=UKF_8Na3ow?H5KrIiuGf*CuePjtOZpxT3*dl4FwEFCY_zqY-?8nF=B?;h^VW14e$K(&Mi&h8iecU~%=kri z*DtXdG|c5NjbAtYGu$+n*^0DDU z$GpifqwA_F#_!rmt!%WzaM}%%)W%YB(O>x9X5it6Q~8Z$Ue- z?Xa=!IAX!JEpRwxIK+)OklQ1z+R#}1{=EPnSu_hzFyVL&j#J@y#c-Shx?#{fkp44! zTnHNbGbeL`VNN#8AWTx_brRzFrM0|J0`EYG8AjLxpjieT2F*4?h75C_VJ9CpLcY$H_2Fz2y<+&vDbD{a~gZ$lIB=F8h#xQN2@n7iB1G+gNx z7+x0{X4o*l=3pv&{p@Z8hTp~Tx7^sa(l8^EsMT;^W4Nq0%uR+Fg^Bl&Zg0pDvxjYQ z)fLu)_Mqa`6FkKh6hwQow+%uiYRd{Wb?X%ws?x$=M99?bepcagR09JR03{Kz!T-f zM>V}jP<6-bF)gTtwO~VqRwy-_u&>e0g&X^KbqezdB3(oDvAyRbB z=fYk?aMzKqI0`a|BGeT(vV|QWoJn!arHFzJBkHi7w<0Ro!b%K(L97FT5J*>}8YfX# z9^-I%eIDN8)9q1vI3=W@Xi!9PyU!QL{=JCF*mWqG07XxW zq_HAt@zi)K3ft@Pg%xCw|DDb_b{$f~hS&uEo0qtz!w*W@9z}gYd23!Qh$Er}Z61_h z*d9^h2!;|;13_ddq;e^TP|8M@)TrIZGYG{rS6tOoyxv%?V2xNRA_*7rB2dMcGg8_W zM4gV-LIo-kE2|d?6$us&mevc$a1{7}M{E%si?}VQMvz35pc*Y4vPBCcjCQ+>_?U)M z!>J)h+!0RIQ)70VoIwXthSM{KGb@JkL-j@K$Lh0uF`SQF94HBAT=RsuN}$G|jz*B? zh#Izq@je?{#S`)zRwKwK%C>M&38h3-Pdv@#(oyfcQB?W}%06B^f|EHVY{N+sR%2?& zp=%x#cm%a5jw%vF95I|1aV{@=uqaAS3o5!Tj7U6a2wWZ<<(Lw6VrPXy8qR0lJxgmofw;pH2!vHns3poJYVO;@509bR$9y8|&5nL?s$Xs6&5*L(pN$^d1_F$J+H znC8JIBpO9whl3X7LPpEriR1i&KR3q`MMk*+!wDTi#`q5@F#f#mh#FPA*cL^JvB%^# zm`+br)k|_LdTP8d%2E>YFvq_UN3g61rZ@~p!#q;LRwg1 zZ$Z@+Q9ZE~9g$jpdRkP8rUX-c5%z+!Gp6YdTwtOoTm>x|lB2~?TZ39uarq*squ3I& zxq~S&d)OXNi8-)iuQ!g`&-cVuwf!gbg|hAb?b&N#bHfdl3ksAmT`55C=P$ z5=@J-9sBptwF5=)jtavn6XBh%vG7nlc;8MPu#Fwi*T%5pU54SOaCTPzo+I)L{6m|x z=k416U4OiTVu;y=U)UToGlq*c=8R(w;hr45m<;zoHH=j+9IJ`>HiTWZFgCw%v=N4O z5q7r5Tp+^1`^o5P#c{^lCCA?~_LZI-Ym3?0B{|L(a}c~n!p6YA3P-TheZt;{lH+Ev z{}}j^xQ8D`;lPdEJ>8KnVc#Pd+ekR##TfX)?mn3NLpT8LEF1#&H2pt@c}j$1eTj#o zNygs~RP?&NsCx@^Ltl%JVUR=4! zvGbY3f#mr9%+cqP^9(RM3zBmiFo#~id@2&wJp%Kv2zy5+=Zi4n0nZTkDEI@@|BK1_ zFbqH7m8Sbk$@x0iJ@86$z7JzxqmuK4Fh}*|93uvgLHf01`kiBuK4CYwx^M){bFr|0 z*Er0_VEUPuoCk*8Ba@T!$1sPdBrFj z`AhtscToPq!FQAM`LLhhdl-AoOv7w+La`;&7JDD{M>sSGb211ALzweHIQ$XPEX;$< z6$rb*qfGu3ESyKrYSblR*IF{>u3~rJdYlX5?!`&hPB^fg=wZ`+XL6n__8$cg5clYB z$+@-IJ+>QVE$+cR7!N@>v=?(t343rNe=4jWNY3wNr0pQ)GZ1(8A)@WVKJZcD_)(0F zCmcOSR1z&AhxH!EycoivlNb|EIC>7-Oh4B!-;i*O6l4A~4jWMwnj!8kO`#7>b}00% zuroz5=2>I^;Z%hVhA$o>6NNqCH-uef6#7Is4(6dtI8Ikth1Lp(%PI7`=?DCm z>8HFx*G)fQCte?OSYHLCS(qv+#vFP^Ie;G$_c-_oVRt2ka?P+{9)5-W>)^MAxj|km z8~|?-j#N>Mx&Dm(R#)h(xCd*aY=vEDz)PehTi+bdPYTi9%h4qfHg+D;#X5 zP>yi?ZiU7QyBzQlR8KerZY~^uQlYlOuBR31Y`TM=687{{s6aRbepOiaDfF(e zv%f;~O#k37g#+Lf!XfY);W+pg;otzpm@Bdvj-%7B&>=G{_%G8B_^dFG`*y)}2lEg@ z9G1s{yCuxy!D$$3h~0TyxKv>tAFinBj&b5jn(jFYl@sQ1<0=dD_;EFac^tWV!aSZ_ z6JZ`#uBGV?ZY#{=%snK`=S_F;tHL}!-85ky zr|tvO&v1o47k0j=(09TC@Ot4mc&BjaC4~+P2VYj`Z()zF5D)RhX^VhUaRbNf8I7_M zcD{=85srcD2?xiZ98CXXQ4YecaX4Ru={1F(H2s6KP5;dz< zt{gT9-e>aXsPn?;h)Yg%MqxjC7-Li@udp+g=5PV8Z8|CQK2cq;k63A zC+z(h>^SFy6gn9f$?oMNr3HS}uKX{HXkIVR(Fptl;T$smcTq_&} z?-%Ay$;X6aV9Ww-#P8avP$6L-xQ5BU;W{fE1a}Y)?Lz$*j)Qv%dv`1JjOiadR5%Rg zVeB|BQ80Sd7#s(`DeT;Xb6+?B{>t?8JFXqVkppNyO+SawHVQlc#F&vKq^!VhVLF0) z1K~KhkFf73(j)9WforaC7(7eZ`4`Gln8&(YE6ihFZWrdUFJrzE{Lmv97pNZ5&q#7+x)!Iy=@;IvZ7czl>}tekKJTua!4Ny(ZEhrn%xU6`<}n{XJD znLQyK#pGs#g?Zw$VWxjfh&D#piwV-+5Y{na8v33Xc?n@6HST-D`HEm-wbjA_mr7fN z!(jBKF#J$;l@1Ggz-NR*U`+93`0>_IshDsWTuInnQ>FUCL2zqfXDyXF2nXt@+H`8QHNH8FKCJParAmnX)%B^+s`lCzAY;VzXb2s_)TR82Stt}h$`w-OFuBEI{D z-54XTqi_fl_VpC@ViLar!qir!Tw$LF$67cF9%;I_Q)!g2tG!BNg+1vgD`95`)tKL$ z^AhZ+(sXfmKd90y;ZSFl(B;F(ucxa@9|^}EQfa<0PhPlGIQoc6Jj^M_>GrC|9O}j~ z>Y>tZad-Ao=`Z2nV=7%0j)4o8m9TwrUI+)DRjHoO`o{FX2KCD1UsU=< z*z=o8J51iEqCavnkG?}Hof3{8L;E1ilcMr`^hUW|R;iS*?+V%nVeeI(JHiogXJPj> zm3o-&*HwC2m?vc&Y`T+1dBPq%3>hUH)-;-8`oYAm?+f!}uZx6TDH^&xC({-vq|r~p zvBDZ{77mxtXt!{*ltzCFhcM~v-@;Tyqg%oraG~;&UvOFB2)KqYPhi_b*aN;-I0)`6 z90m6lc4E@o{=#1HDB+k(qql?um?ZaO;ZPloFeI8$=21+lyHz;eSR?e=G2DIl=<2#~ zu$4wd(Qm~#cQ9#hCE)-j@@+000pBkiYpYRL;W#D$?k5~d*XRY|Xh)6E_s59S^Pom= z3%f9p@Q1?uFe)q@1FtasKdjLj;cz#N_6P_1YjjrF`vSi5sF;l3Ia#BM!tszs^@P12 zYIKiqc)mst3cE2@W)I;2_-Ww?c(5=}_M9i|1M8+A@DyRsB8}b=4u7f9eBsz))GJ}< z5{=dgd%s3q5_T=q2whu}$6`5-g>Vqx&lE*x6+RY`l^RtLc7Lx?L*WqkZegCpx|6UD zepEODeoEMhuVV%Yd%@2M^H(#YOg|BgCJP6_?+S;0#Q7o|Tcgpp!ul^bM#9dG8vQOD z-hzAy$G2*9P1qgPsCeaMzFa#ssxIsSHy8GS+nc;wqsN7V;Ae#+;E}@4JsM3g-4AFq zOPFFB%@q!Umk8^}HCip~IiV3c>m=(u_^`0=v__Xq_p=(^5RQWj<9R(F7w0*g*TSB^ zHF67w&TG^~ID)T`o-zGg(I{6~2agbTU)5-muovGey>Id@q**vhHu}kQx7+BTa17u7 zai1PekGH6e%A-F5GZnW{YvEuC8$Bc(DQ%;th2!Aogk5E9G*Q?G{!lmwULmZPwb4f5 z5cm(_82F;eNe_Sx`RgxyU>#~Bpg9c&LzT8boBd0*oTgG z2Zcl6xNsbt>Pqg{jlOafg>`U4VM52XdxZmdu>7!a1pK716Wyt@guUPqrXTP$VGp`C zEfnVdVc!Zz!H0!i=p%GpH~>zoo=jT|Tu#{4)X&@-N}T*;8~_S9`Y{~4o*V8grneyu;+EuAK@@~hj47NjgAPrrl2kfN2c58rs+P* zM$Vd2uimjyHQ^}OZ8BacJZSP98$B)@4%uj^u=67uy)3NHv(X!-AMjjZ@5ktRWcmSb z6!v|Bb4@q~{#%&l+sIxknKsv_HYy|R{LDr*gri^BsFg5%X`_z90le&Z#&ln7qXN@E zI4JB{VxvXE@vm+4gRpD44gK+x`=u2&IwY)v6T;E&ZB(ju(vSBC8`TrmSJ~)(;W+pa z;b_E01BChIOP+85JkIpDEI->54ekP_&(&_^nbsd{K8)FFw;NyWnpJ$J53P|bj2|h z_H?t;0@F`-J1r58d+oGIn4YxLUSa(yJN;$4KW(R*!Vz%E2FW~zGwjqz*w^1q_Xx+q zj|d0xLbI=MGz;}m*!8TPa)fp82;mrboatu>#yL0rrEUB;n3T5 z8ZNBAW2f=L?%8&F-{ep2^r`6|{H?Hap`BI>d%(Y%e!zQ#!=KstOLgOZ&$Y--anld@ zny~M4JEb*B`tf~%V<5WGt`^1Ypo3I`%~e8D04`pHgO<0N}l+X+J!8}S6!*r}Ru z3|voGUu&mk!tQl;YA+lB_Yw}`#kXIWez8-oaAX_mo3L|-on9A??Y7g~!rnc0{;?|(^%v@%=?7e-NixpZDLYjW)=%R+5{|^} z)KNHo&Q3mI-vv7r2)iyJ&B8IfxDN@36G*4&$L65b!fv~R_M3jdCxj^lb5@z0>L9IY zGHqUP5#czvny@R)LH7s;ieg-4;ZO+&^%vGlJ7|osr;LMU341Z$#zNB%c$IJ%yiGV* z!9j^YK|_Q?;E}=+a8TG+6Z37E zT+2b5O+Vn{!c@mW31Kg|XfrvE4UisTPeTVa5DqkQ(0#&ja93e>V+Rco4!RwbFRV9r z(Cfkx@Vh48jdBxqJ>a0F!Xb3VST9T-2mL1OZRena!k+dHI%oP%caXh#GR<*td0|fn z2Q?SgJ2@y_IMBsG-G!rF9n?oS+}%N0!d`R&87A!P;hx3}R^>tl1@FdE-g`~fqgDMI~e3)ZRIGBk#ARKxQWiG7eJLqwf zpLbA(>3;;uU)VR&LAvP<4x0X7MEMJcz{`ar;LXA@@F8LMD-Jp%?9?4}S=c+;VNCYN zzu9B2A}=kIc?pj}{Sl6WYYV%_;=1e#Eg5j;?jk zcHz)^Cd8orN>OPY4eNX9zC<4-u}HK>atF zFfXHUXIl!*6ds(4IR=GK6;7cg!rYPRJK+xCHNrgK-$r4c_ivjp&;PeanCAhE2?xMu zgpY%73jYl*byqTvsYO$$zHn)9y08oUkZ=Xe`PWnU8u$s}tK~5ljBvgBDU>hl2EQ#l z3mg*mHB6z;O};mURtV2{D1|l)y9TAuLE#BmDRf@g{cH-=Zj(%N8*m3<54eZ$a&SN4 zmEdQEhrgIY!-VI7UlINqJXLrHc$V-5Fh)Bt>OjFun1|Bjms4n&$(UDio$yHTF5wV3 zE*yU~g>DJYn1nLFI~nI9a1-H`;7s8tc(U*g@E5{QO~HJa!fU|mghNwNZo;lZ-}}Q|LG0-QW`@e~LLhg`ZlOLPhRPhV_A6!pFfaO-b~RiI{ZWN=@D|g(C)#IW*G32ZE$l?+(!%#8!@3vaK1Vnj zc2Eo9z!zwHg*{)PO%Qh7k7pOmXhV3O&=-YyzRM0 zr**%$d+<&nF0A9dc|tgd_pK!#NaiH~t}CpA?-35+J#07O;A)M0!ZG}Qd0seSbNYTG2ob8J*W*z=X0>Ier> zr`j;1On4sJ&ZeJTc6vsbJm@#hjP&qaxvvNtbLNU4UpG99V@5nYAMFpqJTL85VV<8h z#*A~E=jA=ijC8s>*+{`Ym^~eBR8p8a+sGyC`j)7vuy+~e&SOS;HX%Kah`YyQqd~%f zuDEA58SAOSg!{wym=TueB>q&G=O$h*%ySg473R5$w=*MOJg4tbVV>Lfis=VwNNJZ$ zKXr6a1z{KJUL#>Ip0zw6?Cx!&Zo&bqpA-%*A<7Ys;6CSNVRt&7nG46apntxw=K!9| z3F~`ov|c#64bK&YV|ea&N;nKo2)qBlbK~~OG)M5Pua0p1S3H*!c5OvEg#$>V%mzCjp# z=Do@PWcaDi7kR%jcnm)0(lts${a?Z-Z151)o31dp{67|X>m2;sMP7@+Wp&_>!6OeX z_C9U!*dvR*{SFVk_YH&l4i|afHFziiAGM4BBOWlRG>rUTI3dyC4(Q&u8eD-n!h2kt zzb^994*o)sx05jH$a|sp7=HLM><={je&8Q9nD<8ilf{{N6n6?6o_9%~nbdrEr}Uc% z7olGu&Ib&x{|5Fg8$5gncOyIeO4-D=={5KhV!@9-Zr3Mdwv&gG*@&66`;tVbW++uLW>lb;q7+mfx_U<;g z@_32&XN18k-gCX*VBUBAgu%Qc`zeEY2ljEo5t-u3;k#Tmg|?|TOK z?Z8~v;Nh){y~Q@$r&dgQdiNQm+!S`!$C2WJQx;Q&ayvGeLf5`KW8eH~OybI>=2k`4xmS=xZVct3aI)i!l{M!ga#wy?Ld6yeJ^p(Y4mBD=vF7`GUJodH4-WG%F z0e2ZZ_w5odYw$=-vG-YnhfuGt89eqCv9O! zgSMG#igC1$(Ydx5qXwTTpYyzAz{e#PRQ-Q7~Bo`7Y4Th ze!<`lz>C)@4P$Tgyf+dCuj)bDWd?5qe2v8^YcBB`9sE(O%NRU@vpeoLc;?NJU4tvG zF7h5SxV#$gi5OhJ3VZks9s>Sn27AdO?>U1j-dp7TUcJ$V_6*V4u0c zGw&(#t}(dpiXyMs;11;3W$-ZayvxBKU+g_#aQS7h2MjLz_hRo6gX>QgdlLrt{jXy0 ze;7Rc8|+sxcn)!vUZZrD0e_ys^;qk?)Zh{1S#5CNC75Rs2A{73Z`%l?z2?vsw^^Ku zH+Wvw;34qy0fYNs`~9849mwZNgGXxc4w1p$Rj?ThF2|UA_IjnQ4}LHlzbEo`!&~s~ zp277W^}N*vkKN>X>kS^>iud&lp4xf;+AaF1yb2?lri)0q;c^JoF*Y`yT>c`~&`iYf8Mg8C?E;thXB60Xo+iJc4!hZ7xo6iI*|> zh7#PtY;fP=67PV)V_u2(_YOw}3g~pL&>+?z1?{ z5of=}sl1}td(`4QioX1hgfT9xcs=Ib4t@)KSq^?1{2S;$66Z~4dapP5nS0Lk-fr;q z{+ZrNz+eOZJnzaFyeUm;p+I-7`!S5UmJsOiou_V!S~1Duf*WTV(|B3@Q-5f)o3epCwX@n z+X*~~vIkN1u!X=|kN*w$--v&RwYLfX*W&*={C^1lAI3kn7kJm>A6p1K42@nI|2N{x}&n| zSZ$G(q?0a&Ue(g=uKNI?Jk2_myawrnTRguR7jqcRE`Q^=+~c#cJujWK#`+dqLlO%> zX*d!R{B#6Xw@VZ+jY!pv-HmdHbDC#oM#ntrk+o@UaMJ88jAoan3l-S7h!KN4d?Yz6S!NAWlW?>2MDl(IU7nW5)tPSGgD7 zXgeqZ5{nbIdG}IlOS1;BxzRsB6b~WpR3X73!x18hJACx2q-LJto96SCjXRod3!e~O z(NZALRdTAL#B``w1c{EumY@yoJ)KQ*d5uK3Vw=M(9YP`t)-al(3l3>?8$!H^8p$4fWy9LqEsvnx7oS2`p@d6X*q zrbMJD;nEhIps7b-r&n*dwXx$8^j5U*x@}$>)cxg~2cLM>v_I4g;O6B3`719x-wz2c37Cqb4YN98?O1x9lhiCc9 z3Bhs*y;CCHjm^@LM5n}*8>;B^k9JEvuw9QDhPqyPBQN~g-g-N4tcrB1J8oMQ2V$Kv zNHwkWc##P0aPx)I66cuT%Vv=cngyq9WKLx93(ESgbX*fH$)&hE_l8Maw~mU zdWB}gdi_7`6e3S4w3=RufE$GB+f|xsA){@OCs$#Lhn~l;LL@`6+;vj3gZE6DWOm%9 z=P!qkJPsQ=2r?j-1yEu)wns?zuP7_rq_K@klh~TB+4D$(x9k?D)6&=EzCcFt(iMF*+yDEgOQfb~n=q@Xg2eb=%`NBI2 z3*gchT@DRnjcaYTFr|)xHs0RmrJLnOzVz1C5NrcmpjL6;5tSJ!^3pq3UcSa|>=32w z;GH1-##_L~H6VUt9lkbUmsdK)ul3b@T#v6>fod5*DAjNPmP7D@QMDar4Yd=tO6 zeIpLNmndu7Yg@K-I~Zv9xUvVuZmg4^O-cDl=}+|{30M+YINqjQiQ7FMt!X%FkLc+urxd>9q5;a5gzf*a(zxiF1G zgb5uYj1i^@qX4r5HfmRTi{2`jZf-Xa5~#%RZXZfvJRSnKwt&@PY=p;Rqus&~z%(_| z9Oy!pt=mCu*wc+kfV5a=PfK09+)qKQwEjXp0rBG2@|J~0KNM~l9%HFX>WZ)^*Z|L!;sT7@m_Zr)0}hbZE9} z4Y@=i0>e|Y)1ihYH+XV(E+&48b~?Pbffv!p7!YFC_H4J2BCKi!WWzP`MKKss7vj;a zLKwmq!k5Khh+c?)cML{H3-MRPU|gyk1zZ#_`J#By7oqGmZMcvXqhxclyB9Il*oHB+ z3g!$h`9t(r5NCk6b!JDm#-Rms@ns-%VJ27hw6zsZsv#S2Use-1jY2_$6^7~?1YBzu zZp6MR&1nH{dx~sziWP>cn2_PgWDKO@wjbP6oV+;{aJyt~eGA&lI-a0_(5vSJZEQqu zqnN-t?CKKn=G}C$?jFOPDh0(-MP>u$lsnpYBym|N?>ccUVr4+yyIXNtjR+B?SLF4y z#7G^&o-ecr%1jZh`YFl@#nelGsOJ_8lN;N4VOabDb8HvHTg2iIv7oBX{A4=jx}?aJ zm)SvQ>8-zbc2||=AR8BAQEEYCfvBWnVO*5eNNNg(fT{=&mVsd5fl$k5czoK|OM3`- zRRpdUkmAmvElMhdMHppGEIbNA)xbj+B0oj9l`1<$<37+OR3hutg#E1z4P)v zBvm8Yg{qTi!`9X<-85KP#!42!A-t_+XI*0#9A2(G;31coPp6U)SBFIx(K+wMc_T}E z=YNrL;!F}5u=B2Jrd?uVd+Y+)$TFAVF@NYb`;u%Be+_Oi!{u_EP!~YyxRxJN^kxo{ zSE2oGh9OAa1ha>oECgw)2(6*KT8l0;s+`r8Z?WZ?R11u$i_;ff%vn~+XwhqBe>iKnOlj{e%o zJ8@B<%)hQ~2Yd7;EpwZ2eA4Sa)z6|jqYGYEyKsxzK#{yJSlmv-N3oIni z$0!%Xsy_@Ah8Q@k92L>(4I^?Efp?E_s6K$qLndXqj=S#h?-6+|V^ zJo8f5x)ylM0U@ZWs|&Z!TOgj{Tji{@tq${tE#e;&SD1U;u)V##d#gp4s>3O1kHR}- z!C_O>t*#SvX_2elb;9X72Xc08#)uB}3q$l~&DwI#Y1i^PGg}(uhdmO#veH07RKyfv-ICO5&mhj^0+IHAD zt=%w-H~?YwR@}|u)QEz>8(#JHaIVFKx3<=F)$+<=H&c>Em&6c=Zmb@nK&FoH;FC=b z!#wo9SoLr>!{7-6oP#?z2j>OPrHY>DSkf9y5NYN)|M$lB&?#PsNg-oh{B=9pkorI8 zU6}Ann8)q6uG!k&)v}|$v3slN87Q2_?Okx&MA2I5Stex#P_C6CUSk}JRmvEZo7}M@ z;o5OFz-3CM19T_e2vj=!8#vlF!G^^epqjt}aV0Yc-3kJiSx6_~ND zFb!q9z+Mh72&Db0Qjm{@f3;yFnj_!9mBGKhy@NL&%X}PeADM<=7;5cKc44^-E5Vj& z*wZ2p4=HdSC$O)lYb!acY)2UKFiIPtFtKVD-Y>0#gDnSY9H})vYEnvf2b$BL#x8&K7z-+1sJGTW?4I|~wZ%Tq)?i#8$SUmV?Y-@@Vqg6Yx7_~LzO~~{}XGf)UL60k$QcaB6 z!Y93N(W*+EHl7Y*vJ?d`u4@%cpO^=$EFvxpC9fK*gp*e*tMg5Vwj}aq` z>YXs5xp%|P7}Jj-F6^2i2HL8zX=_VOj`oXCEHS_D#MFZ8#$k4@^HMCLPQ<>-u9l9fn!D(}l%i+jf^QH8di3 z5p}78wY-|c;IMKLfiRoQ#TTo+ONf&6QdCwWLP~Flg{T>WPMU*byTp8hvFsrqxbqPU zShsQCQLH*3KY0sB%aCFl4S01nZ)FD!*mZ@qRt}xj?b~5z>=1Q@jBY|_r@>`wo%w;% zXCz;wjy$k@XvP>6vO$x_2%uyvs93(h6;{?HNEfsS$;w$>>kc(AYvi79vu*T&EZBkyl@=I zR^BYW<+f<%2&1B>12%1EEBc;xyA3eXw0m!h&Gn?eM~F+KX9}1)>73tEXAjtLsk)pN zgKc}Yi6a{(7l-^}C}z2_v!$)AwaevcN)LPq4WjkcLaIfKd!`X9W}4P?U5REAmRJ%M z9;+xu7K3EyQ;WU^1aSqnz8j-60bVe!231|-PIG1Heiz{$W?zn}Rh=!#n|oR@SV34g zwCun%ue*gl6t_)OYZ3P;VD~WgpwJOY?Gq0d4+G3KYG~U%gMk2hx55m&bksnc`o?DN zHl)7+?bFk}9$Q@8#uYrWh}ffuzwC37$Ow%E;wfjZE0WhHsk;TBuUi0aJcv{4j7wui zEJKyW7(!YWoe*|O`?eMsI)I>#y3ltq9tuWtR#SMR4r!S5*JA-!inl@puDR%Pbw_}# z8goDZbZ!UaRI6iMCvp&)3%O{_{DLM?g8}9YE}KU}XZ~v*wh4@vL)6id2LL#uWatK=M&UKv}cw#dJhjO!tTsn1{lb=&zn^3AvuXhfuf{k%&-Imxx9)D;_ zbIEH>OKY2K9M4aj7eBORBOic@r|vRTVS@mm-q?N+x05+FhA2dWFU|^TP)^852P7Tx zdfV+S6cCJ-RDrU0F$@R|>yWK^E*P=txxGE|h=P+Q{3a$g|JAM#50$A1x`R%=L74*Z ze?rT^=eiO5)!JDpF_`ldmf&(#mY`N+Crxu>r|Z8MhLHhVH)jVn5GW5!kT8H6CvU%~ ztYYQw*@l7B+=_w26ogC;!_`x#7toz$b=5t)MD96SZ*4$L+n_l>fTf8rE>(o7Zg)7B zlaWDljk7A3i3_f7kBV|Q>CrOXBE-?vdNsyj**>!#z8~yrr;Kdaiunw-i9>&YIomtv zNmb|enysyE&9Ga-2^KTcc;N=w5GAF>dIg4PMn%)akWN>tmE#n;t(GFDqhC6Jd!Sol zM^EVe2@PV|Q6)A83gK9>roFQhb|(ZvTyq?)Auu#PJ8O1y^mOY!|2R6n|6k32SoF4q z7J14P3YZOBJ6m^b!xl!J{Keyhm@rN}fA~rB-agPVP2?Dz=e8Y9u)`aB;A~>%ElqG= z1K_MX=d}@i_sD!}e4~lx23CA}wnI$2)}bx8z=4ZNKpXsp;wce*+lg{yFk`S6aM!%h+WaATXwnM+gnh}$6an?JVN`f2PC9j^`_e!@!HY0HI3bu=nsSOgr#l%z;1&- zmmAz|PP9#|z#HL5l*W=k9myDNU1u|OM+_^~Vb{&UYP+oiy)6vsVn4zDJo$yqXpfCI zcA+LYJK!$tCaX-#h|4;@P3^*M5OHY?l;-LNdD`}&Zd={vLxX$hXlvZjlJ0I#H-YqY z8!h&2+DGYzFr$5&wVo*6`j$?dk0c#9*GF~XHWNAFf*W!9pnPIi%1^Ojdn4aRXaoa5 zmdzqLk$}s+JKXWN4U6^WnLsQ`1ZO*8?Y5~80%FP84+8WVv(-Xk;{*si-o}!nncTK3 zJ6mqXR=v)S7JU;9#&B$UaA8MdbNWV^C*(?2WFW?(6tKrGgeRY(k#ArWwoWeG#(1#X zO`r-{iWhEmuDo=Yj2Ni>DJ%%I4p#gybC+s&t9`gl-7v0et!?kzj$l~(z;nW|&9p$X zlU{U@OK}2cdRsWwc0tWH(n*juXB2FxbQ?A?rkgr?TCrY`?tvP>=INHELg+SZuWZBQ zyiiz=?i(zaAzJUYo?8l~YS~e+AWHovC-pa_Z*A|~*3y}7rF&?Lym@LJuA7TAUFmi> z-?!y>V8A4xa-1-V(pZv=7WRTDaMdixDZ)v*E157p5akVJrwG)MFE=n8;7%K;qaTC? zukE@S5n-9=xkWF!GTfl{6)cd_Q-*jkCd&Bnja=pow)=EQ{z+!#a0^h%^GZs;YLq~;hykt?b3BV z$wUWEma`M)ay(glYbC;?M@Lz1zl;s$j7_gJOYDLRNT`TmlnW7pLoL#9n(AJLvPUih zM~q|y!)O+Uh|;UiL>mr)x|pna(eQ1C(>7!S!sED5LjbS)8O_Ae4xri>EqLE_DDfHchh}+>mfzf0&w`kC9H+5pz&&duouxY@BnhV@2?7e&bL>>ow!f+1;GJQ8M(%+Mip z3N+?P8j`c+CLD!obI?!)3nR0&4eLaUlP|awO~#_hVl~F>&UTlFQ+^7F8+(Q;yAwN2TYk9BWE1(Yw$#_FE*?#%CW^4zdA1olhE`X3H0Goki=Jpx>*|wbRjoE^GCf5*l?t* z4L9<|x>SgZdQ?adG@F(h$85l;g9TpagwKnh{^UHQQvzr|)!EVZrFhWlo;KUG6qZ+j zD4G9qS;7iITj@asU1a70WVrYgb1&FB3SUSSpC#EB21lD~>?O_xq4H{H49or@yO1yt zwzW1nZ5!(*5{fagaA-s~tD8Ii*XAoVtzcNIXeO-zG#w%~N2@mxBO@F~+sH`8Qjc0u zvF?zwkS4kUZaSCl zf$VBS))XwW7sS$vDg418f<&i*81$4IPADmX85G%Js|f^?B}6y@^A>2 z7CqY>FT~_OyGg0GRDAjr)>*O)pOgdksIurDG)OdtNU(AU8|T7W8XPvId+o=3B<`^> z{*1R}@*Z9AHg&|jQZo{0#(ei>}okhA(sE?h7rFGDb56Nfnm2fV^WsSy2UYkSlYSVUN zHQIKyASKXB&;qnO5eTd|rvpnud^JVwfzEKg>|xU<4lWjQt+>}EwR+bDkBx|Vgw;3~ zF~fOcABqUMW6x+`V>S`6_p}syXpTAoFt)dcnPEt`I$L}oqO9={iV>s63IX$L)}?S} zmGQSmy}y^td`Hjs-0M~Gh-pbE$Z>iL20Xh$lmkQcdJwjflLjFmUt;*G#yJ!**VUP!cUdxB`F?)5!(n!Ggpn3q6bsFRI*NKIxi!M}AR(6QBPLq$mu0S4P zzsQLk>7{&hULI(|ToHEhyEe6Q=U|Lx*kRn@k&koUEZ3O&%IAXAWc0@Ns1dM+j?FOW zisnpYK~{q93#Ep#JPqIJe4Vklh6^RjMO9WRt+}{`QA06CMA5d+PGmV78n@sz$4I33 z95pqc>T*J9N_LutG5cDxkpQa@^i)AL>-HvDw5b1TMKFJ8#p!Z902R7Lao{WLj!=yw zPp)3)g%z81g86eTz6B+StR66K&cR1O?=vfF-O9dVw{n(uzhE6KNdg5MhKttX_5%`l}@*8O>dDsV1mh~ zFTh>i{46tu^O-Vts!t?$)m0m-VzHdORT$1am+Lc2VZK@#>vdCm#5Fz_&aYIHdmi$O z(?xRs$c5oIo!-%Ao7XWDg$Fq=zfz+|dynVwIX}PG=j7Mcc)I+SS$BRa~N+?yw5;`SkfUwQt`JH==#=`8T{q^IH+C zWIVrkA7&PC!eCoo^vTa}>PpS;y4OZ=PM06$4p;di-`bkBA52!)Y_xPYXg=PIJ=g2= zl4*VBQ=GP?cwUMBWe#6VNm}f^tGag0yXtFd-__Q7c3gPbg>YK5-iSc?yxH^m zM6{7V(=NlWJX?4Q&!uR)`t@ge)3~RS%_#A1JyY&A+xQ*ak&b)SaD|>%Z)u(cFZtgG z0(sXKlAZFi^B-`JYJpJ7EX!#KnpXaF{Ux(||Krcw_P%h<7ncJkO@G$eo`-*2(Q6|I z0DP9*vGiuN|GwLk0#Qo!azbfkcNm1h9Q>muIsrN~i{cmC(gYWYiLG0jV zW%xOCr=XTD0UWGMFZN~`GdTRx%P*(=y17&~Qx0R#awo`7Vpk3^KX&E&qhVx!WQ9xT z4^;s4>yB6Z$rkp95;4!3A!gjp_xk@3LMbIhbqe>HfuF$aV9bs`2mf2Yb1ls8j zERTu4l+ig$wT?ow$zT?cl#m%+X`zW-XCvW6@);Kd{<*?V&%ZJ73H+PF&!NvS-@&Cn z1su$8HvX|~{hkwkLlEqQZqFv4$@EGwiGJ#D)-*Hfs7&m6i{VnfG@##e+;0$0`2&m; zTzWR{SdHazPMAkn7j0S!fpM_nKiGmf9CS3~w%)nOEaXng?_<;Wbte)B>W-(Ho=O!> z#X3pF=5KCUDBm}Xpd7to zgO2O19YC0Mr-9^`68)S%0Wl?++>h+PbWie2r_O#zv!6w)9=c4k{~WV_mCN2wKEqCu zE%KAo0#p?v`x#a&aW@CoiR6ncYxa7e&=^7DVCnetUgjr|2|mwdQ>7vLj5vBph%Sz! z%R=;GMQ7_CVm_IjVj?GYS6aqE2o?9fD?}`zWtF(|k3)oZn|s-nGrbSt8+|BF^q0e! zn)$8^4dIjMxx|4~ajIz?(y?t2z(^<=j0*zAo_av^2!=`_-L;4ymC zC%{==-p-a>4^;4_565~`%I~4QodS6GCqT=7(8;?qYf`+ieY+4s|;%EZB=%pvnU zazt~Oz8?OFaOVd69BNeV>;oJOe8_R<>o40UPUfN{*@cqt6J2Z_a1lFT&uA(;fet&8 z%6=blMuHk-#ipFy$^5CPGdpE~JG~}ctdt!^GaYJC%HB`PesP_njC_0NQQz$6tPWI6`MuBhJ=1=}GtfvFK7v}mZt~?R&5&G8JaWzIE2a{=q-Udr zCiFi=;TOh9)%L_t?+J-sKAjfh9 zAvh<;ne5>UG$4CTd6;1Qg(Aj9n&q12=2AxnAcQcL1ZA&TULe&9OH~%8DkJ8CDhbHy zPbzbp3P%6sjxB!OGnrX(8={2LuYL!AQ-0^NRMYdq1VF%Cuv!ALtKT85ZOTzwh$D-% zPqz2POz(@FAtmk`qv9Xi{LMUjsuJc|w&x^<5{x%s4OA|oqq|UQoY^M!Ql|H$gxni% z;|*+MXJz%D$tOsb>&*S1Lkc4N)H&HY=mA2@vUN`@v?TKrm?ke{Y}4m5_k7HaE4!0I z#W5*(_eyz~mWMr@7iD^%)(0wLNcf`U^s3~1;$F4(jx9<)y()P!u_sROf0vlkuvPu! z)7j)nmYms1TM>0$jc-Mi3u4c!LIkIOULvRNxM1BXSDvk#*D5T})}53Fp&?8msVeqa z2q8#K?@Yk4HEw^fbujip@tTE2P}{K*?U-->c8GOAljy4AZ1M!M1XK#6OrSHf$>YwH z-BXU7UDNELLFe}#4=%&VWp-kmEmi2Tr~w8)V$qS88v?3JW}S&$uO?=&Wceo+Lmvp= zCz3My!lgQn&y$wb5OUFncm|hHnEEy52!H?EKQK5 zCWvz4z>^$0R1-eVwEUok`_UGYsqvo_rHUp~RO(p_w|?(v@bML*w5K7>Dq&8SG4brV z_(p1oFzxuN4p!o`FNT#kteMZHN>rUChb{7O3I0Hz3YSNoO zfB@&sR^aP#La9SL`GZd?cW}mJF}Q~EDB}~_az=Yj`Q~pHo`2G7gF4KIaxRlE>8v|D zf}NBBK1@`K(Ay+5@uuo<{#l0lz=r9;1kufD;e?7R(EmX`Mf8fL1MNTy;XA=L5Gw_^ zUe*7HO3>Uy&(`Ttgbit^{9^26FMEPuq)5e0;L1Igbe zcB{SnB7YJOU=Hxxdy>DkaYp!`Injq8vTP!GQtQ_{??X$?q0h~SDhv=+7)9xR3; zNd}$SH^Rzi@LQh`gEvEzL~%eK;bCxw#Ejo?LanoGa(8y>&-|X<&%FeN8|e@{u^-R) zx0MG6*Ksz8p2x@K!I$L`oq~@mf_?IMOdsD7WaSZ)r#fn+cd|aUO=C5Q1CzB)$rH6j zu;1&(sDhv<@El;tKgETN*o;b8%~~k zINQKcX4Jx0o+5n2!Yd1fV?bP$JW-YS^94C$XkC?jrf|ryQ-qLdsmvANkyiz~w*avS zzD;IBrwOMzEtnn(LzVwEhyaBN%0aj|X<`iN0n;!gS#@g){8|tQ0zR>f1<)?1dnZge zyB}ETsBwip?C&fM`s>hz2A96^RtnAo7;GMJEtYDU!?^Q(3|J>pMZbncH3S8V|DNI0 zs!e6!_*hln3|nl>?>%|$M7H;&pM1dYg)Lq;SDk$_ap1k5x?&zoUJwne9FADIAXxh8 zDC_ZcYFB5c-GBHuhl>)` zYWV^D9QqtWz=&0VgAdlaDN3jnx9f;G@2B38tvfN13|>ZjXPXRCV+hHZ{>{EeLz?lU zUW-x2%_fh`(g+N@@7^7)$#7`bUax}hJJ;xCZ=~)T$Lro-Sh=WO6jGx5d zUVOtEnE^kczQ><|PDzc=l%%BNqSGg*Fi#Vy8k9jv5zHbHC-~9XvzZY>#h886Pd*Ah z)b>yy(7EC1X*iZRQ2eR!`9&ycDqHmijr#`763%*(lal0&m@^ozX4BAj&X?3LgYYQz z3P1mzO1ymxNnur-M8jeT34ZX0qQ5aUn*)XsrSYAnu7|;xXW!SuZDS+WMDhevKp>$m zk4_QH_JA2Z^O?uzr6W?SKatqOPK#tvtNy1>Ab`-SPd$Ld4BpK~0a^3@fCeV#R}Fjt zfr-x@9%y*tp5znaVuI%i;y<4`G=}K>Bz94+=OmoTriwA&0S*vs3yiFO&rI+XGP8%d zU@r`07`n4x6C}pwk|AaTV=uT3Ypf~1vJ7#jFp;f0aqc)ojZc|7)Mc~xaNnT9 zT(#eK#Nt$E9mW_nQ=P3W#?)JC3>a00DKa{S`0TlfU6)u&)M^>3ILUB0O6If?W?*$K z0}5zb6d9st)qpY1{VCFi(qt~C8DUYDR-a_HKgtZ86JwB>5goiu43sRz+piiPxo+!f;l1gqTpeWv143I7*A3m+3Cs9ElOQKLDtMT4KDW@zYNd@JWgSJj(J?>>|ZGbz9n4vL$tH;U+E_#NS|KXeY7HQVrD znDG&2e2DerCujaJohq3D4UnTzD%bmx=)s3rFMi@N(FU2L8nt&cm6>2}sqAAnFmd*| zl>e|oyRHKw_~5Ctfip6mjnp~&Sbdm{Lc3DTrkL4ecU1zOg@c131;LvOE z%}<r`@fswD z*@TIMw1lD|P$g;BT<(z_q%vBbeg&*pBl?DKGo zL#Ooa!x+~4AaWnU5V5~%e5SYty2e};J`%#~d+>GS&wlHZ`~BpD<1=SulMl}BB;60A ze7`rqniq0G0Yl6`Sd9T2^%HFH}CF3Y?`sJrGy$`YmiT)mZ=U3-?;82~v zZCi|7L0H|0->`rDS*%q2IyL@Ncu;-?zE2~={Z}^?_oa&9-g&qTbYP~N^6w`UEIt*z zf9m)g3W-0kjNGUj%BjJtSc5*~Qaf1k!?Rd}-L*}1yVvj|D;mm5)NZW=P9-Do>k@YS~`tx|+>&n2kcarkKs$ z%qF{Q5-@BXNFvA5#DUBdv|~0oAUGPg#62yzem-GcW)x58z)aGFkqgbzFu6!d*S*f1(=hz7#DbIM147|)MM`Gon2Yo}eTQ&c|L6_!7hSN=#? zKB2&4`2~gIVe$YIN2yhH;=sMkwnkS7{N721RAGdyYZ}*z?U#%xEeh=#X8yzPm-_7k z93SZ4hPyb*;AF+d$D!x;_Tw^%PDW&zVk85+K0v=qp)bSX_@Fq zh06i6;>53*mDOkQfc7cJ>%e2^ZJ2L5lR-WDl+SRSg(1j9)`yk5@sJgn-UpN%T{ZzZ zdr8h-Ke?CLuFCWy*!K58di?=DBOEyf*#EMRiSdyFGNW9|%Z$4061!k&dyj*Q7%yM5g1wfl@Wb1wEnl2% zLV)!r@QqaVA!cHbTdbLrFUG_Lb^9>*MbBWeUpJKb2|JIiVc##)S)0*5$qfVVLtr$a z{Wkma;AO+_!-Vz{W@6hCQ0oyDso9> z!1(i6rsZ5OkHXxr(-HP2N0=*RAytqJw%Y~LZiHkpuP*SbJ}&qw&`0DFl^1;|<4?-3 zsifSz{1j%nR=KC8dm(ggRc4aSx9h!B08X;s&W4MYIYtpfK2(R;exMzx=UD3exm3|% z)P0mX!hf8NI{q_^y3eJGpiU71`z^9PeK0PNvM+dOC1fMY_E3~p0tZo;l~#< zbnrDp=r*J;D7%%h8|M6rvpp};YsZ-hlZVSV(VhtoWBkByZspcM`Wl-Ep`~e588W3m9o^!N9&_u>Z z)W*f}#g$0fRt?aWPQ+sKnITz=gO=gaZ_eHato*?RT5bL&I+|eiWu9=YlGw8iTt_DG zBT^LLHwdsa1qdDRWHEjcgVh!zvvVi$iT+jihToVAEc1!S_ZAJ{8GG}XOJ=kW5Bwx{ zkvqUa^Aux)MiD%{GtN^?9Cla06k=4&c2N`TCir_+sEHoqI%M7e2j$@xAs3kQE#hPm zQ#*EX?4W{IG~4quGj|J@{S{$pTo7hyPrF%ke?$rPvuK#KrQ0tN_huiPrN|?MUBcY& z1nHP(Kagz_lj3BDa~m7PP|VZ7BksSr;3=v)Tg*x9*#NYXig%9~kFp2TVSFAl)v4LD z+*1*rM&*ecKpKJzR+nBeo{+7&f@Y@J?87uj0urZ$YlCOv0b39FfLsSKlWmwDxElKg zVFDH{3NdGc&J~EGtCX@*$R!1i)T2!Mb^Np5WEPArT`bX61()ZdS(b&mOdn-g#~uC* zz-Aa9pS=*)vk-`l9)>(QdjK081W8-D51F|2Tk0dYTYKg(fgu%8OK`uBF$O+~J#WBw zFkD2%LC3bNYz_gJ%6|9dDcSG=(q8H@s&&u`$&^)@o zXHJva))wseAd?`zOYm)7X?7Rjks>T{2MilX{y5QZofZOENt|wF8>sv7J;@)3>qQGT zl{Q|6iVR+sz|WyY>{f$Ii3(nSap++`PBoYqjF+wr{37sRIyWO?LzCNY7SreG{x>0t zDeia%R{$-F`zo-wKsYAs63#Ip_%w2MZc4TL z*R()6R?`Z-b(z36pE56&hLp2bFux%^4Re`8PV-e^4{+6Q#$-hh0ohMZBJ>24}>s8c8@DlV7{<3D568Q2VP*Z!;o@H7I|`jOxw zpr(|4j?BcK_aaZ}tzVbcz-FFs4ulY|GVvD^mA{!_JrW0|)D?9GoHDdRW;q;0vr(7` zf@QLlFR z;Hx zBAAHWXtW41O2pd5EDv$_VVm*3+`Tv*P}mYet7TPY26al@^$DX7yWyvS2-cTCR^xlB z_+|m4@`Kjg7gQ{wG(%RicQFMkhxY*p@?*0lwk{<9_KQsN|7yER{t0afP{_44p+Pe6 z`y{VyatM$3m(T&teg=<2x{ezU-KU|``Jp9jU&~=w<3J3f95TI=LTG=P#6xM>U9>+J zHiKXp7tJ6Rs*<%|Geu)YnSu!ueN&8!kJU)yX*~_A0?0UtJ!~xW7@^ev)C``u$6)-Y zFblB1KoR7Hw(5B^AQ1*loC70D2%?B6CR1TOK}XKHNKBwj?P@pN~m!Taf%|(aLVwRQwu_=ru*grCJw&$RoUL%e(!Ep zIC0?XjGyft03y4q8FkCf|C#?7f#>K*M2wj4aR^f$I2!4ZhScmCm8`*7=aIxx9jFN1 zL*yeOH}$~p=+cNIf~@ef1Z6=i?mjA%MkX{!Gm(i#1G@KnP=Bn!;m0{p;<9vIL0J+k zxCx%f)JB>;o8dboXqI6-E)a1)D}91ITyzh+VCss=%EV{ld*EM6HBIEX2`;=4%`|w~ zZSTaW+<~ruQTgpa1-ssEqw?cIMKoDt|MmN%r}M`?6#i3Fn=^PKdd+ z++u0#NURk^`FByI0L^8utWbo?AQ6`mpPIOfJ_&x*0LZ0>^T|TXNgin6_!!OkT5n^CZ+by%2p2C$c((YKr; z+#>8=OYCZJ@njyK8Z7zw8CY}j@h84P7#XwgMic~`ToCZb8u0A}0VOU|HMthrKd2`5 zif3U~^r{uPi@UGfmLE|TqntB*ojJLENP9!m`o-B5z>i{#amKeyyx-kUn{J@0Ft_G7CmleBuS)psFvE@SxtKw`z%P^cgs{tG zi2YDr6+$mKIP?ZoE%O2eC9(T+%t{ykMJ?AogXuAhscC(q&aXSk>9TvfZpxyv>tk!t z>7rtECaJQw%I}%tN-Z`ECJx@q(y88RT*)rZ&$ef7 zV99Ia)87VB;aG>lz^N;KS-i*-+u>HOVo7G4Vm@U`1^ZYthgp}*3zYQ4=WHV)jQkh! z#q?F&sXchv>+o~v?TCzibS~iF@LOVHnrZ^eu!(JBrc|1`sS+kY-TVc32KU|Ou0gHx z3F@pqOlC0dGghkUEDUq=+3I_c7?~95+`j02)T?;im4!lnCh)5eTs*c-3c&Lki&;yo zO3JeN9m)Y=lk)hpMHkea{N4*71y6|s4Rhl!kS?-8-sj9d^*wH8F2dekAxbBuh38|& zLP`jhh_&}&)&*;e@8Y4|pf&zf>?!)K7;;CMxU|H_gr(132tRs*FAFtzeFMwN~A^1A<3L5g~ z%h8bUKx8!J0ic5C&y6*tx=SJOVEkX=+YK#yY$&_oMPwp_9~M++u=1Z7C%>~#zAU8n z?K}g6gUk&FOR96@HsBRFH=4QZ&dQB)+U$P*+nl1A-R!NjslZKtK(rbby_B`8zK*L- zI#N)5japPyU#E>aqO4CX%GP1Gla8c&+J%KBZz5HLOG||~$Z@am1#NVge8EC07E|jU z#CG-J>g;$ji#5)MVKnT%s+a!}x$aB(D}ezmJ=pPaB;;q5u6L+5`vXK7(gf4W;Z`mD z@C#D-U-8F}6&@w8!y2v?JAh*QG?%^w#YQP)#X-uvpHq4y2pcV(p7MZbF1j;{KEB%g!&QhU*bIOyEWum|YJ)FHHCxe+n~UkoJB^2p?b&(~MR^ z2%U~0G@X?MLP#T{P-saze_2IJoSh&Fb9S!t3M5PO6T$RJxTR>Onxil8EQ0Sa5r*kd z$8ibuI+q6n`fk7ziU+00rDQ(^9|PyGCB!x_!~74yK<{KGN`b;+SnzK#6hN52!T#?f zy=&Nh-Pww%2L?9hs6ru{CB{1LpWzalEXJ{Tjva!@jI$6>!gp@I_cme?9-U7S`V-BT zn}7?Dk)S*$t}2hg%VKav3|>K42DAnC;p5`xw2Xt_JSmnyS?G@~%MJhOhfuEAZ2A6L zOb})wUR;gx!dAMAE;2mL;0KEBLOz+@k0EO&_!}V1{1qO$gD!RhZ&KpY^0h!P2iuuh zC9r5}R#2mOl8>MWA=VVz_6s}FNC}_I`86uB|kwUD%(`gOIqO1|D@wL@nP?fO^Je0 zQJx6uza>2gW9vk4@>l4ScKAsFdnvcRr?cdDV+6&>`X_I~$U4J{4K5u3D)@^(ijS-- zbyWSMu;x3yVHKf_-Y@SPPvWg#j7>Cy5}(YGlWzeP zN|4OO%oMhFH)h`{5uU*}8c*ERPO5T`+~`9D73wD#m!H7k zO~Jp2hE`32hZEZBFpucqxQ8<)J(mJu^BOi|VID*V0)lAV_lEYBWs2PSYSpz>I2V6I zN?(KXlN?qmYW>YC{LSUHe$TR6znATaJg~E{;Rv!Ct;I&>YK-W$+1}yWY|p;z=DoGq z%>%XBhQ92sk5kiHo$%7sk*dDq+)Q*t{oENDB(=U<@B_DYAD{5M&wfYjcapyolAl1y zz52tY3(P-`@CV5T?049HMJr6~Y6BTdfSUbxe1RT8hm9nWLyk`~>FgQgoih;o-=N8a zm@t`;n3wF^5Y9}mP~%=m7YY+HHe`B*>bx|6iZm!nNKfc0X{NW2R3yX&mwAj_lxHUu zO5;b7Py}g|;`((~Fw7_PP)OZVk)(ZQo|2{>_{?LpCJN+SjGTQ<>5KVcQYR}CDTgxI zgT-oAiHRSqM@v+uA~zYu5H~Dd`-?D?QtS#2({MXH#1zJ&%asSt0W%z7D9W;d%F5wB zT*TNH#i&rsK!hn}8Wl)Ko=ltly1pn9)v8ef*`7u>!LV_p4=nmf)%8^$tx97Ejn8MQ zHbs2}9i#yrWOG^S8)PXzRgd!<9R}J43*tCp1V;y;!%U*X96>KZ=V=(hW@wBU=)sr> z@DLKjz~VK`-6J$Lo~Q=2_!d2ROk<)zu`gCHMX8`2{@VkP))miM^&TbwK z-i24aL&`rI?SF(n59G`_1qgYWW4chN19@^wt7sZ;_AY#Jv<`d#dJq5ytwcYi&JF^& z5umP4(eoM(9M1!-<9bexmjazL{%0U>x$%JTW<{b|@~bcj2w&HREfn`pQXgTl#_Dmp z@#PO+FXPMWUx)GK`|RI?OV0r+_`o^Q_%fGSNz*D^T!uV&vu_c4vDAjWLa{Kwo~*aS zJxq@1(l0D0h)8wL`Z>@4VudpwU>ZHJL}%?dK4`WaI7r%@U%Cn>FXf!Vvk^f$R)pcv z8)60a)18f>5<}?9WvJrMneE_GqJr!Hz^a(PSeoy@&YT!xvbc!QSMT4aCIUT9c+4E$ zPyS^w=CFBQjll}87a3>#_2rOctmbVhMfg~z_Zaenu$;qeW!UPI^JuUwcD7V;W3bN9 zQSq#r|JWZmBEaqPvU2gxcfV zn>_&WLV=(jTNW1aB`yq$tE!eI?xH&jA!ERdrp})PMNmY&Q$YgBV@rsOfX2xXh{;vT z8NkDUv0BNK5mWjO(RtpS4C>HISYiCmPi5vZ1W6@_BMIZf>>rb$*z!g15STa$hVBo( z_9|4A^x^Gql+zdV2V(3X2FLQMaukdr1YQOh^a@-m#3@`B&s(aERA{_KtIJRhR1Yk7 zSaPeis2Od@&N5jM!Vfd?Yw(LCtFB(AF9y#Q@#Wwo&gQCV`j(wpgn@;V-SFt5ck%7K z!OOn#8Z^>4>WN0G1uFQ5GS^5DAJB>HD?t&8SyTnO>&ArjM}t=M#hAoqj*xYQ`WN=5 zum{Hbm~Iz=bT&gz@qNsaNPkUs_quGb(GUf|q-hto;X3-mcF$tp$q{Ct?Hxq6y$W*6x5i-0WNs;^)vY(lfa9Re*!{ z{C+5sq7SA;AKXcjoz{>kE$8Lf9AO=A#$a?j!J&_cK!ZvVXiz5tJ!t~H4+0PqXz{qm z?FsDvWP4&>)iZ}m2Cx@qU@suM-ud9$B$v+2u#wHDJ2!z4ggK{3zu}!9#7!!6U!a?n zIClkJ3Wt{&FEp1T1FOzj54<}kP{j-K%6&^VThFuCz~5Z?f{_RQLXe;+ zwn23v-6YsB$1HIIt2uU- zQl@gmjXN5F+lQ6|h3rY(%4c<|>PBMGxyiY5b?UdPKHmP++&1FVtq#pBk>TYL{2bcF z(g&CR6X4*V&y0o_uu%pFu(1kjT0C419WirQ2zNx|&D+)J3sCzHp*}j8_Fu-TsS&NG zSMp>9iWjGcALaoWZ@aJI1bUHCcF%1j2At|d5)@Z&x8k;}T63R@d`k;G*|96z5HjsOANlso3f`>W44E7Fy z`DkUCOAX)`V?c7q{D48`VcNpn$Bzkt8PHH*($KF0<6O_QStj3vdpdY8j1d@_vvWwI zjVG@ji3Yq5M!Mf1ohLg))|1JxM%Z-|5(T$cAplb@^p8F~M+LL3W;q->pGTi*R+%Mp zQb?~-HX|adQ!+m45wJ868-{~7VyK+0LmolbRu-eawYW>v1VswFfQ51PVB3Oo%Cj85 zjRa<^>K3&j#HT3s<2Uq2R5*FW5xA48cjr=zMn?$JFrYpO9XQK$?PLZVn4xW#a0aok z{s1tk!MbN^2ibH?%YH+_}BG&`691Og``>rZ{r__L*F zJ!KDPj6Yj;)>F{@e%;gKvn82vl92rtw;WTU-!-M=vs^yv5X3Q19&Pl2ag1nj#;D)h ztv6Q2_@Pb?5mw4>sqzFFiYS9O zkS}f+_e*hVGMpvkt8*3~TPW;nG#kkGvEX_HQ@-CNI2oaIq@%D^r-O4rgSFIj&U|u1Aq6I^AF@>U0>}N$6 z!sDkV@`$k?_JV?lvnn&ne*Ky7h^}9!nvUk}RQ?2CBpAHxku%WbKNPB#-VIdn&;Jo` z@;siq!>Y*t*_$~Yf}_D38bYSc1V8@UP`rf&kZE#sF4%-7Bn!yOShf@umo4Gh&rp-Q z&T=jm`QwT?%#DjA%uTycGMLb9U{caCR32eE_`?da_5VnJh6)pn&R+h6snZ#GL?~%K zwf=mN=QVKpjmD1+#iuoMUgCRagO{c7bLe?x_cY+34Yq;fhBm36<&cybpIw9<=efGs zS6+fl=&&n$L+Om^kr^n-k0XEb=6Z>q3`E}s`TBO#7s+Rwo=kl^Q$XJ`tIu0j>Z7DC zgS-|}P6gJ}%TKMJWEg7sU&2Pz=67e~{kZ-JY%Idhp)yMT;L=Y44$k{+#71N&eSmDt z<=-{RzaaQ*#5;NbrPHls&BEP>@JJy!Lc&qtt#~9?)p-MfrXYu6MjJEFev$fPJq5cV zC2Lz*J+W}GOjt>H>nV6wUaq!(L%acC=sYNzpTI;$4W>T)y8Xy3PYxVMjLZi}eR%2} zwn(UnK%XG~GkI@00$W*+oVmH3IU*9aUy@KR=F6s#h2u|oYIFr7<0FJQParmvKtMt0 zLB7_o#b5iKoAY$m;Ky)eg<-+du_BcrMCn8oh~2PAg77oOEbbTbWgd zX0?x5?GCeYE?c*fK>?i|A*0~waElljK1bIeaY%kYOij_Y&Q0JlKq|MHij_KDj{oOJG-<7;)kF<8<9 zn+5uHt(5Ybcazc1;V=DjQzb}7KfOAIvhZ6~kE+ZYymFyFtcd!{9V-Eo5jbIgi5yZ% zs0^;TAbb-2oA4bv*>wqpqbqEgtEHyLW<_rr^Mmtbu6ImMM!;6LY01QOem>07 zke|H|UtzAl06H~T@^;L>*$xnLZBG!g^E%0(f1FWbDu#<6OVk3zi8p$K22nWP0q+s; zn6+O8hbE{-AP1Prqc~~(%&232xCes;%)Xux21{;rB=}iPg7(T@T`E-hHTdOtw0;TC zW}{9}eT3$(fuj}o6@=(zv3dmeH594WFet@NlvymwvZyy;4__=+*fw1VhU~|UkK^JS z*(H1)EctgB9-{T$q8WV}W*&Nc+aE+6m7}gxJnNe7SKV(wwoq9MjP*%z#wWDDSV;%>)ws4i?_G5hFuxR0f51n&a! z))wT4gBO0A=x4VdDFO!Kr1oI|`Im=<-hy&AKls4QuhDgz!0QvSecYBQ@y6D+(0pxQ3 z{lPC}Nn6yKf7fnA5qD-!;NLYQ4{-A1;mRel_%J@tqeK)_7GcmSr*R?(U)#<0;Jy8x zF>;U|>DJ`5fD$qsisBzLSfyvbzD$mDJ7s_!*2m$TF1bI&muI+>Zu}>*E+Vhh_v{NU zIwIrw3?xu{6-JDO9q}Ye^Jf1MdWtOYpM;H;>->B(cAH}z6{Mc1uM*6kmCDWQ%V2B+%vmRyEe}4s~f7$zF~P@N8TO$ z-51e~!m?Z+epFNqGrgk}xgLS;7_(fLORm^B8+M&uc3u?Fx3B=&5*)0{D?@u}tc9ThQAr?H&x|&s%<4MP$+wF@S`t?l>Z$DphEqUx+-38?ULYT9#ijFmdDk1 z6s9evN!S~OBZGtr(8rD%yhrJ~L<}L(8|;Na)7UAx&BFaXe4l`OP*Sj`UOWOP6KC&w zKK?YjjrJGJtM$BKyj1`J#Q){whrg~AKa+_A__eF#Fe*xi`@}N-`nOc*__H2zgllH7 zvxL7%zw%O?Swm@!>-K&dyfV(<#U`vD^vtXsSpX)xpO zV;oGevkiL<;?JUMK--WamSh`t`whF@#Y6qLcnDI|U-jHP#?J6Xg*B*Y&Vmq#;z7_H z)_E{cas-UVZv*zLZ{E#K>fD=7TMJv!uU}pU$Jg!5LWUP&kqlWh%%uF=!35djI*e@g zAsb}XfUGu8qE}6&nm$sRI)A#R=$p{+$h-&Ry&T9~n;oyqPS$0gsztl8xvb&zw4|3Y zviCewl{rdvfz9yGi0O=11>^voRmq{m;35R&&@*DZ+aK}mQjj^qlbUeUiZR^3hDexK zh9u{wz+p^g08NH?P+temS15io#IprabJiGB^rky1YO-TB=g-&T407e@@5}~ME<75U zuWx`a9OO^U7l!hfHRS;gRG&Q|OAJZu#Hs*yL8D#t3)+Aj=mYN-)j>|U64Z}}#Nhq- zj{Ac+=wc0@)oDuZ#;}5(eK@g(!~}!G zn0&)D_-n+3V4_XATL-ENt^j@ObT$p5aG20}Y-^iPUqw3O3z%SeVR?n1P1Qlj>WY4p zFS#bT$O_p%V=t&e3BWMOpASH_b#PG#72_@_dO-P4#TEdBhr=m0FicefW@4(?a98HK z@=&o&Yxpf-szi`uVsW^`fpyEnI8zn}EX|9vB8)SMIP?D6C3wL^p)zO^yh~z>LDQXr;7KaY?BA?!2I>_za z^59}6e<)6V3gn|_%SPO_=C!r3M;=a16=~iu3S_ zWO3a#+&Zvixe)-eB5-)MA%p`P!Tt)fXPGu)x0wHGxOY*VX;iLM&UxbfU1)s#t4_z` z*hKPCE`r3_{d8jR%YqV>jNZR0c|0*Fp1LNe0w^z>`dT#pLNVS?%7II9YvhRE`{=np$o4|8MyH zl8Q~lE(BXKYInV0#ph~-;PxkJW$E|*IWy05pL>%Q+1Gww-(OzseV%9joS8Xu=FFKh zXU=>jLKu{dDlpldbXr1E(S+TemVSid*( z0SDheldRvd{ACih-rX?t1U?bf_5H4Q*X6o4s&_Xs>-*l_Q2f_}_wK0c-Nf`lMSRBf z#SdBUS~XKWGTv10p7m7RyC{)5vd4l|9Us^mP3BpySbV z>M{;JiH620r+Gt*z(5n%{^T6>k~SBpB|PJGa+G9p8=`A8tUpbS{gwBu)E44!B!7h( zkzh(%tuXF8m{t6g`N)63wxFz*oCpkejiYw0gap5~LQAgsbv#Go&{3%iqh(}}-ckG_ zSS)^4rDz=-UD|Cc*cn5&CQ)#B6l-Hzfql?o`Q zldKqF<@<@zwCFc)a_80Cz62MKoYw#uhrtYfC$pcqRNzuQU*R{}SLpStRvfTrhbZv? zrx3J_TN2)KZF_u-*e5WxA3BlAy+O0#sq_%{yRbJTzb4(v$XktZ93GUeTft1cF=zNL zoxb%p&vM|snvalz31%GafyBz&=gt#EQ@`KCE<DYQ<; zGBZr^T zPEVwB-FMPTu)7QF@&*9x>)@wG9j=Rjw5boh$o*c*5Hzbc4i%a)p2WZA{wR_EZzFr}!NP2}BD1 z+1QWpU&jB8sa4RYuTi--1HkBl(tIoJbeI$ULRdB=s8Q}6bL`e8iG80!?Bjl#{l+Bu z2!?~s9l^t}>hNdZR9iqJ<1)KVeNX?+)AGSKBpRVYk!^G8p3E7ocK3^Y>VQSiHHa`~ zmjMihw;3Gfc7tQunIxRKhlJA~!RZe#G&rn=xH)!|>rIB5*%gkidX+n{tgPi3b+6_( zlRxLGU%{XAXEyK{xJ|go&+gzoe94&K1(g)z@efd{p{`K#u+iKdE=N;|Q#Xa}F6ts1 zEhwBY67>)0ikA*-ZYRcvm|>D?F~@T5*nL;2s~MLIn;TO3t1YcIekEN1L@nSUpW68B{DJ`=e{7tscS~zz)zxf75gIAACWuTujT&2jozSl z*TV@(hq|eL=UNq)HP$EzroZq9719` zn0wfhI!ZW#3kXTNmeddO;qWuaQeIfJRlnh;v8HWrjm}&c(1n@$)SaNEZ5`W z=hxEX4`-?$As;<1tjx@vjVIfu<+}MN+bd~7GvDpZNDZu@B+HW(~Q`<$Rw9>G_&I`rJ2Wm zVKnng9s}QUG_#BM@UflK(#&-$MKfE}2yW)J#dk(UcW_N_InA)c#y0hG<7b89R#mla%o{6b)qvPpO_0RF8b!3ICj+4Dt~6JOtbsVp z3sck0k|qJNL7d)&Hjvb4c+KV&}gV3~h-u`>53Gxz(<{oY0^e3a$C zXFBC2_gUtR$;=yl=8fL0E4=++ncrraHzYG}@R>K5)K9hFbFj=uTITi1%)pCGENK56PvA&c6qR^D;F>~M!?YXy&rtW`NHENU*dX?+TZLc8JDQ9#wV6T z0oTcNnOl~!JL~tF*Bwm!7N#dts~mZ-H8tU{_~BBk3D#t|wqxhs4SPS{8=RKI!~~j= z)OSR6xXRhS>PR+oOhtVgja8t^_ZN0TF0_}M&sNiCseGeA8V}#}nE#OEb#iHzS|rx)1VM`r@wCV9U_Sn!I3)kL9C9`h+D^x4rh zo>_XJQDpAbQmiMlpS!`T(DM-oMT{vrcU260E z@Ftaw{g6(Hzz*)OJ*sp?Xv$P4b{8kCi##1|ce8>d-x)^)>7MWcm-im><~n=O$aOsC z0Tc%qDmIB_qiGpLPUuey zVjE&~`&digtRph+lr7VCEFu3ZjLXdhtCWuxgkOy3M6>90Gk)*&RG}!wc>gD&gdeU* zC_3@i-@Hxx-P2T2Uyj0QS~#;eY1{2*!0vfW-BA34)iuYaCh<1h-6qM_`rfGcYMmy zO=~x5RuoAsR{fDNgImQ5^_G30#1&sj;rGWFIk~0I@xzI}+r%K9V0%@WzR2rWa-XWV zJ!eiP-8c&%bd?QZ75U$MGJxIgB7zmS&v5ZTu^t_yf~8R5GUlCOfVcKNY^*G74^y|O zi%=w3t0FyP^c@Ta+ax;;Wp+Nnm;=IFGpBNz=dDl`&8sp|k;Kf*F`Z3(PL;Y<`#aFj zXFdl5$JlwD*@DOpxwVOQBT(iVBL;mW=hCFG zp0w`W=}55dTacNF+>8_)z-++4`NQ`*DNqH18Wt+UvkTd z79n8n*+vyvz?7Zja21}?zX=oO`xmQ`{DqI)VF2Q8b(hZASflDyVe0e5gKcrE?68=p zEhi`A1Ff9I>s|-higK-crq?&1J9tPXX)@FaK~g)Q95I?6zv#I=DxyOb!kF(JgjNQi z&d~bvv$DsJ(~A}vCY#*sKUtLEVzdx1lYEN5k5XvRTMDg`lP<4H{pa*Ak-zC4NBZ!G z<18yLX9$&1>kp>CiSj#L#ai-)>yZ&5__;=p*&*Q=lR}4PZeEjvns6QFg@)bXZhh;| zKK;dP_kFo8qLsNWwwzY*ZfC<`SM`9*e3Q!QiH;QS z^xKiywagYT9drg>tPo4Dx3x$KJ<9KdtH3k%ty12A2=8OWmirp zc4jFSM<7w`V5GP%tJ(up6FGY*tk$8Xs&mwsaz~%Syrrl;MYx`(dD=X;6m`sRLz#tb zh15;S=D&~l*rT&MDKbb<1(MDr1gx9Xl(LKKu}B8RV~|tq$V>x(g*m~aL3J7DYfAL* z;<$ffzL2a>D{CTH(L{Ke+>OxDt}@5*uyqO-6yEeh4NQ_8!I^)Zt)63fY~S>1ab2(v zg*PqXeN461m`UAiAZ$L$A9G~{V)!`+;-{n`8A@mner7Xw?f%edpH+v6w^6ebo?I{UJ2<+hGKu&6%;4mVvNzjk-) zl|L7;JbKMJV3`{f?%e)`ff;#NfR9CCR*E%C5PH(Bn})+pf3PWw5J8o&@@rRB?3rqV z5w0K|OWl$jE8mqYqv7_oeU5Ve(WM81o1Qe}*~>OdA`L#-4c7+P+_KQ#7WST@>}d>_ zb=ecv>%ky*tdy)BETSbKKdYisIWVZB)t=Z+HVkwPhKA$VV}~KYjsrI zaX!mDmt`=VW!+$iM^Csh+#z?&RDAdXxwqH+riVL3ytrg9(P+Y6B<~!`pZMb{8W+?& z25z(3%-+U(`1HMgN#Mm`)l`3FVsPRfuB1%bq?NAd0pZ4kJLvCT;2i>#Nw}WUCc+gY zhV}Z39H;D`-8^2gUfPU*ptAMSd~3fX8VO0$;9<&*SocWy%Aa`wj{)m!Zp7j}{O#sw zX%x+532aV*veZGT5|pnA2l?683(7ylP_(LjvlKxLwm>u;xzy{iD-;wxCyKt1vBYHQu-q0s>S`38oE&C0By1K;t#B9ON6 z4bLaz0R#Z|4fF59dzS_myl01?E5Uz~z~kUw39Ia_^P_Z|OX*%oSX7zG@ISznX{%U1 z1TFV9cs!LlX2Uc@5QDw^U|?@42irI;Sch(^LtD~e)amA_w_l-5*ToZgnuVLYQ5+*b zxB4+b{ZHF9~C`Ugk&`DL%{3aN3$}*6mwT`8x>GoauyD9wp&bACd5i;u-7OwvC8T=r1Gp z{tFRoZgC?5TWlA~L@F~L)22rbTWOO{r{OIPmc8M1B0sd~&c0+c79ugFDVfHHxjnyp36c2TYBi5xQ0ochAHW^STQ(|0Yg&!i>g`kSVhpPSCkyazF? zU^*Nf!WcOb$~ee$JYddzhJMRIQXNby_yo4ilt_@=ZK8|W#Jj(w(DatOY)JHJM~Bs2 zl8HU&Y4}07N#wb+_Z8MhQnQ$pFcBUHg2is$?K-cp-TE+ekFoB4zw2XE2Gwq7BLuvJ z{y8?>t&3#zM<`!&5?|Z9k2OkSmc`MS`j)@cs&0NsOclD3Dr`bkAnv=ahZu$(l^{v$>;h3mSYY%^gU$yEuVckVXXy^>t=O z^UO!neIqS>O_ID}+Ktqtl1FNdI8~pQ9hU~nXd`o7*)sKqV8PiQ}Y zw%Zo`&=YLR>lXDpl!#(hdw^?&knA=`bnSh^>29^Kbe|K+Ry!lj;2}=3g%7el36|G( zyEd_JGne*o|5@DFeA{Sdpixlx=slTanIJDYAl&4D45l_WOR3YB+I($w z^@KZtMo0A%wgEX<5?5}G&cR}Na>t_Vpa=qp)T1S509$ho;EI{_aj!;gcB_6>baU#i zZOz?J=vJ$3&3)TcPD|eNv1Zp-Rf5R)g$h%b=Oaw>vC%{ z*3h;)=#wjXWlLvuxDSpW^tSMsv)_dlmFyB%11fYY#`w84i%B~4#NjhX>8ci5mD{SS zv~^Vb)=*-I-I{EO8r)#ZyS+3ajm7OW{^w zqP$=Q-;zsr4;AWPVtB#7u-owSaBQFPyNndU3G5Os2c{ORfROjZbT(44;T`Tsj(Ru~Y?26{2_6d= zT6w*PcvGd*&)_w?RlgKeHVOk@p6_xMKJ-LQqRWM)+$Lo`XqR^zVJYDYcKP8XQdbR4 z&M5D4S8&}-ZlYF~+h|Gl@we#XoOPMIk8J4i8C;)i4n}5fbB;y~ZlTu2EAko&Q>32O z4HGoJ6fOEtw4QE9xlX;|_oR0qJiA-nq$+41>^mZ76lGt1e5Jd^wu75Ab4FLC>04aE zeV_8(??#J$yPM7?o}jmu@@$5Opzg?Jjt%k($ys6w~G9!UU8qCy|V)@{&(3A!h3LLQno*J@TGCI+2uSUvJd3uADzJK zn%I6g!-U6$k{fK+mSIhJk$j~f_YP+@@#_zMSXxa_-5+UWRz+HjH{4k=t5Yfz#P6r_ z#Dp&9I3AI%bEK-^sBI9cQvZ~|y#F=lpPj9`RLDa?~B_r+1b5Nxh+@%c{c%w2pOxyYeBFv9q=SJ$tc@!-BmC>Qa=lVlU>Zh% zh`&EmXNX{dT70zy8G#LknlVt9LJs{*#4^^gB?CZnog2gNNI=Y=vzVGhOSiimQ+Ni; zE(GW?j&jwmzN%TmY5Oj0b6&2QyKCgCmSEO+T0z@%xhlTI|Rupv{QD$0-jkRrJkwgWCwM1atQoS7`m!fokiE7k` zPud>pZiUGPY^LHlihzbn7LMUC(afApA3BU8$4CM68t(2&@ABru8U;A?c@)-EfLsc; zN$8D+T|w+PZ$4c|Nk1$3taG$_JCw>gRn^mmn+;fL@V3GQ`ZayQO?DOxbC?L@5w(5X z_$1kw133hNiE&Gr{Z2&Bk=nClCH5U_ucu=1H0ZgWt=ItDFjIw4*o3zd3n^`0dpNZJ z)#e1jnIHX5)x-P<3o^^StiJlOfFpf^w75R|kc+M-t8+_nQv06ZC&8$6eUD~#f|9Pu z*4*KXP91Cw4$rmkePjEcd8E)8VmSR2e(=9%&sE34S;U_sc|`VH$MYV(;p?&ZBTW!9 z)&FyQu9{a-)q~(85^)b=&sA=pqJd%dDX-@xVV|N;GedbfFX}nBZ(Nt%$M+OVlnQ(K zWs&^L6jsm#+zKtnLU4Q!rOJ*KwE|oGXMX5@hz_y#VraXJXE<3eP?~%flco4idl)`@ zth$YWeCH1Qr;Kp@%!8o}a;M4Ms?4#+RE=B=JrF$Po4>+V!&G_}JW4Y51zhR}NnL5H zv8-Zz&9@<0i3Bwa1$X}mbyepGz2z2js_^}0sY9~xizKoyH`KLjVY^%5XB43U6h#z# z#1)Fr+($8EKCDee5mZr>WX>`Hs**o6B<<@Ks5Jhl;-+!5nUCB#I{P)x#TcaZ?8$sk}dSv{wr{^frS8B63ObW$sZQ2~GEx-fQ^fEJ<;T zNyV}aw3V$AQV7Ot9xqm8u756{;d9HPDs<~xf4)X4AU3HhvloMZmA5ysBRb{!m`k-3 z&7b*Aj;s&NMmNJe^G<@o+rCoHqUH)AAB$>}TfRWmz{^8;k@j|lB*(%?wE!X!%MI^Z z6xVRt{vZvG6&u2r8(2PuFO;O_Ta}z&%G;B$FJxM^qIP|pG7oNFxVUoYM5n$Z%5x|} z<2Ycq|vwnU|^!Vfb>| zE#g}g(W^=u@g@%9niy&8_mhBb8!>wKoKg(g^WgMIwqN-LDAl`|U$rP}Yc~_Nd(ZY^ zC8LQCnD4c zmKXhlA9{zP4|tR*JLpt>s|q>w|siZ?8yyJMvc*6=143`pjS8V(#H9oA#|# z&q=PJkUcT{2e6mQA)LM8Pu}e3XL+k?>1+GeiuAW$r~qlfs1)#6(P<{Py=x#!X7nRw z5Y@5C!<`!$5aIjcR`=Sn)oQC&`XesI|KPnS!&n+J7)@PWzOv!53ss`;Ix#zIt~1Cf zena1eM_yO~$jbswBvSXtgZnxY;AjKK&nzMen{7 zR`qqqqURG7j(owh=m_bFxp0bg(D+&d@?`>9Nu0@^!M^^`^2 z4U>M*I3Fxarrl4KE*F{1-_^NFIw;Rsj8|5i32mOA%HJmV9qy1Qo>&(kV2qN@`Cl(k zqe8YHq17?hGJqPIE`B{yng}&j7Jqgeud6Jl#ve<(HJgQ>mte+=SHK!d@*Zuhls_6X z#(T&srf99j9qAG(GLh+Mx)PGsJ~1?DywyleG#bvnN@OI(<^_!w8EsQXWR5WC2HSIj zU8G4uoq`-wKFE5mNwr|$OoW}p~E(hObKMo8Nbr9=DB6aYKreyo1eswE7F%>!*)*nDLI@!O;)sSwwm)>)JMnWH=gUg;nmB}iLVCF+#RT%(@NEncEW z>Yl|{p7m%ftqHe9&2~b&6H#2NwJ{D26_h7JcJ7iTs#k8&l`z)v3=6UgNu?Q7-O`$$ zonaAH%CxL8QEo0{nZj>TO>)3AVhbCVQ2u@lu7l`Sxmv=YB102{41orE54LuyDFX(d zaMyh0*{*S5B)?1yWKk0Ng@c$mQkUKCWC~0wAUvBzcZa_|MJ33JSlXFug0?N3+~YJ~ zh+k;;#tz8F;q-<%6iK3yTxL$twjLrGqzdefu1R{i`jPf9{6f)F%0>nPz4DeX(<^_F zu#}&Dse0u#dEYDMmZm>-XG|n0cUj}_7xBVqxm* zhlDcMLHQR!dD=mFy`X$Gf+EC(i}Ai62~82 zIP34xa6cbN3)!x9ViBqQXDALMF|*~w#0|UASuabRO{Ngf)=?~u$sOCu^U2Y#nb@Du z#dnwAcWK+rJ4eRNy>H*M`+VovUIG=ElsB@kp6VxzVxID;h6pB=|2V%?<1|$&NZ*<3 zx|6z$hR;EE?t&2HtnE!qL5wB%?6cU$gs-=z+z#Z?@V}7ya$UTW=~>Hkcdm=`f_H~Y zUn3A}4U=nAD>dP<^Ds|Nj_ydUY_oPqjv#ckg1CW8?^|lptLLTHdOd5?iZj@nR#+6! zr-0QSH>-;eNE&uCbwR+2E!Lnra&24WOayPVypHKL#-rGP;gRu!*!^I#j z*VcX3P{L0S{B#O^?}xCV@9r-`-@4a|ksGdozOM;N{1hiE34zh^cvN-K6yla#+Egv> zbz6Z(Dnhg(lE5C*b+&RC2_kOr$m3dh3R>uhKquI|` z>V(B9p_9Q3+rA+;^u<}(BR;W9sLP<+C)cN$kv=R#Ug*zuo-!WKCSJDZ^J zh+9h(whm*|J5pbW`T8^>#3YgjV19;#HK1$BAk>)x^MhMTU{)KLFC7ZZ_Z*nj0`oQp zW>hlG4H1|UKgT1EQCnZ{ximKRHm16+rmlT?1+TEkn6+OC)uJOlDPf!varda>-+g@4 z@hmC!>4RI0pp(JySY}ga2Ienur|VMrE`CA#hD_aR%|E9484f4N7&&`bPCcB34xk3Z zZyC(a4e;DXs-v(>uysC(#Cmg^^cHTg{IUW9qLOYnJWe_{PO7)C*OEGmApH&%=H&8N zW*iuLykX`@WO`ITbL1svYX-b^0Y`|S-@00(r1Ux+?Htn3;f`|N7b1PET+64QiFWV` zw;GMoaO`i?Sz?NT=1-=q5)ZXSXRLjf>VdMxG=!KwI6R!~>K3?E&s+G7SmRncZC&bS zIH>T^O^&r0Hke~yA8WZ&cQ)uRj#8FoazEN5bDiO4y3;gun+>9y?97%kXSSTyg)^-S zF9nE4tDp7g0h{&CI!@j8E{mtD_Ok-ZZFQdzz@H7%R}!n~Z__Z!+OElYpSn7>ow%`4fYDIsf#ch&<@i=t@>T2p;xO9q zU{wvC{>dsPwupd%?)Neiz;R2Edq+d=4MFD~+%Ko@Va;jhB`lbz1tq7?`$6roUiujQ)H&!^n#@KV~DtNH5!pX?U{kNAvm6^R*1S&OK}t7uYCf{f)2|d+R*=iD(TODYpR%c~=!X_?fb+LXmD? z6N5tlabj889KG0KWnybJMRIGaonUF>JTL~G=MWU_YC1k{8nNP~1T$bK!aq?9y?Bjd zq|m{9ZOVRNRiAN@FCuvjv`93_&wifw@Ww9BMZBicsoS*AJFWc$q{gmEI#kVg7VJ4~ z-^f}C5+X5=$*gl`&o?`A3n$NMdE*}!5~*KXBy=M5!!5A}_hs{T@U#r$&` zU~h83zA9jsIAHG-uv?PA{05xJ%$j!S`u!SM)bB!pe3t{+D3EVVfP{{k7BH_Q)NO~V z@2!fwrA$LL9HSGawFU1o7iKy} zru*UK&MeUNVZ7^h)$I1G1z+cwY+0$pdh7UHCpG7ix6=YNFARpYq=EyLIIF7WIYn`j zck8IE*)&+vL#l%R>`;@s8PwbkBzRC2gcJUGxkpXEVBF{0$`LTzF!++}BbbAt&-u|O z*NmzHfnxZN4J=QZhw#Z^0e6%virPTbL?$<&%y3w=HmxkHxQ$_V3tNp`=QS9#-N~6P zyAAcx#HFyRORMhmLYWnQ=#BEV9q&p+s)T6%{=a>HF!mqIynH}cF(i7yW$kpFrJ{w2VhTH+R&> z7jw{m>9HhNnP(7$gig!>sgLf1;&Mh)s`R&DhZq)_chII3&+vui7L+BPr93bOGPMaj znHJ*;@aU66t(?h-{1&9wbM26?lx~k-X2_jf)RY zILwma1ycnD5{jg%*JDsO43u`GrqQtctlPNFmKzyTTdfmkj}jEF>-0m)MB-TBy4u>( zY>yY-aQTb_ez}1EzyZHQz~2@DM{dKSEuw$ub8*5=g_C5Vq|hkk`x@L3q9dCnNS}MX z^a&B+zaJelw>p?>T5`A}-*m6Zog-x8Kc^o%n5HE325>H!vB1-CgR=d4<5(MTWe^O- zxB9qQV^y>IA4ijFI;;LceJ1R<+Mvv?LAxJnj3lGb&`7xT>qej>5bkL4+lZ{Rbn!I% zp(dZQ|ENY{qs!(E4hhE>;tlc6LFW#TDnC@Yk+m6wGDRHzIq>=phu7~B6#mzBrOBRY zX*m=yu`qMPq3@Vj>VOR(#|^yG0lQwnz8wK$s-|7|Anu{%&cI!ObLQEG9VfT{Mtry8 z^M1GxukU$n<2JDFQ}5XDms2W!QSw4>o${m zkFp~RN3l1ndd%A(xO#Jzzih(ZVByQG{lT(X%xd#o+F)5jg8!Pi^3?Mjlgwp)Gff6L zEpCd0l(=i~NTow%@?0@Aq~bEq&>G-Nrl|W+6A~>7D{zM{#gxk?*1>p^hT* z*?<&h%#!aWDEui_i#D3w$w;Vn#G#N1bXx@$zYe|`R%Z;IiE3%|phymHrFNvqb?&Nu zI54Xq68Sk1lN%%nJb9-#ga_)uOZ%vd!$*t1l!ZH6{j8x9-(QNSVorhxI&n2~kBg8$8_S`fzu6)WXPNf;sBa z(G}{VB!MNl1T2q*U%Nn67tepdX9UYq*M}#NpA<~3!tx$BT!4T8!m^Buj&N0~oX8dS)urTYg2(XxfNLDdbqK?eZqEG<4P#r<57He62%NywL`Z84~J(72UF2p z@VEN57mEKB*9I|ln)P6Ie6656Mz2=EO(=m?)KG&(XpO7?Gfn!^H5l({w3|2gkrZXZ zZc;GMJDsB7gUT%2)}?&;~=G4xbJ_DSg#a$P%yp03aSR__uznuo%w z=4?Tq!B#1>gJ*M_^yGf~P#Z|ieM7DI8rFTS7xvBiD~j?Pf4hslB!i-;T~j^m(XLEw zr-m1CX{aCjgFe2YEPier&j$Kl^11zU>OfPt8F6E@DY`+2MHK9GsgvkZO`x!F26kEa zIs}cOFm=lFM4&|E-bK7( zJ2nG6-i?TyYriwx#f)J=&3%Kd9c>%9MtShUzS<*7DP|ZNqsV?m+O^CTfN~Ka1m#lZ z9}>!?!T5Owa@*kfy7!_B8|}CI3Q=6) zg2J;uR9d!x9@L&42+&J^|Rl*a*H-D`y(kK+r3HkN(|k?Gx)u(eni2 zB-Gmpf7;xwYS=Oon$_7}XDAouE@*ToDo?o)c!*j4FgNEeYu}7iid$XwysJ{To$87U zK__;gD8F_B1W#-Tn>f9Hpy$)wmjAh;L=^-RAAWmtHv<9G79@}kJ&v;`L|4Xwx=E1D z_<#4%?+({BiQe+XOjo-9RNd75WOY+&Gg~B;ZWZRRW&^`deH;wi7EXS413}?0{w}$i zw*i*keTs%6HNHeOR@t4qhn}jomGoFvw+*t|9#h)za#A>=>>Y%32n&(Q!%)c6V12Wg zPWm}F0u%J)Xn$$v-mTv`^LSF~?)jZhvAROD1QBV#OGWh3;EaK3-qZA@1N5l8=XK%d| z86Spb2Uxim(_KcuB4xrZKgTR=BKw4N=ckTZZLqlH`rvd(ZBWFiZ&E9z3bQp*!TC3{ z9^<4g!GzNa)e=ONotNsT|FGpqZW5|f!n3xgO13Z488d!-nUPi(kAV{@fmP)S-oqO^ zJZYgL!YaabsCNAiao!F}fV0dIXUQyF-jFDHn*Eo1A!cZLn`ruruHc7x4-bn9-T)E$ zRf$Spcu_-Ny6l3##wN0{$urFbf92~V5s%eP^Aakw#>~#AgZ;s1NggnMQ`%n*KGmoU z;qh)%Oa>R8?AqZhWap!U~lxQn-Khb>&wqwSUWv^J6m;hMYt(p z>4p_uNXwYulR6U_7sHlWH=&qCcY)WX_T4-8r|#Ki7np}T_oJ8SfcZh*wf9C;;@7{8 z<)ra~`^V*b$42sMt}$2C!mqKqFpqn^q#oL=jh2H`#&44^Ki2w5wWrNyQ|%QXuaKxQ zM`rJ6(4MnH?~M()H=`27p3QGNGfP4Y*=>VVfh;5X%nnHOvC$Kq8DUy|tkRbF%8wbv zt>fs*z?a|(kordn3U6Ohnx{tmIhI52SG>vrx?F(1>;S!0fZkRDBpnPFpwKeAdvG+o zxsL*)?d&P|SvJMrr9Ur5^VlieHs7^Yjb~>0f|?88Bxd`dUYGu4jvnSE4~$^$xjp;> zCl~EdMj)s0?S`xhPxC$BJ`%8t zf<8mPBf)v~Ji_Q>mclZ_=ZQg5Jr${nIv#DW3Ur-iT>Q{R+n@TVb=N-BF3ZpU z1VQ0%J`i)J2ZN!Ti#2G~SZb$wzC>Z3OZML!&Ol?8>X8qYQW*2X`qZsgMq$xu=h5)* z*hsU90_2T2cdsM48);qJNbcI&@JXa1d;c_Tv>^5Y!cjs8TwCqJ=@H!g+2nx9%=Yk) z!}4mgyQr%%jV1PA`x_2Ewm z3QxFHeh$0jvkt5f+)R0~sn zaeZWDPQyAcXkVFYUm3*&M`!t3*uF6mAy#@qi!S#p>A1ehyk?_<`7pNRW)qf<`)evv zx~WS+sr=um{CwS|x6_$iqm{b%XgF_QWNy{_YNDfU#8oVGBQ~-J=W^|R(iZob0t|aM zbec4?kD=)YWqcT+xQaUEx;BOv{R#QLbW}=bA3M4>gl{~Z!jr-4EO^K32@cZQleS(@ z^&G3p>NEs@smN2rTKh^MU1O@akl!S#(a=3XxJPJz*`d4cN~C;KDf4ybe=&g+^Rov| zyM-oJI%b`#6@aNoVuYPS))--P`0#vJ2s04i%$~WeW>f8^-E|Ph+E(X*FYKY}UUau^ zTLzRVD3y7p4=nZlOHHN$W2kyp&8PCRN8|k__YO0VKi3QAaw?W6&Zf`j(eFbS_-&RV zhi{eBpkxwI&W@k}alXCFx_x7K^#4~2s-Ghl{r?;)oz=XRiksGR+w<1SWcDR0d&E%yvjAl z$u9oIX?D{8+7%t3hmAW zYh>}62~6G98oAt*Ew5nEuidD|=j%0a7P>ie&dMyZ<3DP>ad6gbf|Wki^Lu_h)3Su& zw@79IZpfPfZpHx#gDCF4da?!1#MH%Q%~Pqtyxrec8NOE~VwdJ@xtv+AAq;qGMR0g_ zs|d>`pI%kk&u*?Jud?iWIn!$RvYM1-$Cr8@9bz7dFSk{;;HK|V9!{go~QnoteEG+!|ZdkUaQRmDxyHz?E zou7$MJ9InKJWfXlV)3IYN^gnHYNyP^-%_6$kU-U+!whSS^ig)%^vj9xV{cQJQhSTJatn?q&QLzmU6VpJjz*bn|vz;P5CAgYD~m zlR*4A%PcieF)=5+F(dV(Xv^EK3Ul#zh^OT-`OV!mU`_N||_YCvT9S zuR@Ja=X&)Hr_k8KMdz&cx+=GxdM5`YmowdF^1VxN*wEasPHoNS8}wmw@S=Z<$s~8& zOp3_lUX=+ho8Zhtm0Uaon5CFs4KNBD(zi4?5}`a>~vgwo~m7Jv2LNXYQF^}DcF z2uRtSoyjF?QEUK?ohi#%lE9J=_wFLO>Xx%NpFRI``qBZ6w;A&SpPZjIkp^T~UFVF0 zk^ENm9cZ$kGYJZMA0$(Dt9~0O1jm_Hl)iI$6&*a}wZm)lB@2VxR`p#_d#}r;x;dvv zIRh5-s@IBdRN?u$QEbgwL~P}eD1|%gpTPa-AA?PUq|I%zN<5_s1e>;4FopE2V zso%cy?z=D8v{B!#RXK|cj~%P6s_9jD(7Qp|3{y4sesFaE1EpoRs(jZ19h}Qq-GkoM zgcemDV}Sl!$#NDI^scvJR9Ff9`f})B^*T#xiCzea#dy!fq=w=#?4P-D0Rlmtby>J* zyq3!Dp#;?;WfN@~_2g_Q1xCpX@!;hQ@w~{|jq-^gzmm+UUNtJ$t9M4Z2K4(F=BHqb zJ9U4hDbp`buD|x&wVWdf_U+s+waAX0Pss45gUt+PhJQSTZbt}+ z)UD-el`)_p$V{N0ZXgvZ2vRyX02Y?3S4dFLgr*vp24<2o_Bumzq4GK}4S4H6x*CIk z>{Ci56MWf*Y(As9`j3(6`_Ft*t|mL1^;gNe!aDez7t>JhgdVubu@3m?cC5gYIdC@v zGNVclhudExj-x$mX~8cnH->3qZB?!hdoli^-ok1dHQjZ8%L=ZZwlRQCA}GB4V!sM^ zGv+`O&DLLX?nF1ngxN+)FzWA4OkNJkd(u8*I6YwyBDYCk0tQEh?Db6`;|;rN($^bY@mGNy#~pf4oGewz z=$nG$0)Yu<@r?cIseQ%6S-EBMR6NffOWs5lwzmlz5R=xQuo!GzKxwUP00efVP&X*p zB@5x_+KfV>PRr}?Y{Fr#owczg@>l%j3`qb=Q*=gWg9SL5t!v?XZ2d)TBj1&41%x;Y5smjT)N|35`@ zs$-@m`NXaPqzW)tr-&s@pW=>em-SdgGiyodrzn;~@Vu(xdX1|1KF3oC@=zOioenBm zv{BS>(e0Jqt)SB#R1-W%KFZ)|kEp==B+8{XIwKP_SCRd8k8Jv~T}DKXk7v7#lu|t= z_C;%IuZK4D7cZ0K1&xT_BN|z4G;%&MQFHxxSxX|u%Uk)4VtPMmA8Yv~W+}f^61QmC zVsq=_4CjWKi`@oyV5dA&y=kQ>r#(>6?G9@;Dza`azYt*f-xVE7CvxaX!VE8!K#cO* zy2*#)ZocB{n)qD=$$jg%a>6h;9l*)-{|UMxRaNFJGg*kQ2DQE{C`sG{Zy{NXUWw-s zdV3rBFqN;(X4$SjzIA5Wsq&c727|+*(B5|wCyc8@%Q60_alW?oko-F1{TR$Km~5H0 zE%-@z{EA2nh_(`}mTwV4F7{B>v~sAQHK^_D8B8%$tY1gN%hyi}?)RiO{Kj;3Dlj3q zg=kx?U{n9Bi``XPB_t8LUWv%8=f72@5`tsalF8ee3AFUPGqZ4!IdnsK;v&yguwKNP zEW=Sdy=g&jvtudL?pn#5rQ3}LoBeG$>D15( zV(O44iV*lk^_h9hB8USBl7FmrvZUsJH*zDtIkz~dM+oYd9Mr9XIwyi^sPI_yd`?6S z)6>{W^>*9GT7DVY*YOKQ*c6xQ{X6$H>f)eW;%sGY0c&7=G*nC@_lB7d2X7!_!6lu^ z!`ZP<;Q%`WsDZ?8Qm+PGT+z(<@Y629 zoJ;puEoa9@BWI*v5I`^S{xt;4`xqiDH}&uv)@gFduTh9k#N4MZ?UvfAl;Jo=*fI;- zg-w%^nrdxpH?PCJ*YGRc5Ew$)h469e=!vGRCiRvG$u#nKntf2sNyryBkIy&d(~H2@ z9z^?t;!E(v-d_Z~+g}JCHGVPhT3!gAc*u*W-(I2rAoS7vZfO)osbMZX9|>(PW}%I_ z%MjK&Mb`zW2IRMoLV_bu&4UPQ{jEXghTyXGt-)n$k=yQYQj{BkZb3Bc^k>CKRnPp^ zxs)IN%Du1U9ajbl*{a1)evLwWB4|cm!@bHONeB9%H@VJGlI3%AYlMkhUfIKcI8wFP zqymCl29;Pl(z(w8&;rA?T#8ykp3;TKeI>4++FVvYzP&(zR!50f-^j{kh|uuc-!i-v z2nBC?C~>@y2V+&md-*AqrZnLr94dFD-0QKSV26#%NPZ}6{JL0<4Nb;$xWPUA2QggV ziV|Fs#jUW!ul){$;2gC&0m$KdL3qVe&oiPU2XNU3H72IF54m}~(dNU1gHKJjiJ1}9 z$Fm}$nr1{>1V$zq>b>4AJ+`Pix$3 zY#!t4XABl>`rsNoun}GjulC(gHnD9LN~77gN0{UmHbFMQgBUN-xEROmc%zAP zU3|;A^ZXD^;p$?bjPO8aYS34tbz}$o4SxXrU3KTq*7Ny`Y;G#>82Gj(wEXOSyoXP5e5j~O+Ye>Awmc|Ip*Ssff4*$LE00^Sy0NiI+I8eWl&QQ9Og+`TBq4@uPOTE z`N{r8*x&&D(7yWYzB0U7$Nr7l8WBLGm9Q9F!bK!X*M)ko^{I_&Nm6i}7UJE8 zS5NeU_%T839p^W@RljO;s^_)*x^K7C_5(s3t#}1LIm;md^PPM#hfI()obe3ID8EMU zB2)~MghJ%%M95kfGDob~w=CShH>yJn*R814rh|>2#Tdi-=Grwmonh`}TF2^uG0dgBMkah`t0UxO9871fFeBm=}Z5} zi#IAlXhfBWRo;(Qq<{3iYE_L^b%w#am&G~SMq=0RR7xyVS+uR+HnJi;QfkgcmsYmr zv!vY+JL3p*-&gIHb`>;S`qIO}fn73pElIB$2?r8sQ@8k^kbRrRGD>F0q7 zWWa&!Enh+1`Rwz#_AO^^Yf9ZY+|<{#eMNeEq7KVchvD-sB~P?WI@ElF=?({=Br~Aw z6PUpYdmZ+_%Gak?UCRJX-rvxa9Bm@ zP;^jeSa3vZtmYSp1XDN7^2Enpt#tD5SaiV!Wjc9wHG9Iur=1MwCQO>Dg=WqgzlS>Oo72O4k`YZax+1V<4-egb~y1B{V)$;i=L(?R)j zL@$wcF%nCM(+}E0tek$d6}4z80ezC*Vy^y86P@;9RVqLG*Ufa=e_{J*m4OU}`$H4Z zdR~h{X>(NHSbB6Mca$0)# z;suwMQ^*FV7nwp8e`2@M-6vvu9=0}&sNzTmR1_=BmY4X9YMP`>(bzhJ*6(KEbD5~s zzu`7Qoz<0m&`3y7l;)Q3JKF4gfHyl+;1g}ZrgIQOuq|9>@KENgeGC;6M73JZJH0ca zOwmPOl!%4(6v3I&Bsi1W&2?VPmOZu>w^sXl1Y4tE8l7M0<0K|iZNNSIHVdOvl z=J6%d(c^G>i#cqXLW}Hz{HW3w$%b=X|G$;~|E3z3pZy+!!VkUv#n9r19hAQkl)D|2 z;|1k}7>e&K=TL)&G7{;JNJ4NMuDTw0niE8`9q`TP0DPSTex!gu_&230Iusv@-wsnZ z2z{BL{G)^NOM=4B#ZbyP z-Cjv*){n+mjrP3Qw2?JeK3`a#h4%Vw~#v@BaUbM^HHLpo)K|p#$IFP z*y}l=JV9%Dg7vX}jbv5Dn_c2T?1ItooHbfL@N5stmo;S{w{2a@?kZMg;+qfQ!PU9; zer{!S>ua~790>-4ZO%#T2qDJR2Q#NW1YaF2_903-VqXFyPM&{@>D}Mg8?j&OAvOjB zhAw^vaz|x<=P)rS7ToOp**o&^_5m7)gDttEnk^|fQPQ#I?4N}NKXWUjCAdtc8a7u% zJH9cXu|*v}_9H52U*8h6v-$aIAuxZ=44kb%Z&fVk2cEW|+0XMH9{IWw)rN_(w0AdE zO4vdcpbW5#9GGxWekdp-^GZ-&nD#&Epj==p@Fs2TS=SiLI+G4G>ZIftEv&RbygQX$!1gV@m-Z9}kb<-*QvaxI=f`H~` z?Zm8aV?eeI6{3R60joKvsPLf#dyaXHFAolh+C16uaz62==gyINiJe7C${dFI$k?ky=8!)j$rxrYN zfK}yQ+QzBJhuqobNwWAUa*y36>y(7$?U|21AT>!Y2iVN@=Nwyfj4?eHEn4MqX?H5W z$XZ;te};+{7CJ-Lv&@;4-R8@FCR05j4Xk&YYR;w<5F+9E%Iq>XHB?4=lXCrczV5U? zGJJBgkJn>iy}uxGl?u++9i_nh>^H!oxmW%7kP!pzU94*vym@$YYrgI(Qnm(l7pscF zIg9Oa<|Xzx<{kE!{Z2jnV$5zZGkF5=-+!jA>Oh0nz10CItWQ^a@h)F?JFzwi*4@Ng zx&I=NM}L)Wi!v7*PpZ<+Oi=zcK(3P!52SA1OcWo8&sC{gO}paL4cBIgsD=9%+B~WI66MMzj*=@Jz`9ON4v&w-%_uuR;s!=(EYkAWl(%i%k;&|MvYBt z?Ger?g2UB%N?*!>v2Ibv4wsas3%M{GoWhWvLvK5V!k0JoapAN;CF61Q!W}CXN@EV0 zD-oZ_#UMOnu0*_Yc`_<-1f6|?R>jeD*O2+5pDgAPD=OrPM(;~4*)w8Ba&W-uSG;-s zT2+a*Ln`=7G8dAFxtiOa{v{e+o02i5G9H@)M3VQ>1s4#M?1D+%Q`6Mf`AE}>&PSjx zDY6P`T55Cpk<{j{U!H)vKIVRbn6J{vU6%|l0 zV=Mb7bvGP684Xj}eTtT2O?^@c{ZiFiI(QVCGxP*KbS@_pIj9!+iT+?jn+(iE8e$~B^6Oz?|mi#w$?&_<5_=w3HeWUMP4=Y^ z1fAfm^8kn8C-Hk`jTm(EgNvum2eQ9)wQoBxw6AvNBSe_;tHK^CnO+S{Z6^KW2T$*g z!o|j2T84@d9XS0b&vu&gAuZCE;{TQtN|C3bGX93XZAu&D*r>Z|=&3nS6+F!7?n_=R z1|d9LxgPxndI#p=wLAu-du4|H4)5X58oj_PU#2D+nVb{-ME2$GAWdFo46`RW&Mj-f z0JjCUEfl_n-inr-y(jqgp(-BFKF&ui#(lWb)+v!~Ooc@aVp6MzQ_0j}_Hl((r2d9W zE!LFkbxJ6kRp*GW&q?*3$RpH1%xF@r%ABL$lplgzcd)y-gaBh@6e^)M)q5eo4+vs- zECbie5~uNfzw|EH$`(RxRY0`aCmVUmKCj=@?WPUoQ1xy*+hZ{O`PWRY?(yHqKOs!Q z9mT@mrCoCgV{ud&u6T8w-AC|FDHo#46>a@4O&V;mb3A?eAW~Q%Ko)Cbg~UCk?W3u0 z*k$5{;PP5F=f;|YMfL2=jW!4Gn8m*3H1oL^jZgnks(KU|FKEZ9%-(=Y4W4X7NWi#! zCT^)GoIsnDXSuGMIT{9}K|l{p=qr_P;g?#T*2pu#VGwDDo~+Am2Z0V9uK0vRs~o@9H(5qq-zCM{=&3xcK1B9vOG%@^9vQ)+W+=<#aZ5UH?> zd9%Y{+zHdStxvul6>RszyVXM}>5THEfACPzQyC-{7p1f{s(vlZp){7*XgBQaY@b@gwGE zsswMm@Km`BSpsaHs~p z;Zuauq__|w9!Fc`lkAx;NfWJLX>+I~wq*48gOu7sBck@uh^Rd@B5Dtfh}!cj+T)v6 zV9fg0$Ki1P^$9x;Wf=Lj&AHRHtZ$oA_i-qDTGT|*SGZI(49BN?eZwZAwnwQx=u$Pi z2Z&OA*2!5%M1Xh6uRL|g>_e3$k__uvrLm^P|iZx$-ypX5@_fC0j` ze5&1*scMXcmCe`DFxB9Dq5hx~qW+*0qW+*0qW+*0qW+*0*hLL%{CXQVS6uQa4Gt>M5IH|#k96i?bm1OBGrZzmd6xo+EA*)bmV;FfN4B2}VO9YJ0U zE27(`bor7)x1a7j6!xG6di$W9%S|Anrv#In!Ua78cAXwk&J<4T`CGGfdPG2_`E$q+ zbnzAcEB$4CP>INcjG0DPFqoKb%=i%nsUB)nI0QwFnldU*a7EA;iBT~nl^>qadl-#2 zk26mJS2!?!jCrCt-y^Ji{`TjiSx+>;Axh%DzT)-7P@ztzfLJ?>NFgAd2Eu;!sYVk0 z#p{X5I_c;TU-y#DN%Yg|HyiF(+0noYpL}(cIw}8CUlOtKv1+ICX00}$jQXowm+Xz# zB|;2a-+tYImLLC}C_ICsB8l1!Ii|+q+IXE(uHSD|)jYnuMl!W3qf)0WU-CDX)oosO zAbh<_k)kR))Ts0<%H850)WK7$%2BH1b9$N2>E6MOikGdIXT>u2dP``=%p$1xY!lM}jpon5l3E$DpR zZ$uzL-6u_xC`)dNUugl!)Ag>>FuOqyEnAg_ew2#>1lxys9j^bN`Ge5>76CC$( z`#MhfTZ3b+wa4sF*u%jO&bgkiOmJqWJ&v*RgV~?bm#iqVXHhRUwNB#q0liYy^L|>n z-#GVmrTxZ}iFNypC+h9y2j{-8`Tfn8HGiP_a>?lK{!#CbF;{p0qdqnJzkx1=>s&jW zzEcHp%-!j2=Fo3AGE8jytV=ymdl4=Yv)kz-KQ$6|#znfq;tr)%PB)E~(rRqDX*5oI z`(K#$RN!)%!(UVfrCo`y#u_{}s*04VVsXs1fzWwA)K|uZuB-vN(zM(rkf{tb{E9dvRvG9o3MIn(%nOoHCLg7#RcJ2!RgM$K#gThMqJyNOZUtx zPke2YOFeID>Lmil#NVxI2W@NBXKI!3^)u~;_Va|_TdfacWVbLPuOXaWQcep}xdJ$n-CP;Huhsu|YPOyP|`Z6gd_o1Xk z-h3CkIMkN?ezd67`($B6qCV0j^r!zw@7pE;%OKw|dy3rzIz%P;e}sS4_p0n$g>iQ3 zKvCU?ACEBAIiV{I(!?)sRDx4nf<=~~BmuI1jt&q8k7Rnus#uL`P)l|*n^CVyfv%Ij@x%I{yc1D6thO8w!w=YsmBgDY1^m(XC#T_sW2 zXWw4!!dUlO7@FcZU7-{fr(@5PWfY2~G0|0OGX`>FHK?=p*RT^Z9NvX2uZX^C7kx=J zP6lea3PT5Ks`m#!3vZ0#o1+9XNHDLI-~(}j86HB7CDpKh+(dkgy(zqDNE?af2_wp2oB7-L5m%uW82v%*$>H}9svNJH zxrOI{eh3Fi^33EIc;-_-)cZLw=t)QE8!fm@I^=`+=Y z-7WZo2iOtr4@wJk5-&0uI8 zM5)Q|LsAoahpVH^+Y>Fev9wCs*Uo>z@>?j?HP2|wW?Icr8S`2~-#7wL$t{qWU8wpi z5+utu$EVH$qHMqJFT+1~`Dx<~<0Wp>d)~_Nw7@~R;8`YU&ckgh5yTagUO^D)aj@3f zG1glBtEt3sI_Y14{trnXCJP89XnQ`VAy8Z&_fc2GpZ*8YMUZ zX)|JgUOE^r-W^K^W%k*Bd3`RYKF(N!0_jBV*WBx_Nb>bMqEs(*A_qyU`ejKtrGB@+ zVEsUl8(2vY|m@<+^_Tg=FedUC&+R$}+K0FF6N*xctsW-Wk$ zsvVdIV3Lc&%)N;i_FlQnlu(jaVdpq&0fP(LoyTzM*w3O-Agdo;*f!D3?WN6_jFAYN zF)jGZ=bwDtM}HXAFMrJ6^3IC=A|AfBOFMm4pT|IC5-4Y!B~kw2c^FJ|B*XkJ9QP7o zho#EKskuu;m%%RmlW+@znP{2UzGqR#{LMQnpQ zvZZg1x~E6o5sk-${c~yFW!ge)D8Pv2xz{axBmtJ}>LT0Ej{_;DH#WHUB+u`kos2Am zuVq;JaqA>-o7}_eAO^Gg@o>WLmxk{IVnu?oi(2*lANJk`KF*`M_g_U;Vh6jcKmu-Q zK)j^25%h{Qp#djUD%!9HDF}+wG!Rhn#l^hU<;D~WDpKPGt=A8zy;iT=f6}P^C)C^q zqV~p)N#jH^uBD_VQ4-(awk};#1CPL$C{9R}G>z}~cg{S!&#uL%$YMY&Q-kqMlCzOmb`sRl~rG5Sl@euD?(^vG!Zp}ol9TOP>d^wqU&4_;p*)% zjXl`io;$L7?R+XYQ%z}$&>%TuIe=bpCF1?Y-TdnI}PWHAd0uoznbXnUy z*v@(AnzkF)o*(`WF>$aqTDEtO9&#$T^Ges+qbQ5f)?d47&EetP*Ro%bUbTU)HqfDV z9B9+Vje+*I^M1+#(3=xbhk>Ro5A`v<91y~uWrFnXx2&s8 zQX{RadJlJI|8yTpqF>vb`L-cNyTjeBdPe*Fp_7=G7kBJVv|qs z?Aig=)y+Jr95~3*7ge|&EJa*o>5FQ4%+eYjgRj`I^B6eL(idsBseAZTxByR0C#+{_ zD+=zYF34-?Nk4l2bGUlvP96XGpY;6({O3WQdaU6;Y5`$*esccvnp>;&eH!1@`gTsk zAW^Boxk>@2U5`|UlL|7lTZWVL*rztbNWuOXtR@`=PthN4-xw!j3=`RQ?ivw`If*f5 zDPznXQuM0~9qTt9)ajj}eZS1_n;msC>*hT`k758CuNg z-eO>HDTFiE6e3Qwy3=dg6yd9lhcZ|EbWN} zpON-}$}bf-xqgT*y~tv!OJr<&DYrGu4Ytm{M8m4x?6WY#zsv+e@o?JH?!+nf4(eSI zT$=N3#pu%n4fb}~ZH&ireZIAt>22%#I;uI2E?07nspeRiYIf~K6EI`hos0eLn�B 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%0DW3U0Z28hveMZZfi-@zQw8QB<_X$Jp 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�e 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%0A84#v%-?LdT>2g&QS~C1JSx5B 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 literal 0 HcmV?d00001 diff --git a/server/www/packages/packages-darwin/x64/PIL/.dylibs/libwebpdemux.1.dylib b/server/www/packages/packages-darwin/x64/PIL/.dylibs/libwebpdemux.1.dylib new file mode 100644 index 0000000000000000000000000000000000000000..8a1732488045c3d1186538d83346befc619420c5 GIT binary patch literal 51584 zcmeHw4|r79b>|x->>*L|ghLY2;(Bb07!q(~o7i%(lM(3Q5n&t|EKFM40)q&|fMt*j zcA{7ljR=p2KuvMt?Pj;M>1OF})2N%&pK$y~!dj0$hsH{(q}ncR#}3=PNz{HyqK#FT zn*IIGz4y&~!{DUdcE4`FdD6_>Kj)r%?z#7#d+vGfo%_-oPd{f_)*O5;$EV7&YVot_ zi}aG=703I{42sBoadfeHsI9H?-h!hs40DjfL#j04|# z{cqmT8-MFE&~D?itJ<>qUC6&h`VH45_QM ze8)R1>$l!-S^Py+#jD!tF_E^meUI*b;Gtb@`#QTGKw>G5w|v;L>X6P~(rK>vT!n*e z0S**y+tI$OqkXT$qwT0i*%Z?GO9M!7X&j8VwQb$kxp(KDkL%1*Iu4-h&B)_#_zL4| zYwOyxf9IZUZ9DgDe+WROI0iKx{0)~2<6|4Er7xNq?`{m`BoU^`M*o_=gds<+wzfUs zp<-o6=U&u(arrnQlhL}#KYn<%we8ySW;o(W%UTFH{)Xu%ErJ`r;NwGk_7w+3DIE!v ztp^-`!#I!>T;xFmK5cF5n(zFG)6{InWD63>1N?pw6|!E!n(J){upDWW^f|0yj`e}2 zb*n$n(!A~iyLLXXzx{!ZZSA|e4qSi3_1hjr0wAujtRB)tyezv=|1ybJJ>ot19mFpY z6D#4G)?3!E;&(->W$i#mycJ=B@OrQQkfxjPA+49X&ZB*AFO&JpNMk*N-+1)Jnory^ z{F}r7@zLLZ<_90)e5fV-ytl~beJ0K{Tr}P_;KQ<{)v8v#oZR)$mTm2O+d8&%?l8Q# z{(}JDjcYApu&L)2Pzz>aG=703I{42sBoadfeHsI9Qe1xfmZi_4bl8?-wWIAtFZA! ze8W8(d#CR8*~U#?dV$wk>vh$5-Ep^j%I)&q)^lz;pK~U-W6yM-Bbe(9+1Ysrc+R<; zbpe;>`!^%^_KOR>T@?bPe;h&AnaFfc2w0X?YU&jo zLrgzK+5sbUA3y!G(=oeg#7m!ZV}|~3Aj@;ktaQfg&yDoF60@Hgah=Ibx3J6Zdyk-< zB(7+?dr{8K=aO+67jj8yVNR?+{(E2-ah+!}-Oos|NVC_Wm^Awtx2Dc*s;lfi%*Pj2o=Ff64%d zDk1+1??l-GK148=gTQsp7JgZJMuwZ6r3DLAdC3LRIUtMF*?sR;>Fn^|M2hJ&nw0?V zI@6vr-8*{k{cXQqI^LIgPOX=&@mk}2{LFfu4g3bFaa*U|^pxxPCu!wB&bm0L_rH6cW%Z6OQx$LDzWsXpsw~lPzV%Km z@f<+S=A0R#^qg5XV9r8}X~ykdH4)BpR2Dd9G{gXd*7EhuYu4CLjMz_oJM%gqz^y5} z4}-&i?F86dm>~&!kF%;J3hSG3dY&vS{7$jl4J^mTl9~w^(7?Y;_cSpDBuSawNI}NW zz%Bcrrd2ZT7G%?^^7O3R7zgEEvc^l#u566k2d|KPq+pOB7XuLAHA6(fV2yB_G1ocg zUxCieIp+~W!_N1PF1hao`zpo1g`NYP@u#Ij(&xcSKw!vf*j#c6n!-}Kg)C62`7I zv1N==EC^&hV@i$`hXXp{P5|7C&nNIXfX_jEj^k4@->|x^2xhz6I^(9NLAhC!wD^_Q z7Ftny2p{WI3SUplIO&>lS46}BvoP0dAS2xLIse`|4x$-|0e5Yak_Sc@IC)=3_dFvo9(N(5FYU|4mGdOErHPa16=RN&6z!rgcj=2bd1=hGw7h|5}g~TU8?8)OZiZ zr)IGlK#Qaavz|3qRb-}_|LPkMzL-Ot>*!qjsvbZF^POYbjQ0q>TNJ)b1JT*X6iZ5~ zT3%As{%BPfkC!?nU{wE@p2&V$s+!3hXhHyUbq~HF2PJZJ3x3!&>`6?+DGrHwhUpuT z8S3E3nEQYf1Uy(i?RA-sqMk!``;ST4Sv>({9LQ*@!)V$*AnQquAy)I zXQslvTo=du+vh^RNl&=WIF*IgaWaU@<~k^K-$tJ6oXK>bVR0jNlp4ufk7jy2F}xyH z2Sscw^LGN6{UB>|#`+JvbTzOK{5ig#+Xxk?f9O>NLqnK}?x(nbkNUrz2pE8QQs<@f zZj9ZQtY;8wlXFf2Si&YH049%9sX}HggVdi8ULavCXb5B6BONmv;YAY0dVny*57ME# zAe@l!LJ4D-A$^gA8zj6$!q5-SNMM=gOh}*}sts6xWpO(%~bu{=%`SYR44Tp)H4z(|6? zp5~T9X>_G4Sp%k9R6i_{pII&Apf}B(#Uxb}LqqZAWkzIFV95><`J@tW<(5n(FG}&R zk#^5&8G7_hswtrH$#QAtgWXCcSV|^pcGv+Rrp<@6fK{j^z?g2HN{bSA?M1>_Z&$BWm@z7 zU8#3wt_T_~p(-d-OnQCF!@QPhNzsc5g$m6c_#jtUG)kKm4pMlqjj{^CfZ$iHtzJ6D zeI<1(5q69q46w7VljopP=&>49S0Mp1ZGP;uJ0FW}m2<9~3R-vH3!G0IAaIkS;bX8& zi2%UX(eZQ6S%rT(b6^ESX6H2{o23}Ohm^SB?hz_hHDlO}`(MB=Ty3AVEk%`h8Iuom zVygS!g@$)K!OhNWh7+^!6?}`;A&FSj>hL9)D!@Kt1JMhBLi`AdiQacg=%E^NE>~Sg zlmS^<9l^@&rqB3)4E+II%XH`27CZYcz+!E}Vz#&z35xh9MtXi6QE|$PA(lGDIJBzV zss(Hd)Ddre-0PZlHzp*E)e+%3gfovxEwGjR>;+{5n)dEmH1D)~7i1OY_&F_K{Uh%( ztI*RXVhM50*)G-|E5*c{P;(pW?=nSyDej2`zO1KqkauRJ;K+P<}>?HE*B<346tj`Bwl1lvEFE^IE8QGw!SITXL(ap@Lfe z&1`^5@_!X@NtzoP6Q<~OK@ueAtd~kaL4`nZ$DmWcR_ObVo#l9w;f0|f(j=>DhSbUw z*kChW&p@fxQU?4~(;(m{dl)jozYgS-X>Gm2NjA3wO_|=}(_x^H5HA3S*}jRXh7`&E zjpk*g1AxgQB1mz05dpC;5bT-q5Li3`fmwl-03snWE0hrYJXkDw2_Ok(1z_tWt_QG; z{K6*;>=Mb-n{AbMr^(YZW)VOH?+Sr65|oj`HGnm`wUOD9F%KD94xE!>*=e*M(o4ED zuh)p2Gs#S@(*kwKdD*Pf1YGIlWu1Qcu=8@TPH$3p^m;h~loHhI<#<4iA{(+cA@xVd zeh@eeU|$Jfq#3IOa7tka0A+_JtJY`P{^#*C>^!TyoJqE!(og?L0tDcC;179JHsIATCyAV(FzwvvjM32Z>*n-W4( zqbx?Zp-><$6kfi;ES(=-trQ^vrAK$7*kBAxjMmZI^w=RMXZI;1kS|!D7)H`zC#N^Q zG!(2)VDa)Esq?zW+}naXBVsW)i85;PL^@lUFEE}GUV4%;Z<6+QkcfGERz@ULx^sp7 z|G--!s$RWH$hsEoXBzG@-7;$Jqggj4w*_WPBwp<4WB{w1#^;J*pLC zH^CoP;2QIh63h|vTROlD;awFY`iKoqsm`p5`Hj`AFajV90TQg>vx*_u884tACuEP+ z`z6_NK+!$_{)_C%@#y|(7C=f@?H!G)6*#JYtNq@2wWkpawbCvqw|@i~eu`XFn;s-l z<&%W;wBIlKJ$g+na!u-fVeeExfZ8fyYc}gO$FbDC|1GzU*piyarxrgkgMveZ6e^{wLIFzkfLGXDe_n} z$mxe=pNyF%v8@ur6ohqYGV==IW7weJj^*UVn#>!Z7v(%y&a{HkiQyBg!tt}0kl(udkyB6rRAR1quTD`gjwmAFPYp63wP2Sm@cAZiC*f+zeK(fwthV5g& z9ZpTIYf0e_rhRN*IQ5=%OM-WXkMa5N0Pn_@2Bd!7&WnYu`0XcQWL&(7{7-ph0NFV3bUk!iFqV zIzi(AZpS)D{6Bo1EI4xOi2d0%H5+Jl_iw>0QgxV}k+k*z zz=R>uskjrBXj_}=8-Rff%zY5T`=084-wKt=o_RM)Xl)vrKBb2ADa#3dv;1bihCbnr zUv7(JMh^j?oO}<&@p-*#%~L zF%WE-?r|0{4+o5c-oh>!kCU?hdKIL`hB-80C{jr;2T8Qbs?Io~cw3|qbl4>+4^)Q*kHtR6fR;{JQU zXQ)MFY~hdbCCsXqDGXf@!_osAi$+~h>^>Z{oW<;{8q+?)i15W041TlCIl4;X;WcAi zZm{HGv_Te1EYJ|CdSym-Q}ucrj|*9ZGQirfDx}|!K?|{}_VR)GB1`b#`G(pO`@UGE zL`#c23-dOh!j3+WWCEdX`WM~@bkyVUGzNMQ4Ve;SI%X|L2A>7;X*bfw5G?-kjDV;c z5q%@1u7u`CbCOtR@q`Y^Mo8Q8@iahEO`G8PC@83jsDe7};%;vm^OBp;5Iuj1r8}}J ztNz_DHNfUOWrVm&Xa8})V>nc!WH?_0!iSN633J{A`ckIp(}1yHuX8WsCZmBd`?#`V zy@dOhqTD2CU@AWEwJ|ewf`uYFcdOOF+Gpi$2mg{4De_#yv?Gn{&dAj1#B=m@HX zo(ZJ7PF7YhfFtNRS!gPrGpu*Oc))5btVt=BlV?ETrAN&edLM`=(`N$$7|_wX42Owd5@Rmi7wOE!Mr}&Vx?R# z^X`yp@_Kd8^FAT$k-Vw+j076c@wsHJq6VW8d3DmnVbjFiPq9K_z*vQM5Ib*`8|->} zqL}l=V%=u}ja~Bpz<0khzeHuT`Eg<1O1JER=7c0M^;yF|qdmJkx!I{4t7x zvdOHHDvux?az{;aRpnAsWn?d^S_r*GwXohJ31}BY^l=G5Fh7ZacULWKw6!t|*=|rG zbsX2jRDhR6xpC?zh8w~XiWyjo1INR_dJbsf)NU|m-Yk@Uhf zDwA`$0To1+cNr;ChkVh@Gf6TJ^*tzk&J`}8d|0I(mONT}PEn6@aL=5RIWu|!z>)df zJB9YE`)O)B2Cb`s8;{~0G%h~ik+I4ctp=%9QOsfs*Fc##lS|&l9E9{UQP3e9!eX|T z=ITJ+Lp)-<)#|6|sxWWVBSdmD3ep;n#!$qWhc~gL*9cJ8lphC6dq?>sLkM4sY`wT! zwV$#^^58ZC&9RYJ;`7FO<;kk(ep2LnT}b}*svLy)?I^%U|9@nML<_ZVts zh!1t_xR0UJ4AIz87(!^nqkB4cwC~&bSo@m2TXwfw>fPh5*7luy_jR^yXIkRw+Y@)T zu3KmEfkTT=5~48Y07nzA@Gp7C_vxwS^7B@%UAP#=T7Y+WV|d?|rORKp0e%fWE%^Kz zKHKowgAWDka2?*&y-vdGLg7t$q~(|5J!o9zu~t$m9H?-h!hs40DjcYApu&L)2Pzz> zaG=703I{42sBqw40|(|`9pBivo_|*)j(oaj?wpRQjyZQ())h&3LEEMr=sf`6b#S0} z*TdF;^>BQCvhAMs2U_lE?_ATqrL${q`@ZHqo$Y(~Y}v)^8lAmi%l7uwTXyYwXe(1| zL#b=_wzo5F!4=82wze(%_OQ=bdy-cs$m! zxBU_8zs5EoYilP=FdyIDzNgbV9b1otE&JN7T&&9Kxelh2{0%UmG+T#b%1(1Ewt7d` zo(HW0^KW84EG%7MFws~UNd;MrSqY^);X0O#Ag9E z{2_pi^J`!gzNYz=U(N9{{odN?xjnJrIRml8iC8{1fKN-uU~Kb=s@fB=6LU6q)DFZ3 z@t2Q{SC7Yfs!zlR<|OJ{k}WNR^Xgj$st01p@!0s~J+YSh`lMyO{+Bhh!ZzVU6Oy^a z%!E9~m*B%VZ&nlLts!@Bh*~rzT5ktL2cFHHufx*_U#Y|O3l$Q=3?qD#f%zqMo0sWH z0MpRU@Ck%B8JMdq>j4wK8a62%?zu+2b4d95Yw532mCYmkc^#&$>ZA_Se)X(@L3qrB zVZZt-9k#BwtREYAycWi%Nd-T`d=`e`%?R_CpFxDL)ZuA_uhZcqtYJ6m@BqTAO*(9Y zAJO3sgg5H&Fv1V&Fvrb)9p2mkv$PIl;8>mxcVPT{L5GvKTh{OB@G!#vO^0hgg!icp z48nZ8f;4v^%$I0{euVkV-`nGsl}K6^pB=FA$)k_{L5Eww|5|h~(>J5PuGQfl+-kVd zgkg7dbh!3voD`zN<9HBdw+?q8J)^@37%rdC;XKm6uER;x^(`G90L%|`n08G*+yN5s zZ&~kzLDPg6hr&0hFd!|fF%ErJmtyE;q7IeXfZG71q)VIptbV8qGKmFr zsw%2PRe+~u%cJz)XtlL$*}JcO16-BvYH!}X<>T!jW#7gvyLN8duyc3EuJ$z#?cKcv z=md;U*#!B{fzEbF_-zJa^^W$f4+@Q|K*6?sRvVhyw54;)2AHd@wha&N>`+Z!=iGE7 z;z(`ABJc?7QW>irg}fE6taEN$0R%y%(h?-BZ>L9819QX82BvY(PEZMPZg>O{*{+-4 zxNVyb-PyiBoUg;k*P)UHN_e==x#4CVxN(IJko@)SySH?N`trf_7Pzw9YX~JO=}x_h z$nqlz#eNB3ihUbSYPO1nf>o)Q#1%=mD=5XZP+O!vE?K2;Oe=-cOPGKLt4gston0oU zWHFQ?XpvNI7Fm;c(b_K=p;bSK%X%MO=@G+C50`_PnmQ84=!#^ANgIQ&0b zbokHBe+n*5@M9GYqZmp}Gh%12#WzY#r!w5#BH@Z4LA&k|M>j#~bu8WAeL~83_3Ec3 z?l&PFj~4(#6rS!N2=DhI0IwE!=~JNO75^gf2_z0NgD;1{z0DYH6t?mBpYpo$?qvZD z%tXaQsg=&4@%sO5xAjc$mNK40!25bk?fs6}S6^JIAOh0oLy z)RcGQ0ls%hQLv1Ua|E3bR|v_MSrnK}Wk!3D#Fqdqj{g+i=a#{cI<*Apyqft=oLra% zvnjW08q>f}!7WY7{WJH)l>5>;cf`L7;AkU|A|FmAQ9<5+={h8e<4gOhq`_a$$pnJ@ z1wf7>)Ba6pT&j$J|I1{s0f0}=c=1d@x%Y=#)1PGCAZhTnYxgZPXpRtEy{Zma<=#IG zd)B;OtGtn%H09{yBqiScQ*O@x-g`M&;Bo34c@?~}$Q~8H^vDRmI<0Wsi(I^FtX{7k zc1OSgaA_@iJq>O&FO>MowYBy^=|@g_xKNc`yt%7?7p9)80Uln$mfPMfZ}2mY7e2wq zdU0@3^zWnlEA_PLs-T0suG!ogNkxAkcpI7sqzoq6l`6QR7;G@XROZE$A^_dHzlDHE z+Eh&1EJ^4#REA!D4N>3!7?`FyI{f}A>En=*VexoE##>cG%AMtKi;M@wXAdmE#s8D1*MsG936+r+36 zFXvH&14rie7r>D(5^ONuLXydMR0t>f(9}`D3JvNRmg;yC`Mo zkR`>8743jb5k=lopuus?%El(+TTJEs8uCmbIbnrF3bQyk^BChk7bY1;W~4=WmbU_) zR&%I3&k@g-`9DHR(2O$vh!sC;$tQ1fO``G;g9lFCwa9_& zfQ&Ldnx(-XZ|(yxd=%7a-$R@`W}OYBNg=03vJZ(H#Sed-seb2-^r<=m3bP!dMC5z| z;c+Z&!@vm^bo+2Vl5$V`tL7rw-#Uz@4J#IADv_KIUWt=fm{F7 z)^DfO$u{bwrd0p!H(pKLA6$u_r|HB$)&I6z5cZ!=gxck$>d*s|E|waR5)w(lgWfq6 zihJoZDpZ4?AyJkl-BhhaQq?MJfr=3a@)oKX;SpP;Vl04IQpH#Rv4o1T0AeI$$ddwy zHL2JVmB*h!td$VOtLhOR*5Qzc1@wFiB^qRqmd994wEuyS{DRQ%aXgpwP1&)=MNZ4G z267))M25*~@TseiDqTyG)`BF}r9z=I?sHBB0zj?K7tfz$Se|+ihTeKiDIhd-WqCsl zF}*FIN@wO$M8Z8wFt2-(GuQuZjF0f)RMZ^cH38pNf$FTmp#77>MaC4CCi+S{CW{gJ z0`n6C))_N6G39(8XpsiSGrem#RdtzCsSwGh+%<94D^Qcgoxe`SX$lj_$h$4oGH(&8 z)h-+^p18@9{sIjl`6wq=0M|6Ai>Jh=Kj`tvd8R@O907^o0~}|3%l~&udR<%zq_JAB zv7SWnJ5m}BKX^+VE^zsT@tfACrKQwY-k(3lWKbXEPo#at#cVd^Jpx*~eC<65ykpX) z==!FGCmIVip(=*9kApgV=yTnxU-~_4Uvk*K{Fy%Bs_Tq#pB?xsHPS2(7Gkk*@`e8Z zX$B`UAnc;`UegDsO`0B(nAiS`LL`QU>vqL4poicS630LyK9?eK)Q~u#9raAWXNx!> zg$T4ndoeU~P?F}!!Vx8bCpp=(04vUS%6Gj3@%Gl?#4!wpS(#BeXPkgJM>b`HoK%xc zIOKd&9jOO8Cm{=0rq5x6d#LrBhn;T*PJ?d*AY2w{5^=2EjNKPU8q2U7!X&l`iT_^M z3c;E7-57gG7#v+MIJVK}AP@Y)C&!IMQL<;ht!nU7bL$yWYN?6MtyO6p0^kg@$!anw zj#~36Rc)~KJ-An4LuZLlvkzWl5>VK~+T_gx72~O@wei%_F`yeN;9(vsHH0s@B#9wZ zGla-6n^mkCLDXEuWYq4>hZ37|=L2RMiNrTs5SD3!2Qoz05A|Q~R8r<6_J4}GvXQ`m zlb*vghpO~Ag)_7YEz@M{MSqp4=U9Xn;PU*o#10NZdT!!J&N+-i_(J}_@ zzAg=C%pga%1qp0CB;5vl7k&S;0l8JA7UnLTPL)BevqK1M#NeF<{(o{Ja(UG%SQb& z!vH{5LHCv)@L3~9g5q-ovEGW2B-x5xB!A8NWH!`T=lp9?s@%Z+L!e1LS4}c-v2{4a zkEp=~->1Jo3DhB=EEpFXD)=rFEEqIcMok;*kpTTc3#HtbQ@73rc!{d;x*_lFB=0#WsB*zQBnnQuAFY@2ccHulmHeaOP3KXtd=zSgFp~yhENVd_KwXW{{ZCO zQNNf3s)|Za1i^Z&K-lK;ATs*(Ovn?w>`Zu`n}T0>Cj3SKeH-ev?1%>18D#2d@+$x# z?m%=!riue_Glz_bCep$(WT@pd*wZe0%|ox7V%*{3XC*Fqss^_TIvg2vr&YO@j!1;x*}{9C`O_bPa0A6JN|uhw6KBOy4d zfJ3Pn{umyBEiSp(L=%axj`o^T`@Z7&1jgRYTO?wN$*cxlpa9^AW3Kjfyr9`Wu!q`mtOM!fqE zEl=J_@BV)f@$NsgTzU6D8S(B9SnXLq?A?E8x$^FRBI4bDh+b_It^?2dqohwANi(Fq z`@^&Tl^|OL95!0Zm3RN+c9!pa2dT=t|A3wCVCuV2fUwHD{}DU8i+K4&G*iWgu5-xF zZe;2YQ9xj&ZCN|Z8!82M3saSM{~kN*5HClc#<0m1hrD**e_;lS1Ugg)sxilPX$SvP z%n!r^@~y&Jd`Fb3ynhFis1dy(Zv7_z%@V`t)2RxWolrR zl?LwA_`I%Xe0CKL6>}s_Z}<`@a)}M!MB$^z#H>(TLoURZgj^hkq|Ck~B=W$8XL!pI zhI6-{o|64n;Y2^>NjOCZ|J?bRMJIa`BIF4~)L7sW`n3NcOrYorC@rS27p7?bVFvzQ z(W$@c7J#r_dCqp)1y(lJYU8@DEAO|EBCRk(o5#2+78Ue?G4wg{>p!WL=gcU@QAmF- zBhQ!qBjov$V0-F0wv3mNhu?w2`b)?|*ehhuoa#@*zM*c6fqCBk`pjPwjk*zyvo=G! z`=7wz<8@7C{vf&Y@IdRJnZqYz?zilwpR9wb*XVXE6o4=v0AM%0q_R_s_?zCE zjIV+7VJ6RSy~zHM`%;>D3R-dnMY8|0YmaV z7{jWg)J;0tD9n0XpBf^^c%@FUoxEg0HTNWPDVVNhKU~h(MDW5gmXX`r&@$n98mC2r z2MqIZ0cp>q&-(^NjR>o`+=3{zKhDDbI33bQHmBTMB$`{p@ri1Xoq3UAU5=vbzxqp|L8b&3MBF2i0CPmd3G|=}? z!1Fy19RG3Z*0DzWbHj~2`BH#KCLZY{xwhyWy3j!~|<$lWT+W|N^nMSPvZa))J zo}{DlLGWl$-@w5+L1on|KCDE#h~Y*57F1Y9z4{V>%rXP|`Zsf#`6OxZB+O+-`~DY8 zpH{_02kN^Qz;6F0eB0S)z%AjBC&}9P|J{=JnUXx^`@e;GeTOio^nBFo@>)Pg)_(|S zTG-vSNz9a!I-KH)lxwWzl+=$0z!yH-i%~S_PX_M)uVDpzPR1x0W(OjY;7i5oCxHp# zz{fZ4>Gr5uiaTjEfO}mhDbe_XpHih@;bhIW9PXES_ETsJm%l)(U}j+rYn432N>r-% znTlcd6$vkQ2!f{8hnkAR4nPeLQjg=n2NkOEoI?zG57*9n(R~o6vEF4@9-3D0Fv0NlowqBJ)3 zV}E(73c~?HR0(2=QQ3%6D7X4P*Il&{GxxKZZ9jGSNS@q6=%dQNzZPdD@(dpL1vMc3 zZ-6Vhh;r|*c8ZbvXJL3x!>2NGR|=;n_y>?A&i!ZT+`mkD!%uTRi+o+VabaNeC0`2H z8Rn30Zes$B%4-%a)W7jCt1c`~fD0EEa}HiuOq1D##qX7Gnq)65<|MGJb^TZV7(b00 zE-ZcpzuL$DUxQ-hzsEyUuTpk~g9F<=Bo%payd7u7Wp?^Q5e^dH*z5b=} zWr^`RRgQkvcyX)9-!kc&n9j2Uc#SVrzm+ot6dx+z6%JH5P~kv@0~HQbI8fn0g##51 zR5(!KK!pPp4*W}SVE)y$+W)`8eo4Ro#)Us!9GCI?zi_@f79ivS7{2=xp;Y7de@Pj? z|Mg}3{x|%q_4_|SzyH&)x|H$zKYUA&9QOM^K)?Szw<0g_yIjui{|UPMALLiQ5nsdf z`#;DV7RvAc=J7cvVhQ^8?}?2oxBmlG@b`a$ZvRh++y8+%!*KgQT{Rx>nUhGg)F)d` z%uBQkD!2dBaQhEKOA`40IsEByd_c!(Jd*NPF}HX&!0^>7&i783zxf&!KcM5a*Q$7*jt}ej z=XKoJsZJVrZJ&Bp$Bn&e%)o2A)nDm&;(7#d(Rj%E6MW(b*BkgSp49PbgoQpGXP6(J zCBTbMyE2~FadW0XqF&{ja|Jqd+?*{?OPeIFkLdFCI&RJw=+SXLR44Ueobobf4I~>> zJfrh_bllVN7K~k9;d2KV{~et_%#Ool&L5c8adQSiLfa}w4L%(=XAunOI3IX;`#kU~ zDd-|+5-{Z-kk7LS>UIB{vk5x%_%Y`b4B#<)Ug0we7&qq>@$i`j zjEB!PU_5-b0psEG4H)PAqJ5a%e=|Ppc6P1q&dM1F?UgeQ#8tm|`LCRDz=MSTU!HOB Fe*m7Wf!zQA literal 0 HcmV?d00001 diff --git a/server/www/packages/packages-darwin/x64/PIL/.dylibs/libwebpmux.1.dylib b/server/www/packages/packages-darwin/x64/PIL/.dylibs/libwebpmux.1.dylib new file mode 100644 index 0000000000000000000000000000000000000000..d34898fe01d5e0a7b2d2a16a6a05af0133ccd2d3 GIT binary patch literal 91420 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

    uhzs@?}KM#`xW?g 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 mode, rawmode + 1: ("P", "P;1"), + 4: ("P", "P;4"), + 8: ("P", "P"), + 16: ("RGB", "BGR;15"), + 24: ("RGB", "BGR"), + 32: ("RGB", "BGRX"), +} + + +def _accept(prefix): + return prefix[:2] == b"BM" + + +# ============================================================================== +# Image plugin for the Windows BMP format. +# ============================================================================== +class BmpImageFile(ImageFile.ImageFile): + """ Image plugin for the Windows Bitmap format (BMP) """ + + # -------------------------------------------------------------- Description + format_description = "Windows Bitmap" + format = "BMP" + # --------------------------------------------------- BMP Compression values + COMPRESSIONS = {'RAW': 0, 'RLE8': 1, 'RLE4': 2, 'BITFIELDS': 3, 'JPEG': 4, 'PNG': 5} + RAW, RLE8, RLE4, BITFIELDS, JPEG, PNG = 0, 1, 2, 3, 4, 5 + + def _bitmap(self, header=0, offset=0): + """ Read relevant info about the BMP """ + read, seek = self.fp.read, self.fp.seek + if header: + seek(header) + file_info = dict() + file_info['header_size'] = i32(read(4)) # read bmp header size @offset 14 (this is part of the header size) + file_info['direction'] = -1 + # --------------------- If requested, read header at a specific position + header_data = ImageFile._safe_read(self.fp, file_info['header_size'] - 4) # read the rest of the bmp header, without its size + # --------------------------------------------------- IBM OS/2 Bitmap v1 + # ------ This format has different offsets because of width/height types + if file_info['header_size'] == 12: + file_info['width'] = i16(header_data[0:2]) + file_info['height'] = i16(header_data[2:4]) + file_info['planes'] = i16(header_data[4:6]) + file_info['bits'] = i16(header_data[6:8]) + file_info['compression'] = self.RAW + file_info['palette_padding'] = 3 + # ---------------------------------------------- Windows Bitmap v2 to v5 + elif file_info['header_size'] in (40, 64, 108, 124): # v3, OS/2 v2, v4, v5 + if file_info['header_size'] >= 40: # v3 and OS/2 + file_info['y_flip'] = i8(header_data[7]) == 0xff + file_info['direction'] = 1 if file_info['y_flip'] else -1 + file_info['width'] = i32(header_data[0:4]) + file_info['height'] = i32(header_data[4:8]) if not file_info['y_flip'] else 2**32 - i32(header_data[4:8]) + file_info['planes'] = i16(header_data[8:10]) + file_info['bits'] = i16(header_data[10:12]) + file_info['compression'] = i32(header_data[12:16]) + file_info['data_size'] = i32(header_data[16:20]) # byte size of pixel data + file_info['pixels_per_meter'] = (i32(header_data[20:24]), i32(header_data[24:28])) + file_info['colors'] = i32(header_data[28:32]) + file_info['palette_padding'] = 4 + self.info["dpi"] = tuple( + map(lambda x: int(math.ceil(x / 39.3701)), + file_info['pixels_per_meter'])) + if file_info['compression'] == self.BITFIELDS: + if len(header_data) >= 52: + for idx, mask in enumerate(['r_mask', 'g_mask', 'b_mask', 'a_mask']): + file_info[mask] = i32(header_data[36+idx*4:40+idx*4]) + else: + for mask in ['r_mask', 'g_mask', 'b_mask', 'a_mask']: + file_info[mask] = i32(read(4)) + file_info['rgb_mask'] = (file_info['r_mask'], file_info['g_mask'], file_info['b_mask']) + file_info['rgba_mask'] = (file_info['r_mask'], file_info['g_mask'], file_info['b_mask'], file_info['a_mask']) + else: + raise IOError("Unsupported BMP header type (%d)" % file_info['header_size']) + # ------------------ Special case : header is reported 40, which + # ---------------------- is shorter than real size for bpp >= 16 + self.size = file_info['width'], file_info['height'] + # -------- If color count was not found in the header, compute from bits + file_info['colors'] = file_info['colors'] if file_info.get('colors', 0) else (1 << file_info['bits']) + # -------------------------------- Check abnormal values for DOS attacks + if file_info['width'] * file_info['height'] > 2**31: + raise IOError("Unsupported BMP Size: (%dx%d)" % self.size) + # ----------------------- Check bit depth for unusual unsupported values + self.mode, raw_mode = BIT2MODE.get(file_info['bits'], (None, None)) + if self.mode is None: + raise IOError("Unsupported BMP pixel depth (%d)" % file_info['bits']) + # ----------------- Process BMP with Bitfields compression (not palette) + if file_info['compression'] == self.BITFIELDS: + SUPPORTED = { + 32: [(0xff0000, 0xff00, 0xff, 0x0), (0xff0000, 0xff00, 0xff, 0xff000000), (0x0, 0x0, 0x0, 0x0)], + 24: [(0xff0000, 0xff00, 0xff)], + 16: [(0xf800, 0x7e0, 0x1f), (0x7c00, 0x3e0, 0x1f)] + } + MASK_MODES = { + (32, (0xff0000, 0xff00, 0xff, 0x0)): "BGRX", + (32, (0xff0000, 0xff00, 0xff, 0xff000000)): "BGRA", + (32, (0x0, 0x0, 0x0, 0x0)): "BGRA", + (24, (0xff0000, 0xff00, 0xff)): "BGR", + (16, (0xf800, 0x7e0, 0x1f)): "BGR;16", + (16, (0x7c00, 0x3e0, 0x1f)): "BGR;15" + } + if file_info['bits'] in SUPPORTED: + if file_info['bits'] == 32 and file_info['rgba_mask'] in SUPPORTED[file_info['bits']]: + raw_mode = MASK_MODES[(file_info['bits'], file_info['rgba_mask'])] + self.mode = "RGBA" if raw_mode in ("BGRA",) else self.mode + elif file_info['bits'] in (24, 16) and file_info['rgb_mask'] in SUPPORTED[file_info['bits']]: + raw_mode = MASK_MODES[(file_info['bits'], file_info['rgb_mask'])] + else: + raise IOError("Unsupported BMP bitfields layout") + else: + raise IOError("Unsupported BMP bitfields layout") + elif file_info['compression'] == self.RAW: + if file_info['bits'] == 32 and header == 22: # 32-bit .cur offset + raw_mode, self.mode = "BGRA", "RGBA" + else: + raise IOError("Unsupported BMP compression (%d)" % file_info['compression']) + # ---------------- Once the header is processed, process the palette/LUT + if self.mode == "P": # Paletted for 1, 4 and 8 bit images + # ----------------------------------------------------- 1-bit images + if not (0 < file_info['colors'] <= 65536): + raise IOError("Unsupported BMP Palette size (%d)" % file_info['colors']) + else: + padding = file_info['palette_padding'] + palette = read(padding * file_info['colors']) + greyscale = True + indices = (0, 255) if file_info['colors'] == 2 else list(range(file_info['colors'])) + # ------------------ Check if greyscale and ignore palette if so + for ind, val in enumerate(indices): + rgb = palette[ind*padding:ind*padding + 3] + if rgb != o8(val) * 3: + greyscale = False + # -------- If all colors are grey, white or black, ditch palette + if greyscale: + self.mode = "1" if file_info['colors'] == 2 else "L" + raw_mode = self.mode + else: + self.mode = "P" + self.palette = ImagePalette.raw("BGRX" if padding == 4 else "BGR", palette) + + # ----------------------------- Finally set the tile data for the plugin + self.info['compression'] = file_info['compression'] + self.tile = [('raw', (0, 0, file_info['width'], file_info['height']), offset or self.fp.tell(), + (raw_mode, ((file_info['width'] * file_info['bits'] + 31) >> 3) & (~3), file_info['direction']) + )] + + def _open(self): + """ Open file, check magic number and read header """ + # read 14 bytes: magic number, filesize, reserved, header final offset + head_data = self.fp.read(14) + # choke if the file does not have the required magic bytes + if head_data[0:2] != b"BM": + raise SyntaxError("Not a BMP file") + # read the start position of the BMP image data (u32) + offset = i32(head_data[10:14]) + # load bitmap information (offset=raster info) + self._bitmap(offset=offset) + + +# ============================================================================== +# Image plugin for the DIB format (BMP alias) +# ============================================================================== +class DibImageFile(BmpImageFile): + + format = "DIB" + format_description = "Windows Bitmap" + + def _open(self): + self._bitmap() + +# +# -------------------------------------------------------------------- +# Write BMP file + +SAVE = { + "1": ("1", 1, 2), + "L": ("L", 8, 256), + "P": ("P", 8, 256), + "RGB": ("BGR", 24, 0), + "RGBA": ("BGRA", 32, 0), +} + + +def _save(im, fp, filename, check=0): + try: + rawmode, bits, colors = SAVE[im.mode] + except KeyError: + raise IOError("cannot write mode %s as BMP" % im.mode) + + if check: + return check + + info = im.encoderinfo + + dpi = info.get("dpi", (96, 96)) + + # 1 meter == 39.3701 inches + ppm = tuple(map(lambda x: int(x * 39.3701), dpi)) + + stride = ((im.size[0]*bits+7)//8+3) & (~3) + header = 40 # or 64 for OS/2 version 2 + offset = 14 + header + colors * 4 + image = stride * im.size[1] + + # bitmap header + fp.write(b"BM" + # file type (magic) + o32(offset+image) + # file size + o32(0) + # reserved + o32(offset)) # image data offset + + # bitmap info header + fp.write(o32(header) + # info header size + o32(im.size[0]) + # width + o32(im.size[1]) + # height + o16(1) + # planes + o16(bits) + # depth + o32(0) + # compression (0=uncompressed) + o32(image) + # size of bitmap + o32(ppm[0]) + o32(ppm[1]) + # resolution + o32(colors) + # colors used + o32(colors)) # colors important + + fp.write(b"\0" * (header - 40)) # padding (for OS/2 format) + + if im.mode == "1": + for i in (0, 255): + fp.write(o8(i) * 4) + elif im.mode == "L": + for i in range(256): + fp.write(o8(i) * 4) + elif im.mode == "P": + fp.write(im.im.getpalette("RGB", "BGRX")) + + ImageFile._save(im, fp, [("raw", (0, 0)+im.size, 0, + (rawmode, stride, -1))]) + +# +# -------------------------------------------------------------------- +# Registry + +Image.register_open(BmpImageFile.format, BmpImageFile, _accept) +Image.register_save(BmpImageFile.format, _save) + +Image.register_extension(BmpImageFile.format, ".bmp") + +Image.register_mime(BmpImageFile.format, "image/bmp") diff --git a/server/www/packages/packages-darwin/x64/PIL/BufrStubImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/BufrStubImagePlugin.py new file mode 100644 index 0000000..45ee547 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/BufrStubImagePlugin.py @@ -0,0 +1,72 @@ +# +# The Python Imaging Library +# $Id$ +# +# BUFR stub adapter +# +# Copyright (c) 1996-2003 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image, ImageFile + +_handler = None + + +## +# Install application-specific BUFR image handler. +# +# @param handler Handler object. + +def register_handler(handler): + global _handler + _handler = handler + + +# -------------------------------------------------------------------- +# Image adapter + +def _accept(prefix): + return prefix[:4] == b"BUFR" or prefix[:4] == b"ZCZC" + + +class BufrStubImageFile(ImageFile.StubImageFile): + + format = "BUFR" + format_description = "BUFR" + + def _open(self): + + offset = self.fp.tell() + + if not _accept(self.fp.read(8)): + raise SyntaxError("Not a BUFR file") + + self.fp.seek(offset) + + # make something up + self.mode = "F" + self.size = 1, 1 + + loader = self._load() + if loader: + loader.open(self) + + def _load(self): + return _handler + + +def _save(im, fp, filename): + if _handler is None or not hasattr("_handler", "save"): + raise IOError("BUFR save handler not installed") + _handler.save(im, fp, filename) + + +# -------------------------------------------------------------------- +# Registry + +Image.register_open(BufrStubImageFile.format, BufrStubImageFile, _accept) +Image.register_save(BufrStubImageFile.format, _save) + +Image.register_extension(BufrStubImageFile.format, ".bufr") diff --git a/server/www/packages/packages-darwin/x64/PIL/ContainerIO.py b/server/www/packages/packages-darwin/x64/PIL/ContainerIO.py new file mode 100644 index 0000000..262f2af --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ContainerIO.py @@ -0,0 +1,117 @@ +# +# The Python Imaging Library. +# $Id$ +# +# a class to read from a container file +# +# History: +# 1995-06-18 fl Created +# 1995-09-07 fl Added readline(), readlines() +# +# Copyright (c) 1997-2001 by Secret Labs AB +# Copyright (c) 1995 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +## +# A file object that provides read access to a part of an existing +# file (for example a TAR file). + + +class ContainerIO(object): + + ## + # Create file object. + # + # @param file Existing file. + # @param offset Start of region, in bytes. + # @param length Size of region, in bytes. + + def __init__(self, file, offset, length): + self.fh = file + self.pos = 0 + self.offset = offset + self.length = length + self.fh.seek(offset) + + ## + # Always false. + + def isatty(self): + return 0 + + ## + # Move file pointer. + # + # @param offset Offset in bytes. + # @param mode Starting position. Use 0 for beginning of region, 1 + # for current offset, and 2 for end of region. You cannot move + # the pointer outside the defined region. + + def seek(self, offset, mode=0): + if mode == 1: + self.pos = self.pos + offset + elif mode == 2: + self.pos = self.length + offset + else: + self.pos = offset + # clamp + self.pos = max(0, min(self.pos, self.length)) + self.fh.seek(self.offset + self.pos) + + ## + # Get current file pointer. + # + # @return Offset from start of region, in bytes. + + def tell(self): + return self.pos + + ## + # Read data. + # + # @def read(bytes=0) + # @param bytes Number of bytes to read. If omitted or zero, + # read until end of region. + # @return An 8-bit string. + + def read(self, n=0): + if n: + n = min(n, self.length - self.pos) + else: + n = self.length - self.pos + if not n: # EOF + return "" + self.pos = self.pos + n + return self.fh.read(n) + + ## + # Read a line of text. + # + # @return An 8-bit string. + + def readline(self): + s = "" + while True: + c = self.read(1) + if not c: + break + s = s + c + if c == "\n": + break + return s + + ## + # Read multiple lines of text. + # + # @return A list of 8-bit strings. + + def readlines(self): + l = [] + while True: + s = self.readline() + if not s: + break + l.append(s) + return l diff --git a/server/www/packages/packages-darwin/x64/PIL/CurImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/CurImagePlugin.py new file mode 100644 index 0000000..4db4c40 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/CurImagePlugin.py @@ -0,0 +1,88 @@ +# +# The Python Imaging Library. +# $Id$ +# +# Windows Cursor support for PIL +# +# notes: +# uses BmpImagePlugin.py to read the bitmap data. +# +# history: +# 96-05-27 fl Created +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# + + +from PIL import Image, BmpImagePlugin, _binary + +__version__ = "0.1" + +# +# -------------------------------------------------------------------- + +i8 = _binary.i8 +i16 = _binary.i16le +i32 = _binary.i32le + + +def _accept(prefix): + return prefix[:4] == b"\0\0\2\0" + + +## +# Image plugin for Windows Cursor files. + +class CurImageFile(BmpImagePlugin.BmpImageFile): + + format = "CUR" + format_description = "Windows Cursor" + + def _open(self): + + offset = self.fp.tell() + + # check magic + s = self.fp.read(6) + if not _accept(s): + raise SyntaxError("not a CUR file") + + # pick the largest cursor in the file + m = b"" + for i in range(i16(s[4:])): + s = self.fp.read(16) + if not m: + m = s + elif i8(s[0]) > i8(m[0]) and i8(s[1]) > i8(m[1]): + m = s + # print "width", i8(s[0]) + # print "height", i8(s[1]) + # print "colors", i8(s[2]) + # print "reserved", i8(s[3]) + # print "hotspot x", i16(s[4:]) + # print "hotspot y", i16(s[6:]) + # print "bytes", i32(s[8:]) + # print "offset", i32(s[12:]) + if not m: + raise TypeError("No cursors were found") + + # load as bitmap + self._bitmap(i32(m[12:]) + offset) + + # patch up the bitmap height + self.size = self.size[0], self.size[1]//2 + d, e, o, a = self.tile[0] + self.tile[0] = d, (0, 0)+self.size, o, a + + return + + +# +# -------------------------------------------------------------------- + +Image.register_open(CurImageFile.format, CurImageFile, _accept) + +Image.register_extension(CurImageFile.format, ".cur") diff --git a/server/www/packages/packages-darwin/x64/PIL/DcxImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/DcxImagePlugin.py new file mode 100644 index 0000000..f9034d1 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/DcxImagePlugin.py @@ -0,0 +1,86 @@ +# +# The Python Imaging Library. +# $Id$ +# +# DCX file handling +# +# DCX is a container file format defined by Intel, commonly used +# for fax applications. Each DCX file consists of a directory +# (a list of file offsets) followed by a set of (usually 1-bit) +# PCX files. +# +# History: +# 1995-09-09 fl Created +# 1996-03-20 fl Properly derived from PcxImageFile. +# 1998-07-15 fl Renamed offset attribute to avoid name clash +# 2002-07-30 fl Fixed file handling +# +# Copyright (c) 1997-98 by Secret Labs AB. +# Copyright (c) 1995-96 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image, _binary +from PIL.PcxImagePlugin import PcxImageFile + +__version__ = "0.2" + +MAGIC = 0x3ADE68B1 # QUIZ: what's this value, then? + +i32 = _binary.i32le + + +def _accept(prefix): + return len(prefix) >= 4 and i32(prefix) == MAGIC + + +## +# Image plugin for the Intel DCX format. + +class DcxImageFile(PcxImageFile): + + format = "DCX" + format_description = "Intel DCX" + + def _open(self): + + # Header + s = self.fp.read(4) + if i32(s) != MAGIC: + raise SyntaxError("not a DCX file") + + # Component directory + self._offset = [] + for i in range(1024): + offset = i32(self.fp.read(4)) + if not offset: + break + self._offset.append(offset) + + self.__fp = self.fp + self.seek(0) + + @property + def n_frames(self): + return len(self._offset) + + @property + def is_animated(self): + return len(self._offset) > 1 + + def seek(self, frame): + if frame >= len(self._offset): + raise EOFError("attempt to seek outside DCX directory") + self.frame = frame + self.fp = self.__fp + self.fp.seek(self._offset[frame]) + PcxImageFile._open(self) + + def tell(self): + return self.frame + + +Image.register_open(DcxImageFile.format, DcxImageFile, _accept) + +Image.register_extension(DcxImageFile.format, ".dcx") diff --git a/server/www/packages/packages-darwin/x64/PIL/EpsImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/EpsImagePlugin.py new file mode 100644 index 0000000..a950c52 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/EpsImagePlugin.py @@ -0,0 +1,428 @@ +# +# The Python Imaging Library. +# $Id$ +# +# EPS file handling +# +# History: +# 1995-09-01 fl Created (0.1) +# 1996-05-18 fl Don't choke on "atend" fields, Ghostscript interface (0.2) +# 1996-08-22 fl Don't choke on floating point BoundingBox values +# 1996-08-23 fl Handle files from Macintosh (0.3) +# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.4) +# 2003-09-07 fl Check gs.close status (from Federico Di Gregorio) (0.5) +# 2014-05-07 e Handling of EPS with binary preview and fixed resolution +# resizing +# +# Copyright (c) 1997-2003 by Secret Labs AB. +# Copyright (c) 1995-2003 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +import re +import io +import sys +from PIL import Image, ImageFile, _binary + +__version__ = "0.5" + +# +# -------------------------------------------------------------------- + +i32 = _binary.i32le +o32 = _binary.o32le + +split = re.compile(r"^%%([^:]*):[ \t]*(.*)[ \t]*$") +field = re.compile(r"^%[%!\w]([^:]*)[ \t]*$") + +gs_windows_binary = None +if sys.platform.startswith('win'): + import shutil + if hasattr(shutil, 'which'): + which = shutil.which + else: + # Python < 3.3 + import distutils.spawn + which = distutils.spawn.find_executable + for binary in ('gswin32c', 'gswin64c', 'gs'): + if which(binary) is not None: + gs_windows_binary = binary + break + else: + gs_windows_binary = False + + +def has_ghostscript(): + if gs_windows_binary: + return True + if not sys.platform.startswith('win'): + import subprocess + try: + gs = subprocess.Popen(['gs', '--version'], stdout=subprocess.PIPE) + gs.stdout.read() + return True + except OSError: + # no ghostscript + pass + return False + + +def Ghostscript(tile, size, fp, scale=1): + """Render an image using Ghostscript""" + + # Unpack decoder tile + decoder, tile, offset, data = tile[0] + length, bbox = data + + # Hack to support hi-res rendering + scale = int(scale) or 1 + # orig_size = size + # orig_bbox = bbox + size = (size[0] * scale, size[1] * scale) + # resolution is dependent on bbox and size + res = (float((72.0 * size[0]) / (bbox[2]-bbox[0])), + float((72.0 * size[1]) / (bbox[3]-bbox[1]))) + # print("Ghostscript", scale, size, orig_size, bbox, orig_bbox, res) + + import os + import subprocess + import tempfile + + out_fd, outfile = tempfile.mkstemp() + os.close(out_fd) + + infile_temp = None + if hasattr(fp, 'name') and os.path.exists(fp.name): + infile = fp.name + else: + in_fd, infile_temp = tempfile.mkstemp() + os.close(in_fd) + infile = infile_temp + + # ignore length and offset! + # ghostscript can read it + # copy whole file to read in ghostscript + with open(infile_temp, 'wb') as f: + # fetch length of fp + fp.seek(0, 2) + fsize = fp.tell() + # ensure start position + # go back + fp.seek(0) + lengthfile = fsize + while lengthfile > 0: + s = fp.read(min(lengthfile, 100*1024)) + if not s: + break + lengthfile -= len(s) + f.write(s) + + # Build ghostscript command + command = ["gs", + "-q", # quiet mode + "-g%dx%d" % size, # set output geometry (pixels) + "-r%fx%f" % res, # set input DPI (dots per inch) + "-dNOPAUSE", # don't pause between pages, + "-dSAFER", # safe mode + "-sDEVICE=ppmraw", # ppm driver + "-sOutputFile=%s" % outfile, # output file + "-c", "%d %d translate" % (-bbox[0], -bbox[1]), + # adjust for image origin + "-f", infile, # input file + ] + + if gs_windows_binary is not None: + if not gs_windows_binary: + raise WindowsError('Unable to locate Ghostscript on paths') + command[0] = gs_windows_binary + + # push data through ghostscript + try: + gs = subprocess.Popen(command, stdin=subprocess.PIPE, + stdout=subprocess.PIPE) + gs.stdin.close() + status = gs.wait() + if status: + raise IOError("gs failed (status %d)" % status) + im = Image.core.open_ppm(outfile) + finally: + try: + os.unlink(outfile) + if infile_temp: + os.unlink(infile_temp) + except OSError: + pass + + return im + + +class PSFile(object): + """ + Wrapper for bytesio object that treats either CR or LF as end of line. + """ + def __init__(self, fp): + self.fp = fp + self.char = None + + def seek(self, offset, whence=0): + self.char = None + self.fp.seek(offset, whence) + + def readline(self): + s = self.char or b"" + self.char = None + + c = self.fp.read(1) + while c not in b"\r\n": + s = s + c + c = self.fp.read(1) + + self.char = self.fp.read(1) + # line endings can be 1 or 2 of \r \n, in either order + if self.char in b"\r\n": + self.char = None + + return s.decode('latin-1') + + +def _accept(prefix): + return prefix[:4] == b"%!PS" or \ + (len(prefix) >= 4 and i32(prefix) == 0xC6D3D0C5) + +## +# Image plugin for Encapsulated Postscript. This plugin supports only +# a few variants of this format. + + +class EpsImageFile(ImageFile.ImageFile): + """EPS File Parser for the Python Imaging Library""" + + format = "EPS" + format_description = "Encapsulated Postscript" + + mode_map = {1: "L", 2: "LAB", 3: "RGB"} + + def _open(self): + (length, offset) = self._find_offset(self.fp) + + # Rewrap the open file pointer in something that will + # convert line endings and decode to latin-1. + try: + if bytes is str: + # Python2, no encoding conversion necessary + fp = open(self.fp.name, "Ur") + else: + # Python3, can use bare open command. + fp = open(self.fp.name, "Ur", encoding='latin-1') + except: + # Expect this for bytesio/stringio + fp = PSFile(self.fp) + + # go to offset - start of "%!PS" + fp.seek(offset) + + box = None + + self.mode = "RGB" + self.size = 1, 1 # FIXME: huh? + + # + # Load EPS header + + s = fp.readline().strip('\r\n') + + while s: + if len(s) > 255: + raise SyntaxError("not an EPS file") + + try: + m = split.match(s) + except re.error as v: + raise SyntaxError("not an EPS file") + + if m: + k, v = m.group(1, 2) + self.info[k] = v + if k == "BoundingBox": + try: + # Note: The DSC spec says that BoundingBox + # fields should be integers, but some drivers + # put floating point values there anyway. + box = [int(float(i)) for i in v.split()] + self.size = box[2] - box[0], box[3] - box[1] + self.tile = [("eps", (0, 0) + self.size, offset, + (length, box))] + except: + pass + + else: + m = field.match(s) + if m: + k = m.group(1) + + if k == "EndComments": + break + if k[:8] == "PS-Adobe": + self.info[k[:8]] = k[9:] + else: + self.info[k] = "" + elif s[0] == '%': + # handle non-DSC Postscript comments that some + # tools mistakenly put in the Comments section + pass + else: + raise IOError("bad EPS header") + + s = fp.readline().strip('\r\n') + + if s[:1] != "%": + break + + # + # Scan for an "ImageData" descriptor + + while s[:1] == "%": + + if len(s) > 255: + raise SyntaxError("not an EPS file") + + if s[:11] == "%ImageData:": + # Encoded bitmapped image. + x, y, bi, mo = s[11:].split(None, 7)[:4] + + if int(bi) != 8: + break + try: + self.mode = self.mode_map[int(mo)] + except ValueError: + break + + self.size = int(x), int(y) + return + + s = fp.readline().strip('\r\n') + if not s: + break + + if not box: + raise IOError("cannot determine EPS bounding box") + + def _find_offset(self, fp): + + s = fp.read(160) + + if s[:4] == b"%!PS": + # for HEAD without binary preview + fp.seek(0, 2) + length = fp.tell() + offset = 0 + elif i32(s[0:4]) == 0xC6D3D0C5: + # FIX for: Some EPS file not handled correctly / issue #302 + # EPS can contain binary data + # or start directly with latin coding + # more info see: + # http://partners.adobe.com/public/developer/en/ps/5002.EPSF_Spec.pdf + offset = i32(s[4:8]) + length = i32(s[8:12]) + else: + raise SyntaxError("not an EPS file") + + return (length, offset) + + def load(self, scale=1): + # Load EPS via Ghostscript + if not self.tile: + return + self.im = Ghostscript(self.tile, self.size, self.fp, scale) + self.mode = self.im.mode + self.size = self.im.size + self.tile = [] + + def load_seek(self, *args, **kwargs): + # we can't incrementally load, so force ImageFile.parser to + # use our custom load method by defining this method. + pass + + +# +# -------------------------------------------------------------------- + +def _save(im, fp, filename, eps=1): + """EPS Writer for the Python Imaging Library.""" + + # + # make sure image data is available + im.load() + + # + # determine postscript image mode + if im.mode == "L": + operator = (8, 1, "image") + elif im.mode == "RGB": + operator = (8, 3, "false 3 colorimage") + elif im.mode == "CMYK": + operator = (8, 4, "false 4 colorimage") + else: + raise ValueError("image mode is not supported") + + class NoCloseStream(object): + def __init__(self, fp): + self.fp = fp + + def __getattr__(self, name): + return getattr(self.fp, name) + + def close(self): + pass + + base_fp = fp + if fp != sys.stdout: + fp = NoCloseStream(fp) + if sys.version_info[0] > 2: + fp = io.TextIOWrapper(fp, encoding='latin-1') + + if eps: + # + # write EPS header + fp.write("%!PS-Adobe-3.0 EPSF-3.0\n") + fp.write("%%Creator: PIL 0.1 EpsEncode\n") + # fp.write("%%CreationDate: %s"...) + fp.write("%%%%BoundingBox: 0 0 %d %d\n" % im.size) + fp.write("%%Pages: 1\n") + fp.write("%%EndComments\n") + fp.write("%%Page: 1 1\n") + fp.write("%%ImageData: %d %d " % im.size) + fp.write("%d %d 0 1 1 \"%s\"\n" % operator) + + # + # image header + fp.write("gsave\n") + fp.write("10 dict begin\n") + fp.write("/buf %d string def\n" % (im.size[0] * operator[1])) + fp.write("%d %d scale\n" % im.size) + fp.write("%d %d 8\n" % im.size) # <= bits + fp.write("[%d 0 0 -%d 0 %d]\n" % (im.size[0], im.size[1], im.size[1])) + fp.write("{ currentfile buf readhexstring pop } bind\n") + fp.write(operator[2] + "\n") + if hasattr(fp, "flush"): + fp.flush() + + ImageFile._save(im, base_fp, [("eps", (0, 0)+im.size, 0, None)]) + + fp.write("\n%%%%EndBinary\n") + fp.write("grestore end\n") + if hasattr(fp, "flush"): + fp.flush() + +# +# -------------------------------------------------------------------- + +Image.register_open(EpsImageFile.format, EpsImageFile, _accept) + +Image.register_save(EpsImageFile.format, _save) + +Image.register_extension(EpsImageFile.format, ".ps") +Image.register_extension(EpsImageFile.format, ".eps") + +Image.register_mime(EpsImageFile.format, "application/postscript") diff --git a/server/www/packages/packages-darwin/x64/PIL/ExifTags.py b/server/www/packages/packages-darwin/x64/PIL/ExifTags.py new file mode 100644 index 0000000..52e145f --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ExifTags.py @@ -0,0 +1,193 @@ +# +# The Python Imaging Library. +# $Id$ +# +# EXIF tags +# +# Copyright (c) 2003 by Secret Labs AB +# +# See the README file for information on usage and redistribution. +# + +## +# This module provides constants and clear-text names for various +# well-known EXIF tags. +## + +## +# Maps EXIF tags to tag names. + +TAGS = { + + # possibly incomplete + 0x00fe: "NewSubfileType", + 0x00ff: "SubfileType", + 0x0100: "ImageWidth", + 0x0101: "ImageLength", + 0x0102: "BitsPerSample", + 0x0103: "Compression", + 0x0106: "PhotometricInterpretation", + 0x0107: "Threshholding", + 0x0108: "CellWidth", + 0x0109: "CellLenght", + 0x010a: "FillOrder", + 0x010d: "DocumentName", + 0x011d: "PageName", + 0x010e: "ImageDescription", + 0x010f: "Make", + 0x0110: "Model", + 0x0111: "StripOffsets", + 0x0112: "Orientation", + 0x0115: "SamplesPerPixel", + 0x0116: "RowsPerStrip", + 0x0117: "StripByteConunts", + 0x0118: "MinSampleValue", + 0x0119: "MaxSampleValue", + 0x011a: "XResolution", + 0x011b: "YResolution", + 0x011c: "PlanarConfiguration", + 0x0120: "FreeOffsets", + 0x0121: "FreeByteCounts", + 0x0122: "GrayResponseUnit", + 0x0123: "GrayResponseCurve", + 0x0128: "ResolutionUnit", + 0x012d: "TransferFunction", + 0x0131: "Software", + 0x0132: "DateTime", + 0x013b: "Artist", + 0x013c: "HostComputer", + 0x013e: "WhitePoint", + 0x013f: "PrimaryChromaticities", + 0x0140: "ColorMap", + 0x0152: "ExtraSamples", + 0x0201: "JpegIFOffset", + 0x0202: "JpegIFByteCount", + 0x0211: "YCbCrCoefficients", + 0x0212: "YCbCrSubSampling", + 0x0213: "YCbCrPositioning", + 0x0214: "ReferenceBlackWhite", + 0x1000: "RelatedImageFileFormat", + 0x1001: "RelatedImageWidth", + 0x1002: "RelatedImageLength", + 0x828d: "CFARepeatPatternDim", + 0x828e: "CFAPattern", + 0x828f: "BatteryLevel", + 0x8298: "Copyright", + 0x829a: "ExposureTime", + 0x829d: "FNumber", + 0x8769: "ExifOffset", + 0x8773: "InterColorProfile", + 0x8822: "ExposureProgram", + 0x8824: "SpectralSensitivity", + 0x8825: "GPSInfo", + 0x8827: "ISOSpeedRatings", + 0x8828: "OECF", + 0x8829: "Interlace", + 0x882a: "TimeZoneOffset", + 0x882b: "SelfTimerMode", + 0x9000: "ExifVersion", + 0x9003: "DateTimeOriginal", + 0x9004: "DateTimeDigitized", + 0x9101: "ComponentsConfiguration", + 0x9102: "CompressedBitsPerPixel", + 0x9201: "ShutterSpeedValue", + 0x9202: "ApertureValue", + 0x9203: "BrightnessValue", + 0x9204: "ExposureBiasValue", + 0x9205: "MaxApertureValue", + 0x9206: "SubjectDistance", + 0x9207: "MeteringMode", + 0x9208: "LightSource", + 0x9209: "Flash", + 0x920a: "FocalLength", + 0x920b: "FlashEnergy", + 0x920c: "SpatialFrequencyResponse", + 0x920d: "Noise", + 0x9211: "ImageNumber", + 0x9212: "SecurityClassification", + 0x9213: "ImageHistory", + 0x9214: "SubjectLocation", + 0x9215: "ExposureIndex", + 0x9216: "TIFF/EPStandardID", + 0x927c: "MakerNote", + 0x9286: "UserComment", + 0x9290: "SubsecTime", + 0x9291: "SubsecTimeOriginal", + 0x9292: "SubsecTimeDigitized", + 0xa000: "FlashPixVersion", + 0xa001: "ColorSpace", + 0xa002: "ExifImageWidth", + 0xa003: "ExifImageHeight", + 0xa004: "RelatedSoundFile", + 0xa005: "ExifInteroperabilityOffset", + 0xa20b: "FlashEnergy", + 0xa20c: "SpatialFrequencyResponse", + 0xa20e: "FocalPlaneXResolution", + 0xa20f: "FocalPlaneYResolution", + 0xa210: "FocalPlaneResolutionUnit", + 0xa214: "SubjectLocation", + 0xa215: "ExposureIndex", + 0xa217: "SensingMethod", + 0xa300: "FileSource", + 0xa301: "SceneType", + 0xa302: "CFAPattern", + 0xa401: "CustomRendered", + 0xa402: "ExposureMode", + 0xa403: "WhiteBalance", + 0xa404: "DigitalZoomRatio", + 0xa405: "FocalLengthIn35mmFilm", + 0xa406: "SceneCaptureType", + 0xa407: "GainControl", + 0xa408: "Contrast", + 0xa409: "Saturation", + 0xa40a: "Sharpness", + 0xa40b: "DeviceSettingDescription", + 0xa40c: "SubjectDistanceRange", + 0xa420: "ImageUniqueID", + 0xa430: "CameraOwnerName", + 0xa431: "BodySerialNumber", + 0xa432: "LensSpecification", + 0xa433: "LensMake", + 0xa434: "LensModel", + 0xa435: "LensSerialNumber", + 0xa500: "Gamma", + +} + +## +# Maps EXIF GPS tags to tag names. + +GPSTAGS = { + 0: "GPSVersionID", + 1: "GPSLatitudeRef", + 2: "GPSLatitude", + 3: "GPSLongitudeRef", + 4: "GPSLongitude", + 5: "GPSAltitudeRef", + 6: "GPSAltitude", + 7: "GPSTimeStamp", + 8: "GPSSatellites", + 9: "GPSStatus", + 10: "GPSMeasureMode", + 11: "GPSDOP", + 12: "GPSSpeedRef", + 13: "GPSSpeed", + 14: "GPSTrackRef", + 15: "GPSTrack", + 16: "GPSImgDirectionRef", + 17: "GPSImgDirection", + 18: "GPSMapDatum", + 19: "GPSDestLatitudeRef", + 20: "GPSDestLatitude", + 21: "GPSDestLongitudeRef", + 22: "GPSDestLongitude", + 23: "GPSDestBearingRef", + 24: "GPSDestBearing", + 25: "GPSDestDistanceRef", + 26: "GPSDestDistance", + 27: "GPSProcessingMethod", + 28: "GPSAreaInformation", + 29: "GPSDateStamp", + 30: "GPSDifferential", + 31: "GPSHPositioningError", +} diff --git a/server/www/packages/packages-darwin/x64/PIL/FitsStubImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/FitsStubImagePlugin.py new file mode 100644 index 0000000..7aefff2 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/FitsStubImagePlugin.py @@ -0,0 +1,76 @@ +# +# The Python Imaging Library +# $Id$ +# +# FITS stub adapter +# +# Copyright (c) 1998-2003 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image, ImageFile + +_handler = None + +## +# Install application-specific FITS image handler. +# +# @param handler Handler object. + + +def register_handler(handler): + global _handler + _handler = handler + +# -------------------------------------------------------------------- +# Image adapter + + +def _accept(prefix): + return prefix[:6] == b"SIMPLE" + + +class FITSStubImageFile(ImageFile.StubImageFile): + + format = "FITS" + format_description = "FITS" + + def _open(self): + + offset = self.fp.tell() + + if not _accept(self.fp.read(6)): + raise SyntaxError("Not a FITS file") + + # FIXME: add more sanity checks here; mandatory header items + # include SIMPLE, BITPIX, NAXIS, etc. + + self.fp.seek(offset) + + # make something up + self.mode = "F" + self.size = 1, 1 + + loader = self._load() + if loader: + loader.open(self) + + def _load(self): + return _handler + + +def _save(im, fp, filename): + if _handler is None or not hasattr("_handler", "save"): + raise IOError("FITS save handler not installed") + _handler.save(im, fp, filename) + + +# -------------------------------------------------------------------- +# Registry + +Image.register_open(FITSStubImageFile.format, FITSStubImageFile, _accept) +Image.register_save(FITSStubImageFile.format, _save) + +Image.register_extension(FITSStubImageFile.format, ".fit") +Image.register_extension(FITSStubImageFile.format, ".fits") diff --git a/server/www/packages/packages-darwin/x64/PIL/FliImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/FliImagePlugin.py new file mode 100644 index 0000000..a07dc29 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/FliImagePlugin.py @@ -0,0 +1,188 @@ +# +# The Python Imaging Library. +# $Id$ +# +# FLI/FLC file handling. +# +# History: +# 95-09-01 fl Created +# 97-01-03 fl Fixed parser, setup decoder tile +# 98-07-15 fl Renamed offset attribute to avoid name clash +# +# Copyright (c) Secret Labs AB 1997-98. +# Copyright (c) Fredrik Lundh 1995-97. +# +# See the README file for information on usage and redistribution. +# + + +from PIL import Image, ImageFile, ImagePalette, _binary + +__version__ = "0.2" + +i8 = _binary.i8 +i16 = _binary.i16le +i32 = _binary.i32le +o8 = _binary.o8 + + +# +# decoder + +def _accept(prefix): + return len(prefix) >= 6 and i16(prefix[4:6]) in [0xAF11, 0xAF12] + + +## +# Image plugin for the FLI/FLC animation format. Use the seek +# method to load individual frames. + +class FliImageFile(ImageFile.ImageFile): + + format = "FLI" + format_description = "Autodesk FLI/FLC Animation" + + def _open(self): + + # HEAD + s = self.fp.read(128) + magic = i16(s[4:6]) + if not (magic in [0xAF11, 0xAF12] and + i16(s[14:16]) in [0, 3] and # flags + s[20:22] == b"\x00\x00"): # reserved + raise SyntaxError("not an FLI/FLC file") + + # image characteristics + self.mode = "P" + self.size = i16(s[8:10]), i16(s[10:12]) + + # animation speed + duration = i32(s[16:20]) + if magic == 0xAF11: + duration = (duration * 1000) / 70 + self.info["duration"] = duration + + # look for palette + palette = [(a, a, a) for a in range(256)] + + s = self.fp.read(16) + + self.__offset = 128 + + if i16(s[4:6]) == 0xF100: + # prefix chunk; ignore it + self.__offset = self.__offset + i32(s) + s = self.fp.read(16) + + if i16(s[4:6]) == 0xF1FA: + # look for palette chunk + s = self.fp.read(6) + if i16(s[4:6]) == 11: + self._palette(palette, 2) + elif i16(s[4:6]) == 4: + self._palette(palette, 0) + + palette = [o8(r)+o8(g)+o8(b) for (r, g, b) in palette] + self.palette = ImagePalette.raw("RGB", b"".join(palette)) + + # set things up to decode first frame + self.__frame = -1 + self.__fp = self.fp + self.__rewind = self.fp.tell() + self._n_frames = None + self._is_animated = None + self.seek(0) + + def _palette(self, palette, shift): + # load palette + + i = 0 + for e in range(i16(self.fp.read(2))): + s = self.fp.read(2) + i = i + i8(s[0]) + n = i8(s[1]) + if n == 0: + n = 256 + s = self.fp.read(n * 3) + for n in range(0, len(s), 3): + r = i8(s[n]) << shift + g = i8(s[n+1]) << shift + b = i8(s[n+2]) << shift + palette[i] = (r, g, b) + i += 1 + + @property + def n_frames(self): + if self._n_frames is None: + current = self.tell() + try: + while True: + self.seek(self.tell() + 1) + except EOFError: + self._n_frames = self.tell() + 1 + self.seek(current) + return self._n_frames + + @property + def is_animated(self): + if self._is_animated is None: + current = self.tell() + + try: + self.seek(1) + self._is_animated = True + except EOFError: + self._is_animated = False + + self.seek(current) + return self._is_animated + + def seek(self, frame): + if frame == self.__frame: + return + if frame < self.__frame: + self._seek(0) + + last_frame = self.__frame + for f in range(self.__frame + 1, frame + 1): + try: + self._seek(f) + except EOFError: + self.seek(last_frame) + raise EOFError("no more images in FLI file") + + def _seek(self, frame): + if frame == 0: + self.__frame = -1 + self.__fp.seek(self.__rewind) + self.__offset = 128 + + if frame != self.__frame + 1: + raise ValueError("cannot seek to frame %d" % frame) + self.__frame = frame + + # move to next frame + self.fp = self.__fp + self.fp.seek(self.__offset) + + s = self.fp.read(4) + if not s: + raise EOFError + + framesize = i32(s) + + self.decodermaxblock = framesize + self.tile = [("fli", (0, 0)+self.size, self.__offset, None)] + + self.__offset += framesize + + def tell(self): + return self.__frame + +# +# registry + +Image.register_open(FliImageFile.format, FliImageFile, _accept) + +Image.register_extension(FliImageFile.format, ".fli") +Image.register_extension(FliImageFile.format, ".flc") diff --git a/server/www/packages/packages-darwin/x64/PIL/FontFile.py b/server/www/packages/packages-darwin/x64/PIL/FontFile.py new file mode 100644 index 0000000..db8e6be --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/FontFile.py @@ -0,0 +1,115 @@ +# +# The Python Imaging Library +# $Id$ +# +# base class for raster font file parsers +# +# history: +# 1997-06-05 fl created +# 1997-08-19 fl restrict image width +# +# Copyright (c) 1997-1998 by Secret Labs AB +# Copyright (c) 1997-1998 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +import os +from PIL import Image, _binary + +WIDTH = 800 + + +def puti16(fp, values): + # write network order (big-endian) 16-bit sequence + for v in values: + if v < 0: + v += 65536 + fp.write(_binary.o16be(v)) + + +## +# Base class for raster font file handlers. + +class FontFile(object): + + bitmap = None + + def __init__(self): + + self.info = {} + self.glyph = [None] * 256 + + def __getitem__(self, ix): + return self.glyph[ix] + + def compile(self): + "Create metrics and bitmap" + + if self.bitmap: + return + + # create bitmap large enough to hold all data + h = w = maxwidth = 0 + lines = 1 + for glyph in self: + if glyph: + d, dst, src, im = glyph + h = max(h, src[3] - src[1]) + w = w + (src[2] - src[0]) + if w > WIDTH: + lines += 1 + w = (src[2] - src[0]) + maxwidth = max(maxwidth, w) + + xsize = maxwidth + ysize = lines * h + + if xsize == 0 and ysize == 0: + return "" + + self.ysize = h + + # paste glyphs into bitmap + self.bitmap = Image.new("1", (xsize, ysize)) + self.metrics = [None] * 256 + x = y = 0 + for i in range(256): + glyph = self[i] + if glyph: + d, dst, src, im = glyph + xx = src[2] - src[0] + # yy = src[3] - src[1] + x0, y0 = x, y + x = x + xx + if x > WIDTH: + x, y = 0, y + h + x0, y0 = x, y + x = xx + s = src[0] + x0, src[1] + y0, src[2] + x0, src[3] + y0 + self.bitmap.paste(im.crop(src), s) + # print chr(i), dst, s + self.metrics[i] = d, dst, s + + def save(self, filename): + "Save font" + + self.compile() + + # font data + self.bitmap.save(os.path.splitext(filename)[0] + ".pbm", "PNG") + + # font metrics + fp = open(os.path.splitext(filename)[0] + ".pil", "wb") + fp.write(b"PILfont\n") + fp.write((";;;;;;%d;\n" % self.ysize).encode('ascii')) # HACK!!! + fp.write(b"DATA\n") + for id in range(256): + m = self.metrics[id] + if not m: + puti16(fp, [0] * 10) + else: + puti16(fp, m[0] + m[1] + m[2]) + fp.close() + +# End of file diff --git a/server/www/packages/packages-darwin/x64/PIL/FpxImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/FpxImagePlugin.py new file mode 100644 index 0000000..aefc574 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/FpxImagePlugin.py @@ -0,0 +1,226 @@ +# +# THIS IS WORK IN PROGRESS +# +# The Python Imaging Library. +# $Id$ +# +# FlashPix support for PIL +# +# History: +# 97-01-25 fl Created (reads uncompressed RGB images only) +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1997. +# +# See the README file for information on usage and redistribution. +# + + +from PIL import Image, ImageFile +from PIL.OleFileIO import i8, i32, MAGIC, OleFileIO + +__version__ = "0.1" + + +# we map from colour field tuples to (mode, rawmode) descriptors +MODES = { + # opacity + (0x00007ffe): ("A", "L"), + # monochrome + (0x00010000,): ("L", "L"), + (0x00018000, 0x00017ffe): ("RGBA", "LA"), + # photo YCC + (0x00020000, 0x00020001, 0x00020002): ("RGB", "YCC;P"), + (0x00028000, 0x00028001, 0x00028002, 0x00027ffe): ("RGBA", "YCCA;P"), + # standard RGB (NIFRGB) + (0x00030000, 0x00030001, 0x00030002): ("RGB", "RGB"), + (0x00038000, 0x00038001, 0x00038002, 0x00037ffe): ("RGBA", "RGBA"), +} + + +# +# -------------------------------------------------------------------- + +def _accept(prefix): + return prefix[:8] == MAGIC + + +## +# Image plugin for the FlashPix images. + +class FpxImageFile(ImageFile.ImageFile): + + format = "FPX" + format_description = "FlashPix" + + def _open(self): + # + # read the OLE directory and see if this is a likely + # to be a FlashPix file + + try: + self.ole = OleFileIO(self.fp) + except IOError: + raise SyntaxError("not an FPX file; invalid OLE file") + + if self.ole.root.clsid != "56616700-C154-11CE-8553-00AA00A1F95B": + raise SyntaxError("not an FPX file; bad root CLSID") + + self._open_index(1) + + def _open_index(self, index=1): + # + # get the Image Contents Property Set + + prop = self.ole.getproperties([ + "Data Object Store %06d" % index, + "\005Image Contents" + ]) + + # size (highest resolution) + + self.size = prop[0x1000002], prop[0x1000003] + + size = max(self.size) + i = 1 + while size > 64: + size = size / 2 + i += 1 + self.maxid = i - 1 + + # mode. instead of using a single field for this, flashpix + # requires you to specify the mode for each channel in each + # resolution subimage, and leaves it to the decoder to make + # sure that they all match. for now, we'll cheat and assume + # that this is always the case. + + id = self.maxid << 16 + + s = prop[0x2000002 | id] + + colors = [] + for i in range(i32(s, 4)): + # note: for now, we ignore the "uncalibrated" flag + colors.append(i32(s, 8+i*4) & 0x7fffffff) + + self.mode, self.rawmode = MODES[tuple(colors)] + + # load JPEG tables, if any + self.jpeg = {} + for i in range(256): + id = 0x3000001 | (i << 16) + if id in prop: + self.jpeg[i] = prop[id] + + # print len(self.jpeg), "tables loaded" + + self._open_subimage(1, self.maxid) + + def _open_subimage(self, index=1, subimage=0): + # + # setup tile descriptors for a given subimage + + stream = [ + "Data Object Store %06d" % index, + "Resolution %04d" % subimage, + "Subimage 0000 Header" + ] + + fp = self.ole.openstream(stream) + + # skip prefix + fp.read(28) + + # header stream + s = fp.read(36) + + size = i32(s, 4), i32(s, 8) + # tilecount = i32(s, 12) + tilesize = i32(s, 16), i32(s, 20) + # channels = i32(s, 24) + offset = i32(s, 28) + length = i32(s, 32) + + # print size, self.mode, self.rawmode + + if size != self.size: + raise IOError("subimage mismatch") + + # get tile descriptors + fp.seek(28 + offset) + s = fp.read(i32(s, 12) * length) + + x = y = 0 + xsize, ysize = size + xtile, ytile = tilesize + self.tile = [] + + for i in range(0, len(s), length): + + compression = i32(s, i+8) + + if compression == 0: + self.tile.append(("raw", (x, y, x+xtile, y+ytile), + i32(s, i) + 28, (self.rawmode))) + + elif compression == 1: + + # FIXME: the fill decoder is not implemented + self.tile.append(("fill", (x, y, x+xtile, y+ytile), + i32(s, i) + 28, (self.rawmode, s[12:16]))) + + elif compression == 2: + + internal_color_conversion = i8(s[14]) + jpeg_tables = i8(s[15]) + rawmode = self.rawmode + + if internal_color_conversion: + # The image is stored as usual (usually YCbCr). + if rawmode == "RGBA": + # For "RGBA", data is stored as YCbCrA based on + # negative RGB. The following trick works around + # this problem : + jpegmode, rawmode = "YCbCrK", "CMYK" + else: + jpegmode = None # let the decoder decide + + else: + # The image is stored as defined by rawmode + jpegmode = rawmode + + self.tile.append(("jpeg", (x, y, x+xtile, y+ytile), + i32(s, i) + 28, (rawmode, jpegmode))) + + # FIXME: jpeg tables are tile dependent; the prefix + # data must be placed in the tile descriptor itself! + + if jpeg_tables: + self.tile_prefix = self.jpeg[jpeg_tables] + + else: + raise IOError("unknown/invalid compression") + + x = x + xtile + if x >= xsize: + x, y = 0, y + ytile + if y >= ysize: + break # isn't really required + + self.stream = stream + self.fp = None + + def load(self): + + if not self.fp: + self.fp = self.ole.openstream(self.stream[:2] + + ["Subimage 0000 Data"]) + + ImageFile.ImageFile.load(self) + +# +# -------------------------------------------------------------------- + +Image.register_open(FpxImageFile.format, FpxImageFile, _accept) + +Image.register_extension(FpxImageFile.format, ".fpx") diff --git a/server/www/packages/packages-darwin/x64/PIL/GbrImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/GbrImagePlugin.py new file mode 100644 index 0000000..15282ec --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/GbrImagePlugin.py @@ -0,0 +1,71 @@ +# +# The Python Imaging Library +# $Id$ +# +# load a GIMP brush file +# +# History: +# 96-03-14 fl Created +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image, ImageFile, _binary + +i32 = _binary.i32be + + +def _accept(prefix): + return len(prefix) >= 8 and i32(prefix) >= 20 and i32(prefix[4:8]) == 1 + + +## +# Image plugin for the GIMP brush format. + +class GbrImageFile(ImageFile.ImageFile): + + format = "GBR" + format_description = "GIMP brush file" + + def _open(self): + + header_size = i32(self.fp.read(4)) + version = i32(self.fp.read(4)) + if header_size < 20 or version != 1: + raise SyntaxError("not a GIMP brush") + + width = i32(self.fp.read(4)) + height = i32(self.fp.read(4)) + color_depth = i32(self.fp.read(4)) + if width <= 0 or height <= 0 or color_depth != 1: + raise SyntaxError("not a GIMP brush") + + comment = self.fp.read(header_size - 20)[:-1] + + self.mode = "L" + self.size = width, height + + self.info["comment"] = comment + + # Since the brush is so small, we read the data immediately + self.data = self.fp.read(width * height) + + def load(self): + + if not self.data: + return + + # create an image out of the brush data block + self.im = Image.core.new(self.mode, self.size) + self.im.frombytes(self.data) + self.data = b"" + +# +# registry + +Image.register_open(GbrImageFile.format, GbrImageFile, _accept) + +Image.register_extension(GbrImageFile.format, ".gbr") diff --git a/server/www/packages/packages-darwin/x64/PIL/GdImageFile.py b/server/www/packages/packages-darwin/x64/PIL/GdImageFile.py new file mode 100644 index 0000000..ae3500f --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/GdImageFile.py @@ -0,0 +1,92 @@ +# +# The Python Imaging Library. +# $Id$ +# +# GD file handling +# +# History: +# 1996-04-12 fl Created +# +# Copyright (c) 1997 by Secret Labs AB. +# Copyright (c) 1996 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + + +# NOTE: This format cannot be automatically recognized, so the +# class is not registered for use with Image.open(). To open a +# gd file, use the GdImageFile.open() function instead. + +# THE GD FORMAT IS NOT DESIGNED FOR DATA INTERCHANGE. This +# implementation is provided for convenience and demonstrational +# purposes only. + + +from PIL import ImageFile, ImagePalette, _binary +from PIL._util import isPath + +__version__ = "0.1" + +try: + import builtins +except ImportError: + import __builtin__ + builtins = __builtin__ + +i16 = _binary.i16be + + +## +# Image plugin for the GD uncompressed format. Note that this format +# is not supported by the standard Image.open function. To use +# this plugin, you have to import the GdImageFile module and +# use the GdImageFile.open function. + +class GdImageFile(ImageFile.ImageFile): + + format = "GD" + format_description = "GD uncompressed images" + + def _open(self): + + # Header + s = self.fp.read(775) + + self.mode = "L" # FIXME: "P" + self.size = i16(s[0:2]), i16(s[2:4]) + + # transparency index + tindex = i16(s[5:7]) + if tindex < 256: + self.info["transparent"] = tindex + + self.palette = ImagePalette.raw("RGB", s[7:]) + + self.tile = [("raw", (0, 0)+self.size, 775, ("L", 0, -1))] + + +## +# Load texture from a GD image file. +# +# @param filename GD file name, or an opened file handle. +# @param mode Optional mode. In this version, if the mode argument +# is given, it must be "r". +# @return An image instance. +# @exception IOError If the image could not be read. + +def open(fp, mode="r"): + + if mode != "r": + raise ValueError("bad mode") + + if isPath(fp): + filename = fp + fp = builtins.open(fp, "rb") + else: + filename = "" + + try: + return GdImageFile(fp, filename) + except SyntaxError: + raise IOError("cannot identify this image file") diff --git a/server/www/packages/packages-darwin/x64/PIL/GifImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/GifImagePlugin.py new file mode 100644 index 0000000..b9d2588 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/GifImagePlugin.py @@ -0,0 +1,685 @@ +# +# The Python Imaging Library. +# $Id$ +# +# GIF file handling +# +# History: +# 1995-09-01 fl Created +# 1996-12-14 fl Added interlace support +# 1996-12-30 fl Added animation support +# 1997-01-05 fl Added write support, fixed local colour map bug +# 1997-02-23 fl Make sure to load raster data in getdata() +# 1997-07-05 fl Support external decoder (0.4) +# 1998-07-09 fl Handle all modes when saving (0.5) +# 1998-07-15 fl Renamed offset attribute to avoid name clash +# 2001-04-16 fl Added rewind support (seek to frame 0) (0.6) +# 2001-04-17 fl Added palette optimization (0.7) +# 2002-06-06 fl Added transparency support for save (0.8) +# 2004-02-24 fl Disable interlacing for small images +# +# Copyright (c) 1997-2004 by Secret Labs AB +# Copyright (c) 1995-2004 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image, ImageFile, ImagePalette, \ + ImageChops, ImageSequence, _binary + +__version__ = "0.9" + + +# -------------------------------------------------------------------- +# Helpers + +i8 = _binary.i8 +i16 = _binary.i16le +o8 = _binary.o8 +o16 = _binary.o16le + + +# -------------------------------------------------------------------- +# Identify/read GIF files + +def _accept(prefix): + return prefix[:6] in [b"GIF87a", b"GIF89a"] + + +## +# Image plugin for GIF images. This plugin supports both GIF87 and +# GIF89 images. + +class GifImageFile(ImageFile.ImageFile): + + format = "GIF" + format_description = "Compuserve GIF" + global_palette = None + + def data(self): + s = self.fp.read(1) + if s and i8(s): + return self.fp.read(i8(s)) + return None + + def _open(self): + + # Screen + s = self.fp.read(13) + if s[:6] not in [b"GIF87a", b"GIF89a"]: + raise SyntaxError("not a GIF file") + + self.info["version"] = s[:6] + self.size = i16(s[6:]), i16(s[8:]) + self.tile = [] + flags = i8(s[10]) + bits = (flags & 7) + 1 + + if flags & 128: + # get global palette + self.info["background"] = i8(s[11]) + # check if palette contains colour indices + p = self.fp.read(3 << bits) + for i in range(0, len(p), 3): + if not (i//3 == i8(p[i]) == i8(p[i+1]) == i8(p[i+2])): + p = ImagePalette.raw("RGB", p) + self.global_palette = self.palette = p + break + + self.__fp = self.fp # FIXME: hack + self.__rewind = self.fp.tell() + self._n_frames = None + self._is_animated = None + self._seek(0) # get ready to read first frame + + @property + def n_frames(self): + if self._n_frames is None: + current = self.tell() + try: + while True: + self.seek(self.tell() + 1) + except EOFError: + self._n_frames = self.tell() + 1 + self.seek(current) + return self._n_frames + + @property + def is_animated(self): + if self._is_animated is None: + current = self.tell() + + try: + self.seek(1) + self._is_animated = True + except EOFError: + self._is_animated = False + + self.seek(current) + return self._is_animated + + def seek(self, frame): + if frame == self.__frame: + return + if frame < self.__frame: + self._seek(0) + + last_frame = self.__frame + for f in range(self.__frame + 1, frame + 1): + try: + self._seek(f) + except EOFError: + self.seek(last_frame) + raise EOFError("no more images in GIF file") + + def _seek(self, frame): + + if frame == 0: + # rewind + self.__offset = 0 + self.dispose = None + self.dispose_extent = [0, 0, 0, 0] # x0, y0, x1, y1 + self.__frame = -1 + self.__fp.seek(self.__rewind) + self._prev_im = None + self.disposal_method = 0 + else: + # ensure that the previous frame was loaded + if not self.im: + self.load() + + if frame != self.__frame + 1: + raise ValueError("cannot seek to frame %d" % frame) + self.__frame = frame + + self.tile = [] + + self.fp = self.__fp + if self.__offset: + # backup to last frame + self.fp.seek(self.__offset) + while self.data(): + pass + self.__offset = 0 + + if self.dispose: + self.im.paste(self.dispose, self.dispose_extent) + + from copy import copy + self.palette = copy(self.global_palette) + + while True: + + s = self.fp.read(1) + if not s or s == b";": + break + + elif s == b"!": + # + # extensions + # + s = self.fp.read(1) + block = self.data() + if i8(s) == 249: + # + # graphic control extension + # + flags = i8(block[0]) + if flags & 1: + self.info["transparency"] = i8(block[3]) + self.info["duration"] = i16(block[1:3]) * 10 + + # disposal method - find the value of bits 4 - 6 + dispose_bits = 0b00011100 & flags + dispose_bits = dispose_bits >> 2 + if dispose_bits: + # only set the dispose if it is not + # unspecified. I'm not sure if this is + # correct, but it seems to prevent the last + # frame from looking odd for some animations + self.disposal_method = dispose_bits + elif i8(s) == 255: + # + # application extension + # + self.info["extension"] = block, self.fp.tell() + if block[:11] == b"NETSCAPE2.0": + block = self.data() + if len(block) >= 3 and i8(block[0]) == 1: + self.info["loop"] = i16(block[1:3]) + while self.data(): + pass + + elif s == b",": + # + # local image + # + s = self.fp.read(9) + + # extent + x0, y0 = i16(s[0:]), i16(s[2:]) + x1, y1 = x0 + i16(s[4:]), y0 + i16(s[6:]) + self.dispose_extent = x0, y0, x1, y1 + flags = i8(s[8]) + + interlace = (flags & 64) != 0 + + if flags & 128: + bits = (flags & 7) + 1 + self.palette =\ + ImagePalette.raw("RGB", self.fp.read(3 << bits)) + + # image data + bits = i8(self.fp.read(1)) + self.__offset = self.fp.tell() + self.tile = [("gif", + (x0, y0, x1, y1), + self.__offset, + (bits, interlace))] + break + + else: + pass + # raise IOError, "illegal GIF tag `%x`" % i8(s) + + try: + if self.disposal_method < 2: + # do not dispose or none specified + self.dispose = None + elif self.disposal_method == 2: + # replace with background colour + self.dispose = Image.core.fill("P", self.size, + self.info["background"]) + else: + # replace with previous contents + if self.im: + self.dispose = self.im.copy() + + # only dispose the extent in this frame + if self.dispose: + self.dispose = self.dispose.crop(self.dispose_extent) + except (AttributeError, KeyError): + pass + + if not self.tile: + # self.__fp = None + raise EOFError + + self.mode = "L" + if self.palette: + self.mode = "P" + + def tell(self): + return self.__frame + + def load_end(self): + ImageFile.ImageFile.load_end(self) + + # if the disposal method is 'do not dispose', transparent + # pixels should show the content of the previous frame + if self._prev_im and self.disposal_method == 1: + # we do this by pasting the updated area onto the previous + # frame which we then use as the current image content + updated = self.im.crop(self.dispose_extent) + self._prev_im.paste(updated, self.dispose_extent, + updated.convert('RGBA')) + self.im = self._prev_im + self._prev_im = self.im.copy() + +# -------------------------------------------------------------------- +# Write GIF files + +try: + import _imaging_gif +except ImportError: + _imaging_gif = None + +RAWMODE = { + "1": "L", + "L": "L", + "P": "P", +} + + +def _convert_mode(im, initial_call=False): + # convert on the fly (EXPERIMENTAL -- I'm not sure PIL + # should automatically convert images on save...) + if Image.getmodebase(im.mode) == "RGB": + if initial_call: + palette_size = 256 + if im.palette: + palette_size = len(im.palette.getdata()[1]) // 3 + return im.convert("P", palette=1, colors=palette_size) + else: + return im.convert("P") + return im.convert("L") + + +def _save_all(im, fp, filename): + _save(im, fp, filename, save_all=True) + + +def _save(im, fp, filename, save_all=False): + + im.encoderinfo.update(im.info) + if _imaging_gif: + # call external driver + try: + _imaging_gif.save(im, fp, filename) + return + except IOError: + pass # write uncompressed file + + if im.mode in RAWMODE: + im_out = im.copy() + else: + im_out = _convert_mode(im, True) + + # header + try: + palette = im.encoderinfo["palette"] + except KeyError: + palette = None + im.encoderinfo["optimize"] = im.encoderinfo.get("optimize", True) + + if save_all: + previous = None + + first_frame = None + for im_frame in ImageSequence.Iterator(im): + im_frame = _convert_mode(im_frame) + + # To specify duration, add the time in milliseconds to getdata(), + # e.g. getdata(im_frame, duration=1000) + if not previous: + # global header + first_frame = getheader(im_frame, palette, im.encoderinfo)[0] + first_frame += getdata(im_frame, (0, 0), **im.encoderinfo) + else: + if first_frame: + for s in first_frame: + fp.write(s) + first_frame = None + + # delta frame + delta = ImageChops.subtract_modulo(im_frame, previous.copy()) + bbox = delta.getbbox() + + if bbox: + # compress difference + for s in getdata(im_frame.crop(bbox), + bbox[:2], **im.encoderinfo): + fp.write(s) + else: + # FIXME: what should we do in this case? + pass + previous = im_frame + if first_frame: + save_all = False + if not save_all: + header = getheader(im_out, palette, im.encoderinfo)[0] + for s in header: + fp.write(s) + + flags = 0 + + if get_interlace(im): + flags = flags | 64 + + # local image header + _get_local_header(fp, im, (0, 0), flags) + + im_out.encoderconfig = (8, get_interlace(im)) + ImageFile._save(im_out, fp, [("gif", (0, 0)+im.size, 0, + RAWMODE[im_out.mode])]) + + fp.write(b"\0") # end of image data + + fp.write(b";") # end of file + + if hasattr(fp, "flush"): + fp.flush() + + +def get_interlace(im): + try: + interlace = im.encoderinfo["interlace"] + except KeyError: + interlace = 1 + + # workaround for @PIL153 + if min(im.size) < 16: + interlace = 0 + + return interlace + + +def _get_local_header(fp, im, offset, flags): + transparent_color_exists = False + try: + transparency = im.encoderinfo["transparency"] + except KeyError: + pass + else: + transparency = int(transparency) + # optimize the block away if transparent color is not used + transparent_color_exists = True + + if _get_optimize(im, im.encoderinfo): + used_palette_colors = _get_used_palette_colors(im) + + # adjust the transparency index after optimize + if len(used_palette_colors) < 256: + for i in range(len(used_palette_colors)): + if used_palette_colors[i] == transparency: + transparency = i + transparent_color_exists = True + break + else: + transparent_color_exists = False + + if "duration" in im.encoderinfo: + duration = int(im.encoderinfo["duration"] / 10) + else: + duration = 0 + if transparent_color_exists or duration != 0: + transparency_flag = 1 if transparent_color_exists else 0 + if not transparent_color_exists: + transparency = 0 + + fp.write(b"!" + + o8(249) + # extension intro + o8(4) + # length + o8(transparency_flag) + # transparency info present + o16(duration) + # duration + o8(transparency) + # transparency index + o8(0)) + + if "loop" in im.encoderinfo: + number_of_loops = im.encoderinfo["loop"] + fp.write(b"!" + + o8(255) + # extension intro + o8(11) + + b"NETSCAPE2.0" + + o8(3) + + o8(1) + + o16(number_of_loops) + # number of loops + o8(0)) + fp.write(b"," + + o16(offset[0]) + # offset + o16(offset[1]) + + o16(im.size[0]) + # size + o16(im.size[1]) + + o8(flags) + # flags + o8(8)) # bits + + +def _save_netpbm(im, fp, filename): + + # + # If you need real GIF compression and/or RGB quantization, you + # can use the external NETPBM/PBMPLUS utilities. See comments + # below for information on how to enable this. + + import os + from subprocess import Popen, check_call, PIPE, CalledProcessError + import tempfile + file = im._dump() + + if im.mode != "RGB": + with open(filename, 'wb') as f: + stderr = tempfile.TemporaryFile() + check_call(["ppmtogif", file], stdout=f, stderr=stderr) + else: + with open(filename, 'wb') as f: + + # Pipe ppmquant output into ppmtogif + # "ppmquant 256 %s | ppmtogif > %s" % (file, filename) + quant_cmd = ["ppmquant", "256", file] + togif_cmd = ["ppmtogif"] + stderr = tempfile.TemporaryFile() + quant_proc = Popen(quant_cmd, stdout=PIPE, stderr=stderr) + stderr = tempfile.TemporaryFile() + togif_proc = Popen(togif_cmd, stdin=quant_proc.stdout, stdout=f, + stderr=stderr) + + # Allow ppmquant to receive SIGPIPE if ppmtogif exits + quant_proc.stdout.close() + + retcode = quant_proc.wait() + if retcode: + raise CalledProcessError(retcode, quant_cmd) + + retcode = togif_proc.wait() + if retcode: + raise CalledProcessError(retcode, togif_cmd) + + try: + os.unlink(file) + except OSError: + pass + + +# -------------------------------------------------------------------- +# GIF utilities + +def _get_optimize(im, info): + return im.mode in ("P", "L") and info and info.get("optimize", 0) + + +def _get_used_palette_colors(im): + used_palette_colors = [] + + # check which colors are used + i = 0 + for count in im.histogram(): + if count: + used_palette_colors.append(i) + i += 1 + + return used_palette_colors + + +def getheader(im, palette=None, info=None): + """Return a list of strings representing a GIF header""" + + # Header Block + # http://www.matthewflickinger.com/lab/whatsinagif/bits_and_bytes.asp + + version = b"87a" + for extensionKey in ["transparency", "duration", "loop"]: + if info and extensionKey in info and \ + not (extensionKey == "duration" and info[extensionKey] == 0): + version = b"89a" + break + else: + if im.info.get("version") == "89a": + version = b"89a" + + header = [ + b"GIF"+version + # signature + version + o16(im.size[0]) + # canvas width + o16(im.size[1]) # canvas height + ] + + if im.mode == "P": + if palette and isinstance(palette, bytes): + source_palette = palette[:768] + else: + source_palette = im.im.getpalette("RGB")[:768] + else: # L-mode + if palette and isinstance(palette, bytes): + source_palette = palette[:768] + else: + source_palette = bytearray([i//3 for i in range(768)]) + + used_palette_colors = palette_bytes = None + + if _get_optimize(im, info): + used_palette_colors = _get_used_palette_colors(im) + + # create the new palette if not every color is used + if len(used_palette_colors) < 256: + palette_bytes = b"" + new_positions = {} + + i = 0 + # pick only the used colors from the palette + for oldPosition in used_palette_colors: + palette_bytes += source_palette[oldPosition*3:oldPosition*3+3] + new_positions[oldPosition] = i + i += 1 + + # replace the palette color id of all pixel with the new id + image_bytes = bytearray(im.tobytes()) + for i in range(len(image_bytes)): + image_bytes[i] = new_positions[image_bytes[i]] + im.frombytes(bytes(image_bytes)) + new_palette_bytes = (palette_bytes + + (768 - len(palette_bytes)) * b'\x00') + im.putpalette(new_palette_bytes) + im.palette = ImagePalette.ImagePalette("RGB", + palette=palette_bytes, + size=len(palette_bytes)) + + if not palette_bytes: + palette_bytes = source_palette + + # Logical Screen Descriptor + # calculate the palette size for the header + import math + color_table_size = int(math.ceil(math.log(len(palette_bytes)//3, 2)))-1 + if color_table_size < 0: + color_table_size = 0 + # size of global color table + global color table flag + header.append(o8(color_table_size + 128)) + # background + reserved/aspect + if info and "background" in info: + background = info["background"] + elif "background" in im.info: + # This elif is redundant within GifImagePlugin + # since im.info parameters are bundled into the info dictionary + # However, external scripts may call getheader directly + # So this maintains earlier behaviour + background = im.info["background"] + else: + background = 0 + header.append(o8(background) + o8(0)) + # end of Logical Screen Descriptor + + # add the missing amount of bytes + # the palette has to be 2< 0: + palette_bytes += o8(0) * 3 * actual_target_size_diff + + # Header + Logical Screen Descriptor + Global Color Table + header.append(palette_bytes) + return header, used_palette_colors + + +def getdata(im, offset=(0, 0), **params): + """Return a list of strings representing this image. + The first string is a local image header, the rest contains + encoded image data.""" + + class Collector(object): + data = [] + + def write(self, data): + self.data.append(data) + + im.load() # make sure raster data is available + + fp = Collector() + + try: + im.encoderinfo = params + + # local image header + _get_local_header(fp, im, offset, 0) + + ImageFile._save(im, fp, [("gif", (0, 0)+im.size, 0, RAWMODE[im.mode])]) + + fp.write(b"\0") # end of image data + + finally: + del im.encoderinfo + + return fp.data + + +# -------------------------------------------------------------------- +# Registry + +Image.register_open(GifImageFile.format, GifImageFile, _accept) +Image.register_save(GifImageFile.format, _save) +Image.register_save_all(GifImageFile.format, _save_all) +Image.register_extension(GifImageFile.format, ".gif") +Image.register_mime(GifImageFile.format, "image/gif") + +# +# Uncomment the following line if you wish to use NETPBM/PBMPLUS +# instead of the built-in "uncompressed" GIF encoder + +# Image.register_save(GifImageFile.format, _save_netpbm) diff --git a/server/www/packages/packages-darwin/x64/PIL/GimpGradientFile.py b/server/www/packages/packages-darwin/x64/PIL/GimpGradientFile.py new file mode 100644 index 0000000..45af573 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/GimpGradientFile.py @@ -0,0 +1,137 @@ +# +# Python Imaging Library +# $Id$ +# +# stuff to read (and render) GIMP gradient files +# +# History: +# 97-08-23 fl Created +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1997. +# +# See the README file for information on usage and redistribution. +# + +from math import pi, log, sin, sqrt +from PIL._binary import o8 + +# -------------------------------------------------------------------- +# Stuff to translate curve segments to palette values (derived from +# the corresponding code in GIMP, written by Federico Mena Quintero. +# See the GIMP distribution for more information.) +# + +EPSILON = 1e-10 + + +def linear(middle, pos): + if pos <= middle: + if middle < EPSILON: + return 0.0 + else: + return 0.5 * pos / middle + else: + pos = pos - middle + middle = 1.0 - middle + if middle < EPSILON: + return 1.0 + else: + return 0.5 + 0.5 * pos / middle + + +def curved(middle, pos): + return pos ** (log(0.5) / log(max(middle, EPSILON))) + + +def sine(middle, pos): + return (sin((-pi / 2.0) + pi * linear(middle, pos)) + 1.0) / 2.0 + + +def sphere_increasing(middle, pos): + return sqrt(1.0 - (linear(middle, pos) - 1.0) ** 2) + + +def sphere_decreasing(middle, pos): + return 1.0 - sqrt(1.0 - linear(middle, pos) ** 2) + +SEGMENTS = [linear, curved, sine, sphere_increasing, sphere_decreasing] + + +class GradientFile(object): + + gradient = None + + def getpalette(self, entries=256): + + palette = [] + + ix = 0 + x0, x1, xm, rgb0, rgb1, segment = self.gradient[ix] + + for i in range(entries): + + x = i / float(entries-1) + + while x1 < x: + ix += 1 + x0, x1, xm, rgb0, rgb1, segment = self.gradient[ix] + + w = x1 - x0 + + if w < EPSILON: + scale = segment(0.5, 0.5) + else: + scale = segment((xm - x0) / w, (x - x0) / w) + + # expand to RGBA + r = o8(int(255 * ((rgb1[0] - rgb0[0]) * scale + rgb0[0]) + 0.5)) + g = o8(int(255 * ((rgb1[1] - rgb0[1]) * scale + rgb0[1]) + 0.5)) + b = o8(int(255 * ((rgb1[2] - rgb0[2]) * scale + rgb0[2]) + 0.5)) + a = o8(int(255 * ((rgb1[3] - rgb0[3]) * scale + rgb0[3]) + 0.5)) + + # add to palette + palette.append(r + g + b + a) + + return b"".join(palette), "RGBA" + + +## +# File handler for GIMP's gradient format. + +class GimpGradientFile(GradientFile): + + def __init__(self, fp): + + if fp.readline()[:13] != b"GIMP Gradient": + raise SyntaxError("not a GIMP gradient file") + + line = fp.readline() + + # GIMP 1.2 gradient files don't contain a name, but GIMP 1.3 files do + if line.startswith(b"Name: "): + line = fp.readline().strip() + + count = int(line) + + gradient = [] + + for i in range(count): + + s = fp.readline().split() + w = [float(x) for x in s[:11]] + + x0, x1 = w[0], w[2] + xm = w[1] + rgb0 = w[3:7] + rgb1 = w[7:11] + + segment = SEGMENTS[int(s[11])] + cspace = int(s[12]) + + if cspace != 0: + raise IOError("cannot handle HSV colour space") + + gradient.append((x0, x1, xm, rgb0, rgb1, segment)) + + self.gradient = gradient diff --git a/server/www/packages/packages-darwin/x64/PIL/GimpPaletteFile.py b/server/www/packages/packages-darwin/x64/PIL/GimpPaletteFile.py new file mode 100644 index 0000000..4bf3ca3 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/GimpPaletteFile.py @@ -0,0 +1,62 @@ +# +# Python Imaging Library +# $Id$ +# +# stuff to read GIMP palette files +# +# History: +# 1997-08-23 fl Created +# 2004-09-07 fl Support GIMP 2.0 palette files. +# +# Copyright (c) Secret Labs AB 1997-2004. All rights reserved. +# Copyright (c) Fredrik Lundh 1997-2004. +# +# See the README file for information on usage and redistribution. +# + +import re +from PIL._binary import o8 + + +## +# File handler for GIMP's palette format. + +class GimpPaletteFile(object): + + rawmode = "RGB" + + def __init__(self, fp): + + self.palette = [o8(i)*3 for i in range(256)] + + if fp.readline()[:12] != b"GIMP Palette": + raise SyntaxError("not a GIMP palette file") + + i = 0 + + while i <= 255: + + s = fp.readline() + + if not s: + break + # skip fields and comment lines + if re.match(b"\w+:|#", s): + continue + if len(s) > 100: + raise SyntaxError("bad palette file") + + v = tuple(map(int, s.split()[:3])) + if len(v) != 3: + raise ValueError("bad palette entry") + + if 0 <= i <= 255: + self.palette[i] = o8(v[0]) + o8(v[1]) + o8(v[2]) + + i += 1 + + self.palette = b"".join(self.palette) + + def getpalette(self): + + return self.palette, self.rawmode diff --git a/server/www/packages/packages-darwin/x64/PIL/GribStubImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/GribStubImagePlugin.py new file mode 100644 index 0000000..8ffad81 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/GribStubImagePlugin.py @@ -0,0 +1,72 @@ +# +# The Python Imaging Library +# $Id$ +# +# GRIB stub adapter +# +# Copyright (c) 1996-2003 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image, ImageFile + +_handler = None + + +## +# Install application-specific GRIB image handler. +# +# @param handler Handler object. + +def register_handler(handler): + global _handler + _handler = handler + + +# -------------------------------------------------------------------- +# Image adapter + +def _accept(prefix): + return prefix[0:4] == b"GRIB" and prefix[7] == b'\x01' + + +class GribStubImageFile(ImageFile.StubImageFile): + + format = "GRIB" + format_description = "GRIB" + + def _open(self): + + offset = self.fp.tell() + + if not _accept(self.fp.read(8)): + raise SyntaxError("Not a GRIB file") + + self.fp.seek(offset) + + # make something up + self.mode = "F" + self.size = 1, 1 + + loader = self._load() + if loader: + loader.open(self) + + def _load(self): + return _handler + + +def _save(im, fp, filename): + if _handler is None or not hasattr("_handler", "save"): + raise IOError("GRIB save handler not installed") + _handler.save(im, fp, filename) + + +# -------------------------------------------------------------------- +# Registry + +Image.register_open(GribStubImageFile.format, GribStubImageFile, _accept) +Image.register_save(GribStubImageFile.format, _save) + +Image.register_extension(GribStubImageFile.format, ".grib") diff --git a/server/www/packages/packages-darwin/x64/PIL/Hdf5StubImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/Hdf5StubImagePlugin.py new file mode 100644 index 0000000..f7945be --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/Hdf5StubImagePlugin.py @@ -0,0 +1,73 @@ +# +# The Python Imaging Library +# $Id$ +# +# HDF5 stub adapter +# +# Copyright (c) 2000-2003 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image, ImageFile + +_handler = None + + +## +# Install application-specific HDF5 image handler. +# +# @param handler Handler object. + +def register_handler(handler): + global _handler + _handler = handler + + +# -------------------------------------------------------------------- +# Image adapter + +def _accept(prefix): + return prefix[:8] == b"\x89HDF\r\n\x1a\n" + + +class HDF5StubImageFile(ImageFile.StubImageFile): + + format = "HDF5" + format_description = "HDF5" + + def _open(self): + + offset = self.fp.tell() + + if not _accept(self.fp.read(8)): + raise SyntaxError("Not an HDF file") + + self.fp.seek(offset) + + # make something up + self.mode = "F" + self.size = 1, 1 + + loader = self._load() + if loader: + loader.open(self) + + def _load(self): + return _handler + + +def _save(im, fp, filename): + if _handler is None or not hasattr("_handler", "save"): + raise IOError("HDF5 save handler not installed") + _handler.save(im, fp, filename) + + +# -------------------------------------------------------------------- +# Registry + +Image.register_open(HDF5StubImageFile.format, HDF5StubImageFile, _accept) +Image.register_save(HDF5StubImageFile.format, _save) + +Image.register_extension(HDF5StubImageFile.format, ".h5") +Image.register_extension(HDF5StubImageFile.format, ".hdf") diff --git a/server/www/packages/packages-darwin/x64/PIL/IcnsImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/IcnsImagePlugin.py new file mode 100644 index 0000000..a4366e9 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/IcnsImagePlugin.py @@ -0,0 +1,366 @@ +# +# The Python Imaging Library. +# $Id$ +# +# Mac OS X icns file decoder, based on icns.py by Bob Ippolito. +# +# history: +# 2004-10-09 fl Turned into a PIL plugin; removed 2.3 dependencies. +# +# Copyright (c) 2004 by Bob Ippolito. +# Copyright (c) 2004 by Secret Labs. +# Copyright (c) 2004 by Fredrik Lundh. +# Copyright (c) 2014 by Alastair Houghton. +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image, ImageFile, PngImagePlugin, _binary +import io +import os +import shutil +import struct +import sys +import tempfile + +enable_jpeg2k = hasattr(Image.core, 'jp2klib_version') +if enable_jpeg2k: + from PIL import Jpeg2KImagePlugin + +i8 = _binary.i8 + +HEADERSIZE = 8 + + +def nextheader(fobj): + return struct.unpack('>4sI', fobj.read(HEADERSIZE)) + + +def read_32t(fobj, start_length, size): + # The 128x128 icon seems to have an extra header for some reason. + (start, length) = start_length + fobj.seek(start) + sig = fobj.read(4) + if sig != b'\x00\x00\x00\x00': + raise SyntaxError('Unknown signature, expecting 0x00000000') + return read_32(fobj, (start + 4, length - 4), size) + + +def read_32(fobj, start_length, size): + """ + Read a 32bit RGB icon resource. Seems to be either uncompressed or + an RLE packbits-like scheme. + """ + (start, length) = start_length + fobj.seek(start) + pixel_size = (size[0] * size[2], size[1] * size[2]) + sizesq = pixel_size[0] * pixel_size[1] + if length == sizesq * 3: + # uncompressed ("RGBRGBGB") + indata = fobj.read(length) + im = Image.frombuffer("RGB", pixel_size, indata, "raw", "RGB", 0, 1) + else: + # decode image + im = Image.new("RGB", pixel_size, None) + for band_ix in range(3): + data = [] + bytesleft = sizesq + while bytesleft > 0: + byte = fobj.read(1) + if not byte: + break + byte = i8(byte) + if byte & 0x80: + blocksize = byte - 125 + byte = fobj.read(1) + for i in range(blocksize): + data.append(byte) + else: + blocksize = byte + 1 + data.append(fobj.read(blocksize)) + bytesleft -= blocksize + if bytesleft <= 0: + break + if bytesleft != 0: + raise SyntaxError( + "Error reading channel [%r left]" % bytesleft + ) + band = Image.frombuffer( + "L", pixel_size, b"".join(data), "raw", "L", 0, 1 + ) + im.im.putband(band.im, band_ix) + return {"RGB": im} + + +def read_mk(fobj, start_length, size): + # Alpha masks seem to be uncompressed + start = start_length[0] + fobj.seek(start) + pixel_size = (size[0] * size[2], size[1] * size[2]) + sizesq = pixel_size[0] * pixel_size[1] + band = Image.frombuffer( + "L", pixel_size, fobj.read(sizesq), "raw", "L", 0, 1 + ) + return {"A": band} + + +def read_png_or_jpeg2000(fobj, start_length, size): + (start, length) = start_length + fobj.seek(start) + sig = fobj.read(12) + if sig[:8] == b'\x89PNG\x0d\x0a\x1a\x0a': + fobj.seek(start) + im = PngImagePlugin.PngImageFile(fobj) + return {"RGBA": im} + elif sig[:4] == b'\xff\x4f\xff\x51' \ + or sig[:4] == b'\x0d\x0a\x87\x0a' \ + or sig == b'\x00\x00\x00\x0cjP \x0d\x0a\x87\x0a': + if not enable_jpeg2k: + raise ValueError('Unsupported icon subimage format (rebuild PIL ' + 'with JPEG 2000 support to fix this)') + # j2k, jpc or j2c + fobj.seek(start) + jp2kstream = fobj.read(length) + f = io.BytesIO(jp2kstream) + im = Jpeg2KImagePlugin.Jpeg2KImageFile(f) + if im.mode != 'RGBA': + im = im.convert('RGBA') + return {"RGBA": im} + else: + raise ValueError('Unsupported icon subimage format') + + +class IcnsFile(object): + + SIZES = { + (512, 512, 2): [ + (b'ic10', read_png_or_jpeg2000), + ], + (512, 512, 1): [ + (b'ic09', read_png_or_jpeg2000), + ], + (256, 256, 2): [ + (b'ic14', read_png_or_jpeg2000), + ], + (256, 256, 1): [ + (b'ic08', read_png_or_jpeg2000), + ], + (128, 128, 2): [ + (b'ic13', read_png_or_jpeg2000), + ], + (128, 128, 1): [ + (b'ic07', read_png_or_jpeg2000), + (b'it32', read_32t), + (b't8mk', read_mk), + ], + (64, 64, 1): [ + (b'icp6', read_png_or_jpeg2000), + ], + (32, 32, 2): [ + (b'ic12', read_png_or_jpeg2000), + ], + (48, 48, 1): [ + (b'ih32', read_32), + (b'h8mk', read_mk), + ], + (32, 32, 1): [ + (b'icp5', read_png_or_jpeg2000), + (b'il32', read_32), + (b'l8mk', read_mk), + ], + (16, 16, 2): [ + (b'ic11', read_png_or_jpeg2000), + ], + (16, 16, 1): [ + (b'icp4', read_png_or_jpeg2000), + (b'is32', read_32), + (b's8mk', read_mk), + ], + } + + def __init__(self, fobj): + """ + fobj is a file-like object as an icns resource + """ + # signature : (start, length) + self.dct = dct = {} + self.fobj = fobj + sig, filesize = nextheader(fobj) + if sig != b'icns': + raise SyntaxError('not an icns file') + i = HEADERSIZE + while i < filesize: + sig, blocksize = nextheader(fobj) + if blocksize <= 0: + raise SyntaxError('invalid block header') + i += HEADERSIZE + blocksize -= HEADERSIZE + dct[sig] = (i, blocksize) + fobj.seek(blocksize, 1) + i += blocksize + + def itersizes(self): + sizes = [] + for size, fmts in self.SIZES.items(): + for (fmt, reader) in fmts: + if fmt in self.dct: + sizes.append(size) + break + return sizes + + def bestsize(self): + sizes = self.itersizes() + if not sizes: + raise SyntaxError("No 32bit icon resources found") + return max(sizes) + + def dataforsize(self, size): + """ + Get an icon resource as {channel: array}. Note that + the arrays are bottom-up like windows bitmaps and will likely + need to be flipped or transposed in some way. + """ + dct = {} + for code, reader in self.SIZES[size]: + desc = self.dct.get(code) + if desc is not None: + dct.update(reader(self.fobj, desc, size)) + return dct + + def getimage(self, size=None): + if size is None: + size = self.bestsize() + if len(size) == 2: + size = (size[0], size[1], 1) + channels = self.dataforsize(size) + + im = channels.get('RGBA', None) + if im: + return im + + im = channels.get("RGB").copy() + try: + im.putalpha(channels["A"]) + except KeyError: + pass + return im + + +## +# Image plugin for Mac OS icons. + +class IcnsImageFile(ImageFile.ImageFile): + """ + PIL image support for Mac OS .icns files. + Chooses the best resolution, but will possibly load + a different size image if you mutate the size attribute + before calling 'load'. + + The info dictionary has a key 'sizes' that is a list + of sizes that the icns file has. + """ + + format = "ICNS" + format_description = "Mac OS icns resource" + + def _open(self): + self.icns = IcnsFile(self.fp) + self.mode = 'RGBA' + self.best_size = self.icns.bestsize() + self.size = (self.best_size[0] * self.best_size[2], + self.best_size[1] * self.best_size[2]) + self.info['sizes'] = self.icns.itersizes() + # Just use this to see if it's loaded or not yet. + self.tile = ('',) + + def load(self): + if len(self.size) == 3: + self.best_size = self.size + self.size = (self.best_size[0] * self.best_size[2], + self.best_size[1] * self.best_size[2]) + + Image.Image.load(self) + if not self.tile: + return + self.load_prepare() + # This is likely NOT the best way to do it, but whatever. + im = self.icns.getimage(self.best_size) + + # If this is a PNG or JPEG 2000, it won't be loaded yet + im.load() + + self.im = im.im + self.mode = im.mode + self.size = im.size + self.fp = None + self.icns = None + self.tile = () + self.load_end() + + +def _save(im, fp, filename): + """ + Saves the image as a series of PNG files, + that are then converted to a .icns file + using the OS X command line utility 'iconutil'. + + OS X only. + """ + if hasattr(fp, "flush"): + fp.flush() + + # create the temporary set of pngs + iconset = tempfile.mkdtemp('.iconset') + last_w = None + last_im = None + for w in [16, 32, 128, 256, 512]: + prefix = 'icon_{}x{}'.format(w, w) + + if last_w == w: + im_scaled = last_im + else: + im_scaled = im.resize((w, w), Image.LANCZOS) + im_scaled.save(os.path.join(iconset, prefix+'.png')) + + im_scaled = im.resize((w*2, w*2), Image.LANCZOS) + im_scaled.save(os.path.join(iconset, prefix+'@2x.png')) + last_im = im_scaled + + # iconutil -c icns -o {} {} + from subprocess import Popen, PIPE, CalledProcessError + + convert_cmd = ["iconutil", "-c", "icns", "-o", filename, iconset] + stderr = tempfile.TemporaryFile() + convert_proc = Popen(convert_cmd, stdout=PIPE, stderr=stderr) + + convert_proc.stdout.close() + + retcode = convert_proc.wait() + + # remove the temporary files + shutil.rmtree(iconset) + + if retcode: + raise CalledProcessError(retcode, convert_cmd) + +Image.register_open(IcnsImageFile.format, IcnsImageFile, + lambda x: x[:4] == b'icns') +Image.register_extension(IcnsImageFile.format, '.icns') + +if sys.platform == 'darwin': + Image.register_save(IcnsImageFile.format, _save) + + Image.register_mime(IcnsImageFile.format, "image/icns") + + +if __name__ == '__main__': + imf = IcnsImageFile(open(sys.argv[1], 'rb')) + for size in imf.info['sizes']: + imf.size = size + imf.load() + im = imf.im + im.save('out-%s-%s-%s.png' % size) + im = Image.open(open(sys.argv[1], "rb")) + im.save("out.png") + if sys.platform == 'windows': + os.startfile("out.png") diff --git a/server/www/packages/packages-darwin/x64/PIL/IcoImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/IcoImagePlugin.py new file mode 100644 index 0000000..4aa7687 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/IcoImagePlugin.py @@ -0,0 +1,283 @@ +# +# The Python Imaging Library. +# $Id$ +# +# Windows Icon support for PIL +# +# History: +# 96-05-27 fl Created +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# + +# This plugin is a refactored version of Win32IconImagePlugin by Bryan Davis +# . +# https://code.google.com/p/casadebender/wiki/Win32IconImagePlugin +# +# Icon format references: +# * https://en.wikipedia.org/wiki/ICO_(file_format) +# * http://msdn.microsoft.com/en-us/library/ms997538.aspx + + +import struct +from io import BytesIO + +from PIL import Image, ImageFile, BmpImagePlugin, PngImagePlugin, _binary +from math import log, ceil + +__version__ = "0.1" + +# +# -------------------------------------------------------------------- + +i8 = _binary.i8 +i16 = _binary.i16le +i32 = _binary.i32le + +_MAGIC = b"\0\0\1\0" + + +def _save(im, fp, filename): + fp.write(_MAGIC) # (2+2) + sizes = im.encoderinfo.get("sizes", + [(16, 16), (24, 24), (32, 32), (48, 48), + (64, 64), (128, 128), (255, 255)]) + width, height = im.size + filter(lambda x: False if (x[0] > width or x[1] > height or + x[0] > 255 or x[1] > 255) else True, sizes) + fp.write(struct.pack("=8bpp) + 'reserved': i8(s[3]), + 'planes': i16(s[4:]), + 'bpp': i16(s[6:]), + 'size': i32(s[8:]), + 'offset': i32(s[12:]) + } + + # See Wikipedia + for j in ('width', 'height'): + if not icon_header[j]: + icon_header[j] = 256 + + # See Wikipedia notes about color depth. + # We need this just to differ images with equal sizes + icon_header['color_depth'] = (icon_header['bpp'] or + (icon_header['nb_color'] != 0 and + ceil(log(icon_header['nb_color'], + 2))) or 256) + + icon_header['dim'] = (icon_header['width'], icon_header['height']) + icon_header['square'] = (icon_header['width'] * + icon_header['height']) + + self.entry.append(icon_header) + + self.entry = sorted(self.entry, key=lambda x: x['color_depth']) + # ICO images are usually squares + # self.entry = sorted(self.entry, key=lambda x: x['width']) + self.entry = sorted(self.entry, key=lambda x: x['square']) + self.entry.reverse() + + def sizes(self): + """ + Get a list of all available icon sizes and color depths. + """ + return set((h['width'], h['height']) for h in self.entry) + + def getimage(self, size, bpp=False): + """ + Get an image from the icon + """ + for (i, h) in enumerate(self.entry): + if size == h['dim'] and (bpp is False or bpp == h['color_depth']): + return self.frame(i) + return self.frame(0) + + def frame(self, idx): + """ + Get an image from frame idx + """ + + header = self.entry[idx] + + self.buf.seek(header['offset']) + data = self.buf.read(8) + self.buf.seek(header['offset']) + + if data[:8] == PngImagePlugin._MAGIC: + # png frame + im = PngImagePlugin.PngImageFile(self.buf) + else: + # XOR + AND mask bmp frame + im = BmpImagePlugin.DibImageFile(self.buf) + + # change tile dimension to only encompass XOR image + im.size = (im.size[0], int(im.size[1] / 2)) + d, e, o, a = im.tile[0] + im.tile[0] = d, (0, 0) + im.size, o, a + + # figure out where AND mask image starts + mode = a[0] + bpp = 8 + for k in BmpImagePlugin.BIT2MODE.keys(): + if mode == BmpImagePlugin.BIT2MODE[k][1]: + bpp = k + break + + if 32 == bpp: + # 32-bit color depth icon image allows semitransparent areas + # PIL's DIB format ignores transparency bits, recover them. + # The DIB is packed in BGRX byte order where X is the alpha + # channel. + + # Back up to start of bmp data + self.buf.seek(o) + # extract every 4th byte (eg. 3,7,11,15,...) + alpha_bytes = self.buf.read(im.size[0] * im.size[1] * 4)[3::4] + + # convert to an 8bpp grayscale image + mask = Image.frombuffer( + 'L', # 8bpp + im.size, # (w, h) + alpha_bytes, # source chars + 'raw', # raw decoder + ('L', 0, -1) # 8bpp inverted, unpadded, reversed + ) + else: + # get AND image from end of bitmap + w = im.size[0] + if (w % 32) > 0: + # bitmap row data is aligned to word boundaries + w += 32 - (im.size[0] % 32) + + # the total mask data is + # padded row size * height / bits per char + + and_mask_offset = o + int(im.size[0] * im.size[1] * + (bpp / 8.0)) + total_bytes = int((w * im.size[1]) / 8) + + self.buf.seek(and_mask_offset) + maskData = self.buf.read(total_bytes) + + # convert raw data to image + mask = Image.frombuffer( + '1', # 1 bpp + im.size, # (w, h) + maskData, # source chars + 'raw', # raw decoder + ('1;I', int(w/8), -1) # 1bpp inverted, padded, reversed + ) + + # now we have two images, im is XOR image and mask is AND image + + # apply mask image as alpha channel + im = im.convert('RGBA') + im.putalpha(mask) + + return im + + +## +# Image plugin for Windows Icon files. + +class IcoImageFile(ImageFile.ImageFile): + """ + PIL read-only image support for Microsoft Windows .ico files. + + By default the largest resolution image in the file will be loaded. This + can be changed by altering the 'size' attribute before calling 'load'. + + The info dictionary has a key 'sizes' that is a list of the sizes available + in the icon file. + + Handles classic, XP and Vista icon formats. + + This plugin is a refactored version of Win32IconImagePlugin by Bryan Davis + . + https://code.google.com/p/casadebender/wiki/Win32IconImagePlugin + """ + format = "ICO" + format_description = "Windows Icon" + + def _open(self): + self.ico = IcoFile(self.fp) + self.info['sizes'] = self.ico.sizes() + self.size = self.ico.entry[0]['dim'] + self.load() + + def load(self): + im = self.ico.getimage(self.size) + # if tile is PNG, it won't really be loaded yet + im.load() + self.im = im.im + self.mode = im.mode + self.size = im.size + + def load_seek(self): + # Flag the ImageFile.Parser so that it + # just does all the decode at the end. + pass +# +# -------------------------------------------------------------------- + +Image.register_open(IcoImageFile.format, IcoImageFile, _accept) +Image.register_save(IcoImageFile.format, _save) +Image.register_extension(IcoImageFile.format, ".ico") diff --git a/server/www/packages/packages-darwin/x64/PIL/ImImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/ImImagePlugin.py new file mode 100644 index 0000000..dd4f829 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImImagePlugin.py @@ -0,0 +1,355 @@ +# +# The Python Imaging Library. +# $Id$ +# +# IFUNC IM file handling for PIL +# +# history: +# 1995-09-01 fl Created. +# 1997-01-03 fl Save palette images +# 1997-01-08 fl Added sequence support +# 1997-01-23 fl Added P and RGB save support +# 1997-05-31 fl Read floating point images +# 1997-06-22 fl Save floating point images +# 1997-08-27 fl Read and save 1-bit images +# 1998-06-25 fl Added support for RGB+LUT images +# 1998-07-02 fl Added support for YCC images +# 1998-07-15 fl Renamed offset attribute to avoid name clash +# 1998-12-29 fl Added I;16 support +# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.7) +# 2003-09-26 fl Added LA/PA support +# +# Copyright (c) 1997-2003 by Secret Labs AB. +# Copyright (c) 1995-2001 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + + +import re +from PIL import Image, ImageFile, ImagePalette +from PIL._binary import i8 + +__version__ = "0.7" + + +# -------------------------------------------------------------------- +# Standard tags + +COMMENT = "Comment" +DATE = "Date" +EQUIPMENT = "Digitalization equipment" +FRAMES = "File size (no of images)" +LUT = "Lut" +NAME = "Name" +SCALE = "Scale (x,y)" +SIZE = "Image size (x*y)" +MODE = "Image type" + +TAGS = {COMMENT: 0, DATE: 0, EQUIPMENT: 0, FRAMES: 0, LUT: 0, NAME: 0, + SCALE: 0, SIZE: 0, MODE: 0} + +OPEN = { + # ifunc93/p3cfunc formats + "0 1 image": ("1", "1"), + "L 1 image": ("1", "1"), + "Greyscale image": ("L", "L"), + "Grayscale image": ("L", "L"), + "RGB image": ("RGB", "RGB;L"), + "RLB image": ("RGB", "RLB"), + "RYB image": ("RGB", "RLB"), + "B1 image": ("1", "1"), + "B2 image": ("P", "P;2"), + "B4 image": ("P", "P;4"), + "X 24 image": ("RGB", "RGB"), + "L 32 S image": ("I", "I;32"), + "L 32 F image": ("F", "F;32"), + # old p3cfunc formats + "RGB3 image": ("RGB", "RGB;T"), + "RYB3 image": ("RGB", "RYB;T"), + # extensions + "LA image": ("LA", "LA;L"), + "RGBA image": ("RGBA", "RGBA;L"), + "RGBX image": ("RGBX", "RGBX;L"), + "CMYK image": ("CMYK", "CMYK;L"), + "YCC image": ("YCbCr", "YCbCr;L"), +} + +# ifunc95 extensions +for i in ["8", "8S", "16", "16S", "32", "32F"]: + OPEN["L %s image" % i] = ("F", "F;%s" % i) + OPEN["L*%s image" % i] = ("F", "F;%s" % i) +for i in ["16", "16L", "16B"]: + OPEN["L %s image" % i] = ("I;%s" % i, "I;%s" % i) + OPEN["L*%s image" % i] = ("I;%s" % i, "I;%s" % i) +for i in ["32S"]: + OPEN["L %s image" % i] = ("I", "I;%s" % i) + OPEN["L*%s image" % i] = ("I", "I;%s" % i) +for i in range(2, 33): + OPEN["L*%s image" % i] = ("F", "F;%s" % i) + + +# -------------------------------------------------------------------- +# Read IM directory + +split = re.compile(br"^([A-Za-z][^:]*):[ \t]*(.*)[ \t]*$") + + +def number(s): + try: + return int(s) + except ValueError: + return float(s) + + +## +# Image plugin for the IFUNC IM file format. + +class ImImageFile(ImageFile.ImageFile): + + format = "IM" + format_description = "IFUNC Image Memory" + + def _open(self): + + # Quick rejection: if there's not an LF among the first + # 100 bytes, this is (probably) not a text header. + + if b"\n" not in self.fp.read(100): + raise SyntaxError("not an IM file") + self.fp.seek(0) + + n = 0 + + # Default values + self.info[MODE] = "L" + self.info[SIZE] = (512, 512) + self.info[FRAMES] = 1 + + self.rawmode = "L" + + while True: + + s = self.fp.read(1) + + # Some versions of IFUNC uses \n\r instead of \r\n... + if s == b"\r": + continue + + if not s or s == b'\0' or s == b'\x1A': + break + + # FIXME: this may read whole file if not a text file + s = s + self.fp.readline() + + if len(s) > 100: + raise SyntaxError("not an IM file") + + if s[-2:] == b'\r\n': + s = s[:-2] + elif s[-1:] == b'\n': + s = s[:-1] + + try: + m = split.match(s) + except re.error as v: + raise SyntaxError("not an IM file") + + if m: + + k, v = m.group(1, 2) + + # Don't know if this is the correct encoding, + # but a decent guess (I guess) + k = k.decode('latin-1', 'replace') + v = v.decode('latin-1', 'replace') + + # Convert value as appropriate + if k in [FRAMES, SCALE, SIZE]: + v = v.replace("*", ",") + v = tuple(map(number, v.split(","))) + if len(v) == 1: + v = v[0] + elif k == MODE and v in OPEN: + v, self.rawmode = OPEN[v] + + # Add to dictionary. Note that COMMENT tags are + # combined into a list of strings. + if k == COMMENT: + if k in self.info: + self.info[k].append(v) + else: + self.info[k] = [v] + else: + self.info[k] = v + + if k in TAGS: + n += 1 + + else: + + raise SyntaxError("Syntax error in IM header: " + + s.decode('ascii', 'replace')) + + if not n: + raise SyntaxError("Not an IM file") + + # Basic attributes + self.size = self.info[SIZE] + self.mode = self.info[MODE] + + # Skip forward to start of image data + while s and s[0:1] != b'\x1A': + s = self.fp.read(1) + if not s: + raise SyntaxError("File truncated") + + if LUT in self.info: + # convert lookup table to palette or lut attribute + palette = self.fp.read(768) + greyscale = 1 # greyscale palette + linear = 1 # linear greyscale palette + for i in range(256): + if palette[i] == palette[i+256] == palette[i+512]: + if i8(palette[i]) != i: + linear = 0 + else: + greyscale = 0 + if self.mode == "L" or self.mode == "LA": + if greyscale: + if not linear: + self.lut = [i8(c) for c in palette[:256]] + else: + if self.mode == "L": + self.mode = self.rawmode = "P" + elif self.mode == "LA": + self.mode = self.rawmode = "PA" + self.palette = ImagePalette.raw("RGB;L", palette) + elif self.mode == "RGB": + if not greyscale or not linear: + self.lut = [i8(c) for c in palette] + + self.frame = 0 + + self.__offset = offs = self.fp.tell() + + self.__fp = self.fp # FIXME: hack + + if self.rawmode[:2] == "F;": + + # ifunc95 formats + try: + # use bit decoder (if necessary) + bits = int(self.rawmode[2:]) + if bits not in [8, 16, 32]: + self.tile = [("bit", (0, 0)+self.size, offs, + (bits, 8, 3, 0, -1))] + return + except ValueError: + pass + + if self.rawmode in ["RGB;T", "RYB;T"]: + # Old LabEye/3PC files. Would be very surprised if anyone + # ever stumbled upon such a file ;-) + size = self.size[0] * self.size[1] + self.tile = [("raw", (0, 0)+self.size, offs, ("G", 0, -1)), + ("raw", (0, 0)+self.size, offs+size, ("R", 0, -1)), + ("raw", (0, 0)+self.size, offs+2*size, ("B", 0, -1))] + else: + # LabEye/IFUNC files + self.tile = [("raw", (0, 0)+self.size, offs, + (self.rawmode, 0, -1))] + + @property + def n_frames(self): + return self.info[FRAMES] + + @property + def is_animated(self): + return self.info[FRAMES] > 1 + + def seek(self, frame): + + if frame < 0 or frame >= self.info[FRAMES]: + raise EOFError("seek outside sequence") + + if self.frame == frame: + return + + self.frame = frame + + if self.mode == "1": + bits = 1 + else: + bits = 8 * len(self.mode) + + size = ((self.size[0] * bits + 7) // 8) * self.size[1] + offs = self.__offset + frame * size + + self.fp = self.__fp + + self.tile = [("raw", (0, 0)+self.size, offs, (self.rawmode, 0, -1))] + + def tell(self): + + return self.frame + +# +# -------------------------------------------------------------------- +# Save IM files + +SAVE = { + # mode: (im type, raw mode) + "1": ("0 1", "1"), + "L": ("Greyscale", "L"), + "LA": ("LA", "LA;L"), + "P": ("Greyscale", "P"), + "PA": ("LA", "PA;L"), + "I": ("L 32S", "I;32S"), + "I;16": ("L 16", "I;16"), + "I;16L": ("L 16L", "I;16L"), + "I;16B": ("L 16B", "I;16B"), + "F": ("L 32F", "F;32F"), + "RGB": ("RGB", "RGB;L"), + "RGBA": ("RGBA", "RGBA;L"), + "RGBX": ("RGBX", "RGBX;L"), + "CMYK": ("CMYK", "CMYK;L"), + "YCbCr": ("YCC", "YCbCr;L") +} + + +def _save(im, fp, filename, check=0): + + try: + image_type, rawmode = SAVE[im.mode] + except KeyError: + raise ValueError("Cannot save %s images as IM" % im.mode) + + try: + frames = im.encoderinfo["frames"] + except KeyError: + frames = 1 + + if check: + return check + + fp.write(("Image type: %s image\r\n" % image_type).encode('ascii')) + if filename: + fp.write(("Name: %s\r\n" % filename).encode('ascii')) + fp.write(("Image size (x*y): %d*%d\r\n" % im.size).encode('ascii')) + fp.write(("File size (no of images): %d\r\n" % frames).encode('ascii')) + if im.mode == "P": + fp.write(b"Lut: 1\r\n") + fp.write(b"\000" * (511-fp.tell()) + b"\032") + if im.mode == "P": + fp.write(im.im.getpalette("RGB", "RGB;L")) # 768 bytes + ImageFile._save(im, fp, [("raw", (0, 0)+im.size, 0, (rawmode, 0, -1))]) + +# +# -------------------------------------------------------------------- +# Registry + +Image.register_open(ImImageFile.format, ImImageFile) +Image.register_save(ImImageFile.format, _save) + +Image.register_extension(ImImageFile.format, ".im") diff --git a/server/www/packages/packages-darwin/x64/PIL/Image.py b/server/www/packages/packages-darwin/x64/PIL/Image.py new file mode 100644 index 0000000..89549ea --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/Image.py @@ -0,0 +1,2500 @@ +# +# The Python Imaging Library. +# $Id$ +# +# the Image class wrapper +# +# partial release history: +# 1995-09-09 fl Created +# 1996-03-11 fl PIL release 0.0 (proof of concept) +# 1996-04-30 fl PIL release 0.1b1 +# 1999-07-28 fl PIL release 1.0 final +# 2000-06-07 fl PIL release 1.1 +# 2000-10-20 fl PIL release 1.1.1 +# 2001-05-07 fl PIL release 1.1.2 +# 2002-03-15 fl PIL release 1.1.3 +# 2003-05-10 fl PIL release 1.1.4 +# 2005-03-28 fl PIL release 1.1.5 +# 2006-12-02 fl PIL release 1.1.6 +# 2009-11-15 fl PIL release 1.1.7 +# +# Copyright (c) 1997-2009 by Secret Labs AB. All rights reserved. +# Copyright (c) 1995-2009 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +from __future__ import print_function + +from PIL import VERSION, PILLOW_VERSION, _plugins + +import logging +import warnings + +logger = logging.getLogger(__name__) + + +class DecompressionBombWarning(RuntimeWarning): + pass + + +class _imaging_not_installed(object): + # module placeholder + def __getattr__(self, id): + raise ImportError("The _imaging C module is not installed") + + +# Limit to around a quarter gigabyte for a 24 bit (3 bpp) image +MAX_IMAGE_PIXELS = int(1024 * 1024 * 1024 / 4 / 3) + +try: + # give Tk a chance to set up the environment, in case we're + # using an _imaging module linked against libtcl/libtk (use + # __import__ to hide this from naive packagers; we don't really + # depend on Tk unless ImageTk is used, and that module already + # imports Tkinter) + __import__("FixTk") +except ImportError: + pass + +try: + # If the _imaging C module is not present, Pillow will not load. + # Note that other modules should not refer to _imaging directly; + # import Image and use the Image.core variable instead. + # Also note that Image.core is not a publicly documented interface, + # and should be considered private and subject to change. + from PIL import _imaging as core + if PILLOW_VERSION != getattr(core, 'PILLOW_VERSION', None): + raise ImportError("The _imaging extension was built for another " + " version of Pillow or PIL") + +except ImportError as v: + core = _imaging_not_installed() + # Explanations for ways that we know we might have an import error + if str(v).startswith("Module use of python"): + # The _imaging C module is present, but not compiled for + # the right version (windows only). Print a warning, if + # possible. + warnings.warn( + "The _imaging extension was built for another version " + "of Python.", + RuntimeWarning + ) + elif str(v).startswith("The _imaging extension"): + warnings.warn(str(v), RuntimeWarning) + elif "Symbol not found: _PyUnicodeUCS2_FromString" in str(v): + warnings.warn( + "The _imaging extension was built for Python with UCS2 support; " + "recompile PIL or build Python --without-wide-unicode. ", + RuntimeWarning + ) + elif "Symbol not found: _PyUnicodeUCS4_FromString" in str(v): + warnings.warn( + "The _imaging extension was built for Python with UCS4 support; " + "recompile PIL or build Python --with-wide-unicode. ", + RuntimeWarning + ) + # Fail here anyway. Don't let people run with a mostly broken Pillow. + # see docs/porting-pil-to-pillow.rst + raise + +try: + import builtins +except ImportError: + import __builtin__ + builtins = __builtin__ + +from PIL import ImageMode +from PIL._binary import i8 +from PIL._util import isPath +from PIL._util import isStringType +from PIL._util import deferred_error + +import os +import sys +import io +import struct + +# type stuff +import collections +import numbers + +# works everywhere, win for pypy, not cpython +USE_CFFI_ACCESS = hasattr(sys, 'pypy_version_info') +try: + import cffi + HAS_CFFI = True +except ImportError: + HAS_CFFI = False + + +def isImageType(t): + """ + Checks if an object is an image object. + + .. warning:: + + This function is for internal use only. + + :param t: object to check if it's an image + :returns: True if the object is an image + """ + return hasattr(t, "im") + +# +# Constants (also defined in _imagingmodule.c!) + +NONE = 0 + +# transpose +FLIP_LEFT_RIGHT = 0 +FLIP_TOP_BOTTOM = 1 +ROTATE_90 = 2 +ROTATE_180 = 3 +ROTATE_270 = 4 +TRANSPOSE = 5 + +# transforms +AFFINE = 0 +EXTENT = 1 +PERSPECTIVE = 2 +QUAD = 3 +MESH = 4 + +# resampling filters +NEAREST = NONE = 0 +LANCZOS = ANTIALIAS = 1 +BILINEAR = LINEAR = 2 +BICUBIC = CUBIC = 3 + +# dithers +NONE = 0 +NEAREST = 0 +ORDERED = 1 # Not yet implemented +RASTERIZE = 2 # Not yet implemented +FLOYDSTEINBERG = 3 # default + +# palettes/quantizers +WEB = 0 +ADAPTIVE = 1 + +MEDIANCUT = 0 +MAXCOVERAGE = 1 +FASTOCTREE = 2 + +# categories +NORMAL = 0 +SEQUENCE = 1 +CONTAINER = 2 + +if hasattr(core, 'DEFAULT_STRATEGY'): + DEFAULT_STRATEGY = core.DEFAULT_STRATEGY + FILTERED = core.FILTERED + HUFFMAN_ONLY = core.HUFFMAN_ONLY + RLE = core.RLE + FIXED = core.FIXED + + +# -------------------------------------------------------------------- +# Registries + +ID = [] +OPEN = {} +MIME = {} +SAVE = {} +SAVE_ALL = {} +EXTENSION = {} + +# -------------------------------------------------------------------- +# Modes supported by this version + +_MODEINFO = { + # NOTE: this table will be removed in future versions. use + # getmode* functions or ImageMode descriptors instead. + + # official modes + "1": ("L", "L", ("1",)), + "L": ("L", "L", ("L",)), + "I": ("L", "I", ("I",)), + "F": ("L", "F", ("F",)), + "P": ("RGB", "L", ("P",)), + "RGB": ("RGB", "L", ("R", "G", "B")), + "RGBX": ("RGB", "L", ("R", "G", "B", "X")), + "RGBA": ("RGB", "L", ("R", "G", "B", "A")), + "CMYK": ("RGB", "L", ("C", "M", "Y", "K")), + "YCbCr": ("RGB", "L", ("Y", "Cb", "Cr")), + "LAB": ("RGB", "L", ("L", "A", "B")), + "HSV": ("RGB", "L", ("H", "S", "V")), + + # Experimental modes include I;16, I;16L, I;16B, RGBa, BGR;15, and + # BGR;24. Use these modes only if you know exactly what you're + # doing... + +} + +if sys.byteorder == 'little': + _ENDIAN = '<' +else: + _ENDIAN = '>' + +_MODE_CONV = { + # official modes + "1": ('|b1', None), # broken + "L": ('|u1', None), + "I": (_ENDIAN + 'i4', None), + "F": (_ENDIAN + 'f4', None), + "P": ('|u1', None), + "RGB": ('|u1', 3), + "RGBX": ('|u1', 4), + "RGBA": ('|u1', 4), + "CMYK": ('|u1', 4), + "YCbCr": ('|u1', 3), + "LAB": ('|u1', 3), # UNDONE - unsigned |u1i1i1 + "HSV": ('|u1', 3), + # I;16 == I;16L, and I;32 == I;32L + "I;16": ('u2', None), + "I;16L": ('i2', None), + "I;16LS": ('u4', None), + "I;32L": ('i4', None), + "I;32LS": ('= 1: + return + + try: + from PIL import BmpImagePlugin + except ImportError: + pass + try: + from PIL import GifImagePlugin + except ImportError: + pass + try: + from PIL import JpegImagePlugin + except ImportError: + pass + try: + from PIL import PpmImagePlugin + except ImportError: + pass + try: + from PIL import PngImagePlugin + except ImportError: + pass +# try: +# import TiffImagePlugin +# except ImportError: +# pass + + _initialized = 1 + + +def init(): + """ + Explicitly initializes the Python Imaging Library. This function + loads all available file format drivers. + """ + + global _initialized + if _initialized >= 2: + return 0 + + for plugin in _plugins: + try: + logger.debug("Importing %s", plugin) + __import__("PIL.%s" % plugin, globals(), locals(), []) + except ImportError as e: + logger.debug("Image: failed to import %s: %s", plugin, e) + + if OPEN or SAVE: + _initialized = 2 + return 1 + + +# -------------------------------------------------------------------- +# Codec factories (used by tobytes/frombytes and ImageFile.load) + +def _getdecoder(mode, decoder_name, args, extra=()): + + # tweak arguments + if args is None: + args = () + elif not isinstance(args, tuple): + args = (args,) + + try: + # get decoder + decoder = getattr(core, decoder_name + "_decoder") + # print(decoder, mode, args + extra) + return decoder(mode, *args + extra) + except AttributeError: + raise IOError("decoder %s not available" % decoder_name) + + +def _getencoder(mode, encoder_name, args, extra=()): + + # tweak arguments + if args is None: + args = () + elif not isinstance(args, tuple): + args = (args,) + + try: + # get encoder + encoder = getattr(core, encoder_name + "_encoder") + # print(encoder, mode, args + extra) + return encoder(mode, *args + extra) + except AttributeError: + raise IOError("encoder %s not available" % encoder_name) + + +# -------------------------------------------------------------------- +# Simple expression analyzer + +def coerce_e(value): + return value if isinstance(value, _E) else _E(value) + + +class _E(object): + def __init__(self, data): + self.data = data + + def __add__(self, other): + return _E((self.data, "__add__", coerce_e(other).data)) + + def __mul__(self, other): + return _E((self.data, "__mul__", coerce_e(other).data)) + + +def _getscaleoffset(expr): + stub = ["stub"] + data = expr(_E(stub)).data + try: + (a, b, c) = data # simplified syntax + if (a is stub and b == "__mul__" and isinstance(c, numbers.Number)): + return c, 0.0 + if a is stub and b == "__add__" and isinstance(c, numbers.Number): + return 1.0, c + except TypeError: + pass + try: + ((a, b, c), d, e) = data # full syntax + if (a is stub and b == "__mul__" and isinstance(c, numbers.Number) and + d == "__add__" and isinstance(e, numbers.Number)): + return c, e + except TypeError: + pass + raise ValueError("illegal expression") + + +# -------------------------------------------------------------------- +# Implementation wrapper + +class Image(object): + """ + This class represents an image object. To create + :py:class:`~PIL.Image.Image` objects, use the appropriate factory + functions. There's hardly ever any reason to call the Image constructor + directly. + + * :py:func:`~PIL.Image.open` + * :py:func:`~PIL.Image.new` + * :py:func:`~PIL.Image.frombytes` + """ + format = None + format_description = None + + def __init__(self): + # FIXME: take "new" parameters / other image? + # FIXME: turn mode and size into delegating properties? + self.im = None + self.mode = "" + self.size = (0, 0) + self.palette = None + self.info = {} + self.category = NORMAL + self.readonly = 0 + self.pyaccess = None + + @property + def width(self): + return self.size[0] + + @property + def height(self): + return self.size[1] + + def _new(self, im): + new = Image() + new.im = im + new.mode = im.mode + new.size = im.size + if self.palette: + new.palette = self.palette.copy() + if im.mode == "P" and not new.palette: + from PIL import ImagePalette + new.palette = ImagePalette.ImagePalette() + try: + new.info = self.info.copy() + except AttributeError: + # fallback (pre-1.5.2) + new.info = {} + for k, v in self.info: + new.info[k] = v + return new + + _makeself = _new # compatibility + + # Context Manager Support + def __enter__(self): + return self + + def __exit__(self, *args): + self.close() + + def close(self): + """ + Closes the file pointer, if possible. + + This operation will destroy the image core and release its memory. + The image data will be unusable afterward. + + This function is only required to close images that have not + had their file read and closed by the + :py:meth:`~PIL.Image.Image.load` method. + """ + try: + self.fp.close() + except Exception as msg: + logger.debug("Error closing: %s", msg) + + # Instead of simply setting to None, we're setting up a + # deferred error that will better explain that the core image + # object is gone. + self.im = deferred_error(ValueError("Operation on closed image")) + + def _copy(self): + self.load() + self.im = self.im.copy() + self.pyaccess = None + self.readonly = 0 + + def _dump(self, file=None, format=None): + import tempfile + suffix = '' + if format: + suffix = '.'+format + if not file: + f, file = tempfile.mkstemp(suffix) + os.close(f) + + self.load() + if not format or format == "PPM": + self.im.save_ppm(file) + else: + if not file.endswith(format): + file = file + "." + format + self.save(file, format) + return file + + def __eq__(self, other): + if self.__class__.__name__ != other.__class__.__name__: + return False + a = (self.mode == other.mode) + b = (self.size == other.size) + c = (self.getpalette() == other.getpalette()) + d = (self.info == other.info) + e = (self.category == other.category) + f = (self.readonly == other.readonly) + g = (self.tobytes() == other.tobytes()) + return a and b and c and d and e and f and g + + def __ne__(self, other): + eq = (self == other) + return not eq + + def __repr__(self): + return "<%s.%s image mode=%s size=%dx%d at 0x%X>" % ( + self.__class__.__module__, self.__class__.__name__, + self.mode, self.size[0], self.size[1], + id(self) + ) + + def _repr_png_(self): + """ iPython display hook support + + :returns: png version of the image as bytes + """ + from io import BytesIO + b = BytesIO() + self.save(b, 'PNG') + return b.getvalue() + + def __getattr__(self, name): + if name == "__array_interface__": + # numpy array interface support + new = {} + shape, typestr = _conv_type_shape(self) + new['shape'] = shape + new['typestr'] = typestr + new['data'] = self.tobytes() + new['version'] = 3 + return new + raise AttributeError(name) + + def __getstate__(self): + return [ + self.info, + self.mode, + self.size, + self.getpalette(), + self.tobytes()] + + def __setstate__(self, state): + Image.__init__(self) + self.tile = [] + info, mode, size, palette, data = state + self.info = info + self.mode = mode + self.size = size + self.im = core.new(mode, size) + if mode in ("L", "P") and palette: + self.putpalette(palette) + self.frombytes(data) + + def tobytes(self, encoder_name="raw", *args): + """ + Return image as a bytes object. + + .. warning:: + + This method returns the raw image data from the internal + storage. For compressed image data (e.g. PNG, JPEG) use + :meth:`~.save`, with a BytesIO parameter for in-memory + data. + + :param encoder_name: What encoder to use. The default is to + use the standard "raw" encoder. + :param args: Extra arguments to the encoder. + :rtype: A bytes object. + """ + + # may pass tuple instead of argument list + if len(args) == 1 and isinstance(args[0], tuple): + args = args[0] + + if encoder_name == "raw" and args == (): + args = self.mode + + self.load() + + # unpack data + e = _getencoder(self.mode, encoder_name, args) + e.setimage(self.im) + + bufsize = max(65536, self.size[0] * 4) # see RawEncode.c + + data = [] + while True: + l, s, d = e.encode(bufsize) + data.append(d) + if s: + break + if s < 0: + raise RuntimeError("encoder error %d in tobytes" % s) + + return b"".join(data) + + def tostring(self, *args, **kw): + raise Exception("tostring() has been removed. " + + "Please call tobytes() instead.") + + def tobitmap(self, name="image"): + """ + Returns the image converted to an X11 bitmap. + + .. note:: This method only works for mode "1" images. + + :param name: The name prefix to use for the bitmap variables. + :returns: A string containing an X11 bitmap. + :raises ValueError: If the mode is not "1" + """ + + self.load() + if self.mode != "1": + raise ValueError("not a bitmap") + data = self.tobytes("xbm") + return b"".join([ + ("#define %s_width %d\n" % (name, self.size[0])).encode('ascii'), + ("#define %s_height %d\n" % (name, self.size[1])).encode('ascii'), + ("static char %s_bits[] = {\n" % name).encode('ascii'), data, b"};" + ]) + + def frombytes(self, data, decoder_name="raw", *args): + """ + Loads this image with pixel data from a bytes object. + + This method is similar to the :py:func:`~PIL.Image.frombytes` function, + but loads data into this image instead of creating a new image object. + """ + + # may pass tuple instead of argument list + if len(args) == 1 and isinstance(args[0], tuple): + args = args[0] + + # default format + if decoder_name == "raw" and args == (): + args = self.mode + + # unpack data + d = _getdecoder(self.mode, decoder_name, args) + d.setimage(self.im) + s = d.decode(data) + + if s[0] >= 0: + raise ValueError("not enough image data") + if s[1] != 0: + raise ValueError("cannot decode image data") + + def fromstring(self, *args, **kw): + raise Exception("fromstring() has been removed. " + + "Please call frombytes() instead.") + + def load(self): + """ + Allocates storage for the image and loads the pixel data. In + normal cases, you don't need to call this method, since the + Image class automatically loads an opened image when it is + accessed for the first time. This method will close the file + associated with the image. + + :returns: An image access object. + :rtype: :ref:`PixelAccess` or :py:class:`PIL.PyAccess` + """ + if self.im and self.palette and self.palette.dirty: + # realize palette + self.im.putpalette(*self.palette.getdata()) + self.palette.dirty = 0 + self.palette.mode = "RGB" + self.palette.rawmode = None + if "transparency" in self.info: + if isinstance(self.info["transparency"], int): + self.im.putpalettealpha(self.info["transparency"], 0) + else: + self.im.putpalettealphas(self.info["transparency"]) + self.palette.mode = "RGBA" + + if self.im: + if HAS_CFFI and USE_CFFI_ACCESS: + if self.pyaccess: + return self.pyaccess + from PIL import PyAccess + self.pyaccess = PyAccess.new(self, self.readonly) + if self.pyaccess: + return self.pyaccess + return self.im.pixel_access(self.readonly) + + def verify(self): + """ + Verifies the contents of a file. For data read from a file, this + method attempts to determine if the file is broken, without + actually decoding the image data. If this method finds any + problems, it raises suitable exceptions. If you need to load + the image after using this method, you must reopen the image + file. + """ + pass + + def convert(self, mode=None, matrix=None, dither=None, + palette=WEB, colors=256): + """ + Returns a converted copy of this image. For the "P" mode, this + method translates pixels through the palette. If mode is + omitted, a mode is chosen so that all information in the image + and the palette can be represented without a palette. + + The current version supports all possible conversions between + "L", "RGB" and "CMYK." The **matrix** argument only supports "L" + and "RGB". + + When translating a color image to black and white (mode "L"), + the library uses the ITU-R 601-2 luma transform:: + + L = R * 299/1000 + G * 587/1000 + B * 114/1000 + + The default method of converting a greyscale ("L") or "RGB" + image into a bilevel (mode "1") image uses Floyd-Steinberg + dither to approximate the original image luminosity levels. If + dither is NONE, all non-zero values are set to 255 (white). To + use other thresholds, use the :py:meth:`~PIL.Image.Image.point` + method. + + :param mode: The requested mode. See: :ref:`concept-modes`. + :param matrix: An optional conversion matrix. If given, this + should be 4- or 12-tuple containing floating point values. + :param dither: Dithering method, used when converting from + mode "RGB" to "P" or from "RGB" or "L" to "1". + Available methods are NONE or FLOYDSTEINBERG (default). + :param palette: Palette to use when converting from mode "RGB" + to "P". Available palettes are WEB or ADAPTIVE. + :param colors: Number of colors to use for the ADAPTIVE palette. + Defaults to 256. + :rtype: :py:class:`~PIL.Image.Image` + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + if not mode: + # determine default mode + if self.mode == "P": + self.load() + if self.palette: + mode = self.palette.mode + else: + mode = "RGB" + else: + return self.copy() + + self.load() + + if matrix: + # matrix conversion + if mode not in ("L", "RGB"): + raise ValueError("illegal conversion") + im = self.im.convert_matrix(mode, matrix) + return self._new(im) + + if mode == "P" and self.mode == "RGBA": + return self.quantize(colors) + + trns = None + delete_trns = False + # transparency handling + if "transparency" in self.info and \ + self.info['transparency'] is not None: + if self.mode in ('L', 'RGB') and mode == 'RGBA': + # Use transparent conversion to promote from transparent + # color to an alpha channel. + return self._new(self.im.convert_transparent( + mode, self.info['transparency'])) + elif self.mode in ('L', 'RGB', 'P') and mode in ('L', 'RGB', 'P'): + t = self.info['transparency'] + if isinstance(t, bytes): + # Dragons. This can't be represented by a single color + warnings.warn('Palette images with Transparency ' + + ' expressed in bytes should be converted ' + + 'to RGBA images') + delete_trns = True + else: + # get the new transparency color. + # use existing conversions + trns_im = Image()._new(core.new(self.mode, (1, 1))) + if self.mode == 'P': + trns_im.putpalette(self.palette) + trns_im.putpixel((0, 0), t) + + if mode in ('L', 'RGB'): + trns_im = trns_im.convert(mode) + else: + # can't just retrieve the palette number, got to do it + # after quantization. + trns_im = trns_im.convert('RGB') + trns = trns_im.getpixel((0, 0)) + + elif self.mode == 'P' and mode == 'RGBA': + t = self.info['transparency'] + delete_trns = True + + if isinstance(t, bytes): + self.im.putpalettealphas(t) + elif isinstance(t, int): + self.im.putpalettealpha(t, 0) + else: + raise ValueError("Transparency for P mode should" + + " be bytes or int") + + if mode == "P" and palette == ADAPTIVE: + im = self.im.quantize(colors) + new = self._new(im) + from PIL import ImagePalette + new.palette = ImagePalette.raw("RGB", new.im.getpalette("RGB")) + if delete_trns: + # This could possibly happen if we requantize to fewer colors. + # The transparency would be totally off in that case. + del(new.info['transparency']) + if trns is not None: + try: + new.info['transparency'] = new.palette.getcolor(trns) + except: + # if we can't make a transparent color, don't leave the old + # transparency hanging around to mess us up. + del(new.info['transparency']) + warnings.warn("Couldn't allocate palette entry " + + "for transparency") + return new + + # colorspace conversion + if dither is None: + dither = FLOYDSTEINBERG + + try: + im = self.im.convert(mode, dither) + except ValueError: + try: + # normalize source image and try again + im = self.im.convert(getmodebase(self.mode)) + im = im.convert(mode, dither) + except KeyError: + raise ValueError("illegal conversion") + + new_im = self._new(im) + if delete_trns: + # crash fail if we leave a bytes transparency in an rgb/l mode. + del(new_im.info['transparency']) + if trns is not None: + if new_im.mode == 'P': + try: + new_im.info['transparency'] = new_im.palette.getcolor(trns) + except: + del(new_im.info['transparency']) + warnings.warn("Couldn't allocate palette entry " + + "for transparency") + else: + new_im.info['transparency'] = trns + return new_im + + def quantize(self, colors=256, method=None, kmeans=0, palette=None): + """ + Convert the image to 'P' mode with the specified number + of colors. + + :param colors: The desired number of colors, <= 256 + :param method: 0 = median cut + 1 = maximum coverage + 2 = fast octree + :param kmeans: Integer + :param palette: Quantize to the :py:class:`PIL.ImagingPalette` palette. + :returns: A new image + + """ + + self.load() + + if method is None: + # defaults: + method = 0 + if self.mode == 'RGBA': + method = 2 + + if self.mode == 'RGBA' and method != 2: + # Caller specified an invalid mode. + raise ValueError('Fast Octree (method == 2) is the ' + + ' only valid method for quantizing RGBA images') + + if palette: + # use palette from reference image + palette.load() + if palette.mode != "P": + raise ValueError("bad mode for palette image") + if self.mode != "RGB" and self.mode != "L": + raise ValueError( + "only RGB or L mode images can be quantized to a palette" + ) + im = self.im.convert("P", 1, palette.im) + return self._makeself(im) + + im = self.im.quantize(colors, method, kmeans) + return self._new(im) + + def copy(self): + """ + Copies this image. Use this method if you wish to paste things + into an image, but still retain the original. + + :rtype: :py:class:`~PIL.Image.Image` + :returns: An :py:class:`~PIL.Image.Image` object. + """ + self.load() + im = self.im.copy() + return self._new(im) + + def crop(self, box=None): + """ + Returns a rectangular region from this image. The box is a + 4-tuple defining the left, upper, right, and lower pixel + coordinate. + + This is a lazy operation. Changes to the source image may or + may not be reflected in the cropped image. To break the + connection, call the :py:meth:`~PIL.Image.Image.load` method on + the cropped copy. + + :param box: The crop rectangle, as a (left, upper, right, lower)-tuple. + :rtype: :py:class:`~PIL.Image.Image` + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + self.load() + if box is None: + return self.copy() + + # lazy operation + return _ImageCrop(self, box) + + def draft(self, mode, size): + """ + Configures the image file loader so it returns a version of the + image that as closely as possible matches the given mode and + size. For example, you can use this method to convert a color + JPEG to greyscale while loading it, or to extract a 128x192 + version from a PCD file. + + Note that this method modifies the :py:class:`~PIL.Image.Image` object + in place. If the image has already been loaded, this method has no + effect. + + :param mode: The requested mode. + :param size: The requested size. + """ + pass + + def _expand(self, xmargin, ymargin=None): + if ymargin is None: + ymargin = xmargin + self.load() + return self._new(self.im.expand(xmargin, ymargin, 0)) + + def filter(self, filter): + """ + Filters this image using the given filter. For a list of + available filters, see the :py:mod:`~PIL.ImageFilter` module. + + :param filter: Filter kernel. + :returns: An :py:class:`~PIL.Image.Image` object. """ + + self.load() + + if isinstance(filter, collections.Callable): + filter = filter() + if not hasattr(filter, "filter"): + raise TypeError("filter argument should be ImageFilter.Filter " + + "instance or class") + + if self.im.bands == 1: + return self._new(filter.filter(self.im)) + # fix to handle multiband images since _imaging doesn't + ims = [] + for c in range(self.im.bands): + ims.append(self._new(filter.filter(self.im.getband(c)))) + return merge(self.mode, ims) + + def getbands(self): + """ + Returns a tuple containing the name of each band in this image. + For example, **getbands** on an RGB image returns ("R", "G", "B"). + + :returns: A tuple containing band names. + :rtype: tuple + """ + return ImageMode.getmode(self.mode).bands + + def getbbox(self): + """ + Calculates the bounding box of the non-zero regions in the + image. + + :returns: The bounding box is returned as a 4-tuple defining the + left, upper, right, and lower pixel coordinate. If the image + is completely empty, this method returns None. + + """ + + self.load() + return self.im.getbbox() + + def getcolors(self, maxcolors=256): + """ + Returns a list of colors used in this image. + + :param maxcolors: Maximum number of colors. If this number is + exceeded, this method returns None. The default limit is + 256 colors. + :returns: An unsorted list of (count, pixel) values. + """ + + self.load() + if self.mode in ("1", "L", "P"): + h = self.im.histogram() + out = [] + for i in range(256): + if h[i]: + out.append((h[i], i)) + if len(out) > maxcolors: + return None + return out + return self.im.getcolors(maxcolors) + + def getdata(self, band=None): + """ + Returns the contents of this image as a sequence object + containing pixel values. The sequence object is flattened, so + that values for line one follow directly after the values of + line zero, and so on. + + Note that the sequence object returned by this method is an + internal PIL data type, which only supports certain sequence + operations. To convert it to an ordinary sequence (e.g. for + printing), use **list(im.getdata())**. + + :param band: What band to return. The default is to return + all bands. To return a single band, pass in the index + value (e.g. 0 to get the "R" band from an "RGB" image). + :returns: A sequence-like object. + """ + + self.load() + if band is not None: + return self.im.getband(band) + return self.im # could be abused + + def getextrema(self): + """ + Gets the the minimum and maximum pixel values for each band in + the image. + + :returns: For a single-band image, a 2-tuple containing the + minimum and maximum pixel value. For a multi-band image, + a tuple containing one 2-tuple for each band. + """ + + self.load() + if self.im.bands > 1: + extrema = [] + for i in range(self.im.bands): + extrema.append(self.im.getband(i).getextrema()) + return tuple(extrema) + return self.im.getextrema() + + def getim(self): + """ + Returns a capsule that points to the internal image memory. + + :returns: A capsule object. + """ + + self.load() + return self.im.ptr + + def getpalette(self): + """ + Returns the image palette as a list. + + :returns: A list of color values [r, g, b, ...], or None if the + image has no palette. + """ + + self.load() + try: + if bytes is str: + return [i8(c) for c in self.im.getpalette()] + else: + return list(self.im.getpalette()) + except ValueError: + return None # no palette + + def getpixel(self, xy): + """ + Returns the pixel value at a given position. + + :param xy: The coordinate, given as (x, y). + :returns: The pixel value. If the image is a multi-layer image, + this method returns a tuple. + """ + + self.load() + if self.pyaccess: + return self.pyaccess.getpixel(xy) + return self.im.getpixel(xy) + + def getprojection(self): + """ + Get projection to x and y axes + + :returns: Two sequences, indicating where there are non-zero + pixels along the X-axis and the Y-axis, respectively. + """ + + self.load() + x, y = self.im.getprojection() + return [i8(c) for c in x], [i8(c) for c in y] + + def histogram(self, mask=None, extrema=None): + """ + Returns a histogram for the image. The histogram is returned as + a list of pixel counts, one for each pixel value in the source + image. If the image has more than one band, the histograms for + all bands are concatenated (for example, the histogram for an + "RGB" image contains 768 values). + + A bilevel image (mode "1") is treated as a greyscale ("L") image + by this method. + + If a mask is provided, the method returns a histogram for those + parts of the image where the mask image is non-zero. The mask + image must have the same size as the image, and be either a + bi-level image (mode "1") or a greyscale image ("L"). + + :param mask: An optional mask. + :returns: A list containing pixel counts. + """ + self.load() + if mask: + mask.load() + return self.im.histogram((0, 0), mask.im) + if self.mode in ("I", "F"): + if extrema is None: + extrema = self.getextrema() + return self.im.histogram(extrema) + return self.im.histogram() + + def offset(self, xoffset, yoffset=None): + raise Exception("offset() has been removed. " + + "Please call ImageChops.offset() instead.") + + def paste(self, im, box=None, mask=None): + """ + Pastes another image into this image. The box argument is either + a 2-tuple giving the upper left corner, a 4-tuple defining the + left, upper, right, and lower pixel coordinate, or None (same as + (0, 0)). If a 4-tuple is given, the size of the pasted image + must match the size of the region. + + If the modes don't match, the pasted image is converted to the mode of + this image (see the :py:meth:`~PIL.Image.Image.convert` method for + details). + + Instead of an image, the source can be a integer or tuple + containing pixel values. The method then fills the region + with the given color. When creating RGB images, you can + also use color strings as supported by the ImageColor module. + + If a mask is given, this method updates only the regions + indicated by the mask. You can use either "1", "L" or "RGBA" + images (in the latter case, the alpha band is used as mask). + Where the mask is 255, the given image is copied as is. Where + the mask is 0, the current value is preserved. Intermediate + values will mix the two images together, including their alpha + channels if they have them. + + See :py:meth:`~PIL.Image.Image.alpha_composite` if you want to + combine images with respect to their alpha channels. + + :param im: Source image or pixel value (integer or tuple). + :param box: An optional 4-tuple giving the region to paste into. + If a 2-tuple is used instead, it's treated as the upper left + corner. If omitted or None, the source is pasted into the + upper left corner. + + If an image is given as the second argument and there is no + third, the box defaults to (0, 0), and the second argument + is interpreted as a mask image. + :param mask: An optional mask image. + """ + + if isImageType(box) and mask is None: + # abbreviated paste(im, mask) syntax + mask = box + box = None + + if box is None: + # cover all of self + box = (0, 0) + self.size + + if len(box) == 2: + # lower left corner given; get size from image or mask + if isImageType(im): + size = im.size + elif isImageType(mask): + size = mask.size + else: + # FIXME: use self.size here? + raise ValueError( + "cannot determine region size; use 4-item box" + ) + box = box + (box[0]+size[0], box[1]+size[1]) + + if isStringType(im): + from PIL import ImageColor + im = ImageColor.getcolor(im, self.mode) + + elif isImageType(im): + im.load() + if self.mode != im.mode: + if self.mode != "RGB" or im.mode not in ("RGBA", "RGBa"): + # should use an adapter for this! + im = im.convert(self.mode) + im = im.im + + self.load() + if self.readonly: + self._copy() + + if mask: + mask.load() + self.im.paste(im, box, mask.im) + else: + self.im.paste(im, box) + + def point(self, lut, mode=None): + """ + Maps this image through a lookup table or function. + + :param lut: A lookup table, containing 256 (or 65336 if + self.mode=="I" and mode == "L") values per band in the + image. A function can be used instead, it should take a + single argument. The function is called once for each + possible pixel value, and the resulting table is applied to + all bands of the image. + :param mode: Output mode (default is same as input). In the + current version, this can only be used if the source image + has mode "L" or "P", and the output has mode "1" or the + source image mode is "I" and the output mode is "L". + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + self.load() + + if isinstance(lut, ImagePointHandler): + return lut.point(self) + + if callable(lut): + # if it isn't a list, it should be a function + if self.mode in ("I", "I;16", "F"): + # check if the function can be used with point_transform + # UNDONE wiredfool -- I think this prevents us from ever doing + # a gamma function point transform on > 8bit images. + scale, offset = _getscaleoffset(lut) + return self._new(self.im.point_transform(scale, offset)) + # for other modes, convert the function to a table + lut = [lut(i) for i in range(256)] * self.im.bands + + if self.mode == "F": + # FIXME: _imaging returns a confusing error message for this case + raise ValueError("point operation not supported for this mode") + + return self._new(self.im.point(lut, mode)) + + def putalpha(self, alpha): + """ + Adds or replaces the alpha layer in this image. If the image + does not have an alpha layer, it's converted to "LA" or "RGBA". + The new layer must be either "L" or "1". + + :param alpha: The new alpha layer. This can either be an "L" or "1" + image having the same size as this image, or an integer or + other color value. + """ + + self.load() + if self.readonly: + self._copy() + + if self.mode not in ("LA", "RGBA"): + # attempt to promote self to a matching alpha mode + try: + mode = getmodebase(self.mode) + "A" + try: + self.im.setmode(mode) + self.pyaccess = None + except (AttributeError, ValueError): + # do things the hard way + im = self.im.convert(mode) + if im.mode not in ("LA", "RGBA"): + raise ValueError # sanity check + self.im = im + self.pyaccess = None + self.mode = self.im.mode + except (KeyError, ValueError): + raise ValueError("illegal image mode") + + if self.mode == "LA": + band = 1 + else: + band = 3 + + if isImageType(alpha): + # alpha layer + if alpha.mode not in ("1", "L"): + raise ValueError("illegal image mode") + alpha.load() + if alpha.mode == "1": + alpha = alpha.convert("L") + else: + # constant alpha + try: + self.im.fillband(band, alpha) + except (AttributeError, ValueError): + # do things the hard way + alpha = new("L", self.size, alpha) + else: + return + + self.im.putband(alpha.im, band) + + def putdata(self, data, scale=1.0, offset=0.0): + """ + Copies pixel data to this image. This method copies data from a + sequence object into the image, starting at the upper left + corner (0, 0), and continuing until either the image or the + sequence ends. The scale and offset values are used to adjust + the sequence values: **pixel = value*scale + offset**. + + :param data: A sequence object. + :param scale: An optional scale value. The default is 1.0. + :param offset: An optional offset value. The default is 0.0. + """ + + self.load() + if self.readonly: + self._copy() + + self.im.putdata(data, scale, offset) + + def putpalette(self, data, rawmode="RGB"): + """ + Attaches a palette to this image. The image must be a "P" or + "L" image, and the palette sequence must contain 768 integer + values, where each group of three values represent the red, + green, and blue values for the corresponding pixel + index. Instead of an integer sequence, you can use an 8-bit + string. + + :param data: A palette sequence (either a list or a string). + """ + from PIL import ImagePalette + + if self.mode not in ("L", "P"): + raise ValueError("illegal image mode") + self.load() + if isinstance(data, ImagePalette.ImagePalette): + palette = ImagePalette.raw(data.rawmode, data.palette) + else: + if not isinstance(data, bytes): + if bytes is str: + data = "".join(chr(x) for x in data) + else: + data = bytes(data) + palette = ImagePalette.raw(rawmode, data) + self.mode = "P" + self.palette = palette + self.palette.mode = "RGB" + self.load() # install new palette + + def putpixel(self, xy, value): + """ + Modifies the pixel at the given position. The color is given as + a single numerical value for single-band images, and a tuple for + multi-band images. + + Note that this method is relatively slow. For more extensive changes, + use :py:meth:`~PIL.Image.Image.paste` or the :py:mod:`~PIL.ImageDraw` + module instead. + + See: + + * :py:meth:`~PIL.Image.Image.paste` + * :py:meth:`~PIL.Image.Image.putdata` + * :py:mod:`~PIL.ImageDraw` + + :param xy: The pixel coordinate, given as (x, y). + :param value: The pixel value. + """ + + self.load() + if self.readonly: + self._copy() + self.pyaccess = None + self.load() + + if self.pyaccess: + return self.pyaccess.putpixel(xy, value) + return self.im.putpixel(xy, value) + + def resize(self, size, resample=NEAREST): + """ + Returns a resized copy of this image. + + :param size: The requested size in pixels, as a 2-tuple: + (width, height). + :param resample: An optional resampling filter. This can be + one of :py:attr:`PIL.Image.NEAREST` (use nearest neighbour), + :py:attr:`PIL.Image.BILINEAR` (linear interpolation), + :py:attr:`PIL.Image.BICUBIC` (cubic spline interpolation), or + :py:attr:`PIL.Image.LANCZOS` (a high-quality downsampling filter). + If omitted, or if the image has mode "1" or "P", it is + set :py:attr:`PIL.Image.NEAREST`. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + if resample not in (NEAREST, BILINEAR, BICUBIC, LANCZOS): + raise ValueError("unknown resampling filter") + + self.load() + + size = tuple(size) + if self.size == size: + return self._new(self.im) + + if self.mode in ("1", "P"): + resample = NEAREST + + if self.mode == 'RGBA': + return self.convert('RGBa').resize(size, resample).convert('RGBA') + + return self._new(self.im.resize(size, resample)) + + def rotate(self, angle, resample=NEAREST, expand=0): + """ + Returns a rotated copy of this image. This method returns a + copy of this image, rotated the given number of degrees counter + clockwise around its centre. + + :param angle: In degrees counter clockwise. + :param resample: An optional resampling filter. This can be + one of :py:attr:`PIL.Image.NEAREST` (use nearest neighbour), + :py:attr:`PIL.Image.BILINEAR` (linear interpolation in a 2x2 + environment), or :py:attr:`PIL.Image.BICUBIC` + (cubic spline interpolation in a 4x4 environment). + If omitted, or if the image has mode "1" or "P", it is + set :py:attr:`PIL.Image.NEAREST`. + :param expand: Optional expansion flag. If true, expands the output + image to make it large enough to hold the entire rotated image. + If false or omitted, make the output image the same size as the + input image. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + if expand: + import math + angle = -angle * math.pi / 180 + matrix = [ + math.cos(angle), math.sin(angle), 0.0, + -math.sin(angle), math.cos(angle), 0.0 + ] + + def transform(x, y, matrix=matrix): + (a, b, c, d, e, f) = matrix + return a*x + b*y + c, d*x + e*y + f + + # calculate output size + w, h = self.size + xx = [] + yy = [] + for x, y in ((0, 0), (w, 0), (w, h), (0, h)): + x, y = transform(x, y) + xx.append(x) + yy.append(y) + w = int(math.ceil(max(xx)) - math.floor(min(xx))) + h = int(math.ceil(max(yy)) - math.floor(min(yy))) + + # adjust center + x, y = transform(w / 2.0, h / 2.0) + matrix[2] = self.size[0] / 2.0 - x + matrix[5] = self.size[1] / 2.0 - y + + return self.transform((w, h), AFFINE, matrix, resample) + + if resample not in (NEAREST, BILINEAR, BICUBIC): + raise ValueError("unknown resampling filter") + + self.load() + + if self.mode in ("1", "P"): + resample = NEAREST + + return self._new(self.im.rotate(angle, resample, expand)) + + def save(self, fp, format=None, **params): + """ + Saves this image under the given filename. If no format is + specified, the format to use is determined from the filename + extension, if possible. + + Keyword options can be used to provide additional instructions + to the writer. If a writer doesn't recognise an option, it is + silently ignored. The available options are described in the + :doc:`image format documentation + <../handbook/image-file-formats>` for each writer. + + You can use a file object instead of a filename. In this case, + you must always specify the format. The file object must + implement the ``seek``, ``tell``, and ``write`` + methods, and be opened in binary mode. + + :param fp: A filename (string), pathlib.Path object or file object. + :param format: Optional format override. If omitted, the + format to use is determined from the filename extension. + If a file object was used instead of a filename, this + parameter should always be used. + :param options: Extra parameters to the image writer. + :returns: None + :exception KeyError: If the output format could not be determined + from the file name. Use the format option to solve this. + :exception IOError: If the file could not be written. The file + may have been created, and may contain partial data. + """ + + filename = "" + open_fp = False + if isPath(fp): + filename = fp + open_fp = True + elif sys.version_info >= (3, 4): + from pathlib import Path + if isinstance(fp, Path): + filename = str(fp.resolve()) + open_fp = True + elif hasattr(fp, "name") and isPath(fp.name): + # only set the name for metadata purposes + filename = fp.name + + # may mutate self! + self.load() + + save_all = False + if 'save_all' in params: + save_all = params['save_all'] + del params['save_all'] + self.encoderinfo = params + self.encoderconfig = () + + preinit() + + ext = os.path.splitext(filename)[1].lower() + + if not format: + if ext not in EXTENSION: + init() + format = EXTENSION[ext] + + if format.upper() not in SAVE: + init() + if save_all: + save_handler = SAVE_ALL[format.upper()] + else: + save_handler = SAVE[format.upper()] + + if open_fp: + fp = builtins.open(filename, "wb") + + try: + save_handler(self, fp, filename) + finally: + # do what we can to clean up + if open_fp: + fp.close() + + def seek(self, frame): + """ + Seeks to the given frame in this sequence file. If you seek + beyond the end of the sequence, the method raises an + **EOFError** exception. When a sequence file is opened, the + library automatically seeks to frame 0. + + Note that in the current version of the library, most sequence + formats only allows you to seek to the next frame. + + See :py:meth:`~PIL.Image.Image.tell`. + + :param frame: Frame number, starting at 0. + :exception EOFError: If the call attempts to seek beyond the end + of the sequence. + """ + + # overridden by file handlers + if frame != 0: + raise EOFError + + def show(self, title=None, command=None): + """ + Displays this image. This method is mainly intended for + debugging purposes. + + On Unix platforms, this method saves the image to a temporary + PPM file, and calls the **xv** utility. + + On Windows, it saves the image to a temporary BMP file, and uses + the standard BMP display utility to show it (usually Paint). + + :param title: Optional title to use for the image window, + where possible. + :param command: command used to show the image + """ + + _show(self, title=title, command=command) + + def split(self): + """ + Split this image into individual bands. This method returns a + tuple of individual image bands from an image. For example, + splitting an "RGB" image creates three new images each + containing a copy of one of the original bands (red, green, + blue). + + :returns: A tuple containing bands. + """ + + self.load() + if self.im.bands == 1: + ims = [self.copy()] + else: + ims = [] + for i in range(self.im.bands): + ims.append(self._new(self.im.getband(i))) + return tuple(ims) + + def tell(self): + """ + Returns the current frame number. See :py:meth:`~PIL.Image.Image.seek`. + + :returns: Frame number, starting with 0. + """ + return 0 + + def thumbnail(self, size, resample=BICUBIC): + """ + Make this image into a thumbnail. This method modifies the + image to contain a thumbnail version of itself, no larger than + the given size. This method calculates an appropriate thumbnail + size to preserve the aspect of the image, calls the + :py:meth:`~PIL.Image.Image.draft` method to configure the file reader + (where applicable), and finally resizes the image. + + Note that this function modifies the :py:class:`~PIL.Image.Image` + object in place. If you need to use the full resolution image as well, + apply this method to a :py:meth:`~PIL.Image.Image.copy` of the original + image. + + :param size: Requested size. + :param resample: Optional resampling filter. This can be one + of :py:attr:`PIL.Image.NEAREST`, :py:attr:`PIL.Image.BILINEAR`, + :py:attr:`PIL.Image.BICUBIC`, or :py:attr:`PIL.Image.LANCZOS`. + If omitted, it defaults to :py:attr:`PIL.Image.BICUBIC`. + (was :py:attr:`PIL.Image.NEAREST` prior to version 2.5.0) + :returns: None + """ + + # preserve aspect ratio + x, y = self.size + if x > size[0]: + y = int(max(y * size[0] / x, 1)) + x = int(size[0]) + if y > size[1]: + x = int(max(x * size[1] / y, 1)) + y = int(size[1]) + size = x, y + + if size == self.size: + return + + self.draft(None, size) + + im = self.resize(size, resample) + + self.im = im.im + self.mode = im.mode + self.size = size + + self.readonly = 0 + self.pyaccess = None + + # FIXME: the different transform methods need further explanation + # instead of bloating the method docs, add a separate chapter. + def transform(self, size, method, data=None, resample=NEAREST, fill=1): + """ + Transforms this image. This method creates a new image with the + given size, and the same mode as the original, and copies data + to the new image using the given transform. + + :param size: The output size. + :param method: The transformation method. This is one of + :py:attr:`PIL.Image.EXTENT` (cut out a rectangular subregion), + :py:attr:`PIL.Image.AFFINE` (affine transform), + :py:attr:`PIL.Image.PERSPECTIVE` (perspective transform), + :py:attr:`PIL.Image.QUAD` (map a quadrilateral to a rectangle), or + :py:attr:`PIL.Image.MESH` (map a number of source quadrilaterals + in one operation). + :param data: Extra data to the transformation method. + :param resample: Optional resampling filter. It can be one of + :py:attr:`PIL.Image.NEAREST` (use nearest neighbour), + :py:attr:`PIL.Image.BILINEAR` (linear interpolation in a 2x2 + environment), or :py:attr:`PIL.Image.BICUBIC` (cubic spline + interpolation in a 4x4 environment). If omitted, or if the image + has mode "1" or "P", it is set to :py:attr:`PIL.Image.NEAREST`. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + if self.mode == 'RGBA': + return self.convert('RGBa').transform( + size, method, data, resample, fill).convert('RGBA') + + if isinstance(method, ImageTransformHandler): + return method.transform(size, self, resample=resample, fill=fill) + if hasattr(method, "getdata"): + # compatibility w. old-style transform objects + method, data = method.getdata() + if data is None: + raise ValueError("missing method data") + + im = new(self.mode, size, None) + if method == MESH: + # list of quads + for box, quad in data: + im.__transformer(box, self, QUAD, quad, resample, fill) + else: + im.__transformer((0, 0)+size, self, method, data, resample, fill) + + return im + + def __transformer(self, box, image, method, data, + resample=NEAREST, fill=1): + + # FIXME: this should be turned into a lazy operation (?) + + w = box[2]-box[0] + h = box[3]-box[1] + + if method == AFFINE: + # change argument order to match implementation + data = (data[2], data[0], data[1], + data[5], data[3], data[4]) + elif method == EXTENT: + # convert extent to an affine transform + x0, y0, x1, y1 = data + xs = float(x1 - x0) / w + ys = float(y1 - y0) / h + method = AFFINE + data = (x0 + xs/2, xs, 0, y0 + ys/2, 0, ys) + elif method == PERSPECTIVE: + # change argument order to match implementation + data = (data[2], data[0], data[1], + data[5], data[3], data[4], + data[6], data[7]) + elif method == QUAD: + # quadrilateral warp. data specifies the four corners + # given as NW, SW, SE, and NE. + nw = data[0:2] + sw = data[2:4] + se = data[4:6] + ne = data[6:8] + x0, y0 = nw + As = 1.0 / w + At = 1.0 / h + data = (x0, (ne[0]-x0)*As, (sw[0]-x0)*At, + (se[0]-sw[0]-ne[0]+x0)*As*At, + y0, (ne[1]-y0)*As, (sw[1]-y0)*At, + (se[1]-sw[1]-ne[1]+y0)*As*At) + else: + raise ValueError("unknown transformation method") + + if resample not in (NEAREST, BILINEAR, BICUBIC): + raise ValueError("unknown resampling filter") + + image.load() + + self.load() + + if image.mode in ("1", "P"): + resample = NEAREST + + self.im.transform2(box, image.im, method, data, resample, fill) + + def transpose(self, method): + """ + Transpose image (flip or rotate in 90 degree steps) + + :param method: One of :py:attr:`PIL.Image.FLIP_LEFT_RIGHT`, + :py:attr:`PIL.Image.FLIP_TOP_BOTTOM`, :py:attr:`PIL.Image.ROTATE_90`, + :py:attr:`PIL.Image.ROTATE_180`, :py:attr:`PIL.Image.ROTATE_270` or + :py:attr:`PIL.Image.TRANSPOSE`. + :returns: Returns a flipped or rotated copy of this image. + """ + + self.load() + return self._new(self.im.transpose(method)) + + def effect_spread(self, distance): + """ + Randomly spread pixels in an image. + + :param distance: Distance to spread pixels. + """ + self.load() + im = self.im.effect_spread(distance) + return self._new(im) + + def toqimage(self): + """Returns a QImage copy of this image""" + from PIL import ImageQt + if not ImageQt.qt_is_installed: + raise ImportError("Qt bindings are not installed") + return ImageQt.toqimage(self) + + def toqpixmap(self): + """Returns a QPixmap copy of this image""" + from PIL import ImageQt + if not ImageQt.qt_is_installed: + raise ImportError("Qt bindings are not installed") + return ImageQt.toqpixmap(self) + + +# -------------------------------------------------------------------- +# Lazy operations + +class _ImageCrop(Image): + + def __init__(self, im, box): + + Image.__init__(self) + + x0, y0, x1, y1 = box + if x1 < x0: + x1 = x0 + if y1 < y0: + y1 = y0 + + self.mode = im.mode + self.size = x1-x0, y1-y0 + + self.__crop = x0, y0, x1, y1 + + self.im = im.im + + def load(self): + + # lazy evaluation! + if self.__crop: + self.im = self.im.crop(self.__crop) + self.__crop = None + + if self.im: + return self.im.pixel_access(self.readonly) + + # FIXME: future versions should optimize crop/paste + # sequences! + + +# -------------------------------------------------------------------- +# Abstract handlers. + +class ImagePointHandler(object): + # used as a mixin by point transforms (for use with im.point) + pass + + +class ImageTransformHandler(object): + # used as a mixin by geometry transforms (for use with im.transform) + pass + + +# -------------------------------------------------------------------- +# Factories + +# +# Debugging + +def _wedge(): + "Create greyscale wedge (for debugging only)" + + return Image()._new(core.wedge("L")) + + +def new(mode, size, color=0): + """ + Creates a new image with the given mode and size. + + :param mode: The mode to use for the new image. See: + :ref:`concept-modes`. + :param size: A 2-tuple, containing (width, height) in pixels. + :param color: What color to use for the image. Default is black. + If given, this should be a single integer or floating point value + for single-band modes, and a tuple for multi-band modes (one value + per band). When creating RGB images, you can also use color + strings as supported by the ImageColor module. If the color is + None, the image is not initialised. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + if color is None: + # don't initialize + return Image()._new(core.new(mode, size)) + + if isStringType(color): + # css3-style specifier + + from PIL import ImageColor + color = ImageColor.getcolor(color, mode) + + return Image()._new(core.fill(mode, size, color)) + + +def frombytes(mode, size, data, decoder_name="raw", *args): + """ + Creates a copy of an image memory from pixel data in a buffer. + + In its simplest form, this function takes three arguments + (mode, size, and unpacked pixel data). + + You can also use any pixel decoder supported by PIL. For more + information on available decoders, see the section + :ref:`Writing Your Own File Decoder `. + + Note that this function decodes pixel data only, not entire images. + If you have an entire image in a string, wrap it in a + :py:class:`~io.BytesIO` object, and use :py:func:`~PIL.Image.open` to load + it. + + :param mode: The image mode. See: :ref:`concept-modes`. + :param size: The image size. + :param data: A byte buffer containing raw data for the given mode. + :param decoder_name: What decoder to use. + :param args: Additional parameters for the given decoder. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + # may pass tuple instead of argument list + if len(args) == 1 and isinstance(args[0], tuple): + args = args[0] + + if decoder_name == "raw" and args == (): + args = mode + + im = new(mode, size) + im.frombytes(data, decoder_name, args) + return im + + +def fromstring(*args, **kw): + raise Exception("fromstring() has been removed. " + + "Please call frombytes() instead.") + + +def frombuffer(mode, size, data, decoder_name="raw", *args): + """ + Creates an image memory referencing pixel data in a byte buffer. + + This function is similar to :py:func:`~PIL.Image.frombytes`, but uses data + in the byte buffer, where possible. This means that changes to the + original buffer object are reflected in this image). Not all modes can + share memory; supported modes include "L", "RGBX", "RGBA", and "CMYK". + + Note that this function decodes pixel data only, not entire images. + If you have an entire image file in a string, wrap it in a + **BytesIO** object, and use :py:func:`~PIL.Image.open` to load it. + + In the current version, the default parameters used for the "raw" decoder + differs from that used for :py:func:`~PIL.Image.fromstring`. This is a + bug, and will probably be fixed in a future release. The current release + issues a warning if you do this; to disable the warning, you should provide + the full set of parameters. See below for details. + + :param mode: The image mode. See: :ref:`concept-modes`. + :param size: The image size. + :param data: A bytes or other buffer object containing raw + data for the given mode. + :param decoder_name: What decoder to use. + :param args: Additional parameters for the given decoder. For the + default encoder ("raw"), it's recommended that you provide the + full set of parameters:: + + frombuffer(mode, size, data, "raw", mode, 0, 1) + + :returns: An :py:class:`~PIL.Image.Image` object. + + .. versionadded:: 1.1.4 + """ + + # may pass tuple instead of argument list + if len(args) == 1 and isinstance(args[0], tuple): + args = args[0] + + if decoder_name == "raw": + if args == (): + warnings.warn( + "the frombuffer defaults may change in a future release; " + "for portability, change the call to read:\n" + " frombuffer(mode, size, data, 'raw', mode, 0, 1)", + RuntimeWarning, stacklevel=2 + ) + args = mode, 0, -1 # may change to (mode, 0, 1) post-1.1.6 + if args[0] in _MAPMODES: + im = new(mode, (1, 1)) + im = im._new( + core.map_buffer(data, size, decoder_name, None, 0, args) + ) + im.readonly = 1 + return im + + return frombytes(mode, size, data, decoder_name, args) + + +def fromarray(obj, mode=None): + """ + Creates an image memory from an object exporting the array interface + (using the buffer protocol). + + If obj is not contiguous, then the tobytes method is called + and :py:func:`~PIL.Image.frombuffer` is used. + + :param obj: Object with array interface + :param mode: Mode to use (will be determined from type if None) + See: :ref:`concept-modes`. + :returns: An image object. + + .. versionadded:: 1.1.6 + """ + arr = obj.__array_interface__ + shape = arr['shape'] + ndim = len(shape) + try: + strides = arr['strides'] + except KeyError: + strides = None + if mode is None: + try: + typekey = (1, 1) + shape[2:], arr['typestr'] + mode, rawmode = _fromarray_typemap[typekey] + except KeyError: + # print typekey + raise TypeError("Cannot handle this data type") + else: + rawmode = mode + if mode in ["1", "L", "I", "P", "F"]: + ndmax = 2 + elif mode == "RGB": + ndmax = 3 + else: + ndmax = 4 + if ndim > ndmax: + raise ValueError("Too many dimensions: %d > %d." % (ndim, ndmax)) + + size = shape[1], shape[0] + if strides is not None: + if hasattr(obj, 'tobytes'): + obj = obj.tobytes() + else: + obj = obj.tostring() + + return frombuffer(mode, size, obj, "raw", rawmode, 0, 1) + + +def fromqimage(im): + """Creates an image instance from a QImage image""" + from PIL import ImageQt + if not ImageQt.qt_is_installed: + raise ImportError("Qt bindings are not installed") + return ImageQt.fromqimage(im) + + +def fromqpixmap(im): + """Creates an image instance from a QPixmap image""" + from PIL import ImageQt + if not ImageQt.qt_is_installed: + raise ImportError("Qt bindings are not installed") + return ImageQt.fromqpixmap(im) + +_fromarray_typemap = { + # (shape, typestr) => mode, rawmode + # first two members of shape are set to one + # ((1, 1), "|b1"): ("1", "1"), # broken + ((1, 1), "|u1"): ("L", "L"), + ((1, 1), "|i1"): ("I", "I;8"), + ((1, 1), "i2"): ("I", "I;16B"), + ((1, 1), "i4"): ("I", "I;32B"), + ((1, 1), "f4"): ("F", "F;32BF"), + ((1, 1), "f8"): ("F", "F;64BF"), + ((1, 1, 3), "|u1"): ("RGB", "RGB"), + ((1, 1, 4), "|u1"): ("RGBA", "RGBA"), + } + +# shortcuts +_fromarray_typemap[((1, 1), _ENDIAN + "i4")] = ("I", "I") +_fromarray_typemap[((1, 1), _ENDIAN + "f4")] = ("F", "F") + + +def _decompression_bomb_check(size): + if MAX_IMAGE_PIXELS is None: + return + + pixels = size[0] * size[1] + + if pixels > MAX_IMAGE_PIXELS: + warnings.warn( + "Image size (%d pixels) exceeds limit of %d pixels, " + "could be decompression bomb DOS attack." % + (pixels, MAX_IMAGE_PIXELS), + DecompressionBombWarning) + + +def open(fp, mode="r"): + """ + Opens and identifies the given image file. + + This is a lazy operation; this function identifies the file, but + the file remains open and the actual image data is not read from + the file until you try to process the data (or call the + :py:meth:`~PIL.Image.Image.load` method). See + :py:func:`~PIL.Image.new`. + + :param fp: A filename (string), pathlib.Path object or a file object. + The file object must implement :py:meth:`~file.read`, + :py:meth:`~file.seek`, and :py:meth:`~file.tell` methods, + and be opened in binary mode. + :param mode: The mode. If given, this argument must be "r". + :returns: An :py:class:`~PIL.Image.Image` object. + :exception IOError: If the file cannot be found, or the image cannot be + opened and identified. + """ + + if mode != "r": + raise ValueError("bad mode %r" % mode) + + filename = "" + if isPath(fp): + filename = fp + elif sys.version_info >= (3, 4): + from pathlib import Path + if isinstance(fp, Path): + filename = str(fp.resolve()) + if filename: + fp = builtins.open(filename, "rb") + + try: + fp.seek(0) + except (AttributeError, io.UnsupportedOperation): + fp = io.BytesIO(fp.read()) + + prefix = fp.read(16) + + preinit() + + def _open_core(fp, filename, prefix): + for i in ID: + try: + factory, accept = OPEN[i] + if not accept or accept(prefix): + fp.seek(0) + im = factory(fp, filename) + _decompression_bomb_check(im.size) + return im + except (SyntaxError, IndexError, TypeError, struct.error): + # Leave disabled by default, spams the logs with image + # opening failures that are entirely expected. + # logger.debug("", exc_info=True) + continue + return None + + im = _open_core(fp, filename, prefix) + + if im is None: + if init(): + im = _open_core(fp, filename, prefix) + + if im: + return im + + raise IOError("cannot identify image file %r" + % (filename if filename else fp)) + +# +# Image processing. + + +def alpha_composite(im1, im2): + """ + Alpha composite im2 over im1. + + :param im1: The first image. + :param im2: The second image. Must have the same mode and size as + the first image. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + im1.load() + im2.load() + return im1._new(core.alpha_composite(im1.im, im2.im)) + + +def blend(im1, im2, alpha): + """ + Creates a new image by interpolating between two input images, using + a constant alpha.:: + + out = image1 * (1.0 - alpha) + image2 * alpha + + :param im1: The first image. + :param im2: The second image. Must have the same mode and size as + the first image. + :param alpha: The interpolation alpha factor. If alpha is 0.0, a + copy of the first image is returned. If alpha is 1.0, a copy of + the second image is returned. There are no restrictions on the + alpha value. If necessary, the result is clipped to fit into + the allowed output range. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + im1.load() + im2.load() + return im1._new(core.blend(im1.im, im2.im, alpha)) + + +def composite(image1, image2, mask): + """ + Create composite image by blending images using a transparency mask. + + :param image1: The first image. + :param image2: The second image. Must have the same mode and + size as the first image. + :param mask: A mask image. This image can have mode + "1", "L", or "RGBA", and must have the same size as the + other two images. + """ + + image = image2.copy() + image.paste(image1, None, mask) + return image + + +def eval(image, *args): + """ + Applies the function (which should take one argument) to each pixel + in the given image. If the image has more than one band, the same + function is applied to each band. Note that the function is + evaluated once for each possible pixel value, so you cannot use + random components or other generators. + + :param image: The input image. + :param function: A function object, taking one integer argument. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + return image.point(args[0]) + + +def merge(mode, bands): + """ + Merge a set of single band images into a new multiband image. + + :param mode: The mode to use for the output image. See: + :ref:`concept-modes`. + :param bands: A sequence containing one single-band image for + each band in the output image. All bands must have the + same size. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + if getmodebands(mode) != len(bands) or "*" in mode: + raise ValueError("wrong number of bands") + for im in bands[1:]: + if im.mode != getmodetype(mode): + raise ValueError("mode mismatch") + if im.size != bands[0].size: + raise ValueError("size mismatch") + im = core.new(mode, bands[0].size) + for i in range(getmodebands(mode)): + bands[i].load() + im.putband(bands[i].im, i) + return bands[0]._new(im) + + +# -------------------------------------------------------------------- +# Plugin registry + +def register_open(id, factory, accept=None): + """ + Register an image file plugin. This function should not be used + in application code. + + :param id: An image format identifier. + :param factory: An image file factory method. + :param accept: An optional function that can be used to quickly + reject images having another format. + """ + id = id.upper() + ID.append(id) + OPEN[id] = factory, accept + + +def register_mime(id, mimetype): + """ + Registers an image MIME type. This function should not be used + in application code. + + :param id: An image format identifier. + :param mimetype: The image MIME type for this format. + """ + MIME[id.upper()] = mimetype + + +def register_save(id, driver): + """ + Registers an image save function. This function should not be + used in application code. + + :param id: An image format identifier. + :param driver: A function to save images in this format. + """ + SAVE[id.upper()] = driver + + +def register_save_all(id, driver): + """ + Registers an image function to save all the frames + of a multiframe format. This function should not be + used in application code. + + :param id: An image format identifier. + :param driver: A function to save images in this format. + """ + SAVE_ALL[id.upper()] = driver + + +def register_extension(id, extension): + """ + Registers an image extension. This function should not be + used in application code. + + :param id: An image format identifier. + :param extension: An extension used for this format. + """ + EXTENSION[extension.lower()] = id.upper() + + +# -------------------------------------------------------------------- +# Simple display support. User code may override this. + +def _show(image, **options): + # override me, as necessary + _showxv(image, **options) + + +def _showxv(image, title=None, **options): + from PIL import ImageShow + ImageShow.show(image, title, **options) + + +# -------------------------------------------------------------------- +# Effects + +def effect_mandelbrot(size, extent, quality): + """ + Generate a Mandelbrot set covering the given extent. + + :param size: The requested size in pixels, as a 2-tuple: + (width, height). + :param extent: The extent to cover, as a 4-tuple: + (x0, y0, x1, y2). + :param quality: Quality. + """ + return Image()._new(core.effect_mandelbrot(size, extent, quality)) + + +def effect_noise(size, sigma): + """ + Generate Gaussian noise centered around 128. + + :param size: The requested size in pixels, as a 2-tuple: + (width, height). + :param sigma: Standard deviation of noise. + """ + return Image()._new(core.effect_noise(size, sigma)) + +# End of file diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageChops.py b/server/www/packages/packages-darwin/x64/PIL/ImageChops.py new file mode 100644 index 0000000..ba5350e --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageChops.py @@ -0,0 +1,283 @@ +# +# The Python Imaging Library. +# $Id$ +# +# standard channel operations +# +# History: +# 1996-03-24 fl Created +# 1996-08-13 fl Added logical operations (for "1" images) +# 2000-10-12 fl Added offset method (from Image.py) +# +# Copyright (c) 1997-2000 by Secret Labs AB +# Copyright (c) 1996-2000 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image + + +def constant(image, value): + """Fill a channel with a given grey level. + + :rtype: :py:class:`~PIL.Image.Image` + """ + + return Image.new("L", image.size, value) + + +def duplicate(image): + """Copy a channel. Alias for :py:meth:`PIL.Image.Image.copy`. + + :rtype: :py:class:`~PIL.Image.Image` + """ + + return image.copy() + + +def invert(image): + """ + Invert an image (channel). + + .. code-block:: python + + out = MAX - image + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image.load() + return image._new(image.im.chop_invert()) + + +def lighter(image1, image2): + """ + Compares the two images, pixel by pixel, and returns a new image containing + the lighter values. + + .. code-block:: python + + out = max(image1, image2) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_lighter(image2.im)) + + +def darker(image1, image2): + """ + Compares the two images, pixel by pixel, and returns a new image + containing the darker values. + + .. code-block:: python + + out = min(image1, image2) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_darker(image2.im)) + + +def difference(image1, image2): + """ + Returns the absolute value of the pixel-by-pixel difference between the two + images. + + .. code-block:: python + + out = abs(image1 - image2) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_difference(image2.im)) + + +def multiply(image1, image2): + """ + Superimposes two images on top of each other. + + If you multiply an image with a solid black image, the result is black. If + you multiply with a solid white image, the image is unaffected. + + .. code-block:: python + + out = image1 * image2 / MAX + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_multiply(image2.im)) + + +def screen(image1, image2): + """ + Superimposes two inverted images on top of each other. + + .. code-block:: python + + out = MAX - ((MAX - image1) * (MAX - image2) / MAX) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_screen(image2.im)) + + +def add(image1, image2, scale=1.0, offset=0): + """ + Adds two images, dividing the result by scale and adding the + offset. If omitted, scale defaults to 1.0, and offset to 0.0. + + .. code-block:: python + + out = ((image1 + image2) / scale + offset) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_add(image2.im, scale, offset)) + + +def subtract(image1, image2, scale=1.0, offset=0): + """ + Subtracts two images, dividing the result by scale and adding the + offset. If omitted, scale defaults to 1.0, and offset to 0.0. + + .. code-block:: python + + out = ((image1 - image2) / scale + offset) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_subtract(image2.im, scale, offset)) + + +def add_modulo(image1, image2): + """Add two images, without clipping the result. + + .. code-block:: python + + out = ((image1 + image2) % MAX) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_add_modulo(image2.im)) + + +def subtract_modulo(image1, image2): + """Subtract two images, without clipping the result. + + .. code-block:: python + + out = ((image1 - image2) % MAX) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_subtract_modulo(image2.im)) + + +def logical_and(image1, image2): + """Logical AND between two images. + + .. code-block:: python + + out = ((image1 and image2) % MAX) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_and(image2.im)) + + +def logical_or(image1, image2): + """Logical OR between two images. + + .. code-block:: python + + out = ((image1 or image2) % MAX) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_or(image2.im)) + + +def logical_xor(image1, image2): + """Logical XOR between two images. + + .. code-block:: python + + out = ((bool(image1) != bool(image2)) % MAX) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_xor(image2.im)) + + +def blend(image1, image2, alpha): + """Blend images using constant transparency weight. Alias for + :py:meth:`PIL.Image.Image.blend`. + + :rtype: :py:class:`~PIL.Image.Image` + """ + + return Image.blend(image1, image2, alpha) + + +def composite(image1, image2, mask): + """Create composite using transparency mask. Alias for + :py:meth:`PIL.Image.Image.composite`. + + :rtype: :py:class:`~PIL.Image.Image` + """ + + return Image.composite(image1, image2, mask) + + +def offset(image, xoffset, yoffset=None): + """Returns a copy of the image where data has been offset by the given + distances. Data wraps around the edges. If **yoffset** is omitted, it + is assumed to be equal to **xoffset**. + + :param xoffset: The horizontal distance. + :param yoffset: The vertical distance. If omitted, both + distances are set to the same value. + :rtype: :py:class:`~PIL.Image.Image` + """ + + if yoffset is None: + yoffset = xoffset + image.load() + return image._new(image.im.offset(xoffset, yoffset)) diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageCms.py b/server/www/packages/packages-darwin/x64/PIL/ImageCms.py new file mode 100644 index 0000000..ba5504a --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageCms.py @@ -0,0 +1,970 @@ +# The Python Imaging Library. +# $Id$ + +# Optional color managment support, based on Kevin Cazabon's PyCMS +# library. + +# History: + +# 2009-03-08 fl Added to PIL. + +# Copyright (C) 2002-2003 Kevin Cazabon +# Copyright (c) 2009 by Fredrik Lundh +# Copyright (c) 2013 by Eric Soroos + +# See the README file for information on usage and redistribution. See +# below for the original description. + +from __future__ import print_function +import sys + +DESCRIPTION = """ +pyCMS + + a Python / PIL interface to the littleCMS ICC Color Management System + Copyright (C) 2002-2003 Kevin Cazabon + kevin@cazabon.com + http://www.cazabon.com + + pyCMS home page: http://www.cazabon.com/pyCMS + littleCMS home page: http://www.littlecms.com + (littleCMS is Copyright (C) 1998-2001 Marti Maria) + + Originally released under LGPL. Graciously donated to PIL in + March 2009, for distribution under the standard PIL license + + The pyCMS.py module provides a "clean" interface between Python/PIL and + pyCMSdll, taking care of some of the more complex handling of the direct + pyCMSdll functions, as well as error-checking and making sure that all + relevant data is kept together. + + While it is possible to call pyCMSdll functions directly, it's not highly + recommended. + + Version History: + + 1.0.0 pil Oct 2013 Port to LCMS 2. + + 0.1.0 pil mod March 10, 2009 + + Renamed display profile to proof profile. The proof + profile is the profile of the device that is being + simulated, not the profile of the device which is + actually used to display/print the final simulation + (that'd be the output profile) - also see LCMSAPI.txt + input colorspace -> using 'renderingIntent' -> proof + colorspace -> using 'proofRenderingIntent' -> output + colorspace + + Added LCMS FLAGS support. + Added FLAGS["SOFTPROOFING"] as default flag for + buildProofTransform (otherwise the proof profile/intent + would be ignored). + + 0.1.0 pil March 2009 - added to PIL, as PIL.ImageCms + + 0.0.2 alpha Jan 6, 2002 + + Added try/except statements around type() checks of + potential CObjects... Python won't let you use type() + on them, and raises a TypeError (stupid, if you ask + me!) + + Added buildProofTransformFromOpenProfiles() function. + Additional fixes in DLL, see DLL code for details. + + 0.0.1 alpha first public release, Dec. 26, 2002 + + Known to-do list with current version (of Python interface, not pyCMSdll): + + none + +""" + +VERSION = "1.0.0 pil" + +# --------------------------------------------------------------------. + +from PIL import Image +try: + from PIL import _imagingcms +except ImportError as ex: + # Allow error import for doc purposes, but error out when accessing + # anything in core. + from _util import deferred_error + _imagingcms = deferred_error(ex) +from PIL._util import isStringType + +core = _imagingcms + +# +# intent/direction values + +INTENT_PERCEPTUAL = 0 +INTENT_RELATIVE_COLORIMETRIC = 1 +INTENT_SATURATION = 2 +INTENT_ABSOLUTE_COLORIMETRIC = 3 + +DIRECTION_INPUT = 0 +DIRECTION_OUTPUT = 1 +DIRECTION_PROOF = 2 + +# +# flags + +FLAGS = { + "MATRIXINPUT": 1, + "MATRIXOUTPUT": 2, + "MATRIXONLY": (1 | 2), + "NOWHITEONWHITEFIXUP": 4, # Don't hot fix scum dot + # Don't create prelinearization tables on precalculated transforms + # (internal use): + "NOPRELINEARIZATION": 16, + "GUESSDEVICECLASS": 32, # Guess device class (for transform2devicelink) + "NOTCACHE": 64, # Inhibit 1-pixel cache + "NOTPRECALC": 256, + "NULLTRANSFORM": 512, # Don't transform anyway + "HIGHRESPRECALC": 1024, # Use more memory to give better accuracy + "LOWRESPRECALC": 2048, # Use less memory to minimize resources + "WHITEBLACKCOMPENSATION": 8192, + "BLACKPOINTCOMPENSATION": 8192, + "GAMUTCHECK": 4096, # Out of Gamut alarm + "SOFTPROOFING": 16384, # Do softproofing + "PRESERVEBLACK": 32768, # Black preservation + "NODEFAULTRESOURCEDEF": 16777216, # CRD special + "GRIDPOINTS": lambda n: ((n) & 0xFF) << 16 # Gridpoints +} + +_MAX_FLAG = 0 +for flag in FLAGS.values(): + if isinstance(flag, int): + _MAX_FLAG = _MAX_FLAG | flag + + +# --------------------------------------------------------------------. +# Experimental PIL-level API +# --------------------------------------------------------------------. + +## +# Profile. + +class ImageCmsProfile(object): + + def __init__(self, profile): + """ + :param profile: Either a string representing a filename, + a file like object containing a profile or a + low-level profile object + + """ + + if isStringType(profile): + self._set(core.profile_open(profile), profile) + elif hasattr(profile, "read"): + self._set(core.profile_frombytes(profile.read())) + else: + self._set(profile) # assume it's already a profile + + def _set(self, profile, filename=None): + self.profile = profile + self.filename = filename + if profile: + self.product_name = None # profile.product_name + self.product_info = None # profile.product_info + else: + self.product_name = None + self.product_info = None + + def tobytes(self): + """ + Returns the profile in a format suitable for embedding in + saved images. + + :returns: a bytes object containing the ICC profile. + """ + + return core.profile_tobytes(self.profile) + + +class ImageCmsTransform(Image.ImagePointHandler): + + # Transform. This can be used with the procedural API, or with the + # standard Image.point() method. + # + # Will return the output profile in the output.info['icc_profile']. + + def __init__(self, input, output, input_mode, output_mode, + intent=INTENT_PERCEPTUAL, proof=None, + proof_intent=INTENT_ABSOLUTE_COLORIMETRIC, flags=0): + if proof is None: + self.transform = core.buildTransform( + input.profile, output.profile, + input_mode, output_mode, + intent, + flags + ) + else: + self.transform = core.buildProofTransform( + input.profile, output.profile, proof.profile, + input_mode, output_mode, + intent, proof_intent, + flags + ) + # Note: inputMode and outputMode are for pyCMS compatibility only + self.input_mode = self.inputMode = input_mode + self.output_mode = self.outputMode = output_mode + + self.output_profile = output + + def point(self, im): + return self.apply(im) + + def apply(self, im, imOut=None): + im.load() + if imOut is None: + imOut = Image.new(self.output_mode, im.size, None) + self.transform.apply(im.im.id, imOut.im.id) + imOut.info['icc_profile'] = self.output_profile.tobytes() + return imOut + + def apply_in_place(self, im): + im.load() + if im.mode != self.output_mode: + raise ValueError("mode mismatch") # wrong output mode + self.transform.apply(im.im.id, im.im.id) + im.info['icc_profile'] = self.output_profile.tobytes() + return im + + +def get_display_profile(handle=None): + """ (experimental) Fetches the profile for the current display device. + :returns: None if the profile is not known. + """ + + if sys.platform == "win32": + from PIL import ImageWin + if isinstance(handle, ImageWin.HDC): + profile = core.get_display_profile_win32(handle, 1) + else: + profile = core.get_display_profile_win32(handle or 0) + else: + try: + get = _imagingcms.get_display_profile + except AttributeError: + return None + else: + profile = get() + return ImageCmsProfile(profile) + + +# --------------------------------------------------------------------. +# pyCMS compatible layer +# --------------------------------------------------------------------. + +class PyCMSError(Exception): + + """ (pyCMS) Exception class. + This is used for all errors in the pyCMS API. """ + pass + + +def profileToProfile( + im, inputProfile, outputProfile, renderingIntent=INTENT_PERCEPTUAL, + outputMode=None, inPlace=0, flags=0): + """ + (pyCMS) Applies an ICC transformation to a given image, mapping from + inputProfile to outputProfile. + + If the input or output profiles specified are not valid filenames, a + PyCMSError will be raised. If inPlace == TRUE and outputMode != im.mode, + a PyCMSError will be raised. If an error occurs during application of + the profiles, a PyCMSError will be raised. If outputMode is not a mode + supported by the outputProfile (or by pyCMS), a PyCMSError will be + raised. + + This function applies an ICC transformation to im from inputProfile's + color space to outputProfile's color space using the specified rendering + intent to decide how to handle out-of-gamut colors. + + OutputMode can be used to specify that a color mode conversion is to + be done using these profiles, but the specified profiles must be able + to handle that mode. I.e., if converting im from RGB to CMYK using + profiles, the input profile must handle RGB data, and the output + profile must handle CMYK data. + + :param im: An open PIL image object (i.e. Image.new(...) or + Image.open(...), etc.) + :param inputProfile: String, as a valid filename path to the ICC input + profile you wish to use for this image, or a profile object + :param outputProfile: String, as a valid filename path to the ICC output + profile you wish to use for this image, or a profile object + :param renderingIntent: Integer (0-3) specifying the rendering intent you + wish to use for the transform + + INTENT_PERCEPTUAL = 0 (DEFAULT) (ImageCms.INTENT_PERCEPTUAL) + INTENT_RELATIVE_COLORIMETRIC = 1 (ImageCms.INTENT_RELATIVE_COLORIMETRIC) + INTENT_SATURATION = 2 (ImageCms.INTENT_SATURATION) + INTENT_ABSOLUTE_COLORIMETRIC = 3 (ImageCms.INTENT_ABSOLUTE_COLORIMETRIC) + + see the pyCMS documentation for details on rendering intents and what + they do. + :param outputMode: A valid PIL mode for the output image (i.e. "RGB", + "CMYK", etc.). Note: if rendering the image "inPlace", outputMode + MUST be the same mode as the input, or omitted completely. If + omitted, the outputMode will be the same as the mode of the input + image (im.mode) + :param inPlace: Boolean (1 = True, None or 0 = False). If True, the + original image is modified in-place, and None is returned. If False + (default), a new Image object is returned with the transform applied. + :param flags: Integer (0-...) specifying additional flags + :returns: Either None or a new PIL image object, depending on value of + inPlace + :exception PyCMSError: + """ + + if outputMode is None: + outputMode = im.mode + + if not isinstance(renderingIntent, int) or not (0 <= renderingIntent <= 3): + raise PyCMSError("renderingIntent must be an integer between 0 and 3") + + if not isinstance(flags, int) or not (0 <= flags <= _MAX_FLAG): + raise PyCMSError( + "flags must be an integer between 0 and %s" + _MAX_FLAG) + + try: + if not isinstance(inputProfile, ImageCmsProfile): + inputProfile = ImageCmsProfile(inputProfile) + if not isinstance(outputProfile, ImageCmsProfile): + outputProfile = ImageCmsProfile(outputProfile) + transform = ImageCmsTransform( + inputProfile, outputProfile, im.mode, outputMode, + renderingIntent, flags=flags + ) + if inPlace: + transform.apply_in_place(im) + imOut = None + else: + imOut = transform.apply(im) + except (IOError, TypeError, ValueError) as v: + raise PyCMSError(v) + + return imOut + + +def getOpenProfile(profileFilename): + """ + (pyCMS) Opens an ICC profile file. + + The PyCMSProfile object can be passed back into pyCMS for use in creating + transforms and such (as in ImageCms.buildTransformFromOpenProfiles()). + + If profileFilename is not a vaild filename for an ICC profile, a PyCMSError + will be raised. + + :param profileFilename: String, as a valid filename path to the ICC profile + you wish to open, or a file-like object. + :returns: A CmsProfile class object. + :exception PyCMSError: + """ + + try: + return ImageCmsProfile(profileFilename) + except (IOError, TypeError, ValueError) as v: + raise PyCMSError(v) + + +def buildTransform( + inputProfile, outputProfile, inMode, outMode, + renderingIntent=INTENT_PERCEPTUAL, flags=0): + """ + (pyCMS) Builds an ICC transform mapping from the inputProfile to the + outputProfile. Use applyTransform to apply the transform to a given + image. + + If the input or output profiles specified are not valid filenames, a + PyCMSError will be raised. If an error occurs during creation of the + transform, a PyCMSError will be raised. + + If inMode or outMode are not a mode supported by the outputProfile (or + by pyCMS), a PyCMSError will be raised. + + This function builds and returns an ICC transform from the inputProfile + to the outputProfile using the renderingIntent to determine what to do + with out-of-gamut colors. It will ONLY work for converting images that + are in inMode to images that are in outMode color format (PIL mode, + i.e. "RGB", "RGBA", "CMYK", etc.). + + Building the transform is a fair part of the overhead in + ImageCms.profileToProfile(), so if you're planning on converting multiple + images using the same input/output settings, this can save you time. + Once you have a transform object, it can be used with + ImageCms.applyProfile() to convert images without the need to re-compute + the lookup table for the transform. + + The reason pyCMS returns a class object rather than a handle directly + to the transform is that it needs to keep track of the PIL input/output + modes that the transform is meant for. These attributes are stored in + the "inMode" and "outMode" attributes of the object (which can be + manually overridden if you really want to, but I don't know of any + time that would be of use, or would even work). + + :param inputProfile: String, as a valid filename path to the ICC input + profile you wish to use for this transform, or a profile object + :param outputProfile: String, as a valid filename path to the ICC output + profile you wish to use for this transform, or a profile object + :param inMode: String, as a valid PIL mode that the appropriate profile + also supports (i.e. "RGB", "RGBA", "CMYK", etc.) + :param outMode: String, as a valid PIL mode that the appropriate profile + also supports (i.e. "RGB", "RGBA", "CMYK", etc.) + :param renderingIntent: Integer (0-3) specifying the rendering intent you + wish to use for the transform + + INTENT_PERCEPTUAL = 0 (DEFAULT) (ImageCms.INTENT_PERCEPTUAL) + INTENT_RELATIVE_COLORIMETRIC = 1 (ImageCms.INTENT_RELATIVE_COLORIMETRIC) + INTENT_SATURATION = 2 (ImageCms.INTENT_SATURATION) + INTENT_ABSOLUTE_COLORIMETRIC = 3 (ImageCms.INTENT_ABSOLUTE_COLORIMETRIC) + + see the pyCMS documentation for details on rendering intents and what + they do. + :param flags: Integer (0-...) specifying additional flags + :returns: A CmsTransform class object. + :exception PyCMSError: + """ + + if not isinstance(renderingIntent, int) or not (0 <= renderingIntent <= 3): + raise PyCMSError("renderingIntent must be an integer between 0 and 3") + + if not isinstance(flags, int) or not (0 <= flags <= _MAX_FLAG): + raise PyCMSError( + "flags must be an integer between 0 and %s" + _MAX_FLAG) + + try: + if not isinstance(inputProfile, ImageCmsProfile): + inputProfile = ImageCmsProfile(inputProfile) + if not isinstance(outputProfile, ImageCmsProfile): + outputProfile = ImageCmsProfile(outputProfile) + return ImageCmsTransform( + inputProfile, outputProfile, inMode, outMode, + renderingIntent, flags=flags) + except (IOError, TypeError, ValueError) as v: + raise PyCMSError(v) + + +def buildProofTransform( + inputProfile, outputProfile, proofProfile, inMode, outMode, + renderingIntent=INTENT_PERCEPTUAL, + proofRenderingIntent=INTENT_ABSOLUTE_COLORIMETRIC, + flags=FLAGS["SOFTPROOFING"]): + """ + (pyCMS) Builds an ICC transform mapping from the inputProfile to the + outputProfile, but tries to simulate the result that would be + obtained on the proofProfile device. + + If the input, output, or proof profiles specified are not valid + filenames, a PyCMSError will be raised. + + If an error occurs during creation of the transform, a PyCMSError will + be raised. + + If inMode or outMode are not a mode supported by the outputProfile + (or by pyCMS), a PyCMSError will be raised. + + This function builds and returns an ICC transform from the inputProfile + to the outputProfile, but tries to simulate the result that would be + obtained on the proofProfile device using renderingIntent and + proofRenderingIntent to determine what to do with out-of-gamut + colors. This is known as "soft-proofing". It will ONLY work for + converting images that are in inMode to images that are in outMode + color format (PIL mode, i.e. "RGB", "RGBA", "CMYK", etc.). + + Usage of the resulting transform object is exactly the same as with + ImageCms.buildTransform(). + + Proof profiling is generally used when using an output device to get a + good idea of what the final printed/displayed image would look like on + the proofProfile device when it's quicker and easier to use the + output device for judging color. Generally, this means that the + output device is a monitor, or a dye-sub printer (etc.), and the simulated + device is something more expensive, complicated, or time consuming + (making it difficult to make a real print for color judgement purposes). + + Soft-proofing basically functions by adjusting the colors on the + output device to match the colors of the device being simulated. However, + when the simulated device has a much wider gamut than the output + device, you may obtain marginal results. + + :param inputProfile: String, as a valid filename path to the ICC input + profile you wish to use for this transform, or a profile object + :param outputProfile: String, as a valid filename path to the ICC output + (monitor, usually) profile you wish to use for this transform, or a + profile object + :param proofProfile: String, as a valid filename path to the ICC proof + profile you wish to use for this transform, or a profile object + :param inMode: String, as a valid PIL mode that the appropriate profile + also supports (i.e. "RGB", "RGBA", "CMYK", etc.) + :param outMode: String, as a valid PIL mode that the appropriate profile + also supports (i.e. "RGB", "RGBA", "CMYK", etc.) + :param renderingIntent: Integer (0-3) specifying the rendering intent you + wish to use for the input->proof (simulated) transform + + INTENT_PERCEPTUAL = 0 (DEFAULT) (ImageCms.INTENT_PERCEPTUAL) + INTENT_RELATIVE_COLORIMETRIC = 1 (ImageCms.INTENT_RELATIVE_COLORIMETRIC) + INTENT_SATURATION = 2 (ImageCms.INTENT_SATURATION) + INTENT_ABSOLUTE_COLORIMETRIC = 3 (ImageCms.INTENT_ABSOLUTE_COLORIMETRIC) + + see the pyCMS documentation for details on rendering intents and what + they do. + :param proofRenderingIntent: Integer (0-3) specifying the rendering intent you + wish to use for proof->output transform + + INTENT_PERCEPTUAL = 0 (DEFAULT) (ImageCms.INTENT_PERCEPTUAL) + INTENT_RELATIVE_COLORIMETRIC = 1 (ImageCms.INTENT_RELATIVE_COLORIMETRIC) + INTENT_SATURATION = 2 (ImageCms.INTENT_SATURATION) + INTENT_ABSOLUTE_COLORIMETRIC = 3 (ImageCms.INTENT_ABSOLUTE_COLORIMETRIC) + + see the pyCMS documentation for details on rendering intents and what + they do. + :param flags: Integer (0-...) specifying additional flags + :returns: A CmsTransform class object. + :exception PyCMSError: + """ + + if not isinstance(renderingIntent, int) or not (0 <= renderingIntent <= 3): + raise PyCMSError("renderingIntent must be an integer between 0 and 3") + + if not isinstance(flags, int) or not (0 <= flags <= _MAX_FLAG): + raise PyCMSError( + "flags must be an integer between 0 and %s" + _MAX_FLAG) + + try: + if not isinstance(inputProfile, ImageCmsProfile): + inputProfile = ImageCmsProfile(inputProfile) + if not isinstance(outputProfile, ImageCmsProfile): + outputProfile = ImageCmsProfile(outputProfile) + if not isinstance(proofProfile, ImageCmsProfile): + proofProfile = ImageCmsProfile(proofProfile) + return ImageCmsTransform( + inputProfile, outputProfile, inMode, outMode, renderingIntent, + proofProfile, proofRenderingIntent, flags) + except (IOError, TypeError, ValueError) as v: + raise PyCMSError(v) + +buildTransformFromOpenProfiles = buildTransform +buildProofTransformFromOpenProfiles = buildProofTransform + + +def applyTransform(im, transform, inPlace=0): + """ + (pyCMS) Applies a transform to a given image. + + If im.mode != transform.inMode, a PyCMSError is raised. + + If inPlace == TRUE and transform.inMode != transform.outMode, a + PyCMSError is raised. + + If im.mode, transfer.inMode, or transfer.outMode is not supported by + pyCMSdll or the profiles you used for the transform, a PyCMSError is + raised. + + If an error occurs while the transform is being applied, a PyCMSError + is raised. + + This function applies a pre-calculated transform (from + ImageCms.buildTransform() or ImageCms.buildTransformFromOpenProfiles()) + to an image. The transform can be used for multiple images, saving + considerable calculation time if doing the same conversion multiple times. + + If you want to modify im in-place instead of receiving a new image as + the return value, set inPlace to TRUE. This can only be done if + transform.inMode and transform.outMode are the same, because we can't + change the mode in-place (the buffer sizes for some modes are + different). The default behavior is to return a new Image object of + the same dimensions in mode transform.outMode. + + :param im: A PIL Image object, and im.mode must be the same as the inMode + supported by the transform. + :param transform: A valid CmsTransform class object + :param inPlace: Bool (1 == True, 0 or None == False). If True, im is + modified in place and None is returned, if False, a new Image object + with the transform applied is returned (and im is not changed). The + default is False. + :returns: Either None, or a new PIL Image object, depending on the value of + inPlace. The profile will be returned in the image's info['icc_profile']. + :exception PyCMSError: + """ + + try: + if inPlace: + transform.apply_in_place(im) + imOut = None + else: + imOut = transform.apply(im) + except (TypeError, ValueError) as v: + raise PyCMSError(v) + + return imOut + + +def createProfile(colorSpace, colorTemp=-1): + """ + (pyCMS) Creates a profile. + + If colorSpace not in ["LAB", "XYZ", "sRGB"], a PyCMSError is raised + + If using LAB and colorTemp != a positive integer, a PyCMSError is raised. + + If an error occurs while creating the profile, a PyCMSError is raised. + + Use this function to create common profiles on-the-fly instead of + having to supply a profile on disk and knowing the path to it. It + returns a normal CmsProfile object that can be passed to + ImageCms.buildTransformFromOpenProfiles() to create a transform to apply + to images. + + :param colorSpace: String, the color space of the profile you wish to + create. + Currently only "LAB", "XYZ", and "sRGB" are supported. + :param colorTemp: Positive integer for the white point for the profile, in + degrees Kelvin (i.e. 5000, 6500, 9600, etc.). The default is for D50 + illuminant if omitted (5000k). colorTemp is ONLY applied to LAB + profiles, and is ignored for XYZ and sRGB. + :returns: A CmsProfile class object + :exception PyCMSError: + """ + + if colorSpace not in ["LAB", "XYZ", "sRGB"]: + raise PyCMSError( + "Color space not supported for on-the-fly profile creation (%s)" + % colorSpace) + + if colorSpace == "LAB": + try: + colorTemp = float(colorTemp) + except: + raise PyCMSError( + "Color temperature must be numeric, \"%s\" not valid" + % colorTemp) + + try: + return core.createProfile(colorSpace, colorTemp) + except (TypeError, ValueError) as v: + raise PyCMSError(v) + + +def getProfileName(profile): + """ + + (pyCMS) Gets the internal product name for the given profile. + + If profile isn't a valid CmsProfile object or filename to a profile, + a PyCMSError is raised If an error occurs while trying to obtain the + name tag, a PyCMSError is raised. + + Use this function to obtain the INTERNAL name of the profile (stored + in an ICC tag in the profile itself), usually the one used when the + profile was originally created. Sometimes this tag also contains + additional information supplied by the creator. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: A string containing the internal name of the profile as stored + in an ICC tag. + :exception PyCMSError: + """ + + try: + # add an extra newline to preserve pyCMS compatibility + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + # do it in python, not c. + # // name was "%s - %s" (model, manufacturer) || Description , + # // but if the Model and Manufacturer were the same or the model + # // was long, Just the model, in 1.x + model = profile.profile.product_model + manufacturer = profile.profile.product_manufacturer + + if not (model or manufacturer): + return profile.profile.product_description + "\n" + if not manufacturer or len(model) > 30: + return model + "\n" + return "%s - %s\n" % (model, manufacturer) + + except (AttributeError, IOError, TypeError, ValueError) as v: + raise PyCMSError(v) + + +def getProfileInfo(profile): + """ + (pyCMS) Gets the internal product information for the given profile. + + If profile isn't a valid CmsProfile object or filename to a profile, + a PyCMSError is raised. + + If an error occurs while trying to obtain the info tag, a PyCMSError + is raised + + Use this function to obtain the information stored in the profile's + info tag. This often contains details about the profile, and how it + was created, as supplied by the creator. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: A string containing the internal profile information stored in + an ICC tag. + :exception PyCMSError: + """ + + try: + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + # add an extra newline to preserve pyCMS compatibility + # Python, not C. the white point bits weren't working well, + # so skipping. + # // info was description \r\n\r\n copyright \r\n\r\n K007 tag \r\n\r\n whitepoint + description = profile.profile.product_description + cpright = profile.profile.product_copyright + arr = [] + for elt in (description, cpright): + if elt: + arr.append(elt) + return "\r\n\r\n".join(arr) + "\r\n\r\n" + + except (AttributeError, IOError, TypeError, ValueError) as v: + raise PyCMSError(v) + + +def getProfileCopyright(profile): + """ + (pyCMS) Gets the copyright for the given profile. + + If profile isn't a valid CmsProfile object or filename to a profile, + a PyCMSError is raised. + + If an error occurs while trying to obtain the copyright tag, a PyCMSError + is raised + + Use this function to obtain the information stored in the profile's + copyright tag. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: A string containing the internal profile information stored in + an ICC tag. + :exception PyCMSError: + """ + try: + # add an extra newline to preserve pyCMS compatibility + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + return profile.profile.product_copyright + "\n" + except (AttributeError, IOError, TypeError, ValueError) as v: + raise PyCMSError(v) + + +def getProfileManufacturer(profile): + """ + (pyCMS) Gets the manufacturer for the given profile. + + If profile isn't a valid CmsProfile object or filename to a profile, + a PyCMSError is raised. + + If an error occurs while trying to obtain the manufacturer tag, a + PyCMSError is raised + + Use this function to obtain the information stored in the profile's + manufacturer tag. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: A string containing the internal profile information stored in + an ICC tag. + :exception PyCMSError: + """ + try: + # add an extra newline to preserve pyCMS compatibility + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + return profile.profile.product_manufacturer + "\n" + except (AttributeError, IOError, TypeError, ValueError) as v: + raise PyCMSError(v) + + +def getProfileModel(profile): + """ + (pyCMS) Gets the model for the given profile. + + If profile isn't a valid CmsProfile object or filename to a profile, + a PyCMSError is raised. + + If an error occurs while trying to obtain the model tag, a PyCMSError + is raised + + Use this function to obtain the information stored in the profile's + model tag. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: A string containing the internal profile information stored in + an ICC tag. + :exception PyCMSError: + """ + + try: + # add an extra newline to preserve pyCMS compatibility + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + return profile.profile.product_model + "\n" + except (AttributeError, IOError, TypeError, ValueError) as v: + raise PyCMSError(v) + + +def getProfileDescription(profile): + """ + (pyCMS) Gets the description for the given profile. + + If profile isn't a valid CmsProfile object or filename to a profile, + a PyCMSError is raised. + + If an error occurs while trying to obtain the description tag, a PyCMSError + is raised + + Use this function to obtain the information stored in the profile's + description tag. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: A string containing the internal profile information stored in an + ICC tag. + :exception PyCMSError: + """ + + try: + # add an extra newline to preserve pyCMS compatibility + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + return profile.profile.product_description + "\n" + except (AttributeError, IOError, TypeError, ValueError) as v: + raise PyCMSError(v) + + +def getDefaultIntent(profile): + """ + (pyCMS) Gets the default intent name for the given profile. + + If profile isn't a valid CmsProfile object or filename to a profile, + a PyCMSError is raised. + + If an error occurs while trying to obtain the default intent, a + PyCMSError is raised. + + Use this function to determine the default (and usually best optimized) + rendering intent for this profile. Most profiles support multiple + rendering intents, but are intended mostly for one type of conversion. + If you wish to use a different intent than returned, use + ImageCms.isIntentSupported() to verify it will work first. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: Integer 0-3 specifying the default rendering intent for this + profile. + + INTENT_PERCEPTUAL = 0 (DEFAULT) (ImageCms.INTENT_PERCEPTUAL) + INTENT_RELATIVE_COLORIMETRIC = 1 (ImageCms.INTENT_RELATIVE_COLORIMETRIC) + INTENT_SATURATION = 2 (ImageCms.INTENT_SATURATION) + INTENT_ABSOLUTE_COLORIMETRIC = 3 (ImageCms.INTENT_ABSOLUTE_COLORIMETRIC) + + see the pyCMS documentation for details on rendering intents and what + they do. + :exception PyCMSError: + """ + + try: + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + return profile.profile.rendering_intent + except (AttributeError, IOError, TypeError, ValueError) as v: + raise PyCMSError(v) + + +def isIntentSupported(profile, intent, direction): + """ + (pyCMS) Checks if a given intent is supported. + + Use this function to verify that you can use your desired + renderingIntent with profile, and that profile can be used for the + input/output/proof profile as you desire. + + Some profiles are created specifically for one "direction", can cannot + be used for others. Some profiles can only be used for certain + rendering intents... so it's best to either verify this before trying + to create a transform with them (using this function), or catch the + potential PyCMSError that will occur if they don't support the modes + you select. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :param intent: Integer (0-3) specifying the rendering intent you wish to + use with this profile + + INTENT_PERCEPTUAL = 0 (DEFAULT) (ImageCms.INTENT_PERCEPTUAL) + INTENT_RELATIVE_COLORIMETRIC = 1 (ImageCms.INTENT_RELATIVE_COLORIMETRIC) + INTENT_SATURATION = 2 (ImageCms.INTENT_SATURATION) + INTENT_ABSOLUTE_COLORIMETRIC = 3 (ImageCms.INTENT_ABSOLUTE_COLORIMETRIC) + + see the pyCMS documentation for details on rendering intents and what + they do. + :param direction: Integer specifying if the profile is to be used for input, + output, or proof + + INPUT = 0 (or use ImageCms.DIRECTION_INPUT) + OUTPUT = 1 (or use ImageCms.DIRECTION_OUTPUT) + PROOF = 2 (or use ImageCms.DIRECTION_PROOF) + + :returns: 1 if the intent/direction are supported, -1 if they are not. + :exception PyCMSError: + """ + + try: + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + # FIXME: I get different results for the same data w. different + # compilers. Bug in LittleCMS or in the binding? + if profile.profile.is_intent_supported(intent, direction): + return 1 + else: + return -1 + except (AttributeError, IOError, TypeError, ValueError) as v: + raise PyCMSError(v) + + +def versions(): + """ + (pyCMS) Fetches versions. + """ + + return ( + VERSION, core.littlecms_version, + sys.version.split()[0], Image.VERSION + ) + +# -------------------------------------------------------------------- + +if __name__ == "__main__": + # create a cheap manual from the __doc__ strings for the functions above + + print(__doc__) + + for f in dir(sys.modules[__name__]): + doc = None + try: + exec("doc = %s.__doc__" % (f)) + if "pyCMS" in doc: + # so we don't get the __doc__ string for imported modules + print("=" * 80) + print("%s" % f) + print(doc) + except (AttributeError, TypeError): + pass + +# End of file diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageColor.py b/server/www/packages/packages-darwin/x64/PIL/ImageColor.py new file mode 100644 index 0000000..fc95e6d --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageColor.py @@ -0,0 +1,279 @@ +# +# The Python Imaging Library +# $Id$ +# +# map CSS3-style colour description strings to RGB +# +# History: +# 2002-10-24 fl Added support for CSS-style color strings +# 2002-12-15 fl Added RGBA support +# 2004-03-27 fl Fixed remaining int() problems for Python 1.5.2 +# 2004-07-19 fl Fixed gray/grey spelling issues +# 2009-03-05 fl Fixed rounding error in grayscale calculation +# +# Copyright (c) 2002-2004 by Secret Labs AB +# Copyright (c) 2002-2004 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image +import re + + +def getrgb(color): + """ + Convert a color string to an RGB tuple. If the string cannot be parsed, + this function raises a :py:exc:`ValueError` exception. + + .. versionadded:: 1.1.4 + + :param color: A color string + :return: ``(red, green, blue[, alpha])`` + """ + try: + rgb = colormap[color] + except KeyError: + try: + # fall back on case-insensitive lookup + rgb = colormap[color.lower()] + except KeyError: + rgb = None + # found color in cache + if rgb: + if isinstance(rgb, tuple): + return rgb + colormap[color] = rgb = getrgb(rgb) + return rgb + # check for known string formats + m = re.match("#\w\w\w$", color) + if m: + return ( + int(color[1]*2, 16), + int(color[2]*2, 16), + int(color[3]*2, 16) + ) + m = re.match("#\w\w\w\w\w\w$", color) + if m: + return ( + int(color[1:3], 16), + int(color[3:5], 16), + int(color[5:7], 16) + ) + m = re.match("rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$", color) + if m: + return ( + int(m.group(1)), + int(m.group(2)), + int(m.group(3)) + ) + m = re.match("rgb\(\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*\)$", color) + if m: + return ( + int((int(m.group(1)) * 255) / 100.0 + 0.5), + int((int(m.group(2)) * 255) / 100.0 + 0.5), + int((int(m.group(3)) * 255) / 100.0 + 0.5) + ) + m = re.match("hsl\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*\)$", color) + if m: + from colorsys import hls_to_rgb + rgb = hls_to_rgb( + float(m.group(1)) / 360.0, + float(m.group(3)) / 100.0, + float(m.group(2)) / 100.0, + ) + return ( + int(rgb[0] * 255 + 0.5), + int(rgb[1] * 255 + 0.5), + int(rgb[2] * 255 + 0.5) + ) + m = re.match("rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$", + color) + if m: + return ( + int(m.group(1)), + int(m.group(2)), + int(m.group(3)), + int(m.group(4)) + ) + raise ValueError("unknown color specifier: %r" % color) + + +def getcolor(color, mode): + """ + Same as :py:func:`~PIL.ImageColor.getrgb`, but converts the RGB value to a + greyscale value if the mode is not color or a palette image. If the string + cannot be parsed, this function raises a :py:exc:`ValueError` exception. + + .. versionadded:: 1.1.4 + + :param color: A color string + :return: ``(graylevel [, alpha]) or (red, green, blue[, alpha])`` + """ + # same as getrgb, but converts the result to the given mode + color, alpha = getrgb(color), 255 + if len(color) == 4: + color, alpha = color[0:3], color[3] + + if Image.getmodebase(mode) == "L": + r, g, b = color + color = (r*299 + g*587 + b*114)//1000 + if mode[-1] == 'A': + return (color, alpha) + else: + if mode[-1] == 'A': + return color + (alpha,) + return color + +colormap = { + # X11 colour table (from "CSS3 module: Color working draft"), with + # gray/grey spelling issues fixed. This is a superset of HTML 4.0 + # colour names used in CSS 1. + "aliceblue": "#f0f8ff", + "antiquewhite": "#faebd7", + "aqua": "#00ffff", + "aquamarine": "#7fffd4", + "azure": "#f0ffff", + "beige": "#f5f5dc", + "bisque": "#ffe4c4", + "black": "#000000", + "blanchedalmond": "#ffebcd", + "blue": "#0000ff", + "blueviolet": "#8a2be2", + "brown": "#a52a2a", + "burlywood": "#deb887", + "cadetblue": "#5f9ea0", + "chartreuse": "#7fff00", + "chocolate": "#d2691e", + "coral": "#ff7f50", + "cornflowerblue": "#6495ed", + "cornsilk": "#fff8dc", + "crimson": "#dc143c", + "cyan": "#00ffff", + "darkblue": "#00008b", + "darkcyan": "#008b8b", + "darkgoldenrod": "#b8860b", + "darkgray": "#a9a9a9", + "darkgrey": "#a9a9a9", + "darkgreen": "#006400", + "darkkhaki": "#bdb76b", + "darkmagenta": "#8b008b", + "darkolivegreen": "#556b2f", + "darkorange": "#ff8c00", + "darkorchid": "#9932cc", + "darkred": "#8b0000", + "darksalmon": "#e9967a", + "darkseagreen": "#8fbc8f", + "darkslateblue": "#483d8b", + "darkslategray": "#2f4f4f", + "darkslategrey": "#2f4f4f", + "darkturquoise": "#00ced1", + "darkviolet": "#9400d3", + "deeppink": "#ff1493", + "deepskyblue": "#00bfff", + "dimgray": "#696969", + "dimgrey": "#696969", + "dodgerblue": "#1e90ff", + "firebrick": "#b22222", + "floralwhite": "#fffaf0", + "forestgreen": "#228b22", + "fuchsia": "#ff00ff", + "gainsboro": "#dcdcdc", + "ghostwhite": "#f8f8ff", + "gold": "#ffd700", + "goldenrod": "#daa520", + "gray": "#808080", + "grey": "#808080", + "green": "#008000", + "greenyellow": "#adff2f", + "honeydew": "#f0fff0", + "hotpink": "#ff69b4", + "indianred": "#cd5c5c", + "indigo": "#4b0082", + "ivory": "#fffff0", + "khaki": "#f0e68c", + "lavender": "#e6e6fa", + "lavenderblush": "#fff0f5", + "lawngreen": "#7cfc00", + "lemonchiffon": "#fffacd", + "lightblue": "#add8e6", + "lightcoral": "#f08080", + "lightcyan": "#e0ffff", + "lightgoldenrodyellow": "#fafad2", + "lightgreen": "#90ee90", + "lightgray": "#d3d3d3", + "lightgrey": "#d3d3d3", + "lightpink": "#ffb6c1", + "lightsalmon": "#ffa07a", + "lightseagreen": "#20b2aa", + "lightskyblue": "#87cefa", + "lightslategray": "#778899", + "lightslategrey": "#778899", + "lightsteelblue": "#b0c4de", + "lightyellow": "#ffffe0", + "lime": "#00ff00", + "limegreen": "#32cd32", + "linen": "#faf0e6", + "magenta": "#ff00ff", + "maroon": "#800000", + "mediumaquamarine": "#66cdaa", + "mediumblue": "#0000cd", + "mediumorchid": "#ba55d3", + "mediumpurple": "#9370db", + "mediumseagreen": "#3cb371", + "mediumslateblue": "#7b68ee", + "mediumspringgreen": "#00fa9a", + "mediumturquoise": "#48d1cc", + "mediumvioletred": "#c71585", + "midnightblue": "#191970", + "mintcream": "#f5fffa", + "mistyrose": "#ffe4e1", + "moccasin": "#ffe4b5", + "navajowhite": "#ffdead", + "navy": "#000080", + "oldlace": "#fdf5e6", + "olive": "#808000", + "olivedrab": "#6b8e23", + "orange": "#ffa500", + "orangered": "#ff4500", + "orchid": "#da70d6", + "palegoldenrod": "#eee8aa", + "palegreen": "#98fb98", + "paleturquoise": "#afeeee", + "palevioletred": "#db7093", + "papayawhip": "#ffefd5", + "peachpuff": "#ffdab9", + "peru": "#cd853f", + "pink": "#ffc0cb", + "plum": "#dda0dd", + "powderblue": "#b0e0e6", + "purple": "#800080", + "red": "#ff0000", + "rosybrown": "#bc8f8f", + "royalblue": "#4169e1", + "saddlebrown": "#8b4513", + "salmon": "#fa8072", + "sandybrown": "#f4a460", + "seagreen": "#2e8b57", + "seashell": "#fff5ee", + "sienna": "#a0522d", + "silver": "#c0c0c0", + "skyblue": "#87ceeb", + "slateblue": "#6a5acd", + "slategray": "#708090", + "slategrey": "#708090", + "snow": "#fffafa", + "springgreen": "#00ff7f", + "steelblue": "#4682b4", + "tan": "#d2b48c", + "teal": "#008080", + "thistle": "#d8bfd8", + "tomato": "#ff6347", + "turquoise": "#40e0d0", + "violet": "#ee82ee", + "wheat": "#f5deb3", + "white": "#ffffff", + "whitesmoke": "#f5f5f5", + "yellow": "#ffff00", + "yellowgreen": "#9acd32", +} diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageDraw.py b/server/www/packages/packages-darwin/x64/PIL/ImageDraw.py new file mode 100644 index 0000000..f5b72ef --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageDraw.py @@ -0,0 +1,407 @@ +# +# The Python Imaging Library +# $Id$ +# +# drawing interface operations +# +# History: +# 1996-04-13 fl Created (experimental) +# 1996-08-07 fl Filled polygons, ellipses. +# 1996-08-13 fl Added text support +# 1998-06-28 fl Handle I and F images +# 1998-12-29 fl Added arc; use arc primitive to draw ellipses +# 1999-01-10 fl Added shape stuff (experimental) +# 1999-02-06 fl Added bitmap support +# 1999-02-11 fl Changed all primitives to take options +# 1999-02-20 fl Fixed backwards compatibility +# 2000-10-12 fl Copy on write, when necessary +# 2001-02-18 fl Use default ink for bitmap/text also in fill mode +# 2002-10-24 fl Added support for CSS-style color strings +# 2002-12-10 fl Added experimental support for RGBA-on-RGB drawing +# 2002-12-11 fl Refactored low-level drawing API (work in progress) +# 2004-08-26 fl Made Draw() a factory function, added getdraw() support +# 2004-09-04 fl Added width support to line primitive +# 2004-09-10 fl Added font mode handling +# 2006-06-19 fl Added font bearing support (getmask2) +# +# Copyright (c) 1997-2006 by Secret Labs AB +# Copyright (c) 1996-2006 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +import numbers +import warnings + +from PIL import Image, ImageColor +from PIL._util import isStringType + +## +# A simple 2D drawing interface for PIL images. +#

    +# Application code should use the Draw factory, instead of +# directly. + + +class ImageDraw(object): + + ## + # Create a drawing instance. + # + # @param im The image to draw in. + # @param mode Optional mode to use for color values. For RGB + # images, this argument can be RGB or RGBA (to blend the + # drawing into the image). For all other modes, this argument + # must be the same as the image mode. If omitted, the mode + # defaults to the mode of the image. + + def __init__(self, im, mode=None): + im.load() + if im.readonly: + im._copy() # make it writeable + blend = 0 + if mode is None: + mode = im.mode + if mode != im.mode: + if mode == "RGBA" and im.mode == "RGB": + blend = 1 + else: + raise ValueError("mode mismatch") + if mode == "P": + self.palette = im.palette + else: + self.palette = None + self.im = im.im + self.draw = Image.core.draw(self.im, blend) + self.mode = mode + if mode in ("I", "F"): + self.ink = self.draw.draw_ink(1, mode) + else: + self.ink = self.draw.draw_ink(-1, mode) + if mode in ("1", "P", "I", "F"): + # FIXME: fix Fill2 to properly support matte for I+F images + self.fontmode = "1" + else: + self.fontmode = "L" # aliasing is okay for other modes + self.fill = 0 + self.font = None + + def setink(self, ink): + raise Exception("setink() has been removed. " + + "Please use keyword arguments instead.") + + def setfill(self, onoff): + raise Exception("setfill() has been removed. " + + "Please use keyword arguments instead.") + + def setfont(self, font): + warnings.warn("setfont() is deprecated. " + + "Please set the attribute directly instead.") + # compatibility + self.font = font + + ## + # Get the current default font. + + def getfont(self): + if not self.font: + # FIXME: should add a font repository + from PIL import ImageFont + self.font = ImageFont.load_default() + return self.font + + def _getink(self, ink, fill=None): + if ink is None and fill is None: + if self.fill: + fill = self.ink + else: + ink = self.ink + else: + if ink is not None: + if isStringType(ink): + ink = ImageColor.getcolor(ink, self.mode) + if self.palette and not isinstance(ink, numbers.Number): + ink = self.palette.getcolor(ink) + ink = self.draw.draw_ink(ink, self.mode) + if fill is not None: + if isStringType(fill): + fill = ImageColor.getcolor(fill, self.mode) + if self.palette and not isinstance(fill, numbers.Number): + fill = self.palette.getcolor(fill) + fill = self.draw.draw_ink(fill, self.mode) + return ink, fill + + ## + # Draw an arc. + + def arc(self, xy, start, end, fill=None): + ink, fill = self._getink(fill) + if ink is not None: + self.draw.draw_arc(xy, start, end, ink) + + ## + # Draw a bitmap. + + def bitmap(self, xy, bitmap, fill=None): + bitmap.load() + ink, fill = self._getink(fill) + if ink is None: + ink = fill + if ink is not None: + self.draw.draw_bitmap(xy, bitmap.im, ink) + + ## + # Draw a chord. + + def chord(self, xy, start, end, fill=None, outline=None): + ink, fill = self._getink(outline, fill) + if fill is not None: + self.draw.draw_chord(xy, start, end, fill, 1) + if ink is not None: + self.draw.draw_chord(xy, start, end, ink, 0) + + ## + # Draw an ellipse. + + def ellipse(self, xy, fill=None, outline=None): + ink, fill = self._getink(outline, fill) + if fill is not None: + self.draw.draw_ellipse(xy, fill, 1) + if ink is not None: + self.draw.draw_ellipse(xy, ink, 0) + + ## + # Draw a line, or a connected sequence of line segments. + + def line(self, xy, fill=None, width=0): + ink, fill = self._getink(fill) + if ink is not None: + self.draw.draw_lines(xy, ink, width) + + ## + # (Experimental) Draw a shape. + + def shape(self, shape, fill=None, outline=None): + # experimental + shape.close() + ink, fill = self._getink(outline, fill) + if fill is not None: + self.draw.draw_outline(shape, fill, 1) + if ink is not None: + self.draw.draw_outline(shape, ink, 0) + + ## + # Draw a pieslice. + + def pieslice(self, xy, start, end, fill=None, outline=None): + ink, fill = self._getink(outline, fill) + if fill is not None: + self.draw.draw_pieslice(xy, start, end, fill, 1) + if ink is not None: + self.draw.draw_pieslice(xy, start, end, ink, 0) + + ## + # Draw one or more individual pixels. + + def point(self, xy, fill=None): + ink, fill = self._getink(fill) + if ink is not None: + self.draw.draw_points(xy, ink) + + ## + # Draw a polygon. + + def polygon(self, xy, fill=None, outline=None): + ink, fill = self._getink(outline, fill) + if fill is not None: + self.draw.draw_polygon(xy, fill, 1) + if ink is not None: + self.draw.draw_polygon(xy, ink, 0) + + ## + # Draw a rectangle. + + def rectangle(self, xy, fill=None, outline=None): + ink, fill = self._getink(outline, fill) + if fill is not None: + self.draw.draw_rectangle(xy, fill, 1) + if ink is not None: + self.draw.draw_rectangle(xy, ink, 0) + + ## + # Draw text. + + def _multiline_check(self, text): + split_character = "\n" if isinstance(text, type("")) else b"\n" + + return split_character in text + + def _multiline_split(self, text): + split_character = "\n" if isinstance(text, type("")) else b"\n" + + return text.split(split_character) + + def text(self, xy, text, fill=None, font=None, anchor=None): + if self._multiline_check(text): + return self.multiline_text(xy, text, fill, font, anchor) + + ink, fill = self._getink(fill) + if font is None: + font = self.getfont() + if ink is None: + ink = fill + if ink is not None: + try: + mask, offset = font.getmask2(text, self.fontmode) + xy = xy[0] + offset[0], xy[1] + offset[1] + except AttributeError: + try: + mask = font.getmask(text, self.fontmode) + except TypeError: + mask = font.getmask(text) + self.draw.draw_bitmap(xy, mask, ink) + + def multiline_text(self, xy, text, fill=None, font=None, anchor=None, + spacing=4, align="left"): + widths = [] + max_width = 0 + lines = self._multiline_split(text) + line_spacing = self.textsize('A', font=font)[1] + spacing + for line in lines: + line_width, line_height = self.textsize(line, font) + widths.append(line_width) + max_width = max(max_width, line_width) + left, top = xy + for idx, line in enumerate(lines): + if align == "left": + pass # left = x + elif align == "center": + left += (max_width - widths[idx]) / 2.0 + elif align == "right": + left += (max_width - widths[idx]) + else: + assert False, 'align must be "left", "center" or "right"' + self.text((left, top), line, fill, font, anchor) + top += line_spacing + left = xy[0] + + ## + # Get the size of a given string, in pixels. + + def textsize(self, text, font=None): + if self._multiline_check(text): + return self.multiline_textsize(text, font) + + if font is None: + font = self.getfont() + return font.getsize(text) + + def multiline_textsize(self, text, font=None, spacing=4): + max_width = 0 + lines = self._multiline_split(text) + line_spacing = self.textsize('A', font=font)[1] + spacing + for line in lines: + line_width, line_height = self.textsize(line, font) + max_width = max(max_width, line_width) + return max_width, len(lines)*line_spacing + + +## +# A simple 2D drawing interface for PIL images. +# +# @param im The image to draw in. +# @param mode Optional mode to use for color values. For RGB +# images, this argument can be RGB or RGBA (to blend the +# drawing into the image). For all other modes, this argument +# must be the same as the image mode. If omitted, the mode +# defaults to the mode of the image. + +def Draw(im, mode=None): + try: + return im.getdraw(mode) + except AttributeError: + return ImageDraw(im, mode) + +# experimental access to the outline API +try: + Outline = Image.core.outline +except AttributeError: + Outline = None + + +## +# (Experimental) A more advanced 2D drawing interface for PIL images, +# based on the WCK interface. +# +# @param im The image to draw in. +# @param hints An optional list of hints. +# @return A (drawing context, drawing resource factory) tuple. + +def getdraw(im=None, hints=None): + # FIXME: this needs more work! + # FIXME: come up with a better 'hints' scheme. + handler = None + if not hints or "nicest" in hints: + try: + from PIL import _imagingagg as handler + except ImportError: + pass + if handler is None: + from PIL import ImageDraw2 as handler + if im: + im = handler.Draw(im) + return im, handler + + +## +# (experimental) Fills a bounded region with a given color. +# +# @param image Target image. +# @param xy Seed position (a 2-item coordinate tuple). +# @param value Fill color. +# @param border Optional border value. If given, the region consists of +# pixels with a color different from the border color. If not given, +# the region consists of pixels having the same color as the seed +# pixel. + +def floodfill(image, xy, value, border=None): + "Fill bounded region." + # based on an implementation by Eric S. Raymond + pixel = image.load() + x, y = xy + try: + background = pixel[x, y] + if background == value: + return # seed point already has fill color + pixel[x, y] = value + except IndexError: + return # seed point outside image + edge = [(x, y)] + if border is None: + while edge: + newedge = [] + for (x, y) in edge: + for (s, t) in ((x+1, y), (x-1, y), (x, y+1), (x, y-1)): + try: + p = pixel[s, t] + except IndexError: + pass + else: + if p == background: + pixel[s, t] = value + newedge.append((s, t)) + edge = newedge + else: + while edge: + newedge = [] + for (x, y) in edge: + for (s, t) in ((x+1, y), (x-1, y), (x, y+1), (x, y-1)): + try: + p = pixel[s, t] + except IndexError: + pass + else: + if p != value and p != border: + pixel[s, t] = value + newedge.append((s, t)) + edge = newedge diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageDraw2.py b/server/www/packages/packages-darwin/x64/PIL/ImageDraw2.py new file mode 100644 index 0000000..62ee116 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageDraw2.py @@ -0,0 +1,111 @@ +# +# The Python Imaging Library +# $Id$ +# +# WCK-style drawing interface operations +# +# History: +# 2003-12-07 fl created +# 2005-05-15 fl updated; added to PIL as ImageDraw2 +# 2005-05-15 fl added text support +# 2005-05-20 fl added arc/chord/pieslice support +# +# Copyright (c) 2003-2005 by Secret Labs AB +# Copyright (c) 2003-2005 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image, ImageColor, ImageDraw, ImageFont, ImagePath + + +class Pen(object): + def __init__(self, color, width=1, opacity=255): + self.color = ImageColor.getrgb(color) + self.width = width + + +class Brush(object): + def __init__(self, color, opacity=255): + self.color = ImageColor.getrgb(color) + + +class Font(object): + def __init__(self, color, file, size=12): + # FIXME: add support for bitmap fonts + self.color = ImageColor.getrgb(color) + self.font = ImageFont.truetype(file, size) + + +class Draw(object): + + def __init__(self, image, size=None, color=None): + if not hasattr(image, "im"): + image = Image.new(image, size, color) + self.draw = ImageDraw.Draw(image) + self.image = image + self.transform = None + + def flush(self): + return self.image + + def render(self, op, xy, pen, brush=None): + # handle color arguments + outline = fill = None + width = 1 + if isinstance(pen, Pen): + outline = pen.color + width = pen.width + elif isinstance(brush, Pen): + outline = brush.color + width = brush.width + if isinstance(brush, Brush): + fill = brush.color + elif isinstance(pen, Brush): + fill = pen.color + # handle transformation + if self.transform: + xy = ImagePath.Path(xy) + xy.transform(self.transform) + # render the item + if op == "line": + self.draw.line(xy, fill=outline, width=width) + else: + getattr(self.draw, op)(xy, fill=fill, outline=outline) + + def settransform(self, offset): + (xoffset, yoffset) = offset + self.transform = (1, 0, xoffset, 0, 1, yoffset) + + def arc(self, xy, start, end, *options): + self.render("arc", xy, start, end, *options) + + def chord(self, xy, start, end, *options): + self.render("chord", xy, start, end, *options) + + def ellipse(self, xy, *options): + self.render("ellipse", xy, *options) + + def line(self, xy, *options): + self.render("line", xy, *options) + + def pieslice(self, xy, start, end, *options): + self.render("pieslice", xy, start, end, *options) + + def polygon(self, xy, *options): + self.render("polygon", xy, *options) + + def rectangle(self, xy, *options): + self.render("rectangle", xy, *options) + + def symbol(self, xy, symbol, *options): + raise NotImplementedError("not in this version") + + def text(self, xy, text, font): + if self.transform: + xy = ImagePath.Path(xy) + xy.transform(self.transform) + self.draw.text(xy, text, font=font.font, fill=font.color) + + def textsize(self, text, font): + return self.draw.textsize(text, font=font.font) diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageEnhance.py b/server/www/packages/packages-darwin/x64/PIL/ImageEnhance.py new file mode 100644 index 0000000..56b5c01 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageEnhance.py @@ -0,0 +1,100 @@ +# +# The Python Imaging Library. +# $Id$ +# +# image enhancement classes +# +# For a background, see "Image Processing By Interpolation and +# Extrapolation", Paul Haeberli and Douglas Voorhies. Available +# at http://www.graficaobscura.com/interp/index.html +# +# History: +# 1996-03-23 fl Created +# 2009-06-16 fl Fixed mean calculation +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image, ImageFilter, ImageStat + + +class _Enhance(object): + + def enhance(self, factor): + """ + Returns an enhanced image. + + :param factor: A floating point value controlling the enhancement. + Factor 1.0 always returns a copy of the original image, + lower factors mean less color (brightness, contrast, + etc), and higher values more. There are no restrictions + on this value. + :rtype: :py:class:`~PIL.Image.Image` + """ + return Image.blend(self.degenerate, self.image, factor) + + +class Color(_Enhance): + """Adjust image color balance. + + This class can be used to adjust the colour balance of an image, in + a manner similar to the controls on a colour TV set. An enhancement + factor of 0.0 gives a black and white image. A factor of 1.0 gives + the original image. + """ + def __init__(self, image): + self.image = image + self.intermediate_mode = 'L' + if 'A' in image.getbands(): + self.intermediate_mode = 'LA' + + self.degenerate = image.convert(self.intermediate_mode).convert(image.mode) + + +class Contrast(_Enhance): + """Adjust image contrast. + + This class can be used to control the contrast of an image, similar + to the contrast control on a TV set. An enhancement factor of 0.0 + gives a solid grey image. A factor of 1.0 gives the original image. + """ + def __init__(self, image): + self.image = image + mean = int(ImageStat.Stat(image.convert("L")).mean[0] + 0.5) + self.degenerate = Image.new("L", image.size, mean).convert(image.mode) + + if 'A' in image.getbands(): + self.degenerate.putalpha(image.split()[-1]) + + +class Brightness(_Enhance): + """Adjust image brightness. + + This class can be used to control the brightness of an image. An + enhancement factor of 0.0 gives a black image. A factor of 1.0 gives the + original image. + """ + def __init__(self, image): + self.image = image + self.degenerate = Image.new(image.mode, image.size, 0) + + if 'A' in image.getbands(): + self.degenerate.putalpha(image.split()[-1]) + + +class Sharpness(_Enhance): + """Adjust image sharpness. + + This class can be used to adjust the sharpness of an image. An + enhancement factor of 0.0 gives a blurred image, a factor of 1.0 gives the + original image, and a factor of 2.0 gives a sharpened image. + """ + def __init__(self, image): + self.image = image + self.degenerate = image.filter(ImageFilter.SMOOTH) + + if 'A' in image.getbands(): + self.degenerate.putalpha(image.split()[-1]) diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageFile.py b/server/www/packages/packages-darwin/x64/PIL/ImageFile.py new file mode 100644 index 0000000..9617ffb --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageFile.py @@ -0,0 +1,513 @@ +# +# The Python Imaging Library. +# $Id$ +# +# base class for image file handlers +# +# history: +# 1995-09-09 fl Created +# 1996-03-11 fl Fixed load mechanism. +# 1996-04-15 fl Added pcx/xbm decoders. +# 1996-04-30 fl Added encoders. +# 1996-12-14 fl Added load helpers +# 1997-01-11 fl Use encode_to_file where possible +# 1997-08-27 fl Flush output in _save +# 1998-03-05 fl Use memory mapping for some modes +# 1999-02-04 fl Use memory mapping also for "I;16" and "I;16B" +# 1999-05-31 fl Added image parser +# 2000-10-12 fl Set readonly flag on memory-mapped images +# 2002-03-20 fl Use better messages for common decoder errors +# 2003-04-21 fl Fall back on mmap/map_buffer if map is not available +# 2003-10-30 fl Added StubImageFile class +# 2004-02-25 fl Made incremental parser more robust +# +# Copyright (c) 1997-2004 by Secret Labs AB +# Copyright (c) 1995-2004 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image +from PIL._util import isPath +import io +import os +import sys +import struct + +MAXBLOCK = 65536 + +SAFEBLOCK = 1024*1024 + +LOAD_TRUNCATED_IMAGES = False + +ERRORS = { + -1: "image buffer overrun error", + -2: "decoding error", + -3: "unknown error", + -8: "bad configuration", + -9: "out of memory error" +} + + +def raise_ioerror(error): + try: + message = Image.core.getcodecstatus(error) + except AttributeError: + message = ERRORS.get(error) + if not message: + message = "decoder error %d" % error + raise IOError(message + " when reading image file") + + +# +# -------------------------------------------------------------------- +# Helpers + +def _tilesort(t): + # sort on offset + return t[2] + + +# +# -------------------------------------------------------------------- +# ImageFile base class + +class ImageFile(Image.Image): + "Base class for image file format handlers." + + def __init__(self, fp=None, filename=None): + Image.Image.__init__(self) + + self.tile = None + self.readonly = 1 # until we know better + + self.decoderconfig = () + self.decodermaxblock = MAXBLOCK + + if isPath(fp): + # filename + self.fp = open(fp, "rb") + self.filename = fp + else: + # stream + self.fp = fp + self.filename = filename + + try: + self._open() + except (IndexError, # end of data + TypeError, # end of data (ord) + KeyError, # unsupported mode + EOFError, # got header but not the first frame + struct.error) as v: + raise SyntaxError(v) + + if not self.mode or self.size[0] <= 0: + raise SyntaxError("not identified by this driver") + + def draft(self, mode, size): + "Set draft mode" + + pass + + def verify(self): + "Check file integrity" + + # raise exception if something's wrong. must be called + # directly after open, and closes file when finished. + self.fp = None + + def load(self): + "Load image data based on tile list" + + pixel = Image.Image.load(self) + + if self.tile is None: + raise IOError("cannot load this image") + if not self.tile: + return pixel + + self.map = None + use_mmap = self.filename and len(self.tile) == 1 + # As of pypy 2.1.0, memory mapping was failing here. + use_mmap = use_mmap and not hasattr(sys, 'pypy_version_info') + + readonly = 0 + + # look for read/seek overrides + try: + read = self.load_read + # don't use mmap if there are custom read/seek functions + use_mmap = False + except AttributeError: + read = self.fp.read + + try: + seek = self.load_seek + use_mmap = False + except AttributeError: + seek = self.fp.seek + + if use_mmap: + # try memory mapping + d, e, o, a = self.tile[0] + if d == "raw" and a[0] == self.mode and a[0] in Image._MAPMODES: + try: + if hasattr(Image.core, "map"): + # use built-in mapper + self.map = Image.core.map(self.filename) + self.map.seek(o) + self.im = self.map.readimage( + self.mode, self.size, a[1], a[2] + ) + else: + # use mmap, if possible + import mmap + fp = open(self.filename, "r+") + size = os.path.getsize(self.filename) + # FIXME: on Unix, use PROT_READ etc + self.map = mmap.mmap(fp.fileno(), size) + self.im = Image.core.map_buffer( + self.map, self.size, d, e, o, a + ) + readonly = 1 + except (AttributeError, EnvironmentError, ImportError): + self.map = None + + self.load_prepare() + + if not self.map: + # sort tiles in file order + self.tile.sort(key=_tilesort) + + try: + # FIXME: This is a hack to handle TIFF's JpegTables tag. + prefix = self.tile_prefix + except AttributeError: + prefix = b"" + + for d, e, o, a in self.tile: + d = Image._getdecoder(self.mode, d, a, self.decoderconfig) + seek(o) + try: + d.setimage(self.im, e) + except ValueError: + continue + b = prefix + while True: + try: + s = read(self.decodermaxblock) + except (IndexError, struct.error): # truncated png/gif + if LOAD_TRUNCATED_IMAGES: + break + else: + raise IOError("image file is truncated") + + if not s and not d.handles_eof: # truncated jpeg + self.tile = [] + + # JpegDecode needs to clean things up here either way + # If we don't destroy the decompressor, + # we have a memory leak. + d.cleanup() + + if LOAD_TRUNCATED_IMAGES: + break + else: + raise IOError("image file is truncated " + "(%d bytes not processed)" % len(b)) + + b = b + s + n, e = d.decode(b) + if n < 0: + break + b = b[n:] + # Need to cleanup here to prevent leaks in PyPy + d.cleanup() + + self.tile = [] + self.readonly = readonly + + self.fp = None # might be shared + + if not self.map and not LOAD_TRUNCATED_IMAGES and e < 0: + # still raised if decoder fails to return anything + raise_ioerror(e) + + # post processing + if hasattr(self, "tile_post_rotate"): + # FIXME: This is a hack to handle rotated PCD's + self.im = self.im.rotate(self.tile_post_rotate) + self.size = self.im.size + + self.load_end() + + return Image.Image.load(self) + + def load_prepare(self): + # create image memory if necessary + if not self.im or\ + self.im.mode != self.mode or self.im.size != self.size: + self.im = Image.core.new(self.mode, self.size) + # create palette (optional) + if self.mode == "P": + Image.Image.load(self) + + def load_end(self): + # may be overridden + pass + + # may be defined for contained formats + # def load_seek(self, pos): + # pass + + # may be defined for blocked formats (e.g. PNG) + # def load_read(self, bytes): + # pass + + +class StubImageFile(ImageFile): + """ + Base class for stub image loaders. + + A stub loader is an image loader that can identify files of a + certain format, but relies on external code to load the file. + """ + + def _open(self): + raise NotImplementedError( + "StubImageFile subclass must implement _open" + ) + + def load(self): + loader = self._load() + if loader is None: + raise IOError("cannot find loader for this %s file" % self.format) + image = loader.load(self) + assert image is not None + # become the other object (!) + self.__class__ = image.__class__ + self.__dict__ = image.__dict__ + + def _load(self): + "(Hook) Find actual image loader." + raise NotImplementedError( + "StubImageFile subclass must implement _load" + ) + + +class Parser(object): + """ + Incremental image parser. This class implements the standard + feed/close consumer interface. + + In Python 2.x, this is an old-style class. + """ + incremental = None + image = None + data = None + decoder = None + offset = 0 + finished = 0 + + def reset(self): + """ + (Consumer) Reset the parser. Note that you can only call this + method immediately after you've created a parser; parser + instances cannot be reused. + """ + assert self.data is None, "cannot reuse parsers" + + def feed(self, data): + """ + (Consumer) Feed data to the parser. + + :param data: A string buffer. + :exception IOError: If the parser failed to parse the image file. + """ + # collect data + + if self.finished: + return + + if self.data is None: + self.data = data + else: + self.data = self.data + data + + # parse what we have + if self.decoder: + + if self.offset > 0: + # skip header + skip = min(len(self.data), self.offset) + self.data = self.data[skip:] + self.offset = self.offset - skip + if self.offset > 0 or not self.data: + return + + n, e = self.decoder.decode(self.data) + + if n < 0: + # end of stream + self.data = None + self.finished = 1 + if e < 0: + # decoding error + self.image = None + raise_ioerror(e) + else: + # end of image + return + self.data = self.data[n:] + + elif self.image: + + # if we end up here with no decoder, this file cannot + # be incrementally parsed. wait until we've gotten all + # available data + pass + + else: + + # attempt to open this file + try: + try: + fp = io.BytesIO(self.data) + im = Image.open(fp) + finally: + fp.close() # explicitly close the virtual file + except IOError: + # traceback.print_exc() + pass # not enough data + else: + flag = hasattr(im, "load_seek") or hasattr(im, "load_read") + if flag or len(im.tile) != 1: + # custom load code, or multiple tiles + self.decode = None + else: + # initialize decoder + im.load_prepare() + d, e, o, a = im.tile[0] + im.tile = [] + self.decoder = Image._getdecoder( + im.mode, d, a, im.decoderconfig + ) + self.decoder.setimage(im.im, e) + + # calculate decoder offset + self.offset = o + if self.offset <= len(self.data): + self.data = self.data[self.offset:] + self.offset = 0 + + self.image = im + + def close(self): + """ + (Consumer) Close the stream. + + :returns: An image object. + :exception IOError: If the parser failed to parse the image file either + because it cannot be identified or cannot be + decoded. + """ + # finish decoding + if self.decoder: + # get rid of what's left in the buffers + self.feed(b"") + self.data = self.decoder = None + if not self.finished: + raise IOError("image was incomplete") + if not self.image: + raise IOError("cannot parse this image") + if self.data: + # incremental parsing not possible; reopen the file + # not that we have all data + try: + fp = io.BytesIO(self.data) + self.image = Image.open(fp) + finally: + self.image.load() + fp.close() # explicitly close the virtual file + return self.image + + +# -------------------------------------------------------------------- + +def _save(im, fp, tile, bufsize=0): + """Helper to save image based on tile list + + :param im: Image object. + :param fp: File object. + :param tile: Tile list. + :param bufsize: Optional buffer size + """ + + im.load() + if not hasattr(im, "encoderconfig"): + im.encoderconfig = () + tile.sort(key=_tilesort) + # FIXME: make MAXBLOCK a configuration parameter + # It would be great if we could have the encoder specify what it needs + # But, it would need at least the image size in most cases. RawEncode is + # a tricky case. + bufsize = max(MAXBLOCK, bufsize, im.size[0] * 4) # see RawEncode.c + if fp == sys.stdout: + fp.flush() + return + try: + fh = fp.fileno() + fp.flush() + except (AttributeError, io.UnsupportedOperation): + # compress to Python file-compatible object + for e, b, o, a in tile: + e = Image._getencoder(im.mode, e, a, im.encoderconfig) + if o > 0: + fp.seek(o, 0) + e.setimage(im.im, b) + while True: + l, s, d = e.encode(bufsize) + fp.write(d) + if s: + break + if s < 0: + raise IOError("encoder error %d when writing image file" % s) + e.cleanup() + else: + # slight speedup: compress to real file object + for e, b, o, a in tile: + e = Image._getencoder(im.mode, e, a, im.encoderconfig) + if o > 0: + fp.seek(o, 0) + e.setimage(im.im, b) + s = e.encode_to_file(fh, bufsize) + if s < 0: + raise IOError("encoder error %d when writing image file" % s) + e.cleanup() + if hasattr(fp, "flush"): + fp.flush() + + +def _safe_read(fp, size): + """ + Reads large blocks in a safe way. Unlike fp.read(n), this function + doesn't trust the user. If the requested size is larger than + SAFEBLOCK, the file is read block by block. + + :param fp: File handle. Must implement a read method. + :param size: Number of bytes to read. + :returns: A string containing up to size bytes of data. + """ + if size <= 0: + return b"" + if size <= SAFEBLOCK: + return fp.read(size) + data = [] + while size > 0: + block = fp.read(min(size, SAFEBLOCK)) + if not block: + break + data.append(block) + size -= len(block) + return b"".join(data) diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageFilter.py b/server/www/packages/packages-darwin/x64/PIL/ImageFilter.py new file mode 100644 index 0000000..baa168a --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageFilter.py @@ -0,0 +1,275 @@ +# +# The Python Imaging Library. +# $Id$ +# +# standard filters +# +# History: +# 1995-11-27 fl Created +# 2002-06-08 fl Added rank and mode filters +# 2003-09-15 fl Fixed rank calculation in rank filter; added expand call +# +# Copyright (c) 1997-2003 by Secret Labs AB. +# Copyright (c) 1995-2002 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +import functools + + +class Filter(object): + pass + + +class Kernel(Filter): + """ + Create a convolution kernel. The current version only + supports 3x3 and 5x5 integer and floating point kernels. + + In the current version, kernels can only be applied to + "L" and "RGB" images. + + :param size: Kernel size, given as (width, height). In the current + version, this must be (3,3) or (5,5). + :param kernel: A sequence containing kernel weights. + :param scale: Scale factor. If given, the result for each pixel is + divided by this value. the default is the sum of the + kernel weights. + :param offset: Offset. If given, this value is added to the result, + after it has been divided by the scale factor. + """ + + def __init__(self, size, kernel, scale=None, offset=0): + if scale is None: + # default scale is sum of kernel + scale = functools.reduce(lambda a, b: a+b, kernel) + if size[0] * size[1] != len(kernel): + raise ValueError("not enough coefficients in kernel") + self.filterargs = size, scale, offset, kernel + + def filter(self, image): + if image.mode == "P": + raise ValueError("cannot filter palette images") + return image.filter(*self.filterargs) + + +class BuiltinFilter(Kernel): + def __init__(self): + pass + + +class RankFilter(Filter): + """ + Create a rank filter. The rank filter sorts all pixels in + a window of the given size, and returns the **rank**'th value. + + :param size: The kernel size, in pixels. + :param rank: What pixel value to pick. Use 0 for a min filter, + ``size * size / 2`` for a median filter, ``size * size - 1`` + for a max filter, etc. + """ + name = "Rank" + + def __init__(self, size, rank): + self.size = size + self.rank = rank + + def filter(self, image): + if image.mode == "P": + raise ValueError("cannot filter palette images") + image = image.expand(self.size//2, self.size//2) + return image.rankfilter(self.size, self.rank) + + +class MedianFilter(RankFilter): + """ + Create a median filter. Picks the median pixel value in a window with the + given size. + + :param size: The kernel size, in pixels. + """ + name = "Median" + + def __init__(self, size=3): + self.size = size + self.rank = size*size//2 + + +class MinFilter(RankFilter): + """ + Create a min filter. Picks the lowest pixel value in a window with the + given size. + + :param size: The kernel size, in pixels. + """ + name = "Min" + + def __init__(self, size=3): + self.size = size + self.rank = 0 + + +class MaxFilter(RankFilter): + """ + Create a max filter. Picks the largest pixel value in a window with the + given size. + + :param size: The kernel size, in pixels. + """ + name = "Max" + + def __init__(self, size=3): + self.size = size + self.rank = size*size-1 + + +class ModeFilter(Filter): + """ + + Create a mode filter. Picks the most frequent pixel value in a box with the + given size. Pixel values that occur only once or twice are ignored; if no + pixel value occurs more than twice, the original pixel value is preserved. + + :param size: The kernel size, in pixels. + """ + name = "Mode" + + def __init__(self, size=3): + self.size = size + + def filter(self, image): + return image.modefilter(self.size) + + +class GaussianBlur(Filter): + """Gaussian blur filter. + + :param radius: Blur radius. + """ + name = "GaussianBlur" + + def __init__(self, radius=2): + self.radius = radius + + def filter(self, image): + return image.gaussian_blur(self.radius) + + +class UnsharpMask(Filter): + """Unsharp mask filter. + + See Wikipedia's entry on `digital unsharp masking`_ for an explanation of + the parameters. + + :param radius: Blur Radius + :param percent: Unsharp strength, in percent + :param threshold: Threshold controls the minimum brightness change that + will be sharpened + + .. _digital unsharp masking: https://en.wikipedia.org/wiki/Unsharp_masking#Digital_unsharp_masking + + """ + name = "UnsharpMask" + + def __init__(self, radius=2, percent=150, threshold=3): + self.radius = radius + self.percent = percent + self.threshold = threshold + + def filter(self, image): + return image.unsharp_mask(self.radius, self.percent, self.threshold) + + +class BLUR(BuiltinFilter): + name = "Blur" + filterargs = (5, 5), 16, 0, ( + 1, 1, 1, 1, 1, + 1, 0, 0, 0, 1, + 1, 0, 0, 0, 1, + 1, 0, 0, 0, 1, + 1, 1, 1, 1, 1 + ) + + +class CONTOUR(BuiltinFilter): + name = "Contour" + filterargs = (3, 3), 1, 255, ( + -1, -1, -1, + -1, 8, -1, + -1, -1, -1 + ) + + +class DETAIL(BuiltinFilter): + name = "Detail" + filterargs = (3, 3), 6, 0, ( + 0, -1, 0, + -1, 10, -1, + 0, -1, 0 + ) + + +class EDGE_ENHANCE(BuiltinFilter): + name = "Edge-enhance" + filterargs = (3, 3), 2, 0, ( + -1, -1, -1, + -1, 10, -1, + -1, -1, -1 + ) + + +class EDGE_ENHANCE_MORE(BuiltinFilter): + name = "Edge-enhance More" + filterargs = (3, 3), 1, 0, ( + -1, -1, -1, + -1, 9, -1, + -1, -1, -1 + ) + + +class EMBOSS(BuiltinFilter): + name = "Emboss" + filterargs = (3, 3), 1, 128, ( + -1, 0, 0, + 0, 1, 0, + 0, 0, 0 + ) + + +class FIND_EDGES(BuiltinFilter): + name = "Find Edges" + filterargs = (3, 3), 1, 0, ( + -1, -1, -1, + -1, 8, -1, + -1, -1, -1 + ) + + +class SMOOTH(BuiltinFilter): + name = "Smooth" + filterargs = (3, 3), 13, 0, ( + 1, 1, 1, + 1, 5, 1, + 1, 1, 1 + ) + + +class SMOOTH_MORE(BuiltinFilter): + name = "Smooth More" + filterargs = (5, 5), 100, 0, ( + 1, 1, 1, 1, 1, + 1, 5, 5, 5, 1, + 1, 5, 44, 5, 1, + 1, 5, 5, 5, 1, + 1, 1, 1, 1, 1 + ) + + +class SHARPEN(BuiltinFilter): + name = "Sharpen" + filterargs = (3, 3), 16, 0, ( + -2, -2, -2, + -2, 32, -2, + -2, -2, -2 + ) diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageFont.py b/server/www/packages/packages-darwin/x64/PIL/ImageFont.py new file mode 100644 index 0000000..af1166d --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageFont.py @@ -0,0 +1,437 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PIL raster font management +# +# History: +# 1996-08-07 fl created (experimental) +# 1997-08-25 fl minor adjustments to handle fonts from pilfont 0.3 +# 1999-02-06 fl rewrote most font management stuff in C +# 1999-03-17 fl take pth files into account in load_path (from Richard Jones) +# 2001-02-17 fl added freetype support +# 2001-05-09 fl added TransposedFont wrapper class +# 2002-03-04 fl make sure we have a "L" or "1" font +# 2002-12-04 fl skip non-directory entries in the system path +# 2003-04-29 fl add embedded default font +# 2003-09-27 fl added support for truetype charmap encodings +# +# Todo: +# Adapt to PILFONT2 format (16-bit fonts, compressed, single file) +# +# Copyright (c) 1997-2003 by Secret Labs AB +# Copyright (c) 1996-2003 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image +from PIL._util import isDirectory, isPath +import os +import sys + + +class _imagingft_not_installed(object): + # module placeholder + def __getattr__(self, id): + raise ImportError("The _imagingft C module is not installed") + +try: + from PIL import _imagingft as core +except ImportError: + core = _imagingft_not_installed() + +# FIXME: add support for pilfont2 format (see FontFile.py) + +# -------------------------------------------------------------------- +# Font metrics format: +# "PILfont" LF +# fontdescriptor LF +# (optional) key=value... LF +# "DATA" LF +# binary data: 256*10*2 bytes (dx, dy, dstbox, srcbox) +# +# To place a character, cut out srcbox and paste at dstbox, +# relative to the character position. Then move the character +# position according to dx, dy. +# -------------------------------------------------------------------- + + +class ImageFont(object): + "PIL font wrapper" + + def _load_pilfont(self, filename): + + fp = open(filename, "rb") + + for ext in (".png", ".gif", ".pbm"): + try: + fullname = os.path.splitext(filename)[0] + ext + image = Image.open(fullname) + except: + pass + else: + if image and image.mode in ("1", "L"): + break + else: + raise IOError("cannot find glyph data file") + + self.file = fullname + + return self._load_pilfont_data(fp, image) + + def _load_pilfont_data(self, file, image): + + # read PILfont header + if file.readline() != b"PILfont\n": + raise SyntaxError("Not a PILfont file") + file.readline().split(b";") + self.info = [] # FIXME: should be a dictionary + while True: + s = file.readline() + if not s or s == b"DATA\n": + break + self.info.append(s) + + # read PILfont metrics + data = file.read(256*20) + + # check image + if image.mode not in ("1", "L"): + raise TypeError("invalid font image mode") + + image.load() + + self.font = Image.core.font(image.im, data) + + # delegate critical operations to internal type + self.getsize = self.font.getsize + self.getmask = self.font.getmask + + +## +# Wrapper for FreeType fonts. Application code should use the +# truetype factory function to create font objects. + +class FreeTypeFont(object): + "FreeType font wrapper (requires _imagingft service)" + + def __init__(self, font=None, size=10, index=0, encoding=""): + # FIXME: use service provider instead + + self.path = font + self.size = size + self.index = index + self.encoding = encoding + + if isPath(font): + self.font = core.getfont(font, size, index, encoding) + else: + self.font_bytes = font.read() + self.font = core.getfont( + "", size, index, encoding, self.font_bytes) + + def getname(self): + return self.font.family, self.font.style + + def getmetrics(self): + return self.font.ascent, self.font.descent + + def getsize(self, text): + size, offset = self.font.getsize(text) + return (size[0] + offset[0], size[1] + offset[1]) + + def getoffset(self, text): + return self.font.getsize(text)[1] + + def getmask(self, text, mode=""): + return self.getmask2(text, mode)[0] + + def getmask2(self, text, mode="", fill=Image.core.fill): + size, offset = self.font.getsize(text) + im = fill("L", size, 0) + self.font.render(text, im.id, mode == "1") + return im, offset + + def font_variant(self, font=None, size=None, index=None, encoding=None): + """ + Create a copy of this FreeTypeFont object, + using any specified arguments to override the settings. + + Parameters are identical to the parameters used to initialize this + object. + + :return: A FreeTypeFont object. + """ + return FreeTypeFont(font=self.path if font is None else font, + size=self.size if size is None else size, + index=self.index if index is None else index, + encoding=self.encoding if encoding is None else + encoding) + +## +# Wrapper that creates a transposed font from any existing font +# object. +# +# @param font A font object. +# @param orientation An optional orientation. If given, this should +# be one of Image.FLIP_LEFT_RIGHT, Image.FLIP_TOP_BOTTOM, +# Image.ROTATE_90, Image.ROTATE_180, or Image.ROTATE_270. + + +class TransposedFont(object): + "Wrapper for writing rotated or mirrored text" + + def __init__(self, font, orientation=None): + self.font = font + self.orientation = orientation # any 'transpose' argument, or None + + def getsize(self, text): + w, h = self.font.getsize(text) + if self.orientation in (Image.ROTATE_90, Image.ROTATE_270): + return h, w + return w, h + + def getmask(self, text, mode=""): + im = self.font.getmask(text, mode) + if self.orientation is not None: + return im.transpose(self.orientation) + return im + + +def load(filename): + """ + Load a font file. This function loads a font object from the given + bitmap font file, and returns the corresponding font object. + + :param filename: Name of font file. + :return: A font object. + :exception IOError: If the file could not be read. + """ + f = ImageFont() + f._load_pilfont(filename) + return f + + +def truetype(font=None, size=10, index=0, encoding=""): + """ + Load a TrueType or OpenType font file, and create a font object. + This function loads a font object from the given file, and creates + a font object for a font of the given size. + + This function requires the _imagingft service. + + :param font: A truetype font file. Under Windows, if the file + is not found in this filename, the loader also looks in + Windows :file:`fonts/` directory. + :param size: The requested size, in points. + :param index: Which font face to load (default is first available face). + :param encoding: Which font encoding to use (default is Unicode). Common + encodings are "unic" (Unicode), "symb" (Microsoft + Symbol), "ADOB" (Adobe Standard), "ADBE" (Adobe Expert), + and "armn" (Apple Roman). See the FreeType documentation + for more information. + :return: A font object. + :exception IOError: If the file could not be read. + """ + + try: + return FreeTypeFont(font, size, index, encoding) + except IOError: + ttf_filename = os.path.basename(font) + + dirs = [] + if sys.platform == "win32": + # check the windows font repository + # NOTE: must use uppercase WINDIR, to work around bugs in + # 1.5.2's os.environ.get() + windir = os.environ.get("WINDIR") + if windir: + dirs.append(os.path.join(windir, "fonts")) + elif sys.platform in ('linux', 'linux2'): + lindirs = os.environ.get("XDG_DATA_DIRS", "") + if not lindirs: + # According to the freedesktop spec, XDG_DATA_DIRS should + # default to /usr/share + lindirs = '/usr/share' + dirs += [os.path.join(lindir, "fonts") + for lindir in lindirs.split(":")] + elif sys.platform == 'darwin': + dirs += ['/Library/Fonts', '/System/Library/Fonts', + os.path.expanduser('~/Library/Fonts')] + + ext = os.path.splitext(ttf_filename)[1] + first_font_with_a_different_extension = None + for directory in dirs: + for walkroot, walkdir, walkfilenames in os.walk(directory): + for walkfilename in walkfilenames: + if ext and walkfilename == ttf_filename: + fontpath = os.path.join(walkroot, walkfilename) + return FreeTypeFont(fontpath, size, index, encoding) + elif not ext and os.path.splitext(walkfilename)[0] == ttf_filename: + fontpath = os.path.join(walkroot, walkfilename) + if os.path.splitext(fontpath)[1] == '.ttf': + return FreeTypeFont(fontpath, size, index, encoding) + if not ext and first_font_with_a_different_extension is None: + first_font_with_a_different_extension = fontpath + if first_font_with_a_different_extension: + return FreeTypeFont(first_font_with_a_different_extension, size, + index, encoding) + raise + + +def load_path(filename): + """ + Load font file. Same as :py:func:`~PIL.ImageFont.load`, but searches for a + bitmap font along the Python path. + + :param filename: Name of font file. + :return: A font object. + :exception IOError: If the file could not be read. + """ + for directory in sys.path: + if isDirectory(directory): + if not isinstance(filename, str): + if bytes is str: + filename = filename.encode("utf-8") + else: + filename = filename.decode("utf-8") + try: + return load(os.path.join(directory, filename)) + except IOError: + pass + raise IOError("cannot find font file") + + +def load_default(): + """Load a "better than nothing" default font. + + .. versionadded:: 1.1.4 + + :return: A font object. + """ + from io import BytesIO + import base64 + f = ImageFont() + f._load_pilfont_data( + # courB08 + BytesIO(base64.decodestring(b''' +UElMZm9udAo7Ozs7OzsxMDsKREFUQQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAA//8AAQAAAAAAAAABAAEA +BgAAAAH/+gADAAAAAQAAAAMABgAGAAAAAf/6AAT//QADAAAABgADAAYAAAAA//kABQABAAYAAAAL +AAgABgAAAAD/+AAFAAEACwAAABAACQAGAAAAAP/5AAUAAAAQAAAAFQAHAAYAAP////oABQAAABUA +AAAbAAYABgAAAAH/+QAE//wAGwAAAB4AAwAGAAAAAf/5AAQAAQAeAAAAIQAIAAYAAAAB//kABAAB +ACEAAAAkAAgABgAAAAD/+QAE//0AJAAAACgABAAGAAAAAP/6AAX//wAoAAAALQAFAAYAAAAB//8A +BAACAC0AAAAwAAMABgAAAAD//AAF//0AMAAAADUAAQAGAAAAAf//AAMAAAA1AAAANwABAAYAAAAB +//kABQABADcAAAA7AAgABgAAAAD/+QAFAAAAOwAAAEAABwAGAAAAAP/5AAYAAABAAAAARgAHAAYA +AAAA//kABQAAAEYAAABLAAcABgAAAAD/+QAFAAAASwAAAFAABwAGAAAAAP/5AAYAAABQAAAAVgAH +AAYAAAAA//kABQAAAFYAAABbAAcABgAAAAD/+QAFAAAAWwAAAGAABwAGAAAAAP/5AAUAAABgAAAA +ZQAHAAYAAAAA//kABQAAAGUAAABqAAcABgAAAAD/+QAFAAAAagAAAG8ABwAGAAAAAf/8AAMAAABv +AAAAcQAEAAYAAAAA//wAAwACAHEAAAB0AAYABgAAAAD/+gAE//8AdAAAAHgABQAGAAAAAP/7AAT/ +/gB4AAAAfAADAAYAAAAB//oABf//AHwAAACAAAUABgAAAAD/+gAFAAAAgAAAAIUABgAGAAAAAP/5 +AAYAAQCFAAAAiwAIAAYAAP////oABgAAAIsAAACSAAYABgAA////+gAFAAAAkgAAAJgABgAGAAAA +AP/6AAUAAACYAAAAnQAGAAYAAP////oABQAAAJ0AAACjAAYABgAA////+gAFAAAAowAAAKkABgAG +AAD////6AAUAAACpAAAArwAGAAYAAAAA//oABQAAAK8AAAC0AAYABgAA////+gAGAAAAtAAAALsA +BgAGAAAAAP/6AAQAAAC7AAAAvwAGAAYAAP////oABQAAAL8AAADFAAYABgAA////+gAGAAAAxQAA +AMwABgAGAAD////6AAUAAADMAAAA0gAGAAYAAP////oABQAAANIAAADYAAYABgAA////+gAGAAAA +2AAAAN8ABgAGAAAAAP/6AAUAAADfAAAA5AAGAAYAAP////oABQAAAOQAAADqAAYABgAAAAD/+gAF +AAEA6gAAAO8ABwAGAAD////6AAYAAADvAAAA9gAGAAYAAAAA//oABQAAAPYAAAD7AAYABgAA//// ++gAFAAAA+wAAAQEABgAGAAD////6AAYAAAEBAAABCAAGAAYAAP////oABgAAAQgAAAEPAAYABgAA +////+gAGAAABDwAAARYABgAGAAAAAP/6AAYAAAEWAAABHAAGAAYAAP////oABgAAARwAAAEjAAYA +BgAAAAD/+gAFAAABIwAAASgABgAGAAAAAf/5AAQAAQEoAAABKwAIAAYAAAAA//kABAABASsAAAEv +AAgABgAAAAH/+QAEAAEBLwAAATIACAAGAAAAAP/5AAX//AEyAAABNwADAAYAAAAAAAEABgACATcA +AAE9AAEABgAAAAH/+QAE//wBPQAAAUAAAwAGAAAAAP/7AAYAAAFAAAABRgAFAAYAAP////kABQAA +AUYAAAFMAAcABgAAAAD/+wAFAAABTAAAAVEABQAGAAAAAP/5AAYAAAFRAAABVwAHAAYAAAAA//sA +BQAAAVcAAAFcAAUABgAAAAD/+QAFAAABXAAAAWEABwAGAAAAAP/7AAYAAgFhAAABZwAHAAYAAP// +//kABQAAAWcAAAFtAAcABgAAAAD/+QAGAAABbQAAAXMABwAGAAAAAP/5AAQAAgFzAAABdwAJAAYA +AP////kABgAAAXcAAAF+AAcABgAAAAD/+QAGAAABfgAAAYQABwAGAAD////7AAUAAAGEAAABigAF +AAYAAP////sABQAAAYoAAAGQAAUABgAAAAD/+wAFAAABkAAAAZUABQAGAAD////7AAUAAgGVAAAB +mwAHAAYAAAAA//sABgACAZsAAAGhAAcABgAAAAD/+wAGAAABoQAAAacABQAGAAAAAP/7AAYAAAGn +AAABrQAFAAYAAAAA//kABgAAAa0AAAGzAAcABgAA////+wAGAAABswAAAboABQAGAAD////7AAUA +AAG6AAABwAAFAAYAAP////sABgAAAcAAAAHHAAUABgAAAAD/+wAGAAABxwAAAc0ABQAGAAD////7 +AAYAAgHNAAAB1AAHAAYAAAAA//sABQAAAdQAAAHZAAUABgAAAAH/+QAFAAEB2QAAAd0ACAAGAAAA +Av/6AAMAAQHdAAAB3gAHAAYAAAAA//kABAABAd4AAAHiAAgABgAAAAD/+wAF//0B4gAAAecAAgAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAB +//sAAwACAecAAAHpAAcABgAAAAD/+QAFAAEB6QAAAe4ACAAGAAAAAP/5AAYAAAHuAAAB9AAHAAYA +AAAA//oABf//AfQAAAH5AAUABgAAAAD/+QAGAAAB+QAAAf8ABwAGAAAAAv/5AAMAAgH/AAACAAAJ +AAYAAAAA//kABQABAgAAAAIFAAgABgAAAAH/+gAE//sCBQAAAggAAQAGAAAAAP/5AAYAAAIIAAAC +DgAHAAYAAAAB//kABf/+Ag4AAAISAAUABgAA////+wAGAAACEgAAAhkABQAGAAAAAP/7AAX//gIZ +AAACHgADAAYAAAAA//wABf/9Ah4AAAIjAAEABgAAAAD/+QAHAAACIwAAAioABwAGAAAAAP/6AAT/ ++wIqAAACLgABAAYAAAAA//kABP/8Ai4AAAIyAAMABgAAAAD/+gAFAAACMgAAAjcABgAGAAAAAf/5 +AAT//QI3AAACOgAEAAYAAAAB//kABP/9AjoAAAI9AAQABgAAAAL/+QAE//sCPQAAAj8AAgAGAAD/ +///7AAYAAgI/AAACRgAHAAYAAAAA//kABgABAkYAAAJMAAgABgAAAAH//AAD//0CTAAAAk4AAQAG +AAAAAf//AAQAAgJOAAACUQADAAYAAAAB//kABP/9AlEAAAJUAAQABgAAAAH/+QAF//4CVAAAAlgA +BQAGAAD////7AAYAAAJYAAACXwAFAAYAAP////kABgAAAl8AAAJmAAcABgAA////+QAGAAACZgAA +Am0ABwAGAAD////5AAYAAAJtAAACdAAHAAYAAAAA//sABQACAnQAAAJ5AAcABgAA////9wAGAAAC +eQAAAoAACQAGAAD////3AAYAAAKAAAAChwAJAAYAAP////cABgAAAocAAAKOAAkABgAA////9wAG +AAACjgAAApUACQAGAAD////4AAYAAAKVAAACnAAIAAYAAP////cABgAAApwAAAKjAAkABgAA//// ++gAGAAACowAAAqoABgAGAAAAAP/6AAUAAgKqAAACrwAIAAYAAP////cABQAAAq8AAAK1AAkABgAA +////9wAFAAACtQAAArsACQAGAAD////3AAUAAAK7AAACwQAJAAYAAP////gABQAAAsEAAALHAAgA +BgAAAAD/9wAEAAACxwAAAssACQAGAAAAAP/3AAQAAALLAAACzwAJAAYAAAAA//cABAAAAs8AAALT +AAkABgAAAAD/+AAEAAAC0wAAAtcACAAGAAD////6AAUAAALXAAAC3QAGAAYAAP////cABgAAAt0A +AALkAAkABgAAAAD/9wAFAAAC5AAAAukACQAGAAAAAP/3AAUAAALpAAAC7gAJAAYAAAAA//cABQAA +Au4AAALzAAkABgAAAAD/9wAFAAAC8wAAAvgACQAGAAAAAP/4AAUAAAL4AAAC/QAIAAYAAAAA//oA +Bf//Av0AAAMCAAUABgAA////+gAGAAADAgAAAwkABgAGAAD////3AAYAAAMJAAADEAAJAAYAAP// +//cABgAAAxAAAAMXAAkABgAA////9wAGAAADFwAAAx4ACQAGAAD////4AAYAAAAAAAoABwASAAYA +AP////cABgAAAAcACgAOABMABgAA////+gAFAAAADgAKABQAEAAGAAD////6AAYAAAAUAAoAGwAQ +AAYAAAAA//gABgAAABsACgAhABIABgAAAAD/+AAGAAAAIQAKACcAEgAGAAAAAP/4AAYAAAAnAAoA +LQASAAYAAAAA//gABgAAAC0ACgAzABIABgAAAAD/+QAGAAAAMwAKADkAEQAGAAAAAP/3AAYAAAA5 +AAoAPwATAAYAAP////sABQAAAD8ACgBFAA8ABgAAAAD/+wAFAAIARQAKAEoAEQAGAAAAAP/4AAUA +AABKAAoATwASAAYAAAAA//gABQAAAE8ACgBUABIABgAAAAD/+AAFAAAAVAAKAFkAEgAGAAAAAP/5 +AAUAAABZAAoAXgARAAYAAAAA//gABgAAAF4ACgBkABIABgAAAAD/+AAGAAAAZAAKAGoAEgAGAAAA +AP/4AAYAAABqAAoAcAASAAYAAAAA//kABgAAAHAACgB2ABEABgAAAAD/+AAFAAAAdgAKAHsAEgAG +AAD////4AAYAAAB7AAoAggASAAYAAAAA//gABQAAAIIACgCHABIABgAAAAD/+AAFAAAAhwAKAIwA +EgAGAAAAAP/4AAUAAACMAAoAkQASAAYAAAAA//gABQAAAJEACgCWABIABgAAAAD/+QAFAAAAlgAK +AJsAEQAGAAAAAP/6AAX//wCbAAoAoAAPAAYAAAAA//oABQABAKAACgClABEABgAA////+AAGAAAA +pQAKAKwAEgAGAAD////4AAYAAACsAAoAswASAAYAAP////gABgAAALMACgC6ABIABgAA////+QAG +AAAAugAKAMEAEQAGAAD////4AAYAAgDBAAoAyAAUAAYAAP////kABQACAMgACgDOABMABgAA//// ++QAGAAIAzgAKANUAEw== +''')), Image.open(BytesIO(base64.decodestring(b''' +iVBORw0KGgoAAAANSUhEUgAAAx4AAAAUAQAAAAArMtZoAAAEwElEQVR4nABlAJr/AHVE4czCI/4u +Mc4b7vuds/xzjz5/3/7u/n9vMe7vnfH/9++vPn/xyf5zhxzjt8GHw8+2d83u8x27199/nxuQ6Od9 +M43/5z2I+9n9ZtmDBwMQECDRQw/eQIQohJXxpBCNVE6QCCAAAAD//wBlAJr/AgALyj1t/wINwq0g +LeNZUworuN1cjTPIzrTX6ofHWeo3v336qPzfEwRmBnHTtf95/fglZK5N0PDgfRTslpGBvz7LFc4F +IUXBWQGjQ5MGCx34EDFPwXiY4YbYxavpnhHFrk14CDAAAAD//wBlAJr/AgKqRooH2gAgPeggvUAA +Bu2WfgPoAwzRAABAAAAAAACQgLz/3Uv4Gv+gX7BJgDeeGP6AAAD1NMDzKHD7ANWr3loYbxsAD791 +NAADfcoIDyP44K/jv4Y63/Z+t98Ovt+ub4T48LAAAAD//wBlAJr/AuplMlADJAAAAGuAphWpqhMx +in0A/fRvAYBABPgBwBUgABBQ/sYAyv9g0bCHgOLoGAAAAAAAREAAwI7nr0ArYpow7aX8//9LaP/9 +SjdavWA8ePHeBIKB//81/83ndznOaXx379wAAAD//wBlAJr/AqDxW+D3AABAAbUh/QMnbQag/gAY +AYDAAACgtgD/gOqAAAB5IA/8AAAk+n9w0AAA8AAAmFRJuPo27ciC0cD5oeW4E7KA/wD3ECMAn2tt +y8PgwH8AfAxFzC0JzeAMtratAsC/ffwAAAD//wBlAJr/BGKAyCAA4AAAAvgeYTAwHd1kmQF5chkG +ABoMIHcL5xVpTfQbUqzlAAAErwAQBgAAEOClA5D9il08AEh/tUzdCBsXkbgACED+woQg8Si9VeqY +lODCn7lmF6NhnAEYgAAA/NMIAAAAAAD//2JgjLZgVGBg5Pv/Tvpc8hwGBjYGJADjHDrAwPzAjv/H +/Wf3PzCwtzcwHmBgYGcwbZz8wHaCAQMDOwMDQ8MCBgYOC3W7mp+f0w+wHOYxO3OG+e376hsMZjk3 +AAAAAP//YmCMY2A4wMAIN5e5gQETPD6AZisDAwMDgzSDAAPjByiHcQMDAwMDg1nOze1lByRu5/47 +c4859311AYNZzg0AAAAA//9iYGDBYihOIIMuwIjGL39/fwffA8b//xv/P2BPtzzHwCBjUQAAAAD/ +/yLFBrIBAAAA//9i1HhcwdhizX7u8NZNzyLbvT97bfrMf/QHI8evOwcSqGUJAAAA//9iYBB81iSw +pEE170Qrg5MIYydHqwdDQRMrAwcVrQAAAAD//2J4x7j9AAMDn8Q/BgYLBoaiAwwMjPdvMDBYM1Tv +oJodAAAAAP//Yqo/83+dxePWlxl3npsel9lvLfPcqlE9725C+acfVLMEAAAA//9i+s9gwCoaaGMR +evta/58PTEWzr21hufPjA8N+qlnBwAAAAAD//2JiWLci5v1+HmFXDqcnULE/MxgYGBj+f6CaJQAA +AAD//2Ji2FrkY3iYpYC5qDeGgeEMAwPDvwQBBoYvcTwOVLMEAAAA//9isDBgkP///0EOg9z35v// +Gc/eeW7BwPj5+QGZhANUswMAAAD//2JgqGBgYGBgqEMXlvhMPUsAAAAA//8iYDd1AAAAAP//AwDR +w7IkEbzhVQAAAABJRU5ErkJggg== +''')))) + return f + +# End of file diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageGrab.py b/server/www/packages/packages-darwin/x64/PIL/ImageGrab.py new file mode 100644 index 0000000..febdb23 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageGrab.py @@ -0,0 +1,61 @@ +# +# The Python Imaging Library +# $Id$ +# +# screen grabber (OS X and Windows only) +# +# History: +# 2001-04-26 fl created +# 2001-09-17 fl use builtin driver, if present +# 2002-11-19 fl added grabclipboard support +# +# Copyright (c) 2001-2002 by Secret Labs AB +# Copyright (c) 2001-2002 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image + +import sys +if sys.platform not in ["win32", "darwin"]: + raise ImportError("ImageGrab is OS X and Windows only") + +if sys.platform == "win32": + grabber = Image.core.grabscreen +elif sys.platform == "darwin": + import os + import tempfile + import subprocess + + +def grab(bbox=None): + if sys.platform == "darwin": + f, file = tempfile.mkstemp('.png') + os.close(f) + subprocess.call(['screencapture', '-x', file]) + im = Image.open(file) + im.load() + os.unlink(file) + else: + size, data = grabber() + im = Image.frombytes( + "RGB", size, data, + # RGB, 32-bit line padding, origo in lower left corner + "raw", "BGR", (size[0]*3 + 3) & -4, -1 + ) + if bbox: + im = im.crop(bbox) + return im + + +def grabclipboard(): + if sys.platform == "darwin": + raise NotImplementedError("Method is not implemented on OS X") + debug = 0 # temporary interface + data = Image.core.grabclipboard(debug) + if isinstance(data, bytes): + from PIL import BmpImagePlugin + import io + return BmpImagePlugin.DibImageFile(io.BytesIO(data)) + return data diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageMath.py b/server/www/packages/packages-darwin/x64/PIL/ImageMath.py new file mode 100644 index 0000000..f92d500 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageMath.py @@ -0,0 +1,270 @@ +# +# The Python Imaging Library +# $Id$ +# +# a simple math add-on for the Python Imaging Library +# +# History: +# 1999-02-15 fl Original PIL Plus release +# 2005-05-05 fl Simplified and cleaned up for PIL 1.1.6 +# 2005-09-12 fl Fixed int() and float() for Python 2.4.1 +# +# Copyright (c) 1999-2005 by Secret Labs AB +# Copyright (c) 2005 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image +from PIL import _imagingmath + +try: + import builtins +except ImportError: + import __builtin__ + builtins = __builtin__ + +VERBOSE = 0 + + +def _isconstant(v): + return isinstance(v, int) or isinstance(v, float) + + +class _Operand(object): + # wraps an image operand, providing standard operators + + def __init__(self, im): + self.im = im + + def __fixup(self, im1): + # convert image to suitable mode + if isinstance(im1, _Operand): + # argument was an image. + if im1.im.mode in ("1", "L"): + return im1.im.convert("I") + elif im1.im.mode in ("I", "F"): + return im1.im + else: + raise ValueError("unsupported mode: %s" % im1.im.mode) + else: + # argument was a constant + if _isconstant(im1) and self.im.mode in ("1", "L", "I"): + return Image.new("I", self.im.size, im1) + else: + return Image.new("F", self.im.size, im1) + + def apply(self, op, im1, im2=None, mode=None): + im1 = self.__fixup(im1) + if im2 is None: + # unary operation + out = Image.new(mode or im1.mode, im1.size, None) + im1.load() + try: + op = getattr(_imagingmath, op+"_"+im1.mode) + except AttributeError: + raise TypeError("bad operand type for '%s'" % op) + _imagingmath.unop(op, out.im.id, im1.im.id) + else: + # binary operation + im2 = self.__fixup(im2) + if im1.mode != im2.mode: + # convert both arguments to floating point + if im1.mode != "F": + im1 = im1.convert("F") + if im2.mode != "F": + im2 = im2.convert("F") + if im1.mode != im2.mode: + raise ValueError("mode mismatch") + if im1.size != im2.size: + # crop both arguments to a common size + size = (min(im1.size[0], im2.size[0]), + min(im1.size[1], im2.size[1])) + if im1.size != size: + im1 = im1.crop((0, 0) + size) + if im2.size != size: + im2 = im2.crop((0, 0) + size) + out = Image.new(mode or im1.mode, size, None) + else: + out = Image.new(mode or im1.mode, im1.size, None) + im1.load() + im2.load() + try: + op = getattr(_imagingmath, op+"_"+im1.mode) + except AttributeError: + raise TypeError("bad operand type for '%s'" % op) + _imagingmath.binop(op, out.im.id, im1.im.id, im2.im.id) + return _Operand(out) + + # unary operators + def __bool__(self): + # an image is "true" if it contains at least one non-zero pixel + return self.im.getbbox() is not None + + if bytes is str: + # Provide __nonzero__ for pre-Py3k + __nonzero__ = __bool__ + del __bool__ + + def __abs__(self): + return self.apply("abs", self) + + def __pos__(self): + return self + + def __neg__(self): + return self.apply("neg", self) + + # binary operators + def __add__(self, other): + return self.apply("add", self, other) + + def __radd__(self, other): + return self.apply("add", other, self) + + def __sub__(self, other): + return self.apply("sub", self, other) + + def __rsub__(self, other): + return self.apply("sub", other, self) + + def __mul__(self, other): + return self.apply("mul", self, other) + + def __rmul__(self, other): + return self.apply("mul", other, self) + + def __truediv__(self, other): + return self.apply("div", self, other) + + def __rtruediv__(self, other): + return self.apply("div", other, self) + + def __mod__(self, other): + return self.apply("mod", self, other) + + def __rmod__(self, other): + return self.apply("mod", other, self) + + def __pow__(self, other): + return self.apply("pow", self, other) + + def __rpow__(self, other): + return self.apply("pow", other, self) + + if bytes is str: + # Provide __div__ and __rdiv__ for pre-Py3k + __div__ = __truediv__ + __rdiv__ = __rtruediv__ + del __truediv__ + del __rtruediv__ + + # bitwise + def __invert__(self): + return self.apply("invert", self) + + def __and__(self, other): + return self.apply("and", self, other) + + def __rand__(self, other): + return self.apply("and", other, self) + + def __or__(self, other): + return self.apply("or", self, other) + + def __ror__(self, other): + return self.apply("or", other, self) + + def __xor__(self, other): + return self.apply("xor", self, other) + + def __rxor__(self, other): + return self.apply("xor", other, self) + + def __lshift__(self, other): + return self.apply("lshift", self, other) + + def __rshift__(self, other): + return self.apply("rshift", self, other) + + # logical + def __eq__(self, other): + return self.apply("eq", self, other) + + def __ne__(self, other): + return self.apply("ne", self, other) + + def __lt__(self, other): + return self.apply("lt", self, other) + + def __le__(self, other): + return self.apply("le", self, other) + + def __gt__(self, other): + return self.apply("gt", self, other) + + def __ge__(self, other): + return self.apply("ge", self, other) + + +# conversions +def imagemath_int(self): + return _Operand(self.im.convert("I")) + + +def imagemath_float(self): + return _Operand(self.im.convert("F")) + + +# logical +def imagemath_equal(self, other): + return self.apply("eq", self, other, mode="I") + + +def imagemath_notequal(self, other): + return self.apply("ne", self, other, mode="I") + + +def imagemath_min(self, other): + return self.apply("min", self, other) + + +def imagemath_max(self, other): + return self.apply("max", self, other) + + +def imagemath_convert(self, mode): + return _Operand(self.im.convert(mode)) + +ops = {} +for k, v in list(globals().items()): + if k[:10] == "imagemath_": + ops[k[10:]] = v + + +def eval(expression, _dict={}, **kw): + """ + Evaluates an image expression. + + :param expression: A string containing a Python-style expression. + :param options: Values to add to the evaluation context. You + can either use a dictionary, or one or more keyword + arguments. + :return: The evaluated expression. This is usually an image object, but can + also be an integer, a floating point value, or a pixel tuple, + depending on the expression. + """ + + # build execution namespace + args = ops.copy() + args.update(_dict) + args.update(kw) + for k, v in list(args.items()): + if hasattr(v, "im"): + args[k] = _Operand(v) + + out = builtins.eval(expression, args) + try: + return out.im + except AttributeError: + return out diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageMode.py b/server/www/packages/packages-darwin/x64/PIL/ImageMode.py new file mode 100644 index 0000000..d896001 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageMode.py @@ -0,0 +1,52 @@ +# +# The Python Imaging Library. +# $Id$ +# +# standard mode descriptors +# +# History: +# 2006-03-20 fl Added +# +# Copyright (c) 2006 by Secret Labs AB. +# Copyright (c) 2006 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +# mode descriptor cache +_modes = {} + + +## +# Wrapper for mode strings. + +class ModeDescriptor(object): + + def __init__(self, mode, bands, basemode, basetype): + self.mode = mode + self.bands = bands + self.basemode = basemode + self.basetype = basetype + + def __str__(self): + return self.mode + + +## +# Gets a mode descriptor for the given mode. + +def getmode(mode): + if not _modes: + # initialize mode cache + from PIL import Image + # core modes + for m, (basemode, basetype, bands) in Image._MODEINFO.items(): + _modes[m] = ModeDescriptor(m, bands, basemode, basetype) + # extra experimental modes + _modes["LA"] = ModeDescriptor("LA", ("L", "A"), "L", "L") + _modes["PA"] = ModeDescriptor("PA", ("P", "A"), "RGB", "L") + # mapping modes + _modes["I;16"] = ModeDescriptor("I;16", "I", "L", "L") + _modes["I;16L"] = ModeDescriptor("I;16L", "I", "L", "L") + _modes["I;16B"] = ModeDescriptor("I;16B", "I", "L", "L") + return _modes[mode] diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageMorph.py b/server/www/packages/packages-darwin/x64/PIL/ImageMorph.py new file mode 100644 index 0000000..902ed8d --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageMorph.py @@ -0,0 +1,251 @@ +# A binary morphology add-on for the Python Imaging Library +# +# History: +# 2014-06-04 Initial version. +# +# Copyright (c) 2014 Dov Grobgeld + +from PIL import Image +from PIL import _imagingmorph +import re + +LUT_SIZE = 1 << 9 + + +class LutBuilder(object): + """A class for building a MorphLut from a descriptive language + + The input patterns is a list of a strings sequences like these:: + + 4:(... + .1. + 111)->1 + + (whitespaces including linebreaks are ignored). The option 4 + describes a series of symmetry operations (in this case a + 4-rotation), the pattern is described by: + + - . or X - Ignore + - 1 - Pixel is on + - 0 - Pixel is off + + The result of the operation is described after "->" string. + + The default is to return the current pixel value, which is + returned if no other match is found. + + Operations: + + - 4 - 4 way rotation + - N - Negate + - 1 - Dummy op for no other operation (an op must always be given) + - M - Mirroring + + Example:: + + lb = LutBuilder(patterns = ["4:(... .1. 111)->1"]) + lut = lb.build_lut() + + """ + def __init__(self, patterns=None, op_name=None): + if patterns is not None: + self.patterns = patterns + else: + self.patterns = [] + self.lut = None + if op_name is not None: + known_patterns = { + 'corner': ['1:(... ... ...)->0', + '4:(00. 01. ...)->1'], + 'dilation4': ['4:(... .0. .1.)->1'], + 'dilation8': ['4:(... .0. .1.)->1', + '4:(... .0. ..1)->1'], + 'erosion4': ['4:(... .1. .0.)->0'], + 'erosion8': ['4:(... .1. .0.)->0', + '4:(... .1. ..0)->0'], + 'edge': ['1:(... ... ...)->0', + '4:(.0. .1. ...)->1', + '4:(01. .1. ...)->1'] + } + if op_name not in known_patterns: + raise Exception('Unknown pattern '+op_name+'!') + + self.patterns = known_patterns[op_name] + + def add_patterns(self, patterns): + self.patterns += patterns + + def build_default_lut(self): + symbols = [0, 1] + m = 1 << 4 # pos of current pixel + self.lut = bytearray([symbols[(i & m) > 0] for i in range(LUT_SIZE)]) + + def get_lut(self): + return self.lut + + def _string_permute(self, pattern, permutation): + """string_permute takes a pattern and a permutation and returns the + string permuted according to the permutation list. + """ + assert(len(permutation) == 9) + return ''.join([pattern[p] for p in permutation]) + + def _pattern_permute(self, basic_pattern, options, basic_result): + """pattern_permute takes a basic pattern and its result and clones + the pattern according to the modifications described in the $options + parameter. It returns a list of all cloned patterns.""" + patterns = [(basic_pattern, basic_result)] + + # rotations + if '4' in options: + res = patterns[-1][1] + for i in range(4): + patterns.append( + (self._string_permute(patterns[-1][0], [6, 3, 0, + 7, 4, 1, + 8, 5, 2]), res)) + # mirror + if 'M' in options: + n = len(patterns) + for pattern, res in patterns[0:n]: + patterns.append( + (self._string_permute(pattern, [2, 1, 0, + 5, 4, 3, + 8, 7, 6]), res)) + + # negate + if 'N' in options: + n = len(patterns) + for pattern, res in patterns[0:n]: + # Swap 0 and 1 + pattern = (pattern + .replace('0', 'Z') + .replace('1', '0') + .replace('Z', '1')) + res = '%d' % (1-int(res)) + patterns.append((pattern, res)) + + return patterns + + def build_lut(self): + """Compile all patterns into a morphology lut. + + TBD :Build based on (file) morphlut:modify_lut + """ + self.build_default_lut() + patterns = [] + + # Parse and create symmetries of the patterns strings + for p in self.patterns: + m = re.search( + r'(\w*):?\s*\((.+?)\)\s*->\s*(\d)', p.replace('\n', '')) + if not m: + raise Exception('Syntax error in pattern "'+p+'"') + options = m.group(1) + pattern = m.group(2) + result = int(m.group(3)) + + # Get rid of spaces + pattern = pattern.replace(' ', '').replace('\n', '') + + patterns += self._pattern_permute(pattern, options, result) + +# # Debugging +# for p,r in patterns: +# print p,r +# print '--' + + # compile the patterns into regular expressions for speed + for i in range(len(patterns)): + p = patterns[i][0].replace('.', 'X').replace('X', '[01]') + p = re.compile(p) + patterns[i] = (p, patterns[i][1]) + + # Step through table and find patterns that match. + # Note that all the patterns are searched. The last one + # caught overrides + for i in range(LUT_SIZE): + # Build the bit pattern + bitpattern = bin(i)[2:] + bitpattern = ('0'*(9-len(bitpattern)) + bitpattern)[::-1] + + for p, r in patterns: + if p.match(bitpattern): + self.lut[i] = [0, 1][r] + + return self.lut + + +class MorphOp(object): + """A class for binary morphological operators""" + + def __init__(self, + lut=None, + op_name=None, + patterns=None): + """Create a binary morphological operator""" + self.lut = lut + if op_name is not None: + self.lut = LutBuilder(op_name=op_name).build_lut() + elif patterns is not None: + self.lut = LutBuilder(patterns=patterns).build_lut() + + def apply(self, image): + """Run a single morphological operation on an image + + Returns a tuple of the number of changed pixels and the + morphed image""" + if self.lut is None: + raise Exception('No operator loaded') + + if image.mode != 'L': + raise Exception('Image must be binary, meaning it must use mode L') + outimage = Image.new(image.mode, image.size, None) + count = _imagingmorph.apply( + bytes(self.lut), image.im.id, outimage.im.id) + return count, outimage + + def match(self, image): + """Get a list of coordinates matching the morphological operation on + an image. + + Returns a list of tuples of (x,y) coordinates + of all matching pixels.""" + if self.lut is None: + raise Exception('No operator loaded') + + if image.mode != 'L': + raise Exception('Image must be binary, meaning it must use mode L') + return _imagingmorph.match(bytes(self.lut), image.im.id) + + def get_on_pixels(self, image): + """Get a list of all turned on pixels in a binary image + + Returns a list of tuples of (x,y) coordinates + of all matching pixels.""" + + if image.mode != 'L': + raise Exception('Image must be binary, meaning it must use mode L') + return _imagingmorph.get_on_pixels(image.im.id) + + def load_lut(self, filename): + """Load an operator from an mrl file""" + with open(filename, 'rb') as f: + self.lut = bytearray(f.read()) + + if len(self.lut) != 8192: + self.lut = None + raise Exception('Wrong size operator file!') + + def save_lut(self, filename): + """Save an operator to an mrl file""" + if self.lut is None: + raise Exception('No operator loaded') + with open(filename, 'wb') as f: + f.write(self.lut) + + def set_lut(self, lut): + """Set the lut from an external source""" + self.lut = lut + +# End of file diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageOps.py b/server/www/packages/packages-darwin/x64/PIL/ImageOps.py new file mode 100644 index 0000000..f317645 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageOps.py @@ -0,0 +1,461 @@ +# +# The Python Imaging Library. +# $Id$ +# +# standard image operations +# +# History: +# 2001-10-20 fl Created +# 2001-10-23 fl Added autocontrast operator +# 2001-12-18 fl Added Kevin's fit operator +# 2004-03-14 fl Fixed potential division by zero in equalize +# 2005-05-05 fl Fixed equalize for low number of values +# +# Copyright (c) 2001-2004 by Secret Labs AB +# Copyright (c) 2001-2004 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image +from PIL._util import isStringType +import operator +import functools + + +# +# helpers + +def _border(border): + if isinstance(border, tuple): + if len(border) == 2: + left, top = right, bottom = border + elif len(border) == 4: + left, top, right, bottom = border + else: + left = top = right = bottom = border + return left, top, right, bottom + + +def _color(color, mode): + if isStringType(color): + from PIL import ImageColor + color = ImageColor.getcolor(color, mode) + return color + + +def _lut(image, lut): + if image.mode == "P": + # FIXME: apply to lookup table, not image data + raise NotImplementedError("mode P support coming soon") + elif image.mode in ("L", "RGB"): + if image.mode == "RGB" and len(lut) == 256: + lut = lut + lut + lut + return image.point(lut) + else: + raise IOError("not supported for this image mode") + +# +# actions + + +def autocontrast(image, cutoff=0, ignore=None): + """ + Maximize (normalize) image contrast. This function calculates a + histogram of the input image, removes **cutoff** percent of the + lightest and darkest pixels from the histogram, and remaps the image + so that the darkest pixel becomes black (0), and the lightest + becomes white (255). + + :param image: The image to process. + :param cutoff: How many percent to cut off from the histogram. + :param ignore: The background pixel value (use None for no background). + :return: An image. + """ + histogram = image.histogram() + lut = [] + for layer in range(0, len(histogram), 256): + h = histogram[layer:layer+256] + if ignore is not None: + # get rid of outliers + try: + h[ignore] = 0 + except TypeError: + # assume sequence + for ix in ignore: + h[ix] = 0 + if cutoff: + # cut off pixels from both ends of the histogram + # get number of pixels + n = 0 + for ix in range(256): + n = n + h[ix] + # remove cutoff% pixels from the low end + cut = n * cutoff // 100 + for lo in range(256): + if cut > h[lo]: + cut = cut - h[lo] + h[lo] = 0 + else: + h[lo] -= cut + cut = 0 + if cut <= 0: + break + # remove cutoff% samples from the hi end + cut = n * cutoff // 100 + for hi in range(255, -1, -1): + if cut > h[hi]: + cut = cut - h[hi] + h[hi] = 0 + else: + h[hi] -= cut + cut = 0 + if cut <= 0: + break + # find lowest/highest samples after preprocessing + for lo in range(256): + if h[lo]: + break + for hi in range(255, -1, -1): + if h[hi]: + break + if hi <= lo: + # don't bother + lut.extend(list(range(256))) + else: + scale = 255.0 / (hi - lo) + offset = -lo * scale + for ix in range(256): + ix = int(ix * scale + offset) + if ix < 0: + ix = 0 + elif ix > 255: + ix = 255 + lut.append(ix) + return _lut(image, lut) + + +def colorize(image, black, white): + """ + Colorize grayscale image. The **black** and **white** + arguments should be RGB tuples; this function calculates a color + wedge mapping all black pixels in the source image to the first + color, and all white pixels to the second color. + + :param image: The image to colorize. + :param black: The color to use for black input pixels. + :param white: The color to use for white input pixels. + :return: An image. + """ + assert image.mode == "L" + black = _color(black, "RGB") + white = _color(white, "RGB") + red = [] + green = [] + blue = [] + for i in range(256): + red.append(black[0]+i*(white[0]-black[0])//255) + green.append(black[1]+i*(white[1]-black[1])//255) + blue.append(black[2]+i*(white[2]-black[2])//255) + image = image.convert("RGB") + return _lut(image, red + green + blue) + + +def crop(image, border=0): + """ + Remove border from image. The same amount of pixels are removed + from all four sides. This function works on all image modes. + + .. seealso:: :py:meth:`~PIL.Image.Image.crop` + + :param image: The image to crop. + :param border: The number of pixels to remove. + :return: An image. + """ + left, top, right, bottom = _border(border) + return image.crop( + (left, top, image.size[0]-right, image.size[1]-bottom) + ) + + +def deform(image, deformer, resample=Image.BILINEAR): + """ + Deform the image. + + :param image: The image to deform. + :param deformer: A deformer object. Any object that implements a + **getmesh** method can be used. + :param resample: What resampling filter to use. + :return: An image. + """ + return image.transform( + image.size, Image.MESH, deformer.getmesh(image), resample + ) + + +def equalize(image, mask=None): + """ + Equalize the image histogram. This function applies a non-linear + mapping to the input image, in order to create a uniform + distribution of grayscale values in the output image. + + :param image: The image to equalize. + :param mask: An optional mask. If given, only the pixels selected by + the mask are included in the analysis. + :return: An image. + """ + if image.mode == "P": + image = image.convert("RGB") + h = image.histogram(mask) + lut = [] + for b in range(0, len(h), 256): + histo = [_f for _f in h[b:b+256] if _f] + if len(histo) <= 1: + lut.extend(list(range(256))) + else: + step = (functools.reduce(operator.add, histo) - histo[-1]) // 255 + if not step: + lut.extend(list(range(256))) + else: + n = step // 2 + for i in range(256): + lut.append(n // step) + n = n + h[i+b] + return _lut(image, lut) + + +def expand(image, border=0, fill=0): + """ + Add border to the image + + :param image: The image to expand. + :param border: Border width, in pixels. + :param fill: Pixel fill value (a color value). Default is 0 (black). + :return: An image. + """ + left, top, right, bottom = _border(border) + width = left + image.size[0] + right + height = top + image.size[1] + bottom + out = Image.new(image.mode, (width, height), _color(fill, image.mode)) + out.paste(image, (left, top)) + return out + + +def fit(image, size, method=Image.NEAREST, bleed=0.0, centering=(0.5, 0.5)): + """ + Returns a sized and cropped version of the image, cropped to the + requested aspect ratio and size. + + This function was contributed by Kevin Cazabon. + + :param size: The requested output size in pixels, given as a + (width, height) tuple. + :param method: What resampling method to use. Default is + :py:attr:`PIL.Image.NEAREST`. + :param bleed: Remove a border around the outside of the image (from all + four edges. The value is a decimal percentage (use 0.01 for + one percent). The default value is 0 (no border). + :param centering: Control the cropping position. Use (0.5, 0.5) for + center cropping (e.g. if cropping the width, take 50% off + of the left side, and therefore 50% off the right side). + (0.0, 0.0) will crop from the top left corner (i.e. if + cropping the width, take all of the crop off of the right + side, and if cropping the height, take all of it off the + bottom). (1.0, 0.0) will crop from the bottom left + corner, etc. (i.e. if cropping the width, take all of the + crop off the left side, and if cropping the height take + none from the top, and therefore all off the bottom). + :return: An image. + """ + + # by Kevin Cazabon, Feb 17/2000 + # kevin@cazabon.com + # http://www.cazabon.com + + # ensure inputs are valid + if not isinstance(centering, list): + centering = [centering[0], centering[1]] + + if centering[0] > 1.0 or centering[0] < 0.0: + centering[0] = 0.50 + if centering[1] > 1.0 or centering[1] < 0.0: + centering[1] = 0.50 + + if bleed > 0.49999 or bleed < 0.0: + bleed = 0.0 + + # calculate the area to use for resizing and cropping, subtracting + # the 'bleed' around the edges + + # number of pixels to trim off on Top and Bottom, Left and Right + bleedPixels = ( + int((float(bleed) * float(image.size[0])) + 0.5), + int((float(bleed) * float(image.size[1])) + 0.5) + ) + + liveArea = (0, 0, image.size[0], image.size[1]) + if bleed > 0.0: + liveArea = ( + bleedPixels[0], bleedPixels[1], image.size[0] - bleedPixels[0] - 1, + image.size[1] - bleedPixels[1] - 1 + ) + + liveSize = (liveArea[2] - liveArea[0], liveArea[3] - liveArea[1]) + + # calculate the aspect ratio of the liveArea + liveAreaAspectRatio = float(liveSize[0])/float(liveSize[1]) + + # calculate the aspect ratio of the output image + aspectRatio = float(size[0]) / float(size[1]) + + # figure out if the sides or top/bottom will be cropped off + if liveAreaAspectRatio >= aspectRatio: + # liveArea is wider than what's needed, crop the sides + cropWidth = int((aspectRatio * float(liveSize[1])) + 0.5) + cropHeight = liveSize[1] + else: + # liveArea is taller than what's needed, crop the top and bottom + cropWidth = liveSize[0] + cropHeight = int((float(liveSize[0])/aspectRatio) + 0.5) + + # make the crop + leftSide = int(liveArea[0] + (float(liveSize[0]-cropWidth) * centering[0])) + if leftSide < 0: + leftSide = 0 + topSide = int(liveArea[1] + (float(liveSize[1]-cropHeight) * centering[1])) + if topSide < 0: + topSide = 0 + + out = image.crop( + (leftSide, topSide, leftSide + cropWidth, topSide + cropHeight) + ) + + # resize the image and return it + return out.resize(size, method) + + +def flip(image): + """ + Flip the image vertically (top to bottom). + + :param image: The image to flip. + :return: An image. + """ + return image.transpose(Image.FLIP_TOP_BOTTOM) + + +def grayscale(image): + """ + Convert the image to grayscale. + + :param image: The image to convert. + :return: An image. + """ + return image.convert("L") + + +def invert(image): + """ + Invert (negate) the image. + + :param image: The image to invert. + :return: An image. + """ + lut = [] + for i in range(256): + lut.append(255-i) + return _lut(image, lut) + + +def mirror(image): + """ + Flip image horizontally (left to right). + + :param image: The image to mirror. + :return: An image. + """ + return image.transpose(Image.FLIP_LEFT_RIGHT) + + +def posterize(image, bits): + """ + Reduce the number of bits for each color channel. + + :param image: The image to posterize. + :param bits: The number of bits to keep for each channel (1-8). + :return: An image. + """ + lut = [] + mask = ~(2**(8-bits)-1) + for i in range(256): + lut.append(i & mask) + return _lut(image, lut) + + +def solarize(image, threshold=128): + """ + Invert all pixel values above a threshold. + + :param image: The image to solarize. + :param threshold: All pixels above this greyscale level are inverted. + :return: An image. + """ + lut = [] + for i in range(256): + if i < threshold: + lut.append(i) + else: + lut.append(255-i) + return _lut(image, lut) + + +# -------------------------------------------------------------------- +# PIL USM components, from Kevin Cazabon. + +def gaussian_blur(im, radius=None): + """ PIL_usm.gblur(im, [radius])""" + + if radius is None: + radius = 5.0 + + im.load() + + return im.im.gaussian_blur(radius) + +gblur = gaussian_blur + + +def unsharp_mask(im, radius=None, percent=None, threshold=None): + """ PIL_usm.usm(im, [radius, percent, threshold])""" + + if radius is None: + radius = 5.0 + if percent is None: + percent = 150 + if threshold is None: + threshold = 3 + + im.load() + + return im.im.unsharp_mask(radius, percent, threshold) + +usm = unsharp_mask + + +def box_blur(image, radius): + """ + Blur the image by setting each pixel to the average value of the pixels + in a square box extending radius pixels in each direction. + Supports float radius of arbitrary size. Uses an optimized implementation + which runs in linear time relative to the size of the image + for any radius value. + + :param image: The image to blur. + :param radius: Size of the box in one direction. Radius 0 does not blur, + returns an identical image. Radius 1 takes 1 pixel + in each direction, i.e. 9 pixels in total. + :return: An image. + """ + image.load() + + return image._new(image.im.box_blur(radius)) diff --git a/server/www/packages/packages-darwin/x64/PIL/ImagePalette.py b/server/www/packages/packages-darwin/x64/PIL/ImagePalette.py new file mode 100644 index 0000000..fdc5a46 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImagePalette.py @@ -0,0 +1,237 @@ +# +# The Python Imaging Library. +# $Id$ +# +# image palette object +# +# History: +# 1996-03-11 fl Rewritten. +# 1997-01-03 fl Up and running. +# 1997-08-23 fl Added load hack +# 2001-04-16 fl Fixed randint shadow bug in random() +# +# Copyright (c) 1997-2001 by Secret Labs AB +# Copyright (c) 1996-1997 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +import array +from PIL import ImageColor + + +class ImagePalette(object): + """ + Color palette for palette mapped images + + :param mode: The mode to use for the Palette. See: + :ref:`concept-modes`. Defaults to "RGB" + :param palette: An optional palette. If given, it must be a bytearray, + an array or a list of ints between 0-255 and of length ``size`` + times the number of colors in ``mode``. The list must be aligned + by channel (All R values must be contiguous in the list before G + and B values.) Defaults to 0 through 255 per channel. + :param size: An optional palette size. If given, it cannot be equal to + or greater than 256. Defaults to 0. + """ + + def __init__(self, mode="RGB", palette=None, size=0): + self.mode = mode + self.rawmode = None # if set, palette contains raw data + self.palette = palette or list(range(256))*len(self.mode) + self.colors = {} + self.dirty = None + if ((size == 0 and len(self.mode)*256 != len(self.palette)) or + (size != 0 and size != len(self.palette))): + raise ValueError("wrong palette size") + + def copy(self): + new = ImagePalette() + + new.mode = self.mode + new.rawmode = self.rawmode + if self.palette is not None: + new.palette = self.palette[:] + new.colors = self.colors.copy() + new.dirty = self.dirty + + return new + + def getdata(self): + """ + Get palette contents in format suitable # for the low-level + ``im.putpalette`` primitive. + + .. warning:: This method is experimental. + """ + if self.rawmode: + return self.rawmode, self.palette + return self.mode + ";L", self.tobytes() + + def tobytes(self): + """Convert palette to bytes. + + .. warning:: This method is experimental. + """ + if self.rawmode: + raise ValueError("palette contains raw palette data") + if isinstance(self.palette, bytes): + return self.palette + arr = array.array("B", self.palette) + if hasattr(arr, 'tobytes'): + return arr.tobytes() + return arr.tostring() + + # Declare tostring as an alias for tobytes + tostring = tobytes + + def getcolor(self, color): + """Given an rgb tuple, allocate palette entry. + + .. warning:: This method is experimental. + """ + if self.rawmode: + raise ValueError("palette contains raw palette data") + if isinstance(color, tuple): + try: + return self.colors[color] + except KeyError: + # allocate new color slot + if isinstance(self.palette, bytes): + self.palette = [int(x) for x in self.palette] + index = len(self.colors) + if index >= 256: + raise ValueError("cannot allocate more than 256 colors") + self.colors[color] = index + self.palette[index] = color[0] + self.palette[index+256] = color[1] + self.palette[index+512] = color[2] + self.dirty = 1 + return index + else: + raise ValueError("unknown color specifier: %r" % color) + + def save(self, fp): + """Save palette to text file. + + .. warning:: This method is experimental. + """ + if self.rawmode: + raise ValueError("palette contains raw palette data") + if isinstance(fp, str): + fp = open(fp, "w") + fp.write("# Palette\n") + fp.write("# Mode: %s\n" % self.mode) + for i in range(256): + fp.write("%d" % i) + for j in range(i*len(self.mode), (i+1)*len(self.mode)): + try: + fp.write(" %d" % self.palette[j]) + except IndexError: + fp.write(" 0") + fp.write("\n") + fp.close() + + +# -------------------------------------------------------------------- +# Internal + +def raw(rawmode, data): + palette = ImagePalette() + palette.rawmode = rawmode + palette.palette = data + palette.dirty = 1 + return palette + + +# -------------------------------------------------------------------- +# Factories + +def make_linear_lut(black, white): + lut = [] + if black == 0: + for i in range(256): + lut.append(white*i//255) + else: + raise NotImplementedError # FIXME + return lut + + +def make_gamma_lut(exp): + lut = [] + for i in range(256): + lut.append(int(((i / 255.0) ** exp) * 255.0 + 0.5)) + return lut + + +def negative(mode="RGB"): + palette = list(range(256)) + palette.reverse() + return ImagePalette(mode, palette * len(mode)) + + +def random(mode="RGB"): + from random import randint + palette = [] + for i in range(256*len(mode)): + palette.append(randint(0, 255)) + return ImagePalette(mode, palette) + + +def sepia(white="#fff0c0"): + r, g, b = ImageColor.getrgb(white) + r = make_linear_lut(0, r) + g = make_linear_lut(0, g) + b = make_linear_lut(0, b) + return ImagePalette("RGB", r + g + b) + + +def wedge(mode="RGB"): + return ImagePalette(mode, list(range(256)) * len(mode)) + + +def load(filename): + + # FIXME: supports GIMP gradients only + + fp = open(filename, "rb") + + lut = None + + if not lut: + try: + from PIL import GimpPaletteFile + fp.seek(0) + p = GimpPaletteFile.GimpPaletteFile(fp) + lut = p.getpalette() + except (SyntaxError, ValueError): + # import traceback + # traceback.print_exc() + pass + + if not lut: + try: + from PIL import GimpGradientFile + fp.seek(0) + p = GimpGradientFile.GimpGradientFile(fp) + lut = p.getpalette() + except (SyntaxError, ValueError): + # import traceback + # traceback.print_exc() + pass + + if not lut: + try: + from PIL import PaletteFile + fp.seek(0) + p = PaletteFile.PaletteFile(fp) + lut = p.getpalette() + except (SyntaxError, ValueError): + # import traceback + # traceback.print_exc() + pass + + if not lut: + raise IOError("cannot load palette") + + return lut # data, rawmode diff --git a/server/www/packages/packages-darwin/x64/PIL/ImagePath.py b/server/www/packages/packages-darwin/x64/PIL/ImagePath.py new file mode 100644 index 0000000..f23d014 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImagePath.py @@ -0,0 +1,66 @@ +# +# The Python Imaging Library +# $Id$ +# +# path interface +# +# History: +# 1996-11-04 fl Created +# 2002-04-14 fl Added documentation stub class +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image + + +# the Python class below is overridden by the C implementation. + + +class Path(object): + + def __init__(self, xy): + pass + + ## + # Compacts the path, by removing points that are close to each + # other. This method modifies the path in place. + + def compact(self, distance=2): + pass + + ## + # Gets the bounding box. + + def getbbox(self): + pass + + ## + # Maps the path through a function. + + def map(self, function): + pass + + ## + # Converts the path to Python list. + # + # @param flat By default, this function returns a list of 2-tuples + # [(x, y), ...]. If this argument is true, it returns a flat + # list [x, y, ...] instead. + # @return A list of coordinates. + + def tolist(self, flat=0): + pass + + ## + # Transforms the path. + + def transform(self, matrix): + pass + + +# override with C implementation +Path = Image.core.path diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageQt.py b/server/www/packages/packages-darwin/x64/PIL/ImageQt.py new file mode 100644 index 0000000..aece9d6 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageQt.py @@ -0,0 +1,198 @@ +# +# The Python Imaging Library. +# $Id$ +# +# a simple Qt image interface. +# +# history: +# 2006-06-03 fl: created +# 2006-06-04 fl: inherit from QImage instead of wrapping it +# 2006-06-05 fl: removed toimage helper; move string support to ImageQt +# 2013-11-13 fl: add support for Qt5 (aurelien.ballier@cyclonit.com) +# +# Copyright (c) 2006 by Secret Labs AB +# Copyright (c) 2006 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image +from PIL._util import isPath +from io import BytesIO + +qt_is_installed = True +qt_version = None +try: + from PyQt5.QtGui import QImage, qRgba, QPixmap + from PyQt5.QtCore import QBuffer, QIODevice + qt_version = '5' +except ImportError: + try: + from PyQt4.QtGui import QImage, qRgba, QPixmap + from PyQt4.QtCore import QBuffer, QIODevice + qt_version = '4' + except ImportError: + try: + from PySide.QtGui import QImage, qRgba, QPixmap + from PySide.QtCore import QBuffer, QIODevice + qt_version = 'side' + except ImportError: + qt_is_installed = False + + +def rgb(r, g, b, a=255): + """(Internal) Turns an RGB color into a Qt compatible color integer.""" + # use qRgb to pack the colors, and then turn the resulting long + # into a negative integer with the same bitpattern. + return (qRgba(r, g, b, a) & 0xffffffff) + + +# :param im A PIL Image object, or a file name +# (given either as Python string or a PyQt string object) + +def fromqimage(im): + buffer = QBuffer() + buffer.open(QIODevice.ReadWrite) + # preserve alha channel with png + # otherwise ppm is more friendly with Image.open + if im.hasAlphaChannel(): + im.save(buffer, 'png') + else: + im.save(buffer, 'ppm') + + b = BytesIO() + try: + b.write(buffer.data()) + except TypeError: + # workaround for Python 2 + b.write(str(buffer.data())) + buffer.close() + b.seek(0) + + return Image.open(b) + + +def fromqpixmap(im): + return fromqimage(im) + # buffer = QBuffer() + # buffer.open(QIODevice.ReadWrite) + # # im.save(buffer) + # # What if png doesn't support some image features like animation? + # im.save(buffer, 'ppm') + # bytes_io = BytesIO() + # bytes_io.write(buffer.data()) + # buffer.close() + # bytes_io.seek(0) + # return Image.open(bytes_io) + + +def align8to32(bytes, width, mode): + """ + converts each scanline of data from 8 bit to 32 bit aligned + """ + + bits_per_pixel = { + '1': 1, + 'L': 8, + 'P': 8, + }[mode] + + # calculate bytes per line and the extra padding if needed + bits_per_line = bits_per_pixel * width + full_bytes_per_line, remaining_bits_per_line = divmod(bits_per_line, 8) + bytes_per_line = full_bytes_per_line + (1 if remaining_bits_per_line else 0) + + extra_padding = -bytes_per_line % 4 + + # already 32 bit aligned by luck + if not extra_padding: + return bytes + + new_data = [] + for i in range(len(bytes) // bytes_per_line): + new_data.append(bytes[i*bytes_per_line:(i+1)*bytes_per_line] + b'\x00' * extra_padding) + + return b''.join(new_data) + + +def _toqclass_helper(im): + data = None + colortable = None + + # handle filename, if given instead of image name + if hasattr(im, "toUtf8"): + # FIXME - is this really the best way to do this? + if str is bytes: + im = unicode(im.toUtf8(), "utf-8") + else: + im = str(im.toUtf8(), "utf-8") + if isPath(im): + im = Image.open(im) + + if im.mode == "1": + format = QImage.Format_Mono + elif im.mode == "L": + format = QImage.Format_Indexed8 + colortable = [] + for i in range(256): + colortable.append(rgb(i, i, i)) + elif im.mode == "P": + format = QImage.Format_Indexed8 + colortable = [] + palette = im.getpalette() + for i in range(0, len(palette), 3): + colortable.append(rgb(*palette[i:i+3])) + elif im.mode == "RGB": + data = im.tobytes("raw", "BGRX") + format = QImage.Format_RGB32 + elif im.mode == "RGBA": + try: + data = im.tobytes("raw", "BGRA") + except SystemError: + # workaround for earlier versions + r, g, b, a = im.split() + im = Image.merge("RGBA", (b, g, r, a)) + format = QImage.Format_ARGB32 + else: + raise ValueError("unsupported image mode %r" % im.mode) + + # must keep a reference, or Qt will crash! + __data = data or align8to32(im.tobytes(), im.size[0], im.mode) + return { + 'data': __data, 'im': im, 'format': format, 'colortable': colortable + } + +## +# An PIL image wrapper for Qt. This is a subclass of PyQt's QImage +# class. +# +# @param im A PIL Image object, or a file name (given either as Python +# string or a PyQt string object). + +if qt_is_installed: + class ImageQt(QImage): + + def __init__(self, im): + im_data = _toqclass_helper(im) + QImage.__init__(self, + im_data['data'], im_data['im'].size[0], + im_data['im'].size[1], im_data['format']) + if im_data['colortable']: + self.setColorTable(im_data['colortable']) + + +def toqimage(im): + return ImageQt(im) + + +def toqpixmap(im): + # # This doesn't work. For now using a dumb approach. + # im_data = _toqclass_helper(im) + # result = QPixmap(im_data['im'].size[0], im_data['im'].size[1]) + # result.loadFromData(im_data['data']) + # Fix some strange bug that causes + if im.mode == 'RGB': + im = im.convert('RGBA') + + qimage = toqimage(im) + return QPixmap.fromImage(qimage) diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageSequence.py b/server/www/packages/packages-darwin/x64/PIL/ImageSequence.py new file mode 100644 index 0000000..256bcbe --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageSequence.py @@ -0,0 +1,42 @@ +# +# The Python Imaging Library. +# $Id$ +# +# sequence support classes +# +# history: +# 1997-02-20 fl Created +# +# Copyright (c) 1997 by Secret Labs AB. +# Copyright (c) 1997 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +## + + +class Iterator(object): + """ + This class implements an iterator object that can be used to loop + over an image sequence. + + You can use the ``[]`` operator to access elements by index. This operator + will raise an :py:exc:`IndexError` if you try to access a nonexistent + frame. + + :param im: An image object. + """ + + def __init__(self, im): + if not hasattr(im, "seek"): + raise AttributeError("im must have seek method") + self.im = im + + def __getitem__(self, ix): + try: + if ix: + self.im.seek(ix) + return self.im + except EOFError: + raise IndexError # end of sequence diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageShow.py b/server/www/packages/packages-darwin/x64/PIL/ImageShow.py new file mode 100644 index 0000000..51417c3 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageShow.py @@ -0,0 +1,179 @@ +# +# The Python Imaging Library. +# $Id$ +# +# im.show() drivers +# +# History: +# 2008-04-06 fl Created +# +# Copyright (c) Secret Labs AB 2008. +# +# See the README file for information on usage and redistribution. +# + +from __future__ import print_function + +from PIL import Image +import os +import sys + +if sys.version_info >= (3, 3): + from shlex import quote +else: + from pipes import quote + +_viewers = [] + + +def register(viewer, order=1): + try: + if issubclass(viewer, Viewer): + viewer = viewer() + except TypeError: + pass # raised if viewer wasn't a class + if order > 0: + _viewers.append(viewer) + elif order < 0: + _viewers.insert(0, viewer) + + +## +# Displays a given image. +# +# @param image An image object. +# @param title Optional title. Not all viewers can display the title. +# @param **options Additional viewer options. +# @return True if a suitable viewer was found, false otherwise. + +def show(image, title=None, **options): + for viewer in _viewers: + if viewer.show(image, title=title, **options): + return 1 + return 0 + + +## +# Base class for viewers. + +class Viewer(object): + + # main api + + def show(self, image, **options): + + # save temporary image to disk + if image.mode[:4] == "I;16": + # @PIL88 @PIL101 + # "I;16" isn't an 'official' mode, but we still want to + # provide a simple way to show 16-bit images. + base = "L" + # FIXME: auto-contrast if max() > 255? + else: + base = Image.getmodebase(image.mode) + if base != image.mode and image.mode != "1": + image = image.convert(base) + + return self.show_image(image, **options) + + # hook methods + + format = None + + def get_format(self, image): + # return format name, or None to save as PGM/PPM + return self.format + + def get_command(self, file, **options): + raise NotImplementedError + + def save_image(self, image): + # save to temporary file, and return filename + return image._dump(format=self.get_format(image)) + + def show_image(self, image, **options): + # display given image + return self.show_file(self.save_image(image), **options) + + def show_file(self, file, **options): + # display given file + os.system(self.get_command(file, **options)) + return 1 + +# -------------------------------------------------------------------- + +if sys.platform == "win32": + + class WindowsViewer(Viewer): + format = "BMP" + + def get_command(self, file, **options): + return ('start "Pillow" /WAIT "%s" ' + '&& ping -n 2 127.0.0.1 >NUL ' + '&& del /f "%s"' % (file, file)) + + register(WindowsViewer) + +elif sys.platform == "darwin": + + class MacViewer(Viewer): + format = "BMP" + + def get_command(self, file, **options): + # on darwin open returns immediately resulting in the temp + # file removal while app is opening + command = "open -a /Applications/Preview.app" + command = "(%s %s; sleep 20; rm -f %s)&" % (command, quote(file), + quote(file)) + return command + + register(MacViewer) + +else: + + # unixoids + + def which(executable): + path = os.environ.get("PATH") + if not path: + return None + for dirname in path.split(os.pathsep): + filename = os.path.join(dirname, executable) + if os.path.isfile(filename): + # FIXME: make sure it's executable + return filename + return None + + class UnixViewer(Viewer): + def show_file(self, file, **options): + command, executable = self.get_command_ex(file, **options) + command = "(%s %s; rm -f %s)&" % (command, quote(file), + quote(file)) + os.system(command) + return 1 + + # implementations + + class DisplayViewer(UnixViewer): + def get_command_ex(self, file, **options): + command = executable = "display" + return command, executable + + if which("display"): + register(DisplayViewer) + + class XVViewer(UnixViewer): + def get_command_ex(self, file, title=None, **options): + # note: xv is pretty outdated. most modern systems have + # imagemagick's display command instead. + command = executable = "xv" + if title: + command += " -name %s" % quote(title) + return command, executable + + if which("xv"): + register(XVViewer) + +if __name__ == "__main__": + # usage: python ImageShow.py imagefile [title] + print(show(Image.open(sys.argv[1]), *sys.argv[2:])) diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageStat.py b/server/www/packages/packages-darwin/x64/PIL/ImageStat.py new file mode 100644 index 0000000..f3c138b --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageStat.py @@ -0,0 +1,147 @@ +# +# The Python Imaging Library. +# $Id$ +# +# global image statistics +# +# History: +# 1996-04-05 fl Created +# 1997-05-21 fl Added mask; added rms, var, stddev attributes +# 1997-08-05 fl Added median +# 1998-07-05 hk Fixed integer overflow error +# +# Notes: +# This class shows how to implement delayed evaluation of attributes. +# To get a certain value, simply access the corresponding attribute. +# The __getattr__ dispatcher takes care of the rest. +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1996-97. +# +# See the README file for information on usage and redistribution. +# + +import math +import operator +import functools + + +class Stat(object): + + def __init__(self, image_or_list, mask=None): + try: + if mask: + self.h = image_or_list.histogram(mask) + else: + self.h = image_or_list.histogram() + except AttributeError: + self.h = image_or_list # assume it to be a histogram list + if not isinstance(self.h, list): + raise TypeError("first argument must be image or list") + self.bands = list(range(len(self.h) // 256)) + + def __getattr__(self, id): + "Calculate missing attribute" + if id[:4] == "_get": + raise AttributeError(id) + # calculate missing attribute + v = getattr(self, "_get" + id)() + setattr(self, id, v) + return v + + def _getextrema(self): + "Get min/max values for each band in the image" + + def minmax(histogram): + n = 255 + x = 0 + for i in range(256): + if histogram[i]: + n = min(n, i) + x = max(x, i) + return n, x # returns (255, 0) if there's no data in the histogram + + v = [] + for i in range(0, len(self.h), 256): + v.append(minmax(self.h[i:])) + return v + + def _getcount(self): + "Get total number of pixels in each layer" + + v = [] + for i in range(0, len(self.h), 256): + v.append(functools.reduce(operator.add, self.h[i:i+256])) + return v + + def _getsum(self): + "Get sum of all pixels in each layer" + + v = [] + for i in range(0, len(self.h), 256): + layerSum = 0.0 + for j in range(256): + layerSum += j * self.h[i + j] + v.append(layerSum) + return v + + def _getsum2(self): + "Get squared sum of all pixels in each layer" + + v = [] + for i in range(0, len(self.h), 256): + sum2 = 0.0 + for j in range(256): + sum2 += (j ** 2) * float(self.h[i + j]) + v.append(sum2) + return v + + def _getmean(self): + "Get average pixel level for each layer" + + v = [] + for i in self.bands: + v.append(self.sum[i] / self.count[i]) + return v + + def _getmedian(self): + "Get median pixel level for each layer" + + v = [] + for i in self.bands: + s = 0 + l = self.count[i]//2 + b = i * 256 + for j in range(256): + s = s + self.h[b+j] + if s > l: + break + v.append(j) + return v + + def _getrms(self): + "Get RMS for each layer" + + v = [] + for i in self.bands: + v.append(math.sqrt(self.sum2[i] / self.count[i])) + return v + + def _getvar(self): + "Get variance for each layer" + + v = [] + for i in self.bands: + n = self.count[i] + v.append((self.sum2[i]-(self.sum[i]**2.0)/n)/n) + return v + + def _getstddev(self): + "Get standard deviation for each layer" + + v = [] + for i in self.bands: + v.append(math.sqrt(self.var[i])) + return v + +Global = Stat # compatibility diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageTk.py b/server/www/packages/packages-darwin/x64/PIL/ImageTk.py new file mode 100644 index 0000000..68d388e --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageTk.py @@ -0,0 +1,292 @@ +# +# The Python Imaging Library. +# $Id$ +# +# a Tk display interface +# +# History: +# 96-04-08 fl Created +# 96-09-06 fl Added getimage method +# 96-11-01 fl Rewritten, removed image attribute and crop method +# 97-05-09 fl Use PyImagingPaste method instead of image type +# 97-05-12 fl Minor tweaks to match the IFUNC95 interface +# 97-05-17 fl Support the "pilbitmap" booster patch +# 97-06-05 fl Added file= and data= argument to image constructors +# 98-03-09 fl Added width and height methods to Image classes +# 98-07-02 fl Use default mode for "P" images without palette attribute +# 98-07-02 fl Explicitly destroy Tkinter image objects +# 99-07-24 fl Support multiple Tk interpreters (from Greg Couch) +# 99-07-26 fl Automatically hook into Tkinter (if possible) +# 99-08-15 fl Hook uses _imagingtk instead of _imaging +# +# Copyright (c) 1997-1999 by Secret Labs AB +# Copyright (c) 1996-1997 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +try: + import tkinter +except ImportError: + import Tkinter + tkinter = Tkinter + del Tkinter + +from PIL import Image + + +# -------------------------------------------------------------------- +# Check for Tkinter interface hooks + +_pilbitmap_ok = None + + +def _pilbitmap_check(): + global _pilbitmap_ok + if _pilbitmap_ok is None: + try: + im = Image.new("1", (1, 1)) + tkinter.BitmapImage(data="PIL:%d" % im.im.id) + _pilbitmap_ok = 1 + except tkinter.TclError: + _pilbitmap_ok = 0 + return _pilbitmap_ok + + +# -------------------------------------------------------------------- +# PhotoImage + +class PhotoImage(object): + """ + A Tkinter-compatible photo image. This can be used + everywhere Tkinter expects an image object. If the image is an RGBA + image, pixels having alpha 0 are treated as transparent. + + The constructor takes either a PIL image, or a mode and a size. + Alternatively, you can use the **file** or **data** options to initialize + the photo image object. + + :param image: Either a PIL image, or a mode string. If a mode string is + used, a size must also be given. + :param size: If the first argument is a mode string, this defines the size + of the image. + :keyword file: A filename to load the image from (using + ``Image.open(file)``). + :keyword data: An 8-bit string containing image data (as loaded from an + image file). + """ + + def __init__(self, image=None, size=None, **kw): + + # Tk compatibility: file or data + if image is None: + if "file" in kw: + image = Image.open(kw["file"]) + del kw["file"] + elif "data" in kw: + from io import BytesIO + image = Image.open(BytesIO(kw["data"])) + del kw["data"] + + if hasattr(image, "mode") and hasattr(image, "size"): + # got an image instead of a mode + mode = image.mode + if mode == "P": + # palette mapped data + image.load() + try: + mode = image.palette.mode + except AttributeError: + mode = "RGB" # default + size = image.size + kw["width"], kw["height"] = size + else: + mode = image + image = None + + if mode not in ["1", "L", "RGB", "RGBA"]: + mode = Image.getmodebase(mode) + + self.__mode = mode + self.__size = size + self.__photo = tkinter.PhotoImage(**kw) + self.tk = self.__photo.tk + if image: + self.paste(image) + + def __del__(self): + name = self.__photo.name + self.__photo.name = None + try: + self.__photo.tk.call("image", "delete", name) + except: + pass # ignore internal errors + + def __str__(self): + """ + Get the Tkinter photo image identifier. This method is automatically + called by Tkinter whenever a PhotoImage object is passed to a Tkinter + method. + + :return: A Tkinter photo image identifier (a string). + """ + return str(self.__photo) + + def width(self): + """ + Get the width of the image. + + :return: The width, in pixels. + """ + return self.__size[0] + + def height(self): + """ + Get the height of the image. + + :return: The height, in pixels. + """ + return self.__size[1] + + def paste(self, im, box=None): + """ + Paste a PIL image into the photo image. Note that this can + be very slow if the photo image is displayed. + + :param im: A PIL image. The size must match the target region. If the + mode does not match, the image is converted to the mode of + the bitmap image. + :param box: A 4-tuple defining the left, upper, right, and lower pixel + coordinate. If None is given instead of a tuple, all of + the image is assumed. + """ + + # convert to blittable + im.load() + image = im.im + if image.isblock() and im.mode == self.__mode: + block = image + else: + block = image.new_block(self.__mode, im.size) + image.convert2(block, image) # convert directly between buffers + + tk = self.__photo.tk + + try: + tk.call("PyImagingPhoto", self.__photo, block.id) + except tkinter.TclError: + # activate Tkinter hook + try: + from PIL import _imagingtk + try: + _imagingtk.tkinit(tk.interpaddr(), 1) + except AttributeError: + _imagingtk.tkinit(id(tk), 0) + tk.call("PyImagingPhoto", self.__photo, block.id) + except (ImportError, AttributeError, tkinter.TclError): + raise # configuration problem; cannot attach to Tkinter + +# -------------------------------------------------------------------- +# BitmapImage + + +class BitmapImage(object): + """ + + A Tkinter-compatible bitmap image. This can be used everywhere Tkinter + expects an image object. + + The given image must have mode "1". Pixels having value 0 are treated as + transparent. Options, if any, are passed on to Tkinter. The most commonly + used option is **foreground**, which is used to specify the color for the + non-transparent parts. See the Tkinter documentation for information on + how to specify colours. + + :param image: A PIL image. + """ + + def __init__(self, image=None, **kw): + + # Tk compatibility: file or data + if image is None: + if "file" in kw: + image = Image.open(kw["file"]) + del kw["file"] + elif "data" in kw: + from io import BytesIO + image = Image.open(BytesIO(kw["data"])) + del kw["data"] + + self.__mode = image.mode + self.__size = image.size + + if _pilbitmap_check(): + # fast way (requires the pilbitmap booster patch) + image.load() + kw["data"] = "PIL:%d" % image.im.id + self.__im = image # must keep a reference + else: + # slow but safe way + kw["data"] = image.tobitmap() + self.__photo = tkinter.BitmapImage(**kw) + + def __del__(self): + name = self.__photo.name + self.__photo.name = None + try: + self.__photo.tk.call("image", "delete", name) + except: + pass # ignore internal errors + + def width(self): + """ + Get the width of the image. + + :return: The width, in pixels. + """ + return self.__size[0] + + def height(self): + """ + Get the height of the image. + + :return: The height, in pixels. + """ + return self.__size[1] + + def __str__(self): + """ + Get the Tkinter bitmap image identifier. This method is automatically + called by Tkinter whenever a BitmapImage object is passed to a Tkinter + method. + + :return: A Tkinter bitmap image identifier (a string). + """ + return str(self.__photo) + + +def getimage(photo): + """Copies the contents of a PhotoImage to a PIL image memory.""" + photo.tk.call("PyImagingPhotoGet", photo) + + +# -------------------------------------------------------------------- +# Helper for the Image.show method. + +def _show(image, title): + + class UI(tkinter.Label): + def __init__(self, master, im): + if im.mode == "1": + self.image = BitmapImage(im, foreground="white", master=master) + else: + self.image = PhotoImage(im, master=master) + tkinter.Label.__init__(self, master, image=self.image, + bg="black", bd=0) + + if not tkinter._default_root: + raise IOError("tkinter not initialized") + top = tkinter.Toplevel() + if title: + top.title(title) + UI(top, image).pack() diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageTransform.py b/server/www/packages/packages-darwin/x64/PIL/ImageTransform.py new file mode 100644 index 0000000..81f9050 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageTransform.py @@ -0,0 +1,103 @@ +# +# The Python Imaging Library. +# $Id$ +# +# transform wrappers +# +# History: +# 2002-04-08 fl Created +# +# Copyright (c) 2002 by Secret Labs AB +# Copyright (c) 2002 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image + + +class Transform(Image.ImageTransformHandler): + def __init__(self, data): + self.data = data + + def getdata(self): + return self.method, self.data + + def transform(self, size, image, **options): + # can be overridden + method, data = self.getdata() + return image.transform(size, method, data, **options) + + +## +# Define an affine image transform. +#

    +# This function takes a 6-tuple (a, b, c, d, e, f) which +# contain the first two rows from an affine transform matrix. For +# each pixel (x, y) in the output image, the new value is +# taken from a position (a x + b y + c, +# d x + e y + f) in the input image, rounded to +# nearest pixel. +#

    +# This function can be used to scale, translate, rotate, and shear the +# original image. +# +# @def AffineTransform(matrix) +# @param matrix A 6-tuple (a, b, c, d, e, f) containing +# the first two rows from an affine transform matrix. +# @see Image#Image.transform + + +class AffineTransform(Transform): + method = Image.AFFINE + + +## +# Define a transform to extract a subregion from an image. +#

    +# Maps a rectangle (defined by two corners) from the image to a +# rectangle of the given size. The resulting image will contain +# data sampled from between the corners, such that (x0, y0) +# in the input image will end up at (0,0) in the output image, +# and (x1, y1) at size. +#

    +# This method can be used to crop, stretch, shrink, or mirror an +# arbitrary rectangle in the current image. It is slightly slower than +# crop, but about as fast as a corresponding resize +# operation. +# +# @def ExtentTransform(bbox) +# @param bbox A 4-tuple (x0, y0, x1, y1) which specifies +# two points in the input image's coordinate system. +# @see Image#Image.transform + +class ExtentTransform(Transform): + method = Image.EXTENT + + +## +# Define an quad image transform. +#

    +# Maps a quadrilateral (a region defined by four corners) from the +# image to a rectangle of the given size. +# +# @def QuadTransform(xy) +# @param xy An 8-tuple (x0, y0, x1, y1, x2, y2, y3, y3) which +# contain the upper left, lower left, lower right, and upper right +# corner of the source quadrilateral. +# @see Image#Image.transform + +class QuadTransform(Transform): + method = Image.QUAD + + +## +# Define an mesh image transform. A mesh transform consists of one +# or more individual quad transforms. +# +# @def MeshTransform(data) +# @param data A list of (bbox, quad) tuples. +# @see Image#Image.transform + +class MeshTransform(Transform): + method = Image.MESH diff --git a/server/www/packages/packages-darwin/x64/PIL/ImageWin.py b/server/www/packages/packages-darwin/x64/PIL/ImageWin.py new file mode 100644 index 0000000..58894d6 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImageWin.py @@ -0,0 +1,239 @@ +# +# The Python Imaging Library. +# $Id$ +# +# a Windows DIB display interface +# +# History: +# 1996-05-20 fl Created +# 1996-09-20 fl Fixed subregion exposure +# 1997-09-21 fl Added draw primitive (for tzPrint) +# 2003-05-21 fl Added experimental Window/ImageWindow classes +# 2003-09-05 fl Added fromstring/tostring methods +# +# Copyright (c) Secret Labs AB 1997-2003. +# Copyright (c) Fredrik Lundh 1996-2003. +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image + + +class HDC(object): + """ + Wraps an HDC integer. The resulting object can be passed to the + :py:meth:`~PIL.ImageWin.Dib.draw` and :py:meth:`~PIL.ImageWin.Dib.expose` + methods. + """ + def __init__(self, dc): + self.dc = dc + + def __int__(self): + return self.dc + + +class HWND(object): + """ + Wraps an HWND integer. The resulting object can be passed to the + :py:meth:`~PIL.ImageWin.Dib.draw` and :py:meth:`~PIL.ImageWin.Dib.expose` + methods, instead of a DC. + """ + def __init__(self, wnd): + self.wnd = wnd + + def __int__(self): + return self.wnd + + +class Dib(object): + """ + A Windows bitmap with the given mode and size. The mode can be one of "1", + "L", "P", or "RGB". + + If the display requires a palette, this constructor creates a suitable + palette and associates it with the image. For an "L" image, 128 greylevels + are allocated. For an "RGB" image, a 6x6x6 colour cube is used, together + with 20 greylevels. + + To make sure that palettes work properly under Windows, you must call the + **palette** method upon certain events from Windows. + + :param image: Either a PIL image, or a mode string. If a mode string is + used, a size must also be given. The mode can be one of "1", + "L", "P", or "RGB". + :param size: If the first argument is a mode string, this + defines the size of the image. + """ + + def __init__(self, image, size=None): + if hasattr(image, "mode") and hasattr(image, "size"): + mode = image.mode + size = image.size + else: + mode = image + image = None + if mode not in ["1", "L", "P", "RGB"]: + mode = Image.getmodebase(mode) + self.image = Image.core.display(mode, size) + self.mode = mode + self.size = size + if image: + self.paste(image) + + def expose(self, handle): + """ + Copy the bitmap contents to a device context. + + :param handle: Device context (HDC), cast to a Python integer, or an + HDC or HWND instance. In PythonWin, you can use the + :py:meth:`CDC.GetHandleAttrib` to get a suitable handle. + """ + if isinstance(handle, HWND): + dc = self.image.getdc(handle) + try: + result = self.image.expose(dc) + finally: + self.image.releasedc(handle, dc) + else: + result = self.image.expose(handle) + return result + + def draw(self, handle, dst, src=None): + """ + Same as expose, but allows you to specify where to draw the image, and + what part of it to draw. + + The destination and source areas are given as 4-tuple rectangles. If + the source is omitted, the entire image is copied. If the source and + the destination have different sizes, the image is resized as + necessary. + """ + if not src: + src = (0, 0) + self.size + if isinstance(handle, HWND): + dc = self.image.getdc(handle) + try: + result = self.image.draw(dc, dst, src) + finally: + self.image.releasedc(handle, dc) + else: + result = self.image.draw(handle, dst, src) + return result + + def query_palette(self, handle): + """ + Installs the palette associated with the image in the given device + context. + + This method should be called upon **QUERYNEWPALETTE** and + **PALETTECHANGED** events from Windows. If this method returns a + non-zero value, one or more display palette entries were changed, and + the image should be redrawn. + + :param handle: Device context (HDC), cast to a Python integer, or an + HDC or HWND instance. + :return: A true value if one or more entries were changed (this + indicates that the image should be redrawn). + """ + if isinstance(handle, HWND): + handle = self.image.getdc(handle) + try: + result = self.image.query_palette(handle) + finally: + self.image.releasedc(handle, handle) + else: + result = self.image.query_palette(handle) + return result + + def paste(self, im, box=None): + """ + Paste a PIL image into the bitmap image. + + :param im: A PIL image. The size must match the target region. + If the mode does not match, the image is converted to the + mode of the bitmap image. + :param box: A 4-tuple defining the left, upper, right, and + lower pixel coordinate. If None is given instead of a + tuple, all of the image is assumed. + """ + im.load() + if self.mode != im.mode: + im = im.convert(self.mode) + if box: + self.image.paste(im.im, box) + else: + self.image.paste(im.im) + + def frombytes(self, buffer): + """ + Load display memory contents from byte data. + + :param buffer: A buffer containing display data (usually + data returned from tobytes) + """ + return self.image.frombytes(buffer) + + def tobytes(self): + """ + Copy display memory contents to bytes object. + + :return: A bytes object containing display data. + """ + return self.image.tobytes() + + def fromstring(self, *args, **kw): + raise Exception("fromstring() has been removed. " + + "Please use frombytes() instead.") + + def tostring(self, *args, **kw): + raise Exception("tostring() has been removed. " + + "Please use tobytes() instead.") + + +## +# Create a Window with the given title size. + +class Window(object): + + def __init__(self, title="PIL", width=None, height=None): + self.hwnd = Image.core.createwindow( + title, self.__dispatcher, width or 0, height or 0 + ) + + def __dispatcher(self, action, *args): + return getattr(self, "ui_handle_" + action)(*args) + + def ui_handle_clear(self, dc, x0, y0, x1, y1): + pass + + def ui_handle_damage(self, x0, y0, x1, y1): + pass + + def ui_handle_destroy(self): + pass + + def ui_handle_repair(self, dc, x0, y0, x1, y1): + pass + + def ui_handle_resize(self, width, height): + pass + + def mainloop(self): + Image.core.eventloop() + + +## +# Create an image window which displays the given image. + +class ImageWindow(Window): + + def __init__(self, image, title="PIL"): + if not isinstance(image, Dib): + image = Dib(image) + self.image = image + width, height = image.size + Window.__init__(self, title, width=width, height=height) + + def ui_handle_repair(self, dc, x0, y0, x1, y1): + self.image.draw(dc, (x0, y0, x1, y1)) diff --git a/server/www/packages/packages-darwin/x64/PIL/ImtImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/ImtImagePlugin.py new file mode 100644 index 0000000..63e8924 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/ImtImagePlugin.py @@ -0,0 +1,95 @@ +# +# The Python Imaging Library. +# $Id$ +# +# IM Tools support for PIL +# +# history: +# 1996-05-27 fl Created (read 8-bit images only) +# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.2) +# +# Copyright (c) Secret Labs AB 1997-2001. +# Copyright (c) Fredrik Lundh 1996-2001. +# +# See the README file for information on usage and redistribution. +# + + +import re + +from PIL import Image, ImageFile + +__version__ = "0.2" + + +# +# -------------------------------------------------------------------- + +field = re.compile(br"([a-z]*) ([^ \r\n]*)") + + +## +# Image plugin for IM Tools images. + +class ImtImageFile(ImageFile.ImageFile): + + format = "IMT" + format_description = "IM Tools" + + def _open(self): + + # Quick rejection: if there's not a LF among the first + # 100 bytes, this is (probably) not a text header. + + if b"\n" not in self.fp.read(100): + raise SyntaxError("not an IM file") + self.fp.seek(0) + + xsize = ysize = 0 + + while True: + + s = self.fp.read(1) + if not s: + break + + if s == b'\x0C': + + # image data begins + self.tile = [("raw", (0, 0)+self.size, + self.fp.tell(), + (self.mode, 0, 1))] + + break + + else: + + # read key/value pair + # FIXME: dangerous, may read whole file + s = s + self.fp.readline() + if len(s) == 1 or len(s) > 100: + break + if s[0] == b"*": + continue # comment + + m = field.match(s) + if not m: + break + k, v = m.group(1, 2) + if k == "width": + xsize = int(v) + self.size = xsize, ysize + elif k == "height": + ysize = int(v) + self.size = xsize, ysize + elif k == "pixel" and v == "n8": + self.mode = "L" + + +# +# -------------------------------------------------------------------- + +Image.register_open(ImtImageFile.format, ImtImageFile) + +# +# no extension registered (".im" is simply too common) diff --git a/server/www/packages/packages-darwin/x64/PIL/IptcImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/IptcImagePlugin.py new file mode 100644 index 0000000..56d1de4 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/IptcImagePlugin.py @@ -0,0 +1,267 @@ +# +# The Python Imaging Library. +# $Id$ +# +# IPTC/NAA file handling +# +# history: +# 1995-10-01 fl Created +# 1998-03-09 fl Cleaned up and added to PIL +# 2002-06-18 fl Added getiptcinfo helper +# +# Copyright (c) Secret Labs AB 1997-2002. +# Copyright (c) Fredrik Lundh 1995. +# +# See the README file for information on usage and redistribution. +# + +from __future__ import print_function + +from PIL import Image, ImageFile, _binary +import os +import tempfile + +__version__ = "0.3" + +i8 = _binary.i8 +i16 = _binary.i16be +i32 = _binary.i32be +o8 = _binary.o8 + +COMPRESSION = { + 1: "raw", + 5: "jpeg" +} + +PAD = o8(0) * 4 + + +# +# Helpers + +def i(c): + return i32((PAD + c)[-4:]) + + +def dump(c): + for i in c: + print("%02x" % i8(i), end=' ') + print() + + +## +# Image plugin for IPTC/NAA datastreams. To read IPTC/NAA fields +# from TIFF and JPEG files, use the getiptcinfo function. + +class IptcImageFile(ImageFile.ImageFile): + + format = "IPTC" + format_description = "IPTC/NAA" + + def getint(self, key): + return i(self.info[key]) + + def field(self): + # + # get a IPTC field header + s = self.fp.read(5) + if not len(s): + return None, 0 + + tag = i8(s[1]), i8(s[2]) + + # syntax + if i8(s[0]) != 0x1C or tag[0] < 1 or tag[0] > 9: + raise SyntaxError("invalid IPTC/NAA file") + + # field size + size = i8(s[3]) + if size > 132: + raise IOError("illegal field length in IPTC/NAA file") + elif size == 128: + size = 0 + elif size > 128: + size = i(self.fp.read(size-128)) + else: + size = i16(s[3:]) + + return tag, size + + def _open(self): + + # load descriptive fields + while True: + offset = self.fp.tell() + tag, size = self.field() + if not tag or tag == (8, 10): + break + if size: + tagdata = self.fp.read(size) + else: + tagdata = None + if tag in list(self.info.keys()): + if isinstance(self.info[tag], list): + self.info[tag].append(tagdata) + else: + self.info[tag] = [self.info[tag], tagdata] + else: + self.info[tag] = tagdata + + # print tag, self.info[tag] + + # mode + layers = i8(self.info[(3, 60)][0]) + component = i8(self.info[(3, 60)][1]) + if (3, 65) in self.info: + id = i8(self.info[(3, 65)][0])-1 + else: + id = 0 + if layers == 1 and not component: + self.mode = "L" + elif layers == 3 and component: + self.mode = "RGB"[id] + elif layers == 4 and component: + self.mode = "CMYK"[id] + + # size + self.size = self.getint((3, 20)), self.getint((3, 30)) + + # compression + try: + compression = COMPRESSION[self.getint((3, 120))] + except KeyError: + raise IOError("Unknown IPTC image compression") + + # tile + if tag == (8, 10): + self.tile = [("iptc", (compression, offset), + (0, 0, self.size[0], self.size[1]))] + + def load(self): + + if len(self.tile) != 1 or self.tile[0][0] != "iptc": + return ImageFile.ImageFile.load(self) + + type, tile, box = self.tile[0] + + encoding, offset = tile + + self.fp.seek(offset) + + # Copy image data to temporary file + o_fd, outfile = tempfile.mkstemp(text=False) + o = os.fdopen(o_fd) + if encoding == "raw": + # To simplify access to the extracted file, + # prepend a PPM header + o.write("P5\n%d %d\n255\n" % self.size) + while True: + type, size = self.field() + if type != (8, 10): + break + while size > 0: + s = self.fp.read(min(size, 8192)) + if not s: + break + o.write(s) + size -= len(s) + o.close() + + try: + try: + # fast + self.im = Image.core.open_ppm(outfile) + except: + # slightly slower + im = Image.open(outfile) + im.load() + self.im = im.im + finally: + try: + os.unlink(outfile) + except OSError: + pass + + +Image.register_open(IptcImageFile.format, IptcImageFile) + +Image.register_extension(IptcImageFile.format, ".iim") + + +## +# Get IPTC information from TIFF, JPEG, or IPTC file. +# +# @param im An image containing IPTC data. +# @return A dictionary containing IPTC information, or None if +# no IPTC information block was found. + +def getiptcinfo(im): + + from PIL import TiffImagePlugin, JpegImagePlugin + import io + + data = None + + if isinstance(im, IptcImageFile): + # return info dictionary right away + return im.info + + elif isinstance(im, JpegImagePlugin.JpegImageFile): + # extract the IPTC/NAA resource + try: + app = im.app["APP13"] + if app[:14] == b"Photoshop 3.0\x00": + app = app[14:] + # parse the image resource block + offset = 0 + while app[offset:offset+4] == b"8BIM": + offset += 4 + # resource code + code = i16(app, offset) + offset += 2 + # resource name (usually empty) + name_len = i8(app[offset]) + # name = app[offset+1:offset+1+name_len] + offset = 1 + offset + name_len + if offset & 1: + offset += 1 + # resource data block + size = i32(app, offset) + offset += 4 + if code == 0x0404: + # 0x0404 contains IPTC/NAA data + data = app[offset:offset+size] + break + offset = offset + size + if offset & 1: + offset += 1 + except (AttributeError, KeyError): + pass + + elif isinstance(im, TiffImagePlugin.TiffImageFile): + # get raw data from the IPTC/NAA tag (PhotoShop tags the data + # as 4-byte integers, so we cannot use the get method...) + try: + data = im.tag.tagdata[TiffImagePlugin.IPTC_NAA_CHUNK] + except (AttributeError, KeyError): + pass + + if data is None: + return None # no properties + + # create an IptcImagePlugin object without initializing it + class FakeImage(object): + pass + im = FakeImage() + im.__class__ = IptcImageFile + + # parse the IPTC information chunk + im.info = {} + im.fp = io.BytesIO(data) + + try: + im._open() + except (IndexError, KeyError): + pass # expected failure + + return im.info diff --git a/server/www/packages/packages-darwin/x64/PIL/Jpeg2KImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/Jpeg2KImagePlugin.py new file mode 100644 index 0000000..b82acdd --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/Jpeg2KImagePlugin.py @@ -0,0 +1,276 @@ +# +# The Python Imaging Library +# $Id$ +# +# JPEG2000 file handling +# +# History: +# 2014-03-12 ajh Created +# +# Copyright (c) 2014 Coriolis Systems Limited +# Copyright (c) 2014 Alastair Houghton +# +# See the README file for information on usage and redistribution. +# +from PIL import Image, ImageFile +import struct +import os +import io + +__version__ = "0.1" + + +def _parse_codestream(fp): + """Parse the JPEG 2000 codestream to extract the size and component + count from the SIZ marker segment, returning a PIL (size, mode) tuple.""" + + hdr = fp.read(2) + lsiz = struct.unpack('>H', hdr)[0] + siz = hdr + fp.read(lsiz - 2) + lsiz, rsiz, xsiz, ysiz, xosiz, yosiz, xtsiz, ytsiz, \ + xtosiz, ytosiz, csiz \ + = struct.unpack('>HHIIIIIIIIH', siz[:38]) + ssiz = [None]*csiz + xrsiz = [None]*csiz + yrsiz = [None]*csiz + for i in range(csiz): + ssiz[i], xrsiz[i], yrsiz[i] \ + = struct.unpack('>BBB', siz[36 + 3 * i:39 + 3 * i]) + + size = (xsiz - xosiz, ysiz - yosiz) + if csiz == 1: + if (yrsiz[0] & 0x7f) > 8: + mode = 'I;16' + else: + mode = 'L' + elif csiz == 2: + mode = 'LA' + elif csiz == 3: + mode = 'RGB' + elif csiz == 4: + mode = 'RGBA' + else: + mode = None + + return (size, mode) + + +def _parse_jp2_header(fp): + """Parse the JP2 header box to extract size, component count and + color space information, returning a PIL (size, mode) tuple.""" + + # Find the JP2 header box + header = None + while True: + lbox, tbox = struct.unpack('>I4s', fp.read(8)) + if lbox == 1: + lbox = struct.unpack('>Q', fp.read(8))[0] + hlen = 16 + else: + hlen = 8 + + if lbox < hlen: + raise SyntaxError('Invalid JP2 header length') + + if tbox == b'jp2h': + header = fp.read(lbox - hlen) + break + else: + fp.seek(lbox - hlen, os.SEEK_CUR) + + if header is None: + raise SyntaxError('could not find JP2 header') + + size = None + mode = None + bpc = None + + hio = io.BytesIO(header) + while True: + lbox, tbox = struct.unpack('>I4s', hio.read(8)) + if lbox == 1: + lbox = struct.unpack('>Q', hio.read(8))[0] + hlen = 16 + else: + hlen = 8 + + content = hio.read(lbox - hlen) + + if tbox == b'ihdr': + height, width, nc, bpc, c, unkc, ipr \ + = struct.unpack('>IIHBBBB', content) + size = (width, height) + if unkc: + if nc == 1 and (bpc & 0x7f) > 8: + mode = 'I;16' + elif nc == 1: + mode = 'L' + elif nc == 2: + mode = 'LA' + elif nc == 3: + mode = 'RGB' + elif nc == 4: + mode = 'RGBA' + break + elif tbox == b'colr': + meth, prec, approx = struct.unpack('>BBB', content[:3]) + if meth == 1: + cs = struct.unpack('>I', content[3:7])[0] + if cs == 16: # sRGB + if nc == 1 and (bpc & 0x7f) > 8: + mode = 'I;16' + elif nc == 1: + mode = 'L' + elif nc == 3: + mode = 'RGB' + elif nc == 4: + mode = 'RGBA' + break + elif cs == 17: # grayscale + if nc == 1 and (bpc & 0x7f) > 8: + mode = 'I;16' + elif nc == 1: + mode = 'L' + elif nc == 2: + mode = 'LA' + break + elif cs == 18: # sYCC + if nc == 3: + mode = 'RGB' + elif nc == 4: + mode = 'RGBA' + break + + return (size, mode) + +## +# Image plugin for JPEG2000 images. + + +class Jpeg2KImageFile(ImageFile.ImageFile): + format = "JPEG2000" + format_description = "JPEG 2000 (ISO 15444)" + + def _open(self): + sig = self.fp.read(4) + if sig == b'\xff\x4f\xff\x51': + self.codec = "j2k" + self.size, self.mode = _parse_codestream(self.fp) + else: + sig = sig + self.fp.read(8) + + if sig == b'\x00\x00\x00\x0cjP \x0d\x0a\x87\x0a': + self.codec = "jp2" + self.size, self.mode = _parse_jp2_header(self.fp) + else: + raise SyntaxError('not a JPEG 2000 file') + + if self.size is None or self.mode is None: + raise SyntaxError('unable to determine size/mode') + + self.reduce = 0 + self.layers = 0 + + fd = -1 + length = -1 + + try: + fd = self.fp.fileno() + length = os.fstat(fd).st_size + except: + fd = -1 + try: + pos = self.fp.tell() + self.fp.seek(0, 2) + length = self.fp.tell() + self.fp.seek(pos, 0) + except: + length = -1 + + self.tile = [('jpeg2k', (0, 0) + self.size, 0, + (self.codec, self.reduce, self.layers, fd, length))] + + def load(self): + if self.reduce: + power = 1 << self.reduce + adjust = power >> 1 + self.size = (int((self.size[0] + adjust) / power), + int((self.size[1] + adjust) / power)) + + if self.tile: + # Update the reduce and layers settings + t = self.tile[0] + t3 = (t[3][0], self.reduce, self.layers, t[3][3], t[3][4]) + self.tile = [(t[0], (0, 0) + self.size, t[2], t3)] + + ImageFile.ImageFile.load(self) + + +def _accept(prefix): + return (prefix[:4] == b'\xff\x4f\xff\x51' or + prefix[:12] == b'\x00\x00\x00\x0cjP \x0d\x0a\x87\x0a') + + +# ------------------------------------------------------------ +# Save support + +def _save(im, fp, filename): + if filename.endswith('.j2k'): + kind = 'j2k' + else: + kind = 'jp2' + + # Get the keyword arguments + info = im.encoderinfo + + offset = info.get('offset', None) + tile_offset = info.get('tile_offset', None) + tile_size = info.get('tile_size', None) + quality_mode = info.get('quality_mode', 'rates') + quality_layers = info.get('quality_layers', None) + num_resolutions = info.get('num_resolutions', 0) + cblk_size = info.get('codeblock_size', None) + precinct_size = info.get('precinct_size', None) + irreversible = info.get('irreversible', False) + progression = info.get('progression', 'LRCP') + cinema_mode = info.get('cinema_mode', 'no') + fd = -1 + + if hasattr(fp, "fileno"): + try: + fd = fp.fileno() + except: + fd = -1 + + im.encoderconfig = ( + offset, + tile_offset, + tile_size, + quality_mode, + quality_layers, + num_resolutions, + cblk_size, + precinct_size, + irreversible, + progression, + cinema_mode, + fd + ) + + ImageFile._save(im, fp, [('jpeg2k', (0, 0)+im.size, 0, kind)]) + +# ------------------------------------------------------------ +# Registry stuff + +Image.register_open(Jpeg2KImageFile.format, Jpeg2KImageFile, _accept) +Image.register_save(Jpeg2KImageFile.format, _save) + +Image.register_extension(Jpeg2KImageFile.format, '.jp2') +Image.register_extension(Jpeg2KImageFile.format, '.j2k') +Image.register_extension(Jpeg2KImageFile.format, '.jpc') +Image.register_extension(Jpeg2KImageFile.format, '.jpf') +Image.register_extension(Jpeg2KImageFile.format, '.jpx') +Image.register_extension(Jpeg2KImageFile.format, '.j2c') + +Image.register_mime(Jpeg2KImageFile.format, 'image/jp2') +Image.register_mime(Jpeg2KImageFile.format, 'image/jpx') diff --git a/server/www/packages/packages-darwin/x64/PIL/JpegImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/JpegImagePlugin.py new file mode 100644 index 0000000..beda4f7 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/JpegImagePlugin.py @@ -0,0 +1,753 @@ +# +# The Python Imaging Library. +# $Id$ +# +# JPEG (JFIF) file handling +# +# See "Digital Compression and Coding of Continuous-Tone Still Images, +# Part 1, Requirements and Guidelines" (CCITT T.81 / ISO 10918-1) +# +# History: +# 1995-09-09 fl Created +# 1995-09-13 fl Added full parser +# 1996-03-25 fl Added hack to use the IJG command line utilities +# 1996-05-05 fl Workaround Photoshop 2.5 CMYK polarity bug +# 1996-05-28 fl Added draft support, JFIF version (0.1) +# 1996-12-30 fl Added encoder options, added progression property (0.2) +# 1997-08-27 fl Save mode 1 images as BW (0.3) +# 1998-07-12 fl Added YCbCr to draft and save methods (0.4) +# 1998-10-19 fl Don't hang on files using 16-bit DQT's (0.4.1) +# 2001-04-16 fl Extract DPI settings from JFIF files (0.4.2) +# 2002-07-01 fl Skip pad bytes before markers; identify Exif files (0.4.3) +# 2003-04-25 fl Added experimental EXIF decoder (0.5) +# 2003-06-06 fl Added experimental EXIF GPSinfo decoder +# 2003-09-13 fl Extract COM markers +# 2009-09-06 fl Added icc_profile support (from Florian Hoech) +# 2009-03-06 fl Changed CMYK handling; always use Adobe polarity (0.6) +# 2009-03-08 fl Added subsampling support (from Justin Huff). +# +# Copyright (c) 1997-2003 by Secret Labs AB. +# Copyright (c) 1995-1996 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +import array +import struct +import io +import warnings +from struct import unpack_from +from PIL import Image, ImageFile, TiffImagePlugin, _binary +from PIL.JpegPresets import presets +from PIL._util import isStringType + +i8 = _binary.i8 +o8 = _binary.o8 +i16 = _binary.i16be +i32 = _binary.i32be + +__version__ = "0.6" + + +# +# Parser + +def Skip(self, marker): + n = i16(self.fp.read(2))-2 + ImageFile._safe_read(self.fp, n) + + +def APP(self, marker): + # + # Application marker. Store these in the APP dictionary. + # Also look for well-known application markers. + + n = i16(self.fp.read(2))-2 + s = ImageFile._safe_read(self.fp, n) + + app = "APP%d" % (marker & 15) + + self.app[app] = s # compatibility + self.applist.append((app, s)) + + if marker == 0xFFE0 and s[:4] == b"JFIF": + # extract JFIF information + self.info["jfif"] = version = i16(s, 5) # version + self.info["jfif_version"] = divmod(version, 256) + # extract JFIF properties + try: + jfif_unit = i8(s[7]) + jfif_density = i16(s, 8), i16(s, 10) + except: + pass + else: + if jfif_unit == 1: + self.info["dpi"] = jfif_density + self.info["jfif_unit"] = jfif_unit + self.info["jfif_density"] = jfif_density + elif marker == 0xFFE1 and s[:5] == b"Exif\0": + # extract Exif information (incomplete) + self.info["exif"] = s # FIXME: value will change + elif marker == 0xFFE2 and s[:5] == b"FPXR\0": + # extract FlashPix information (incomplete) + self.info["flashpix"] = s # FIXME: value will change + elif marker == 0xFFE2 and s[:12] == b"ICC_PROFILE\0": + # Since an ICC profile can be larger than the maximum size of + # a JPEG marker (64K), we need provisions to split it into + # multiple markers. The format defined by the ICC specifies + # one or more APP2 markers containing the following data: + # Identifying string ASCII "ICC_PROFILE\0" (12 bytes) + # Marker sequence number 1, 2, etc (1 byte) + # Number of markers Total of APP2's used (1 byte) + # Profile data (remainder of APP2 data) + # Decoders should use the marker sequence numbers to + # reassemble the profile, rather than assuming that the APP2 + # markers appear in the correct sequence. + self.icclist.append(s) + elif marker == 0xFFEE and s[:5] == b"Adobe": + self.info["adobe"] = i16(s, 5) + # extract Adobe custom properties + try: + adobe_transform = i8(s[1]) + except: + pass + else: + self.info["adobe_transform"] = adobe_transform + elif marker == 0xFFE2 and s[:4] == b"MPF\0": + # extract MPO information + self.info["mp"] = s[4:] + # offset is current location minus buffer size + # plus constant header size + self.info["mpoffset"] = self.fp.tell() - n + 4 + + +def COM(self, marker): + # + # Comment marker. Store these in the APP dictionary. + n = i16(self.fp.read(2))-2 + s = ImageFile._safe_read(self.fp, n) + + self.app["COM"] = s # compatibility + self.applist.append(("COM", s)) + + +def SOF(self, marker): + # + # Start of frame marker. Defines the size and mode of the + # image. JPEG is colour blind, so we use some simple + # heuristics to map the number of layers to an appropriate + # mode. Note that this could be made a bit brighter, by + # looking for JFIF and Adobe APP markers. + + n = i16(self.fp.read(2))-2 + s = ImageFile._safe_read(self.fp, n) + self.size = i16(s[3:]), i16(s[1:]) + + self.bits = i8(s[0]) + if self.bits != 8: + raise SyntaxError("cannot handle %d-bit layers" % self.bits) + + self.layers = i8(s[5]) + if self.layers == 1: + self.mode = "L" + elif self.layers == 3: + self.mode = "RGB" + elif self.layers == 4: + self.mode = "CMYK" + else: + raise SyntaxError("cannot handle %d-layer images" % self.layers) + + if marker in [0xFFC2, 0xFFC6, 0xFFCA, 0xFFCE]: + self.info["progressive"] = self.info["progression"] = 1 + + if self.icclist: + # fixup icc profile + self.icclist.sort() # sort by sequence number + if i8(self.icclist[0][13]) == len(self.icclist): + profile = [] + for p in self.icclist: + profile.append(p[14:]) + icc_profile = b"".join(profile) + else: + icc_profile = None # wrong number of fragments + self.info["icc_profile"] = icc_profile + self.icclist = None + + for i in range(6, len(s), 3): + t = s[i:i+3] + # 4-tuples: id, vsamp, hsamp, qtable + self.layer.append((t[0], i8(t[1])//16, i8(t[1]) & 15, i8(t[2]))) + + +def DQT(self, marker): + # + # Define quantization table. Support baseline 8-bit tables + # only. Note that there might be more than one table in + # each marker. + + # FIXME: The quantization tables can be used to estimate the + # compression quality. + + n = i16(self.fp.read(2))-2 + s = ImageFile._safe_read(self.fp, n) + while len(s): + if len(s) < 65: + raise SyntaxError("bad quantization table marker") + v = i8(s[0]) + if v//16 == 0: + self.quantization[v & 15] = array.array("b", s[1:65]) + s = s[65:] + else: + return # FIXME: add code to read 16-bit tables! + # raise SyntaxError, "bad quantization table element size" + + +# +# JPEG marker table + +MARKER = { + 0xFFC0: ("SOF0", "Baseline DCT", SOF), + 0xFFC1: ("SOF1", "Extended Sequential DCT", SOF), + 0xFFC2: ("SOF2", "Progressive DCT", SOF), + 0xFFC3: ("SOF3", "Spatial lossless", SOF), + 0xFFC4: ("DHT", "Define Huffman table", Skip), + 0xFFC5: ("SOF5", "Differential sequential DCT", SOF), + 0xFFC6: ("SOF6", "Differential progressive DCT", SOF), + 0xFFC7: ("SOF7", "Differential spatial", SOF), + 0xFFC8: ("JPG", "Extension", None), + 0xFFC9: ("SOF9", "Extended sequential DCT (AC)", SOF), + 0xFFCA: ("SOF10", "Progressive DCT (AC)", SOF), + 0xFFCB: ("SOF11", "Spatial lossless DCT (AC)", SOF), + 0xFFCC: ("DAC", "Define arithmetic coding conditioning", Skip), + 0xFFCD: ("SOF13", "Differential sequential DCT (AC)", SOF), + 0xFFCE: ("SOF14", "Differential progressive DCT (AC)", SOF), + 0xFFCF: ("SOF15", "Differential spatial (AC)", SOF), + 0xFFD0: ("RST0", "Restart 0", None), + 0xFFD1: ("RST1", "Restart 1", None), + 0xFFD2: ("RST2", "Restart 2", None), + 0xFFD3: ("RST3", "Restart 3", None), + 0xFFD4: ("RST4", "Restart 4", None), + 0xFFD5: ("RST5", "Restart 5", None), + 0xFFD6: ("RST6", "Restart 6", None), + 0xFFD7: ("RST7", "Restart 7", None), + 0xFFD8: ("SOI", "Start of image", None), + 0xFFD9: ("EOI", "End of image", None), + 0xFFDA: ("SOS", "Start of scan", Skip), + 0xFFDB: ("DQT", "Define quantization table", DQT), + 0xFFDC: ("DNL", "Define number of lines", Skip), + 0xFFDD: ("DRI", "Define restart interval", Skip), + 0xFFDE: ("DHP", "Define hierarchical progression", SOF), + 0xFFDF: ("EXP", "Expand reference component", Skip), + 0xFFE0: ("APP0", "Application segment 0", APP), + 0xFFE1: ("APP1", "Application segment 1", APP), + 0xFFE2: ("APP2", "Application segment 2", APP), + 0xFFE3: ("APP3", "Application segment 3", APP), + 0xFFE4: ("APP4", "Application segment 4", APP), + 0xFFE5: ("APP5", "Application segment 5", APP), + 0xFFE6: ("APP6", "Application segment 6", APP), + 0xFFE7: ("APP7", "Application segment 7", APP), + 0xFFE8: ("APP8", "Application segment 8", APP), + 0xFFE9: ("APP9", "Application segment 9", APP), + 0xFFEA: ("APP10", "Application segment 10", APP), + 0xFFEB: ("APP11", "Application segment 11", APP), + 0xFFEC: ("APP12", "Application segment 12", APP), + 0xFFED: ("APP13", "Application segment 13", APP), + 0xFFEE: ("APP14", "Application segment 14", APP), + 0xFFEF: ("APP15", "Application segment 15", APP), + 0xFFF0: ("JPG0", "Extension 0", None), + 0xFFF1: ("JPG1", "Extension 1", None), + 0xFFF2: ("JPG2", "Extension 2", None), + 0xFFF3: ("JPG3", "Extension 3", None), + 0xFFF4: ("JPG4", "Extension 4", None), + 0xFFF5: ("JPG5", "Extension 5", None), + 0xFFF6: ("JPG6", "Extension 6", None), + 0xFFF7: ("JPG7", "Extension 7", None), + 0xFFF8: ("JPG8", "Extension 8", None), + 0xFFF9: ("JPG9", "Extension 9", None), + 0xFFFA: ("JPG10", "Extension 10", None), + 0xFFFB: ("JPG11", "Extension 11", None), + 0xFFFC: ("JPG12", "Extension 12", None), + 0xFFFD: ("JPG13", "Extension 13", None), + 0xFFFE: ("COM", "Comment", COM) +} + + +def _accept(prefix): + return prefix[0:1] == b"\377" + + +## +# Image plugin for JPEG and JFIF images. + +class JpegImageFile(ImageFile.ImageFile): + + format = "JPEG" + format_description = "JPEG (ISO 10918)" + + def _open(self): + + s = self.fp.read(1) + + if i8(s) != 255: + raise SyntaxError("not a JPEG file") + + # Create attributes + self.bits = self.layers = 0 + + # JPEG specifics (internal) + self.layer = [] + self.huffman_dc = {} + self.huffman_ac = {} + self.quantization = {} + self.app = {} # compatibility + self.applist = [] + self.icclist = [] + + while True: + + i = i8(s) + if i == 0xFF: + s = s + self.fp.read(1) + i = i16(s) + else: + # Skip non-0xFF junk + s = self.fp.read(1) + continue + + if i in MARKER: + name, description, handler = MARKER[i] + # print hex(i), name, description + if handler is not None: + handler(self, i) + if i == 0xFFDA: # start of scan + rawmode = self.mode + if self.mode == "CMYK": + rawmode = "CMYK;I" # assume adobe conventions + self.tile = [("jpeg", (0, 0) + self.size, 0, + (rawmode, ""))] + # self.__offset = self.fp.tell() + break + s = self.fp.read(1) + elif i == 0 or i == 0xFFFF: + # padded marker or junk; move on + s = b"\xff" + else: + raise SyntaxError("no marker found") + + def draft(self, mode, size): + + if len(self.tile) != 1: + return + + d, e, o, a = self.tile[0] + scale = 0 + + if a[0] == "RGB" and mode in ["L", "YCbCr"]: + self.mode = mode + a = mode, "" + + if size: + scale = max(self.size[0] // size[0], self.size[1] // size[1]) + for s in [8, 4, 2, 1]: + if scale >= s: + break + e = e[0], e[1], (e[2]-e[0]+s-1)//s+e[0], (e[3]-e[1]+s-1)//s+e[1] + self.size = ((self.size[0]+s-1)//s, (self.size[1]+s-1)//s) + scale = s + + self.tile = [(d, e, o, a)] + self.decoderconfig = (scale, 0) + + return self + + def load_djpeg(self): + + # ALTERNATIVE: handle JPEGs via the IJG command line utilities + + import subprocess + import tempfile + import os + f, path = tempfile.mkstemp() + os.close(f) + if os.path.exists(self.filename): + subprocess.check_call(["djpeg", "-outfile", path, self.filename]) + else: + raise ValueError("Invalid Filename") + + try: + self.im = Image.core.open_ppm(path) + finally: + try: + os.unlink(path) + except OSError: + pass + + self.mode = self.im.mode + self.size = self.im.size + + self.tile = [] + + def _getexif(self): + return _getexif(self) + + def _getmp(self): + return _getmp(self) + + +def _fixup_dict(src_dict): + # Helper function for _getexif() + # returns a dict with any single item tuples/lists as individual values + def _fixup(value): + try: + if len(value) == 1 and type(value) != type({}): + return value[0] + except: pass + return value + + return dict([(k, _fixup(v)) for k, v in src_dict.items()]) + + +def _getexif(self): + # Extract EXIF information. This method is highly experimental, + # and is likely to be replaced with something better in a future + # version. + + # The EXIF record consists of a TIFF file embedded in a JPEG + # application marker (!). + try: + data = self.info["exif"] + except KeyError: + return None + file = io.BytesIO(data[6:]) + head = file.read(8) + # process dictionary + info = TiffImagePlugin.ImageFileDirectory_v1(head) + info.load(file) + exif = dict(_fixup_dict(info)) + # get exif extension + try: + # exif field 0x8769 is an offset pointer to the location + # of the nested embedded exif ifd. + # It should be a long, but may be corrupted. + file.seek(exif[0x8769]) + except (KeyError, TypeError): + pass + else: + info = TiffImagePlugin.ImageFileDirectory_v1(head) + info.load(file) + exif.update(_fixup_dict(info)) + # get gpsinfo extension + try: + # exif field 0x8825 is an offset pointer to the location + # of the nested embedded gps exif ifd. + # It should be a long, but may be corrupted. + file.seek(exif[0x8825]) + except (KeyError, TypeError): + pass + else: + info = TiffImagePlugin.ImageFileDirectory_v1(head) + info.load(file) + exif[0x8825] = _fixup_dict(info) + + return exif + + +def _getmp(self): + # Extract MP information. This method was inspired by the "highly + # experimental" _getexif version that's been in use for years now, + # itself based on the ImageFileDirectory class in the TIFF plug-in. + + # The MP record essentially consists of a TIFF file embedded in a JPEG + # application marker. + try: + data = self.info["mp"] + except KeyError: + return None + file_contents = io.BytesIO(data) + head = file_contents.read(8) + endianness = '>' if head[:4] == b'\x4d\x4d\x00\x2a' else '<' + # process dictionary + try: + info = TiffImagePlugin.ImageFileDirectory_v2(head) + info.load(file_contents) + mp = dict(info) + except: + raise SyntaxError("malformed MP Index (unreadable directory)") + # it's an error not to have a number of images + try: + quant = mp[0xB001] + except KeyError: + raise SyntaxError("malformed MP Index (no number of images)") + # get MP entries + mpentries = [] + try: + rawmpentries = mp[0xB002] + for entrynum in range(0, quant): + unpackedentry = unpack_from( + '{0}LLLHH'.format(endianness), rawmpentries, entrynum * 16) + labels = ('Attribute', 'Size', 'DataOffset', 'EntryNo1', + 'EntryNo2') + mpentry = dict(zip(labels, unpackedentry)) + mpentryattr = { + 'DependentParentImageFlag': bool(mpentry['Attribute'] & + (1 << 31)), + 'DependentChildImageFlag': bool(mpentry['Attribute'] & + (1 << 30)), + 'RepresentativeImageFlag': bool(mpentry['Attribute'] & + (1 << 29)), + 'Reserved': (mpentry['Attribute'] & (3 << 27)) >> 27, + 'ImageDataFormat': (mpentry['Attribute'] & (7 << 24)) >> 24, + 'MPType': mpentry['Attribute'] & 0x00FFFFFF + } + if mpentryattr['ImageDataFormat'] == 0: + mpentryattr['ImageDataFormat'] = 'JPEG' + else: + raise SyntaxError("unsupported picture format in MPO") + mptypemap = { + 0x000000: 'Undefined', + 0x010001: 'Large Thumbnail (VGA Equivalent)', + 0x010002: 'Large Thumbnail (Full HD Equivalent)', + 0x020001: 'Multi-Frame Image (Panorama)', + 0x020002: 'Multi-Frame Image: (Disparity)', + 0x020003: 'Multi-Frame Image: (Multi-Angle)', + 0x030000: 'Baseline MP Primary Image' + } + mpentryattr['MPType'] = mptypemap.get(mpentryattr['MPType'], + 'Unknown') + mpentry['Attribute'] = mpentryattr + mpentries.append(mpentry) + mp[0xB002] = mpentries + except KeyError: + raise SyntaxError("malformed MP Index (bad MP Entry)") + # Next we should try and parse the individual image unique ID list; + # we don't because I've never seen this actually used in a real MPO + # file and so can't test it. + return mp + + +# -------------------------------------------------------------------- +# stuff to save JPEG files + +RAWMODE = { + "1": "L", + "L": "L", + "RGB": "RGB", + "RGBA": "RGB", + "RGBX": "RGB", + "CMYK": "CMYK;I", # assume adobe conventions + "YCbCr": "YCbCr", +} + +zigzag_index = (0, 1, 5, 6, 14, 15, 27, 28, + 2, 4, 7, 13, 16, 26, 29, 42, + 3, 8, 12, 17, 25, 30, 41, 43, + 9, 11, 18, 24, 31, 40, 44, 53, + 10, 19, 23, 32, 39, 45, 52, 54, + 20, 22, 33, 38, 46, 51, 55, 60, + 21, 34, 37, 47, 50, 56, 59, 61, + 35, 36, 48, 49, 57, 58, 62, 63) + +samplings = {(1, 1, 1, 1, 1, 1): 0, + (2, 1, 1, 1, 1, 1): 1, + (2, 2, 1, 1, 1, 1): 2, + } + + +def convert_dict_qtables(qtables): + qtables = [qtables[key] for key in range(len(qtables)) if key in qtables] + for idx, table in enumerate(qtables): + qtables[idx] = [table[i] for i in zigzag_index] + return qtables + + +def get_sampling(im): + # There's no subsampling when image have only 1 layer + # (grayscale images) or when they are CMYK (4 layers), + # so set subsampling to default value. + # + # NOTE: currently Pillow can't encode JPEG to YCCK format. + # If YCCK support is added in the future, subsampling code will have + # to be updated (here and in JpegEncode.c) to deal with 4 layers. + if not hasattr(im, 'layers') or im.layers in (1, 4): + return -1 + sampling = im.layer[0][1:3] + im.layer[1][1:3] + im.layer[2][1:3] + return samplings.get(sampling, -1) + + +def _save(im, fp, filename): + + try: + rawmode = RAWMODE[im.mode] + except KeyError: + raise IOError("cannot write mode %s as JPEG" % im.mode) + + info = im.encoderinfo + + dpi = info.get("dpi", (0, 0)) + + quality = info.get("quality", 0) + subsampling = info.get("subsampling", -1) + qtables = info.get("qtables") + + if quality == "keep": + quality = 0 + subsampling = "keep" + qtables = "keep" + elif quality in presets: + preset = presets[quality] + quality = 0 + subsampling = preset.get('subsampling', -1) + qtables = preset.get('quantization') + elif not isinstance(quality, int): + raise ValueError("Invalid quality setting") + else: + if subsampling in presets: + subsampling = presets[subsampling].get('subsampling', -1) + if isStringType(qtables) and qtables in presets: + qtables = presets[qtables].get('quantization') + + if subsampling == "4:4:4": + subsampling = 0 + elif subsampling == "4:2:2": + subsampling = 1 + elif subsampling == "4:1:1": + subsampling = 2 + elif subsampling == "keep": + if im.format != "JPEG": + raise ValueError( + "Cannot use 'keep' when original image is not a JPEG") + subsampling = get_sampling(im) + + def validate_qtables(qtables): + if qtables is None: + return qtables + if isStringType(qtables): + try: + lines = [int(num) for line in qtables.splitlines() + for num in line.split('#', 1)[0].split()] + except ValueError: + raise ValueError("Invalid quantization table") + else: + qtables = [lines[s:s+64] for s in range(0, len(lines), 64)] + if isinstance(qtables, (tuple, list, dict)): + if isinstance(qtables, dict): + qtables = convert_dict_qtables(qtables) + elif isinstance(qtables, tuple): + qtables = list(qtables) + if not (0 < len(qtables) < 5): + raise ValueError("None or too many quantization tables") + for idx, table in enumerate(qtables): + try: + if len(table) != 64: + raise + table = array.array('b', table) + except TypeError: + raise ValueError("Invalid quantization table") + else: + qtables[idx] = list(table) + return qtables + + if qtables == "keep": + if im.format != "JPEG": + raise ValueError( + "Cannot use 'keep' when original image is not a JPEG") + qtables = getattr(im, "quantization", None) + qtables = validate_qtables(qtables) + + extra = b"" + + icc_profile = info.get("icc_profile") + if icc_profile: + ICC_OVERHEAD_LEN = 14 + MAX_BYTES_IN_MARKER = 65533 + MAX_DATA_BYTES_IN_MARKER = MAX_BYTES_IN_MARKER - ICC_OVERHEAD_LEN + markers = [] + while icc_profile: + markers.append(icc_profile[:MAX_DATA_BYTES_IN_MARKER]) + icc_profile = icc_profile[MAX_DATA_BYTES_IN_MARKER:] + i = 1 + for marker in markers: + size = struct.pack(">H", 2 + ICC_OVERHEAD_LEN + len(marker)) + extra += (b"\xFF\xE2" + size + b"ICC_PROFILE\0" + o8(i) + + o8(len(markers)) + marker) + i += 1 + + # get keyword arguments + im.encoderconfig = ( + quality, + # "progressive" is the official name, but older documentation + # says "progression" + # FIXME: issue a warning if the wrong form is used (post-1.1.7) + "progressive" in info or "progression" in info, + info.get("smooth", 0), + "optimize" in info, + info.get("streamtype", 0), + dpi[0], dpi[1], + subsampling, + qtables, + extra, + info.get("exif", b"") + ) + + # if we optimize, libjpeg needs a buffer big enough to hold the whole image + # in a shot. Guessing on the size, at im.size bytes. (raw pizel size is + # channels*size, this is a value that's been used in a django patch. + # https://github.com/matthewwithanm/django-imagekit/issues/50 + bufsize = 0 + if "optimize" in info or "progressive" in info or "progression" in info: + # keep sets quality to 0, but the actual value may be high. + if quality >= 95 or quality == 0: + bufsize = 2 * im.size[0] * im.size[1] + else: + bufsize = im.size[0] * im.size[1] + + # The exif info needs to be written as one block, + APP1, + one spare byte. + # Ensure that our buffer is big enough + bufsize = max(ImageFile.MAXBLOCK, bufsize, len(info.get("exif", b"")) + 5) + + ImageFile._save(im, fp, [("jpeg", (0, 0)+im.size, 0, rawmode)], bufsize) + + +def _save_cjpeg(im, fp, filename): + # ALTERNATIVE: handle JPEGs via the IJG command line utilities. + import os + import subprocess + tempfile = im._dump() + subprocess.check_call(["cjpeg", "-outfile", filename, tempfile]) + try: + os.unlink(tempfile) + except OSError: + pass + + +## +# Factory for making JPEG and MPO instances +def jpeg_factory(fp=None, filename=None): + im = JpegImageFile(fp, filename) + try: + mpheader = im._getmp() + if mpheader[45057] > 1: + # It's actually an MPO + from .MpoImagePlugin import MpoImageFile + im = MpoImageFile(fp, filename) + except (TypeError, IndexError): + # It is really a JPEG + pass + except SyntaxError: + warnings.warn("Image appears to be a malformed MPO file, it will be " + "interpreted as a base JPEG file") + return im + + +# -------------------------------------------------------------------q- +# Registry stuff + +Image.register_open(JpegImageFile.format, jpeg_factory, _accept) +Image.register_save(JpegImageFile.format, _save) + +Image.register_extension(JpegImageFile.format, ".jfif") +Image.register_extension(JpegImageFile.format, ".jpe") +Image.register_extension(JpegImageFile.format, ".jpg") +Image.register_extension(JpegImageFile.format, ".jpeg") + +Image.register_mime(JpegImageFile.format, "image/jpeg") diff --git a/server/www/packages/packages-darwin/x64/PIL/JpegPresets.py b/server/www/packages/packages-darwin/x64/PIL/JpegPresets.py new file mode 100644 index 0000000..c5a36b9 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/JpegPresets.py @@ -0,0 +1,241 @@ +""" +JPEG quality settings equivalent to the Photoshop settings. + +More presets can be added to the presets dict if needed. + +Can be use when saving JPEG file. + +To apply the preset, specify:: + + quality="preset_name" + +To apply only the quantization table:: + + qtables="preset_name" + +To apply only the subsampling setting:: + + subsampling="preset_name" + +Example:: + + im.save("image_name.jpg", quality="web_high") + + +Subsampling +----------- + +Subsampling is the practice of encoding images by implementing less resolution +for chroma information than for luma information. +(ref.: https://en.wikipedia.org/wiki/Chroma_subsampling) + +Possible subsampling values are 0, 1 and 2 that correspond to 4:4:4, 4:2:2 and +4:1:1 (or 4:2:0?). + +You can get the subsampling of a JPEG with the +`JpegImagePlugin.get_subsampling(im)` function. + + +Quantization tables +------------------- + +They are values use by the DCT (Discrete cosine transform) to remove +*unnecessary* information from the image (the lossy part of the compression). +(ref.: https://en.wikipedia.org/wiki/Quantization_matrix#Quantization_matrices, +https://en.wikipedia.org/wiki/JPEG#Quantization) + +You can get the quantization tables of a JPEG with:: + + im.quantization + +This will return a dict with a number of arrays. You can pass this dict +directly as the qtables argument when saving a JPEG. + +The tables format between im.quantization and quantization in presets differ in +3 ways: + +1. The base container of the preset is a list with sublists instead of dict. + dict[0] -> list[0], dict[1] -> list[1], ... +2. Each table in a preset is a list instead of an array. +3. The zigzag order is remove in the preset (needed by libjpeg >= 6a). + +You can convert the dict format to the preset format with the +`JpegImagePlugin.convert_dict_qtables(dict_qtables)` function. + +Libjpeg ref.: http://www.jpegcameras.com/libjpeg/libjpeg-3.html + +""" + +presets = { + 'web_low': {'subsampling': 2, # "4:1:1" + 'quantization': [ + [20, 16, 25, 39, 50, 46, 62, 68, + 16, 18, 23, 38, 38, 53, 65, 68, + 25, 23, 31, 38, 53, 65, 68, 68, + 39, 38, 38, 53, 65, 68, 68, 68, + 50, 38, 53, 65, 68, 68, 68, 68, + 46, 53, 65, 68, 68, 68, 68, 68, + 62, 65, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68], + [21, 25, 32, 38, 54, 68, 68, 68, + 25, 28, 24, 38, 54, 68, 68, 68, + 32, 24, 32, 43, 66, 68, 68, 68, + 38, 38, 43, 53, 68, 68, 68, 68, + 54, 54, 66, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68] + ]}, + 'web_medium': {'subsampling': 2, # "4:1:1" + 'quantization': [ + [16, 11, 11, 16, 23, 27, 31, 30, + 11, 12, 12, 15, 20, 23, 23, 30, + 11, 12, 13, 16, 23, 26, 35, 47, + 16, 15, 16, 23, 26, 37, 47, 64, + 23, 20, 23, 26, 39, 51, 64, 64, + 27, 23, 26, 37, 51, 64, 64, 64, + 31, 23, 35, 47, 64, 64, 64, 64, + 30, 30, 47, 64, 64, 64, 64, 64], + [17, 15, 17, 21, 20, 26, 38, 48, + 15, 19, 18, 17, 20, 26, 35, 43, + 17, 18, 20, 22, 26, 30, 46, 53, + 21, 17, 22, 28, 30, 39, 53, 64, + 20, 20, 26, 30, 39, 48, 64, 64, + 26, 26, 30, 39, 48, 63, 64, 64, + 38, 35, 46, 53, 64, 64, 64, 64, + 48, 43, 53, 64, 64, 64, 64, 64] + ]}, + 'web_high': {'subsampling': 0, # "4:4:4" + 'quantization': [ + [6, 4, 4, 6, 9, 11, 12, 16, + 4, 5, 5, 6, 8, 10, 12, 12, + 4, 5, 5, 6, 10, 12, 14, 19, + 6, 6, 6, 11, 12, 15, 19, 28, + 9, 8, 10, 12, 16, 20, 27, 31, + 11, 10, 12, 15, 20, 27, 31, 31, + 12, 12, 14, 19, 27, 31, 31, 31, + 16, 12, 19, 28, 31, 31, 31, 31], + [7, 7, 13, 24, 26, 31, 31, 31, + 7, 12, 16, 21, 31, 31, 31, 31, + 13, 16, 17, 31, 31, 31, 31, 31, + 24, 21, 31, 31, 31, 31, 31, 31, + 26, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31] + ]}, + 'web_very_high': {'subsampling': 0, # "4:4:4" + 'quantization': [ + [2, 2, 2, 2, 3, 4, 5, 6, + 2, 2, 2, 2, 3, 4, 5, 6, + 2, 2, 2, 2, 4, 5, 7, 9, + 2, 2, 2, 4, 5, 7, 9, 12, + 3, 3, 4, 5, 8, 10, 12, 12, + 4, 4, 5, 7, 10, 12, 12, 12, + 5, 5, 7, 9, 12, 12, 12, 12, + 6, 6, 9, 12, 12, 12, 12, 12], + [3, 3, 5, 9, 13, 15, 15, 15, + 3, 4, 6, 11, 14, 12, 12, 12, + 5, 6, 9, 14, 12, 12, 12, 12, + 9, 11, 14, 12, 12, 12, 12, 12, + 13, 14, 12, 12, 12, 12, 12, 12, + 15, 12, 12, 12, 12, 12, 12, 12, + 15, 12, 12, 12, 12, 12, 12, 12, + 15, 12, 12, 12, 12, 12, 12, 12] + ]}, + 'web_maximum': {'subsampling': 0, # "4:4:4" + 'quantization': [ + [1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 1, 1, 1, 2, 2, + 1, 1, 1, 1, 1, 2, 2, 3, + 1, 1, 1, 1, 2, 2, 3, 3, + 1, 1, 1, 2, 2, 3, 3, 3, + 1, 1, 2, 2, 3, 3, 3, 3], + [1, 1, 1, 2, 2, 3, 3, 3, + 1, 1, 1, 2, 3, 3, 3, 3, + 1, 1, 1, 3, 3, 3, 3, 3, + 2, 2, 3, 3, 3, 3, 3, 3, + 2, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3] + ]}, + 'low': {'subsampling': 2, # "4:1:1" + 'quantization': [ + [18, 14, 14, 21, 30, 35, 34, 17, + 14, 16, 16, 19, 26, 23, 12, 12, + 14, 16, 17, 21, 23, 12, 12, 12, + 21, 19, 21, 23, 12, 12, 12, 12, + 30, 26, 23, 12, 12, 12, 12, 12, + 35, 23, 12, 12, 12, 12, 12, 12, + 34, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12], + [20, 19, 22, 27, 20, 20, 17, 17, + 19, 25, 23, 14, 14, 12, 12, 12, + 22, 23, 14, 14, 12, 12, 12, 12, + 27, 14, 14, 12, 12, 12, 12, 12, + 20, 14, 12, 12, 12, 12, 12, 12, + 20, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12] + ]}, + 'medium': {'subsampling': 2, # "4:1:1" + 'quantization': [ + [12, 8, 8, 12, 17, 21, 24, 17, + 8, 9, 9, 11, 15, 19, 12, 12, + 8, 9, 10, 12, 19, 12, 12, 12, + 12, 11, 12, 21, 12, 12, 12, 12, + 17, 15, 19, 12, 12, 12, 12, 12, + 21, 19, 12, 12, 12, 12, 12, 12, + 24, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12], + [13, 11, 13, 16, 20, 20, 17, 17, + 11, 14, 14, 14, 14, 12, 12, 12, + 13, 14, 14, 14, 12, 12, 12, 12, + 16, 14, 14, 12, 12, 12, 12, 12, + 20, 14, 12, 12, 12, 12, 12, 12, + 20, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12] + ]}, + 'high': {'subsampling': 0, # "4:4:4" + 'quantization': [ + [6, 4, 4, 6, 9, 11, 12, 16, + 4, 5, 5, 6, 8, 10, 12, 12, + 4, 5, 5, 6, 10, 12, 12, 12, + 6, 6, 6, 11, 12, 12, 12, 12, + 9, 8, 10, 12, 12, 12, 12, 12, + 11, 10, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 16, 12, 12, 12, 12, 12, 12, 12], + [7, 7, 13, 24, 20, 20, 17, 17, + 7, 12, 16, 14, 14, 12, 12, 12, + 13, 16, 14, 14, 12, 12, 12, 12, + 24, 14, 14, 12, 12, 12, 12, 12, + 20, 14, 12, 12, 12, 12, 12, 12, + 20, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12] + ]}, + 'maximum': {'subsampling': 0, # "4:4:4" + 'quantization': [ + [2, 2, 2, 2, 3, 4, 5, 6, + 2, 2, 2, 2, 3, 4, 5, 6, + 2, 2, 2, 2, 4, 5, 7, 9, + 2, 2, 2, 4, 5, 7, 9, 12, + 3, 3, 4, 5, 8, 10, 12, 12, + 4, 4, 5, 7, 10, 12, 12, 12, + 5, 5, 7, 9, 12, 12, 12, 12, + 6, 6, 9, 12, 12, 12, 12, 12], + [3, 3, 5, 9, 13, 15, 15, 15, + 3, 4, 6, 10, 14, 12, 12, 12, + 5, 6, 9, 14, 12, 12, 12, 12, + 9, 10, 14, 12, 12, 12, 12, 12, + 13, 14, 12, 12, 12, 12, 12, 12, + 15, 12, 12, 12, 12, 12, 12, 12, + 15, 12, 12, 12, 12, 12, 12, 12, + 15, 12, 12, 12, 12, 12, 12, 12] + ]}, +} diff --git a/server/www/packages/packages-darwin/x64/PIL/McIdasImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/McIdasImagePlugin.py new file mode 100644 index 0000000..b753603 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/McIdasImagePlugin.py @@ -0,0 +1,74 @@ +# +# The Python Imaging Library. +# $Id$ +# +# Basic McIdas support for PIL +# +# History: +# 1997-05-05 fl Created (8-bit images only) +# 2009-03-08 fl Added 16/32-bit support. +# +# Thanks to Richard Jones and Craig Swank for specs and samples. +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1997. +# +# See the README file for information on usage and redistribution. +# + +import struct +from PIL import Image, ImageFile + +__version__ = "0.2" + + +def _accept(s): + return s[:8] == b"\x00\x00\x00\x00\x00\x00\x00\x04" + + +## +# Image plugin for McIdas area images. + +class McIdasImageFile(ImageFile.ImageFile): + + format = "MCIDAS" + format_description = "McIdas area file" + + def _open(self): + + # parse area file directory + s = self.fp.read(256) + if not _accept(s) or len(s) != 256: + raise SyntaxError("not an McIdas area file") + + self.area_descriptor_raw = s + self.area_descriptor = w = [0] + list(struct.unpack("!64i", s)) + + # get mode + if w[11] == 1: + mode = rawmode = "L" + elif w[11] == 2: + # FIXME: add memory map support + mode = "I" + rawmode = "I;16B" + elif w[11] == 4: + # FIXME: add memory map support + mode = "I" + rawmode = "I;32B" + else: + raise SyntaxError("unsupported McIdas format") + + self.mode = mode + self.size = w[10], w[9] + + offset = w[34] + w[15] + stride = w[15] + w[10]*w[11]*w[14] + + self.tile = [("raw", (0, 0) + self.size, offset, (rawmode, stride, 1))] + +# -------------------------------------------------------------------- +# registry + +Image.register_open(McIdasImageFile.format, McIdasImageFile, _accept) + +# no default extension diff --git a/server/www/packages/packages-darwin/x64/PIL/MicImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/MicImagePlugin.py new file mode 100644 index 0000000..3c91244 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/MicImagePlugin.py @@ -0,0 +1,103 @@ +# +# The Python Imaging Library. +# $Id$ +# +# Microsoft Image Composer support for PIL +# +# Notes: +# uses TiffImagePlugin.py to read the actual image streams +# +# History: +# 97-01-20 fl Created +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1997. +# +# See the README file for information on usage and redistribution. +# + + +from PIL import Image, TiffImagePlugin +from PIL.OleFileIO import MAGIC, OleFileIO + +__version__ = "0.1" + + +# +# -------------------------------------------------------------------- + + +def _accept(prefix): + return prefix[:8] == MAGIC + + +## +# Image plugin for Microsoft's Image Composer file format. + +class MicImageFile(TiffImagePlugin.TiffImageFile): + + format = "MIC" + format_description = "Microsoft Image Composer" + + def _open(self): + + # read the OLE directory and see if this is a likely + # to be a Microsoft Image Composer file + + try: + self.ole = OleFileIO(self.fp) + except IOError: + raise SyntaxError("not an MIC file; invalid OLE file") + + # find ACI subfiles with Image members (maybe not the + # best way to identify MIC files, but what the... ;-) + + self.images = [] + for path in self.ole.listdir(): + if path[1:] and path[0][-4:] == ".ACI" and path[1] == "Image": + self.images.append(path) + + # if we didn't find any images, this is probably not + # an MIC file. + if not self.images: + raise SyntaxError("not an MIC file; no image entries") + + self.__fp = self.fp + self.frame = 0 + + if len(self.images) > 1: + self.category = Image.CONTAINER + + self.seek(0) + + @property + def n_frames(self): + return len(self.images) + + @property + def is_animated(self): + return len(self.images) > 1 + + def seek(self, frame): + + try: + filename = self.images[frame] + except IndexError: + raise EOFError("no such frame") + + self.fp = self.ole.openstream(filename) + + TiffImagePlugin.TiffImageFile._open(self) + + self.frame = frame + + def tell(self): + + return self.frame + +# +# -------------------------------------------------------------------- + +Image.register_open(MicImageFile.format, MicImageFile, _accept) + +Image.register_extension(MicImageFile.format, ".mic") diff --git a/server/www/packages/packages-darwin/x64/PIL/MpegImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/MpegImagePlugin.py new file mode 100644 index 0000000..6671b86 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/MpegImagePlugin.py @@ -0,0 +1,86 @@ +# +# The Python Imaging Library. +# $Id$ +# +# MPEG file handling +# +# History: +# 95-09-09 fl Created +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1995. +# +# See the README file for information on usage and redistribution. +# + + +from PIL import Image, ImageFile +from PIL._binary import i8 + +__version__ = "0.1" + + +# +# Bitstream parser + +class BitStream(object): + + def __init__(self, fp): + self.fp = fp + self.bits = 0 + self.bitbuffer = 0 + + def next(self): + return i8(self.fp.read(1)) + + def peek(self, bits): + while self.bits < bits: + c = self.next() + if c < 0: + self.bits = 0 + continue + self.bitbuffer = (self.bitbuffer << 8) + c + self.bits += 8 + return self.bitbuffer >> (self.bits - bits) & (1 << bits) - 1 + + def skip(self, bits): + while self.bits < bits: + self.bitbuffer = (self.bitbuffer << 8) + i8(self.fp.read(1)) + self.bits += 8 + self.bits = self.bits - bits + + def read(self, bits): + v = self.peek(bits) + self.bits = self.bits - bits + return v + + +## +# Image plugin for MPEG streams. This plugin can identify a stream, +# but it cannot read it. + +class MpegImageFile(ImageFile.ImageFile): + + format = "MPEG" + format_description = "MPEG" + + def _open(self): + + s = BitStream(self.fp) + + if s.read(32) != 0x1B3: + raise SyntaxError("not an MPEG file") + + self.mode = "RGB" + self.size = s.read(12), s.read(12) + + +# -------------------------------------------------------------------- +# Registry stuff + +Image.register_open(MpegImageFile.format, MpegImageFile) + +Image.register_extension(MpegImageFile.format, ".mpg") +Image.register_extension(MpegImageFile.format, ".mpeg") + +Image.register_mime(MpegImageFile.format, "video/mpeg") diff --git a/server/www/packages/packages-darwin/x64/PIL/MpoImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/MpoImagePlugin.py new file mode 100644 index 0000000..1d26021 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/MpoImagePlugin.py @@ -0,0 +1,99 @@ +# +# The Python Imaging Library. +# $Id$ +# +# MPO file handling +# +# See "Multi-Picture Format" (CIPA DC-007-Translation 2009, Standard of the +# Camera & Imaging Products Association) +# +# The multi-picture object combines multiple JPEG images (with a modified EXIF +# data format) into a single file. While it can theoretically be used much like +# a GIF animation, it is commonly used to represent 3D photographs and is (as +# of this writing) the most commonly used format by 3D cameras. +# +# History: +# 2014-03-13 Feneric Created +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image, JpegImagePlugin + +__version__ = "0.1" + + +def _accept(prefix): + return JpegImagePlugin._accept(prefix) + + +def _save(im, fp, filename): + # Note that we can only save the current frame at present + return JpegImagePlugin._save(im, fp, filename) + + +## +# Image plugin for MPO images. + +class MpoImageFile(JpegImagePlugin.JpegImageFile): + + format = "MPO" + format_description = "MPO (CIPA DC-007)" + + def _open(self): + self.fp.seek(0) # prep the fp in order to pass the JPEG test + JpegImagePlugin.JpegImageFile._open(self) + self.mpinfo = self._getmp() + self.__framecount = self.mpinfo[0xB001] + self.__mpoffsets = [mpent['DataOffset'] + self.info['mpoffset'] + for mpent in self.mpinfo[0xB002]] + self.__mpoffsets[0] = 0 + # Note that the following assertion will only be invalid if something + # gets broken within JpegImagePlugin. + assert self.__framecount == len(self.__mpoffsets) + del self.info['mpoffset'] # no longer needed + self.__fp = self.fp # FIXME: hack + self.__fp.seek(self.__mpoffsets[0]) # get ready to read first frame + self.__frame = 0 + self.offset = 0 + # for now we can only handle reading and individual frame extraction + self.readonly = 1 + + def load_seek(self, pos): + self.__fp.seek(pos) + + @property + def n_frames(self): + return self.__framecount + + @property + def is_animated(self): + return self.__framecount > 1 + + def seek(self, frame): + if frame < 0 or frame >= self.__framecount: + raise EOFError("no more images in MPO file") + else: + self.fp = self.__fp + self.offset = self.__mpoffsets[frame] + self.tile = [ + ("jpeg", (0, 0) + self.size, self.offset, (self.mode, "")) + ] + self.__frame = frame + + def tell(self): + return self.__frame + + +# -------------------------------------------------------------------q- +# Registry stuff + +# Note that since MPO shares a factory with JPEG, we do not need to do a +# separate registration for it here. +# Image.register_open(MpoImageFile.format, +# JpegImagePlugin.jpeg_factory, _accept) +Image.register_save(MpoImageFile.format, _save) + +Image.register_extension(MpoImageFile.format, ".mpo") + +Image.register_mime(MpoImageFile.format, "image/mpo") diff --git a/server/www/packages/packages-darwin/x64/PIL/MspImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/MspImagePlugin.py new file mode 100644 index 0000000..85f8e76 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/MspImagePlugin.py @@ -0,0 +1,104 @@ +# +# The Python Imaging Library. +# $Id$ +# +# MSP file handling +# +# This is the format used by the Paint program in Windows 1 and 2. +# +# History: +# 95-09-05 fl Created +# 97-01-03 fl Read/write MSP images +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1995-97. +# +# See the README file for information on usage and redistribution. +# + + +from PIL import Image, ImageFile, _binary + +__version__ = "0.1" + + +# +# read MSP files + +i16 = _binary.i16le + + +def _accept(prefix): + return prefix[:4] in [b"DanM", b"LinS"] + + +## +# Image plugin for Windows MSP images. This plugin supports both +# uncompressed (Windows 1.0). + +class MspImageFile(ImageFile.ImageFile): + + format = "MSP" + format_description = "Windows Paint" + + def _open(self): + + # Header + s = self.fp.read(32) + if s[:4] not in [b"DanM", b"LinS"]: + raise SyntaxError("not an MSP file") + + # Header checksum + checksum = 0 + for i in range(0, 32, 2): + checksum = checksum ^ i16(s[i:i+2]) + if checksum != 0: + raise SyntaxError("bad MSP checksum") + + self.mode = "1" + self.size = i16(s[4:]), i16(s[6:]) + + if s[:4] == b"DanM": + self.tile = [("raw", (0, 0)+self.size, 32, ("1", 0, 1))] + else: + self.tile = [("msp", (0, 0)+self.size, 32+2*self.size[1], None)] + +# +# write MSP files (uncompressed only) + +o16 = _binary.o16le + + +def _save(im, fp, filename): + + if im.mode != "1": + raise IOError("cannot write mode %s as MSP" % im.mode) + + # create MSP header + header = [0] * 16 + + header[0], header[1] = i16(b"Da"), i16(b"nM") # version 1 + header[2], header[3] = im.size + header[4], header[5] = 1, 1 + header[6], header[7] = 1, 1 + header[8], header[9] = im.size + + checksum = 0 + for h in header: + checksum = checksum ^ h + header[12] = checksum # FIXME: is this the right field? + + # header + for h in header: + fp.write(o16(h)) + + # image body + ImageFile._save(im, fp, [("raw", (0, 0)+im.size, 32, ("1", 0, 1))]) + +# +# registry + +Image.register_open(MspImageFile.format, MspImageFile, _accept) +Image.register_save(MspImageFile.format, _save) + +Image.register_extension(MspImageFile.format, ".msp") diff --git a/server/www/packages/packages-darwin/x64/PIL/OleFileIO-README.md b/server/www/packages/packages-darwin/x64/PIL/OleFileIO-README.md new file mode 100644 index 0000000..0962a5a --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/OleFileIO-README.md @@ -0,0 +1,180 @@ +olefile (formerly OleFileIO_PL) +=============================== + +[olefile](http://www.decalage.info/olefile) is a Python package to parse, read and write +[Microsoft OLE2 files](http://en.wikipedia.org/wiki/Compound_File_Binary_Format) +(also called Structured Storage, Compound File Binary Format or Compound Document File Format), +such as Microsoft Office 97-2003 documents, vbaProject.bin in MS Office 2007+ files, Image Composer +and FlashPix files, Outlook messages, StickyNotes, several Microscopy file formats, McAfee antivirus quarantine files, +etc. + + +**Quick links:** [Home page](http://www.decalage.info/olefile) - +[Download/Install](https://bitbucket.org/decalage/olefileio_pl/wiki/Install) - +[Documentation](https://bitbucket.org/decalage/olefileio_pl/wiki) - +[Report Issues/Suggestions/Questions](https://bitbucket.org/decalage/olefileio_pl/issues?status=new&status=open) - +[Contact the author](http://decalage.info/contact) - +[Repository](https://bitbucket.org/decalage/olefileio_pl) - +[Updates on Twitter](https://twitter.com/decalage2) + + +News +---- + +Follow all updates and news on Twitter: + +- **2015-01-25 v0.42**: improved handling of special characters in stream/storage names on Python 2.x (using UTF-8 + instead of Latin-1), fixed bug in listdir with empty storages. +- 2014-11-25 v0.41: OleFileIO.open and isOleFile now support OLE files stored in byte strings, fixed installer for + python 3, added support for Jython (Niko Ehrenfeuchter) +- 2014-10-01 v0.40: renamed OleFileIO_PL to olefile, added initial write support for streams >4K, updated doc and + license, improved the setup script. +- 2014-07-27 v0.31: fixed support for large files with 4K sectors, thanks to Niko Ehrenfeuchter, Martijn Berger and + Dave Jones. Added test scripts from Pillow (by hugovk). Fixed setup for Python 3 (Martin Panter) +- 2014-02-04 v0.30: now compatible with Python 3.x, thanks to Martin Panter who did most of the hard work. +- 2013-07-24 v0.26: added methods to parse stream/storage timestamps, improved listdir to include storages, fixed + parsing of direntry timestamps +- 2013-05-27 v0.25: improved metadata extraction, properties parsing and exception handling, fixed + [issue #12](https://bitbucket.org/decalage/olefileio_pl/issue/12/error-when-converting-timestamps-in-ole) +- 2013-05-07 v0.24: new features to extract metadata (get\_metadata method and OleMetadata class), improved + getproperties to convert timestamps to Python datetime +- 2012-10-09: published [python-oletools](http://www.decalage.info/python/oletools), a package of analysis tools based + on OleFileIO_PL +- 2012-09-11 v0.23: added support for file-like objects, fixed [issue #8](https://bitbucket.org/decalage/olefileio_pl/issue/8/bug-with-file-object) +- 2012-02-17 v0.22: fixed issues #7 (bug in getproperties) and #2 (added close method) +- 2011-10-20: code hosted on bitbucket to ease contributions and bug tracking +- 2010-01-24 v0.21: fixed support for big-endian CPUs, such as PowerPC Macs. +- 2009-12-11 v0.20: small bugfix in OleFileIO.open when filename is not plain str. +- 2009-12-10 v0.19: fixed support for 64 bits platforms (thanks to Ben G. and Martijn for reporting the bug) +- see changelog in source code for more info. + +Download/Install +---------------- + +If you have pip or setuptools installed (pip is included in Python 2.7.9+), you may simply run **pip install olefile** +or **easy_install olefile** for the first installation. + +To update olefile, run **pip install -U olefile**. + +Otherwise, see https://bitbucket.org/decalage/olefileio_pl/wiki/Install + +Features +-------- + +- Parse, read and write any OLE file such as Microsoft Office 97-2003 legacy document formats (Word .doc, Excel .xls, + PowerPoint .ppt, Visio .vsd, Project .mpp), Image Composer and FlashPix files, Outlook messages, StickyNotes, + Zeiss AxioVision ZVI files, Olympus FluoView OIB files, etc +- List all the streams and storages contained in an OLE file +- Open streams as files +- Parse and read property streams, containing metadata of the file +- Portable, pure Python module, no dependency + +olefile can be used as an independent package or with PIL/Pillow. + +olefile is mostly meant for developers. If you are looking for tools to analyze OLE files or to extract data (especially +for security purposes such as malware analysis and forensics), then please also check my +[python-oletools](http://www.decalage.info/python/oletools), which are built upon olefile and provide a higher-level interface. + + +History +------- + +olefile is based on the OleFileIO module from [PIL](http://www.pythonware.com/products/pil/index.htm), the excellent +Python Imaging Library, created and maintained by Fredrik Lundh. The olefile API is still compatible with PIL, but +since 2005 I have improved the internal implementation significantly, with new features, bugfixes and a more robust +design. From 2005 to 2014 the project was called OleFileIO_PL, and in 2014 I changed its name to olefile to celebrate +its 9 years and its new write features. + +As far as I know, olefile is the most complete and robust Python implementation to read MS OLE2 files, portable on +several operating systems. (please tell me if you know other similar Python modules) + +Since 2014 olefile/OleFileIO_PL has been integrated into [Pillow](http://python-imaging.github.io/), the friendly fork +of PIL. olefile will continue to be improved as a separate project, and new versions will be merged into Pillow +regularly. + + +Main improvements over the original version of OleFileIO in PIL: +---------------------------------------------------------------- + +- Compatible with Python 3.x and 2.6+ +- Many bug fixes +- Support for files larger than 6.8MB +- Support for 64 bits platforms and big-endian CPUs +- Robust: many checks to detect malformed files +- Runtime option to choose if malformed files should be parsed or raise exceptions +- Improved API +- Metadata extraction, stream/storage timestamps (e.g. for document forensics) +- Can open file-like objects +- Added setup.py and install.bat to ease installation +- More convenient slash-based syntax for stream paths +- Write features + +Documentation +------------- + +Please see the [online documentation](https://bitbucket.org/decalage/olefileio_pl/wiki) for more information, +especially the [OLE overview](https://bitbucket.org/decalage/olefileio_pl/wiki/OLE_Overview) and the +[API page](https://bitbucket.org/decalage/olefileio_pl/wiki/API) which describe how to use olefile in Python applications. +A copy of the same documentation is also provided in the doc subfolder of the olefile package. + + +## Real-life examples ## + +A real-life example: [using OleFileIO_PL for malware analysis and forensics](http://blog.gregback.net/2011/03/using-remnux-for-forensic-puzzle-6/). + +See also [this paper](https://computer-forensics.sans.org/community/papers/gcfa/grow-forensic-tools-taxonomy-python-libraries-helpful-forensic-analysis_6879) about python tools for forensics, which features olefile. + + +License +------- + +olefile (formerly OleFileIO_PL) is copyright (c) 2005-2015 Philippe Lagadec +([http://www.decalage.info](http://www.decalage.info)) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +---------- + +olefile is based on source code from the OleFileIO module of the Python Imaging Library (PIL) published by Fredrik +Lundh under the following license: + +The Python Imaging Library (PIL) is + +- Copyright (c) 1997-2005 by Secret Labs AB +- Copyright (c) 1995-2005 by Fredrik Lundh + +By obtaining, using, and/or copying this software and/or its associated documentation, you agree that you have read, +understood, and will comply with the following terms and conditions: + +Permission to use, copy, modify, and distribute this software and its associated documentation for any purpose and +without fee is hereby granted, provided that the above copyright notice appears in all copies, and that both that +copyright notice and this permission notice appear in supporting documentation, and that the name of Secret Labs AB or +the author not be used in advertising or publicity pertaining to distribution of the software without specific, written +prior permission. + +SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. diff --git a/server/www/packages/packages-darwin/x64/PIL/OleFileIO.py b/server/www/packages/packages-darwin/x64/PIL/OleFileIO.py new file mode 100644 index 0000000..4cf106d --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/OleFileIO.py @@ -0,0 +1,2305 @@ +#!/usr/bin/env python + +# olefile (formerly OleFileIO_PL) version 0.42 2015-01-25 +# +# Module to read/write Microsoft OLE2 files (also called Structured Storage or +# Microsoft Compound Document File Format), such as Microsoft Office 97-2003 +# documents, Image Composer and FlashPix files, Outlook messages, ... +# This version is compatible with Python 2.6+ and 3.x +# +# Project website: http://www.decalage.info/olefile +# +# olefile is copyright (c) 2005-2015 Philippe Lagadec (http://www.decalage.info) +# +# olefile is based on the OleFileIO module from the PIL library v1.1.6 +# See: http://www.pythonware.com/products/pil/index.htm +# +# The Python Imaging Library (PIL) is +# Copyright (c) 1997-2005 by Secret Labs AB +# Copyright (c) 1995-2005 by Fredrik Lundh +# +# See source code and LICENSE.txt for information on usage and redistribution. + + +# Since OleFileIO_PL v0.30, only Python 2.6+ and 3.x is supported +# This import enables print() as a function rather than a keyword +# (main requirement to be compatible with Python 3.x) +# The comment on the line below should be printed on Python 2.5 or older: +from __future__ import print_function # This version of olefile requires Python 2.6+ or 3.x. + + +__author__ = "Philippe Lagadec" +__date__ = "2015-01-25" +__version__ = '0.42b' + +#--- LICENSE ------------------------------------------------------------------ + +# olefile (formerly OleFileIO_PL) is copyright (c) 2005-2015 Philippe Lagadec +# (http://www.decalage.info) +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# ---------- +# PIL License: +# +# olefile is based on source code from the OleFileIO module of the Python +# Imaging Library (PIL) published by Fredrik Lundh under the following license: + +# The Python Imaging Library (PIL) is +# Copyright (c) 1997-2005 by Secret Labs AB +# Copyright (c) 1995-2005 by Fredrik Lundh +# +# By obtaining, using, and/or copying this software and/or its associated +# documentation, you agree that you have read, understood, and will comply with +# the following terms and conditions: +# +# Permission to use, copy, modify, and distribute this software and its +# associated documentation for any purpose and without fee is hereby granted, +# provided that the above copyright notice appears in all copies, and that both +# that copyright notice and this permission notice appear in supporting +# documentation, and that the name of Secret Labs AB or the author(s) not be used +# in advertising or publicity pertaining to distribution of the software +# without specific, written prior permission. +# +# SECRET LABS AB AND THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS +# SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +# IN NO EVENT SHALL SECRET LABS AB OR THE AUTHORS BE LIABLE FOR ANY SPECIAL, +# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +#----------------------------------------------------------------------------- +# CHANGELOG: (only olefile/OleFileIO_PL changes compared to PIL 1.1.6) +# 2005-05-11 v0.10 PL: - a few fixes for Python 2.4 compatibility +# (all changes flagged with [PL]) +# 2006-02-22 v0.11 PL: - a few fixes for some Office 2003 documents which raise +# exceptions in _OleStream.__init__() +# 2006-06-09 v0.12 PL: - fixes for files above 6.8MB (DIFAT in loadfat) +# - added some constants +# - added header values checks +# - added some docstrings +# - getsect: bugfix in case sectors >512 bytes +# - getsect: added conformity checks +# - DEBUG_MODE constant to activate debug display +# 2007-09-04 v0.13 PL: - improved/translated (lots of) comments +# - updated license +# - converted tabs to 4 spaces +# 2007-11-19 v0.14 PL: - added OleFileIO._raise_defect() to adapt sensitivity +# - improved _unicode() to use Python 2.x unicode support +# - fixed bug in _OleDirectoryEntry +# 2007-11-25 v0.15 PL: - added safety checks to detect FAT loops +# - fixed _OleStream which didn't check stream size +# - added/improved many docstrings and comments +# - moved helper functions _unicode and _clsid out of +# OleFileIO class +# - improved OleFileIO._find() to add Unix path syntax +# - OleFileIO._find() is now case-insensitive +# - added get_type() and get_rootentry_name() +# - rewritten loaddirectory and _OleDirectoryEntry +# 2007-11-27 v0.16 PL: - added _OleDirectoryEntry.kids_dict +# - added detection of duplicate filenames in storages +# - added detection of duplicate references to streams +# - added get_size() and exists() to _OleDirectoryEntry +# - added isOleFile to check header before parsing +# - added __all__ list to control public keywords in pydoc +# 2007-12-04 v0.17 PL: - added _load_direntry to fix a bug in loaddirectory +# - improved _unicode(), added workarounds for Python <2.3 +# - added set_debug_mode and -d option to set debug mode +# - fixed bugs in OleFileIO.open and _OleDirectoryEntry +# - added safety check in main for large or binary +# properties +# - allow size>0 for storages for some implementations +# 2007-12-05 v0.18 PL: - fixed several bugs in handling of FAT, MiniFAT and +# streams +# - added option '-c' in main to check all streams +# 2009-12-10 v0.19 PL: - bugfix for 32 bit arrays on 64 bits platforms +# (thanks to Ben G. and Martijn for reporting the bug) +# 2009-12-11 v0.20 PL: - bugfix in OleFileIO.open when filename is not plain str +# 2010-01-22 v0.21 PL: - added support for big-endian CPUs such as PowerPC Macs +# 2012-02-16 v0.22 PL: - fixed bug in getproperties, patch by chuckleberryfinn +# (https://bitbucket.org/decalage/olefileio_pl/issue/7) +# - added close method to OleFileIO (fixed issue #2) +# 2012-07-25 v0.23 PL: - added support for file-like objects (patch by mete0r_kr) +# 2013-05-05 v0.24 PL: - getproperties: added conversion from filetime to python +# datetime +# - main: displays properties with date format +# - new class OleMetadata to parse standard properties +# - added get_metadata method +# 2013-05-07 v0.24 PL: - a few improvements in OleMetadata +# 2013-05-24 v0.25 PL: - getproperties: option to not convert some timestamps +# - OleMetaData: total_edit_time is now a number of seconds, +# not a timestamp +# - getproperties: added support for VT_BOOL, VT_INT, V_UINT +# - getproperties: filter out null chars from strings +# - getproperties: raise non-fatal defects instead of +# exceptions when properties cannot be parsed properly +# 2013-05-27 PL: - getproperties: improved exception handling +# - _raise_defect: added option to set exception type +# - all non-fatal issues are now recorded, and displayed +# when run as a script +# 2013-07-11 v0.26 PL: - added methods to get modification and creation times +# of a directory entry or a storage/stream +# - fixed parsing of direntry timestamps +# 2013-07-24 PL: - new options in listdir to list storages and/or streams +# 2014-02-04 v0.30 PL: - upgraded code to support Python 3.x by Martin Panter +# - several fixes for Python 2.6 (xrange, MAGIC) +# - reused i32 from Pillow's _binary +# 2014-07-18 v0.31 - preliminary support for 4K sectors +# 2014-07-27 v0.31 PL: - a few improvements in OleFileIO.open (header parsing) +# - Fixed loadfat for large files with 4K sectors (issue #3) +# 2014-07-30 v0.32 PL: - added write_sect to write sectors to disk +# - added write_mode option to OleFileIO.__init__ and open +# 2014-07-31 PL: - fixed padding in write_sect for Python 3, added checks +# - added write_stream to write a stream to disk +# 2014-09-26 v0.40 PL: - renamed OleFileIO_PL to olefile +# 2014-11-09 NE: - added support for Jython (Niko Ehrenfeuchter) +# 2014-11-13 v0.41 PL: - improved isOleFile and OleFileIO.open to support OLE +# data in a string buffer and file-like objects. +# 2014-11-21 PL: - updated comments according to Pillow's commits +# 2015-01-24 v0.42 PL: - changed the default path name encoding from Latin-1 +# to UTF-8 on Python 2.x (Unicode on Python 3.x) +# - added path_encoding option to override the default +# - fixed a bug in _list when a storage is empty + +#----------------------------------------------------------------------------- +# TODO (for version 1.0): +# + get rid of print statements, to simplify Python 2.x and 3.x support +# + add is_stream and is_storage +# + remove leading and trailing slashes where a path is used +# + add functions path_list2str and path_str2list +# + fix how all the methods handle unicode str and/or bytes as arguments +# + add path attrib to _OleDirEntry, set it once and for all in init or +# append_kids (then listdir/_list can be simplified) +# - TESTS with Linux, MacOSX, Python 1.5.2, various files, PIL, ... +# - add underscore to each private method, to avoid their display in +# pydoc/epydoc documentation - Remove it for classes to be documented +# - replace all raised exceptions with _raise_defect (at least in OleFileIO) +# - merge code from _OleStream and OleFileIO.getsect to read sectors +# (maybe add a class for FAT and MiniFAT ?) +# - add method to check all streams (follow sectors chains without storing all +# stream in memory, and report anomalies) +# - use _OleDirectoryEntry.kids_dict to improve _find and _list ? +# - fix Unicode names handling (find some way to stay compatible with Py1.5.2) +# => if possible avoid converting names to Latin-1 +# - review DIFAT code: fix handling of DIFSECT blocks in FAT (not stop) +# - rewrite OleFileIO.getproperties +# - improve docstrings to show more sample uses +# - see also original notes and FIXME below +# - remove all obsolete FIXMEs +# - OleMetadata: fix version attrib according to +# http://msdn.microsoft.com/en-us/library/dd945671%28v=office.12%29.aspx + +# IDEAS: +# - in OleFileIO._open and _OleStream, use size=None instead of 0x7FFFFFFF for +# streams with unknown size +# - use arrays of int instead of long integers for FAT/MiniFAT, to improve +# performance and reduce memory usage ? (possible issue with values >2^31) +# - provide tests with unittest (may need write support to create samples) +# - move all debug code (and maybe dump methods) to a separate module, with +# a class which inherits OleFileIO ? +# - fix docstrings to follow epydoc format +# - add support for big endian byte order ? +# - create a simple OLE explorer with wxPython + +# FUTURE EVOLUTIONS to add write support: +# see issue #6 on Bitbucket: +# https://bitbucket.org/decalage/olefileio_pl/issue/6/improve-olefileio_pl-to-write-ole-files + +#----------------------------------------------------------------------------- +# NOTES from PIL 1.1.6: + +# History: +# 1997-01-20 fl Created +# 1997-01-22 fl Fixed 64-bit portability quirk +# 2003-09-09 fl Fixed typo in OleFileIO.loadfat (noted by Daniel Haertle) +# 2004-02-29 fl Changed long hex constants to signed integers +# +# Notes: +# FIXME: sort out sign problem (eliminate long hex constants) +# FIXME: change filename to use "a/b/c" instead of ["a", "b", "c"] +# FIXME: provide a glob mechanism function (using fnmatchcase) +# +# Literature: +# +# "FlashPix Format Specification, Appendix A", Kodak and Microsoft, +# September 1996. +# +# Quotes: +# +# "If this document and functionality of the Software conflict, +# the actual functionality of the Software represents the correct +# functionality" -- Microsoft, in the OLE format specification + +#------------------------------------------------------------------------------ + + +import io +import sys +import struct +import array +import os.path +import datetime + +#=== COMPATIBILITY WORKAROUNDS ================================================ + +# [PL] Define explicitly the public API to avoid private objects in pydoc: +#TODO: add more +# __all__ = ['OleFileIO', 'isOleFile', 'MAGIC'] + +# For Python 3.x, need to redefine long as int: +if str is not bytes: + long = int + +# Need to make sure we use xrange both on Python 2 and 3.x: +try: + # on Python 2 we need xrange: + iterrange = xrange +except: + # no xrange, for Python 3 it was renamed as range: + iterrange = range + +# [PL] workaround to fix an issue with array item size on 64 bits systems: +if array.array('L').itemsize == 4: + # on 32 bits platforms, long integers in an array are 32 bits: + UINT32 = 'L' +elif array.array('I').itemsize == 4: + # on 64 bits platforms, integers in an array are 32 bits: + UINT32 = 'I' +elif array.array('i').itemsize == 4: + # On 64 bit Jython, signed integers ('i') are the only way to store our 32 + # bit values in an array in a *somewhat* reasonable way, as the otherwise + # perfectly suited 'H' (unsigned int, 32 bits) results in a completely + # unusable behaviour. This is most likely caused by the fact that Java + # doesn't have unsigned values, and thus Jython's "array" implementation, + # which is based on "jarray", doesn't have them either. + # NOTE: to trick Jython into converting the values it would normally + # interpret as "signed" into "unsigned", a binary-and operation with + # 0xFFFFFFFF can be used. This way it is possible to use the same comparing + # operations on all platforms / implementations. The corresponding code + # lines are flagged with a 'JYTHON-WORKAROUND' tag below. + UINT32 = 'i' +else: + raise ValueError('Need to fix a bug with 32 bit arrays, please contact author...') + + +# [PL] These workarounds were inspired from the Path module +# (see http://www.jorendorff.com/articles/python/path/) +try: + basestring +except NameError: + basestring = str + +# [PL] Experimental setting: if True, OLE filenames will be kept in Unicode +# if False (default PIL behaviour), all filenames are converted to Latin-1. +KEEP_UNICODE_NAMES = True + +if sys.version_info[0] < 3: + # On Python 2.x, the default encoding for path names is UTF-8: + DEFAULT_PATH_ENCODING = 'utf-8' +else: + # On Python 3.x, the default encoding for path names is Unicode (None): + DEFAULT_PATH_ENCODING = None + + +#=== DEBUGGING =============================================================== + +#TODO: replace this by proper logging + +# [PL] DEBUG display mode: False by default, use set_debug_mode() or "-d" on +# command line to change it. +DEBUG_MODE = False + + +def debug_print(msg): + print(msg) + + +def debug_pass(msg): + pass + + +debug = debug_pass + + +def set_debug_mode(debug_mode): + """ + Set debug mode on or off, to control display of debugging messages. + :param mode: True or False + """ + global DEBUG_MODE, debug + DEBUG_MODE = debug_mode + if debug_mode: + debug = debug_print + else: + debug = debug_pass + + +#=== CONSTANTS =============================================================== + +# magic bytes that should be at the beginning of every OLE file: +MAGIC = b'\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1' + +# [PL]: added constants for Sector IDs (from AAF specifications) +MAXREGSECT = 0xFFFFFFFA # (-6) maximum SECT +DIFSECT = 0xFFFFFFFC # (-4) denotes a DIFAT sector in a FAT +FATSECT = 0xFFFFFFFD # (-3) denotes a FAT sector in a FAT +ENDOFCHAIN = 0xFFFFFFFE # (-2) end of a virtual stream chain +FREESECT = 0xFFFFFFFF # (-1) unallocated sector + +# [PL]: added constants for Directory Entry IDs (from AAF specifications) +MAXREGSID = 0xFFFFFFFA # (-6) maximum directory entry ID +NOSTREAM = 0xFFFFFFFF # (-1) unallocated directory entry + +# [PL] object types in storage (from AAF specifications) +STGTY_EMPTY = 0 # empty directory entry (according to OpenOffice.org doc) +STGTY_STORAGE = 1 # element is a storage object +STGTY_STREAM = 2 # element is a stream object +STGTY_LOCKBYTES = 3 # element is an ILockBytes object +STGTY_PROPERTY = 4 # element is an IPropertyStorage object +STGTY_ROOT = 5 # element is a root storage + + +# +# -------------------------------------------------------------------- +# property types + +VT_EMPTY = 0; VT_NULL = 1; VT_I2 = 2; VT_I4 = 3; VT_R4 = 4; VT_R8 = 5; VT_CY = 6; +VT_DATE = 7; VT_BSTR = 8; VT_DISPATCH = 9; VT_ERROR = 10; VT_BOOL = 11; +VT_VARIANT = 12; VT_UNKNOWN = 13; VT_DECIMAL = 14; VT_I1 = 16; VT_UI1 = 17; +VT_UI2 = 18; VT_UI4 = 19; VT_I8 = 20; VT_UI8 = 21; VT_INT = 22; VT_UINT = 23; +VT_VOID = 24; VT_HRESULT = 25; VT_PTR = 26; VT_SAFEARRAY = 27; VT_CARRAY = 28; +VT_USERDEFINED = 29; VT_LPSTR = 30; VT_LPWSTR = 31; VT_FILETIME = 64; +VT_BLOB = 65; VT_STREAM = 66; VT_STORAGE = 67; VT_STREAMED_OBJECT = 68; +VT_STORED_OBJECT = 69; VT_BLOB_OBJECT = 70; VT_CF = 71; VT_CLSID = 72; +VT_VECTOR = 0x1000; + +# map property id to name (for debugging purposes) + +VT = {} +for keyword, var in list(vars().items()): + if keyword[:3] == "VT_": + VT[var] = keyword + +# +# -------------------------------------------------------------------- +# Some common document types (root.clsid fields) + +WORD_CLSID = "00020900-0000-0000-C000-000000000046" +#TODO: check Excel, PPT, ... + +# [PL]: Defect levels to classify parsing errors - see OleFileIO._raise_defect() +DEFECT_UNSURE = 10 # a case which looks weird, but not sure it's a defect +DEFECT_POTENTIAL = 20 # a potential defect +DEFECT_INCORRECT = 30 # an error according to specifications, but parsing + # can go on +DEFECT_FATAL = 40 # an error which cannot be ignored, parsing is + # impossible + +# Minimal size of an empty OLE file, with 512-bytes sectors = 1536 bytes +# (this is used in isOleFile and OleFile.open) +MINIMAL_OLEFILE_SIZE = 1536 + +# [PL] add useful constants to __all__: +# for key in list(vars().keys()): +# if key.startswith('STGTY_') or key.startswith('DEFECT_'): +# __all__.append(key) + + +#=== FUNCTIONS =============================================================== + +def isOleFile(filename): + """ + Test if a file is an OLE container (according to the magic bytes in its header). + + :param filename: string-like or file-like object, OLE file to parse + + - if filename is a string smaller than 1536 bytes, it is the path + of the file to open. (bytes or unicode string) + - if filename is a string longer than 1535 bytes, it is parsed + as the content of an OLE file in memory. (bytes type only) + - if filename is a file-like object (with read and seek methods), + it is parsed as-is. + + :returns: True if OLE, False otherwise. + """ + # check if filename is a string-like or file-like object: + if hasattr(filename, 'read'): + # file-like object: use it directly + header = filename.read(len(MAGIC)) + # just in case, seek back to start of file: + filename.seek(0) + elif isinstance(filename, bytes) and len(filename) >= MINIMAL_OLEFILE_SIZE: + # filename is a bytes string containing the OLE file to be parsed: + header = filename[:len(MAGIC)] + else: + # string-like object: filename of file on disk + header = open(filename, 'rb').read(len(MAGIC)) + if header == MAGIC: + return True + else: + return False + + +if bytes is str: + # version for Python 2.x + def i8(c): + return ord(c) +else: + # version for Python 3.x + def i8(c): + return c if c.__class__ is int else c[0] + + +#TODO: replace i16 and i32 with more readable struct.unpack equivalent? + +def i16(c, o = 0): + """ + Converts a 2-bytes (16 bits) string to an integer. + + c: string containing bytes to convert + o: offset of bytes to convert in string + """ + return struct.unpack(" len(fat): + raise IOError('malformed OLE document, stream too large') + # optimization(?): data is first a list of strings, and join() is called + # at the end to concatenate all in one string. + # (this may not be really useful with recent Python versions) + data = [] + # if size is zero, then first sector index should be ENDOFCHAIN: + if size == 0 and sect != ENDOFCHAIN: + debug('size == 0 and sect != ENDOFCHAIN:') + raise IOError('incorrect OLE sector index for empty stream') + # [PL] A fixed-length for loop is used instead of an undefined while + # loop to avoid DoS attacks: + for i in range(nb_sectors): + # Sector index may be ENDOFCHAIN, but only if size was unknown + if sect == ENDOFCHAIN: + if unknown_size: + break + else: + # else this means that the stream is smaller than declared: + debug('sect=ENDOFCHAIN before expected size') + raise IOError('incomplete OLE stream') + # sector index should be within FAT: + if sect < 0 or sect >= len(fat): + debug('sect=%d (%X) / len(fat)=%d' % (sect, sect, len(fat))) + debug('i=%d / nb_sectors=%d' % (i, nb_sectors)) +## tmp_data = b"".join(data) +## f = open('test_debug.bin', 'wb') +## f.write(tmp_data) +## f.close() +## debug('data read so far: %d bytes' % len(tmp_data)) + raise IOError('incorrect OLE FAT, sector index out of range') + #TODO: merge this code with OleFileIO.getsect() ? + #TODO: check if this works with 4K sectors: + try: + fp.seek(offset + sectorsize * sect) + except: + debug('sect=%d, seek=%d, filesize=%d' % + (sect, offset+sectorsize*sect, filesize)) + raise IOError('OLE sector index out of range') + sector_data = fp.read(sectorsize) + # [PL] check if there was enough data: + # Note: if sector is the last of the file, sometimes it is not a + # complete sector (of 512 or 4K), so we may read less than + # sectorsize. + if len(sector_data) != sectorsize and sect != (len(fat)-1): + debug('sect=%d / len(fat)=%d, seek=%d / filesize=%d, len read=%d' % + (sect, len(fat), offset+sectorsize*sect, filesize, len(sector_data))) + debug('seek+len(read)=%d' % (offset+sectorsize*sect+len(sector_data))) + raise IOError('incomplete OLE sector') + data.append(sector_data) + # jump to next sector in the FAT: + try: + sect = fat[sect] & 0xFFFFFFFF # JYTHON-WORKAROUND + except IndexError: + # [PL] if pointer is out of the FAT an exception is raised + raise IOError('incorrect OLE FAT, sector index out of range') + # [PL] Last sector should be a "end of chain" marker: + if sect != ENDOFCHAIN: + raise IOError('incorrect last sector index in OLE stream') + data = b"".join(data) + # Data is truncated to the actual stream size: + if len(data) >= size: + data = data[:size] + # actual stream size is stored for future use: + self.size = size + elif unknown_size: + # actual stream size was not known, now we know the size of read + # data: + self.size = len(data) + else: + # read data is less than expected: + debug('len(data)=%d, size=%d' % (len(data), size)) + raise IOError('OLE stream size is less than declared') + # when all data is read in memory, BytesIO constructor is called + io.BytesIO.__init__(self, data) + # Then the _OleStream object can be used as a read-only file object. + + +#--- _OleDirectoryEntry ------------------------------------------------------- + +class _OleDirectoryEntry(object): + + """ + OLE2 Directory Entry + """ + # [PL] parsing code moved from OleFileIO.loaddirectory + + # struct to parse directory entries: + # <: little-endian byte order, standard sizes + # (note: this should guarantee that Q returns a 64 bits int) + # 64s: string containing entry name in unicode (max 31 chars) + null char + # H: uint16, number of bytes used in name buffer, including null = (len+1)*2 + # B: uint8, dir entry type (between 0 and 5) + # B: uint8, color: 0=black, 1=red + # I: uint32, index of left child node in the red-black tree, NOSTREAM if none + # I: uint32, index of right child node in the red-black tree, NOSTREAM if none + # I: uint32, index of child root node if it is a storage, else NOSTREAM + # 16s: CLSID, unique identifier (only used if it is a storage) + # I: uint32, user flags + # Q (was 8s): uint64, creation timestamp or zero + # Q (was 8s): uint64, modification timestamp or zero + # I: uint32, SID of first sector if stream or ministream, SID of 1st sector + # of stream containing ministreams if root entry, 0 otherwise + # I: uint32, total stream size in bytes if stream (low 32 bits), 0 otherwise + # I: uint32, total stream size in bytes if stream (high 32 bits), 0 otherwise + STRUCT_DIRENTRY = '<64sHBBIII16sIQQIII' + # size of a directory entry: 128 bytes + DIRENTRY_SIZE = 128 + assert struct.calcsize(STRUCT_DIRENTRY) == DIRENTRY_SIZE + + def __init__(self, entry, sid, olefile): + """ + Constructor for an _OleDirectoryEntry object. + Parses a 128-bytes entry from the OLE Directory stream. + + :param entry : string (must be 128 bytes long) + :param sid : index of this directory entry in the OLE file directory + :param olefile: OleFileIO containing this directory entry + """ + self.sid = sid + # ref to olefile is stored for future use + self.olefile = olefile + # kids is a list of children entries, if this entry is a storage: + # (list of _OleDirectoryEntry objects) + self.kids = [] + # kids_dict is a dictionary of children entries, indexed by their + # name in lowercase: used to quickly find an entry, and to detect + # duplicates + self.kids_dict = {} + # flag used to detect if the entry is referenced more than once in + # directory: + self.used = False + # decode DirEntry + ( + name, + namelength, + self.entry_type, + self.color, + self.sid_left, + self.sid_right, + self.sid_child, + clsid, + self.dwUserFlags, + self.createTime, + self.modifyTime, + self.isectStart, + sizeLow, + sizeHigh + ) = struct.unpack(_OleDirectoryEntry.STRUCT_DIRENTRY, entry) + if self.entry_type not in [STGTY_ROOT, STGTY_STORAGE, STGTY_STREAM, STGTY_EMPTY]: + olefile.raise_defect(DEFECT_INCORRECT, 'unhandled OLE storage type') + # only first directory entry can (and should) be root: + if self.entry_type == STGTY_ROOT and sid != 0: + olefile.raise_defect(DEFECT_INCORRECT, 'duplicate OLE root entry') + if sid == 0 and self.entry_type != STGTY_ROOT: + olefile.raise_defect(DEFECT_INCORRECT, 'incorrect OLE root entry') + #debug (struct.unpack(fmt_entry, entry[:len_entry])) + # name should be at most 31 unicode characters + null character, + # so 64 bytes in total (31*2 + 2): + if namelength > 64: + olefile.raise_defect(DEFECT_INCORRECT, 'incorrect DirEntry name length') + # if exception not raised, namelength is set to the maximum value: + namelength = 64 + # only characters without ending null char are kept: + name = name[:(namelength-2)] + #TODO: check if the name is actually followed by a null unicode character ([MS-CFB] 2.6.1) + #TODO: check if the name does not contain forbidden characters: + # [MS-CFB] 2.6.1: "The following characters are illegal and MUST NOT be part of the name: '/', '\', ':', '!'." + # name is converted from UTF-16LE to the path encoding specified in the OleFileIO: + self.name = olefile._decode_utf16_str(name) + + debug('DirEntry SID=%d: %s' % (self.sid, repr(self.name))) + debug(' - type: %d' % self.entry_type) + debug(' - sect: %d' % self.isectStart) + debug(' - SID left: %d, right: %d, child: %d' % (self.sid_left, + self.sid_right, self.sid_child)) + + # sizeHigh is only used for 4K sectors, it should be zero for 512 bytes + # sectors, BUT apparently some implementations set it as 0xFFFFFFFF, 1 + # or some other value so it cannot be raised as a defect in general: + if olefile.sectorsize == 512: + if sizeHigh != 0 and sizeHigh != 0xFFFFFFFF: + debug('sectorsize=%d, sizeLow=%d, sizeHigh=%d (%X)' % + (olefile.sectorsize, sizeLow, sizeHigh, sizeHigh)) + olefile.raise_defect(DEFECT_UNSURE, 'incorrect OLE stream size') + self.size = sizeLow + else: + self.size = sizeLow + (long(sizeHigh) << 32) + debug(' - size: %d (sizeLow=%d, sizeHigh=%d)' % (self.size, sizeLow, sizeHigh)) + + self.clsid = _clsid(clsid) + # a storage should have a null size, BUT some implementations such as + # Word 8 for Mac seem to allow non-null values => Potential defect: + if self.entry_type == STGTY_STORAGE and self.size != 0: + olefile.raise_defect(DEFECT_POTENTIAL, 'OLE storage with size>0') + # check if stream is not already referenced elsewhere: + if self.entry_type in (STGTY_ROOT, STGTY_STREAM) and self.size > 0: + if self.size < olefile.minisectorcutoff \ + and self.entry_type == STGTY_STREAM: # only streams can be in MiniFAT + # ministream object + minifat = True + else: + minifat = False + olefile._check_duplicate_stream(self.isectStart, minifat) + + def build_storage_tree(self): + """ + Read and build the red-black tree attached to this _OleDirectoryEntry + object, if it is a storage. + Note that this method builds a tree of all subentries, so it should + only be called for the root object once. + """ + debug('build_storage_tree: SID=%d - %s - sid_child=%d' + % (self.sid, repr(self.name), self.sid_child)) + if self.sid_child != NOSTREAM: + # if child SID is not NOSTREAM, then this entry is a storage. + # Let's walk through the tree of children to fill the kids list: + self.append_kids(self.sid_child) + + # Note from OpenOffice documentation: the safest way is to + # recreate the tree because some implementations may store broken + # red-black trees... + + # in the OLE file, entries are sorted on (length, name). + # for convenience, we sort them on name instead: + # (see rich comparison methods in this class) + self.kids.sort() + + def append_kids(self, child_sid): + """ + Walk through red-black tree of children of this directory entry to add + all of them to the kids list. (recursive method) + + :param child_sid : index of child directory entry to use, or None when called + first time for the root. (only used during recursion) + """ + # [PL] this method was added to use simple recursion instead of a complex + # algorithm. + # if this is not a storage or a leaf of the tree, nothing to do: + if child_sid == NOSTREAM: + return + # check if child SID is in the proper range: + if child_sid < 0 or child_sid >= len(self.olefile.direntries): + self.olefile.raise_defect(DEFECT_FATAL, 'OLE DirEntry index out of range') + # get child direntry: + child = self.olefile._load_direntry(child_sid) #direntries[child_sid] + debug('append_kids: child_sid=%d - %s - sid_left=%d, sid_right=%d, sid_child=%d' + % (child.sid, repr(child.name), child.sid_left, child.sid_right, child.sid_child)) + # the directory entries are organized as a red-black tree. + # (cf. Wikipedia for details) + # First walk through left side of the tree: + self.append_kids(child.sid_left) + # Check if its name is not already used (case-insensitive): + name_lower = child.name.lower() + if name_lower in self.kids_dict: + self.olefile.raise_defect(DEFECT_INCORRECT, + "Duplicate filename in OLE storage") + # Then the child_sid _OleDirectoryEntry object is appended to the + # kids list and dictionary: + self.kids.append(child) + self.kids_dict[name_lower] = child + # Check if kid was not already referenced in a storage: + if child.used: + self.olefile.raise_defect(DEFECT_INCORRECT, + 'OLE Entry referenced more than once') + child.used = True + # Finally walk through right side of the tree: + self.append_kids(child.sid_right) + # Afterwards build kid's own tree if it's also a storage: + child.build_storage_tree() + + def __eq__(self, other): + "Compare entries by name" + return self.name == other.name + + def __lt__(self, other): + "Compare entries by name" + return self.name < other.name + + def __ne__(self, other): + return not self.__eq__(other) + + def __le__(self, other): + return self.__eq__(other) or self.__lt__(other) + + # Reflected __lt__() and __le__() will be used for __gt__() and __ge__() + + #TODO: replace by the same function as MS implementation ? + # (order by name length first, then case-insensitive order) + + def dump(self, tab = 0): + "Dump this entry, and all its subentries (for debug purposes only)" + TYPES = ["(invalid)", "(storage)", "(stream)", "(lockbytes)", + "(property)", "(root)"] + print(" "*tab + repr(self.name), TYPES[self.entry_type], end=' ') + if self.entry_type in (STGTY_STREAM, STGTY_ROOT): + print(self.size, "bytes", end=' ') + print() + if self.entry_type in (STGTY_STORAGE, STGTY_ROOT) and self.clsid: + print(" "*tab + "{%s}" % self.clsid) + + for kid in self.kids: + kid.dump(tab + 2) + + def getmtime(self): + """ + Return modification time of a directory entry. + + :returns: None if modification time is null, a python datetime object + otherwise (UTC timezone) + + new in version 0.26 + """ + if self.modifyTime == 0: + return None + return filetime2datetime(self.modifyTime) + + def getctime(self): + """ + Return creation time of a directory entry. + + :returns: None if modification time is null, a python datetime object + otherwise (UTC timezone) + + new in version 0.26 + """ + if self.createTime == 0: + return None + return filetime2datetime(self.createTime) + + +#--- OleFileIO ---------------------------------------------------------------- + +class OleFileIO(object): + """ + OLE container object + + This class encapsulates the interface to an OLE 2 structured + storage file. Use the :py:meth:`~PIL.OleFileIO.OleFileIO.listdir` and + :py:meth:`~PIL.OleFileIO.OleFileIO.openstream` methods to + access the contents of this file. + + Object names are given as a list of strings, one for each subentry + level. The root entry should be omitted. For example, the following + code extracts all image streams from a Microsoft Image Composer file:: + + ole = OleFileIO("fan.mic") + + for entry in ole.listdir(): + if entry[1:2] == "Image": + fin = ole.openstream(entry) + fout = open(entry[0:1], "wb") + while True: + s = fin.read(8192) + if not s: + break + fout.write(s) + + You can use the viewer application provided with the Python Imaging + Library to view the resulting files (which happens to be standard + TIFF files). + """ + + def __init__(self, filename=None, raise_defects=DEFECT_FATAL, + write_mode=False, debug=False, path_encoding=DEFAULT_PATH_ENCODING): + """ + Constructor for the OleFileIO class. + + :param filename: file to open. + + - if filename is a string smaller than 1536 bytes, it is the path + of the file to open. (bytes or unicode string) + - if filename is a string longer than 1535 bytes, it is parsed + as the content of an OLE file in memory. (bytes type only) + - if filename is a file-like object (with read, seek and tell methods), + it is parsed as-is. + + :param raise_defects: minimal level for defects to be raised as exceptions. + (use DEFECT_FATAL for a typical application, DEFECT_INCORRECT for a + security-oriented application, see source code for details) + + :param write_mode: bool, if True the file is opened in read/write mode instead + of read-only by default. + + :param debug: bool, set debug mode + + :param path_encoding: None or str, name of the codec to use for path + names (streams and storages), or None for Unicode. + Unicode by default on Python 3+, UTF-8 on Python 2.x. + (new in olefile 0.42, was hardcoded to Latin-1 until olefile v0.41) + """ + set_debug_mode(debug) + # minimal level for defects to be raised as exceptions: + self._raise_defects_level = raise_defects + # list of defects/issues not raised as exceptions: + # tuples of (exception type, message) + self.parsing_issues = [] + self.write_mode = write_mode + self.path_encoding = path_encoding + self._filesize = None + self.fp = None + if filename: + self.open(filename, write_mode=write_mode) + + def raise_defect(self, defect_level, message, exception_type=IOError): + """ + This method should be called for any defect found during file parsing. + It may raise an IOError exception according to the minimal level chosen + for the OleFileIO object. + + :param defect_level: defect level, possible values are: + + - DEFECT_UNSURE : a case which looks weird, but not sure it's a defect + - DEFECT_POTENTIAL : a potential defect + - DEFECT_INCORRECT : an error according to specifications, but parsing can go on + - DEFECT_FATAL : an error which cannot be ignored, parsing is impossible + + :param message: string describing the defect, used with raised exception. + :param exception_type: exception class to be raised, IOError by default + """ + # added by [PL] + if defect_level >= self._raise_defects_level: + raise exception_type(message) + else: + # just record the issue, no exception raised: + self.parsing_issues.append((exception_type, message)) + + def _decode_utf16_str(self, utf16_str, errors='replace'): + """ + Decode a string encoded in UTF-16 LE format, as found in the OLE + directory or in property streams. Return a string encoded + according to the path_encoding specified for the OleFileIO object. + + :param utf16_str: bytes string encoded in UTF-16 LE format + :param errors: str, see python documentation for str.decode() + :return: str, encoded according to path_encoding + """ + unicode_str = utf16_str.decode('UTF-16LE', errors) + if self.path_encoding: + # an encoding has been specified for path names: + return unicode_str.encode(self.path_encoding, errors) + else: + # path_encoding=None, return the Unicode string as-is: + return unicode_str + + def open(self, filename, write_mode=False): + """ + Open an OLE2 file in read-only or read/write mode. + Read and parse the header, FAT and directory. + + :param filename: string-like or file-like object, OLE file to parse + + - if filename is a string smaller than 1536 bytes, it is the path + of the file to open. (bytes or unicode string) + - if filename is a string longer than 1535 bytes, it is parsed + as the content of an OLE file in memory. (bytes type only) + - if filename is a file-like object (with read, seek and tell methods), + it is parsed as-is. + + :param write_mode: bool, if True the file is opened in read/write mode instead + of read-only by default. (ignored if filename is not a path) + """ + self.write_mode = write_mode + # [PL] check if filename is a string-like or file-like object: + # (it is better to check for a read() method) + if hasattr(filename, 'read'): + #TODO: also check seek and tell methods? + # file-like object: use it directly + self.fp = filename + elif isinstance(filename, bytes) and len(filename) >= MINIMAL_OLEFILE_SIZE: + # filename is a bytes string containing the OLE file to be parsed: + # convert it to BytesIO + self.fp = io.BytesIO(filename) + else: + # string-like object: filename of file on disk + if self.write_mode: + # open file in mode 'read with update, binary' + # According to https://docs.python.org/2/library/functions.html#open + # 'w' would truncate the file, 'a' may only append on some Unixes + mode = 'r+b' + else: + # read-only mode by default + mode = 'rb' + self.fp = open(filename, mode) + # obtain the filesize by using seek and tell, which should work on most + # file-like objects: + #TODO: do it above, using getsize with filename when possible? + #TODO: fix code to fail with clear exception when filesize cannot be obtained + filesize = 0 + self.fp.seek(0, os.SEEK_END) + try: + filesize = self.fp.tell() + finally: + self.fp.seek(0) + self._filesize = filesize + + # lists of streams in FAT and MiniFAT, to detect duplicate references + # (list of indexes of first sectors of each stream) + self._used_streams_fat = [] + self._used_streams_minifat = [] + + header = self.fp.read(512) + + if len(header) != 512 or header[:8] != MAGIC: + self.raise_defect(DEFECT_FATAL, "not an OLE2 structured storage file") + + # [PL] header structure according to AAF specifications: + ##Header + ##struct StructuredStorageHeader { // [offset from start (bytes), length (bytes)] + ##BYTE _abSig[8]; // [00H,08] {0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, + ## // 0x1a, 0xe1} for current version + ##CLSID _clsid; // [08H,16] reserved must be zero (WriteClassStg/ + ## // GetClassFile uses root directory class id) + ##USHORT _uMinorVersion; // [18H,02] minor version of the format: 33 is + ## // written by reference implementation + ##USHORT _uDllVersion; // [1AH,02] major version of the dll/format: 3 for + ## // 512-byte sectors, 4 for 4 KB sectors + ##USHORT _uByteOrder; // [1CH,02] 0xFFFE: indicates Intel byte-ordering + ##USHORT _uSectorShift; // [1EH,02] size of sectors in power-of-two; + ## // typically 9 indicating 512-byte sectors + ##USHORT _uMiniSectorShift; // [20H,02] size of mini-sectors in power-of-two; + ## // typically 6 indicating 64-byte mini-sectors + ##USHORT _usReserved; // [22H,02] reserved, must be zero + ##ULONG _ulReserved1; // [24H,04] reserved, must be zero + ##FSINDEX _csectDir; // [28H,04] must be zero for 512-byte sectors, + ## // number of SECTs in directory chain for 4 KB + ## // sectors + ##FSINDEX _csectFat; // [2CH,04] number of SECTs in the FAT chain + ##SECT _sectDirStart; // [30H,04] first SECT in the directory chain + ##DFSIGNATURE _signature; // [34H,04] signature used for transactions; must + ## // be zero. The reference implementation + ## // does not support transactions + ##ULONG _ulMiniSectorCutoff; // [38H,04] maximum size for a mini stream; + ## // typically 4096 bytes + ##SECT _sectMiniFatStart; // [3CH,04] first SECT in the MiniFAT chain + ##FSINDEX _csectMiniFat; // [40H,04] number of SECTs in the MiniFAT chain + ##SECT _sectDifStart; // [44H,04] first SECT in the DIFAT chain + ##FSINDEX _csectDif; // [48H,04] number of SECTs in the DIFAT chain + ##SECT _sectFat[109]; // [4CH,436] the SECTs of first 109 FAT sectors + ##}; + + # [PL] header decoding: + # '<' indicates little-endian byte ordering for Intel (cf. struct module help) + fmt_header = '<8s16sHHHHHHLLLLLLLLLL' + header_size = struct.calcsize(fmt_header) + debug("fmt_header size = %d, +FAT = %d" % (header_size, header_size + 109*4)) + header1 = header[:header_size] + ( + self.Sig, + self.clsid, + self.MinorVersion, + self.DllVersion, + self.ByteOrder, + self.SectorShift, + self.MiniSectorShift, + self.Reserved, self.Reserved1, + self.csectDir, + self.csectFat, + self.sectDirStart, + self.signature, + self.MiniSectorCutoff, + self.MiniFatStart, + self.csectMiniFat, + self.sectDifStart, + self.csectDif + ) = struct.unpack(fmt_header, header1) + debug(struct.unpack(fmt_header, header1)) + + if self.Sig != MAGIC: + # OLE signature should always be present + self.raise_defect(DEFECT_FATAL, "incorrect OLE signature") + if self.clsid != bytearray(16): + # according to AAF specs, CLSID should always be zero + self.raise_defect(DEFECT_INCORRECT, "incorrect CLSID in OLE header") + debug("MinorVersion = %d" % self.MinorVersion) + debug("DllVersion = %d" % self.DllVersion) + if self.DllVersion not in [3, 4]: + # version 3: usual format, 512 bytes per sector + # version 4: large format, 4K per sector + self.raise_defect(DEFECT_INCORRECT, "incorrect DllVersion in OLE header") + debug("ByteOrder = %X" % self.ByteOrder) + if self.ByteOrder != 0xFFFE: + # For now only common little-endian documents are handled correctly + self.raise_defect(DEFECT_FATAL, "incorrect ByteOrder in OLE header") + # TODO: add big-endian support for documents created on Mac ? + # But according to [MS-CFB] ? v20140502, ByteOrder MUST be 0xFFFE. + self.SectorSize = 2**self.SectorShift + debug("SectorSize = %d" % self.SectorSize) + if self.SectorSize not in [512, 4096]: + self.raise_defect(DEFECT_INCORRECT, "incorrect SectorSize in OLE header") + if (self.DllVersion == 3 and self.SectorSize != 512) \ + or (self.DllVersion == 4 and self.SectorSize != 4096): + self.raise_defect(DEFECT_INCORRECT, "SectorSize does not match DllVersion in OLE header") + self.MiniSectorSize = 2**self.MiniSectorShift + debug("MiniSectorSize = %d" % self.MiniSectorSize) + if self.MiniSectorSize not in [64]: + self.raise_defect(DEFECT_INCORRECT, "incorrect MiniSectorSize in OLE header") + if self.Reserved != 0 or self.Reserved1 != 0: + self.raise_defect(DEFECT_INCORRECT, "incorrect OLE header (non-null reserved bytes)") + debug("csectDir = %d" % self.csectDir) + # Number of directory sectors (only allowed if DllVersion != 3) + if self.SectorSize == 512 and self.csectDir != 0: + self.raise_defect(DEFECT_INCORRECT, "incorrect csectDir in OLE header") + debug("csectFat = %d" % self.csectFat) + # csectFat = number of FAT sectors in the file + debug("sectDirStart = %X" % self.sectDirStart) + # sectDirStart = 1st sector containing the directory + debug("signature = %d" % self.signature) + # Signature should be zero, BUT some implementations do not follow this + # rule => only a potential defect: + # (according to MS-CFB, may be != 0 for applications supporting file + # transactions) + if self.signature != 0: + self.raise_defect(DEFECT_POTENTIAL, "incorrect OLE header (signature>0)") + debug("MiniSectorCutoff = %d" % self.MiniSectorCutoff) + # MS-CFB: This integer field MUST be set to 0x00001000. This field + # specifies the maximum size of a user-defined data stream allocated + # from the mini FAT and mini stream, and that cutoff is 4096 bytes. + # Any user-defined data stream larger than or equal to this cutoff size + # must be allocated as normal sectors from the FAT. + if self.MiniSectorCutoff != 0x1000: + self.raise_defect(DEFECT_INCORRECT, "incorrect MiniSectorCutoff in OLE header") + debug("MiniFatStart = %X" % self.MiniFatStart) + debug("csectMiniFat = %d" % self.csectMiniFat) + debug("sectDifStart = %X" % self.sectDifStart) + debug("csectDif = %d" % self.csectDif) + + # calculate the number of sectors in the file + # (-1 because header doesn't count) + self.nb_sect = ((filesize + self.SectorSize-1) // self.SectorSize) - 1 + debug("Number of sectors in the file: %d" % self.nb_sect) + #TODO: change this test, because an OLE file MAY contain other data + # after the last sector. + + # file clsid + self.clsid = _clsid(header[8:24]) + + #TODO: remove redundant attributes, and fix the code which uses them? + self.sectorsize = self.SectorSize #1 << i16(header, 30) + self.minisectorsize = self.MiniSectorSize #1 << i16(header, 32) + self.minisectorcutoff = self.MiniSectorCutoff # i32(header, 56) + + # check known streams for duplicate references (these are always in FAT, + # never in MiniFAT): + self._check_duplicate_stream(self.sectDirStart) + # check MiniFAT only if it is not empty: + if self.csectMiniFat: + self._check_duplicate_stream(self.MiniFatStart) + # check DIFAT only if it is not empty: + if self.csectDif: + self._check_duplicate_stream(self.sectDifStart) + + # Load file allocation tables + self.loadfat(header) + # Load directory. This sets both the direntries list (ordered by sid) + # and the root (ordered by hierarchy) members. + self.loaddirectory(self.sectDirStart)#i32(header, 48)) + self.ministream = None + self.minifatsect = self.MiniFatStart #i32(header, 60) + + def close(self): + """ + close the OLE file, to release the file object + """ + self.fp.close() + + def _check_duplicate_stream(self, first_sect, minifat=False): + """ + Checks if a stream has not been already referenced elsewhere. + This method should only be called once for each known stream, and only + if stream size is not null. + + :param first_sect: int, index of first sector of the stream in FAT + :param minifat: bool, if True, stream is located in the MiniFAT, else in the FAT + """ + if minifat: + debug('_check_duplicate_stream: sect=%d in MiniFAT' % first_sect) + used_streams = self._used_streams_minifat + else: + debug('_check_duplicate_stream: sect=%d in FAT' % first_sect) + # some values can be safely ignored (not a real stream): + if first_sect in (DIFSECT, FATSECT, ENDOFCHAIN, FREESECT): + return + used_streams = self._used_streams_fat + #TODO: would it be more efficient using a dict or hash values, instead + # of a list of long ? + if first_sect in used_streams: + self.raise_defect(DEFECT_INCORRECT, 'Stream referenced twice') + else: + used_streams.append(first_sect) + + def dumpfat(self, fat, firstindex=0): + "Displays a part of FAT in human-readable form for debugging purpose" + # [PL] added only for debug + if not DEBUG_MODE: + return + # dictionary to convert special FAT values in human-readable strings + VPL = 8 # values per line (8+1 * 8+1 = 81) + fatnames = { + FREESECT: "..free..", + ENDOFCHAIN: "[ END. ]", + FATSECT: "FATSECT ", + DIFSECT: "DIFSECT " + } + nbsect = len(fat) + nlines = (nbsect+VPL-1)//VPL + print("index", end=" ") + for i in range(VPL): + print("%8X" % i, end=" ") + print() + for l in range(nlines): + index = l*VPL + print("%8X:" % (firstindex+index), end=" ") + for i in range(index, index+VPL): + if i >= nbsect: + break + sect = fat[i] + aux = sect & 0xFFFFFFFF # JYTHON-WORKAROUND + if aux in fatnames: + name = fatnames[aux] + else: + if sect == i+1: + name = " --->" + else: + name = "%8X" % sect + print(name, end=" ") + print() + + def dumpsect(self, sector, firstindex=0): + "Displays a sector in a human-readable form, for debugging purpose." + if not DEBUG_MODE: + return + VPL = 8 # number of values per line (8+1 * 8+1 = 81) + tab = array.array(UINT32, sector) + if sys.byteorder == 'big': + tab.byteswap() + nbsect = len(tab) + nlines = (nbsect+VPL-1)//VPL + print("index", end=" ") + for i in range(VPL): + print("%8X" % i, end=" ") + print() + for l in range(nlines): + index = l*VPL + print("%8X:" % (firstindex+index), end=" ") + for i in range(index, index+VPL): + if i >= nbsect: + break + sect = tab[i] + name = "%8X" % sect + print(name, end=" ") + print() + + def sect2array(self, sect): + """ + convert a sector to an array of 32 bits unsigned integers, + swapping bytes on big endian CPUs such as PowerPC (old Macs) + """ + a = array.array(UINT32, sect) + # if CPU is big endian, swap bytes: + if sys.byteorder == 'big': + a.byteswap() + return a + + def loadfat_sect(self, sect): + """ + Adds the indexes of the given sector to the FAT + + :param sect: string containing the first FAT sector, or array of long integers + :returns: index of last FAT sector. + """ + # a FAT sector is an array of ulong integers. + if isinstance(sect, array.array): + # if sect is already an array it is directly used + fat1 = sect + else: + # if it's a raw sector, it is parsed in an array + fat1 = self.sect2array(sect) + self.dumpsect(sect) + # The FAT is a sector chain starting at the first index of itself. + for isect in fat1: + isect = isect & 0xFFFFFFFF # JYTHON-WORKAROUND + debug("isect = %X" % isect) + if isect == ENDOFCHAIN or isect == FREESECT: + # the end of the sector chain has been reached + debug("found end of sector chain") + break + # read the FAT sector + s = self.getsect(isect) + # parse it as an array of 32 bits integers, and add it to the + # global FAT array + nextfat = self.sect2array(s) + self.fat = self.fat + nextfat + return isect + + def loadfat(self, header): + """ + Load the FAT table. + """ + # The 1st sector of the file contains sector numbers for the first 109 + # FAT sectors, right after the header which is 76 bytes long. + # (always 109, whatever the sector size: 512 bytes = 76+4*109) + # Additional sectors are described by DIF blocks + + sect = header[76:512] + debug("len(sect)=%d, so %d integers" % (len(sect), len(sect)//4)) + #fat = [] + # [PL] FAT is an array of 32 bits unsigned ints, it's more effective + # to use an array than a list in Python. + # It's initialized as empty first: + self.fat = array.array(UINT32) + self.loadfat_sect(sect) + #self.dumpfat(self.fat) +## for i in range(0, len(sect), 4): +## ix = i32(sect, i) +## # [PL] if ix == -2 or ix == -1: # ix == 0xFFFFFFFE or ix == 0xFFFFFFFF: +## if ix == 0xFFFFFFFE or ix == 0xFFFFFFFF: +## break +## s = self.getsect(ix) +## #fat = fat + [i32(s, i) for i in range(0, len(s), 4)] +## fat = fat + array.array(UINT32, s) + if self.csectDif != 0: + # [PL] There's a DIFAT because file is larger than 6.8MB + # some checks just in case: + if self.csectFat <= 109: + # there must be at least 109 blocks in header and the rest in + # DIFAT, so number of sectors must be >109. + self.raise_defect(DEFECT_INCORRECT, 'incorrect DIFAT, not enough sectors') + if self.sectDifStart >= self.nb_sect: + # initial DIFAT block index must be valid + self.raise_defect(DEFECT_FATAL, 'incorrect DIFAT, first index out of range') + debug("DIFAT analysis...") + # We compute the necessary number of DIFAT sectors : + # Number of pointers per DIFAT sector = (sectorsize/4)-1 + # (-1 because the last pointer is the next DIFAT sector number) + nb_difat_sectors = (self.sectorsize//4)-1 + # (if 512 bytes: each DIFAT sector = 127 pointers + 1 towards next DIFAT sector) + nb_difat = (self.csectFat-109 + nb_difat_sectors-1)//nb_difat_sectors + debug("nb_difat = %d" % nb_difat) + if self.csectDif != nb_difat: + raise IOError('incorrect DIFAT') + isect_difat = self.sectDifStart + for i in iterrange(nb_difat): + debug("DIFAT block %d, sector %X" % (i, isect_difat)) + #TODO: check if corresponding FAT SID = DIFSECT + sector_difat = self.getsect(isect_difat) + difat = self.sect2array(sector_difat) + self.dumpsect(sector_difat) + self.loadfat_sect(difat[:nb_difat_sectors]) + # last DIFAT pointer is next DIFAT sector: + isect_difat = difat[nb_difat_sectors] + debug("next DIFAT sector: %X" % isect_difat) + # checks: + if isect_difat not in [ENDOFCHAIN, FREESECT]: + # last DIFAT pointer value must be ENDOFCHAIN or FREESECT + raise IOError('incorrect end of DIFAT') +## if len(self.fat) != self.csectFat: +## # FAT should contain csectFat blocks +## print("FAT length: %d instead of %d" % (len(self.fat), self.csectFat)) +## raise IOError('incorrect DIFAT') + # since FAT is read from fixed-size sectors, it may contain more values + # than the actual number of sectors in the file. + # Keep only the relevant sector indexes: + if len(self.fat) > self.nb_sect: + debug('len(fat)=%d, shrunk to nb_sect=%d' % (len(self.fat), self.nb_sect)) + self.fat = self.fat[:self.nb_sect] + debug('\nFAT:') + self.dumpfat(self.fat) + + def loadminifat(self): + """ + Load the MiniFAT table. + """ + # MiniFAT is stored in a standard sub-stream, pointed to by a header + # field. + # NOTE: there are two sizes to take into account for this stream: + # 1) Stream size is calculated according to the number of sectors + # declared in the OLE header. This allocated stream may be more than + # needed to store the actual sector indexes. + # (self.csectMiniFat is the number of sectors of size self.SectorSize) + stream_size = self.csectMiniFat * self.SectorSize + # 2) Actually used size is calculated by dividing the MiniStream size + # (given by root entry size) by the size of mini sectors, *4 for + # 32 bits indexes: + nb_minisectors = (self.root.size + self.MiniSectorSize-1) // self.MiniSectorSize + used_size = nb_minisectors * 4 + debug('loadminifat(): minifatsect=%d, nb FAT sectors=%d, used_size=%d, stream_size=%d, nb MiniSectors=%d' % + (self.minifatsect, self.csectMiniFat, used_size, stream_size, nb_minisectors)) + if used_size > stream_size: + # This is not really a problem, but may indicate a wrong implementation: + self.raise_defect(DEFECT_INCORRECT, 'OLE MiniStream is larger than MiniFAT') + # In any case, first read stream_size: + s = self._open(self.minifatsect, stream_size, force_FAT=True).read() + # [PL] Old code replaced by an array: + # self.minifat = [i32(s, i) for i in range(0, len(s), 4)] + self.minifat = self.sect2array(s) + # Then shrink the array to used size, to avoid indexes out of MiniStream: + debug('MiniFAT shrunk from %d to %d sectors' % (len(self.minifat), nb_minisectors)) + self.minifat = self.minifat[:nb_minisectors] + debug('loadminifat(): len=%d' % len(self.minifat)) + debug('\nMiniFAT:') + self.dumpfat(self.minifat) + + def getsect(self, sect): + """ + Read given sector from file on disk. + + :param sect: int, sector index + :returns: a string containing the sector data. + """ + # From [MS-CFB]: A sector number can be converted into a byte offset + # into the file by using the following formula: + # (sector number + 1) x Sector Size. + # This implies that sector #0 of the file begins at byte offset Sector + # Size, not at 0. + + # [PL] the original code in PIL was wrong when sectors are 4KB instead of + # 512 bytes: + # self.fp.seek(512 + self.sectorsize * sect) + # [PL]: added safety checks: + # print("getsect(%X)" % sect) + try: + self.fp.seek(self.sectorsize * (sect+1)) + except: + debug('getsect(): sect=%X, seek=%d, filesize=%d' % + (sect, self.sectorsize*(sect+1), self._filesize)) + self.raise_defect(DEFECT_FATAL, 'OLE sector index out of range') + sector = self.fp.read(self.sectorsize) + if len(sector) != self.sectorsize: + debug('getsect(): sect=%X, read=%d, sectorsize=%d' % + (sect, len(sector), self.sectorsize)) + self.raise_defect(DEFECT_FATAL, 'incomplete OLE sector') + return sector + + def write_sect(self, sect, data, padding=b'\x00'): + """ + Write given sector to file on disk. + + :param sect: int, sector index + :param data: bytes, sector data + :param padding: single byte, padding character if data < sector size + """ + if not isinstance(data, bytes): + raise TypeError("write_sect: data must be a bytes string") + if not isinstance(padding, bytes) or len(padding) != 1: + raise TypeError("write_sect: padding must be a bytes string of 1 char") + #TODO: we could allow padding=None for no padding at all + try: + self.fp.seek(self.sectorsize * (sect+1)) + except: + debug('write_sect(): sect=%X, seek=%d, filesize=%d' % + (sect, self.sectorsize*(sect+1), self._filesize)) + self.raise_defect(DEFECT_FATAL, 'OLE sector index out of range') + if len(data) < self.sectorsize: + # add padding + data += padding * (self.sectorsize - len(data)) + elif len(data) < self.sectorsize: + raise ValueError("Data is larger than sector size") + self.fp.write(data) + + def loaddirectory(self, sect): + """ + Load the directory. + + :param sect: sector index of directory stream. + """ + # The directory is stored in a standard + # substream, independent of its size. + + # open directory stream as a read-only file: + # (stream size is not known in advance) + self.directory_fp = self._open(sect) + + # [PL] to detect malformed documents and avoid DoS attacks, the maximum + # number of directory entries can be calculated: + max_entries = self.directory_fp.size // 128 + debug('loaddirectory: size=%d, max_entries=%d' % + (self.directory_fp.size, max_entries)) + + # Create list of directory entries + # self.direntries = [] + # We start with a list of "None" object + self.direntries = [None] * max_entries +## for sid in iterrange(max_entries): +## entry = fp.read(128) +## if not entry: +## break +## self.direntries.append(_OleDirectoryEntry(entry, sid, self)) + # load root entry: + root_entry = self._load_direntry(0) + # Root entry is the first entry: + self.root = self.direntries[0] + # read and build all storage trees, starting from the root: + self.root.build_storage_tree() + + def _load_direntry(self, sid): + """ + Load a directory entry from the directory. + This method should only be called once for each storage/stream when + loading the directory. + + :param sid: index of storage/stream in the directory. + :returns: a _OleDirectoryEntry object + + :exception IOError: if the entry has always been referenced. + """ + # check if SID is OK: + if sid < 0 or sid >= len(self.direntries): + self.raise_defect(DEFECT_FATAL, "OLE directory index out of range") + # check if entry was already referenced: + if self.direntries[sid] is not None: + self.raise_defect(DEFECT_INCORRECT, + "double reference for OLE stream/storage") + # if exception not raised, return the object + return self.direntries[sid] + self.directory_fp.seek(sid * 128) + entry = self.directory_fp.read(128) + self.direntries[sid] = _OleDirectoryEntry(entry, sid, self) + return self.direntries[sid] + + def dumpdirectory(self): + """ + Dump directory (for debugging only) + """ + self.root.dump() + + def _open(self, start, size = 0x7FFFFFFF, force_FAT=False): + """ + Open a stream, either in FAT or MiniFAT according to its size. + (openstream helper) + + :param start: index of first sector + :param size: size of stream (or nothing if size is unknown) + :param force_FAT: if False (default), stream will be opened in FAT or MiniFAT + according to size. If True, it will always be opened in FAT. + """ + debug('OleFileIO.open(): sect=%d, size=%d, force_FAT=%s' % + (start, size, str(force_FAT))) + # stream size is compared to the MiniSectorCutoff threshold: + if size < self.minisectorcutoff and not force_FAT: + # ministream object + if not self.ministream: + # load MiniFAT if it wasn't already done: + self.loadminifat() + # The first sector index of the miniFAT stream is stored in the + # root directory entry: + size_ministream = self.root.size + debug('Opening MiniStream: sect=%d, size=%d' % + (self.root.isectStart, size_ministream)) + self.ministream = self._open(self.root.isectStart, + size_ministream, force_FAT=True) + return _OleStream(fp=self.ministream, sect=start, size=size, + offset=0, sectorsize=self.minisectorsize, + fat=self.minifat, filesize=self.ministream.size) + else: + # standard stream + return _OleStream(fp=self.fp, sect=start, size=size, + offset=self.sectorsize, + sectorsize=self.sectorsize, fat=self.fat, + filesize=self._filesize) + + def _list(self, files, prefix, node, streams=True, storages=False): + """ + listdir helper + + :param files: list of files to fill in + :param prefix: current location in storage tree (list of names) + :param node: current node (_OleDirectoryEntry object) + :param streams: bool, include streams if True (True by default) - new in v0.26 + :param storages: bool, include storages if True (False by default) - new in v0.26 + (note: the root storage is never included) + """ + prefix = prefix + [node.name] + for entry in node.kids: + if entry.entry_type == STGTY_STORAGE: + # this is a storage + if storages: + # add it to the list + files.append(prefix[1:] + [entry.name]) + # check its kids + self._list(files, prefix, entry, streams, storages) + elif entry.entry_type == STGTY_STREAM: + # this is a stream + if streams: + # add it to the list + files.append(prefix[1:] + [entry.name]) + else: + self.raise_defect(DEFECT_INCORRECT, 'The directory tree contains an entry which is not a stream nor a storage.') + + def listdir(self, streams=True, storages=False): + """ + Return a list of streams and/or storages stored in this file + + :param streams: bool, include streams if True (True by default) - new in v0.26 + :param storages: bool, include storages if True (False by default) - new in v0.26 + (note: the root storage is never included) + :returns: list of stream and/or storage paths + """ + files = [] + self._list(files, [], self.root, streams, storages) + return files + + def _find(self, filename): + """ + Returns directory entry of given filename. (openstream helper) + Note: this method is case-insensitive. + + :param filename: path of stream in storage tree (except root entry), either: + + - a string using Unix path syntax, for example: + 'storage_1/storage_1.2/stream' + - or a list of storage filenames, path to the desired stream/storage. + Example: ['storage_1', 'storage_1.2', 'stream'] + + :returns: sid of requested filename + :exception IOError: if file not found + """ + + # if filename is a string instead of a list, split it on slashes to + # convert to a list: + if isinstance(filename, basestring): + filename = filename.split('/') + # walk across storage tree, following given path: + node = self.root + for name in filename: + for kid in node.kids: + if kid.name.lower() == name.lower(): + break + else: + raise IOError("file not found") + node = kid + return node.sid + + def openstream(self, filename): + """ + Open a stream as a read-only file object (BytesIO). + Note: filename is case-insensitive. + + :param filename: path of stream in storage tree (except root entry), either: + + - a string using Unix path syntax, for example: + 'storage_1/storage_1.2/stream' + - or a list of storage filenames, path to the desired stream/storage. + Example: ['storage_1', 'storage_1.2', 'stream'] + + :returns: file object (read-only) + :exception IOError: if filename not found, or if this is not a stream. + """ + sid = self._find(filename) + entry = self.direntries[sid] + if entry.entry_type != STGTY_STREAM: + raise IOError("this file is not a stream") + return self._open(entry.isectStart, entry.size) + + def write_stream(self, stream_name, data): + """ + Write a stream to disk. For now, it is only possible to replace an + existing stream by data of the same size. + + :param stream_name: path of stream in storage tree (except root entry), either: + + - a string using Unix path syntax, for example: + 'storage_1/storage_1.2/stream' + - or a list of storage filenames, path to the desired stream/storage. + Example: ['storage_1', 'storage_1.2', 'stream'] + + :param data: bytes, data to be written, must be the same size as the original + stream. + """ + if not isinstance(data, bytes): + raise TypeError("write_stream: data must be a bytes string") + sid = self._find(stream_name) + entry = self.direntries[sid] + if entry.entry_type != STGTY_STREAM: + raise IOError("this is not a stream") + size = entry.size + if size != len(data): + raise ValueError("write_stream: data must be the same size as the existing stream") + if size < self.minisectorcutoff: + raise NotImplementedError("Writing a stream in MiniFAT is not implemented yet") + sect = entry.isectStart + # number of sectors to write + nb_sectors = (size + (self.sectorsize-1)) // self.sectorsize + debug('nb_sectors = %d' % nb_sectors) + for i in range(nb_sectors): + # try: + # self.fp.seek(offset + self.sectorsize * sect) + # except: + # debug('sect=%d, seek=%d' % + # (sect, offset+self.sectorsize*sect)) + # raise IOError('OLE sector index out of range') + # extract one sector from data, the last one being smaller: + if i < (nb_sectors-1): + data_sector = data[i*self.sectorsize:(i+1)*self.sectorsize] + #TODO: comment this if it works + assert(len(data_sector) == self.sectorsize) + else: + data_sector = data[i*self.sectorsize:] + # TODO: comment this if it works + debug('write_stream: size=%d sectorsize=%d data_sector=%d size%%sectorsize=%d' + % (size, self.sectorsize, len(data_sector), size % self.sectorsize)) + assert(len(data_sector) % self.sectorsize == size % self.sectorsize) + self.write_sect(sect, data_sector) +# self.fp.write(data_sector) + # jump to next sector in the FAT: + try: + sect = self.fat[sect] + except IndexError: + # [PL] if pointer is out of the FAT an exception is raised + raise IOError('incorrect OLE FAT, sector index out of range') + # [PL] Last sector should be a "end of chain" marker: + if sect != ENDOFCHAIN: + raise IOError('incorrect last sector index in OLE stream') + + def get_type(self, filename): + """ + Test if given filename exists as a stream or a storage in the OLE + container, and return its type. + + :param filename: path of stream in storage tree. (see openstream for syntax) + :returns: False if object does not exist, its entry type (>0) otherwise: + + - STGTY_STREAM: a stream + - STGTY_STORAGE: a storage + - STGTY_ROOT: the root entry + """ + try: + sid = self._find(filename) + entry = self.direntries[sid] + return entry.entry_type + except: + return False + + def getmtime(self, filename): + """ + Return modification time of a stream/storage. + + :param filename: path of stream/storage in storage tree. (see openstream for + syntax) + :returns: None if modification time is null, a python datetime object + otherwise (UTC timezone) + + new in version 0.26 + """ + sid = self._find(filename) + entry = self.direntries[sid] + return entry.getmtime() + + def getctime(self, filename): + """ + Return creation time of a stream/storage. + + :param filename: path of stream/storage in storage tree. (see openstream for + syntax) + :returns: None if creation time is null, a python datetime object + otherwise (UTC timezone) + + new in version 0.26 + """ + sid = self._find(filename) + entry = self.direntries[sid] + return entry.getctime() + + def exists(self, filename): + """ + Test if given filename exists as a stream or a storage in the OLE + container. + Note: filename is case-insensitive. + + :param filename: path of stream in storage tree. (see openstream for syntax) + :returns: True if object exist, else False. + """ + try: + sid = self._find(filename) + return True + except: + return False + + def get_size(self, filename): + """ + Return size of a stream in the OLE container, in bytes. + + :param filename: path of stream in storage tree (see openstream for syntax) + :returns: size in bytes (long integer) + :exception IOError: if file not found + :exception TypeError: if this is not a stream. + """ + sid = self._find(filename) + entry = self.direntries[sid] + if entry.entry_type != STGTY_STREAM: + #TODO: Should it return zero instead of raising an exception ? + raise TypeError('object is not an OLE stream') + return entry.size + + def get_rootentry_name(self): + """ + Return root entry name. Should usually be 'Root Entry' or 'R' in most + implementations. + """ + return self.root.name + + def getproperties(self, filename, convert_time=False, no_conversion=None): + """ + Return properties described in substream. + + :param filename: path of stream in storage tree (see openstream for syntax) + :param convert_time: bool, if True timestamps will be converted to Python datetime + :param no_conversion: None or list of int, timestamps not to be converted + (for example total editing time is not a real timestamp) + + :returns: a dictionary of values indexed by id (integer) + """ + # REFERENCE: [MS-OLEPS] https://msdn.microsoft.com/en-us/library/dd942421.aspx + # make sure no_conversion is a list, just to simplify code below: + if no_conversion is None: + no_conversion = [] + # stream path as a string to report exceptions: + streampath = filename + if not isinstance(streampath, str): + streampath = '/'.join(streampath) + + fp = self.openstream(filename) + + data = {} + + try: + # header + s = fp.read(28) + clsid = _clsid(s[8:24]) + + # format id + s = fp.read(20) + fmtid = _clsid(s[:16]) + fp.seek(i32(s, 16)) + + # get section + s = b"****" + fp.read(i32(fp.read(4))-4) + # number of properties: + num_props = i32(s, 4) + except BaseException as exc: + # catch exception while parsing property header, and only raise + # a DEFECT_INCORRECT then return an empty dict, because this is not + # a fatal error when parsing the whole file + msg = 'Error while parsing properties header in stream %s: %s' % ( + repr(streampath), exc) + self.raise_defect(DEFECT_INCORRECT, msg, type(exc)) + return data + + for i in range(num_props): + try: + id = 0 # just in case of an exception + id = i32(s, 8+i*8) + offset = i32(s, 12+i*8) + type = i32(s, offset) + + debug('property id=%d: type=%d offset=%X' % (id, type, offset)) + + # test for common types first (should perhaps use + # a dictionary instead?) + + if type == VT_I2: # 16-bit signed integer + value = i16(s, offset+4) + if value >= 32768: + value = value - 65536 + elif type == VT_UI2: # 2-byte unsigned integer + value = i16(s, offset+4) + elif type in (VT_I4, VT_INT, VT_ERROR): + # VT_I4: 32-bit signed integer + # VT_ERROR: HRESULT, similar to 32-bit signed integer, + # see http://msdn.microsoft.com/en-us/library/cc230330.aspx + value = i32(s, offset+4) + elif type in (VT_UI4, VT_UINT): # 4-byte unsigned integer + value = i32(s, offset+4) # FIXME + elif type in (VT_BSTR, VT_LPSTR): + # CodePageString, see http://msdn.microsoft.com/en-us/library/dd942354.aspx + # size is a 32 bits integer, including the null terminator, and + # possibly trailing or embedded null chars + #TODO: if codepage is unicode, the string should be converted as such + count = i32(s, offset+4) + value = s[offset+8:offset+8+count-1] + # remove all null chars: + value = value.replace(b'\x00', b'') + elif type == VT_BLOB: + # binary large object (BLOB) + # see http://msdn.microsoft.com/en-us/library/dd942282.aspx + count = i32(s, offset+4) + value = s[offset+8:offset+8+count] + elif type == VT_LPWSTR: + # UnicodeString + # see http://msdn.microsoft.com/en-us/library/dd942313.aspx + # "the string should NOT contain embedded or additional trailing + # null characters." + count = i32(s, offset+4) + value = self._decode_utf16_str(s[offset+8:offset+8+count*2]) + elif type == VT_FILETIME: + value = long(i32(s, offset+4)) + (long(i32(s, offset+8)) << 32) + # FILETIME is a 64-bit int: "number of 100ns periods + # since Jan 1,1601". + if convert_time and id not in no_conversion: + debug('Converting property #%d to python datetime, value=%d=%fs' + % (id, value, float(value) / 10000000)) + # convert FILETIME to Python datetime.datetime + # inspired from http://code.activestate.com/recipes/511425-filetime-to-datetime/ + _FILETIME_null_date = datetime.datetime(1601, 1, 1, 0, 0, 0) + debug('timedelta days=%d' % (value//(10*1000000*3600*24))) + value = _FILETIME_null_date + datetime.timedelta(microseconds=value//10) + else: + # legacy code kept for backward compatibility: returns a + # number of seconds since Jan 1,1601 + value = value // 10000000 # seconds + elif type == VT_UI1: # 1-byte unsigned integer + value = i8(s[offset+4]) + elif type == VT_CLSID: + value = _clsid(s[offset+4:offset+20]) + elif type == VT_CF: + # PropertyIdentifier or ClipboardData?? + # see http://msdn.microsoft.com/en-us/library/dd941945.aspx + count = i32(s, offset+4) + value = s[offset+8:offset+8+count] + elif type == VT_BOOL: + # VARIANT_BOOL, 16 bits bool, 0x0000=Fals, 0xFFFF=True + # see http://msdn.microsoft.com/en-us/library/cc237864.aspx + value = bool(i16(s, offset+4)) + else: + value = None # everything else yields "None" + debug('property id=%d: type=%d not implemented in parser yet' % (id, type)) + + # missing: VT_EMPTY, VT_NULL, VT_R4, VT_R8, VT_CY, VT_DATE, + # VT_DECIMAL, VT_I1, VT_I8, VT_UI8, + # see http://msdn.microsoft.com/en-us/library/dd942033.aspx + + # FIXME: add support for VT_VECTOR + # VT_VECTOR is a 32 uint giving the number of items, followed by + # the items in sequence. The VT_VECTOR value is combined with the + # type of items, e.g. VT_VECTOR|VT_BSTR + # see http://msdn.microsoft.com/en-us/library/dd942011.aspx + + # print("%08x" % id, repr(value), end=" ") + # print("(%s)" % VT[i32(s, offset) & 0xFFF]) + + data[id] = value + except BaseException as exc: + # catch exception while parsing each property, and only raise + # a DEFECT_INCORRECT, because parsing can go on + msg = 'Error while parsing property id %d in stream %s: %s' % ( + id, repr(streampath), exc) + self.raise_defect(DEFECT_INCORRECT, msg, type(exc)) + + return data + + def get_metadata(self): + """ + Parse standard properties streams, return an OleMetadata object + containing all the available metadata. + (also stored in the metadata attribute of the OleFileIO object) + + new in version 0.25 + """ + self.metadata = OleMetadata() + self.metadata.parse_properties(self) + return self.metadata + +# +# -------------------------------------------------------------------- +# This script can be used to dump the directory of any OLE2 structured +# storage file. + +if __name__ == "__main__": + + # [PL] display quick usage info if launched from command-line + if len(sys.argv) <= 1: + print('olefile version %s %s - %s' % (__version__, __date__, __author__)) + print( +""" +Launched from the command line, this script parses OLE files and prints info. + +Usage: olefile.py [-d] [-c] [file2 ...] + +Options: +-d : debug mode (displays a lot of debug information, for developers only) +-c : check all streams (for debugging purposes) + +For more information, see http://www.decalage.info/olefile +""") + sys.exit() + + check_streams = False + for filename in sys.argv[1:]: + # try: + # OPTIONS: + if filename == '-d': + # option to switch debug mode on: + set_debug_mode(True) + continue + if filename == '-c': + # option to switch check streams mode on: + check_streams = True + continue + + ole = OleFileIO(filename)#, raise_defects=DEFECT_INCORRECT) + print("-" * 68) + print(filename) + print("-" * 68) + ole.dumpdirectory() + for streamname in ole.listdir(): + if streamname[-1][0] == "\005": + print(streamname, ": properties") + props = ole.getproperties(streamname, convert_time=True) + props = sorted(props.items()) + for k, v in props: + # [PL]: avoid to display too large or binary values: + if isinstance(v, (basestring, bytes)): + if len(v) > 50: + v = v[:50] + if isinstance(v, bytes): + # quick and dirty binary check: + for c in (1, 2, 3, 4, 5, 6, 7, 11, 12, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31): + if c in bytearray(v): + v = '(binary data)' + break + print(" ", k, v) + + if check_streams: + # Read all streams to check if there are errors: + print('\nChecking streams...') + for streamname in ole.listdir(): + # print name using repr() to convert binary chars to \xNN: + print('-', repr('/'.join(streamname)), '-', end=' ') + st_type = ole.get_type(streamname) + if st_type == STGTY_STREAM: + print('size %d' % ole.get_size(streamname)) + # just try to read stream in memory: + ole.openstream(streamname) + else: + print('NOT a stream : type=%d' % st_type) + print() + +# for streamname in ole.listdir(): +# # print name using repr() to convert binary chars to \xNN: +# print('-', repr('/'.join(streamname)),'-', end=' ') +# print(ole.getmtime(streamname)) +# print() + + print('Modification/Creation times of all directory entries:') + for entry in ole.direntries: + if entry is not None: + print('- %s: mtime=%s ctime=%s' % (entry.name, + entry.getmtime(), entry.getctime())) + print() + + # parse and display metadata: + meta = ole.get_metadata() + meta.dump() + print() + # [PL] Test a few new methods: + root = ole.get_rootentry_name() + print('Root entry name: "%s"' % root) + if ole.exists('worddocument'): + print("This is a Word document.") + print("type of stream 'WordDocument':", ole.get_type('worddocument')) + print("size :", ole.get_size('worddocument')) + if ole.exists('macros/vba'): + print("This document may contain VBA macros.") + + # print parsing issues: + print('\nNon-fatal issues raised during parsing:') + if ole.parsing_issues: + for exctype, msg in ole.parsing_issues: + print('- %s: %s' % (exctype.__name__, msg)) + else: + print('None') +## except IOError as v: +## print("***", "cannot read", file, "-", v) + +# this code was developed while listening to The Wedding Present "Sea Monsters" diff --git a/server/www/packages/packages-darwin/x64/PIL/PSDraw.py b/server/www/packages/packages-darwin/x64/PIL/PSDraw.py new file mode 100644 index 0000000..d4e7b18 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/PSDraw.py @@ -0,0 +1,235 @@ +# +# The Python Imaging Library +# $Id$ +# +# simple postscript graphics interface +# +# History: +# 1996-04-20 fl Created +# 1999-01-10 fl Added gsave/grestore to image method +# 2005-05-04 fl Fixed floating point issue in image (from Eric Etheridge) +# +# Copyright (c) 1997-2005 by Secret Labs AB. All rights reserved. +# Copyright (c) 1996 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +from PIL import EpsImagePlugin +import sys + +## +# Simple Postscript graphics interface. + + +class PSDraw(object): + """ + Sets up printing to the given file. If **file** is omitted, + :py:attr:`sys.stdout` is assumed. + """ + + def __init__(self, fp=None): + if not fp: + fp = sys.stdout + self.fp = fp + + def _fp_write(self, to_write): + if bytes is str or self.fp == sys.stdout: + self.fp.write(to_write) + else: + self.fp.write(bytes(to_write, 'UTF-8')) + + def begin_document(self, id=None): + """Set up printing of a document. (Write Postscript DSC header.)""" + # FIXME: incomplete + self._fp_write("%!PS-Adobe-3.0\n" + "save\n" + "/showpage { } def\n" + "%%EndComments\n" + "%%BeginDocument\n") + # self._fp_write(ERROR_PS) # debugging! + self._fp_write(EDROFF_PS) + self._fp_write(VDI_PS) + self._fp_write("%%EndProlog\n") + self.isofont = {} + + def end_document(self): + """Ends printing. (Write Postscript DSC footer.)""" + self._fp_write("%%EndDocument\n" + "restore showpage\n" + "%%End\n") + if hasattr(self.fp, "flush"): + self.fp.flush() + + def setfont(self, font, size): + """ + Selects which font to use. + + :param font: A Postscript font name + :param size: Size in points. + """ + if font not in self.isofont: + # reencode font + self._fp_write("/PSDraw-%s ISOLatin1Encoding /%s E\n" % + (font, font)) + self.isofont[font] = 1 + # rough + self._fp_write("/F0 %d /PSDraw-%s F\n" % (size, font)) + + def line(self, xy0, xy1): + """ + Draws a line between the two points. Coordinates are given in + Postscript point coordinates (72 points per inch, (0, 0) is the lower + left corner of the page). + """ + xy = xy0 + xy1 + self._fp_write("%d %d %d %d Vl\n" % xy) + + def rectangle(self, box): + """ + Draws a rectangle. + + :param box: A 4-tuple of integers whose order and function is currently + undocumented. + + Hint: the tuple is passed into this format string: + + .. code-block:: python + + %d %d M %d %d 0 Vr\n + """ + self._fp_write("%d %d M %d %d 0 Vr\n" % box) + + def text(self, xy, text): + """ + Draws text at the given position. You must use + :py:meth:`~PIL.PSDraw.PSDraw.setfont` before calling this method. + """ + text = "\\(".join(text.split("(")) + text = "\\)".join(text.split(")")) + xy = xy + (text,) + self._fp_write("%d %d M (%s) S\n" % xy) + + def image(self, box, im, dpi=None): + """Draw a PIL image, centered in the given box.""" + # default resolution depends on mode + if not dpi: + if im.mode == "1": + dpi = 200 # fax + else: + dpi = 100 # greyscale + # image size (on paper) + x = float(im.size[0] * 72) / dpi + y = float(im.size[1] * 72) / dpi + # max allowed size + xmax = float(box[2] - box[0]) + ymax = float(box[3] - box[1]) + if x > xmax: + y = y * xmax / x + x = xmax + if y > ymax: + x = x * ymax / y + y = ymax + dx = (xmax - x) / 2 + box[0] + dy = (ymax - y) / 2 + box[1] + self._fp_write("gsave\n%f %f translate\n" % (dx, dy)) + if (x, y) != im.size: + # EpsImagePlugin._save prints the image at (0,0,xsize,ysize) + sx = x / im.size[0] + sy = y / im.size[1] + self._fp_write("%f %f scale\n" % (sx, sy)) + EpsImagePlugin._save(im, self.fp, None, 0) + self._fp_write("\ngrestore\n") + +# -------------------------------------------------------------------- +# Postscript driver + +# +# EDROFF.PS -- Postscript driver for Edroff 2 +# +# History: +# 94-01-25 fl: created (edroff 2.04) +# +# Copyright (c) Fredrik Lundh 1994. +# + +EDROFF_PS = """\ +/S { show } bind def +/P { moveto show } bind def +/M { moveto } bind def +/X { 0 rmoveto } bind def +/Y { 0 exch rmoveto } bind def +/E { findfont + dup maxlength dict begin + { + 1 index /FID ne { def } { pop pop } ifelse + } forall + /Encoding exch def + dup /FontName exch def + currentdict end definefont pop +} bind def +/F { findfont exch scalefont dup setfont + [ exch /setfont cvx ] cvx bind def +} bind def +""" + +# +# VDI.PS -- Postscript driver for VDI meta commands +# +# History: +# 94-01-25 fl: created (edroff 2.04) +# +# Copyright (c) Fredrik Lundh 1994. +# + +VDI_PS = """\ +/Vm { moveto } bind def +/Va { newpath arcn stroke } bind def +/Vl { moveto lineto stroke } bind def +/Vc { newpath 0 360 arc closepath } bind def +/Vr { exch dup 0 rlineto + exch dup neg 0 exch rlineto + exch neg 0 rlineto + 0 exch rlineto + 100 div setgray fill 0 setgray } bind def +/Tm matrix def +/Ve { Tm currentmatrix pop + translate scale newpath 0 0 .5 0 360 arc closepath + Tm setmatrix +} bind def +/Vf { currentgray exch setgray fill setgray } bind def +""" + +# +# ERROR.PS -- Error handler +# +# History: +# 89-11-21 fl: created (pslist 1.10) +# + +ERROR_PS = """\ +/landscape false def +/errorBUF 200 string def +/errorNL { currentpoint 10 sub exch pop 72 exch moveto } def +errordict begin /handleerror { + initmatrix /Courier findfont 10 scalefont setfont + newpath 72 720 moveto $error begin /newerror false def + (PostScript Error) show errorNL errorNL + (Error: ) show + /errorname load errorBUF cvs show errorNL errorNL + (Command: ) show + /command load dup type /stringtype ne { errorBUF cvs } if show + errorNL errorNL + (VMstatus: ) show + vmstatus errorBUF cvs show ( bytes available, ) show + errorBUF cvs show ( bytes used at level ) show + errorBUF cvs show errorNL errorNL + (Operand stargck: ) show errorNL /ostargck load { + dup type /stringtype ne { errorBUF cvs } if 72 0 rmoveto show errorNL + } forall errorNL + (Execution stargck: ) show errorNL /estargck load { + dup type /stringtype ne { errorBUF cvs } if 72 0 rmoveto show errorNL + } forall + end showpage +} def end +""" diff --git a/server/www/packages/packages-darwin/x64/PIL/PaletteFile.py b/server/www/packages/packages-darwin/x64/PIL/PaletteFile.py new file mode 100644 index 0000000..ef50fee --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/PaletteFile.py @@ -0,0 +1,55 @@ +# +# Python Imaging Library +# $Id$ +# +# stuff to read simple, teragon-style palette files +# +# History: +# 97-08-23 fl Created +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1997. +# +# See the README file for information on usage and redistribution. +# + +from PIL._binary import o8 + + +## +# File handler for Teragon-style palette files. + +class PaletteFile(object): + + rawmode = "RGB" + + def __init__(self, fp): + + self.palette = [(i, i, i) for i in range(256)] + + while True: + + s = fp.readline() + + if not s: + break + if s[0:1] == b"#": + continue + if len(s) > 100: + raise SyntaxError("bad palette file") + + v = [int(x) for x in s.split()] + try: + [i, r, g, b] = v + except ValueError: + [i, r] = v + g = b = r + + if 0 <= i <= 255: + self.palette[i] = o8(r) + o8(g) + o8(b) + + self.palette = b"".join(self.palette) + + def getpalette(self): + + return self.palette, self.rawmode diff --git a/server/www/packages/packages-darwin/x64/PIL/PalmImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/PalmImagePlugin.py new file mode 100644 index 0000000..4f415ff --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/PalmImagePlugin.py @@ -0,0 +1,241 @@ +# +# The Python Imaging Library. +# $Id$ +# + +## +# Image plugin for Palm pixmap images (output only). +## + +from PIL import Image, ImageFile, _binary + +__version__ = "1.0" + +_Palm8BitColormapValues = ( + (255, 255, 255), (255, 204, 255), (255, 153, 255), (255, 102, 255), + (255, 51, 255), (255, 0, 255), (255, 255, 204), (255, 204, 204), + (255, 153, 204), (255, 102, 204), (255, 51, 204), (255, 0, 204), + (255, 255, 153), (255, 204, 153), (255, 153, 153), (255, 102, 153), + (255, 51, 153), (255, 0, 153), (204, 255, 255), (204, 204, 255), + (204, 153, 255), (204, 102, 255), (204, 51, 255), (204, 0, 255), + (204, 255, 204), (204, 204, 204), (204, 153, 204), (204, 102, 204), + (204, 51, 204), (204, 0, 204), (204, 255, 153), (204, 204, 153), + (204, 153, 153), (204, 102, 153), (204, 51, 153), (204, 0, 153), + (153, 255, 255), (153, 204, 255), (153, 153, 255), (153, 102, 255), + (153, 51, 255), (153, 0, 255), (153, 255, 204), (153, 204, 204), + (153, 153, 204), (153, 102, 204), (153, 51, 204), (153, 0, 204), + (153, 255, 153), (153, 204, 153), (153, 153, 153), (153, 102, 153), + (153, 51, 153), (153, 0, 153), (102, 255, 255), (102, 204, 255), + (102, 153, 255), (102, 102, 255), (102, 51, 255), (102, 0, 255), + (102, 255, 204), (102, 204, 204), (102, 153, 204), (102, 102, 204), + (102, 51, 204), (102, 0, 204), (102, 255, 153), (102, 204, 153), + (102, 153, 153), (102, 102, 153), (102, 51, 153), (102, 0, 153), + (51, 255, 255), (51, 204, 255), (51, 153, 255), (51, 102, 255), + (51, 51, 255), (51, 0, 255), (51, 255, 204), (51, 204, 204), + (51, 153, 204), (51, 102, 204), (51, 51, 204), (51, 0, 204), + (51, 255, 153), (51, 204, 153), (51, 153, 153), (51, 102, 153), + (51, 51, 153), (51, 0, 153), (0, 255, 255), (0, 204, 255), + (0, 153, 255), (0, 102, 255), (0, 51, 255), (0, 0, 255), + (0, 255, 204), (0, 204, 204), (0, 153, 204), (0, 102, 204), + (0, 51, 204), (0, 0, 204), (0, 255, 153), (0, 204, 153), + (0, 153, 153), (0, 102, 153), (0, 51, 153), (0, 0, 153), + (255, 255, 102), (255, 204, 102), (255, 153, 102), (255, 102, 102), + (255, 51, 102), (255, 0, 102), (255, 255, 51), (255, 204, 51), + (255, 153, 51), (255, 102, 51), (255, 51, 51), (255, 0, 51), + (255, 255, 0), (255, 204, 0), (255, 153, 0), (255, 102, 0), + (255, 51, 0), (255, 0, 0), (204, 255, 102), (204, 204, 102), + (204, 153, 102), (204, 102, 102), (204, 51, 102), (204, 0, 102), + (204, 255, 51), (204, 204, 51), (204, 153, 51), (204, 102, 51), + (204, 51, 51), (204, 0, 51), (204, 255, 0), (204, 204, 0), + (204, 153, 0), (204, 102, 0), (204, 51, 0), (204, 0, 0), + (153, 255, 102), (153, 204, 102), (153, 153, 102), (153, 102, 102), + (153, 51, 102), (153, 0, 102), (153, 255, 51), (153, 204, 51), + (153, 153, 51), (153, 102, 51), (153, 51, 51), (153, 0, 51), + (153, 255, 0), (153, 204, 0), (153, 153, 0), (153, 102, 0), + (153, 51, 0), (153, 0, 0), (102, 255, 102), (102, 204, 102), + (102, 153, 102), (102, 102, 102), (102, 51, 102), (102, 0, 102), + (102, 255, 51), (102, 204, 51), (102, 153, 51), (102, 102, 51), + (102, 51, 51), (102, 0, 51), (102, 255, 0), (102, 204, 0), + (102, 153, 0), (102, 102, 0), (102, 51, 0), (102, 0, 0), + (51, 255, 102), (51, 204, 102), (51, 153, 102), (51, 102, 102), + (51, 51, 102), (51, 0, 102), (51, 255, 51), (51, 204, 51), + (51, 153, 51), (51, 102, 51), (51, 51, 51), (51, 0, 51), + (51, 255, 0), (51, 204, 0), (51, 153, 0), (51, 102, 0), + (51, 51, 0), (51, 0, 0), (0, 255, 102), (0, 204, 102), + (0, 153, 102), (0, 102, 102), (0, 51, 102), (0, 0, 102), + (0, 255, 51), (0, 204, 51), (0, 153, 51), (0, 102, 51), + (0, 51, 51), (0, 0, 51), (0, 255, 0), (0, 204, 0), + (0, 153, 0), (0, 102, 0), (0, 51, 0), (17, 17, 17), + (34, 34, 34), (68, 68, 68), (85, 85, 85), (119, 119, 119), + (136, 136, 136), (170, 170, 170), (187, 187, 187), (221, 221, 221), + (238, 238, 238), (192, 192, 192), (128, 0, 0), (128, 0, 128), + (0, 128, 0), (0, 128, 128), (0, 0, 0), (0, 0, 0), + (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), + (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), + (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), + (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), + (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), + (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)) + + +# so build a prototype image to be used for palette resampling +def build_prototype_image(): + image = Image.new("L", (1, len(_Palm8BitColormapValues),)) + image.putdata(list(range(len(_Palm8BitColormapValues)))) + palettedata = () + for i in range(len(_Palm8BitColormapValues)): + palettedata = palettedata + _Palm8BitColormapValues[i] + for i in range(256 - len(_Palm8BitColormapValues)): + palettedata = palettedata + (0, 0, 0) + image.putpalette(palettedata) + return image + +Palm8BitColormapImage = build_prototype_image() + +# OK, we now have in Palm8BitColormapImage, +# a "P"-mode image with the right palette +# +# -------------------------------------------------------------------- + +_FLAGS = { + "custom-colormap": 0x4000, + "is-compressed": 0x8000, + "has-transparent": 0x2000, + } + +_COMPRESSION_TYPES = { + "none": 0xFF, + "rle": 0x01, + "scanline": 0x00, + } + +o8 = _binary.o8 +o16b = _binary.o16be + + +# +# -------------------------------------------------------------------- + +## +# (Internal) Image save plugin for the Palm format. + +def _save(im, fp, filename, check=0): + + if im.mode == "P": + + # we assume this is a color Palm image with the standard colormap, + # unless the "info" dict has a "custom-colormap" field + + rawmode = "P" + bpp = 8 + version = 1 + + elif (im.mode == "L" and + "bpp" in im.encoderinfo and + im.encoderinfo["bpp"] in (1, 2, 4)): + + # this is 8-bit grayscale, so we shift it to get the high-order bits, + # and invert it because + # Palm does greyscale from white (0) to black (1) + bpp = im.encoderinfo["bpp"] + im = im.point( + lambda x, shift=8-bpp, maxval=(1 << bpp)-1: maxval - (x >> shift)) + # we ignore the palette here + im.mode = "P" + rawmode = "P;" + str(bpp) + version = 1 + + elif im.mode == "L" and "bpp" in im.info and im.info["bpp"] in (1, 2, 4): + + # here we assume that even though the inherent mode is 8-bit grayscale, + # only the lower bpp bits are significant. + # We invert them to match the Palm. + bpp = im.info["bpp"] + im = im.point(lambda x, maxval=(1 << bpp)-1: maxval - (x & maxval)) + # we ignore the palette here + im.mode = "P" + rawmode = "P;" + str(bpp) + version = 1 + + elif im.mode == "1": + + # monochrome -- write it inverted, as is the Palm standard + rawmode = "1;I" + bpp = 1 + version = 0 + + else: + + raise IOError("cannot write mode %s as Palm" % im.mode) + + if check: + return check + + # + # make sure image data is available + im.load() + + # write header + + cols = im.size[0] + rows = im.size[1] + + rowbytes = int((cols + (16//bpp - 1)) / (16 // bpp)) * 2 + transparent_index = 0 + compression_type = _COMPRESSION_TYPES["none"] + + flags = 0 + if im.mode == "P" and "custom-colormap" in im.info: + flags = flags & _FLAGS["custom-colormap"] + colormapsize = 4 * 256 + 2 + colormapmode = im.palette.mode + colormap = im.getdata().getpalette() + else: + colormapsize = 0 + + if "offset" in im.info: + offset = (rowbytes * rows + 16 + 3 + colormapsize) // 4 + else: + offset = 0 + + fp.write(o16b(cols) + o16b(rows) + o16b(rowbytes) + o16b(flags)) + fp.write(o8(bpp)) + fp.write(o8(version)) + fp.write(o16b(offset)) + fp.write(o8(transparent_index)) + fp.write(o8(compression_type)) + fp.write(o16b(0)) # reserved by Palm + + # now write colormap if necessary + + if colormapsize > 0: + fp.write(o16b(256)) + for i in range(256): + fp.write(o8(i)) + if colormapmode == 'RGB': + fp.write( + o8(colormap[3 * i]) + + o8(colormap[3 * i + 1]) + + o8(colormap[3 * i + 2])) + elif colormapmode == 'RGBA': + fp.write( + o8(colormap[4 * i]) + + o8(colormap[4 * i + 1]) + + o8(colormap[4 * i + 2])) + + # now convert data to raw form + ImageFile._save( + im, fp, [("raw", (0, 0)+im.size, 0, (rawmode, rowbytes, 1))]) + + if hasattr(fp, "flush"): + fp.flush() + + +# +# -------------------------------------------------------------------- + +Image.register_save("Palm", _save) + +Image.register_extension("Palm", ".palm") + +Image.register_mime("Palm", "image/palm") diff --git a/server/www/packages/packages-darwin/x64/PIL/PcdImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/PcdImagePlugin.py new file mode 100644 index 0000000..b53635a --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/PcdImagePlugin.py @@ -0,0 +1,59 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PCD file handling +# +# History: +# 96-05-10 fl Created +# 96-05-27 fl Added draft mode (128x192, 256x384) +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# + + +from PIL import Image, ImageFile, _binary + +__version__ = "0.1" + +i8 = _binary.i8 + + +## +# Image plugin for PhotoCD images. This plugin only reads the 768x512 +# image from the file; higher resolutions are encoded in a proprietary +# encoding. + +class PcdImageFile(ImageFile.ImageFile): + + format = "PCD" + format_description = "Kodak PhotoCD" + + def _open(self): + + # rough + self.fp.seek(2048) + s = self.fp.read(2048) + + if s[:4] != b"PCD_": + raise SyntaxError("not a PCD file") + + orientation = i8(s[1538]) & 3 + if orientation == 1: + self.tile_post_rotate = 90 # hack + elif orientation == 3: + self.tile_post_rotate = -90 + + self.mode = "RGB" + self.size = 768, 512 # FIXME: not correct for rotated images! + self.tile = [("pcd", (0, 0)+self.size, 96*2048, None)] + +# +# registry + +Image.register_open(PcdImageFile.format, PcdImageFile) + +Image.register_extension(PcdImageFile.format, ".pcd") diff --git a/server/www/packages/packages-darwin/x64/PIL/PcfFontFile.py b/server/www/packages/packages-darwin/x64/PIL/PcfFontFile.py new file mode 100644 index 0000000..c200690 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/PcfFontFile.py @@ -0,0 +1,252 @@ +# +# THIS IS WORK IN PROGRESS +# +# The Python Imaging Library +# $Id$ +# +# portable compiled font file parser +# +# history: +# 1997-08-19 fl created +# 2003-09-13 fl fixed loading of unicode fonts +# +# Copyright (c) 1997-2003 by Secret Labs AB. +# Copyright (c) 1997-2003 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image +from PIL import FontFile +from PIL import _binary + +# -------------------------------------------------------------------- +# declarations + +PCF_MAGIC = 0x70636601 # "\x01fcp" + +PCF_PROPERTIES = (1 << 0) +PCF_ACCELERATORS = (1 << 1) +PCF_METRICS = (1 << 2) +PCF_BITMAPS = (1 << 3) +PCF_INK_METRICS = (1 << 4) +PCF_BDF_ENCODINGS = (1 << 5) +PCF_SWIDTHS = (1 << 6) +PCF_GLYPH_NAMES = (1 << 7) +PCF_BDF_ACCELERATORS = (1 << 8) + +BYTES_PER_ROW = [ + lambda bits: ((bits+7) >> 3), + lambda bits: ((bits+15) >> 3) & ~1, + lambda bits: ((bits+31) >> 3) & ~3, + lambda bits: ((bits+63) >> 3) & ~7, +] + +i8 = _binary.i8 +l16 = _binary.i16le +l32 = _binary.i32le +b16 = _binary.i16be +b32 = _binary.i32be + + +def sz(s, o): + return s[o:s.index(b"\0", o)] + + +## +# Font file plugin for the X11 PCF format. + +class PcfFontFile(FontFile.FontFile): + + name = "name" + + def __init__(self, fp): + + magic = l32(fp.read(4)) + if magic != PCF_MAGIC: + raise SyntaxError("not a PCF file") + + FontFile.FontFile.__init__(self) + + count = l32(fp.read(4)) + self.toc = {} + for i in range(count): + type = l32(fp.read(4)) + self.toc[type] = l32(fp.read(4)), l32(fp.read(4)), l32(fp.read(4)) + + self.fp = fp + + self.info = self._load_properties() + + metrics = self._load_metrics() + bitmaps = self._load_bitmaps(metrics) + encoding = self._load_encoding() + + # + # create glyph structure + + for ch in range(256): + ix = encoding[ch] + if ix is not None: + x, y, l, r, w, a, d, f = metrics[ix] + glyph = (w, 0), (l, d-y, x+l, d), (0, 0, x, y), bitmaps[ix] + self.glyph[ch] = glyph + + def _getformat(self, tag): + + format, size, offset = self.toc[tag] + + fp = self.fp + fp.seek(offset) + + format = l32(fp.read(4)) + + if format & 4: + i16, i32 = b16, b32 + else: + i16, i32 = l16, l32 + + return fp, format, i16, i32 + + def _load_properties(self): + + # + # font properties + + properties = {} + + fp, format, i16, i32 = self._getformat(PCF_PROPERTIES) + + nprops = i32(fp.read(4)) + + # read property description + p = [] + for i in range(nprops): + p.append((i32(fp.read(4)), i8(fp.read(1)), i32(fp.read(4)))) + if nprops & 3: + fp.seek(4 - (nprops & 3), 1) # pad + + data = fp.read(i32(fp.read(4))) + + for k, s, v in p: + k = sz(data, k) + if s: + v = sz(data, v) + properties[k] = v + + return properties + + def _load_metrics(self): + + # + # font metrics + + metrics = [] + + fp, format, i16, i32 = self._getformat(PCF_METRICS) + + append = metrics.append + + if (format & 0xff00) == 0x100: + + # "compressed" metrics + for i in range(i16(fp.read(2))): + left = i8(fp.read(1)) - 128 + right = i8(fp.read(1)) - 128 + width = i8(fp.read(1)) - 128 + ascent = i8(fp.read(1)) - 128 + descent = i8(fp.read(1)) - 128 + xsize = right - left + ysize = ascent + descent + append( + (xsize, ysize, left, right, width, + ascent, descent, 0) + ) + + else: + + # "jumbo" metrics + for i in range(i32(fp.read(4))): + left = i16(fp.read(2)) + right = i16(fp.read(2)) + width = i16(fp.read(2)) + ascent = i16(fp.read(2)) + descent = i16(fp.read(2)) + attributes = i16(fp.read(2)) + xsize = right - left + ysize = ascent + descent + append( + (xsize, ysize, left, right, width, + ascent, descent, attributes) + ) + + return metrics + + def _load_bitmaps(self, metrics): + + # + # bitmap data + + bitmaps = [] + + fp, format, i16, i32 = self._getformat(PCF_BITMAPS) + + nbitmaps = i32(fp.read(4)) + + if nbitmaps != len(metrics): + raise IOError("Wrong number of bitmaps") + + offsets = [] + for i in range(nbitmaps): + offsets.append(i32(fp.read(4))) + + bitmapSizes = [] + for i in range(4): + bitmapSizes.append(i32(fp.read(4))) + + # byteorder = format & 4 # non-zero => MSB + bitorder = format & 8 # non-zero => MSB + padindex = format & 3 + + bitmapsize = bitmapSizes[padindex] + offsets.append(bitmapsize) + + data = fp.read(bitmapsize) + + pad = BYTES_PER_ROW[padindex] + mode = "1;R" + if bitorder: + mode = "1" + + for i in range(nbitmaps): + x, y, l, r, w, a, d, f = metrics[i] + b, e = offsets[i], offsets[i+1] + bitmaps.append( + Image.frombytes("1", (x, y), data[b:e], "raw", mode, pad(x)) + ) + + return bitmaps + + def _load_encoding(self): + + # map character code to bitmap index + encoding = [None] * 256 + + fp, format, i16, i32 = self._getformat(PCF_BDF_ENCODINGS) + + firstCol, lastCol = i16(fp.read(2)), i16(fp.read(2)) + firstRow, lastRow = i16(fp.read(2)), i16(fp.read(2)) + + default = i16(fp.read(2)) + + nencoding = (lastCol - firstCol + 1) * (lastRow - firstRow + 1) + + for i in range(nencoding): + encodingOffset = i16(fp.read(2)) + if encodingOffset != 0xFFFF: + try: + encoding[i+firstCol] = encodingOffset + except IndexError: + break # only load ISO-8859-1 glyphs + + return encoding diff --git a/server/www/packages/packages-darwin/x64/PIL/PcxImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/PcxImagePlugin.py new file mode 100644 index 0000000..9440d53 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/PcxImagePlugin.py @@ -0,0 +1,187 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PCX file handling +# +# This format was originally used by ZSoft's popular PaintBrush +# program for the IBM PC. It is also supported by many MS-DOS and +# Windows applications, including the Windows PaintBrush program in +# Windows 3. +# +# history: +# 1995-09-01 fl Created +# 1996-05-20 fl Fixed RGB support +# 1997-01-03 fl Fixed 2-bit and 4-bit support +# 1999-02-03 fl Fixed 8-bit support (broken in 1.0b1) +# 1999-02-07 fl Added write support +# 2002-06-09 fl Made 2-bit and 4-bit support a bit more robust +# 2002-07-30 fl Seek from to current position, not beginning of file +# 2003-06-03 fl Extract DPI settings (info["dpi"]) +# +# Copyright (c) 1997-2003 by Secret Labs AB. +# Copyright (c) 1995-2003 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +from __future__ import print_function + +import logging +from PIL import Image, ImageFile, ImagePalette, _binary + +logger = logging.getLogger(__name__) + +i8 = _binary.i8 +i16 = _binary.i16le +o8 = _binary.o8 + +__version__ = "0.6" + + +def _accept(prefix): + return i8(prefix[0]) == 10 and i8(prefix[1]) in [0, 2, 3, 5] + + +## +# Image plugin for Paintbrush images. + +class PcxImageFile(ImageFile.ImageFile): + + format = "PCX" + format_description = "Paintbrush" + + def _open(self): + + # header + s = self.fp.read(128) + if not _accept(s): + raise SyntaxError("not a PCX file") + + # image + bbox = i16(s, 4), i16(s, 6), i16(s, 8)+1, i16(s, 10)+1 + if bbox[2] <= bbox[0] or bbox[3] <= bbox[1]: + raise SyntaxError("bad PCX image size") + logger.debug("BBox: %s %s %s %s", *bbox) + + # format + version = i8(s[1]) + bits = i8(s[3]) + planes = i8(s[65]) + stride = i16(s, 66) + logger.debug("PCX version %s, bits %s, planes %s, stride %s", + version, bits, planes, stride) + + self.info["dpi"] = i16(s, 12), i16(s, 14) + + if bits == 1 and planes == 1: + mode = rawmode = "1" + + elif bits == 1 and planes in (2, 4): + mode = "P" + rawmode = "P;%dL" % planes + self.palette = ImagePalette.raw("RGB", s[16:64]) + + elif version == 5 and bits == 8 and planes == 1: + mode = rawmode = "L" + # FIXME: hey, this doesn't work with the incremental loader !!! + self.fp.seek(-769, 2) + s = self.fp.read(769) + if len(s) == 769 and i8(s[0]) == 12: + # check if the palette is linear greyscale + for i in range(256): + if s[i*3+1:i*3+4] != o8(i)*3: + mode = rawmode = "P" + break + if mode == "P": + self.palette = ImagePalette.raw("RGB", s[1:]) + self.fp.seek(128) + + elif version == 5 and bits == 8 and planes == 3: + mode = "RGB" + rawmode = "RGB;L" + + else: + raise IOError("unknown PCX mode") + + self.mode = mode + self.size = bbox[2]-bbox[0], bbox[3]-bbox[1] + + bbox = (0, 0) + self.size + logger.debug("size: %sx%s", *self.size) + + self.tile = [("pcx", bbox, self.fp.tell(), (rawmode, planes * stride))] + +# -------------------------------------------------------------------- +# save PCX files + +SAVE = { + # mode: (version, bits, planes, raw mode) + "1": (2, 1, 1, "1"), + "L": (5, 8, 1, "L"), + "P": (5, 8, 1, "P"), + "RGB": (5, 8, 3, "RGB;L"), +} + +o16 = _binary.o16le + + +def _save(im, fp, filename, check=0): + + try: + version, bits, planes, rawmode = SAVE[im.mode] + except KeyError: + raise ValueError("Cannot save %s images as PCX" % im.mode) + + if check: + return check + + # bytes per plane + stride = (im.size[0] * bits + 7) // 8 + # stride should be even + stride += stride % 2 + # Stride needs to be kept in sync with the PcxEncode.c version. + # Ideally it should be passed in in the state, but the bytes value + # gets overwritten. + + logger.debug("PcxImagePlugin._save: xwidth: %d, bits: %d, stride: %d", + im.size[0], bits, stride) + + # under windows, we could determine the current screen size with + # "Image.core.display_mode()[1]", but I think that's overkill... + + screen = im.size + + dpi = 100, 100 + + # PCX header + fp.write( + o8(10) + o8(version) + o8(1) + o8(bits) + o16(0) + + o16(0) + o16(im.size[0]-1) + o16(im.size[1]-1) + o16(dpi[0]) + + o16(dpi[1]) + b"\0"*24 + b"\xFF"*24 + b"\0" + o8(planes) + + o16(stride) + o16(1) + o16(screen[0]) + o16(screen[1]) + + b"\0"*54 + ) + + assert fp.tell() == 128 + + ImageFile._save(im, fp, [("pcx", (0, 0)+im.size, 0, + (rawmode, bits*planes))]) + + if im.mode == "P": + # colour palette + fp.write(o8(12)) + fp.write(im.im.getpalette("RGB", "RGB")) # 768 bytes + elif im.mode == "L": + # greyscale palette + fp.write(o8(12)) + for i in range(256): + fp.write(o8(i)*3) + +# -------------------------------------------------------------------- +# registry + +Image.register_open(PcxImageFile.format, PcxImageFile, _accept) +Image.register_save(PcxImageFile.format, _save) + +Image.register_extension(PcxImageFile.format, ".pcx") diff --git a/server/www/packages/packages-darwin/x64/PIL/PdfImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/PdfImagePlugin.py new file mode 100644 index 0000000..7decf0e --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/PdfImagePlugin.py @@ -0,0 +1,258 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PDF (Acrobat) file handling +# +# History: +# 1996-07-16 fl Created +# 1997-01-18 fl Fixed header +# 2004-02-21 fl Fixes for 1/L/CMYK images, etc. +# 2004-02-24 fl Fixes for 1 and P images. +# +# Copyright (c) 1997-2004 by Secret Labs AB. All rights reserved. +# Copyright (c) 1996-1997 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +## +# Image plugin for PDF images (output only). +## + +from PIL import Image, ImageFile +from PIL._binary import i8 +import io + +__version__ = "0.4" + + +# +# -------------------------------------------------------------------- + +# object ids: +# 1. catalogue +# 2. pages +# 3. image +# 4. page +# 5. page contents + +def _obj(fp, obj, **dict): + fp.write("%d 0 obj\n" % obj) + if dict: + fp.write("<<\n") + for k, v in dict.items(): + if v is not None: + fp.write("/%s %s\n" % (k, v)) + fp.write(">>\n") + + +def _endobj(fp): + fp.write("endobj\n") + + +def _save_all(im, fp, filename): + _save(im, fp, filename, save_all=True) + + +## +# (Internal) Image save plugin for the PDF format. + +def _save(im, fp, filename, save_all=False): + resolution = im.encoderinfo.get("resolution", 72.0) + + # + # make sure image data is available + im.load() + + xref = [0] + + class TextWriter(object): + def __init__(self, fp): + self.fp = fp + + def __getattr__(self, name): + return getattr(self.fp, name) + + def write(self, value): + self.fp.write(value.encode('latin-1')) + + fp = TextWriter(fp) + + fp.write("%PDF-1.2\n") + fp.write("% created by PIL PDF driver " + __version__ + "\n") + + # FIXME: Should replace ASCIIHexDecode with RunLengthDecode (packbits) + # or LZWDecode (tiff/lzw compression). Note that PDF 1.2 also supports + # Flatedecode (zip compression). + + bits = 8 + params = None + + if im.mode == "1": + filter = "/ASCIIHexDecode" + colorspace = "/DeviceGray" + procset = "/ImageB" # grayscale + bits = 1 + elif im.mode == "L": + filter = "/DCTDecode" + # params = "<< /Predictor 15 /Columns %d >>" % (width-2) + colorspace = "/DeviceGray" + procset = "/ImageB" # grayscale + elif im.mode == "P": + filter = "/ASCIIHexDecode" + colorspace = "[ /Indexed /DeviceRGB 255 <" + palette = im.im.getpalette("RGB") + for i in range(256): + r = i8(palette[i*3]) + g = i8(palette[i*3+1]) + b = i8(palette[i*3+2]) + colorspace += "%02x%02x%02x " % (r, g, b) + colorspace += "> ]" + procset = "/ImageI" # indexed color + elif im.mode == "RGB": + filter = "/DCTDecode" + colorspace = "/DeviceRGB" + procset = "/ImageC" # color images + elif im.mode == "CMYK": + filter = "/DCTDecode" + colorspace = "/DeviceCMYK" + procset = "/ImageC" # color images + else: + raise ValueError("cannot save mode %s" % im.mode) + + # + # catalogue + + xref.append(fp.tell()) + _obj( + fp, 1, + Type="/Catalog", + Pages="2 0 R") + _endobj(fp) + + # + # pages + numberOfPages = 1 + if save_all: + try: + numberOfPages = im.n_frames + except AttributeError: + # Image format does not have n_frames. It is a single frame image + pass + pages = [str(pageNumber*3+4)+" 0 R" + for pageNumber in range(0, numberOfPages)] + + xref.append(fp.tell()) + _obj( + fp, 2, + Type="/Pages", + Count=len(pages), + Kids="["+"\n".join(pages)+"]") + _endobj(fp) + + for pageNumber in range(0, numberOfPages): + im.seek(pageNumber) + + # + # image + + op = io.BytesIO() + + if filter == "/ASCIIHexDecode": + if bits == 1: + # FIXME: the hex encoder doesn't support packed 1-bit + # images; do things the hard way... + data = im.tobytes("raw", "1") + im = Image.new("L", (len(data), 1), None) + im.putdata(data) + ImageFile._save(im, op, [("hex", (0, 0)+im.size, 0, im.mode)]) + elif filter == "/DCTDecode": + Image.SAVE["JPEG"](im, op, filename) + elif filter == "/FlateDecode": + ImageFile._save(im, op, [("zip", (0, 0)+im.size, 0, im.mode)]) + elif filter == "/RunLengthDecode": + ImageFile._save(im, op, [("packbits", (0, 0)+im.size, 0, im.mode)]) + else: + raise ValueError("unsupported PDF filter (%s)" % filter) + + # + # Get image characteristics + + width, height = im.size + + xref.append(fp.tell()) + _obj( + fp, pageNumber*3+3, + Type="/XObject", + Subtype="/Image", + Width=width, # * 72.0 / resolution, + Height=height, # * 72.0 / resolution, + Length=len(op.getvalue()), + Filter=filter, + BitsPerComponent=bits, + DecodeParams=params, + ColorSpace=colorspace) + + fp.write("stream\n") + fp.fp.write(op.getvalue()) + fp.write("\nendstream\n") + + _endobj(fp) + + # + # page + + xref.append(fp.tell()) + _obj(fp, pageNumber*3+4) + fp.write( + "<<\n/Type /Page\n/Parent 2 0 R\n" + "/Resources <<\n/ProcSet [ /PDF %s ]\n" + "/XObject << /image %d 0 R >>\n>>\n" + "/MediaBox [ 0 0 %d %d ]\n/Contents %d 0 R\n>>\n" % ( + procset, + pageNumber*3+3, + int(width * 72.0 / resolution), + int(height * 72.0 / resolution), + pageNumber*3+5)) + _endobj(fp) + + # + # page contents + + op = TextWriter(io.BytesIO()) + + op.write( + "q %d 0 0 %d 0 0 cm /image Do Q\n" % ( + int(width * 72.0 / resolution), + int(height * 72.0 / resolution))) + + xref.append(fp.tell()) + _obj(fp, pageNumber*3+5, Length=len(op.fp.getvalue())) + + fp.write("stream\n") + fp.fp.write(op.fp.getvalue()) + fp.write("\nendstream\n") + + _endobj(fp) + + # + # trailer + startxref = fp.tell() + fp.write("xref\n0 %d\n0000000000 65535 f \n" % len(xref)) + for x in xref[1:]: + fp.write("%010d 00000 n \n" % x) + fp.write("trailer\n<<\n/Size %d\n/Root 1 0 R\n>>\n" % len(xref)) + fp.write("startxref\n%d\n%%%%EOF\n" % startxref) + if hasattr(fp, "flush"): + fp.flush() + +# +# -------------------------------------------------------------------- + +Image.register_save("PDF", _save) +Image.register_save_all("PDF", _save_all) + +Image.register_extension("PDF", ".pdf") + +Image.register_mime("PDF", "application/pdf") diff --git a/server/www/packages/packages-darwin/x64/PIL/PixarImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/PixarImagePlugin.py new file mode 100644 index 0000000..db2ee55 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/PixarImagePlugin.py @@ -0,0 +1,68 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PIXAR raster support for PIL +# +# history: +# 97-01-29 fl Created +# +# notes: +# This is incomplete; it is based on a few samples created with +# Photoshop 2.5 and 3.0, and a summary description provided by +# Greg Coats . Hopefully, "L" and +# "RGBA" support will be added in future versions. +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1997. +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image, ImageFile, _binary + +__version__ = "0.1" + +# +# helpers + +i16 = _binary.i16le + + +## +# Image plugin for PIXAR raster images. + +class PixarImageFile(ImageFile.ImageFile): + + format = "PIXAR" + format_description = "PIXAR raster image" + + def _open(self): + + # assuming a 4-byte magic label (FIXME: add "_accept" hook) + s = self.fp.read(4) + if s != b"\200\350\000\000": + raise SyntaxError("not a PIXAR file") + + # read rest of header + s = s + self.fp.read(508) + + self.size = i16(s[418:420]), i16(s[416:418]) + + # get channel/depth descriptions + mode = i16(s[424:426]), i16(s[426:428]) + + if mode == (14, 2): + self.mode = "RGB" + # FIXME: to be continued... + + # create tile descriptor (assuming "dumped") + self.tile = [("raw", (0, 0)+self.size, 1024, (self.mode, 0, 1))] + +# +# -------------------------------------------------------------------- + +Image.register_open(PixarImageFile.format, PixarImageFile) + +# +# FIXME: what's the standard extension? diff --git a/server/www/packages/packages-darwin/x64/PIL/PngImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/PngImagePlugin.py new file mode 100644 index 0000000..d677882 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/PngImagePlugin.py @@ -0,0 +1,809 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PNG support code +# +# See "PNG (Portable Network Graphics) Specification, version 1.0; +# W3C Recommendation", 1996-10-01, Thomas Boutell (ed.). +# +# history: +# 1996-05-06 fl Created (couldn't resist it) +# 1996-12-14 fl Upgraded, added read and verify support (0.2) +# 1996-12-15 fl Separate PNG stream parser +# 1996-12-29 fl Added write support, added getchunks +# 1996-12-30 fl Eliminated circular references in decoder (0.3) +# 1998-07-12 fl Read/write 16-bit images as mode I (0.4) +# 2001-02-08 fl Added transparency support (from Zircon) (0.5) +# 2001-04-16 fl Don't close data source in "open" method (0.6) +# 2004-02-24 fl Don't even pretend to support interlaced files (0.7) +# 2004-08-31 fl Do basic sanity check on chunk identifiers (0.8) +# 2004-09-20 fl Added PngInfo chunk container +# 2004-12-18 fl Added DPI read support (based on code by Niki Spahiev) +# 2008-08-13 fl Added tRNS support for RGB images +# 2009-03-06 fl Support for preserving ICC profiles (by Florian Hoech) +# 2009-03-08 fl Added zTXT support (from Lowell Alleman) +# 2009-03-29 fl Read interlaced PNG files (from Conrado Porto Lopes Gouvua) +# +# Copyright (c) 1997-2009 by Secret Labs AB +# Copyright (c) 1996 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from __future__ import print_function + +import logging +import re +import zlib + +from PIL import Image, ImageFile, ImagePalette, _binary + +__version__ = "0.9" + +logger = logging.getLogger(__name__) + +i8 = _binary.i8 +i16 = _binary.i16be +i32 = _binary.i32be + +is_cid = re.compile(b"\w\w\w\w").match + + +_MAGIC = b"\211PNG\r\n\032\n" + + +_MODES = { + # supported bits/color combinations, and corresponding modes/rawmodes + (1, 0): ("1", "1"), + (2, 0): ("L", "L;2"), + (4, 0): ("L", "L;4"), + (8, 0): ("L", "L"), + (16, 0): ("I", "I;16B"), + (8, 2): ("RGB", "RGB"), + (16, 2): ("RGB", "RGB;16B"), + (1, 3): ("P", "P;1"), + (2, 3): ("P", "P;2"), + (4, 3): ("P", "P;4"), + (8, 3): ("P", "P"), + (8, 4): ("LA", "LA"), + (16, 4): ("RGBA", "LA;16B"), # LA;16B->LA not yet available + (8, 6): ("RGBA", "RGBA"), + (16, 6): ("RGBA", "RGBA;16B"), +} + + +_simple_palette = re.compile(b'^\xff+\x00\xff*$') +_null_palette = re.compile(b'^\x00*$') + +# Maximum decompressed size for a iTXt or zTXt chunk. +# Eliminates decompression bombs where compressed chunks can expand 1000x +MAX_TEXT_CHUNK = ImageFile.SAFEBLOCK +# Set the maximum total text chunk size. +MAX_TEXT_MEMORY = 64 * MAX_TEXT_CHUNK + + +def _safe_zlib_decompress(s): + dobj = zlib.decompressobj() + plaintext = dobj.decompress(s, MAX_TEXT_CHUNK) + if dobj.unconsumed_tail: + raise ValueError("Decompressed Data Too Large") + return plaintext + + +# -------------------------------------------------------------------- +# Support classes. Suitable for PNG and related formats like MNG etc. + +class ChunkStream(object): + + def __init__(self, fp): + + self.fp = fp + self.queue = [] + + if not hasattr(Image.core, "crc32"): + self.crc = self.crc_skip + + def read(self): + "Fetch a new chunk. Returns header information." + + if self.queue: + cid, pos, length = self.queue[-1] + del self.queue[-1] + self.fp.seek(pos) + else: + s = self.fp.read(8) + cid = s[4:] + pos = self.fp.tell() + length = i32(s) + + if not is_cid(cid): + raise SyntaxError("broken PNG file (chunk %s)" % repr(cid)) + + return cid, pos, length + + def close(self): + self.queue = self.crc = self.fp = None + + def push(self, cid, pos, length): + + self.queue.append((cid, pos, length)) + + def call(self, cid, pos, length): + "Call the appropriate chunk handler" + + logger.debug("STREAM %s %s %s", cid, pos, length) + return getattr(self, "chunk_" + cid.decode('ascii'))(pos, length) + + def crc(self, cid, data): + "Read and verify checksum" + + crc1 = Image.core.crc32(data, Image.core.crc32(cid)) + crc2 = i16(self.fp.read(2)), i16(self.fp.read(2)) + if crc1 != crc2: + raise SyntaxError("broken PNG file" + "(bad header checksum in %s)" % cid) + + def crc_skip(self, cid, data): + "Read checksum. Used if the C module is not present" + + self.fp.read(4) + + def verify(self, endchunk=b"IEND"): + + # Simple approach; just calculate checksum for all remaining + # blocks. Must be called directly after open. + + cids = [] + + while True: + cid, pos, length = self.read() + if cid == endchunk: + break + self.crc(cid, ImageFile._safe_read(self.fp, length)) + cids.append(cid) + + return cids + + +class iTXt(str): + """ + Subclass of string to allow iTXt chunks to look like strings while + keeping their extra information + + """ + @staticmethod + def __new__(cls, text, lang, tkey): + """ + :param value: value for this key + :param lang: language code + :param tkey: UTF-8 version of the key name + """ + + self = str.__new__(cls, text) + self.lang = lang + self.tkey = tkey + return self + + +class PngInfo(object): + """ + PNG chunk container (for use with save(pnginfo=)) + + """ + + def __init__(self): + self.chunks = [] + + def add(self, cid, data): + """Appends an arbitrary chunk. Use with caution. + + :param cid: a byte string, 4 bytes long. + :param data: a byte string of the encoded data + + """ + + self.chunks.append((cid, data)) + + def add_itxt(self, key, value, lang="", tkey="", zip=False): + """Appends an iTXt chunk. + + :param key: latin-1 encodable text key name + :param value: value for this key + :param lang: language code + :param tkey: UTF-8 version of the key name + :param zip: compression flag + + """ + + if not isinstance(key, bytes): + key = key.encode("latin-1", "strict") + if not isinstance(value, bytes): + value = value.encode("utf-8", "strict") + if not isinstance(lang, bytes): + lang = lang.encode("utf-8", "strict") + if not isinstance(tkey, bytes): + tkey = tkey.encode("utf-8", "strict") + + if zip: + self.add(b"iTXt", key + b"\0\x01\0" + lang + b"\0" + tkey + b"\0" + + zlib.compress(value)) + else: + self.add(b"iTXt", key + b"\0\0\0" + lang + b"\0" + tkey + b"\0" + + value) + + def add_text(self, key, value, zip=0): + """Appends a text chunk. + + :param key: latin-1 encodable text key name + :param value: value for this key, text or an + :py:class:`PIL.PngImagePlugin.iTXt` instance + :param zip: compression flag + + """ + if isinstance(value, iTXt): + return self.add_itxt(key, value, value.lang, value.tkey, bool(zip)) + + # The tEXt chunk stores latin-1 text + if not isinstance(value, bytes): + try: + value = value.encode('latin-1', 'strict') + except UnicodeError: + return self.add_itxt(key, value, zip=bool(zip)) + + if not isinstance(key, bytes): + key = key.encode('latin-1', 'strict') + + if zip: + self.add(b"zTXt", key + b"\0\0" + zlib.compress(value)) + else: + self.add(b"tEXt", key + b"\0" + value) + + +# -------------------------------------------------------------------- +# PNG image stream (IHDR/IEND) + +class PngStream(ChunkStream): + + def __init__(self, fp): + + ChunkStream.__init__(self, fp) + + # local copies of Image attributes + self.im_info = {} + self.im_text = {} + self.im_size = (0, 0) + self.im_mode = None + self.im_tile = None + self.im_palette = None + + self.text_memory = 0 + + def check_text_memory(self, chunklen): + self.text_memory += chunklen + if self.text_memory > MAX_TEXT_MEMORY: + raise ValueError("Too much memory used in text chunks: %s>MAX_TEXT_MEMORY" % + self.text_memory) + + def chunk_iCCP(self, pos, length): + + # ICC profile + s = ImageFile._safe_read(self.fp, length) + # according to PNG spec, the iCCP chunk contains: + # Profile name 1-79 bytes (character string) + # Null separator 1 byte (null character) + # Compression method 1 byte (0) + # Compressed profile n bytes (zlib with deflate compression) + i = s.find(b"\0") + logger.debug("iCCP profile name %s", s[:i]) + logger.debug("Compression method %s", i8(s[i])) + comp_method = i8(s[i]) + if comp_method != 0: + raise SyntaxError("Unknown compression method %s in iCCP chunk" % + comp_method) + try: + icc_profile = _safe_zlib_decompress(s[i+2:]) + except zlib.error: + icc_profile = None # FIXME + self.im_info["icc_profile"] = icc_profile + return s + + def chunk_IHDR(self, pos, length): + + # image header + s = ImageFile._safe_read(self.fp, length) + self.im_size = i32(s), i32(s[4:]) + try: + self.im_mode, self.im_rawmode = _MODES[(i8(s[8]), i8(s[9]))] + except: + pass + if i8(s[12]): + self.im_info["interlace"] = 1 + if i8(s[11]): + raise SyntaxError("unknown filter category") + return s + + def chunk_IDAT(self, pos, length): + + # image data + self.im_tile = [("zip", (0, 0)+self.im_size, pos, self.im_rawmode)] + self.im_idat = length + raise EOFError + + def chunk_IEND(self, pos, length): + + # end of PNG image + raise EOFError + + def chunk_PLTE(self, pos, length): + + # palette + s = ImageFile._safe_read(self.fp, length) + if self.im_mode == "P": + self.im_palette = "RGB", s + return s + + def chunk_tRNS(self, pos, length): + + # transparency + s = ImageFile._safe_read(self.fp, length) + if self.im_mode == "P": + if _simple_palette.match(s): + i = s.find(b"\0") + if i >= 0: + self.im_info["transparency"] = i + elif _null_palette.match(s): + self.im_info["transparency"] = 0 + else: + self.im_info["transparency"] = s + elif self.im_mode == "L": + self.im_info["transparency"] = i16(s) + elif self.im_mode == "RGB": + self.im_info["transparency"] = i16(s), i16(s[2:]), i16(s[4:]) + return s + + def chunk_gAMA(self, pos, length): + + # gamma setting + s = ImageFile._safe_read(self.fp, length) + self.im_info["gamma"] = i32(s) / 100000.0 + return s + + def chunk_pHYs(self, pos, length): + + # pixels per unit + s = ImageFile._safe_read(self.fp, length) + px, py = i32(s), i32(s[4:]) + unit = i8(s[8]) + if unit == 1: # meter + dpi = int(px * 0.0254 + 0.5), int(py * 0.0254 + 0.5) + self.im_info["dpi"] = dpi + elif unit == 0: + self.im_info["aspect"] = px, py + return s + + def chunk_tEXt(self, pos, length): + + # text + s = ImageFile._safe_read(self.fp, length) + try: + k, v = s.split(b"\0", 1) + except ValueError: + # fallback for broken tEXt tags + k = s + v = b"" + if k: + if bytes is not str: + k = k.decode('latin-1', 'strict') + v = v.decode('latin-1', 'replace') + + self.im_info[k] = self.im_text[k] = v + self.check_text_memory(len(v)) + + return s + + def chunk_zTXt(self, pos, length): + + # compressed text + s = ImageFile._safe_read(self.fp, length) + try: + k, v = s.split(b"\0", 1) + except ValueError: + k = s + v = b"" + if v: + comp_method = i8(v[0]) + else: + comp_method = 0 + if comp_method != 0: + raise SyntaxError("Unknown compression method %s in zTXt chunk" % + comp_method) + try: + v = _safe_zlib_decompress(v[1:]) + except zlib.error: + v = b"" + + if k: + if bytes is not str: + k = k.decode('latin-1', 'strict') + v = v.decode('latin-1', 'replace') + + self.im_info[k] = self.im_text[k] = v + self.check_text_memory(len(v)) + + return s + + def chunk_iTXt(self, pos, length): + + # international text + r = s = ImageFile._safe_read(self.fp, length) + try: + k, r = r.split(b"\0", 1) + except ValueError: + return s + if len(r) < 2: + return s + cf, cm, r = i8(r[0]), i8(r[1]), r[2:] + try: + lang, tk, v = r.split(b"\0", 2) + except ValueError: + return s + if cf != 0: + if cm == 0: + try: + v = _safe_zlib_decompress(v) + except zlib.error: + return s + else: + return s + if bytes is not str: + try: + k = k.decode("latin-1", "strict") + lang = lang.decode("utf-8", "strict") + tk = tk.decode("utf-8", "strict") + v = v.decode("utf-8", "strict") + except UnicodeError: + return s + + self.im_info[k] = self.im_text[k] = iTXt(v, lang, tk) + self.check_text_memory(len(v)) + + return s + + +# -------------------------------------------------------------------- +# PNG reader + +def _accept(prefix): + return prefix[:8] == _MAGIC + + +## +# Image plugin for PNG images. + +class PngImageFile(ImageFile.ImageFile): + + format = "PNG" + format_description = "Portable network graphics" + + def _open(self): + + if self.fp.read(8) != _MAGIC: + raise SyntaxError("not a PNG file") + + # + # Parse headers up to the first IDAT chunk + + self.png = PngStream(self.fp) + + while True: + + # + # get next chunk + + cid, pos, length = self.png.read() + + try: + s = self.png.call(cid, pos, length) + except EOFError: + break + except AttributeError: + logger.debug("%s %s %s (unknown)", cid, pos, length) + s = ImageFile._safe_read(self.fp, length) + + self.png.crc(cid, s) + + # + # Copy relevant attributes from the PngStream. An alternative + # would be to let the PngStream class modify these attributes + # directly, but that introduces circular references which are + # difficult to break if things go wrong in the decoder... + # (believe me, I've tried ;-) + + self.mode = self.png.im_mode + self.size = self.png.im_size + self.info = self.png.im_info + self.text = self.png.im_text # experimental + self.tile = self.png.im_tile + + if self.png.im_palette: + rawmode, data = self.png.im_palette + self.palette = ImagePalette.raw(rawmode, data) + + self.__idat = length # used by load_read() + + def verify(self): + "Verify PNG file" + + if self.fp is None: + raise RuntimeError("verify must be called directly after open") + + # back up to beginning of IDAT block + self.fp.seek(self.tile[0][2] - 8) + + self.png.verify() + self.png.close() + + self.fp = None + + def load_prepare(self): + "internal: prepare to read PNG file" + + if self.info.get("interlace"): + self.decoderconfig = self.decoderconfig + (1,) + + ImageFile.ImageFile.load_prepare(self) + + def load_read(self, read_bytes): + "internal: read more image data" + + while self.__idat == 0: + # end of chunk, skip forward to next one + + self.fp.read(4) # CRC + + cid, pos, length = self.png.read() + + if cid not in [b"IDAT", b"DDAT"]: + self.png.push(cid, pos, length) + return b"" + + self.__idat = length # empty chunks are allowed + + # read more data from this chunk + if read_bytes <= 0: + read_bytes = self.__idat + else: + read_bytes = min(read_bytes, self.__idat) + + self.__idat = self.__idat - read_bytes + + return self.fp.read(read_bytes) + + def load_end(self): + "internal: finished reading image data" + + self.png.close() + self.png = None + + +# -------------------------------------------------------------------- +# PNG writer + +o8 = _binary.o8 +o16 = _binary.o16be +o32 = _binary.o32be + +_OUTMODES = { + # supported PIL modes, and corresponding rawmodes/bits/color combinations + "1": ("1", b'\x01\x00'), + "L;1": ("L;1", b'\x01\x00'), + "L;2": ("L;2", b'\x02\x00'), + "L;4": ("L;4", b'\x04\x00'), + "L": ("L", b'\x08\x00'), + "LA": ("LA", b'\x08\x04'), + "I": ("I;16B", b'\x10\x00'), + "P;1": ("P;1", b'\x01\x03'), + "P;2": ("P;2", b'\x02\x03'), + "P;4": ("P;4", b'\x04\x03'), + "P": ("P", b'\x08\x03'), + "RGB": ("RGB", b'\x08\x02'), + "RGBA": ("RGBA", b'\x08\x06'), +} + + +def putchunk(fp, cid, *data): + "Write a PNG chunk (including CRC field)" + + data = b"".join(data) + + fp.write(o32(len(data)) + cid) + fp.write(data) + hi, lo = Image.core.crc32(data, Image.core.crc32(cid)) + fp.write(o16(hi) + o16(lo)) + + +class _idat(object): + # wrap output from the encoder in IDAT chunks + + def __init__(self, fp, chunk): + self.fp = fp + self.chunk = chunk + + def write(self, data): + self.chunk(self.fp, b"IDAT", data) + + +def _save(im, fp, filename, chunk=putchunk, check=0): + # save an image to disk (called by the save method) + + mode = im.mode + + if mode == "P": + + # + # attempt to minimize storage requirements for palette images + if "bits" in im.encoderinfo: + # number of bits specified by user + colors = 1 << im.encoderinfo["bits"] + else: + # check palette contents + if im.palette: + colors = max(min(len(im.palette.getdata()[1])//3, 256), 2) + else: + colors = 256 + + if colors <= 2: + bits = 1 + elif colors <= 4: + bits = 2 + elif colors <= 16: + bits = 4 + else: + bits = 8 + if bits != 8: + mode = "%s;%d" % (mode, bits) + + # encoder options + if "dictionary" in im.encoderinfo: + dictionary = im.encoderinfo["dictionary"] + else: + dictionary = b"" + + im.encoderconfig = ("optimize" in im.encoderinfo, + im.encoderinfo.get("compress_level", -1), + im.encoderinfo.get("compress_type", -1), + dictionary) + + # get the corresponding PNG mode + try: + rawmode, mode = _OUTMODES[mode] + except KeyError: + raise IOError("cannot write mode %s as PNG" % mode) + + if check: + return check + + # + # write minimal PNG file + + fp.write(_MAGIC) + + chunk(fp, b"IHDR", + o32(im.size[0]), o32(im.size[1]), # 0: size + mode, # 8: depth/type + b'\0', # 10: compression + b'\0', # 11: filter category + b'\0') # 12: interlace flag + + if im.mode == "P": + palette_byte_number = (2 ** bits) * 3 + palette_bytes = im.im.getpalette("RGB")[:palette_byte_number] + while len(palette_bytes) < palette_byte_number: + palette_bytes += b'\0' + chunk(fp, b"PLTE", palette_bytes) + + transparency = im.encoderinfo.get('transparency', + im.info.get('transparency', None)) + + if transparency or transparency == 0: + if im.mode == "P": + # limit to actual palette size + alpha_bytes = 2**bits + if isinstance(transparency, bytes): + chunk(fp, b"tRNS", transparency[:alpha_bytes]) + else: + transparency = max(0, min(255, transparency)) + alpha = b'\xFF' * transparency + b'\0' + chunk(fp, b"tRNS", alpha[:alpha_bytes]) + elif im.mode == "L": + transparency = max(0, min(65535, transparency)) + chunk(fp, b"tRNS", o16(transparency)) + elif im.mode == "RGB": + red, green, blue = transparency + chunk(fp, b"tRNS", o16(red) + o16(green) + o16(blue)) + else: + if "transparency" in im.encoderinfo: + # don't bother with transparency if it's an RGBA + # and it's in the info dict. It's probably just stale. + raise IOError("cannot use transparency for this mode") + else: + if im.mode == "P" and im.im.getpalettemode() == "RGBA": + alpha = im.im.getpalette("RGBA", "A") + alpha_bytes = 2**bits + chunk(fp, b"tRNS", alpha[:alpha_bytes]) + + dpi = im.encoderinfo.get("dpi") + if dpi: + chunk(fp, b"pHYs", + o32(int(dpi[0] / 0.0254 + 0.5)), + o32(int(dpi[1] / 0.0254 + 0.5)), + b'\x01') + + info = im.encoderinfo.get("pnginfo") + if info: + for cid, data in info.chunks: + chunk(fp, cid, data) + + # ICC profile writing support -- 2008-06-06 Florian Hoech + if im.info.get("icc_profile"): + # ICC profile + # according to PNG spec, the iCCP chunk contains: + # Profile name 1-79 bytes (character string) + # Null separator 1 byte (null character) + # Compression method 1 byte (0) + # Compressed profile n bytes (zlib with deflate compression) + name = b"ICC Profile" + data = name + b"\0\0" + zlib.compress(im.info["icc_profile"]) + chunk(fp, b"iCCP", data) + + ImageFile._save(im, _idat(fp, chunk), + [("zip", (0, 0)+im.size, 0, rawmode)]) + + chunk(fp, b"IEND", b"") + + if hasattr(fp, "flush"): + fp.flush() + + +# -------------------------------------------------------------------- +# PNG chunk converter + +def getchunks(im, **params): + """Return a list of PNG chunks representing this image.""" + + class collector(object): + data = [] + + def write(self, data): + pass + + def append(self, chunk): + self.data.append(chunk) + + def append(fp, cid, *data): + data = b"".join(data) + hi, lo = Image.core.crc32(data, Image.core.crc32(cid)) + crc = o16(hi) + o16(lo) + fp.append((cid, data, crc)) + + fp = collector() + + try: + im.encoderinfo = params + _save(im, fp, None, append) + finally: + del im.encoderinfo + + return fp.data + + +# -------------------------------------------------------------------- +# Registry + +Image.register_open(PngImageFile.format, PngImageFile, _accept) +Image.register_save(PngImageFile.format, _save) + +Image.register_extension(PngImageFile.format, ".png") + +Image.register_mime(PngImageFile.format, "image/png") diff --git a/server/www/packages/packages-darwin/x64/PIL/PpmImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/PpmImagePlugin.py new file mode 100644 index 0000000..68073ca --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/PpmImagePlugin.py @@ -0,0 +1,174 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PPM support for PIL +# +# History: +# 96-03-24 fl Created +# 98-03-06 fl Write RGBA images (as RGB, that is) +# +# Copyright (c) Secret Labs AB 1997-98. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# + + +import string + +from PIL import Image, ImageFile + +__version__ = "0.2" + +# +# -------------------------------------------------------------------- + +b_whitespace = string.whitespace +try: + import locale + locale_lang, locale_enc = locale.getlocale() + if locale_enc is None: + locale_lang, locale_enc = locale.getdefaultlocale() + b_whitespace = b_whitespace.decode(locale_enc) +except: + pass +b_whitespace = b_whitespace.encode('ascii', 'ignore') + +MODES = { + # standard + b"P4": "1", + b"P5": "L", + b"P6": "RGB", + # extensions + b"P0CMYK": "CMYK", + # PIL extensions (for test purposes only) + b"PyP": "P", + b"PyRGBA": "RGBA", + b"PyCMYK": "CMYK" +} + + +def _accept(prefix): + return prefix[0:1] == b"P" and prefix[1] in b"0456y" + + +## +# Image plugin for PBM, PGM, and PPM images. + +class PpmImageFile(ImageFile.ImageFile): + + format = "PPM" + format_description = "Pbmplus image" + + def _token(self, s=b""): + while True: # read until next whitespace + c = self.fp.read(1) + if not c or c in b_whitespace: + break + if c > b'\x79': + raise ValueError("Expected ASCII value, found binary") + s = s + c + if (len(s) > 9): + raise ValueError("Expected int, got > 9 digits") + return s + + def _open(self): + + # check magic + s = self.fp.read(1) + if s != b"P": + raise SyntaxError("not a PPM file") + mode = MODES[self._token(s)] + + if mode == "1": + self.mode = "1" + rawmode = "1;I" + else: + self.mode = rawmode = mode + + for ix in range(3): + while True: + while True: + s = self.fp.read(1) + if s not in b_whitespace: + break + if s == b"": + raise ValueError("File does not extend beyond magic number") + if s != b"#": + break + s = self.fp.readline() + s = int(self._token(s)) + if ix == 0: + xsize = s + elif ix == 1: + ysize = s + if mode == "1": + break + elif ix == 2: + # maxgrey + if s > 255: + if not mode == 'L': + raise ValueError("Too many colors for band: %s" % s) + if s < 2**16: + self.mode = 'I' + rawmode = 'I;16B' + else: + self.mode = 'I' + rawmode = 'I;32B' + + self.size = xsize, ysize + self.tile = [("raw", + (0, 0, xsize, ysize), + self.fp.tell(), + (rawmode, 0, 1))] + + # ALTERNATIVE: load via builtin debug function + # self.im = Image.core.open_ppm(self.filename) + # self.mode = self.im.mode + # self.size = self.im.size + + +# +# -------------------------------------------------------------------- + +def _save(im, fp, filename): + if im.mode == "1": + rawmode, head = "1;I", b"P4" + elif im.mode == "L": + rawmode, head = "L", b"P5" + elif im.mode == "I": + if im.getextrema()[1] < 2**16: + rawmode, head = "I;16B", b"P5" + else: + rawmode, head = "I;32B", b"P5" + elif im.mode == "RGB": + rawmode, head = "RGB", b"P6" + elif im.mode == "RGBA": + rawmode, head = "RGB", b"P6" + else: + raise IOError("cannot write mode %s as PPM" % im.mode) + fp.write(head + ("\n%d %d\n" % im.size).encode('ascii')) + if head == b"P6": + fp.write(b"255\n") + if head == b"P5": + if rawmode == "L": + fp.write(b"255\n") + elif rawmode == "I;16B": + fp.write(b"65535\n") + elif rawmode == "I;32B": + fp.write(b"2147483648\n") + ImageFile._save(im, fp, [("raw", (0, 0)+im.size, 0, (rawmode, 0, 1))]) + + # ALTERNATIVE: save via builtin debug function + # im._dump(filename) + +# +# -------------------------------------------------------------------- + +Image.register_open(PpmImageFile.format, PpmImageFile, _accept) +Image.register_save(PpmImageFile.format, _save) + +Image.register_extension(PpmImageFile.format, ".pbm") +Image.register_extension(PpmImageFile.format, ".pgm") +Image.register_extension(PpmImageFile.format, ".ppm") diff --git a/server/www/packages/packages-darwin/x64/PIL/PsdImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/PsdImagePlugin.py new file mode 100644 index 0000000..d06e320 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/PsdImagePlugin.py @@ -0,0 +1,312 @@ +# +# The Python Imaging Library +# $Id$ +# +# Adobe PSD 2.5/3.0 file handling +# +# History: +# 1995-09-01 fl Created +# 1997-01-03 fl Read most PSD images +# 1997-01-18 fl Fixed P and CMYK support +# 2001-10-21 fl Added seek/tell support (for layers) +# +# Copyright (c) 1997-2001 by Secret Labs AB. +# Copyright (c) 1995-2001 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +__version__ = "0.4" + +from PIL import Image, ImageFile, ImagePalette, _binary + +MODES = { + # (photoshop mode, bits) -> (pil mode, required channels) + (0, 1): ("1", 1), + (0, 8): ("L", 1), + (1, 8): ("L", 1), + (2, 8): ("P", 1), + (3, 8): ("RGB", 3), + (4, 8): ("CMYK", 4), + (7, 8): ("L", 1), # FIXME: multilayer + (8, 8): ("L", 1), # duotone + (9, 8): ("LAB", 3) +} + +# +# helpers + +i8 = _binary.i8 +i16 = _binary.i16be +i32 = _binary.i32be + + +# --------------------------------------------------------------------. +# read PSD images + +def _accept(prefix): + return prefix[:4] == b"8BPS" + + +## +# Image plugin for Photoshop images. + +class PsdImageFile(ImageFile.ImageFile): + + format = "PSD" + format_description = "Adobe Photoshop" + + def _open(self): + + read = self.fp.read + + # + # header + + s = read(26) + if s[:4] != b"8BPS" or i16(s[4:]) != 1: + raise SyntaxError("not a PSD file") + + psd_bits = i16(s[22:]) + psd_channels = i16(s[12:]) + psd_mode = i16(s[24:]) + + mode, channels = MODES[(psd_mode, psd_bits)] + + if channels > psd_channels: + raise IOError("not enough channels") + + self.mode = mode + self.size = i32(s[18:]), i32(s[14:]) + + # + # color mode data + + size = i32(read(4)) + if size: + data = read(size) + if mode == "P" and size == 768: + self.palette = ImagePalette.raw("RGB;L", data) + + # + # image resources + + self.resources = [] + + size = i32(read(4)) + if size: + # load resources + end = self.fp.tell() + size + while self.fp.tell() < end: + signature = read(4) + id = i16(read(2)) + name = read(i8(read(1))) + if not (len(name) & 1): + read(1) # padding + data = read(i32(read(4))) + if (len(data) & 1): + read(1) # padding + self.resources.append((id, name, data)) + if id == 1039: # ICC profile + self.info["icc_profile"] = data + + # + # layer and mask information + + self.layers = [] + + size = i32(read(4)) + if size: + end = self.fp.tell() + size + size = i32(read(4)) + if size: + self.layers = _layerinfo(self.fp) + self.fp.seek(end) + + # + # image descriptor + + self.tile = _maketile(self.fp, mode, (0, 0) + self.size, channels) + + # keep the file open + self._fp = self.fp + self.frame = 0 + + @property + def n_frames(self): + return len(self.layers) + + @property + def is_animated(self): + return len(self.layers) > 1 + + def seek(self, layer): + # seek to given layer (1..max) + if layer == self.frame: + return + try: + if layer <= 0: + raise IndexError + name, mode, bbox, tile = self.layers[layer-1] + self.mode = mode + self.tile = tile + self.frame = layer + self.fp = self._fp + return name, bbox + except IndexError: + raise EOFError("no such layer") + + def tell(self): + # return layer number (0=image, 1..max=layers) + return self.frame + + def load_prepare(self): + # create image memory if necessary + if not self.im or\ + self.im.mode != self.mode or self.im.size != self.size: + self.im = Image.core.fill(self.mode, self.size, 0) + # create palette (optional) + if self.mode == "P": + Image.Image.load(self) + + +def _layerinfo(file): + # read layerinfo block + layers = [] + read = file.read + for i in range(abs(i16(read(2)))): + + # bounding box + y0 = i32(read(4)) + x0 = i32(read(4)) + y1 = i32(read(4)) + x1 = i32(read(4)) + + # image info + info = [] + mode = [] + types = list(range(i16(read(2)))) + if len(types) > 4: + continue + + for i in types: + type = i16(read(2)) + + if type == 65535: + m = "A" + else: + m = "RGBA"[type] + + mode.append(m) + size = i32(read(4)) + info.append((m, size)) + + # figure out the image mode + mode.sort() + if mode == ["R"]: + mode = "L" + elif mode == ["B", "G", "R"]: + mode = "RGB" + elif mode == ["A", "B", "G", "R"]: + mode = "RGBA" + else: + mode = None # unknown + + # skip over blend flags and extra information + filler = read(12) + name = "" + size = i32(read(4)) + combined = 0 + if size: + length = i32(read(4)) + if length: + mask_y = i32(read(4)) + mask_x = i32(read(4)) + mask_h = i32(read(4)) - mask_y + mask_w = i32(read(4)) - mask_x + file.seek(length - 16, 1) + combined += length + 4 + + length = i32(read(4)) + if length: + file.seek(length, 1) + combined += length + 4 + + length = i8(read(1)) + if length: + # Don't know the proper encoding, + # Latin-1 should be a good guess + name = read(length).decode('latin-1', 'replace') + combined += length + 1 + + file.seek(size - combined, 1) + layers.append((name, mode, (x0, y0, x1, y1))) + + # get tiles + i = 0 + for name, mode, bbox in layers: + tile = [] + for m in mode: + t = _maketile(file, m, bbox, 1) + if t: + tile.extend(t) + layers[i] = name, mode, bbox, tile + i += 1 + + return layers + + +def _maketile(file, mode, bbox, channels): + + tile = None + read = file.read + + compression = i16(read(2)) + + xsize = bbox[2] - bbox[0] + ysize = bbox[3] - bbox[1] + + offset = file.tell() + + if compression == 0: + # + # raw compression + tile = [] + for channel in range(channels): + layer = mode[channel] + if mode == "CMYK": + layer += ";I" + tile.append(("raw", bbox, offset, layer)) + offset = offset + xsize*ysize + + elif compression == 1: + # + # packbits compression + i = 0 + tile = [] + bytecount = read(channels * ysize * 2) + offset = file.tell() + for channel in range(channels): + layer = mode[channel] + if mode == "CMYK": + layer += ";I" + tile.append( + ("packbits", bbox, offset, layer) + ) + for y in range(ysize): + offset = offset + i16(bytecount[i:i+2]) + i += 2 + + file.seek(offset) + + if offset & 1: + read(1) # padding + + return tile + +# -------------------------------------------------------------------- +# registry + +Image.register_open(PsdImageFile.format, PsdImageFile, _accept) + +Image.register_extension(PsdImageFile.format, ".psd") diff --git a/server/www/packages/packages-darwin/x64/PIL/PyAccess.py b/server/www/packages/packages-darwin/x64/PIL/PyAccess.py new file mode 100644 index 0000000..faa868c --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/PyAccess.py @@ -0,0 +1,317 @@ +# +# The Python Imaging Library +# Pillow fork +# +# Python implementation of the PixelAccess Object +# +# Copyright (c) 1997-2009 by Secret Labs AB. All rights reserved. +# Copyright (c) 1995-2009 by Fredrik Lundh. +# Copyright (c) 2013 Eric Soroos +# +# See the README file for information on usage and redistribution +# + +# Notes: +# +# * Implements the pixel access object following Access. +# * Does not implement the line functions, as they don't appear to be used +# * Taking only the tuple form, which is used from python. +# * Fill.c uses the integer form, but it's still going to use the old +# Access.c implementation. +# + +from __future__ import print_function + +import logging +import sys + +from cffi import FFI + + +logger = logging.getLogger(__name__) + + +defs = """ +struct Pixel_RGBA { + unsigned char r,g,b,a; +}; +struct Pixel_I16 { + unsigned char l,r; +}; +""" +ffi = FFI() +ffi.cdef(defs) + + +class PyAccess(object): + + def __init__(self, img, readonly=False): + vals = dict(img.im.unsafe_ptrs) + self.readonly = readonly + self.image8 = ffi.cast('unsigned char **', vals['image8']) + self.image32 = ffi.cast('int **', vals['image32']) + self.image = ffi.cast('unsigned char **', vals['image']) + self.xsize = vals['xsize'] + self.ysize = vals['ysize'] + + # Debugging is polluting test traces, only useful here + # when hacking on PyAccess + # logger.debug("%s", vals) + self._post_init() + + def _post_init(self): + pass + + def __setitem__(self, xy, color): + """ + Modifies the pixel at x,y. The color is given as a single + numerical value for single band images, and a tuple for + multi-band images + + :param xy: The pixel coordinate, given as (x, y). + :param value: The pixel value. + """ + if self.readonly: + raise ValueError('Attempt to putpixel a read only image') + (x, y) = self.check_xy(xy) + return self.set_pixel(x, y, color) + + def __getitem__(self, xy): + """ + Returns the pixel at x,y. The pixel is returned as a single + value for single band images or a tuple for multiple band + images + + :param xy: The pixel coordinate, given as (x, y). + :returns: a pixel value for single band images, a tuple of + pixel values for multiband images. + """ + + (x, y) = self.check_xy(xy) + return self.get_pixel(x, y) + + putpixel = __setitem__ + getpixel = __getitem__ + + def check_xy(self, xy): + (x, y) = xy + if not (0 <= x < self.xsize and 0 <= y < self.ysize): + raise ValueError('pixel location out of range') + return xy + + +class _PyAccess32_2(PyAccess): + """ PA, LA, stored in first and last bytes of a 32 bit word """ + def _post_init(self, *args, **kwargs): + self.pixels = ffi.cast("struct Pixel_RGBA **", self.image32) + + def get_pixel(self, x, y): + pixel = self.pixels[y][x] + return (pixel.r, pixel.a) + + def set_pixel(self, x, y, color): + pixel = self.pixels[y][x] + # tuple + pixel.r = min(color[0], 255) + pixel.a = min(color[1], 255) + + +class _PyAccess32_3(PyAccess): + """ RGB and friends, stored in the first three bytes of a 32 bit word """ + + def _post_init(self, *args, **kwargs): + self.pixels = ffi.cast("struct Pixel_RGBA **", self.image32) + + def get_pixel(self, x, y): + pixel = self.pixels[y][x] + return (pixel.r, pixel.g, pixel.b) + + def set_pixel(self, x, y, color): + pixel = self.pixels[y][x] + # tuple + pixel.r = min(color[0], 255) + pixel.g = min(color[1], 255) + pixel.b = min(color[2], 255) + + +class _PyAccess32_4(PyAccess): + """ RGBA etc, all 4 bytes of a 32 bit word """ + def _post_init(self, *args, **kwargs): + self.pixels = ffi.cast("struct Pixel_RGBA **", self.image32) + + def get_pixel(self, x, y): + pixel = self.pixels[y][x] + return (pixel.r, pixel.g, pixel.b, pixel.a) + + def set_pixel(self, x, y, color): + pixel = self.pixels[y][x] + # tuple + pixel.r = min(color[0], 255) + pixel.g = min(color[1], 255) + pixel.b = min(color[2], 255) + pixel.a = min(color[3], 255) + + +class _PyAccess8(PyAccess): + """ 1, L, P, 8 bit images stored as uint8 """ + def _post_init(self, *args, **kwargs): + self.pixels = self.image8 + + def get_pixel(self, x, y): + return self.pixels[y][x] + + def set_pixel(self, x, y, color): + try: + # integer + self.pixels[y][x] = min(color, 255) + except: + # tuple + self.pixels[y][x] = min(color[0], 255) + + +class _PyAccessI16_N(PyAccess): + """ I;16 access, native bitendian without conversion """ + def _post_init(self, *args, **kwargs): + self.pixels = ffi.cast('unsigned short **', self.image) + + def get_pixel(self, x, y): + return self.pixels[y][x] + + def set_pixel(self, x, y, color): + try: + # integer + self.pixels[y][x] = min(color, 65535) + except: + # tuple + self.pixels[y][x] = min(color[0], 65535) + + +class _PyAccessI16_L(PyAccess): + """ I;16L access, with conversion """ + def _post_init(self, *args, **kwargs): + self.pixels = ffi.cast('struct Pixel_I16 **', self.image) + + def get_pixel(self, x, y): + pixel = self.pixels[y][x] + return pixel.l + pixel.r * 256 + + def set_pixel(self, x, y, color): + pixel = self.pixels[y][x] + try: + color = min(color, 65535) + except TypeError: + color = min(color[0], 65535) + + pixel.l = color & 0xFF + pixel.r = color >> 8 + + +class _PyAccessI16_B(PyAccess): + """ I;16B access, with conversion """ + def _post_init(self, *args, **kwargs): + self.pixels = ffi.cast('struct Pixel_I16 **', self.image) + + def get_pixel(self, x, y): + pixel = self.pixels[y][x] + return pixel.l * 256 + pixel.r + + def set_pixel(self, x, y, color): + pixel = self.pixels[y][x] + try: + color = min(color, 65535) + except: + color = min(color[0], 65535) + + pixel.l = color >> 8 + pixel.r = color & 0xFF + + +class _PyAccessI32_N(PyAccess): + """ Signed Int32 access, native endian """ + def _post_init(self, *args, **kwargs): + self.pixels = self.image32 + + def get_pixel(self, x, y): + return self.pixels[y][x] + + def set_pixel(self, x, y, color): + self.pixels[y][x] = color + + +class _PyAccessI32_Swap(PyAccess): + """ I;32L/B access, with byteswapping conversion """ + def _post_init(self, *args, **kwargs): + self.pixels = self.image32 + + def reverse(self, i): + orig = ffi.new('int *', i) + chars = ffi.cast('unsigned char *', orig) + chars[0], chars[1], chars[2], chars[3] = chars[3], chars[2], \ + chars[1], chars[0] + return ffi.cast('int *', chars)[0] + + def get_pixel(self, x, y): + return self.reverse(self.pixels[y][x]) + + def set_pixel(self, x, y, color): + self.pixels[y][x] = self.reverse(color) + + +class _PyAccessF(PyAccess): + """ 32 bit float access """ + def _post_init(self, *args, **kwargs): + self.pixels = ffi.cast('float **', self.image32) + + def get_pixel(self, x, y): + return self.pixels[y][x] + + def set_pixel(self, x, y, color): + try: + # not a tuple + self.pixels[y][x] = color + except: + # tuple + self.pixels[y][x] = color[0] + + +mode_map = {'1': _PyAccess8, + 'L': _PyAccess8, + 'P': _PyAccess8, + 'LA': _PyAccess32_2, + 'PA': _PyAccess32_2, + 'RGB': _PyAccess32_3, + 'LAB': _PyAccess32_3, + 'HSV': _PyAccess32_3, + 'YCbCr': _PyAccess32_3, + 'RGBA': _PyAccess32_4, + 'RGBa': _PyAccess32_4, + 'RGBX': _PyAccess32_4, + 'CMYK': _PyAccess32_4, + 'F': _PyAccessF, + 'I': _PyAccessI32_N, + } + +if sys.byteorder == 'little': + mode_map['I;16'] = _PyAccessI16_N + mode_map['I;16L'] = _PyAccessI16_N + mode_map['I;16B'] = _PyAccessI16_B + + mode_map['I;32L'] = _PyAccessI32_N + mode_map['I;32B'] = _PyAccessI32_Swap +else: + mode_map['I;16'] = _PyAccessI16_L + mode_map['I;16L'] = _PyAccessI16_L + mode_map['I;16B'] = _PyAccessI16_N + + mode_map['I;32L'] = _PyAccessI32_Swap + mode_map['I;32B'] = _PyAccessI32_N + + +def new(img, readonly=False): + access_type = mode_map.get(img.mode, None) + if not access_type: + logger.debug("PyAccess Not Implemented: %s", img.mode) + return None + return access_type(img, readonly) + +# End of file diff --git a/server/www/packages/packages-darwin/x64/PIL/SgiImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/SgiImagePlugin.py new file mode 100644 index 0000000..f890c7e --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/SgiImagePlugin.py @@ -0,0 +1,89 @@ +# +# The Python Imaging Library. +# $Id$ +# +# SGI image file handling +# +# See "The SGI Image File Format (Draft version 0.97)", Paul Haeberli. +# +# +# History: +# 1995-09-10 fl Created +# +# Copyright (c) 2008 by Karsten Hiddemann. +# Copyright (c) 1997 by Secret Labs AB. +# Copyright (c) 1995 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + + +from PIL import Image, ImageFile, _binary + +__version__ = "0.2" + +i8 = _binary.i8 +i16 = _binary.i16be + + +def _accept(prefix): + return len(prefix) >= 2 and i16(prefix) == 474 + + +## +# Image plugin for SGI images. + +class SgiImageFile(ImageFile.ImageFile): + + format = "SGI" + format_description = "SGI Image File Format" + + def _open(self): + + # HEAD + s = self.fp.read(512) + if i16(s) != 474: + raise ValueError("Not an SGI image file") + + # relevant header entries + compression = i8(s[2]) + + # bytes, dimension, zsize + layout = i8(s[3]), i16(s[4:]), i16(s[10:]) + + # determine mode from bytes/zsize + if layout == (1, 2, 1) or layout == (1, 1, 1): + self.mode = "L" + elif layout == (1, 3, 3): + self.mode = "RGB" + elif layout == (1, 3, 4): + self.mode = "RGBA" + else: + raise ValueError("Unsupported SGI image mode") + + # size + self.size = i16(s[6:]), i16(s[8:]) + + # decoder info + if compression == 0: + offset = 512 + pagesize = self.size[0]*self.size[1]*layout[0] + self.tile = [] + for layer in self.mode: + self.tile.append( + ("raw", (0, 0)+self.size, offset, (layer, 0, -1))) + offset = offset + pagesize + elif compression == 1: + raise ValueError("SGI RLE encoding not supported") + +# +# registry + +Image.register_open(SgiImageFile.format, SgiImageFile, _accept) + +Image.register_extension(SgiImageFile.format, ".bw") +Image.register_extension(SgiImageFile.format, ".rgb") +Image.register_extension(SgiImageFile.format, ".rgba") +Image.register_extension(SgiImageFile.format, ".sgi") + +# End of file diff --git a/server/www/packages/packages-darwin/x64/PIL/SpiderImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/SpiderImagePlugin.py new file mode 100644 index 0000000..d545789 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/SpiderImagePlugin.py @@ -0,0 +1,322 @@ +# +# The Python Imaging Library. +# +# SPIDER image file handling +# +# History: +# 2004-08-02 Created BB +# 2006-03-02 added save method +# 2006-03-13 added support for stack images +# +# Copyright (c) 2004 by Health Research Inc. (HRI) RENSSELAER, NY 12144. +# Copyright (c) 2004 by William Baxter. +# Copyright (c) 2004 by Secret Labs AB. +# Copyright (c) 2004 by Fredrik Lundh. +# + +## +# Image plugin for the Spider image format. This format is is used +# by the SPIDER software, in processing image data from electron +# microscopy and tomography. +## + +# +# SpiderImagePlugin.py +# +# The Spider image format is used by SPIDER software, in processing +# image data from electron microscopy and tomography. +# +# Spider home page: +# http://spider.wadsworth.org/spider_doc/spider/docs/spider.html +# +# Details about the Spider image format: +# http://spider.wadsworth.org/spider_doc/spider/docs/image_doc.html +# + +from __future__ import print_function + +from PIL import Image, ImageFile +import os +import struct +import sys + + +def isInt(f): + try: + i = int(f) + if f-i == 0: + return 1 + else: + return 0 + except ValueError: + return 0 + except OverflowError: + return 0 + +iforms = [1, 3, -11, -12, -21, -22] + + +# There is no magic number to identify Spider files, so just check a +# series of header locations to see if they have reasonable values. +# Returns no.of bytes in the header, if it is a valid Spider header, +# otherwise returns 0 + +def isSpiderHeader(t): + h = (99,) + t # add 1 value so can use spider header index start=1 + # header values 1,2,5,12,13,22,23 should be integers + for i in [1, 2, 5, 12, 13, 22, 23]: + if not isInt(h[i]): + return 0 + # check iform + iform = int(h[5]) + if iform not in iforms: + return 0 + # check other header values + labrec = int(h[13]) # no. records in file header + labbyt = int(h[22]) # total no. of bytes in header + lenbyt = int(h[23]) # record length in bytes + # print "labrec = %d, labbyt = %d, lenbyt = %d" % (labrec,labbyt,lenbyt) + if labbyt != (labrec * lenbyt): + return 0 + # looks like a valid header + return labbyt + + +def isSpiderImage(filename): + fp = open(filename, 'rb') + f = fp.read(92) # read 23 * 4 bytes + fp.close() + t = struct.unpack('>23f', f) # try big-endian first + hdrlen = isSpiderHeader(t) + if hdrlen == 0: + t = struct.unpack('<23f', f) # little-endian + hdrlen = isSpiderHeader(t) + return hdrlen + + +class SpiderImageFile(ImageFile.ImageFile): + + format = "SPIDER" + format_description = "Spider 2D image" + + def _open(self): + # check header + n = 27 * 4 # read 27 float values + f = self.fp.read(n) + + try: + self.bigendian = 1 + t = struct.unpack('>27f', f) # try big-endian first + hdrlen = isSpiderHeader(t) + if hdrlen == 0: + self.bigendian = 0 + t = struct.unpack('<27f', f) # little-endian + hdrlen = isSpiderHeader(t) + if hdrlen == 0: + raise SyntaxError("not a valid Spider file") + except struct.error: + raise SyntaxError("not a valid Spider file") + + h = (99,) + t # add 1 value : spider header index starts at 1 + iform = int(h[5]) + if iform != 1: + raise SyntaxError("not a Spider 2D image") + + self.size = int(h[12]), int(h[2]) # size in pixels (width, height) + self.istack = int(h[24]) + self.imgnumber = int(h[27]) + + if self.istack == 0 and self.imgnumber == 0: + # stk=0, img=0: a regular 2D image + offset = hdrlen + self._nimages = 1 + elif self.istack > 0 and self.imgnumber == 0: + # stk>0, img=0: Opening the stack for the first time + self.imgbytes = int(h[12]) * int(h[2]) * 4 + self.hdrlen = hdrlen + self._nimages = int(h[26]) + # Point to the first image in the stack + offset = hdrlen * 2 + self.imgnumber = 1 + elif self.istack == 0 and self.imgnumber > 0: + # stk=0, img>0: an image within the stack + offset = hdrlen + self.stkoffset + self.istack = 2 # So Image knows it's still a stack + else: + raise SyntaxError("inconsistent stack header values") + + if self.bigendian: + self.rawmode = "F;32BF" + else: + self.rawmode = "F;32F" + self.mode = "F" + + self.tile = [ + ("raw", (0, 0) + self.size, offset, + (self.rawmode, 0, 1))] + self.__fp = self.fp # FIXME: hack + + @property + def n_frames(self): + return self._nimages + + @property + def is_animated(self): + return self._nimages > 1 + + # 1st image index is zero (although SPIDER imgnumber starts at 1) + def tell(self): + if self.imgnumber < 1: + return 0 + else: + return self.imgnumber - 1 + + def seek(self, frame): + if self.istack == 0: + return + if frame >= self._nimages: + raise EOFError("attempt to seek past end of file") + self.stkoffset = self.hdrlen + frame * (self.hdrlen + self.imgbytes) + self.fp = self.__fp + self.fp.seek(self.stkoffset) + self._open() + + # returns a byte image after rescaling to 0..255 + def convert2byte(self, depth=255): + (minimum, maximum) = self.getextrema() + m = 1 + if maximum != minimum: + m = depth / (maximum-minimum) + b = -m * minimum + return self.point(lambda i, m=m, b=b: i * m + b).convert("L") + + # returns a ImageTk.PhotoImage object, after rescaling to 0..255 + def tkPhotoImage(self): + from PIL import ImageTk + return ImageTk.PhotoImage(self.convert2byte(), palette=256) + + +# -------------------------------------------------------------------- +# Image series + +# given a list of filenames, return a list of images +def loadImageSeries(filelist=None): + " create a list of Image.images for use in montage " + if filelist is None or len(filelist) < 1: + return + + imglist = [] + for img in filelist: + if not os.path.exists(img): + print("unable to find %s" % img) + continue + try: + im = Image.open(img).convert2byte() + except: + if not isSpiderImage(img): + print(img + " is not a Spider image file") + continue + im.info['filename'] = img + imglist.append(im) + return imglist + + +# -------------------------------------------------------------------- +# For saving images in Spider format + +def makeSpiderHeader(im): + nsam, nrow = im.size + lenbyt = nsam * 4 # There are labrec records in the header + labrec = 1024 / lenbyt + if 1024 % lenbyt != 0: + labrec += 1 + labbyt = labrec * lenbyt + hdr = [] + nvalues = int(labbyt / 4) + for i in range(nvalues): + hdr.append(0.0) + + if len(hdr) < 23: + return [] + + # NB these are Fortran indices + hdr[1] = 1.0 # nslice (=1 for an image) + hdr[2] = float(nrow) # number of rows per slice + hdr[5] = 1.0 # iform for 2D image + hdr[12] = float(nsam) # number of pixels per line + hdr[13] = float(labrec) # number of records in file header + hdr[22] = float(labbyt) # total number of bytes in header + hdr[23] = float(lenbyt) # record length in bytes + + # adjust for Fortran indexing + hdr = hdr[1:] + hdr.append(0.0) + # pack binary data into a string + hdrstr = [] + for v in hdr: + hdrstr.append(struct.pack('f', v)) + return hdrstr + + +def _save(im, fp, filename): + if im.mode[0] != "F": + im = im.convert('F') + + hdr = makeSpiderHeader(im) + if len(hdr) < 256: + raise IOError("Error creating Spider header") + + # write the SPIDER header + try: + fp = open(filename, 'wb') + except: + raise IOError("Unable to open %s for writing" % filename) + fp.writelines(hdr) + + rawmode = "F;32NF" # 32-bit native floating point + ImageFile._save(im, fp, [("raw", (0, 0)+im.size, 0, (rawmode, 0, 1))]) + + fp.close() + + +def _save_spider(im, fp, filename): + # get the filename extension and register it with Image + ext = os.path.splitext(filename)[1] + Image.register_extension("SPIDER", ext) + _save(im, fp, filename) + +# -------------------------------------------------------------------- + +Image.register_open(SpiderImageFile.format, SpiderImageFile) +Image.register_save(SpiderImageFile.format, _save_spider) + +if __name__ == "__main__": + + if not sys.argv[1:]: + print("Syntax: python SpiderImagePlugin.py Spiderimage [outfile]") + sys.exit() + + filename = sys.argv[1] + if not isSpiderImage(filename): + print("input image must be in Spider format") + sys.exit() + + outfile = "" + if len(sys.argv[1:]) > 1: + outfile = sys.argv[2] + + im = Image.open(filename) + print("image: " + str(im)) + print("format: " + str(im.format)) + print("size: " + str(im.size)) + print("mode: " + str(im.mode)) + print("max, min: ", end=' ') + print(im.getextrema()) + + if outfile != "": + # perform some image operation + im = im.transpose(Image.FLIP_LEFT_RIGHT) + print( + "saving a flipped version of %s as %s " % + (os.path.basename(filename), outfile)) + im.save(outfile, "SPIDER") diff --git a/server/www/packages/packages-darwin/x64/PIL/SunImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/SunImagePlugin.py new file mode 100644 index 0000000..af63144 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/SunImagePlugin.py @@ -0,0 +1,81 @@ +# +# The Python Imaging Library. +# $Id$ +# +# Sun image file handling +# +# History: +# 1995-09-10 fl Created +# 1996-05-28 fl Fixed 32-bit alignment +# 1998-12-29 fl Import ImagePalette module +# 2001-12-18 fl Fixed palette loading (from Jean-Claude Rimbault) +# +# Copyright (c) 1997-2001 by Secret Labs AB +# Copyright (c) 1995-1996 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + + +from PIL import Image, ImageFile, ImagePalette, _binary + +__version__ = "0.3" + +i32 = _binary.i32be + + +def _accept(prefix): + return len(prefix) >= 4 and i32(prefix) == 0x59a66a95 + + +## +# Image plugin for Sun raster files. + +class SunImageFile(ImageFile.ImageFile): + + format = "SUN" + format_description = "Sun Raster File" + + def _open(self): + + # HEAD + s = self.fp.read(32) + if i32(s) != 0x59a66a95: + raise SyntaxError("not an SUN raster file") + + offset = 32 + + self.size = i32(s[4:8]), i32(s[8:12]) + + depth = i32(s[12:16]) + if depth == 1: + self.mode, rawmode = "1", "1;I" + elif depth == 8: + self.mode = rawmode = "L" + elif depth == 24: + self.mode, rawmode = "RGB", "BGR" + else: + raise SyntaxError("unsupported mode") + + compression = i32(s[20:24]) + + if i32(s[24:28]) != 0: + length = i32(s[28:32]) + offset = offset + length + self.palette = ImagePalette.raw("RGB;L", self.fp.read(length)) + if self.mode == "L": + self.mode = rawmode = "P" + + stride = (((self.size[0] * depth + 7) // 8) + 3) & (~3) + + if compression == 1: + self.tile = [("raw", (0, 0)+self.size, offset, (rawmode, stride))] + elif compression == 2: + self.tile = [("sun_rle", (0, 0)+self.size, offset, rawmode)] + +# +# registry + +Image.register_open(SunImageFile.format, SunImageFile, _accept) + +Image.register_extension(SunImageFile.format, ".ras") diff --git a/server/www/packages/packages-darwin/x64/PIL/TarIO.py b/server/www/packages/packages-darwin/x64/PIL/TarIO.py new file mode 100644 index 0000000..4e5115b --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/TarIO.py @@ -0,0 +1,57 @@ +# +# The Python Imaging Library. +# $Id$ +# +# read files from within a tar file +# +# History: +# 95-06-18 fl Created +# 96-05-28 fl Open files in binary mode +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1995-96. +# +# See the README file for information on usage and redistribution. +# + +from PIL import ContainerIO + + +## +# A file object that provides read access to a given member of a TAR +# file. + +class TarIO(ContainerIO.ContainerIO): + + ## + # Create file object. + # + # @param tarfile Name of TAR file. + # @param file Name of member file. + + def __init__(self, tarfile, file): + + fh = open(tarfile, "rb") + + while True: + + s = fh.read(512) + if len(s) != 512: + raise IOError("unexpected end of tar file") + + name = s[:100].decode('utf-8') + i = name.find('\0') + if i == 0: + raise IOError("cannot find subfile") + if i > 0: + name = name[:i] + + size = int(s[124:135], 8) + + if file == name: + break + + fh.seek((size + 511) & (~511), 1) + + # Open region + ContainerIO.ContainerIO.__init__(self, fh, fh.tell(), size) diff --git a/server/www/packages/packages-darwin/x64/PIL/TgaImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/TgaImagePlugin.py new file mode 100644 index 0000000..a75ce29 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/TgaImagePlugin.py @@ -0,0 +1,198 @@ +# +# The Python Imaging Library. +# $Id$ +# +# TGA file handling +# +# History: +# 95-09-01 fl created (reads 24-bit files only) +# 97-01-04 fl support more TGA versions, including compressed images +# 98-07-04 fl fixed orientation and alpha layer bugs +# 98-09-11 fl fixed orientation for runlength decoder +# +# Copyright (c) Secret Labs AB 1997-98. +# Copyright (c) Fredrik Lundh 1995-97. +# +# See the README file for information on usage and redistribution. +# + + +from PIL import Image, ImageFile, ImagePalette, _binary + +__version__ = "0.3" + + +# +# -------------------------------------------------------------------- +# Read RGA file + +i8 = _binary.i8 +i16 = _binary.i16le + + +MODES = { + # map imagetype/depth to rawmode + (1, 8): "P", + (3, 1): "1", + (3, 8): "L", + (2, 16): "BGR;5", + (2, 24): "BGR", + (2, 32): "BGRA", +} + + +## +# Image plugin for Targa files. + +class TgaImageFile(ImageFile.ImageFile): + + format = "TGA" + format_description = "Targa" + + def _open(self): + + # process header + s = self.fp.read(18) + + idlen = i8(s[0]) + + colormaptype = i8(s[1]) + imagetype = i8(s[2]) + + depth = i8(s[16]) + + flags = i8(s[17]) + + self.size = i16(s[12:]), i16(s[14:]) + + # validate header fields + if colormaptype not in (0, 1) or\ + self.size[0] <= 0 or self.size[1] <= 0 or\ + depth not in (1, 8, 16, 24, 32): + raise SyntaxError("not a TGA file") + + # image mode + if imagetype in (3, 11): + self.mode = "L" + if depth == 1: + self.mode = "1" # ??? + elif imagetype in (1, 9): + self.mode = "P" + elif imagetype in (2, 10): + self.mode = "RGB" + if depth == 32: + self.mode = "RGBA" + else: + raise SyntaxError("unknown TGA mode") + + # orientation + orientation = flags & 0x30 + if orientation == 0x20: + orientation = 1 + elif not orientation: + orientation = -1 + else: + raise SyntaxError("unknown TGA orientation") + + self.info["orientation"] = orientation + + if imagetype & 8: + self.info["compression"] = "tga_rle" + + if idlen: + self.info["id_section"] = self.fp.read(idlen) + + if colormaptype: + # read palette + start, size, mapdepth = i16(s[3:]), i16(s[5:]), i16(s[7:]) + if mapdepth == 16: + self.palette = ImagePalette.raw( + "BGR;16", b"\0"*2*start + self.fp.read(2*size)) + elif mapdepth == 24: + self.palette = ImagePalette.raw( + "BGR", b"\0"*3*start + self.fp.read(3*size)) + elif mapdepth == 32: + self.palette = ImagePalette.raw( + "BGRA", b"\0"*4*start + self.fp.read(4*size)) + + # setup tile descriptor + try: + rawmode = MODES[(imagetype & 7, depth)] + if imagetype & 8: + # compressed + self.tile = [("tga_rle", (0, 0)+self.size, + self.fp.tell(), (rawmode, orientation, depth))] + else: + self.tile = [("raw", (0, 0)+self.size, + self.fp.tell(), (rawmode, 0, orientation))] + except KeyError: + pass # cannot decode + +# +# -------------------------------------------------------------------- +# Write TGA file + +o8 = _binary.o8 +o16 = _binary.o16le +o32 = _binary.o32le + +SAVE = { + "1": ("1", 1, 0, 3), + "L": ("L", 8, 0, 3), + "P": ("P", 8, 1, 1), + "RGB": ("BGR", 24, 0, 2), + "RGBA": ("BGRA", 32, 0, 2), +} + + +def _save(im, fp, filename, check=0): + + try: + rawmode, bits, colormaptype, imagetype = SAVE[im.mode] + except KeyError: + raise IOError("cannot write mode %s as TGA" % im.mode) + + if check: + return check + + if colormaptype: + colormapfirst, colormaplength, colormapentry = 0, 256, 24 + else: + colormapfirst, colormaplength, colormapentry = 0, 0, 0 + + if im.mode == "RGBA": + flags = 8 + else: + flags = 0 + + orientation = im.info.get("orientation", -1) + if orientation > 0: + flags = flags | 0x20 + + fp.write(b"\000" + + o8(colormaptype) + + o8(imagetype) + + o16(colormapfirst) + + o16(colormaplength) + + o8(colormapentry) + + o16(0) + + o16(0) + + o16(im.size[0]) + + o16(im.size[1]) + + o8(bits) + + o8(flags)) + + if colormaptype: + fp.write(im.im.getpalette("RGB", "BGR")) + + ImageFile._save( + im, fp, [("raw", (0, 0) + im.size, 0, (rawmode, 0, orientation))]) + +# +# -------------------------------------------------------------------- +# Registry + +Image.register_open(TgaImageFile.format, TgaImageFile) +Image.register_save(TgaImageFile.format, _save) + +Image.register_extension(TgaImageFile.format, ".tga") diff --git a/server/www/packages/packages-darwin/x64/PIL/TiffImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/TiffImagePlugin.py new file mode 100644 index 0000000..096be6f --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/TiffImagePlugin.py @@ -0,0 +1,1476 @@ +# +# The Python Imaging Library. +# $Id$ +# +# TIFF file handling +# +# TIFF is a flexible, if somewhat aged, image file format originally +# defined by Aldus. Although TIFF supports a wide variety of pixel +# layouts and compression methods, the name doesn't really stand for +# "thousands of incompatible file formats," it just feels that way. +# +# To read TIFF data from a stream, the stream must be seekable. For +# progressive decoding, make sure to use TIFF files where the tag +# directory is placed first in the file. +# +# History: +# 1995-09-01 fl Created +# 1996-05-04 fl Handle JPEGTABLES tag +# 1996-05-18 fl Fixed COLORMAP support +# 1997-01-05 fl Fixed PREDICTOR support +# 1997-08-27 fl Added support for rational tags (from Perry Stoll) +# 1998-01-10 fl Fixed seek/tell (from Jan Blom) +# 1998-07-15 fl Use private names for internal variables +# 1999-06-13 fl Rewritten for PIL 1.0 (1.0) +# 2000-10-11 fl Additional fixes for Python 2.0 (1.1) +# 2001-04-17 fl Fixed rewind support (seek to frame 0) (1.2) +# 2001-05-12 fl Added write support for more tags (from Greg Couch) (1.3) +# 2001-12-18 fl Added workaround for broken Matrox library +# 2002-01-18 fl Don't mess up if photometric tag is missing (D. Alan Stewart) +# 2003-05-19 fl Check FILLORDER tag +# 2003-09-26 fl Added RGBa support +# 2004-02-24 fl Added DPI support; fixed rational write support +# 2005-02-07 fl Added workaround for broken Corel Draw 10 files +# 2006-01-09 fl Added support for float/double tags (from Russell Nelson) +# +# Copyright (c) 1997-2006 by Secret Labs AB. All rights reserved. +# Copyright (c) 1995-1997 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from __future__ import division, print_function + +from PIL import Image, ImageFile +from PIL import ImagePalette +from PIL import _binary +from PIL import TiffTags + +import collections +from fractions import Fraction +from numbers import Number, Rational + +import io +import itertools +import os +import struct +import sys +import warnings + +from .TiffTags import TYPES, TagInfo + + +__version__ = "1.3.5" +DEBUG = False # Needs to be merged with the new logging approach. + +# Set these to true to force use of libtiff for reading or writing. +READ_LIBTIFF = False +WRITE_LIBTIFF = False +IFD_LEGACY_API = True + +II = b"II" # little-endian (Intel style) +MM = b"MM" # big-endian (Motorola style) + +i8 = _binary.i8 +o8 = _binary.o8 + +# +# -------------------------------------------------------------------- +# Read TIFF files + +# a few tag names, just to make the code below a bit more readable +IMAGEWIDTH = 256 +IMAGELENGTH = 257 +BITSPERSAMPLE = 258 +COMPRESSION = 259 +PHOTOMETRIC_INTERPRETATION = 262 +FILLORDER = 266 +IMAGEDESCRIPTION = 270 +STRIPOFFSETS = 273 +SAMPLESPERPIXEL = 277 +ROWSPERSTRIP = 278 +STRIPBYTECOUNTS = 279 +X_RESOLUTION = 282 +Y_RESOLUTION = 283 +PLANAR_CONFIGURATION = 284 +RESOLUTION_UNIT = 296 +SOFTWARE = 305 +DATE_TIME = 306 +ARTIST = 315 +PREDICTOR = 317 +COLORMAP = 320 +TILEOFFSETS = 324 +EXTRASAMPLES = 338 +SAMPLEFORMAT = 339 +JPEGTABLES = 347 +COPYRIGHT = 33432 +IPTC_NAA_CHUNK = 33723 # newsphoto properties +PHOTOSHOP_CHUNK = 34377 # photoshop properties +ICCPROFILE = 34675 +EXIFIFD = 34665 +XMP = 700 + +# https://github.com/imagej/ImageJA/blob/master/src/main/java/ij/io/TiffDecoder.java +IMAGEJ_META_DATA_BYTE_COUNTS = 50838 +IMAGEJ_META_DATA = 50839 + +COMPRESSION_INFO = { + # Compression => pil compression name + 1: "raw", + 2: "tiff_ccitt", + 3: "group3", + 4: "group4", + 5: "tiff_lzw", + 6: "tiff_jpeg", # obsolete + 7: "jpeg", + 8: "tiff_adobe_deflate", + 32771: "tiff_raw_16", # 16-bit padding + 32773: "packbits", + 32809: "tiff_thunderscan", + 32946: "tiff_deflate", + 34676: "tiff_sgilog", + 34677: "tiff_sgilog24", +} + +COMPRESSION_INFO_REV = dict([(v, k) for (k, v) in COMPRESSION_INFO.items()]) + +OPEN_INFO = { + # (ByteOrder, PhotoInterpretation, SampleFormat, FillOrder, BitsPerSample, + # ExtraSamples) => mode, rawmode + (II, 0, (1,), 1, (1,), ()): ("1", "1;I"), + (MM, 0, (1,), 1, (1,), ()): ("1", "1;I"), + (II, 0, (1,), 2, (1,), ()): ("1", "1;IR"), + (MM, 0, (1,), 2, (1,), ()): ("1", "1;IR"), + (II, 0, (1,), 1, (8,), ()): ("L", "L;I"), + (MM, 0, (1,), 1, (8,), ()): ("L", "L;I"), + (II, 0, (1,), 2, (8,), ()): ("L", "L;IR"), + (MM, 0, (1,), 2, (8,), ()): ("L", "L;IR"), + (II, 0, (3,), 1, (32,), ()): ("F", "F;32F"), + (MM, 0, (3,), 1, (32,), ()): ("F", "F;32BF"), + (II, 1, (1,), 1, (1,), ()): ("1", "1"), + (MM, 1, (1,), 1, (1,), ()): ("1", "1"), + (II, 1, (1,), 1, (4,), ()): ("L", "L;4"), + # ? + (II, 1, (1,), 2, (1,), ()): ("1", "1;R"), + (MM, 1, (1,), 2, (1,), ()): ("1", "1;R"), + (II, 1, (1,), 1, (8,), ()): ("L", "L"), + (MM, 1, (1,), 1, (8,), ()): ("L", "L"), + (II, 1, (1,), 1, (8, 8), (2,)): ("LA", "LA"), + (MM, 1, (1,), 1, (8, 8), (2,)): ("LA", "LA"), + (II, 1, (1,), 2, (8,), ()): ("L", "L;R"), + (MM, 1, (1,), 2, (8,), ()): ("L", "L;R"), + (II, 1, (1,), 1, (12,), ()): ("I;16", "I;12"), + (II, 1, (1,), 1, (16,), ()): ("I;16", "I;16"), + (MM, 1, (1,), 1, (16,), ()): ("I;16B", "I;16B"), + (II, 1, (2,), 1, (16,), ()): ("I;16S", "I;16S"), + (MM, 1, (2,), 1, (16,), ()): ("I;16BS", "I;16BS"), + (II, 1, (1,), 1, (32,), ()): ("I", "I;32N"), + (II, 1, (2,), 1, (32,), ()): ("I", "I;32S"), + (MM, 1, (2,), 1, (32,), ()): ("I;32BS", "I;32BS"), + (II, 1, (3,), 1, (32,), ()): ("F", "F;32F"), + (MM, 1, (3,), 1, (32,), ()): ("F", "F;32BF"), + (II, 2, (1,), 1, (8, 8, 8), ()): ("RGB", "RGB"), + (MM, 2, (1,), 1, (8, 8, 8), ()): ("RGB", "RGB"), + (II, 2, (1,), 2, (8, 8, 8), ()): ("RGB", "RGB;R"), + (MM, 2, (1,), 2, (8, 8, 8), ()): ("RGB", "RGB;R"), + (II, 2, (1,), 1, (8, 8, 8, 8), ()): ("RGBA", "RGBA"), # missing ExtraSamples + (MM, 2, (1,), 1, (8, 8, 8, 8), ()): ("RGBA", "RGBA"), # missing ExtraSamples + (II, 2, (1,), 1, (8, 8, 8, 8), (0,)): ("RGBX", "RGBX"), + (MM, 2, (1,), 1, (8, 8, 8, 8), (0,)): ("RGBX", "RGBX"), + (II, 2, (1,), 1, (8, 8, 8, 8), (1,)): ("RGBA", "RGBa"), + (MM, 2, (1,), 1, (8, 8, 8, 8), (1,)): ("RGBA", "RGBa"), + (II, 2, (1,), 1, (8, 8, 8, 8), (2,)): ("RGBA", "RGBA"), + (MM, 2, (1,), 1, (8, 8, 8, 8), (2,)): ("RGBA", "RGBA"), + (II, 2, (1,), 1, (8, 8, 8, 8), (999,)): ("RGBA", "RGBA"), # Corel Draw 10 + (MM, 2, (1,), 1, (8, 8, 8, 8), (999,)): ("RGBA", "RGBA"), # Corel Draw 10 + (II, 3, (1,), 1, (1,), ()): ("P", "P;1"), + (MM, 3, (1,), 1, (1,), ()): ("P", "P;1"), + (II, 3, (1,), 2, (1,), ()): ("P", "P;1R"), + (MM, 3, (1,), 2, (1,), ()): ("P", "P;1R"), + (II, 3, (1,), 1, (2,), ()): ("P", "P;2"), + (MM, 3, (1,), 1, (2,), ()): ("P", "P;2"), + (II, 3, (1,), 2, (2,), ()): ("P", "P;2R"), + (MM, 3, (1,), 2, (2,), ()): ("P", "P;2R"), + (II, 3, (1,), 1, (4,), ()): ("P", "P;4"), + (MM, 3, (1,), 1, (4,), ()): ("P", "P;4"), + (II, 3, (1,), 2, (4,), ()): ("P", "P;4R"), + (MM, 3, (1,), 2, (4,), ()): ("P", "P;4R"), + (II, 3, (1,), 1, (8,), ()): ("P", "P"), + (MM, 3, (1,), 1, (8,), ()): ("P", "P"), + (II, 3, (1,), 1, (8, 8), (2,)): ("PA", "PA"), + (MM, 3, (1,), 1, (8, 8), (2,)): ("PA", "PA"), + (II, 3, (1,), 2, (8,), ()): ("P", "P;R"), + (MM, 3, (1,), 2, (8,), ()): ("P", "P;R"), + (II, 5, (1,), 1, (8, 8, 8, 8), ()): ("CMYK", "CMYK"), + (MM, 5, (1,), 1, (8, 8, 8, 8), ()): ("CMYK", "CMYK"), + (II, 6, (1,), 1, (8, 8, 8), ()): ("YCbCr", "YCbCr"), + (MM, 6, (1,), 1, (8, 8, 8), ()): ("YCbCr", "YCbCr"), + (II, 8, (1,), 1, (8, 8, 8), ()): ("LAB", "LAB"), + (MM, 8, (1,), 1, (8, 8, 8), ()): ("LAB", "LAB"), +} + +PREFIXES = [b"MM\000\052", b"II\052\000", b"II\xBC\000"] + + +def _accept(prefix): + return prefix[:4] in PREFIXES + + +def _limit_rational(val, max_val): + inv = abs(val) > 1 + n_d = IFDRational(1 / val if inv else val).limit_rational(max_val) + return n_d[::-1] if inv else n_d + +## +# Wrapper for TIFF IFDs. + +_load_dispatch = {} +_write_dispatch = {} + +class IFDRational(Rational): + """ Implements a rational class where 0/0 is a legal value to match + the in the wild use of exif rationals. + + e.g., DigitalZoomRatio - 0.00/0.00 indicates that no digital zoom was used + """ + + """ If the denominator is 0, store this as a float('nan'), otherwise store + as a fractions.Fraction(). Delegate as appropriate + + """ + + __slots__ = ('_numerator', '_denominator', '_val') + + def __init__(self, value, denominator=1): + """ + :param value: either an integer numerator, a + float/rational/other number, or an IFDRational + :param denominator: Optional integer denominator + """ + self._denominator = denominator + self._numerator = value + self._val = float(1) + + if type(value) == Fraction: + self._numerator = value.numerator + self._denominator = value.denominator + self._val = value + + if type(value) == IFDRational: + self._denominator = value.denominator + self._numerator = value.numerator + self._val = value._val + return + + if denominator == 0: + self._val = float('nan') + return + + + elif denominator == 1: + if sys.hexversion < 0x2070000 and type(value) == float: + # python 2.6 is different. + self._val = Fraction.from_float(value) + else: + self._val = Fraction(value) + else: + self._val = Fraction(value, denominator) + + @property + def numerator(a): + return a._numerator + + @property + def denominator(a): + return a._denominator + + + def limit_rational(self, max_denominator): + """ + + :param max_denominator: Integer, the maximum denominator value + :returns: Tuple of (numerator, denominator) + """ + + if self.denominator == 0: + return (self.numerator, self.denominator) + + f = self._val.limit_denominator(max_denominator) + return (f.numerator, f.denominator) + + def __repr__(self): + return str(float(self._val)) + + def __hash__(self): + return self._val.__hash__() + + def __eq__(self,other): + return self._val == other + + def _delegate(op): + def delegate(self, *args): + return getattr(self._val,op)(*args) + return delegate + + """ a = ['add','radd', 'sub', 'rsub','div', 'rdiv', 'mul', 'rmul', + 'truediv', 'rtruediv', 'floordiv', + 'rfloordiv','mod','rmod', 'pow','rpow', 'pos', 'neg', + 'abs', 'trunc', 'lt', 'gt', 'le', 'ge', 'nonzero', + 'ceil', 'floor', 'round'] + print "\n".join("__%s__ = _delegate('__%s__')" % (s,s) for s in a) + """ + + __add__ = _delegate('__add__') + __radd__ = _delegate('__radd__') + __sub__ = _delegate('__sub__') + __rsub__ = _delegate('__rsub__') + __div__ = _delegate('__div__') + __rdiv__ = _delegate('__rdiv__') + __mul__ = _delegate('__mul__') + __rmul__ = _delegate('__rmul__') + __truediv__ = _delegate('__truediv__') + __rtruediv__ = _delegate('__rtruediv__') + __floordiv__ = _delegate('__floordiv__') + __rfloordiv__ = _delegate('__rfloordiv__') + __mod__ = _delegate('__mod__') + __rmod__ = _delegate('__rmod__') + __pow__ = _delegate('__pow__') + __rpow__ = _delegate('__rpow__') + __pos__ = _delegate('__pos__') + __neg__ = _delegate('__neg__') + __abs__ = _delegate('__abs__') + __trunc__ = _delegate('__trunc__') + __lt__ = _delegate('__lt__') + __gt__ = _delegate('__gt__') + __le__ = _delegate('__le__') + __ge__ = _delegate('__ge__') + __nonzero__ = _delegate('__nonzero__') + __ceil__ = _delegate('__ceil__') + __floor__ = _delegate('__floor__') + __round__ = _delegate('__round__') + + + +class ImageFileDirectory_v2(collections.MutableMapping): + """This class represents a TIFF tag directory. To speed things up, we + don't decode tags unless they're asked for. + + Exposes a dictionary interface of the tags in the directory:: + + ifd = ImageFileDirectory_v2() + ifd[key] = 'Some Data' + ifd.tagtype[key] = 2 + print(ifd[key]) + 'Some Data' + + Individual values are returned as the strings or numbers, sequences are + returned as tuples of the values. + + The tiff metadata type of each item is stored in a dictionary of + tag types in + `~PIL.TiffImagePlugin.ImageFileDirectory_v2.tagtype`. The types + are read from a tiff file, guessed from the type added, or added + manually. + + Data Structures: + + * self.tagtype = {} + + * Key: numerical tiff tag number + * Value: integer corresponding to the data type from `~PIL.TiffTags.TYPES` + + .. versionadded:: 3.0.0 + """ + """ + Documentation: + + 'internal' data structures: + * self._tags_v2 = {} Key: numerical tiff tag number + Value: decoded data, as tuple for multiple values + * self._tagdata = {} Key: numerical tiff tag number + Value: undecoded byte string from file + * self._tags_v1 = {} Key: numerical tiff tag number + Value: decoded data in the v1 format + + Tags will be found in the private attributes self._tagdata, and in + self._tags_v2 once decoded. + + Self.legacy_api is a value for internal use, and shouldn't be + changed from outside code. In cooperation with the + ImageFileDirectory_v1 class, if legacy_api is true, then decoded + tags will be populated into both _tags_v1 and _tags_v2. _Tags_v2 + will be used if this IFD is used in the TIFF save routine. Tags + should be read from tags_v1 if legacy_api == true. + + """ + + def __init__(self, ifh=b"II\052\0\0\0\0\0", prefix=None): + """Initialize an ImageFileDirectory. + + To construct an ImageFileDirectory from a real file, pass the 8-byte + magic header to the constructor. To only set the endianness, pass it + as the 'prefix' keyword argument. + + :param ifh: One of the accepted magic headers (cf. PREFIXES); also sets + endianness. + :param prefix: Override the endianness of the file. + """ + if ifh[:4] not in PREFIXES: + raise SyntaxError("not a TIFF file (header %r not valid)" % ifh) + self._prefix = prefix if prefix is not None else ifh[:2] + if self._prefix == MM: + self._endian = ">" + elif self._prefix == II: + self._endian = "<" + else: + raise SyntaxError("not a TIFF IFD") + self.reset() + self.next, = self._unpack("L", ifh[4:]) + self._legacy_api = False + + prefix = property(lambda self: self._prefix) + offset = property(lambda self: self._offset) + legacy_api = property(lambda self: self._legacy_api) + + @legacy_api.setter + def legacy_api(self, value): + raise Exception("Not allowing setting of legacy api") + + def reset(self): + self._tags_v1 = {} # will remain empty if legacy_api is false + self._tags_v2 = {} # main tag storage + self._tagdata = {} + self.tagtype = {} # added 2008-06-05 by Florian Hoech + self._next = None + self._offset = None + + def __str__(self): + return str(dict(self)) + + def as_dict(self): + """Return a dictionary of the image's tags. + + use `dict(ifd)` instead. + + .. deprecated:: 3.0.0 + """ + # FIXME Deprecate: use dict(self) + return dict(self) + + def named(self): + """ + :returns: dict of name|key: value + + Returns the complete tag dictionary, with named tags where possible. + """ + return dict((TiffTags.lookup(code).name, value) + for code, value in self.items()) + + def __len__(self): + return len(set(self._tagdata) | set(self._tags_v2)) + + def __getitem__(self, tag): + if tag not in self._tags_v2: # unpack on the fly + data = self._tagdata[tag] + typ = self.tagtype[tag] + size, handler = self._load_dispatch[typ] + self[tag] = handler(self, data, self.legacy_api) # check type + val = self._tags_v2[tag] + if self.legacy_api and not isinstance(val, (tuple, bytes)): + val = val, + return val + + def __contains__(self, tag): + return tag in self._tags_v2 or tag in self._tagdata + + if bytes is str: + def has_key(self, tag): + return tag in self + + def __setitem__(self, tag, value): + self._setitem(tag, value, self.legacy_api) + + def _setitem(self, tag, value, legacy_api): + basetypes = (Number, bytes, str) + if bytes is str: + basetypes += unicode, + + info = TiffTags.lookup(tag) + values = [value] if isinstance(value, basetypes) else value + + if tag not in self.tagtype: + if info.type: + self.tagtype[tag] = info.type + else: + self.tagtype[tag] = 7 + if all(isinstance(v, IFDRational) for v in values): + self.tagtype[tag] = 5 + elif all(isinstance(v, int) for v in values): + if all(v < 2 ** 16 for v in values): + self.tagtype[tag] = 3 + else: + self.tagtype[tag] = 4 + elif all(isinstance(v, float) for v in values): + self.tagtype[tag] = 12 + else: + if bytes is str: + # Never treat data as binary by default on Python 2. + self.tagtype[tag] = 2 + else: + if all(isinstance(v, str) for v in values): + self.tagtype[tag] = 2 + + if self.tagtype[tag] == 7 and bytes is not str: + values = [value.encode("ascii", 'replace') if isinstance(value, str) else value + for value in values] + + values = tuple(info.cvt_enum(value) for value in values) + + dest = self._tags_v1 if legacy_api else self._tags_v2 + + if info.length == 1: + if legacy_api and self.tagtype[tag] in [5, 10]: + values = values, + dest[tag], = values + else: + dest[tag] = values + + def __delitem__(self, tag): + self._tags_v2.pop(tag, None) + self._tags_v1.pop(tag, None) + self._tagdata.pop(tag, None) + + def __iter__(self): + return iter(set(self._tagdata) | set(self._tags_v2)) + + def _unpack(self, fmt, data): + return struct.unpack(self._endian + fmt, data) + + def _pack(self, fmt, *values): + return struct.pack(self._endian + fmt, *values) + + def _register_loader(idx, size): + def decorator(func): + from PIL.TiffTags import TYPES + if func.__name__.startswith("load_"): + TYPES[idx] = func.__name__[5:].replace("_", " ") + _load_dispatch[idx] = size, func + return func + return decorator + + def _register_writer(idx): + def decorator(func): + _write_dispatch[idx] = func + return func + return decorator + + def _register_basic(idx_fmt_name): + from PIL.TiffTags import TYPES + idx, fmt, name = idx_fmt_name + TYPES[idx] = name + size = struct.calcsize("=" + fmt) + _load_dispatch[idx] = size, lambda self, data, legacy_api=True: ( + self._unpack("{0}{1}".format(len(data) // size, fmt), data)) + _write_dispatch[idx] = lambda self, *values: ( + b"".join(self._pack(fmt, value) for value in values)) + + list(map(_register_basic, + [(3, "H", "short"), (4, "L", "long"), + (6, "b", "signed byte"), (8, "h", "signed short"), + (9, "l", "signed long"), (11, "f", "float"), (12, "d", "double")])) + + @_register_loader(1, 1) # Basic type, except for the legacy API. + def load_byte(self, data, legacy_api=True): + return (data if legacy_api else + tuple(map(ord, data) if bytes is str else data)) + + @_register_writer(1) # Basic type, except for the legacy API. + def write_byte(self, data): + return data + + @_register_loader(2, 1) + def load_string(self, data, legacy_api=True): + if data.endswith(b"\0"): + data = data[:-1] + return data.decode("latin-1", "replace") + + @_register_writer(2) + def write_string(self, value): + # remerge of https://github.com/python-pillow/Pillow/pull/1416 + if sys.version_info[0] == 2: + value = value.decode('ascii', 'replace') + return b"" + value.encode('ascii', 'replace') + b"\0" + + @_register_loader(5, 8) + def load_rational(self, data, legacy_api=True): + vals = self._unpack("{0}L".format(len(data) // 4), data) + combine = lambda a, b: (a, b) if legacy_api else IFDRational(a, b) + return tuple(combine(num, denom) + for num, denom in zip(vals[::2], vals[1::2])) + + @_register_writer(5) + def write_rational(self, *values): + return b"".join(self._pack("2L", *_limit_rational(frac, 2 ** 31)) + for frac in values) + + @_register_loader(7, 1) + def load_undefined(self, data, legacy_api=True): + return data + + @_register_writer(7) + def write_undefined(self, value): + return value + + @_register_loader(10, 8) + def load_signed_rational(self, data, legacy_api=True): + vals = self._unpack("{0}l".format(len(data) // 4), data) + combine = lambda a, b: (a, b) if legacy_api else IFDRational(a, b) + return tuple(combine(num, denom) + for num, denom in zip(vals[::2], vals[1::2])) + + @_register_writer(10) + def write_signed_rational(self, *values): + return b"".join(self._pack("2L", *_limit_rational(frac, 2 ** 30)) + for frac in values) + + def _ensure_read(self, fp, size): + ret = fp.read(size) + if len(ret) != size: + raise IOError("Corrupt EXIF data. " + + "Expecting to read %d bytes but only got %d. " % + (size, len(ret))) + return ret + + def load(self, fp): + + self.reset() + self._offset = fp.tell() + + try: + for i in range(self._unpack("H", self._ensure_read(fp, 2))[0]): + tag, typ, count, data = self._unpack("HHL4s", self._ensure_read(fp, 12)) + if DEBUG: + tagname = TiffTags.lookup(tag).name + typname = TYPES.get(typ, "unknown") + print("tag: %s (%d) - type: %s (%d)" % + (tagname, tag, typname, typ), end=" ") + + try: + unit_size, handler = self._load_dispatch[typ] + except KeyError: + if DEBUG: + print("- unsupported type", typ) + continue # ignore unsupported type + size = count * unit_size + if size > 4: + here = fp.tell() + offset, = self._unpack("L", data) + if DEBUG: + print("Tag Location: %s - Data Location: %s" % + (here, offset), end=" ") + fp.seek(offset) + data = ImageFile._safe_read(fp, size) + fp.seek(here) + else: + data = data[:size] + + if len(data) != size: + warnings.warn("Possibly corrupt EXIF data. " + "Expecting to read %d bytes but only got %d. " + "Skipping tag %s" % (size, len(data), tag)) + continue + + self._tagdata[tag] = data + self.tagtype[tag] = typ + + if DEBUG: + if size > 32: + print("- value: " % size) + else: + print("- value:", self[tag]) + + self.next, = self._unpack("L", self._ensure_read(fp, 4)) + except IOError as msg: + warnings.warn(str(msg)) + return + + def save(self, fp): + + if fp.tell() == 0: # skip TIFF header on subsequent pages + # tiff header -- PIL always starts the first IFD at offset 8 + fp.write(self._prefix + self._pack("HL", 42, 8)) + + # FIXME What about tagdata? + fp.write(self._pack("H", len(self._tags_v2))) + + entries = [] + offset = fp.tell() + len(self._tags_v2) * 12 + 4 + stripoffsets = None + + # pass 1: convert tags to binary format + # always write tags in ascending order + for tag, value in sorted(self._tags_v2.items()): + if tag == STRIPOFFSETS: + stripoffsets = len(entries) + typ = self.tagtype.get(tag) + if DEBUG: + print("Tag %s, Type: %s, Value: %s" % (tag, typ, value)) + values = value if isinstance(value, tuple) else (value,) + data = self._write_dispatch[typ](self, *values) + if DEBUG: + tagname = TiffTags.lookup(tag).name + typname = TYPES.get(typ, "unknown") + print("save: %s (%d) - type: %s (%d)" % + (tagname, tag, typname, typ), end=" ") + if len(data) >= 16: + print("- value: " % len(data)) + else: + print("- value:", values) + + # count is sum of lengths for string and arbitrary data + count = len(data) if typ in [2, 7] else len(values) + # figure out if data fits into the entry + if len(data) <= 4: + entries.append((tag, typ, count, data.ljust(4, b"\0"), b"")) + else: + entries.append((tag, typ, count, self._pack("L", offset), data)) + offset += (len(data) + 1) // 2 * 2 # pad to word + + # update strip offset data to point beyond auxiliary data + if stripoffsets is not None: + tag, typ, count, value, data = entries[stripoffsets] + if data: + raise NotImplementedError( + "multistrip support not yet implemented") + value = self._pack("L", self._unpack("L", value)[0] + offset) + entries[stripoffsets] = tag, typ, count, value, data + + # pass 2: write entries to file + for tag, typ, count, value, data in entries: + if DEBUG > 1: + print(tag, typ, count, repr(value), repr(data)) + fp.write(self._pack("HHL4s", tag, typ, count, value)) + + # -- overwrite here for multi-page -- + fp.write(b"\0\0\0\0") # end of entries + + # pass 3: write auxiliary data to file + for tag, typ, count, value, data in entries: + fp.write(data) + if len(data) & 1: + fp.write(b"\0") + + return offset + +ImageFileDirectory_v2._load_dispatch = _load_dispatch +ImageFileDirectory_v2._write_dispatch = _write_dispatch +for idx, name in TYPES.items(): + name = name.replace(" ", "_") + setattr(ImageFileDirectory_v2, "load_" + name, _load_dispatch[idx][1]) + setattr(ImageFileDirectory_v2, "write_" + name, _write_dispatch[idx]) +del _load_dispatch, _write_dispatch, idx, name + + +# Legacy ImageFileDirectory support. +class ImageFileDirectory_v1(ImageFileDirectory_v2): + """This class represents the **legacy** interface to a TIFF tag directory. + + Exposes a dictionary interface of the tags in the directory:: + + ifd = ImageFileDirectory_v1() + ifd[key] = 'Some Data' + ifd.tagtype[key] = 2 + print ifd[key] + ('Some Data',) + + Also contains a dictionary of tag types as read from the tiff image file, + `~PIL.TiffImagePlugin.ImageFileDirectory_v1.tagtype`. + + Values are returned as a tuple. + + .. deprecated:: 3.0.0 + """ + def __init__(self, *args, **kwargs): + ImageFileDirectory_v2.__init__(self, *args, **kwargs) + self._legacy_api = True + + tags = property(lambda self: self._tags_v1) + tagdata = property(lambda self: self._tagdata) + + @classmethod + def from_v2(cls, original): + """ Returns an + :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1` + instance with the same data as is contained in the original + :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2` + instance. + + :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1` + + """ + + ifd = cls(prefix=original.prefix) + ifd._tagdata = original._tagdata + ifd.tagtype = original.tagtype + ifd.next = original.next # an indicator for multipage tiffs + return ifd + + def to_v2(self): + """ Returns an + :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2` + instance with the same data as is contained in the original + :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1` + instance. + + :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2` + + """ + + ifd = ImageFileDirectory_v2(prefix=self.prefix) + ifd._tagdata = dict(self._tagdata) + ifd.tagtype = dict(self.tagtype) + ifd._tags_v2 = dict(self._tags_v2) + return ifd + + def __contains__(self, tag): + return tag in self._tags_v1 or tag in self._tagdata + + def __len__(self): + return len(set(self._tagdata) | set(self._tags_v1)) + + def __iter__(self): + return iter(set(self._tagdata) | set(self._tags_v1)) + + def __setitem__(self, tag, value): + for legacy_api in (False, True): + self._setitem(tag, value, legacy_api) + + def __getitem__(self, tag): + if tag not in self._tags_v1: # unpack on the fly + data = self._tagdata[tag] + typ = self.tagtype[tag] + size, handler = self._load_dispatch[typ] + for legacy in (False, True): + self._setitem(tag, handler(self, data, legacy), legacy) + val = self._tags_v1[tag] + if not isinstance(val, (tuple, bytes)): + val = val, + return val + + +# undone -- switch this pointer when IFD_LEGACY_API == False +ImageFileDirectory = ImageFileDirectory_v1 + + +## +# Image plugin for TIFF files. + +class TiffImageFile(ImageFile.ImageFile): + + format = "TIFF" + format_description = "Adobe TIFF" + + def _open(self): + "Open the first image in a TIFF file" + + # Header + ifh = self.fp.read(8) + + # image file directory (tag dictionary) + self.tag_v2 = ImageFileDirectory_v2(ifh) + + # legacy tag/ifd entries will be filled in later + self.tag = self.ifd = None + + # setup frame pointers + self.__first = self.__next = self.tag_v2.next + self.__frame = -1 + self.__fp = self.fp + self._frame_pos = [] + self._n_frames = None + self._is_animated = None + + if DEBUG: + print("*** TiffImageFile._open ***") + print("- __first:", self.__first) + print("- ifh: ", ifh) + + # and load the first frame + self._seek(0) + + @property + def n_frames(self): + if self._n_frames is None: + current = self.tell() + try: + while True: + self._seek(self.tell() + 1) + except EOFError: + self._n_frames = self.tell() + 1 + self.seek(current) + return self._n_frames + + @property + def is_animated(self): + if self._is_animated is None: + current = self.tell() + + try: + self.seek(1) + self._is_animated = True + except EOFError: + self._is_animated = False + + self.seek(current) + return self._is_animated + + def seek(self, frame): + "Select a given frame as current image" + self._seek(max(frame, 0)) # Questionable backwards compatibility. + # Create a new core image object on second and + # subsequent frames in the image. Image may be + # different size/mode. + Image._decompression_bomb_check(self.size) + self.im = Image.core.new(self.mode, self.size) + + def _seek(self, frame): + self.fp = self.__fp + while len(self._frame_pos) <= frame: + if not self.__next: + raise EOFError("no more images in TIFF file") + if DEBUG: + print("Seeking to frame %s, on frame %s, " + "__next %s, location: %s" % + (frame, self.__frame, self.__next, self.fp.tell())) + # reset python3 buffered io handle in case fp + # was passed to libtiff, invalidating the buffer + self.fp.tell() + self.fp.seek(self.__next) + self._frame_pos.append(self.__next) + if DEBUG: + print("Loading tags, location: %s" % self.fp.tell()) + self.tag_v2.load(self.fp) + self.__next = self.tag_v2.next + self.__frame += 1 + self.fp.seek(self._frame_pos[frame]) + self.tag_v2.load(self.fp) + # fill the legacy tag/ifd entries + self.tag = self.ifd = ImageFileDirectory_v1.from_v2(self.tag_v2) + self.__frame = frame + self._setup() + + def tell(self): + "Return the current frame number" + return self.__frame + + def _decoder(self, rawmode, layer, tile=None): + "Setup decoder contexts" + + args = None + if rawmode == "RGB" and self._planar_configuration == 2: + rawmode = rawmode[layer] + compression = self._compression + if compression == "raw": + args = (rawmode, 0, 1) + elif compression == "jpeg": + args = rawmode, "" + if JPEGTABLES in self.tag_v2: + # Hack to handle abbreviated JPEG headers + # FIXME This will fail with more than one value + self.tile_prefix, = self.tag_v2[JPEGTABLES] + elif compression == "packbits": + args = rawmode + elif compression == "tiff_lzw": + args = rawmode + if PREDICTOR in self.tag_v2: + # Section 14: Differencing Predictor + self.decoderconfig = (self.tag_v2[PREDICTOR],) + + if ICCPROFILE in self.tag_v2: + self.info['icc_profile'] = self.tag_v2[ICCPROFILE] + + return args + + def _load_libtiff(self): + """ Overload method triggered when we detect a compressed tiff + Calls out to libtiff """ + + pixel = Image.Image.load(self) + + if self.tile is None: + raise IOError("cannot load this image") + if not self.tile: + return pixel + + self.load_prepare() + + if not len(self.tile) == 1: + raise IOError("Not exactly one tile") + + # (self._compression, (extents tuple), + # 0, (rawmode, self._compression, fp)) + extents = self.tile[0][1] + args = self.tile[0][3] + (self.tag_v2.offset,) + decoder = Image._getdecoder(self.mode, 'libtiff', args, + self.decoderconfig) + try: + decoder.setimage(self.im, extents) + except ValueError: + raise IOError("Couldn't set the image") + + if hasattr(self.fp, "getvalue"): + # We've got a stringio like thing passed in. Yay for all in memory. + # The decoder needs the entire file in one shot, so there's not + # a lot we can do here other than give it the entire file. + # unless we could do something like get the address of the + # underlying string for stringio. + # + # Rearranging for supporting byteio items, since they have a fileno + # that returns an IOError if there's no underlying fp. Easier to + # deal with here by reordering. + if DEBUG: + print("have getvalue. just sending in a string from getvalue") + n, err = decoder.decode(self.fp.getvalue()) + elif hasattr(self.fp, "fileno"): + # we've got a actual file on disk, pass in the fp. + if DEBUG: + print("have fileno, calling fileno version of the decoder.") + self.fp.seek(0) + # 4 bytes, otherwise the trace might error out + n, err = decoder.decode(b"fpfp") + else: + # we have something else. + if DEBUG: + print("don't have fileno or getvalue. just reading") + # UNDONE -- so much for that buffer size thing. + n, err = decoder.decode(self.fp.read()) + + self.tile = [] + self.readonly = 0 + # libtiff closed the fp in a, we need to close self.fp, if possible + if hasattr(self.fp, 'close'): + if not self.__next: + self.fp.close() + self.fp = None # might be shared + + if err < 0: + raise IOError(err) + + self.load_end() + + return Image.Image.load(self) + + def _setup(self): + "Setup this image object based on current tags" + + if 0xBC01 in self.tag_v2: + raise IOError("Windows Media Photo files not yet supported") + + # extract relevant tags + self._compression = COMPRESSION_INFO[self.tag_v2.get(COMPRESSION, 1)] + self._planar_configuration = self.tag_v2.get(PLANAR_CONFIGURATION, 1) + + # photometric is a required tag, but not everyone is reading + # the specification + photo = self.tag_v2.get(PHOTOMETRIC_INTERPRETATION, 0) + + fillorder = self.tag_v2.get(FILLORDER, 1) + + if DEBUG: + print("*** Summary ***") + print("- compression:", self._compression) + print("- photometric_interpretation:", photo) + print("- planar_configuration:", self._planar_configuration) + print("- fill_order:", fillorder) + + # size + xsize = self.tag_v2.get(IMAGEWIDTH) + ysize = self.tag_v2.get(IMAGELENGTH) + self.size = xsize, ysize + + if DEBUG: + print("- size:", self.size) + + format = self.tag_v2.get(SAMPLEFORMAT, (1,)) + if len(format) > 1 and max(format) == min(format) == 1: + # SAMPLEFORMAT is properly per band, so an RGB image will + # be (1,1,1). But, we don't support per band pixel types, + # and anything more than one band is a uint8. So, just + # take the first element. Revisit this if adding support + # for more exotic images. + format = (1,) + + # mode: check photometric interpretation and bits per pixel + key = ( + self.tag_v2.prefix, photo, format, fillorder, + self.tag_v2.get(BITSPERSAMPLE, (1,)), + self.tag_v2.get(EXTRASAMPLES, ()) + ) + if DEBUG: + print("format key:", key) + try: + self.mode, rawmode = OPEN_INFO[key] + except KeyError: + if DEBUG: + print("- unsupported format") + raise SyntaxError("unknown pixel mode") + + if DEBUG: + print("- raw mode:", rawmode) + print("- pil mode:", self.mode) + + self.info["compression"] = self._compression + + xres = self.tag_v2.get(X_RESOLUTION,1) + yres = self.tag_v2.get(Y_RESOLUTION,1) + + if xres and yres: + resunit = self.tag_v2.get(RESOLUTION_UNIT, 1) + if resunit == 2: # dots per inch + self.info["dpi"] = xres, yres + elif resunit == 3: # dots per centimeter. convert to dpi + self.info["dpi"] = xres * 2.54, yres * 2.54 + else: # No absolute unit of measurement + self.info["resolution"] = xres, yres + + # build tile descriptors + x = y = l = 0 + self.tile = [] + if STRIPOFFSETS in self.tag_v2: + # striped image + offsets = self.tag_v2[STRIPOFFSETS] + h = self.tag_v2.get(ROWSPERSTRIP, ysize) + w = self.size[0] + if READ_LIBTIFF or self._compression in ["tiff_ccitt", "group3", + "group4", "tiff_jpeg", + "tiff_adobe_deflate", + "tiff_thunderscan", + "tiff_deflate", + "tiff_sgilog", + "tiff_sgilog24", + "tiff_raw_16"]: + # if DEBUG: + # print "Activating g4 compression for whole file" + + # Decoder expects entire file as one tile. + # There's a buffer size limit in load (64k) + # so large g4 images will fail if we use that + # function. + # + # Setup the one tile for the whole image, then + # replace the existing load function with our + # _load_libtiff function. + + self.load = self._load_libtiff + + # To be nice on memory footprint, if there's a + # file descriptor, use that instead of reading + # into a string in python. + + # libtiff closes the file descriptor, so pass in a dup. + try: + fp = hasattr(self.fp, "fileno") and \ + os.dup(self.fp.fileno()) + # flush the file descriptor, prevents error on pypy 2.4+ + # should also eliminate the need for fp.tell for py3 + # in _seek + if hasattr(self.fp, "flush"): + self.fp.flush() + except IOError: + # io.BytesIO have a fileno, but returns an IOError if + # it doesn't use a file descriptor. + fp = False + + # libtiff handles the fillmode for us, so 1;IR should + # actually be 1;I. Including the R double reverses the + # bits, so stripes of the image are reversed. See + # https://github.com/python-pillow/Pillow/issues/279 + if fillorder == 2: + key = ( + self.tag_v2.prefix, photo, format, 1, + self.tag_v2.get(BITSPERSAMPLE, (1,)), + self.tag_v2.get(EXTRASAMPLES, ()) + ) + if DEBUG: + print("format key:", key) + # this should always work, since all the + # fillorder==2 modes have a corresponding + # fillorder=1 mode + self.mode, rawmode = OPEN_INFO[key] + # libtiff always returns the bytes in native order. + # we're expecting image byte order. So, if the rawmode + # contains I;16, we need to convert from native to image + # byte order. + if self.mode in ('I;16B', 'I;16') and 'I;16' in rawmode: + rawmode = 'I;16N' + + # Offset in the tile tuple is 0, we go from 0,0 to + # w,h, and we only do this once -- eds + a = (rawmode, self._compression, fp) + self.tile.append( + (self._compression, + (0, 0, w, ysize), + 0, a)) + a = None + + else: + for i in range(len(offsets)): + a = self._decoder(rawmode, l, i) + self.tile.append( + (self._compression, + (0, min(y, ysize), w, min(y+h, ysize)), + offsets[i], a)) + if DEBUG: + print("tiles: ", self.tile) + y = y + h + if y >= self.size[1]: + x = y = 0 + l += 1 + a = None + elif TILEOFFSETS in self.tag_v2: + # tiled image + w = self.tag_v2.get(322) + h = self.tag_v2.get(323) + a = None + for o in self.tag_v2[TILEOFFSETS]: + if not a: + a = self._decoder(rawmode, l) + # FIXME: this doesn't work if the image size + # is not a multiple of the tile size... + self.tile.append( + (self._compression, + (x, y, x+w, y+h), + o, a)) + x = x + w + if x >= self.size[0]: + x, y = 0, y + h + if y >= self.size[1]: + x = y = 0 + l += 1 + a = None + else: + if DEBUG: + print("- unsupported data organization") + raise SyntaxError("unknown data organization") + + # fixup palette descriptor + + if self.mode == "P": + palette = [o8(b // 256) for b in self.tag_v2[COLORMAP]] + self.palette = ImagePalette.raw("RGB;L", b"".join(palette)) +# +# -------------------------------------------------------------------- +# Write TIFF files + +# little endian is default except for image modes with +# explicit big endian byte-order + +SAVE_INFO = { + # mode => rawmode, byteorder, photometrics, + # sampleformat, bitspersample, extra + "1": ("1", II, 1, 1, (1,), None), + "L": ("L", II, 1, 1, (8,), None), + "LA": ("LA", II, 1, 1, (8, 8), 2), + "P": ("P", II, 3, 1, (8,), None), + "PA": ("PA", II, 3, 1, (8, 8), 2), + "I": ("I;32S", II, 1, 2, (32,), None), + "I;16": ("I;16", II, 1, 1, (16,), None), + "I;16S": ("I;16S", II, 1, 2, (16,), None), + "F": ("F;32F", II, 1, 3, (32,), None), + "RGB": ("RGB", II, 2, 1, (8, 8, 8), None), + "RGBX": ("RGBX", II, 2, 1, (8, 8, 8, 8), 0), + "RGBA": ("RGBA", II, 2, 1, (8, 8, 8, 8), 2), + "CMYK": ("CMYK", II, 5, 1, (8, 8, 8, 8), None), + "YCbCr": ("YCbCr", II, 6, 1, (8, 8, 8), None), + "LAB": ("LAB", II, 8, 1, (8, 8, 8), None), + + "I;32BS": ("I;32BS", MM, 1, 2, (32,), None), + "I;16B": ("I;16B", MM, 1, 1, (16,), None), + "I;16BS": ("I;16BS", MM, 1, 2, (16,), None), + "F;32BF": ("F;32BF", MM, 1, 3, (32,), None), +} + + +def _save(im, fp, filename): + + try: + rawmode, prefix, photo, format, bits, extra = SAVE_INFO[im.mode] + except KeyError: + raise IOError("cannot write mode %s as TIFF" % im.mode) + + ifd = ImageFileDirectory_v2(prefix=prefix) + + compression = im.encoderinfo.get('compression', + im.info.get('compression', 'raw')) + + libtiff = WRITE_LIBTIFF or compression != 'raw' + + # required for color libtiff images + ifd[PLANAR_CONFIGURATION] = getattr(im, '_planar_configuration', 1) + + ifd[IMAGEWIDTH] = im.size[0] + ifd[IMAGELENGTH] = im.size[1] + + # write any arbitrary tags passed in as an ImageFileDirectory + info = im.encoderinfo.get("tiffinfo", {}) + if DEBUG: + print("Tiffinfo Keys: %s" % list(info)) + if isinstance(info, ImageFileDirectory_v1): + info = info.to_v2() + for key in info: + ifd[key] = info.get(key) + try: + ifd.tagtype[key] = info.tagtype[key] + except: + pass # might not be an IFD, Might not have populated type + + # additions written by Greg Couch, gregc@cgl.ucsf.edu + # inspired by image-sig posting from Kevin Cazabon, kcazabon@home.com + if hasattr(im, 'tag_v2'): + # preserve tags from original TIFF image file + for key in (RESOLUTION_UNIT, X_RESOLUTION, Y_RESOLUTION, + IPTC_NAA_CHUNK, PHOTOSHOP_CHUNK, XMP): + if key in im.tag_v2: + ifd[key] = im.tag_v2[key] + ifd.tagtype[key] = im.tag_v2.tagtype.get(key, None) + + # preserve ICC profile (should also work when saving other formats + # which support profiles as TIFF) -- 2008-06-06 Florian Hoech + if "icc_profile" in im.info: + ifd[ICCPROFILE] = im.info["icc_profile"] + + for key, name in [(IMAGEDESCRIPTION, "description"), + (X_RESOLUTION, "resolution"), + (Y_RESOLUTION, "resolution"), + (X_RESOLUTION, "x_resolution"), + (Y_RESOLUTION, "y_resolution"), + (RESOLUTION_UNIT, "resolution_unit"), + (SOFTWARE, "software"), + (DATE_TIME, "date_time"), + (ARTIST, "artist"), + (COPYRIGHT, "copyright")]: + name_with_spaces = name.replace("_", " ") + if "_" in name and name_with_spaces in im.encoderinfo: + warnings.warn("%r is deprecated; use %r instead" % + (name_with_spaces, name), DeprecationWarning) + ifd[key] = im.encoderinfo[name.replace("_", " ")] + if name in im.encoderinfo: + ifd[key] = im.encoderinfo[name] + + dpi = im.encoderinfo.get("dpi") + if dpi: + ifd[RESOLUTION_UNIT] = 2 + ifd[X_RESOLUTION] = dpi[0] + ifd[Y_RESOLUTION] = dpi[1] + + if bits != (1,): + ifd[BITSPERSAMPLE] = bits + if len(bits) != 1: + ifd[SAMPLESPERPIXEL] = len(bits) + if extra is not None: + ifd[EXTRASAMPLES] = extra + if format != 1: + ifd[SAMPLEFORMAT] = format + + ifd[PHOTOMETRIC_INTERPRETATION] = photo + + if im.mode == "P": + lut = im.im.getpalette("RGB", "RGB;L") + ifd[COLORMAP] = tuple(i8(v) * 256 for v in lut) + + # data orientation + stride = len(bits) * ((im.size[0]*bits[0]+7)//8) + ifd[ROWSPERSTRIP] = im.size[1] + ifd[STRIPBYTECOUNTS] = stride * im.size[1] + ifd[STRIPOFFSETS] = 0 # this is adjusted by IFD writer + # no compression by default: + ifd[COMPRESSION] = COMPRESSION_INFO_REV.get(compression, 1) + + if libtiff: + if DEBUG: + print("Saving using libtiff encoder") + print("Items: %s" % sorted(ifd.items())) + _fp = 0 + if hasattr(fp, "fileno"): + try: + fp.seek(0) + _fp = os.dup(fp.fileno()) + except io.UnsupportedOperation: + pass + + # STRIPOFFSETS and STRIPBYTECOUNTS are added by the library + # based on the data in the strip. + blocklist = [STRIPOFFSETS, STRIPBYTECOUNTS] + atts = {} + # bits per sample is a single short in the tiff directory, not a list. + atts[BITSPERSAMPLE] = bits[0] + # Merge the ones that we have with (optional) more bits from + # the original file, e.g x,y resolution so that we can + # save(load('')) == original file. + legacy_ifd = {} + if hasattr(im, 'tag'): + legacy_ifd = im.tag.to_v2() + for tag, value in itertools.chain(ifd.items(), + getattr(im, 'tag_v2', {}).items(), + legacy_ifd.items()): + # Libtiff can only process certain core items without adding + # them to the custom dictionary. It will segfault if it attempts + # to add a custom tag without the dictionary entry + # + # UNDONE -- add code for the custom dictionary + if tag not in TiffTags.LIBTIFF_CORE: continue + if tag not in atts and tag not in blocklist: + if isinstance(value, unicode if bytes is str else str): + atts[tag] = value.encode('ascii', 'replace') + b"\0" + elif isinstance(value, IFDRational): + atts[tag] = float(value) + else: + atts[tag] = value + + if DEBUG: + print("Converted items: %s" % sorted(atts.items())) + + # libtiff always expects the bytes in native order. + # we're storing image byte order. So, if the rawmode + # contains I;16, we need to convert from native to image + # byte order. + if im.mode in ('I;16B', 'I;16'): + rawmode = 'I;16N' + + a = (rawmode, compression, _fp, filename, atts) + # print(im.mode, compression, a, im.encoderconfig) + e = Image._getencoder(im.mode, 'libtiff', a, im.encoderconfig) + e.setimage(im.im, (0, 0)+im.size) + while True: + # undone, change to self.decodermaxblock: + l, s, d = e.encode(16*1024) + if not _fp: + fp.write(d) + if s: + break + if s < 0: + raise IOError("encoder error %d when writing image file" % s) + + else: + offset = ifd.save(fp) + + ImageFile._save(im, fp, [ + ("raw", (0, 0)+im.size, offset, (rawmode, stride, 1)) + ]) + + # -- helper for multi-page save -- + if "_debug_multipage" in im.encoderinfo: + # just to access o32 and o16 (using correct byte order) + im._debug_multipage = ifd + +# +# -------------------------------------------------------------------- +# Register + +Image.register_open(TiffImageFile.format, TiffImageFile, _accept) +Image.register_save(TiffImageFile.format, _save) + +Image.register_extension(TiffImageFile.format, ".tif") +Image.register_extension(TiffImageFile.format, ".tiff") + +Image.register_mime(TiffImageFile.format, "image/tiff") diff --git a/server/www/packages/packages-darwin/x64/PIL/TiffTags.py b/server/www/packages/packages-darwin/x64/PIL/TiffTags.py new file mode 100644 index 0000000..07d594e --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/TiffTags.py @@ -0,0 +1,402 @@ +# +# The Python Imaging Library. +# $Id$ +# +# TIFF tags +# +# This module provides clear-text names for various well-known +# TIFF tags. the TIFF codec works just fine without it. +# +# Copyright (c) Secret Labs AB 1999. +# +# See the README file for information on usage and redistribution. +# + +## +# This module provides constants and clear-text names for various +# well-known TIFF tags. +## + +from collections import namedtuple + + +class TagInfo(namedtuple("_TagInfo", "value name type length enum")): + __slots__ = [] + + def __new__(cls, value=None, name="unknown", type=None, length=0, enum=None): + return super(TagInfo, cls).__new__( + cls, value, name, type, length, enum or {}) + + def cvt_enum(self, value): + return self.enum.get(value, value) + +def lookup(tag): + """ + :param tag: Integer tag number + :returns: Taginfo namedtuple, From the TAGS_V2 info if possible, + otherwise just populating the value and name from TAGS. + If the tag is not recognized, "unknown" is returned for the name + + """ + + return TAGS_V2.get(tag, TagInfo(tag, TAGS.get(tag, 'unknown'))) + + +## +# Map tag numbers to tag info. +# +# id: (Name, Type, Length, enum_values) +# + +ASCII = 2 +SHORT = 3 +LONG = 4 +RATIONAL = 5 + +TAGS_V2 = { + + 254: ("NewSubfileType", LONG, 1), + 255: ("SubfileType", SHORT, 1), + 256: ("ImageWidth", LONG, 1), + 257: ("ImageLength", LONG, 1), + 258: ("BitsPerSample", SHORT, 0), + 259: ("Compression", SHORT, 1, + {"Uncompressed": 1, "CCITT 1d": 2, "Group 3 Fax": 3, "Group 4 Fax": 4, + "LZW": 5, "JPEG": 6, "PackBits": 32773}), + + 262: ("PhotometricInterpretation", SHORT, 1, + {"WhiteIsZero": 0, "BlackIsZero": 1, "RGB": 2, "RBG Palette": 3, + "Transparency Mask": 4, "CMYK": 5, "YCbCr": 6, "CieLAB": 8, + "CFA": 32803, # TIFF/EP, Adobe DNG + "LinearRaw": 32892}), # Adobe DNG + 263: ("Thresholding", SHORT, 1), + 264: ("CellWidth", SHORT, 1), + 265: ("CellHeight", SHORT, 1), + 266: ("FillOrder", SHORT, 1), + 269: ("DocumentName", ASCII, 1), + + 270: ("ImageDescription", ASCII, 1), + 271: ("Make", ASCII, 1), + 272: ("Model", ASCII, 1), + 273: ("StripOffsets", LONG, 0), + 274: ("Orientation", SHORT, 1), + 277: ("SamplesPerPixel", SHORT, 1), + 278: ("RowsPerStrip", LONG, 1), + 279: ("StripByteCounts", LONG, 0), + + 280: ("MinSampleValue", LONG, 0), + 281: ("MaxSampleValue", SHORT, 0), + 282: ("XResolution", RATIONAL, 1), + 283: ("YResolution", RATIONAL, 1), + 284: ("PlanarConfiguration", SHORT, 1, {"Contigous": 1, "Separate": 2}), + 285: ("PageName", ASCII, 1), + 286: ("XPosition", RATIONAL, 1), + 287: ("YPosition", RATIONAL, 1), + 288: ("FreeOffsets", LONG, 1), + 289: ("FreeByteCounts", LONG, 1), + + 290: ("GrayResponseUnit", SHORT, 1), + 291: ("GrayResponseCurve", SHORT, 0), + 292: ("T4Options", LONG, 1), + 293: ("T6Options", LONG, 1), + 296: ("ResolutionUnit", SHORT, 1, {"inch": 1, "cm": 2}), + 297: ("PageNumber", SHORT, 2), + + 301: ("TransferFunction", SHORT, 0), + 305: ("Software", ASCII, 1), + 306: ("DateTime", ASCII, 1), + + 315: ("Artist", ASCII, 1), + 316: ("HostComputer", ASCII, 1), + 317: ("Predictor", SHORT, 1), + 318: ("WhitePoint", RATIONAL, 2), + 319: ("PrimaryChromaticies", SHORT, 6), + + 320: ("ColorMap", SHORT, 0), + 321: ("HalftoneHints", SHORT, 2), + 322: ("TileWidth", LONG, 1), + 323: ("TileLength", LONG, 1), + 324: ("TileOffsets", LONG, 0), + 325: ("TileByteCounts", LONG, 0), + + 332: ("InkSet", SHORT, 1), + 333: ("InkNames", ASCII, 1), + 334: ("NumberOfInks", SHORT, 1), + 336: ("DotRange", SHORT, 0), + 337: ("TargetPrinter", ASCII, 1), + 338: ("ExtraSamples", SHORT, 0), + 339: ("SampleFormat", SHORT, 0), + + 340: ("SMinSampleValue", 12, 0), + 341: ("SMaxSampleValue", 12, 0), + 342: ("TransferRange", SHORT, 6), + + # obsolete JPEG tags + 512: ("JPEGProc", SHORT, 1), + 513: ("JPEGInterchangeFormat", LONG, 1), + 514: ("JPEGInterchangeFormatLength", LONG, 1), + 515: ("JPEGRestartInterval", SHORT, 1), + 517: ("JPEGLosslessPredictors", SHORT, 0), + 518: ("JPEGPointTransforms", SHORT, 0), + 519: ("JPEGQTables", LONG, 0), + 520: ("JPEGDCTables", LONG, 0), + 521: ("JPEGACTables", LONG, 0), + + 529: ("YCbCrCoefficients", RATIONAL, 3), + 530: ("YCbCrSubSampling", SHORT, 2), + 531: ("YCbCrPositioning", SHORT, 1), + 532: ("ReferenceBlackWhite", LONG, 0), + + 33432: ("Copyright", ASCII, 1), + + # FIXME add more tags here + 34665: ("ExifIFD", SHORT, 1), + 34675: ('ICCProfile', 7, 0), + 34853: ('GPSInfoIFD', 1, 1), + + # MPInfo + 45056: ("MPFVersion", 7, 1), + 45057: ("NumberOfImages", LONG, 1), + 45058: ("MPEntry", 7, 1), + 45059: ("ImageUIDList", 7, 0), + 45060: ("TotalFrames", LONG, 1), + 45313: ("MPIndividualNum", LONG, 1), + 45569: ("PanOrientation", LONG, 1), + 45570: ("PanOverlap_H", RATIONAL, 1), + 45571: ("PanOverlap_V", RATIONAL, 1), + 45572: ("BaseViewpointNum", LONG, 1), + 45573: ("ConvergenceAngle", 10, 1), + 45574: ("BaselineLength", RATIONAL, 1), + 45575: ("VerticalDivergence", 10, 1), + 45576: ("AxisDistance_X", 10, 1), + 45577: ("AxisDistance_Y", 10, 1), + 45578: ("AxisDistance_Z", 10, 1), + 45579: ("YawAngle", 10, 1), + 45580: ("PitchAngle", 10, 1), + 45581: ("RollAngle", 10, 1), + + 50741: ("MakerNoteSafety", SHORT, 1, {"Unsafe": 0, "Safe": 1}), + 50780: ("BestQualityScale", RATIONAL, 1), + 50838: ("ImageJMetaDataByteCounts", LONG, 1), + 50839: ("ImageJMetaData", 7, 1) +} + +# Legacy Tags structure +# these tags aren't included above, but were in the previous versions +TAGS = {347: 'JPEGTables', + 700: 'XMP', + + # Additional Exif Info + 33434: 'ExposureTime', + 33437: 'FNumber', + 33723: 'IptcNaaInfo', + 34377: 'PhotoshopInfo', + 34850: 'ExposureProgram', + 34852: 'SpectralSensitivity', + 34855: 'ISOSpeedRatings', + 34856: 'OECF', + 34864: 'SensitivityType', + 34865: 'StandardOutputSensitivity', + 34866: 'RecommendedExposureIndex', + 34867: 'ISOSpeed', + 34868: 'ISOSpeedLatitudeyyy', + 34869: 'ISOSpeedLatitudezzz', + 36864: 'ExifVersion', + 36867: 'DateTimeOriginal', + 36868: 'DateTImeDigitized', + 37121: 'ComponentsConfiguration', + 37122: 'CompressedBitsPerPixel', + 37377: 'ShutterSpeedValue', + 37378: 'ApertureValue', + 37379: 'BrightnessValue', + 37380: 'ExposureBiasValue', + 37381: 'MaxApertureValue', + 37382: 'SubjectDistance', + 37383: 'MeteringMode', + 37384: 'LightSource', + 37385: 'Flash', + 37386: 'FocalLength', + 37396: 'SubjectArea', + 37500: 'MakerNote', + 37510: 'UserComment', + 37520: 'SubSec', + 37521: 'SubSecTimeOriginal', + 37522: 'SubsecTimeDigitized', + 40960: 'FlashPixVersion', + 40961: 'ColorSpace', + 40962: 'PixelXDimension', + 40963: 'PixelYDimension', + 40964: 'RelatedSoundFile', + 40965: 'InteroperabilityIFD', + 41483: 'FlashEnergy', + 41484: 'SpatialFrequencyResponse', + 41486: 'FocalPlaneXResolution', + 41487: 'FocalPlaneYResolution', + 41488: 'FocalPlaneResolutionUnit', + 41492: 'SubjectLocation', + 41493: 'ExposureIndex', + 41495: 'SensingMethod', + 41728: 'FileSource', + 41729: 'SceneType', + 41730: 'CFAPattern', + 41985: 'CustomRendered', + 41986: 'ExposureMode', + 41987: 'WhiteBalance', + 41988: 'DigitalZoomRatio', + 41989: 'FocalLengthIn35mmFilm', + 41990: 'SceneCaptureType', + 41991: 'GainControl', + 41992: 'Contrast', + 41993: 'Saturation', + 41994: 'Sharpness', + 41995: 'DeviceSettingDescription', + 41996: 'SubjectDistanceRange', + 42016: 'ImageUniqueID', + 42032: 'CameraOwnerName', + 42033: 'BodySerialNumber', + 42034: 'LensSpecification', + 42035: 'LensMake', + 42036: 'LensModel', + 42037: 'LensSerialNumber', + 42240: 'Gamma', + + # Adobe DNG + 50706: 'DNGVersion', + 50707: 'DNGBackwardVersion', + 50708: 'UniqueCameraModel', + 50709: 'LocalizedCameraModel', + 50710: 'CFAPlaneColor', + 50711: 'CFALayout', + 50712: 'LinearizationTable', + 50713: 'BlackLevelRepeatDim', + 50714: 'BlackLevel', + 50715: 'BlackLevelDeltaH', + 50716: 'BlackLevelDeltaV', + 50717: 'WhiteLevel', + 50718: 'DefaultScale', + 50719: 'DefaultCropOrigin', + 50720: 'DefaultCropSize', + 50721: 'ColorMatrix1', + 50722: 'ColorMatrix2', + 50723: 'CameraCalibration1', + 50724: 'CameraCalibration2', + 50725: 'ReductionMatrix1', + 50726: 'ReductionMatrix2', + 50727: 'AnalogBalance', + 50728: 'AsShotNeutral', + 50729: 'AsShotWhiteXY', + 50730: 'BaselineExposure', + 50731: 'BaselineNoise', + 50732: 'BaselineSharpness', + 50733: 'BayerGreenSplit', + 50734: 'LinearResponseLimit', + 50735: 'CameraSerialNumber', + 50736: 'LensInfo', + 50737: 'ChromaBlurRadius', + 50738: 'AntiAliasStrength', + 50740: 'DNGPrivateData', + 50778: 'CalibrationIlluminant1', + 50779: 'CalibrationIlluminant2', + } + + +def _populate(): + for k, v in TAGS_V2.items(): + # Populate legacy structure. + TAGS[k] = v[0] + if len(v) == 4: + for sk, sv in v[3].items(): + TAGS[(k, sv)] = sk + + TAGS_V2[k] = TagInfo(k, *v) + +_populate() +## +# Map type numbers to type names -- defined in ImageFileDirectory. + +TYPES = {} + +# was: +# TYPES = { +# 1: "byte", +# 2: "ascii", +# 3: "short", +# 4: "long", +# 5: "rational", +# 6: "signed byte", +# 7: "undefined", +# 8: "signed short", +# 9: "signed long", +# 10: "signed rational", +# 11: "float", +# 12: "double", +# } + +# +# These tags are handled by default in libtiff, without +# adding to the custom dictionary. From tif_dir.c, searching for +# case TIFFTAG in the _TIFFVSetField function: +# Line: item. +# 148: case TIFFTAG_SUBFILETYPE: +# 151: case TIFFTAG_IMAGEWIDTH: +# 154: case TIFFTAG_IMAGELENGTH: +# 157: case TIFFTAG_BITSPERSAMPLE: +# 181: case TIFFTAG_COMPRESSION: +# 202: case TIFFTAG_PHOTOMETRIC: +# 205: case TIFFTAG_THRESHHOLDING: +# 208: case TIFFTAG_FILLORDER: +# 214: case TIFFTAG_ORIENTATION: +# 221: case TIFFTAG_SAMPLESPERPIXEL: +# 228: case TIFFTAG_ROWSPERSTRIP: +# 238: case TIFFTAG_MINSAMPLEVALUE: +# 241: case TIFFTAG_MAXSAMPLEVALUE: +# 244: case TIFFTAG_SMINSAMPLEVALUE: +# 247: case TIFFTAG_SMAXSAMPLEVALUE: +# 250: case TIFFTAG_XRESOLUTION: +# 256: case TIFFTAG_YRESOLUTION: +# 262: case TIFFTAG_PLANARCONFIG: +# 268: case TIFFTAG_XPOSITION: +# 271: case TIFFTAG_YPOSITION: +# 274: case TIFFTAG_RESOLUTIONUNIT: +# 280: case TIFFTAG_PAGENUMBER: +# 284: case TIFFTAG_HALFTONEHINTS: +# 288: case TIFFTAG_COLORMAP: +# 294: case TIFFTAG_EXTRASAMPLES: +# 298: case TIFFTAG_MATTEING: +# 305: case TIFFTAG_TILEWIDTH: +# 316: case TIFFTAG_TILELENGTH: +# 327: case TIFFTAG_TILEDEPTH: +# 333: case TIFFTAG_DATATYPE: +# 344: case TIFFTAG_SAMPLEFORMAT: +# 361: case TIFFTAG_IMAGEDEPTH: +# 364: case TIFFTAG_SUBIFD: +# 376: case TIFFTAG_YCBCRPOSITIONING: +# 379: case TIFFTAG_YCBCRSUBSAMPLING: +# 383: case TIFFTAG_TRANSFERFUNCTION: +# 389: case TIFFTAG_REFERENCEBLACKWHITE: +# 393: case TIFFTAG_INKNAMES: + +# some of these are not in our TAGS_V2 dict and were included from tiff.h + +LIBTIFF_CORE = set ([255, 256, 257, 258, 259, 262, 263, 266, 274, 277, + 278, 280, 281, 340, 341, 282, 283, 284, 286, 287, + 296, 297, 321, 320, 338, 32995, 322, 323, 32998, + 32996, 339, 32997, 330, 531, 530, 301, 532, 333, + # as above + 269 # this has been in our tests forever, and works + ]) + +LIBTIFF_CORE.remove(320) # Array of short, crashes +LIBTIFF_CORE.remove(301) # Array of short, crashes +LIBTIFF_CORE.remove(532) # Array of long, crashes + +LIBTIFF_CORE.remove(255) # We don't have support for subfiletypes +LIBTIFF_CORE.remove(322) # We don't have support for tiled images in libtiff +LIBTIFF_CORE.remove(323) # Tiled images +LIBTIFF_CORE.remove(333) # Ink Names either + +# Note to advanced users: There may be combinations of these +# parameters and values that when added properly, will work and +# produce valid tiff images that may work in your application. +# It is safe to add and remove tags from this set from Pillow's point +# of view so long as you test against libtiff. diff --git a/server/www/packages/packages-darwin/x64/PIL/WalImageFile.py b/server/www/packages/packages-darwin/x64/PIL/WalImageFile.py new file mode 100644 index 0000000..0cbd1ca --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/WalImageFile.py @@ -0,0 +1,128 @@ +# encoding: utf-8 +# +# The Python Imaging Library. +# $Id$ +# +# WAL file handling +# +# History: +# 2003-04-23 fl created +# +# Copyright (c) 2003 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +# NOTE: This format cannot be automatically recognized, so the reader +# is not registered for use with Image.open(). To open a WAL file, use +# the WalImageFile.open() function instead. + +# This reader is based on the specification available from: +# http://www.flipcode.com/archives/Quake_2_BSP_File_Format.shtml +# and has been tested with a few sample files found using google. + +from __future__ import print_function + +from PIL import Image, _binary + +try: + import builtins +except ImportError: + import __builtin__ + builtins = __builtin__ + +i32 = _binary.i32le + + +## +# Load texture from a Quake2 WAL texture file. +#

    +# By default, a Quake2 standard palette is attached to the texture. +# To override the palette, use the putpalette method. +# +# @param filename WAL file name, or an opened file handle. +# @return An image instance. + +def open(filename): + # FIXME: modify to return a WalImageFile instance instead of + # plain Image object ? + + if hasattr(filename, "read"): + fp = filename + else: + fp = builtins.open(filename, "rb") + + # read header fields + header = fp.read(32+24+32+12) + size = i32(header, 32), i32(header, 36) + offset = i32(header, 40) + + # load pixel data + fp.seek(offset) + + im = Image.frombytes("P", size, fp.read(size[0] * size[1])) + im.putpalette(quake2palette) + + im.format = "WAL" + im.format_description = "Quake2 Texture" + + # strings are null-terminated + im.info["name"] = header[:32].split(b"\0", 1)[0] + next_name = header[56:56+32].split(b"\0", 1)[0] + if next_name: + im.info["next_name"] = next_name + + return im + + +quake2palette = ( + # default palette taken from piffo 0.93 by Hans Häggström + b"\x01\x01\x01\x0b\x0b\x0b\x12\x12\x12\x17\x17\x17\x1b\x1b\x1b\x1e" + b"\x1e\x1e\x22\x22\x22\x26\x26\x26\x29\x29\x29\x2c\x2c\x2c\x2f\x2f" + b"\x2f\x32\x32\x32\x35\x35\x35\x37\x37\x37\x3a\x3a\x3a\x3c\x3c\x3c" + b"\x24\x1e\x13\x22\x1c\x12\x20\x1b\x12\x1f\x1a\x10\x1d\x19\x10\x1b" + b"\x17\x0f\x1a\x16\x0f\x18\x14\x0d\x17\x13\x0d\x16\x12\x0d\x14\x10" + b"\x0b\x13\x0f\x0b\x10\x0d\x0a\x0f\x0b\x0a\x0d\x0b\x07\x0b\x0a\x07" + b"\x23\x23\x26\x22\x22\x25\x22\x20\x23\x21\x1f\x22\x20\x1e\x20\x1f" + b"\x1d\x1e\x1d\x1b\x1c\x1b\x1a\x1a\x1a\x19\x19\x18\x17\x17\x17\x16" + b"\x16\x14\x14\x14\x13\x13\x13\x10\x10\x10\x0f\x0f\x0f\x0d\x0d\x0d" + b"\x2d\x28\x20\x29\x24\x1c\x27\x22\x1a\x25\x1f\x17\x38\x2e\x1e\x31" + b"\x29\x1a\x2c\x25\x17\x26\x20\x14\x3c\x30\x14\x37\x2c\x13\x33\x28" + b"\x12\x2d\x24\x10\x28\x1f\x0f\x22\x1a\x0b\x1b\x14\x0a\x13\x0f\x07" + b"\x31\x1a\x16\x30\x17\x13\x2e\x16\x10\x2c\x14\x0d\x2a\x12\x0b\x27" + b"\x0f\x0a\x25\x0f\x07\x21\x0d\x01\x1e\x0b\x01\x1c\x0b\x01\x1a\x0b" + b"\x01\x18\x0a\x01\x16\x0a\x01\x13\x0a\x01\x10\x07\x01\x0d\x07\x01" + b"\x29\x23\x1e\x27\x21\x1c\x26\x20\x1b\x25\x1f\x1a\x23\x1d\x19\x21" + b"\x1c\x18\x20\x1b\x17\x1e\x19\x16\x1c\x18\x14\x1b\x17\x13\x19\x14" + b"\x10\x17\x13\x0f\x14\x10\x0d\x12\x0f\x0b\x0f\x0b\x0a\x0b\x0a\x07" + b"\x26\x1a\x0f\x23\x19\x0f\x20\x17\x0f\x1c\x16\x0f\x19\x13\x0d\x14" + b"\x10\x0b\x10\x0d\x0a\x0b\x0a\x07\x33\x22\x1f\x35\x29\x26\x37\x2f" + b"\x2d\x39\x35\x34\x37\x39\x3a\x33\x37\x39\x30\x34\x36\x2b\x31\x34" + b"\x27\x2e\x31\x22\x2b\x2f\x1d\x28\x2c\x17\x25\x2a\x0f\x20\x26\x0d" + b"\x1e\x25\x0b\x1c\x22\x0a\x1b\x20\x07\x19\x1e\x07\x17\x1b\x07\x14" + b"\x18\x01\x12\x16\x01\x0f\x12\x01\x0b\x0d\x01\x07\x0a\x01\x01\x01" + b"\x2c\x21\x21\x2a\x1f\x1f\x29\x1d\x1d\x27\x1c\x1c\x26\x1a\x1a\x24" + b"\x18\x18\x22\x17\x17\x21\x16\x16\x1e\x13\x13\x1b\x12\x12\x18\x10" + b"\x10\x16\x0d\x0d\x12\x0b\x0b\x0d\x0a\x0a\x0a\x07\x07\x01\x01\x01" + b"\x2e\x30\x29\x2d\x2e\x27\x2b\x2c\x26\x2a\x2a\x24\x28\x29\x23\x27" + b"\x27\x21\x26\x26\x1f\x24\x24\x1d\x22\x22\x1c\x1f\x1f\x1a\x1c\x1c" + b"\x18\x19\x19\x16\x17\x17\x13\x13\x13\x10\x0f\x0f\x0d\x0b\x0b\x0a" + b"\x30\x1e\x1b\x2d\x1c\x19\x2c\x1a\x17\x2a\x19\x14\x28\x17\x13\x26" + b"\x16\x10\x24\x13\x0f\x21\x12\x0d\x1f\x10\x0b\x1c\x0f\x0a\x19\x0d" + b"\x0a\x16\x0b\x07\x12\x0a\x07\x0f\x07\x01\x0a\x01\x01\x01\x01\x01" + b"\x28\x29\x38\x26\x27\x36\x25\x26\x34\x24\x24\x31\x22\x22\x2f\x20" + b"\x21\x2d\x1e\x1f\x2a\x1d\x1d\x27\x1b\x1b\x25\x19\x19\x21\x17\x17" + b"\x1e\x14\x14\x1b\x13\x12\x17\x10\x0f\x13\x0d\x0b\x0f\x0a\x07\x07" + b"\x2f\x32\x29\x2d\x30\x26\x2b\x2e\x24\x29\x2c\x21\x27\x2a\x1e\x25" + b"\x28\x1c\x23\x26\x1a\x21\x25\x18\x1e\x22\x14\x1b\x1f\x10\x19\x1c" + b"\x0d\x17\x1a\x0a\x13\x17\x07\x10\x13\x01\x0d\x0f\x01\x0a\x0b\x01" + b"\x01\x3f\x01\x13\x3c\x0b\x1b\x39\x10\x20\x35\x14\x23\x31\x17\x23" + b"\x2d\x18\x23\x29\x18\x3f\x3f\x3f\x3f\x3f\x39\x3f\x3f\x31\x3f\x3f" + b"\x2a\x3f\x3f\x20\x3f\x3f\x14\x3f\x3c\x12\x3f\x39\x0f\x3f\x35\x0b" + b"\x3f\x32\x07\x3f\x2d\x01\x3d\x2a\x01\x3b\x26\x01\x39\x21\x01\x37" + b"\x1d\x01\x34\x1a\x01\x32\x16\x01\x2f\x12\x01\x2d\x0f\x01\x2a\x0b" + b"\x01\x27\x07\x01\x23\x01\x01\x1d\x01\x01\x17\x01\x01\x10\x01\x01" + b"\x3d\x01\x01\x19\x19\x3f\x3f\x01\x01\x01\x01\x3f\x16\x16\x13\x10" + b"\x10\x0f\x0d\x0d\x0b\x3c\x2e\x2a\x36\x27\x20\x30\x21\x18\x29\x1b" + b"\x10\x3c\x39\x37\x37\x32\x2f\x31\x2c\x28\x2b\x26\x21\x30\x22\x20" +) diff --git a/server/www/packages/packages-darwin/x64/PIL/WebPImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/WebPImagePlugin.py new file mode 100644 index 0000000..6837b53 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/WebPImagePlugin.py @@ -0,0 +1,80 @@ +from PIL import Image +from PIL import ImageFile +from io import BytesIO +from PIL import _webp + + +_VALID_WEBP_MODES = { + "RGB": True, + "RGBA": True, + } + +_VP8_MODES_BY_IDENTIFIER = { + b"VP8 ": "RGB", + b"VP8X": "RGBA", + b"VP8L": "RGBA", # lossless + } + + +def _accept(prefix): + is_riff_file_format = prefix[:4] == b"RIFF" + is_webp_file = prefix[8:12] == b"WEBP" + is_valid_vp8_mode = prefix[12:16] in _VP8_MODES_BY_IDENTIFIER + + return is_riff_file_format and is_webp_file and is_valid_vp8_mode + + +class WebPImageFile(ImageFile.ImageFile): + + format = "WEBP" + format_description = "WebP image" + + def _open(self): + data, width, height, self.mode, icc_profile, exif = \ + _webp.WebPDecode(self.fp.read()) + + if icc_profile: + self.info["icc_profile"] = icc_profile + if exif: + self.info["exif"] = exif + + self.size = width, height + self.fp = BytesIO(data) + self.tile = [("raw", (0, 0) + self.size, 0, self.mode)] + + def _getexif(self): + from PIL.JpegImagePlugin import _getexif + return _getexif(self) + + +def _save(im, fp, filename): + image_mode = im.mode + if im.mode not in _VALID_WEBP_MODES: + raise IOError("cannot write mode %s as WEBP" % image_mode) + + lossless = im.encoderinfo.get("lossless", False) + quality = im.encoderinfo.get("quality", 80) + icc_profile = im.encoderinfo.get("icc_profile", "") + exif = im.encoderinfo.get("exif", "") + + data = _webp.WebPEncode( + im.tobytes(), + im.size[0], + im.size[1], + lossless, + float(quality), + im.mode, + icc_profile, + exif + ) + if data is None: + raise IOError("cannot write file as WEBP (encoder returned None)") + + fp.write(data) + + +Image.register_open(WebPImageFile.format, WebPImageFile, _accept) +Image.register_save(WebPImageFile.format, _save) + +Image.register_extension(WebPImageFile.format, ".webp") +Image.register_mime(WebPImageFile.format, "image/webp") diff --git a/server/www/packages/packages-darwin/x64/PIL/WmfImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/WmfImagePlugin.py new file mode 100644 index 0000000..3163210 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/WmfImagePlugin.py @@ -0,0 +1,173 @@ +# +# The Python Imaging Library +# $Id$ +# +# WMF stub codec +# +# history: +# 1996-12-14 fl Created +# 2004-02-22 fl Turned into a stub driver +# 2004-02-23 fl Added EMF support +# +# Copyright (c) Secret Labs AB 1997-2004. All rights reserved. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image, ImageFile, _binary + +__version__ = "0.2" + +_handler = None + +if str != bytes: + long = int + + +## +# Install application-specific WMF image handler. +# +# @param handler Handler object. + +def register_handler(handler): + global _handler + _handler = handler + +if hasattr(Image.core, "drawwmf"): + # install default handler (windows only) + + class WmfHandler(object): + + def open(self, im): + im.mode = "RGB" + self.bbox = im.info["wmf_bbox"] + + def load(self, im): + im.fp.seek(0) # rewind + return Image.frombytes( + "RGB", im.size, + Image.core.drawwmf(im.fp.read(), im.size, self.bbox), + "raw", "BGR", (im.size[0]*3 + 3) & -4, -1 + ) + + register_handler(WmfHandler()) + +# -------------------------------------------------------------------- + +word = _binary.i16le + + +def short(c, o=0): + v = word(c, o) + if v >= 32768: + v -= 65536 + return v + +dword = _binary.i32le + + +# +# -------------------------------------------------------------------- +# Read WMF file + +def _accept(prefix): + return ( + prefix[:6] == b"\xd7\xcd\xc6\x9a\x00\x00" or + prefix[:4] == b"\x01\x00\x00\x00" + ) + + +## +# Image plugin for Windows metafiles. + +class WmfStubImageFile(ImageFile.StubImageFile): + + format = "WMF" + format_description = "Windows Metafile" + + def _open(self): + + # check placable header + s = self.fp.read(80) + + if s[:6] == b"\xd7\xcd\xc6\x9a\x00\x00": + + # placeable windows metafile + + # get units per inch + inch = word(s, 14) + + # get bounding box + x0 = short(s, 6) + y0 = short(s, 8) + x1 = short(s, 10) + y1 = short(s, 12) + + # normalize size to 72 dots per inch + size = (x1 - x0) * 72 // inch, (y1 - y0) * 72 // inch + + self.info["wmf_bbox"] = x0, y0, x1, y1 + + self.info["dpi"] = 72 + + # print self.mode, self.size, self.info + + # sanity check (standard metafile header) + if s[22:26] != b"\x01\x00\t\x00": + raise SyntaxError("Unsupported WMF file format") + + elif dword(s) == 1 and s[40:44] == b" EMF": + # enhanced metafile + + # get bounding box + x0 = dword(s, 8) + y0 = dword(s, 12) + x1 = dword(s, 16) + y1 = dword(s, 20) + + # get frame (in 0.01 millimeter units) + frame = dword(s, 24), dword(s, 28), dword(s, 32), dword(s, 36) + + # normalize size to 72 dots per inch + size = x1 - x0, y1 - y0 + + # calculate dots per inch from bbox and frame + xdpi = 2540 * (x1 - y0) // (frame[2] - frame[0]) + ydpi = 2540 * (y1 - y0) // (frame[3] - frame[1]) + + self.info["wmf_bbox"] = x0, y0, x1, y1 + + if xdpi == ydpi: + self.info["dpi"] = xdpi + else: + self.info["dpi"] = xdpi, ydpi + + else: + raise SyntaxError("Unsupported file format") + + self.mode = "RGB" + self.size = size + + loader = self._load() + if loader: + loader.open(self) + + def _load(self): + return _handler + + +def _save(im, fp, filename): + if _handler is None or not hasattr("_handler", "save"): + raise IOError("WMF save handler not installed") + _handler.save(im, fp, filename) + +# +# -------------------------------------------------------------------- +# Registry stuff + +Image.register_open(WmfStubImageFile.format, WmfStubImageFile, _accept) +Image.register_save(WmfStubImageFile.format, _save) + +Image.register_extension(WmfStubImageFile.format, ".wmf") +Image.register_extension(WmfStubImageFile.format, ".emf") diff --git a/server/www/packages/packages-darwin/x64/PIL/XVThumbImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/XVThumbImagePlugin.py new file mode 100644 index 0000000..311e65d --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/XVThumbImagePlugin.py @@ -0,0 +1,75 @@ +# +# The Python Imaging Library. +# $Id$ +# +# XV Thumbnail file handler by Charles E. "Gene" Cash +# (gcash@magicnet.net) +# +# see xvcolor.c and xvbrowse.c in the sources to John Bradley's XV, +# available from ftp://ftp.cis.upenn.edu/pub/xv/ +# +# history: +# 98-08-15 cec created (b/w only) +# 98-12-09 cec added color palette +# 98-12-28 fl added to PIL (with only a few very minor modifications) +# +# To do: +# FIXME: make save work (this requires quantization support) +# + +from PIL import Image, ImageFile, ImagePalette, _binary + +__version__ = "0.1" + +o8 = _binary.o8 + +# standard color palette for thumbnails (RGB332) +PALETTE = b"" +for r in range(8): + for g in range(8): + for b in range(4): + PALETTE = PALETTE + (o8((r*255)//7)+o8((g*255)//7)+o8((b*255)//3)) + + +## +# Image plugin for XV thumbnail images. + +class XVThumbImageFile(ImageFile.ImageFile): + + format = "XVThumb" + format_description = "XV thumbnail image" + + def _open(self): + + # check magic + s = self.fp.read(6) + if s != b"P7 332": + raise SyntaxError("not an XV thumbnail file") + + # Skip to beginning of next line + self.fp.readline() + + # skip info comments + while True: + s = self.fp.readline() + if not s: + raise SyntaxError("Unexpected EOF reading XV thumbnail file") + if s[0] != b'#': + break + + # parse header line (already read) + s = s.strip().split() + + self.mode = "P" + self.size = int(s[0:1]), int(s[1:2]) + + self.palette = ImagePalette.raw("RGB", PALETTE) + + self.tile = [ + ("raw", (0, 0)+self.size, + self.fp.tell(), (self.mode, 0, 1) + )] + +# -------------------------------------------------------------------- + +Image.register_open(XVThumbImageFile.format, XVThumbImageFile) diff --git a/server/www/packages/packages-darwin/x64/PIL/XbmImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/XbmImagePlugin.py new file mode 100644 index 0000000..bca8828 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/XbmImagePlugin.py @@ -0,0 +1,96 @@ +# +# The Python Imaging Library. +# $Id$ +# +# XBM File handling +# +# History: +# 1995-09-08 fl Created +# 1996-11-01 fl Added save support +# 1997-07-07 fl Made header parser more tolerant +# 1997-07-22 fl Fixed yet another parser bug +# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.4) +# 2001-05-13 fl Added hotspot handling (based on code from Bernhard Herzog) +# 2004-02-24 fl Allow some whitespace before first #define +# +# Copyright (c) 1997-2004 by Secret Labs AB +# Copyright (c) 1996-1997 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +import re +from PIL import Image, ImageFile + +__version__ = "0.6" + +# XBM header +xbm_head = re.compile( + b"\s*#define[ \t]+.*_width[ \t]+(?P[0-9]+)[\r\n]+" + b"#define[ \t]+.*_height[ \t]+(?P[0-9]+)[\r\n]+" + b"(?P" + b"#define[ \t]+[^_]*_x_hot[ \t]+(?P[0-9]+)[\r\n]+" + b"#define[ \t]+[^_]*_y_hot[ \t]+(?P[0-9]+)[\r\n]+" + b")?" + b"[\\000-\\377]*_bits\\[\\]" +) + + +def _accept(prefix): + return prefix.lstrip()[:7] == b"#define" + + +## +# Image plugin for X11 bitmaps. + +class XbmImageFile(ImageFile.ImageFile): + + format = "XBM" + format_description = "X11 Bitmap" + + def _open(self): + + m = xbm_head.match(self.fp.read(512)) + + if m: + + xsize = int(m.group("width")) + ysize = int(m.group("height")) + + if m.group("hotspot"): + self.info["hotspot"] = ( + int(m.group("xhot")), int(m.group("yhot")) + ) + + self.mode = "1" + self.size = xsize, ysize + + self.tile = [("xbm", (0, 0)+self.size, m.end(), None)] + + +def _save(im, fp, filename): + + if im.mode != "1": + raise IOError("cannot write mode %s as XBM" % im.mode) + + fp.write(("#define im_width %d\n" % im.size[0]).encode('ascii')) + fp.write(("#define im_height %d\n" % im.size[1]).encode('ascii')) + + hotspot = im.encoderinfo.get("hotspot") + if hotspot: + fp.write(("#define im_x_hot %d\n" % hotspot[0]).encode('ascii')) + fp.write(("#define im_y_hot %d\n" % hotspot[1]).encode('ascii')) + + fp.write(b"static char im_bits[] = {\n") + + ImageFile._save(im, fp, [("xbm", (0, 0)+im.size, 0, None)]) + + fp.write(b"};\n") + + +Image.register_open(XbmImageFile.format, XbmImageFile, _accept) +Image.register_save(XbmImageFile.format, _save) + +Image.register_extension(XbmImageFile.format, ".xbm") + +Image.register_mime(XbmImageFile.format, "image/xbm") diff --git a/server/www/packages/packages-darwin/x64/PIL/XpmImagePlugin.py b/server/www/packages/packages-darwin/x64/PIL/XpmImagePlugin.py new file mode 100644 index 0000000..556adb8 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/XpmImagePlugin.py @@ -0,0 +1,130 @@ +# +# The Python Imaging Library. +# $Id$ +# +# XPM File handling +# +# History: +# 1996-12-29 fl Created +# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.7) +# +# Copyright (c) Secret Labs AB 1997-2001. +# Copyright (c) Fredrik Lundh 1996-2001. +# +# See the README file for information on usage and redistribution. +# + + +import re +from PIL import Image, ImageFile, ImagePalette +from PIL._binary import i8, o8 + +__version__ = "0.2" + +# XPM header +xpm_head = re.compile(b"\"([0-9]*) ([0-9]*) ([0-9]*) ([0-9]*)") + + +def _accept(prefix): + return prefix[:9] == b"/* XPM */" + + +## +# Image plugin for X11 pixel maps. + +class XpmImageFile(ImageFile.ImageFile): + + format = "XPM" + format_description = "X11 Pixel Map" + + def _open(self): + + if not _accept(self.fp.read(9)): + raise SyntaxError("not an XPM file") + + # skip forward to next string + while True: + s = self.fp.readline() + if not s: + raise SyntaxError("broken XPM file") + m = xpm_head.match(s) + if m: + break + + self.size = int(m.group(1)), int(m.group(2)) + + pal = int(m.group(3)) + bpp = int(m.group(4)) + + if pal > 256 or bpp != 1: + raise ValueError("cannot read this XPM file") + + # + # load palette description + + palette = [b"\0\0\0"] * 256 + + for i in range(pal): + + s = self.fp.readline() + if s[-2:] == b'\r\n': + s = s[:-2] + elif s[-1:] in b'\r\n': + s = s[:-1] + + c = i8(s[1]) + s = s[2:-2].split() + + for i in range(0, len(s), 2): + + if s[i] == b"c": + + # process colour key + rgb = s[i+1] + if rgb == b"None": + self.info["transparency"] = c + elif rgb[0:1] == b"#": + # FIXME: handle colour names (see ImagePalette.py) + rgb = int(rgb[1:], 16) + palette[c] = (o8((rgb >> 16) & 255) + + o8((rgb >> 8) & 255) + + o8(rgb & 255)) + else: + # unknown colour + raise ValueError("cannot read this XPM file") + break + + else: + + # missing colour key + raise ValueError("cannot read this XPM file") + + self.mode = "P" + self.palette = ImagePalette.raw("RGB", b"".join(palette)) + + self.tile = [("raw", (0, 0)+self.size, self.fp.tell(), ("P", 0, 1))] + + def load_read(self, bytes): + + # + # load all image data in one chunk + + xsize, ysize = self.size + + s = [None] * ysize + + for i in range(ysize): + s[i] = self.fp.readline()[1:xsize+1].ljust(xsize) + + self.fp = None + + return b"".join(s) + +# +# Registry + +Image.register_open(XpmImageFile.format, XpmImageFile, _accept) + +Image.register_extension(XpmImageFile.format, ".xpm") + +Image.register_mime(XpmImageFile.format, "image/xpm") diff --git a/server/www/packages/packages-darwin/x64/PIL/__init__.py b/server/www/packages/packages-darwin/x64/PIL/__init__.py new file mode 100644 index 0000000..e251cfa --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/__init__.py @@ -0,0 +1,58 @@ +# +# The Python Imaging Library. +# $Id$ +# +# package placeholder +# +# Copyright (c) 1999 by Secret Labs AB. +# +# See the README file for information on usage and redistribution. +# + +# ;-) + +VERSION = '1.1.7' # PIL version +PILLOW_VERSION = '3.1.0' # Pillow + +_plugins = ['BmpImagePlugin', + 'BufrStubImagePlugin', + 'CurImagePlugin', + 'DcxImagePlugin', + 'EpsImagePlugin', + 'FitsStubImagePlugin', + 'FliImagePlugin', + 'FpxImagePlugin', + 'GbrImagePlugin', + 'GifImagePlugin', + 'GribStubImagePlugin', + 'Hdf5StubImagePlugin', + 'IcnsImagePlugin', + 'IcoImagePlugin', + 'ImImagePlugin', + 'ImtImagePlugin', + 'IptcImagePlugin', + 'JpegImagePlugin', + 'Jpeg2KImagePlugin', + 'McIdasImagePlugin', + 'MicImagePlugin', + 'MpegImagePlugin', + 'MpoImagePlugin', + 'MspImagePlugin', + 'PalmImagePlugin', + 'PcdImagePlugin', + 'PcxImagePlugin', + 'PdfImagePlugin', + 'PixarImagePlugin', + 'PngImagePlugin', + 'PpmImagePlugin', + 'PsdImagePlugin', + 'SgiImagePlugin', + 'SpiderImagePlugin', + 'SunImagePlugin', + 'TgaImagePlugin', + 'TiffImagePlugin', + 'WebPImagePlugin', + 'WmfImagePlugin', + 'XbmImagePlugin', + 'XpmImagePlugin', + 'XVThumbImagePlugin'] diff --git a/server/www/packages/packages-darwin/x64/PIL/_binary.py b/server/www/packages/packages-darwin/x64/PIL/_binary.py new file mode 100644 index 0000000..2f5e8ff --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/_binary.py @@ -0,0 +1,76 @@ +# +# The Python Imaging Library. +# $Id$ +# +# Binary input/output support routines. +# +# Copyright (c) 1997-2003 by Secret Labs AB +# Copyright (c) 1995-2003 by Fredrik Lundh +# Copyright (c) 2012 by Brian Crowell +# +# See the README file for information on usage and redistribution. +# + +from struct import unpack, pack + +if bytes is str: + def i8(c): + return ord(c) + + def o8(i): + return chr(i & 255) +else: + def i8(c): + return c if c.__class__ is int else c[0] + + def o8(i): + return bytes((i & 255,)) + + +# Input, le = little endian, be = big endian +# TODO: replace with more readable struct.unpack equivalent +def i16le(c, o=0): + """ + Converts a 2-bytes (16 bits) string to an integer. + + c: string containing bytes to convert + o: offset of bytes to convert in string + """ + return unpack("H", c[o:o+2])[0] + + +def i32be(c, o=0): + return unpack(">I", c[o:o+4])[0] + + +# Output, le = little endian, be = big endian +def o16le(i): + return pack("H", i) + + +def o32be(i): + return pack(">I", i) + +# End of file diff --git a/server/www/packages/packages-darwin/x64/PIL/_imaging.cpython-35m-darwin.so b/server/www/packages/packages-darwin/x64/PIL/_imaging.cpython-35m-darwin.so new file mode 100644 index 0000000000000000000000000000000000000000..1ea9b057170ec2b401970bde928a53a07344ce55 GIT binary patch literal 719328 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

  • P-khpN8`cTOJm}jF=?p}#zyu^HWjLbx$xgM&en#_k)u_U=HcQNx%Wl*|M2&dUO zl`G__gQw;nDbg6ZUQ!V=Mk*@iMU+0tjz6Gjh3 zJ-8gK1s{N9R0;!}ITrvKS)`e{nQwBECNPu%gKN~(y+M5su8`p`P?@V8AgeP^QSV6# za7>?!yIz#efyLCCuK2UANrb1&cU4o>VjWPOxkU0SyQO)&K1K7=CzU3mWnad|2 zDcOcvDkQmyT`63|60RQvzrhD?xkMfxpoH|_xLfvU>aK$vRTCdG4Vq*c3!w!cP&e(0 zMfu|Y29KIxT4>q{dET^@5$5(=CAiv8=2K@GXSUAQ#m(f@;jD#UU!99TrLkl!MPS;< zYI*YBw2}7$1ui0k8ZwhD27?Y|EAe6A9s`Y~b+v3W7*;!?Sf92V3|OeJl${r5o7KP) z=MdF?PN0f@cfHbEoxvh@-O_+Aru5nG>2R=#f{J^_r}>l}QPfK@WYjIOqJvbjXB}_C z4Ppn-7Y4@vV1v>0A$@e}gCnB2-e3`_RxHYu;i!(KPkoT!Z>d96hm{%5L@8S>)X9Gf z$_hJToA|8x+2I%s_FIvw(h-9_1GR3~n6 z6VD})Md;r?N-RPFyK*>3T_pZk5{;ljuCqefC+Kx6HXXyqp#PxJvXDi?!U?;sv^n7Tg3lI!Pw&<^4yiHd0D;gr%@!1h);$*pzu$LUK zDx9BftBIkej%w3bvJG;v6*%rB8n3@JNv!TbfeNMV&ZNNk>RbQWq~RN1EM&nUzTUV8 zq}S};-Kw)|P5JVm41m%6E!auyX+HKN zpx9)|qEXmvOBRV7PisQWvE?MV2vrq6OoCKyt4gh_^VC+%9X~Z5vA>b0e;bb+mQo<| z{=Gwow3r+l0a(s9#?c337m#NWy|II6j?7{?ze67!oq`$W;qo-wx77TMkCPvsIb>cO ziF#&B^h8xu>5q?^Kl%|Coky$R=fXqvX&v4X@)Lbd6&Rq;PPLDd^P`ofwWpi_dn&-~ zA1LM=9fs){hoDyFTBhNe?J_rmtCie#Kbg!(iC8@@{x!MEBX^*ys_U$b+>uooxxs5b zE1kseb19dOn0EHvn6fsr^B>d5yk3j;A9moqn_oN>=d6&!7uXz!D~)S#GTvQb&sh;_ zpA-pPdI%>1+-)hHDW&n0s9YPgaZ$66lfrVm62Fp}n%GtACY%QnpnnLIm63VbfSgqx`Hoi(l;T`sU7ggA2COR}o5`~N+*#|;Ezh;J!2-Dm zVPtEdfaPu^c6^BiC!pttGdZj);F-l)Sh*akor#TV*?r*SpD-0^hGBUdgLZDCGnokl zjp}4$-6Gnf%`2qMx<&3(C7!?{O}0?~Fg_=$4Lzc&6+{K?>i=)Pd9g1^29>@Y~+f=h6j)UOt6T}Q3`0(m2J&b5H0?h;>x8yYieFh zg7b0D^1>*NVrog4$rDQg);_`2w$NwnI#^2w4oXmdsaEIJP)JA-HZE3qdU$yepVH_c z6g#WQ5RbL-O|P8#ugve{{8+f7k1Fve%p$M#q?f-qlUk899+2e@QkPxnbEeBDNW*$h zB^-?@v-Cr?oC$|++{cNaFH=V3cdGFDzmv-B2c?QY!2uTjV^Es?Oaz=Q#^c0N-iATT zD<0HcVg@>$e>qC-BBC`(q6!=G$vf&ukKKsG_WdiZi|DzPRK!0-&zwk)^!3g*wE$Ct z)HGMsBDIN(K>?LX+pEsb{0)Vp=N+X$nJS<*T+Mmvd6p7IT>;a$tB4NDiQ`PErl(a) zJZRs1PGhrFxn%yBf_Zl4d6IvnlRui+?hQX;Ba59vpR#$3-XVn$vQpcSV#zlAPWCmD zy+UVi3D^$``hx|#O4!{Z5y+SX3qG-z$#}5uwVNfyjBxV{hkRzi7JHc*{7CIdtk(Mr zu&!BeEO{4R60jbeP1b;=#7UFOA(q^ylGWW%mb$4&Qk!%tVwPIzt-gSYo$N}g%BM|4 zE>+Cct}4lz7Oqk)XxBM^m$Bqr)q=XR%BpM%_&bax@59Tix&>Gdh2_0Tz0(>EjBF9B zsy-gv)`E+e#dQl3&D^MaP|J_?+->~j7NjK$rN+t!tk6TmvccVgS888w;rb>TJ9+1> za#g?89Vlo?t^ZN!3i}2}xgT6=Ro+YC`%M2XV^NejWrdy%Saa5z{!PXr@#?dx0J5r6 z-kao|vr=KNYs>;sjg5pADgGMV0N_bbxTLgNU zfe7?!gDMj`<-|`5EexrxX7_+HC-$ySs4tr+C>W?}ao|)EsbeXd#LeH3 z@=E_8kU5SVu`yCbB0hwrh$H} oEfEw$9$I(QWR2!Mnxn|~y%QxTe~CE;8dYm)rX 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 kcc_USsfUP@+7kdUZ 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

    错误

    导出数据时发生错误:{}'.format(sql)) - - self.finish() - - -class ImportDatabaseHandler(TPBaseAdminAuthHandler): - # TODO: 导入操作可能会比较耗时,应该分离导入和获取导入状态两个过程,在页面上可以呈现导入进度,并列出导出成功/失败的项 - - @tornado.gen.coroutine - def post(self): - """ - sql导入规则: - 以事务方式执行sql语句 - """ - ret = dict() - ret['code'] = 0 - ret['message'] = '' - - sql_filename = '' - - try: - upload_path = os.path.join(cfg.data_path, 'tmp') # 文件的暂存路径 - if not os.path.exists(upload_path): - os.mkdir(upload_path) - file_metas = self.request.files['sqlfile'] # 提取表单中‘name’为‘file’的文件元数据 - for meta in file_metas: - now = time.localtime(time.time()) - tmp_name = 'upload-{:04d}{:02d}{:02d}{:02d}{:02d}{:02d}.sql'.format(now.tm_year, now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec) - sql_filename = os.path.join(upload_path, tmp_name) - with open(sql_filename, 'wb') as f: - f.write(meta['body']) - - # file encode maybe utf8 or gbk... check it out. - file_encode = None - with open(sql_filename, encoding='utf8') as f: - try: - f.readlines() - file_encode = 'utf8' - except: - pass - - if file_encode is None: - os.remove(sql_filename) - log.e('file `{}` unknown encode, neither GBK nor UTF8.\n'.format(sql_filename)) - ret['code'] = -2 - ret['message'] = 'upload sql file is not utf8 encode.' - return self.write(json.dumps(ret).encode('utf8')) - - db_ver_checked = False - with open(sql_filename, encoding=file_encode) as f: - db = get_db() - sql = [] - lines = f.readlines() - for line in lines: - line = line.strip('\r\n') - if line.startswith('-- DATABASE VERSION '): - x = line.split(' ') - if len(x) != 4: - ret['code'] = -1 - ret['message'] = 'SQL文件格式错误,无法解析数据库版本' - return self.write(json.dumps(ret).encode('utf8')) - db_ver_sql = int(x[3].strip()) - if db.DB_VERSION != db_ver_sql: - ret['code'] = -1 - ret['message'] = 'SQL文件数据库版本为 {},当前数据版本为 {},不允许导入!'.format(db_ver_sql, db.DB_VERSION) - return self.write(json.dumps(ret).encode('utf8')) - db_ver_checked = True - continue - - if not db_ver_checked: - continue - - if line .startswith('TRUNCATE TABLE '): - x = line.split(' ', 2) - _table_name = '`{}{}`'.format(db.table_prefix, x[2][1:-2]) - if db.db_type == db.DB_TYPE_MYSQL: - x[2] = _table_name - line = ' '.join(x) - line += ';' - sql.append(line) - elif db.db_type == db.DB_TYPE_SQLITE: - sql.append('DELETE FROM {};'.format(_table_name)) - sql.append('UPDATE `sqlite_sequence` SET `seq`=0 WHERE `name`="{}";'.format(_table_name[1:-1])) - - if line.startswith('INSERT INTO '): - x = line.split(' ', 3) - _table_name = '`{}{}`'.format(db.table_prefix, x[2][1:-1]) - x[2] = _table_name - line = ' '.join(x) - sql.append(line) - - if not db_ver_checked: - ret['code'] = -1 - ret['message'] = 'SQL文件格式错误,未能确定数据库版本' - return self.write(json.dumps(ret).encode('utf8')) - - db_ret = db.transaction(sql) - if not db_ret: - ret['code'] = -1 - ret['message'] = 'SQL语句执行出错' - return self.write(json.dumps(ret).encode('utf8')) - - ret['code'] = 0 - return self.write(json.dumps(ret).encode('utf8')) - except: - log.e('error\n') - ret['code'] = -6 - ret['message'] = '发生异常.' - return self.write(json.dumps(ret).encode('utf8')) - - finally: - if os.path.exists(sql_filename): - os.remove(sql_filename) diff --git a/server/www/teleport/app/eom_app/controller/dashboard.py b/server/www/teleport/app/eom_app/controller/dashboard.py deleted file mode 100644 index 5f6030d..0000000 --- a/server/www/teleport/app/eom_app/controller/dashboard.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- - -import tornado.ioloop -from .base import TPBaseAdminAuthHandler - - -class IndexHandler(TPBaseAdminAuthHandler): - def get(self): - self.render('dashboard/index.mako') diff --git a/server/www/teleport/app/eom_app/controller/group.py b/server/www/teleport/app/eom_app/controller/group.py deleted file mode 100644 index 5615638..0000000 --- a/server/www/teleport/app/eom_app/controller/group.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- - -from eom_app.app.configs import app_cfg -from eom_app.module import host -from .base import TPBaseAdminAuthHandler, TPBaseAdminAuthJsonHandler - -cfg = app_cfg() - - -class IndexHandler(TPBaseAdminAuthHandler): - def get(self): - self.render('group/index.mako') - - -class GetListHandler(TPBaseAdminAuthJsonHandler): - def post(self): - group_list = host.get_group_list() - ret = dict() - ret['page_index'] = 10 - ret['total'] = len(group_list) - ret['data'] = group_list - self.write_json(0, data=ret) diff --git a/server/www/teleport/app/eom_app/controller/host.py b/server/www/teleport/app/eom_app/controller/host.py deleted file mode 100644 index 7d41ce8..0000000 --- a/server/www/teleport/app/eom_app/controller/host.py +++ /dev/null @@ -1,928 +0,0 @@ -# -*- coding: utf-8 -*- - -import time -import csv -import os -import json -import threading -import tornado.gen -import tornado.httpclient - -from eom_app.app.configs import app_cfg -from eom_app.app.util import * -from eom_app.module import host -from eom_common.eomcore.logger import * -from eom_app.app.session import web_session -from .base import TPBaseUserAuthHandler, TPBaseAdminAuthHandler, TPBaseUserAuthJsonHandler, TPBaseAdminAuthJsonHandler - -cfg = app_cfg() - -# 临时认证ID的基数,每次使用时均递减 -tmp_auth_id_base = -1 -tmp_auth_id_lock = threading.RLock() - - -class IndexHandler(TPBaseUserAuthHandler): - def get(self): - _user = self.get_session('user') - if _user is None: - return self.write(-1) - - param = dict() - - if cfg.core.detected: - param['core'] = { - 'ssh_port': cfg.core.ssh.port, - 'rdp_port': cfg.core.rdp.port, - 'telnet_port': cfg.core.telnet.port - } - else: - param['core'] = { - 'ssh_port': 0, - 'rdp_port': 0, - 'telnet_port': 0 - } - - param['group_list'] = host.get_group_list() - - if _user['type'] >= 100: - param['cert_list'] = host.get_cert_list() - self.render('host/admin_index.mako', page_param=json.dumps(param)) - else: - self.render('host/user_index.mako', page_param=json.dumps(param)) - - -class UploadAndImportHandler(TPBaseAdminAuthHandler): - # TODO: 导入操作可能会比较耗时,应该分离导入和获取导入状态两个过程,在页面上可以呈现导入进度,并列出导出成功/失败的项 - - @tornado.gen.coroutine - def post(self): - """ - csv导入规则: - 每一行的数据格式: 分组ID,操作系统,IP地址,端口,系统用户,系统密码,协议,密钥ID,状态,认证类型,描述 - 因为主机的唯一性在于 `IP地址 + 端口`,且允许一个 `IP地址 + 端口` 对应多个系统用户,因此,每一行的数据几乎没有限制。 - 在导入时: - 1. 对每一个第一次遇到的 `IP地址 + 端口` 组合,就在 ts_host_info 表中加一个条目,并在 ts_auth_info 表中加入一个用户。 - 2. 对于非第一次遇到的 `IP地址 + 端口` 组合,则仅仅在 ts_auth_info 表中加一个用户,不更改 ts_host_info 表中的现有数据。 - 3. `IP地址 + 端口 + 用户` 的组合不能重复。 - 4. 空行跳过,数据格式不正确的跳过。 - """ - ret = dict() - ret['code'] = 0 - ret['message'] = '' - ret['data'] = {} - ret['data']['msg'] = list() # 记录跳过的行(格式不正确,或者数据重复等) - csv_filename = '' - - try: - upload_path = os.path.join(cfg.data_path, 'tmp') # 文件的暂存路径 - if not os.path.exists(upload_path): - os.mkdir(upload_path) - file_metas = self.request.files['csvfile'] # 提取表单中‘name’为‘file’的文件元数据 - for meta in file_metas: - now = time.localtime(time.time()) - tmp_name = 'upload-{:04d}{:02d}{:02d}{:02d}{:02d}{:02d}.csv'.format(now.tm_year, now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec) - csv_filename = os.path.join(upload_path, tmp_name) - with open(csv_filename, 'wb') as f: - f.write(meta['body']) - - # file encode maybe utf8 or gbk... check it out. - file_encode = None - with open(csv_filename, encoding='gbk') as f: - try: - f.readlines() - file_encode = 'gbk' - except: - pass - - if file_encode is None: - with open(csv_filename, encoding='utf8') as f: - try: - f.readlines() - file_encode = 'utf8' - except: - pass - - if file_encode is None: - os.remove(csv_filename) - log.e('file `{}` unknown encode, neither GBK nor UTF8.\n'.format(csv_filename)) - ret['code'] = -2 - ret['message'] = 'upload csv file is neither gbk nor utf8 encode.' - return self.write(json.dumps(ret).encode('utf8')) - - with open(csv_filename, encoding=file_encode) as f: - csv_reader = csv.reader(f) - is_first_line = True - for csv_recorder in csv_reader: - # 跳过第一行,那是格式说明 - if is_first_line: - is_first_line = False - continue - - # 空行则忽略 - if len(csv_recorder) <= 1: - continue - - # 格式错误则记录在案,然后继续 - if len(csv_recorder) != 13: - ret['msg'].append({'reason': '格式错误', 'line': ', '.join(csv_recorder)}) - continue - - host_args = dict() - user_args = dict() - # 分组ID, 操作系统, IP地址, 端口, 协议, 状态, 描述, 系统用户, 系统密码, 是否加密,附加参数, 密钥ID, 认证类型 - - host_args['group_id'] = int(csv_recorder[0]) - host_args['host_sys_type'] = int(csv_recorder[1]) - host_args['host_ip'] = csv_recorder[2] - host_args['host_port'] = csv_recorder[3] - host_args['protocol'] = csv_recorder[4] - host_args['host_lock'] = csv_recorder[5] - host_args['host_desc'] = csv_recorder[6] - # 加入一个主机(如果已经存在,则直接返回已存在的条目的host_id) - host_id = host.add_host(host_args, must_not_exists=False) - if host_id < 0: - ret['msg'].append({'reason': '添加主机失败,操作数据库失败', 'line': ', '.join(csv_recorder)}) - continue - - user_args['host_id'] = host_id - user_args['user_name'] = csv_recorder[7] - user_pswd = csv_recorder[8] - is_encrypt = int(csv_recorder[9]) - user_args['user_param'] = csv_recorder[10].replace('\\n', '\n') - user_args['cert_id'] = int(csv_recorder[11]) - auth_mode = int(csv_recorder[12]) - user_args['auth_mode'] = auth_mode - user_args['user_pswd'] = '' - if auth_mode == 0: - pass - elif auth_mode == 1: - try: - if is_encrypt == 0: - _yr = async_enc(user_pswd) - return_data = yield _yr - if return_data is None: - ret['code'] = -3 - ret['message'] = 'can not encrypt by core server.' - return self.write(json.dumps(ret).encode('utf8')) - - if 'code' not in return_data or return_data['code'] != 0: - ret['code'] = -4 - ret['message'] = 'invalid result from encrypt by core server.' - return self.write(json.dumps(ret).encode('utf8')) - - tmp_pswd = return_data['data'] - - else: - tmp_pswd = user_pswd - - user_args['user_pswd'] = tmp_pswd - - except: - log.e('can not encrypt user password.\n') - ret['code'] = -5 - ret['message'] = '发生异常' - return self.write(json.dumps(ret).encode('utf8')) - - elif auth_mode == 2: - pass - else: - ret['data']['msg'].append({'reason': '未知的认证模式', 'line': ', '.join(csv_recorder)}) - log.e('auth_mode unknown\n') - continue - - uid = host.sys_user_add(user_args) - if uid < 0: - if uid == -100: - ret['data']['msg'].append({'reason': '添加登录账号失败,账号已存在', 'line': ', '.join(csv_recorder)}) - else: - ret['data']['msg'].append({'reason': '添加登录账号失败,操作数据库失败', 'line': ', '.join(csv_recorder)}) - - ret['code'] = 0 - return self.write(json.dumps(ret).encode('utf8')) - except: - log.e('error\n') - ret['code'] = -6 - ret['message'] = '发生异常.' - return self.write(json.dumps(ret).encode('utf8')) - - finally: - if os.path.exists(csv_filename): - os.remove(csv_filename) - - -class GetListHandler(TPBaseUserAuthJsonHandler): - def post(self): - _user = self.get_current_user() - if _user is None: - return self.write_json(-1, '尚未登录') - - filter = dict() - order = dict() - order['name'] = 'host_id' - order['asc'] = True - limit = dict() - limit['page_index'] = 0 - limit['per_page'] = 25 - - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - - tmp = list() - _filter = args['filter'] - for i in _filter: - if i == 'host_sys_type' and _filter[i] == 0: - tmp.append(i) - continue - if i == 'host_group' and _filter[i] == 0: - tmp.append(i) - continue - if i == 'search': - _x = _filter[i].strip() - if len(_x) == 0: - tmp.append(i) - continue - - for i in tmp: - del _filter[i] - - filter.update(_filter) - - _limit = args['limit'] - if _limit['page_index'] < 0: - _limit['page_index'] = 0 - if _limit['per_page'] < 10: - _limit['per_page'] = 10 - if _limit['per_page'] > 100: - _limit['per_page'] = 100 - - limit.update(_limit) - - _order = args['order'] - if _order is not None: - order['name'] = _order['k'] - order['asc'] = _order['v'] - if _user['type'] == 100: - _total, _hosts = host.get_all_host_info_list(filter, order, limit) - else: - filter['account_name'] = _user['name'] - _total, _hosts = host.get_host_info_list_by_user(filter, order, limit) - - ret = dict() - ret['page_index'] = limit['page_index'] - ret['total'] = _total - ret['data'] = _hosts - self.write_json(0, data=ret) - - -class GetGrouplist(TPBaseUserAuthJsonHandler): - def post(self): - group_list = host.get_group_list() - self.write_json(0, data=group_list) - - -class UpdateHandler(TPBaseUserAuthJsonHandler): - def post(self): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, '参数错误') - - if 'host_id' not in args or 'kv' not in args: - self.write_json(-2, '缺少必要参数') - - _ret = host.update(args['host_id'], args['kv']) - - if _ret: - self.write_json(0) - else: - self.write_json(-3, '数据库操作失败') - - -class AddHost(TPBaseUserAuthJsonHandler): - def post(self): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, '参数错误') - - try: - ret = host.add_host(args) - if ret > 0: - return self.write_json(0) - else: - if ret == -100: - return self.write_json(-100, '') - else: - return self.write_json(-2, '数据库操作失败,errcode:{}'.format(ret)) - except: - log.e('add host failed.\n') - return self.write_json(-3, '发生异常') - - -class LockHost(TPBaseUserAuthJsonHandler): - def post(self): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, '参数错误') - - host_id = args['host_id'] - lock = args['lock'] - try: - ret = host.lock_host(host_id, lock) - if ret: - return self.write_json(0) - else: - return self.write_json(-2, '数据库操作失败,errcode:{}'.format(ret)) - except: - log.e('lock host failed.\n') - return self.write_json(-3, '发生异常') - - -class DeleteHost(TPBaseUserAuthJsonHandler): - def post(self): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, '参数错误') - - host_list = args['host_list'] - try: - ret = host.delete_host(host_list) - if ret: - return self.write_json(0) - else: - return self.write_json(-2, '数据库操作失败,errcode:{}'.format(ret)) - except: - log.e('delete host failed.\n') - return self.write_json(-3, '发生异常') - - -class ExportHostHandler(TPBaseAdminAuthHandler): - def get(self): - self.set_header('Content-Type', 'application/octet-stream') - self.set_header('Content-Disposition', 'attachment; filename=teleport-host-export.csv') - - order = dict() - order['name'] = 'host_id' - order['asc'] = True - limit = dict() - limit['page_index'] = 0 - limit['per_page'] = 999999 - _total, _hosts = host.get_all_host_info_list(dict(), order, limit, True) - - self.write("分组ID, 操作系统, IP地址, 端口, 协议, 状态, 描述, 系统用户, 系统密码, 是否加密, 附加参数, 密钥ID, 认证类型\n".encode('gbk')) - - try: - - for h in _hosts: - auth_list = h['auth_list'] - # 分组ID, 操作系统, IP地址, 端口, 协议, 状态, 描述, 系统用户, 系统密码, 是否加密,附加参数, 密钥ID, 认证类型 - for j in auth_list: - row_string = '' - # row_string = str(h['host_id']) - # row_string += ',' - row_string += str(h['group_id']) - row_string += ',' - row_string += str(h['host_sys_type']) - row_string += ',' - row_string += h['host_ip'] - row_string += ',' - row_string += str(h['host_port']) - row_string += ',' - row_string += str(h['protocol']) - row_string += ',' - row_string += str(h['host_lock']) - row_string += ',' - row_string += h['host_desc'] - row_string += ',' - - # row_string += str(j['host_auth_id']) - # row_string += ',' - row_string += j['user_name'] - row_string += ',' - row_string += j['user_pswd'] - row_string += ',' - row_string += '1' - row_string += ',' - user_param = j['user_param'] - if len(user_param) > 0: - user_param = user_param.replace('\n', '\\n') - row_string += user_param - row_string += ',' - row_string += str(j['cert_id']) - row_string += ',' - row_string += str(j['auth_mode']) - - self.write(row_string.encode('gbk')) - self.write('\n') - - except IndexError: - self.write('**********************************************\n'.encode('gbk')) - self.write('!!错误!!\n'.encode('gbk')) - self.write('导出过程中发生了错误!!\n'.encode('gbk')) - self.write('**********************************************\n'.encode('gbk')) - log.e('') - - self.finish() - - -class GetCertList(TPBaseUserAuthJsonHandler): - def post(self): - _certs = host.get_cert_list() - if _certs is None or len(_certs) == 0: - return self.write_json(-1, '参数错误') - else: - return self.write_json(0, data=_certs) - - -class AddCert(TPBaseUserAuthJsonHandler): - @tornado.gen.coroutine - def post(self): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, '参数错误') - - cert_pub = args['cert_pub'] - cert_pri = args['cert_pri'] - cert_name = args['cert_name'] - - if len(cert_pri) == 0: - return self.write_json(-2, '参数错误,数据不完整') - - _yr = async_enc(cert_pri) - return_data = yield _yr - if return_data is None: - return self.write_json(-3, '调用核心服务加密失败') - - if 'code' not in return_data or return_data['code'] != 0: - return self.write_json(-4, '核心服务加密返回错误') - - cert_pri = return_data['data'] - - try: - ret = host.add_cert(cert_pub, cert_pri, cert_name) - if ret: - return self.write_json(0) - else: - return self.write_json(-5, '数据库操作失败,errcode:{}'.format(ret)) - except: - log.e('add cert failed.\n') - return self.write_json(-6, '发生异常') - - -class DeleteCert(TPBaseUserAuthJsonHandler): - def post(self): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, '参数错误') - - cert_id = args['cert_id'] - - try: - ret = host.delete_cert(cert_id) - if ret: - return self.write_json(0) - else: - if ret == -2: - return self.write_json(-2, '') - else: - return self.write_json(-3, '数据库操作失败,errcode:{}'.format(ret)) - except: - log.e('add cert failed.\n') - return self.write_json(-4, '发生异常') - - -class UpdateCert(TPBaseUserAuthJsonHandler): - @tornado.gen.coroutine - def post(self): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, '参数错误') - - cert_id = args['cert_id'] - cert_pub = args['cert_pub'] - cert_pri = args['cert_pri'] - cert_name = args['cert_name'] - - if len(cert_pri) > 0: - _yr = async_enc(cert_pri) - return_data = yield _yr - if return_data is None: - return self.write_json(-2, '调用核心服务加密失败') - - if 'code' not in return_data or return_data['code'] != 0: - return self.write_json(-3, '核心服务加密返回错误') - - cert_pri = return_data['data'] - - try: - ret = host.update_cert(cert_id, cert_pub, cert_pri, cert_name) - if ret: - return self.write_json(0) - else: - return self.write_json(-4, '数据库操作失败,errcode:{}'.format(ret)) - except: - log.e('update cert failed.\n') - return self.write_json(-5, '发生异常') - - -class AddGroup(TPBaseUserAuthJsonHandler): - def post(self): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, '参数错误') - - group_name = args['group_name'] - try: - ret = host.add_group(group_name) - if ret: - return self.write_json(0) - else: - return self.write_json(-2, '数据库操作失败,errcode:{}'.format(ret)) - except: - log.e('add group failed.\n') - return self.write_json(-3, '发生异常') - - -class UpdateGroup(TPBaseUserAuthJsonHandler): - def post(self): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, '参数错误') - - group_id = args['group_id'] - group_name = args['group_name'] - try: - ret = host.update_group(group_id, group_name) - if ret: - return self.write_json(0) - else: - return self.write_json(-2, '数据库操作失败,errcode:{}'.format(ret)) - except: - log.e('update group failed.\n') - return self.write_json(-3, '发生异常') - - -class DeleteGroup(TPBaseUserAuthJsonHandler): - def post(self): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, '参数错误') - - group_id = args['group_id'] - try: - ret = host.delete_group(group_id) - if ret == 0: - return self.write_json(0) - else: - if ret == -2: - return self.write_json(-2, '') - else: - return self.write_json(-3, '数据库操作失败,errcode:{}'.format(ret)) - except: - log.e('delete group failed.\n') - return self.write_json(-4, '发生异常') - - -class AddHostToGroup(TPBaseUserAuthJsonHandler): - def post(self): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, '参数错误') - - host_list = args['host_list'] - group_id = args['group_id'] - try: - ret = host.add_host_to_group(host_list, group_id) - if ret: - self.write_json(0) - else: - return self.write_json(-2, '数据库操作失败,errcode:{}'.format(ret)) - return - except: - log.e('add host to group failed.\n') - return self.write_json(-3, '发生异常') - - -class GetSessionId(TPBaseUserAuthJsonHandler): - @tornado.gen.coroutine - def post(self, *args, **kwargs): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, '参数错误') - - if 'auth_id' not in args: - return self.write_json(-1, '参数缺失') - - auth_id = args['auth_id'] - - req = {'method': 'request_session', 'param': {'authid': auth_id}} - _yr = async_post_http(req) - return_data = yield _yr - if return_data is None: - return self.write_json(-2, '调用核心服务获取会话ID失败') - - if 'code' not in return_data: - return self.write_json(-3, '核心服务获取会话ID时返回错误数据') - - _code = return_data['code'] - if _code != 0: - return self.write_json(-4, '核心服务获取会话ID时返回错误 {}'.format(_code)) - - try: - session_id = return_data['data']['sid'] - except IndexError: - return self.write_json(-5, '核心服务获取会话ID时返回错误数据') - - data = dict() - data['session_id'] = session_id - - return self.write_json(0, data=data) - - -class AdminGetSessionId(TPBaseUserAuthJsonHandler): - @tornado.gen.coroutine - def post(self, *args, **kwargs): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, '参数错误') - - if 'host_auth_id' not in args: - return self.write_json(-1, '参数缺失') - - _host_auth_id = int(args['host_auth_id']) - - user = self.get_current_user() - - # host_auth_id 对应的是 ts_auth_info 表中的某个条目,含有具体的认证数据,因为管理员无需授权即可访问所有远程主机,因此 - # 直接给出 host_auth_id,且account直接指明是当前登录用户(其必然是管理员) - - tmp_auth_info = host.get_host_auth_info(_host_auth_id) - if tmp_auth_info is None: - return self.write_json(-2, '指定数据不存在') - - tmp_auth_info['account_lock'] = 0 - tmp_auth_info['account_name'] = user['name'] - - with tmp_auth_id_lock: - global tmp_auth_id_base - tmp_auth_id_base -= 1 - auth_id = tmp_auth_id_base - - # 将这个临时认证信息放到session中备后续查找使用(10秒内有效) - web_session().set('tmp-auth-info-{}'.format(auth_id), tmp_auth_info, 10) - - req = {'method': 'request_session', 'param': {'authid': auth_id}} - _yr = async_post_http(req) - return_data = yield _yr - if return_data is None: - return self.write_json(-3, '调用核心服务获取会话ID失败') - - if 'code' not in return_data: - return self.write_json(-4, '核心服务获取会话ID时返回错误数据') - - _code = return_data['code'] - if _code != 0: - return self.write_json(-5, '核心服务获取会话ID时返回错误 {}'.format(_code)) - - try: - session_id = return_data['data']['sid'] - except IndexError: - return self.write_json(-5, '核心服务获取会话ID时返回错误数据') - - data = dict() - data['session_id'] = session_id - - return self.write_json(0, data=data) - - -class AdminFastGetSessionId(TPBaseAdminAuthJsonHandler): - @tornado.gen.coroutine - def post(self, *args, **kwargs): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, '参数错误') - - user = self.get_current_user() - - tmp_auth_info = dict() - - try: - _host_auth_id = int(args['host_auth_id']) - _user_pswd = args['user_pswd'] - _cert_id = int(args['cert_id']) - - tmp_auth_info['host_ip'] = args['host_ip'] - tmp_auth_info['host_port'] = int(args['host_port']) - tmp_auth_info['sys_type'] = int(args['sys_type']) - tmp_auth_info['protocol'] = int(args['protocol']) - tmp_auth_info['user_name'] = args['user_name'] - tmp_auth_info['auth_mode'] = int(args['auth_mode']) - tmp_auth_info['user_param'] = args['user_param'] - tmp_auth_info['encrypt'] = 1 - tmp_auth_info['account_lock'] = 0 - tmp_auth_info['account_name'] = user['name'] - except IndexError: - return self.write_json(-2, '参数缺失') - - if tmp_auth_info['auth_mode'] == 1: - if len(_user_pswd) == 0: # 修改登录用户信息时可能不会修改密码,因此页面上可能不会传来密码,需要从数据库中直接读取 - h = host.get_host_auth_info(_host_auth_id) - tmp_auth_info['user_auth'] = h['user_auth'] - else: # 如果页面上修改了密码或者新建账号时设定了密码,那么需要先交给core服务进行加密 - req = {'method': 'enc', 'param': {'p': _user_pswd}} - _yr = async_post_http(req) - return_data = yield _yr - if return_data is None: - return self.write_json(-3, '调用核心服务加密失败') - if 'code' not in return_data or return_data['code'] != 0: - return self.write_json(-3, '核心服务加密返回错误') - - tmp_auth_info['user_auth'] = return_data['data']['c'] - - elif tmp_auth_info['auth_mode'] == 2: - tmp_auth_info['user_auth'] = host.get_cert_info(_cert_id) - if tmp_auth_info['user_auth'] is None: - self.write_json(-100, '指定私钥不存在') - return - elif tmp_auth_info['auth_mode'] == 0: - tmp_auth_info['user_auth'] = '' - else: - self.write_json(-101, '认证类型未知') - return - - with tmp_auth_id_lock: - global tmp_auth_id_base - tmp_auth_id_base -= 1 - auth_id = tmp_auth_id_base - - web_session().set('tmp-auth-info-{}'.format(auth_id), tmp_auth_info, 10) - - req = {'method': 'request_session', 'param': {'authid': auth_id}} - _yr = async_post_http(req) - return_data = yield _yr - if return_data is None: - return self.write_json(-3, '调用核心服务获取会话ID失败') - - if 'code' not in return_data: - return self.write_json(-4, '核心服务获取会话ID时返回错误数据') - - _code = return_data['code'] - if _code != 0: - return self.write_json(-5, '核心服务获取会话ID时返回错误 {}'.format(_code)) - - try: - session_id = return_data['data']['sid'] - except IndexError: - return self.write_json(-5, '核心服务获取会话ID时返回错误数据') - - data = dict() - data['session_id'] = session_id - - return self.write_json(0, data=data) - - -class SysUserList(TPBaseUserAuthJsonHandler): - def post(self, *args, **kwargs): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, '参数错误') - - try: - host_id = args['host_id'] - except: - return self.write_json(-1, '参数缺失') - - data = host.sys_user_list(host_id) - return self.write_json(0, data=data) - - -class SysUserAdd(TPBaseUserAuthJsonHandler): - @tornado.gen.coroutine - def post(self, *args, **kwargs): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, '参数错误') - - try: - auth_mode = args['auth_mode'] - user_pswd = args['user_pswd'] - cert_id = args['cert_id'] - except: - return self.write_json(-1, '参数缺失') - - if auth_mode == 1: - if 0 == len(args['user_pswd']): - return self.write_json(-2, '参数缺失') - - _yr = async_enc(user_pswd) - return_data = yield _yr - if return_data is None: - return self.write_json(-3, '调用核心服务加密失败') - - if 'code' not in return_data or return_data['code'] != 0: - return self.write_json(-3, '核心服务加密返回错误') - - args['user_pswd'] = return_data['data'] - - user_id = host.sys_user_add(args) - if user_id < 0: - if user_id == -100: - return self.write_json(user_id, '同名账户已经存在!') - else: - return self.write_json(user_id, '数据库操作失败!') - - return self.write_json(0) - - -class SysUserUpdate(TPBaseUserAuthJsonHandler): - @tornado.gen.coroutine - def post(self, *args, **kwargs): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, '参数错误') - - if 'host_auth_id' not in args or 'kv' not in args: - return self.write_json(-2, '参数缺失') - - kv = args['kv'] - if 'auth_mode' not in kv or 'user_pswd' not in kv or 'cert_id' not in kv: - return self.write_json(-3, '参数缺失') - - auth_mode = kv['auth_mode'] - if 'user_pswd' in kv: - user_pswd = kv['user_pswd'] - if 0 == len(user_pswd): - args['kv'].pop('user_pswd') - user_pswd = None - else: - user_pswd = None - - cert_id = kv['cert_id'] - if auth_mode == 1 and user_pswd is not None: - _yr = async_enc(user_pswd) - return_data = yield _yr - if return_data is None: - return self.write_json(-4, '调用核心服务加密失败') - - if 'code' not in return_data or return_data['code'] != 0: - return self.write_json(-5, '核心服务加密返回错误') - - args['kv']['user_pswd'] = return_data['data'] - - if host.sys_user_update(args['host_auth_id'], args['kv']): - return self.write_json(0) - - return self.write_json(-6, '数据库操作失败') - - -class SysUserDelete(TPBaseUserAuthJsonHandler): - def post(self, *args, **kwargs): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, '参数错误') - - try: - host_auth_id = args['host_auth_id'] - except IndexError: - return self.write_json(-2, '参数缺失') - - if host.sys_user_delete(host_auth_id): - return self.write_json(0) - - return self.write_json(-3, '数据库操作失败') diff --git a/server/www/teleport/app/eom_app/controller/index.py b/server/www/teleport/app/eom_app/controller/index.py deleted file mode 100644 index 1710131..0000000 --- a/server/www/teleport/app/eom_app/controller/index.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -import sys -import tornado.ioloop -from .base import TPBaseHandler, TPBaseUserAuthHandler - - -class IndexHandler(TPBaseUserAuthHandler): - def get(self): - self.redirect('/host') - - -class ExitHandler(TPBaseHandler): - def get(self): - self.write('exit ok') - tornado.ioloop.IOLoop.instance().stop() - - -class UIDesignHandler(TPBaseHandler): - def get(self): - self.render('uidesign/index.mako') - - -class UIDesignWithoutSidebarHandler(TPBaseHandler): - def get(self): - self.render('uidesign/without-sidebar.mako') - - -class UIDesignTableHandler(TPBaseHandler): - def get(self): - # from hashlib import sha1 - # import hmac - # my_sign = hmac.new('key', 'msg', sha1).digest() - # # my_sign = base64.b64encode(my_sign) - # # print my_sign - - self.render('uidesign/table.mako') - diff --git a/server/www/teleport/app/eom_app/controller/rpc.py b/server/www/teleport/app/eom_app/controller/rpc.py deleted file mode 100644 index 9f83000..0000000 --- a/server/www/teleport/app/eom_app/controller/rpc.py +++ /dev/null @@ -1,133 +0,0 @@ -# -*- coding: utf-8 -*- - -import json -import urllib.parse - -import tornado.gen -from eom_app.app.configs import app_cfg -from eom_app.app.session import web_session -from eom_app.app.util import async_post_http -from eom_app.module import host, record -from eom_common.eomcore.logger import * -from .base import TPBaseJsonHandler - - -class RpcHandler(TPBaseJsonHandler): - @tornado.gen.coroutine - def get(self): - _uri = self.request.uri.split('?', 1) - if len(_uri) != 2: - return self.write_json(-1, message='need request param.') - - yield self._dispatch(urllib.parse.unquote(_uri[1])) - - @tornado.gen.coroutine - def post(self): - req = self.request.body.decode('utf-8') - if req == '': - return self.write_json(-1, message='need request param.') - - yield self._dispatch(req) - - @tornado.gen.coroutine - def _dispatch(self, req): - try: - _req = json.loads(req) - - if 'method' not in _req or 'param' not in _req: - return self.write_json(-1, message='invalid request format.') - except: - return self.write_json(-1, message='invalid json format.') - - if 'get_auth_info' == _req['method']: - return self._get_auth_info(_req['param']) - elif 'session_begin' == _req['method']: - return self._session_begin(_req['param']) - elif 'session_end' == _req['method']: - return self._session_end(_req['param']) - elif 'register_core' == _req['method']: - return self._register_core(_req['param']) - elif 'exit' == _req['method']: - return self._exit() - else: - log.e('WEB-JSON-RPC got unknown method: `{}`.\n'.format(_req['method'])) - - return self.write_json(-1, message='invalid method.') - - def _get_auth_info(self, param): - # 如果是页面上进行连接测试(增加或修改主机和用户时),信息并不写入数据库,而是在内存中存在,传递给core服务的 - # 应该是负数形式的authid。本接口支持区分这两种认证ID。 - - if 'authid' not in param: - return self.write_json(-1, message='invalid request.') - - authid = param['authid'] - if authid > 0: - # 根据authid从数据库中查询对应的数据,然后返回给调用者 - x = host.get_auth_info(param['authid']) - return self.write_json(0, data=x) - elif authid < 0: - x = web_session().taken('tmp-auth-info-{}'.format(authid), None) - return self.write_json(0, data=x) - else: - return self.write_json(-1, message='invalid auth id.') - - def _session_begin(self, param): - if 'sid' not in param: - return self.write_json(-1, message='invalid request.') - - try: - _sid = param['sid'] - _acc_name = param['account_name'] - _host_ip = param['host_ip'] - _sys_type = param['sys_type'] - _host_port = param['host_port'] - _auth_mode = param['auth_mode'] - _user_name = param['user_name'] - _protocol = param['protocol'] - except IndexError: - return self.write_json(-1, message='invalid request.') - - record_id = record.session_begin(_sid, _acc_name, _host_ip, _sys_type, _host_port, _auth_mode, _user_name, _protocol) - if record_id <= 0: - return self.write_json(-1, message='can not write database.') - else: - return self.write_json(0, data={'rid': record_id}) - - def _session_end(self, param): - if 'rid' not in param or 'code' not in param: - return self.write_json(-1, message='invalid request.') - - if not record.session_end(param['rid'], param['code']): - return self.write_json(-1, 'can not write database.') - else: - return self.write_json(0) - - def _register_core(self, param): - # 因为core服务启动了(之前可能非正常终止了),做一下数据库中会话状态的修复操作 - record.session_fix() - - if 'rpc' not in param: - return self.write_json(-1, 'invalid param.') - - app_cfg().common.core_server_rpc = param['rpc'] - - # 获取core服务的配置信息 - req = {'method': 'get_config', 'param': []} - _yr = async_post_http(req) - return_data = yield _yr - if return_data is None: - return self.write_json(-1, 'get config from core service failed.') - if 'code' not in return_data: - return self.write_json(-2, 'get config from core service return invalid data.') - if return_data['code'] != 0: - return self.write_json(-3, 'get config from core service return code: {}'.format(return_data['code'])) - - log.d('update core server config info.\n') - app_cfg().update_core(return_data['data']) - - return self.write_json(0) - - def _exit(self): - # set exit flag. - return self.write_json(0) diff --git a/server/www/teleport/app/eom_app/controller/user.py b/server/www/teleport/app/eom_app/controller/user.py deleted file mode 100644 index 6b05fb1..0000000 --- a/server/www/teleport/app/eom_app/controller/user.py +++ /dev/null @@ -1,296 +0,0 @@ -# -*- coding: utf-8 -*- - -import json - -from eom_app.app.configs import app_cfg -from eom_app.module import host -from eom_app.module import user -from eom_common.eomcore.logger import * -from .base import TPBaseUserAuthHandler, TPBaseUserAuthJsonHandler, TPBaseAdminAuthHandler, TPBaseAdminAuthJsonHandler - -cfg = app_cfg() - - -class IndexHandler(TPBaseAdminAuthHandler): - def get(self): - self.render('user/index.mako') - - -class PersonalHandler(TPBaseUserAuthHandler): - def get(self): - user_info = self.get_current_user() - self.render('user/personal.mako', user=user_info) - - -class AuthHandler(TPBaseAdminAuthHandler): - def get(self, user_name): - group_list = host.get_group_list() - cert_list = host.get_cert_list() - self.render('user/auth.mako', - group_list=group_list, - cert_list=cert_list, user_name=user_name) - - -class GetListHandler(TPBaseAdminAuthJsonHandler): - def post(self): - user_list = user.get_user_list(with_admin=False) - ret = dict() - ret['page_index'] = 10 - ret['total'] = len(user_list) - ret['data'] = user_list - self.write_json(0, data=ret) - - -class DeleteUser(TPBaseUserAuthJsonHandler): - def post(self): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, 'invalid param') - - user_id = args['user_id'] - try: - ret = user.delete_user(user_id) - if ret: - return self.write_json(0) - else: - return self.write_json(-2, 'database op failed.') - except: - log.e('delete user failed.\n') - return self.write_json(-3, 'got exception.') - - -class ModifyUser(TPBaseUserAuthJsonHandler): - def post(self): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, 'invalid param.') - - user_id = args['user_id'] - user_desc = args['user_desc'] - - try: - ret = user.modify_user(user_id, user_desc) - if ret: - self.write_json(0) - else: - self.write_json(-2, 'database op failed.') - return - except: - log.e('modify user failed.\n') - self.write_json(-3, 'got exception.') - - -class AddUser(TPBaseUserAuthJsonHandler): - def post(self): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, 'invalid param.') - - user_name = args['user_name'] - user_pwd = '123456' - user_desc = args['user_desc'] - if user_desc is None: - user_desc = '' - try: - ret = user.add_user(user_name, user_pwd, user_desc) - if 0 == ret: - return self.write_json(0) - else: - return self.write_json(ret, 'database op failed. errcode={}'.format(ret)) - except: - log.e('add user failed.\n') - return self.write_json(-3, 'got exception.') - - -class LockUser(TPBaseUserAuthJsonHandler): - def post(self): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, 'invalid param.') - - user_id = args['user_id'] - lock_status = args['lock_status'] - - try: - ret = user.lock_user(user_id, lock_status) - if ret: - return self.write_json(0) - else: - return self.write_json(-2, 'database op failed.') - except: - log.e('lock user failed.\m') - return self.write_json(-3, 'got exception.') - - -class ResetUser(TPBaseUserAuthJsonHandler): - def post(self): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, 'invalid param.') - - user_id = args['user_id'] - # lock_status = args['lock_status'] - - try: - ret = user.reset_user(user_id) - if ret: - return self.write_json(0) - else: - return self.write_json(-2, 'database op failed.') - except: - log.e('reset user failed.\n') - return self.write_json(-3, 'got exception.') - - -class HostList(TPBaseUserAuthJsonHandler): - def post(self): - filter = dict() - order = dict() - order['name'] = 'host_id' - order['asc'] = True - limit = dict() - limit['page_index'] = 0 - limit['per_page'] = 25 - - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - - tmp = list() - _filter = args['filter'] - for i in _filter: - if i == 'host_sys_type' and _filter[i] == 0: - tmp.append(i) - continue - if i == 'host_group' and _filter[i] == 0: - tmp.append(i) - continue - if i == 'search': - _x = _filter[i].strip() - if len(_x) == 0: - tmp.append(i) - continue - - for i in tmp: - del _filter[i] - - filter.update(_filter) - - _limit = args['limit'] - if _limit['page_index'] < 0: - _limit['page_index'] = 0 - if _limit['per_page'] < 10: - _limit['per_page'] = 10 - if _limit['per_page'] > 100: - _limit['per_page'] = 100 - - limit.update(_limit) - - _order = args['order'] - if _order is not None: - order['name'] = _order['k'] - order['asc'] = _order['v'] - - _total, _hosts = host.get_host_info_list_by_user(filter, order, limit) - - ret = dict() - ret['page_index'] = limit['page_index'] - ret['total'] = _total - ret['data'] = _hosts - self.write_json(0, data=ret) - - -class AllocHost(TPBaseUserAuthJsonHandler): - def post(self): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, 'invalid param.') - - user_name = args['user_name'] - host_list = args['host_list'] - try: - ret = user.alloc_host(user_name, host_list) - if ret: - return self.write_json(0) - else: - return self.write_json(-2, 'database op failed.') - except: - log.e('alloc host failed.') - self.write_json(-3, 'got exception.') - - -class AllocHostUser(TPBaseUserAuthJsonHandler): - def post(self): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, 'invalid param.') - - user_name = args['user_name'] - host_auth_id_list = args['host_list'] - try: - ret = user.alloc_host_user(user_name, host_auth_id_list) - if ret: - self.write_json(0) - else: - self.write_json(-2, 'database op failed.') - except: - log.e('alloc host for user failed.\n') - self.write_json(-3, 'got exception.') - - -class DeleteHost(TPBaseUserAuthJsonHandler): - def post(self): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - return self.write_json(-1, 'invalid param.') - - user_name = args['user_name'] - host_list = args['host_list'] - - try: - ret = user.delete_host(user_name, host_list) - if ret: - self.write_json(0) - else: - self.write_json(-2, 'database op failed.') - except: - log.e('delete host failed.\n') - self.write_json(-3, 'got exception.') - - -class DeleteHostUser(TPBaseUserAuthJsonHandler): - def post(self): - args = self.get_argument('args', None) - if args is not None: - args = json.loads(args) - else: - self.write_json(-1, 'invalid param.') - - user_name = args['user_name'] - auth_id_list = args['auth_id_list'] - - try: - ret = user.delete_host_user(user_name, auth_id_list) - if ret: - self.write_json(0) - else: - self.write_json(-2, 'database op failed.') - except: - log.e('delete host for user failed.\n') - self.write_json(-3, 'got exception.') diff --git a/server/www/teleport/app/eom_app/module/host.py b/server/www/teleport/app/eom_app/module/host.py deleted file mode 100644 index d6ec01b..0000000 --- a/server/www/teleport/app/eom_app/module/host.py +++ /dev/null @@ -1,741 +0,0 @@ -# -*- coding: utf-8 -*- - -import json -import time - -from eom_app.app.db import get_db, DbItem - - -# 获取主机列表,包括主机的基本信息 -def get_all_host_info_list(_filter, order, limit, with_pwd=False): - db = get_db() - - _where = '' - - if len(_filter) > 0: - _where = 'WHERE ( ' - - need_and = False - for k in _filter: - if k == 'host_group': - if need_and: - _where += ' AND' - _where += ' `b`.`group_id`={}'.format(_filter[k]) - need_and = True - elif k == 'host_sys_type': - if need_and: - _where += ' AND' - _where += ' `a`.`host_sys_type`={}'.format(_filter[k]) - need_and = True - elif k == 'search': - # 查找,限于主机ID和IP地址,前者是数字,只能精确查找,后者可以模糊匹配 - # 因此,先判断搜索项能否转换为数字。 - - if need_and: - _where += ' AND ' - - _where += '(' - _where += '`a`.`host_ip` LIKE "%{}%" OR `a`.`host_desc` LIKE "%{}%" )'.format(_filter[k], _filter[k], _filter[k]) - need_and = True - _where += ')' - - # http://www.jb51.net/article/46015.htm - field_a = ['host_id', 'host_lock', 'host_ip', 'host_port', 'protocol', 'host_desc', 'group_id', 'host_sys_type'] - field_b = ['group_name'] - - sql = 'SELECT COUNT(*) ' \ - 'FROM `{}host_info` AS a ' \ - 'LEFT JOIN `{}group` AS b ON `a`.`group_id`=`b`.`group_id` ' \ - '{};'.format(db.table_prefix, db.table_prefix, _where) - - db_ret = db.query(sql) - if db_ret is None: - return 0, list() - total_count = db_ret[0][0] - - # 修正分页数据 - _limit = '' - if len(limit) > 0: - _page_index = limit['page_index'] - _per_page = limit['per_page'] - _limit = 'LIMIT {},{}'.format(_page_index * _per_page, (_page_index + 1) * _per_page) - - if _page_index * _per_page >= total_count: - _page_index = int(total_count / _per_page) - _limit = 'LIMIT {},{}'.format(_page_index * _per_page, (_page_index + 1) * _per_page) - - # 生成排序规则 - _order = '' - if order is not None: - _order = 'ORDER BY ' - if 'host_id' == order['name']: - _order += '`a`.`host_id`' - elif 'ip' == order['name']: - _order += '`a`.`host_ip`' - else: - _order = '' - - if not order['asc'] and len(_order) > 0: - _order += ' DESC' - - sql = 'SELECT {},{} ' \ - 'FROM `{}host_info` AS a ' \ - 'LEFT JOIN `{}group` AS b ON `a`.`group_id`=`b`.`group_id` ' \ - '{} {} {};'.format(','.join(['`a`.`{}`'.format(i) for i in field_a]), - ','.join(['`b`.`{}`'.format(i) for i in field_b]), - db.table_prefix, db.table_prefix, - _where, _order, _limit) - - db_ret = db.query(sql) - if db_ret is None: - return 0, list() - - ret = list() - for item in db_ret: - x = DbItem() - x.load(item, ['a_{}'.format(i) for i in field_a] + - ['b_{}'.format(i) for i in field_b]) - - h = dict() - h['host_id'] = x.a_host_id - h['host_port'] = x.a_host_port - h['protocol'] = x.a_protocol - h['host_lock'] = x.a_host_lock - h['host_ip'] = x.a_host_ip - h['host_desc'] = x.a_host_desc - h['group_id'] = x.a_group_id - h['host_sys_type'] = x.a_host_sys_type - group_name = '默认分组' - if x.b_group_name is not None: - group_name = x.b_group_name - h['group_name'] = group_name - - # h['auth_list'] = list() - # auth_list = h['auth_list'] - h['auth_list'] = sys_user_list(x.a_host_id, with_pwd) - # auth = dict() - # auth['host_auth_id'] = x.c_id - # auth['auth_mode'] = x.c_auth_mode - # auth['user_name'] = x.c_user_name - # auth_list.append(auth) - - ret.append(h) - return total_count, ret - - -def get_host_info_list_by_user(_filter, order, limit): - db = get_db() - - _where = '' - if len(_filter) > 0: - _where = 'WHERE ( ' - - need_and = False - for k in _filter: - if k == 'host_group': - if need_and: - _where += ' AND' - _where += ' b.group_id={}'.format(_filter[k]) - need_and = True - elif k == 'host_sys_type': - if need_and: - _where += ' AND' - _where += ' b.host_sys_type={}'.format(_filter[k]) - need_and = True - - elif k == 'account_name': - if need_and: - _where += ' AND' - _where += ' a.account_name=\'{}\''.format(_filter[k]) - need_and = True - - elif k == 'search': - # 查找,限于主机ID和IP地址,前者是数字,只能精确查找,后者可以模糊匹配 - # 因此,先判断搜索项能否转换为数字。 - - if need_and: - _where += ' AND ' - - _where += '(' - _where += 'b.host_ip LIKE "%{}%" OR b.host_desc LIKE "%{}%" )'.format(_filter[k], _filter[k], _filter[k]) - need_and = True - - _where += ')' - - field_a = ['auth_id', 'host_id', 'account_name', 'host_auth_id'] - field_b = ['host_id', 'host_lock', 'host_ip', 'protocol', 'host_port', 'host_desc', 'group_id', 'host_sys_type'] - field_c = ['group_name'] - field_d = ['auth_mode', 'user_name'] - sql = 'SELECT COUNT(DISTINCT a.host_id) ' \ - 'FROM {}auth AS a ' \ - 'LEFT JOIN {}host_info AS b ON a.host_id = b.host_id ' \ - '{};'.format(db.table_prefix, db.table_prefix, _where) - - db_ret = db.query(sql) - total_count = db_ret[0][0] - - # 修正分页数据 - _limit = '' - if len(limit) > 0: - _page_index = limit['page_index'] - _per_page = limit['per_page'] - _limit = 'LIMIT {},{}'.format(_page_index * _per_page, (_page_index + 1) * _per_page) - - if _page_index * _per_page >= total_count: - _page_index = int(total_count / _per_page) - _limit = 'LIMIT {},{}'.format(_page_index * _per_page, (_page_index + 1) * _per_page) - - # 生成排序规则 - _order = '' - # log.d(order['name']) - if order is not None: - _order = 'ORDER BY ' - if 'host_id' == order['name']: - _order += 'b.host_id' - elif 'ip' == order['name']: - _order += 'b.host_ip' - else: - _order = '' - - if not order['asc'] and len(_order) > 0: - _order += ' DESC' - - sql = 'SELECT {}, {},{},{} ' \ - 'FROM {}auth AS a ' \ - 'LEFT JOIN {}host_info AS b ON a.host_id=b.host_id ' \ - 'LEFT JOIN {}group AS c ON b.group_id = c.group_id ' \ - 'LEFT JOIN {}auth_info AS d ON d.id = a.host_auth_id ' \ - '{} {} {};' \ - ''.format(','.join(['a.{}'.format(i) for i in field_a]), - ','.join(['b.{}'.format(i) for i in field_b]), - ','.join(['c.{}'.format(i) for i in field_c]), - ','.join(['d.{}'.format(i) for i in field_d]), - db.table_prefix, db.table_prefix, db.table_prefix, db.table_prefix, - _where, _order, _limit) - - db_ret = db.query(sql) - ret = list() - temp = dict() - for item in db_ret: - x = DbItem() - x.load(item, ['a_{}'.format(i) for i in field_a] + ['b_{}'.format(i) for i in field_b] + ['c_{}'.format(i) for i in field_c] + ['d_{}'.format(i) for i in field_d]) - - host_ip = x.b_host_ip - protocol = x.b_protocol - key = '{}-{}'.format(host_ip, protocol) - temp_auth = None - extend_auth_list = sys_user_list(x.b_host_id, False, x.a_host_auth_id) - if extend_auth_list is not None and len(extend_auth_list) > 0: - auth = extend_auth_list[0] - auth['auth_id'] = x.a_auth_id - temp_auth = auth - add = False - if key in temp: - h = temp[key] - auth_list = h['auth_list'] - auth_list.append(temp_auth) - h['auth_list'] = auth_list - else: - h = dict() - h['host_id'] = x.b_host_id - h['host_lock'] = x.b_host_lock - h['host_ip'] = host_ip - h['host_port'] = x.b_host_port - h['host_desc'] = x.b_host_desc - h['group_id'] = x.b_group_id - h['host_sys_type'] = x.b_host_sys_type - h['protocol'] = x.b_protocol - group_name = '默认分组' - if x.c_group_name is not None: - group_name = x.c_group_name - h['group_name'] = group_name - add = True - temp[key] = h - h['auth_list'] = list() - auth_list = h['auth_list'] - auth_list.append(temp_auth) - h['auth_list'] = auth_list - - if add: - ret.append(h) - - return total_count, ret - - -def get_group_list(): - db = get_db() - field_a = ['group_id', 'group_name'] - sql = 'SELECT {} FROM `{}group` AS a; '.format(','.join(['`a`.`{}`'.format(i) for i in field_a]), db.table_prefix) - db_ret = db.query(sql) - if db_ret is None: - return list() - - ret = list() - for item in db_ret: - x = DbItem() - x.load(item, ['a_{}'.format(i) for i in field_a]) - h = dict() - - h['id'] = x.a_group_id - h['group_name'] = x.a_group_name - ret.append(h) - return ret - - -def update(host_id, kv): - db = get_db() - - if len(kv) == 0: - return False - - _val = '' - for k in kv: - if len(_val) > 0: - _val += ',' - if k == 'desc': - _val += '`host_desc`="{}"'.format(kv[k]) - elif k == 'pro_port': - temp = json.dumps(kv[k]) - _val += '`{}`="{}"'.format(k, temp) - else: - _val += '`{}`="{}"'.format(k, kv[k]) - - sql = 'UPDATE `{}host_info` SET {} WHERE `host_id`={};'.format(db.table_prefix, _val, int(host_id)) - return db.exec(sql) - - -def get_cert_list(): - db = get_db() - field_a = ['cert_id', 'cert_name', 'cert_pub', 'cert_pri', 'cert_desc'] - sql = 'SELECT {} FROM `{}key` AS a;'.format(','.join(['`a`.`{}`'.format(i) for i in field_a]), db.table_prefix) - db_ret = db.query(sql) - - ret = list() - - if db_ret is None: - return ret - - for item in db_ret: - x = DbItem() - - x.load(item, ['a_{}'.format(i) for i in field_a]) - h = dict() - - h['cert_id'] = x.a_cert_id - if x.a_cert_name is None: - x.a_cert_name = '' - - h['cert_name'] = x.a_cert_name - h['cert_pub'] = x.a_cert_pub - - h['cert_pri'] = x.a_cert_pri - if x.a_cert_desc is None: - x.a_cert_desc = '' - h['cert_desc'] = x.a_cert_desc - ret.append(h) - return ret - - -def add_host(args, must_not_exists=True): - db = get_db() - - protocol = args['protocol'] - host_port = args['host_port'] - host_ip = args['host_ip'] - - sql = 'SELECT `host_id` FROM `{}host_info` WHERE (`host_ip`="{}" AND `protocol`={} AND `host_port`={});'.format(db.table_prefix, host_ip, protocol, host_port) - db_ret = db.query(sql) - if db_ret is not None and len(db_ret) > 0: - if not must_not_exists: - return db_ret[0][0] - else: - return -100 - - group_id = args['group_id'] - host_sys_type = args['host_sys_type'] - # pro_port = args['pro_port'] - # pro_port = json.dumps(pro_port) - # host_user_name = args['user_name'] - # host_user_pwd = args['user_pwd'] - # host_pro_type = args['pro_type'] - # cert_id = args['cert_id'] - # host_encrypt = 1 - # host_auth_mode = args['host_auth_mode'] - host_desc = args['host_desc'] - if len(host_desc) == 0: - host_desc = '描述未填写' - host_lock = 0 - - # - sql = 'INSERT INTO `{}host_info` (group_id, host_sys_type, host_ip, ' \ - 'host_port, protocol, host_lock, host_desc) ' \ - 'VALUES ({},{},"{}",{},{},{},"{}")' \ - ''.format(db.table_prefix, - group_id, host_sys_type, host_ip, - host_port, protocol, host_lock, host_desc) - - ret = db.exec(sql) - if not ret: - return -101 - - host_id = db.last_insert_id() - if host_id == -1: - return -102 - else: - return host_id - - -def lock_host(host_id, lock): - db = get_db() - sql = 'UPDATE `{}host_info` SET `host_lock`={} WHERE `host_id`={}'.format(db.table_prefix, int(lock), int(host_id)) - return db.exec(sql) - - -def delete_host(host_list): - # TODO: 使用事务的方式防止删除操作中途失败 - db = get_db() - for item in host_list: - host_id = int(item) - sql = 'DELETE FROM `{}host_info` WHERE `host_id`={};'.format(db.table_prefix, host_id) - ret = db.exec(sql) - - sql = 'DELETE FROM `{}auth_info` WHERE `host_id`={};'.format(db.table_prefix, host_id) - ret = db.exec(sql) - - sql = 'DELETE FROM `{}auth` WHERE `host_id`={};'.format(db.table_prefix, host_id) - ret = db.exec(sql) - return True - - -def add_cert(cert_pub, cert_pri, cert_name): - db = get_db() - sql = 'INSERT INTO `{}key` (`cert_pub`, `cert_pri`, `cert_name`) VALUES ("{}","{}","{}")'.format(db.table_prefix, cert_pub, cert_pri, cert_name) - return db.exec(sql) - - -def delete_cert(cert_id): - db = get_db() - sql = 'DELETE FROM `{}key` WHERE `cert_id`={};'.format(db.table_prefix, int(cert_id)) - return db.exec(sql) - - -def update_cert(cert_id, cert_pub, cert_pri, cert_name): - db = get_db() - - if 0 == len(cert_pri): - sql = 'UPDATE `{}key` SET `cert_pub`="{}",`cert_name`="{}" ' \ - 'WHERE `cert_id`={};'.format(db.table_prefix, cert_pub, cert_name, int(cert_id)) - else: - sql = 'UPDATE `{}key` SET `cert_pub`="{}", `cert_pri`="{}", `cert_name`="{}" ' \ - 'WHERE `cert_id`={};'.format(db.table_prefix, cert_pub, cert_pri, cert_name, int(cert_id)) - - return db.exec(sql) - - -def add_group(group_name): - db = get_db() - sql = 'INSERT INTO `{}group` (`group_name`) VALUES ("{}");'.format(db.table_prefix, group_name) - return db.exec(sql) - - -def delete_group(group_id): - db = get_db() - sql = 'SELECT `host_id` FROM `{}host_info` WHERE `group_id`={};'.format(db.table_prefix, int(group_id)) - db_ret = db.query(sql) - if len(db_ret) != 0: - return -2 - - sql = 'DELETE FROM `{}group` WHERE `group_id`={};'.format(db.table_prefix, group_id) - ret = db.exec(sql) - if ret: - return 0 - return -3 - - -def update_group(group_id, group_name): - db = get_db() - sql = 'UPDATE `{}group` SET `group_name`="{}" ' \ - 'WHERE `group_id`={};'.format(db.table_prefix, group_name, int(group_id)) - return db.exec(sql) - - -def add_host_to_group(host_list, group_id): - db = get_db() - group_id = int(group_id) - for item in host_list: - host_id = int(item) - sql = 'UPDATE `{}host_info` SET group_id={} ' \ - 'WHERE `host_id`={};'.format(db.table_prefix, group_id, host_id) - ret = db.exec(sql) - return ret - - -def get_host_auth_info(host_auth_id): - db = get_db() - - field_a = ['id', 'auth_mode', 'user_name', 'user_pswd', 'user_param', 'cert_id', 'encrypt'] - field_b = ['host_id', 'host_lock', 'host_ip', 'host_port', 'host_desc', 'group_id', 'host_sys_type', 'protocol'] - - sql = 'SELECT {},{} ' \ - 'FROM `{}auth_info` AS a ' \ - 'LEFT JOIN `{}host_info` AS b ON `a`.`host_id`=`b`.`host_id` ' \ - 'WHERE `a`.`id`={};'.format(','.join(['`a`.`{}`'.format(i) for i in field_a]), - ','.join(['`b`.`{}`'.format(i) for i in field_b]), - db.table_prefix, db.table_prefix, - host_auth_id) - db_ret = db.query(sql) - - if db_ret is None or len(db_ret) != 1: - return None - x = DbItem() - x.load(db_ret[0], ['a_{}'.format(i) for i in field_a] + ['b_{}'.format(i) for i in field_b]) - - h = dict() - h['host_ip'] = x.b_host_ip - h['host_port'] = x.b_host_port - h['sys_type'] = x.b_host_sys_type - h['auth_mode'] = x.a_auth_mode - h['user_name'] = x.a_user_name - h['protocol'] = x.b_protocol - - if x.a_encrypt is None: - h['encrypt'] = 1 - else: - h['encrypt'] = x.a_encrypt - - if x.a_user_param is None: - h['user_param'] = '' - else: - h['user_param'] = x.a_user_param - - h['user_auth'] = x.a_user_pswd - - if x.a_auth_mode == 1: - h['user_auth'] = x.a_user_pswd - elif x.a_auth_mode == 2: - if x.a_cert_id is None: - cert_id = 0 - else: - cert_id = int(x.a_cert_id) # int(user_auth) - sql = 'SELECT `cert_pri` FROM `{}key` WHERE `cert_id`={};'.format(db.table_prefix, cert_id) - db_ret = db.query(sql) - if db_ret is not None and len(db_ret) == 1: - (cert_pri,) = db_ret[0] - h['user_auth'] = cert_pri - else: - return None - elif x.a_auth_mode == 0: - h['user_auth'] = '' - else: - return None - - return h - - -def get_cert_info(cert_id): - db = get_db() - sql = 'SELECT `cert_pri` FROM `{}key` WHERE `cert_id`={};'.format(db.table_prefix, cert_id) - db_ret = db.query(sql) - if db_ret is not None and len(db_ret) == 1: - (cert_pri,) = db_ret[0] - return cert_pri - else: - return None - - -def sys_user_list(host_id, with_pwd=True, host_auth_id=0): - db = get_db() - field_a = ['id', 'host_id', 'auth_mode', 'user_name', 'user_pswd', 'user_param', 'cert_id', 'log_time'] - if host_auth_id == 0: - sql = 'SELECT {} ' \ - 'FROM `{}auth_info` AS a ' \ - 'WHERE `a`.`host_id`={};'.format(','.join(['`a`.`{}`'.format(i) for i in field_a]), db.table_prefix, int(host_id)) - else: - sql = 'SELECT {} ' \ - 'FROM `{}auth_info` AS a ' \ - 'WHERE `a`.`id`={} and `a`.`host_id`={};'.format(','.join(['`a`.`{}`'.format(i) for i in field_a]), db.table_prefix, int(host_auth_id), int(host_id)) - - db_ret = db.query(sql) - - if db_ret is None: - return None - ret = list() - for item in db_ret: - x = DbItem() - x.load(item, ['a_{}'.format(i) for i in field_a]) - - h = dict() - # h['id'] = x.a_id - - h['host_auth_id'] = x.a_id - h['host_id'] = x.a_host_id - # h['pro_type'] = x.a_pro_type - h['auth_mode'] = x.a_auth_mode - h['user_name'] = x.a_user_name - if with_pwd: - h['user_pswd'] = x.a_user_pswd - - if x.a_user_param is None: - h['user_param'] = '' - else: - h['user_param'] = x.a_user_param - - h['cert_id'] = x.a_cert_id - h['log_time'] = x.a_log_time - # if x.a_auth_mode == 2: - # h['user_auth'] = x.a_user_auth - # else: - # h['user_auth'] = "******" - ret.append(h) - - return ret - - -def GetNowTime(): - return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) - - -def sys_user_add(args): - host_id = int(args['host_id']) - auth_mode = int(args['auth_mode']) - user_name = args['user_name'] - user_pswd = args['user_pswd'] - cert_id = int(args['cert_id']) - - if 'user_param' in args: - user_param = args['user_param'] - else: - user_param = 'ogin:\nassword:' - - encrypt = 1 - - db = get_db() - - # 判断此登录账号是否已经存在,如果存在则报错 - sql = 'SELECT `id` FROM `{}auth_info` WHERE (`host_id`={} AND `auth_mode`={} AND `user_name`="{}");'.format(db.table_prefix, host_id, auth_mode, user_name) - db_ret = db.query(sql) - if db_ret is not None and len(db_ret) > 0: - return -100 - - log_time = GetNowTime() - - if auth_mode == 1: - sql = 'INSERT INTO `{}auth_info` (`host_id`,`auth_mode`,`user_name`,`user_pswd`,`user_param`,`encrypt`,`cert_id`,`log_time`) ' \ - 'VALUES ({},{},"{}","{}","{}",{}, {},"{}")' \ - ''.format(db.table_prefix, host_id, auth_mode, user_name, user_pswd, user_param, encrypt, 0, log_time) - elif auth_mode == 2: - sql = 'INSERT INTO `{}auth_info` (`host_id`,`auth_mode`,`user_name`,`user_pswd`,`user_param`,`encrypt`,`cert_id`,`log_time`) ' \ - 'VALUES ({},{},"{}","{}","{}",{},{},"{}")' \ - ''.format(db.table_prefix, host_id, auth_mode, user_name, '', user_param, encrypt, cert_id, log_time) - elif auth_mode == 0: - sql = 'INSERT INTO `{}auth_info` (`host_id`,`auth_mode`,`user_name`,`user_pswd`,`user_param`,`encrypt`,`cert_id`,`log_time`) ' \ - 'VALUES ({},{},"{}","{}","{}",{},{},"{}")' \ - ''.format(db.table_prefix, host_id, auth_mode, user_name, '', user_param, encrypt, 0, log_time) - ret = db.exec(sql) - if not ret: - return -101 - - user_id = db.last_insert_id() - if user_id == -1: - return -102 - else: - return user_id - - -def sys_user_update(_id, kv): - if len(kv) == 0: - return False - - _val = '' - for k in kv: - if len(_val) > 0: - _val += ',' - - _val += '`{}`="{}"'.format(k, kv[k]) - - db = get_db() - sql = 'UPDATE `{}auth_info` SET {} WHERE `id`={};'.format(db.table_prefix, _val, int(_id)) - return db.exec(sql) - - -def sys_user_delete(_id): - db = get_db() - try: - sql = 'DELETE FROM `{}auth_info` WHERE `id`={};'.format(db.table_prefix, int(_id)) - ret = db.exec(sql) - - sql = 'DELETE FROM `{}auth` WHERE `host_auth_id`={};'.format(db.table_prefix, int(_id)) - ret = db.exec(sql) - except: - return False - - return True - - -def get_auth_info(auth_id): - """ - 根据指定的auth_id查询相关的认证信息(远程主机IP、端口、登录用户名、登录密码或私钥,等等) - @param auth_id: integer - @return: - """ - db = get_db() - - field_a = ['auth_id', 'account_name', 'host_auth_id', 'host_id'] - field_b = ['host_sys_type', 'host_ip', 'host_port', 'protocol'] - field_c = ['user_pswd', 'cert_id', 'user_name', 'encrypt', 'auth_mode', 'user_param'] - field_d = ['account_lock'] - - sql = 'SELECT {},{},{},{} ' \ - 'FROM `{}auth` AS a ' \ - 'LEFT JOIN `{}host_info` AS b ON `a`.`host_id`=`b`.`host_id` ' \ - 'LEFT JOIN `{}auth_info` AS c ON `a`.`host_auth_id`=`c`.`id` ' \ - 'LEFT JOIN `{}account` AS d ON `a`.`account_name`=`d`.`account_name` ' \ - 'WHERE `a`.`auth_id`={};' \ - ''.format(','.join(['`a`.`{}`'.format(i) for i in field_a]), - ','.join(['`b`.`{}`'.format(i) for i in field_b]), - ','.join(['`c`.`{}`'.format(i) for i in field_c]), - ','.join(['`d`.`{}`'.format(i) for i in field_d]), - db.table_prefix, db.table_prefix, db.table_prefix, db.table_prefix, - auth_id) - - db_ret = db.query(sql) - - if db_ret is None or len(db_ret) != 1: - return None - - db_item = DbItem() - - db_item.load(db_ret[0], - ['a_{}'.format(i) for i in field_a] + - ['b_{}'.format(i) for i in field_b] + - ['c_{}'.format(i) for i in field_c] + - ['d_{}'.format(i) for i in field_d] - ) - - ret = dict() - ret['host_ip'] = db_item.b_host_ip - ret['sys_type'] = db_item.b_host_sys_type - ret['account_name'] = db_item.a_account_name - ret['account_lock'] = db_item.d_account_lock - # h['host_lock'] = x.a_host_lock - ret['host_port'] = db_item.b_host_port - ret['protocol'] = db_item.b_protocol - ret['encrypt'] = db_item.c_encrypt - ret['auth_mode'] = db_item.c_auth_mode - ret['user_name'] = db_item.c_user_name - ret['user_param'] = db_item.c_user_param - - if db_item.c_auth_mode == 1: - ret['user_auth'] = db_item.c_user_pswd - elif db_item.c_auth_mode == 2: - cert_id = db_item.c_cert_id - - sql = 'SELECT `cert_pri` FROM `{}key` WHERE `cert_id`={}'.format(db.table_prefix, int(cert_id)) - db_ret = db.query(sql) - if db_ret is None or len(db_ret) > 1: - return None - ret['user_auth'] = db_ret[0][0] - else: - pass - - return ret diff --git a/server/www/teleport/app/eom_app/module/record.py b/server/www/teleport/app/eom_app/module/record.py deleted file mode 100644 index 3a51561..0000000 --- a/server/www/teleport/app/eom_app/module/record.py +++ /dev/null @@ -1,207 +0,0 @@ -# -*- coding: utf-8 -*- - -import os -import shutil -import struct -import base64 - -from eom_app.app.configs import app_cfg -from eom_app.app.db import get_db -from eom_common.eomcore.logger import log -from eom_common.eomcore.utils import timestamp_utc_now - - -def read_record_head(record_id): - record_path = os.path.join(app_cfg().core.replay_path, 'ssh', '{:06d}'.format(int(record_id))) - header_file_path = os.path.join(record_path, 'tp-ssh.tpr') - file = None - try: - file = open(header_file_path, 'rb') - data = file.read() - offset = 0 - - magic, = struct.unpack_from('I', data, offset) # magic must be 1381126228, 'TPPR' - offset += 4 - ver, = struct.unpack_from('H', data, offset) - offset += 2 - protocol, = struct.unpack_from('H', data, offset) - offset += 2 - time_start, = struct.unpack_from('Q', data, offset) - offset += 8 - pkg_count, = struct.unpack_from('I', data, offset) - offset += 4 - time_used, = struct.unpack_from('I', data, offset) - offset += 4 - width, = struct.unpack_from('H', data, offset) - offset += 2 - height, = struct.unpack_from('H', data, offset) - offset += 2 - file_count, = struct.unpack_from('H', data, offset) - offset += 2 - total_size, = struct.unpack_from('I', data, offset) - offset += 4 - - account, = struct.unpack_from('16s', data, offset) - account = account.decode() - offset += 16 - user_name, = struct.unpack_from('16s', data, offset) - user_name = user_name.decode() - offset += 16 - ip, = struct.unpack_from('18s', data, offset) - ip = ip.decode() - offset += 18 - port, = struct.unpack_from('H', data, offset) - offset += 2 - - except Exception as e: - log.e(e) - return None - finally: - if file is not None: - file.close() - - header = dict() - header['start'] = time_start - header['file_count'] = file_count - header['time_used'] = time_used - header['width'] = width - header['height'] = height - header['account'] = account - header['user_name'] = user_name - header['ip'] = ip - header['port'] = port - - return header - - -def read_record_info(record_id, file_id): - record_path = os.path.join(app_cfg().core.replay_path, 'ssh', '{:06d}'.format(int(record_id))) - file_info = os.path.join(record_path, 'tp-ssh.{:03d}'.format(int(file_id))) - file = None - try: - file = open(file_info, 'rb') - data = file.read() - total_size = len(data) - - offset = 0 - data_size, = struct.unpack_from('I', data, offset) - offset += 4 - - data_list = list() - while True: - action, = struct.unpack_from('B', data, offset) - offset += 1 - - _size, = struct.unpack_from('I', data, offset) - offset += 4 - - _time, = struct.unpack_from('I', data, offset) - offset += 4 - - # skip reserved 3 bytes. - offset += 3 - - _format = '{}s'.format(_size) - _data, = struct.unpack_from(_format, data, offset) - offset += _size - - temp = dict() - temp['a'] = action - temp['t'] = _time - if action == 1: - # this is window size changed. - w, h = struct.unpack_from('HH', _data) - temp['w'] = w - temp['h'] = h - elif action == 2: - try: - _d = _data.decode() - temp['d'] = _d - except: - _data = base64.b64encode(_data) - temp['a'] = 3 - temp['d'] = _data.decode() - else: - return None - - data_list.append(temp) - if offset == total_size: - break - - except Exception as e: - log.e('failed to read record file: {}\n'.format(file_info)) - return None - finally: - if file is not None: - file.close() - return data_list - - -def delete_log(log_list): - try: - where = list() - for item in log_list: - where.append(' `id`={}'.format(item)) - - db = get_db() - sql = 'DELETE FROM `{}log` WHERE{};'.format(db.table_prefix, ' OR'.join(where)) - ret = db.exec(sql) - if not ret: - return False - - # TODO: 此处应该通过json-rpc接口通知core服务来删除重放文件。 - for item in log_list: - log_id = int(item) - try: - record_path = os.path.join(app_cfg().core.replay_path, 'ssh', '{:06d}'.format(log_id)) - if os.path.exists(record_path): - shutil.rmtree(record_path) - record_path = os.path.join(app_cfg().core.replay_path, 'rdp', '{:06d}'.format(log_id)) - if os.path.exists(record_path): - shutil.rmtree(record_path) - except Exception: - pass - - return True - except: - return False - - -def session_fix(): - try: - db = get_db() - sql = 'UPDATE `{}log` SET `ret_code`=7 WHERE `ret_code`=0;'.format(db.table_prefix) - return db.exec(sql) - except: - return False - - -def session_begin(sid, acc_name, host_ip, sys_type, host_port, auth_mode, user_name, protocol): - try: - db = get_db() - sql = 'INSERT INTO `{}log` (`session_id`,`account_name`,`host_ip`,`sys_type`,`host_port`,`auth_type`,`user_name`,`ret_code`,`begin_time`,`end_time`,`log_time`,`protocol`) ' \ - 'VALUES ("{}","{}","{}",{},{},{},"{}",{},{},{},"{}",{});' \ - ''.format(db.table_prefix, - sid, acc_name, host_ip, sys_type, host_port, auth_mode, user_name, 0, timestamp_utc_now(), 0, '', protocol) - - ret = db.exec(sql) - if not ret: - return -101 - - user_id = db.last_insert_id() - if user_id == -1: - return -102 - else: - return user_id - - except: - return False - - -def session_end(record_id, ret_code): - try: - db = get_db() - sql = 'UPDATE `{}log` SET `ret_code`={}, `end_time`={} WHERE `id`={};'.format(db.table_prefix, int(ret_code), timestamp_utc_now(), int(record_id)) - return db.exec(sql) - except: - return False diff --git a/server/www/teleport/app/eom_app/module/user.py b/server/www/teleport/app/eom_app/module/user.py deleted file mode 100644 index 44f603c..0000000 --- a/server/www/teleport/app/eom_app/module/user.py +++ /dev/null @@ -1,361 +0,0 @@ -# -*- coding: utf-8 -*- - -import hashlib - -from eom_app.app.configs import app_cfg -from eom_app.app.const import * -from eom_app.app.db import get_db, DbItem -from eom_app.app.util import sec_generate_password, sec_verify_password -from eom_app.app.oath import verify_oath_code - - -def verify_user(name, password, oath_code): - cfg = app_cfg() - db = get_db() - - sql = 'SELECT `account_id`, `account_type`, `account_desc`, `account_pwd`, `account_lock` FROM `{}account` WHERE `account_name`="{}";'.format(db.table_prefix, name) - db_ret = db.query(sql) - if db_ret is None: - # 特别地,如果无法取得数据库连接,有可能是新安装的系统,尚未建立数据库,此时应该处于维护模式 - # 因此可以特别地处理用户验证:用户名admin,密码admin可以登录为管理员 - if cfg.app_mode == APP_MODE_MAINTENANCE: - if name == 'admin' and password == 'admin': - return 1, 100, '系统管理员', 0 - return 0, 0, '', 0 - - if len(db_ret) != 1: - return 0, 0, '', 0 - - user_id = db_ret[0][0] - account_type = db_ret[0][1] - desc = db_ret[0][2] - locked = db_ret[0][4] - if locked == 1: - return 0, 0, '', locked - - if not sec_verify_password(password, db_ret[0][3]): - # 按新方法验证密码失败,可能是旧版本的密码散列格式,再尝试一下 - if db_ret[0][3] != hashlib.sha256(password.encode()).hexdigest(): - return 0, 0, '', locked - else: - # 发现此用户的密码散列格式还是旧的,更新成新的吧! - _new_sec_password = sec_generate_password(password) - sql = 'UPDATE `{}account` SET `account_pwd`="{}" WHERE `account_id`={}'.format(db.table_prefix, _new_sec_password, int(user_id)) - db.exec(sql) - - if oath_code is not None: - if not verify_oath(user_id, oath_code): - return 0, 0, '', 0 - - return user_id, account_type, desc, locked - - -def verify_oath(user_id, oath_code): - db = get_db() - - sql = 'SELECT `oath_secret` FROM `{}account` WHERE `account_id`={};'.format(db.table_prefix, user_id) - db_ret = db.query(sql) - if db_ret is None: - return False - - if len(db_ret) != 1: - return False - - oath_secret = str(db_ret[0][0]).strip() - if 0 == len(oath_secret): - return False - - return verify_oath_code(oath_secret, oath_code) - - -def modify_pwd(old_pwd, new_pwd, user_id): - db = get_db() - sql = 'SELECT `account_pwd` FROM `{}account` WHERE `account_id`={};'.format(db.table_prefix, int(user_id)) - db_ret = db.query(sql) - if db_ret is None or len(db_ret) != 1: - return -100 - - if not sec_verify_password(old_pwd, db_ret[0][0]): - # 按新方法验证密码失败,可能是旧版本的密码散列格式,再尝试一下 - if db_ret[0][0] != hashlib.sha256(old_pwd.encode()).hexdigest(): - return -101 - - _new_sec_password = sec_generate_password(new_pwd) - sql = 'UPDATE `{}account` SET `account_pwd`="{}" WHERE `account_id`={}'.format(db.table_prefix, _new_sec_password, int(user_id)) - db_ret = db.exec(sql) - if db_ret: - return 0 - else: - return -102 - - -def update_oath_secret(user_id, oath_secret): - db = get_db() - sql = 'UPDATE `{}account` SET `oath_secret`="{}" WHERE `account_id`={}'.format(db.table_prefix, oath_secret, int(user_id)) - db_ret = db.exec(sql) - if db_ret: - return 0 - else: - return -102 - - -def get_user_list(with_admin=False): - db = get_db() - ret = list() - - field_a = ['account_id', 'account_type', 'account_name', 'account_status', 'account_lock', 'account_desc'] - - if with_admin: - where = '' - else: - where = 'WHERE `a`.`account_type`<100' - - sql = 'SELECT {} FROM `{}account` as a {} ORDER BY `account_name`;'.format(','.join(['`a`.`{}`'.format(i) for i in field_a]), db.table_prefix, where) - db_ret = db.query(sql) - if db_ret is None: - return ret - - for item in db_ret: - x = DbItem() - x.load(item, ['a_{}'.format(i) for i in field_a]) - h = dict() - h['user_id'] = x.a_account_id - h['user_type'] = x.a_account_type - h['user_name'] = x.a_account_name - h['user_status'] = x.a_account_status - h['user_lock'] = x.a_account_lock - h['user_desc'] = x.a_account_desc - ret.append(h) - return ret - - -def delete_user(user_id): - db = get_db() - sql = 'DELETE FROM `{}account` WHERE `account_id`={};'.format(db.table_prefix, int(user_id)) - return db.exec(sql) - - -def lock_user(user_id, lock_status): - db = get_db() - sql = 'UPDATE `{}account` SET `account_lock`={} WHERE `account_id`={};'.format(db.table_prefix, lock_status, int(user_id)) - return db.exec(sql) - - -def reset_user(user_id): - db = get_db() - _new_sec_password = sec_generate_password('123456') - sql = 'UPDATE `{}account` SET `account_pwd`="{}" WHERE `account_id`={};'.format(db.table_prefix, _new_sec_password, int(user_id)) - return db.exec(sql) - - -def modify_user(user_id, user_desc): - db = get_db() - sql = 'UPDATE `{}account` SET `account_desc`="{}" WHERE `account_id`={};'.format(db.table_prefix, user_desc, int(user_id)) - return db.exec(sql) - - -def add_user(user_name, user_pwd, user_desc): - db = get_db() - sql = 'SELECT `account_id` FROM `{}account` WHERE `account_name`="{}";'.format(db.table_prefix, user_name) - db_ret = db.query(sql) - if db_ret is None or len(db_ret) != 0: - return -100 - - sec_password = sec_generate_password(user_pwd) - sql = 'INSERT INTO `{}account` (`account_type`, `account_name`, `account_pwd`, `account_status`,' \ - '`account_lock`,`account_desc`) VALUES (1,"{}","{}",0,0,"{}")'.format(db.table_prefix, user_name, sec_password, user_desc) - ret = db.exec(sql) - if ret: - return 0 - return -101 - - -def alloc_host(user_name, host_list): - db = get_db() - field_a = ['host_id'] - sql = 'SELECT {} FROM `{}auth` AS a WHERE `account_name`="{}";'.format(','.join(['`a`.`{}`'.format(i) for i in field_a]), db.table_prefix, user_name) - db_ret = db.query(sql) - ret = dict() - for item in db_ret: - x = DbItem() - x.load(item, ['a_{}'.format(i) for i in field_a]) - host_id = int(x.a_host_id) - ret[host_id] = host_id - - a_list = list() - for item in host_list: - if item in ret: - pass - else: - a_list.append(item) - try: - for item in a_list: - host_id = int(item) - sql = 'INSERT INTO `{}auth` (`account_name`, `host_id`) VALUES ("{}", {});'.format(db.table_prefix, user_name, host_id) - ret = db.exec(sql) - if not ret: - return False - return True - except: - return False - - -def alloc_host_user(user_name, host_auth_dict): - db = get_db() - field_a = ['host_id', 'host_auth_id'] - sql = 'SELECT {} FROM `{}auth` AS a WHERE `account_name`="{}";'.format(','.join(['`a`.`{}`'.format(i) for i in field_a]), db.table_prefix, user_name) - db_ret = db.query(sql) - ret = dict() - for item in db_ret: - x = DbItem() - x.load(item, ['a_{}'.format(i) for i in field_a]) - host_id = int(x.a_host_id) - host_auth_id = int(x.a_host_auth_id) - if host_id not in ret: - ret[host_id] = dict() - - temp = ret[host_id] - temp[host_auth_id] = host_id - ret[host_id] = temp - - add_dict = dict() - for k, v in host_auth_dict.items(): - host_id = int(k) - auth_id_list = v - for item in auth_id_list: - host_auth_id = int(item) - if host_id not in ret: - add_dict[host_auth_id] = host_id - continue - temp = ret[host_id] - if host_auth_id not in temp: - add_dict[host_auth_id] = host_id - continue - - try: - for k, v in add_dict.items(): - host_auth_id = int(k) - host_id = int(v) - sql = 'INSERT INTO `{}auth` (`account_name`, `host_id`, `host_auth_id`) VALUES ("{}", {}, {});'.format(db.table_prefix, user_name, host_id, host_auth_id) - ret = db.exec(sql) - if not ret: - return False - return True - except: - return False - - -def delete_host(user_name, host_list): - db = get_db() - try: - for item in host_list: - host_id = int(item) - sql = 'DELETE FROM `{}auth` WHERE `account_name`="{}" AND `host_id`={};'.format(db.table_prefix, user_name, host_id) - ret = db.exec(sql) - if not ret: - return False - return True - except: - return False - - -def delete_host_user(user_name, auth_id_list): - db = get_db() - try: - for item in auth_id_list: - auth_id = int(item) - sql = 'DELETE FROM `{}auth` WHERE `account_name`="{}" AND `auth_id`={};'.format(db.table_prefix, user_name, auth_id) - ret = db.exec(sql) - if not ret: - return False - return True - except: - return False - - -def get_log_list(_filter, limit): - db = get_db() - - _where = '' - - if len(_filter) > 0: - _where = 'WHERE ( ' - - need_and = False - for k in _filter: - if k == 'account_name': - if need_and: - _where += ' AND' - _where += ' `a`.`account_name`="{}"'.format(_filter[k]) - need_and = True - - if k == 'user_name': - if need_and: - _where += ' AND' - _where += ' `a`.`account_name`="{}"'.format(_filter[k]) - need_and = True - - elif k == 'search': - # 查找,限于主机ID和IP地址,前者是数字,只能精确查找,后者可以模糊匹配 - # 因此,先判断搜索项能否转换为数字。 - - if need_and: - _where += ' AND ' - - _where += '(' - _where += '`a`.`host_ip` LIKE "%{}%" )'.format(_filter[k]) - need_and = True - _where += ')' - - # http://www.jb51.net/article/46015.htm - field_a = ['id', 'session_id', 'account_name', 'host_ip', 'host_port', 'auth_type', 'sys_type', 'user_name', 'ret_code', - 'begin_time', 'end_time', 'log_time', 'protocol'] - - sql = 'SELECT COUNT(*) FROM `{}log` AS a {};'.format(db.table_prefix, _where) - - db_ret = db.query(sql) - total_count = db_ret[0][0] - # 修正分页数据 - _limit = '' - if len(limit) > 0: - _page_index = limit['page_index'] - _per_page = limit['per_page'] - _limit = 'LIMIT {},{}'.format(_page_index * _per_page, (_page_index + 1) * _per_page) - - if _page_index * _per_page >= total_count: - _page_index = int(total_count / _per_page) - _limit = 'LIMIT {},{}'.format(_page_index * _per_page, (_page_index + 1) * _per_page) - - sql = 'SELECT {} FROM `{}log` AS a {} ORDER BY `begin_time` DESC {};'.format(','.join(['a.{}'.format(i) for i in field_a]), db.table_prefix, _where, _limit) - db_ret = db.query(sql) - - ret = list() - for item in db_ret: - x = DbItem() - x.load(item, ['a_{}'.format(i) for i in field_a]) - h = dict() - h['id'] = x.a_id - h['session_id'] = x.a_session_id - h['account_name'] = x.a_account_name - h['host_ip'] = x.a_host_ip - h['host_port'] = x.a_host_port - h['auth_type'] = x.a_auth_type - h['sys_type'] = x.a_sys_type - h['user_name'] = x.a_user_name - h['ret_code'] = x.a_ret_code - cost_time = (x.a_end_time - x.a_begin_time) - if cost_time < 0: - cost_time = 0 - h['cost_time'] = cost_time - h['begin_time'] = x.a_begin_time - if x.a_protocol is not None: - h['protocol'] = x.a_protocol - else: - if x.a_sys_type == 1: - h['protocol'] = 1 - else: - h['protocol'] = 2 - - ret.append(h) - - return total_count, ret diff --git a/server/www/teleport/app/eom_common/__init__.py b/server/www/teleport/app/eom_common/__init__.py deleted file mode 100644 index 633f866..0000000 --- a/server/www/teleport/app/eom_common/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -# -*- coding: utf-8 -*- - diff --git a/server/www/teleport/app/eom_common/eomcore/__init__.py b/server/www/teleport/app/eom_common/eomcore/__init__.py deleted file mode 100644 index 2b99267..0000000 --- a/server/www/teleport/app/eom_common/eomcore/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- - -"""EOM Core Package.""" - -__version__ = '1.0.0.1' - -# import eomcore.logger as eom_log diff --git a/server/www/teleport/app/eom_common/eomcore/eom_mysql.py b/server/www/teleport/app/eom_common/eomcore/eom_mysql.py deleted file mode 100644 index aeb9908..0000000 --- a/server/www/teleport/app/eom_common/eomcore/eom_mysql.py +++ /dev/null @@ -1,243 +0,0 @@ -# -*- coding: utf-8 -*- - -import pymysql -import threading -from .logger import * - -mysql_pool = None - - -def get_mysql_pool(): - global mysql_pool - if mysql_pool is None: - mysql_pool = MySqlPool() - return mysql_pool - - -class MySQL: - - def __init__(self, host, user, pwd, db, port=3306): - self.host = host - self.port = port - self.user = user - self.pwd = pwd - self.db = db - self.login_timeout = 3 - self.conn = None - - def connect(self): - """ - 得到连接信息 - 返回: conn.cursor() - """ - if not self.db: - raise (NameError, "没有设置数据库信息") - # self.conn = pymysql.connect(host=self.host, port=self.port, user=self.user, password=self.pwd, - # login_timeout=self.login_timeout, database=self.db, charset="utf8") - try: - if self.conn is not None: - self.conn.ping() - else: - self.conn = pymysql.connect(host=self.host, - user=self.user, - passwd=self.pwd, - db=self.db, - port=self.port, - connect_timeout=self.login_timeout, - charset='utf8') - except pymysql.err.OperationalError: - log.e('pymsql 连接数据库失败[%s:%d]\n' % (self.host, self.port)) - return None - except Exception as e: - log.e('con 连接数据库失败[%s:%d]\n' % (self.host, self.port)) - return None - - cur = self.conn.cursor() - if not cur: - log.e('cur 连接数据库失败[%s:%d]\n' % (self.host, self.port)) - raise (NameError, "连接数据库失败") - else: - return cur - - # 调用实例 ms.ExecProcQuery('exec P_Agent_Cmd_Get @CmdGroupId=7') - def ExecProcQuery(self, sql): - try: - if self.connect() is None: - self.conn = None - return None - - cur = self.conn.cursor() - - cur.execute(sql) - - resList = cur.fetchall() - self.conn.commit() - except pymysql.OperationalError as e: - if self.conn is not None: - self.conn.close() - log.e('ExecProcQuery[%s,%s]\n' % (sql, str(e))) - return None - except Exception as e: - if self.conn is not None: - self.conn.close() - log.e('ExecProcQuery[%s,%s]\n' % (sql, str(e))) - return None - return resList - - def ExecProcNonQuery(self, sql): - try: - - if self.connect() is None: - self.conn = None - return False - - cur = self.conn.cursor() - cur.execute(sql) - self.conn.commit() - return True - except pymysql.OperationalError as e: - # self.conn.close() - if self.conn is not None: - self.conn.close() - log.e('ExecProcNonQuery[%s,%s]\n' % (sql, str(e))) - return False - except Exception as e: - if self.conn is not None: - self.conn.close() - log.e('ExecProcNonQuery[%s,%s]\n' % (sql, str(e))) - return False - - @staticmethod - def ExecNonQuery(mysql, sql): - try: - if mysql.connect() is None: - mysql.conn = None - return False - - cur = mysql.conn.cursor() - cur.execute(sql) - # self.conn.commit() - return True - except pymysql.OperationalError as e: - # self.conn.close() - if mysql.conn is not None: - mysql.conn.close() - log.e('ExecProcNonQuery[%s,%s]\n' % (sql, str(e))) - return False - except Exception as e: - if mysql.conn is not None: - mysql.conn.close() - log.e('ExecProcNonQuery[%s,%s]\n' % (sql, str(e))) - return False - - @staticmethod - def EndExecNonQuery(mysql): - try: - if mysql is None or mysql.conn is None: - return False - mysql.conn.commit() - return True - except pymysql.OperationalError as e: - # self.conn.close() - if mysql.conn is not None: - mysql.conn.close() - return False - except Exception as e: - if mysql.conn is not None: - mysql.conn.close() - return False - - def CallProc(self, proc_name, in_args, out_in_args=None): - sql = '' - ret_code = list() - try: - # print(in_args) - result = list() - - self.connect() - - cur = self.conn.cursor() - cur.callproc(proc_name, in_args) - # - - data_set = cur.fetchall() - result.append(data_set) - while True: - has_set = cur.nextset() - if not has_set: - break - data_set = cur.fetchall() - result.append(data_set) - - cur.execute('select 0;') - self.conn.commit() - - if out_in_args is not None: - sql = 'select ' - for item in out_in_args: - str_item = '@_{0}_{1},'.format(proc_name, item) - sql += str_item - - sql = sql[:-1] - code = cur.execute(sql) - # code = cur.execute('select @_p_test_1_2,@_p_test_1_3,@_p_test_1_4') - # ret_code = list() - if code == 1: - (data_set,) = cur.fetchall() - length = len(data_set) - for i in range(length): - ret_code.append(data_set[i]) - return result, ret_code - - except pymysql.OperationalError as e: - if self.conn is not None: - self.conn.close() - log.e('ExecProcNonQuery[%s,%s]\n' % (sql, str(e))) - return None - except Exception as e: - if self.conn is not None: - self.conn.close() - log.e('ExecProcNonQuery[%s,%s]\n' % (sql, str(e))) - return None - - -class MySqlPool: - def __init__(self): - self._conn_log = dict() - self._conn_sys = dict() - self._conn_common = dict() - self._db_ip = '' - self._db_port = 0 - self._db_user = '' - self._db_pass = '' - self._locker_log = threading.RLock() - self._locker_sys1 = threading.RLock() - self._locker_sys2 = threading.RLock() - - def init(self, db_ip, db_port, db_user, db_pass): - self._db_ip = db_ip - self._db_port = db_port - self._db_user = db_user - self._db_pass = db_pass - - def get_websqlcon(self): - with self._locker_log: - thread_id = threading.get_ident() - if thread_id not in self._conn_log: - my_sql = MySQL(self._db_ip, self._db_user, self._db_pass, 'ts_web', self._db_port) - self._conn_log[thread_id] = my_sql - return my_sql - - my_sql = self._conn_log[thread_id] - return my_sql - - def get_tssqlcon(self): - with self._locker_sys1: - thread_id = threading.get_ident() - if thread_id not in self._conn_sys: - my_sql = MySQL(self._db_ip, self._db_user, self._db_pass, 'ts_db', self._db_port) - self._conn_sys[thread_id] = my_sql - return my_sql - - my_sql = self._conn_sys[thread_id] - return my_sql diff --git a/server/www/teleport/app/eom_common/eomcore/eom_sqlite.py b/server/www/teleport/app/eom_common/eomcore/eom_sqlite.py deleted file mode 100644 index a4c693a..0000000 --- a/server/www/teleport/app/eom_common/eomcore/eom_sqlite.py +++ /dev/null @@ -1,153 +0,0 @@ -# coding=utf-8 -# -# Created: 04/02/2012 -# ------------------------------------------------------------------------------- - -import os -import sqlite3 -import threading - -from .logger import log - -sqlite_pool = None - - -def get_sqlite_pool(): - global sqlite_pool - if sqlite_pool is None: - sqlite_pool = SqlitePool() - return sqlite_pool - - -class eom_sqlite: - """ - """ - - def __init__(self, path): - self._db_file = path - self._conn = None - - def connect(self): - # if not os.path.exists(self._db_file): - # return None - try: - self._conn = sqlite3.connect(self._db_file) - except: - self._conn = None - raise RuntimeError('can not open database.') - return self._conn - - def ExecProcQuery(self, sql): - if self._conn is None: - if self.connect() is None: - return None - cursor = self._conn.cursor() - try: - - cursor.execute(sql) - db_ret = cursor.fetchall() - return db_ret - except Exception: - return None - finally: - cursor.close() - - def ExecProcNonQuery(self, sql): - if self._conn is None: - if self.connect() is None: - return False - - cursor = self._conn.cursor() - try: - cursor.execute(sql) - self._conn.commit() - except Exception: - log.e('can not create/open database.\n') - return False - finally: - cursor.close() - - return True - - def ExecManyProcNonQuery(self, sql): - if self._conn is None: - if self.connect() is None: - return False - - cursor = self._conn.cursor() - try: - cursor.executescript(sql) - self._conn.commit() - cursor.close() - except Exception as e: - log.e('can not create/open database.\n') - return False - - return True - - def close(self): - self._conn.close() - self._conn = None - - -class SqlitePool: - def __init__(self): - self._conn_sys = dict() - self._path = '' - self._locker_sys = threading.RLock() - self._config_server_ip = '' - - def init(self, path): - self._conn_sys.clear() - self._path = os.path.join(path, 'ts_db.db') - log.w('use sqlite database, db file: {}\n'.format(self._path)) - if not os.path.exists(self._path): - return False - - try: - sql_con = self.get_tssqlcon() - str_sql = 'SELECT value FROM ts_config WHERE name=\"ts_server_ip\";' - db_ret = sql_con.ExecProcQuery(str_sql) - self._config_server_ip = db_ret[0][0] - except Exception: - self._config_server_ip = '127.0.0.1' - return True - - def init_full_path(self, full_path): - self._conn_sys.clear() - self._path = full_path - if not os.path.exists(self._path): - return False - - try: - sql_con = self.get_tssqlcon() - str_sql = 'SELECT value FROM ts_config WHERE name=\"ts_server_ip\";' - db_ret = sql_con.ExecProcQuery(str_sql) - self._config_server_ip = db_ret[0][0] - except Exception: - self._config_server_ip = '127.0.0.1' - return True - - def get_config_server_ip(self): - return self._config_server_ip - - def get_tssqlcon(self): - with self._locker_sys: - thread_id = threading.get_ident() - if thread_id not in self._conn_sys: - _eom_sqlite = eom_sqlite(self._path) - self._conn_sys[thread_id] = _eom_sqlite - else: - _eom_sqlite = self._conn_sys[thread_id] - - return _eom_sqlite - - def close(self): - with self._locker_sys: - thread_id = threading.get_ident() - if thread_id not in self._conn_sys: - return - else: - _eom_sqlite = self._conn_sys[thread_id] - self._conn_sys.pop(thread_id) - _eom_sqlite.close() diff --git a/server/www/teleport/app/eom_main.py b/server/www/teleport/app/eom_main.py deleted file mode 100644 index ace7453..0000000 --- a/server/www/teleport/app/eom_main.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- - -import os -import sys -from eom_env import * -import eom_app.app as app - - -def main(): - options = { - # app_path 网站程序根路径(应该是本文件所在目录的上一级目录) - 'app_path': PATH_APP_ROOT, - - # cfg_path 网站配置文件路径 - # 'cfg_path': PATH_CONF, - - # log_path 网站运行时日志文件路径 - # 'log_path': PATH_LOG, - - # static_path 网站静态文件路径 - 'static_path': os.path.join(PATH_APP_ROOT, 'static'), - - # data_path 网站数据文件路径 - 'data_path': PATH_DATA, - - # template_path 网站模板文件路径 - 'template_path': os.path.join(PATH_APP_ROOT, 'view'), - - # res_path 网站资源文件路径 - 'res_path': os.path.join(PATH_APP_ROOT, 'res') - } - - return app.run(options) - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/server/www/teleport/app_bootstrap.py b/server/www/teleport/app_bootstrap.py new file mode 100644 index 0000000..324dca3 --- /dev/null +++ b/server/www/teleport/app_bootstrap.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- + +import os +import sys + +sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'webroot')) + + +def main(): + from app.app_env import PATH_APP_ROOT, PATH_DATA + from app.base.webapp import get_web_app + _web_app = get_web_app() + if not _web_app.init(PATH_APP_ROOT, PATH_DATA): + return 1 + + return _web_app.run() + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/server/www/teleport/static/css/auth.css b/server/www/teleport/static/css/auth.css deleted file mode 100644 index 7b7d0c6..0000000 --- a/server/www/teleport/static/css/auth.css +++ /dev/null @@ -1 +0,0 @@ -@charset "utf-8";body{padding-top:70px;padding-bottom:24px;background-color:#ececed}#head nav.navbar{height:70px;line-height:70px;background-color:#333;color:#fff}#head .logo .desc{display:block;float:right;color:#ccc;margin-top:10px;font-size:18px}#foot nav.navbar{min-height:24px;height:24px;line-height:24px;background-color:#ddd;color:#fff;font-size:12px;border-top:1px solid #ccc}#foot nav.navbar .container{height:24px}#foot nav.navbar p{margin:0 auto;text-align:center;color:#333}#content{margin:10px 0 50px 0}.auth-box{margin-top:30px;min-height:120px;border:1px solid #ccc;border-radius:8px;background-color:rgba(255,255,255,0.6)}.auth-box .header{min-height:50px;height:50px;border:none;box-shadow:none;border-bottom:1px solid #ccc}.auth-box .header .title{display:inline-block;float:left;margin-left:60px;height:24px;margin-top:25px;line-height:16px;font-size:20px;color:#999}.auth-box .header .selected{border-bottom:2px solid #4882cc;color:#555}.auth-box .header .title:hover{border-bottom:2px solid #5396eb}.auth-box .inputarea{margin:30px}.auth-box .inputarea .input-group-addon{padding:0 5px 0 5px}.auth-box .inputarea p.input-addon-desc{text-align:right;padding:0 5px 0 5px;color:#999}#leftside{width:560px;height:560px;padding-top:60px;background:url(../img/login/side-001.jpg) 0 0 no-repeat}@media screen and (max-width:990px){#leftside{display:none}}#leftside h1{font-size:24px;color:#888}#leftside p{font-size:18px;color:#888;padding-left:24px}.auth-box .inputbox{margin-bottom:10px}.auth-box-lg .inputbox{margin-bottom:20px}.auth-box .op_box{display:block;padding:5px;border-radius:3px;text-align:center;margin:5px 20px 10px 20px}.auth-box .op_error{background:#fbb}.auth-box .op_wait{background:#ccc}.auth-box .quick-area{padding:80px 0 80px 0}.auth-box .quick-area .quick-disc{text-align:center;margin-bottom:20px}.auth-box .quick-area .quick-no{padding-top:80px;padding-bottom:100px}.auth-box .quick-area .quick-yes{text-align:center}.auth-box .quick-area .quick-yes .quick-account{display:inline-block;margin:auto;margin-bottom:20px}.auth-box .quick-area .quick-yes .quick-account:hover .quick-image{box-shadow:0 0 8px #00c2f6}.auth-box .quick-area .quick-yes .quick-image{display:block;width:82px;height:82px;line-height:80px;font-size:64px;margin:auto;border:1px solid #a4cdf6;box-shadow:0 0 6px #a7d1fb}.auth-box .quick-area .quick-yes .quick-name{display:block;margin-top:5px} \ No newline at end of file diff --git a/server/www/teleport/static/css/dashboard.css b/server/www/teleport/static/css/dashboard.css index be5ea68..1d335e8 100644 --- a/server/www/teleport/static/css/dashboard.css +++ b/server/www/teleport/static/css/dashboard.css @@ -1 +1 @@ -@charset "utf-8";.page-content{padding:15px 30px 15px 30px}.stats{overflow:hidden;padding:15px;color:#686868;background-color:#fff;border-radius:3px;margin-bottom:10px}.stats span.sub-name{font-size:11px;font-weight:300}.stats.stats-warning{position:relative;background-color:#c86124}.stats.stats-warning .stats-content{text-align:center;font-size:24px}.stats .loading{color:#fff;font-size:14px}.stats.stats-id-host{border-top:5px solid #407deb}.stats.stats-id-user{border-top:5px solid #eba61e}.stats.stats-id-connect{border-top:5px solid #14c13c}.stats.stats-box{position:relative;height:116px}.stats.stats-box .stats-content{padding-left:100px}.stats.stats-box .stats-icon{font-size:130px;line-height:130px;left:20px;text-align:center;position:absolute;color:rgba(0,0,0,0.05)}.stats.stats-box .stats-name{font-size:18px;font-weight:500;color:rgba(0,0,0,0.6)}.stats.stats-box .stats-value{margin-top:5px;color:rgba(0,0,0,0.6);font-size:48px;line-height:52px;font-weight:300;white-space:nowrap;padding-left:20px}.stats.stats-bar{position:relative;height:320px}.stats.stats-bar .stats-name{font-size:16px;font-weight:500;color:rgba(0,0,0,0.6)}.stats.stats-bar .stats-value{margin-top:5px;color:rgba(0,0,0,0.6);font-size:48px;line-height:52px;font-weight:300;white-space:nowrap;padding-left:20px}.stats.stats-first{border-left:none}.stats a{color:#eee;color:rgba(255,255,255,0.7)}.stats a:hover{color:#fff}/*# sourceMappingURL=dashboard.css.map */ \ No newline at end of file +@charset "utf-8";html{font-size:13px}body{font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;background-color:#e9e9e9;color:#333}html,body{height:100%}#page-container{min-width:1260px}a{text-decoration:none}a:link{text-decoration:none}a:hover{text-decoration:none}a:active{text-decoration:none}a:visited{text-decoration:none}select{outline:none}label{font-weight:normal}.clear-float{clear:both}.bigger{font-size:120%}.normal-text{font-size:13px;color:#333}.mono{font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace}hr.hr-sm{margin-top:5px;margin-bottom:5px}.btn-single-line{white-space:nowrap}.btn-single-line .btn:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.btn-single-line .btn:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.remote-action-group{margin-bottom:3px;height:28px}.remote-action-group ul{display:block;height:28px;margin:0;padding:0}.remote-action-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.remote-action-group ul li.remote-action-btn{background:none;padding:0;border:none}.remote-action-group ul li.remote-action-input{background:none;padding:4px 0}.remote-action-group ul li.remote-action-input select{border:none}.remote-action-group ul li.remote-action-chk-protocol{width:86px}.remote-action-group ul li.remote-action-state{text-align:center;white-space:nowrap}.remote-action-group ul li.remote-action-state.state-disabled{background-color:#e5e5e5;color:#aaa;text-shadow:-1px -1px 1px #fff}.remote-action-group ul li.remote-action-state.state-disabled>i.fa{color:#b53a2f}.remote-action-group ul li.remote-action-username,.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol{width:96px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.remote-action-group ul li.remote-action-username{font-size:90%;color:#999}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol,.remote-action-group ul li.remote-action-chk-protocol{color:#000}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-chk-protocol{font-weight:bold}.remote-action-group ul li.remote-action-password,.remote-action-group ul li.remote-action-sshkey,.remote-action-group ul li.remote-action-noauth{text-align:center;padding:4px 8px;width:45px}.remote-action-group ul li.remote-action-password{background-color:#e3ffe3;color:#999}.remote-action-group ul li.remote-action-sshkey{background-color:#fbe9c8;color:#666}.remote-action-group ul li.remote-action-noauth{background-color:#e0e0e0;color:#666}.remote-action-group ul li .btn{line-height:1.5;margin:0;padding:4px 8px;font-size:12px;border-radius:0}.remote-action-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.remote-action-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.remote-action-group ul li select{margin-top:-3px}.remote-action-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li.remote-action-btn:first-child{border:none}.remote-action-group ul li.remote-action-btn:first-child .btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.remote-action-group ul li.remote-action-btn:last-child{border:none}.remote-action-group ul li.remote-action-btn:last-child .btn{border-top-right-radius:4px;border-bottom-right-radius:4px}.remote-info-group{margin-bottom:3px;height:28px}.remote-info-group ul{display:inline-block;height:28px;margin:0;padding:0}.remote-info-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.remote-info-group ul li.remote-action-btn{background:none;padding:0;border:none}.remote-info-group ul li.remote-action-input{background:none;padding:4px 0}.remote-info-group ul li.remote-action-input select{border:none}.remote-info-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.remote-info-group ul li select{margin-top:-3px}.remote-info-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-info-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}hr.small{margin:5px 0}.dlg-protocol-group{margin-bottom:3px}.dlg-protocol-group ul{display:block;height:28px;margin:0;padding:0}.dlg-protocol-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.dlg-protocol-group ul li.item-name{width:120px}.dlg-protocol-group ul li.item-btn{background:none;padding:0;border:none}.dlg-protocol-group ul li.item-input{background:none;border:none;padding:0}.dlg-protocol-group ul li .form-control{line-height:1.5;margin:0;padding:4px 5px;font-size:12px;height:28px;border-radius:0;border-left:none;width:100px}.dlg-protocol-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.dlg-protocol-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.dlg-protocol-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:first-child .btn,.dlg-protocol-group ul li:first-child .form-control{border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.dlg-protocol-group ul li:last-child .btn,.dlg-protocol-group ul li:last-child .form-control{border-top-right-radius:4px;border-bottom-right-radius:4px}.os-icon-windows:after{color:#00bcf6;content:"\f17a";font-size:18px;width:24px;height:24px;line-height:24px;display:inline-block;font-family:'FontAwesome'}.os-icon-linux:after{color:#fff;content:"\f17c";font-size:18px;width:24px;height:24px;line-height:24px;background-color:#333;border-radius:50%;display:inline-block;font-family:'FontAwesome'}.os-icon-macos:after{color:#a7a7a7;content:"\f179";font-size:20px;width:24px;height:24px;line-height:24px;display:inline-block;font-family:'FontAwesome'}.os-icon-ubuntu:after,.os-icon-debian:after,.os-icon-centos:after,.os-icon-redhat:after{content:" ";width:24px;height:24px;line-height:24px;display:inline-block}.os-icon-ubuntu:after{background:url(../img/os-icon/ubuntu-24x24.png) no-repeat}.os-icon-debian:after{background:url(../img/os-icon/debian-24x24.png) no-repeat}.os-icon-centos:after{background:url(../img/os-icon/centos-24x24.png) no-repeat}.os-icon-redhat:after{background:url(../img/os-icon/redhat-24x24.png) no-repeat}.disable-bg{position:absolute;background:url(../img/css/disable-bg.png) repeat;opacity:.45;z-index:990}.disable-message{display:inline-block;font-size:160%;position:absolute;padding:20px 40px;border:1px solid #2b0002;background-color:#65181a;color:#fff;opacity:.85;z-index:991}.btn-group-sm>.btn{padding:3px 5px;font-size:12px}.pop-menu-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040}.form-group{margin-bottom:5px}.badge{padding:3px 6px;border-radius:10px;font-size:13px;font-weight:400;background-color:#999}.badge.badge-sm{font-size:12px;padding:3px 5px;margin-top:0;border-radius:8px;text-shadow:none}.badge.badge-sup{margin-left:-8px;margin-top:-16px}.badge.badge-ignore{background-color:#e5e5e5;color:#999}.badge.badge-info{background-color:#33b7d0}.badge.badge-primary{background-color:#348fe2}.badge.badge-success{background-color:#368142}.badge.badge-warning{background-color:#f57523}.badge.badge-danger{background-color:#d34242}.btn-success .badge{color:#fff}.label{display:inline-block;padding:5px 10px;margin:2px;font-size:13px;font-weight:400;background-color:#999}.label.label-sm{font-size:12px;padding:3px 8px 4px 8px;margin-top:0;border-radius:3px}.label.label-ignore{background-color:#e5e5e5;color:#aaa;text-shadow:-1px -1px 1px #fff}.label.label-info{background-color:#33b7d0}.label.label-primary{background-color:#348fe2}.label.label-success{background-color:#368142}.label.label-warning{background-color:#f57523}.label.label-danger{background-color:#d34242}.progress.progress-sm{height:18px;margin-bottom:2px;background-color:#aaa}.progress.progress-sm.button{cursor:pointer}.progress.progress-sm .progress-bar{display:block;font-size:11px;float:none}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{padding-right:5px;padding-left:5px}.input-group :-moz-placeholder{color:#d2d2d2}.input-group ::-moz-placeholder{color:#d2d2d2}.input-group input:-ms-input-placeholder,.input-group textarea:-ms-input-placeholder{color:#d2d2d2}.input-group input::-webkit-input-placeholder,.input-group textarea::-webkit-input-placeholder{color:#d2d2d2}.modal .modal-content{border-radius:0}.modal .modal-header .close{margin-top:-4px;margin-right:-6px}.modal .modal-header .close:hover{color:#9c3023;opacity:1}.modal .modal-header .close:active,.modal .modal-header .close:focus,.modal .modal-header .close:visited{-webkit-appearance:none}.modal .form-horizontal .form-group,.modal .row{margin-left:0;margin-right:0}.alert{border-radius:0;padding:5px;margin-bottom:10px}.dropdown-menu{min-width:0;font-size:13px}.form-control-sm{padding:3px 5px;font-size:13px;height:inherit}.form-group .control-label.require{color:#505050;font-weight:bold}.form-group .control-label.require:before{font-weight:normal;color:#ac4e43;position:absolute;margin-left:-1.2em;margin-top:1px;content:"\f069";font-size:8px;font-family:'FontAwesome'}.form-group .control-desc{padding-top:6px;color:#999}label.form-control-static input{display:inline-block;position:relative;margin-top:4px}.control-desc .popover{max-width:none;font-size:13px}#gritter-notice-wrapper{z-index:9999}.gritter-bottom,.gritter-item,.gritter-top{background:rgba(0,0,0,0.8) !important}.gritter-top{border-top-left-radius:3px;border-top-right-radius:3px}.gritter-bottom{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.gritter-close,.gritter-light .gritter-close{left:auto !important;right:5px !important;top:5px !important;width:16px !important;height:16px !important;line-height:16px !important;display:block !important;border-radius:50%}.gritter-close:before,.gritter-light .gritter-close:before{content:'\f00d' !important;font-family:FontAwesome !important;font-size:9px !important;width:16px !important;height:16px !important;line-height:16px !important;color:#fff !important;text-indent:0 !important;position:absolute !important;text-align:center !important;right:0 !important;top:0 !important}.gritter-title{font-size:13px !important;line-height:16px !important;padding-bottom:5px !important;font-weight:400 !important;color:#fff !important;text-shadow:none !important}.gritter-item{color:#aaa !important;font-size:13px !important;padding:2px 15px 5px !important}.gritter-error .gritter-bottom,.gritter-error .gritter-item,.gritter-error .gritter-top{background:rgba(123,32,32,0.9) !important}.gritter-error .gritter-title{color:#fff !important}.gritter-error .gritter-item{color:#ddd !important}.gritter-error .gritter-close{left:auto !important;right:5px !important;top:5px !important;width:16px !important;height:16px !important;line-height:16px !important;display:block !important;border-radius:50%;background:#e33b3b !important}.gritter-success .gritter-bottom,.gritter-success .gritter-item,.gritter-success .gritter-top{background:rgba(1,65,16,0.9) !important}.gritter-success .gritter-title{color:#ddd !important}.gritter-success .gritter-item{color:#ccc !important}.gritter-success .gritter-close{background:#0eb320 !important}#gritter-notice-wrapper{width:320px;max-width:480px}.page-content-dashboard{padding:20px 25px}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{padding-right:10px;padding-left:10px}.stats{overflow:hidden;color:#686868;background-color:#fff;margin-bottom:10px}.stats.stats-id-host{border-top:5px solid #348fe2;background-color:#e7f1fb}.stats.stats-id-user{border-top:5px solid #f57523;background-color:#feefe6}.stats.stats-id-account{border-top:5px solid #d34242;background-color:#fae7e7}.stats.stats-id-connect{border-top:5px solid #368142;background-color:#def1e1}.stats.stats-box{position:relative;height:98px;box-shadow:1px 1px 2px rgba(0,0,0,0.3)}.stats.stats-box .stats-content{padding-left:20px}.stats.stats-box .stats-icon{font-size:130px;line-height:130px;top:5px;right:-20px;position:absolute;color:rgba(0,0,0,0.07)}.stats.stats-box .stats-name{font-size:16px;font-weight:500;padding-top:10px;color:rgba(0,0,0,0.6)}.stats.stats-box .stats-value{color:rgba(0,0,0,0.6);font-size:42px;font-weight:300;white-space:nowrap;padding-left:20px}.stats.stats-bar{position:relative;height:280px;padding:8px;box-shadow:1px 1px 2px rgba(0,0,0,0.3)}.stats.stats-bar .stats-name{font-size:14px;font-weight:500;color:rgba(0,0,0,0.6)}.stats.stats-bar .stats-value{margin-top:5px}.stats.stats-first{border-left:none}.stats a{color:#eee;color:rgba(255,255,255,0.7)}.stats a:hover{color:#fff}/*# sourceMappingURL=dashboard.css.map */ \ No newline at end of file diff --git a/server/www/teleport/static/css/dashboard.css.map b/server/www/teleport/static/css/dashboard.css.map new file mode 100644 index 0000000..bc7f7f3 --- /dev/null +++ b/server/www/teleport/static/css/dashboard.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["dashboard.less","_base.less","_overwrite_bootstrap.less","_overwrite_gritter.less"],"names":[],"mappings":"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","file":"dashboard.css","sourceRoot":"..\\less"} \ No newline at end of file diff --git a/server/www/teleport/static/css/doc.css b/server/www/teleport/static/css/doc.css deleted file mode 100644 index eca947a..0000000 --- a/server/www/teleport/static/css/doc.css +++ /dev/null @@ -1 +0,0 @@ -@charset "utf-8";body{font-family:"Open Sans","Helvetica Neue","Microsoft YaHei","微软雅黑",Helvetica,Arial,sans-serif;font-size:13px;background-color:#e9e9e9;color:#333}html,body{height:100%}#page-container{min-width:1260px}a{text-decoration:none}a:link{text-decoration:none}a:hover{text-decoration:none}a:active{text-decoration:none}a:visited{text-decoration:none}select{outline:none}label{font-weight:normal}.clear-float{clear:both}.bigger{font-size:120%}.normal-text{font-size:13px;color:#333}.mono{font-family:Consolas,Lucida Console,Monaco,Courier,'Courier New',monospace}hr.hr-sm{margin-top:5px;margin-bottom:5px}.btn-group-sm>.btn,.btn-sm{padding:2px 5px}.btn.btn-sm{padding:3px 8px}.btn.btn-icon{padding:3px 6px}.btn.btn-icon.btn-sm{padding:0;font-size:14px;height:24px;width:24px;line-height:24px;border-radius:0}.form-group-sm .input-group .input-group-btn>.btn{height:30px;padding:0 8px}.pop-menu-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040}.form-group{margin-bottom:5px}.badge{display:inline-block;min-width:8px;padding:5px 10px;border-radius:10px;text-align:center;white-space:nowrap;vertical-align:middle;font-size:13px;font-weight:400;line-height:1em;background-color:#888;color:#fff;text-shadow:1px 1px 0 #525252}.badge.badge-plain{text-shadow:none}.badge.badge-sm{font-size:11px;padding:3px 6px;margin-top:0;border-radius:8px;text-shadow:none}.badge.badge-sup{margin-left:-6px;margin-top:-16px}.badge.badge-ignore{background-color:#e5e5e5;color:#999;text-shadow:none}.badge.badge-info{background-color:#33b7d0}.badge.badge-primary{background-color:#348fe2}.badge.badge-success{background-color:#368142}.badge.badge-warning{background-color:#f57523}.badge.badge-danger{background-color:#d34242}.label{display:inline-block;min-width:8px;padding:5px 10px;border-radius:5px;text-align:center;white-space:nowrap;vertical-align:middle;font-size:13px;font-weight:400;line-height:1em;background-color:#888;color:#fff;text-shadow:1px 1px 0 #525252}.label.label-plain{text-shadow:none}.label.label-sm{font-size:11px;padding:3px 8px;margin-top:0;border-radius:5px;text-shadow:none}.label.label-ignore{background-color:#e5e5e5;color:#999;text-shadow:none}.label.label-info{background-color:#33b7d0}.label.label-primary{background-color:#348fe2}.label.label-success{background-color:#368142}.label.label-warning{background-color:#f57523}.label.label-danger{background-color:#d34242}.progress.progress-sm{height:18px;margin-bottom:2px;background-color:#aaa}.progress.progress-sm.button{cursor:pointer}.progress.progress-sm .progress-bar{display:block;font-size:11px;float:none}.alert-sm{padding:5px;margin-bottom:10px}.modal-dialog-sm .modal-header{padding:10px}.modal-dialog-sm .modal-body{padding:10px}.modal-dialog-sm .modal-footer{padding:10px}.modal-dialog-sm .form-horizontal .form-group{margin-right:-5px;margin-left:-5px}.modal-dialog-sm .col-sm-1,.modal-dialog-sm .col-sm-2,.modal-dialog-sm .col-sm-3,.modal-dialog-sm .col-sm-4,.modal-dialog-sm .col-sm-5,.modal-dialog-sm .col-sm-6,.modal-dialog-sm .col-sm-7,.modal-dialog-sm .col-sm-8,.modal-dialog-sm .col-sm-9,.modal-dialog-sm .col-sm-10,.modal-dialog-sm .col-sm-11{padding-right:5px;padding-left:5px}.btn-single-line{white-space:nowrap}.btn-single-line .btn:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.btn-single-line .btn:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.remote-action-group{margin-bottom:3px;height:28px;min-width:390px}.remote-action-group ul{display:block;height:28px;margin:0;padding:0}.remote-action-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.remote-action-group ul li.remote-action-btn{background:none;padding:0;border:none}.remote-action-group ul li.remote-action-input{background:none;padding:4px 0}.remote-action-group ul li.remote-action-input select{border:none}.remote-action-group ul li.remote-action-chk-protocol{width:86px}.remote-action-group ul li.remote-action-username,.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol{width:96px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.remote-action-group ul li.remote-action-username{font-size:90%;color:#999}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol,.remote-action-group ul li.remote-action-chk-protocol{color:#000}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-chk-protocol{font-weight:bold}.remote-action-group ul li.remote-action-password,.remote-action-group ul li.remote-action-sshkey,.remote-action-group ul li.remote-action-noauth{text-align:center;padding:4px 8px;width:45px}.remote-action-group ul li.remote-action-password{background-color:#e3ffe3;color:#999}.remote-action-group ul li.remote-action-sshkey{background-color:#fbe9c8;color:#666}.remote-action-group ul li.remote-action-noauth{background-color:#e0e0e0;color:#666}.remote-action-group ul li .btn{line-height:1.5;margin:0;padding:4px 8px;font-size:12px;border-radius:0}.remote-action-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.remote-action-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.remote-action-group ul li select{margin-top:-3px}.remote-action-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li:first-child .btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.remote-action-group ul li:last-child .btn{border-top-right-radius:4px;border-bottom-right-radius:4px}hr.small{margin:5px 0}.dlg-protocol-group{margin-bottom:3px}.dlg-protocol-group ul{display:block;height:28px;margin:0;padding:0}.dlg-protocol-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.dlg-protocol-group ul li.item-name{width:120px}.dlg-protocol-group ul li.item-btn{background:none;padding:0;border:none}.dlg-protocol-group ul li.item-input{background:none;border:none;padding:0}.dlg-protocol-group ul li .form-control{line-height:1.5;margin:0;padding:4px 5px;font-size:12px;height:28px;border-radius:0;border-left:none;width:100px}.dlg-protocol-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.dlg-protocol-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.dlg-protocol-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:first-child .btn,.dlg-protocol-group ul li:first-child .form-control{border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.dlg-protocol-group ul li:last-child .btn,.dlg-protocol-group ul li:last-child .form-control{border-top-right-radius:4px;border-bottom-right-radius:4px}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{padding-right:5px;padding-left:5px}.form-group-sm .form-control-static{padding:6px 0}.input-group :-moz-placeholder{color:#d2d2d2}.input-group ::-moz-placeholder{color:#d2d2d2}.input-group input:-ms-input-placeholder,.input-group textarea:-ms-input-placeholder{color:#d2d2d2}.input-group input::-webkit-input-placeholder,.input-group textarea::-webkit-input-placeholder{color:#d2d2d2}.page-header-fixed{padding-top:48px}.header{border:none;min-height:48px;height:48px;top:0;width:100%;position:fixed;z-index:999}.header .top-navbar{min-height:48px;height:48px;line-height:48px;background-color:#3a3a3a;color:#ccc}.header .top-navbar a{color:#d5d5d5}.header .top-navbar a:hover{color:#5a8fee}.header .top-navbar .brand{float:left;display:inline-block;padding:12px 0;margin:0}.header .top-navbar .brand .site-logo{display:block;width:86px;height:24px;background:url(../img/site-logo-small.png) no-repeat}.header .top-navbar .title-container{float:left;display:inline-block;margin:0;padding:0}.header .top-navbar .title-container .title{font-size:18px}.header .top-navbar .status-container{float:right}.footer{width:100%;height:36px;line-height:36px;background-color:#d5d5d5;border-top:1px solid #a2a2a2;border-bottom:1px solid #efefef;z-index:998;text-align:center}.footer.footer-fixed-bottom{bottom:0;position:fixed}.row-sm .col-sm-1,.row-sm .col-sm-2,.row-sm .col-sm-3,.row-sm .col-sm-4,.row-sm .col-sm-5,.row-sm .col-sm-6,.row-sm .col-sm-7,.row-sm .col-sm-8,.row-sm .col-sm-9,.row-sm .col-sm-10,.row-sm .col-sm-11{padding-right:5px;padding-left:5px}.sidebar{background-color:#fff;width:285px;position:fixed}.search-box{padding:10px;border-bottom:1px solid #eee;margin-bottom:10px}.tree-view{overflow-x:auto;overflow-y:auto;padding:0 10px}.content{margin-top:15px;margin-bottom:56px;min-height:360px;background-color:#fff;border-radius:5px;padding:10px;margin-left:300px}.jstree-ocl{cursor:default}.jstree-default .fa-folder:before{color:#f59c1a}.jstree-default .jstree-wholerow{cursor:default}.jstree-default>ul>li{padding:4px 0}.jstree-default .jstree-node{margin-left:12px}.jstree-default .jstree-open>.jstree-anchor>.fa-folder:before{content:'\f07c';color:#a26307}.jstree-default>.jstree-no-dots .jstree-closed>.jstree-ocl,.jstree-default>.jstree-no-dots .jstree-open>.jstree-ocl{background:none}.jstree-default>.jstree-no-dots .jstree-closed>.jstree-ocl:before,.jstree-default>.jstree-no-dots .jstree-open>.jstree-ocl:before{font-style:normal;font-family:"FontAwesome"}.jstree-default>.jstree-no-dots .jstree-closed>.jstree-ocl:before{content:'\f054';color:#ccc}.jstree-default>.jstree-no-dots .jstree-open>.jstree-ocl:before{content:'\f078';color:#666}.jstree-default>.jstree-no-dots .jstree-loading>.jstree-ocl{background:url("img/loading_01.gif") center center no-repeat}.jstree-default>.jstree-no-dots .jstree-loading>.jstree-ocl:before{content:''}#gritter-notice-wrapper{z-index:9999}.gritter-bottom,.gritter-item,.gritter-top{background:rgba(0,0,0,0.8) !important}.gritter-top{border-top-left-radius:3px;border-top-right-radius:3px}.gritter-bottom{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.gritter-close,.gritter-light .gritter-close{left:auto !important;right:5px !important;top:5px !important;width:16px !important;height:16px !important;line-height:16px !important;display:block !important;border-radius:50%}.gritter-close:before,.gritter-light .gritter-close:before{content:'\f00d' !important;font-family:FontAwesome !important;font-size:9px !important;width:16px !important;height:16px !important;line-height:16px !important;color:#fff !important;text-indent:0 !important;position:absolute !important;text-align:center !important;right:0 !important;top:0 !important}.gritter-title{font-size:13px !important;line-height:16px !important;padding-bottom:5px !important;font-weight:400 !important;color:#fff !important;text-shadow:none !important}.gritter-item{color:#aaa !important;font-size:13px !important;padding:2px 15px 5px !important}.gritter-error .gritter-bottom,.gritter-error .gritter-item,.gritter-error .gritter-top{background:rgba(123,32,32,0.9) !important}.gritter-error .gritter-title{color:#fff !important}.gritter-error .gritter-item{color:#ddd !important}.gritter-error .gritter-close{left:auto !important;right:5px !important;top:5px !important;width:16px !important;height:16px !important;line-height:16px !important;display:block !important;border-radius:50%;background:#e33b3b !important}.gritter-success .gritter-bottom,.gritter-success .gritter-item,.gritter-success .gritter-top{background:rgba(1,65,16,0.9) !important}.gritter-success .gritter-title{color:#ddd !important}.gritter-success .gritter-item{color:#ccc !important}.gritter-success .gritter-close{background:#0eb320 !important} \ No newline at end of file diff --git a/server/www/teleport/static/css/error.css b/server/www/teleport/static/css/error.css new file mode 100644 index 0000000..51a9402 --- /dev/null +++ b/server/www/teleport/static/css/error.css @@ -0,0 +1 @@ +@charset "utf-8";html{font-size:13px}body{font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;background-color:#e9e9e9;color:#333}html,body{height:100%}#page-container{min-width:1260px}a{text-decoration:none}a:link{text-decoration:none}a:hover{text-decoration:none}a:active{text-decoration:none}a:visited{text-decoration:none}select{outline:none}label{font-weight:normal}.clear-float{clear:both}.bigger{font-size:120%}.normal-text{font-size:13px;color:#333}.mono{font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace}hr.hr-sm{margin-top:5px;margin-bottom:5px}.btn-single-line{white-space:nowrap}.btn-single-line .btn:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.btn-single-line .btn:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.remote-action-group{margin-bottom:3px;height:28px}.remote-action-group ul{display:block;height:28px;margin:0;padding:0}.remote-action-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.remote-action-group ul li.remote-action-btn{background:none;padding:0;border:none}.remote-action-group ul li.remote-action-input{background:none;padding:4px 0}.remote-action-group ul li.remote-action-input select{border:none}.remote-action-group ul li.remote-action-chk-protocol{width:86px}.remote-action-group ul li.remote-action-state{text-align:center;white-space:nowrap}.remote-action-group ul li.remote-action-state.state-disabled{background-color:#e5e5e5;color:#aaa;text-shadow:-1px -1px 1px #fff}.remote-action-group ul li.remote-action-state.state-disabled>i.fa{color:#b53a2f}.remote-action-group ul li.remote-action-username,.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol{width:96px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.remote-action-group ul li.remote-action-username{font-size:90%;color:#999}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol,.remote-action-group ul li.remote-action-chk-protocol{color:#000}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-chk-protocol{font-weight:bold}.remote-action-group ul li.remote-action-password,.remote-action-group ul li.remote-action-sshkey,.remote-action-group ul li.remote-action-noauth{text-align:center;padding:4px 8px;width:45px}.remote-action-group ul li.remote-action-password{background-color:#e3ffe3;color:#999}.remote-action-group ul li.remote-action-sshkey{background-color:#fbe9c8;color:#666}.remote-action-group ul li.remote-action-noauth{background-color:#e0e0e0;color:#666}.remote-action-group ul li .btn{line-height:1.5;margin:0;padding:4px 8px;font-size:12px;border-radius:0}.remote-action-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.remote-action-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.remote-action-group ul li select{margin-top:-3px}.remote-action-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li.remote-action-btn:first-child{border:none}.remote-action-group ul li.remote-action-btn:first-child .btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.remote-action-group ul li.remote-action-btn:last-child{border:none}.remote-action-group ul li.remote-action-btn:last-child .btn{border-top-right-radius:4px;border-bottom-right-radius:4px}.remote-info-group{margin-bottom:3px;height:28px}.remote-info-group ul{display:inline-block;height:28px;margin:0;padding:0}.remote-info-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.remote-info-group ul li.remote-action-btn{background:none;padding:0;border:none}.remote-info-group ul li.remote-action-input{background:none;padding:4px 0}.remote-info-group ul li.remote-action-input select{border:none}.remote-info-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.remote-info-group ul li select{margin-top:-3px}.remote-info-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-info-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}hr.small{margin:5px 0}.dlg-protocol-group{margin-bottom:3px}.dlg-protocol-group ul{display:block;height:28px;margin:0;padding:0}.dlg-protocol-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.dlg-protocol-group ul li.item-name{width:120px}.dlg-protocol-group ul li.item-btn{background:none;padding:0;border:none}.dlg-protocol-group ul li.item-input{background:none;border:none;padding:0}.dlg-protocol-group ul li .form-control{line-height:1.5;margin:0;padding:4px 5px;font-size:12px;height:28px;border-radius:0;border-left:none;width:100px}.dlg-protocol-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.dlg-protocol-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.dlg-protocol-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:first-child .btn,.dlg-protocol-group ul li:first-child .form-control{border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.dlg-protocol-group ul li:last-child .btn,.dlg-protocol-group ul li:last-child .form-control{border-top-right-radius:4px;border-bottom-right-radius:4px}.os-icon-windows:after{color:#00bcf6;content:"\f17a";font-size:18px;width:24px;height:24px;line-height:24px;display:inline-block;font-family:'FontAwesome'}.os-icon-linux:after{color:#fff;content:"\f17c";font-size:18px;width:24px;height:24px;line-height:24px;background-color:#333;border-radius:50%;display:inline-block;font-family:'FontAwesome'}.os-icon-macos:after{color:#a7a7a7;content:"\f179";font-size:20px;width:24px;height:24px;line-height:24px;display:inline-block;font-family:'FontAwesome'}.os-icon-ubuntu:after,.os-icon-debian:after,.os-icon-centos:after,.os-icon-redhat:after{content:" ";width:24px;height:24px;line-height:24px;display:inline-block}.os-icon-ubuntu:after{background:url(../img/os-icon/ubuntu-24x24.png) no-repeat}.os-icon-debian:after{background:url(../img/os-icon/debian-24x24.png) no-repeat}.os-icon-centos:after{background:url(../img/os-icon/centos-24x24.png) no-repeat}.os-icon-redhat:after{background:url(../img/os-icon/redhat-24x24.png) no-repeat}.disable-bg{position:absolute;background:url(../img/css/disable-bg.png) repeat;opacity:.45;z-index:990}.disable-message{display:inline-block;font-size:160%;position:absolute;padding:20px 40px;border:1px solid #2b0002;background-color:#65181a;color:#fff;opacity:.85;z-index:991}body{padding:0;margin:0}.container{min-width:460px}#page-header{height:36px;margin-bottom:10px;border:none;background-color:#2a2a2a;color:#fff}#page-header .title{line-height:36px;font-size:18px}#page-header .logo{margin-top:5px;display:inline-block;width:93px;height:30px;background:url(../img/site-logo-small.png) no-repeat}#page-content{margin-bottom:54px}#page-footer nav.navbar{min-height:24px;height:24px;line-height:24px;background-color:#cdcdcd;font-size:12px;color:#6d6d6d}#page-footer nav.navbar .container{height:24px}#page-footer nav.navbar p{margin:0 auto;text-align:center}.error-box{width:100%;padding-left:20px;margin:30px auto}.error-box .error-icon-box{z-index:-1;position:absolute;min-height:194px;overflow:hidden}.error-box .error-icon-box .fa{margin-top:20px;font-size:164px;color:#ff6500}.error-box .error-message-box{min-height:328px;min-width:300px;border:1px solid #fff;background-color:rgba(255,255,255,0.76);box-shadow:2px 2px 3px rgba(0,0,0,0.3);padding:15px 15px 15px 30px;margin-left:123px}.error-box .error-message-box .title{font-size:180%;margin:15px 0}.error-box .error-message-box hr{border-top:1px solid #d3d3d3;border-bottom:1px solid #fff}.btn-group-sm>.btn{padding:3px 5px;font-size:12px}.pop-menu-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040}.form-group{margin-bottom:5px}.badge{padding:3px 6px;border-radius:10px;font-size:13px;font-weight:400;background-color:#999}.badge.badge-sm{font-size:12px;padding:3px 5px;margin-top:0;border-radius:8px;text-shadow:none}.badge.badge-sup{margin-left:-8px;margin-top:-16px}.badge.badge-ignore{background-color:#e5e5e5;color:#999}.badge.badge-info{background-color:#33b7d0}.badge.badge-primary{background-color:#348fe2}.badge.badge-success{background-color:#368142}.badge.badge-warning{background-color:#f57523}.badge.badge-danger{background-color:#d34242}.btn-success .badge{color:#fff}.label{display:inline-block;padding:5px 10px;margin:2px;font-size:13px;font-weight:400;background-color:#999}.label.label-sm{font-size:12px;padding:3px 8px 4px 8px;margin-top:0;border-radius:3px}.label.label-ignore{background-color:#e5e5e5;color:#aaa;text-shadow:-1px -1px 1px #fff}.label.label-info{background-color:#33b7d0}.label.label-primary{background-color:#348fe2}.label.label-success{background-color:#368142}.label.label-warning{background-color:#f57523}.label.label-danger{background-color:#d34242}.progress.progress-sm{height:18px;margin-bottom:2px;background-color:#aaa}.progress.progress-sm.button{cursor:pointer}.progress.progress-sm .progress-bar{display:block;font-size:11px;float:none}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{padding-right:5px;padding-left:5px}.input-group :-moz-placeholder{color:#d2d2d2}.input-group ::-moz-placeholder{color:#d2d2d2}.input-group input:-ms-input-placeholder,.input-group textarea:-ms-input-placeholder{color:#d2d2d2}.input-group input::-webkit-input-placeholder,.input-group textarea::-webkit-input-placeholder{color:#d2d2d2}.modal .modal-content{border-radius:0}.modal .modal-header .close{margin-top:-4px;margin-right:-6px}.modal .modal-header .close:hover{color:#9c3023;opacity:1}.modal .modal-header .close:active,.modal .modal-header .close:focus,.modal .modal-header .close:visited{-webkit-appearance:none}.modal .form-horizontal .form-group,.modal .row{margin-left:0;margin-right:0}.alert{border-radius:0;padding:5px;margin-bottom:10px}.dropdown-menu{min-width:0;font-size:13px}.form-control-sm{padding:3px 5px;font-size:13px;height:inherit}.form-group .control-label.require{color:#505050;font-weight:bold}.form-group .control-label.require:before{font-weight:normal;color:#ac4e43;position:absolute;margin-left:-1.2em;margin-top:1px;content:"\f069";font-size:8px;font-family:'FontAwesome'}.form-group .control-desc{padding-top:6px;color:#999}label.form-control-static input{display:inline-block;position:relative;margin-top:4px}.control-desc .popover{max-width:none;font-size:13px}/*# sourceMappingURL=error.css.map */ \ No newline at end of file diff --git a/server/www/teleport/static/css/error.css.map b/server/www/teleport/static/css/error.css.map new file mode 100644 index 0000000..749d1aa --- /dev/null +++ b/server/www/teleport/static/css/error.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["error.less","_base.less","_overwrite_bootstrap.less"],"names":[],"mappings":"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","file":"error.css","sourceRoot":"..\\less"} \ No newline at end of file diff --git a/server/www/teleport/static/css/img/desktop/icons-tree-24x24.png b/server/www/teleport/static/css/img/desktop/icons-tree-24x24.png deleted file mode 100644 index 25cea671b039282dc920348d7cedf42a2e07feb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2969 zcmds3ZB!Fi8lET;%c|8%MG++iw;)2o(^Ssad z-uK>_16#Si3oWcI003C%w}}%302oixHQyW^xqIl$IrOmt@eW6VVIiX6$sk~(0FHrh zeqvrM6a?`Eszfd13IKD3qL6STJYWlp4~q#rlMO*BmZE3?aP?41dHi??!NowaB8eM* zu&fe~6A9e#VblPZ04W=a6KzV7LBT295PnKLpDDn5xZ_-vER;YDAv~N?oFI|2ly3NG zUKZLm4HNOWX%i&g4gW?|c)(U18<^ zDXwX2IT8f@N5(s?U5rqi+ZTk$~mx!{B(4sbp^&8}z1vAcM`Ma%faGgXse@K#I>S$Gfl`&>N&Od^l_p z3PjNiI?2U{;Z0?-Ni+_f!kESSN#qDm!iQ%4icr5ZSoZH?S!@}^Ltt453@6N1z}7ez zf#q?q6vqyx;T*z55&^7`uQN^0n`k+ZOq2`>d}Oc~H=SRW=pFtkWG^;{LkB6Sg6X(H zI++P_C|)!+Z6ldV!Ovg?|4+_{s2HNDIR2|xW{1!UG&SFrKH7P^cpwS7Vr1yjDAHHA z0RUF($JrR7Y<;ft-@je4s_I2YX=bUS;mIoXf+L^t;w~m0Hjfc5Z8$xTzPIai$d{bW zfB%ym;hH1T-6XO2T-xoWvt(Ocm~(9Nt&+nh_ij8C_bqs0#a6PP`h+06H>cmY=d%ZC zw;GuH=0WbZjBM>)w@g1m)Ra;F^OpOAqjRG->@?T|W{W)m%+<7J%?_vZu1FCzR30@r zJU&@Gab%9M1+%3>)^q15Jow8cO%wNNZ*RA*RPNy)C9$sR-C-LwFshluAF zep6rQPJPi~$jhCqHpn8r?pv-GCMFdWkK8CLTz%@djzzA7)Wq=-eF^d`=y_W)ab%!< zWe(TAwzf7#A|ce))$zq*XBn=^{L>J z2(>sH|3$(`E@iLyx}nGIzD^m-sjfrM~s2p>pgZo3p#BEU(vMN55JZWLr5>)5%@$td@*FEmN#t zrE$obx>?v9mY@6lO4E>S@oO#Y{z?R3CgLnVwX?J9neS33iHX5S6oh8Gsz~NoET6|) zbB=r1=*+Fj+?}NGw~tIxHWyBXdIGj!pqSEi>%h{){^o+^*4F8rot>mqm8Icd)%(J? zZ+DJT=j3FtJ`T=ruYJkKUPUg$m0{v@?U}pp-}8(MwE=`?*8O1LYyEAKF11I+qjgPFqle#&evPt--nL7GD6X8`7H?M4+F$qZz!xuti>n;?bQa4xZP6-6 z-xPm;{~ih>jhJcia(k!E?Oo)x9@ubuK|wM(1BlO!Yt6f3$(ZNzZP1riS?4<}wD8J4 z+8r?l_v_LP>7hjtg0PgyLS#gxQ ztcXOSk|!F*%DWxM%1cjZJ4U~2j$eZP+A+Ee>rzKFuHAHOkHy+3V|`}zlWm=~{jUeA z$$@*;R4hA{8P*kgW^Tn~JHM`}PirtF9&x;R#Z}i(d@{f5Mt7mU{6&-2Bky4gzuUgc zaoKO3q{*lCyV|ULKcX75#ip;o`$zWv3~zLN7&VJMKS)sjBR2-yS450C Z;Qc`L=hxiv6{eqMKW{GQf>-q3e*;k=_<;Zb diff --git a/server/www/teleport/static/css/img/desktop/mimetype-16.png b/server/www/teleport/static/css/img/desktop/mimetype-16.png deleted file mode 100644 index 74e4469bea3c518b83f99c5df8dddbcd02ad3f0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15779 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 A=>Px# diff --git a/server/www/teleport/static/css/img/loading_01.gif b/server/www/teleport/static/css/img/loading_01.gif deleted file mode 100644 index e8c289293b11c889703d83dce6631fce90da4630..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 381 zcmZ?wbhEHb6krfwSj5I~=*GvEjZcb~Jveda^Z5r~o`3lD|Nnmm1_s6d+T_)p@)n z{^qIIq1(T$e$~zMQ}6t1w^a|Cj;Amo3}FHq!p^`7G=x7ROJIXqM}S9S9}m;(SWbi* zHiVjpkZW$u7K%QH zEX1o>i.fa{color:#b53a2f}.remote-action-group ul li.remote-action-username,.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol{width:96px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.remote-action-group ul li.remote-action-username{font-size:90%;color:#999}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol,.remote-action-group ul li.remote-action-chk-protocol{color:#000}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-chk-protocol{font-weight:bold}.remote-action-group ul li.remote-action-password,.remote-action-group ul li.remote-action-sshkey,.remote-action-group ul li.remote-action-noauth{text-align:center;padding:4px 8px;width:45px}.remote-action-group ul li.remote-action-password{background-color:#e3ffe3;color:#999}.remote-action-group ul li.remote-action-sshkey{background-color:#fbe9c8;color:#666}.remote-action-group ul li.remote-action-noauth{background-color:#e0e0e0;color:#666}.remote-action-group ul li .btn{line-height:1.5;margin:0;padding:4px 8px;font-size:12px;border-radius:0}.remote-action-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.remote-action-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.remote-action-group ul li select{margin-top:-3px}.remote-action-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li.remote-action-btn:first-child{border:none}.remote-action-group ul li.remote-action-btn:first-child .btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.remote-action-group ul li.remote-action-btn:last-child{border:none}.remote-action-group ul li.remote-action-btn:last-child .btn{border-top-right-radius:4px;border-bottom-right-radius:4px}.remote-info-group{margin-bottom:3px;height:28px}.remote-info-group ul{display:inline-block;height:28px;margin:0;padding:0}.remote-info-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.remote-info-group ul li.remote-action-btn{background:none;padding:0;border:none}.remote-info-group ul li.remote-action-input{background:none;padding:4px 0}.remote-info-group ul li.remote-action-input select{border:none}.remote-info-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.remote-info-group ul li select{margin-top:-3px}.remote-info-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-info-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}hr.small{margin:5px 0}.dlg-protocol-group{margin-bottom:3px}.dlg-protocol-group ul{display:block;height:28px;margin:0;padding:0}.dlg-protocol-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.dlg-protocol-group ul li.item-name{width:120px}.dlg-protocol-group ul li.item-btn{background:none;padding:0;border:none}.dlg-protocol-group ul li.item-input{background:none;border:none;padding:0}.dlg-protocol-group ul li .form-control{line-height:1.5;margin:0;padding:4px 5px;font-size:12px;height:28px;border-radius:0;border-left:none;width:100px}.dlg-protocol-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.dlg-protocol-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.dlg-protocol-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:first-child .btn,.dlg-protocol-group ul li:first-child .form-control{border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.dlg-protocol-group ul li:last-child .btn,.dlg-protocol-group ul li:last-child .form-control{border-top-right-radius:4px;border-bottom-right-radius:4px}.os-icon-windows:after{color:#00bcf6;content:"\f17a";font-size:18px;width:24px;height:24px;line-height:24px;display:inline-block;font-family:'FontAwesome'}.os-icon-linux:after{color:#fff;content:"\f17c";font-size:18px;width:24px;height:24px;line-height:24px;background-color:#333;border-radius:50%;display:inline-block;font-family:'FontAwesome'}.os-icon-macos:after{color:#a7a7a7;content:"\f179";font-size:20px;width:24px;height:24px;line-height:24px;display:inline-block;font-family:'FontAwesome'}.os-icon-ubuntu:after,.os-icon-debian:after,.os-icon-centos:after,.os-icon-redhat:after{content:" ";width:24px;height:24px;line-height:24px;display:inline-block}.os-icon-ubuntu:after{background:url(../img/os-icon/ubuntu-24x24.png) no-repeat}.os-icon-debian:after{background:url(../img/os-icon/debian-24x24.png) no-repeat}.os-icon-centos:after{background:url(../img/os-icon/centos-24x24.png) no-repeat}.os-icon-redhat:after{background:url(../img/os-icon/redhat-24x24.png) no-repeat}.disable-bg{position:absolute;background:url(../img/css/disable-bg.png) repeat;opacity:.45;z-index:990}.disable-message{display:inline-block;font-size:160%;position:absolute;padding:20px 40px;border:1px solid #2b0002;background-color:#65181a;color:#fff;opacity:.85;z-index:991}body{padding:0;margin:0;overflow:hidden}.bg-blur{position:fixed;top:-20px;left:-20px}.bg-blur-overlay{position:absolute;width:100%;height:100%;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSI0NiUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wOCIvPjxzdG9wIG9mZnNldD0iNTklIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMDgiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC45Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');background-size:100%;background-image:-webkit-gradient(linear, 50% 0, 50% 100%, color-stop(46%, rgba(0,0,0,0.08)), color-stop(59%, rgba(0,0,0,0.08)), color-stop(100%, rgba(0,0,0,0.9)));background-image:-moz-linear-gradient(top, rgba(0,0,0,0.08) 46%, rgba(0,0,0,0.08) 59%, rgba(0,0,0,0.9) 100%);background-image:-webkit-linear-gradient(top, rgba(0,0,0,0.08) 46%, rgba(0,0,0,0.08) 59%, rgba(0,0,0,0.9) 100%);background-image:linear-gradient(to bottom, rgba(0,0,0,0.08) 46%, rgba(0,0,0,0.08) 59%, rgba(0,0,0,0.9) 100%)}.container{min-width:460px}#page-header nav.navbar{height:70px;margin-bottom:0;border:none;background-color:rgba(0,0,0,0.6);color:#fff}#page-header nav li{display:inline-block;float:left}#page-header .logo{position:relative;margin-top:10px;display:inline-block}#page-header .desc{position:relative;display:inline-block;color:#ccc;top:32px;font-size:24px;vertical-align:baseline;font-family:"Kai","华文楷体","楷体","Microsoft YaHei","微软雅黑",Helvetica,Arial,sans-serif}#page-footer nav.navbar{min-height:36px;height:36px;line-height:36px;background-color:rgba(0,0,0,0.6);font-size:12px;color:#6d6d6d}#page-footer nav.navbar .container{height:24px}#page-footer nav.navbar p{margin:0 auto;text-align:center}.auth-box-container{position:fixed;left:0;top:70px;width:100%}.auth-box-container .auth-box{margin:80px auto 0 auto;width:450px;border:1px solid #fff;border-radius:8px;background-color:rgba(255,255,255,0.6);box-shadow:0 5px 50px rgba(0,0,0,0.9)}.auth-box-container .auth-box .header{min-height:50px;height:50px;border:none;box-shadow:none;border-bottom:1px solid rgba(255,255,255,0.3)}.auth-box-container .auth-box .header .title{display:inline-block;float:left;margin-left:60px;height:24px;margin-top:25px;line-height:16px;font-size:20px;color:#484848}.auth-box-container .auth-box .header .title:hover{border-bottom:2px solid #5396eb}.auth-box-container .auth-box .header .selected{border-bottom:2px solid #4882cc;color:#262b40}.auth-box-container .auth-box .inputarea{margin:30px}.auth-box-container .auth-box .inputarea .input-group-addon{padding:0 20px 0 5px}.auth-box-container .auth-box .inputarea p.input-addon-desc{text-align:right;padding:0 5px 0 5px;color:#636363}.auth-box-container .auth-box .inputbox{margin-bottom:20px}.auth-box-container .auth-box .op_box{display:block;padding:5px;border-radius:3px;text-align:center;margin:5px 20px 10px 20px}.auth-box-container .auth-box .op_error{background:rgba(255,5,0,0.5);color:#fff}.auth-box-container .auth-box .op_wait{background:rgba(255,255,255,0.3)}#slogan-box{padding-top:80px}#msg-slogan{text-align:right;font-size:24px;line-height:48px;font-family:"Kai","华文楷体","楷体","Microsoft YaHei","微软雅黑",Helvetica,Arial,sans-serif;color:rgba(255,255,255,0.5)}@media screen and (max-width:990px){#slogan-box{display:none}.auth-box{margin:30px auto 0 auto}}.btn-group-sm>.btn{padding:3px 5px;font-size:12px}.pop-menu-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040}.form-group{margin-bottom:5px}.badge{padding:3px 6px;border-radius:10px;font-size:13px;font-weight:400;background-color:#999}.badge.badge-sm{font-size:12px;padding:3px 5px;margin-top:0;border-radius:8px;text-shadow:none}.badge.badge-sup{margin-left:-8px;margin-top:-16px}.badge.badge-ignore{background-color:#e5e5e5;color:#999}.badge.badge-info{background-color:#33b7d0}.badge.badge-primary{background-color:#348fe2}.badge.badge-success{background-color:#368142}.badge.badge-warning{background-color:#f57523}.badge.badge-danger{background-color:#d34242}.btn-success .badge{color:#fff}.label{display:inline-block;padding:5px 10px;margin:2px;font-size:13px;font-weight:400;background-color:#999}.label.label-sm{font-size:12px;padding:3px 8px 4px 8px;margin-top:0;border-radius:3px}.label.label-ignore{background-color:#e5e5e5;color:#aaa;text-shadow:-1px -1px 1px #fff}.label.label-info{background-color:#33b7d0}.label.label-primary{background-color:#348fe2}.label.label-success{background-color:#368142}.label.label-warning{background-color:#f57523}.label.label-danger{background-color:#d34242}.progress.progress-sm{height:18px;margin-bottom:2px;background-color:#aaa}.progress.progress-sm.button{cursor:pointer}.progress.progress-sm .progress-bar{display:block;font-size:11px;float:none}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{padding-right:5px;padding-left:5px}.input-group :-moz-placeholder{color:#d2d2d2}.input-group ::-moz-placeholder{color:#d2d2d2}.input-group input:-ms-input-placeholder,.input-group textarea:-ms-input-placeholder{color:#d2d2d2}.input-group input::-webkit-input-placeholder,.input-group textarea::-webkit-input-placeholder{color:#d2d2d2}.modal .modal-content{border-radius:0}.modal .modal-header .close{margin-top:-4px;margin-right:-6px}.modal .modal-header .close:hover{color:#9c3023;opacity:1}.modal .modal-header .close:active,.modal .modal-header .close:focus,.modal .modal-header .close:visited{-webkit-appearance:none}.modal .form-horizontal .form-group,.modal .row{margin-left:0;margin-right:0}.alert{border-radius:0;padding:5px;margin-bottom:10px}.dropdown-menu{min-width:0;font-size:13px}.form-control-sm{padding:3px 5px;font-size:13px;height:inherit}.form-group .control-label.require{color:#505050;font-weight:bold}.form-group .control-label.require:before{font-weight:normal;color:#ac4e43;position:absolute;margin-left:-1.2em;margin-top:1px;content:"\f069";font-size:8px;font-family:'FontAwesome'}.form-group .control-desc{padding-top:6px;color:#999}label.form-control-static input{display:inline-block;position:relative;margin-top:4px}.control-desc .popover{max-width:none;font-size:13px}/*# sourceMappingURL=login.css.map */ \ No newline at end of file diff --git a/server/www/teleport/static/css/login.css.map b/server/www/teleport/static/css/login.css.map new file mode 100644 index 0000000..c00d336 --- /dev/null +++ b/server/www/teleport/static/css/login.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["login.less","_base.less","_overwrite_bootstrap.less"],"names":[],"mappings":"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","file":"login.css","sourceRoot":"..\\less"} \ No newline at end of file diff --git a/server/www/teleport/static/css/main.css b/server/www/teleport/static/css/main.css deleted file mode 100644 index 270a3eb..0000000 --- a/server/www/teleport/static/css/main.css +++ /dev/null @@ -1 +0,0 @@ -@charset "utf-8";body{font-family:"Open Sans","Helvetica Neue","Microsoft YaHei","微软雅黑",Helvetica,Arial,sans-serif;font-size:13px;background-color:#e9e9e9;color:#333}html,body{height:100%}#page-container{min-width:1260px}a{text-decoration:none}a:link{text-decoration:none}a:hover{text-decoration:none}a:active{text-decoration:none}a:visited{text-decoration:none}select{outline:none}label{font-weight:normal}.clear-float{clear:both}.bigger{font-size:120%}.normal-text{font-size:13px;color:#333}.mono{font-family:Consolas,Lucida Console,Monaco,Courier,'Courier New',monospace}hr.hr-sm{margin-top:5px;margin-bottom:5px}.btn-group-sm>.btn,.btn-sm{padding:2px 5px}.btn.btn-sm{padding:3px 8px}.btn.btn-icon{padding:3px 6px}.btn.btn-icon.btn-sm{padding:0;font-size:14px;height:24px;width:24px;line-height:24px;border-radius:0}.form-group-sm .input-group .input-group-btn>.btn{height:30px;padding:0 8px}.pop-menu-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040}.form-group{margin-bottom:5px}.badge{display:inline-block;min-width:8px;padding:5px 10px;border-radius:10px;text-align:center;white-space:nowrap;vertical-align:middle;font-size:13px;font-weight:400;line-height:1em;background-color:#888;color:#fff;text-shadow:1px 1px 0 #525252}.badge.badge-plain{text-shadow:none}.badge.badge-sm{font-size:11px;padding:3px 6px;margin-top:0;border-radius:8px;text-shadow:none}.badge.badge-sup{margin-left:-6px;margin-top:-16px}.badge.badge-ignore{background-color:#e5e5e5;color:#999;text-shadow:none}.badge.badge-info{background-color:#33b7d0}.badge.badge-primary{background-color:#348fe2}.badge.badge-success{background-color:#368142}.badge.badge-warning{background-color:#f57523}.badge.badge-danger{background-color:#d34242}.label{display:inline-block;min-width:8px;padding:5px 10px;border-radius:5px;text-align:center;white-space:nowrap;vertical-align:middle;font-size:13px;font-weight:400;line-height:1em;background-color:#888;color:#fff;text-shadow:1px 1px 0 #525252}.label.label-plain{text-shadow:none}.label.label-sm{font-size:11px;padding:3px 8px;margin-top:0;border-radius:5px;text-shadow:none}.label.label-ignore{background-color:#e5e5e5;color:#999;text-shadow:none}.label.label-info{background-color:#33b7d0}.label.label-primary{background-color:#348fe2}.label.label-success{background-color:#368142}.label.label-warning{background-color:#f57523}.label.label-danger{background-color:#d34242}.progress.progress-sm{height:18px;margin-bottom:2px;background-color:#aaa}.progress.progress-sm.button{cursor:pointer}.progress.progress-sm .progress-bar{display:block;font-size:11px;float:none}.alert-sm{padding:5px;margin-bottom:10px}.modal-dialog-sm .modal-header{padding:10px}.modal-dialog-sm .modal-body{padding:10px}.modal-dialog-sm .modal-footer{padding:10px}.modal-dialog-sm .form-horizontal .form-group{margin-right:-5px;margin-left:-5px}.modal-dialog-sm .col-sm-1,.modal-dialog-sm .col-sm-2,.modal-dialog-sm .col-sm-3,.modal-dialog-sm .col-sm-4,.modal-dialog-sm .col-sm-5,.modal-dialog-sm .col-sm-6,.modal-dialog-sm .col-sm-7,.modal-dialog-sm .col-sm-8,.modal-dialog-sm .col-sm-9,.modal-dialog-sm .col-sm-10,.modal-dialog-sm .col-sm-11{padding-right:5px;padding-left:5px}.btn-single-line{white-space:nowrap}.btn-single-line .btn:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.btn-single-line .btn:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.remote-action-group{margin-bottom:3px;height:28px;min-width:390px}.remote-action-group ul{display:block;height:28px;margin:0;padding:0}.remote-action-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.remote-action-group ul li.remote-action-btn{background:none;padding:0;border:none}.remote-action-group ul li.remote-action-input{background:none;padding:4px 0}.remote-action-group ul li.remote-action-input select{border:none}.remote-action-group ul li.remote-action-chk-protocol{width:86px}.remote-action-group ul li.remote-action-username,.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol{width:96px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.remote-action-group ul li.remote-action-username{font-size:90%;color:#999}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol,.remote-action-group ul li.remote-action-chk-protocol{color:#000}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-chk-protocol{font-weight:bold}.remote-action-group ul li.remote-action-password,.remote-action-group ul li.remote-action-sshkey,.remote-action-group ul li.remote-action-noauth{text-align:center;padding:4px 8px;width:45px}.remote-action-group ul li.remote-action-password{background-color:#e3ffe3;color:#999}.remote-action-group ul li.remote-action-sshkey{background-color:#fbe9c8;color:#666}.remote-action-group ul li.remote-action-noauth{background-color:#e0e0e0;color:#666}.remote-action-group ul li .btn{line-height:1.5;margin:0;padding:4px 8px;font-size:12px;border-radius:0}.remote-action-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.remote-action-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.remote-action-group ul li select{margin-top:-3px}.remote-action-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li:first-child .btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.remote-action-group ul li:last-child .btn{border-top-right-radius:4px;border-bottom-right-radius:4px}hr.small{margin:5px 0}.dlg-protocol-group{margin-bottom:3px}.dlg-protocol-group ul{display:block;height:28px;margin:0;padding:0}.dlg-protocol-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.dlg-protocol-group ul li.item-name{width:120px}.dlg-protocol-group ul li.item-btn{background:none;padding:0;border:none}.dlg-protocol-group ul li.item-input{background:none;border:none;padding:0}.dlg-protocol-group ul li .form-control{line-height:1.5;margin:0;padding:4px 5px;font-size:12px;height:28px;border-radius:0;border-left:none;width:100px}.dlg-protocol-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.dlg-protocol-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.dlg-protocol-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:first-child .btn,.dlg-protocol-group ul li:first-child .form-control{border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.dlg-protocol-group ul li:last-child .btn,.dlg-protocol-group ul li:last-child .form-control{border-top-right-radius:4px;border-bottom-right-radius:4px}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{padding-right:5px;padding-left:5px}.form-group-sm .form-control-static{padding:6px 0}.input-group :-moz-placeholder{color:#d2d2d2}.input-group ::-moz-placeholder{color:#d2d2d2}.input-group input:-ms-input-placeholder,.input-group textarea:-ms-input-placeholder{color:#d2d2d2}.input-group input::-webkit-input-placeholder,.input-group textarea::-webkit-input-placeholder{color:#d2d2d2}.table{margin-bottom:10px}.table>thead>tr>th{padding:5px 5px;outline:none;white-space:nowrap;font-weight:normal;text-align:center;background-color:#ededed}.table>tbody>tr>td{padding:5px;text-align:center;vertical-align:middle}.table>tbody>tr>td .nowrap{white-space:nowrap}.table.table-data thead .sorting,.table.table-data thead .sorting_asc,.table.table-data thead .sorting_desc{cursor:pointer;position:relative}.table.table-data thead .sorting>span:after,.table.table-data thead .sorting_asc>span:after,.table.table-data thead .sorting_desc>span:after{bottom:4px;padding-left:5px;display:inline-block;font-family:'FontAwesome';opacity:.8}.table.table-data thead .sorting>span:after{opacity:.2;content:"\f0dc"}.table.table-data thead .sorting_asc>span:after{content:"\f0de"}.table.table-data thead .sorting_desc>span:after{content:"\f0dd"}.host-id{display:block;font-size:16px;font-family:Consolas,Lucida Console,Monaco,Courier,'Courier New',monospace;color:#333}.host-id.not-active{font-size:14px;font-weight:400;color:#999}.host-desc{font-size:12px;color:#999;display:inline-block;white-space:nowrap;width:160px;overflow:hidden;text-overflow:ellipsis}a.host-desc:hover:before{display:inline-block;padding-right:3px;line-height:12px;content:"\f040";font-family:'FontAwesome'}.td-ip-list{padding-right:20px;padding-left:5px}.td-ip-show-more{font-size:14px;width:12px;float:right;display:block}.td-ip-item{min-width:12em;width:12em;height:18px;padding:2px 4px;margin:1px 0;color:#333;text-align:center;white-space:nowrap;border-radius:9px;line-height:11px;font-size:11px;background:#dfdfdf !important}.td-ip-item span{display:inline-block;font-family:Consolas,Lucida Console,Monaco,Courier,'Courier New',monospace;font-size:11px;font-weight:400}.td-ip-item a{display:inline-block;width:14px;float:right;font-size:14px}.admin{background-color:#930;color:#fff;padding:5px 15px;border-radius:5px}.page-header-fixed{padding-top:48px}.header{border:none;box-shadow:0 0 3px rgba(0,0,0,0.5)}.header .container-fluid{padding-left:0}.header .breadcrumb-container{display:inline-block;padding-top:6px}.header .breadcrumb{background-color:transparent;padding-left:20px;font-size:16px}.header.navbar{min-height:48px;height:48px;margin:0}.header.navbar .brand{display:inline-block;float:left;width:180px;height:48px;padding:12px 0 0;text-align:center;margin:0 auto;background-color:#3a3a3a}.header.navbar .brand .navbar-logo{display:inline-block;width:93px;height:30px;background:url(../img/site-logo-small.png) no-repeat}.header.navbar .breadcrumb>li+li:before{font-size:18px;padding:0 5px;color:#ccc;content:"\f105";font-family:'FontAwesome'}.page-sidebar-fixed .sidebar{position:fixed}.sidebar{top:0;bottom:0;left:0;width:180px;padding-top:48px;z-index:1010;background-color:#3a3a3a}.sidebar .nav-menu>li>a{padding:8px 0 8px 20px;line-height:24px;font-size:13px;color:#c2c2c2;border-left:5px solid #3a3a3a}.sidebar .nav-menu>li>a:focus{background-color:#3a3a3a;border-left:5px solid #3a3a3a}.sidebar .nav-menu>li>a:hover{background-color:#2d2d2d;border-left:5px solid #005c74}.sidebar .nav-menu>li>a.active{color:#fff;background-color:#0084a7;border-left:5px solid #0084a7}.sidebar .nav-menu>li>a.active:hover{border-left:5px solid #00acda}.sidebar .nav-menu>li>a.active:after{content:"\e251";font-family:'Glyphicons Halflings';position:relative;top:1px;display:inline-block;font-style:normal;font-weight:400;float:right;color:#e9e9e9;font-size:20px;line-height:24px;margin-right:-6px}.sidebar .nav-menu li .menu-caret:after{display:inline-block;width:12px;height:12px;margin-left:5px;top:1px;position:relative;border:none;font-family:'FontAwesome';font-style:normal}.sidebar .nav-menu li .menu-caret:after{content:'\f0da'}.sidebar .nav-menu li.expand .menu-caret:after{content:'\f0d7'}.sidebar .nav-menu>li.super-admin>a:hover{background-color:#620;border-left:5px solid #4d1a00}.sidebar .nav-menu>li.super-admin>a.active{background-color:#930;border-left:5px solid #930}.sidebar .nav-menu>li.super-admin>a.active:hover{border-left:5px solid #c40}.sidebar .nav-menu>li>a>i.icon{float:left;margin-top:1px;margin-right:15px;text-align:center;line-height:24px;font-size:14px}.sidebar .sub-menu{padding:0;margin:0;background-color:#292929;position:relative;list-style-type:none;border-top:1px solid #202020;border-bottom:1px solid #464646}.sidebar .sub-menu>li>a{padding:8px 0 8px 40px;line-height:20px;font-size:13px;display:block;position:relative;color:#889097;border-left:5px solid #292929}.sidebar .sub-menu>li>a:before{display:inline-block;padding-right:8px;line-height:20px;content:"\f105";font-family:'FontAwesome'}.sidebar .sub-menu>li>a:hover{color:#fff;border-left:5px solid #005c74}.sidebar .sub-menu>li>a.active{color:#fff;background-color:#0084a7;border-left:5px solid #0084a7}.sidebar .sub-menu>li>a.active:hover{border-left:5px solid #00acda}.sidebar .sub-menu>li>a.active:after{content:"\e251";font-family:'Glyphicons Halflings';position:relative;top:-2px;display:inline-block;font-style:normal;font-weight:400;float:right;color:#e9e9e9;font-size:20px;line-height:24px;margin-right:-6px}.sidebar .nav-profile{padding:15px 10px;color:#ccc;background-color:#333;border-bottom:1px solid #464646}.sidebar .nav-profile a.title{color:#ccc}.sidebar .nav-profile a.title:hover{color:#fff;background-color:transparent}.sidebar .nav-profile a.title:focus{background-color:transparent}.sidebar .nav-profile .image{float:left;margin-top:3px;font-size:24px;color:#69f;width:36px;height:36px;border-radius:5px;background-color:#eee;text-align:center;margin-right:10px;overflow:hidden}.sidebar .nav-profile .image img{margin-top:-3px}.sidebar .nav-profile .name{display:block;font-size:16px}.sidebar .nav-profile .role{display:block;font-size:12px;color:#999}.sidebar .nav-profile .dropdown-menu{font-size:13px}.sidebar .nav-profile .dropdown-menu>li>a{padding:5px 20px}.sidebar .nav-profile .dropdown-menu>li>a:hover{background-color:#ccc}.sidebar .nav-profile .dropdown-menu .divider{margin:5px 0}.sidebar .badge{margin-top:-10px;margin-left:5px}.content{margin-left:180px}.page-content{padding:15px}.page-content-dashboard{padding:20px 25px}.widget{overflow:hidden;border-radius:3px;padding:15px;margin-bottom:20px;color:#fff}.widget.widget-stats{position:relative}.widget .stats-icon{font-size:52px;top:12px;right:21px;width:56px;height:56px;text-align:center;line-height:56px;margin-left:15px;color:#fff;position:absolute;opacity:.2}.widget .stats-title{color:#fff;color:rgba(255,255,255,0.6)}.widget .stats-split{height:2px;margin:0 -15px 10px;background:rgba(0,0,0,0.2)}.widget .stats-content{font-size:24px;font-weight:300;margin-bottom:10px}.widget .stats-desc{display:inline-block;color:#fff;color:rgba(255,255,255,0.6)}.widget .stats-action{display:inline-block;float:right}.widget a{color:#eee;color:rgba(255,255,255,0.7)}.widget a:hover{color:#fff}.widget.widget-info{background-color:#33b7d0}.widget.widget-primary{background-color:#348fe2}.widget.widget-success{background-color:#368142}.widget.widget-warning{background-color:#f57523}.widget.widget-danger{background-color:#d34242}.panel{border:none;box-shadow:none;border-radius:3px}.panel .panel-heading{padding:6px 15px;color:#fff}.panel .panel-heading .panel-title{font-size:14px}.panel .panel-heading .panel-heading-btn{float:right}.panel .panel-heading .panel-heading-btn .btn{display:inline-block;padding:0;border:none;text-align:center}.panel .panel-heading .panel-heading-btn .btn.btn-xs{width:18px;height:18px;line-height:18px;font-size:12px}.panel .panel-heading .panel-heading-btn .btn.btn-circle{border-radius:50%}.place-holder-h200{width:100%;height:300px;background-color:#eee;border:1px solid #ccc;line-height:200px;text-align:center}.dashboard-panel2-holder{width:100%;height:1150px;background-color:#eee;border:1px solid #ccc;line-height:200px;text-align:center}.dashboard-panel-time{color:#cecece}.box{border:none;box-shadow:none;border-radius:3px;background-color:#fff;padding:15px;margin-bottom:15px}.box-fluid{border:none;box-shadow:none;border-radius:3px;margin-bottom:15px}.box.box-sm,.box-fluid.box-sm{padding:5px 15px}.box .box-title,.box-fluid .box-title{margin-bottom:10px}.box .box-title .title,.box-fluid .box-title .title{display:inline-block;font-size:18px;color:#333;height:30px;line-height:30px}.box .box-title .btn-sm,.box-fluid .box-title .btn-sm{padding:3px 8px;margin-top:-5px}.box .nav-tabs,.box-fluid .nav-tabs{font-size:14px;font-weight:bold}.box .nav-tabs>li:first-child,.box-fluid .nav-tabs>li:first-child{margin-left:50px}.box .tab-content>.tab-pane,.box-fluid .tab-content>.tab-pane{background-color:#fff;padding:20px;border:1px solid #ddd;border-top:none;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.box-license{line-height:30px}.box-license .breadcrumb{padding:0;margin:0;border-radius:0;background-color:transparent}.box-btn-bar{line-height:30px}.box-btn-bar a.btn{margin-right:20px}.page-nav{height:30px;line-height:30px}.page-nav .breadcrumb{padding:0;margin:0;border-radius:0;background-color:transparent}.page-nav .pagination{margin:0 0}.page-nav .btn{margin-top:-3px}.page-filter{height:36px;line-height:36px;margin-bottom:10px}.page-filter .form-control{margin-top:5px;margin-right:4px}.btn.btn-sm .dropdown-menu li a{font-size:11px}.invite{text-align:center;padding-bottom:20px}.invite .code{color:#2f3991;font-size:36px;font-weight:700;font-family:Consolas,Lucida Console,Monaco,Courier,'Courier New',monospace}.invite .link{padding:5px;color:#2f3991;font-size:13px;font-weight:700;background-color:#eee;border-radius:5px}.invite-send-box{width:300px;margin:0 auto}.form-group .input-group{margin-bottom:5px}.op_box{display:block;padding:5px;border-radius:3px;text-align:center;margin-top:5px}.op_error{background:#fbb}.op_wait{background:#ccc}.table-data td.loading{text-align:left;padding:20px}.table-data .btn-group.open .dropdown-toggle{-webkit-box-shadow:none;box-shadow:none}.more-action{position:absolute !important}.more-action .dropdown-menu{background-color:rgba(60,60,60,0.9);color:#fff;font-size:13px}.more-action .dropdown-menu.dropdown-menu-left{margin-left:-120px}.more-action .dropdown-menu>li>a{padding:5px 20px;color:#fff}.more-action .dropdown-menu>li>a:hover,.more-action .dropdown-menu>li>a:active,.more-action .dropdown-menu>li>a:visited{background-color:#0084a7}.more-action .dropdown-menu .divider{margin:5px 0;background-color:#666}.popover-inline-edit input,.popover-inline-edit .btn{height:30px}.popover-inline-edit .popover-title{background-color:#ddd}.popover-inline-edit .popover-content{padding:20px 10px}.popover-inline-edit .popover{padding:0;max-width:500px}.popover-inline-edit .popover .popover-content{padding:10px 10px 20px 10px}.popover-inline-edit .popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#ddd}.user-info-table{font-size:14px}.user-info-table tbody>tr>td{padding:8px}.user-info-table .user-field{min-width:100px;width:100px;color:#999;text-align:right}.user-info-table .user-value{color:#333;font-weight:bold}.user-info-table .user-value a{font-weight:normal}.breadcrumb.breadcrumb-trans{background-color:transparent}.biz-box{display:inline-block;width:20%;max-width:20%}.biz-box .bb-inner{background-color:#368142;margin:3px;border-radius:4px}.biz-box .bb-name{color:#fff;padding:9px;margin-bottom:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center;padding-top:1px;padding-bottom:1px}.biz-box .bb-ver{font-size:11px;height:16px;text-align:center;padding:0 5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom-left-radius:4px;border-bottom-right-radius:4px;color:rgba(255,255,255,0.85);background-color:rgba(0,0,0,0.3)}.biz-box.mp-disabled .mp-inner{background-color:#e5e5e5}.biz-box.mp-disabled .mp-name{color:#999}.biz-box.mp-success .mp-inner{background-color:#368142}.biz-box.mp-success .mp-name{color:#fff}.biz-box.mp-danger .mp-inner{background-color:#d34242}.biz-box.mp-danger .mp-name{color:#fff}.biz-box.mp-warning .mp-inner{background-color:#f57523}.biz-box.mp-warning .mp-name{color:#fff}textarea.textarea-resize-y{resize:vertical}textarea.textarea-resize-none{resize:none}textarea.textarea-code{font-family:Consolas,Lucida Console,Monaco,Courier,'Courier New',monospace}textarea.cert_pub{width:100%;height:64px;border:1px solid #e2e2e2;background-color:#e4ffe5}.icon{display:inline-block}.icon16{width:16px;height:16px;line-height:16px;margin-right:3px;margin-top:0 !important;margin-bottom:-2px !important;vertical-align:top;background-image:url("img/desktop/mimetype-16.png") !important}.icon16.icon-disk{background-position:0 0 !important}.icon16.icon-folder{background-position:-16px 0 !important}.icon16.icon-file{background-position:0 -16px !important}.icon16.icon-txt{background-position:-16px -16px !important}.icon16.icon-help{background-position:-32px -16px !important}.icon16.icon-sys{background-position:-48px -16px !important}.icon16.icon-exe{background-position:-64px -16px !important}.icon16.icon-office{background-position:0 -32px !important}.icon16.icon-word{background-position:-16px -32px !important}.icon16.icon-excel{background-position:-32px -32px !important}.icon16.icon-ppt{background-position:-48px -32px !important}.icon16.icon-access{background-position:-64px -32px !important}.icon16.icon-visio{background-position:-80px -32px !important}.icon16.icon-audio{background-position:0 -48px !important}.icon16.icon-video{background-position:-16px -48px !important}.icon16.icon-pic{background-position:-32px -48px !important}.icon16.icon-pdf{background-position:-48px -48px !important}.icon16.icon-font{background-position:-64px -48px !important}.icon16.icon-script{background-position:0 -64px !important}.icon16.icon-html{background-position:-16px -64px !important}.icon16.icon-py{background-position:-32px -64px !important}.icon16.icon-h{background-position:-48px -64px !important}.icon16.icon-c{background-position:-64px -64px !important}.icon16.icon-cpp{background-position:-80px -64px !important}.icon16.icon-cs{background-position:-96px -64px !important}.icon16.icon-php{background-position:-112px -64px !important}.icon16.icon-ruby{background-position:-128px -64px !important}.icon16.icon-java{background-position:-144px -64px !important}.icon16.icon-vs{background-position:-160px -64px !important}.icon16.icon-js{background-position:-176px -64px !important}.icon16.icon-archive{background-position:0 -80px !important}.icon16.icon-rar{background-position:-16px -80px !important}.icon16.icon-zip{background-position:-32px -80px !important}.icon16.icon-7z{background-position:-48px -80px !important}.icon16.icon-tar{background-position:-64px -80px !important}.icon16.icon-gz{background-position:-80px -80px !important}.icon16.icon-jar{background-position:-96px -80px !important}.icon16.icon-bz2{background-position:-112px -80px !important}.icon24{width:24px;height:24px;line-height:24px;margin-right:3px;margin-top:0 !important;margin-bottom:-2px !important;vertical-align:top;background-image:url("img/desktop/icons-tree-24x24.png") !important}.icon24.icon-disk{background-position:0 0 !important}.icon24.icon-folder{background-position:-24px 0 !important}.icon24.icon-folder-open{background-position:-48px 0 !important}.os-icon-windows:after{color:#00bcf6;content:"\f17a";font-size:18px;width:24px;height:24px;line-height:24px;display:inline-block;font-family:'FontAwesome'}.os-icon-linux:after{color:#fff;content:"\f17c";font-size:18px;width:24px;height:24px;line-height:24px;background-color:#333;border-radius:50%;display:inline-block;font-family:'FontAwesome'}.os-icon-macos:after{color:#a7a7a7;content:"\f179";font-size:20px;width:24px;height:24px;line-height:24px;display:inline-block;font-family:'FontAwesome'}.os-icon-ubuntu:after,.os-icon-debian:after,.os-icon-centos:after,.os-icon-redhat:after{content:" ";width:24px;height:24px;line-height:24px;display:inline-block}.os-icon-ubuntu:after{background:url(../img/os-icon/ubuntu-24x24.png) no-repeat}.os-icon-debian:after{background:url(../img/os-icon/debian-24x24.png) no-repeat}.os-icon-centos:after{background:url(../img/os-icon/centos-24x24.png) no-repeat}.os-icon-redhat:after{background:url(../img/os-icon/redhat-24x24.png) no-repeat}#gritter-notice-wrapper{z-index:9999}.gritter-bottom,.gritter-item,.gritter-top{background:rgba(0,0,0,0.8) !important}.gritter-top{border-top-left-radius:3px;border-top-right-radius:3px}.gritter-bottom{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.gritter-close,.gritter-light .gritter-close{left:auto !important;right:5px !important;top:5px !important;width:16px !important;height:16px !important;line-height:16px !important;display:block !important;border-radius:50%}.gritter-close:before,.gritter-light .gritter-close:before{content:'\f00d' !important;font-family:FontAwesome !important;font-size:9px !important;width:16px !important;height:16px !important;line-height:16px !important;color:#fff !important;text-indent:0 !important;position:absolute !important;text-align:center !important;right:0 !important;top:0 !important}.gritter-title{font-size:13px !important;line-height:16px !important;padding-bottom:5px !important;font-weight:400 !important;color:#fff !important;text-shadow:none !important}.gritter-item{color:#aaa !important;font-size:13px !important;padding:2px 15px 5px !important}.gritter-error .gritter-bottom,.gritter-error .gritter-item,.gritter-error .gritter-top{background:rgba(123,32,32,0.9) !important}.gritter-error .gritter-title{color:#fff !important}.gritter-error .gritter-item{color:#ddd !important}.gritter-error .gritter-close{left:auto !important;right:5px !important;top:5px !important;width:16px !important;height:16px !important;line-height:16px !important;display:block !important;border-radius:50%;background:#e33b3b !important}.gritter-success .gritter-bottom,.gritter-success .gritter-item,.gritter-success .gritter-top{background:rgba(1,65,16,0.9) !important}.gritter-success .gritter-title{color:#ddd !important}.gritter-success .gritter-item{color:#ccc !important}.gritter-success .gritter-close{background:#0eb320 !important} \ No newline at end of file diff --git a/server/www/teleport/static/css/maintenance.css b/server/www/teleport/static/css/maintenance.css new file mode 100644 index 0000000..9ac57b7 --- /dev/null +++ b/server/www/teleport/static/css/maintenance.css @@ -0,0 +1 @@ +@charset "utf-8";html{font-size:13px}body{font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;background-color:#e9e9e9;color:#333}html,body{height:100%}#page-container{min-width:1260px}a{text-decoration:none}a:link{text-decoration:none}a:hover{text-decoration:none}a:active{text-decoration:none}a:visited{text-decoration:none}select{outline:none}label{font-weight:normal}.clear-float{clear:both}.bigger{font-size:120%}.normal-text{font-size:13px;color:#333}.mono{font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace}hr.hr-sm{margin-top:5px;margin-bottom:5px}.btn-single-line{white-space:nowrap}.btn-single-line .btn:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.btn-single-line .btn:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.remote-action-group{margin-bottom:3px;height:28px}.remote-action-group ul{display:block;height:28px;margin:0;padding:0}.remote-action-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.remote-action-group ul li.remote-action-btn{background:none;padding:0;border:none}.remote-action-group ul li.remote-action-input{background:none;padding:4px 0}.remote-action-group ul li.remote-action-input select{border:none}.remote-action-group ul li.remote-action-chk-protocol{width:86px}.remote-action-group ul li.remote-action-state{text-align:center;white-space:nowrap}.remote-action-group ul li.remote-action-state.state-disabled{background-color:#e5e5e5;color:#aaa;text-shadow:-1px -1px 1px #fff}.remote-action-group ul li.remote-action-state.state-disabled>i.fa{color:#b53a2f}.remote-action-group ul li.remote-action-username,.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol{width:96px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.remote-action-group ul li.remote-action-username{font-size:90%;color:#999}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol,.remote-action-group ul li.remote-action-chk-protocol{color:#000}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-chk-protocol{font-weight:bold}.remote-action-group ul li.remote-action-password,.remote-action-group ul li.remote-action-sshkey,.remote-action-group ul li.remote-action-noauth{text-align:center;padding:4px 8px;width:45px}.remote-action-group ul li.remote-action-password{background-color:#e3ffe3;color:#999}.remote-action-group ul li.remote-action-sshkey{background-color:#fbe9c8;color:#666}.remote-action-group ul li.remote-action-noauth{background-color:#e0e0e0;color:#666}.remote-action-group ul li .btn{line-height:1.5;margin:0;padding:4px 8px;font-size:12px;border-radius:0}.remote-action-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.remote-action-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.remote-action-group ul li select{margin-top:-3px}.remote-action-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li.remote-action-btn:first-child{border:none}.remote-action-group ul li.remote-action-btn:first-child .btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.remote-action-group ul li.remote-action-btn:last-child{border:none}.remote-action-group ul li.remote-action-btn:last-child .btn{border-top-right-radius:4px;border-bottom-right-radius:4px}.remote-info-group{margin-bottom:3px;height:28px}.remote-info-group ul{display:inline-block;height:28px;margin:0;padding:0}.remote-info-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.remote-info-group ul li.remote-action-btn{background:none;padding:0;border:none}.remote-info-group ul li.remote-action-input{background:none;padding:4px 0}.remote-info-group ul li.remote-action-input select{border:none}.remote-info-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.remote-info-group ul li select{margin-top:-3px}.remote-info-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-info-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}hr.small{margin:5px 0}.dlg-protocol-group{margin-bottom:3px}.dlg-protocol-group ul{display:block;height:28px;margin:0;padding:0}.dlg-protocol-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.dlg-protocol-group ul li.item-name{width:120px}.dlg-protocol-group ul li.item-btn{background:none;padding:0;border:none}.dlg-protocol-group ul li.item-input{background:none;border:none;padding:0}.dlg-protocol-group ul li .form-control{line-height:1.5;margin:0;padding:4px 5px;font-size:12px;height:28px;border-radius:0;border-left:none;width:100px}.dlg-protocol-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.dlg-protocol-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.dlg-protocol-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:first-child .btn,.dlg-protocol-group ul li:first-child .form-control{border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.dlg-protocol-group ul li:last-child .btn,.dlg-protocol-group ul li:last-child .form-control{border-top-right-radius:4px;border-bottom-right-radius:4px}.os-icon-windows:after{color:#00bcf6;content:"\f17a";font-size:18px;width:24px;height:24px;line-height:24px;display:inline-block;font-family:'FontAwesome'}.os-icon-linux:after{color:#fff;content:"\f17c";font-size:18px;width:24px;height:24px;line-height:24px;background-color:#333;border-radius:50%;display:inline-block;font-family:'FontAwesome'}.os-icon-macos:after{color:#a7a7a7;content:"\f179";font-size:20px;width:24px;height:24px;line-height:24px;display:inline-block;font-family:'FontAwesome'}.os-icon-ubuntu:after,.os-icon-debian:after,.os-icon-centos:after,.os-icon-redhat:after{content:" ";width:24px;height:24px;line-height:24px;display:inline-block}.os-icon-ubuntu:after{background:url(../img/os-icon/ubuntu-24x24.png) no-repeat}.os-icon-debian:after{background:url(../img/os-icon/debian-24x24.png) no-repeat}.os-icon-centos:after{background:url(../img/os-icon/centos-24x24.png) no-repeat}.os-icon-redhat:after{background:url(../img/os-icon/redhat-24x24.png) no-repeat}.disable-bg{position:absolute;background:url(../img/css/disable-bg.png) repeat;opacity:.45;z-index:990}.disable-message{display:inline-block;font-size:160%;position:absolute;padding:20px 40px;border:1px solid #2b0002;background-color:#65181a;color:#fff;opacity:.85;z-index:991}.btn-group-sm>.btn{padding:3px 5px;font-size:12px}.pop-menu-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040}.form-group{margin-bottom:5px}.badge{padding:3px 6px;border-radius:10px;font-size:13px;font-weight:400;background-color:#999}.badge.badge-sm{font-size:12px;padding:3px 5px;margin-top:0;border-radius:8px;text-shadow:none}.badge.badge-sup{margin-left:-8px;margin-top:-16px}.badge.badge-ignore{background-color:#e5e5e5;color:#999}.badge.badge-info{background-color:#33b7d0}.badge.badge-primary{background-color:#348fe2}.badge.badge-success{background-color:#368142}.badge.badge-warning{background-color:#f57523}.badge.badge-danger{background-color:#d34242}.btn-success .badge{color:#fff}.label{display:inline-block;padding:5px 10px;margin:2px;font-size:13px;font-weight:400;background-color:#999}.label.label-sm{font-size:12px;padding:3px 8px 4px 8px;margin-top:0;border-radius:3px}.label.label-ignore{background-color:#e5e5e5;color:#aaa;text-shadow:-1px -1px 1px #fff}.label.label-info{background-color:#33b7d0}.label.label-primary{background-color:#348fe2}.label.label-success{background-color:#368142}.label.label-warning{background-color:#f57523}.label.label-danger{background-color:#d34242}.progress.progress-sm{height:18px;margin-bottom:2px;background-color:#aaa}.progress.progress-sm.button{cursor:pointer}.progress.progress-sm .progress-bar{display:block;font-size:11px;float:none}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{padding-right:5px;padding-left:5px}.input-group :-moz-placeholder{color:#d2d2d2}.input-group ::-moz-placeholder{color:#d2d2d2}.input-group input:-ms-input-placeholder,.input-group textarea:-ms-input-placeholder{color:#d2d2d2}.input-group input::-webkit-input-placeholder,.input-group textarea::-webkit-input-placeholder{color:#d2d2d2}.modal .modal-content{border-radius:0}.modal .modal-header .close{margin-top:-4px;margin-right:-6px}.modal .modal-header .close:hover{color:#9c3023;opacity:1}.modal .modal-header .close:active,.modal .modal-header .close:focus,.modal .modal-header .close:visited{-webkit-appearance:none}.modal .form-horizontal .form-group,.modal .row{margin-left:0;margin-right:0}.alert{border-radius:0;padding:5px;margin-bottom:10px}.dropdown-menu{min-width:0;font-size:13px}.form-control-sm{padding:3px 5px;font-size:13px;height:inherit}.form-group .control-label.require{color:#505050;font-weight:bold}.form-group .control-label.require:before{font-weight:normal;color:#ac4e43;position:absolute;margin-left:-1.2em;margin-top:1px;content:"\f069";font-size:8px;font-family:'FontAwesome'}.form-group .control-desc{padding-top:6px;color:#999}label.form-control-static input{display:inline-block;position:relative;margin-top:4px}.control-desc .popover{max-width:none;font-size:13px}body{padding:0;margin:0}#page-header nav.navbar{height:70px;margin-bottom:0;border:none;background-color:#192e4b;color:#fff}#page-header nav li{display:inline-block;float:left}#page-content{padding-top:70px;padding-bottom:50px}#page-footer nav.navbar{min-height:24px;height:24px;line-height:24px;background-color:#c1c1c1;border-top:1px solid #7b7b7b;font-size:12px;color:#4e4e4e}#page-footer nav.navbar .container{height:24px}#page-footer nav.navbar p{margin:0 auto;text-align:center}.content-box{margin-top:20px;background-color:#fff;padding:20px;box-shadow:1px 1px 1px rgba(0,0,0,0.3)}.content-box .welcome-message .fa{display:block;color:#ff272a;font-size:18px;float:left}.content-box .welcome-message span{display:block;line-height:18px;padding-left:23px}.content-box .table{width:auto;margin-left:20px}.content-box .table td{border-top:1px dotted #ddd;padding:5px}.content-box .table td.key{text-align:right}.content-box .table td.value{text-align:left;font-weight:bold}.content-box .table tr:first-child td{border-top:none}.content-box table.form{width:auto;margin-left:20px}.content-box table.form td{padding:5px;line-height:1.42857143;vertical-align:middle}.content-box table.form td.key{text-align:right}.content-box table.form td label{margin-bottom:0}.content-box table.form td .form-control{height:30px;padding:5px 10px;font-size:inherit;line-height:inherit}h1 .fa-spin{color:#aaa}h1{font-size:180%}h2{font-size:140%}.op_box{display:block;padding:5px;border-radius:3px;margin:5px 0}.op_error{background-color:#cc3632;border:1px solid #9c2a26;color:#fff}.op_wait{background:rgba(255,255,255,0.3)}.steps-detail{display:none;margin:10px;padding:10px;border:1px solid #b4b4b4;background-color:#dcdcdc}.steps-detail p{padding-left:5px;margin:2px 0 2px 1px}.steps-detail p.error{color:#fff;margin:2px 0 2px 0;background-color:#cc3632;border:1px solid #9c2a26}.alert.alert-warning{color:#6a542d;border:1px solid #e2cab4;background-color:#ffe4cb}.error{color:#cc3632}/*# sourceMappingURL=maintenance.css.map */ \ No newline at end of file diff --git a/server/www/teleport/static/css/maintenance.css.map b/server/www/teleport/static/css/maintenance.css.map new file mode 100644 index 0000000..0bee72d --- /dev/null +++ b/server/www/teleport/static/css/maintenance.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["maintenance.less","_base.less","_overwrite_bootstrap.less"],"names":[],"mappings":"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","file":"maintenance.css","sourceRoot":"..\\less"} \ No newline at end of file diff --git a/server/www/teleport/static/css/single.css b/server/www/teleport/static/css/single.css new file mode 100644 index 0000000..12c4a5d --- /dev/null +++ b/server/www/teleport/static/css/single.css @@ -0,0 +1 @@ +@charset "utf-8";html{font-size:13px}body{font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;background-color:#e9e9e9;color:#333}html,body{height:100%}#page-container{min-width:1260px}a{text-decoration:none}a:link{text-decoration:none}a:hover{text-decoration:none}a:active{text-decoration:none}a:visited{text-decoration:none}select{outline:none}label{font-weight:normal}.clear-float{clear:both}.bigger{font-size:120%}.normal-text{font-size:13px;color:#333}.mono{font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace}hr.hr-sm{margin-top:5px;margin-bottom:5px}.btn-single-line{white-space:nowrap}.btn-single-line .btn:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.btn-single-line .btn:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.remote-action-group{margin-bottom:3px;height:28px}.remote-action-group ul{display:block;height:28px;margin:0;padding:0}.remote-action-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.remote-action-group ul li.remote-action-btn{background:none;padding:0;border:none}.remote-action-group ul li.remote-action-input{background:none;padding:4px 0}.remote-action-group ul li.remote-action-input select{border:none}.remote-action-group ul li.remote-action-chk-protocol{width:86px}.remote-action-group ul li.remote-action-state{text-align:center;white-space:nowrap}.remote-action-group ul li.remote-action-state.state-disabled{background-color:#e5e5e5;color:#aaa;text-shadow:-1px -1px 1px #fff}.remote-action-group ul li.remote-action-state.state-disabled>i.fa{color:#b53a2f}.remote-action-group ul li.remote-action-username,.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol{width:96px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.remote-action-group ul li.remote-action-username{font-size:90%;color:#999}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol,.remote-action-group ul li.remote-action-chk-protocol{color:#000}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-chk-protocol{font-weight:bold}.remote-action-group ul li.remote-action-password,.remote-action-group ul li.remote-action-sshkey,.remote-action-group ul li.remote-action-noauth{text-align:center;padding:4px 8px;width:45px}.remote-action-group ul li.remote-action-password{background-color:#e3ffe3;color:#999}.remote-action-group ul li.remote-action-sshkey{background-color:#fbe9c8;color:#666}.remote-action-group ul li.remote-action-noauth{background-color:#e0e0e0;color:#666}.remote-action-group ul li .btn{line-height:1.5;margin:0;padding:4px 8px;font-size:12px;border-radius:0}.remote-action-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.remote-action-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.remote-action-group ul li select{margin-top:-3px}.remote-action-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li.remote-action-btn:first-child{border:none}.remote-action-group ul li.remote-action-btn:first-child .btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.remote-action-group ul li.remote-action-btn:last-child{border:none}.remote-action-group ul li.remote-action-btn:last-child .btn{border-top-right-radius:4px;border-bottom-right-radius:4px}.remote-info-group{margin-bottom:3px;height:28px}.remote-info-group ul{display:inline-block;height:28px;margin:0;padding:0}.remote-info-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.remote-info-group ul li.remote-action-btn{background:none;padding:0;border:none}.remote-info-group ul li.remote-action-input{background:none;padding:4px 0}.remote-info-group ul li.remote-action-input select{border:none}.remote-info-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.remote-info-group ul li select{margin-top:-3px}.remote-info-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-info-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}hr.small{margin:5px 0}.dlg-protocol-group{margin-bottom:3px}.dlg-protocol-group ul{display:block;height:28px;margin:0;padding:0}.dlg-protocol-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.dlg-protocol-group ul li.item-name{width:120px}.dlg-protocol-group ul li.item-btn{background:none;padding:0;border:none}.dlg-protocol-group ul li.item-input{background:none;border:none;padding:0}.dlg-protocol-group ul li .form-control{line-height:1.5;margin:0;padding:4px 5px;font-size:12px;height:28px;border-radius:0;border-left:none;width:100px}.dlg-protocol-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.dlg-protocol-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.dlg-protocol-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:first-child .btn,.dlg-protocol-group ul li:first-child .form-control{border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.dlg-protocol-group ul li:last-child .btn,.dlg-protocol-group ul li:last-child .form-control{border-top-right-radius:4px;border-bottom-right-radius:4px}.os-icon-windows:after{color:#00bcf6;content:"\f17a";font-size:18px;width:24px;height:24px;line-height:24px;display:inline-block;font-family:'FontAwesome'}.os-icon-linux:after{color:#fff;content:"\f17c";font-size:18px;width:24px;height:24px;line-height:24px;background-color:#333;border-radius:50%;display:inline-block;font-family:'FontAwesome'}.os-icon-macos:after{color:#a7a7a7;content:"\f179";font-size:20px;width:24px;height:24px;line-height:24px;display:inline-block;font-family:'FontAwesome'}.os-icon-ubuntu:after,.os-icon-debian:after,.os-icon-centos:after,.os-icon-redhat:after{content:" ";width:24px;height:24px;line-height:24px;display:inline-block}.os-icon-ubuntu:after{background:url(../img/os-icon/ubuntu-24x24.png) no-repeat}.os-icon-debian:after{background:url(../img/os-icon/debian-24x24.png) no-repeat}.os-icon-centos:after{background:url(../img/os-icon/centos-24x24.png) no-repeat}.os-icon-redhat:after{background:url(../img/os-icon/redhat-24x24.png) no-repeat}.disable-bg{position:absolute;background:url(../img/css/disable-bg.png) repeat;opacity:.45;z-index:990}.disable-message{display:inline-block;font-size:160%;position:absolute;padding:20px 40px;border:1px solid #2b0002;background-color:#65181a;color:#fff;opacity:.85;z-index:991}.table{margin-bottom:10px}.table>thead>tr>th{vertical-align:middle;border-bottom:2px solid #ddd}.table.table-info-list{width:auto}.table.table-info-list td{border-top:1px dotted #ddd;padding:5px 10px;vertical-align:top}.table.table-info-list td.key{text-align:right;width:1px;white-space:nowrap}.table.table-info-list td.value{text-align:left;color:#767676}.table.table-info-list td .error{color:#cc3632}.table.table-info-list.table-info-list-lite{width:100%}.table.table-info-list.table-info-list-lite td{padding:5px 5px}.table.table-info-list.table-info-list-lite td.value{font-weight:normal}.table.table-info-list tr:first-child td{border-top:none}.table.table-config-list{width:100%}.table.table-config-list td{border:none;padding:5px}.table.table-config-list td.title{text-align:left;font-size:110%;font-weight:bolder}.table.table-config-list td.key{width:1px;white-space:nowrap;text-align:right;padding-right:15px}.table.table-config-list td.value{text-align:left}.table.table-config-list td.value input{width:4em;padding:0 5px;text-align:right}.table.table-config-list td.value .unit{margin-left:5px}.table.table-config-list td.value .desc{color:#999;margin-left:15px;display:inline-block}.table>thead>tr>th{padding:5px 5px;outline:none;white-space:nowrap;font-weight:normal;text-align:center;background-color:#ededed}.table>tbody>tr>td{padding:5px;text-align:center;vertical-align:middle}.table>tbody>tr>td .nowrap{white-space:nowrap}.table-data td.loading{text-align:left;padding:20px}.table-data .btn-group.open .dropdown-toggle{-webkit-box-shadow:none;box-shadow:none}.table.table-data thead .sorting,.table.table-data thead .sorting_asc,.table.table-data thead .sorting_desc{cursor:pointer}.table.table-data thead .sorting:after,.table.table-data thead .sorting_asc:after,.table.table-data thead .sorting_desc:after{bottom:4px;padding-left:5px;display:inline-block;font-family:'FontAwesome';opacity:.8}.table.table-data thead .sorting:after{opacity:.2;content:"\f0dc"}.table.table-data thead .sorting_asc:after{content:"\f0de"}.table.table-data thead .sorting_desc:after{content:"\f0dd"}.host-name{font-size:16px}.host-name-desc{cursor:pointer}.host-ip{font-size:12px;color:#999;display:inline-block;white-space:nowrap;font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace;overflow:hidden;text-overflow:ellipsis}.td-ip-list{padding-right:20px;padding-left:5px}.td-ip-show-more{font-size:14px;width:12px;float:right;display:block}.td-ip-item{min-width:12em;width:12em;height:18px;padding:2px 4px;margin:1px 0;color:#333;text-align:center;white-space:nowrap;border-radius:9px;line-height:11px;font-size:11px;background:#dfdfdf !important}.td-ip-item span{display:inline-block;font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace;font-size:11px;font-weight:400}.td-ip-item a{display:inline-block;width:14px;float:right;font-size:14px}.btn-group-sm>.btn{padding:3px 5px;font-size:12px}.pop-menu-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040}.form-group{margin-bottom:5px}.badge{padding:3px 6px;border-radius:10px;font-size:13px;font-weight:400;background-color:#999}.badge.badge-sm{font-size:12px;padding:3px 5px;margin-top:0;border-radius:8px;text-shadow:none}.badge.badge-sup{margin-left:-8px;margin-top:-16px}.badge.badge-ignore{background-color:#e5e5e5;color:#999}.badge.badge-info{background-color:#33b7d0}.badge.badge-primary{background-color:#348fe2}.badge.badge-success{background-color:#368142}.badge.badge-warning{background-color:#f57523}.badge.badge-danger{background-color:#d34242}.btn-success .badge{color:#fff}.label{display:inline-block;padding:5px 10px;margin:2px;font-size:13px;font-weight:400;background-color:#999}.label.label-sm{font-size:12px;padding:3px 8px 4px 8px;margin-top:0;border-radius:3px}.label.label-ignore{background-color:#e5e5e5;color:#aaa;text-shadow:-1px -1px 1px #fff}.label.label-info{background-color:#33b7d0}.label.label-primary{background-color:#348fe2}.label.label-success{background-color:#368142}.label.label-warning{background-color:#f57523}.label.label-danger{background-color:#d34242}.progress.progress-sm{height:18px;margin-bottom:2px;background-color:#aaa}.progress.progress-sm.button{cursor:pointer}.progress.progress-sm .progress-bar{display:block;font-size:11px;float:none}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{padding-right:5px;padding-left:5px}.input-group :-moz-placeholder{color:#d2d2d2}.input-group ::-moz-placeholder{color:#d2d2d2}.input-group input:-ms-input-placeholder,.input-group textarea:-ms-input-placeholder{color:#d2d2d2}.input-group input::-webkit-input-placeholder,.input-group textarea::-webkit-input-placeholder{color:#d2d2d2}.modal .modal-content{border-radius:0}.modal .modal-header .close{margin-top:-4px;margin-right:-6px}.modal .modal-header .close:hover{color:#9c3023;opacity:1}.modal .modal-header .close:active,.modal .modal-header .close:focus,.modal .modal-header .close:visited{-webkit-appearance:none}.modal .form-horizontal .form-group,.modal .row{margin-left:0;margin-right:0}.alert{border-radius:0;padding:5px;margin-bottom:10px}.dropdown-menu{min-width:0;font-size:13px}.form-control-sm{padding:3px 5px;font-size:13px;height:inherit}.form-group .control-label.require{color:#505050;font-weight:bold}.form-group .control-label.require:before{font-weight:normal;color:#ac4e43;position:absolute;margin-left:-1.2em;margin-top:1px;content:"\f069";font-size:8px;font-family:'FontAwesome'}.form-group .control-desc{padding-top:6px;color:#999}label.form-control-static input{display:inline-block;position:relative;margin-top:4px}.control-desc .popover{max-width:none;font-size:13px}.page-header-fixed{padding-top:48px}.header{border:none;box-shadow:0 0 3px rgba(0,0,0,0.5);min-height:48px;height:48px;top:0;width:100%;position:fixed;z-index:999}.header .top-navbar{min-height:48px;height:48px;line-height:48px;background-color:#3a3a3a;color:#ccc}.header .top-navbar a{color:#d5d5d5}.header .top-navbar a:hover{color:#5a8fee}.header .top-navbar .brand{float:left;display:inline-block;padding:12px 0;margin:0}.header .top-navbar .brand .site-logo{display:block;width:86px;height:24px;background:url(../img/site-logo-small.png) no-repeat}.header .top-navbar .title-container{float:left;display:inline-block;margin:0;padding:0;margin-left:20px}.header .top-navbar .title-container .title{font-size:16px}.header .top-navbar .breadcrumb-container{float:left;display:inline-block;margin:0;padding:0}.header .top-navbar .breadcrumb-container .breadcrumb{background-color:#3a3a3a;height:48px;margin:0;border-radius:0;border:none;padding:0 0 0 20px;font-size:16px;color:#ccc}.header .top-navbar .breadcrumb-container .breadcrumb>li+li:before{font-size:18px;padding:0 5px;color:#555;content:'|'}.header .top-navbar .breadcrumb-container .breadcrumb .title{font-size:18px}.header .top-navbar .breadcrumb-container .breadcrumb .sub-title{font-size:14px;color:#b3b3b3}.header .top-navbar .status-container{float:right}.page-content{margin-top:10px;margin-bottom:44px}.footer{width:100%;height:24px;line-height:24px;background-color:#d5d5d5;border-top:1px solid #a2a2a2;border-bottom:1px solid #efefef;z-index:998;text-align:center;font-size:12px}.footer.footer-fixed-bottom{bottom:0;position:fixed}.row-sm .col-sm-1,.row-sm .col-sm-2,.row-sm .col-sm-3,.row-sm .col-sm-4,.row-sm .col-sm-5,.row-sm .col-sm-6,.row-sm .col-sm-7,.row-sm .col-sm-8,.row-sm .col-sm-9,.row-sm .col-sm-10,.row-sm .col-sm-11{padding-right:5px;padding-left:5px}.content{margin-top:15px;margin-bottom:20px;background-color:#fff;border-radius:5px;padding:10px}.content:last-child{margin-bottom:54px}.table-host{width:100%;border-top:10px solid #b3cfe7;border-bottom:1px solid #b3cfe7}.table-host .cell-host-id{border-left:1px solid #e7e7e7;padding:5px;text-align:center;width:168px;vertical-align:middle}.table-host .cell-host-id .host-id{font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace;font-size:13px;color:#999;display:inline-block}.table-host .cell-host-id .host-name{display:block;width:168px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:16px;margin:auto;margin-bottom:10px}.table-host .cell-host-id .td-ip-item{width:10em;height:18px;padding:2px 4px;margin:1px auto;color:#333;text-align:center;white-space:nowrap;border-radius:9px;line-height:11px;font-size:11px;background:#dfdfdf !important}.table-host .cell-host-id .td-ip-item span{display:inline-block;font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace;font-size:11px;font-weight:400}.table-host .cell-host-id .actions{margin-top:20px}.table-host .cell-host-id .actions a{margin-left:5px;margin-right:5px}.table-host .cell-host-id .actions a:first-child{margin-left:0}.table-host .cell-host-id .actions a:last-child{margin-right:0}.table-host .cell-detail{border-left:1px solid #e7e7e7;border-right:1px solid #e7e7e7;vertical-align:top}.table-host .cell-detail tr{border-top:1px solid #e7e7e7}.table-host .cell-detail tr:last-child{border-bottom:1px solid #e7e7e7}.table-host .cell-detail .row-host-info{background-color:#ececed}.table-host .cell-detail.host-offline{background-color:#ffcecc;text-align:center;vertical-align:middle}.table-host .cell-detail.host-offline .host-offline-msg{color:#802506;font-size:24px}.table-host .cell-log td{border:1px solid #e7e7e7}.table-host .cell-log td .host-log{font-size:12px;outline:none;width:100%;height:120px;overflow-y:auto;resize:none;border:none;padding:5px}.table-host .cell-log td .host-log div{margin-bottom:3px}.table-host .cell-log td .host-log div .datetime{font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace}.log-box{margin-top:15px}.log-box .log-list{margin-top:5px;border:1px solid #e7e7e7;font-size:12px;outline:none;width:100%;max-height:480px;overflow-y:auto;resize:none;padding:5px}.log-box .log-list div{margin-bottom:3px}.log-box .log-list div:hover{background-color:#f3f3f3}.log-box .log-list div .log-dt{padding:0 3px;padding-top:2px;padding-bottom:1px;margin-right:3px;background-color:#f57523;color:#fff;font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace}.log-box .log-list div .log-hid{padding:0 3px;margin-right:3px;background-color:#348fe2;color:#fff}.log-box .log-list div .log-hname{padding:0 3px;margin-right:3px;background-color:#348fe2;color:#fff}.page-nav{height:30px;line-height:30px}.page-nav .breadcrumb{padding:0;margin:0;border-radius:0;background-color:transparent}.page-nav .pagination{margin:0 0}.page-nav .btn{margin-top:-3px}.mp{display:inline-block;width:20%;max-width:20%}.mp .mp-inner{background-color:#e5e5e5;margin:3px;border-radius:4px}.mp .mp-name{color:#999;padding:9px;margin-bottom:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}.mp .mp-name.with-target{padding-top:17px;padding-bottom:1px}.mp .mp-target{display:inline-block;float:left;position:absolute;font-size:11px;padding:0 5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-top-left-radius:4px;border-bottom-right-radius:4px;color:rgba(255,255,255,0.85);background-color:rgba(0,0,0,0.1)}.mp.mp-disabled .mp-inner{background-color:#e5e5e5}.mp.mp-disabled .mp-name{color:#999}.mp.mp-success .mp-inner{background-color:#368142}.mp.mp-success .mp-name{color:#fff}.mp.mp-danger .mp-inner{background-color:#d34242}.mp.mp-danger .mp-name{color:#fff}.mp.mp-warning .mp-inner{background-color:#f57523}.mp.mp-warning .mp-name{color:#fff}.host-offline{background-color:#ffcecc;height:36px;line-height:36px;padding:0 10px;color:#802506;font-size:20px;cursor:pointer}.host-offline .tips{display:none;font-size:12px}.host-offline:hover .tips{display:inline-block}.host-no-strategy{color:#999;font-size:16px}#gritter-notice-wrapper{z-index:9999}.gritter-bottom,.gritter-item,.gritter-top{background:rgba(0,0,0,0.8) !important}.gritter-top{border-top-left-radius:3px;border-top-right-radius:3px}.gritter-bottom{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.gritter-close,.gritter-light .gritter-close{left:auto !important;right:5px !important;top:5px !important;width:16px !important;height:16px !important;line-height:16px !important;display:block !important;border-radius:50%}.gritter-close:before,.gritter-light .gritter-close:before{content:'\f00d' !important;font-family:FontAwesome !important;font-size:9px !important;width:16px !important;height:16px !important;line-height:16px !important;color:#fff !important;text-indent:0 !important;position:absolute !important;text-align:center !important;right:0 !important;top:0 !important}.gritter-title{font-size:13px !important;line-height:16px !important;padding-bottom:5px !important;font-weight:400 !important;color:#fff !important;text-shadow:none !important}.gritter-item{color:#aaa !important;font-size:13px !important;padding:2px 15px 5px !important}.gritter-error .gritter-bottom,.gritter-error .gritter-item,.gritter-error .gritter-top{background:rgba(123,32,32,0.9) !important}.gritter-error .gritter-title{color:#fff !important}.gritter-error .gritter-item{color:#ddd !important}.gritter-error .gritter-close{left:auto !important;right:5px !important;top:5px !important;width:16px !important;height:16px !important;line-height:16px !important;display:block !important;border-radius:50%;background:#e33b3b !important}.gritter-success .gritter-bottom,.gritter-success .gritter-item,.gritter-success .gritter-top{background:rgba(1,65,16,0.9) !important}.gritter-success .gritter-title{color:#ddd !important}.gritter-success .gritter-item{color:#ccc !important}.gritter-success .gritter-close{background:#0eb320 !important}#gritter-notice-wrapper{width:320px;max-width:480px}/*# sourceMappingURL=single.css.map */ \ No newline at end of file diff --git a/server/www/teleport/static/css/single.css.map b/server/www/teleport/static/css/single.css.map new file mode 100644 index 0000000..a948f77 --- /dev/null +++ b/server/www/teleport/static/css/single.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["single.less","_base.less","_table.less","_overwrite_bootstrap.less","_overwrite_gritter.less"],"names":[],"mappings":"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","file":"single.css","sourceRoot":"..\\less"} \ No newline at end of file diff --git a/server/www/teleport/static/css/style.css b/server/www/teleport/static/css/style.css new file mode 100644 index 0000000..dfa03c4 --- /dev/null +++ b/server/www/teleport/static/css/style.css @@ -0,0 +1 @@ +@charset "utf-8";html{font-size:13px}body{font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;background-color:#e9e9e9;color:#333}html,body{height:100%}#page-container{min-width:1260px}a{text-decoration:none}a:link{text-decoration:none}a:hover{text-decoration:none}a:active{text-decoration:none}a:visited{text-decoration:none}select{outline:none}label{font-weight:normal}.clear-float{clear:both}.bigger{font-size:120%}.normal-text{font-size:13px;color:#333}.mono{font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace}hr.hr-sm{margin-top:5px;margin-bottom:5px}.btn-single-line{white-space:nowrap}.btn-single-line .btn:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.btn-single-line .btn:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.remote-action-group{margin-bottom:3px;height:28px}.remote-action-group ul{display:block;height:28px;margin:0;padding:0}.remote-action-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.remote-action-group ul li.remote-action-btn{background:none;padding:0;border:none}.remote-action-group ul li.remote-action-input{background:none;padding:4px 0}.remote-action-group ul li.remote-action-input select{border:none}.remote-action-group ul li.remote-action-chk-protocol{width:86px}.remote-action-group ul li.remote-action-state{text-align:center;white-space:nowrap}.remote-action-group ul li.remote-action-state.state-disabled{background-color:#e5e5e5;color:#aaa;text-shadow:-1px -1px 1px #fff}.remote-action-group ul li.remote-action-state.state-disabled>i.fa{color:#b53a2f}.remote-action-group ul li.remote-action-username,.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol{width:96px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.remote-action-group ul li.remote-action-username{font-size:90%;color:#999}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol,.remote-action-group ul li.remote-action-chk-protocol{color:#000}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-chk-protocol{font-weight:bold}.remote-action-group ul li.remote-action-password,.remote-action-group ul li.remote-action-sshkey,.remote-action-group ul li.remote-action-noauth{text-align:center;padding:4px 8px;width:45px}.remote-action-group ul li.remote-action-password{background-color:#e3ffe3;color:#999}.remote-action-group ul li.remote-action-sshkey{background-color:#fbe9c8;color:#666}.remote-action-group ul li.remote-action-noauth{background-color:#e0e0e0;color:#666}.remote-action-group ul li .btn{line-height:1.5;margin:0;padding:4px 8px;font-size:12px;border-radius:0}.remote-action-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.remote-action-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.remote-action-group ul li select{margin-top:-3px}.remote-action-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li.remote-action-btn:first-child{border:none}.remote-action-group ul li.remote-action-btn:first-child .btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.remote-action-group ul li.remote-action-btn:last-child{border:none}.remote-action-group ul li.remote-action-btn:last-child .btn{border-top-right-radius:4px;border-bottom-right-radius:4px}.remote-info-group{margin-bottom:3px;height:28px}.remote-info-group ul{display:inline-block;height:28px;margin:0;padding:0}.remote-info-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.remote-info-group ul li.remote-action-btn{background:none;padding:0;border:none}.remote-info-group ul li.remote-action-input{background:none;padding:4px 0}.remote-info-group ul li.remote-action-input select{border:none}.remote-info-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.remote-info-group ul li select{margin-top:-3px}.remote-info-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-info-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}hr.small{margin:5px 0}.dlg-protocol-group{margin-bottom:3px}.dlg-protocol-group ul{display:block;height:28px;margin:0;padding:0}.dlg-protocol-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.dlg-protocol-group ul li.item-name{width:120px}.dlg-protocol-group ul li.item-btn{background:none;padding:0;border:none}.dlg-protocol-group ul li.item-input{background:none;border:none;padding:0}.dlg-protocol-group ul li .form-control{line-height:1.5;margin:0;padding:4px 5px;font-size:12px;height:28px;border-radius:0;border-left:none;width:100px}.dlg-protocol-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.dlg-protocol-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.dlg-protocol-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:first-child .btn,.dlg-protocol-group ul li:first-child .form-control{border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.dlg-protocol-group ul li:last-child .btn,.dlg-protocol-group ul li:last-child .form-control{border-top-right-radius:4px;border-bottom-right-radius:4px}.os-icon-windows:after{color:#00bcf6;content:"\f17a";font-size:18px;width:24px;height:24px;line-height:24px;display:inline-block;font-family:'FontAwesome'}.os-icon-linux:after{color:#fff;content:"\f17c";font-size:18px;width:24px;height:24px;line-height:24px;background-color:#333;border-radius:50%;display:inline-block;font-family:'FontAwesome'}.os-icon-macos:after{color:#a7a7a7;content:"\f179";font-size:20px;width:24px;height:24px;line-height:24px;display:inline-block;font-family:'FontAwesome'}.os-icon-ubuntu:after,.os-icon-debian:after,.os-icon-centos:after,.os-icon-redhat:after{content:" ";width:24px;height:24px;line-height:24px;display:inline-block}.os-icon-ubuntu:after{background:url(../img/os-icon/ubuntu-24x24.png) no-repeat}.os-icon-debian:after{background:url(../img/os-icon/debian-24x24.png) no-repeat}.os-icon-centos:after{background:url(../img/os-icon/centos-24x24.png) no-repeat}.os-icon-redhat:after{background:url(../img/os-icon/redhat-24x24.png) no-repeat}.disable-bg{position:absolute;background:url(../img/css/disable-bg.png) repeat;opacity:.45;z-index:990}.disable-message{display:inline-block;font-size:160%;position:absolute;padding:20px 40px;border:1px solid #2b0002;background-color:#65181a;color:#fff;opacity:.85;z-index:991}.table.table-role .header{font-size:120%;margin-top:8px}.table.table-role td{text-align:left;vertical-align:top;padding:0}.table.table-role td.role-name{min-width:160px}.table.table-role td.role-name ul{list-style:none;margin:0;padding:0}.table.table-role td.role-name ul li{padding:8px 30px 8px 6px;white-space:nowrap}.table.table-role td.role-name ul li:first-child{margin-top:10px}.table.table-role td.role-name ul li.active{color:#fff;background-color:#4091dd}.table.table-role td.role-name ul li.active:hover{background-color:#4091dd;cursor:auto}.table.table-role td.role-name ul li:hover{background-color:#81b6e9;cursor:pointer}.table.table-role td.role-privilege{padding:0 0 10px 10px;border-left:3px solid #4091dd}.table.table-role td.role-privilege hr{margin:8px 0;border-bottom:1px solid rgba(255,255,255,0.3)}.table.table-role td.role-privilege .title{font-size:110%;margin:5px 0}.table.table-role td.role-privilege ul{list-style:none;margin:0;padding:0}.table.table-role td.role-privilege ul li{display:inline-block;width:180px;margin-bottom:5px;margin-left:10px}.table.table-role td.role-privilege ul li span{color:#8e8e8e}.table.table-role td.role-privilege ul li span:before{display:inline-block;width:16px;content:"\f096";font-family:'FontAwesome'}.table.table-role td.role-privilege ul li span.enabled{color:#3374b0}.table.table-role td.role-privilege ul li span.enabled:before{content:"\f046";font-family:'FontAwesome'}.table.table-role td.role-privilege.editable li span{cursor:pointer}.table.table-role tr:first-child td{border-top:none}#btn-create-role{margin-top:15px}.table{margin-bottom:10px}.table>thead>tr>th{vertical-align:middle;border-bottom:2px solid #ddd}.table.table-info-list{width:auto}.table.table-info-list td{border-top:1px dotted #ddd;padding:5px 10px;vertical-align:top}.table.table-info-list td.key{text-align:right;width:1px;white-space:nowrap}.table.table-info-list td.value{text-align:left;color:#767676}.table.table-info-list td .error{color:#cc3632}.table.table-info-list.table-info-list-lite{width:100%}.table.table-info-list.table-info-list-lite td{padding:5px 5px}.table.table-info-list.table-info-list-lite td.value{font-weight:normal}.table.table-info-list tr:first-child td{border-top:none}.table.table-config-list{width:100%}.table.table-config-list td{border:none;padding:5px}.table.table-config-list td.title{text-align:left;font-size:110%;font-weight:bolder}.table.table-config-list td.key{width:1px;white-space:nowrap;text-align:right;padding-right:15px}.table.table-config-list td.value{text-align:left}.table.table-config-list td.value input{width:4em;padding:0 5px;text-align:right}.table.table-config-list td.value .unit{margin-left:5px}.table.table-config-list td.value .desc{color:#999;margin-left:15px;display:inline-block}.table>thead>tr>th{padding:5px 5px;outline:none;white-space:nowrap;font-weight:normal;text-align:center;background-color:#ededed}.table>tbody>tr>td{padding:5px;text-align:center;vertical-align:middle}.table>tbody>tr>td .nowrap{white-space:nowrap}.table-data td.loading{text-align:left;padding:20px}.table-data .btn-group.open .dropdown-toggle{-webkit-box-shadow:none;box-shadow:none}.table.table-data thead .sorting,.table.table-data thead .sorting_asc,.table.table-data thead .sorting_desc{cursor:pointer}.table.table-data thead .sorting:after,.table.table-data thead .sorting_asc:after,.table.table-data thead .sorting_desc:after{bottom:4px;padding-left:5px;display:inline-block;font-family:'FontAwesome';opacity:.8}.table.table-data thead .sorting:after{opacity:.2;content:"\f0dc"}.table.table-data thead .sorting_asc:after{content:"\f0de"}.table.table-data thead .sorting_desc:after{content:"\f0dd"}.host-name{font-size:16px}.host-name-desc{cursor:pointer}.host-ip{font-size:12px;color:#999;display:inline-block;white-space:nowrap;font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace;overflow:hidden;text-overflow:ellipsis}.td-ip-list{padding-right:20px;padding-left:5px}.td-ip-show-more{font-size:14px;width:12px;float:right;display:block}.td-ip-item{min-width:12em;width:12em;height:18px;padding:2px 4px;margin:1px 0;color:#333;text-align:center;white-space:nowrap;border-radius:9px;line-height:11px;font-size:11px;background:#dfdfdf !important}.td-ip-item span{display:inline-block;font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace;font-size:11px;font-weight:400}.td-ip-item a{display:inline-block;width:14px;float:right;font-size:14px}.btn-group-sm>.btn{padding:3px 5px;font-size:12px}.pop-menu-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040}.form-group{margin-bottom:5px}.badge{padding:3px 6px;border-radius:10px;font-size:13px;font-weight:400;background-color:#999}.badge.badge-sm{font-size:12px;padding:3px 5px;margin-top:0;border-radius:8px;text-shadow:none}.badge.badge-sup{margin-left:-8px;margin-top:-16px}.badge.badge-ignore{background-color:#e5e5e5;color:#999}.badge.badge-info{background-color:#33b7d0}.badge.badge-primary{background-color:#348fe2}.badge.badge-success{background-color:#368142}.badge.badge-warning{background-color:#f57523}.badge.badge-danger{background-color:#d34242}.btn-success .badge{color:#fff}.label{display:inline-block;padding:5px 10px;margin:2px;font-size:13px;font-weight:400;background-color:#999}.label.label-sm{font-size:12px;padding:3px 8px 4px 8px;margin-top:0;border-radius:3px}.label.label-ignore{background-color:#e5e5e5;color:#aaa;text-shadow:-1px -1px 1px #fff}.label.label-info{background-color:#33b7d0}.label.label-primary{background-color:#348fe2}.label.label-success{background-color:#368142}.label.label-warning{background-color:#f57523}.label.label-danger{background-color:#d34242}.progress.progress-sm{height:18px;margin-bottom:2px;background-color:#aaa}.progress.progress-sm.button{cursor:pointer}.progress.progress-sm .progress-bar{display:block;font-size:11px;float:none}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{padding-right:5px;padding-left:5px}.input-group :-moz-placeholder{color:#d2d2d2}.input-group ::-moz-placeholder{color:#d2d2d2}.input-group input:-ms-input-placeholder,.input-group textarea:-ms-input-placeholder{color:#d2d2d2}.input-group input::-webkit-input-placeholder,.input-group textarea::-webkit-input-placeholder{color:#d2d2d2}.modal .modal-content{border-radius:0}.modal .modal-header .close{margin-top:-4px;margin-right:-6px}.modal .modal-header .close:hover{color:#9c3023;opacity:1}.modal .modal-header .close:active,.modal .modal-header .close:focus,.modal .modal-header .close:visited{-webkit-appearance:none}.modal .form-horizontal .form-group,.modal .row{margin-left:0;margin-right:0}.alert{border-radius:0;padding:5px;margin-bottom:10px}.dropdown-menu{min-width:0;font-size:13px}.form-control-sm{padding:3px 5px;font-size:13px;height:inherit}.form-group .control-label.require{color:#505050;font-weight:bold}.form-group .control-label.require:before{font-weight:normal;color:#ac4e43;position:absolute;margin-left:-1.2em;margin-top:1px;content:"\f069";font-size:8px;font-family:'FontAwesome'}.form-group .control-desc{padding-top:6px;color:#999}label.form-control-static input{display:inline-block;position:relative;margin-top:4px}.control-desc .popover{max-width:none;font-size:13px}body.page-header-fixed{padding-top:48px}body.page-sidebar-fixed .page-sidebar{position:fixed}body.page-sidebar-fixed .page-content{margin-left:180px}.page-header{border:none;box-shadow:0 0 3px rgba(0,0,0,0.5)}.page-header.navbar{overflow:hidden;min-height:48px;height:48px;margin:0}.page-header.navbar .brand{display:inline-block;float:left;width:180px;height:48px;padding:12px 0 0;text-align:center;margin:0 auto;background-color:#3a3a3a}.page-header.navbar .brand .logo{display:inline-block;width:93px;height:30px;background:url(../img/site-logo-small.png) no-repeat}.page-header.navbar .breadcrumb-container{display:inline-block;padding-top:6px}.page-header.navbar .breadcrumb-container .breadcrumb{background-color:transparent;padding-left:20px;font-size:16px}.page-header.navbar .breadcrumb-container .breadcrumb>li+li:before{content:"\f105";font-family:'FontAwesome'}.page-header .container-fluid{padding-left:0}.page-sidebar{top:48px;bottom:0;left:0;width:180px;padding-top:0;z-index:1010;background-color:#3a3a3a}.page-sidebar .nav-menu>li>a{padding:8px 0 8px 20px;line-height:24px;font-size:13px;color:#c2c2c2;border-left:5px solid #3a3a3a}.page-sidebar .nav-menu>li>a:focus{background-color:#3a3a3a;border-left:5px solid #3a3a3a}.page-sidebar .nav-menu>li>a:hover{background-color:#2d2d2d;border-left:5px solid #005c74}.page-sidebar .nav-menu>li>a.selected{border-left:5px solid #00485b}.page-sidebar .nav-menu>li>a.selected:focus{border-left:5px solid #00485b}.page-sidebar .nav-menu>li>a.active{color:#fff;background-color:#0084a7;border-left:5px solid #0084a7}.page-sidebar .nav-menu>li>a.active:hover{border-left:5px solid #00acda}.page-sidebar .nav-menu>li>a.active:after{content:"\e251";font-family:'Glyphicons Halflings';position:relative;top:1px;display:inline-block;font-style:normal;font-weight:400;float:right;color:#e9e9e9;font-size:20px;line-height:24px;margin-right:-6px}.page-sidebar .nav-menu li .menu-caret:after{display:inline-block;width:12px;height:12px;margin-left:5px;top:1px;position:relative;border:none;font-family:'FontAwesome';font-style:normal}.page-sidebar .nav-menu li .menu-caret:after{content:'\f0da'}.page-sidebar .nav-menu li.expand .menu-caret:after{content:'\f0d7'}.page-sidebar .nav-menu>li>a>i.icon{float:left;margin-top:1px;margin-right:15px;text-align:center;line-height:24px;font-size:14px}.page-sidebar .sub-menu{padding:0;margin:0;background-color:#292929;position:relative;list-style-type:none;border-top:1px solid #202020;border-bottom:1px solid #464646}.page-sidebar .sub-menu>li>a{padding:8px 0 8px 40px;line-height:20px;font-size:13px;display:block;position:relative;color:#889097;border-left:5px solid #292929}.page-sidebar .sub-menu>li>a:before{display:inline-block;padding-right:8px;line-height:20px;content:"\f105";font-family:'FontAwesome'}.page-sidebar .sub-menu>li>a:hover{color:#fff;border-left:5px solid #005c74}.page-sidebar .sub-menu>li>a.active{color:#fff;background-color:#0084a7;border-left:5px solid #0084a7}.page-sidebar .sub-menu>li>a.active:hover{border-left:5px solid #00acda}.page-sidebar .sub-menu>li>a.active:after{content:"\e251";font-family:'Glyphicons Halflings';position:relative;top:-1px;display:inline-block;font-style:normal;font-weight:400;float:right;color:#e9e9e9;font-size:18px;line-height:24px;margin-right:-6px}.page-sidebar .nav-menu>li.profile{padding:10px 10px;color:#ccc;background-color:#333;border-bottom:1px solid #464646}.page-sidebar .nav-menu>li.profile a.title{color:#ccc}.page-sidebar .nav-menu>li.profile a.title:hover{color:#fff;background-color:transparent}.page-sidebar .nav-menu>li.profile a.title:focus{background-color:transparent}.page-sidebar .nav-menu>li.profile .image{float:left;margin-top:3px;font-size:24px;color:#69f;width:36px;height:36px;border-radius:6px;background-color:#eee;text-align:center;margin-right:10px;overflow:hidden}.page-sidebar .nav-menu>li.profile .image img{margin-top:-3px}.page-sidebar .nav-menu>li.profile .name{display:block;padding-top:3px;font-size:14px}.page-sidebar .nav-menu>li.profile .role{display:block;font-size:12px;color:#999}.page-sidebar .nav-menu>li.profile.active{background-color:#0084a7;color:#fff}.page-sidebar .nav-menu>li.profile.active .name,.page-sidebar .nav-menu>li.profile.active .role{color:#fff}.page-sidebar .nav-menu>li.profile.active:after{content:"\e251";font-family:'Glyphicons Halflings';position:absolute;top:0;right:-1px;display:inline-block;font-style:normal;font-weight:400;color:#e9e9e9;font-size:24px;line-height:61px;margin-right:-6px}.page-sidebar .nav-menu>li.profile .dropdown-menu{min-width:0;font-size:13px}.page-sidebar .nav-menu>li.profile .dropdown-menu>li>a{padding-right:30px}.page-sidebar .nav-menu>li.profile .dropdown-menu>li>a:hover{background-color:#ccc}.page-sidebar .nav-menu>li.profile .dropdown-menu .divider{margin:5px 0}.page-sidebar .badge{margin-top:-10px;margin-left:5px}.page-content-inner{padding:15px}.box{border:none;box-shadow:1px 1px 2px rgba(0,0,0,0.2);background-color:#fff;padding:15px;margin-bottom:15px}.box .nav-tabs{font-size:14px;font-weight:bold}.box .nav-tabs>li:first-child{margin-left:30px}.box .tab-content>.tab-pane{background-color:#fff;padding:20px;border:1px solid #ddd;border-top:none;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.box.box-nav-tabs{padding:0;background-color:#f5f5f5}.box.box-nav-tabs .nav-tabs{font-size:inherit;font-weight:inherit}.box.box-nav-tabs .nav-tabs>li{padding-top:8px}.box.box-nav-tabs .nav-tabs>li>a{margin-right:5px;border-top-left-radius:3px;border-top-right-radius:3px;padding:3px 15px;background-color:#e6e6e6;border:1px solid #ddd;border-bottom-color:transparent}.box.box-nav-tabs .nav-tabs>li.active>a{font-weight:bold;border:1px solid #ddd;border-bottom-color:transparent;background-color:#fff}.box.box-nav-tabs .tab-content>.tab-pane{padding:20px;border:none}.box-btn-bar{line-height:30px}.box-btn-bar a.btn{margin-right:20px}.page-filter{height:36px;line-height:36px;margin-bottom:10px}.page-filter .form-control{margin-top:5px;margin-right:4px}.form-group .input-group{margin-bottom:5px}.op_box{display:block;padding:5px;border-radius:3px;text-align:center;margin-top:5px}.op_error{background:#fbb}.op_wait{background:#ccc}.more-action{position:absolute !important}.more-action .dropdown-menu{background-color:rgba(60,60,60,0.9);color:#fff;font-size:13px}.more-action .dropdown-menu.dropdown-menu-left{margin-left:-120px}.more-action .dropdown-menu>li>a{padding:5px 20px;color:#fff}.more-action .dropdown-menu>li>a:hover,.more-action .dropdown-menu>li>a:active,.more-action .dropdown-menu>li>a:visited{background-color:#0084a7}.more-action .dropdown-menu .divider{margin:5px 0;background-color:#666}.popover-inline-edit input,.popover-inline-edit .btn{height:30px}.popover-inline-edit .popover-title{background-color:#ddd}.popover-inline-edit .popover-content{padding:20px 10px}.popover-inline-edit .popover{padding:0;max-width:500px}.popover-inline-edit .popover .popover-content{padding:10px 10px 20px 10px}.popover-inline-edit .popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#ddd}.tp-table-filter{width:100%;height:25px;margin:0;padding:0}.tp-table-filter .tp-table-filter-inner{display:table;margin:0;padding:0}.tp-table-filter.tp-table-filter-input .tp-table-filter-inner{width:100%}.tp-table-filter.tp-table-filter-left .tp-table-filter-inner,.tp-table-filter.tp-table-filter-right .tp-table-filter-inner{width:auto}.tp-table-filter.tp-table-filter-center .tp-table-filter-inner{margin:0 auto}.tp-table-filter .search-title{display:table-cell;vertical-align:middle;height:25px;line-height:25px;color:#555;white-space:nowrap;width:1px;text-align:left}.tp-table-filter .search-input,.tp-table-filter .search-select{display:table-cell;text-align:left;height:25px}.tp-table-filter .search-input>.btn,.tp-table-filter .search-select>.btn{font-size:13px;background-color:transparent;border:none;padding:0 0 0 8px;border-radius:0}.tp-table-filter .search-input>.btn:active,.tp-table-filter .search-select>.btn:active{box-shadow:none}.tp-table-filter .search-input .dropdown-menu,.tp-table-filter .search-select .dropdown-menu{min-width:0;background-color:rgba(0,0,0,0.8);color:#fff;font-size:13px;box-shadow:0 3px 6px rgba(0,0,0,0.3);border:none}.tp-table-filter .search-input .dropdown-menu>li>a,.tp-table-filter .search-select .dropdown-menu>li>a{padding-right:30px;min-width:100px;color:#fff}.tp-table-filter .search-input .dropdown-menu>li>a:hover,.tp-table-filter .search-select .dropdown-menu>li>a:hover,.tp-table-filter .search-input .dropdown-menu>li>a:active,.tp-table-filter .search-select .dropdown-menu>li>a:active,.tp-table-filter .search-input .dropdown-menu>li>a:visited,.tp-table-filter .search-select .dropdown-menu>li>a:visited{background-color:rgba(255,255,255,0.2)}.tp-table-filter .search-input .dropdown-menu .divider,.tp-table-filter .search-select .dropdown-menu .divider{margin:5px 0;background-color:#666}.tp-table-filter .search-input{width:100%;padding-left:10px}.tp-table-filter .search-input>.input-group .input-group-addon{font-size:13px;padding:0 5px}.tp-table-filter .search-input>.input-group input.form-control{font-size:13px;height:25px;width:100%;padding:0 5px}.btn.btn-no-border{font-size:13px;background-color:transparent;border:none;padding:0 0 0 8px;border-radius:0}.btn.btn-no-border:active{box-shadow:none}.table>tbody>tr.table-footer-action{background-color:transparent}.table>tbody>tr.table-footer-action>td{border-color:transparent;padding-top:15px;vertical-align:middle}.table-extend-area,.table-prefix-area{display:table;width:100%}.table-extend-area .table-extend-cell,.table-prefix-area .table-extend-cell{display:table-cell;height:24px;line-height:24px;padding:3px}.table-extend-area .table-extend-cell.table-extend-cell-right,.table-prefix-area .table-extend-cell.table-extend-cell-right{text-align:right}.table-extend-area .table-extend-cell .table-name,.table-prefix-area .table-extend-cell .table-name{font-size:120%;position:relative;top:3px;padding-right:10px}.table-extend-area .table-extend-cell .pagination,.table-prefix-area .table-extend-cell .pagination{margin:0 0}.table-extend-area .table-extend-cell .pagination>li>span,.table-prefix-area .table-extend-cell .pagination>li>span,.table-extend-area .table-extend-cell .pagination a,.table-prefix-area .table-extend-cell .pagination a{padding:3px 8px;font-size:12px;line-height:1.5}.table-extend-area .table-extend-cell.checkbox-select-all,.table-prefix-area .table-extend-cell.checkbox-select-all{width:36px;text-align:center}.table-extend-area .table-extend-cell.checkbox-select-all input,.table-prefix-area .table-extend-cell.checkbox-select-all input{position:relative;top:3px}.table-extend-area .table-extend-cell.group-actions>.btn-group .btn,.table-prefix-area .table-extend-cell.group-actions>.btn-group .btn{padding:3px 5px;font-size:12px}.table-extend-area .table-extend-cell.table-item-counter,.table-prefix-area .table-extend-cell.table-item-counter{text-align:right}.table-extend-area .table-extend-cell.table-item-counter ol,.table-prefix-area .table-extend-cell.table-item-counter ol{list-style:none;padding:0;margin:0;border:none;background-color:transparent;color:#666}.table-extend-area .table-extend-cell.table-item-counter ol>li,.table-prefix-area .table-extend-cell.table-item-counter ol>li{display:inline-block;padding-left:10px}.table-extend-area .table-extend-cell.table-item-counter .btn,.table-prefix-area .table-extend-cell.table-item-counter .btn{margin-top:-3px}.table-extend-area .table-extend-cell.table-item-counter .btn .caret,.table-prefix-area .table-extend-cell.table-item-counter .btn .caret{margin-top:-3px}.table-prefix-area{margin-bottom:10px}.table-prefix-area .table-extend-cell{padding:0}.btn-group.pagination .btn.dropdown-toggle{background-color:transparent;border:1px solid #999}textarea.textarea-resize-y{resize:vertical}textarea.textarea-resize-none{resize:none}textarea.textarea-code{font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace}textarea.cert_pub{width:100%;height:64px;border:1px solid #e2e2e2;background-color:#e4ffe5}.box ul.help-list{list-style:none;margin:0 0 10px 0;padding:0}.box ul.help-list li{padding:3px 3px 3px 20px;margin-left:10px}.box ul.help-list li:before{color:#999;position:absolute;margin-left:-1.2em;margin-top:1px;content:"\f05a";font-family:'FontAwesome'}.box ul.help-list li em{color:#3374b0;font-style:normal}.tp-checkbox{display:inline-block;color:#6487ad}.tp-checkbox.tp-disabled{cursor:not-allowed;color:#c2c2c2}.tp-checkbox:before{display:inline-block;position:relative;top:1px;width:16px;content:"\f096";font-family:'FontAwesome'}.tp-checkbox.tp-editable{cursor:pointer}.tp-checkbox.tp-editable:hover{color:#459dee}.tp-checkbox.tp-selected,.tp-checkbox.tp-checked{color:#3374b0}.tp-checkbox.tp-selected:before,.tp-checkbox.tp-checked:before{content:"\f046";font-family:'FontAwesome'}i.upload-button{font-size:128px;color:#b1b1b1}i.upload-button:hover{cursor:pointer;color:#709cff}#gritter-notice-wrapper{z-index:9999}.gritter-bottom,.gritter-item,.gritter-top{background:rgba(0,0,0,0.8) !important}.gritter-top{border-top-left-radius:3px;border-top-right-radius:3px}.gritter-bottom{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.gritter-close,.gritter-light .gritter-close{left:auto !important;right:5px !important;top:5px !important;width:16px !important;height:16px !important;line-height:16px !important;display:block !important;border-radius:50%}.gritter-close:before,.gritter-light .gritter-close:before{content:'\f00d' !important;font-family:FontAwesome !important;font-size:9px !important;width:16px !important;height:16px !important;line-height:16px !important;color:#fff !important;text-indent:0 !important;position:absolute !important;text-align:center !important;right:0 !important;top:0 !important}.gritter-title{font-size:13px !important;line-height:16px !important;padding-bottom:5px !important;font-weight:400 !important;color:#fff !important;text-shadow:none !important}.gritter-item{color:#aaa !important;font-size:13px !important;padding:2px 15px 5px !important}.gritter-error .gritter-bottom,.gritter-error .gritter-item,.gritter-error .gritter-top{background:rgba(123,32,32,0.9) !important}.gritter-error .gritter-title{color:#fff !important}.gritter-error .gritter-item{color:#ddd !important}.gritter-error .gritter-close{left:auto !important;right:5px !important;top:5px !important;width:16px !important;height:16px !important;line-height:16px !important;display:block !important;border-radius:50%;background:#e33b3b !important}.gritter-success .gritter-bottom,.gritter-success .gritter-item,.gritter-success .gritter-top{background:rgba(1,65,16,0.9) !important}.gritter-success .gritter-title{color:#ddd !important}.gritter-success .gritter-item{color:#ccc !important}.gritter-success .gritter-close{background:#0eb320 !important}#gritter-notice-wrapper{width:320px;max-width:480px}/*# sourceMappingURL=style.css.map */ \ No newline at end of file diff --git a/server/www/teleport/static/css/style.css.map b/server/www/teleport/static/css/style.css.map new file mode 100644 index 0000000..58f4652 --- /dev/null +++ b/server/www/teleport/static/css/style.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["style.less","_base.less","_role.less","_table.less","_overwrite_bootstrap.less","_overwrite_gritter.less"],"names":[],"mappings":"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","file":"style.css","sourceRoot":"..\\less"} \ No newline at end of file diff --git a/server/www/teleport/static/css/sub.css b/server/www/teleport/static/css/sub.css deleted file mode 100644 index 73393db..0000000 --- a/server/www/teleport/static/css/sub.css +++ /dev/null @@ -1 +0,0 @@ -@charset "utf-8";body{font-family:"Open Sans","Helvetica Neue","Microsoft YaHei","微软雅黑",Helvetica,Arial,sans-serif;font-size:13px;background-color:#e9e9e9;color:#333}html,body{height:100%}#page-container{min-width:1260px}a{text-decoration:none}a:link{text-decoration:none}a:hover{text-decoration:none}a:active{text-decoration:none}a:visited{text-decoration:none}select{outline:none}label{font-weight:normal}.clear-float{clear:both}.bigger{font-size:120%}.normal-text{font-size:13px;color:#333}.mono{font-family:Consolas,Lucida Console,Monaco,Courier,'Courier New',monospace}hr.hr-sm{margin-top:5px;margin-bottom:5px}.btn-group-sm>.btn,.btn-sm{padding:2px 5px}.btn.btn-sm{padding:3px 8px}.btn.btn-icon{padding:3px 6px}.btn.btn-icon.btn-sm{padding:0;font-size:14px;height:24px;width:24px;line-height:24px;border-radius:0}.form-group-sm .input-group .input-group-btn>.btn{height:30px;padding:0 8px}.pop-menu-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040}.form-group{margin-bottom:5px}.badge{display:inline-block;min-width:8px;padding:5px 10px;border-radius:10px;text-align:center;white-space:nowrap;vertical-align:middle;font-size:13px;font-weight:400;line-height:1em;background-color:#888;color:#fff;text-shadow:1px 1px 0 #525252}.badge.badge-plain{text-shadow:none}.badge.badge-sm{font-size:11px;padding:3px 6px;margin-top:0;border-radius:8px;text-shadow:none}.badge.badge-sup{margin-left:-6px;margin-top:-16px}.badge.badge-ignore{background-color:#e5e5e5;color:#999;text-shadow:none}.badge.badge-info{background-color:#33b7d0}.badge.badge-primary{background-color:#348fe2}.badge.badge-success{background-color:#368142}.badge.badge-warning{background-color:#f57523}.badge.badge-danger{background-color:#d34242}.label{display:inline-block;min-width:8px;padding:5px 10px;border-radius:5px;text-align:center;white-space:nowrap;vertical-align:middle;font-size:13px;font-weight:400;line-height:1em;background-color:#888;color:#fff;text-shadow:1px 1px 0 #525252}.label.label-plain{text-shadow:none}.label.label-sm{font-size:11px;padding:3px 8px;margin-top:0;border-radius:5px;text-shadow:none}.label.label-ignore{background-color:#e5e5e5;color:#999;text-shadow:none}.label.label-info{background-color:#33b7d0}.label.label-primary{background-color:#348fe2}.label.label-success{background-color:#368142}.label.label-warning{background-color:#f57523}.label.label-danger{background-color:#d34242}.progress.progress-sm{height:18px;margin-bottom:2px;background-color:#aaa}.progress.progress-sm.button{cursor:pointer}.progress.progress-sm .progress-bar{display:block;font-size:11px;float:none}.alert-sm{padding:5px;margin-bottom:10px}.modal-dialog-sm .modal-header{padding:10px}.modal-dialog-sm .modal-body{padding:10px}.modal-dialog-sm .modal-footer{padding:10px}.modal-dialog-sm .form-horizontal .form-group{margin-right:-5px;margin-left:-5px}.modal-dialog-sm .col-sm-1,.modal-dialog-sm .col-sm-2,.modal-dialog-sm .col-sm-3,.modal-dialog-sm .col-sm-4,.modal-dialog-sm .col-sm-5,.modal-dialog-sm .col-sm-6,.modal-dialog-sm .col-sm-7,.modal-dialog-sm .col-sm-8,.modal-dialog-sm .col-sm-9,.modal-dialog-sm .col-sm-10,.modal-dialog-sm .col-sm-11{padding-right:5px;padding-left:5px}.btn-single-line{white-space:nowrap}.btn-single-line .btn:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.btn-single-line .btn:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.remote-action-group{margin-bottom:3px;height:28px;min-width:390px}.remote-action-group ul{display:block;height:28px;margin:0;padding:0}.remote-action-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.remote-action-group ul li.remote-action-btn{background:none;padding:0;border:none}.remote-action-group ul li.remote-action-input{background:none;padding:4px 0}.remote-action-group ul li.remote-action-input select{border:none}.remote-action-group ul li.remote-action-chk-protocol{width:86px}.remote-action-group ul li.remote-action-username,.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol{width:96px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.remote-action-group ul li.remote-action-username{font-size:90%;color:#999}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol,.remote-action-group ul li.remote-action-chk-protocol{color:#000}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-chk-protocol{font-weight:bold}.remote-action-group ul li.remote-action-password,.remote-action-group ul li.remote-action-sshkey,.remote-action-group ul li.remote-action-noauth{text-align:center;padding:4px 8px;width:45px}.remote-action-group ul li.remote-action-password{background-color:#e3ffe3;color:#999}.remote-action-group ul li.remote-action-sshkey{background-color:#fbe9c8;color:#666}.remote-action-group ul li.remote-action-noauth{background-color:#e0e0e0;color:#666}.remote-action-group ul li .btn{line-height:1.5;margin:0;padding:4px 8px;font-size:12px;border-radius:0}.remote-action-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.remote-action-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.remote-action-group ul li select{margin-top:-3px}.remote-action-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li:first-child .btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.remote-action-group ul li:last-child .btn{border-top-right-radius:4px;border-bottom-right-radius:4px}hr.small{margin:5px 0}.dlg-protocol-group{margin-bottom:3px}.dlg-protocol-group ul{display:block;height:28px;margin:0;padding:0}.dlg-protocol-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.dlg-protocol-group ul li.item-name{width:120px}.dlg-protocol-group ul li.item-btn{background:none;padding:0;border:none}.dlg-protocol-group ul li.item-input{background:none;border:none;padding:0}.dlg-protocol-group ul li .form-control{line-height:1.5;margin:0;padding:4px 5px;font-size:12px;height:28px;border-radius:0;border-left:none;width:100px}.dlg-protocol-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.dlg-protocol-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.dlg-protocol-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:first-child .btn,.dlg-protocol-group ul li:first-child .form-control{border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.dlg-protocol-group ul li:last-child .btn,.dlg-protocol-group ul li:last-child .form-control{border-top-right-radius:4px;border-bottom-right-radius:4px}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{padding-right:5px;padding-left:5px}.form-group-sm .form-control-static{padding:6px 0}.input-group :-moz-placeholder{color:#d2d2d2}.input-group ::-moz-placeholder{color:#d2d2d2}.input-group input:-ms-input-placeholder,.input-group textarea:-ms-input-placeholder{color:#d2d2d2}.input-group input::-webkit-input-placeholder,.input-group textarea::-webkit-input-placeholder{color:#d2d2d2}.table{margin-bottom:10px}.table>thead>tr>th{padding:5px 5px;outline:none;white-space:nowrap;font-weight:normal;text-align:center;background-color:#ededed}.table>tbody>tr>td{padding:5px;text-align:center;vertical-align:middle}.table>tbody>tr>td .nowrap{white-space:nowrap}.table.table-data thead .sorting,.table.table-data thead .sorting_asc,.table.table-data thead .sorting_desc{cursor:pointer;position:relative}.table.table-data thead .sorting>span:after,.table.table-data thead .sorting_asc>span:after,.table.table-data thead .sorting_desc>span:after{bottom:4px;padding-left:5px;display:inline-block;font-family:'FontAwesome';opacity:.8}.table.table-data thead .sorting>span:after{opacity:.2;content:"\f0dc"}.table.table-data thead .sorting_asc>span:after{content:"\f0de"}.table.table-data thead .sorting_desc>span:after{content:"\f0dd"}.host-id{display:block;font-size:16px;font-family:Consolas,Lucida Console,Monaco,Courier,'Courier New',monospace;color:#333}.host-id.not-active{font-size:14px;font-weight:400;color:#999}.host-desc{font-size:12px;color:#999;display:inline-block;white-space:nowrap;width:160px;overflow:hidden;text-overflow:ellipsis}a.host-desc:hover:before{display:inline-block;padding-right:3px;line-height:12px;content:"\f040";font-family:'FontAwesome'}.td-ip-list{padding-right:20px;padding-left:5px}.td-ip-show-more{font-size:14px;width:12px;float:right;display:block}.td-ip-item{min-width:12em;width:12em;height:18px;padding:2px 4px;margin:1px 0;color:#333;text-align:center;white-space:nowrap;border-radius:9px;line-height:11px;font-size:11px;background:#dfdfdf !important}.td-ip-item span{display:inline-block;font-family:Consolas,Lucida Console,Monaco,Courier,'Courier New',monospace;font-size:11px;font-weight:400}.td-ip-item a{display:inline-block;width:14px;float:right;font-size:14px}.page-header-fixed{padding-top:48px}.header{border:none;box-shadow:0 0 3px rgba(0,0,0,0.5);min-height:48px;height:48px;top:0;width:100%;position:fixed;z-index:999}.header .top-navbar{min-height:48px;height:48px;line-height:48px;background-color:#3a3a3a;color:#ccc}.header .top-navbar a{color:#d5d5d5}.header .top-navbar a:hover{color:#5a8fee}.header .top-navbar .brand{float:left;display:inline-block;padding:12px 0;margin:0}.header .top-navbar .brand .site-logo{display:block;width:86px;height:24px;background:url(../img/site-logo-small.png) no-repeat}.header .top-navbar .title-container{float:left;display:inline-block;margin:0;padding:0;margin-left:20px}.header .top-navbar .title-container .title{font-size:16px}.header .top-navbar .breadcrumb-container{float:left;display:inline-block;margin:0;padding:0}.header .top-navbar .breadcrumb-container .breadcrumb{background-color:#3a3a3a;height:48px;margin:0;border-radius:0;border:none;padding:0 0 0 20px;font-size:16px;color:#ccc}.header .top-navbar .breadcrumb-container .breadcrumb>li+li:before{font-size:18px;padding:0 5px;color:#555;content:'|'}.header .top-navbar .breadcrumb-container .breadcrumb .title{font-size:18px}.header .top-navbar .breadcrumb-container .breadcrumb .sub-title{font-size:14px;color:#b3b3b3}.header .top-navbar .status-container{float:right}.page-content{margin-top:10px;margin-bottom:44px}.footer{width:100%;height:24px;line-height:24px;background-color:#d5d5d5;border-top:1px solid #a2a2a2;border-bottom:1px solid #efefef;z-index:998;text-align:center;font-size:12px}.footer.footer-fixed-bottom{bottom:0;position:fixed}.row-sm .col-sm-1,.row-sm .col-sm-2,.row-sm .col-sm-3,.row-sm .col-sm-4,.row-sm .col-sm-5,.row-sm .col-sm-6,.row-sm .col-sm-7,.row-sm .col-sm-8,.row-sm .col-sm-9,.row-sm .col-sm-10,.row-sm .col-sm-11{padding-right:5px;padding-left:5px}.content{margin-top:15px;margin-bottom:20px;background-color:#fff;border-radius:5px;padding:10px}.content:last-child{margin-bottom:54px}.table-host{width:100%;border-top:10px solid #b3cfe7;border-bottom:1px solid #b3cfe7}.table-host .cell-host-id{border-left:1px solid #e7e7e7;padding:5px;text-align:center;width:168px;vertical-align:middle}.table-host .cell-host-id .host-id{font-family:Consolas,Lucida Console,Monaco,Courier,'Courier New',monospace;font-size:13px;color:#999;display:inline-block}.table-host .cell-host-id .host-name{display:block;width:168px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:16px;margin:auto;margin-bottom:10px}.table-host .cell-host-id .td-ip-item{width:10em;height:18px;padding:2px 4px;margin:1px auto;color:#333;text-align:center;white-space:nowrap;border-radius:9px;line-height:11px;font-size:11px;background:#dfdfdf !important}.table-host .cell-host-id .td-ip-item span{display:inline-block;font-family:Consolas,Lucida Console,Monaco,Courier,'Courier New',monospace;font-size:11px;font-weight:400}.table-host .cell-host-id .actions{margin-top:20px}.table-host .cell-host-id .actions a{margin-left:5px;margin-right:5px}.table-host .cell-host-id .actions a:first-child{margin-left:0}.table-host .cell-host-id .actions a:last-child{margin-right:0}.table-host .cell-detail{border-left:1px solid #e7e7e7;border-right:1px solid #e7e7e7;vertical-align:top}.table-host .cell-detail tr{border-top:1px solid #e7e7e7}.table-host .cell-detail tr:last-child{border-bottom:1px solid #e7e7e7}.table-host .cell-detail .row-host-info{background-color:#ececed}.table-host .cell-detail.host-offline{background-color:#ffcecc;text-align:center;vertical-align:middle}.table-host .cell-detail.host-offline .host-offline-msg{color:#802506;font-size:24px}.table-host .cell-log td{border:1px solid #e7e7e7}.table-host .cell-log td .host-log{font-size:12px;outline:none;width:100%;height:120px;overflow-y:auto;resize:none;border:none;padding:5px}.table-host .cell-log td .host-log div{margin-bottom:3px}.table-host .cell-log td .host-log div .datetime{font-family:Consolas,Lucida Console,Monaco,Courier,'Courier New',monospace}.log-box{margin-top:15px}.log-box .log-list{margin-top:5px;border:1px solid #e7e7e7;font-size:12px;outline:none;width:100%;max-height:480px;overflow-y:auto;resize:none;padding:5px}.log-box .log-list div{margin-bottom:3px}.log-box .log-list div:hover{background-color:#f3f3f3}.log-box .log-list div .log-dt{padding:0 3px;padding-top:2px;padding-bottom:1px;margin-right:3px;background-color:#f57523;color:#fff;font-family:Consolas,Lucida Console,Monaco,Courier,'Courier New',monospace}.log-box .log-list div .log-hid{padding:0 3px;margin-right:3px;background-color:#348fe2;color:#fff}.log-box .log-list div .log-hname{padding:0 3px;margin-right:3px;background-color:#348fe2;color:#fff}.page-nav{height:30px;line-height:30px}.page-nav .breadcrumb{padding:0;margin:0;border-radius:0;background-color:transparent}.page-nav .pagination{margin:0 0}.page-nav .btn{margin-top:-3px}.mp{display:inline-block;width:20%;max-width:20%}.mp .mp-inner{background-color:#e5e5e5;margin:3px;border-radius:4px}.mp .mp-name{color:#999;padding:9px;margin-bottom:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}.mp .mp-name.with-target{padding-top:17px;padding-bottom:1px}.mp .mp-target{display:inline-block;float:left;position:absolute;font-size:11px;padding:0 5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-top-left-radius:4px;border-bottom-right-radius:4px;color:rgba(255,255,255,0.85);background-color:rgba(0,0,0,0.1)}.mp.mp-disabled .mp-inner{background-color:#e5e5e5}.mp.mp-disabled .mp-name{color:#999}.mp.mp-success .mp-inner{background-color:#368142}.mp.mp-success .mp-name{color:#fff}.mp.mp-danger .mp-inner{background-color:#d34242}.mp.mp-danger .mp-name{color:#fff}.mp.mp-warning .mp-inner{background-color:#f57523}.mp.mp-warning .mp-name{color:#fff}.host-offline{background-color:#ffcecc;height:36px;line-height:36px;padding:0 10px;color:#802506;font-size:20px;cursor:pointer}.host-offline .tips{display:none;font-size:12px}.host-offline:hover .tips{display:inline-block}.host-no-strategy{color:#999;font-size:16px}#gritter-notice-wrapper{z-index:9999}.gritter-bottom,.gritter-item,.gritter-top{background:rgba(0,0,0,0.8) !important}.gritter-top{border-top-left-radius:3px;border-top-right-radius:3px}.gritter-bottom{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.gritter-close,.gritter-light .gritter-close{left:auto !important;right:5px !important;top:5px !important;width:16px !important;height:16px !important;line-height:16px !important;display:block !important;border-radius:50%}.gritter-close:before,.gritter-light .gritter-close:before{content:'\f00d' !important;font-family:FontAwesome !important;font-size:9px !important;width:16px !important;height:16px !important;line-height:16px !important;color:#fff !important;text-indent:0 !important;position:absolute !important;text-align:center !important;right:0 !important;top:0 !important}.gritter-title{font-size:13px !important;line-height:16px !important;padding-bottom:5px !important;font-weight:400 !important;color:#fff !important;text-shadow:none !important}.gritter-item{color:#aaa !important;font-size:13px !important;padding:2px 15px 5px !important}.gritter-error .gritter-bottom,.gritter-error .gritter-item,.gritter-error .gritter-top{background:rgba(123,32,32,0.9) !important}.gritter-error .gritter-title{color:#fff !important}.gritter-error .gritter-item{color:#ddd !important}.gritter-error .gritter-close{left:auto !important;right:5px !important;top:5px !important;width:16px !important;height:16px !important;line-height:16px !important;display:block !important;border-radius:50%;background:#e33b3b !important}.gritter-success .gritter-bottom,.gritter-success .gritter-item,.gritter-success .gritter-top{background:rgba(1,65,16,0.9) !important}.gritter-success .gritter-title{color:#ddd !important}.gritter-success .gritter-item{color:#ccc !important}.gritter-success .gritter-close{background:#0eb320 !important}.icon{display:inline-block}.icon16{width:16px;height:16px;line-height:16px;margin-right:3px;margin-top:0 !important;margin-bottom:-2px !important;vertical-align:top;background-image:url("img/desktop/mimetype-16.png") !important}.icon16.icon-disk{background-position:0 0 !important}.icon16.icon-folder{background-position:-16px 0 !important}.icon16.icon-file{background-position:0 -16px !important}.icon16.icon-txt{background-position:-16px -16px !important}.icon16.icon-help{background-position:-32px -16px !important}.icon16.icon-sys{background-position:-48px -16px !important}.icon16.icon-exe{background-position:-64px -16px !important}.icon16.icon-office{background-position:0 -32px !important}.icon16.icon-word{background-position:-16px -32px !important}.icon16.icon-excel{background-position:-32px -32px !important}.icon16.icon-ppt{background-position:-48px -32px !important}.icon16.icon-access{background-position:-64px -32px !important}.icon16.icon-visio{background-position:-80px -32px !important}.icon16.icon-audio{background-position:0 -48px !important}.icon16.icon-video{background-position:-16px -48px !important}.icon16.icon-pic{background-position:-32px -48px !important}.icon16.icon-pdf{background-position:-48px -48px !important}.icon16.icon-font{background-position:-64px -48px !important}.icon16.icon-script{background-position:0 -64px !important}.icon16.icon-html{background-position:-16px -64px !important}.icon16.icon-py{background-position:-32px -64px !important}.icon16.icon-h{background-position:-48px -64px !important}.icon16.icon-c{background-position:-64px -64px !important}.icon16.icon-cpp{background-position:-80px -64px !important}.icon16.icon-cs{background-position:-96px -64px !important}.icon16.icon-php{background-position:-112px -64px !important}.icon16.icon-ruby{background-position:-128px -64px !important}.icon16.icon-java{background-position:-144px -64px !important}.icon16.icon-vs{background-position:-160px -64px !important}.icon16.icon-js{background-position:-176px -64px !important}.icon16.icon-archive{background-position:0 -80px !important}.icon16.icon-rar{background-position:-16px -80px !important}.icon16.icon-zip{background-position:-32px -80px !important}.icon16.icon-7z{background-position:-48px -80px !important}.icon16.icon-tar{background-position:-64px -80px !important}.icon16.icon-gz{background-position:-80px -80px !important}.icon16.icon-jar{background-position:-96px -80px !important}.icon16.icon-bz2{background-position:-112px -80px !important}.icon24{width:24px;height:24px;line-height:24px;margin-right:3px;margin-top:0 !important;margin-bottom:-2px !important;vertical-align:top;background-image:url("img/desktop/icons-tree-24x24.png") !important}.icon24.icon-disk{background-position:0 0 !important}.icon24.icon-folder{background-position:-24px 0 !important}.icon24.icon-folder-open{background-position:-48px 0 !important}.os-icon-windows:after{color:#00bcf6;content:"\f17a";font-size:18px;width:24px;height:24px;line-height:24px;display:inline-block;font-family:'FontAwesome'}.os-icon-linux:after{color:#fff;content:"\f17c";font-size:18px;width:24px;height:24px;line-height:24px;background-color:#333;border-radius:50%;display:inline-block;font-family:'FontAwesome'}.os-icon-macos:after{color:#a7a7a7;content:"\f179";font-size:20px;width:24px;height:24px;line-height:24px;display:inline-block;font-family:'FontAwesome'}.os-icon-ubuntu:after,.os-icon-debian:after,.os-icon-centos:after,.os-icon-redhat:after{content:" ";width:24px;height:24px;line-height:24px;display:inline-block}.os-icon-ubuntu:after{background:url(../img/os-icon/ubuntu-24x24.png) no-repeat}.os-icon-debian:after{background:url(../img/os-icon/debian-24x24.png) no-repeat}.os-icon-centos:after{background:url(../img/os-icon/centos-24x24.png) no-repeat}.os-icon-redhat:after{background:url(../img/os-icon/redhat-24x24.png) no-repeat} \ No newline at end of file diff --git a/server/www/teleport/static/download/example.csv b/server/www/teleport/static/download/example.csv deleted file mode 100644 index 927099f..0000000 --- a/server/www/teleport/static/download/example.csv +++ /dev/null @@ -1,4 +0,0 @@ -ID, ϵͳ, IPַ, ˿, Э, ״̬, , ϵͳû, ϵͳ, Ƿ,Ӳ, ԿID, ֤ -0,1,115.28.12.207,3389,1,0,115.28.12.207,administrator,123456,0,,0,1 -0,2,120.26.109.25,22,2,0,120.26.109.25,root,123456,0,,0,1 -0,2,120.26.109.25,22,2,0,120.26.109.25,root,,0,,1,2 diff --git a/server/www/teleport/static/download/teleport-example-asset.csv b/server/www/teleport/static/download/teleport-example-asset.csv new file mode 100644 index 0000000..42c0bb1 --- /dev/null +++ b/server/www/teleport/static/download/teleport-example-asset.csv @@ -0,0 +1,5 @@ +#用户账号,用户姓名,登录认证方式,EMail,Mobile,QQ,微信,所属组,描述 +zhangsan,张三,1,zhangsan@domain.tld,,12345678,112233,运维人员|审计员, +lisi,李四,1,lisi@domain.tld,,,,审计员, +wangwu,王五,1,wangwu@domain.tld,,,,, +bai.lee,李白,1,bai.lee@domain.tld,,10086,bai.lee,审计管理员,著名诗人、剑客 diff --git a/server/www/teleport/static/download/teleport-example-user.csv b/server/www/teleport/static/download/teleport-example-user.csv new file mode 100644 index 0000000..76f8c31 --- /dev/null +++ b/server/www/teleport/static/download/teleport-example-user.csv @@ -0,0 +1,6 @@ +#用户账号示例文件,使用CSV格式,每行一个用户,用英文逗号分隔,共9个字段,需要8个英文逗号,,,,,,,, +#用户账号,用户姓名,登录认证方式,EMail,Mobile,QQ,微信,所属组,描述 +zhangsan,张三,1,zhangsan@domain.tld,,12345678,112233,运维人员|审计员, +lisi,李四,1,lisi@domain.tld,,,,审计员, +wangwu,王五,1,wangwu@domain.tld,,,,, +bai.lee,李白,1,bai.lee@domain.tld,,10086,bai.lee,审计管理员,著名诗人、剑客 diff --git a/server/www/teleport/static/img/css/disable-bg.png b/server/www/teleport/static/img/css/disable-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..c6b7a98f647a975dfedf7e9bedc017f593f83921 GIT binary patch literal 1627 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1SBUuI~xY1BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFe_z-M3hAM`dB6B=jtVb)aX^@765fKFxc2v6eK2Rr0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWv2L<~p`n7AnVzAE zshOFfj)IYap^?4;5Si&3npl~dSs9rtK!Fm_wxX0Ys~{IQs9ivwtx`rwNr9EVetCJh zUb(Seeo?xx^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal@=Hr> zm4GgVcpgi&u1T;Y}Gc(1?%-F!(&D6=&(!|Wj(9qS~!p+jz$<4sb$j#Ky z$<)ylrq?AuximL5uLPzy1)F! zYi7J$r|Brt+V6MVMm6n_@r=%y(?4u!;t=|5J>&R*S<@G_*FUPN3OqqHLG;<%?+0vmR~-aWGL{!RPe~hiZ|bX@4nk7 z+IadYSNq`rrwVO;M)hm2OWRn=cJB?)u&JK-`_F-&HFA9IJe*&uYE^_7kAH5To_>6?CDRgtgVdGpN}z3FQ>Or(4@M5@#$v^4yi>(?HtyFkiT zjz3RPfTN?%ktNA&_ChJiUk8#lF1eh!P|EfEYQy!{UuT#kc_eI&di-(63*8P4Ms=s= zvfaJsPINJBZ^)`y+3N3=pm%_shqGm;g7*i1&NC`!Si@Kj#dxR)t?-=m-d-V~eX3XL z?z={BJU%cg9%N?PeqfvWq2?9G__r!7nsYWSc?Bbf*HWQSw?=l0HWvA+MOSvl=rtd7 zI9i~WVkDXBIWgI3!PTsZ{37bE|9)q=I5i6Yt=s=-$q!wYT}I1{Lv{D4A6>uhaEg(l zdXQzHiKdph+A}A+`OB3icy)126?n!Zda!+o$6L<6#|s!k!>9RnT@i3wY&g^BpYLlG zcQegPjth<-?hN_cprRQhA^ex2xKTy^f|_gJoz5BDAuLZk1LHUq7b>iD;w(}RQgy9V zZ8!_D){qrp1)eFlCvA=BM|wvrVK_{WUx?SGWn(eC9t?FOas`a;jHj^D6Df zViSV*omBl(>~`p!ODXs7zjB*D{+|1^-*DpjuA@q!x<1P9nMs1IfSQ| zdI+Fe#UUinrDUm20B5PAiuAC&C^}AAl&xf`2$5UC2ooC>(7;9oXwu|p4QvyK@Jg4B zu5H^S0{9AI%;peY2bCy|0R@O22I)jFXnCbW-UXVXa{$QE19YCWVd!5y>Qt#&)h( zXoFD(|2K@cq789{I+!Gb4M?6|iPj?{aFvYa?w1|efM_)AkMwG^D2f~*qRi94TBAhB zA)sG~Dz%DD5%VD)6A~~W3d9J9pl|_16VRDV3YjGmGnwL5jkj?bOgdG>qtgWm8V(s2YA?ZxMEjV*HQ<^$Nh@qTX_}cB}O?0XFe1XF9n^OX0`63 z(!I_l{drAiA`dOsh`yxlDh*HsdWS^4ST0F4;rN}5>it5B$AiIfebGg7+xS;^8;&xc z?!C)pRSoSp=y$kt4{Z9hBj@A;QVIV4%Pag^?-z5A_wyG^imjD>6jj%NyUYEc_8D?) zGQKN4vg~Bl59)yZL?F`)f1C1z|MWHraC8 z?5*N}{j$`STMMCAYhx+~$$5WJnYW2G%nfso;ul0lTJ>(eLJpZ+kF_3rdX4m!jyBINE%z*u{`)zrKjlT1<`E3<$VSG?C^-oX=azYEH0tsb|= ze5-RJ@~1tCJWN59dF@npXOlA zi${8@cGk47Z`x!3n}(kZW^?kge*NF9Ktj_a%$cO(`Jfv@2Tx(?;WP?2*NDNH;I57E(hH>Rc*}!>LFI951Y^HEm>bAe0{Q}&iBG0~; z{rLN+zJ@0oNk3a2?+%&?>EY&ox@B?`R=VL UZgt=1y|(|lL=-LjBR{R=KbLzjtN;K2 diff --git a/server/www/teleport/static/img/login/login-bg-0.png b/server/www/teleport/static/img/login/login-bg-0.png new file mode 100644 index 0000000000000000000000000000000000000000..e40624119d01ace1c2e84f04991675aeb22df3ca GIT binary patch literal 35703 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%0A>lQRidvn_@!t)T zKdSgpOo3ACkzRu|6Mltqd{saUcu;{BduWSqlqVS!&lD_CS8TswSWO#DI!l4H@^xHl z#u<{8F)sp4+H#Uo{i!+{FYKvU|vu7b&qIGugxR~zyi01XK0oH5GfRw|iX;OOD ztW3ox5OXRaI>obPwwZxjJrxyZ@(JF79`UW%G+h>53U}-d8BQWT$srqBQ-%_ZInOgC zg*4ktz?jngQa*G1=5k&7EE^{^tGIUhR5{htWEGoGtnK!6ckQ(h+QoYpNYZtK!R^A)aGSnIRK~4O3R}o+EWIu>baY5^3R^7T zgWkfz$&m$(!eI-uTt7ysQ{+3J;F?+u_aP4Tj>L*V3)dlv-#~fwhRe&UYi|X%n#Rm$ zU^Xh#GH?7N`Mn zSjUUODeG&Au2!|VXx+j6Sh(#&>S8^G_|c_j(9aJ%B||7;GWKFNe;}XA>1GMi^KU+O z{q>3d);L?k09Z5sc6CdiK&PCmWkINZp320hRjp&kZ29Hza8RW|W~VS0gLEG{wrI>) zI(n3~j=xEDP!!y0a9UU=tPBNZyw zEWa~7q7~*2AY*I=A!MTFl@$B8^NF;i6+KGfpnve2J~|2r=rr>tiXI+QfGne}E|}|< zU&%G>ldq!(38NYU93-sOKx^%e^O9Jy;P9t_YO<2%oTd+0#BuRJU!rnZ`el?_jzqG4 z0zShq!(d`LJD~Jl0b;Jcf!*;j7sV*5vtK+So7Q9 zsKd8RoHjdYFP6~Mo|n`Ds`57#)epYzi4R1QLpTEGlis5m1&UE zJ)x-{OWb<$19%*j&8WeY!Pccims#@pyF_h>Z^gy8>%n5L$ zEQAXnlWhTr*=}Ze!}+!j;y_?DthLMkQrS-|Uvl}JrH?EzOukj$?7RGnlX^ZhUowR@ zXhL4oasXxK!rd^Ht{{B?5?ss7xA_G|7)n7_)}di$k$4hxpX585YJF1abEeTIK{j}5 zMC+*dncwwQ-=5|nMwy9AhFfh4o)OBtfvvCig1!dh|2)KN4VmygD6=~WbHB0>!cKD+ zjDuhCY?~NtKR2^KMvkRw%tWD#_)g!;kPpo)SO_d;lKu{DBAg%}y;5W&eQ+ZRZ|O5aC?R*c4FQZfr@ z0+Aod4#XCJ^E8D_Klfrik~C1>krHp{C8L^qav@oS1U|e%3`0o65SqQmSS)I02}~NA zgQ1DD#3fp*KLj4>u}MEBv1Qm7bFgDz1g2wLNO+F1P8oN(G^vn7St0{w-QwRdcB#z-pf2Vf$xCgyr+1;8-t?9j=Ts#H;=e6s)Ox@%L^h-pzyC)#bPcW1LhFf5d3sk z`k&-|>?(G=@bV#%vthDfV+v@Gix%JW5ff4zE>id4pfjToyDr#GB&tWM76EUyV&Vl+ z6up@fTz0&2Mp8sUI1m0Ej-`tFs5|)@;n!^&ad+0RheNPK@hEfx)^#8y2l4_Ew5s|w z&08&72t7IkCBn~lw~=R4xhs3X(pOYwBaYFohDxOmRf zv@|M#JE{+m8&S}#WuFaZ>7%}Vk zk)$sG`~Z}XWPrpEqH~LMuR#~GM*fLBhbdZ?JCi(qzQ=N(5~WxvE`Wjo_Pxs8Fc>0Q z7}AaN=4VCvo)IL$FBK2Ax_wK|C<6=<%S-~{3IYNCT7F1D*R^K}jLI!vO){y7)8ci> z(!BEpSjfBtD)(G2K{F;J$;} znhTnB=1av`%jU5XD%ovY`jXiGe9o5{?kTqpKqNKVpC42heI6;|520LL(KSV{ldw2^fcvBvYjj8gH0!BN}<*r@z2 z;&8Q~n9G(`r@z(b`?Znu8$Gl0Kkn!4{@#@zW6lNM_tI@`wRn(=u(Mrt$p_Ao=d2NYlu((}3JyLmck1Q%kE#)RZ9+o$-d>0TZ)DmS zMc_o}@flknIro$=YWR!}sqV=Yo^_v(QjQV>_T^ZlYVRR(t zrnt#)dj#l?R==kV3eAVYa&TJORRJ`U8HB+}! zkPlOBTAHx?=&9{^vtB(spuS(fTb|pmS=^akA2o2AHqNZJk{#)f5W2G}s1EH8*>2O} z^X$Ze1n3^$y+(NG$W^BHS3=IS_bE@SSm#}Eu36Q0$Ml}|osDg*O-Vc*O)>`OBgQS) zue?5P<-D&k`S1dJ*%Hnr6hF&T+_kc32F_;?LG6v{rXIL^3s+X)SXf1_4IF9&lc|W{`iKXW1o`;pH>){^BGAPx>=m-23Dy9&RdPCpQvr zcgC_DHW6;^6Y@ZYdCe=ch2d+L&2PTKRgpIiV1=oyQuO{A3&!{H`CZ{tQ+dc4!8Tw; z9>*@Q4WZZ7R?C@{t_W!REPmcOygYJ7tSy9_sZvw|$#=Hr=jtq3o)Vy(f<1`PJ(!)l z3^ji}Tei{h`L{9H*QPt+Ms)Dk%<5`29me11RWtoPqO4q9c6 z8XQgB)AaW5tp`d)u?3}2XqWopu>t_aUA zYbnd`TSWpXtFJdXy%eUTNGYXs++$zN`-Ks<&UgBKLw<0uQ2gh-`)hvjA*#`Zz+l@D z7zwWB@P1X>p}jaxht2_28pl2jZO^1-UwY#bP#tXYO7t7>_8wws&yYi>YU;zha;2-s zOjo|?=1j!J9h|z2ElUd>_?XCQ$0Q!G!B-1|KJGX{Np%({<)d+cd6ZVg8!ZaH=AlU4Tq+g;}{pxqB`kG}sx zn)PJ(jQGZZ`0H_PkgV>cy#riqSiT*eJknWiEjo%|Pb|I!wzICONrW=QmZ^~rz-`)+ zOWnEV$FB+aEg}`e#XfHI%ewRAkS^P;z;jhWn2FYO|33gMK-0fNMQXySNiXxW&o*x_ zJ=_aBE-Z~%61^5yVtK?;$hbKQDx6$n%Z$Au73VNxT@Lxv$> zj46VU5yK%>S^)}VDMz0?DX?tN3xf~9gzDW}jb8FyRLBE&mfXihr z&Np;h$cYDe>{aag)Gn>txSZP*rbSHh9!g18TB8S#I#1urx_65dT%XmO zrTY4oKN@!rN5P-GT9=inYw=$UAgs{NzWsL|SVza<{loiBUQd?G!>#*uX7p^0eILVK z`SskNufXC)b{u4+E9QpO?NPV-=5llSwYDy(KjMkzD^vKp#roeCmoFF}0I7?$p;k&M zZfeoqP)F?oa?8Qa&Iljfry3z%+v9HL?A%N)aWU<(#I|R3RuVdp;JV%vBTuV-21_n(lYv+3zb1iJ0^oblWh@b zl3bKrAnot%Y~6p_E@|00_MbjYzWusRV}tiCU16vo=SsAxNv7V(y@TKXd->a66FY5; zN#~T7%xD0sX$4hddX^B&!UWSY<~qqknS0}*^Yq86ugY1}u4c!U#uYxfiaM+-1zM%~w;h>VA9v>Tmw?UqX8eu&vcR@-+YB_dDA?>t!bY{PlWO!EAhB zif%VNKqDlYMLx--Mt;~&C+X((3>BH~I*3A9ubI7tHfj9!yjfqc^-y07fL9rA~UTn%jAPPckKkOMW zfdwpYW9l$}=-IAqId;2=f^Tc3*sxE=r=6W+*yGb@e`=?R?+p~^mfcRA)&>YM1l;^9 z9_;V!57~0@u6FCNahSrHQ|JHN$AP%j0 zpTI=faguD_>SfiF{RdHaKL&xPvy(gBESBrr#P!M1qtX1$^XvcZ-;5qV=KXOU<&U3` zHEaIYXUX4wwVIvB%d$=?jVCvx=JfCV(Ea#fFmf%G6*&hUvmLw4YU}8(8fwnhI>XlK zV~TO|>@Ak&a6vl#Kk{!srSQNYN)>TRsBUkQ;il09QEExtu>iCHuY{xk2S6Bis#O+u zon+`uihMkrZy%l|tMQN8zF#kha?19c5ERYD>-p{UtgJN@ZJSYmQc)?F_Ws#Fzx(hf zJ6Rf;2$_4E#iq86zU*v_N4P_nElMSj&*a5wrE^HT`faW$gHQRge z$a(+oHuwH+p}Ih)Vx42Viycp_-l#eUy`E`_-nQPnS}cBZ?LXYsaLrbh&q2)=?lu>; z6eR4r|n;%`VGyZBm-K z05-3A73>6Pc8jAqAMW(FyLlb`*_W#%X_!eLead{U5>nq@*X!4%H7wb-yT8}Hx1Y@B zc({wb(8!#vaGnacSk(8Cl})q-08-(tE~0bkpcDW&9AJz1Js~Qakl@UT3+5v z=PYDx$H;amiURrY!%sT*pEmiV3RuSt2S@wC?ul#?JTxVoZ%AB)yW6Peq3;Sz)a@c9 z02TFuJSOVqqMZLlb9puJMrDmuVZ;!~T2)erT2_V_J!j{=uvSfG3U-dv8c8Dw2F8p$ zS&9sC#T%KaX3jmk>mNU~?ma?JKW-`t1ah`*rMUzJF(%z~jer)>x$kvl8ovBj|E_o3 z?>yR8SM#Q>>wQ=1rYff+JKx^capo-w>9`wIgYWGm7@mDu^3BFe{-%Ii2YWyJ=;?ch zE_Qm~sm5R3^6QCd7AgU7koD6euYWYUxVfpne%{*~j7|qHU)A|7B9*Z;j#xt_%vWm} zowowz7!VKR=Wz+`ZrE3|N#kIpk>F*wf7}T^Fz?yGsq5Fpi`RLw?jP<{uQ%zsXfeg; zXM1U}HL$5INg#v)=#CDN7ozlc`x-PNsQ~6{Oyk~>{oX(ly7}v0 z)`1MSePWry#0k2nZ(~`0w-J+q0^|sw!$0~5oksIGi|SHVNukmBlYg@Na0d^5aYvAx z&TH&>wdr{TZDsgQ*JWW~%v@lv%?fXcm+{0A6_E{eJf@UPmt|$DuBA5|JYd|DJVUOq zI);%IgbJy^)FdQ=R%zp+P#Po;M$Vm6((Q$R@H+}45+#;X%TBFXR|<-{%oz?zIK(C7 z&(5b`z7o+YeDV?A+s`LW8CzUYT-xQ5Ru)M~0j zrJfwh`yVmAxSjsTzj6-VvwL?oZ0S2z`aBke!$qyF%E%XQnh-U zp{P*Pu#p$w>g46?xA>xj)usExz=ssv8IcmFZ-@bC|Q+5pnru4sV0 zBLWEIMd^2lMRB}17is2p2I^`(efGlN-3d;fR5=l&D%Q35OULkEUUf%-f%}V8dx7qX{eAe89(%EDh7ZX$6LdVV0`m4h{OxFW|HmKiM|tB_$hkwUj^yje z95yVavbg+&k=7H>s^`MU7dSf}_l~t29Q;Cnm9` zOG$LM;}B?i%_T_VRwQ|uH^$s~sm%eh0j@dF1u{9eATr7&V?g^HVIsITDs6FSB+0w` zsEJd0{0R1rO#Yy*2~a|!(#VV_V&8~wlo|HroLRlS;Rh#1sgBxPRydN5gng zK|(aFEDwgGz7`;)H;t8h%7kDqhfOI|8HK|0eH%<;7AMHFcs{N28rQzwtWr4_)Y!LH zUQc0Ly*ppDGEfgy4n2g-(pxjIQ{{%1%5=!pzb(0 zJDcURxipTQ*AjR6ZCXwfQ1jyQ%+SZ_PoI+9O?lTADqmbd6C8l?EXniM)llG=b1Y^J zEUAcSGnYJ8sw|bJN(KPt+?ehPMU3&=9^$)(#Gt&kU}IvAs&z^&f9sP! z2p^tqu3tx+byl{14=DhB$G!8uj|U}Bu(LO+uV?KlEMlz00!=#&tF9ZK=C)fv2Nn?k z!Zu!(E;8NZ0HLxJywP=CV2uakzN+hV#Z7Toh$>;Mu?S?q95+HSW5`opS=inCADS1m z^XS?bsN0}T!L&h@&J>PgJ_DG(^DvD;)=!;(! z@w#3Y>vdw1`=DAxb~be^58L75s!kGYL8^>_u9Nkqsm`Mw1V!h`XL)IL>-0K(`)_aN zX9|JLHXv_Os3zV%>wU;nN+1gO?aQo8c27SN-|$u1^!Ed_na7iPnHI8=suArLg0dE? z2s5f3!?NuKfyQ{(jjBR5DaEWt2vu@p2XS`s8XO|$*yIC_nxZm@l_6ZUE3<2z`J==B z|-FTHm{M_bgX z>G+Pzx}nNE5~^yMYaRs0I|ySuza+NX7$2NBFXF|k zq|;@GANGciTwzMLA=q&U#f2ow+EXS3Po8V@HM-l)POp2Qn#nbk$QW_6ikmzUb-SWZ z8OT!Y>VByds1;8tUUFY^%NeR;`8oOVh4CXwyFH0?H`HOM-< z2S5I&|H#Uc%(bisKeK}#@*F%G(7+>gYC+thZ)kagBi#MbBOT8icVrMATSnQnMM%SI zinPeBYAyUhhl{E;KL}0ZHied|7>@27{QRdSWy+|{da3f7GD|~@JOG%kM8m79=f#l-xZ!3Jy{})mT>?A==d3D6kUdDnngs!u`$8$bPpSp>WX4o*2a1bjhXf| za_TxC{{5e+RLaH7e)L`fyV;xHK)xXU&;pLJerwdD(WZL)bxu7Z-3U5%yDExOA&kXo zo|cy4mTwgiw1=#2y}C5-UFK4^tHL=$?&u%=6O-1hFaASWNR4acTG~JdHsMZ)HkTQ# zR%O=MuI(S(sk%c{6iN|cvBjjqU?vxHFVZySEUYZ@TzQ zSxvb>5(Yuj-LEO$O4Cw9zQ2w0Tb}YYVS9pj%*J+2;`z$zQfmYcs5fsG(X_Es-{1Jm zakR72m`ckk&*H_)sX<7~!Naa&yfw>YR&2wiBUX1Bnf%_GVsGTG=EeSFgMM;QtBL=@63xBitTvr@sgVP^l- zO9!>!psG9j`)+SXXN8TB;c{wn19e(fH?`1ZY)74vfecLI#RMwW&YgDl$6l=g;)EVl zC5y`ik+}gxE*oKvVEf~b+(DqFW?n(}i|rmsi+IXOx9d#H@!}S#d=0YiM%V@%)<907 zT0qrsbW%}A!GcNBIDTGBQ?swYSA7pb5$O(e!%D8_I9@THY(mlLd34+jShdT z2Ub3tRBKMQ4ebLlO-0UapRh6&8m1IQv>a`X-Q{#1uO2-3ApW2!lJ5LGUg^Hsl1u3C9VwU5gYO4!h&%QcR-}=#U2aHi zQ55Fn;{e37Tx61SAsdMiknQRuY%=vI7$5wDKbXJ#H2RCbf*?Som1e;q=Z0jhcAwZn zs?200c+5-x;CO9&b&>*P^nn|Hl@zg^q187u#}{?fRd%=UFPzjFaeFAVQ|78*-Emcx ztLrzo*)`RMY++~<#0UizVX$L|aT$kx(j%?c+SCM)`*z7-QkmM)dA_e z;I~P>%!8ki-hEQ6J-{os*9eqv&OuY=gw}PQs;mNQt-8v2qEP`P^q?180(W*#MHQ*! zs_Gv$u&WkRgJRsOQJ{%SfNL2VlI9Iov9ddCFa#9y)nfkk-Qmdx;UIkW<`q$jZ=!lW zFR+ZFHJB!=*?b+Z6(#o0md!l5jGMZ)TuYgASP63lO{-9c!rYujZS{cHA!07`MPnlG zcVil5`0;W7j~}T`*5F1v33)lMzx*Oue+5ATigsp>?e|Djh^?MA*b?amGrLnKF$x%B z6jj{R2vY*GcB-2;WhE34TDLo~w6iyimLB~4N20iy|MF9WY-HJ{GD6=R6Ka&fLut~R zagpz)@t9)`!Ehh@zEqHFz#Rh|!s_&zPDiA5vy?VxYdhW0m5j3LR=0-aR=R4p7xM!=) zb{%D*eP^DJ2#|Fn**K)JMU2kh!1{`U$HDA@{HDq$N4m$IvBRyTBTB7X}>Wsa@ z*p3N38kWj9y`zkgSL9^Zq(M~{#VSSwDXvT-**-IrXG({ePgg~q74=f+NCWl%&#>UZ z(=C^tpt7K0B|goIH#cy9?%z4?2HWe~*PUV5@m)k?yR)>8Y)!YZJ?ubco2%FE-q{Xe zVFT@`>zAqGX=TLL{GivQ^+M=kYAn~U4k7)3c0?HNRYTrR?OiyuLoH8**Y!Pbud79uP}*D0omID z%{JZZ2j9#53tfs%g=~T)sVn6$0Ua4%H^v6>4%*$`-*SeNn|T8&P-Xg6g#=t~3b|QZ zqS8QAl`f_;QW-#z_TD3B`>~w9f`PDh_x;nWgC7+~Pte|jadRC{zkE)6-TuAzP}XGA zE9hdpzb8G7c1K|7qb{I>z!~fc4?sWbKMGE_M?i>V9b@0cmfhZJ3Ib=?v)s5e(Pg7_ zZou2rW4qV$*2jk^%JNHLd-wP^Q&HXGK*2?jzN1`@9Ol%~Tmz>joL1{~{Tg+;xO*_N zJDwqD#hbcma4lHZk;E=GsjdwrN=)0Sb*73DMj!t1Pt*C^#oHNi9T1^*vlh3F0fuqS zuL@~OU1FOM6Fw{}JUlU^nHTL694l~mUYKO$9Cz=&KL+Ev>}5i_%nP)sqO2q?#pH;j z73GDlbl`R4v@ukvL20fEA$M|mhnY={k$1`_=mtB23NO-wvz`E z82qz|&5E)y-?kjD@G>c1r*&EB4()e#e1J0P#O6{Bx`ET9#U|V9Y#SbW_3Dl1g#8Ea z<1rKU#`rjDfT6jZ&#j&N&S=N(`^3kgwyx^zFg?d+qcAG z>~L%UN1-?7-avat`1Ed{Y;oc?(du1|uH5g7{azp@w-uNS4@cXB-Rm#Uq+_9W5w@hv z0V1u|n>^PbHT>mvcx9-)^SFB)-LKRIEJ9JyT#2#X=>3(z$L=%<4(+nIBo}?sL8kAs5ya^Ate)w zG&3JI-5-LpFHKuro_HNjYUB^!*D zqwUjv-w$xQHY97?4ly7Pm1Tl0wqYB)7d7;yF|ekPO!R+wnHE{QF?5%!J=FJh^dbUS|V2=tCD zSgnI_5B^AX+9j>04e*JZd{CyDh5} zkVBj()?Efa_iP%=SF7(<09mt7FXx}VO)i(~$!dAMY&TagYkPOg3rGBwx_z-+EoMF2 z?S$Rbf?bAYU!QB+#e|8{#0X>g9JY^F5S_cd!F!`-nHimwM%cMl{M_jPyt8BP?)V>V zg?Gc<-jEG>cc6S;!|A!kWjE34%_41-(Ng9PeAxP<(1HhJWqeqg%xdx?SB6?mqjISo zi|+lSon)CcD^8%nL*V+vgqyk@)78u&wNhCWAw;~M0}YK2J>HZ=QkhD3+>AcV?9r0l zy#|CPHS~i0AKn=~y0?@2O-38z-pMSfY;5UVE#^r+Ps_yaA`l`SMFLc^bkbi5QF1m? z+Fb%1A=mV-wTIwJCRU&@S-dN+vxE^LLCJnKyE%P74Xp8tiwkG?nbNPUtiV~AoKskB z$5*f@5E_b#-ZsQH!KUYL4mUV zgvw|$E^nm?L~x9(KRR#$c8wl}|;)C-B*P1#M-N5)xg+j5O{xH#KH?FPsQ`C&-I(5SEB6_`t9 zQuIpUzD*uOWAdnf2OXSl9hsw8ylGw>999P#`0Iav$uoRBK1SW`I}g9#?cFb4+}6cL z;5psz>;wUGk;cbR?@2(aWUWY!J$2MKxukK)j*Q^*&(Eqevei8~xR2EEE%I+7Izw*K z@s{Jhw7n1nLpU;#6|ZNm?G2hHwyb_=t(bh>>#?olEj=RkxCuW9*u6W$`-ohv^1s0L z_{hdZynL3b>;BR4aL@I^QkfRJ1WKe<6XQV-97M@CpI`pPYW;ex%7zBm$ep2f+S!xk zy4`MS)UiA!g~3rx0j7jD#sXE{s;*Miq?VH$NF6>H$d{`kX@`mtgwh05X;=>(9k4=oLeG<9#x;)F?Eivo(?V|%4 zWn&ojM9fPri18WoUR4~ondiI7QFh=4J3p;%n(X?V^aV#in}q4s-Z>G5q~2;hz3z|L1?Wb9}OM z__V)!e0={0l}eY0Bhp|*Pm9os$9@1w3=otNu8CZqb$^OINE^_MTo z+XWnXr%#S;b*mT&PQ8=Ia}Q+~-`rrrYwc!!KDs~H`haOmfDN*`F5gd9pMDjXLYhP*kewh&a3A2MqNyi(=mA^ zUu=-!RFk1aJ2;6Ut~cD-_Fd0UFA~5itEc!C$!Xd(b-7}ban%emur4=A2iUe`FA=^l z-bT4ye4S!D3{8_^f~{d$3gf+wNybK_+r5})d0k1(1@!}ef2+JoH#hH?l8&%c1=`(1 z>H>C^vRJXMEks0RVxtLERq$Zk`)IiTeeV}PJ2?I6)(=1GJUp@KPN9Q0auszW$ z?4ON~FN$(?yAEtUbKi%ezsX)~tHHh1&Lcf|6V4+YmRy2O)Qc%rn9d`=Ll1N=!A&yG z20>#J-5@`3$cC#Z#beLn#mnR>t%U4Co~0`47HWa(qLx8vRgPYF#ZqqHbI71Gjc3)j z7a*_nSgOnjsxc@GD&t(lJ$%fzA0V$C7i?y0Zt|mv7K}I+YZHlq3MsVbz~L5!)Oe3| zU};aggN|x2^(inh#5ZiwPGL5g*u18wk@LWIDXXq4+%cHJia1@3s(V9sH_9ik)2m-z zm#;+U;2zpebk#6!8@xpWABV#&Q!4HbEL2uRsMpzYxFmuH zSd|odT!@;OvjqiHjgq!cWsa(pTOG$9SfHqm|LMv1|NDo1(l~>;A38W*ZP@vuNF41w z@{dZHmppZt_u4972c669{%r7uNn^s*+l=>c)X6IecNce2D(Km$-3yM;(hhj^gKa62{(WhvTKoKVX`C@TB!ZxQ0@_OYu7 z0hDeMG#~?hAKlv_pRmq*yIsGJXw~lPoj6W{MkZHVUg&hq;g#9Ev0W<|nugYzS(fL* zb|4hA35Qmji@8M{qU^dfc5Rp%s76ztv~&6@X$835G7S*qU@e%xPj5HL7ytV8Vm6!P z*|%~0>%TgC^DndPi=NXPrd7}0{)4$vx7Cg3CinJ=z>m(Z)@xbKUNKa>8#wP8c*nM$ zPO>jGSw9W_q31pBckkoE#o8rY^rC#b?0!30{dK(tcOCwdQF3TuYi(t->qS(oW|pZ#6lhrx$qoZWJrpc|n zL~)(m7IhM9s-Y*t2O&LV!|h>jHxwkFPnV|bLFY(~A5!*k@ZK+iqb}O6=wMEVKEQ7M zZYrx3DkKpBIB%BACKXsB?@loM9oIXwR$s=N;}8idYGKFJp9|X=;UuLNkKyqvWUGC)zVMXs6_bxLYh|s0vH3_>$4S*%>xP;-s zNhe4EFY_98Mg!uwCQ;k0TN$WNRt!0rEaz`#pyae;$i4R8Ucf z2=cjv<;jB&Xs`d`dNv6A+rxmPc5ak86{b;)aoB|@ObAFE@nTonCjv~}P>5!QyZdN0 z(*1&iedVBw!ADRM3chl7aP+QFLEw(AiswlUMYw6P5 z8fPcgje0(Ld$8#pb=wCzRm#MV@+N{#ABPT#q^@B9xJP;)-oBogs|QF!S-rLG-<(g@ zZ@=gr^gQA!iK-6ZlgjE)?F$n}{P92o3U2Cqne%z_ddXHs1go#>KD2plQv%F)&TDPZ z0%_G$5}F2MnzZW*kl5t?fBxj;$B*AzTQTGB+GRYzYeXW`xR|q>Pmr6F7GOWxDIyLt4Y5XFtG3-5R+)+9E^R-FQ(5J4uW0=QW zp5WvzumdEEHrg!Lt6#rqn#LY=qn<#hcgj$A*eMR01Z0&7?u1VFG3A85vMK1Y1vcww@eRJnHsi+^Oie zG6d`Iz$8C(77d868k-g^niA5ZEFeAKw|h)DQC>}D^knJ%-fI4Qr|+NcJ~EiPSyy?Q z$)xc*zU~tR6!ICv6sJmxFy1yZBC)qT;&2FZ`MPg1Ce>QKH za`@zlT{z9`F@^!sbW!#u7;l{4BQ_VDRE5?X6+C?pZ zjQk1beyB!ub#dKv5IS}ok_Ppy+QzJBL6@QSeog60yDDVWUtFqluO9P0oGjNJ* zX^n%<(Lhx)dJ~~TF?`xnbBCBrgiW;N2I_^$8b%O;V=Ct6vT@CT?fB7TDL~;JnQ!m* zymsX?aviwm@;c@1tZ@iA0u{sv$+VrxZB!a(w2=~r5H><6WQQ!v+{KG`>FO&#?sj+m z%(=xDgZNH`&*1m}WPbf=_Ggb3`2j$eAgXg-Rl_xYy7cxtRn*x#y?b#QX4$)NY&?CDR7)9`mC;RQ*creA!iraU0|V%dT|Sk~vVCX* z!kQh?py%SEV~>V%e?7VvfNQjV9l>E8o{V5K=$-ULn$>v$I?OtR*xR-07{fM>8762K zp)2Fkn1qPo&Y*S%QWdpEMHZ=ziF4nr{5JN>l^vS8Lb^aSXnEe+GvPpk+V3B9pZuo> zz4!L}k@x)uhWEC-9ddi|+ivuC)X~LnmcP`0{YUS+{{s+YQ+=6Qmt`1B7AL;~>;H$a zq5t5M!#?j+XCTibQZ~d*R_kl2mwbuphzGKCMauPf{W?j$ol2u3g-D-8`6Wwcc=p%N zRX`8#jOqH_%Hl`XN%ZP(zFM5~zWd?b`@PUk@43xbIi>Ud)(2sSE&IxTZ{L3CJUAQ- zhh1ym^F4Q?(J*FrZ|2)WSABe-hoFhpQq0KR3@2EUBBnfYd@t2?oM}^5))6SO%lmwqhKsV z)!;Gq?-S5(pPXgFj)DTZg6$ydAtHunIn+);QIo!osv`5Zta2@jc}e?9E|R(eJ3kxi zWuql;vJ%^Y(@GQ;3X8_T_=aO>nssC&E+!q z4a)$Wviv#ov*X=zJT%m+Hz@=T7S-`Yfvfm>%C`GB3RnLzo_~59fA-crLg7Q%Ik5BB zQGQ-GYp6ssc=V|E@V)x-O>v$VSrrU?EnjDDGg=K6uV2lp*qwIHl8v#*{WG@TY+uYS zRzP;w08NVqYdJD_xxbH&>|p1txR~lGY5GBBe>MAZ^7(7?t@71cTq{>Tuq^Xcx#B2Z zq%E1TUVuT4)<du2I@PSF_0~*e>^^?VVjC%vyHtb->i&>w?2*Q^sf!Y?_-hI*E#E z4U-~(sE6@Bq<5gTgV~X$hr;R+wr2rfH<7vC2-~{d-5GI^G=*G~z9dd%554NfaA56G zmS1zln(jj@`R!_Rm2IE6do>-A0j9{Op-HqAHkt@&lQcH-oWTLy+tHQ;XD{2q#Ea>PI8$I7W-nB~WTD|$IT2B`x*xiNqov&W} zrCL}&1b5=>-Rtm*xyk-Fv{=c=(52jaggm*MHU})9TI;LVOaF5vqhy*o!@j)mX8-3* zDS!06f4utq&HU?kSuw}Ga`c0q)v=0YiEOKT^4J>RhXjH2CSBBvq!=79l1yrMd_smd z>C25=(1}XUuj^UyyMtf+<)8lLvtR$Z+c=xs&HN%t@+zGco4b$y+@y9!PQ{3pj} zd>K8v@RUbt!%{Z(eKkBJPT#bt>0iL1;Y?~98sWJ)Ywa!xvR*;Wp;&5hYfcamxoA?Q zGi|)gJEqlDWq!ljqRl}H9%!&FW4XzYR70)1vYyp^s${NZ4azrl^4qFBtLZMLJIG)^ z#*_^i?J~Sim|<3AH%OZc<7{~hI($*qwJ=Ae0J3&a{yHgcxM^YNyEw4j_K82(get0x zA97B)-5u{1Ac>#7FfO4nB823x5&;CTk!2Ajq2%oiCS*#Y9jlRs1$1s%M!qTS9*wpJ zwor?=#az2E+;d4+ri-iY)a@~MiPCp{Ib;B4l{+CbA}go8>$#*=8gAk*u5RDGwZ4~A zM^|4%e>6}Ly!v0hZC0D^qo>xq~y^EPox472N_S5AFtT zU<$LiTH0N}!>URPe>nbEx*{wMly3r~&O-w|hfnhEK;E~X^ z;tOS{solHclvqcMC7h%UwFL3n33MWsd?7)u>a(W25$&U^5Kxh-7TmT%4+Z%$vBpHM zWwor0GPX154B8S)t{UMeYFP%_oxQ-oVtJFJf;Lw&q@Cg8AP2nez{=y;KPBe<4HO8I za|*?cR4d9{T1NAB9s^-&ojJ!tE}MFt0o^`K0wK-0GR=$3wWk;=KnOJ*tY9rU@EN&U zJ-^yqDjUJL=*4z7v$Cw{-0hNn*PyQz;ObReOrnKK{aq5=>*GE&VWXFZ!m`1k%)ZIX z=gK#|l7g#$H3ih~oZh$l+om0mf%oYOn=%@Xlk<|6;otj*|D-uxHNy&ZLY^$LcQ+Et^QRk0xs8YqYDaC6MhuLK}qL{_ufg zb>i#xhB`H9-EQz}E&}IEB}`2Z5Xf~q#zjaa3fPCfMR#kjcM#wZ0S^??I7x`OjoHAi zi<-7O>{)eWxX&_I@4NL?SQdOZ^c@%L(2-tKoJSV6+Js~q+9%RnWZAAUL`JzOHgsWG zE*-dWxrvAg$e^<_NsF5hd}Ix$tE-G~lO39Gmi02hvfii6+3uP8ud)<*${Y@?%4}Qr zmz{&xexkLceElLWuf@)fpL$ydO-pt)p(a(k%{oF3ld$geJ*x|D!}IS4_V2mv$mC310RXm>}4-Q9grXX`I-eQO^J@mCMU|0XAjysFq~37sHes^b)L?3U&E!;#2-Ff8e`_aAH6|Y!RcxO` zmS%J0wA&~c1%;ORQyS{VT8}@uZw?_{U0qzADJRI7hJRE*7`X^v6Zs(Sa`=#A>h;N&tPqrO* zKKG&*n9W_C_qN1oWJ?6^gA6fXmf~QL-L&2Pz7#a~uoZj`?!lk|G_~Rx^Mg>9<|LJ$ zd1Q-OOeB^K;E}?E<*0dUr7gWQ24_TLpyca;^^tfgXn%4OE1j~8fr8%xE1lk$fLH-YYR+z&XOTl4g$c5Pe_-}4anysVmQ3~ zd_rGC_&U`(cVOuArE{th+12&%i|+{bn$6m@7KO%37_An1=dn5vyVgaLrOX@=;RKzi zc8Z_VV8GSA0Ye;K60rhAQWP*LdeNV%wxANinIjA(=Y^ip%IChHM!nWz6fMs1ja7pd z{tUFOKgEV^;Cqy6o&=f@-6`VrH*&hbm8fb-hf5!_zFMBtC)}7< zv<_DG4}bl)v&C0aU83&czgKtfPy3CQY$dY_l}^^cJ76>xXF7LO98_{wukMN;3ioNE zN+HK^%H6D1Oq9F;RhM|j73QM)_yKQ#9{D{5gXgjcgyur3rSbEpsfzo z{hTSrq}kP87EWKk)+a&y(3o{sLw@iTX~N8l$d`fl95UCqpPVC-3hBK2IAb<^cu z9C$cuS55d0<`)=2n)ehXXW%0>>6bc;)fRL&p3eN`Sl6|MLGyG-!XSEfMdt0-=icxB zZa(^pLAFBG`qXqCp9~<}T>)gLpq2Z>7g`21ra*(83lm?CI-Drr2E{a+625k?@Jkel zGR-rBpPfyp5amNrPfeD2*Jra3oW-ZSJt~C31Dq%g;@)Ccr{h-UeGN9`8YlJP`w!KA zjj2yFZm7f7MAm~S*_dKD2~be4R(JbfHcbx7*0012E?yXYBplmTS`ht4&+RlMcDV6G zo~&=FeDlkR+`skPVpm3oXwXEgQb*kiP<|7DaQoL29%Q7t-+%l>PT)*Z>}CBe%hY7e z+}?_A+<74fF-6){sIjSKLqJe#;o+fsL1BP?=eTb-7BRgHt7X2wH(Uqf(5@ll zOPa!m6M!m8ffvBVmWV2lj><$Y2lv^ z-FZAo&qtf4ez+|K60IwnU1xTZ0M?JN7csn5-N%hMG%Y|=Sp*(P0VV`N1SsLU!m^PY z|DQlIRooTT`wm&^v54DLwo-y&Q@egMJ_M3&Iie%z`IbGa!?Q575Y}#29_~lY^Q$sM zsq&dSSO6x-)_!oEqI0c_dn9ugLq=p+dYvS6$_F=IwBS5M=t}9L&i_rcp{c9^|38; z+FzZ4(B~_cAnV~G1}I8~H(1&7Y0WuDBN5ah<5!fWbk(yc^)-U(o76;eNrfrL@l zyB*VEsz@*m1*Cz`LY&G(aYJ#4aN06D?Vh*{Kj(y<8* zZoJ^ew_}N?kia8#?Dy`~x_jmQVRRU6@uLk*LM~4yn|C>y;2o>eK^*w*_-m_MTbp9L zucdH!KW5=P8@XDMsR>>&4c&5R(Lo2E z=TAc5KaZSyCUDit3%;~5Sc}!rBtsYrcc^PQNb0O_>AET_!Bv^8g~{~v#etis^t2%q z1(?f|_yjT>xR8Wn+aK7aK=RpngkClkI@a4$`Ba#9`g9Va(%fe$kNOKt8w+}FTLQMH z4_OJ%fN_6*(;E4?cN+`8>~EN@j7P#a2zeF+H?QevsjlP&igXPt7FsH+5f1oMMQXS!9UVe*SU$C=>b}Nq>#&I|%@JNvG zAxdE+TF@|#%5^&$kDdn+K%S@FCD`r2m%-qV&tJ`|vN@9nV9Gz+u9kd)ScoJDk5*vG zhF8BEy!xGk=Zr&AJ?i&b?CIT8aaf<8>Q5~KuQaIR{Oyg}j5`rpTp@4OB;0dTZcoRc zkt2T=PKN9(qL~r9`zA&yG>&yZ9?6|(-l}$wHS3#=$>jB<>len*TFEnD>bML ziW`V32g$(M>1bXZR!vnUlbbMnuH>dW=5#^&C8>&fo$Dr!h8IK~FeH$85s}!{`z9LC z!mm91D#vjS9ktNmI4U0Mx@t(OLR^(jpP<_@r8X9RaEZkcfoOuv_Q^;0^`jqAdu(f@ z=?T71sM7j0I3OXXXtB#5MVQBfp(EP*YIWKx=}jb0KN)b_mH_Sxg$3x8H57b3|0;^7 z;QMqP>A;eVXLY|#-mz&kMbT(B>-@$K(!15J!yWfXy(26P9VZYU4ifwa02rq;1N=sc zTTwl2?rgn zxGt-YAqY*-AQ3{p2!C$1wSHtjG#)jdfV6T!F zDR}9TV9yga3Fa`qIKAO4@o<$+=x9-Y|0gW8PtyGDua>!RvcRVG0W~t+W2^~C#~BHg z?)v4&aMU&jE!}YZ617U24e|*nkjI&oKyaFRuL%mAEF6U~*)Js9(eFp>YuoJv7K4Ea zL+yS!(o=BBmGTWi=jYw(f%?o2EKO#RbP%fW06-V(5-hYPKG-%e)xPsxRd$`~5FvgW z99PwSw?myd)aA--OQO#9VH)vc=g{|c`_O=XdWj{o9uJadX_f|)o2%%%>x;fVn+?vn zzvPGK#Enh+4c{duwH>`iZw9+lXqrPSW5j+F#m~=!F0r*j!;a2_?3)QW-|>qkjJy29 zZT(c^0)umc-c1I+09&}vWzhOxdb*L-8v$R|Uyi;BF6!IuJia(zjKmo^dMNsNKdQ_z zXeCf^8+VO70JQ;QdkRLLNn99an=T*VbRNg=?RJyP{xp8e7ymFE{2>8m4=(~f_r0MV zhMA7KQ&6Y~hZ*&!VQib+gFd)c2AoSt1lbWH{bfv+c{|WUk-3D-a8S!oH3i$o3Nf&_pmT|&cCSF3|d*?@~mO^wguJ-Epy zZ9br6Jq4_tgw(_CezR+h9;HM3_b3mK-A{rAoL~A5NpLJ7z8EH%EZ0Dgl6U97nkqAI zd1)RxJc|eo%KJl*LDG^0U?!%^`PJ?EHrcnAesZT8mGia`Xa6`%za{&BFVsfc(kW-7 zA%|X7cpN0+3Z1HjwWKez5(dO1Q%(-(T)V7A~CNYfOU4B<1(@VCR{+o1X{;Z7-z z0#&yXbj)w`aos+CAme5F>@Rh>sn`GE4QG%=)#`f;eDHaHgpn07AvV$HT_3V9nhRQ! z$Ieoewlwh=0pMfM!*XxqHkwZcr$PJi&89B_d`{$-ioA9%b*;+n0h)u}#^Obh{^6Zt zP0otoha~^T|Kf}L<)J%76@MB1*2-e&7I8F|sCJ2|)7_|$NiKGAL(d{c*jXJliqxR0 z&A~7)h+;NR*ev>+1WyQle{8>=FMj{k7q_$B=EL5He>Vh@5xPg9lIh~?5kHxS$1mcm zoU1AyeDa%4*6xYXnCmIAJ0m_Sy(N0B+7EK~?jDAPpN7S;F@g03(Fu-zgYxfdz3<5x zvM7WeYy9@mLa@;Oa57Sb@=sx-4Yac^S^yW(5LFp-u!h-yIl8d^jKmi#x%AVy^ZqaM zza083c{Q1Ni&V4J?N7)y$OEsw^pq(!A4%p|)Gu(DqF8@P|3{Uss-v#c=vH1{)e1ocO5RGDL(t$^DK-p@k%`k3JadezHtCFx4Dh ziwTSmBs3%&PF2&F?x1rzuj0`@s=uf!TAO>^9;G`NdobudAUoviwnXjnF}Mik+qrn} zufa;4E^(I#$ltqjw~h8icp5`MeG=10bs=v$t^elJQZ#bC1QRn3Y9G8V$Hq(tjYnIu z#UL1y37N6O*^Uo=dctU(UoIB&msjti-4Caq6Bj7f>8_tF#4!W++3Kx*s#qD8BTV@C z_xZ?D+WL@qAw>n}(E#YLB@V!iCOn>{X|M>yfMnWSQn?dd*CnsQe%s4`K#Fm_7iP#0 z2pCa~5omL}227?%*&4*LC4NV(AW_VLPg@`l9tGBGYb{Q?%2l^^&AmK*l%Pb6zL;G7 z6VIEXcprZC9Xwh2@x6vX4Qvvg>29OcvB#snh9FftMZu5%ukY@+ADlEa7V@-za5IqH zvwTVH)z&2)DR{uoZ`%Ev=J@}@IKh3%joQny{u26qrEB4hSwE)~NF}wc5MTh3#C82d zIdp$t9L5lwI1r0rO2^l1joS9Dr4SD<{4O^oeEU05?u6KpTIt|<^4;i)H?2wCc0zS4 zLd8z_v_kp(nEA-9)NPrHqrWT7qnuOByy<$Ztnc9gNW{8%$ePG$QDll}Giu|&fY|Rr z%sritTxxTpPo3 z!alc)3p@&C`G}SHe4}t@P>D5$cZVe3uN#J_KgCWEMa-NKv`mAvlbELzfsJ$0f$cJ0 zH!(*nnm=3nGlLXF5+ZYr1pqyD4mH0jyK<}5>A$M?d)3$tRx9NRCkAGm4U=u?HX7`s zSgW~pA4P#EdLzPRW!kBUPP_Oorv(dMbC%kN>YwBYgbx}u@rvT&-{!q_HMNo)h`Q2~Mo_V|SC=BNp z1cfr*^GqgQWCD*HImIX5(1Ds*M9y_Uv3c*;e3&E}|GB+CREP9@kT`xBjGJ?rj~g%3 zrOtg$%mX-a!<26|@?**b&2^ztoxpf&TvK5uFzL5IAqoFMy+Q2HMk@^A4opJ_4ks1~ zhbcy3zlA1w5gE}JTi}MGe*3D`>ves1*S7D2c^IqfFn%UYRsWJx&=athlGweWe&Www zMDuUb*&<5L0yph<@2!O;dwVk-JikoyhYH*PV2QXc7|>kVfu12gL%foSS>Bj$j*pxt0^^aa51)CYuLCC@PMksX<=;nb~LD|@O5!io(eAnOU zf-%@F(qCyvy_De=OEAhuCpWq~))xLEaF1~zO+CCrcH+0(dONbFZ851qVz*5p7uN_) z-`xLu^K>Zgt9s;Qq9BqCVM>&YRyXXr`z1ZS@&|KM@6{~*BMMoS+`Fg(YyexJA@|g3 z@}Tc^2i~d^KoQ{bkThN1uB&N* zM5##(?jD>Fcyz$0{z`<;$3saU60VPmzK9OsOV}68=vSPe^9jQJp*3t0$xV zv^6w0RWda+@pK$FQQ7}^<|{twpj|6n=)Ke1fG zPNs$~_D(AH_BQ_$Jp~JU7kg(5dj|qxWi|qJOFI*Lcjx~&_P_Nsb+U9bH4$^NwWmg)#ZRto{GR(Ek%o z|DQ1aUt#^9u7A1mpX&ck(tnNro#v)?|8m>uUlI#dnyLZ;`G-o12&#CjyL5Rr>#lhI zZV6}3<3_L_fdwG}0wLgtEF_UCB%4Sp(TFly(~H&Ce!8#c8g^|;a%rE;x%y5l)zzy> zZgwl;kj6LROf;RurgS9hhXR8%8u9MSzV>zJdsy>+dC}Es$SJkw4MIS8$?cro-g&|4 z`MMfxpOqcYFw}7~FV@v2G*1#a1+&+Mi;2U4YRn8t%q6-gGbv;;Q?&o-s3{(HkmVHcc&MUZXB* zfXeQeJIrM%Ny=(Emh$}ecf@&GU(?4M;--@Jpgmm3T*H|!K}X-TD!0>Nj;(z^#OPqJ zJ*4+B-&g&kM$z--Z(1`r0`HOA$YLmDhB{@zmvat%@tNNHcKEcN*ZZ0?7krXt zzjav0+o@?gVKIc84wVkaHa#EZ``&bX-BAhHO81wB)1O?;@c%r)k^dCxaAuZuiV4wf z!HS(a&eb?)+F`PsIgpuF+P)sEcRQW1=8m;$_8N-`w?T*6RODIEX;OaaDhUT?gPap7UCvc3e3_dTDO zglQGiZ~DBN%cyf3x`x;0Io){0)NSY7JOWn^z4JjAm2nC`_{K8VnH#_?u;W$ldeCiY zYjilQK5;MGG_*@~O*0)nY0Yc+-sMNB`xG5{#@aKmZ77dfU^2McNNl#fYitneVGJ?kjK#27a<|D7s-ZtVQF@w@ufxL%Ft z!4qZ1Bb}K7OJ5Iu5l=JOU%l=|@O$GmM~N0=r3e(dgPpFNO$ z)ewxZfxx2}^S=HPV%tE`0?~jr;RKk(3oi@JJi^mH3{;SY`4u+UrW=3mN{D%~c{;B_ z7wx20)o2w;35K`7V`$hHVnl|K13$^Ec6j+Nx?Mi@@%vb`6t|N#)3x$Lt#si)-F~xj zMYhZoo(BKzZgiH%Ni4f)>&D0Wb2qURLzN<6lDS)l(WwZ1YHClq2RIhCHb~)>*D;7!u5iP@J`0-z<5y z0}Swj z!UIbzd?RdPw{tZ<3>UTt(LPp{aMd04Jm{-BsUYRaqY_?7wOQM)Eni(4{$y9<+9#7lb~?Jx&Luq50R88Dc2T5Q3rVGJ z?fq1$xi}=e+|5%q>9b^GmNPnPDL$(x?)KOup!|P7c6bHbw0B?ugrdT+UGeBX4c|OqN@JAs7Uk>VJnCv8gK=8gCKT1BUNCN zYGZ@wFT#PeL%bG4roY!tfGlQ?qTm{bmK*p-M%hL zGYH)um#fIO8|8h6(w~@QpTzmQZl-u+yDrNrAVIfvQ9k6MsZ;&$F5Z{DdR(N2m<528 zp_st~hB)vCx6YH=bBDs8uNyU~@IM6r3q0uZ-e`HL5Gq8aC?(FH28E2VEsf=-+BoSK zA$kU6>+?BHzh6?&UPg@UfpnCgI-WroF|~1gm#tQ-wl*D)XpCxVX^i7e1@%CVA(X`s z2Q<~{qb8~FN2f#tbo1P~X<|i^6mH=ld^S&-8qWA<<#YG8P|n}ctStrg+V3AX(tl(X zSkp*_L@IMOJJ9(*VgM_>p0m6!-M$+wf5xTKwI{Ak4Hg^GHCk>+O4785he$axBvJyv zXr!^mOZtpZZr}g>640H7XXp`-jvJ!QY~TjT4^ag^#R|O4A+I(U=?g`0+V2ySq2>@+ z7fao&Lc}$kM;eGTw{m5?2Ig!i#KuY%--L(CkqUh=5(C<*_E+9~hluzM6GPwRu6xye z`NB3i`&m{MPe;oon4s?d{Okgt3iEY-@qDZCx3TM1csG9=;LD{}E;UfTUdB{fvoNj~ zp_@f9hDtN$Nz>CsDFC$0Z9wCKQb;PJsI2)|>UPmY!y2gU#|Md`fL0WEmo9LAHRNf8 zgeXuN`oRF7*RN%03YJT`IxKmlT_Qk>nDZJa_WM#|pr_Iad=@)Zs`hcjE2-Uyc2b#x zZ{Rd^SaV6!#Cl?9)0{}gj2*wV^n8VR>{9lFbno8QSC~~+uNhg7kt;9Q;%K4;7hkfi z&iWh|y=*@yyL;2Knc$8Vtf&#G2aaA}rj-8uGmE6g0{*Zay3Bdl(Tr?n640bUt9H^Q z3p41Tj!4~R-o?&-4Q)>!=@as~KooMFNzA0sLonk=g&UJCR=v0h!KCg1+Hm>TI^PR7 zPu88W3{hXl9D=_sH*JK#XaIT`@VNT!$>@QizIYj~U*y-~ESO!9vvftRzTNdWy?%6q z*LFJ^4AVQi{hk#^Y|1~yP0cfzxfAHIHvr7TutC-$ZKTjZ2uF&g0`<4DyLTOD>p05< z3CNktB%eA$a1>BqZ&~aLf7xI2xAMR|Vf;|3u7{uREo5nDtSjn#am|G6`k8=lJ~ggF zeaZ!*1$~;zy7qj}_3i!lMDlOuKN7#rQ(MogO`1cVvW_~|=QLd4E!Cb}0E6yg0+3@0 zxuZI)Q@fl1zwPg#*^HPfLj-#h%g6}B*6{aFQMWTz=XbuA`BV(L9?ysMl9__D+bC`c zrQX^E4b@SvFvUU}%nN8Yg_wOS4@u!!0H-Rj}0m1pX8w;j^mKcvxeUp=&h)QqC;`D*T1kfiYZpsfqB&mZi3+gn=h@c{Jv$`E3Os( z)iLadMh0r5E9Lv9-2t}h?#Wn85;ic(&iC{_IsVc!l=lwt(dv_)F`_P9PJ;KsX2$4DNu=x1rk>2>iPkYgUR4+ac8{ z`DC7T0IiK4=e*!>F5zB-AoAk~@Gy55k9wsV%9AbgO0f^fI%}a&p9guN21$3t@N^#j zTIZi<*Qa>lB~h2hK{NJZwPT!-C~vibjGc`*^nSlMHPyJHO!?K^~y&?(*en{n5qob~YuBIwO;KbU-tf_f0OFT-ABvXdc!G`S5Yg^Gj$$tfNqAZ!QGb zydxZ}4TXu&Vj_Ro)Sx;*xJ3XikqtPEdWfEw7D65T3!KyVbp|eJvu8Gu>(=bbY^kwp zlO&dGa*wjKY!z^{rJel@+UN;+ITQ_6F0>xN(21TYHZC+|KGOMGRbLsyD&n2`hX1mj zudS@9!*{!DRr)-yTLevrR|_^tMwXL-;Pb~g>ccxYwgw9bMH)t+Hmq8$6^OV)AYcM_ zA;kg2y!1-o?|#YS-4R)KZFu}AYI-9k92{jpN5w0C2=5sFjQL%HUETQ3kLvTXKB~-l zXI<1Uep^=cNt@$Ud`@bPR)XE0hxD1jt5YfI?>%~L_u7;fziLc43A%t90Bs}mhHrt- z*T?0eclM3vsqe<1_8h~{899D?uk+l9KJ{%|!UQInRs6m@?Bcpkm(7r*u{piujPdM$gjt6`_B1Pbq& z^q+!<0d-}!pu02)yVGfmtHF3?6LaF-TDU7C%BvI2pxs(mV57$D zoNLO}HIh9`s52`vjJ4tDnrGgN4|sSKTDJ#`sOR1`KxZ@!>QYs99ZS!>wOYk!-rG&} zT3l9fvEMqYpZP+HR2^O7+3s>Ui4q(Iv`N)spe9-N`F&QwS=9iP1x{%w)F*OzA&>45 z>SQAs4~|)22%iI>$v_}4o87Y8+LnrPl`R!xH>|%c!A4R-gFo!f+-tJM;gUa-TTs|K@;FYaDMo%ReH`w>gZfRG%r zJ0*?QR_|d8n?@uRLMVGkQiIOH1jprLfXhu*rp?qH@iN2!A4S(7_@>WiU}V@bBO)WgNFLuZ(GytdEeAXdvt?TWPxf3y-RU-2; zBexT5^%rQ=F3Sx$%`c9RTi52qhn4d%^zk!@j0DH3O&M#lJ)G%t>S1;cFnZu}i(YHD z2TR#`!Z0%)UU)Es>!9l$!Bxx4?h{ux4LCbHIX2?YNhYqF!0d#P0&y>1Bs&Iu zDkhB@<81CA)Hl?OOVKwde_J8zMhfqE?w+YTH-aIfP>tD0>)04?#0DU_eA*P3&o6Tq z)@+nUu+5h4s&VJbr^X|&NC}#Ne-@w+BmM+EO1g0bjv;S%4(~TWaRsqPyTnI!=2|q} z3zVjqy~>|N5aI!26;O~mfvO)GH+&{o1EPiQf;P>t;_JUX+2)dIyWKY~^%k0Rno7+k zgFWUT{25pa_c8_#y6u3;PhBHFD$|g7hSgV8nq}poWG<0y!bA| zKOZeH)_IuW^oS+C_ptV2)jlq(@*3X0rz{CFCUXGRidD%XM zuN_0Xy^Yi4AU+pA8o7|f9;G?h_3pH$lxK`?ZoL$OV@PGz6iu0`Dy$uYnYOAobaIPj zMHg|9!607NTxu#9lXBb-9IiipbThJ)-XP`;rx27A%hb|-#FLjR?4s~QstU@$3R}H| zcge+8@cVQAoP@$w%|f?(F)@(BIBFxn1zB*tsYV93@$@`!#xvvEC~1|Vh+A*a3mYFC zTWoWS+*3caj!E8RZ7vIiFy00C}A8$cP8)Xc-?)YPRWY5|0 zLr=MGTrQgxn`a!Tc}k!vZQy=<;#Ky#S#(eFEXWPf!5^IegVK6WK@r8qIQ?c?qiDv9 z+lIk-8p2*JL&bXi8HiOSkdc-_yhPk35~I?pSVZsHU2ZgL6s=FlGAB(u_w|1gtln z-;w=f?$FYjvEj0r^-=;1Be-4L2N1p4HIy)%7z()W*qh)bgJu4yV2cOlFF( zlCw7PGG;aX7ckY^hN%gFPNLgPR(93^gk&cOYVLgmKakzx!o*d)hb)8~(JbQ0-S+8q zrN{|zZRY4HWL%tZGz2Oy z$KE1M#MphSWXZ`P6i6-SeL+IyulKx*b)nXuW~nerZkim3Dtf_{`mcDFJ^Fo1xBG6R zJs^Eg5j>xixKy`@G3$d2MfiY@@|D+$ObdOBt z%k0vrzz0Z~kj6qp(7-hudvVFWnUr>1?atqDJq;59pp_f2tI|@ut{~CMF*@SZX|t){ zh!UnLw3E^++(rKWSxSGLAQG!g&V-8+xpsrsfFw@fdc+QO&Y}7!<1ebo^gY1wGGZDw zMVhs|F~7YSfV5F`6_F(J@@>1FE_W1=Cpl1$&Z=6fQ7$zST7qmy0U@ z)waC~)Zc&@Nqy{cmb_Q&lztq_v!Cnkta(q~VeC zD4DqZdbWMtC2p<=TLULm$x5ItQ3^HnernO<%P-?y_eWGw3M)1cl@k3uTXfDmg;tFe zimA#_UTM_nx{IG4#RdzKdFa*P&9h;rk!98lD&+8S{C7iK zZf)^xaOT-oikxV4huuo2*DhPy)32S6;j`79KihvvIr1s;DQX%6u8so_&b+i8!wnM* zM(PL8KMayRDn-21;btEI;vqT=BrVtzpfv2S9^r1G1>etZtZ92+zY}h{`sQVzTTw~T zu(r1_!Aptoz}LhmWZ!)QNym_IZS0e!1tz%y42PM^ z??7naF%hVIUfe#PvxPtEx7}k-No*YI3=M#qO=?7&?E72x@sFd>Srb?pjDP33S*p@ z(zx#lo8G!9+Lwp%8|n1No!pYnw#NY>$?p1^G9O@dVd=go#UmdD(cJU4ml#w=>@&RCa9a2#d$x?iUrfr{o!Hby6+6G$3Ps5cKEd$*H)xGeS9CZidU?s3MA$N%)^-E7Ea-a^fO=jMHHbO0g}D&jd4kAhN=N{ z6a5H61Y~lpGim1Nx2so4+(9Q4-ii@fd;tRxre0E{zmC6~Qz0*`Bq;N56f|1%`PG`w z2HRWt0zl}w=|+HU+z29OXbWn3VgO~CV`P5m&9mP@O%4=l9$0b^-VJ*>cIb=xW!vPC zR~x#&&hBcRnD_n%HM4JDxqZj*x6ds(^D3!3J67~On=hZ&&tC7xX+?O;BfC8xP8QCG zyzgswDbr))GN5zEEt8%s=7yqNO^uW2r?^{5LOo7Ip+>F zAmw64Q*Vtvye{(l;c|DhT^aOm1W{vH5r}fiKc{Z5|J81FS~EGz-R|xB%Tw=RZXAFU zo;K_>gaw+kQ7f=KBQ}K)gMpnuAYi>toK0R(O9+VZyTC!zak|27#Te@%NL4O9XC>k&zp{e-3hrl^RTfY zW4{)nUB+BZ_z;xXF2@ZzIb}(P=MTDimW8F)Zz;l8K?2Kf5roNb&BN0Z-{mQz!H(eH zt7m@abar}oJ3%|EV(tMn4X^_w&-(s&WgUNaQE=nnD7A{om{%{edWIneDI8+j ze)#$BN|JX_*7|AI@g}fu7}>XiS<8jlEMgStX{K<-t}0B=Ab%cq=j3$r%|j^tUaXA) zqDld8qEW2@H5JvmLU>o9PqR)&X z%C$cmviX44=8^&5W`W4r4UT!#sG50jbo6FU4*aEL3t~+)8F^67JY*3_2`BU_#21Tlc0*8#7yiy~W?af#Tm%u?-%DuH zpBOky@NY6D#7a@ANA*IC)a@c6S#{}Bs^L4U=Nb9tntA#>F}=t1aKIZJaKW*d0>;|e zWe;W0yCDynuD)U5EyI5Gsc@{yh$^gl6eMMKi>xP64!KTd@zhrGYV&Iz9yvwA_ohVx zrQ0I~oNh_Y;D=haXZ>hg0>OOO{fvVY5)B4QC44BDM!%PiT-(c#e@P}E|Bh}0{V#xS zs?Be$fLUa!r!YDXjGHY*s9iLi8ti5Mcl4;Q3(-ihnu;oUDyS98My zNuYFIL;u~2(@Q)>xhmpqBB|9O0M7jtl>AGXd|_V1fK6Ir4@-R@ochdsCT` zLcp6`1@@F}hF9<`H(r0;NF%ri?A4A2lY{NG@c9jji%uXRyMp06Dge9!)DYbs$Kr6e8o&n-Z0bPuHvM| zs|Vl7m@*$sV&hFMJT0PDj!?oiHxl2K&#^Lom-@SH?#`8aOc2v;i-f@-oKD5P+IwyHPkJw^>Ck#zVF2=A-x={ zCXF`7Q}*p(-;0_rzAKS+EVt|yO_2PG4|+<%?8N|5Y?O)7Q=aN?S7jC)?pq9?shXsr zZnOzfLEl0%gi-!CeE}m0Vo7$?^E=e&2=OQEJ{g0d5r4J_xuCP&>?E?lj!_|`kf=#lGd)cdCyc6J%ki>$YW%X z6i`3Lg|^qZY37rWzOvGwP&yxYi`41Pf!cgzG3q>!rH(3qKg9S(#Lh7JVX((yx08lk zT$M>DO{ME-B)Vdi|nNDC_X|2yF6}zfc(^`;fY|l8)ogk&r z5JFXl0&X1iPVGvCcYFDbrkc{dM_t|)JBeyn2@{fHhd5JJh}l|7K_Q5?+)0ww?KOs~ z^Kmv*<#;t7Q@X)SRz(*%(3_Y6&b3#ljk=_vMqcaf!i!;-go zjj&Gv;D}@m5vUmf^_1cszfVGwWzINE4OW{bWr$?v8)Ht0jtF&IvjBNzyn^58hS?}| zg$Hv-%}7g%2vN;!{Q5=ZH#w7pizxt=sS!(U68nPDY?opx|VZSW?+r0Q~4Fv?HN21dO=zjA;vt zqXQ!WMs{op4Lo8^3m{c33!m~do zBVD&vPMgc6&G(Fd(u4BWT{d*q^t@+m_7sz?ukCf*N>qva{n7h+?tR59Z!xxuJ0q3& zN1b#~0SQo=j}27Aob8V3l+_bT7UPZHd|uR9L09OdEC5SfE^5pRsRGy+E7C-&Dj7Dj z`~0SG0xc6cjXAq&!w*0d0yG%-kJ$E)hUtHDFD@)jeXla$({I_i|cirs8`xu4Y`tJ?)z@EUIIX75}*hNb$!KF7Z z8jpjrN=jp>YMM3GrQR@WWI}YgIg&W|r|8 z?0u(soyNRp#qVK>3I{H;#(BUhyu~vvWUkum zW51tzKiBhYpPH{sXc`c3HLm6Du5AMWCM-*wtuwqD{p$e#4Yko*!R{d-_ zl_)fC?t1E#pD#6zqKk6($_N%A_PD|Ka52Bz#1Ltqtj?AMSn*>$0Z|`?ueoNH8m`HL zUr*|FLP2E8%y?PvL_7X6&u$AxUrkXrdj1O*7>cQVd*oW>s6UMPIdn1RYYveI4OTP? zt`u4KUKs9zvBu3;794-u=IHQns-jIn2^Rd2)3BVS6($~MTDC6Drb81Y%QF!j6z>R* zR!v0Ej?}WT@!*!I%C{-Ut-^S&DrzuRZ$WVM=JXmjcYJ=o>Xc?f6TOMfN;rt$QW+-ise!*-vWMWvrni zug^-+>+GtEI3{blW~r%RYeQ$d67qK3WB5K4?Oyt|U8a1a zaJw$|AhH(gfFY*Z54`U+}wIQ@~wzn5EFRUnjFagmk@v`*#?;vJEr_qE`r2 zpD&FYV4wpA7u1y&eiVICcG&1_?D|r@Gy8IewdD;7c3VugDs*YwC?%Mkls;&L?lGgE|jvm2UjuX=u; z%uj|R*V7Y-qy@CP)Dx>)_yR@(e9;bRilk}{+JD~S#&m038{-@ z|Imp;SqytcRWj1L=N8g;?8l4KnF^v*g=May^$XMq0wzs zU#=(vox%nzy}W@AGb#6PO#4oy^^BR!W^=49RW%EA!{Mx zfPQ+gPY~%_zdr}SgzZvT18cU0XBG^8XMMhD{;lpO`9~tMYRA(HhmKZKGi$*NUGwAZ zEP}-h>iZb0%r^Ji7OcT@C%)V{Z!z3IrG~dZD?W2MIJY%TU7aaMt6RF!U(%+>V!3y? zRWI>^{uqZoYCGG-pT-@zJBf)7iW2faeKIcjzsL z8&{7r)YGBDEKd91Uu>w>)E-eiU0=r)&VcR|e2=``_FdtgzM(7N0^%3-2SQYSqHMUc zYJUaF2r|zK2|PpOt{E?XM`$x0tZxWeWs7@@X|FjADEx7EpdJtAB|qIl_L{q2Z@u<9 z!Xb^)Oc(CquZ}|!<>G>O>^%0$0n;)DHdU^<;CQ>{@?BWC=>EXh=imDY4arznM>Nf` zwhiM6oViPy)DM~SQ5`x}eA3eA=ELfW^=dg%fz2<(8t4x^MKeqkP|@wqKUPr8VTrpZ zewj;ZhwnHEJ=B2A#nR04q2~RXwfkK?c zZI+oQehZnG8hKx#U@m?qvK2fBM;%KhcBWlU5TEj(eM}2p z3yD~(vc~(AJAUFWaV96iVG+}wYQW5Ki_)+I$> z$BSunMvIm2t~KGT4x+}>;=&7ihR%u6-0>fN#||iF2d=enZngepJ_yIP z3NaFe>?HdNe0%WvxrkLahpXEwbfQ27?1{sLtV9?9k{LKK?%9t{Eu=;w4v@npSxa=Y zbvv!t-q3HI2M$$Yn|9MXkL4#i58MR6O+g5Yf7_1h<_1t(i*g0z!!>TIt%11-3l&isPkS3uP@g_7`65yQDW|e6pJx)q|6$uHNpYb2pc~?4${1F>-7-{%36%rRfl!NL3CIXh>oIpC2 zxQLsD5t(v@m4-I$dp_p9%8StO%nKl?W`Re4!Zy6L8A%@c8wn$;2SQ}ZloB3)&Y+-3 z2NK^x<0vR4D7Ov7lv}FA5Q5r6*htxd^8gs_I&N%!pZ+=;dAQtym(UKq3Kqvecw$^; zA%6IUo7kKw^~7C_S_@Toqs7n(TYwT~B8^?M>HO#b$tzQXkzSig(U7(hFkaa^C{$(? zjC`m!EX)O6rzRyS>g2(%K~JIQ?4o?Zy0R~{{AND$J{mGjI#U=12{jqnx&A5nZ3 zbsV1nzo-CtfrhC@Y-P#MmGsk_|LuUg2!@+mMaM-4rdk0JbE2ApmW!iy6Ws3%;V^V3 z5#h7icbE9UMw^9O1j5D-jB4EC2Mct*UL!Ih{I6hh0~}v8^L*4<#wd4yuk&t7#|z_F z`u+3Le2dLStpxdC(y+2Z`iv3>i{m8+MO559K|O9cPu_Y3ke{cRrqUF`n*cRy)nC4t z4g#j0)e_DUW-{WI8^+ZigA-)NAZu>(S-(Q>ACo_qN2DO>h#79($G%AaK6AMlpx?{q zfMBs>(1B_lU>NCPue<_PZmQa@@*}Pqu~rdVxw*$~{oKcc7~DXWD};F!h~vgN`(TT4 z-v0&<<@CV#9hp`RL|M7z+{K}lfd6%MQoPnN$+nN6_Mah?Xj&C&_x!d??rG3P*zi3|hZ#wI52)H%O6d zA`Kr6TeIKmSR44BDn!qcs8Na;!_--cOm@C>P9r~~po{c#(XB*gj zUV<8B!XM4KRm?8}Lm@*^E%x;tZzQHBj5*bYS!9z$37{-W6`+EFM!&!B9_-J+Fl7h$ zN8`}zdY(FWl~0LKohBIfJAkhzO<<-Wv>>X3|5?q=oB~jDFwJ-}@=u|O78h>d`I<*$ z7Y>Z!&{M_K>xB>G59k}m-b)@elcLOe0RMe(3^wB;MGza^Nbt9%FM?NrUAdIa$kw{> zSCg}=yn{=9Y;d>+m0w!HpM-=30$>%!!I}B|TaHuyaG5R&dDOL%nMMI!1@ba)hGV6t z;d>9Ys)6XPR=;+|uB!ZlbO568)`{Q>#1K+%ah}RPUvGyUD4-*tF|s%ih>E&b$Qal5 z?VS_tAJLy)_V2KTE>~8iqJqXIV;a#zoc3_1#4sgJ8^)rh0`aduVl416^9AQTcq^35 z=g6TzoE{;wWY5oAO!0}rkl@Pbg%JeOPX$HThTO8J5c4*Ehfo!nm=P!WLZK}zB~$q* z6k(yced2wx`)XV;o50T^)yyB#2fM;u-W>7dAZAcvlUaF^A@J>=#-pKI=vfxW@bP#q8Gm2>2eQO`ryu;_T8wcrpsIAVca&&)?9e_28X*OqW0mZ z&Zi`BvoJ<3L7E|vm2MrWo?BFtOby?vR`2?p+j^WBxZm|0uf?5@aB8b@ z6{=tbw6^VymSGL^ieV$bg8<)e_CtWZV9K#|UL(frsZ)5xn~U*1f%4SnIHHDj@tnyJ z&+KHB3(K+#eksWXC%&?|Pj}QNF*l@oYy-#!96h)6^N1>W7MfsAT-iw|6oyKPq5Fni zx87e%|KW97wHiT0#RXtMp=k3Pwc z6`^k!oE-59=6bBe3^mZ(OZ{TzSyNTh*Swyl&gH$6Xtl!ixR;~@mvc+fP%P!;5<=)m zxc#KH*tNSLtV)n|n%^l(PCJ6awbR;6M&&}J^qcph>&sQM(&%UK`~J&oS=|L}+k!oR zf;wy~Hyz&Y#$lysv~(=eCRFJSy9b4X+(JKrOTNvBT>gF|eXFcDr_|H!Q$xATX>}4O z2YYFou}hP(!bw2ffV!Zd%<3@3HZVR>GRU{c3OSQ`Zrw?LXPQBSUxOW9U!)sLU2jy+^r~2To6F}JTX*}N`dqZZD+Ykz* z((%wEV8tf|hrU`e=)=X@Xow$S=KXaSv#f*zqbc196O(I_KVE`pyhh_dXx!kyvkpkZ zf$QAK>B81|D_V0Qrxkko8xOUkq%mW(J!h-^KxQkpjGsrLyME?ufnfJ-5)ottk{~B2 zVGf=Y(IVE!sLe4UYPaQ8RDSIYp99QCMfGNpKvdVEFyr9j(?kx`+m@wnN=xV)JzE?% zf~ui4Gb=*vHrri|+d1pgRL-(Czh5|aph#coRxQcDzO7I;%V>-?Sm1aZd$dbj$^7pe z*5Y|FbwAAFZ%(F<8%8FYmb#-eOlGRoq>u)NygrelK`sq>eNU7D9R6&(l{l1xIpYut zI|3s!ELY{Zo@7~~UlOn=q$~JZQDR6KYRE(A<@Kd&$Y&rztVR0EQK;2*+BH?8yL=cqOBt5O(_ur2& zYT>;VS5p)y2?%P&F+=#q6I}GB1(QsXa`FH;9sYBjxAN1MLA_5>9nP#&Etq*P$a%lj=&SgLMRgyC!?Y7EV`KtkXPiyJl^ij(BkFgpof zPoGnxA-a?WIkzK!!%<3}5B5TQ7$}hi?M#kOaXZhN4$n%ww(Tndz<}{&K9ZhCLc%Cxf_kBMB zzftLkHj*64$_Y|uhUhhDRrQ?p;$HksT(%-0mIDT)w zRSk4I9NjB7e^fE4Sx!%1fN4c~@fS!`NXpE`2-g_+EHr3p?AE~BKv+u4@TTD%CLTAd z9G2PYSt^JT-CXE4cuVT~lf@TO5ZB26K3^=}92GNe@rs~&y7eb@Jx}1k$im24XWuzW zt&DFDzAoV`tgk--nksMKL=kE3dz@&To9KCC;r}A;YLME<5=>R)_1fBw_(XF7ScsUAQTzj= zsr00BFO{E|3u@63G!twb0#q;Wvw!F@-*rC&FP1v;*KpmH^$CO=Vl|E>U)&nXRUk*;#oCf&lCVD;#$d`uZYesewwYu zh-$xQwCVkw{ZDkSde0O0@H2Pfw{`qXJ{CU}j=4sM^b#M9VWxsO?LAce;EwN9SaGdv zrSr6PeOnbWmxJFS?mb~O=$VKbh1VuhaVOXxX?hB(z+knbP1(KQj9;#m zd9>9)NDS$ySZTr{(e|e%7NHJ)jbgLE#Z~)rh}(6QwoKBcL4ix4D??V5w!GzhUfe}A z7UF#dro^iEa4>f?t4EmyuSCFIbBRS5q{ql>ri6+*R`0o@hp$ObKK%RiU)3tR=d1c+ z(P|)=;V*Wo@p*iFI$OEdm;vz4Sy~*D!%LcS2r%U;n!I2nV}Gn-H}56kV&C_3vd`Y1 zkm@0SL$ljYzZ?UfO_h#lAd*7Np17|4`IbterIrCe1KSp61aVY5=21~C5=Ng+JAe+TtG(2hHKsl*!Hb(ZA)+@yEfoLcJrf!+xyHPXu& zwNV;$7*esL`Xj3BxRS91pA$AXuQc03^aEsob;UHw&c+CA3ockp%6YFBf`;EA)49KO z()qb`^0qhvbMC$O!_rzeIm&NY8HmK0gIYpvdAMi`^7Y%?1WX5}O6I%ySdm&u3IQTG zjQ}vEtK~X6HlyWv4s$so+Bslal}0o(lF1rjf@r3~o7K1Qw+HLBuDj4i=Oz z3YW3aoRemCVy#**fx}x0ymwO{YtKcg;&$ICyav}nkjrH$#~(J@($KiP_LX21 z!YL$)5+3AwA7R~X=E;Ab%A2jwU92mb*f&j8pO$7VTFZ0~ZS2PBB*n zbC9A^5X!9ZB4PD*xt=@C)5Z=6FrY=*w)KEc5V(e8OpWl&p6W)#mgl>X{MD#{ z8_v%URzut%h_@`>V-I>8oDYzz&+Re3jPkh7?s9?KDJ^=v@iV%RFikmgQ~nJ8k#*7H zl)&?=C@vt3+WP@A!#-DEUrdvstrD9>NN)7pp1ojC(m?MoFK3N^!^X5Du3m8TJL+2V z(zdZh+i-vXx1r;w}TjV1v z(i+kd>qI?WbKQ=`GbLisrq<}dlsTPSnHSnX8B}p{T_|uQo`_=5yk2b6v#^lvbw|~k zx>U}_x@E!7z%1r2-$_|MqkSksF&oks+|TQap;fg8y(t|q(Y2nf-T9^dN zW0#(pNJSDkKk+cHWQZOe`sTsBB|BJS*Ul%Qb`Kv4|DWHL*S-ld!rhMNj|QURi~R^a zH_r=LR^+P(t0PZ9><2!TV(27X#T^a{7`l)ATy;9Jrss#C8<6YL0edpp`~9zc`Se4q zvESJmXjt>0G;}J3y2RNy=9OxB^gjOl|L#Nsb@ZprPEIuwr0H}7T}?&Vpee`G6hBp4 z!l~hoBt2IH0m5meGb%TcyK9Eh@h#9i;?}Q&8NypP-M#+A_X^p#pI1B7We)VnGB#Hw z6y0-#FkWEGKv1*G0BUM}en|b>dFD%JtnLRnUjg7e*0PK+wef7qI+38ld^Ld{RXC<1tks`KPp@vCf(L-QvG@n%4?l4#i-O5+4=NHM6!^lH{(UDKC*N;f`A)HQO`P};9c+O*fpX@a4whMafAIFd zvS0k&tbW8Sy@#6_c>zov#%{UfGQi61MQ@rFqn-(?V!k^--a%5Ytb|Jh3W0ZPz62gQ z9@Mx!+_rA7%P8gbM(lYIs;->$6v7i2OXB-3l9(!dbWq&mqfx}BOw_44biU?46jruq zJ!YBx=H_N8GEr~4gB~Wctl0xN;oUtp=;ig68&*xH3&ey|(g6@DV3U!Vj75Es9xqrU z2~KSSw9#wPLpama)NE7T4^)?5|218XO7W;=r>t-_Yj8H2e|!;s;7K^DkuK>;$9$fY z2o~3-eqPeLMOj2hIGIyz7i-EI_4z~O3fkrtV&2%xS(=HmuJuuky z%;Fwx=XucdWjwQ1T4#?RGoJVAwZBlqJM8;=*3l<<`vAgP*Mrra*X@_TKDhn@2u!tV z_XgfpSs82U8RQa!b`a$znXt{<#bf6laqIr`FF)N~1ZuD>cWN!BvrGu;*`CfYdnJVY z-ffmD>ba|SW;LH4VhgonRXdu^=%HWLhIB%Gzypw{XC9P1inJfr2>A6ZH*l`gq_9A8wJfi&md%yQtMy{_Fu(V-y>Y#|bvN6(6@Bt= zKRDb@Z{NP?Hp>$SkB)oUaJX4(Iq^ip^iOqud*g-f&&o*-VGTV+V*mNYVQr-}4>=s2Y1n4-xzLjH-f-sqN$onV7uB}CQf z?H>|#M4P$557weagKj(^ev2<%ruW~Lo6DrPAJStof0UJ`SaVw*Tu(X5KSkoBJYEe( ze&ScE`Qg35;ZcMm2!1O4ls+7&MVB<44V=cx=8mc}3w|XQ2+)@LA$UMd6i)M{Gsnoa zAK5Se53Z7@Km8lD?YL22$);PeFqy_INm)BHZ_DN3mPq&<0l4DOEfDv1n9s#W9-*PQ zcd)akxF=k3uVh(9!S1#i?RMZddE`^YlJlnwBhvoze{seCliMCjG5*Fs=;I3DJQZqs z>?IOASOS$9kf`M=hsRzx7~C&csM7TO4sft)hh65 zwbM_E6=`G@Y7Do}ee2PuFO0qQ=FY^tHZ-g@_hQplQ1uyNH78#NsKO%2m~eV8*Au9w<4_bFjdKR|TsD zEIVn$R5QtoNy-HbI%&pt;~0&3Ad)LsfdE$wY&8vi&K38j@6O=3X$pfM0AOB^;_2Qk4zOM7a zkZA3Ru|*?SX3d=h$Q=5F33QYsKwf*O3T9I@3B=Ioh(?VNJ-M-}AbkY)yp)yJT!~|t z9!;@$f~r~w^N}ZgUm6-8J!CCDq6~WB#yudO7&kfL%^jg@LerRDQU>iP8YHU4ygtfB zb&L7~gshMb(z-CqHUTulNW$D9<#O$hs%#C`}MYRD9f!6R1~n(xB@<9JzF&7hex z6VBI;&5Q0%?caWz1bdw)ezJW2XOb(gMZ-00|G`%lZ7hrod@R(U4ieP_IAafi0LN%m zd^YVamOdn)A;Bn*YZLUv$A3PEX6_%n940=AIZ=MZ^8Y=nTRsfxcJ z17SG*31j+PP$_ASLx+aN$%R5=FCGjCkf^|c+li%rcurJLWB9B+oG?gY1~&$h6nt(d zv4{wS(Pux!bS=hyD$RVMao`8Lf%zP&HIhsM2H!Hs8V`UlfEgKDHXtLUJr10%{I7pD z?QS&3j+}pypmwxB(SsPaxOtpXV*9rrmfqQItgl+HR*Axoq zL<$%i0)~%{?AThiZ5(ch6Nb*_8j4ck0ObpRrILYjY#F@S2d2Mre>rLIXYk4bOrzZW zEz&#q{~L&s2(1440hflfC;v(0#Z7;k9MqFSer|iObos^>M+Ii^+-Jn+PW?~)kQ@x| z6cu7vkaSTs1|cLHSD+AY3{Lc6vESyG{$qRlYG<|4BjUm0DY#QuRpILKz^dS43Ll#a zB=q3Zp+hrN1iW#OP94@vL+|%v(#7I19Yv`agsu5wGp@fE##rpj6>!lCFgHlL!;`c& zj+YVuTfWHgDzwETpDB-@rGrk?uLILXw^6?xZ|pInSV(%&)QN&wRy{8SFb~+(%F~f) zUK&F+2t-*mHJv@p?L_E1-4vulk3Or-9u3_di-a%~rs3KgiOw_xLplUec>TVlMTpx8 z1p<}Np*Bd#C5Mho{_(F)fB0w1@UdR}rhVu|_ul1rc#NU{L`28N(fB3X(1OOKa7*Cv z4Z39DpzaQ002T!)WOraM3>%=?G+rr(R3o9RS|GlguB~HZTd(n*@6o+$QPw8W7?*`f zGW*DAX;Kw%w)_0A3xX%Wfa!WKcjS;vbPhU(n@eNXwg&4!fsfv53G+2TB5a;1}-*~lpJ=7 zaQaF?&$FpRg>#Rb2~b@a&n(mgms8WH51($vL8Pk{_)6@%VvQ1|eei?(9tDzM+cL+o z7Kp1O6shLY!Wen$|6F|KU&7Ok7N4qp_8$fhZlahEK!ejmn|Z^=dJ9DUD8-=~_P~R?8y?+qs74xwn+Px3E1^oyuMKS$+N| z#N%J1=f6M}KM^f_Odfk)fzaCDv69F<{nLBQJ zu&h5=ZomE~n-OH&tdxh=16ZuZH7aq4p6X}tU1ZNcNIIo9pK zyQQ^JSsNqpXdy|sK?=+!@Dsly#*UIG^jB_#2Tg)WJ;DtbBU97;gJ5snFHdr3FBvoe z0|PC_`5%BGyZ2>#2e=A^cIF1|Al*~SLQ`daNSQn>ch~*NVS9L@7Y@)zCzPoFf-8{< z$ct#4kT-GaybX`fAmb%?Yoa>A-L;?j5C3LA*xdvo^~HarL0s@!D2&1hSS;s140o8Y zW0w}Q66QPFLup*9-=O1VY5NBX?mLYD&-8({+AVcvpAL7k2? z3_9@Btz{mkLSrI97dmu!d8jpq;9MCc?Jd^cgLj(pgld{>)lvSZb8_bV)Z}@6tJCGy zacNamyF~ge50Z-S2!x9!b?VZI#m7Eb_M3ETEkUSUB9$RJb%yragAXpP7AL~Vd6p!^ zaindt>InRFH2H)KZP@Jb=Z5+5R7p`rCP)h zTN4X=0J2aC3!!hQguxZHa0zNF;rixm9O!c+oLEe<5e=50;t7%>+#wW)09Lo7Ml)Ud zZCWbo@QaESapIk4utieme%E}bd7$lz}8_}j1IkH7e@^hcJ&t4eYZ}by~SQ^)JX=hIsa%^IPX;#?m zx(Se!^S@BBAps9U)qo?(fnlq8oNt7ee6THY1?%v9y7F=oCd8V;USp?$Qi_}<@;1{9 zoW3YR?#zU%)p4qt>6r`FQ^!Y-or|aD)BU~JsFA`XpBS5(9Gk1ng}Hot^Oj&59FE$l zv&U~--W)WfJt7NJqBH}U9Kc$dud>p(di0S|MGZHXqVpdwSO(kK3Q@Tcl)v=Nm+r1U zSh}J={#0xgLf_A9{<5LH44q;xQenh4#LN+hTje+Y?PK5h$DMZlCOloE#(wfQ0I$V? zuQ**QLiTk9m;?GkH2~O?aQur_)9;X^V$PCZ^qTIfX0}qizzFdrT2S)3P>h zFMp)}_CHj9_*;8~HHb#E>hP!kLHW?BPH&IgmO(^N5VRu+%}daVh-`SR*};r1raR|)6I%Dckd;<3y3_XM?BFObe|j(4oR-TiK{ z%DZ*1-R{H=?`@ESB?$=2E~*p9Ccp5tizA2j9K|iqviuN*IM(Z>{l4K3NWT~L+OoY* zTXih)blQj-x9_IbkeE6g_uDuoBoexPJLqf?t7E+SAC@1iy2TNpS%t@*Jz8(>o_cIy zdU~ulteqVD{Ig@9z0rMxNL`Ki=2G+WpY7~!MbCYHj?o|$tWX?w?#E8g>9gI@X(I{a z$>Aq{^s0CLeFv?&N9fSh!+jb|;g#mv{H5=n`^}%*YOb}36;R-813CBnkRhJ!<6;vjF@y&8!-a@c=7FnD#Pdb&4iBC|N-c#!;;Ram6a( z-2x~cTErL=HY8F`bH$v~&HJI#cSVpu(8BWHfCL<+;ux?9BYb*0tSa5bTM}XF19`)FZ6pXSCTBItJiqD7oE8n zO&k-Af$Sd8sEZ9p?n}qcD~(;}_VrfK!UiOe_gEp;h?qFbinETbI3o+rb}zp24o{h= z_ej4_xE~$tq>Z*JV%rVFTv--NvNBBfR|PYavrnU_*K<@Qm*$3LLeiD{?X?vrQPb*l zwrEWcolXxvUoJG)6XT0Yvr|7i|CvDBaMDhCVDGdVT8S*2Ep?l&>&BKkk?W6dZf)^A zn>@~xWaP`A{-q~Qoqy%k-&xy|@BJBl|BvPU_xYu_#0RhCS8px;-Y<7Pdi5r}eY|&& z$ctRKZ1H^K*vAeIHh37IWEwKQJHT1&Y8go_`X)&%0cN9J2(RD)!*zk|E;w-=oMBW@ zd?Mi+g9JTMCEAr>a86?6wYE*VExxmjs@P^HJ+Uykcx>eAt$j%F*r8!qpV)2m`-8r- zrzkmAtjf$lP)t-N%;I9ZyFW8)nu=DKZ24|t2pJC4s~^OzelS#(!GJ;P5itsHsEQ?F z93OE>d6=jH-MP(Eog6x!@{+vvBb;65qr&e&>Jq$oREco68wRDysFok4_7IYa%CrRZ zrY0hCyNyoFO?CS^u30Ho0CX~=L~;ODB^{~`sd;JIfo-4*ncwFVN5t5asBaKiO271p zZylRE)fV@?Zd#mSkX+%C)y5U4l>}Y{AO6}#cWb?K@ySoK^2YDH{jcC(#XY(809YWY z44d$FcQ?AFF>SCD-n?-?KZkp0+=HaobWR*U0(e9>i&jqGjduJcv3o1oxsmSO@z?Hb zCw5m=V{|9V1RT->lFTmtv{IW(x^*0UgM8f|;F_O89!JP=Cnc^1!!n$0;-l@f;bX+s z2&7@iixyTk5awto`@&JHVhM%7fJcHbV@d{4@bu>GwA;qXJOIG$R=3&PM-Si_Za)*T za6F>fO5EqMM=O(rYUri`-#i%jj?>e0w2bUIgRRSpvT3lQ10;Uxm|d!$TU(0N+8~XQ zp`eeXjUzwsVhoFT`?R}7%~9gX_`>{!Z++z#kDYy7*c#PVGX#P}5U|n|j?}>Gp?@}w_t%rXRZ*E#PCTKc zz8JKm7qgiY=Cg-hGT8VVZ(hpTXh>74C{xqQ_9}cYc5DJycumsZ)L(q&%hidyH{ajA z`x+k|oA|Z={(oLtfA{X)#`LUluq=0Wg32u19v(QtDwY=?1X)W6SUDloZ_G7Ne%XAm}ej zal{m5;b`NFv#(Bv_7AYmYESYg7Ewe4_$5&QA7`rYbBV*zmVF~M@8-IQ~Mi5D*x?J5~PmcM?->C}7n z5aVM{;R^*gohA@@61zgNu!qj>JQc!JQt6{YxBmpt0mWxDoMuWZ2vfLr1LBRBtR1XAoIsxLs7q(au3SJ3qGgsNL&! z8vV@=Z~VyhUGJI#NOJy5W3?li2#D7NI75;kl|#g;sBs;u!ILMo$G=(udC z=J<%cF!$u>glAc@=is!3rKyTpkRnX8fS>g(#m4Q_?^?&7U}+kX1j`g~>mkz@4b+5Q zy7P9=UBQ-Rj}F!P2j$=P!p%Wb1D>2sx)HNPc*^&00NTRpx@ywYqooSjYw!5!jYjg; zrAzwGdep9W+AEUhjv_gO^bW_(&eK8}T}TGLz)wMvyn((;UI=+KaUI;!JZO{0p2`_k zxW7|8exkazvR&U|U;o)h7f<=?_rw&|vHdV+5CGwlDk{5vz2`}1VgA^cKl2Mzzjx)m z{RllFMCiy9kDdO-|LSW|*mc5YVD#3vqOl{&(6k=X{$^|0CPPtMY4%#fGfd^k4uPOY zA@f|nINmezG$s;)UPUi8uaTHW&-~K(`Oo|qeNbDyzCvw4IZUE9PL#$Be~(NaRxW&5 z_S$f0(M2WnNoEtVHqtMGA$oUH*qN# zE-TDwVtA5#cv<=Wp9e1MjMoY?6K4ZiH}qP&-*LheI3c9^FvUEG+nEi_qkA`#Tp^h{ zsV0d6hf5{YG&tJ%XfeFD)S-Hb6syKZS2ypx8+P}(S(MdMPAP;E!q1kncbn5fTAM@V zC@S3qDU>N->E+wWolDxy8{30U=Wl)SlQZL|c;zvw0b4hiRpz=SlR!c=wryUr(}IN& zCWM1SRog1WLENoF9+J)Vury5Epz|lcyEQd66T0d0C3)*rN9gUtj|O4@_Ybv$y**kU zW+O9nc#Jl7J6GS?9UPd1yJ~@4{A3{(vA;h(RVgelZH5E1^D9ljQ{;uBF;wMa+T{Hk z^#Sda$2q{+2nW(3jj=+FY+a4iT3TCBMurN;u-v^u`wgL2mBu~CyT|UlwH)PK6lIR` z%9zq!i{&Uwd%RLg=ARd_OM%4#sZA)34ge8Q5LjXRsoz7E^3Y@tNDGPpO#!&6-J>hF zaD)OV92`wQM6qhIh)2Ir6s4*(P4?c8)bIXZ^6;s2WU6%c{-$Lg43$f@>M1|*;cOO7 z6)t>;a(0x&>L%P3cCeMUugQ}iujVJUpzA?8(BY)$xi}8<1_#Iuuf%}lXi$_%QvuNK z=}+-5e*EKC-efo4YmFWi#mUUkKqABgFbn4y&>$Sjp$Q;xw7JP2fAsL@e{!17y$Csp z!q4ahD9=#@jbg5ui=)(=>F8{Q8eo+aE&RLx5O$Mmi0 zLT`MM_pz9TP^Gyi+Xu`VO1oW}D~R3tZo;?SM4UhMnQwmni-EDSa_`RTKf1cJ)if-j zm@#~CR$ltusB=HJzS7K(MUX^&7f$ZvSAYJwKHJ_~je3pr(a%-7Yi1aDCodE>-WRw3 z)Dwj$HzV6y(e|YsPalvnO}O-9=?zk1GMs6uCYGtq9S5eKMqajn$i(4*Bqk-ah9lhu zplF1|w$1>>gaLe>vRX#QDKz@pcjUb{=~(sHNK`cG%rxGNb+5?olD7CF1Uf(Um>c6T z5@c3v!3&aCftSlT60;-Kg(Hs+qJ!RphyB~kz=F6P^cp&O;v7$NOSjf* z<9c<%Zf?lt1Ap&sxPBuI!({xNdGuV#6>g|y`>rXDoL5IVDjFi}4RMR~8f@VREzPHc zHY)1?_;i~K00=Tl;jcK|N2d-KQJN{LY8u?p1c} z3cYiiz4A}lr9YBlfsRd!kwY|5XshSvZB&BnoKr8^tp3 zbfn5vIKcqTa1t6WM+~elgd_rgh0kBnajkhP40-iQ77WsSjTH;Iz)QzYddH5-Qh@~k z@I1+MspsQLS?W0k(ZKH$nv>I~(+iJJoIbR;wzcaID5Ng8m2_K>iWF6o*;+P~?`oOB zk+)yX0a+{r0p!fsIx=0^YaP`4>wU-b5|+2IXs%$dUO!lg%eDL$KXp+Q>Kpgtegm}z znoYfq|G}&G);{bMro3cd zZPTVjpuZfg4gf31Q3@IT{IhT^(4IB$(Cr3(eq&b{Dl3oTAS>D=XWb`ASimwZ6Tl^V z^EF{b!}ux3pA*XZV(idCcw=WTsR-(DZUCASI)Y4cS}wvz8`1ae^E?; z0mG@M3g)>4*hmaWjo3AM&>38PGmTtqR*g-l!!@$sFi5Y|eh`yg6*Bf0;Inx_2J zGqZX+c7Nr->yZ6b@%ld_X`^!V+le(CTZ94r4H7_nSUDeb;JRywO&}53Ie(A<6=Ynx zfmpjMTleABLP}zM_9fb^lS*~r@u%R>`1`vw1f<%Nkh*~~`aR+W0+%K+TqK|=sH*`G z82I7tzGtX71dPL?G2P!HfY+-v0g26ZANr8tG;O{_%JX994(&eRZacYl+sPM+ZK*&; zflakGcz;j1^)F~~j0{~c`9Qa(@9y7Ickf4n3-p^DNP7&`zx8!_^z1zRSa;BrkMJ(xUK9WgfkSep9^obs zg&|)_;Kf5SN<#UCAA9NS;?rR-Y59(BC%k-yb~@_WCt11J?=%oe;`}EiUW_KehK7_N zK+9;#G*-;xvPWDR%W%mj&bef+n{bZWJ9Kx2E2e;7lV+j_$O`a5Yp5wWm&gx6O- z@#Qmd)4F%5->RqGZ4`m#rqi6%%BK^NOYgkfTe%d~w}f60(+eYM%HVnyD;$7c8Va`y zj|zU}puOL(jMDMp;`&mwzS)~Sse5s2Z>MADbGZU`v@{)QB@iKizBrVJ)kZlqsW|u3 z)en;0d)oA4q*f78gd^B}7ib%T24K3?GO3QzjV1o)zsLG&a`Y)#L|<<_G;WmGIxbl< z%VbdJOSfej%jyt2dl9RxoBKfM>QboST@nQQ`00{c<*)e;{3v{2y3i8w#vNv2X z5l1LpH7ue*D)FOKB!P>cIGm@6arxCRKK8BSzjO2xwVMauSzQu5uF|0)ws4}?>&O6C zk7Anw2R>sw%Mc{tMWF9af;&8In=%N<0xRq?Ydd2hUO~Lx+()GnFd~33IMpg}w<2yi zRIs1}6jm=vX~-8YJ|W}w%FaP~h!#fW$RaWGBvs;WA`Tz3h9=DQZMe-L)nwinP5?w0 z9x5hrEJk*^o?=Fioj*|;?%rGJ{N>9#t9N?G&y`0P^nNQY*4Ut*s^~;2H4P4jiazo@ zsSV?-PLQd&&_$Z!V~#^QaIuCCj|!{m6niFqgcgJu&d0Khq-elUKcI(Bu*aUkJ>UhC zmP@$O2mWoZixXbx#u8ya21xb~|MG6V*BY5+5KG|r=OkPU2F9Fa(Dvb zf9iGU{W~2+_e~ok`cJk8~f1>Yh-n`STO>lU5T$M-8oAr<6`UersHo+p%(b@b< z#xsw6RwRbw??;hPg?3`*;$F9|DDWX*wG|+w=df&;iB?BMx50L<5Vdsc&i&21H!9xX zfKNTAoH&oFRlwE}I*8-&HC$gGLUg7Vr`fJV;0bW8frdl@3UPThjTR7G9lNzHkDOJG z%*)meahljoOF4dvWszb5RTHRy4^hgSv#C8SO&zC$(7}!4&dY;c^7ISZr=Kk@Z*(85 z#Ztsh2Y`|}e`u!P>0{?ap`ioBCWY6)Q8DQcy6L&+i@*F+|7?0uE^!PJHkm;16`JjtSH5Gt+^r17X^m}ye zZg}7{w>G$H2vbx1NQ6F{n>oC-x8XQ4UsU?dbaZ6y$rny8U*DuATm|(rFFij!Ry$w$ z`8yAmFW+9Om1?;>FeGPcbSz1GgD_FFzgqNz3&RX$Y+i{s><4d!#FDfED3m8_+$fRJ zGqN@!XHJsY6Qp*S7**mr*!i!H(24<%ih2;nAh%U80LChdhnBZx(B-{`u#fy`&OX`L8Nc@6 zgOXXk`G60{3A5Q8@t)z@U>c4*Nd$+IOR1w}X9F`OTizWR0XTM;6{Fz^9 z$HB(NGNd7#8P2?StD|IkUKXpFbPJ{9hh=RXeNG{=d!C3>h!~3RrP(%$%*s&W;tzmb zxg74da$HD~4qt^K;l%r~+pPZbjdh`6ODLX{ev62r#xp2t5-07?(A z+l4}^Y!Q>+W4x>?YLo_eENZoJE^{}RZl8Y4G>S=gN5F@pRh4X$bGuMx3X#n^T<7=S zy8g-!-??p7!z4Cw4}k7=lR9HS2UMn{=vo43R%dpJ3Krk_BRSZKX%Ss7$Ph{Ua^#qt ze2OX-v1+)K1JFRuL=*zZqnMY~JW`|mjx5=HtR{gePYe?t%zo!P?aHiM8)uDlNooIP^ z$+jR@V#OZrAtcsHwxS+YD8SfiXLFVD%!CPT5U__WnMP#HaCRdb9>moJc#q)&RPh+1 z7epG9c9V`z@k5Kv&AmGMwW;XGfMEat+5k0?8ho*e179M+ji^p9YbRGpAy3Lh{5OHa zI(5=(5W7r)=RJMyk(WMp=EmLon-4TV!YYsd`G51ff9K*C-dn%2y52L(?!kVmHi87d zSd#5_f90;bvUXsV{l!Dt_P)cluux#|Ck!Bdpzs#g%w#=vO_y4t-TR9OSOhxU+qi9) zSoFllm@<^yyeSQ#=5i2ag^vM-jt@an!w^;P;TfMAvPY_A&+CtknSb&7!TsCK>LdrI z1%RX1qkG>QOrI=1@%+%{Cfjevm68vi(*AY|coVQ8@J!r1tD((X5R#mVM!(ew5r%+) zMRU_%f1QMur_6YB3o1lZyF@1DNo|qNpT+r4Ktsi{gaqmZ*!m*blHi=pW5L!xq#wP% zdiUP7p;0t=Mwizj;^CYwb2$i6z;l!|N%-gmo-azf6o)YufD$1F{YXYAmKIr43?LO; z1yno=Rh25wxG&IQpuB{Jgs+d70{t!^p7+-9iNW2*Oec<>>Ry7 zE910QLv-S&*i2mgAUO9-wUsW1?jYzX+uOjCDR5Ln<-pGZw0cDm2*D7|A&ErUS1LrYWE=w+6i!9RF0tDMf zHDq-}9zIT@0m&8Bp4WQ$FIMA3j*h@@=Kz?m-M{n4KX{j`-tZ8lAK}5{+Je(Pm6B z$ixIG&e8{O1y|m#fBYv+P7?I^0ZPMxI0$qFk?0~x(c~GfFWdtqh@}@Mqf_+KUnsYK zlpg*VnLCQ(lMNRKMB!NAx}6@P2LP(8A0}LrLvxxx0Dxkaa|&*5NrVCcS%p*x_Yg-h zQnW0W@T91aW?63DWJ}*;3y&t1NrBy@?k3zqW$L6zolNu#GzneAq=J)~I7FOgLpYfg zb+$b!g-61tW`&xK^xLez;c2k34nu*{%I8#<8k{1MMnY7dAgzr98d!y`;ICl2KfG2#1|!+HrVE z;T{_#tp?k0UCc-5AzlDvfDpk6;NViAxs{4M^$1zNrv2~Vh`SHW;fmJZj><#XnyFH1 zTC&@c)*@q}vGhuO{);)w6hSX8mlPwX`X0&aO3;zB^Q2^B;V2F( zhQc#Vc}jY|94?IyRe|SsW54kB%dS<@7S0+;pvEz)H=;++PCRyM`qokdR}pLMg-@M- z;mptG&BP^JNs-3czZERM z9P>E_Ss6EZas(hKQgqP^thEDqhb^ANwXJZ$iaC3JwB*H}p^C*Ra_EStl$F>1J^xp~ z5XQb_Jgwgj8@JN?->3DDs65D%WIXiz$;Dh>jqd%&c;_BJ`cz?JA&tT$5dbq(FY<+= z6fJnb7$H)Tj!mdT#mU#d=jRqe)xybcz?pFLqabxV)ajtzYjs#=UMk)MergOjw(zzk!W5`P)L;1M4<#RwX%9u+pjiDR{803h56YDGuJmNTW|j%L#t(D*OFkmv8=dM6?p_2#rId#wzo?Gy^e0>mP8NO`JdW)A6cx>y72waclkU zXzBZgrt*oSX}%f(v(QYdU`0GhN;UYKF|%kD)5YKY&B4~7X%C}?3cM=QLh?E2;)*Kx zPlzu7!2(=^g)KjOQr>$dWdk;OPHDB##2#oT$1QCLcQs8?gOr9$w`VNBmF(SvY@43G zK*uJSJrtIveEQ@+g5!geqKPES?GygPu>~$%PctDPiczq-$pNWpS_GeR!D4Io((MCg zTiV1_P%iPckL3D&R-KUx=dr?fuoL%MWO!8173tn?w76J4d7;&-lUM$=vbLNqJWc11 zppwmx#rSd3zN)|dzZJ)hlvg)54)!Ci0ho}&N99%ZFtN%Mx5B5{o?{h*kl$0{i1h|> z4nks&L~GK}>C<0RpL|Z~?)qWEmTs`6tE6!~A|W#u>@R%d>AthklXuEP-esCph$bVrEl$~w_o?YTXgiWcIFeZJgc2Jm1Am0C^}b_#+I>qmAw0k*VX#d zXE{}cX(Rt|dI`a0dYL$oAQ8^}=K#KO@nN=oRBqm4Ig6crN$Pgm*hC(Q zwrr?7q(IVjNtzDiKfuiV%ta;>it_Ljo#n7@A<e&c<64;(bIj0iYud^ka`|;!3%hWV7RTW+i)=Nbvini=;C;aSN^V4} z9Es0-I#HPfP5`efpC8$KNBjOi+3nOrGOr_+Ga#nZ;xN{#@+B;v37J`i)(y=@y0cFK z>%jeS1^^WyvjU*QDzOU43+QHtZ9kxU@28~8i2)2Poj+}xiE*&rYqsNXkB}$HnP=2? zBMux=83%R&&sJJFfC@O)1@|}h0JO4lO){2tn}nqL_yn6dM7Fp5Pdt0t8XEuemtX(V z#gBdPp?35B_txLib~l++-I?QL{v*+5lljG+4JrD3IBP<93-C&s$w-`JeSRfbA8~#O%d)_H!i~=+%G)M?J@W@0M3!2YI;^$DI@z- zGL$D|W-^4@74}p8Y9mmgw#4 zsJmNytl;!S6!&o67l5aY=0gf@+<~}@b==4yUSFS{d3}>r-3|$4Y-EeQZ;;k1 z8=IjM=VWe3CIjqS6iq})tu7pHx%IA6HMJN1>o9BqS^*-C_6FF$X6R=I7&v8_HWA(B z(PIIAYk5>qkL_Q{9XOO#2DM?FrdP4@g3o?@(E4AOm^(&pa*jr;>OINihUrR?% z(>yC|e5Z8ht@Vc%#stf?ZZ={4&?A8@e3g$ZrZ_f-Lqt-`O!Lq^DMgk7&lMhX#^%$; zS{dD!m9E=j03dNq^neCFNxMQ0aKpH?rCcEwf7bliFNXJTi6nuT<9?oI z0Yw42{+I52z;leo1w-7DPueY33u zrA5C`f`fqOXPIyur-KUlheU;X*s79tkyb}Zc`_QFr^9nZ4hSvz^N$rw_vFsTHi{Tz zg!7^rb~e!^i_qhrqtnM_!NQ+r8o=DLLQS?)0iALcnl0!>H&S@Nik>iB7@3s@Rcwdw z%)noG=(#FGIdRhX(yx%#K5!`;#bMQuK7Dp$GIg1F&uCG;obs=+H+V z4@YMjUY8;=jc|Q5IwpkJ`4}Fi5H`XAPL>kpnWh`L1(YiQ$jMrQ3~hE%M*V*aFaQpr VU%oHA-+}-|LDdAio=IS8**@RR?od4`XKl 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 literal 0 HcmV?d00001 diff --git a/server/www/teleport/static/img/login/login-bg-4.png b/server/www/teleport/static/img/login/login-bg-4.png new file mode 100644 index 0000000000000000000000000000000000000000..4c9f133ccf466469f9ac2ea2d67b7949607e59dd GIT binary patch literal 35757 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 A_W%F@ literal 0 HcmV?d00001 diff --git a/server/www/teleport/static/img/login/login-bg-5.png b/server/www/teleport/static/img/login/login-bg-5.png new file mode 100644 index 0000000000000000000000000000000000000000..8ab412a52eb64c68056723f22ab70dc58327a73e GIT binary patch literal 35359 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 literal 0 HcmV?d00001 diff --git a/server/www/teleport/static/img/login/login-bg-6.png b/server/www/teleport/static/img/login/login-bg-6.png new file mode 100644 index 0000000000000000000000000000000000000000..a1faea5f262aa3103d7baf67dd8e8819f47f52d3 GIT binary patch literal 31269 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 literal 0 HcmV?d00001 diff --git a/server/www/teleport/static/img/login/login-bg-7.png b/server/www/teleport/static/img/login/login-bg-7.png new file mode 100644 index 0000000000000000000000000000000000000000..47dd5888245329e128246491583abb28426bf7dd GIT binary patch literal 34301 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
    ']; + _ret.push('
    '); + _ret.push('
    ' + title + '
    '); + + // 表格内嵌过滤器的DOM实体在这时生成 + var filter_ctrl = header._table_ctrl.get_filter_ctrl('search'); + _ret.push(filter_ctrl.render()); + + _ret.push('
    '); + + return _ret.join(''); + }; + + render.make_check_box = function (row_id, fields) { + return ''; + }; + + render.acc_info = function (row_id, fields) { + var ret = []; + + ret.push('' + fields.username + '@' + fields.host_ip + ''); + if (fields.router_ip.length > 0) + ret.push(''); + + return ret.join(''); + }; + + render.protocol = function (row_id, fields) { + switch (fields.protocol_type) { + case TP_PROTOCOL_TYPE_RDP: + return ' RDP'; + case TP_PROTOCOL_TYPE_SSH: + return ' SSH'; + case TP_PROTOCOL_TYPE_TELNET: + return ' TELNET'; + default: + return ' 未设置'; + } + }; + + render.auth_type = function (row_id, fields) { + switch (fields.auth_type) { + case TP_AUTH_TYPE_NONE: + return ''; + case TP_AUTH_TYPE_PASSWORD: + return '密码'; + case TP_AUTH_TYPE_PRIVATE_KEY: + return '私钥'; + default: + return '未设置'; + } + }; + + render.acc_state = function (row_id, fields) { + var _style, _state; + + for (var i = 0; i < $app.obj_states.length; ++i) { + if ($app.obj_states[i].id === fields.state) { + _style = $app.obj_states[i].style; + _state = $app.obj_states[i].name; + break; + } + } + if (i === $app.obj_states.length) { + _style = 'info'; + _state = ' 未知'; + } + + return '' + _state + '' + }; +}; + +$app.on_table_members_render_created = function (render) { + $app._add_common_render(render); +}; + +$app.on_table_members_header_created = function (header) { + $('#' + header._table_ctrl.dom_id + ' a[data-reset-filter]').click(function () { + CALLBACK_STACK.create() + .add(header._table_ctrl.load_data) + .add(header._table_ctrl.reset_filters) + .exec(); + }); + + // 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行) + header._table_ctrl.get_filter_ctrl('search').on_created(); +}; + +$app.on_table_acc_cell_created = function (tbl, row_id, col_key, cell_obj) { + if (col_key === 'chkbox') { + cell_obj.find('[data-check-box]').click(function () { + $app.check_users_all_selected(); + }); + } +}; + +$app.check_users_all_selected = function (cb_stack) { + var _all_checked = true; + var _objs = $('#' + $app.table_acc.dom_id + ' tbody').find('[data-check-box]'); + if (_objs.length === 0) { + _all_checked = false; + } else { + $.each(_objs, function (i, _obj) { + if (!$(_obj).is(':checked')) { + _all_checked = false; + return false; + } + }); + } + + if (_all_checked) { + $app.dom.chkbox_acc_select_all.prop('checked', true); + } else { + $app.dom.chkbox_acc_select_all.prop('checked', false); + } + + if (cb_stack) + cb_stack.exec(); +}; + +$app.on_table_acc_render_created = function (render) { + // + // render.filter_search_account = function (header, title, col) { + // var _ret = ['
    ']; + // _ret.push('
    '); + // _ret.push('
    ' + title + '
    '); + // + // // 表格内嵌过滤器的DOM实体在这时生成 + // var filter_ctrl = header._table_ctrl.get_filter_ctrl('search_account'); + // _ret.push(filter_ctrl.render()); + // + // _ret.push('
    '); + // + // return _ret.join(''); + // }; + // + // render.make_check_box = function (row_id, fields) { + // return ''; + // }; + + $app._add_common_render(render); +}; + +$app.on_table_acc_header_created = function (header) { + $('#' + header._table_ctrl.dom_id + ' a[data-reset-filter]').click(function () { + CALLBACK_STACK.create() + .add(header._table_ctrl.load_data) + .add(header._table_ctrl.reset_filters) + .exec(); + }); + + // 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行) + header._table_ctrl.get_filter_ctrl('search').on_created(); + // header._table_ctrl.get_filter_ctrl('role').on_created(); + // header._table_ctrl.get_filter_ctrl('user_state').on_created(); +}; + +$app.get_selected_members = function (tbl) { + var members = []; + var _objs = $('#' + $app.table_members.dom_id + ' tbody tr td input[data-check-box]'); + $.each(_objs, function (i, _obj) { + if ($(_obj).is(':checked')) { + var _row_data = tbl.get_row(_obj); + members.push(_row_data); + } + }); + + return members; +}; + +$app.on_btn_remove_members_click = function () { + var members = $app.get_selected_members($app.table_members); + if (members.length === 0) { + $tp.notify_error('请选择要移除的成员账号!'); + return; + } + + var member_list = []; + $.each(members, function (i, m) { + member_list.push(m.id); + }); + + var _fn_sure = function (cb_stack, cb_args) { + $tp.ajax_post_json('/group/remove-members', {gtype: TP_GROUP_ACCOUNT, gid: $app.options.group_id, members: member_list}, + function (ret) { + if (ret.code === TPE_OK) { + cb_stack + .add($app.check_members_all_selected) + .add($app.table_members.load_data); + $tp.notify_success('移除成员账号操作成功!'); + } else { + $tp.notify_error('移除成员账号操作失败:' + tp_error_msg(ret.code, ret.message)); + } + + cb_stack.exec(); + }, + function () { + $tp.notify_error('网络故障,移除成员账号操作失败!'); + cb_stack.exec(); + } + ); + }; + + var cb_stack = CALLBACK_STACK.create(); + $tp.dlg_confirm(cb_stack, { + msg: '
    移除用户组内成员不会删除用户账号!

    您确定要移除所有选定的 ' + member_list.length + '个 成员用户吗?

    ', + fn_yes: _fn_sure + }); + +}; + +$app.create_dlg_select_members = function () { + var dlg = {}; + dlg.dom_id = 'dlg-select-members'; + dlg.field_id = -1; // 用户id + dlg.field_name = ''; + dlg.field_desc = ''; + + dlg.dom = { + dialog: $('#' + dlg.dom_id), + btn_add: $('#btn-add-to-group') + }; + + dlg.init = function (cb_stack) { + dlg.dom.btn_add.click(dlg.on_add); + cb_stack.exec(); + }; + + dlg.show = function () { + // dlg.init_fields(); + // $app.table_acc.load_data(); + dlg.dom.dialog.modal(); + }; + + dlg.get_selected_items = function () { + var items = []; + var _objs = $('#' + dlg.dom_id + ' tbody tr td input[data-check-box]'); + $.each(_objs, function (i, _obj) { + if ($(_obj).is(':checked')) { + var _row_data = $app.table_acc.get_row(_obj); + items.push(_row_data.id); + } + }); + + return items; + }; + + dlg.on_add = function () { + var items = dlg.get_selected_items(); + console.log('items:', items); + + // 如果id为-1表示创建,否则表示更新 + $tp.ajax_post_json('/group/add-members', { + gtype: TP_GROUP_ACCOUNT, + gid: $app.options.group_id, + members: items + }, + function (ret) { + if (ret.code === TPE_OK) { + $tp.notify_success('账户成员添加成功!'); + $app.table_members.load_data(); + $app.table_acc.load_data(); + } else { + $tp.notify_error('账户成员添加失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,账户成员添加失败!'); + } + ); + + }; + + return dlg; +}; diff --git a/server/www/teleport/static/js/asset/account-group-list.js b/server/www/teleport/static/js/asset/account-group-list.js new file mode 100644 index 0000000..37b201b --- /dev/null +++ b/server/www/teleport/static/js/asset/account-group-list.js @@ -0,0 +1,442 @@ +"use strict"; + +$app.on_init = function (cb_stack) { + $app.dom = { + btn_refresh_groups: $('#btn-refresh-groups'), + btn_create_group: $('#btn-create-group'), + chkbox_groups_select_all: $('#table-groups-select-all'), + + // btn_edit_user: $('#btn-edit-user'), + // btn_lock_user: $('#btn-lock-user'), + // btn_unlock_user: $('#btn-unlock-user'), + btn_remove_group: $('#btn-remove-group'), + + chkbox_user_list_select_all: $('#table-user-list-select-all') + }; + + cb_stack + .add($app.create_controls) + .add($app.load_role_list); + + cb_stack.exec(); +}; + +//=================================== +// 创建页面控件对象 +//=================================== +$app.create_controls = function (cb_stack) { + + //------------------------------- + // 用户组列表表格 + //------------------------------- + var table_groups_options = { + dom_id: 'table-groups', + data_source: { + type: 'ajax-post', + url: '/asset/get-account-groups-with-member' + }, + column_default: {sort: false, align: 'left'}, + columns: [ + { + // title: '', + title: '', + key: 'chkbox', + sort: false, + width: 36, + align: 'center', + render: 'make_check_box', + fields: {id: 'id'} + }, + { + title: "账号组", + key: "name", + sort: true, + width: 240, + header_render: 'filter_group_search', + render: 'group_info', + fields: {id: 'id', name: 'name', desc: 'desc'} + }, + { + title: "成员数", + key: "member_count", + width: 20, + align: 'center', + // sort: true, + // header_render: 'filter_role', + render: 'member_count', + fields: {member_count: 'member_count'} + }, + { + title: "成员账号", + key: "members", + // width: 200, + // sort: true, + // header_render: 'filter_role', + render: 'members', + fields: {id: 'id', member_count: 'member_count', members: 'members'} + }, + { + title: '操作', + key: 'actions', + width: 120, + align: 'center', + render: 'make_action_btn', + fields: {id: 'id'} + } + // { + // title: "状态", + // key: "state", + // sort: true, + // width: 120, + // align: 'center', + // header_render: 'filter_user_state', + // render: 'user_state', + // fields: {state: 'state'} + // } + ], + + // 重载回调函数 + on_header_created: $app.on_table_groups_header_created, + on_render_created: $app.on_table_groups_render_created, + on_cell_created: $app.on_table_groups_cell_created + }; + + $app.table_groups = $tp.create_table(table_groups_options); + cb_stack + .add($app.table_groups.load_data) + .add($app.table_groups.init); + + //------------------------------- + // 用户组列表相关过滤器 + //------------------------------- + $app.table_groups_filter_search_user = $tp.create_table_header_filter_search($app.table_groups, { + name: 'search_group', + place_holder: '搜索:账号组名称/描述' + }); + // $app.table_groups_role_filter = $tp.create_table_filter_role($app.table_groups, $app.role_list); + // $app.table_groups_user_state_filter = $tp.create_table_filter_user_state($app.table_groups, $app.user_states); + // 从cookie中读取用户分页限制的选择 + var _per_page = Cookies.get($app.page_id('acc_group_list') + '_per_page'); + $app.table_groups_paging = $tp.create_table_paging($app.table_groups, 'table-groups-paging', + { + per_page: _per_page, + on_per_page_changed: function (per_page) { + Cookies.set($app.page_id('acc_group_list') + '_per_page', per_page, {expires: 365}); + } + }); + $app.table_groups_pagination = $tp.create_table_pagination($app.table_groups, 'table-groups-pagination'); + + + //------------------------------- + // 对话框 + //------------------------------- + $app.dlg_edit_group = $app.create_dlg_edit_group(); + cb_stack.add($app.dlg_edit_group.init); + + //------------------------------- + // 页面控件事件绑定 + //------------------------------- + $app.dom.btn_create_group.click(function () { + // $app.dom.dlg_edit_user.modal(); + $app.dlg_edit_group.show_create(); + }); + $app.dom.btn_refresh_groups.click(function () { + $app.table_groups.load_data(); + }); + $app.dom.chkbox_groups_select_all.click(function () { + var _objects = $('#' + $app.table_groups.dom_id + ' tbody').find('[data-check-box]'); + if ($(this).is(':checked')) { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', true); + }); + } else { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', false); + }); + } + }); + // $app.dom.btn_edit_user.click($app.on_btn_edit_user_click); + // $app.dom.btn_lock_user.click($app.on_btn_lock_user_click); + // $app.dom.btn_unlock_user.click($app.on_btn_unlock_user_click); + $app.dom.btn_remove_group.click(function(){ + $app.on_btn_remove_group_click(); + }); + + cb_stack.exec(); +}; + +$app.on_table_groups_cell_created = function (tbl, row_id, col_key, cell_obj) { + if (col_key === 'chkbox') { + cell_obj.find('[data-check-box]').click(function () { + $app.check_groups_all_selected(); + }); + } else if (col_key === 'actions') { + var _row_id = row_id; + cell_obj.find('[data-btn-edit]').click(function () { + $app.dlg_edit_group.show_edit(_row_id); + }); + cell_obj.find('[data-btn-remove]').click(function () { + console.log(_row_id); + $app.on_btn_remove_group_click(_row_id); + }); + } +}; + +$app.check_groups_all_selected = function () { + var _all_checked = true; + var _objs = $('#' + $app.table_groups.dom_id + ' tbody').find('[data-check-box]'); + $.each(_objs, function (i, _obj) { + if (!$(_obj).is(':checked')) { + _all_checked = false; + return false; + } + }); + + if (_all_checked) { + $app.dom.chkbox_groups_select_all.prop('checked', true); + } else { + $app.dom.chkbox_groups_select_all.prop('checked', false); + } +}; + +$app.on_table_groups_render_created = function (render) { + render.filter_group_search = function (header, title, col) { + var _ret = ['
    ']; + _ret.push('
    '); + _ret.push('
    ' + title + '
    '); + + // 表格内嵌过滤器的DOM实体在这时生成 + var filter_ctrl = header._table_ctrl.get_filter_ctrl('search_group'); + _ret.push(filter_ctrl.render()); + + _ret.push('
    '); + + return _ret.join(''); + }; + + render.make_check_box = function (row_id, fields) { + return ''; + }; + + render.group_info = function (row_id, fields) { + return '' + fields.name + '
    ' + fields.desc + '
    ' + // +'
    编辑
    ' + ; + }; + + render.members = function (row_id, fields) { + if (_.isUndefined(fields.members)) + return ''; + + console.log(fields.members); + + var ret = []; + for (var i = 0; i < fields.members.length; ++i) { + ret.push('
    '); + ret.push(fields.members[i].username+'@'+fields.members[i].host_ip); + ret.push('
    '); + } + + if (fields.member_count > 5) { + ret.push('
    '); + ret.push('...更多 '); + ret.push('
    '); + } + + return ret.join(''); + }; + + render.member_count = function (row_id, fields) { + return '' + fields.member_count; + }; + + render.make_action_btn = function (row_id, fields) { + var ret = []; + ret.push('
    '); + ret.push(' 编辑'); + ret.push(' 删除'); + ret.push('
    '); + return ret.join(''); + }; +}; + +$app.on_table_groups_header_created = function (header) { + $app.dom.btn_table_groups_reset_filter = $('#' + header._table_ctrl.dom_id + ' a[data-reset-filter]'); + $app.dom.btn_table_groups_reset_filter.click(function () { + CALLBACK_STACK.create() + .add(header._table_ctrl.load_data) + .add(header._table_ctrl.reset_filters) + .exec(); + }); + + // 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行) + header._table_ctrl.get_filter_ctrl('search_group').on_created(); +}; + +$app.get_selected_group = function (tbl) { + var groups = []; + var _objs = $('#' + $app.table_groups.dom_id + ' tbody tr td input[data-check-box]'); + $.each(_objs, function (i, _obj) { + if ($(_obj).is(':checked')) { + var _row_data = tbl.get_row(_obj); + groups.push(_row_data); + } + }); + return groups; +}; + +$app.on_btn_remove_group_click = function (_row_id) { + var group_list = []; + + if (_.isUndefined(_row_id)) { + var groups = $app.get_selected_group($app.table_groups); + if (groups.length === 0) { + $tp.notify_error('请选择要删除的用户组!'); + return; + } + + $.each(groups, function (i, g) { + group_list.push(g.id); + }); + } else { + var _row_data = $app.table_groups.get_row(_row_id); + group_list.push(_row_data.id); + } + + var _fn_sure = function (cb_stack, cb_args) { + $tp.ajax_post_json('/group/remove', {gtype: TP_GROUP_ACCOUNT, glist: group_list}, + function (ret) { + if (ret.code === TPE_OK) { + $app.table_groups.load_data(); + $tp.notify_success('删除分组操作成功!'); + } else { + $tp.notify_error('删除分组操作失败:' + tp_error_msg(ret.code, ret.message)); + } + + cb_stack.exec(); + }, + function () { + $tp.notify_error('网络故障,删除分组操作失败!'); + cb_stack.exec(); + } + ); + }; + + var cb_stack = CALLBACK_STACK.create(); + var _msg_remove = '您确定要移除此分组吗?'; + if(group_list.length > 1) + _msg_remove = '您确定要移除选定的 ' + group_list.length + '个 分组吗?'; + $tp.dlg_confirm(cb_stack, { + msg: '

    注意:删除操作不可恢复!!

    删除分组将同时删除所有分配给此分组成员的授权!

    删除分组不会删除组内的成员账号!

    ' + _msg_remove + '

    ', + fn_yes: _fn_sure + }); + +}; + +$app.create_dlg_edit_group = function () { + var dlg = {}; + dlg.dom_id = 'dlg-edit-group'; + dlg.field_id = -1; // 用户id(仅编辑模式) + dlg.field_name = ''; + dlg.field_desc = ''; + + dlg.dom = { + dialog: $('#' + dlg.dom_id), + dlg_title: $('#' + dlg.dom_id + ' [data-field="dlg-title"]'), + edit_name: $('#edit-group-name'), + edit_desc: $('#edit-group-desc'), + msg: $('#edit-group-message'), + btn_save: $('#btn-edit-group-save') + }; + + dlg.init = function (cb_stack) { + dlg.dom.btn_save.click(dlg.on_save); + + cb_stack.exec(); + }; + + dlg.init_fields = function (g) { + if (_.isUndefined(g)) { + dlg.field_id = -1; + dlg.dom.dlg_title.html('创建账号分组'); + + dlg.dom.edit_name.val(''); + dlg.dom.edit_desc.val(''); + } else { + dlg.field_id = g.id; + dlg.dom.dlg_title.html('编辑:' + g.name); + + dlg.dom.edit_name.val(g.name); + dlg.dom.edit_desc.val(g.desc); + } + }; + + dlg.show_create = function () { + dlg.init_fields(); + dlg.dom.dialog.modal({backdrop: 'static'}); + }; + + dlg.show_edit = function (row_id) { + var g = $app.table_groups.get_row(row_id); + dlg.init_fields(g); + dlg.dom.dialog.modal({backdrop: 'static'}); + }; + + dlg.show_error = function (error) { + dlg.dom.msg.removeClass().addClass('alert alert-danger').html(error).show(); + }; + dlg.hide_error = function () { + dlg.dom.msg.hide(); + }; + + dlg.check_input = function () { + dlg.field_name = dlg.dom.edit_name.val(); + dlg.field_desc = dlg.dom.edit_desc.val(); + + if (dlg.field_name.length === 0) { + dlg.dom.edit_name.focus(); + dlg.show_error('请指定用户组名称!'); + return false; + } + + return true; + }; + + dlg.on_save = function () { + console.log('---save.'); + dlg.hide_error(); + if (!dlg.check_input()) + return; + + var action = (dlg.field_id === -1) ? '创建' : '更新'; + + // 如果id为-1表示创建,否则表示更新 + $tp.ajax_post_json('/group/update', { + gtype: TP_GROUP_ACCOUNT, + gid: dlg.field_id, + name: dlg.field_name, + desc: dlg.field_desc + }, + function (ret) { + if (ret.code === TPE_OK) { + $tp.notify_success('账号分组' + action + '成功!'); + $app.table_groups.load_data(); + dlg.dom.dialog.modal('hide'); + } else { + $tp.notify_error('账号分组' + action + '失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,账号分组' + action + '失败!'); + } + ); + + }; + + return dlg; +}; diff --git a/server/www/teleport/static/js/asset/host-group-info.js b/server/www/teleport/static/js/asset/host-group-info.js new file mode 100644 index 0000000..9dd744f --- /dev/null +++ b/server/www/teleport/static/js/asset/host-group-info.js @@ -0,0 +1,585 @@ +"use strict"; + +$app.on_init = function (cb_stack) { + $app.dom = { + btn_refresh_members: $('#btn-refresh-members'), + btn_add_members: $('#btn-add-members'), + chkbox_members_select_all: $('#table-members-select-all'), + btn_remove_members: $('#btn-remove-members'), + + chkbox_host_select_all: $('#table-host-select-all') + }; + + if ($app.options.group_id !== 0) { + cb_stack.add($app.create_controls); + } + + cb_stack.exec(); +}; + +//=================================== +// 创建页面控件对象 +//=================================== +$app.create_controls = function (cb_stack) { + + //------------------------------- + // 成员列表表格 + //------------------------------- + var table_members_options = { + dom_id: 'table-members', + data_source: { + type: 'ajax-post', + url: '/asset/get-hosts', + restrict: {'group_id': $app.options.group_id} // 限定仅包含指定的成员 + // exclude: {'user_id':[6]} // 排除指定成员 + }, + column_default: {sort: false, align: 'left'}, + columns: [ + { + // title: '', + title: '', + key: 'chkbox', + sort: false, + width: 36, + align: 'center', + render: 'make_check_box', + fields: {id: 'id'} + }, + { + title: "主机", + key: "ip", + sort: true, + // width: 240, + header_render: 'filter_search', + render: 'host_info', + fields: {id: 'id', ip: 'ip', name: 'name', router_ip: 'router_ip', router_port: 'router_port'} + }, + { + title: "系统", + key: "os_type", + width: 36, + align: 'center', + sort: true, + render: 'os_type', + fields: {os_type: 'os_type'} + }, + { + title: "资产编号", + key: "cid", + sort: true, + // width: 80, + // align: 'center', + //render: 'auth_type', + fields: {cid: 'cid'} + }, + { + title: "状态", + key: "state", + sort: true, + width: 90, + align: 'center', + render: 'host_state', + fields: {state: 'state'} + } + ], + + // 重载回调函数 + on_header_created: $app.on_table_members_header_created, + on_render_created: $app.on_table_members_render_created, + on_cell_created: $app.on_table_members_cell_created + }; + + $app.table_members = $tp.create_table(table_members_options); + cb_stack + .add($app.table_members.load_data) + .add($app.table_members.init); + + //------------------------------- + // 成员列表相关过滤器 + //------------------------------- + $tp.create_table_header_filter_search($app.table_members, { + name: 'search', + place_holder: '搜索:主机名称/IP/等等...' + }); + // 从cookie中读取用户分页限制的选择 + $tp.create_table_paging($app.table_members, 'table-members-paging', + { + per_page: Cookies.get($app.page_id('host_group_info') + '_member_per_page'), + on_per_page_changed: function (per_page) { + Cookies.set($app.page_id('host_group_info') + '_member_per_page', per_page, {expires: 365}); + } + }); + $tp.create_table_pagination($app.table_members, 'table-members-pagination'); + + //------------------------------- + // 选择成员表格 + //------------------------------- + var table_host_options = { + dom_id: 'table-host', + data_source: { + type: 'ajax-post', + url: '/asset/get-hosts', + exclude: {'group_id': $app.options.group_id} // 排除指定成员 + }, + column_default: {sort: false, align: 'left'}, + columns: [ + { + // title: '', + title: '', + key: 'chkbox', + sort: false, + width: 36, + align: 'center', + render: 'make_check_box', + fields: {id: 'id'} + }, + { + title: "主机", + key: "ip", + sort: true, + // width: 240, + header_render: 'filter_search', + render: 'host_info', + fields: {id: 'id', ip: 'ip', name: 'name', router_ip: 'router_ip', router_port: 'router_port'} + }, + { + title: "系统", + key: "os_type", + width: 36, + align: 'center', + sort: true, + render: 'os_type', + fields: {os_type: 'os_type'} + }, + { + title: "资产编号", + key: "cid", + sort: true, + // width: 80, + // align: 'center', + //render: 'auth_type', + fields: {cid: 'cid'} + }, + { + title: "状态", + key: "state", + sort: true, + width: 90, + align: 'center', + render: 'host_state', + fields: {state: 'state'} + } + ], + + // 重载回调函数 + on_header_created: $app.on_table_acc_header_created, + on_render_created: $app.on_table_acc_render_created, + on_cell_created: $app.on_table_acc_cell_created + }; + + $app.table_host = $tp.create_table(table_host_options); + cb_stack + .add($app.table_host.load_data) + .add($app.table_host.init); + + //------------------------------- + // 用户列表相关过滤器 + //------------------------------- + $tp.create_table_header_filter_search($app.table_host, { + name: 'search', + place_holder: '搜索:主机名称/IP/等等...' + }); + // 从cookie中读取用户分页限制的选择 + $tp.create_table_paging($app.table_host, 'table-host-paging', + { + per_page: Cookies.get($app.page_id('host_group_info') + '_sel_member_per_page'), + on_per_page_changed: function (per_page) { + Cookies.set($app.page_id('host_group_info') + '_sel_member_per_page', per_page, {expires: 365}); + } + }); + $tp.create_table_pagination($app.table_host, 'table-host-pagination'); + + //------------------------------- + // 对话框 + //------------------------------- + $app.dlg_select_members = $app.create_dlg_select_members(); + cb_stack.add($app.dlg_select_members.init); + + //------------------------------- + // 页面控件事件绑定 + //------------------------------- + $app.dom.btn_add_members.click(function () { + $app.dlg_select_members.show(); + }); + $app.dom.btn_refresh_members.click(function () { + $app.table_members.load_data(); + }); + $app.dom.chkbox_members_select_all.click(function () { + var _objects = $('#' + $app.table_members.dom_id + ' tbody').find('[data-check-box]'); + if ($(this).is(':checked')) { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', true); + }); + } else { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', false); + }); + } + }); + + $app.dom.btn_remove_members.click(function () { + $app.on_btn_remove_members_click(); + }); + + $app.dom.chkbox_host_select_all.click(function () { + var _objects = $('#' + $app.table_host.dom_id + ' tbody').find('[data-check-box]'); + if ($(this).is(':checked')) { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', true); + }); + } else { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', false); + }); + } + }); + + cb_stack.exec(); +}; + +$app.on_table_members_cell_created = function (tbl, row_id, col_key, cell_obj) { + if (col_key === 'chkbox') { + cell_obj.find('[data-check-box]').click(function () { + $app.check_members_all_selected(); + }); + } +}; + +$app.check_members_all_selected = function (cb_stack) { + var _all_checked = true; + var _objs = $('#' + $app.table_members.dom_id + ' tbody').find('[data-check-box]'); + $.each(_objs, function (i, _obj) { + if (!$(_obj).is(':checked')) { + _all_checked = false; + return false; + } + }); + + if (_all_checked) { + $app.dom.chkbox_members_select_all.prop('checked', true); + } else { + $app.dom.chkbox_members_select_all.prop('checked', false); + } + + if (cb_stack) + cb_stack.exec(); +}; + +$app._add_common_render = function (render) { + render.filter_search = function (header, title, col) { + var _ret = ['
    ']; + _ret.push('
    '); + _ret.push('
    ' + title + '
    '); + + // 表格内嵌过滤器的DOM实体在这时生成 + var filter_ctrl = header._table_ctrl.get_filter_ctrl('search'); + _ret.push(filter_ctrl.render()); + + _ret.push('
    '); + + return _ret.join(''); + }; + + render.make_check_box = function (row_id, fields) { + return ''; + }; + + render.host_info = function (row_id, fields) { + var ret = []; + + var name = fields.name; + if (name.length === 0) + name = fields.ip; + var ip = fields.ip; + ret.push('' + name + ' [' + ip + ']'); + if (fields.router_ip.length > 0) + ret.push(' '); + + return ret.join(''); + }; + + render.protocol = function (row_id, fields) { + switch (fields.protocol_type) { + case TP_PROTOCOL_TYPE_RDP: + return ' RDP'; + case TP_PROTOCOL_TYPE_SSH: + return ' SSH'; + case TP_PROTOCOL_TYPE_TELNET: + return ' TELNET'; + default: + return ' 未设置'; + } + }; + + render.auth_type = function (row_id, fields) { + switch (fields.auth_type) { + case TP_AUTH_TYPE_NONE: + return ''; + case TP_AUTH_TYPE_PASSWORD: + return '密码'; + case TP_AUTH_TYPE_PRIVATE_KEY: + return '私钥'; + default: + return '未设置'; + } + }; + + render.host_state = function (row_id, fields) { + var _style, _state; + + for (var i = 0; i < $app.obj_states.length; ++i) { + if ($app.obj_states[i].id === fields.state) { + _style = $app.obj_states[i].style; + _state = $app.obj_states[i].name; + break; + } + } + if (i === $app.obj_states.length) { + _style = 'info'; + _state = ' 未知'; + } + + return '' + _state + '' + }; +}; + +$app.on_table_members_render_created = function (render) { + $app._add_common_render(render); +}; + +$app.on_table_members_header_created = function (header) { + $('#' + header._table_ctrl.dom_id + ' a[data-reset-filter]').click(function () { + CALLBACK_STACK.create() + .add(header._table_ctrl.load_data) + .add(header._table_ctrl.reset_filters) + .exec(); + }); + + // 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行) + header._table_ctrl.get_filter_ctrl('search').on_created(); + // header._table_ctrl.get_filter_ctrl('role').on_created(); + // header._table_ctrl.get_filter_ctrl('account_state').on_created(); +}; + +$app.on_table_acc_cell_created = function (tbl, row_id, col_key, cell_obj) { + if (col_key === 'chkbox') { + cell_obj.find('[data-check-box]').click(function () { + $app.check_users_all_selected(); + }); + } +}; + +$app.check_users_all_selected = function (cb_stack) { + var _all_checked = true; + var _objs = $('#' + $app.table_host.dom_id + ' tbody').find('[data-check-box]'); + if (_objs.length === 0) { + _all_checked = false; + } else { + $.each(_objs, function (i, _obj) { + if (!$(_obj).is(':checked')) { + _all_checked = false; + return false; + } + }); + } + + if (_all_checked) { + $app.dom.chkbox_host_select_all.prop('checked', true); + } else { + $app.dom.chkbox_host_select_all.prop('checked', false); + } + + if (cb_stack) + cb_stack.exec(); +}; + +$app.on_table_acc_render_created = function (render) { + // render.filter_role = function (header, title, col) { + // var _ret = ['
    ']; + // _ret.push('
    '); + // _ret.push('
    ' + title + '
    '); + // + // // 表格内嵌过滤器的DOM实体在这时生成 + // var filter_ctrl = header._table_ctrl.get_filter_ctrl('role'); + // _ret.push(filter_ctrl.render()); + // + // _ret.push('
    '); + // + // return _ret.join(''); + // }; + + // render.filter_user_state = function (header, title, col) { + // var _ret = ['
    ']; + // _ret.push('
    '); + // _ret.push('
    ' + title + '
    '); + // + // // 表格内嵌过滤器的DOM实体在这时生成 + // var filter_ctrl = header._table_ctrl.get_filter_ctrl('user_state'); + // _ret.push(filter_ctrl.render()); + // + // _ret.push('
    '); + // + // return _ret.join(''); + // }; + + // render.filter_search = function (header, title, col) { + // var _ret = ['
    ']; + // _ret.push('
    '); + // _ret.push('
    ' + title + '
    '); + // + // // 表格内嵌过滤器的DOM实体在这时生成 + // var filter_ctrl = header._table_ctrl.get_filter_ctrl('search'); + // _ret.push(filter_ctrl.render()); + // + // _ret.push('
    '); + // + // return _ret.join(''); + // }; + // + // render.make_check_box = function (row_id, fields) { + // return ''; + // }; + + $app._add_common_render(render); +}; + +$app.on_table_acc_header_created = function (header) { + $('#' + header._table_ctrl.dom_id + ' a[data-reset-filter]').click(function () { + CALLBACK_STACK.create() + .add(header._table_ctrl.load_data) + .add(header._table_ctrl.reset_filters) + .exec(); + }); + + // 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行) + header._table_ctrl.get_filter_ctrl('search').on_created(); +}; + +$app.get_selected_members = function (tbl) { + var members = []; + var _objs = $('#' + $app.table_members.dom_id + ' tbody tr td input[data-check-box]'); + $.each(_objs, function (i, _obj) { + if ($(_obj).is(':checked')) { + var _row_data = tbl.get_row(_obj); + members.push(_row_data); + } + }); + + return members; +}; + +$app.on_btn_remove_members_click = function () { + var members = $app.get_selected_members($app.table_members); + if (members.length === 0) { + $tp.notify_error('请选择要移除的成员主机!'); + return; + } + + var member_list = []; + $.each(members, function (i, m) { + member_list.push(m.id); + }); + + var _fn_sure = function (cb_stack, cb_args) { + $tp.ajax_post_json('/group/remove-members', {gtype: TP_GROUP_HOST, gid: $app.options.group_id, members: member_list}, + function (ret) { + if (ret.code === TPE_OK) { + cb_stack + .add($app.check_members_all_selected) + .add($app.table_members.load_data); + $tp.notify_success('移除成员主机操作成功!'); + } else { + $tp.notify_error('移除成员主机操作失败:' + tp_error_msg(ret.code, ret.message)); + } + + cb_stack.exec(); + }, + function () { + $tp.notify_error('网络故障,移除成员主机操作失败!'); + cb_stack.exec(); + } + ); + }; + + var cb_stack = CALLBACK_STACK.create(); + $tp.dlg_confirm(cb_stack, { + msg: '
    移除组内成员不会删除主机!

    您确定要移除所有选定的 ' + member_list.length + '个 成员主机吗?

    ', + fn_yes: _fn_sure + }); + +}; + +$app.create_dlg_select_members = function () { + var dlg = {}; + dlg.dom_id = 'dlg-select-members'; + dlg.field_id = -1; + dlg.field_name = ''; + dlg.field_desc = ''; + + dlg.dom = { + dialog: $('#' + dlg.dom_id), + btn_add: $('#btn-add-to-group') + }; + + dlg.init = function (cb_stack) { + dlg.dom.btn_add.click(dlg.on_add); + cb_stack.exec(); + }; + + dlg.show = function () { + // dlg.init_fields(); + // $app.table_host.load_data(); + dlg.dom.dialog.modal(); + }; + + dlg.get_selected_items = function () { + var items = []; + var _objs = $('#' + dlg.dom_id + ' tbody tr td input[data-check-box]'); + $.each(_objs, function (i, _obj) { + if ($(_obj).is(':checked')) { + var _row_data = $app.table_host.get_row(_obj); + items.push(_row_data.id); + } + }); + + return items; + }; + + dlg.on_add = function () { + var items = dlg.get_selected_items(); + console.log('items:', items); + + // 如果id为-1表示创建,否则表示更新 + $tp.ajax_post_json('/group/add-members', { + gtype: TP_GROUP_HOST, + gid: $app.options.group_id, + members: items + }, + function (ret) { + if (ret.code === TPE_OK) { + $tp.notify_success('主机成员添加成功!'); + $app.table_members.load_data(); + $app.table_host.load_data(); + } else { + $tp.notify_error('主机成员添加失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,主机成员添加失败!'); + } + ); + + }; + + return dlg; +}; diff --git a/server/www/teleport/static/js/asset/host-group-list.js b/server/www/teleport/static/js/asset/host-group-list.js new file mode 100644 index 0000000..232aa06 --- /dev/null +++ b/server/www/teleport/static/js/asset/host-group-list.js @@ -0,0 +1,543 @@ +"use strict"; + +$app.on_init = function (cb_stack) { + $app.dom = { + btn_refresh_groups: $('#btn-refresh-groups'), + btn_create_group: $('#btn-create-group'), + chkbox_groups_select_all: $('#table-groups-select-all'), + + btn_lock_group: $('#btn-lock-group'), + btn_unlock_group: $('#btn-unlock-group'), + btn_remove_group: $('#btn-remove-group') + }; + + cb_stack + .add($app.create_controls) + .add($app.load_role_list); + + cb_stack.exec(); +}; + +//=================================== +// 创建页面控件对象 +//=================================== +$app.create_controls = function (cb_stack) { + + //------------------------------- + // 用户组列表表格 + //------------------------------- + var table_groups_options = { + dom_id: 'table-groups', + data_source: { + type: 'ajax-post', + url: '/asset/get-host-groups-with-member' + }, + column_default: {sort: false, align: 'left'}, + columns: [ + { + // title: '', + title: '', + key: 'chkbox', + sort: false, + width: 36, + align: 'center', + render: 'make_check_box', + fields: {id: 'id'} + }, + { + title: "主机组", + key: "name", + sort: true, + width: 240, + header_render: 'filter_search', + render: 'group_info', + fields: {id: 'id', name: 'name', desc: 'desc'} + }, + { + title: "成员数", + key: "member_count", + width: 20, + align: 'center', + // sort: true, + // header_render: 'filter_role', + //render: 'member_count', + fields: {member_count: 'member_count'} + }, + { + title: "成员主机", + key: "members", + // width: 200, + // sort: true, + // header_render: 'filter_role', + render: 'members', + fields: {id: 'id', member_count: 'member_count', members: 'members'} + }, + { + title: "状态", + key: "state", + sort: true, + width: 90, + align: 'center', + header_render: 'filter_state', + render: 'group_state', + fields: {state: 'state'} + }, + { + title: '操作', + key: 'actions', + width: 120, + align: 'center', + render: 'make_action_btn', + fields: {id: 'id'} + } + ], + + // 重载回调函数 + on_header_created: $app.on_table_groups_header_created, + on_render_created: $app.on_table_groups_render_created, + on_cell_created: $app.on_table_groups_cell_created + }; + + $app.table_groups = $tp.create_table(table_groups_options); + cb_stack + .add($app.table_groups.load_data) + .add($app.table_groups.init); + + //------------------------------- + // 用户组列表相关过滤器 + //------------------------------- + $tp.create_table_header_filter_search($app.table_groups, { + name: 'search', + place_holder: '搜索:账号组名称/描述' + }); + $tp.create_table_header_filter_state($app.table_groups, 'state', $app.obj_states, [TP_STATE_LOCKED]); + $tp.create_table_paging($app.table_groups, 'table-groups-paging', + { + per_page: Cookies.get($app.page_id('acc_group_list') + '_per_page'), + on_per_page_changed: function (per_page) { + Cookies.set($app.page_id('acc_group_list') + '_per_page', per_page, {expires: 365}); + } + }); + $tp.create_table_pagination($app.table_groups, 'table-groups-pagination'); + + + //------------------------------- + // 对话框 + //------------------------------- + $app.dlg_edit_group = $app.create_dlg_edit_group(); + cb_stack.add($app.dlg_edit_group.init); + + //------------------------------- + // 页面控件事件绑定 + //------------------------------- + $app.dom.btn_create_group.click(function () { + // $app.dom.dlg_edit_user.modal(); + $app.dlg_edit_group.show_create(); + }); + $app.dom.btn_refresh_groups.click(function () { + $app.table_groups.load_data(); + }); + $app.dom.chkbox_groups_select_all.click(function () { + var _objects = $('#' + $app.table_groups.dom_id + ' tbody').find('[data-check-box]'); + if ($(this).is(':checked')) { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', true); + }); + } else { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', false); + }); + } + }); + // $app.dom.btn_edit_user.click($app.on_btn_edit_user_click); + $app.dom.btn_lock_group.click(function () { + $app.on_btn_lock_group_click(); + }); + $app.dom.btn_unlock_group.click(function () { + $app.on_btn_unlock_group_click(); + }); + $app.dom.btn_remove_group.click(function () { + $app.on_btn_remove_group_click(); + }); + + cb_stack.exec(); +}; + +$app.on_table_groups_cell_created = function (tbl, row_id, col_key, cell_obj) { + if (col_key === 'chkbox') { + cell_obj.find('[data-check-box]').click(function () { + $app.check_groups_all_selected(); + }); + } else if (col_key === 'actions') { + var _row_id = row_id; + cell_obj.find('[data-btn-edit]').click(function () { + $app.dlg_edit_group.show_edit(_row_id); + }); + cell_obj.find('[data-btn-remove]').click(function () { + console.log(_row_id); + $app.on_btn_remove_group_click(_row_id); + }); + } +}; + +$app.check_groups_all_selected = function () { + var _all_checked = true; + var _objs = $('#' + $app.table_groups.dom_id + ' tbody').find('[data-check-box]'); + $.each(_objs, function (i, _obj) { + if (!$(_obj).is(':checked')) { + _all_checked = false; + return false; + } + }); + + if (_all_checked) { + $app.dom.chkbox_groups_select_all.prop('checked', true); + } else { + $app.dom.chkbox_groups_select_all.prop('checked', false); + } +}; + +$app.on_table_groups_render_created = function (render) { + render.filter_search = function (header, title, col) { + var _ret = ['
    ']; + _ret.push('
    '); + _ret.push('
    ' + title + '
    '); + + // 表格内嵌过滤器的DOM实体在这时生成 + var filter_ctrl = header._table_ctrl.get_filter_ctrl('search'); + _ret.push(filter_ctrl.render()); + + _ret.push('
    '); + + return _ret.join(''); + }; + + render.filter_state = function (header, title, col) { + var _ret = ['
    ']; + _ret.push('
    '); + _ret.push('
    ' + title + '
    '); + + // 表格内嵌过滤器的DOM实体在这时生成 + var filter_ctrl = header._table_ctrl.get_filter_ctrl('state'); + _ret.push(filter_ctrl.render()); + + _ret.push('
    '); + + return _ret.join(''); + }; + + render.group_state = function (row_id, fields) { + var _style, _state; + + for (var i = 0; i < $app.obj_states.length; ++i) { + if ($app.obj_states[i].id === fields.state) { + _style = $app.obj_states[i].style; + _state = $app.obj_states[i].name; + break; + } + } + if (i === $app.obj_states.length) { + _style = 'info'; + _state = ' 未知'; + } + + return '' + _state + '' + }; + + render.make_check_box = function (row_id, fields) { + return ''; + }; + + render.group_info = function (row_id, fields) { + return '' + fields.name + '
    ' + fields.desc + '
    ' + // +'
    编辑
    ' + ; + }; + + render.members = function (row_id, fields) { + if (_.isUndefined(fields.members)) + return ''; + + console.log('xxx', fields.members); + + var ret = []; + for (var i = 0; i < fields.members.length; ++i) { + ret.push('
    '); + if (fields.members[i].name.length === 0) + ret.push(fields.members[i].ip); + else + ret.push(fields.members[i].name + ' [' + fields.members[i].ip + ']'); + ret.push('
    '); + } + + if (fields.member_count > 5) { + ret.push('
    '); + ret.push('...更多 '); + ret.push('
    '); + } + + return ret.join(''); + }; + + render.member_count = function (row_id, fields) { + return '' + fields.member_count; + }; + + render.make_action_btn = function (row_id, fields) { + var ret = []; + ret.push('
    '); + ret.push(' 编辑'); + ret.push(' 删除'); + ret.push('
    '); + return ret.join(''); + }; +}; + +$app.on_table_groups_header_created = function (header) { + $('#' + header._table_ctrl.dom_id + ' a[data-reset-filter]').click(function () { + CALLBACK_STACK.create() + .add(header._table_ctrl.load_data) + .add(header._table_ctrl.reset_filters) + .exec(); + }); + + // 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行) + header._table_ctrl.get_filter_ctrl('search').on_created(); + header._table_ctrl.get_filter_ctrl('state').on_created(); +}; + +$app.get_selected_group = function (tbl) { + var groups = []; + var _objs = $('#' + $app.table_groups.dom_id + ' tbody tr td input[data-check-box]'); + $.each(_objs, function (i, _obj) { + if ($(_obj).is(':checked')) { + var _row_data = tbl.get_row(_obj); + groups.push(_row_data); + } + }); + return groups; +}; + +$app.on_btn_lock_group_click = function (_row_id) { + var group_list = []; + + if (_.isUndefined(_row_id)) { + var groups = $app.get_selected_group($app.table_groups); + if (groups.length === 0) { + $tp.notify_error('请选择要禁用的分组!'); + return; + } + + $.each(groups, function (i, g) { + group_list.push(g.id); + }); + } else { + var _row_data = $app.table_groups.get_row(_row_id); + group_list.push(_row_data.id); + } + + $tp.ajax_post_json('/group/lock', {gtype: TP_GROUP_HOST, glist: group_list}, + function (ret) { + if (ret.code === TPE_OK) { + $app.table_groups.load_data(); + $tp.notify_success('禁用分组操作成功!'); + } else { + $tp.notify_error('禁用分组操作失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,禁用分组操作失败!'); + } + ); + +}; + +$app.on_btn_unlock_group_click = function (_row_id) { + var group_list = []; + + if (_.isUndefined(_row_id)) { + var groups = $app.get_selected_group($app.table_groups); + if (groups.length === 0) { + $tp.notify_error('请选择要解禁的分组!'); + return; + } + + $.each(groups, function (i, g) { + group_list.push(g.id); + }); + } else { + var _row_data = $app.table_groups.get_row(_row_id); + group_list.push(_row_data.id); + } + + $tp.ajax_post_json('/group/unlock', {gtype: TP_GROUP_HOST, glist: group_list}, + function (ret) { + if (ret.code === TPE_OK) { + $app.table_groups.load_data(); + $tp.notify_success('分组解禁操作成功!'); + } else { + $tp.notify_error('分组解禁操作失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,分组解禁操作失败!'); + } + ); + +}; + +$app.on_btn_remove_group_click = function (_row_id) { + var group_list = []; + + if (_.isUndefined(_row_id)) { + var groups = $app.get_selected_group($app.table_groups); + if (groups.length === 0) { + $tp.notify_error('请选择要删除的分组!'); + return; + } + + $.each(groups, function (i, g) { + group_list.push(g.id); + }); + } else { + var _row_data = $app.table_groups.get_row(_row_id); + group_list.push(_row_data.id); + } + + var _fn_sure = function (cb_stack, cb_args) { + $tp.ajax_post_json('/group/remove', {gtype: TP_GROUP_HOST, glist: group_list}, + function (ret) { + if (ret.code === TPE_OK) { + $app.table_groups.load_data(); + $tp.notify_success('删除分组操作成功!'); + } else { + $tp.notify_error('删除分组操作失败:' + tp_error_msg(ret.code, ret.message)); + } + + cb_stack.exec(); + }, + function () { + $tp.notify_error('网络故障,删除分组操作失败!'); + cb_stack.exec(); + } + ); + }; + + var cb_stack = CALLBACK_STACK.create(); + var _msg_remove = '您确定要移除此分组吗?'; + if (group_list.length > 1) + _msg_remove = '您确定要移除选定的 ' + group_list.length + '个 分组吗?'; + $tp.dlg_confirm(cb_stack, { + msg: '

    注意:删除操作不可恢复!!

    删除分组将同时删除所有分配给此分组成员的授权!

    删除分组不会删除组内的成员账号!

    ' + _msg_remove + '

    ', + fn_yes: _fn_sure + }); + +}; + +$app.create_dlg_edit_group = function () { + var dlg = {}; + dlg.dom_id = 'dlg-edit-group'; + dlg.field_id = -1; // 用户id(仅编辑模式) + dlg.field_name = ''; + dlg.field_desc = ''; + + dlg.dom = { + dialog: $('#' + dlg.dom_id), + dlg_title: $('#' + dlg.dom_id + ' [data-field="dlg-title"]'), + edit_name: $('#edit-group-name'), + edit_desc: $('#edit-group-desc'), + msg: $('#edit-group-message'), + btn_save: $('#btn-edit-group-save') + }; + + dlg.init = function (cb_stack) { + dlg.dom.btn_save.click(dlg.on_save); + + cb_stack.exec(); + }; + + dlg.init_fields = function (g) { + if (_.isUndefined(g)) { + dlg.field_id = -1; + dlg.dom.dlg_title.html('创建主机分组'); + + dlg.dom.edit_name.val(''); + dlg.dom.edit_desc.val(''); + } else { + dlg.field_id = g.id; + dlg.dom.dlg_title.html('编辑:' + g.name); + + dlg.dom.edit_name.val(g.name); + dlg.dom.edit_desc.val(g.desc); + } + }; + + dlg.show_create = function () { + dlg.init_fields(); + dlg.dom.dialog.modal({backdrop: 'static'}); + }; + + dlg.show_edit = function (row_id) { + var g = $app.table_groups.get_row(row_id); + dlg.init_fields(g); + dlg.dom.dialog.modal({backdrop: 'static'}); + }; + + dlg.show_error = function (error) { + dlg.dom.msg.removeClass().addClass('alert alert-danger').html(error).show(); + }; + dlg.hide_error = function () { + dlg.dom.msg.hide(); + }; + + dlg.check_input = function () { + dlg.field_name = dlg.dom.edit_name.val(); + dlg.field_desc = dlg.dom.edit_desc.val(); + + if (dlg.field_name.length === 0) { + dlg.dom.edit_name.focus(); + dlg.show_error('请指定用户组名称!'); + return false; + } + + return true; + }; + + dlg.on_save = function () { + console.log('---save.'); + dlg.hide_error(); + if (!dlg.check_input()) + return; + + var action = (dlg.field_id === -1) ? '创建' : '更新'; + + // 如果id为-1表示创建,否则表示更新 + $tp.ajax_post_json('/group/update', { + gtype: TP_GROUP_HOST, + gid: dlg.field_id, + name: dlg.field_name, + desc: dlg.field_desc + }, + function (ret) { + if (ret.code === TPE_OK) { + $tp.notify_success('主机分组' + action + '成功!'); + $app.table_groups.load_data(); + dlg.dom.dialog.modal('hide'); + } else { + $tp.notify_error('主机分组' + action + '失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,主机分组' + action + '失败!'); + } + ); + + }; + + return dlg; +}; diff --git a/server/www/teleport/static/js/asset/host-list.js b/server/www/teleport/static/js/asset/host-list.js new file mode 100644 index 0000000..4ada571 --- /dev/null +++ b/server/www/teleport/static/js/asset/host-list.js @@ -0,0 +1,1476 @@ +"use strict"; + +$app.on_init = function (cb_stack) { + $app.dom = { + btn_refresh_host: $('#btn-refresh-host'), + btn_add_user: $('#btn-add-host'), + chkbox_host_select_all: $('#table-host-select-all'), + + btn_lock_host: $('#btn-lock-host'), + btn_unlock_host: $('#btn-unlock-host'), + btn_remove_host: $('#btn-remove-host'), + + dlg_import_asset: $('#dlg-import-asset'), + btn_import_asset: $('#btn-import-asset'), + btn_select_file: $('#btn-select-file'), + btn_do_upload: $('#btn-do-upload-file'), + upload_file_info: $('#upload-file-info'), + upload_file_message: $('#upload-file-message') + }; + + cb_stack + .add($app.create_controls) + .add($app.load_role_list); + + cb_stack.exec(); +}; + +//=================================== +// 创建页面控件对象 +//=================================== +$app.create_controls = function (cb_stack) { + + //------------------------------- + // 资产列表表格 + //------------------------------- + var table_host_options = { + dom_id: 'table-host', + data_source: { + type: 'ajax-post', + url: '/asset/get-hosts' + }, + column_default: {sort: false, align: 'left'}, + columns: [ + { + // title: '', + title: '', + key: 'chkbox', + sort: false, + width: 36, + align: 'center', + render: 'make_check_box', + fields: {id: 'id'} + }, + { + title: '主机', + key: 'ip', + sort: true, + header_render: 'filter_search', + render: 'host_info', + fields: {id: 'id', ip: 'ip', router_ip: 'router_ip', router_port: 'router_port', name: 'name', desc: 'desc'} + }, + { + title: '系统', + key: 'os_type', + align: 'center', + width: 36, + sort: true, + // header_render: 'filter_os', + render: 'os_type', + fields: {os_type: 'os_type'} + }, + { + title: '资产编号', + key: 'cid', + // align: 'center', + // width: 36, + sort: true + // header_render: 'filter_os', + // render: 'sys_type', + // fields: {: 'os'} + }, + { + title: '账号数', + key: 'acc_count', + render: 'account', + fields: {count: 'acc_count'} + }, + { + title: "状态", + key: "state", + sort: true, + width: 90, + align: 'center', + header_render: 'filter_state', + render: 'host_state', + fields: {state: 'state'} + }, + { + title: '', + key: 'action', + sort: false, + align: 'center', + width: 70, + render: 'make_host_action_btn', + fields: {id: 'id', state: 'state'} + } + ], + + // 重载回调函数 + on_header_created: $app.on_table_host_header_created, + on_render_created: $app.on_table_host_render_created, + on_cell_created: $app.on_table_host_cell_created + }; + + $app.table_host = $tp.create_table(table_host_options); + cb_stack + .add($app.table_host.load_data) + .add($app.table_host.init); + + //------------------------------- + // 用户列表相关过滤器 + //------------------------------- + $tp.create_table_header_filter_search($app.table_host, { + name: 'search', + place_holder: '搜索:主机IP/名称/描述/资产编号/等等...' + }); + // $app.table_host_role_filter = $tp.create_table_filter_role($app.table_host, $app.role_list); + // 主机没有“临时锁定”状态,因此要排除掉 + $tp.create_table_header_filter_state($app.table_host, 'state', $app.obj_states, [TP_STATE_LOCKED]); + + // 从cookie中读取用户分页限制的选择 + $tp.create_table_paging($app.table_host, 'table-host-paging', + { + per_page: Cookies.get($app.page_id('asset_host') + '_per_page'), + on_per_page_changed: function (per_page) { + Cookies.set($app.page_id('asset_host') + '_per_page', per_page, {expires: 365}); + } + }); + $tp.create_table_pagination($app.table_host, 'table-host-pagination'); + + //------------------------------- + // 对话框 + //------------------------------- + $app.dlg_edit_host = $app.create_dlg_edit_host(); + cb_stack.add($app.dlg_edit_host.init); + // $app.dlg_host_info = $app.create_dlg_host_info(); + // cb_stack.add($app.dlg_host_info.init); + $app.dlg_accounts = $app.create_dlg_accounts(); + cb_stack.add($app.dlg_accounts.init); + $app.dlg_edit_account = $app.create_dlg_edit_account(); + cb_stack.add($app.dlg_edit_account.init); + + //------------------------------- + // 页面控件事件绑定 + //------------------------------- + $app.dom.btn_add_user.click(function () { + // $app.dom.dlg_edit_user.modal(); + $app.dlg_edit_host.show_add(); + }); + $app.dom.btn_refresh_host.click(function () { + $app.table_host.load_data(); + }); + $app.dom.btn_select_file.click($app.on_btn_select_file_click); + $app.dom.btn_do_upload.click($app.on_btn_do_upload_click); + $app.dom.btn_import_asset.click(function () { + $app.dom.upload_file_info.html('- 尚未选择文件 -'); + $app.dom.btn_do_upload.hide(); + $app.dom.upload_file_message.html('').hide(); + $app.dom.dlg_import_asset.modal({backdrop: 'static'}); + }); + $app.dom.chkbox_host_select_all.click(function () { + console.log('----'); + var _objects = $('#' + $app.table_host.dom_id + ' tbody').find('[data-check-box]'); + if ($(this).is(':checked')) { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', true); + }); + } else { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', false); + }); + } + }); + $app.dom.btn_lock_host.click($app.on_btn_lock_host_click); + $app.dom.btn_unlock_host.click($app.on_btn_unlock_host_click); + $app.dom.btn_remove_host.click($app.on_btn_remove_host_click); + + cb_stack.exec(); +}; + +$app.on_table_host_cell_created = function (tbl, row_id, col_key, cell_obj) { + if (col_key === 'chkbox') { + cell_obj.find('[data-check-box]').click(function () { + $app.check_host_all_selected(); + }); + } else if (col_key === 'action') { + // 绑定系统选择框事件 + cell_obj.find('[data-action]').click(function () { + var host = $app.table_host.get_row(row_id); + var action = $(this).attr('data-action'); + if (action === 'edit') { + $app.dlg_edit_host.show_edit(row_id); + } else if (action === 'account') { + $app.dlg_accounts.show(row_id); + } else if (action === 'lock') { + $app._lock_hosts([host.id]); + } else if (action === 'unlock') { + $app._unlock_hosts([host.id]); + } else if (action === 'remove') { + $app._remove_hosts([host.id]); + } else if (action === 'duplicate') { + $app._duplicate_host(host.id); + } + }); + } else if (col_key === 'ip') { + cell_obj.find('[data-toggle="popover"]').popover({trigger: 'hover'}); + // } else if (col_key === 'account') { + // cell_obj.find('[data-action="add-account"]').click(function () { + // $app.dlg_accounts.show(row_id); + // }); + } else if (col_key === 'acc_count') { + cell_obj.find('[data-action="edit-account"]').click(function () { + $app.dlg_accounts.show(row_id); + }); + } +}; + +$app.check_host_all_selected = function (cb_stack) { + var _all_checked = true; + var _objs = $('#' + $app.table_host.dom_id + ' tbody').find('[data-check-box]'); + if (_objs.length === 0) { + _all_checked = false; + } else { + $.each(_objs, function (i, _obj) { + if (!$(_obj).is(':checked')) { + _all_checked = false; + return false; + } + }); + } + + if (_all_checked) { + $app.dom.chkbox_host_select_all.prop('checked', true); + } else { + $app.dom.chkbox_host_select_all.prop('checked', false); + } + + if (cb_stack) + cb_stack.exec(); +}; + +$app.on_table_host_render_created = function (render) { + + render.filter_state = function (header, title, col) { + var _ret = ['
    ']; + _ret.push('
    '); + _ret.push('
    ' + title + '
    '); + + // 表格内嵌过滤器的DOM实体在这时生成 + var filter_ctrl = header._table_ctrl.get_filter_ctrl('state'); + _ret.push(filter_ctrl.render()); + + _ret.push('
    '); + + return _ret.join(''); + }; + + render.filter_search = function (header, title, col) { + var _ret = ['
    ']; + _ret.push('
    '); + _ret.push('
    ' + title + '
    '); + + // 表格内嵌过滤器的DOM实体在这时生成 + var filter_ctrl = header._table_ctrl.get_filter_ctrl('search'); + _ret.push(filter_ctrl.render()); + + _ret.push('
    '); + + return _ret.join(''); + }; + + render.make_check_box = function (row_id, fields) { + return ''; + }; + + render.host_info = function (row_id, fields) { + var title, sub_title; + + title = fields.name; + sub_title = fields.ip; + + if (title.length === 0) { + title = fields.ip; + } + + var desc = []; + if (fields.desc.length > 0) { + desc.push(fields.desc.replace(/\r/ig, "").replace(/\n/ig, "
    ")); + } + if (fields.router_ip.length > 0) { + sub_title += ',由 ' + fields.router_ip + ':' + fields.router_port + ' 路由'; + } + + var ret = []; + // ret.push('
    ' + title + ''); + // if (desc.length > 0) { + // ret.push(''); + // } + + if (desc.length > 0) { + ret.push('
    ' + title + ''); + } else { + ret.push('
    ' + title + ''); + } + + ret.push('
    ' + sub_title + '
    '); + return ret.join(''); + }; + + // render.os = function (row_id, fields) { + // return fields.os; + // }; + // + + render.account = function (row_id, fields) { + return ' ' + fields.count; + }; + + render.host_state = function (row_id, fields) { + var _style, _state; + + for (var i = 0; i < $app.obj_states.length; ++i) { + if ($app.obj_states[i].id === fields.state) { + _style = $app.obj_states[i].style; + _state = $app.obj_states[i].name; + break; + } + } + if (i === $app.obj_states.length) { + _style = 'info'; + _state = ' 未知'; + } + + return '' + _state + '' + }; + + render.make_host_action_btn = function (row_id, fields) { + var h = []; + h.push('
    '); + h.push(''); + h.push(''); + h.push('
    '); + + return h.join(''); + }; +}; + +$app.on_table_host_header_created = function (header) { + $app.dom.btn_table_host_reset_filter = $('#' + header._table_ctrl.dom_id + ' a[data-reset-filter]'); + $app.dom.btn_table_host_reset_filter.click(function () { + CALLBACK_STACK.create() + .add(header._table_ctrl.load_data) + .add(header._table_ctrl.reset_filters) + .exec(); + }); + + // TODO: 当过滤器不是默认值时,让“重置过滤器按钮”有呼吸效果,避免用户混淆 - 实验性质 + // var t1 = function(){ + // $app.dom.btn_table_host_reset_filter.fadeTo(1000, 1.0, function(){ + // $app.dom.btn_table_host_reset_filter.fadeTo(1000, 0.2, t1); + // }); + // }; + // $app.dom.btn_table_host_reset_filter.fadeTo(1000, 0.2, t1); + + // 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行) + header._table_ctrl.get_filter_ctrl('search').on_created(); + // header._table_ctrl.get_filter_ctrl('role').on_created(); + header._table_ctrl.get_filter_ctrl('state').on_created(); +}; + +$app.on_btn_select_file_click = function () { + + var html = ''; + $('body').after($(html)); + var btn_file_selector = $("#file-selector"); + + btn_file_selector.change(function () { + $app.dom.upload_file_message.hide(); + // var dom_file_name = $('#upload-file-name'); + + var file = null; + if (btn_file_selector[0].files && btn_file_selector[0].files[0]) { + file = btn_file_selector[0].files[0]; + } else if (btn_file_selector[0].files && btn_file_selector[0].files.item(0)) { + file = btn_file_selector[0].files.item(0); + } + + if (file === null) { + $app.dom.upload_file_info.html('请点击图标,选择要上传的文件!'); + return; + } + + var _ext = file.name.substring(file.name.lastIndexOf('.')).toLocaleLowerCase(); + if (_ext !== '.csv') { + $app.dom.upload_file_info.html('抱歉,仅支持导入 csv 格式的文件!'); + return; + } + + if (file.size >= MB * 2) { + $app.dom.upload_file_info.html('文件太大,超过2MB,无法导入!'); + return; + } + + var fileInfo = ''; + fileInfo += file.name; + fileInfo += '
    '; + fileInfo += tp_size2str(file.size, 2); + $app.dom.upload_file_info.html(fileInfo); + + $app.dom.btn_do_upload.show(); + }); + + btn_file_selector.click(); + +}; + +$app.on_btn_do_upload_click = function () { + $app.dom.btn_do_upload.hide(); + + $app.dom.upload_file_message + .removeClass('alert-danger alert-info') + .addClass('alert-info') + .html(' 正在导入,请稍候...') + .show(); + + + var param = {}; + $.ajaxFileUpload({ + url: "/asset/upload-import",// 需要链接到服务器地址 + fileElementId: "file-selector", // 文件选择框的id属性 + timeout: 60000, + secureuri: false, + dataType: 'text', + data: param, + success: function (data) { + $('#file-selector').remove(); + + var ret = JSON.parse(data); + + if (ret.code === TPE_OK) { + $app.dom.upload_file_message + .removeClass('alert-info') + .addClass('alert-success') + .html(' 资产导入成功:' + ret.message); + + $app.table_host.load_data(); + } else { + var err_msg = [' 资产导入失败:' + ret.message]; + if (!_.isUndefined(ret.data)) { + err_msg.push('
    '); + var err_lines = []; + $.each(ret.data, function (i, item) { + err_lines.push('第' + item.line + '行:' + item.error); + }); + err_msg.push(err_lines.join('
    ')); + err_msg.push('
    '); + + $app.table_host.load_data(); + } + + $app.dom.upload_file_message + .removeClass('alert-info') + .addClass('alert-danger') + .html(err_msg.join('')); + } + }, + error: function () { + $('#file-selector').remove(); + $tp.notify_error('网络故障,批量导入资产失败!'); + } + }); +}; + +$app.show_user_info = function (row_id) { + $app.dlg_user_info.show(row_id); +}; + +$app.get_selected_host = function (tbl) { + var users = []; + var _objs = $('#' + $app.table_host.dom_id + ' tbody tr td input[data-check-box]'); + $.each(_objs, function (i, _obj) { + if ($(_obj).is(':checked')) { + var _row_data = tbl.get_row(_obj); + // _all_checked = false; + users.push(_row_data.id); + } + }); + return users; +}; + +$app._lock_hosts = function (host_ids) { + $tp.ajax_post_json('/asset/update-hosts', {action: 'lock', hosts: host_ids}, + function (ret) { + if (ret.code === TPE_OK) { + $app.table_host.load_data(); + $tp.notify_success('禁用主机操作成功!'); + } else { + $tp.notify_error('禁用主机操作失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,禁用主机操作失败!'); + } + ); +}; + +$app.on_btn_lock_host_click = function () { + var items = $app.get_selected_host($app.table_host); + if (items.length === 0) { + $tp.notify_error('请选择要禁用的主机!'); + return; + } + + $app._lock_hosts(items); +}; + +$app._unlock_hosts = function (host_ids) { + $tp.ajax_post_json('/asset/update-hosts', {action: 'unlock', hosts: host_ids}, + function (ret) { + if (ret.code === TPE_OK) { + $app.table_host.load_data(); + $tp.notify_success('解禁主机操作成功!'); + } else { + $tp.notify_error('解禁主机操作失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,解禁主机操作失败!'); + } + ); +}; + +$app.on_btn_unlock_host_click = function () { + var items = $app.get_selected_host($app.table_host); + if (items.length === 0) { + $tp.notify_error('请选择要解禁的主机!'); + return; + } + + $app._unlock_hosts(items); +}; + +$app._remove_hosts = function (host_ids) { + var _fn_sure = function (cb_stack) { + $tp.ajax_post_json('/asset/update-hosts', {action: 'remove', hosts: host_ids}, + function (ret) { + if (ret.code === TPE_OK) { + cb_stack.add($app.check_host_all_selected); + cb_stack.add($app.table_host.load_data); + $tp.notify_success('删除主机操作成功!'); + } else { + $tp.notify_error('删除主机操作失败:' + tp_error_msg(ret.code, ret.message)); + } + + cb_stack.exec(); + }, + function () { + $tp.notify_error('网络故障,删除主机操作失败!'); + cb_stack.exec(); + } + ); + }; + + var cb_stack = CALLBACK_STACK.create(); + $tp.dlg_confirm(cb_stack, { + msg: '

    注意:删除操作不可恢复!!

    删除主机将同时删除与之相关的账号,并将主机和账号从所在分组中移除,同时删除所有相关授权!

    如果您希望临时禁止登录指定主机,可将其“禁用”!

    您确定要移除选定的' + host_ids.length + '个主机吗?

    ', + fn_yes: _fn_sure + }); +}; + +$app.on_btn_remove_host_click = function () { + var items = $app.get_selected_host($app.table_host); + if (items.length === 0) { + $tp.notify_error('请选择要删除的主机!'); + return; + } + + $app._remove_hosts(items); +}; + +$app.create_dlg_edit_host = function () { + var dlg = {}; + dlg.dom_id = 'dlg-edit-host'; + dlg.field_id = -1; // 主机id(仅编辑模式) + // dlg.field_type = -1; + dlg.field_os_type = -1; + dlg.field_ip = ''; + dlg.field_conn_mode = -1; + dlg.field_router_ip = ''; + dlg.field_router_port = 0; + dlg.field_name = ''; + dlg.field_cid = ''; + dlg.field_desc = ''; + + dlg.dom = { + dialog: $('#' + dlg.dom_id), + dlg_title: $('#' + dlg.dom_id + ' [data-field="dlg-title"]'), + hlp_conn_mode: $('#help-host-conn-mode'), + hlp_cid: $('#help-host-cid'), + // select_type: $('#edit-host-type'), + edit_os_type: $('#edit-host-os-type'), + edit_ip: $('#edit-host-ip'), + edit_conn_mode: $('#edit-host-conn-mode'), + block_router_mode: $('#block-router-mode'), + edit_router_ip: $('#edit-host-router-ip'), + edit_router_port: $('#edit-host-router-port'), + edit_name: $('#edit-host-name'), + edit_cid: $('#edit-host-cid'), + edit_desc: $('#edit-host-desc'), + msg: $('#edit-host-message'), + btn_save: $('#btn-edit-host-save'), + }; + + dlg.init = function (cb_stack) { + var html = []; + // // 创建类型选择框 + // html.push(''); + // html.push(''); + // dlg.dom.select_type.after($(html.join(''))); + // dlg.dom.selected_type = $('#' + dlg.dom_id + ' span[data-selected-type]'); + // + // // 绑定类型选择框事件 + // $('#' + dlg.dom_id + ' li a[data-type-selector]').click(function () { + // var select = parseInt($(this).attr('data-type-selector')); + // if (dlg.field_type === select) + // return; + // var name = $app.id2name($app.host_types, select); + // if (_.isUndefined(name)) { + // name = '选择主机类型角色'; + // dlg.field_type = -1; + // } else { + // dlg.field_type = select; + // } + // + // dlg.dom.selected_type.text(name); + // }); + + // 创建系统选择框 + // html.push(''); + // html.push(''); + + // html.push(''); + $.each($app.host_os_type, function (i, t) { + html.push(''); + }); + + dlg.dom.edit_os_type.append(html.join('')); + // dlg.dom.selected_os = $('#' + dlg.dom_id + ' span[data-selected-os]'); + + dlg.dom.edit_conn_mode.change(dlg.on_conn_mode_change); + + dlg.dom.btn_save.click(dlg.on_save); + + dlg.dom.hlp_conn_mode.popover({trigger: 'hover'}); + dlg.dom.hlp_cid.popover({trigger: 'hover'}); + + cb_stack.exec(); + }; + + dlg.init_fields = function (host) { + // var type_name = '选择主机类型'; + // dlg.field_type = -1; + // var os_name = '选择操作系统'; + dlg.field_id = -1; + dlg.field_os_type = -1; + + if (_.isUndefined(host)) { + dlg.dom.dlg_title.html('添加主机'); + + dlg.dom.edit_ip.val(''); + dlg.dom.edit_conn_mode.val('0'); + dlg.dom.edit_router_ip.val(''); + dlg.dom.edit_router_port.val(''); + dlg.dom.edit_name.val(''); + dlg.dom.edit_cid.val(''); + dlg.dom.edit_desc.val(''); + } else { + dlg.field_id = host.id; + dlg.dom.dlg_title.html('编辑主机:'); + + var _name = $app.id2name($app.host_os_type, host.os_type); + if (!_.isUndefined(_name)) { + // os_name = _name; + } + dlg.field_os_type = host.os_type; + + if (host.router_ip.length > 0) { + dlg.dom.edit_router_ip.val(host.router_ip); + dlg.dom.edit_router_port.val(host.router_port); + dlg.dom.edit_conn_mode.val('1'); + } else { + dlg.dom.edit_conn_mode.val('0'); + } + + dlg.dom.edit_ip.val(host.ip); + dlg.dom.edit_name.val(host.name); + dlg.dom.edit_cid.val(host.cid); + dlg.dom.edit_desc.val(host.desc); + } + // dlg.dom.selected_type.text(type_name); + // dlg.dom.selected_os.text(os_name); + dlg.dom.edit_os_type.val('' + dlg.field_os_type); + dlg.on_conn_mode_change(); + }; + + dlg.on_conn_mode_change = function () { + if (dlg.dom.edit_conn_mode.val() === '0') { + dlg.dom.block_router_mode.hide(); + } else { + dlg.dom.block_router_mode.show(); + } + }; + + dlg.show_add = function () { + dlg.init_fields(); + dlg.dom.dialog.modal({backdrop: 'static'}); + }; + + dlg.show_edit = function (row_id) { + var host = $app.table_host.get_row(row_id); + dlg.init_fields(host); + dlg.dom.dialog.modal({backdrop: 'static'}); + }; + + // dlg.show_error = function (error) { + // dlg.dom.msg.removeClass().addClass('alert alert-danger').html(error).show(); + // }; + // dlg.hide_error = function () { + // dlg.dom.msg.hide(); + // }; + + dlg.check_input = function () { + dlg.field_os_type = parseInt(dlg.dom.edit_os_type.val()); + dlg.field_ip = dlg.dom.edit_ip.val(); + dlg.field_conn_mode = parseInt(dlg.dom.edit_conn_mode.val()); + dlg.field_router_ip = dlg.dom.edit_router_ip.val(); + dlg.field_router_port = parseInt(dlg.dom.edit_router_port.val()); + dlg.field_name = dlg.dom.edit_name.val(); + dlg.field_cid = dlg.dom.edit_cid.val(); + dlg.field_desc = dlg.dom.edit_desc.val(); + + if (_.isNaN(dlg.field_os_type) || dlg.field_os_type === -1) { + $tp.notify_error('请指定远程主机的操作系统!'); + return false; + } + + if (dlg.field_ip.length === 0) { + dlg.dom.edit_ip.focus(); + $tp.notify_error('请指定远程主机IP地址!'); + return false; + } + + if (!tp_check_ip(dlg.field_ip)) { + dlg.dom.edit_ip.focus(); + $tp.notify_error('远程主机IP地址格式有误!'); + return false; + } + + if (dlg.field_conn_mode === 1) { + // 端口映射 + if (dlg.field_router_ip.length === 0) { + dlg.dom.edit_router_ip.focus(); + $tp.notify_error('请指定路由主机IP地址!'); + return false; + } + + if (!tp_check_ip(dlg.field_router_ip)) { + dlg.dom.edit_router_ip.focus(); + $tp.notify_error('路由主机IP地址格式有误!'); + return false; + } + + if (dlg.dom.edit_router_port.val().length === 0) { + dlg.dom.edit_router_port.focus(); + $tp.notify_error('请指定路由主机映射端口!'); + return false; + } + + if (_.isNaN(dlg.field_router_port) || dlg.field_router_port <= 0 || dlg.field_router_port > 65535) { + dlg.dom.edit_router_port.focus(); + $tp.notify_error('路由主机映射端口有误!'); + return false; + } else { + dlg.dom.edit_router_port.val('' + dlg.field_router_port); + } + } + + return true; + }; + + dlg.on_save = function () { + if (!dlg.check_input()) + return; + + var action = (dlg.field_id === -1) ? '添加' : '更新'; + + // var router_addr = ''; + // if (dlg.field_conn_mode === 1) { + // router_addr = dlg.field_router_ip + ':' + dlg.field_router_port; + // } + + // 如果id为-1表示创建,否则表示更新 + $tp.ajax_post_json('/asset/update-host', { + id: dlg.field_id, + // role: dlg.field_role, + os_type: dlg.field_os_type, + ip: dlg.field_ip, + router_ip: dlg.field_router_ip, + router_port: dlg.field_router_port, + name: dlg.field_name, + cid: dlg.field_cid, + desc: dlg.field_desc + }, + function (ret) { + if (ret.code === TPE_OK) { + $tp.notify_success('远程主机' + action + '成功!'); + $app.table_host.load_data(); + dlg.dom.dialog.modal('hide'); + } else { + $tp.notify_error('远程主机' + action + '失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,远程主机' + action + '失败!'); + } + ); + }; + + return dlg; +}; + +$app.create_dlg_host_info = function () { + var dlg = {}; + dlg.dom_id = 'dlg-user-info'; + dlg.row_id = -1; + dlg.need_edit = false; + + dlg.dom = { + dialog: $('#' + dlg.dom_id), + dlg_title: $('#' + dlg.dom_id + ' [data-field="dlg-title"]'), + info: $('#' + dlg.dom_id + ' [data-field="user-info"]'), + btn_edit: $('#' + dlg.dom_id + ' [data-field="btn-edit"]') + }; + + dlg.init = function (cb_stack) { + dlg.dom.dialog.on('hidden.bs.modal', function () { + if (!dlg.need_edit) + return; + $app.dlg_edit_user.show_edit(dlg.row_id); + }); + + dlg.dom.btn_edit.click(function () { + dlg.need_edit = true; + dlg.dom.dialog.modal('hide'); + }); + + cb_stack.exec(); + }; + + dlg.show = function (row_id) { + dlg.row_id = row_id; + dlg.need_edit = false; + + var _row_data = $app.table_host.get_row(dlg.row_id); + + // 表格加载时,是不会读取用户的 desc 字段的,因此可以判断此用户是否已经读取过详细信息了 + if (_.isUndefined(_row_data.desc)) { + // 尚未读取,则向服务器要求获取此用户账号的完整信息 + $tp.ajax_post_json('/user/get-user/' + _row_data.id, {}, + function (ret) { + if (ret.code === TPE_OK) { + $app.table_host.update_row(dlg.row_id, ret.data); + dlg.show_info(ret.data); + } else { + $tp.notify_error('无法获取用户详细信息:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,无法获取用户详细信息!'); + } + ); + } else { + dlg.show_info(_row_data); + } + }; + + dlg.show_info = function (user) { + // 更新对话框中显示的信息 + dlg.dom.dlg_title.html(' ' + user.surname); + + var info = []; + + var not_set = '未设置'; + var mobile = (user.mobile.length === 0) ? not_set : user.mobile; + var qq = (user.qq.length === 0) ? not_set : user.qq; + var wechat = (user.wechat.length === 0) ? not_set : user.wechat; + var desc = (user.desc.length === 0) ? not_set : user.desc; + info.push('账号:' + user.username + ''); + info.push('姓名:' + user.surname + ''); + info.push('邮箱:' + user.email + ''); + info.push('电话:' + mobile + ''); + info.push('QQ:' + qq + ''); + info.push('微信:' + wechat + ''); + info.push('描述:
    ' + desc + '
    '); + + dlg.dom.info.html($(info.join(''))); + + dlg.dom.dialog.modal(); + }; + + return dlg; +}; + +$app.create_dlg_accounts = function () { + var dlg = {}; + dlg.dom_id = 'dlg-accounts'; + dlg.host_row_id = -1; + dlg.host = null; + dlg.accounts = []; + // dlg.row_id = -1; + + dlg.dom = { + dialog: $('#' + dlg.dom_id), + dlg_title: $('#' + dlg.dom_id + ' [data-field="dlg-title"]'), + // info: $('#' + dlg.dom_id + ' [data-field="user-info"]'), + btn_add: $('#' + dlg.dom_id + ' [data-btn="btn-add-account"]'), + acc_list: $('#' + dlg.dom_id + ' [data-field="account-list"]') + }; + + dlg.init = function (cb_stack) { + // dlg.dom.dialog.on('hidden.bs.modal', function () { + // if (!dlg.show_edit_account) + // return; + // $app.dlg_edit_account.show_edit(dlg.row_id); + // }); + + dlg.dom.btn_add.click(function () { + // dlg.show_edit_account = true; + $app.dlg_edit_account.show_add(dlg.host_row_id); + }); + + cb_stack.exec(); + }; + + dlg.show = function (host_row_id) { + dlg.dom.acc_list.empty().html(' 正在加载...'); + dlg.host_row_id = host_row_id; + dlg.host = $app.table_host.get_row(host_row_id); + dlg.dom.dialog.modal(); + dlg.load_accounts(); + }; + + dlg.load_accounts = function () { + $tp.ajax_post_json('/asset/get-accounts', { + host_id: dlg.host.id + }, + function (ret) { + if (ret.code === TPE_OK) { + console.log('account:', ret.data); + dlg.accounts = ret.data; + } else { + // $tp.notify_error('远程账号' + action + '失败:' + tp_error_msg(ret.code, ret.message)); + console.error('failed.', tp_error_msg(ret.code, ret.message)); + dlg.accounts = []; + } + dlg.show_account_list(); + }, + function () { + $tp.notify_error('网络故障,获取账号信息失败!'); + } + ); + }; + + dlg.show_account_list = function () { + var html = []; + if (dlg.accounts.length === 0) { + dlg.dom.acc_list.empty(); + return; + } + + for (var i = 0; i < dlg.accounts.length; ++i) { + var acc = dlg.accounts[i]; + var pro_name = '未知'; + if (acc.protocol_type === TP_PROTOCOL_TYPE_RDP) { + pro_name = 'RDP'; + } else if (acc.protocol_type === TP_PROTOCOL_TYPE_SSH) { + pro_name = 'SSH'; + } else if (acc.protocol_type === TP_PROTOCOL_TYPE_TELNET) { + pro_name = 'TELNET'; + } + var auth_name = "未知"; + if (acc.auth_type === TP_AUTH_TYPE_NONE) { + auth_name = '无'; + } else if (acc.auth_type === TP_AUTH_TYPE_PASSWORD) { + auth_name = '密码'; + } else if (acc.auth_type === TP_AUTH_TYPE_PRIVATE_KEY) { + auth_name = '私钥'; + } + + html.push('
      '); + html.push('
    • ' + acc.username + '
    • '); + html.push('
    • ' + pro_name + '
    • '); + html.push('
    • ' + auth_name + '
    • '); + html.push('
    • '); + html.push(''); + html.push('
    • '); + + if (acc.state === TP_STATE_NORMAL) { + html.push('
    • '); + html.push(''); + html.push('
    • '); + } else { + html.push('
    • '); + html.push(''); + html.push('
    • '); + } + + html.push('
    • '); + html.push(''); + html.push('
    • '); + html.push('
    '); + } + dlg.dom.acc_list.empty().append($(html.join(''))); + + // 绑定账号操作按钮点击事件 + $('#' + dlg.dom_id + ' [data-action="modify-account"]').click(function () { + var acc_id = parseInt($(this).attr('data-id')); + for (var i = 0; i < dlg.accounts.length; ++i) { + if (dlg.accounts[i].id === acc_id) { + $app.dlg_edit_account.show_edit(dlg.host_row_id, dlg.accounts[i]); + return; + } + } + }); + + // 删除账号 + $('#' + dlg.dom_id + ' [data-action="delete-account"]').click(function () { + var acc_id = parseInt($(this).attr('data-id')); + + var _fn_sure = function (cb_stack, cb_args) { + // $tp.ajax_post_json('/asset/remove-account', {host_id: dlg.host.id, acc_id: acc_id}, + $tp.ajax_post_json('/asset/update-account', {action: 'remove', host_id: dlg.host.id, acc_id: acc_id}, + function (ret) { + if (ret.code === TPE_OK) { + // cb_stack.add($app.check_user_list_all_selected); + // cb_stack.add($app.table_user_list.load_data); + $tp.notify_success('删除账号操作成功!'); + + var update_args = { + acc_count: dlg.host.acc_count - 1 + }; + $app.table_host.update_row(dlg.host_row_id, update_args); + + dlg.load_accounts(); + } else { + $tp.notify_error('删除账号操作失败:' + tp_error_msg(ret.code, ret.message)); + } + + cb_stack.exec(); + }, + function () { + $tp.notify_error('网络故障,删除用户账号操作失败!'); + cb_stack.exec(); + } + ); + }; + + var cb_stack = CALLBACK_STACK.create(); + $tp.dlg_confirm(cb_stack, { + msg: '

    注意:删除操作不可恢复!!

    如果您只是想临时禁止以此账号登录远程主机,可以禁用此账号。

    您确定要删除此远程账号吗?

    ', + fn_yes: _fn_sure + }); + + }); + + // 禁用账号 + $('#' + dlg.dom_id + ' [data-action="lock-account"]').click(function () { + var acc_id = parseInt($(this).attr('data-id')); + + $tp.ajax_post_json('/asset/update-account', {action: 'lock', host_id: dlg.host.id, acc_id: acc_id}, + function (ret) { + if (ret.code === TPE_OK) { + $tp.notify_success('远程账号已禁用!'); + dlg.load_accounts(); + } else { + $tp.notify_error('禁用远程账号操作失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,禁用远程账号操作失败!'); + } + ); + }); + + // 解禁账号 + $('#' + dlg.dom_id + ' [data-action="unlock-account"]').click(function () { + var acc_id = parseInt($(this).attr('data-id')); + + $tp.ajax_post_json('/asset/update-account', {action: 'unlock', host_id: dlg.host.id, acc_id: acc_id}, + function (ret) { + if (ret.code === TPE_OK) { + $tp.notify_success('远程账号解禁成功!'); + dlg.load_accounts(); + } else { + $tp.notify_error('远程账号解禁失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,远程账号解禁失败!'); + } + ); + }); + }; + + return dlg; +}; + +$app.create_dlg_edit_account = function () { + var dlg = {}; + dlg.dom_id = 'dlg-edit-account'; + dlg.host_row_id = -1; + dlg.host = null; + dlg.account = null; + dlg.field_id = -1; // 账户id(仅编辑模式) + dlg.field_protocol = -1; + dlg.field_auth = -1; + dlg.field_username = ''; + dlg.field_password = ''; + dlg.field_pri_key = ''; + dlg.protocol_sub_type = 0; + + dlg.dom = { + dialog: $('#' + dlg.dom_id), + dlg_title: $('#' + dlg.dom_id + ' [data-field="dlg-title"]'), + protocol_type: $('#account-protocol-type'), + protocol_port: $('#account-protocol-port'), + auth_type: $('#account-auth-type'), + username: $('#account-username'), + password: $('#account-password'), + ssh_prikey: $('#account-ssh-pri'), + block_ssh_param: $('#block-ssh-param'), + block_rdp_param: $('#block-rdp-param'), + block_prompt: $('#block-prompt'), + block_username: $('#block-username'), + block_password: $('#block-password'), + block_sshkey: $('#block-sshkey'), + // btn_allow_ssh: $('#btn-allow-ssh'), + // btn_allow_sftp: $('#btn-allow-sftp'), + // btn_allow_rdp_desktop: $('#btn-allow-rdp-desktop'), + // btn_allow_rdp_clipboard: $('#btn-allow-rdp-clipboard'), + // btn_allow_rdp_driver: $('#btn-allow-rdp-driver-map'), + // btn_allow_rdp_console: $('#btn-allow-rdp-console'), + prompt_username: $('#account-username-prompt'), + prompt_password: $('#account-password-prompt'), + btn_show_password: $('#btn-show-account-password'), + btn_show_password_icon: $('#btn-show-account-password i'), + btn_test: $('#btn-edit-account-test'), + btn_save: $('#btn-edit-account-save') + }; + + dlg.init = function (cb_stack) { + dlg.dom.protocol_type.change(dlg.on_protocol_change); + dlg.dom.auth_type.change(dlg.on_auth_change); + + dlg.dom.btn_save.click(dlg.on_save); + dlg.dom.btn_test.click(dlg.on_test); + + dlg.dom.btn_show_password.click(function () { + if ('password' === dlg.dom.password.attr('type')) { + dlg.dom.password.attr('type', 'text'); + dlg.dom.btn_show_password_icon.removeClass('fa-eye').addClass('fa-eye-slash') + } else { + dlg.dom.password.attr('type', 'password'); + dlg.dom.btn_show_password_icon.removeClass('fa-eye-slash').addClass('fa-eye') + } + }); + + cb_stack.exec(); + }; + + dlg.init_fields = function (account) { + dlg.dom.password.val(''); + dlg.dom.ssh_prikey.val(''); + + if (_.isUndefined(account)) { + dlg.account = null; + dlg.field_id = -1; + dlg.dom.dlg_title.html('添加远程账号'); + + if (dlg.host.os_type === TP_OS_TYPE_LINUX) { + dlg.dom.protocol_type.val(TP_PROTOCOL_TYPE_SSH); + } else if (dlg.host.os_type === TP_OS_TYPE_WINDOWS) { + dlg.dom.protocol_type.val(TP_PROTOCOL_TYPE_RDP); + } else { + + } + + dlg.dom.username.val(''); + + } else { + dlg.account = account; + dlg.field_id = account.id; + dlg.dom.dlg_title.html('编辑:' + account.username); + + dlg.dom.username.val(account.username); + + dlg.dom.protocol_type.val(account.protocol_type); + dlg.dom.protocol_port.val(account.protocol_port); + } + + if (dlg.host.router_ip.length === 0) { + dlg.dom.protocol_port.removeAttr('disabled'); + } else { + dlg.dom.protocol_port.val('端口映射:' + dlg.host.router_ip + ':' + dlg.host.router_port).attr('disabled', 'disabled'); + } + + dlg.on_protocol_change(); + }; + + dlg.on_protocol_change = function () { + dlg.field_protocol = parseInt(dlg.dom.protocol_type.val()); + + var html = []; + if (dlg.field_protocol === TP_PROTOCOL_TYPE_RDP) { + // $('#dlg-edit-host-protocol-port').val('3389'); + dlg.dom.block_rdp_param.show(); + dlg.dom.block_ssh_param.hide(); + dlg.dom.block_prompt.hide(); + // dlg.dom.block_sshkey.hide(); + // dlg.dom.block_password.show(); + // dlg.dom.block_username.show(); + + html.push(''); + + if (dlg.host.router_ip.length === 0) + dlg.dom.protocol_port.val(3389); + + dlg.protocol_sub_type = TP_PROTOCOL_TYPE_RDP_DESKTOP; + } else if (dlg.field_protocol === TP_PROTOCOL_TYPE_SSH) { + // $('#dlg-edit-host-protocol-port').val('22'); + dlg.dom.block_rdp_param.hide(); + dlg.dom.block_ssh_param.show(); + dlg.dom.block_prompt.hide(); + // dlg.dom.block_sshkey.hide(); + // dlg.dom.block_password.show(); + // dlg.dom.block_username.show(); + + html.push(''); + html.push(''); + + if (dlg.host.router_ip.length === 0) + dlg.dom.protocol_port.val(22); + + dlg.protocol_sub_type = TP_PROTOCOL_TYPE_SSH_SHELL; + } else if (dlg.field_protocol === TP_PROTOCOL_TYPE_TELNET) { + dlg.dom.block_rdp_param.hide(); + dlg.dom.block_ssh_param.hide(); + dlg.dom.block_prompt.show(); + + html.push(''); + html.push(''); + + if (dlg.host.router_ip.length === 0) + dlg.dom.protocol_port.val(23); + + dlg.protocol_sub_type = TP_PROTOCOL_TYPE_TELNET_SHELL; + } else { + dlg.dom.protocol_port.val(''); + } + + dlg.dom.auth_type.empty().append($(html.join(''))); + dlg.dom.auth_type.val(dlg.account.auth_type); + dlg.on_auth_change(); + }; + + dlg.on_auth_change = function () { + dlg.field_auth = parseInt(dlg.dom.auth_type.val()); + if (dlg.field_auth === TP_AUTH_TYPE_PASSWORD) { + dlg.dom.block_password.show(); + dlg.dom.block_sshkey.hide(); + } else if (dlg.field_auth === TP_AUTH_TYPE_PRIVATE_KEY) { + dlg.dom.block_password.hide(); + dlg.dom.block_sshkey.show(); + } else if (dlg.field_auth === TP_AUTH_TYPE_NONE) { + dlg.dom.block_password.hide(); + dlg.dom.block_sshkey.hide(); + } + }; + + dlg.show_add = function (host_row_id) { + dlg.host_row_id = host_row_id; + dlg.host = $app.table_host.get_row(host_row_id); + dlg.init_fields(); + dlg.show(); + }; + + dlg.show_edit = function (host_row_id, account) { + dlg.host_row_id = host_row_id; + dlg.host = $app.table_host.get_row(host_row_id); + dlg.init_fields(account); + dlg.show(); + }; + + dlg.show = function () { + if ($(document.body).find('.modal-backdrop').length > 0) + dlg.dom.dialog.modal({backdrop: false}); + else + dlg.dom.dialog.modal({backdrop: 'static'}); + }; + + dlg.check_input = function () { + dlg.field_protocol = parseInt(dlg.dom.protocol_type.val()); + dlg.field_port = 0; + dlg.field_auth_type = parseInt(dlg.dom.auth_type.val()); + dlg.field_username = dlg.dom.username.val(); + dlg.field_password = dlg.dom.password.val(); + dlg.field_pri_key = dlg.dom.ssh_prikey.val(); + + if (dlg.host.router_ip.length === 0) { + if (dlg.dom.protocol_port.val().length === 0) { + $tp.notify_error('请设定远程访问的端口号!'); + dlg.dom.protocol_port.focus(); + return false; + } + + dlg.field_port = parseInt(dlg.dom.protocol_port.val()); + + if (_.isNaN(dlg.field_port) || dlg.field_port <= 0 || dlg.field_port > 65535) { + dlg.dom.protocol_port.focus(); + $tp.notify_error('端口有误!'); + return false; + } else { + dlg.dom.protocol_port.val('' + dlg.field_port); + } + } + + if (dlg.field_username.length === 0) { + dlg.dom.username.focus(); + $tp.notify_error('请填写登录远程主机的账号名称!'); + return false; + } + + if (dlg.field_auth_type === TP_AUTH_TYPE_PASSWORD) { + if (dlg.field_id === -1 && dlg.field_password.length === 0) { + dlg.dom.password.focus(); + $tp.notify_error('请填写登录远程主机的密码!'); + return false; + } + } else if (dlg.field_auth_type === TP_AUTH_TYPE_PRIVATE_KEY) { + if (dlg.field_id === -1 && dlg.field_pri_key.length === 0) { + dlg.dom.ssh_prikey.focus(); + $tp.notify_error('请填写登录远程主机的SSH私钥!'); + return false; + } + } + + return true; + }; + + dlg.on_save = function () { + if (!dlg.check_input()) + return; + + var action = (dlg.field_id === -1) ? '添加' : '更新'; + + // 如果id为-1表示创建,否则表示更新 + $tp.ajax_post_json('/asset/update-account', { + action: 'update', + host_id: dlg.host.id, + acc_id: dlg.field_id, + param: { + host_ip: dlg.host.ip, + router_ip: dlg.host.router_ip, + router_port: dlg.host.router_port, + protocol: dlg.field_protocol, + port: dlg.field_port, + auth_type: dlg.field_auth_type, + username: dlg.field_username, + password: dlg.field_password, + pri_key: dlg.field_pri_key + } + }, + function (ret) { + if (ret.code === TPE_OK) { + $tp.notify_success('远程账号' + action + '成功!'); + + if (dlg.field_id === -1) { + // 新建账号成功了,更新界面上对应主机的账号数 + var update_args = { + acc_count: dlg.host.acc_count + 1 + }; + $app.table_host.update_row(dlg.host_row_id, update_args); + } + + // 更新上一级对话框中的数据 + $app.dlg_accounts.load_accounts(); + + dlg.dom.dialog.modal('hide'); + } else { + $tp.notify_error('远程账号' + action + '失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,远程账号' + action + '失败!'); + } + ); + }; + + dlg.on_test = function () { + if (!dlg.check_input()) + return; + + $assist.do_teleport( + { + acc_id: dlg.field_id, + host_id: dlg.host.id, + protocol_type: dlg.field_protocol, + protocol_sub_type: dlg.protocol_sub_type, + protocol_port: dlg.field_port, + auth_type: dlg.field_auth_type, + username: dlg.field_username, + password: dlg.field_password, + pri_key: dlg.field_pri_key + }, + function () { + // func_success + //$tp.notify_success('远程连接测试通过!'); + }, + function (code, message) { + if (code === TPE_NO_ASSIST) + $assist.alert_assist_not_found(); + else + $tp.notify_error('远程连接失败:' + tp_error_msg(code, message)); + } + ); + }; + + return dlg; +}; diff --git a/server/www/teleport/static/js/audit/record-list.js b/server/www/teleport/static/js/audit/record-list.js new file mode 100644 index 0000000..fb6b7e9 --- /dev/null +++ b/server/www/teleport/static/js/audit/record-list.js @@ -0,0 +1,427 @@ +"use strict"; + +$app.on_init = function (cb_stack) { + $app.dom = { + btn_refresh_record: $('#btn-refresh-record') + }; + + cb_stack + .add($app.create_controls) + .add($app.load_role_list); + + cb_stack.exec(); +}; + +//=================================== +// 创建页面控件对象 +//=================================== +$app.create_controls = function (cb_stack) { + + //------------------------------- + // 资产列表表格 + //------------------------------- + var table_record_options = { + dom_id: 'table-record', + data_source: { + type: 'ajax-post', + url: '/audit/get-records', + //exclude: {'state': [TP_SESS_STAT_RUNNING, TP_SESS_STAT_STARTED]} + }, + column_default: {sort: false, align: 'left'}, + columns: [ + // { + // // title: '', + // title: '', + // key: 'chkbox', + // sort: false, + // width: 36, + // align: 'center', + // render: 'make_check_box', + // fields: {id: 'id'} + // }, + { + title: 'ID', + key: 'id', + sort: true, + sort_asc: false, + fields: {id: 'id'} + }, + { + title: '用户', + key: 'user', + //sort: true, + //header_render: 'filter_search_host', + render: 'user', + fields: {user_username: 'user_username', user_surname: 'user_surname'} + }, + { + title: '来源', + key: 'client_ip', + //sort: true, + //header_render: 'filter_search_host', + //render: 'host_info', + fields: {client_ip: 'client_ip'} + }, + { + title: '远程连接', + key: 'remote', + //sort: true, + //header_render: 'filter_search_host', + render: 'remote', + fields: {acc_username: 'acc_username', host_ip: 'host_ip', conn_ip: 'conn_ip', conn_port: 'conn_port'} + }, + { + title: '远程协议', + key: 'protocol_type', + align: 'center', + width: 80, + // align: 'center', + // width: 36, + //sort: true + // header_render: 'filter_os', + render: 'protocol', + fields: {protocol_type: 'protocol_type', protocol_sub_type: 'protocol_sub_type'} + }, + { + title: '开始时间', + key: 'time_begin', + sort: true, + sort_asc: false, + render: 'time_begin', + fields: {time_begin: 'time_begin'} + }, + { + title: '耗时', + key: 'time_cost', + render: 'time_cost', + fields: {time_begin: 'time_begin', time_end: 'time_end', state: 'state'} + }, + { + title: "状态", + key: "state", + //sort: true, + width: 90, + align: 'center', + //header_render: 'filter_host_state', + render: 'state', + fields: {state: 'state'} + }, + { + title: '', + key: 'action', + //sort: false, + //align: 'center', + width: 160, + render: 'record_action', + fields: {id: 'id', state: 'state', time_end: 'time_end', protocol_sub_type: 'protocol_sub_type'} + } + ], + + // 重载回调函数 + on_header_created: $app.on_table_host_header_created, + on_render_created: $app.on_table_host_render_created, + on_cell_created: $app.on_table_host_cell_created + }; + + $app.table_record = $tp.create_table(table_record_options); + cb_stack + .add($app.table_record.load_data) + .add($app.table_record.init); + + //------------------------------- + // 用户列表相关过滤器 + //------------------------------- + $tp.create_table_header_filter_search($app.table_record, { + name: 'search', + place_holder: '搜索:主机IP/名称/描述/资产编号/等等...' + }); + // $app.table_record_role_filter = $tp.create_table_filter_role($app.table_record, $app.role_list); + // $tp.create_table_header_filter_state($app.table_record, 'state', $app.obj_states, [TP_STATE_LOCKED]); + // 从cookie中读取用户分页限制的选择 + $tp.create_table_paging($app.table_record, 'table-record-paging', + { + per_page: Cookies.get($app.page_id('audit_record') + '_per_page'), + on_per_page_changed: function (per_page) { + Cookies.set($app.page_id('audit_record') + '_per_page', per_page, {expires: 365}); + } + }); + $tp.create_table_pagination($app.table_record, 'table-record-pagination'); + + //------------------------------- + // 页面控件事件绑定 + //------------------------------- + $app.dom.btn_refresh_record.click(function () { + $app.table_record.load_data(); + }); + // $app.dom.chkbox_host_select_all.click(function () { + // var _objects = $('#' + $app.table_record.dom_id + ' tbody').find('[data-check-box]'); + // if ($(this).is(':checked')) { + // $.each(_objects, function (i, _obj) { + // $(_obj).prop('checked', true); + // }); + // } else { + // $.each(_objects, function (i, _obj) { + // $(_obj).prop('checked', false); + // }); + // } + // }); + //$app.dom.btn_remove_record.click($app.on_btn_remove_record_click); + + cb_stack.exec(); +}; + +$app.on_table_host_cell_created = function (tbl, row_id, col_key, cell_obj) { + if (col_key === 'chkbox') { + cell_obj.find('[data-check-box]').click(function () { + $app.check_host_all_selected(); + }); + } else if (col_key === 'action') { + // 绑定系统选择框事件 + cell_obj.find('[data-action]').click(function () { + + var row_data = tbl.get_row(row_id); + console.log('---', row_data); + var action = $(this).attr('data-action'); + + if (action === 'replay') { + //$app.dlg_edit_host.show_edit(row_id); + if(row_data.protocol_type === TP_PROTOCOL_TYPE_RDP) { + $tp.notify_error('sorry, not impl.'); + } else if(row_data.protocol_type === TP_PROTOCOL_TYPE_SSH) { + window.open('/audit/replay/' + row_data.protocol_type + '/' + row_data.id); + } + } else if (action === 'cmd') { + //$app.dlg_accounts.show(row_id); + window.open('/audit/command-log/' + row_data.protocol_type + '/' + row_data.id); + } + }); + } else if (col_key === 'ip') { + cell_obj.find('[data-toggle="popover"]').popover({trigger: 'hover'}); + // } else if (col_key === 'account') { + // cell_obj.find('[data-action="add-account"]').click(function () { + // $app.dlg_accounts.show(row_id); + // }); + } else if (col_key === 'account_count') { + cell_obj.find('[data-action="edit-account"]').click(function () { + $app.dlg_accounts.show(row_id); + }); + } +}; + +$app.on_table_host_render_created = function (render) { + render.filter_host_state = function (header, title, col) { + var _ret = ['
    ']; + _ret.push('
    '); + _ret.push('
    ' + title + '
    '); + + // 表格内嵌过滤器的DOM实体在这时生成 + var filter_ctrl = header._table_ctrl.get_filter_ctrl('state'); + _ret.push(filter_ctrl.render()); + + _ret.push('
    '); + + return _ret.join(''); + }; + + render.filter_search_host = function (header, title, col) { + var _ret = ['
    ']; + _ret.push('
    '); + _ret.push('
    ' + title + '
    '); + + // 表格内嵌过滤器的DOM实体在这时生成 + var filter_ctrl = header._table_ctrl.get_filter_ctrl('search'); + _ret.push(filter_ctrl.render()); + + _ret.push('
    '); + + return _ret.join(''); + }; + + render.user = function (row_id, fields) { + if (_.isNull(fields.user_surname) || fields.user_surname.length === 0 || fields.user_username === fields.user_surname) { + return fields.user_username; + } else { + return fields.user_username + ' (' + fields.user_surname + ')'; + } + }; + + render.remote = function (row_id, fields) { + if (fields.host_ip === fields.conn_ip) + return fields.acc_username + '@' + fields.host_ip + ':' + fields.conn_port; + else + return '
    ' + fields.acc_username + '@' + fields.host_ip + '
    '; + }; + + // fields: {protocol_type: 'protocol_type', protocol_sub_type: 'protocol_sub_type'} + render.protocol = function (row_id, fields) { + switch (fields.protocol_sub_type) { + case 100: + return 'RDP'; + case 200: + return 'SSH'; + case 201: + return 'SFTP'; + case 300: + return 'TELNET'; + default: + return '未知'; + } + }; + + render.time_begin = function (row_id, fields) { + // return tp_format_datetime(tp_utc2local(fields.time_begin), 'MM-dd HH:mm:ss'); + return tp_format_datetime(tp_utc2local(fields.time_begin), 'MM-dd HH:mm:ss'); + }; + + render.time_cost = function (row_id, fields) { + if (fields.state === TP_SESS_STAT_RUNNING || fields.state === TP_SESS_STAT_STARTED) { + var _style = 'info'; + if (fields.state === TP_SESS_STAT_RUNNING) + _style = 'warning'; + else if (fields.state === TP_SESS_STAT_STARTED) + _style = 'primary'; + return ' ' + tp_second2str(tp_local2utc() - fields.time_begin) + ''; + } else { + if (fields.time_end === 0) + return ' 未知'; + else + return tp_second2str(fields.time_end - fields.time_begin); + } + + // if (fields.time_end === 0) { + // var _style = 'info'; + // if (fields.state === TP_SESS_STAT_RUNNING) + // _style = 'warning'; + // else if (fields.state === TP_SESS_STAT_STARTED) + // _style = 'primary'; + // return ' ' + tp_second2str(tp_local2utc() - fields.time_begin) + ''; + // } else { + // return tp_second2str(fields.time_end - fields.time_begin); + // } + }; + + render.state = function (row_id, fields) { + var msg = ''; + switch (fields.state) { + case TP_SESS_STAT_RUNNING: + return '正在连接'; + case TP_SESS_STAT_STARTED: + return '使用中'; + case TP_SESS_STAT_END: + return '已结束'; + case TP_SESS_STAT_ERR_AUTH_DENIED: + msg = '认证失败'; + break; + case TP_SESS_STAT_ERR_CONNECT: + msg = '连接失败'; + break; + case TP_SESS_STAT_ERR_BAD_SSH_KEY: + msg = '私钥错误'; + break; + case TP_SESS_STAT_ERR_START_INTERNAL: + case TP_SESS_STAT_ERR_INTERNAL: + msg = '内部错误'; + break; + case TP_SESS_STAT_ERR_UNSUPPORT_PROTOCOL: + msg = '协议不支持'; + break; + case TP_SESS_STAT_ERR_BAD_PKG: + case TP_SESS_STAT_ERR_START_BAD_PKG: + msg = '数据格式错误'; + break; + case TP_SESS_STAT_ERR_RESET: + case TP_SESS_STAT_ERR_START_RESET: + msg = '核心服务重置'; + break; + case TP_SESS_STAT_ERR_IO: + case TP_SESS_STAT_ERR_START_IO: + msg = '网络通讯故障'; + break; + case TP_SESS_STAT_ERR_SESSION: + msg = '无效会话'; + break; + default: + msg = '未知状态 [' + fields.state + ']'; + } + + return '' + msg + ''; + }; + + render.record_action = function (row_id, fields) { + var ret = []; + + if (fields.state >= TP_SESS_STAT_STARTED || fields.state === TP_SESS_STAT_ERR_RESET) { + //if (fields.time_end === 0) { + if (fields.state === TP_SESS_STAT_STARTED) { + ret.push(' 同步 '); + } else { + ret.push(' 播放 '); + } + if (fields.protocol_sub_type !== TP_PROTOCOL_TYPE_RDP_DESKTOP) { + ret.push(' 日志 '); + } + } + + return ret.join(''); + }; +}; + +$app.on_table_host_header_created = function (header) { + $('#' + header._table_ctrl.dom_id + ' a[data-reset-filter]').click(function () { + CALLBACK_STACK.create() + .add(header._table_ctrl.load_data) + .add(header._table_ctrl.reset_filters) + .exec(); + }); + + // 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行) + header._table_ctrl.get_filter_ctrl('search').on_created(); + // header._table_ctrl.get_filter_ctrl('role').on_created(); + // header._table_ctrl.get_filter_ctrl('state').on_created(); +}; + +$app.get_selected_record = function (tbl) { + var records = []; + var _objs = $('#' + $app.table_record.dom_id + ' tbody tr td input[data-check-box]'); + $.each(_objs, function (i, _obj) { + if ($(_obj).is(':checked')) { + var _row_data = tbl.get_row(_obj); + records.push(_row_data.id); + } + }); + return records; +}; + +$app.on_btn_remove_record_click = function () { + // var records = $app.get_selected_record($app.table_record); + // if (records.length === 0) { + // $tp.notify_error('请选择要删除的会话记录!'); + // return; + // } + // + // var _fn_sure = function (cb_stack, cb_args) { + // $tp.ajax_post_json('/user/remove-user', {users: users}, + // function (ret) { + // if (ret.code === TPE_OK) { + // cb_stack.add($app.check_host_all_selected); + // cb_stack.add($app.table_record.load_data); + // $tp.notify_success('删除用户账号操作成功!'); + // } else { + // $tp.notify_error('删除用户账号操作失败:' + tp_error_msg(ret.code, ret.message)); + // } + // + // cb_stack.exec(); + // }, + // function () { + // $tp.notify_error('网络故障,删除用户账号操作失败!'); + // cb_stack.exec(); + // } + // ); + // }; + // + // var cb_stack = CALLBACK_STACK.create(); + // $tp.dlg_confirm(cb_stack, { + // msg: '

    注意:删除操作不可恢复!!

    删除用户账号将同时将其从所在用户组中移除,并且删除所有分配给此用户的授权!

    如果您希望禁止某个用户登录本系统,可对其进行“禁用”操作!

    您确定要移除所有选定的 ' + user_list.length + '个 用户账号吗?

    ', + // fn_yes: _fn_sure + // }); +}; diff --git a/server/www/teleport/static/js/audit/replay.js b/server/www/teleport/static/js/audit/replay.js new file mode 100644 index 0000000..635ea02 --- /dev/null +++ b/server/www/teleport/static/js/audit/replay.js @@ -0,0 +1,300 @@ +/** + * Created by mi on 2016/7/27. + * Upgrade for new record-format by Apex on 2017-01-08 + */ + +"use strict"; + +var g_header = null; +var g_data = []; + +var g_data_offset = 0; + +var g_played_pkg_count = 0; + +var g_timer = null; + +var g_playing = false; +var g_need_stop = false; +var g_skip = true; +var g_console_term = null; +var g_current_time; +var g_finish = false; + +var g_record_tick = 50; + + +var speed_table = [ + {speed: 1, name: '正常速度'}, + {speed: 2, name: '快进 x2'}, + {speed: 4, name: '快进 x4'}, + {speed: 8, name: '快进 x8'}, + {speed: 16, name: '快进 x16'} +]; +var speed_offset = 0; + +$app.req_record_data = function (record_id, offset) { + $tp.ajax_post_json('/audit/get-record-data', {id: record_id, offset: offset}, + function (ret) { + if (ret.code === TPE_OK) { + console.log('data', ret.data); + g_data = g_data.concat(ret.data.data_list); + g_data_offset += ret.data.data_size; + + if (g_data.length < g_header.pkg_count) { + $app.req_record_data(record_id, g_data_offset); + } + // else if(g_header.pkg_count < g_data.length) { + // g_header.pkg_count = g_data.length; + // } + } else { + console.log('req_record_info error ', ret.code); + } + }, + function () { + console.log('req_record_info error'); + }, + 30 * 1000 + ); +}; + +$app.on_init = function (cb_stack, cb_args) { + var record_id = $app.options.record_id; + + $app.dom = { + time: $('#play-time'), + btn_play: $('#btn-play'), + btn_speed: $('#btn-speed'), + btn_skip: $('#btn-skip'), + btn_restart: $('#btn-restart'), + btn_big_font: $('#btn-big-font'), + btn_small_font: $('#btn-small-font'), + progress: $('#progress'), + status: $('#play-status'), + xterm_box: $('#xterm-box') + }; + + $app.dom.progress.width($('#toolbar').width()).val(0); + + Terminal.cursorBlink = false; + + $tp.ajax_post_json('/audit/get-record-header', {id: record_id}, + function (ret) { + if (ret.code === TPE_OK) { + g_header = ret.data; + console.log('header', g_header); + + $('#recorder-info').html(tp_format_datetime(g_header.start) + ': ' + g_header.user_name + '@' + g_header.client_ip + ' 访问 ' + g_header.account + '@' + g_header.conn_ip + ':' + g_header.conn_port); + + $app.req_record_data(record_id, 0); + + setTimeout(init, 1000); + } else { + $tp.notify_error('请求录像数据失败'); + console.log('load init info error ', ret.code); + } + }, + function () { + $tp.notify_error('网络通讯失败'); + } + ); + + $app.dom.btn_big_font.click(function () { + var obj = $('.terminal'); + obj.css('font-size', parseInt(obj.css('font-size')) + 2); + }); + $app.dom.btn_small_font.click(function () { + var obj = $('.terminal'); + obj.css('font-size', parseInt(obj.css('font-size')) - 2); + }); + + $app.dom.btn_play.click(function () { + if (g_playing) + pause(); + else + play(); + }); + + $app.dom.btn_skip.click(function () { + var obj = $('#btn-skip i'); + if (g_skip) { + g_skip = false; + obj.removeClass('fa-check-square-o').addClass('fa-square-o'); + } else { + g_skip = true; + obj.removeClass('fa-square-o').addClass('fa-check-square-o'); + } + + console.log('skip:', g_skip); + }); + + $app.dom.btn_restart.click(function () { + restart(); + }); + + speed_offset = 0; + $app.dom.btn_speed.text(speed_table[speed_offset].name); + + $app.dom.btn_speed.click(function () { + var length = speed_table.length; + speed_offset += 1; + if (speed_offset === length) { + speed_offset = 0; + } + $app.dom.btn_speed.text(speed_table[speed_offset].name); + }); + +// $app.dom.progress.change(function () { +// var process = g_dom_progress.val(); +// console.log('change.' + process); +// //var beginTime = parseInt(g_header.time_used * process / 100); +// speed_offset = 0; +// g_dom_btn_speed.text(speed_table[speed_offset].name); +// }); + + function init() { + if (_.isNull(g_console_term)) { + g_console_term = new Terminal({ + cols: g_header.width, + rows: g_header.height + }); + g_console_term.open(document.getElementById('xterm-box'), false); + + // g_console_term.on('resize', function (obj, x, y) { + // var y = window.getComputedStyle($('#xterm-box .terminal .xterm-rows')[0]); + // var w = parseInt(y.width); + // + // // $('#xterm-box .terminal .xterm-viewport').width(w+17); + // + // $app.dom.xterm_box.width(w + 17); + // // $app.dom.progress.width(w).val(g_process); + // }); + + } else { + g_console_term.reset(g_header.width, g_header.height); + // g_console_term.setOption('scrollback', g_header.height); + } + + $app.dom.progress.val(0); + $app.dom.status.text("正在播放"); + $app.dom.btn_play.children().removeClass().addClass('fa fa-pause').text(' 暂停'); + + g_need_stop = false; + g_playing = true; + g_finish = false; + g_current_time = 0; + g_played_pkg_count = 0; + setTimeout(done, g_record_tick); + } + + function done() { + if (g_need_stop) { + g_playing = false; + return; + } + + if (g_data.length <= g_played_pkg_count) { + $app.dom.status.text("正在缓存数据..."); + g_timer = setTimeout(done, g_record_tick); + return; + } + + $app.dom.status.text("正在播放"); + g_current_time += g_record_tick * speed_table[speed_offset].speed; + for (var i = g_played_pkg_count; i < g_data.length; i++) { + var play_data = g_data[i]; + + if (g_skip && play_data.a === 1) { + g_console_term.resize(play_data.w, play_data.h); + // g_console_term.setOption('scrollback', play_data.h); + + g_played_pkg_count++; + continue; + } + + console.log(play_data.t, g_current_time); + if (play_data.t < g_current_time) { + if(play_data.a === 1) { + g_console_term.resize(play_data.w, play_data.h); + // g_console_term.setOption('scrollback', play_data.h); + } else if (play_data.a === 2) { + g_console_term.write(play_data.d); + } + else { + g_console_term.write(tp_base64_decode(play_data.d)); + } + + if ((g_played_pkg_count + 1) === g_header.pkg_count) { + $app.dom.progress.val(100); + $app.dom.status.text('播放完成'); + $app.dom.time.text(parseInt(g_header.time_used / 1000) + '秒'); + g_finish = true; + g_playing = false; + $app.dom.btn_play.children().removeClass().addClass('fa fa-play').text(' 播放'); + + return; + } else { + g_played_pkg_count++; + } + + } else { + break; + } + } + if (g_skip) { + if (play_data.t - g_current_time > 500) { + g_current_time = play_data.t; // - g_record_tick * speed_table[speed_offset].speed; + } + } + + // sync progress bar. + var _progress = parseInt((g_current_time) * 100 / g_header.time_used); + $app.dom.progress.val(_progress); + var temp = parseInt((g_current_time) / 1000); + $app.dom.time.text(temp + '/' + parseInt(g_header.time_used / 1000) + '秒'); + + // if all packages played + if (g_played_pkg_count >= g_header.pkg_count) { + $app.dom.progress.val(100); + $app.dom.status.text('播放完成'); + $app.dom.time.text(parseInt(g_header.time_used / 1000) + '秒'); + g_finish = true; + g_playing = false; + $app.dom.btn_play.children().removeClass().addClass('fa fa-play').text(' 播放'); + } else { + g_timer = setTimeout(done, g_record_tick); + } + } + + function play() { + if (g_playing) { + return; + } + + if (g_finish) { + restart(); + return; + } + + $app.dom.btn_play.children().removeClass().addClass('fa fa-pause').text(' 暂停'); + + g_need_stop = false; + g_playing = true; + g_timer = setTimeout(done, g_record_tick); + } + + function pause() { + $app.dom.btn_play.children().removeClass().addClass('fa fa-play').text(' 播放'); + g_need_stop = true; + g_playing = false; + $app.dom.status.text("已暂停"); + } + + function restart() { + if(!_.isNull(g_timer)) + clearTimeout(g_timer); + init(); + } + + cb_stack.exec(); +}; diff --git a/server/www/teleport/static/js/auth/login.js b/server/www/teleport/static/js/auth/login.js new file mode 100644 index 0000000..037fefc --- /dev/null +++ b/server/www/teleport/static/js/auth/login.js @@ -0,0 +1,237 @@ +"use strict"; + +var BLUR_BG_COUNT = 8; +var SLOGAN = [ + '我感谢那段时光,
    因为不曾把我打倒的,
    最终让我变得更加强大!', + '宁愿在做事中犯错,
    也不要为了不犯错而什么都不做。', + '从出生到死,
    只有900个月,
    所以虚耗每一分钟,
    都是巨大的浪费!', + '没有播种,何来收获;
    没有辛劳,何来成功;
    没有磨难,何来荣耀;
    没有挫折,何来辉煌。', + '宝剑锋从磨砺出,
    梅花香自苦寒来。', + '不登高山,不知天之高也;
    不临深溪,不知地之厚也。', + '追求进步,
    不求完美。' +]; + + +// $app.on_init = function (cb_stack, cb_args) { +$app.on_init = function (cb_stack) { + $app.login_type = LOGIN_TYPE_PASSWORD_CAPTCHA; + $app.dom = { + slogan: $('#msg-slogan'), + btn_login_type_password: $('#login-type-password'), + btn_login_type_oath: $('#login-type-oath'), + area_captcha: $('#login-area-captcha'), + area_oath: $('#login-area-oath'), + captcha_image: $('#captcha-image'), + + input_username: $('#login-area-username [data-field="username"]'), + input_password: $('#login-area-username [data-field="password"]'), + input_captcha: $('#captcha'), + input_oath: $('#oath-code'), + + remember: $('#remember-me'), + btn_login: $('#btn-login'), + + message: $('#message') + }; + + console.log($app.options); + if ($app.options.username.length > 0) { + $app.dom.input_username.val($app.options.username); + } + + $app.dom.captcha_image.attr('src', '/auth/captcha?' + Math.random()); + + window.onresize = $app.on_screen_resize; + $app.init_blur_bg(); + $app.init_slogan(); + + $app.dom.btn_login_type_password.click(function () { + $app.login_type = LOGIN_TYPE_PASSWORD_CAPTCHA; + $app.dom.btn_login_type_oath.removeClass('selected'); + $(this).addClass('selected'); + $app.dom.area_oath.slideUp(100); + $app.dom.area_captcha.slideDown(100); + }); + $app.dom.btn_login_type_oath.click(function () { + $app.login_type = LOGIN_TYPE_PASSWORD_OATH; + $app.dom.btn_login_type_password.removeClass('selected'); + $(this).addClass('selected'); + $app.dom.area_oath.slideDown(100); + $app.dom.area_captcha.slideUp(100); + }); + + + $app.dom.btn_login.click($app.login_account); + + $app.dom.captcha_image.click(function () { + $(this).attr('src', '/auth/captcha?' + Math.random()); + $app.dom.input_captcha.focus().val(''); + }); + $app.dom.input_username.keydown(function (event) { + $('[data-toggle="popover"]').popover('hide'); + if (event.which === 13) { + $app.dom.input_password.focus(); + } + }); + $app.dom.input_password.keydown(function (event) { + $('[data-toggle="popover"]').popover('hide'); + if (event.which === 13) { + if ($app.login_type === LOGIN_TYPE_PASSWORD_CAPTCHA) + $app.dom.input_captcha.focus(); + else if ($app.login_type === LOGIN_TYPE_PASSWORD_OATH) + $app.dom.input_oath.focus(); + } + }); + $app.dom.input_captcha.keydown(function (event) { + $('[data-toggle="popover"]').popover('hide'); + if (event.which === 13) { + $app.login_account(); + } + }); + $app.dom.input_oath.keydown(function (event) { + $('[data-toggle="popover"]').popover('hide'); + if (event.which === 13) { + $app.login_account(); + } + }); + + cb_stack.exec(); +}; + +$app.hide_op_box = function () { + $app.dom.message.hide(); +}; + +$app.show_op_box = function (op_type, op_msg) { + $app.dom.message.html(op_msg); + $app.dom.message.removeClass().addClass('op_box op_' + op_type); + $app.dom.message.show(); +}; + +$app.login_account = function () { + var str_username = $app.dom.input_username.val(); + var str_password = $app.dom.input_password.val(); + var str_captcha = $app.dom.input_captcha.val(); + var str_oath = $app.dom.input_oath.val(); + var is_remember = $app.dom.remember.is(':checked'); + + if (str_username.length === 0) { + $app.show_op_box('error', '缺少账号!'); + $app.dom.input_username.attr('data-content', "请填写您的账号!").popover('show'); + $app.dom.input_username.focus(); + return; + } + + if (str_password.length === 0) { + $app.show_op_box('error', '缺少密码!'); + $app.dom.input_password.attr('data-content', "请填写密码!").popover('show'); + $app.dom.input_password.focus(); + return; + } + + if ($app.login_type === LOGIN_TYPE_PASSWORD_CAPTCHA) { + if (str_captcha.length !== 4) { + $app.show_op_box('error', '验证码错误!'); + setTimeout(function () { + $app.dom.input_captcha.attr('data-content', "验证码为4位数字和字母的组合,请重新填写!").focus().select().popover('show'); + }, 150); + return; + } + } else if ($app.login_type === LOGIN_TYPE_PASSWORD_OATH) { + if (str_oath.length !== 6 || ('' + parseInt(str_oath)) !== str_oath) { + $app.show_op_box('error', '身份验证器动态验证码错误!'); + setTimeout(function () { + $app.dom.input_oath.attr('data-content', "身份验证器动态验证码为6位数字,请重新填写!").focus().select().popover('show'); + }, 150); + return; + } + } + + $app.dom.btn_login.attr('disabled', 'disabled'); + $app.show_op_box('wait', ' 正在进行身份认证,请稍候...'); + + // 先判断一下captcha是否正确,如果不正确,拒绝登录 + if ($app.login_type === LOGIN_TYPE_PASSWORD_CAPTCHA) { + $tp.ajax_post_json('/auth/verify-captcha', {captcha: str_captcha}, + function (ret) { + if (ret.code === TPE_OK) { + // 验证成功 + $app.hide_op_box(); + $app.show_op_box('wait', ' 正在登录TELEPORT,请稍候...'); + $app.do_account_login(str_username, str_password, str_captcha, str_oath, is_remember); + } + else { + $app.hide_op_box(); + $app.show_op_box('error', tp_error_msg(ret.code, ret.message)); + $app.dom.captcha_image.attr('src', '/auth/captcha?' + Math.random()); + $app.dom.input_captcha.focus().select().val(''); + } + + $app.dom.btn_login.removeAttr('disabled'); + }, + function () { + $app.hide_op_box(); + $app.show_op_box('error', '很抱歉,无法连接服务器!请稍后再试一次!'); + $app.dom.btn_login.removeAttr('disabled'); + } + ); + } else { + $app.do_account_login(str_username, str_password, str_captcha, str_oath, is_remember); + } +}; + +$app.do_account_login = function (username, password, captcha, oath, is_remember) { + var args = {type: $app.login_type, username: username, password: password, captcha: captcha, oath: oath, remember: is_remember}; + $tp.ajax_post_json('/auth/do-login', args, + function (ret) { + if (ret.code === TPE_OK) { + window.location.href = $app.options.ref; + } else { + $app.hide_op_box(); + $app.show_op_box('error', '无法登录TELEPORT:' + tp_error_msg(ret.code, ret.message)); + console.log(ret); + } + + $app.dom.btn_login.removeAttr('disabled'); + }, + function () { + $app.hide_op_box(); + $app.show_op_box('error', '很抱歉,无法连接服务器!请稍后再试!'); + $app.dom.btn_login.removeAttr('disabled'); + } + ); +}; + +$app.on_screen_resize = function () { + $('body').backgroundBlur('resize'); +}; + +$app.init_blur_bg = function () { + var img_id = Math.floor(Math.random() * (BLUR_BG_COUNT)); + $('body').backgroundBlur({ + imageURL: '/static/img/login/login-bg-' + img_id + '.png?' + Math.random(), + blurAmount: 10, + duration: 1000, + imageClass: 'bg-blur', + overlayClass: 'bg-blur-overlay' + }); + + setInterval($app._update_blur_bg, 20000); +}; + +$app._update_blur_bg = function () { + var img_id = Math.floor(Math.random() * (BLUR_BG_COUNT)); + $('body').backgroundBlur('/static/img/login/login-bg-' + img_id + '.png?' + Math.random()); +}; + +$app.init_slogan = function () { + $app._update_slogan(); + setInterval($app._update_slogan, 8000); +}; + +$app._update_slogan = function () { + var msg_id = Math.floor(Math.random() * SLOGAN.length); + $app.dom.slogan.fadeOut(1000, function () { + $(this).html(SLOGAN[msg_id]).fadeIn(1000); + }); +}; diff --git a/server/www/teleport/static/js/common/xterm.js.map b/server/www/teleport/static/js/common/xterm.js.map deleted file mode 100644 index 1e47101..0000000 --- a/server/www/teleport/static/js/common/xterm.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"xterm.js","sources":["../src/xterm.js","../src/utils/Mouse.ts","../src/utils/Generic.ts","../src/utils/DomElementObjectPool.ts","../src/utils/CircularList.ts","../src/utils/CharMeasure.ts","../src/utils/Browser.ts","../src/handlers/Clipboard.ts","../src/Viewport.ts","../src/SelectionModel.ts","../src/SelectionManager.ts","../src/Renderer.ts","../src/Parser.ts","../src/Linkifier.ts","../src/InputHandler.ts","../src/EventEmitter.ts","../src/EscapeSequences.ts","../src/CompositionHelper.ts","../src/Charsets.ts","../node_modules/browserify/node_modules/browser-pack/_prelude.js"],"sourcesContent":["/**\n * xterm.js: xterm, in the browser\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n * The original design remains. The terminal itself\n * has been extended to include xterm CSI codes, among\n * other features.\n * @license MIT\n */\n\nimport { CompositionHelper } from './CompositionHelper';\nimport { EventEmitter } from './EventEmitter';\nimport { Viewport } from './Viewport';\nimport { rightClickHandler, moveTextAreaUnderMouseCursor, pasteHandler, copyHandler } from './handlers/Clipboard';\nimport { CircularList } from './utils/CircularList';\nimport { C0 } from './EscapeSequences';\nimport { InputHandler } from './InputHandler';\nimport { Parser } from './Parser';\nimport { Renderer } from './Renderer';\nimport { Linkifier } from './Linkifier';\nimport { SelectionManager } from './SelectionManager';\nimport { CharMeasure } from './utils/CharMeasure';\nimport * as Browser from './utils/Browser';\nimport * as Mouse from './utils/Mouse';\nimport { CHARSETS } from './Charsets';\nimport { getRawByteCoords } from './utils/Mouse';\n\n/**\n * Terminal Emulation References:\n * http://vt100.net/\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * http://invisible-island.net/vttest/\n * http://www.inwap.com/pdp10/ansicode.txt\n * http://linux.die.net/man/4/console_codes\n * http://linux.die.net/man/7/urxvt\n */\n\n// Let it work inside Node.js for automated testing purposes.\nvar document = (typeof window != 'undefined') ? window.document : null;\n\n/**\n * The amount of write requests to queue before sending an XOFF signal to the\n * pty process. This number must be small in order for ^C and similar sequences\n * to be responsive.\n */\nvar WRITE_BUFFER_PAUSE_THRESHOLD = 5;\n\n/**\n * The number of writes to perform in a single batch before allowing the\n * renderer to catch up with a 0ms setTimeout.\n */\nvar WRITE_BATCH_SIZE = 300;\n\n/**\n * The time between cursor blinks. This is driven by JS rather than a CSS\n * animation due to a bug in Chromium that causes it to use excessive CPU time.\n * See https://github.com/Microsoft/vscode/issues/22900\n */\nvar CURSOR_BLINK_INTERVAL = 600;\n\n/**\n * Terminal\n */\n\n/**\n * Creates a new `Terminal` object.\n *\n * @param {object} options An object containing a set of options, the available options are:\n * - `cursorBlink` (boolean): Whether the terminal cursor blinks\n * - `cols` (number): The number of columns of the terminal (horizontal size)\n * - `rows` (number): The number of rows of the terminal (vertical size)\n *\n * @public\n * @class Xterm Xterm\n * @alias module:xterm/src/xterm\n */\nfunction Terminal(options) {\n var self = this;\n\n if (!(this instanceof Terminal)) {\n return new Terminal(arguments[0], arguments[1], arguments[2]);\n }\n\n self.browser = Browser;\n self.cancel = Terminal.cancel;\n\n EventEmitter.call(this);\n\n if (typeof options === 'number') {\n options = {\n cols: arguments[0],\n rows: arguments[1],\n handler: arguments[2]\n };\n }\n\n options = options || {};\n\n\n Object.keys(Terminal.defaults).forEach(function(key) {\n if (options[key] == null) {\n options[key] = Terminal.options[key];\n\n if (Terminal[key] !== Terminal.defaults[key]) {\n options[key] = Terminal[key];\n }\n }\n self[key] = options[key];\n });\n\n if (options.colors.length === 8) {\n options.colors = options.colors.concat(Terminal._colors.slice(8));\n } else if (options.colors.length === 16) {\n options.colors = options.colors.concat(Terminal._colors.slice(16));\n } else if (options.colors.length === 10) {\n options.colors = options.colors.slice(0, -2).concat(\n Terminal._colors.slice(8, -2), options.colors.slice(-2));\n } else if (options.colors.length === 18) {\n options.colors = options.colors.concat(\n Terminal._colors.slice(16, -2), options.colors.slice(-2));\n }\n this.colors = options.colors;\n\n this.options = options;\n\n // this.context = options.context || window;\n // this.document = options.document || document;\n this.parent = options.body || options.parent || (\n document ? document.getElementsByTagName('body')[0] : null\n );\n\n this.cols = options.cols || options.geometry[0];\n this.rows = options.rows || options.geometry[1];\n this.geometry = [this.cols, this.rows];\n\n if (options.handler) {\n this.on('data', options.handler);\n }\n\n /**\n * The scroll position of the y cursor, ie. ybase + y = the y position within the entire\n * buffer\n */\n this.ybase = 0;\n\n /**\n * The scroll position of the viewport\n */\n this.ydisp = 0;\n\n /**\n * The cursor's x position after ybase\n */\n this.x = 0;\n\n /**\n * The cursor's y position after ybase\n */\n this.y = 0;\n\n this.cursorState = 0;\n this.cursorHidden = false;\n this.convertEol;\n this.queue = '';\n this.scrollTop = 0;\n this.scrollBottom = this.rows - 1;\n this.customKeyEventHandler = null;\n this.cursorBlinkInterval = null;\n\n // modes\n this.applicationKeypad = false;\n this.applicationCursor = false;\n this.originMode = false;\n this.insertMode = false;\n this.wraparoundMode = true; // defaults: xterm - true, vt100 - false\n this.normal = null;\n\n // charset\n this.charset = null;\n this.gcharset = null;\n this.glevel = 0;\n this.charsets = [null];\n\n // mouse properties\n this.decLocator;\n this.x10Mouse;\n this.vt200Mouse;\n this.vt300Mouse;\n this.normalMouse;\n this.mouseEvents;\n this.sendFocus;\n this.utfMouse;\n this.sgrMouse;\n this.urxvtMouse;\n\n // misc\n this.element;\n this.children;\n this.refreshStart;\n this.refreshEnd;\n this.savedX;\n this.savedY;\n this.savedCols;\n\n // stream\n this.readable = true;\n this.writable = true;\n\n this.defAttr = (0 << 18) | (257 << 9) | (256 << 0);\n this.curAttr = this.defAttr;\n\n this.params = [];\n this.currentParam = 0;\n this.prefix = '';\n this.postfix = '';\n\n this.inputHandler = new InputHandler(this);\n this.parser = new Parser(this.inputHandler, this);\n // Reuse renderer if the Terminal is being recreated via a Terminal.reset call.\n this.renderer = this.renderer || null;\n this.selectionManager = this.selectionManager || null;\n this.linkifier = this.linkifier || new Linkifier();\n\n // user input states\n this.writeBuffer = [];\n this.writeInProgress = false;\n\n /**\n * Whether _xterm.js_ sent XOFF in order to catch up with the pty process.\n * This is a distinct state from writeStopped so that if the user requested\n * XOFF via ^S that it will not automatically resume when the writeBuffer goes\n * below threshold.\n */\n this.xoffSentToCatchUp = false;\n\n /** Whether writing has been stopped as a result of XOFF */\n this.writeStopped = false;\n\n // leftover surrogate high from previous write invocation\n this.surrogate_high = '';\n\n /**\n * An array of all lines in the entire buffer, including the prompt. The lines are array of\n * characters which are 2-length arrays where [0] is an attribute and [1] is the character.\n */\n this.lines = new CircularList(this.scrollback);\n var i = this.rows;\n while (i--) {\n this.lines.push(this.blankLine());\n }\n // Ensure the selection manager has the correct buffer\n if (this.selectionManager) {\n this.selectionManager.setBuffer(this.lines);\n }\n\n this.tabs;\n this.setupStops();\n\n // Store if user went browsing history in scrollback\n this.userScrolling = false;\n}\n\ninherits(Terminal, EventEmitter);\n\n/**\n * back_color_erase feature for xterm.\n */\nTerminal.prototype.eraseAttr = function() {\n // if (this.is('screen')) return this.defAttr;\n return (this.defAttr & ~0x1ff) | (this.curAttr & 0x1ff);\n};\n\n/**\n * Colors\n */\n\n// Colors 0-15\nTerminal.tangoColors = [\n // dark:\n '#2e3436',\n '#cc0000',\n '#4e9a06',\n '#c4a000',\n '#3465a4',\n '#75507b',\n '#06989a',\n '#d3d7cf',\n // bright:\n '#555753',\n '#ef2929',\n '#8ae234',\n '#fce94f',\n '#729fcf',\n '#ad7fa8',\n '#34e2e2',\n '#eeeeec'\n];\n\n// Colors 0-15 + 16-255\n// Much thanks to TooTallNate for writing this.\nTerminal.colors = (function() {\n var colors = Terminal.tangoColors.slice()\n , r = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff]\n , i;\n\n // 16-231\n i = 0;\n for (; i < 216; i++) {\n out(r[(i / 36) % 6 | 0], r[(i / 6) % 6 | 0], r[i % 6]);\n }\n\n // 232-255 (grey)\n i = 0;\n for (; i < 24; i++) {\n r = 8 + i * 10;\n out(r, r, r);\n }\n\n function out(r, g, b) {\n colors.push('#' + hex(r) + hex(g) + hex(b));\n }\n\n function hex(c) {\n c = c.toString(16);\n return c.length < 2 ? '0' + c : c;\n }\n\n return colors;\n})();\n\nTerminal._colors = Terminal.colors.slice();\n\nTerminal.vcolors = (function() {\n var out = []\n , colors = Terminal.colors\n , i = 0\n , color;\n\n for (; i < 256; i++) {\n color = parseInt(colors[i].substring(1), 16);\n out.push([\n (color >> 16) & 0xff,\n (color >> 8) & 0xff,\n color & 0xff\n ]);\n }\n\n return out;\n})();\n\n/**\n * Options\n */\n\nTerminal.defaults = {\n colors: Terminal.colors,\n theme: 'default',\n convertEol: false,\n termName: 'xterm',\n geometry: [80, 24],\n cursorBlink: false,\n cursorStyle: 'block',\n visualBell: false,\n popOnBell: false,\n scrollback: 1000,\n screenKeys: false,\n debug: false,\n cancelEvents: false,\n disableStdin: false,\n useFlowControl: false,\n tabStopWidth: 8\n // programFeatures: false,\n // focusKeys: false,\n};\n\nTerminal.options = {};\n\nTerminal.focus = null;\n\neach(keys(Terminal.defaults), function(key) {\n Terminal[key] = Terminal.defaults[key];\n Terminal.options[key] = Terminal.defaults[key];\n});\n\n/**\n * Focus the terminal. Delegates focus handling to the terminal's DOM element.\n */\nTerminal.prototype.focus = function() {\n return this.textarea.focus();\n};\n\n/**\n * Retrieves an option's value from the terminal.\n * @param {string} key The option key.\n */\nTerminal.prototype.getOption = function(key, value) {\n if (!(key in Terminal.defaults)) {\n throw new Error('No option with key \"' + key + '\"');\n }\n\n if (typeof this.options[key] !== 'undefined') {\n return this.options[key];\n }\n\n return this[key];\n};\n\n/**\n * Sets an option on the terminal.\n * @param {string} key The option key.\n * @param {string} value The option value.\n */\nTerminal.prototype.setOption = function(key, value) {\n if (!(key in Terminal.defaults)) {\n throw new Error('No option with key \"' + key + '\"');\n }\n switch (key) {\n case 'scrollback':\n if (value < this.rows) {\n let msg = 'Setting the scrollback value less than the number of rows ';\n\n msg += `(${this.rows}) is not allowed.`;\n\n console.warn(msg);\n return false;\n }\n\n if (this.options[key] !== value) {\n if (this.lines.length > value) {\n const amountToTrim = this.lines.length - value;\n const needsRefresh = (this.ydisp - amountToTrim < 0);\n this.lines.trimStart(amountToTrim);\n this.ybase = Math.max(this.ybase - amountToTrim, 0);\n this.ydisp = Math.max(this.ydisp - amountToTrim, 0);\n if (needsRefresh) {\n this.refresh(0, this.rows - 1);\n }\n }\n this.lines.maxLength = value;\n this.viewport.syncScrollArea();\n }\n break;\n }\n this[key] = value;\n this.options[key] = value;\n switch (key) {\n case 'cursorBlink': this.setCursorBlinking(value); break;\n case 'cursorStyle':\n // Style 'block' applies with no class\n this.element.classList.toggle(`xterm-cursor-style-underline`, value === 'underline');\n this.element.classList.toggle(`xterm-cursor-style-bar`, value === 'bar');\n break;\n case 'tabStopWidth': this.setupStops(); break;\n }\n};\n\nTerminal.prototype.restartCursorBlinking = function () {\n this.setCursorBlinking(this.options.cursorBlink);\n};\n\nTerminal.prototype.setCursorBlinking = function (enabled) {\n this.element.classList.toggle('xterm-cursor-blink', enabled);\n this.clearCursorBlinkingInterval();\n if (enabled) {\n var self = this;\n this.cursorBlinkInterval = setInterval(function () {\n self.element.classList.toggle('xterm-cursor-blink-on');\n }, CURSOR_BLINK_INTERVAL);\n }\n};\n\nTerminal.prototype.clearCursorBlinkingInterval = function () {\n this.element.classList.remove('xterm-cursor-blink-on');\n if (this.cursorBlinkInterval) {\n clearInterval(this.cursorBlinkInterval);\n this.cursorBlinkInterval = null;\n }\n};\n\n/**\n * Binds the desired focus behavior on a given terminal object.\n *\n * @static\n */\nTerminal.bindFocus = function (term) {\n on(term.textarea, 'focus', function (ev) {\n if (term.sendFocus) {\n term.send(C0.ESC + '[I');\n }\n term.element.classList.add('focus');\n term.showCursor();\n term.restartCursorBlinking.apply(term);\n Terminal.focus = term;\n term.emit('focus', {terminal: term});\n });\n};\n\n/**\n * Blur the terminal. Delegates blur handling to the terminal's DOM element.\n */\nTerminal.prototype.blur = function() {\n return this.textarea.blur();\n};\n\n/**\n * Binds the desired blur behavior on a given terminal object.\n *\n * @static\n */\nTerminal.bindBlur = function (term) {\n on(term.textarea, 'blur', function (ev) {\n term.refresh(term.y, term.y);\n if (term.sendFocus) {\n term.send(C0.ESC + '[O');\n }\n term.element.classList.remove('focus');\n term.clearCursorBlinkingInterval.apply(term);\n Terminal.focus = null;\n term.emit('blur', {terminal: term});\n });\n};\n\n/**\n * Initialize default behavior\n */\nTerminal.prototype.initGlobal = function() {\n var term = this;\n\n Terminal.bindKeys(this);\n Terminal.bindFocus(this);\n Terminal.bindBlur(this);\n\n // Bind clipboard functionality\n on(this.element, 'copy', event => {\n // If mouse events are active it means the selection manager is disabled and\n // copy should be handled by the host program.\n if (this.mouseEvents) {\n return;\n }\n copyHandler(event, term, this.selectionManager);\n });\n const pasteHandlerWrapper = event => pasteHandler(event, term);\n on(this.textarea, 'paste', pasteHandlerWrapper);\n on(this.element, 'paste', pasteHandlerWrapper);\n\n // Handle right click context menus\n if (term.browser.isFirefox) {\n // Firefox doesn't appear to fire the contextmenu event on right click\n on(this.element, 'mousedown', event => {\n if (event.button == 2) {\n rightClickHandler(event, this.textarea, this.selectionManager);\n }\n });\n } else {\n on(this.element, 'contextmenu', event => {\n rightClickHandler(event, this.textarea, this.selectionManager);\n });\n }\n\n // Move the textarea under the cursor when middle clicking on Linux to ensure\n // middle click to paste selection works. This only appears to work in Chrome\n // at the time is writing.\n if (term.browser.isLinux) {\n // Use auxclick event over mousedown the latter doesn't seem to work. Note\n // that the regular click event doesn't fire for the middle mouse button.\n on(this.element, 'auxclick', event => {\n if (event.button === 1) {\n moveTextAreaUnderMouseCursor(event, this.textarea, this.selectionManager);\n }\n });\n }\n};\n\n/**\n * Apply key handling to the terminal\n */\nTerminal.bindKeys = function(term) {\n on(term.element, 'keydown', function(ev) {\n if (document.activeElement != this) {\n return;\n }\n term.keyDown(ev);\n }, true);\n\n on(term.element, 'keypress', function(ev) {\n if (document.activeElement != this) {\n return;\n }\n term.keyPress(ev);\n }, true);\n\n on(term.element, 'keyup', function(ev) {\n if (!wasMondifierKeyOnlyEvent(ev)) {\n term.focus(term);\n }\n }, true);\n\n on(term.textarea, 'keydown', function(ev) {\n term.keyDown(ev);\n }, true);\n\n on(term.textarea, 'keypress', function(ev) {\n term.keyPress(ev);\n // Truncate the textarea's value, since it is not needed\n this.value = '';\n }, true);\n\n on(term.textarea, 'compositionstart', term.compositionHelper.compositionstart.bind(term.compositionHelper));\n on(term.textarea, 'compositionupdate', term.compositionHelper.compositionupdate.bind(term.compositionHelper));\n on(term.textarea, 'compositionend', term.compositionHelper.compositionend.bind(term.compositionHelper));\n term.on('refresh', term.compositionHelper.updateCompositionElements.bind(term.compositionHelper));\n term.on('refresh', function (data) {\n term.queueLinkification(data.start, data.end)\n });\n};\n\n\n/**\n * Insert the given row to the terminal or produce a new one\n * if no row argument is passed. Return the inserted row.\n * @param {HTMLElement} row (optional) The row to append to the terminal.\n */\nTerminal.prototype.insertRow = function (row) {\n if (typeof row != 'object') {\n row = document.createElement('div');\n }\n\n this.rowContainer.appendChild(row);\n this.children.push(row);\n\n return row;\n};\n\n/**\n * Opens the terminal within an element.\n *\n * @param {HTMLElement} parent The element to create the terminal within.\n * @param {boolean} focus Focus the terminal, after it gets instantiated in the DOM\n */\nTerminal.prototype.open = function(parent, focus) {\n var self=this, i=0, div;\n\n this.parent = parent || this.parent;\n\n if (!this.parent) {\n throw new Error('Terminal requires a parent element.');\n }\n\n // Grab global elements\n this.context = this.parent.ownerDocument.defaultView;\n this.document = this.parent.ownerDocument;\n this.body = this.document.getElementsByTagName('body')[0];\n\n //Create main element container\n this.element = this.document.createElement('div');\n this.element.classList.add('terminal');\n this.element.classList.add('xterm');\n this.element.classList.add('xterm-theme-' + this.theme);\n this.setCursorBlinking(this.options.cursorBlink);\n\n this.element.setAttribute('tabindex', 0);\n\n this.viewportElement = document.createElement('div');\n this.viewportElement.classList.add('xterm-viewport');\n this.element.appendChild(this.viewportElement);\n this.viewportScrollArea = document.createElement('div');\n this.viewportScrollArea.classList.add('xterm-scroll-area');\n this.viewportElement.appendChild(this.viewportScrollArea);\n\n // Create the selection container.\n this.selectionContainer = document.createElement('div');\n this.selectionContainer.classList.add('xterm-selection');\n this.element.appendChild(this.selectionContainer);\n\n // Create the container that will hold the lines of the terminal and then\n // produce the lines the lines.\n this.rowContainer = document.createElement('div');\n this.rowContainer.classList.add('xterm-rows');\n this.element.appendChild(this.rowContainer);\n this.children = [];\n this.linkifier.attachToDom(document, this.children);\n\n // Create the container that will hold helpers like the textarea for\n // capturing DOM Events. Then produce the helpers.\n this.helperContainer = document.createElement('div');\n this.helperContainer.classList.add('xterm-helpers');\n // TODO: This should probably be inserted once it's filled to prevent an additional layout\n this.element.appendChild(this.helperContainer);\n this.textarea = document.createElement('textarea');\n this.textarea.classList.add('xterm-helper-textarea');\n this.textarea.setAttribute('autocorrect', 'off');\n this.textarea.setAttribute('autocapitalize', 'off');\n this.textarea.setAttribute('spellcheck', 'false');\n this.textarea.tabIndex = 0;\n this.textarea.addEventListener('focus', function() {\n self.emit('focus', {terminal: self});\n });\n this.textarea.addEventListener('blur', function() {\n self.emit('blur', {terminal: self});\n });\n this.helperContainer.appendChild(this.textarea);\n\n this.compositionView = document.createElement('div');\n this.compositionView.classList.add('composition-view');\n this.compositionHelper = new CompositionHelper(this.textarea, this.compositionView, this);\n this.helperContainer.appendChild(this.compositionView);\n\n this.charSizeStyleElement = document.createElement('style');\n this.helperContainer.appendChild(this.charSizeStyleElement);\n\n for (; i < this.rows; i++) {\n this.insertRow();\n }\n this.parent.appendChild(this.element);\n\n this.charMeasure = new CharMeasure(document, this.helperContainer);\n this.charMeasure.on('charsizechanged', function () {\n self.updateCharSizeStyles();\n });\n this.charMeasure.measure();\n\n this.viewport = new Viewport(this, this.viewportElement, this.viewportScrollArea, this.charMeasure);\n this.renderer = new Renderer(this);\n this.selectionManager = new SelectionManager(this, this.lines, this.rowContainer, this.charMeasure);\n this.selectionManager.on('refresh', data => {\n this.renderer.refreshSelection(data.start, data.end);\n });\n this.selectionManager.on('newselection', text => {\n // If there's a new selection, put it into the textarea, focus and select it\n // in order to register it as a selection on the OS. This event is fired\n // only on Linux to enable middle click to paste selection.\n this.textarea.value = text;\n this.textarea.focus();\n this.textarea.select();\n });\n this.on('scroll', () => this.selectionManager.refresh());\n this.viewportElement.addEventListener('scroll', () => this.selectionManager.refresh());\n\n // Setup loop that draws to screen\n this.refresh(0, this.rows - 1);\n\n // Initialize global actions that\n // need to be taken on the document.\n this.initGlobal();\n\n /**\n * Automatic focus functionality.\n * TODO: Default to `false` starting with xterm.js 3.0.\n */\n if (typeof focus == 'undefined') {\n let message = 'You did not pass the `focus` argument in `Terminal.prototype.open()`.\\n';\n\n message += 'The `focus` argument now defaults to `true` but starting with xterm.js 3.0 ';\n message += 'it will default to `false`.';\n\n console.warn(message);\n focus = true;\n }\n\n if (focus) {\n this.focus();\n }\n\n on(this.element, 'click', function() {\n var selection = document.getSelection(),\n collapsed = selection.isCollapsed,\n isRange = typeof collapsed == 'boolean' ? !collapsed : selection.type == 'Range';\n if (!isRange) {\n self.focus();\n }\n });\n\n // Listen for mouse events and translate\n // them into terminal mouse protocols.\n this.bindMouse();\n\n /**\n * This event is emitted when terminal has completed opening.\n *\n * @event open\n */\n this.emit('open');\n};\n\n\n/**\n * Attempts to load an add-on using CommonJS or RequireJS (whichever is available).\n * @param {string} addon The name of the addon to load\n * @static\n */\nTerminal.loadAddon = function(addon, callback) {\n if (typeof exports === 'object' && typeof module === 'object') {\n // CommonJS\n return require('./addons/' + addon + '/' + addon);\n } else if (typeof define == 'function') {\n // RequireJS\n return require(['./addons/' + addon + '/' + addon], callback);\n } else {\n console.error('Cannot load a module without a CommonJS or RequireJS environment.');\n return false;\n }\n};\n\n/**\n * Updates the helper CSS class with any changes necessary after the terminal's\n * character width has been changed.\n */\nTerminal.prototype.updateCharSizeStyles = function() {\n this.charSizeStyleElement.textContent =\n `.xterm-wide-char{width:${this.charMeasure.width * 2}px;}` +\n `.xterm-normal-char{width:${this.charMeasure.width}px;}` +\n `.xterm-rows > div{height:${this.charMeasure.height}px;}`;\n}\n\n/**\n * XTerm mouse events\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#Mouse%20Tracking\n * To better understand these\n * the xterm code is very helpful:\n * Relevant files:\n * button.c, charproc.c, misc.c\n * Relevant functions in xterm/button.c:\n * BtnCode, EmitButtonCode, EditorButton, SendMousePosition\n */\nTerminal.prototype.bindMouse = function() {\n var el = this.element, self = this, pressed = 32;\n\n // mouseup, mousedown, wheel\n // left click: ^[[M 3<^[[M#3<\n // wheel up: ^[[M`3>\n function sendButton(ev) {\n var button\n , pos;\n\n // get the xterm-style button\n button = getButton(ev);\n\n // get mouse coordinates\n pos = getRawByteCoords(ev, self.rowContainer, self.charMeasure, self.cols, self.rows);\n if (!pos) return;\n\n sendEvent(button, pos);\n\n switch (ev.overrideType || ev.type) {\n case 'mousedown':\n pressed = button;\n break;\n case 'mouseup':\n // keep it at the left\n // button, just in case.\n pressed = 32;\n break;\n case 'wheel':\n // nothing. don't\n // interfere with\n // `pressed`.\n break;\n }\n }\n\n // motion example of a left click:\n // ^[[M 3<^[[M@4<^[[M@5<^[[M@6<^[[M@7<^[[M#7<\n function sendMove(ev) {\n var button = pressed\n , pos;\n\n pos = getRawByteCoords(ev, self.rowContainer, self.charMeasure, self.cols, self.rows);\n if (!pos) return;\n\n // buttons marked as motions\n // are incremented by 32\n button += 32;\n\n sendEvent(button, pos);\n }\n\n // encode button and\n // position to characters\n function encode(data, ch) {\n if (!self.utfMouse) {\n if (ch === 255) return data.push(0);\n if (ch > 127) ch = 127;\n data.push(ch);\n } else {\n if (ch === 2047) return data.push(0);\n if (ch < 127) {\n data.push(ch);\n } else {\n if (ch > 2047) ch = 2047;\n data.push(0xC0 | (ch >> 6));\n data.push(0x80 | (ch & 0x3F));\n }\n }\n }\n\n // send a mouse event:\n // regular/utf8: ^[[M Cb Cx Cy\n // urxvt: ^[[ Cb ; Cx ; Cy M\n // sgr: ^[[ Cb ; Cx ; Cy M/m\n // vt300: ^[[ 24(1/3/5)~ [ Cx , Cy ] \\r\n // locator: CSI P e ; P b ; P r ; P c ; P p & w\n function sendEvent(button, pos) {\n // self.emit('mouse', {\n // x: pos.x - 32,\n // y: pos.x - 32,\n // button: button\n // });\n\n if (self.vt300Mouse) {\n // NOTE: Unstable.\n // http://www.vt100.net/docs/vt3xx-gp/chapter15.html\n button &= 3;\n pos.x -= 32;\n pos.y -= 32;\n var data = C0.ESC + '[24';\n if (button === 0) data += '1';\n else if (button === 1) data += '3';\n else if (button === 2) data += '5';\n else if (button === 3) return;\n else data += '0';\n data += '~[' + pos.x + ',' + pos.y + ']\\r';\n self.send(data);\n return;\n }\n\n if (self.decLocator) {\n // NOTE: Unstable.\n button &= 3;\n pos.x -= 32;\n pos.y -= 32;\n if (button === 0) button = 2;\n else if (button === 1) button = 4;\n else if (button === 2) button = 6;\n else if (button === 3) button = 3;\n self.send(C0.ESC + '['\n + button\n + ';'\n + (button === 3 ? 4 : 0)\n + ';'\n + pos.y\n + ';'\n + pos.x\n + ';'\n + (pos.page || 0)\n + '&w');\n return;\n }\n\n if (self.urxvtMouse) {\n pos.x -= 32;\n pos.y -= 32;\n pos.x++;\n pos.y++;\n self.send(C0.ESC + '[' + button + ';' + pos.x + ';' + pos.y + 'M');\n return;\n }\n\n if (self.sgrMouse) {\n pos.x -= 32;\n pos.y -= 32;\n self.send(C0.ESC + '[<'\n + (((button & 3) === 3 ? button & ~3 : button) - 32)\n + ';'\n + pos.x\n + ';'\n + pos.y\n + ((button & 3) === 3 ? 'm' : 'M'));\n return;\n }\n\n var data = [];\n\n encode(data, button);\n encode(data, pos.x);\n encode(data, pos.y);\n\n self.send(C0.ESC + '[M' + String.fromCharCode.apply(String, data));\n }\n\n function getButton(ev) {\n var button\n , shift\n , meta\n , ctrl\n , mod;\n\n // two low bits:\n // 0 = left\n // 1 = middle\n // 2 = right\n // 3 = release\n // wheel up/down:\n // 1, and 2 - with 64 added\n switch (ev.overrideType || ev.type) {\n case 'mousedown':\n button = ev.button != null\n ? +ev.button\n : ev.which != null\n ? ev.which - 1\n : null;\n\n if (self.browser.isMSIE) {\n button = button === 1 ? 0 : button === 4 ? 1 : button;\n }\n break;\n case 'mouseup':\n button = 3;\n break;\n case 'DOMMouseScroll':\n button = ev.detail < 0\n ? 64\n : 65;\n break;\n case 'wheel':\n button = ev.wheelDeltaY > 0\n ? 64\n : 65;\n break;\n }\n\n // next three bits are the modifiers:\n // 4 = shift, 8 = meta, 16 = control\n shift = ev.shiftKey ? 4 : 0;\n meta = ev.metaKey ? 8 : 0;\n ctrl = ev.ctrlKey ? 16 : 0;\n mod = shift | meta | ctrl;\n\n // no mods\n if (self.vt200Mouse) {\n // ctrl only\n mod &= ctrl;\n } else if (!self.normalMouse) {\n mod = 0;\n }\n\n // increment to SP\n button = (32 + (mod << 2)) + button;\n\n return button;\n }\n\n on(el, 'mousedown', function(ev) {\n if (!self.mouseEvents) return;\n\n // send the button\n sendButton(ev);\n\n // ensure focus\n self.focus();\n\n // fix for odd bug\n //if (self.vt200Mouse && !self.normalMouse) {\n if (self.vt200Mouse) {\n ev.overrideType = 'mouseup';\n sendButton(ev);\n return self.cancel(ev);\n }\n\n // bind events\n if (self.normalMouse) on(self.document, 'mousemove', sendMove);\n\n // x10 compatibility mode can't send button releases\n if (!self.x10Mouse) {\n on(self.document, 'mouseup', function up(ev) {\n sendButton(ev);\n if (self.normalMouse) off(self.document, 'mousemove', sendMove);\n off(self.document, 'mouseup', up);\n return self.cancel(ev);\n });\n }\n\n return self.cancel(ev);\n });\n\n //if (self.normalMouse) {\n // on(self.document, 'mousemove', sendMove);\n //}\n\n on(el, 'wheel', function(ev) {\n if (!self.mouseEvents) return;\n if (self.x10Mouse\n || self.vt300Mouse\n || self.decLocator) return;\n sendButton(ev);\n return self.cancel(ev);\n });\n\n // allow wheel scrolling in\n // the shell for example\n on(el, 'wheel', function(ev) {\n if (self.mouseEvents) return;\n self.viewport.onWheel(ev);\n return self.cancel(ev);\n });\n\n on(el, 'touchstart', function(ev) {\n if (self.mouseEvents) return;\n self.viewport.onTouchStart(ev);\n return self.cancel(ev);\n });\n\n on(el, 'touchmove', function(ev) {\n if (self.mouseEvents) return;\n self.viewport.onTouchMove(ev);\n return self.cancel(ev);\n });\n};\n\n/**\n * Destroys the terminal.\n */\nTerminal.prototype.destroy = function() {\n this.readable = false;\n this.writable = false;\n this._events = {};\n this.handler = function() {};\n this.write = function() {};\n if (this.element && this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n //this.emit('close');\n};\n\n/**\n * Tells the renderer to refresh terminal content between two rows (inclusive) at the next\n * opportunity.\n * @param {number} start The row to start from (between 0 and this.rows - 1).\n * @param {number} end The row to end at (between start and this.rows - 1).\n */\nTerminal.prototype.refresh = function(start, end) {\n if (this.renderer) {\n this.renderer.queueRefresh(start, end);\n }\n};\n\n/**\n * Queues linkification for the specified rows.\n * @param {number} start The row to start from (between 0 and this.rows - 1).\n * @param {number} end The row to end at (between start and this.rows - 1).\n */\nTerminal.prototype.queueLinkification = function(start, end) {\n if (this.linkifier) {\n for (let i = start; i <= end; i++) {\n this.linkifier.linkifyRow(i);\n }\n }\n};\n\n/**\n * Display the cursor element\n */\nTerminal.prototype.showCursor = function() {\n if (!this.cursorState) {\n this.cursorState = 1;\n this.refresh(this.y, this.y);\n }\n};\n\n/**\n * Scroll the terminal down 1 row, creating a blank line.\n * @param {boolean} isWrapped Whether the new line is wrapped from the previous\n * line.\n */\nTerminal.prototype.scroll = function(isWrapped) {\n var row;\n\n // Make room for the new row in lines\n if (this.lines.length === this.lines.maxLength) {\n this.lines.trimStart(1);\n this.ybase--;\n if (this.ydisp !== 0) {\n this.ydisp--;\n }\n }\n\n this.ybase++;\n\n // TODO: Why is this done twice?\n if (!this.userScrolling) {\n this.ydisp = this.ybase;\n }\n\n // last line\n row = this.ybase + this.rows - 1;\n\n // subtract the bottom scroll region\n row -= this.rows - 1 - this.scrollBottom;\n\n if (row === this.lines.length) {\n // Optimization: pushing is faster than splicing when they amount to the same behavior\n this.lines.push(this.blankLine(undefined, isWrapped));\n } else {\n // add our new line\n this.lines.splice(row, 0, this.blankLine(undefined, isWrapped));\n }\n\n if (this.scrollTop !== 0) {\n if (this.ybase !== 0) {\n this.ybase--;\n if (!this.userScrolling) {\n this.ydisp = this.ybase;\n }\n }\n this.lines.splice(this.ybase + this.scrollTop, 1);\n }\n\n // this.maxRange();\n this.updateRange(this.scrollTop);\n this.updateRange(this.scrollBottom);\n\n /**\n * This event is emitted whenever the terminal is scrolled.\n * The one parameter passed is the new y display position.\n *\n * @event scroll\n */\n this.emit('scroll', this.ydisp);\n};\n\n/**\n * Scroll the display of the terminal\n * @param {number} disp The number of lines to scroll down (negatives scroll up).\n * @param {boolean} suppressScrollEvent Don't emit the scroll event as scrollDisp. This is used\n * to avoid unwanted events being handled by the veiwport when the event was triggered from the\n * viewport originally.\n */\nTerminal.prototype.scrollDisp = function(disp, suppressScrollEvent) {\n if (disp < 0) {\n if (this.ydisp === 0) {\n return;\n }\n this.userScrolling = true;\n } else if (disp + this.ydisp >= this.ybase) {\n this.userScrolling = false;\n }\n\n this.ydisp += disp;\n\n if (this.ydisp > this.ybase) {\n this.ydisp = this.ybase;\n } else if (this.ydisp < 0) {\n this.ydisp = 0;\n }\n\n if (!suppressScrollEvent) {\n this.emit('scroll', this.ydisp);\n }\n\n this.refresh(0, this.rows - 1);\n};\n\n/**\n * Scroll the display of the terminal by a number of pages.\n * @param {number} pageCount The number of pages to scroll (negative scrolls up).\n */\nTerminal.prototype.scrollPages = function(pageCount) {\n this.scrollDisp(pageCount * (this.rows - 1));\n};\n\n/**\n * Scrolls the display of the terminal to the top.\n */\nTerminal.prototype.scrollToTop = function() {\n this.scrollDisp(-this.ydisp);\n};\n\n/**\n * Scrolls the display of the terminal to the bottom.\n */\nTerminal.prototype.scrollToBottom = function() {\n this.scrollDisp(this.ybase - this.ydisp);\n};\n\n/**\n * Writes text to the terminal.\n * @param {string} data The text to write to the terminal.\n */\nTerminal.prototype.write = function(data) {\n this.writeBuffer.push(data);\n\n // Send XOFF to pause the pty process if the write buffer becomes too large so\n // xterm.js can catch up before more data is sent. This is necessary in order\n // to keep signals such as ^C responsive.\n if (this.options.useFlowControl && !this.xoffSentToCatchUp && this.writeBuffer.length >= WRITE_BUFFER_PAUSE_THRESHOLD) {\n // XOFF - stop pty pipe\n // XON will be triggered by emulator before processing data chunk\n this.send(C0.DC3);\n this.xoffSentToCatchUp = true;\n }\n\n if (!this.writeInProgress && this.writeBuffer.length > 0) {\n // Kick off a write which will write all data in sequence recursively\n this.writeInProgress = true;\n // Kick off an async innerWrite so more writes can come in while processing data\n var self = this;\n setTimeout(function () {\n self.innerWrite();\n });\n }\n};\n\nTerminal.prototype.innerWrite = function() {\n var writeBatch = this.writeBuffer.splice(0, WRITE_BATCH_SIZE);\n while (writeBatch.length > 0) {\n var data = writeBatch.shift();\n var l = data.length, i = 0, j, cs, ch, code, low, ch_width, row;\n\n // If XOFF was sent in order to catch up with the pty process, resume it if\n // the writeBuffer is empty to allow more data to come in.\n if (this.xoffSentToCatchUp && writeBatch.length === 0 && this.writeBuffer.length === 0) {\n this.send(C0.DC1);\n this.xoffSentToCatchUp = false;\n }\n\n this.refreshStart = this.y;\n this.refreshEnd = this.y;\n\n // HACK: Set the parser state based on it's state at the time of return.\n // This works around the bug #662 which saw the parser state reset in the\n // middle of parsing escape sequence in two chunks. For some reason the\n // state of the parser resets to 0 after exiting parser.parse. This change\n // just sets the state back based on the correct return statement.\n var state = this.parser.parse(data);\n this.parser.setState(state);\n\n this.updateRange(this.y);\n this.refresh(this.refreshStart, this.refreshEnd);\n }\n if (this.writeBuffer.length > 0) {\n // Allow renderer to catch up before processing the next batch\n var self = this;\n setTimeout(function () {\n self.innerWrite();\n }, 0);\n } else {\n this.writeInProgress = false;\n }\n};\n\n/**\n * Writes text to the terminal, followed by a break line character (\\n).\n * @param {string} data The text to write to the terminal.\n */\nTerminal.prototype.writeln = function(data) {\n this.write(data + '\\r\\n');\n};\n\n/**\n * DEPRECATED: only for backward compatibility. Please use attachCustomKeyEventHandler() instead.\n * @param {function} customKeydownHandler The custom KeyboardEvent handler to attach. This is a\n * function that takes a KeyboardEvent, allowing consumers to stop propogation and/or prevent\n * the default action. The function returns whether the event should be processed by xterm.js.\n */\nTerminal.prototype.attachCustomKeydownHandler = function(customKeydownHandler) {\n let message = 'attachCustomKeydownHandler() is DEPRECATED and will be removed soon. Please use attachCustomKeyEventHandler() instead.';\n console.warn(message);\n this.attachCustomKeyEventHandler(customKeydownHandler);\n};\n\n/**\n * Attaches a custom key event handler which is run before keys are processed, giving consumers of\n * xterm.js ultimate control as to what keys should be processed by the terminal and what keys\n * should not.\n * @param {function} customKeyEventHandler The custom KeyboardEvent handler to attach. This is a\n * function that takes a KeyboardEvent, allowing consumers to stop propogation and/or prevent\n * the default action. The function returns whether the event should be processed by xterm.js.\n */\nTerminal.prototype.attachCustomKeyEventHandler = function(customKeyEventHandler) {\n this.customKeyEventHandler = customKeyEventHandler;\n};\n\n/**\n * Attaches a http(s) link handler, forcing web links to behave differently to\n * regular tags. This will trigger a refresh as links potentially need to be\n * reconstructed. Calling this with null will remove the handler.\n * @param {LinkMatcherHandler} handler The handler callback function.\n */\nTerminal.prototype.setHypertextLinkHandler = function(handler) {\n if (!this.linkifier) {\n throw new Error('Cannot attach a hypertext link handler before Terminal.open is called');\n }\n this.linkifier.setHypertextLinkHandler(handler);\n // Refresh to force links to refresh\n this.refresh(0, this.rows - 1);\n};\n\n/**\n * Attaches a validation callback for hypertext links. This is useful to use\n * validation logic or to do something with the link's element and url.\n * @param {LinkMatcherValidationCallback} callback The callback to use, this can\n * be cleared with null.\n */\nTerminal.prototype.setHypertextValidationCallback = function(callback) {\n if (!this.linkifier) {\n throw new Error('Cannot attach a hypertext validation callback before Terminal.open is called');\n }\n this.linkifier.setHypertextValidationCallback(callback);\n // Refresh to force links to refresh\n this.refresh(0, this.rows - 1);\n};\n\n/**\n * Registers a link matcher, allowing custom link patterns to be matched and\n * handled.\n * @param {RegExp} regex The regular expression to search for, specifically\n * this searches the textContent of the rows. You will want to use \\s to match\n * a space ' ' character for example.\n * @param {LinkMatcherHandler} handler The callback when the link is called.\n * @param {LinkMatcherOptions} [options] Options for the link matcher.\n * @return {number} The ID of the new matcher, this can be used to deregister.\n */\nTerminal.prototype.registerLinkMatcher = function(regex, handler, options) {\n if (this.linkifier) {\n var matcherId = this.linkifier.registerLinkMatcher(regex, handler, options);\n this.refresh(0, this.rows - 1);\n return matcherId;\n }\n};\n\n/**\n * Deregisters a link matcher if it has been registered.\n * @param {number} matcherId The link matcher's ID (returned after register)\n */\nTerminal.prototype.deregisterLinkMatcher = function(matcherId) {\n if (this.linkifier) {\n if (this.linkifier.deregisterLinkMatcher(matcherId)) {\n this.refresh(0, this.rows - 1);\n }\n }\n};\n\n/**\n * Gets whether the terminal has an active selection.\n */\nTerminal.prototype.hasSelection = function() {\n return this.selectionManager.hasSelection;\n};\n\n/**\n * Gets the terminal's current selection, this is useful for implementing copy\n * behavior outside of xterm.js.\n */\nTerminal.prototype.getSelection = function() {\n return this.selectionManager.selectionText;\n};\n\n/**\n * Clears the current terminal selection.\n */\nTerminal.prototype.clearSelection = function() {\n this.selectionManager.clearSelection();\n};\n\n/**\n * Selects all text within the terminal.\n */\nTerminal.prototype.selectAll = function() {\n this.selectionManager.selectAll();\n};\n\n/**\n * Handle a keydown event\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n * @param {KeyboardEvent} ev The keydown event to be handled.\n */\nTerminal.prototype.keyDown = function(ev) {\n if (this.customKeyEventHandler && this.customKeyEventHandler(ev) === false) {\n return false;\n }\n\n this.restartCursorBlinking();\n\n if (!this.compositionHelper.keydown.bind(this.compositionHelper)(ev)) {\n if (this.ybase !== this.ydisp) {\n this.scrollToBottom();\n }\n return false;\n }\n\n var self = this;\n var result = this.evaluateKeyEscapeSequence(ev);\n\n if (result.key === C0.DC3) { // XOFF\n this.writeStopped = true;\n } else if (result.key === C0.DC1) { // XON\n this.writeStopped = false;\n }\n\n if (result.scrollDisp) {\n this.scrollDisp(result.scrollDisp);\n return this.cancel(ev, true);\n }\n\n if (isThirdLevelShift(this, ev)) {\n return true;\n }\n\n if (result.cancel) {\n // The event is canceled at the end already, is this necessary?\n this.cancel(ev, true);\n }\n\n if (!result.key) {\n return true;\n }\n\n this.emit('keydown', ev);\n this.emit('key', result.key, ev);\n this.showCursor();\n this.handler(result.key);\n\n return this.cancel(ev, true);\n};\n\n/**\n * Returns an object that determines how a KeyboardEvent should be handled. The key of the\n * returned value is the new key code to pass to the PTY.\n *\n * Reference: http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * @param {KeyboardEvent} ev The keyboard event to be translated to key escape sequence.\n */\nTerminal.prototype.evaluateKeyEscapeSequence = function(ev) {\n var result = {\n // Whether to cancel event propogation (NOTE: this may not be needed since the event is\n // canceled at the end of keyDown\n cancel: false,\n // The new key even to emit\n key: undefined,\n // The number of characters to scroll, if this is defined it will cancel the event\n scrollDisp: undefined\n };\n var modifiers = ev.shiftKey << 0 | ev.altKey << 1 | ev.ctrlKey << 2 | ev.metaKey << 3;\n switch (ev.keyCode) {\n case 8:\n // backspace\n if (ev.shiftKey) {\n result.key = C0.BS; // ^H\n break;\n }\n result.key = C0.DEL; // ^?\n break;\n case 9:\n // tab\n if (ev.shiftKey) {\n result.key = C0.ESC + '[Z';\n break;\n }\n result.key = C0.HT;\n result.cancel = true;\n break;\n case 13:\n // return/enter\n result.key = C0.CR;\n result.cancel = true;\n break;\n case 27:\n // escape\n result.key = C0.ESC;\n result.cancel = true;\n break;\n case 37:\n // left-arrow\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'D';\n // HACK: Make Alt + left-arrow behave like Ctrl + left-arrow: move one word backwards\n // http://unix.stackexchange.com/a/108106\n // macOS uses different escape sequences than linux\n if (result.key == C0.ESC + '[1;3D') {\n result.key = (this.browser.isMac) ? C0.ESC + 'b' : C0.ESC + '[1;5D';\n }\n } else if (this.applicationCursor) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n break;\n case 39:\n // right-arrow\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'C';\n // HACK: Make Alt + right-arrow behave like Ctrl + right-arrow: move one word forward\n // http://unix.stackexchange.com/a/108106\n // macOS uses different escape sequences than linux\n if (result.key == C0.ESC + '[1;3C') {\n result.key = (this.browser.isMac) ? C0.ESC + 'f' : C0.ESC + '[1;5C';\n }\n } else if (this.applicationCursor) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n break;\n case 38:\n // up-arrow\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'A';\n // HACK: Make Alt + up-arrow behave like Ctrl + up-arrow\n // http://unix.stackexchange.com/a/108106\n if (result.key == C0.ESC + '[1;3A') {\n result.key = C0.ESC + '[1;5A';\n }\n } else if (this.applicationCursor) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n break;\n case 40:\n // down-arrow\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'B';\n // HACK: Make Alt + down-arrow behave like Ctrl + down-arrow\n // http://unix.stackexchange.com/a/108106\n if (result.key == C0.ESC + '[1;3B') {\n result.key = C0.ESC + '[1;5B';\n }\n } else if (this.applicationCursor) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n break;\n case 45:\n // insert\n if (!ev.shiftKey && !ev.ctrlKey) {\n // or + are used to\n // copy-paste on some systems.\n result.key = C0.ESC + '[2~';\n }\n break;\n case 46:\n // delete\n if (modifiers) {\n result.key = C0.ESC + '[3;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[3~';\n }\n break;\n case 36:\n // home\n if (modifiers)\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'H';\n else if (this.applicationCursor)\n result.key = C0.ESC + 'OH';\n else\n result.key = C0.ESC + '[H';\n break;\n case 35:\n // end\n if (modifiers)\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'F';\n else if (this.applicationCursor)\n result.key = C0.ESC + 'OF';\n else\n result.key = C0.ESC + '[F';\n break;\n case 33:\n // page up\n if (ev.shiftKey) {\n result.scrollDisp = -(this.rows - 1);\n } else {\n result.key = C0.ESC + '[5~';\n }\n break;\n case 34:\n // page down\n if (ev.shiftKey) {\n result.scrollDisp = this.rows - 1;\n } else {\n result.key = C0.ESC + '[6~';\n }\n break;\n case 112:\n // F1-F12\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'P';\n } else {\n result.key = C0.ESC + 'OP';\n }\n break;\n case 113:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'Q';\n } else {\n result.key = C0.ESC + 'OQ';\n }\n break;\n case 114:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'R';\n } else {\n result.key = C0.ESC + 'OR';\n }\n break;\n case 115:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'S';\n } else {\n result.key = C0.ESC + 'OS';\n }\n break;\n case 116:\n if (modifiers) {\n result.key = C0.ESC + '[15;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[15~';\n }\n break;\n case 117:\n if (modifiers) {\n result.key = C0.ESC + '[17;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[17~';\n }\n break;\n case 118:\n if (modifiers) {\n result.key = C0.ESC + '[18;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[18~';\n }\n break;\n case 119:\n if (modifiers) {\n result.key = C0.ESC + '[19;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[19~';\n }\n break;\n case 120:\n if (modifiers) {\n result.key = C0.ESC + '[20;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[20~';\n }\n break;\n case 121:\n if (modifiers) {\n result.key = C0.ESC + '[21;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[21~';\n }\n break;\n case 122:\n if (modifiers) {\n result.key = C0.ESC + '[23;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[23~';\n }\n break;\n case 123:\n if (modifiers) {\n result.key = C0.ESC + '[24;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[24~';\n }\n break;\n default:\n // a-z and space\n if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) {\n if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n result.key = String.fromCharCode(ev.keyCode - 64);\n } else if (ev.keyCode === 32) {\n // NUL\n result.key = String.fromCharCode(0);\n } else if (ev.keyCode >= 51 && ev.keyCode <= 55) {\n // escape, file sep, group sep, record sep, unit sep\n result.key = String.fromCharCode(ev.keyCode - 51 + 27);\n } else if (ev.keyCode === 56) {\n // delete\n result.key = String.fromCharCode(127);\n } else if (ev.keyCode === 219) {\n // ^[ - Control Sequence Introducer (CSI)\n result.key = String.fromCharCode(27);\n } else if (ev.keyCode === 220) {\n // ^\\ - String Terminator (ST)\n result.key = String.fromCharCode(28);\n } else if (ev.keyCode === 221) {\n // ^] - Operating System Command (OSC)\n result.key = String.fromCharCode(29);\n }\n } else if (!this.browser.isMac && ev.altKey && !ev.ctrlKey && !ev.metaKey) {\n // On Mac this is a third level shift. Use instead.\n if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n result.key = C0.ESC + String.fromCharCode(ev.keyCode + 32);\n } else if (ev.keyCode === 192) {\n result.key = C0.ESC + '`';\n } else if (ev.keyCode >= 48 && ev.keyCode <= 57) {\n result.key = C0.ESC + (ev.keyCode - 48);\n }\n } else if (this.browser.isMac && !ev.altKey && !ev.ctrlKey && ev.metaKey) {\n if (ev.keyCode === 65) { // cmd + a\n this.selectAll();\n }\n }\n break;\n }\n\n return result;\n};\n\n/**\n * Set the G level of the terminal\n * @param g\n */\nTerminal.prototype.setgLevel = function(g) {\n this.glevel = g;\n this.charset = this.charsets[g];\n};\n\n/**\n * Set the charset for the given G level of the terminal\n * @param g\n * @param charset\n */\nTerminal.prototype.setgCharset = function(g, charset) {\n this.charsets[g] = charset;\n if (this.glevel === g) {\n this.charset = charset;\n }\n};\n\n/**\n * Handle a keypress event.\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n * @param {KeyboardEvent} ev The keypress event to be handled.\n */\nTerminal.prototype.keyPress = function(ev) {\n var key;\n\n if (this.customKeyEventHandler && this.customKeyEventHandler(ev) === false) {\n return false;\n }\n\n this.cancel(ev);\n\n if (ev.charCode) {\n key = ev.charCode;\n } else if (ev.which == null) {\n key = ev.keyCode;\n } else if (ev.which !== 0 && ev.charCode !== 0) {\n key = ev.which;\n } else {\n return false;\n }\n\n if (!key || (\n (ev.altKey || ev.ctrlKey || ev.metaKey) && !isThirdLevelShift(this, ev)\n )) {\n return false;\n }\n\n key = String.fromCharCode(key);\n\n this.emit('keypress', key, ev);\n this.emit('key', key, ev);\n this.showCursor();\n this.handler(key);\n\n return true;\n};\n\n/**\n * Send data for handling to the terminal\n * @param {string} data\n */\nTerminal.prototype.send = function(data) {\n var self = this;\n\n if (!this.queue) {\n setTimeout(function() {\n self.handler(self.queue);\n self.queue = '';\n }, 1);\n }\n\n this.queue += data;\n};\n\n/**\n * Ring the bell.\n * Note: We could do sweet things with webaudio here\n */\nTerminal.prototype.bell = function() {\n if (!this.visualBell) return;\n var self = this;\n this.element.style.borderColor = 'white';\n setTimeout(function() {\n self.element.style.borderColor = '';\n }, 10);\n if (this.popOnBell) this.focus();\n};\n\n/**\n * Log the current state to the console.\n */\nTerminal.prototype.log = function() {\n if (!this.debug) return;\n if (!this.context.console || !this.context.console.log) return;\n var args = Array.prototype.slice.call(arguments);\n this.context.console.log.apply(this.context.console, args);\n};\n\n/**\n * Log the current state as error to the console.\n */\nTerminal.prototype.error = function() {\n if (!this.debug) return;\n if (!this.context.console || !this.context.console.error) return;\n var args = Array.prototype.slice.call(arguments);\n this.context.console.error.apply(this.context.console, args);\n};\n\n/**\n * Resizes the terminal.\n *\n * @param {number} x The number of columns to resize to.\n * @param {number} y The number of rows to resize to.\n */\nTerminal.prototype.resize = function(x, y) {\n if (isNaN(x) || isNaN(y)) {\n return;\n }\n\n if (y > this.getOption('scrollback')) {\n this.setOption('scrollback', y)\n }\n\n var line\n , el\n , i\n , j\n , ch\n , addToY;\n\n if (x === this.cols && y === this.rows) {\n return;\n }\n\n if (x < 1) x = 1;\n if (y < 1) y = 1;\n\n // resize cols\n j = this.cols;\n if (j < x) {\n ch = [this.defAttr, ' ', 1]; // does xterm use the default attr?\n i = this.lines.length;\n while (i--) {\n while (this.lines.get(i).length < x) {\n this.lines.get(i).push(ch);\n }\n }\n }\n\n this.cols = x;\n this.setupStops(this.cols);\n\n // resize rows\n j = this.rows;\n addToY = 0;\n if (j < y) {\n el = this.element;\n while (j++ < y) {\n // y is rows, not this.y\n if (this.lines.length < y + this.ybase) {\n if (this.ybase > 0 && this.lines.length <= this.ybase + this.y + addToY + 1) {\n // There is room above the buffer and there are no empty elements below the line,\n // scroll up\n this.ybase--;\n addToY++;\n if (this.ydisp > 0) {\n // Viewport is at the top of the buffer, must increase downwards\n this.ydisp--;\n }\n } else {\n // Add a blank line if there is no buffer left at the top to scroll to, or if there\n // are blank lines after the cursor\n this.lines.push(this.blankLine());\n }\n }\n if (this.children.length < y) {\n this.insertRow();\n }\n }\n } else { // (j > y)\n while (j-- > y) {\n if (this.lines.length > y + this.ybase) {\n if (this.lines.length > this.ybase + this.y + 1) {\n // The line is a blank line below the cursor, remove it\n this.lines.pop();\n } else {\n // The line is the cursor, scroll down\n this.ybase++;\n this.ydisp++;\n }\n }\n if (this.children.length > y) {\n el = this.children.shift();\n if (!el) continue;\n el.parentNode.removeChild(el);\n }\n }\n }\n this.rows = y;\n\n // Make sure that the cursor stays on screen\n if (this.y >= y) {\n this.y = y - 1;\n }\n if (addToY) {\n this.y += addToY;\n }\n\n if (this.x >= x) {\n this.x = x - 1;\n }\n\n this.scrollTop = 0;\n this.scrollBottom = y - 1;\n\n this.charMeasure.measure();\n\n this.refresh(0, this.rows - 1);\n\n this.normal = null;\n\n this.geometry = [this.cols, this.rows];\n this.emit('resize', {terminal: this, cols: x, rows: y});\n};\n\n/**\n * Updates the range of rows to refresh\n * @param {number} y The number of rows to refresh next.\n */\nTerminal.prototype.updateRange = function(y) {\n if (y < this.refreshStart) this.refreshStart = y;\n if (y > this.refreshEnd) this.refreshEnd = y;\n // if (y > this.refreshEnd) {\n // this.refreshEnd = y;\n // if (y > this.rows - 1) {\n // this.refreshEnd = this.rows - 1;\n // }\n // }\n};\n\n/**\n * Set the range of refreshing to the maximum value\n */\nTerminal.prototype.maxRange = function() {\n this.refreshStart = 0;\n this.refreshEnd = this.rows - 1;\n};\n\n\n\n/**\n * Setup the tab stops.\n * @param {number} i\n */\nTerminal.prototype.setupStops = function(i) {\n if (i != null) {\n if (!this.tabs[i]) {\n i = this.prevStop(i);\n }\n } else {\n this.tabs = {};\n i = 0;\n }\n\n for (; i < this.cols; i += this.getOption('tabStopWidth')) {\n this.tabs[i] = true;\n }\n};\n\n\n/**\n * Move the cursor to the previous tab stop from the given position (default is current).\n * @param {number} x The position to move the cursor to the previous tab stop.\n */\nTerminal.prototype.prevStop = function(x) {\n if (x == null) x = this.x;\n while (!this.tabs[--x] && x > 0);\n return x >= this.cols\n ? this.cols - 1\n : x < 0 ? 0 : x;\n};\n\n\n/**\n * Move the cursor one tab stop forward from the given position (default is current).\n * @param {number} x The position to move the cursor one tab stop forward.\n */\nTerminal.prototype.nextStop = function(x) {\n if (x == null) x = this.x;\n while (!this.tabs[++x] && x < this.cols);\n return x >= this.cols\n ? this.cols - 1\n : x < 0 ? 0 : x;\n};\n\n\n/**\n * Erase in the identified line everything from \"x\" to the end of the line (right).\n * @param {number} x The column from which to start erasing to the end of the line.\n * @param {number} y The line in which to operate.\n */\nTerminal.prototype.eraseRight = function(x, y) {\n var line = this.lines.get(this.ybase + y);\n if (!line) {\n return;\n }\n var ch = [this.eraseAttr(), ' ', 1]; // xterm\n for (; x < this.cols; x++) {\n line[x] = ch;\n }\n this.updateRange(y);\n};\n\n\n\n/**\n * Erase in the identified line everything from \"x\" to the start of the line (left).\n * @param {number} x The column from which to start erasing to the start of the line.\n * @param {number} y The line in which to operate.\n */\nTerminal.prototype.eraseLeft = function(x, y) {\n var line = this.lines.get(this.ybase + y);\n if (!line) {\n return;\n }\n var ch = [this.eraseAttr(), ' ', 1]; // xterm\n x++;\n while (x--) {\n line[x] = ch;\n }\n this.updateRange(y);\n};\n\n/**\n * Clears the entire buffer, making the prompt line the new first line.\n */\nTerminal.prototype.clear = function() {\n if (this.ybase === 0 && this.y === 0) {\n // Don't clear if it's already clear\n return;\n }\n this.lines.set(0, this.lines.get(this.ybase + this.y));\n this.lines.length = 1;\n this.ydisp = 0;\n this.ybase = 0;\n this.y = 0;\n for (var i = 1; i < this.rows; i++) {\n this.lines.push(this.blankLine());\n }\n this.refresh(0, this.rows - 1);\n this.emit('scroll', this.ydisp);\n};\n\n/**\n * Erase all content in the given line\n * @param {number} y The line to erase all of its contents.\n */\nTerminal.prototype.eraseLine = function(y) {\n this.eraseRight(0, y);\n};\n\n\n/**\n * Return the data array of a blank line\n * @param {number} cur First bunch of data for each \"blank\" character.\n * @param {boolean} isWrapped Whether the new line is wrapped from the previous line.\n */\nTerminal.prototype.blankLine = function(cur, isWrapped) {\n var attr = cur\n ? this.eraseAttr()\n : this.defAttr;\n\n var ch = [attr, ' ', 1] // width defaults to 1 halfwidth character\n , line = []\n , i = 0;\n\n // TODO: It is not ideal that this is a property on an array, a buffer line\n // class should be added that will hold this data and other useful functions.\n if (isWrapped) {\n line.isWrapped = isWrapped;\n }\n\n for (; i < this.cols; i++) {\n line[i] = ch;\n }\n\n return line;\n};\n\n\n/**\n * If cur return the back color xterm feature attribute. Else return defAttr.\n * @param {object} cur\n */\nTerminal.prototype.ch = function(cur) {\n return cur\n ? [this.eraseAttr(), ' ', 1]\n : [this.defAttr, ' ', 1];\n};\n\n\n/**\n * Evaluate if the current erminal is the given argument.\n * @param {object} term The terminal to evaluate\n */\nTerminal.prototype.is = function(term) {\n var name = this.termName;\n return (name + '').indexOf(term) === 0;\n};\n\n\n/**\n * Emit the 'data' event and populate the given data.\n * @param {string} data The data to populate in the event.\n */\nTerminal.prototype.handler = function(data) {\n // Prevents all events to pty process if stdin is disabled\n if (this.options.disableStdin) {\n return;\n }\n\n // Input is being sent to the terminal, the terminal should focus the prompt.\n if (this.ybase !== this.ydisp) {\n this.scrollToBottom();\n }\n this.emit('data', data);\n};\n\n\n/**\n * Emit the 'title' event and populate the given title.\n * @param {string} title The title to populate in the event.\n */\nTerminal.prototype.handleTitle = function(title) {\n /**\n * This event is emitted when the title of the terminal is changed\n * from inside the terminal. The parameter is the new title.\n *\n * @event title\n */\n this.emit('title', title);\n};\n\n\n/**\n * ESC\n */\n\n/**\n * ESC D Index (IND is 0x84).\n */\nTerminal.prototype.index = function() {\n this.y++;\n if (this.y > this.scrollBottom) {\n this.y--;\n this.scroll();\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this.x >= this.cols) {\n this.x--;\n }\n};\n\n\n/**\n * ESC M Reverse Index (RI is 0x8d).\n *\n * Move the cursor up one row, inserting a new blank line if necessary.\n */\nTerminal.prototype.reverseIndex = function() {\n var j;\n if (this.y === this.scrollTop) {\n // possibly move the code below to term.reverseScroll();\n // test: echo -ne '\\e[1;1H\\e[44m\\eM\\e[0m'\n // blankLine(true) is xterm/linux behavior\n this.lines.shiftElements(this.y + this.ybase, this.rows - 1, 1);\n this.lines.set(this.y + this.ybase, this.blankLine(true));\n this.updateRange(this.scrollTop);\n this.updateRange(this.scrollBottom);\n } else {\n this.y--;\n }\n};\n\n\n/**\n * ESC c Full Reset (RIS).\n */\nTerminal.prototype.reset = function() {\n this.options.rows = this.rows;\n this.options.cols = this.cols;\n var customKeyEventHandler = this.customKeyEventHandler;\n var cursorBlinkInterval = this.cursorBlinkInterval;\n Terminal.call(this, this.options);\n this.customKeyEventHandler = customKeyEventHandler;\n this.cursorBlinkInterval = cursorBlinkInterval;\n this.refresh(0, this.rows - 1);\n this.viewport.syncScrollArea();\n};\n\n\n/**\n * ESC H Tab Set (HTS is 0x88).\n */\nTerminal.prototype.tabSet = function() {\n this.tabs[this.x] = true;\n};\n\n/**\n * Helpers\n */\n\nfunction on(el, type, handler, capture) {\n if (!Array.isArray(el)) {\n el = [el];\n }\n el.forEach(function (element) {\n element.addEventListener(type, handler, capture || false);\n });\n}\n\nfunction off(el, type, handler, capture) {\n el.removeEventListener(type, handler, capture || false);\n}\n\nfunction cancel(ev, force) {\n if (!this.cancelEvents && !force) {\n return;\n }\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n}\n\nfunction inherits(child, parent) {\n function f() {\n this.constructor = child;\n }\n f.prototype = parent.prototype;\n child.prototype = new f;\n}\n\nfunction indexOf(obj, el) {\n var i = obj.length;\n while (i--) {\n if (obj[i] === el) return i;\n }\n return -1;\n}\n\nfunction isThirdLevelShift(term, ev) {\n var thirdLevelKey =\n (term.browser.isMac && ev.altKey && !ev.ctrlKey && !ev.metaKey) ||\n (term.browser.isMSWindows && ev.altKey && ev.ctrlKey && !ev.metaKey);\n\n if (ev.type == 'keypress') {\n return thirdLevelKey;\n }\n\n // Don't invoke for arrows, pageDown, home, backspace, etc. (on non-keypress events)\n return thirdLevelKey && (!ev.keyCode || ev.keyCode > 47);\n}\n\n// Expose to InputHandler (temporary)\nTerminal.prototype.matchColor = matchColor;\n\nfunction matchColor(r1, g1, b1) {\n var hash = (r1 << 16) | (g1 << 8) | b1;\n\n if (matchColor._cache[hash] != null) {\n return matchColor._cache[hash];\n }\n\n var ldiff = Infinity\n , li = -1\n , i = 0\n , c\n , r2\n , g2\n , b2\n , diff;\n\n for (; i < Terminal.vcolors.length; i++) {\n c = Terminal.vcolors[i];\n r2 = c[0];\n g2 = c[1];\n b2 = c[2];\n\n diff = matchColor.distance(r1, g1, b1, r2, g2, b2);\n\n if (diff === 0) {\n li = i;\n break;\n }\n\n if (diff < ldiff) {\n ldiff = diff;\n li = i;\n }\n }\n\n return matchColor._cache[hash] = li;\n}\n\nmatchColor._cache = {};\n\n// http://stackoverflow.com/questions/1633828\nmatchColor.distance = function(r1, g1, b1, r2, g2, b2) {\n return Math.pow(30 * (r1 - r2), 2)\n + Math.pow(59 * (g1 - g2), 2)\n + Math.pow(11 * (b1 - b2), 2);\n};\n\nfunction each(obj, iter, con) {\n if (obj.forEach) return obj.forEach(iter, con);\n for (var i = 0; i < obj.length; i++) {\n iter.call(con, obj[i], i, obj);\n }\n}\n\nfunction wasMondifierKeyOnlyEvent(ev) {\n return ev.keyCode === 16 || // Shift\n ev.keyCode === 17 || // Ctrl\n ev.keyCode === 18; // Alt\n}\n\nfunction keys(obj) {\n if (Object.keys) return Object.keys(obj);\n var key, keys = [];\n for (key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n keys.push(key);\n }\n }\n return keys;\n}\n\n/**\n * Expose\n */\n\nTerminal.EventEmitter = EventEmitter;\nTerminal.inherits = inherits;\n\n/**\n * Adds an event listener to the terminal.\n *\n * @param {string} event The name of the event. TODO: Document all event types\n * @param {function} callback The function to call when the event is triggered.\n */\nTerminal.on = on;\nTerminal.off = off;\nTerminal.cancel = cancel;\n\nmodule.exports = Terminal;\n","/**\n * @license MIT\n */\n\nimport { CharMeasure } from './CharMeasure';\n\nexport function getCoordsRelativeToElement(event: MouseEvent, element: HTMLElement): [number, number] {\n // Ignore browsers that don't support MouseEvent.pageX\n if (event.pageX == null) {\n return null;\n }\n\n let x = event.pageX;\n let y = event.pageY;\n\n // Converts the coordinates from being relative to the document to being\n // relative to the terminal.\n while (element && element !== self.document.documentElement) {\n x -= element.offsetLeft;\n y -= element.offsetTop;\n element = 'offsetParent' in element ? element.offsetParent : element.parentElement;\n }\n return [x, y];\n}\n\n/**\n * Gets coordinates within the terminal for a particular mouse event. The result\n * is returned as an array in the form [x, y] instead of an object as it's a\n * little faster and this function is used in some low level code.\n * @param event The mouse event.\n * @param rowContainer The terminal's row container.\n * @param charMeasure The char measure object used to determine character sizes.\n * @param colCount The number of columns in the terminal.\n * @param rowCount The number of rows n the terminal.\n * @param isSelection Whether the request is for the selection or not. This will\n * apply an offset to the x value such that the left half of the cell will\n * select that cell and the right half will select the next cell.\n */\nexport function getCoords(event: MouseEvent, rowContainer: HTMLElement, charMeasure: CharMeasure, colCount: number, rowCount: number, isSelection?: boolean): [number, number] {\n const coords = getCoordsRelativeToElement(event, rowContainer);\n\n // Convert to cols/rows.\n coords[0] = Math.ceil((coords[0] + (isSelection ? charMeasure.width / 2 : 0)) / charMeasure.width);\n coords[1] = Math.ceil(coords[1] / charMeasure.height);\n\n // Ensure coordinates are within the terminal viewport.\n coords[0] = Math.min(Math.max(coords[0], 1), colCount + 1);\n coords[1] = Math.min(Math.max(coords[1], 1), rowCount + 1);\n\n return coords;\n}\n\n/**\n * Gets coordinates within the terminal for a particular mouse event, wrapping\n * them to the bounds of the terminal and adding 32 to both the x and y values\n * as expected by xterm.\n * @param event The mouse event.\n * @param rowContainer The terminal's row container.\n * @param charMeasure The char measure object used to determine character sizes.\n * @param colCount The number of columns in the terminal.\n * @param rowCount The number of rows in the terminal.\n */\nexport function getRawByteCoords(event: MouseEvent, rowContainer: HTMLElement, charMeasure: CharMeasure, colCount: number, rowCount: number): { x: number, y: number } {\n const coords = getCoords(event, rowContainer, charMeasure, colCount, rowCount);\n let x = coords[0];\n let y = coords[1];\n\n // xterm sends raw bytes and starts at 32 (SP) for each.\n x += 32;\n y += 32;\n\n return { x, y };\n}\n","/**\n * Generic utilities module with methods that can be helpful at different parts of the code base.\n * @module xterm/utils/Generic\n * @license MIT\n */\n\n/**\n * Return if the given array contains the given element\n * @param {Array} array The array to search for the given element.\n * @param {Object} el The element to look for into the array\n */\nexport function contains(arr: any[], el: any) {\n return arr.indexOf(el) >= 0;\n};\n","/**\n * @module xterm/utils/DomElementObjectPool\n * @license MIT\n */\n\n/**\n * An object pool that manages acquisition and releasing of DOM elements for\n * when reuse is desirable.\n */\nexport class DomElementObjectPool {\n private static readonly OBJECT_ID_ATTRIBUTE = 'data-obj-id';\n\n private static _objectCount = 0;\n\n private _type: string;\n private _pool: HTMLElement[];\n private _inUse: {[key: string]: HTMLElement};\n\n /**\n * @param type The DOM element type (div, span, etc.).\n */\n constructor(private type: string) {\n this._type = type;\n this._pool = [];\n this._inUse = {};\n }\n\n /**\n * Acquire an element from the pool, creating it if the pool is empty.\n */\n public acquire(): HTMLElement {\n let element: HTMLElement;\n if (this._pool.length === 0) {\n element = this._createNew();\n } else {\n element = this._pool.pop();\n }\n this._inUse[element.getAttribute(DomElementObjectPool.OBJECT_ID_ATTRIBUTE)] = element;\n return element;\n }\n\n /**\n * Release an element back into the pool. It's up to the caller of this\n * function to ensure that all external references to the element have been\n * removed.\n * @param element The element being released.\n */\n public release(element: HTMLElement): void {\n if (!this._inUse[element.getAttribute(DomElementObjectPool.OBJECT_ID_ATTRIBUTE)]) {\n throw new Error('Could not release an element not yet acquired');\n }\n delete this._inUse[element.getAttribute(DomElementObjectPool.OBJECT_ID_ATTRIBUTE)];\n this._cleanElement(element);\n this._pool.push(element);\n }\n\n /**\n * Creates a new element for the pool.\n */\n private _createNew(): HTMLElement {\n const element = document.createElement(this._type);\n const id = DomElementObjectPool._objectCount++;\n element.setAttribute(DomElementObjectPool.OBJECT_ID_ATTRIBUTE, id.toString(10));\n return element;\n }\n\n /**\n * Resets an element back to a \"clean state\".\n * @param element The element to be cleaned.\n */\n private _cleanElement(element: HTMLElement): void {\n element.className = '';\n element.innerHTML = '';\n }\n}\n","/**\n * Represents a circular list; a list with a maximum size that wraps around when push is called,\n * overriding values at the start of the list.\n * @module xterm/utils/CircularList\n * @license MIT\n */\nimport { EventEmitter } from '../EventEmitter';\n\nexport class CircularList extends EventEmitter {\n private _array: T[];\n private _startIndex: number;\n private _length: number;\n\n constructor(maxLength: number) {\n super();\n this._array = new Array(maxLength);\n this._startIndex = 0;\n this._length = 0;\n }\n\n public get maxLength(): number {\n return this._array.length;\n }\n\n public set maxLength(newMaxLength: number) {\n // Reconstruct array, starting at index 0. Only transfer values from the\n // indexes 0 to length.\n let newArray = new Array(newMaxLength);\n for (let i = 0; i < Math.min(newMaxLength, this.length); i++) {\n newArray[i] = this._array[this._getCyclicIndex(i)];\n }\n this._array = newArray;\n this._startIndex = 0;\n }\n\n public get length(): number {\n return this._length;\n }\n\n public set length(newLength: number) {\n if (newLength > this._length) {\n for (let i = this._length; i < newLength; i++) {\n this._array[i] = undefined;\n }\n }\n this._length = newLength;\n }\n\n public get forEach(): (callbackfn: (value: T, index: number) => void) => void {\n return (callbackfn: (value: T, index: number) => void) => {\n let i = 0;\n let length = this.length;\n for (let i = 0; i < length; i++) {\n callbackfn(this.get(i), i);\n }\n };\n }\n\n /**\n * Gets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index of the value to get.\n * @return The value corresponding to the index.\n */\n public get(index: number): T {\n return this._array[this._getCyclicIndex(index)];\n }\n\n /**\n * Sets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index to set.\n * @param value The value to set.\n */\n public set(index: number, value: T): void {\n this._array[this._getCyclicIndex(index)] = value;\n }\n\n /**\n * Pushes a new value onto the list, wrapping around to the start of the array, overriding index 0\n * if the maximum length is reached.\n * @param value The value to push onto the list.\n */\n public push(value: T): void {\n this._array[this._getCyclicIndex(this._length)] = value;\n if (this._length === this.maxLength) {\n this._startIndex++;\n if (this._startIndex === this.maxLength) {\n this._startIndex = 0;\n }\n this.emit('trim', 1);\n } else {\n this._length++;\n }\n }\n\n /**\n * Removes and returns the last value on the list.\n * @return The popped value.\n */\n public pop(): T {\n return this._array[this._getCyclicIndex(this._length-- - 1)];\n }\n\n /**\n * Deletes and/or inserts items at a particular index (in that order). Unlike\n * Array.prototype.splice, this operation does not return the deleted items as a new array in\n * order to save creating a new array. Note that this operation may shift all values in the list\n * in the worst case.\n * @param start The index to delete and/or insert.\n * @param deleteCount The number of elements to delete.\n * @param items The items to insert.\n */\n public splice(start: number, deleteCount: number, ...items: T[]): void {\n // Delete items\n if (deleteCount) {\n for (let i = start; i < this._length - deleteCount; i++) {\n this._array[this._getCyclicIndex(i)] = this._array[this._getCyclicIndex(i + deleteCount)];\n }\n this._length -= deleteCount;\n }\n\n if (items && items.length) {\n // Add items\n for (let i = this._length - 1; i >= start; i--) {\n this._array[this._getCyclicIndex(i + items.length)] = this._array[this._getCyclicIndex(i)];\n }\n for (let i = 0; i < items.length; i++) {\n this._array[this._getCyclicIndex(start + i)] = items[i];\n }\n\n // Adjust length as needed\n if (this._length + items.length > this.maxLength) {\n const countToTrim = (this._length + items.length) - this.maxLength;\n this._startIndex += countToTrim;\n this._length = this.maxLength;\n this.emit('trim', countToTrim);\n } else {\n this._length += items.length;\n }\n }\n }\n\n /**\n * Trims a number of items from the start of the list.\n * @param count The number of items to remove.\n */\n public trimStart(count: number): void {\n if (count > this._length) {\n count = this._length;\n }\n this._startIndex += count;\n this._length -= count;\n this.emit('trim', count);\n }\n\n public shiftElements(start: number, count: number, offset: number): void {\n if (count <= 0) {\n return;\n }\n if (start < 0 || start >= this._length) {\n throw new Error('start argument out of range');\n }\n if (start + offset < 0) {\n throw new Error('Cannot shift elements in list beyond index 0');\n }\n\n if (offset > 0) {\n for (let i = count - 1; i >= 0; i--) {\n this.set(start + i + offset, this.get(start + i));\n }\n const expandListBy = (start + count + offset) - this._length;\n if (expandListBy > 0) {\n this._length += expandListBy;\n while (this._length > this.maxLength) {\n this._length--;\n this._startIndex++;\n this.emit('trim', 1);\n }\n }\n } else {\n for (let i = 0; i < count; i++) {\n this.set(start + i + offset, this.get(start + i));\n }\n }\n }\n\n /**\n * Gets the cyclic index for the specified regular index. The cyclic index can then be used on the\n * backing array to get the element associated with the regular index.\n * @param index The regular index.\n * @returns The cyclic index.\n */\n private _getCyclicIndex(index: number): number {\n return (this._startIndex + index) % this.maxLength;\n }\n}\n","/**\n * @module xterm/utils/CharMeasure\n * @license MIT\n */\n\nimport { EventEmitter } from '../EventEmitter.js';\n\n/**\n * Utility class that measures the size of a character.\n */\nexport class CharMeasure extends EventEmitter {\n private _document: Document;\n private _parentElement: HTMLElement;\n private _measureElement: HTMLElement;\n private _width: number;\n private _height: number;\n\n constructor(document: Document, parentElement: HTMLElement) {\n super();\n this._document = document;\n this._parentElement = parentElement;\n }\n\n public get width(): number {\n return this._width;\n }\n\n public get height(): number {\n return this._height;\n }\n\n public measure(): void {\n if (!this._measureElement) {\n this._measureElement = this._document.createElement('span');\n this._measureElement.style.position = 'absolute';\n this._measureElement.style.top = '0';\n this._measureElement.style.left = '-9999em';\n this._measureElement.textContent = 'W';\n this._measureElement.setAttribute('aria-hidden', 'true');\n this._parentElement.appendChild(this._measureElement);\n // Perform _doMeasure async if the element was just attached as sometimes\n // getBoundingClientRect does not return accurate values without this.\n setTimeout(() => this._doMeasure(), 0);\n } else {\n this._doMeasure();\n }\n }\n\n private _doMeasure(): void {\n const geometry = this._measureElement.getBoundingClientRect();\n // The element is likely currently display:none, we should retain the\n // previous value.\n if (geometry.width === 0 || geometry.height === 0) {\n return;\n }\n if (this._width !== geometry.width || this._height !== geometry.height) {\n this._width = geometry.width;\n this._height = geometry.height;\n this.emit('charsizechanged');\n }\n }\n}\n","/**\n * Attributes and methods to help with identifying the current browser and platform.\n * @module xterm/utils/Browser\n * @license MIT\n */\n\nimport { contains } from './Generic';\n\nconst isNode = (typeof navigator === 'undefined') ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = !!~userAgent.indexOf('Firefox');\nexport const isMSIE = !!~userAgent.indexOf('MSIE') || !!~userAgent.indexOf('Trident');\n\n// Find the users platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = contains(['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'], platform);\nexport const isIpad = platform === 'iPad';\nexport const isIphone = platform === 'iPhone';\nexport const isMSWindows = contains(['Windows', 'Win16', 'Win32', 'WinCE'], platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n","/**\n * Clipboard handler module: exports methods for handling all clipboard-related events in the\n * terminal.\n * @module xterm/handlers/Clipboard\n * @license MIT\n */\n\nimport { ITerminal, ISelectionManager } from '../Interfaces';\n\ninterface IWindow extends Window {\n clipboardData?: {\n getData(format: string): string;\n setData(format: string, data: string);\n };\n}\n\ndeclare var window: IWindow;\n\n/**\n * Prepares text to be pasted into the terminal by normalizing the line endings\n * @param text The pasted text that needs processing before inserting into the terminal\n */\nexport function prepareTextForTerminal(text: string, isMSWindows: boolean): string {\n if (isMSWindows) {\n return text.replace(/\\r?\\n/g, '\\r');\n }\n return text;\n}\n\n/**\n * Binds copy functionality to the given terminal.\n * @param {ClipboardEvent} ev The original copy event to be handled\n */\nexport function copyHandler(ev: ClipboardEvent, term: ITerminal, selectionManager: ISelectionManager) {\n if (term.browser.isMSIE) {\n window.clipboardData.setData('Text', selectionManager.selectionText);\n } else {\n ev.clipboardData.setData('text/plain', selectionManager.selectionText);\n }\n\n // Prevent or the original text will be copied.\n ev.preventDefault();\n}\n\n/**\n * Redirect the clipboard's data to the terminal's input handler.\n * @param {ClipboardEvent} ev The original paste event to be handled\n * @param {Terminal} term The terminal on which to apply the handled paste event\n */\nexport function pasteHandler(ev: ClipboardEvent, term: ITerminal) {\n ev.stopPropagation();\n\n let text: string;\n\n let dispatchPaste = function(text) {\n text = prepareTextForTerminal(text, term.browser.isMSWindows);\n term.handler(text);\n term.textarea.value = '';\n term.emit('paste', text);\n\n return term.cancel(ev);\n };\n\n if (term.browser.isMSIE) {\n if (window.clipboardData) {\n text = window.clipboardData.getData('Text');\n dispatchPaste(text);\n }\n } else {\n if (ev.clipboardData) {\n text = ev.clipboardData.getData('text/plain');\n dispatchPaste(text);\n }\n }\n}\n\n/**\n * Moves the textarea under the mouse cursor and focuses it.\n * @param ev The original right click event to be handled.\n * @param textarea The terminal's textarea.\n */\nexport function moveTextAreaUnderMouseCursor(ev: MouseEvent, textarea: HTMLTextAreaElement) {\n // Bring textarea at the cursor position\n textarea.style.position = 'fixed';\n textarea.style.width = '20px';\n textarea.style.height = '20px';\n textarea.style.left = (ev.clientX - 10) + 'px';\n textarea.style.top = (ev.clientY - 10) + 'px';\n textarea.style.zIndex = '1000';\n\n textarea.focus();\n\n // Reset the terminal textarea's styling\n setTimeout(function () {\n textarea.style.position = null;\n textarea.style.width = null;\n textarea.style.height = null;\n textarea.style.left = null;\n textarea.style.top = null;\n textarea.style.zIndex = null;\n }, 4);\n}\n\n/**\n * Bind to right-click event and allow right-click copy and paste.\n * @param ev The original right click event to be handled.\n * @param textarea The terminal's textarea.\n * @param selectionManager The terminal's selection manager.\n */\nexport function rightClickHandler(ev: MouseEvent, textarea: HTMLTextAreaElement, selectionManager: ISelectionManager) {\n moveTextAreaUnderMouseCursor(ev, textarea);\n\n // Get textarea ready to copy from the context menu\n textarea.value = selectionManager.selectionText;\n textarea.select();\n}\n","/**\n * @license MIT\n */\n\nimport { ITerminal } from './Interfaces';\nimport { CharMeasure } from './utils/CharMeasure';\n\n/**\n * Represents the viewport of a terminal, the visible area within the larger buffer of output.\n * Logic for the virtual scroll bar is included in this object.\n */\nexport class Viewport {\n private currentRowHeight: number;\n private lastRecordedBufferLength: number;\n private lastRecordedViewportHeight: number;\n private lastTouchY: number;\n\n /**\n * Creates a new Viewport.\n * @param terminal The terminal this viewport belongs to.\n * @param viewportElement The DOM element acting as the viewport.\n * @param scrollArea The DOM element acting as the scroll area.\n * @param charMeasureElement A DOM element used to measure the character size of. the terminal.\n */\n constructor(\n private terminal: ITerminal,\n private viewportElement: HTMLElement,\n private scrollArea: HTMLElement,\n private charMeasure: CharMeasure\n ) {\n this.currentRowHeight = 0;\n this.lastRecordedBufferLength = 0;\n this.lastRecordedViewportHeight = 0;\n\n this.terminal.on('scroll', this.syncScrollArea.bind(this));\n this.terminal.on('resize', this.syncScrollArea.bind(this));\n this.viewportElement.addEventListener('scroll', this.onScroll.bind(this));\n\n // Perform this async to ensure the CharMeasure is ready.\n setTimeout(() => this.syncScrollArea(), 0);\n }\n\n /**\n * Refreshes row height, setting line-height, viewport height and scroll area height if\n * necessary.\n * @param charSize A character size measurement bounding rect object, if it doesn't exist it will\n * be created.\n */\n private refresh(): void {\n if (this.charMeasure.height > 0) {\n const rowHeightChanged = this.charMeasure.height !== this.currentRowHeight;\n if (rowHeightChanged) {\n this.currentRowHeight = this.charMeasure.height;\n this.viewportElement.style.lineHeight = this.charMeasure.height + 'px';\n this.terminal.rowContainer.style.lineHeight = this.charMeasure.height + 'px';\n }\n const viewportHeightChanged = this.lastRecordedViewportHeight !== this.terminal.rows;\n if (rowHeightChanged || viewportHeightChanged) {\n this.lastRecordedViewportHeight = this.terminal.rows;\n this.viewportElement.style.height = this.charMeasure.height * this.terminal.rows + 'px';\n this.terminal.selectionContainer.style.height = this.viewportElement.style.height;\n }\n this.scrollArea.style.height = (this.charMeasure.height * this.lastRecordedBufferLength) + 'px';\n }\n }\n\n /**\n * Updates dimensions and synchronizes the scroll area if necessary.\n */\n public syncScrollArea(): void {\n if (this.lastRecordedBufferLength !== this.terminal.lines.length) {\n // If buffer height changed\n this.lastRecordedBufferLength = this.terminal.lines.length;\n this.refresh();\n } else if (this.lastRecordedViewportHeight !== this.terminal.rows) {\n // If viewport height changed\n this.refresh();\n } else {\n // If size has changed, refresh viewport\n if (this.charMeasure.height !== this.currentRowHeight) {\n this.refresh();\n }\n }\n\n // Sync scrollTop\n const scrollTop = this.terminal.ydisp * this.currentRowHeight;\n if (this.viewportElement.scrollTop !== scrollTop) {\n this.viewportElement.scrollTop = scrollTop;\n }\n }\n\n /**\n * Handles scroll events on the viewport, calculating the new viewport and requesting the\n * terminal to scroll to it.\n * @param ev The scroll event.\n */\n private onScroll(ev: Event) {\n const newRow = Math.round(this.viewportElement.scrollTop / this.currentRowHeight);\n const diff = newRow - this.terminal.ydisp;\n this.terminal.scrollDisp(diff, true);\n }\n\n /**\n * Handles mouse wheel events by adjusting the viewport's scrollTop and delegating the actual\n * scrolling to `onScroll`, this event needs to be attached manually by the consumer of\n * `Viewport`.\n * @param ev The mouse wheel event.\n */\n public onWheel(ev: WheelEvent) {\n if (ev.deltaY === 0) {\n // Do nothing if it's not a vertical scroll event\n return;\n }\n // Fallback to WheelEvent.DOM_DELTA_PIXEL\n let multiplier = 1;\n if (ev.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n multiplier = this.currentRowHeight;\n } else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n multiplier = this.currentRowHeight * this.terminal.rows;\n }\n this.viewportElement.scrollTop += ev.deltaY * multiplier;\n // Prevent the page from scrolling when the terminal scrolls\n ev.preventDefault();\n };\n\n /**\n * Handles the touchstart event, recording the touch occurred.\n * @param ev The touch event.\n */\n public onTouchStart(ev: TouchEvent) {\n this.lastTouchY = ev.touches[0].pageY;\n };\n\n /**\n * Handles the touchmove event, scrolling the viewport if the position shifted.\n * @param ev The touch event.\n */\n public onTouchMove(ev: TouchEvent) {\n let deltaY = this.lastTouchY - ev.touches[0].pageY;\n this.lastTouchY = ev.touches[0].pageY;\n if (deltaY === 0) {\n return;\n }\n this.viewportElement.scrollTop += deltaY;\n ev.preventDefault();\n };\n}\n","/**\n * @license MIT\n */\n\nimport { ITerminal } from './Interfaces';\n\n/**\n * Represents a selection within the buffer. This model only cares about column\n * and row coordinates, not wide characters.\n */\nexport class SelectionModel {\n /**\n * Whether select all is currently active.\n */\n public isSelectAllActive: boolean;\n\n /**\n * The [x, y] position the selection starts at.\n */\n public selectionStart: [number, number];\n\n /**\n * The minimal length of the selection from the start position. When double\n * clicking on a word, the word will be selected which makes the selection\n * start at the start of the word and makes this variable the length.\n */\n public selectionStartLength: number;\n\n /**\n * The [x, y] position the selection ends at.\n */\n public selectionEnd: [number, number];\n\n constructor(\n private _terminal: ITerminal\n ) {\n this.clearSelection();\n }\n\n /**\n * Clears the current selection.\n */\n public clearSelection(): void {\n this.selectionStart = null;\n this.selectionEnd = null;\n this.isSelectAllActive = false;\n this.selectionStartLength = 0;\n }\n\n /**\n * The final selection start, taking into consideration select all.\n */\n public get finalSelectionStart(): [number, number] {\n if (this.isSelectAllActive) {\n return [0, 0];\n }\n\n if (!this.selectionEnd || !this.selectionStart) {\n return this.selectionStart;\n }\n\n return this.areSelectionValuesReversed() ? this.selectionEnd : this.selectionStart;\n }\n\n /**\n * The final selection end, taking into consideration select all, double click\n * word selection and triple click line selection.\n */\n public get finalSelectionEnd(): [number, number] {\n if (this.isSelectAllActive) {\n return [this._terminal.cols, this._terminal.ybase + this._terminal.rows - 1];\n }\n\n if (!this.selectionStart) {\n return null;\n }\n\n // Use the selection start if the end doesn't exist or they're reversed\n if (!this.selectionEnd || this.areSelectionValuesReversed()) {\n return [this.selectionStart[0] + this.selectionStartLength, this.selectionStart[1]];\n }\n\n // Ensure the the word/line is selected after a double/triple click\n if (this.selectionStartLength) {\n // Select the larger of the two when start and end are on the same line\n if (this.selectionEnd[1] === this.selectionStart[1]) {\n return [Math.max(this.selectionStart[0] + this.selectionStartLength, this.selectionEnd[0]), this.selectionEnd[1]];\n }\n }\n return this.selectionEnd;\n }\n\n /**\n * Returns whether the selection start and end are reversed.\n */\n public areSelectionValuesReversed(): boolean {\n const start = this.selectionStart;\n const end = this.selectionEnd;\n return start[1] > end[1] || (start[1] === end[1] && start[0] > end[0]);\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n * @return Whether a refresh is necessary.\n */\n public onTrim(amount: number): boolean {\n // Adjust the selection position based on the trimmed amount.\n if (this.selectionStart) {\n this.selectionStart[1] -= amount;\n }\n if (this.selectionEnd) {\n this.selectionEnd[1] -= amount;\n }\n\n // The selection has moved off the buffer, clear it.\n if (this.selectionEnd && this.selectionEnd[1] < 0) {\n this.clearSelection();\n return true;\n }\n\n // If the selection start is trimmed, ensure the start column is 0.\n if (this.selectionStart && this.selectionStart[1] < 0) {\n this.selectionStart[1] = 0;\n }\n return false;\n }\n}\n","/**\n * @license MIT\n */\n\nimport * as Mouse from './utils/Mouse';\nimport * as Browser from './utils/Browser';\nimport { CharMeasure } from './utils/CharMeasure';\nimport { CircularList } from './utils/CircularList';\nimport { EventEmitter } from './EventEmitter';\nimport { ITerminal } from './Interfaces';\nimport { SelectionModel } from './SelectionModel';\n\n/**\n * The number of pixels the mouse needs to be above or below the viewport in\n * order to scroll at the maximum speed.\n */\nconst DRAG_SCROLL_MAX_THRESHOLD = 50;\n\n/**\n * The maximum scrolling speed\n */\nconst DRAG_SCROLL_MAX_SPEED = 15;\n\n/**\n * The number of milliseconds between drag scroll updates.\n */\nconst DRAG_SCROLL_INTERVAL = 50;\n\n/**\n * The amount of time before mousedown events are no longer stacked to create\n * double/triple click events.\n */\nconst CLEAR_MOUSE_DOWN_TIME = 400;\n\n/**\n * The number of pixels in each direction that the mouse must move before\n * mousedown events are no longer stacked to create double/triple click events.\n */\nconst CLEAR_MOUSE_DISTANCE = 10;\n\n/**\n * A string containing all characters that are considered word separated by the\n * double click to select work logic.\n */\nconst WORD_SEPARATORS = ' ()[]{}\\'\"';\n\n// TODO: Move these constants elsewhere, they belong in a buffer or buffer\n// data/line class.\nconst LINE_DATA_CHAR_INDEX = 1;\nconst LINE_DATA_WIDTH_INDEX = 2;\n\nconst NON_BREAKING_SPACE_CHAR = String.fromCharCode(160);\nconst ALL_NON_BREAKING_SPACE_REGEX = new RegExp(NON_BREAKING_SPACE_CHAR, 'g');\n\n/**\n * Represents a position of a word on a line.\n */\ninterface IWordPosition {\n start: number;\n length: number;\n}\n\n/**\n * A selection mode, this drives how the selection behaves on mouse move.\n */\nenum SelectionMode {\n NORMAL,\n WORD,\n LINE\n}\n\n/**\n * A class that manages the selection of the terminal. With help from\n * SelectionModel, SelectionManager handles with all logic associated with\n * dealing with the selection, including handling mouse interaction, wide\n * characters and fetching the actual text within the selection. Rendering is\n * not handled by the SelectionManager but a 'refresh' event is fired when the\n * selection is ready to be redrawn.\n */\nexport class SelectionManager extends EventEmitter {\n protected _model: SelectionModel;\n\n /**\n * The amount to scroll every drag scroll update (depends on how far the mouse\n * drag is above or below the terminal).\n */\n private _dragScrollAmount: number;\n\n /**\n * The last time the mousedown event fired, this is used to track double and\n * triple clicks.\n */\n private _lastMouseDownTime: number;\n\n /**\n * The last position the mouse was clicked [x, y].\n */\n private _lastMousePosition: [number, number];\n\n /**\n * The number of clicks of the mousedown event. This is used to keep track of\n * double and triple clicks.\n */\n private _clickCount: number;\n\n /**\n * The current selection mode.\n */\n private _activeSelectionMode: SelectionMode;\n\n /**\n * A setInterval timer that is active while the mouse is down whose callback\n * scrolls the viewport when necessary.\n */\n private _dragScrollIntervalTimer: NodeJS.Timer;\n\n /**\n * The animation frame ID used for refreshing the selection.\n */\n private _refreshAnimationFrame: number;\n\n private _bufferTrimListener: any;\n private _mouseMoveListener: EventListener;\n private _mouseDownListener: EventListener;\n private _mouseUpListener: EventListener;\n\n constructor(\n private _terminal: ITerminal,\n private _buffer: CircularList,\n private _rowContainer: HTMLElement,\n private _charMeasure: CharMeasure\n ) {\n super();\n this._initListeners();\n this.enable();\n\n this._model = new SelectionModel(_terminal);\n this._lastMouseDownTime = 0;\n this._activeSelectionMode = SelectionMode.NORMAL;\n }\n\n /**\n * Initializes listener variables.\n */\n private _initListeners() {\n this._bufferTrimListener = (amount: number) => this._onTrim(amount);\n this._mouseMoveListener = event => this._onMouseMove(event);\n this._mouseDownListener = event => this._onMouseDown(event);\n this._mouseUpListener = event => this._onMouseUp(event);\n }\n\n /**\n * Disables the selection manager. This is useful for when terminal mouse\n * are enabled.\n */\n public disable() {\n this.clearSelection();\n this._buffer.off('trim', this._bufferTrimListener);\n this._rowContainer.removeEventListener('mousedown', this._mouseDownListener);\n }\n\n /**\n * Enable the selection manager.\n */\n public enable() {\n // Only adjust the selection on trim, shiftElements is rarely used (only in\n // reverseIndex) and delete in a splice is only ever used when the same\n // number of elements was just added. Given this is could actually be\n // beneficial to leave the selection as is for these cases.\n this._buffer.on('trim', this._bufferTrimListener);\n this._rowContainer.addEventListener('mousedown', this._mouseDownListener);\n }\n\n /**\n * Sets the active buffer, this should be called when the alt buffer is\n * switched in or out.\n * @param buffer The active buffer.\n */\n public setBuffer(buffer: CircularList): void {\n this._buffer = buffer;\n this.clearSelection();\n }\n\n /**\n * Gets whether there is an active text selection.\n */\n public get hasSelection(): boolean {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[0] !== end[0] || start[1] !== end[1];\n }\n\n /**\n * Gets the text currently selected.\n */\n public get selectionText(): string {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return '';\n }\n\n // Get first row\n const startRowEndCol = start[1] === end[1] ? end[0] : null;\n let result: string[] = [];\n result.push(this._translateBufferLineToString(this._buffer.get(start[1]), true, start[0], startRowEndCol));\n\n // Get middle rows\n for (let i = start[1] + 1; i <= end[1] - 1; i++) {\n const bufferLine = this._buffer.get(i);\n const lineText = this._translateBufferLineToString(bufferLine, true);\n if (bufferLine.isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n\n // Get final row\n if (start[1] !== end[1]) {\n const bufferLine = this._buffer.get(end[1]);\n const lineText = this._translateBufferLineToString(bufferLine, true, 0, end[0]);\n if (bufferLine.isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n\n // Format string by replacing non-breaking space chars with regular spaces\n // and joining the array into a multi-line string.\n const formattedResult = result.map(line => {\n return line.replace(ALL_NON_BREAKING_SPACE_REGEX, ' ');\n }).join(Browser.isMSWindows ? '\\r\\n' : '\\n');\n\n return formattedResult;\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this.refresh();\n }\n\n /**\n * Translates a buffer line to a string, with optional start and end columns.\n * Wide characters will count as two columns in the resulting string. This\n * function is useful for getting the actual text underneath the raw selection\n * position.\n * @param line The line being translated.\n * @param trimRight Whether to trim whitespace to the right.\n * @param startCol The column to start at.\n * @param endCol The column to end at.\n */\n private _translateBufferLineToString(line: any, trimRight: boolean, startCol: number = 0, endCol: number = null): string {\n // TODO: This function should live in a buffer or buffer line class\n\n // Get full line\n let lineString = '';\n let widthAdjustedStartCol = startCol;\n let widthAdjustedEndCol = endCol;\n for (let i = 0; i < line.length; i++) {\n const char = line[i];\n lineString += char[LINE_DATA_CHAR_INDEX];\n // Adjust start and end cols for wide characters if they affect their\n // column indexes\n if (char[LINE_DATA_WIDTH_INDEX] === 0) {\n if (startCol >= i) {\n widthAdjustedStartCol--;\n }\n if (endCol >= i) {\n widthAdjustedEndCol--;\n }\n }\n }\n\n // Calculate the final end col by trimming whitespace on the right of the\n // line if needed.\n let finalEndCol = widthAdjustedEndCol || line.length;\n if (trimRight) {\n const rightWhitespaceIndex = lineString.search(/\\s+$/);\n if (rightWhitespaceIndex !== -1) {\n finalEndCol = Math.min(finalEndCol, rightWhitespaceIndex);\n }\n // Return the empty string if only trimmed whitespace is selected\n if (finalEndCol <= widthAdjustedStartCol) {\n return '';\n }\n }\n\n return lineString.substring(widthAdjustedStartCol, finalEndCol);\n }\n\n /**\n * Queues a refresh, redrawing the selection on the next opportunity.\n * @param isNewSelection Whether the selection should be registered as a new\n * selection on Linux.\n */\n public refresh(isNewSelection?: boolean): void {\n // Queue the refresh for the renderer\n if (!this._refreshAnimationFrame) {\n this._refreshAnimationFrame = window.requestAnimationFrame(() => this._refresh());\n }\n\n // If the platform is Linux and the refresh call comes from a mouse event,\n // we need to update the selection for middle click to paste selection.\n if (Browser.isLinux && isNewSelection) {\n const selectionText = this.selectionText;\n if (selectionText.length) {\n this.emit('newselection', this.selectionText);\n }\n }\n }\n\n /**\n * Fires the refresh event, causing consumers to pick it up and redraw the\n * selection state.\n */\n private _refresh(): void {\n this._refreshAnimationFrame = null;\n this.emit('refresh', { start: this._model.finalSelectionStart, end: this._model.finalSelectionEnd });\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n this._model.isSelectAllActive = true;\n this.refresh();\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n */\n private _onTrim(amount: number) {\n const needsRefresh = this._model.onTrim(amount);\n if (needsRefresh) {\n this.refresh();\n }\n }\n\n /**\n * Gets the 0-based [x, y] buffer coordinates of the current mouse event.\n * @param event The mouse event.\n */\n private _getMouseBufferCoords(event: MouseEvent): [number, number] {\n const coords = Mouse.getCoords(event, this._rowContainer, this._charMeasure, this._terminal.cols, this._terminal.rows, true);\n // Convert to 0-based\n coords[0]--;\n coords[1]--;\n // Convert viewport coords to buffer coords\n coords[1] += this._terminal.ydisp;\n return coords;\n }\n\n /**\n * Gets the amount the viewport should be scrolled based on how far out of the\n * terminal the mouse is.\n * @param event The mouse event.\n */\n private _getMouseEventScrollAmount(event: MouseEvent): number {\n let offset = Mouse.getCoordsRelativeToElement(event, this._rowContainer)[1];\n const terminalHeight = this._terminal.rows * this._charMeasure.height;\n if (offset >= 0 && offset <= terminalHeight) {\n return 0;\n }\n if (offset > terminalHeight) {\n offset -= terminalHeight;\n }\n\n offset = Math.min(Math.max(offset, -DRAG_SCROLL_MAX_THRESHOLD), DRAG_SCROLL_MAX_THRESHOLD);\n offset /= DRAG_SCROLL_MAX_THRESHOLD;\n return (offset / Math.abs(offset)) + Math.round(offset * (DRAG_SCROLL_MAX_SPEED - 1));\n }\n\n /**\n * Handles te mousedown event, setting up for a new selection.\n * @param event The mousedown event.\n */\n private _onMouseDown(event: MouseEvent) {\n // Only action the primary button\n if (event.button !== 0) {\n return;\n }\n\n // Tell the browser not to start a regular selection\n event.preventDefault();\n\n // Reset drag scroll state\n this._dragScrollAmount = 0;\n\n this._setMouseClickCount(event);\n\n if (event.shiftKey) {\n this._onShiftClick(event);\n } else {\n if (this._clickCount === 1) {\n this._onSingleClick(event);\n } else if (this._clickCount === 2) {\n this._onDoubleClick(event);\n } else if (this._clickCount === 3) {\n this._onTripleClick(event);\n }\n }\n\n this._addMouseDownListeners();\n this.refresh(true);\n }\n\n /**\n * Adds listeners when mousedown is triggered.\n */\n private _addMouseDownListeners(): void {\n // Listen on the document so that dragging outside of viewport works\n this._rowContainer.ownerDocument.addEventListener('mousemove', this._mouseMoveListener);\n this._rowContainer.ownerDocument.addEventListener('mouseup', this._mouseUpListener);\n this._dragScrollIntervalTimer = setInterval(() => this._dragScroll(), DRAG_SCROLL_INTERVAL);\n }\n\n /**\n * Removes the listeners that are registered when mousedown is triggered.\n */\n private _removeMouseDownListeners(): void {\n this._rowContainer.ownerDocument.removeEventListener('mousemove', this._mouseMoveListener);\n this._rowContainer.ownerDocument.removeEventListener('mouseup', this._mouseUpListener);\n clearInterval(this._dragScrollIntervalTimer);\n this._dragScrollIntervalTimer = null;\n }\n\n /**\n * Performs a shift click, setting the selection end position to the mouse\n * position.\n * @param event The mouse event.\n */\n private _onShiftClick(event: MouseEvent): void {\n if (this._model.selectionStart) {\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n }\n }\n\n /**\n * Performs a single click, resetting relevant state and setting the selection\n * start position.\n * @param event The mouse event.\n */\n private _onSingleClick(event: MouseEvent): void {\n this._model.selectionStartLength = 0;\n this._model.isSelectAllActive = false;\n this._activeSelectionMode = SelectionMode.NORMAL;\n this._model.selectionStart = this._getMouseBufferCoords(event);\n if (this._model.selectionStart) {\n this._model.selectionEnd = null;\n // If the mouse is over the second half of a wide character, adjust the\n // selection to cover the whole character\n const char = this._buffer.get(this._model.selectionStart[1])[this._model.selectionStart[0]];\n if (char[LINE_DATA_WIDTH_INDEX] === 0) {\n this._model.selectionStart[0]++;\n }\n }\n }\n\n /**\n * Performs a double click, selecting the current work.\n * @param event The mouse event.\n */\n private _onDoubleClick(event: MouseEvent): void {\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._activeSelectionMode = SelectionMode.WORD;\n this._selectWordAt(coords);\n }\n }\n\n /**\n * Performs a triple click, selecting the current line and activating line\n * select mode.\n * @param event The mouse event.\n */\n private _onTripleClick(event: MouseEvent): void {\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._activeSelectionMode = SelectionMode.LINE;\n this._selectLineAt(coords[1]);\n }\n }\n\n /**\n * Sets the number of clicks for the current mousedown event based on the time\n * and position of the last mousedown event.\n * @param event The mouse event.\n */\n private _setMouseClickCount(event: MouseEvent): void {\n let currentTime = (new Date()).getTime();\n if (currentTime - this._lastMouseDownTime > CLEAR_MOUSE_DOWN_TIME || this._distanceFromLastMousePosition(event) > CLEAR_MOUSE_DISTANCE) {\n this._clickCount = 0;\n }\n this._lastMouseDownTime = currentTime;\n this._lastMousePosition = [event.pageX, event.pageY];\n this._clickCount++;\n }\n\n /**\n * Gets the maximum number of pixels in each direction the mouse has moved.\n * @param event The mouse event.\n */\n private _distanceFromLastMousePosition(event: MouseEvent): number {\n const result = Math.max(\n Math.abs(this._lastMousePosition[0] - event.pageX),\n Math.abs(this._lastMousePosition[1] - event.pageY));\n return result;\n }\n\n /**\n * Handles the mousemove event when the mouse button is down, recording the\n * end of the selection and refreshing the selection.\n * @param event The mousemove event.\n */\n private _onMouseMove(event: MouseEvent) {\n // Record the previous position so we know whether to redraw the selection\n // at the end.\n const previousSelectionEnd = this._model.selectionEnd ? [this._model.selectionEnd[0], this._model.selectionEnd[1]] : null;\n\n // Set the initial selection end based on the mouse coordinates\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n\n // Select the entire line if line select mode is active.\n if (this._activeSelectionMode === SelectionMode.LINE) {\n if (this._model.selectionEnd[1] < this._model.selectionStart[1]) {\n this._model.selectionEnd[0] = 0;\n } else {\n this._model.selectionEnd[0] = this._terminal.cols;\n }\n } else if (this._activeSelectionMode === SelectionMode.WORD) {\n this._selectToWordAt(this._model.selectionEnd);\n }\n\n // Determine the amount of scrolling that will happen.\n this._dragScrollAmount = this._getMouseEventScrollAmount(event);\n\n // If the cursor was above or below the viewport, make sure it's at the\n // start or end of the viewport respectively.\n if (this._dragScrollAmount > 0) {\n this._model.selectionEnd[0] = this._terminal.cols - 1;\n } else if (this._dragScrollAmount < 0) {\n this._model.selectionEnd[0] = 0;\n }\n\n // If the character is a wide character include the cell to the right in the\n // selection. Note that selections at the very end of the line will never\n // have a character.\n if (this._model.selectionEnd[1] < this._buffer.length) {\n const char = this._buffer.get(this._model.selectionEnd[1])[this._model.selectionEnd[0]];\n if (char && char[2] === 0) {\n this._model.selectionEnd[0]++;\n }\n }\n\n // Only draw here if the selection changes.\n if (!previousSelectionEnd ||\n previousSelectionEnd[0] !== this._model.selectionEnd[0] ||\n previousSelectionEnd[1] !== this._model.selectionEnd[1]) {\n this.refresh(true);\n }\n }\n\n /**\n * The callback that occurs every DRAG_SCROLL_INTERVAL ms that does the\n * scrolling of the viewport.\n */\n private _dragScroll() {\n if (this._dragScrollAmount) {\n this._terminal.scrollDisp(this._dragScrollAmount, false);\n // Re-evaluate selection\n if (this._dragScrollAmount > 0) {\n this._model.selectionEnd = [this._terminal.cols - 1, this._terminal.ydisp + this._terminal.rows];\n } else {\n this._model.selectionEnd = [0, this._terminal.ydisp];\n }\n this.refresh();\n }\n }\n\n /**\n * Handles the mouseup event, removing the mousedown listeners.\n * @param event The mouseup event.\n */\n private _onMouseUp(event: MouseEvent) {\n this._removeMouseDownListeners();\n }\n\n /**\n * Converts a viewport column to the character index on the buffer line, the\n * latter takes into account wide characters.\n * @param coords The coordinates to find the 2 index for.\n */\n private _convertViewportColToCharacterIndex(bufferLine: any, coords: [number, number]): number {\n let charIndex = coords[0];\n for (let i = 0; coords[0] >= i; i++) {\n const char = bufferLine[i];\n if (char[LINE_DATA_WIDTH_INDEX] === 0) {\n charIndex--;\n }\n }\n return charIndex;\n }\n\n /**\n * Gets positional information for the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _getWordAt(coords: [number, number]): IWordPosition {\n const bufferLine = this._buffer.get(coords[1]);\n const line = this._translateBufferLineToString(bufferLine, false);\n\n // Get actual index, taking into consideration wide characters\n let endIndex = this._convertViewportColToCharacterIndex(bufferLine, coords);\n let startIndex = endIndex;\n\n // Record offset to be used later\n const charOffset = coords[0] - startIndex;\n let leftWideCharCount = 0;\n let rightWideCharCount = 0;\n\n if (line.charAt(startIndex) === ' ') {\n // Expand until non-whitespace is hit\n while (startIndex > 0 && line.charAt(startIndex - 1) === ' ') {\n startIndex--;\n }\n while (endIndex < line.length && line.charAt(endIndex + 1) === ' ') {\n endIndex++;\n }\n } else {\n // Expand until whitespace is hit. This algorithm works by scanning left\n // and right from the starting position, keeping both the index format\n // (line) and the column format (bufferLine) in sync. When a wide\n // character is hit, it is recorded and the column index is adjusted.\n let startCol = coords[0];\n let endCol = coords[0];\n // Consider the initial position, skip it and increment the wide char\n // variable\n if (bufferLine[startCol][LINE_DATA_WIDTH_INDEX] === 0) {\n leftWideCharCount++;\n startCol--;\n }\n if (bufferLine[endCol][LINE_DATA_WIDTH_INDEX] === 2) {\n rightWideCharCount++;\n endCol++;\n }\n // Expand the string in both directions until a space is hit\n while (startIndex > 0 && !this._isCharWordSeparator(line.charAt(startIndex - 1))) {\n if (bufferLine[startCol - 1][LINE_DATA_WIDTH_INDEX] === 0) {\n // If the next character is a wide char, record it and skip the column\n leftWideCharCount++;\n startCol--;\n }\n startIndex--;\n startCol--;\n }\n while (endIndex + 1 < line.length && !this._isCharWordSeparator(line.charAt(endIndex + 1))) {\n if (bufferLine[endCol + 1][LINE_DATA_WIDTH_INDEX] === 2) {\n // If the next character is a wide char, record it and skip the column\n rightWideCharCount++;\n endCol++;\n }\n endIndex++;\n endCol++;\n }\n }\n\n const start = startIndex + charOffset - leftWideCharCount;\n const length = Math.min(endIndex - startIndex + leftWideCharCount + rightWideCharCount + 1/*include endIndex char*/, this._terminal.cols);\n return {start, length};\n }\n\n /**\n * Selects the word at the coordinates specified.\n * @param coords The coordinates to get the word at.\n */\n protected _selectWordAt(coords: [number, number]): void {\n const wordPosition = this._getWordAt(coords);\n this._model.selectionStart = [wordPosition.start, coords[1]];\n this._model.selectionStartLength = wordPosition.length;\n }\n\n /**\n * Sets the selection end to the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _selectToWordAt(coords: [number, number]): void {\n const wordPosition = this._getWordAt(coords);\n this._model.selectionEnd = [this._model.areSelectionValuesReversed() ? wordPosition.start : (wordPosition.start + wordPosition.length), coords[1]];\n }\n\n /**\n * Gets whether the character is considered a word separator by the select\n * word logic.\n * @param char The character to check.\n */\n private _isCharWordSeparator(char: string): boolean {\n return WORD_SEPARATORS.indexOf(char) >= 0;\n }\n\n /**\n * Selects the line specified.\n * @param line The line index.\n */\n protected _selectLineAt(line: number): void {\n this._model.selectionStart = [0, line];\n this._model.selectionStartLength = this._terminal.cols;\n }\n}\n","/**\n * @license MIT\n */\n\nimport { ITerminal } from './Interfaces';\nimport { DomElementObjectPool } from './utils/DomElementObjectPool';\n\n/**\n * The maximum number of refresh frames to skip when the write buffer is non-\n * empty. Note that these frames may be intermingled with frames that are\n * skipped via requestAnimationFrame's mechanism.\n */\nconst MAX_REFRESH_FRAME_SKIP = 5;\n\n/**\n * Flags used to render terminal text properly.\n */\nenum FLAGS {\n BOLD = 1,\n UNDERLINE = 2,\n BLINK = 4,\n INVERSE = 8,\n INVISIBLE = 16\n};\n\nlet brokenBold: boolean = null;\n\nexport class Renderer {\n /** A queue of the rows to be refreshed */\n private _refreshRowsQueue: {start: number, end: number}[] = [];\n private _refreshFramesSkipped = 0;\n private _refreshAnimationFrame = null;\n\n private _spanElementObjectPool = new DomElementObjectPool('span');\n\n constructor(private _terminal: ITerminal) {\n // Figure out whether boldness affects\n // the character width of monospace fonts.\n if (brokenBold === null) {\n brokenBold = checkBoldBroken((this._terminal).element);\n }\n this._spanElementObjectPool = new DomElementObjectPool('span');\n\n // TODO: Pull more DOM interactions into Renderer.constructor, element for\n // example should be owned by Renderer (and also exposed by Terminal due to\n // to established public API).\n }\n\n /**\n * Queues a refresh between two rows (inclusive), to be done on next animation\n * frame.\n * @param {number} start The start row.\n * @param {number} end The end row.\n */\n public queueRefresh(start: number, end: number): void {\n this._refreshRowsQueue.push({ start: start, end: end });\n if (!this._refreshAnimationFrame) {\n this._refreshAnimationFrame = window.requestAnimationFrame(this._refreshLoop.bind(this));\n }\n }\n\n /**\n * Performs the refresh loop callback, calling refresh only if a refresh is\n * necessary before queueing up the next one.\n */\n private _refreshLoop(): void {\n // Skip MAX_REFRESH_FRAME_SKIP frames if the writeBuffer is non-empty as it\n // will need to be immediately refreshed anyway. This saves a lot of\n // rendering time as the viewport DOM does not need to be refreshed, no\n // scroll events, no layouts, etc.\n const skipFrame = this._terminal.writeBuffer.length > 0 && this._refreshFramesSkipped++ <= MAX_REFRESH_FRAME_SKIP;\n if (skipFrame) {\n this._refreshAnimationFrame = window.requestAnimationFrame(this._refreshLoop.bind(this));\n return;\n }\n\n this._refreshFramesSkipped = 0;\n let start;\n let end;\n if (this._refreshRowsQueue.length > 4) {\n // Just do a full refresh when 5+ refreshes are queued\n start = 0;\n end = this._terminal.rows - 1;\n } else {\n // Get start and end rows that need refreshing\n start = this._refreshRowsQueue[0].start;\n end = this._refreshRowsQueue[0].end;\n for (let i = 1; i < this._refreshRowsQueue.length; i++) {\n if (this._refreshRowsQueue[i].start < start) {\n start = this._refreshRowsQueue[i].start;\n }\n if (this._refreshRowsQueue[i].end > end) {\n end = this._refreshRowsQueue[i].end;\n }\n }\n }\n this._refreshRowsQueue = [];\n this._refreshAnimationFrame = null;\n this._refresh(start, end);\n }\n\n /**\n * Refreshes (re-renders) terminal content within two rows (inclusive)\n *\n * Rendering Engine:\n *\n * In the screen buffer, each character is stored as a an array with a character\n * and a 32-bit integer:\n * - First value: a utf-16 character.\n * - Second value:\n * - Next 9 bits: background color (0-511).\n * - Next 9 bits: foreground color (0-511).\n * - Next 14 bits: a mask for misc. flags:\n * - 1=bold\n * - 2=underline\n * - 4=blink\n * - 8=inverse\n * - 16=invisible\n *\n * @param {number} start The row to start from (between 0 and terminal's height terminal - 1)\n * @param {number} end The row to end at (between fromRow and terminal's height terminal - 1)\n */\n private _refresh(start: number, end: number): void {\n // If this is a big refresh, remove the terminal rows from the DOM for faster calculations\n let parent;\n if (end - start >= this._terminal.rows / 2) {\n parent = this._terminal.element.parentNode;\n if (parent) {\n this._terminal.element.removeChild(this._terminal.rowContainer);\n }\n }\n\n let width = this._terminal.cols;\n let y = start;\n\n if (end >= this._terminal.rows) {\n this._terminal.log('`end` is too large. Most likely a bad CSR.');\n end = this._terminal.rows - 1;\n }\n\n for (; y <= end; y++) {\n let row = y + this._terminal.ydisp;\n\n let line = this._terminal.lines.get(row);\n\n let x;\n if (this._terminal.y === y - (this._terminal.ybase - this._terminal.ydisp) &&\n this._terminal.cursorState &&\n !this._terminal.cursorHidden) {\n x = this._terminal.x;\n } else {\n x = -1;\n }\n\n let attr = this._terminal.defAttr;\n\n const documentFragment = document.createDocumentFragment();\n let innerHTML = '';\n let currentElement;\n\n // Return the row's spans to the pool\n while (this._terminal.children[y].children.length) {\n const child = this._terminal.children[y].children[0];\n this._terminal.children[y].removeChild(child);\n this._spanElementObjectPool.release(child);\n }\n\n for (let i = 0; i < width; i++) {\n // TODO: Could data be a more specific type?\n let data: any = line[i][0];\n const ch = line[i][1];\n const ch_width: any = line[i][2];\n if (!ch_width) {\n continue;\n }\n\n if (i === x) {\n data = -1;\n }\n\n if (data !== attr) {\n if (attr !== this._terminal.defAttr) {\n if (innerHTML) {\n currentElement.innerHTML = innerHTML;\n innerHTML = '';\n }\n documentFragment.appendChild(currentElement);\n currentElement = null;\n }\n if (data !== this._terminal.defAttr) {\n if (innerHTML && !currentElement) {\n currentElement = this._spanElementObjectPool.acquire();\n }\n if (currentElement) {\n if (innerHTML) {\n currentElement.innerHTML = innerHTML;\n innerHTML = '';\n }\n documentFragment.appendChild(currentElement);\n }\n currentElement = this._spanElementObjectPool.acquire();\n if (data === -1) {\n currentElement.classList.add('reverse-video');\n currentElement.classList.add('terminal-cursor');\n } else {\n let bg = data & 0x1ff;\n let fg = (data >> 9) & 0x1ff;\n let flags = data >> 18;\n\n if (flags & FLAGS.BOLD) {\n if (!brokenBold) {\n currentElement.classList.add('xterm-bold');\n }\n // See: XTerm*boldColors\n if (fg < 8) {\n fg += 8;\n }\n }\n\n if (flags & FLAGS.UNDERLINE) {\n currentElement.classList.add('xterm-underline');\n }\n\n if (flags & FLAGS.BLINK) {\n currentElement.classList.add('xterm-blink');\n }\n\n // If inverse flag is on, then swap the foreground and background variables.\n if (flags & FLAGS.INVERSE) {\n let temp = bg;\n bg = fg;\n fg = temp;\n // Should inverse just be before the above boldColors effect instead?\n if ((flags & 1) && fg < 8) {\n fg += 8;\n }\n }\n\n if (flags & FLAGS.INVISIBLE) {\n currentElement.classList.add('xterm-hidden');\n }\n\n /**\n * Weird situation: Invert flag used black foreground and white background results\n * in invalid background color, positioned at the 256 index of the 256 terminal\n * color map. Pin the colors manually in such a case.\n *\n * Source: https://github.com/sourcelair/xterm.js/issues/57\n */\n if (flags & FLAGS.INVERSE) {\n if (bg === 257) {\n bg = 15;\n }\n if (fg === 256) {\n fg = 0;\n }\n }\n\n if (bg < 256) {\n currentElement.classList.add(`xterm-bg-color-${bg}`);\n }\n\n if (fg < 256) {\n currentElement.classList.add(`xterm-color-${fg}`);\n }\n }\n }\n }\n\n if (ch_width === 2) {\n // Wrap wide characters so they're sized correctly. It's more difficult to release these\n // from the object pool so just create new ones via innerHTML.\n innerHTML += `${ch}`;\n } else if (ch.charCodeAt(0) > 255) {\n // Wrap any non-wide unicode character as some fonts size them badly\n innerHTML += `${ch}`;\n } else {\n switch (ch) {\n case '&':\n innerHTML += '&';\n break;\n case '<':\n innerHTML += '<';\n break;\n case '>':\n innerHTML += '>';\n break;\n default:\n if (ch <= ' ') {\n innerHTML += ' ';\n } else {\n innerHTML += ch;\n }\n break;\n }\n }\n\n attr = data;\n }\n\n if (innerHTML && !currentElement) {\n currentElement = this._spanElementObjectPool.acquire();\n }\n if (currentElement) {\n if (innerHTML) {\n currentElement.innerHTML = innerHTML;\n innerHTML = '';\n }\n documentFragment.appendChild(currentElement);\n currentElement = null;\n }\n\n this._terminal.children[y].appendChild(documentFragment);\n }\n\n if (parent) {\n this._terminal.element.appendChild(this._terminal.rowContainer);\n }\n\n this._terminal.emit('refresh', {element: this._terminal.element, start: start, end: end});\n };\n\n /**\n * Refreshes the selection in the DOM.\n * @param start The selection start.\n * @param end The selection end.\n */\n public refreshSelection(start: [number, number], end: [number, number]) {\n // Remove all selections\n while (this._terminal.selectionContainer.children.length) {\n this._terminal.selectionContainer.removeChild(this._terminal.selectionContainer.children[0]);\n }\n\n // Selection does not exist\n if (!start || !end) {\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportStartRow = start[1] - this._terminal.ydisp;\n const viewportEndRow = end[1] - this._terminal.ydisp;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, this._terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= this._terminal.rows || viewportCappedEndRow < 0) {\n return;\n }\n\n // Create the selections\n const documentFragment = document.createDocumentFragment();\n // Draw first row\n const startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0;\n const endCol = viewportCappedStartRow === viewportCappedEndRow ? end[0] : this._terminal.cols;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow, startCol, endCol));\n // Draw middle rows\n const middleRowsCount = viewportCappedEndRow - viewportCappedStartRow - 1;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow + 1, 0, this._terminal.cols, middleRowsCount));\n // Draw final row\n if (viewportCappedStartRow !== viewportCappedEndRow) {\n // Only draw viewportEndRow if it's not the same as viewporttartRow\n const endCol = viewportEndRow === viewportCappedEndRow ? end[0] : this._terminal.cols;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedEndRow, 0, endCol));\n }\n this._terminal.selectionContainer.appendChild(documentFragment);\n }\n\n /**\n * Creates a selection element at the specified position.\n * @param row The row of the selection.\n * @param colStart The start column.\n * @param colEnd The end columns.\n */\n private _createSelectionElement(row: number, colStart: number, colEnd: number, rowCount: number = 1): HTMLElement {\n const element = document.createElement('div');\n element.style.height = `${rowCount * this._terminal.charMeasure.height}px`;\n element.style.top = `${row * this._terminal.charMeasure.height}px`;\n element.style.left = `${colStart * this._terminal.charMeasure.width}px`;\n element.style.width = `${this._terminal.charMeasure.width * (colEnd - colStart)}px`;\n return element;\n }\n}\n\n\n// If bold is broken, we can't use it in the terminal.\nfunction checkBoldBroken(terminal) {\n const document = terminal.ownerDocument;\n const el = document.createElement('span');\n el.innerHTML = 'hello world';\n terminal.appendChild(el);\n const w1 = el.offsetWidth;\n const h1 = el.offsetHeight;\n el.style.fontWeight = 'bold';\n const w2 = el.offsetWidth;\n const h2 = el.offsetHeight;\n terminal.removeChild(el);\n return w1 !== w2 || h1 !== h2;\n}\n","/**\n * @license MIT\n */\n\nimport { C0 } from './EscapeSequences';\nimport { IInputHandler } from './Interfaces';\nimport { CHARSETS, DEFAULT_CHARSET } from './Charsets';\n\nconst normalStateHandler: {[key: string]: (parser: Parser, handler: IInputHandler) => void} = {};\nnormalStateHandler[C0.BEL] = (parser, handler) => handler.bell();\nnormalStateHandler[C0.LF] = (parser, handler) => handler.lineFeed();\nnormalStateHandler[C0.VT] = normalStateHandler[C0.LF];\nnormalStateHandler[C0.FF] = normalStateHandler[C0.LF];\nnormalStateHandler[C0.CR] = (parser, handler) => handler.carriageReturn();\nnormalStateHandler[C0.BS] = (parser, handler) => handler.backspace();\nnormalStateHandler[C0.HT] = (parser, handler) => handler.tab();\nnormalStateHandler[C0.SO] = (parser, handler) => handler.shiftOut();\nnormalStateHandler[C0.SI] = (parser, handler) => handler.shiftIn();\nnormalStateHandler[C0.ESC] = (parser, handler) => parser.setState(ParserState.ESCAPED);\n\n// TODO: Remove terminal when parser owns params and currentParam\nconst escapedStateHandler: {[key: string]: (parser: Parser, terminal: any) => void} = {};\nescapedStateHandler['['] = (parser, terminal) => {\n // ESC [ Control Sequence Introducer (CSI is 0x9b)\n terminal.params = [];\n terminal.currentParam = 0;\n parser.setState(ParserState.CSI_PARAM);\n};\nescapedStateHandler[']'] = (parser, terminal) => {\n // ESC ] Operating System Command (OSC is 0x9d)\n terminal.params = [];\n terminal.currentParam = 0;\n parser.setState(ParserState.OSC);\n};\nescapedStateHandler['P'] = (parser, terminal) => {\n // ESC P Device Control String (DCS is 0x90)\n terminal.params = [];\n terminal.currentParam = 0;\n parser.setState(ParserState.DCS);\n};\nescapedStateHandler['_'] = (parser, terminal) => {\n // ESC _ Application Program Command ( APC is 0x9f).\n parser.setState(ParserState.IGNORE);\n};\nescapedStateHandler['^'] = (parser, terminal) => {\n // ESC ^ Privacy Message ( PM is 0x9e).\n parser.setState(ParserState.IGNORE);\n};\nescapedStateHandler['c'] = (parser, terminal) => {\n // ESC c Full Reset (RIS).\n terminal.reset();\n};\nescapedStateHandler['E'] = (parser, terminal) => {\n // ESC E Next Line ( NEL is 0x85).\n terminal.x = 0;\n terminal.index();\n parser.setState(ParserState.NORMAL);\n};\nescapedStateHandler['D'] = (parser, terminal) => {\n // ESC D Index ( IND is 0x84).\n terminal.index();\n parser.setState(ParserState.NORMAL);\n};\nescapedStateHandler['M'] = (parser, terminal) => {\n // ESC M Reverse Index ( RI is 0x8d).\n terminal.reverseIndex();\n parser.setState(ParserState.NORMAL);\n};\nescapedStateHandler['%'] = (parser, terminal) => {\n // ESC % Select default/utf-8 character set.\n // @ = default, G = utf-8\n terminal.setgLevel(0);\n terminal.setgCharset(0, DEFAULT_CHARSET); // US (default)\n parser.setState(ParserState.NORMAL);\n parser.skipNextChar();\n};\nescapedStateHandler[C0.CAN] = (parser) => parser.setState(ParserState.NORMAL);\n\nconst csiParamStateHandler: {[key: string]: (parser: Parser) => void} = {};\ncsiParamStateHandler['?'] = (parser) => parser.setPrefix('?');\ncsiParamStateHandler['>'] = (parser) => parser.setPrefix('>');\ncsiParamStateHandler['!'] = (parser) => parser.setPrefix('!');\ncsiParamStateHandler['0'] = (parser) => parser.setParam(parser.getParam() * 10);\ncsiParamStateHandler['1'] = (parser) => parser.setParam(parser.getParam() * 10 + 1);\ncsiParamStateHandler['2'] = (parser) => parser.setParam(parser.getParam() * 10 + 2);\ncsiParamStateHandler['3'] = (parser) => parser.setParam(parser.getParam() * 10 + 3);\ncsiParamStateHandler['4'] = (parser) => parser.setParam(parser.getParam() * 10 + 4);\ncsiParamStateHandler['5'] = (parser) => parser.setParam(parser.getParam() * 10 + 5);\ncsiParamStateHandler['6'] = (parser) => parser.setParam(parser.getParam() * 10 + 6);\ncsiParamStateHandler['7'] = (parser) => parser.setParam(parser.getParam() * 10 + 7);\ncsiParamStateHandler['8'] = (parser) => parser.setParam(parser.getParam() * 10 + 8);\ncsiParamStateHandler['9'] = (parser) => parser.setParam(parser.getParam() * 10 + 9);\ncsiParamStateHandler['$'] = (parser) => parser.setPostfix('$');\ncsiParamStateHandler['\"'] = (parser) => parser.setPostfix('\"');\ncsiParamStateHandler[' '] = (parser) => parser.setPostfix(' ');\ncsiParamStateHandler['\\''] = (parser) => parser.setPostfix('\\'');\ncsiParamStateHandler[';'] = (parser) => parser.finalizeParam();\ncsiParamStateHandler[C0.CAN] = (parser) => parser.setState(ParserState.NORMAL);\n\nconst csiStateHandler: {[key: string]: (handler: IInputHandler, params: number[], prefix: string, postfix: string, parser: Parser) => void} = {};\ncsiStateHandler['@'] = (handler, params, prefix) => handler.insertChars(params);\ncsiStateHandler['A'] = (handler, params, prefix) => handler.cursorUp(params);\ncsiStateHandler['B'] = (handler, params, prefix) => handler.cursorDown(params);\ncsiStateHandler['C'] = (handler, params, prefix) => handler.cursorForward(params);\ncsiStateHandler['D'] = (handler, params, prefix) => handler.cursorBackward(params);\ncsiStateHandler['E'] = (handler, params, prefix) => handler.cursorNextLine(params);\ncsiStateHandler['F'] = (handler, params, prefix) => handler.cursorPrecedingLine(params);\ncsiStateHandler['G'] = (handler, params, prefix) => handler.cursorCharAbsolute(params);\ncsiStateHandler['H'] = (handler, params, prefix) => handler.cursorPosition(params);\ncsiStateHandler['I'] = (handler, params, prefix) => handler.cursorForwardTab(params);\ncsiStateHandler['J'] = (handler, params, prefix) => handler.eraseInDisplay(params);\ncsiStateHandler['K'] = (handler, params, prefix) => handler.eraseInLine(params);\ncsiStateHandler['L'] = (handler, params, prefix) => handler.insertLines(params);\ncsiStateHandler['M'] = (handler, params, prefix) => handler.deleteLines(params);\ncsiStateHandler['P'] = (handler, params, prefix) => handler.deleteChars(params);\ncsiStateHandler['S'] = (handler, params, prefix) => handler.scrollUp(params);\ncsiStateHandler['T'] = (handler, params, prefix) => {\n if (params.length < 2 && !prefix) {\n handler.scrollDown(params);\n }\n};\ncsiStateHandler['X'] = (handler, params, prefix) => handler.eraseChars(params);\ncsiStateHandler['Z'] = (handler, params, prefix) => handler.cursorBackwardTab(params);\ncsiStateHandler['`'] = (handler, params, prefix) => handler.charPosAbsolute(params);\ncsiStateHandler['a'] = (handler, params, prefix) => handler.HPositionRelative(params);\ncsiStateHandler['b'] = (handler, params, prefix) => handler.repeatPrecedingCharacter(params);\ncsiStateHandler['c'] = (handler, params, prefix) => handler.sendDeviceAttributes(params);\ncsiStateHandler['d'] = (handler, params, prefix) => handler.linePosAbsolute(params);\ncsiStateHandler['e'] = (handler, params, prefix) => handler.VPositionRelative(params);\ncsiStateHandler['f'] = (handler, params, prefix) => handler.HVPosition(params);\ncsiStateHandler['g'] = (handler, params, prefix) => handler.tabClear(params);\ncsiStateHandler['h'] = (handler, params, prefix) => handler.setMode(params);\ncsiStateHandler['l'] = (handler, params, prefix) => handler.resetMode(params);\ncsiStateHandler['m'] = (handler, params, prefix) => handler.charAttributes(params);\ncsiStateHandler['n'] = (handler, params, prefix) => handler.deviceStatus(params);\ncsiStateHandler['p'] = (handler, params, prefix) => {\n switch (prefix) {\n case '!': handler.softReset(params); break;\n }\n};\ncsiStateHandler['q'] = (handler, params, prefix, postfix) => {\n if (postfix === ' ') {\n handler.setCursorStyle(params);\n }\n};\ncsiStateHandler['r'] = (handler, params) => handler.setScrollRegion(params);\ncsiStateHandler['s'] = (handler, params) => handler.saveCursor(params);\ncsiStateHandler['u'] = (handler, params) => handler.restoreCursor(params);\ncsiStateHandler[C0.CAN] = (handler, params, prefix, postfix, parser) => parser.setState(ParserState.NORMAL);\n\nenum ParserState {\n NORMAL = 0,\n ESCAPED = 1,\n CSI_PARAM = 2,\n CSI = 3,\n OSC = 4,\n CHARSET = 5,\n DCS = 6,\n IGNORE = 7\n}\n\n/**\n * The terminal's parser, all input into the terminal goes through the parser\n * which parses and defers the actual input handling the the IInputHandler\n * specified in the constructor.\n */\nexport class Parser {\n private _state: ParserState;\n private _position: number;\n\n // TODO: Remove terminal when handler can do everything\n constructor(\n private _inputHandler: IInputHandler,\n private _terminal: any\n ) {\n this._state = ParserState.NORMAL;\n }\n\n /**\n * Parse and handle data.\n *\n * @param data The data to parse.\n */\n public parse(data: string): ParserState {\n let l = data.length, j, cs, ch, code, low;\n\n this._position = 0;\n // apply leftover surrogate high from last write\n if (this._terminal.surrogate_high) {\n data = this._terminal.surrogate_high + data;\n this._terminal.surrogate_high = '';\n }\n\n for (; this._position < l; this._position++) {\n ch = data[this._position];\n\n // FIXME: higher chars than 0xa0 are not allowed in escape sequences\n // --> maybe move to default\n code = data.charCodeAt(this._position);\n if (0xD800 <= code && code <= 0xDBFF) {\n // we got a surrogate high\n // get surrogate low (next 2 bytes)\n low = data.charCodeAt(this._position + 1);\n if (isNaN(low)) {\n // end of data stream, save surrogate high\n this._terminal.surrogate_high = ch;\n continue;\n }\n code = ((code - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;\n ch += data.charAt(this._position + 1);\n }\n // surrogate low - already handled above\n if (0xDC00 <= code && code <= 0xDFFF)\n continue;\n\n switch (this._state) {\n case ParserState.NORMAL:\n if (ch in normalStateHandler) {\n normalStateHandler[ch](this, this._inputHandler);\n } else {\n this._inputHandler.addChar(ch, code);\n }\n break;\n case ParserState.ESCAPED:\n if (ch in escapedStateHandler) {\n escapedStateHandler[ch](this, this._terminal);\n // Skip switch as it was just handled\n break;\n }\n switch (ch) {\n\n // ESC (,),*,+,-,. Designate G0-G2 Character Set.\n case '(': // <-- this seems to get all the attention\n case ')':\n case '*':\n case '+':\n case '-':\n case '.':\n switch (ch) {\n case '(':\n this._terminal.gcharset = 0;\n break;\n case ')':\n this._terminal.gcharset = 1;\n break;\n case '*':\n this._terminal.gcharset = 2;\n break;\n case '+':\n this._terminal.gcharset = 3;\n break;\n case '-':\n this._terminal.gcharset = 1;\n break;\n case '.':\n this._terminal.gcharset = 2;\n break;\n }\n this._state = ParserState.CHARSET;\n break;\n\n // Designate G3 Character Set (VT300).\n // A = ISO Latin-1 Supplemental.\n // Not implemented.\n case '/':\n this._terminal.gcharset = 3;\n this._state = ParserState.CHARSET;\n this._position--;\n break;\n\n // ESC N\n // Single Shift Select of G2 Character Set\n // ( SS2 is 0x8e). This affects next character only.\n case 'N':\n break;\n // ESC O\n // Single Shift Select of G3 Character Set\n // ( SS3 is 0x8f). This affects next character only.\n case 'O':\n break;\n // ESC n\n // Invoke the G2 Character Set as GL (LS2).\n case 'n':\n this._terminal.setgLevel(2);\n break;\n // ESC o\n // Invoke the G3 Character Set as GL (LS3).\n case 'o':\n this._terminal.setgLevel(3);\n break;\n // ESC |\n // Invoke the G3 Character Set as GR (LS3R).\n case '|':\n this._terminal.setgLevel(3);\n break;\n // ESC }\n // Invoke the G2 Character Set as GR (LS2R).\n case '}':\n this._terminal.setgLevel(2);\n break;\n // ESC ~\n // Invoke the G1 Character Set as GR (LS1R).\n case '~':\n this._terminal.setgLevel(1);\n break;\n\n // ESC 7 Save Cursor (DECSC).\n case '7':\n this._inputHandler.saveCursor();\n this._state = ParserState.NORMAL;\n break;\n\n // ESC 8 Restore Cursor (DECRC).\n case '8':\n this._inputHandler.restoreCursor();\n this._state = ParserState.NORMAL;\n break;\n\n // ESC # 3 DEC line height/width\n case '#':\n this._state = ParserState.NORMAL;\n this._position++;\n break;\n\n // ESC H Tab Set (HTS is 0x88).\n case 'H':\n this._terminal.tabSet();\n this._state = ParserState.NORMAL;\n break;\n\n // ESC = Application Keypad (DECKPAM).\n case '=':\n this._terminal.log('Serial port requested application keypad.');\n this._terminal.applicationKeypad = true;\n this._terminal.viewport.syncScrollArea();\n this._state = ParserState.NORMAL;\n break;\n\n // ESC > Normal Keypad (DECKPNM).\n case '>':\n this._terminal.log('Switching back to normal keypad.');\n this._terminal.applicationKeypad = false;\n this._terminal.viewport.syncScrollArea();\n this._state = ParserState.NORMAL;\n break;\n\n default:\n this._state = ParserState.NORMAL;\n this._terminal.error('Unknown ESC control: %s.', ch);\n break;\n }\n break;\n\n case ParserState.CHARSET:\n if (ch in CHARSETS) {\n cs = CHARSETS[ch];\n if (ch === '/') { // ISOLatin is actually /A\n this.skipNextChar();\n }\n } else {\n cs = DEFAULT_CHARSET;\n }\n this._terminal.setgCharset(this._terminal.gcharset, cs);\n this._terminal.gcharset = null;\n this._state = ParserState.NORMAL;\n break;\n\n case ParserState.OSC:\n // OSC Ps ; Pt ST\n // OSC Ps ; Pt BEL\n // Set Text Parameters.\n if (ch === C0.ESC || ch === C0.BEL) {\n if (ch === C0.ESC) this._position++;\n\n this._terminal.params.push(this._terminal.currentParam);\n\n switch (this._terminal.params[0]) {\n case 0:\n case 1:\n case 2:\n if (this._terminal.params[1]) {\n this._terminal.title = this._terminal.params[1];\n this._terminal.handleTitle(this._terminal.title);\n }\n break;\n case 3:\n // set X property\n break;\n case 4:\n case 5:\n // change dynamic colors\n break;\n case 10:\n case 11:\n case 12:\n case 13:\n case 14:\n case 15:\n case 16:\n case 17:\n case 18:\n case 19:\n // change dynamic ui colors\n break;\n case 46:\n // change log file\n break;\n case 50:\n // dynamic font\n break;\n case 51:\n // emacs shell\n break;\n case 52:\n // manipulate selection data\n break;\n case 104:\n case 105:\n case 110:\n case 111:\n case 112:\n case 113:\n case 114:\n case 115:\n case 116:\n case 117:\n case 118:\n // reset colors\n break;\n }\n\n this._terminal.params = [];\n this._terminal.currentParam = 0;\n this._state = ParserState.NORMAL;\n } else {\n if (!this._terminal.params.length) {\n if (ch >= '0' && ch <= '9') {\n this._terminal.currentParam =\n this._terminal.currentParam * 10 + ch.charCodeAt(0) - 48;\n } else if (ch === ';') {\n this._terminal.params.push(this._terminal.currentParam);\n this._terminal.currentParam = '';\n }\n } else {\n this._terminal.currentParam += ch;\n }\n }\n break;\n\n case ParserState.CSI_PARAM:\n if (ch in csiParamStateHandler) {\n csiParamStateHandler[ch](this);\n break;\n }\n this.finalizeParam();\n // Fall through the CSI as this character should be the CSI code.\n this._state = ParserState.CSI;\n\n case ParserState.CSI:\n if (ch in csiStateHandler) {\n csiStateHandler[ch](this._inputHandler, this._terminal.params, this._terminal.prefix, this._terminal.postfix, this);\n } else {\n this._terminal.error('Unknown CSI code: %s.', ch);\n }\n\n this._state = ParserState.NORMAL;\n this._terminal.prefix = '';\n this._terminal.postfix = '';\n break;\n\n case ParserState.DCS:\n if (ch === C0.ESC || ch === C0.BEL) {\n if (ch === C0.ESC) this._position++;\n let pt;\n let valid: boolean;\n\n switch (this._terminal.prefix) {\n // User-Defined Keys (DECUDK).\n case '':\n break;\n\n // Request Status String (DECRQSS).\n // test: echo -e '\\eP$q\"p\\e\\\\'\n case '$q':\n pt = this._terminal.currentParam;\n valid = false;\n\n switch (pt) {\n // DECSCA\n case '\"q':\n pt = '0\"q';\n break;\n\n // DECSCL\n case '\"p':\n pt = '61\"p';\n break;\n\n // DECSTBM\n case 'r':\n pt = ''\n + (this._terminal.scrollTop + 1)\n + ';'\n + (this._terminal.scrollBottom + 1)\n + 'r';\n break;\n\n // SGR\n case 'm':\n pt = '0m';\n break;\n\n default:\n this._terminal.error('Unknown DCS Pt: %s.', pt);\n pt = '';\n break;\n }\n\n this._terminal.send(C0.ESC + 'P' + +valid + '$r' + pt + C0.ESC + '\\\\');\n break;\n\n // Set Termcap/Terminfo Data (xterm, experimental).\n case '+p':\n break;\n\n // Request Termcap/Terminfo String (xterm, experimental)\n // Regular xterm does not even respond to this sequence.\n // This can cause a small glitch in vim.\n // test: echo -ne '\\eP+q6b64\\e\\\\'\n case '+q':\n pt = this._terminal.currentParam;\n valid = false;\n\n this._terminal.send(C0.ESC + 'P' + +valid + '+r' + pt + C0.ESC + '\\\\');\n break;\n\n default:\n this._terminal.error('Unknown DCS prefix: %s.', this._terminal.prefix);\n break;\n }\n\n this._terminal.currentParam = 0;\n this._terminal.prefix = '';\n this._state = ParserState.NORMAL;\n } else if (!this._terminal.currentParam) {\n if (!this._terminal.prefix && ch !== '$' && ch !== '+') {\n this._terminal.currentParam = ch;\n } else if (this._terminal.prefix.length === 2) {\n this._terminal.currentParam = ch;\n } else {\n this._terminal.prefix += ch;\n }\n } else {\n this._terminal.currentParam += ch;\n }\n break;\n\n case ParserState.IGNORE:\n // For PM and APC.\n if (ch === C0.ESC || ch === C0.BEL) {\n if (ch === C0.ESC) this._position++;\n this._state = ParserState.NORMAL;\n }\n break;\n }\n }\n return this._state;\n }\n\n /**\n * Set the parser's current parsing state.\n *\n * @param state The new state.\n */\n public setState(state: ParserState): void {\n this._state = state;\n }\n\n /**\n * Sets the parsier's current prefix. CSI codes can have prefixes of '?', '>'\n * or '!'.\n *\n * @param prefix The prefix.\n */\n public setPrefix(prefix: string): void {\n this._terminal.prefix = prefix;\n }\n\n /**\n * Sets the parsier's current prefix. CSI codes can have postfixes of '$',\n * '\"', ' ', '\\''.\n *\n * @param postfix The postfix.\n */\n public setPostfix(postfix: string): void {\n this._terminal.postfix = postfix;\n }\n\n /**\n * Sets the parser's current parameter.\n *\n * @param param the parameter.\n */\n public setParam(param: number) {\n this._terminal.currentParam = param;\n }\n\n /**\n * Gets the parser's current parameter.\n */\n public getParam(): number {\n return this._terminal.currentParam;\n }\n\n /**\n * Finalizes the parser's current parameter, adding it to the list of\n * parameters and setting the new current parameter to 0.\n */\n public finalizeParam(): void {\n this._terminal.params.push(this._terminal.currentParam);\n this._terminal.currentParam = 0;\n }\n\n /**\n * Tell the parser to skip the next character.\n */\n public skipNextChar(): void {\n this._position++;\n }\n\n /**\n * Tell the parser to repeat parsing the current character (for example if it\n * needs parsing using a different state.\n */\n // public repeatChar(): void {\n // this._position--;\n // }\n}\n","/**\n * @license MIT\n */\n\nimport { LinkMatcherOptions } from './Interfaces';\nimport { LinkMatcher, LinkMatcherHandler, LinkMatcherValidationCallback } from './Types';\n\nconst INVALID_LINK_CLASS = 'xterm-invalid-link';\n\nconst protocolClause = '(https?:\\\\/\\\\/)';\nconst domainCharacterSet = '[\\\\da-z\\\\.-]+';\nconst negatedDomainCharacterSet = '[^\\\\da-z\\\\.-]+';\nconst domainBodyClause = '(' + domainCharacterSet + ')';\nconst tldClause = '([a-z\\\\.]{2,6})';\nconst ipClause = '((\\\\d{1,3}\\\\.){3}\\\\d{1,3})';\nconst localHostClause = '(localhost)';\nconst portClause = '(:\\\\d{1,5})';\nconst hostClause = '((' + domainBodyClause + '\\\\.' + tldClause + ')|' + ipClause + '|' + localHostClause + ')' + portClause + '?';\nconst pathClause = '(\\\\/[\\\\/\\\\w\\\\.\\\\-%~]*)*';\nconst queryStringHashFragmentCharacterSet = '[0-9\\\\w\\\\[\\\\]\\\\(\\\\)\\\\/\\\\?\\\\!#@$%&\\'*+,:;~\\\\=\\\\.\\\\-]*';\nconst queryStringClause = '(\\\\?' + queryStringHashFragmentCharacterSet + ')?';\nconst hashFragmentClause = '(#' + queryStringHashFragmentCharacterSet + ')?';\nconst negatedPathCharacterSet = '[^\\\\/\\\\w\\\\.\\\\-%]+';\nconst bodyClause = hostClause + pathClause + queryStringClause + hashFragmentClause;\nconst start = '(?:^|' + negatedDomainCharacterSet + ')(';\nconst end = ')($|' + negatedPathCharacterSet + ')';\nconst strictUrlRegex = new RegExp(start + protocolClause + bodyClause + end);\n\n/**\n * The ID of the built in http(s) link matcher.\n */\nconst HYPERTEXT_LINK_MATCHER_ID = 0;\n\n/**\n * The Linkifier applies links to rows shortly after they have been refreshed.\n */\nexport class Linkifier {\n /**\n * The time to wait after a row is changed before it is linkified. This prevents\n * the costly operation of searching every row multiple times, potentially a\n * huge amount of times.\n */\n protected static TIME_BEFORE_LINKIFY = 200;\n\n protected _linkMatchers: LinkMatcher[];\n\n private _document: Document;\n private _rows: HTMLElement[];\n private _rowTimeoutIds: number[];\n private _nextLinkMatcherId = HYPERTEXT_LINK_MATCHER_ID;\n\n constructor() {\n this._rowTimeoutIds = [];\n this._linkMatchers = [];\n this.registerLinkMatcher(strictUrlRegex, null, { matchIndex: 1 });\n }\n\n /**\n * Attaches the linkifier to the DOM, enabling linkification.\n * @param document The document object.\n * @param rows The array of rows to apply links to.\n */\n public attachToDom(document: Document, rows: HTMLElement[]) {\n this._document = document;\n this._rows = rows;\n }\n\n /**\n * Queues a row for linkification.\n * @param {number} rowIndex The index of the row to linkify.\n */\n public linkifyRow(rowIndex: number): void {\n // Don't attempt linkify if not yet attached to DOM\n if (!this._document) {\n return;\n }\n\n const timeoutId = this._rowTimeoutIds[rowIndex];\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n this._rowTimeoutIds[rowIndex] = setTimeout(this._linkifyRow.bind(this, rowIndex), Linkifier.TIME_BEFORE_LINKIFY);\n }\n\n /**\n * Attaches a handler for hypertext links, overriding default behavior\n * for standard http(s) links.\n * @param {LinkHandler} handler The handler to use, this can be cleared with\n * null.\n */\n public setHypertextLinkHandler(handler: LinkMatcherHandler): void {\n this._linkMatchers[HYPERTEXT_LINK_MATCHER_ID].handler = handler;\n }\n\n /**\n * Attaches a validation callback for hypertext links.\n * @param {LinkMatcherValidationCallback} callback The callback to use, this\n * can be cleared with null.\n */\n public setHypertextValidationCallback(callback: LinkMatcherValidationCallback): void {\n this._linkMatchers[HYPERTEXT_LINK_MATCHER_ID].validationCallback = callback;\n }\n\n /**\n * Registers a link matcher, allowing custom link patterns to be matched and\n * handled.\n * @param {RegExp} regex The regular expression to search for, specifically\n * this searches the textContent of the rows. You will want to use \\s to match\n * a space ' ' character for example.\n * @param {LinkHandler} handler The callback when the link is called.\n * @param {LinkMatcherOptions} [options] Options for the link matcher.\n * @return {number} The ID of the new matcher, this can be used to deregister.\n */\n public registerLinkMatcher(regex: RegExp, handler: LinkMatcherHandler, options: LinkMatcherOptions = {}): number {\n if (this._nextLinkMatcherId !== HYPERTEXT_LINK_MATCHER_ID && !handler) {\n throw new Error('handler must be defined');\n }\n const matcher: LinkMatcher = {\n id: this._nextLinkMatcherId++,\n regex,\n handler,\n matchIndex: options.matchIndex,\n validationCallback: options.validationCallback,\n priority: options.priority || 0\n };\n this._addLinkMatcherToList(matcher);\n return matcher.id;\n }\n\n /**\n * Inserts a link matcher to the list in the correct position based on the\n * priority of each link matcher. New link matchers of equal priority are\n * considered after older link matchers.\n * @param matcher The link matcher to be added.\n */\n private _addLinkMatcherToList(matcher: LinkMatcher): void {\n if (this._linkMatchers.length === 0) {\n this._linkMatchers.push(matcher);\n return;\n }\n\n for (let i = this._linkMatchers.length - 1; i >= 0; i--) {\n if (matcher.priority <= this._linkMatchers[i].priority) {\n this._linkMatchers.splice(i + 1, 0, matcher);\n return;\n }\n }\n\n this._linkMatchers.splice(0, 0, matcher);\n }\n\n /**\n * Deregisters a link matcher if it has been registered.\n * @param {number} matcherId The link matcher's ID (returned after register)\n * @return {boolean} Whether a link matcher was found and deregistered.\n */\n public deregisterLinkMatcher(matcherId: number): boolean {\n // ID 0 is the hypertext link matcher which cannot be deregistered\n for (let i = 1; i < this._linkMatchers.length; i++) {\n if (this._linkMatchers[i].id === matcherId) {\n this._linkMatchers.splice(i, 1);\n return true;\n }\n }\n return false;\n }\n\n /**\n * Linkifies a row.\n * @param {number} rowIndex The index of the row to linkify.\n */\n private _linkifyRow(rowIndex: number): void {\n const row = this._rows[rowIndex];\n if (!row) {\n return;\n }\n const text = row.textContent;\n for (let i = 0; i < this._linkMatchers.length; i++) {\n const matcher = this._linkMatchers[i];\n const linkElements = this._doLinkifyRow(row, matcher);\n if (linkElements.length > 0) {\n // Fire validation callback\n if (matcher.validationCallback) {\n for (let j = 0; j < linkElements.length; j++) {\n const element = linkElements[j];\n matcher.validationCallback(element.textContent, element, isValid => {\n if (!isValid) {\n element.classList.add(INVALID_LINK_CLASS);\n }\n });\n }\n }\n // Only allow a single LinkMatcher to trigger on any given row.\n return;\n }\n }\n }\n\n /**\n * Linkifies a row given a specific handler.\n * @param {HTMLElement} row The row to linkify.\n * @param {LinkMatcher} matcher The link matcher for this line.\n * @return The link element(s) that were added.\n */\n private _doLinkifyRow(row: HTMLElement, matcher: LinkMatcher): HTMLElement[] {\n // Iterate over nodes as we want to consider text nodes\n let result = [];\n const isHttpLinkMatcher = matcher.id === HYPERTEXT_LINK_MATCHER_ID;\n const nodes = row.childNodes;\n\n // Find the first match\n let match = row.textContent.match(matcher.regex);\n if (!match || match.length === 0) {\n return result;\n }\n let uri = match[typeof matcher.matchIndex !== 'number' ? 0 : matcher.matchIndex];\n // Set the next searches start index\n let rowStartIndex = match.index + uri.length;\n\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n const searchIndex = node.textContent.indexOf(uri);\n if (searchIndex >= 0) {\n const linkElement = this._createAnchorElement(uri, matcher.handler, isHttpLinkMatcher);\n if (node.textContent.length === uri.length) {\n // Matches entire string\n if (node.nodeType === 3 /*Node.TEXT_NODE*/) {\n this._replaceNode(node, linkElement);\n } else {\n const element = (node);\n if (element.nodeName === 'A') {\n // This row has already been linkified\n return result;\n }\n element.innerHTML = '';\n element.appendChild(linkElement);\n }\n } else if (node.childNodes.length > 1) {\n // Matches part of string in an element with multiple child nodes\n for (let j = 0; j < node.childNodes.length; j++) {\n const childNode = node.childNodes[j];\n const childSearchIndex = childNode.textContent.indexOf(uri);\n if (childSearchIndex !== -1) {\n // Match found in currentNode\n this._replaceNodeSubstringWithNode(childNode, linkElement, uri, childSearchIndex);\n // Don't need to count nodesAdded by replacing the node as this\n // is a child node, not a top-level node.\n break;\n }\n }\n } else {\n // Matches part of string in a single text node\n const nodesAdded = this._replaceNodeSubstringWithNode(node, linkElement, uri, searchIndex);\n // No need to consider the new nodes\n i += nodesAdded;\n }\n result.push(linkElement);\n\n // Find the next match\n match = row.textContent.substring(rowStartIndex).match(matcher.regex);\n if (!match || match.length === 0) {\n return result;\n }\n uri = match[typeof matcher.matchIndex !== 'number' ? 0 : matcher.matchIndex];\n rowStartIndex += match.index + uri.length;\n }\n }\n return result;\n }\n\n /**\n * Creates a link anchor element.\n * @param {string} uri The uri of the link.\n * @return {HTMLAnchorElement} The link.\n */\n private _createAnchorElement(uri: string, handler: LinkMatcherHandler, isHypertextLinkHandler: boolean): HTMLAnchorElement {\n const element = this._document.createElement('a');\n element.textContent = uri;\n element.draggable = false;\n if (isHypertextLinkHandler) {\n element.href = uri;\n // Force link on another tab so work is not lost\n element.target = '_blank';\n element.addEventListener('click', (event: MouseEvent) => {\n if (handler) {\n return handler(event, uri);\n }\n });\n } else {\n element.addEventListener('click', (event: MouseEvent) => {\n // Don't execute the handler if the link is flagged as invalid\n if (element.classList.contains(INVALID_LINK_CLASS)) {\n return;\n }\n return handler(event, uri);\n });\n }\n return element;\n }\n\n /**\n * Replace a node with 1 or more other nodes.\n * @param {Node} oldNode The node to replace.\n * @param {Node[]} newNodes The new nodes to insert in order.\n */\n private _replaceNode(oldNode: Node, ...newNodes: Node[]): void {\n const parent = oldNode.parentNode;\n for (let i = 0; i < newNodes.length; i++) {\n parent.insertBefore(newNodes[i], oldNode);\n }\n parent.removeChild(oldNode);\n }\n\n /**\n * Replace a substring within a node with a new node.\n * @param {Node} targetNode The target node; either a text node or a \n * containing a single text node.\n * @param {Node} newNode The new node to insert.\n * @param {string} substring The substring to replace.\n * @param {number} substringIndex The index of the substring within the string.\n * @return The number of nodes to skip when searching for the next uri.\n */\n private _replaceNodeSubstringWithNode(targetNode: Node, newNode: Node, substring: string, substringIndex: number): number {\n // If the targetNode is a non-text node with a single child, make the child\n // the new targetNode.\n if (targetNode.childNodes.length === 1) {\n targetNode = targetNode.childNodes[0];\n }\n\n // The targetNode will be either a text node or a . The text node\n // (targetNode or its only-child) needs to be replaced with newNode plus new\n // text nodes potentially on either side.\n if (targetNode.nodeType !== 3/*Node.TEXT_NODE*/) {\n throw new Error('targetNode must be a text node or only contain a single text node');\n }\n\n const fullText = targetNode.textContent;\n\n if (substringIndex === 0) {\n // Replace with \n const rightText = fullText.substring(substring.length);\n const rightTextNode = this._document.createTextNode(rightText);\n this._replaceNode(targetNode, newNode, rightTextNode);\n return 0;\n }\n\n if (substringIndex === targetNode.textContent.length - substring.length) {\n // Replace with \n const leftText = fullText.substring(0, substringIndex);\n const leftTextNode = this._document.createTextNode(leftText);\n this._replaceNode(targetNode, leftTextNode, newNode);\n return 0;\n }\n\n // Replace with \n const leftText = fullText.substring(0, substringIndex);\n const leftTextNode = this._document.createTextNode(leftText);\n const rightText = fullText.substring(substringIndex + substring.length);\n const rightTextNode = this._document.createTextNode(rightText);\n this._replaceNode(targetNode, leftTextNode, newNode, rightTextNode);\n return 1;\n }\n}\n","/**\n * @license MIT\n */\n\nimport { IInputHandler, ITerminal } from './Interfaces';\nimport { C0 } from './EscapeSequences';\nimport { DEFAULT_CHARSET } from './Charsets';\n\n/**\n * The terminal's standard implementation of IInputHandler, this handles all\n * input from the Parser.\n *\n * Refer to http://invisible-island.net/xterm/ctlseqs/ctlseqs.html to understand\n * each function's header comment.\n */\nexport class InputHandler implements IInputHandler {\n // TODO: We want to type _terminal when it's pulled into TS\n constructor(private _terminal: any) { }\n\n public addChar(char: string, code: number): void {\n if (char >= ' ') {\n // calculate print space\n // expensive call, therefore we save width in line buffer\n const ch_width = wcwidth(code);\n\n if (this._terminal.charset && this._terminal.charset[char]) {\n char = this._terminal.charset[char];\n }\n\n let row = this._terminal.y + this._terminal.ybase;\n\n // insert combining char in last cell\n // FIXME: needs handling after cursor jumps\n if (!ch_width && this._terminal.x) {\n // dont overflow left\n if (this._terminal.lines.get(row)[this._terminal.x - 1]) {\n if (!this._terminal.lines.get(row)[this._terminal.x - 1][2]) {\n\n // found empty cell after fullwidth, need to go 2 cells back\n if (this._terminal.lines.get(row)[this._terminal.x - 2])\n this._terminal.lines.get(row)[this._terminal.x - 2][1] += char;\n\n } else {\n this._terminal.lines.get(row)[this._terminal.x - 1][1] += char;\n }\n this._terminal.updateRange(this._terminal.y);\n }\n return;\n }\n\n // goto next line if ch would overflow\n // TODO: needs a global min terminal width of 2\n if (this._terminal.x + ch_width - 1 >= this._terminal.cols) {\n // autowrap - DECAWM\n if (this._terminal.wraparoundMode) {\n this._terminal.x = 0;\n this._terminal.y++;\n if (this._terminal.y > this._terminal.scrollBottom) {\n // Insert a new line, scroll and mark as a wrapped line\n this._terminal.y--;\n this._terminal.scroll(true);\n } else {\n // The line already exists (eg. the initial viewport), mark it as a\n // wrapped line\n this._terminal.lines.get(this._terminal.y).isWrapped = true;\n }\n } else {\n if (ch_width === 2) // FIXME: check for xterm behavior\n return;\n }\n }\n row = this._terminal.y + this._terminal.ybase;\n\n // insert mode: move characters to right\n if (this._terminal.insertMode) {\n // do this twice for a fullwidth char\n for (let moves = 0; moves < ch_width; ++moves) {\n // remove last cell, if it's width is 0\n // we have to adjust the second last cell as well\n const removed = this._terminal.lines.get(this._terminal.y + this._terminal.ybase).pop();\n if (removed[2] === 0\n && this._terminal.lines.get(row)[this._terminal.cols - 2]\n && this._terminal.lines.get(row)[this._terminal.cols - 2][2] === 2) {\n this._terminal.lines.get(row)[this._terminal.cols - 2] = [this._terminal.curAttr, ' ', 1];\n }\n\n // insert empty cell at cursor\n this._terminal.lines.get(row).splice(this._terminal.x, 0, [this._terminal.curAttr, ' ', 1]);\n }\n }\n\n this._terminal.lines.get(row)[this._terminal.x] = [this._terminal.curAttr, char, ch_width];\n this._terminal.x++;\n this._terminal.updateRange(this._terminal.y);\n\n // fullwidth char - set next cell width to zero and advance cursor\n if (ch_width === 2) {\n this._terminal.lines.get(row)[this._terminal.x] = [this._terminal.curAttr, '', 0];\n this._terminal.x++;\n }\n }\n }\n\n /**\n * BEL\n * Bell (Ctrl-G).\n */\n public bell(): void {\n if (!this._terminal.visualBell) {\n return;\n }\n this._terminal.element.style.borderColor = 'white';\n setTimeout(() => this._terminal.element.style.borderColor = '', 10);\n if (this._terminal.popOnBell) {\n this._terminal.focus();\n }\n }\n\n /**\n * LF\n * Line Feed or New Line (NL). (LF is Ctrl-J).\n */\n public lineFeed(): void {\n if (this._terminal.convertEol) {\n this._terminal.x = 0;\n }\n this._terminal.y++;\n if (this._terminal.y > this._terminal.scrollBottom) {\n this._terminal.y--;\n this._terminal.scroll();\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this._terminal.x >= this._terminal.cols) {\n this._terminal.x--;\n }\n }\n\n /**\n * CR\n * Carriage Return (Ctrl-M).\n */\n public carriageReturn(): void {\n this._terminal.x = 0;\n }\n\n /**\n * BS\n * Backspace (Ctrl-H).\n */\n public backspace(): void {\n if (this._terminal.x > 0) {\n this._terminal.x--;\n }\n }\n\n /**\n * TAB\n * Horizontal Tab (HT) (Ctrl-I).\n */\n public tab(): void {\n this._terminal.x = this._terminal.nextStop();\n }\n\n /**\n * SO\n * Shift Out (Ctrl-N) -> Switch to Alternate Character Set. This invokes the\n * G1 character set.\n */\n public shiftOut(): void {\n this._terminal.setgLevel(1);\n }\n\n /**\n * SI\n * Shift In (Ctrl-O) -> Switch to Standard Character Set. This invokes the G0\n * character set (the default).\n */\n public shiftIn(): void {\n this._terminal.setgLevel(0);\n }\n\n /**\n * CSI Ps @\n * Insert Ps (Blank) Character(s) (default = 1) (ICH).\n */\n public insertChars(params: number[]): void {\n let param, row, j, ch;\n\n param = params[0];\n if (param < 1) param = 1;\n\n row = this._terminal.y + this._terminal.ybase;\n j = this._terminal.x;\n ch = [this._terminal.eraseAttr(), ' ', 1]; // xterm\n\n while (param-- && j < this._terminal.cols) {\n this._terminal.lines.get(row).splice(j++, 0, ch);\n this._terminal.lines.get(row).pop();\n }\n }\n\n /**\n * CSI Ps A\n * Cursor Up Ps Times (default = 1) (CUU).\n */\n public cursorUp(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.y -= param;\n if (this._terminal.y < 0) {\n this._terminal.y = 0;\n }\n }\n\n /**\n * CSI Ps B\n * Cursor Down Ps Times (default = 1) (CUD).\n */\n public cursorDown(params: number[]) {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.y += param;\n if (this._terminal.y >= this._terminal.rows) {\n this._terminal.y = this._terminal.rows - 1;\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this._terminal.x >= this._terminal.cols) {\n this._terminal.x--;\n }\n }\n\n /**\n * CSI Ps C\n * Cursor Forward Ps Times (default = 1) (CUF).\n */\n public cursorForward(params: number[]) {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.x += param;\n if (this._terminal.x >= this._terminal.cols) {\n this._terminal.x = this._terminal.cols - 1;\n }\n }\n\n /**\n * CSI Ps D\n * Cursor Backward Ps Times (default = 1) (CUB).\n */\n public cursorBackward(params: number[]) {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this._terminal.x >= this._terminal.cols) {\n this._terminal.x--;\n }\n this._terminal.x -= param;\n if (this._terminal.x < 0) {\n this._terminal.x = 0;\n }\n }\n\n /**\n * CSI Ps E\n * Cursor Next Line Ps Times (default = 1) (CNL).\n * same as CSI Ps B ?\n */\n public cursorNextLine(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.y += param;\n if (this._terminal.y >= this._terminal.rows) {\n this._terminal.y = this._terminal.rows - 1;\n }\n this._terminal.x = 0;\n };\n\n\n /**\n * CSI Ps F\n * Cursor Preceding Line Ps Times (default = 1) (CNL).\n * reuse CSI Ps A ?\n */\n public cursorPrecedingLine(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.y -= param;\n if (this._terminal.y < 0) {\n this._terminal.y = 0;\n }\n this._terminal.x = 0;\n };\n\n\n /**\n * CSI Ps G\n * Cursor Character Absolute [column] (default = [row,1]) (CHA).\n */\n public cursorCharAbsolute(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.x = param - 1;\n }\n\n /**\n * CSI Ps ; Ps H\n * Cursor Position [row;column] (default = [1,1]) (CUP).\n */\n public cursorPosition(params: number[]): void {\n let row, col;\n\n row = params[0] - 1;\n\n if (params.length >= 2) {\n col = params[1] - 1;\n } else {\n col = 0;\n }\n\n if (row < 0) {\n row = 0;\n } else if (row >= this._terminal.rows) {\n row = this._terminal.rows - 1;\n }\n\n if (col < 0) {\n col = 0;\n } else if (col >= this._terminal.cols) {\n col = this._terminal.cols - 1;\n }\n\n this._terminal.x = col;\n this._terminal.y = row;\n }\n\n /**\n * CSI Ps I\n * Cursor Forward Tabulation Ps tab stops (default = 1) (CHT).\n */\n public cursorForwardTab(params: number[]): void {\n let param = params[0] || 1;\n while (param--) {\n this._terminal.x = this._terminal.nextStop();\n }\n }\n\n /**\n * CSI Ps J Erase in Display (ED).\n * Ps = 0 -> Erase Below (default).\n * Ps = 1 -> Erase Above.\n * Ps = 2 -> Erase All.\n * Ps = 3 -> Erase Saved Lines (xterm).\n * CSI ? Ps J\n * Erase in Display (DECSED).\n * Ps = 0 -> Selective Erase Below (default).\n * Ps = 1 -> Selective Erase Above.\n * Ps = 2 -> Selective Erase All.\n */\n public eraseInDisplay(params: number[]): void {\n let j;\n switch (params[0]) {\n case 0:\n this._terminal.eraseRight(this._terminal.x, this._terminal.y);\n j = this._terminal.y + 1;\n for (; j < this._terminal.rows; j++) {\n this._terminal.eraseLine(j);\n }\n break;\n case 1:\n this._terminal.eraseLeft(this._terminal.x, this._terminal.y);\n j = this._terminal.y;\n while (j--) {\n this._terminal.eraseLine(j);\n }\n break;\n case 2:\n j = this._terminal.rows;\n while (j--) this._terminal.eraseLine(j);\n break;\n case 3:\n // Clear scrollback (everything not in viewport)\n const scrollBackSize = this._terminal.lines.length - this._terminal.rows;\n if (scrollBackSize > 0) {\n this._terminal.lines.trimStart(scrollBackSize);\n this._terminal.ybase = Math.max(this._terminal.ybase - scrollBackSize, 0);\n this._terminal.ydisp = Math.max(this._terminal.ydisp - scrollBackSize, 0);\n }\n break;\n }\n }\n\n /**\n * CSI Ps K Erase in Line (EL).\n * Ps = 0 -> Erase to Right (default).\n * Ps = 1 -> Erase to Left.\n * Ps = 2 -> Erase All.\n * CSI ? Ps K\n * Erase in Line (DECSEL).\n * Ps = 0 -> Selective Erase to Right (default).\n * Ps = 1 -> Selective Erase to Left.\n * Ps = 2 -> Selective Erase All.\n */\n public eraseInLine(params: number[]): void {\n switch (params[0]) {\n case 0:\n this._terminal.eraseRight(this._terminal.x, this._terminal.y);\n break;\n case 1:\n this._terminal.eraseLeft(this._terminal.x, this._terminal.y);\n break;\n case 2:\n this._terminal.eraseLine(this._terminal.y);\n break;\n }\n }\n\n /**\n * CSI Ps L\n * Insert Ps Line(s) (default = 1) (IL).\n */\n public insertLines(params: number[]): void {\n let param, row, j;\n\n param = params[0];\n if (param < 1) {\n param = 1;\n }\n row = this._terminal.y + this._terminal.ybase;\n\n j = this._terminal.rows - 1 - this._terminal.scrollBottom;\n j = this._terminal.rows - 1 + this._terminal.ybase - j + 1;\n\n while (param--) {\n if (this._terminal.lines.length === this._terminal.lines.maxLength) {\n // Trim the start of lines to make room for the new line\n this._terminal.lines.trimStart(1);\n this._terminal.ybase--;\n this._terminal.ydisp--;\n row--;\n j--;\n }\n // test: echo -e '\\e[44m\\e[1L\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._terminal.lines.splice(row, 0, this._terminal.blankLine(true));\n this._terminal.lines.splice(j, 1);\n }\n\n // this.maxRange();\n this._terminal.updateRange(this._terminal.y);\n this._terminal.updateRange(this._terminal.scrollBottom);\n }\n\n /**\n * CSI Ps M\n * Delete Ps Line(s) (default = 1) (DL).\n */\n public deleteLines(params: number[]): void {\n let param, row, j;\n\n param = params[0];\n if (param < 1) {\n param = 1;\n }\n row = this._terminal.y + this._terminal.ybase;\n\n j = this._terminal.rows - 1 - this._terminal.scrollBottom;\n j = this._terminal.rows - 1 + this._terminal.ybase - j;\n\n while (param--) {\n if (this._terminal.lines.length === this._terminal.lines.maxLength) {\n // Trim the start of lines to make room for the new line\n this._terminal.lines.trimStart(1);\n this._terminal.ybase -= 1;\n this._terminal.ydisp -= 1;\n }\n // test: echo -e '\\e[44m\\e[1M\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._terminal.lines.splice(j + 1, 0, this._terminal.blankLine(true));\n this._terminal.lines.splice(row, 1);\n }\n\n // this.maxRange();\n this._terminal.updateRange(this._terminal.y);\n this._terminal.updateRange(this._terminal.scrollBottom);\n }\n\n /**\n * CSI Ps P\n * Delete Ps Character(s) (default = 1) (DCH).\n */\n public deleteChars(params: number[]): void {\n let param, row, ch;\n\n param = params[0];\n if (param < 1) {\n param = 1;\n }\n\n row = this._terminal.y + this._terminal.ybase;\n ch = [this._terminal.eraseAttr(), ' ', 1]; // xterm\n\n while (param--) {\n this._terminal.lines.get(row).splice(this._terminal.x, 1);\n this._terminal.lines.get(row).push(ch);\n }\n }\n\n /**\n * CSI Ps S Scroll up Ps lines (default = 1) (SU).\n */\n public scrollUp(params: number[]): void {\n let param = params[0] || 1;\n while (param--) {\n this._terminal.lines.splice(this._terminal.ybase + this._terminal.scrollTop, 1);\n this._terminal.lines.splice(this._terminal.ybase + this._terminal.scrollBottom, 0, this._terminal.blankLine());\n }\n // this.maxRange();\n this._terminal.updateRange(this._terminal.scrollTop);\n this._terminal.updateRange(this._terminal.scrollBottom);\n }\n\n /**\n * CSI Ps T Scroll down Ps lines (default = 1) (SD).\n */\n public scrollDown(params: number[]): void {\n let param = params[0] || 1;\n while (param--) {\n this._terminal.lines.splice(this._terminal.ybase + this._terminal.scrollBottom, 1);\n this._terminal.lines.splice(this._terminal.ybase + this._terminal.scrollTop, 0, this._terminal.blankLine());\n }\n // this.maxRange();\n this._terminal.updateRange(this._terminal.scrollTop);\n this._terminal.updateRange(this._terminal.scrollBottom);\n }\n\n /**\n * CSI Ps X\n * Erase Ps Character(s) (default = 1) (ECH).\n */\n public eraseChars(params: number[]): void {\n let param, row, j, ch;\n\n param = params[0];\n if (param < 1) {\n param = 1;\n }\n\n row = this._terminal.y + this._terminal.ybase;\n j = this._terminal.x;\n ch = [this._terminal.eraseAttr(), ' ', 1]; // xterm\n\n while (param-- && j < this._terminal.cols) {\n this._terminal.lines.get(row)[j++] = ch;\n }\n }\n\n /**\n * CSI Ps Z Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).\n */\n public cursorBackwardTab(params: number[]): void {\n let param = params[0] || 1;\n while (param--) {\n this._terminal.x = this._terminal.prevStop();\n }\n }\n\n /**\n * CSI Pm ` Character Position Absolute\n * [column] (default = [row,1]) (HPA).\n */\n public charPosAbsolute(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.x = param - 1;\n if (this._terminal.x >= this._terminal.cols) {\n this._terminal.x = this._terminal.cols - 1;\n }\n }\n\n /**\n * CSI Pm a Character Position Relative\n * [columns] (default = [row,col+1]) (HPR)\n * reuse CSI Ps C ?\n */\n public HPositionRelative(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.x += param;\n if (this._terminal.x >= this._terminal.cols) {\n this._terminal.x = this._terminal.cols - 1;\n }\n }\n\n /**\n * CSI Ps b Repeat the preceding graphic character Ps times (REP).\n */\n public repeatPrecedingCharacter(params: number[]): void {\n let param = params[0] || 1\n , line = this._terminal.lines.get(this._terminal.ybase + this._terminal.y)\n , ch = line[this._terminal.x - 1] || [this._terminal.defAttr, ' ', 1];\n\n while (param--) {\n line[this._terminal.x++] = ch;\n }\n }\n\n /**\n * CSI Ps c Send Device Attributes (Primary DA).\n * Ps = 0 or omitted -> request attributes from terminal. The\n * response depends on the decTerminalID resource setting.\n * -> CSI ? 1 ; 2 c (``VT100 with Advanced Video Option'')\n * -> CSI ? 1 ; 0 c (``VT101 with No Options'')\n * -> CSI ? 6 c (``VT102'')\n * -> CSI ? 6 0 ; 1 ; 2 ; 6 ; 8 ; 9 ; 1 5 ; c (``VT220'')\n * The VT100-style response parameters do not mean anything by\n * themselves. VT220 parameters do, telling the host what fea-\n * tures the terminal supports:\n * Ps = 1 -> 132-columns.\n * Ps = 2 -> Printer.\n * Ps = 6 -> Selective erase.\n * Ps = 8 -> User-defined keys.\n * Ps = 9 -> National replacement character sets.\n * Ps = 1 5 -> Technical characters.\n * Ps = 2 2 -> ANSI color, e.g., VT525.\n * Ps = 2 9 -> ANSI text locator (i.e., DEC Locator mode).\n * CSI > Ps c\n * Send Device Attributes (Secondary DA).\n * Ps = 0 or omitted -> request the terminal's identification\n * code. The response depends on the decTerminalID resource set-\n * ting. It should apply only to VT220 and up, but xterm extends\n * this to VT100.\n * -> CSI > Pp ; Pv ; Pc c\n * where Pp denotes the terminal type\n * Pp = 0 -> ``VT100''.\n * Pp = 1 -> ``VT220''.\n * and Pv is the firmware version (for xterm, this was originally\n * the XFree86 patch number, starting with 95). In a DEC termi-\n * nal, Pc indicates the ROM cartridge registration number and is\n * always zero.\n * More information:\n * xterm/charproc.c - line 2012, for more information.\n * vim responds with ^[[?0c or ^[[?1c after the terminal's response (?)\n */\n public sendDeviceAttributes(params: number[]): void {\n if (params[0] > 0) {\n return;\n }\n\n if (!this._terminal.prefix) {\n if (this._terminal.is('xterm') || this._terminal.is('rxvt-unicode') || this._terminal.is('screen')) {\n this._terminal.send(C0.ESC + '[?1;2c');\n } else if (this._terminal.is('linux')) {\n this._terminal.send(C0.ESC + '[?6c');\n }\n } else if (this._terminal.prefix === '>') {\n // xterm and urxvt\n // seem to spit this\n // out around ~370 times (?).\n if (this._terminal.is('xterm')) {\n this._terminal.send(C0.ESC + '[>0;276;0c');\n } else if (this._terminal.is('rxvt-unicode')) {\n this._terminal.send(C0.ESC + '[>85;95;0c');\n } else if (this._terminal.is('linux')) {\n // not supported by linux console.\n // linux console echoes parameters.\n this._terminal.send(params[0] + 'c');\n } else if (this._terminal.is('screen')) {\n this._terminal.send(C0.ESC + '[>83;40003;0c');\n }\n }\n }\n\n /**\n * CSI Pm d Vertical Position Absolute (VPA)\n * [row] (default = [1,column])\n */\n public linePosAbsolute(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.y = param - 1;\n if (this._terminal.y >= this._terminal.rows) {\n this._terminal.y = this._terminal.rows - 1;\n }\n }\n\n /**\n * CSI Pm e Vertical Position Relative (VPR)\n * [rows] (default = [row+1,column])\n * reuse CSI Ps B ?\n */\n public VPositionRelative(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.y += param;\n if (this._terminal.y >= this._terminal.rows) {\n this._terminal.y = this._terminal.rows - 1;\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this._terminal.x >= this._terminal.cols) {\n this._terminal.x--;\n }\n }\n\n /**\n * CSI Ps ; Ps f\n * Horizontal and Vertical Position [row;column] (default =\n * [1,1]) (HVP).\n */\n public HVPosition(params: number[]): void {\n if (params[0] < 1) params[0] = 1;\n if (params[1] < 1) params[1] = 1;\n\n this._terminal.y = params[0] - 1;\n if (this._terminal.y >= this._terminal.rows) {\n this._terminal.y = this._terminal.rows - 1;\n }\n\n this._terminal.x = params[1] - 1;\n if (this._terminal.x >= this._terminal.cols) {\n this._terminal.x = this._terminal.cols - 1;\n }\n }\n\n /**\n * CSI Ps g Tab Clear (TBC).\n * Ps = 0 -> Clear Current Column (default).\n * Ps = 3 -> Clear All.\n * Potentially:\n * Ps = 2 -> Clear Stops on Line.\n * http://vt100.net/annarbor/aaa-ug/section6.html\n */\n public tabClear(params: number[]): void {\n let param = params[0];\n if (param <= 0) {\n delete this._terminal.tabs[this._terminal.x];\n } else if (param === 3) {\n this._terminal.tabs = {};\n }\n }\n\n /**\n * CSI Pm h Set Mode (SM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Insert Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Automatic Newline (LNM).\n * CSI ? Pm h\n * DEC Private Mode Set (DECSET).\n * Ps = 1 -> Application Cursor Keys (DECCKM).\n * Ps = 2 -> Designate USASCII for character sets G0-G3\n * (DECANM), and set VT100 mode.\n * Ps = 3 -> 132 Column Mode (DECCOLM).\n * Ps = 4 -> Smooth (Slow) Scroll (DECSCLM).\n * Ps = 5 -> Reverse Video (DECSCNM).\n * Ps = 6 -> Origin Mode (DECOM).\n * Ps = 7 -> Wraparound Mode (DECAWM).\n * Ps = 8 -> Auto-repeat Keys (DECARM).\n * Ps = 9 -> Send Mouse X & Y on button press. See the sec-\n * tion Mouse Tracking.\n * Ps = 1 0 -> Show toolbar (rxvt).\n * Ps = 1 2 -> Start Blinking Cursor (att610).\n * Ps = 1 8 -> Print form feed (DECPFF).\n * Ps = 1 9 -> Set print extent to full screen (DECPEX).\n * Ps = 2 5 -> Show Cursor (DECTCEM).\n * Ps = 3 0 -> Show scrollbar (rxvt).\n * Ps = 3 5 -> Enable font-shifting functions (rxvt).\n * Ps = 3 8 -> Enter Tektronix Mode (DECTEK).\n * Ps = 4 0 -> Allow 80 -> 132 Mode.\n * Ps = 4 1 -> more(1) fix (see curses resource).\n * Ps = 4 2 -> Enable Nation Replacement Character sets (DECN-\n * RCM).\n * Ps = 4 4 -> Turn On Margin Bell.\n * Ps = 4 5 -> Reverse-wraparound Mode.\n * Ps = 4 6 -> Start Logging. This is normally disabled by a\n * compile-time option.\n * Ps = 4 7 -> Use Alternate Screen Buffer. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 6 6 -> Application keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends backspace (DECBKM).\n * Ps = 1 0 0 0 -> Send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Enable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Scroll to bottom on tty output (rxvt).\n * Ps = 1 0 1 1 -> Scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Interpret \"meta\" key, sets eighth bit.\n * (enables the eightBitInput resource).\n * Ps = 1 0 3 5 -> Enable special modifiers for Alt and Num-\n * Lock keys. (This enables the numLock resource).\n * Ps = 1 0 3 6 -> Send ESC when Meta modifies a key. (This\n * enables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send DEL from the editing-keypad Delete\n * key.\n * Ps = 1 0 3 9 -> Send ESC when Alt modifies a key. (This\n * enables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Keep selection even if not highlighted.\n * (This enables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the CLIPBOARD selection. (This enables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Enable Urgency window manager hint when\n * Control-G is received. (This enables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Enable raising of the window when Control-G\n * is received. (enables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Alternate Screen Buffer. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 8 -> Save cursor as in DECSC. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Save cursor as in DECSC and use Alternate\n * Screen Buffer, clearing it first. (This may be disabled by\n * the titeInhibit resource). This combines the effects of the 1\n * 0 4 7 and 1 0 4 8 modes. Use this with terminfo-based\n * applications rather than the 4 7 mode.\n * Ps = 1 0 5 0 -> Set terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Set Sun function-key mode.\n * Ps = 1 0 5 2 -> Set HP function-key mode.\n * Ps = 1 0 5 3 -> Set SCO function-key mode.\n * Ps = 1 0 6 0 -> Set legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Set VT220 keyboard emulation.\n * Ps = 2 0 0 4 -> Set bracketed paste mode.\n * Modes:\n * http: *vt100.net/docs/vt220-rm/chapter4.html\n */\n public setMode(params: number[]): void {\n if (params.length > 1) {\n for (let i = 0; i < params.length; i++) {\n this.setMode([params[i]]);\n }\n\n return;\n }\n\n if (!this._terminal.prefix) {\n switch (params[0]) {\n case 4:\n this._terminal.insertMode = true;\n break;\n case 20:\n // this._terminal.convertEol = true;\n break;\n }\n } else if (this._terminal.prefix === '?') {\n switch (params[0]) {\n case 1:\n this._terminal.applicationCursor = true;\n break;\n case 2:\n this._terminal.setgCharset(0, DEFAULT_CHARSET);\n this._terminal.setgCharset(1, DEFAULT_CHARSET);\n this._terminal.setgCharset(2, DEFAULT_CHARSET);\n this._terminal.setgCharset(3, DEFAULT_CHARSET);\n // set VT100 mode here\n break;\n case 3: // 132 col mode\n this._terminal.savedCols = this._terminal.cols;\n this._terminal.resize(132, this._terminal.rows);\n break;\n case 6:\n this._terminal.originMode = true;\n break;\n case 7:\n this._terminal.wraparoundMode = true;\n break;\n case 12:\n // this.cursorBlink = true;\n break;\n case 66:\n this._terminal.log('Serial port requested application keypad.');\n this._terminal.applicationKeypad = true;\n this._terminal.viewport.syncScrollArea();\n break;\n case 9: // X10 Mouse\n // no release, no motion, no wheel, no modifiers.\n case 1000: // vt200 mouse\n // no motion.\n // no modifiers, except control on the wheel.\n case 1002: // button event mouse\n case 1003: // any event mouse\n // any event - sends motion events,\n // even if there is no button held down.\n\n // TODO: Why are params[0] compares nested within a switch for params[0]?\n\n this._terminal.x10Mouse = params[0] === 9;\n this._terminal.vt200Mouse = params[0] === 1000;\n this._terminal.normalMouse = params[0] > 1000;\n this._terminal.mouseEvents = true;\n this._terminal.element.classList.add('enable-mouse-events');\n this._terminal.selectionManager.disable();\n this._terminal.log('Binding to mouse events.');\n break;\n case 1004: // send focusin/focusout events\n // focusin: ^[[I\n // focusout: ^[[O\n this._terminal.sendFocus = true;\n break;\n case 1005: // utf8 ext mode mouse\n this._terminal.utfMouse = true;\n // for wide terminals\n // simply encodes large values as utf8 characters\n break;\n case 1006: // sgr ext mode mouse\n this._terminal.sgrMouse = true;\n // for wide terminals\n // does not add 32 to fields\n // press: ^[[ Keyboard Action Mode (AM).\n * Ps = 4 -> Replace Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Normal Linefeed (LNM).\n * CSI ? Pm l\n * DEC Private Mode Reset (DECRST).\n * Ps = 1 -> Normal Cursor Keys (DECCKM).\n * Ps = 2 -> Designate VT52 mode (DECANM).\n * Ps = 3 -> 80 Column Mode (DECCOLM).\n * Ps = 4 -> Jump (Fast) Scroll (DECSCLM).\n * Ps = 5 -> Normal Video (DECSCNM).\n * Ps = 6 -> Normal Cursor Mode (DECOM).\n * Ps = 7 -> No Wraparound Mode (DECAWM).\n * Ps = 8 -> No Auto-repeat Keys (DECARM).\n * Ps = 9 -> Don't send Mouse X & Y on button press.\n * Ps = 1 0 -> Hide toolbar (rxvt).\n * Ps = 1 2 -> Stop Blinking Cursor (att610).\n * Ps = 1 8 -> Don't print form feed (DECPFF).\n * Ps = 1 9 -> Limit print to scrolling region (DECPEX).\n * Ps = 2 5 -> Hide Cursor (DECTCEM).\n * Ps = 3 0 -> Don't show scrollbar (rxvt).\n * Ps = 3 5 -> Disable font-shifting functions (rxvt).\n * Ps = 4 0 -> Disallow 80 -> 132 Mode.\n * Ps = 4 1 -> No more(1) fix (see curses resource).\n * Ps = 4 2 -> Disable Nation Replacement Character sets (DEC-\n * NRCM).\n * Ps = 4 4 -> Turn Off Margin Bell.\n * Ps = 4 5 -> No Reverse-wraparound Mode.\n * Ps = 4 6 -> Stop Logging. (This is normally disabled by a\n * compile-time option).\n * Ps = 4 7 -> Use Normal Screen Buffer.\n * Ps = 6 6 -> Numeric keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends delete (DECBKM).\n * Ps = 1 0 0 0 -> Don't send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Don't use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Don't use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Don't use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Don't send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Disable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Don't scroll to bottom on tty output\n * (rxvt).\n * Ps = 1 0 1 1 -> Don't scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Don't interpret \"meta\" key. (This disables\n * the eightBitInput resource).\n * Ps = 1 0 3 5 -> Disable special modifiers for Alt and Num-\n * Lock keys. (This disables the numLock resource).\n * Ps = 1 0 3 6 -> Don't send ESC when Meta modifies a key.\n * (This disables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send VT220 Remove from the editing-keypad\n * Delete key.\n * Ps = 1 0 3 9 -> Don't send ESC when Alt modifies a key.\n * (This disables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Do not keep selection when not highlighted.\n * (This disables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the PRIMARY selection. (This disables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Disable Urgency window manager hint when\n * Control-G is received. (This disables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Disable raising of the window when Control-\n * G is received. (This disables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Normal Screen Buffer, clearing screen\n * first if in the Alternate Screen. (This may be disabled by\n * the titeInhibit resource).\n * Ps = 1 0 4 8 -> Restore cursor as in DECRC. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Use Normal Screen Buffer and restore cursor\n * as in DECRC. (This may be disabled by the titeInhibit\n * resource). This combines the effects of the 1 0 4 7 and 1 0\n * 4 8 modes. Use this with terminfo-based applications rather\n * than the 4 7 mode.\n * Ps = 1 0 5 0 -> Reset terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Reset Sun function-key mode.\n * Ps = 1 0 5 2 -> Reset HP function-key mode.\n * Ps = 1 0 5 3 -> Reset SCO function-key mode.\n * Ps = 1 0 6 0 -> Reset legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Reset keyboard emulation to Sun/PC style.\n * Ps = 2 0 0 4 -> Reset bracketed paste mode.\n */\n public resetMode(params: number[]): void {\n if (params.length > 1) {\n for (let i = 0; i < params.length; i++) {\n this.resetMode([params[i]]);\n }\n\n return;\n }\n\n if (!this._terminal.prefix) {\n switch (params[0]) {\n case 4:\n this._terminal.insertMode = false;\n break;\n case 20:\n // this._terminal.convertEol = false;\n break;\n }\n } else if (this._terminal.prefix === '?') {\n switch (params[0]) {\n case 1:\n this._terminal.applicationCursor = false;\n break;\n case 3:\n if (this._terminal.cols === 132 && this._terminal.savedCols) {\n this._terminal.resize(this._terminal.savedCols, this._terminal.rows);\n }\n delete this._terminal.savedCols;\n break;\n case 6:\n this._terminal.originMode = false;\n break;\n case 7:\n this._terminal.wraparoundMode = false;\n break;\n case 12:\n // this.cursorBlink = false;\n break;\n case 66:\n this._terminal.log('Switching back to normal keypad.');\n this._terminal.applicationKeypad = false;\n this._terminal.viewport.syncScrollArea();\n break;\n case 9: // X10 Mouse\n case 1000: // vt200 mouse\n case 1002: // button event mouse\n case 1003: // any event mouse\n this._terminal.x10Mouse = false;\n this._terminal.vt200Mouse = false;\n this._terminal.normalMouse = false;\n this._terminal.mouseEvents = false;\n this._terminal.element.classList.remove('enable-mouse-events');\n this._terminal.selectionManager.enable();\n break;\n case 1004: // send focusin/focusout events\n this._terminal.sendFocus = false;\n break;\n case 1005: // utf8 ext mode mouse\n this._terminal.utfMouse = false;\n break;\n case 1006: // sgr ext mode mouse\n this._terminal.sgrMouse = false;\n break;\n case 1015: // urxvt ext mode mouse\n this._terminal.urxvtMouse = false;\n break;\n case 25: // hide cursor\n this._terminal.cursorHidden = true;\n break;\n case 1049: // alt screen buffer cursor\n ; // FALL-THROUGH\n case 47: // normal screen buffer\n case 1047: // normal screen buffer - clearing it first\n if (this._terminal.normal) {\n this._terminal.lines = this._terminal.normal.lines;\n this._terminal.ybase = this._terminal.normal.ybase;\n this._terminal.ydisp = this._terminal.normal.ydisp;\n this._terminal.x = this._terminal.normal.x;\n this._terminal.y = this._terminal.normal.y;\n this._terminal.scrollTop = this._terminal.normal.scrollTop;\n this._terminal.scrollBottom = this._terminal.normal.scrollBottom;\n this._terminal.tabs = this._terminal.normal.tabs;\n this._terminal.normal = null;\n // Ensure the selection manager has the correct buffer\n this._terminal.selectionManager.setBuffer(this._terminal.lines);\n // if (params === 1049) {\n // this.x = this.savedX;\n // this.y = this.savedY;\n // }\n this._terminal.refresh(0, this._terminal.rows - 1);\n this._terminal.viewport.syncScrollArea();\n this._terminal.showCursor();\n }\n break;\n }\n }\n }\n\n /**\n * CSI Pm m Character Attributes (SGR).\n * Ps = 0 -> Normal (default).\n * Ps = 1 -> Bold.\n * Ps = 4 -> Underlined.\n * Ps = 5 -> Blink (appears as Bold).\n * Ps = 7 -> Inverse.\n * Ps = 8 -> Invisible, i.e., hidden (VT300).\n * Ps = 2 2 -> Normal (neither bold nor faint).\n * Ps = 2 4 -> Not underlined.\n * Ps = 2 5 -> Steady (not blinking).\n * Ps = 2 7 -> Positive (not inverse).\n * Ps = 2 8 -> Visible, i.e., not hidden (VT300).\n * Ps = 3 0 -> Set foreground color to Black.\n * Ps = 3 1 -> Set foreground color to Red.\n * Ps = 3 2 -> Set foreground color to Green.\n * Ps = 3 3 -> Set foreground color to Yellow.\n * Ps = 3 4 -> Set foreground color to Blue.\n * Ps = 3 5 -> Set foreground color to Magenta.\n * Ps = 3 6 -> Set foreground color to Cyan.\n * Ps = 3 7 -> Set foreground color to White.\n * Ps = 3 9 -> Set foreground color to default (original).\n * Ps = 4 0 -> Set background color to Black.\n * Ps = 4 1 -> Set background color to Red.\n * Ps = 4 2 -> Set background color to Green.\n * Ps = 4 3 -> Set background color to Yellow.\n * Ps = 4 4 -> Set background color to Blue.\n * Ps = 4 5 -> Set background color to Magenta.\n * Ps = 4 6 -> Set background color to Cyan.\n * Ps = 4 7 -> Set background color to White.\n * Ps = 4 9 -> Set background color to default (original).\n *\n * If 16-color support is compiled, the following apply. Assume\n * that xterm's resources are set so that the ISO color codes are\n * the first 8 of a set of 16. Then the aixterm colors are the\n * bright versions of the ISO colors:\n * Ps = 9 0 -> Set foreground color to Black.\n * Ps = 9 1 -> Set foreground color to Red.\n * Ps = 9 2 -> Set foreground color to Green.\n * Ps = 9 3 -> Set foreground color to Yellow.\n * Ps = 9 4 -> Set foreground color to Blue.\n * Ps = 9 5 -> Set foreground color to Magenta.\n * Ps = 9 6 -> Set foreground color to Cyan.\n * Ps = 9 7 -> Set foreground color to White.\n * Ps = 1 0 0 -> Set background color to Black.\n * Ps = 1 0 1 -> Set background color to Red.\n * Ps = 1 0 2 -> Set background color to Green.\n * Ps = 1 0 3 -> Set background color to Yellow.\n * Ps = 1 0 4 -> Set background color to Blue.\n * Ps = 1 0 5 -> Set background color to Magenta.\n * Ps = 1 0 6 -> Set background color to Cyan.\n * Ps = 1 0 7 -> Set background color to White.\n *\n * If xterm is compiled with the 16-color support disabled, it\n * supports the following, from rxvt:\n * Ps = 1 0 0 -> Set foreground and background color to\n * default.\n *\n * If 88- or 256-color support is compiled, the following apply.\n * Ps = 3 8 ; 5 ; Ps -> Set foreground color to the second\n * Ps.\n * Ps = 4 8 ; 5 ; Ps -> Set background color to the second\n * Ps.\n */\n public charAttributes(params: number[]): void {\n // Optimize a single SGR0.\n if (params.length === 1 && params[0] === 0) {\n this._terminal.curAttr = this._terminal.defAttr;\n return;\n }\n\n let l = params.length\n , i = 0\n , flags = this._terminal.curAttr >> 18\n , fg = (this._terminal.curAttr >> 9) & 0x1ff\n , bg = this._terminal.curAttr & 0x1ff\n , p;\n\n for (; i < l; i++) {\n p = params[i];\n if (p >= 30 && p <= 37) {\n // fg color 8\n fg = p - 30;\n } else if (p >= 40 && p <= 47) {\n // bg color 8\n bg = p - 40;\n } else if (p >= 90 && p <= 97) {\n // fg color 16\n p += 8;\n fg = p - 90;\n } else if (p >= 100 && p <= 107) {\n // bg color 16\n p += 8;\n bg = p - 100;\n } else if (p === 0) {\n // default\n flags = this._terminal.defAttr >> 18;\n fg = (this._terminal.defAttr >> 9) & 0x1ff;\n bg = this._terminal.defAttr & 0x1ff;\n // flags = 0;\n // fg = 0x1ff;\n // bg = 0x1ff;\n } else if (p === 1) {\n // bold text\n flags |= 1;\n } else if (p === 4) {\n // underlined text\n flags |= 2;\n } else if (p === 5) {\n // blink\n flags |= 4;\n } else if (p === 7) {\n // inverse and positive\n // test with: echo -e '\\e[31m\\e[42mhello\\e[7mworld\\e[27mhi\\e[m'\n flags |= 8;\n } else if (p === 8) {\n // invisible\n flags |= 16;\n } else if (p === 22) {\n // not bold\n flags &= ~1;\n } else if (p === 24) {\n // not underlined\n flags &= ~2;\n } else if (p === 25) {\n // not blink\n flags &= ~4;\n } else if (p === 27) {\n // not inverse\n flags &= ~8;\n } else if (p === 28) {\n // not invisible\n flags &= ~16;\n } else if (p === 39) {\n // reset fg\n fg = (this._terminal.defAttr >> 9) & 0x1ff;\n } else if (p === 49) {\n // reset bg\n bg = this._terminal.defAttr & 0x1ff;\n } else if (p === 38) {\n // fg color 256\n if (params[i + 1] === 2) {\n i += 2;\n fg = this._terminal.matchColor(\n params[i] & 0xff,\n params[i + 1] & 0xff,\n params[i + 2] & 0xff);\n if (fg === -1) fg = 0x1ff;\n i += 2;\n } else if (params[i + 1] === 5) {\n i += 2;\n p = params[i] & 0xff;\n fg = p;\n }\n } else if (p === 48) {\n // bg color 256\n if (params[i + 1] === 2) {\n i += 2;\n bg = this._terminal.matchColor(\n params[i] & 0xff,\n params[i + 1] & 0xff,\n params[i + 2] & 0xff);\n if (bg === -1) bg = 0x1ff;\n i += 2;\n } else if (params[i + 1] === 5) {\n i += 2;\n p = params[i] & 0xff;\n bg = p;\n }\n } else if (p === 100) {\n // reset fg/bg\n fg = (this._terminal.defAttr >> 9) & 0x1ff;\n bg = this._terminal.defAttr & 0x1ff;\n } else {\n this._terminal.error('Unknown SGR attribute: %d.', p);\n }\n }\n\n this._terminal.curAttr = (flags << 18) | (fg << 9) | bg;\n }\n\n /**\n * CSI Ps n Device Status Report (DSR).\n * Ps = 5 -> Status Report. Result (``OK'') is\n * CSI 0 n\n * Ps = 6 -> Report Cursor Position (CPR) [row;column].\n * Result is\n * CSI r ; c R\n * CSI ? Ps n\n * Device Status Report (DSR, DEC-specific).\n * Ps = 6 -> Report Cursor Position (CPR) [row;column] as CSI\n * ? r ; c R (assumes page is zero).\n * Ps = 1 5 -> Report Printer status as CSI ? 1 0 n (ready).\n * or CSI ? 1 1 n (not ready).\n * Ps = 2 5 -> Report UDK status as CSI ? 2 0 n (unlocked)\n * or CSI ? 2 1 n (locked).\n * Ps = 2 6 -> Report Keyboard status as\n * CSI ? 2 7 ; 1 ; 0 ; 0 n (North American).\n * The last two parameters apply to VT400 & up, and denote key-\n * board ready and LK01 respectively.\n * Ps = 5 3 -> Report Locator status as\n * CSI ? 5 3 n Locator available, if compiled-in, or\n * CSI ? 5 0 n No Locator, if not.\n */\n public deviceStatus(params: number[]): void {\n if (!this._terminal.prefix) {\n switch (params[0]) {\n case 5:\n // status report\n this._terminal.send(C0.ESC + '[0n');\n break;\n case 6:\n // cursor position\n this._terminal.send(C0.ESC + '['\n + (this._terminal.y + 1)\n + ';'\n + (this._terminal.x + 1)\n + 'R');\n break;\n }\n } else if (this._terminal.prefix === '?') {\n // modern xterm doesnt seem to\n // respond to any of these except ?6, 6, and 5\n switch (params[0]) {\n case 6:\n // cursor position\n this._terminal.send(C0.ESC + '[?'\n + (this._terminal.y + 1)\n + ';'\n + (this._terminal.x + 1)\n + 'R');\n break;\n case 15:\n // no printer\n // this.send(C0.ESC + '[?11n');\n break;\n case 25:\n // dont support user defined keys\n // this.send(C0.ESC + '[?21n');\n break;\n case 26:\n // north american keyboard\n // this.send(C0.ESC + '[?27;1;0;0n');\n break;\n case 53:\n // no dec locator/mouse\n // this.send(C0.ESC + '[?50n');\n break;\n }\n }\n }\n\n /**\n * CSI ! p Soft terminal reset (DECSTR).\n * http://vt100.net/docs/vt220-rm/table4-10.html\n */\n public softReset(params: number[]): void {\n this._terminal.cursorHidden = false;\n this._terminal.insertMode = false;\n this._terminal.originMode = false;\n this._terminal.wraparoundMode = true; // defaults: xterm - true, vt100 - false\n this._terminal.applicationKeypad = false; // ?\n this._terminal.viewport.syncScrollArea();\n this._terminal.applicationCursor = false;\n this._terminal.scrollTop = 0;\n this._terminal.scrollBottom = this._terminal.rows - 1;\n this._terminal.curAttr = this._terminal.defAttr;\n this._terminal.x = this._terminal.y = 0; // ?\n this._terminal.charset = null;\n this._terminal.glevel = 0; // ??\n this._terminal.charsets = [null]; // ??\n }\n\n /**\n * CSI Ps SP q Set cursor style (DECSCUSR, VT520).\n * Ps = 0 -> blinking block.\n * Ps = 1 -> blinking block (default).\n * Ps = 2 -> steady block.\n * Ps = 3 -> blinking underline.\n * Ps = 4 -> steady underline.\n * Ps = 5 -> blinking bar (xterm).\n * Ps = 6 -> steady bar (xterm).\n */\n public setCursorStyle(params?: number[]): void {\n const param = params[0] < 1 ? 1 : params[0];\n switch (param) {\n case 1:\n case 2:\n this._terminal.setOption('cursorStyle', 'block');\n break;\n case 3:\n case 4:\n this._terminal.setOption('cursorStyle', 'underline');\n break;\n case 5:\n case 6:\n this._terminal.setOption('cursorStyle', 'bar');\n break;\n }\n const isBlinking = param % 2 === 1;\n this._terminal.setOption('cursorBlink', isBlinking);\n }\n\n /**\n * CSI Ps ; Ps r\n * Set Scrolling Region [top;bottom] (default = full size of win-\n * dow) (DECSTBM).\n * CSI ? Pm r\n */\n public setScrollRegion(params: number[]): void {\n if (this._terminal.prefix) return;\n this._terminal.scrollTop = (params[0] || 1) - 1;\n this._terminal.scrollBottom = (params[1] && params[1] <= this._terminal.rows ? params[1] : this._terminal.rows) - 1;\n this._terminal.x = 0;\n this._terminal.y = 0;\n }\n\n\n /**\n * CSI s\n * Save cursor (ANSI.SYS).\n */\n public saveCursor(params: number[]): void {\n this._terminal.savedX = this._terminal.x;\n this._terminal.savedY = this._terminal.y;\n }\n\n\n /**\n * CSI u\n * Restore cursor (ANSI.SYS).\n */\n public restoreCursor(params: number[]): void {\n this._terminal.x = this._terminal.savedX || 0;\n this._terminal.y = this._terminal.savedY || 0;\n }\n}\n\nconst wcwidth = (function(opts) {\n // extracted from https://www.cl.cam.ac.uk/%7Emgk25/ucs/wcwidth.c\n // combining characters\n const COMBINING = [\n [0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489],\n [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2],\n [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603],\n [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670],\n [0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED],\n [0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A],\n [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902],\n [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D],\n [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981],\n [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD],\n [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C],\n [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D],\n [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC],\n [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD],\n [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C],\n [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D],\n [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0],\n [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48],\n [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC],\n [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD],\n [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D],\n [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6],\n [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E],\n [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC],\n [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35],\n [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E],\n [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97],\n [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030],\n [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039],\n [0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F],\n [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753],\n [0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD],\n [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD],\n [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922],\n [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B],\n [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34],\n [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42],\n [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF],\n [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063],\n [0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F],\n [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B],\n [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F],\n [0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB],\n [0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F],\n [0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169],\n [0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD],\n [0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F],\n [0xE0100, 0xE01EF]\n ];\n // binary search\n function bisearch(ucs) {\n let min = 0;\n let max = COMBINING.length - 1;\n let mid;\n if (ucs < COMBINING[0][0] || ucs > COMBINING[max][1])\n return false;\n while (max >= min) {\n mid = Math.floor((min + max) / 2);\n if (ucs > COMBINING[mid][1])\n min = mid + 1;\n else if (ucs < COMBINING[mid][0])\n max = mid - 1;\n else\n return true;\n }\n return false;\n }\n function wcwidth(ucs) {\n // test for 8-bit control characters\n if (ucs === 0)\n return opts.nul;\n if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0))\n return opts.control;\n // binary search in table of non-spacing characters\n if (bisearch(ucs))\n return 0;\n // if we arrive here, ucs is not a combining or C0/C1 control character\n if (isWide(ucs)) {\n return 2;\n }\n return 1;\n }\n function isWide(ucs) {\n return (\n ucs >= 0x1100 && (\n ucs <= 0x115f || // Hangul Jamo init. consonants\n ucs === 0x2329 ||\n ucs === 0x232a ||\n (ucs >= 0x2e80 && ucs <= 0xa4cf && ucs !== 0x303f) || // CJK..Yi\n (ucs >= 0xac00 && ucs <= 0xd7a3) || // Hangul Syllables\n (ucs >= 0xf900 && ucs <= 0xfaff) || // CJK Compat Ideographs\n (ucs >= 0xfe10 && ucs <= 0xfe19) || // Vertical forms\n (ucs >= 0xfe30 && ucs <= 0xfe6f) || // CJK Compat Forms\n (ucs >= 0xff00 && ucs <= 0xff60) || // Fullwidth Forms\n (ucs >= 0xffe0 && ucs <= 0xffe6) ||\n (ucs >= 0x20000 && ucs <= 0x2fffd) ||\n (ucs >= 0x30000 && ucs <= 0x3fffd)));\n }\n return wcwidth;\n})({nul: 0, control: 0}); // configurable options\n","/**\n * @license MIT\n */\n\ninterface ListenerType {\n (): void;\n listener?: () => void;\n};\n\nexport class EventEmitter {\n private _events: {[type: string]: ListenerType[]};\n\n constructor() {\n // Restore the previous events if available, this will happen if the\n // constructor is called multiple times on the same object (terminal reset).\n this._events = this._events || {};\n }\n\n public on(type, listener): void {\n this._events[type] = this._events[type] || [];\n this._events[type].push(listener);\n }\n\n public off(type, listener): void {\n if (!this._events[type]) {\n return;\n }\n\n let obj = this._events[type];\n let i = obj.length;\n\n while (i--) {\n if (obj[i] === listener || obj[i].listener === listener) {\n obj.splice(i, 1);\n return;\n }\n }\n }\n\n public removeAllListeners(type): void {\n if (this._events[type]) {\n delete this._events[type];\n }\n }\n\n public once(type, listener): any {\n function on() {\n let args = Array.prototype.slice.call(arguments);\n this.off(type, on);\n return listener.apply(this, args);\n }\n (on).listener = listener;\n return this.on(type, on);\n }\n\n public emit(type: string, ...args: any[]): void {\n if (!this._events[type]) {\n return;\n }\n let obj = this._events[type];\n for (let i = 0; i < obj.length; i++) {\n obj[i].apply(this, args);\n }\n }\n\n public listeners(type): ListenerType[] {\n return this._events[type] || [];\n }\n}\n","/**\n * @license MIT\n */\n\n/**\n * C0 control codes\n * See = https://en.wikipedia.org/wiki/C0_and_C1_control_codes\n */\nexport namespace C0 {\n /** Null (Caret = ^@, C = \\0) */\n export const NUL = '\\x00';\n /** Start of Heading (Caret = ^A) */\n export const SOH = '\\x01';\n /** Start of Text (Caret = ^B) */\n export const STX = '\\x02';\n /** End of Text (Caret = ^C) */\n export const ETX = '\\x03';\n /** End of Transmission (Caret = ^D) */\n export const EOT = '\\x04';\n /** Enquiry (Caret = ^E) */\n export const ENQ = '\\x05';\n /** Acknowledge (Caret = ^F) */\n export const ACK = '\\x06';\n /** Bell (Caret = ^G, C = \\a) */\n export const BEL = '\\x07';\n /** Backspace (Caret = ^H, C = \\b) */\n export const BS = '\\x08';\n /** Character Tabulation, Horizontal Tabulation (Caret = ^I, C = \\t) */\n export const HT = '\\x09';\n /** Line Feed (Caret = ^J, C = \\n) */\n export const LF = '\\x0a';\n /** Line Tabulation, Vertical Tabulation (Caret = ^K, C = \\v) */\n export const VT = '\\x0b';\n /** Form Feed (Caret = ^L, C = \\f) */\n export const FF = '\\x0c';\n /** Carriage Return (Caret = ^M, C = \\r) */\n export const CR = '\\x0d';\n /** Shift Out (Caret = ^N) */\n export const SO = '\\x0e';\n /** Shift In (Caret = ^O) */\n export const SI = '\\x0f';\n /** Data Link Escape (Caret = ^P) */\n export const DLE = '\\x10';\n /** Device Control One (XON) (Caret = ^Q) */\n export const DC1 = '\\x11';\n /** Device Control Two (Caret = ^R) */\n export const DC2 = '\\x12';\n /** Device Control Three (XOFF) (Caret = ^S) */\n export const DC3 = '\\x13';\n /** Device Control Four (Caret = ^T) */\n export const DC4 = '\\x14';\n /** Negative Acknowledge (Caret = ^U) */\n export const NAK = '\\x15';\n /** Synchronous Idle (Caret = ^V) */\n export const SYN = '\\x16';\n /** End of Transmission Block (Caret = ^W) */\n export const ETB = '\\x17';\n /** Cancel (Caret = ^X) */\n export const CAN = '\\x18';\n /** End of Medium (Caret = ^Y) */\n export const EM = '\\x19';\n /** Substitute (Caret = ^Z) */\n export const SUB = '\\x1a';\n /** Escape (Caret = ^[, C = \\e) */\n export const ESC = '\\x1b';\n /** File Separator (Caret = ^\\) */\n export const FS = '\\x1c';\n /** Group Separator (Caret = ^]) */\n export const GS = '\\x1d';\n /** Record Separator (Caret = ^^) */\n export const RS = '\\x1e';\n /** Unit Separator (Caret = ^_) */\n export const US = '\\x1f';\n /** Space */\n export const SP = '\\x20';\n /** Delete (Caret = ^?) */\n export const DEL = '\\x7f';\n};\n","/**\n * @license MIT\n */\n\nimport { ITerminal } from './Interfaces';\n\ninterface IPosition {\n start: number;\n end: number;\n}\n\n/**\n * Encapsulates the logic for handling compositionstart, compositionupdate and compositionend\n * events, displaying the in-progress composition to the UI and forwarding the final composition\n * to the handler.\n */\nexport class CompositionHelper {\n /**\n * Whether input composition is currently happening, eg. via a mobile keyboard, speech input or\n * IME. This variable determines whether the compositionText should be displayed on the UI.\n */\n private isComposing: boolean;\n\n /**\n * The position within the input textarea's value of the current composition.\n */\n private compositionPosition: IPosition;\n\n /**\n * Whether a composition is in the process of being sent, setting this to false will cancel any\n * in-progress composition.\n */\n private isSendingComposition: boolean;\n\n /**\n * Creates a new CompositionHelper.\n * @param textarea The textarea that xterm uses for input.\n * @param compositionView The element to display the in-progress composition in.\n * @param terminal The Terminal to forward the finished composition to.\n */\n constructor(\n private textarea: HTMLTextAreaElement,\n private compositionView: HTMLElement,\n private terminal: ITerminal\n ) {\n this.isComposing = false;\n this.isSendingComposition = false;\n this.compositionPosition = { start: null, end: null };\n }\n\n /**\n * Handles the compositionstart event, activating the composition view.\n */\n public compositionstart() {\n this.isComposing = true;\n this.compositionPosition.start = this.textarea.value.length;\n this.compositionView.textContent = '';\n this.compositionView.classList.add('active');\n }\n\n /**\n * Handles the compositionupdate event, updating the composition view.\n * @param {CompositionEvent} ev The event.\n */\n public compositionupdate(ev: CompositionEvent) {\n this.compositionView.textContent = ev.data;\n this.updateCompositionElements();\n setTimeout(() => {\n this.compositionPosition.end = this.textarea.value.length;\n }, 0);\n }\n\n /**\n * Handles the compositionend event, hiding the composition view and sending the composition to\n * the handler.\n */\n public compositionend() {\n this.finalizeComposition(true);\n }\n\n /**\n * Handles the keydown event, routing any necessary events to the CompositionHelper functions.\n * @param ev The keydown event.\n * @return Whether the Terminal should continue processing the keydown event.\n */\n public keydown(ev: KeyboardEvent) {\n if (this.isComposing || this.isSendingComposition) {\n if (ev.keyCode === 229) {\n // Continue composing if the keyCode is the \"composition character\"\n return false;\n } else if (ev.keyCode === 16 || ev.keyCode === 17 || ev.keyCode === 18) {\n // Continue composing if the keyCode is a modifier key\n return false;\n } else {\n // Finish composition immediately. This is mainly here for the case where enter is\n // pressed and the handler needs to be triggered before the command is executed.\n this.finalizeComposition(false);\n }\n }\n\n if (ev.keyCode === 229) {\n // If the \"composition character\" is used but gets to this point it means a non-composition\n // character (eg. numbers and punctuation) was pressed when the IME was active.\n this.handleAnyTextareaChanges();\n return false;\n }\n\n return true;\n }\n\n /**\n * Finalizes the composition, resuming regular input actions. This is called when a composition\n * is ending.\n * @param waitForPropogation Whether to wait for events to propogate before sending\n * the input. This should be false if a non-composition keystroke is entered before the\n * compositionend event is triggered, such as enter, so that the composition is send before\n * the command is executed.\n */\n private finalizeComposition(waitForPropogation: boolean) {\n this.compositionView.classList.remove('active');\n this.isComposing = false;\n this.clearTextareaPosition();\n\n if (!waitForPropogation) {\n // Cancel any delayed composition send requests and send the input immediately.\n this.isSendingComposition = false;\n const input = this.textarea.value.substring(this.compositionPosition.start, this.compositionPosition.end);\n this.terminal.handler(input);\n } else {\n // Make a deep copy of the composition position here as a new compositionstart event may\n // fire before the setTimeout executes.\n const currentCompositionPosition = {\n start: this.compositionPosition.start,\n end: this.compositionPosition.end,\n };\n\n // Since composition* events happen before the changes take place in the textarea on most\n // browsers, use a setTimeout with 0ms time to allow the native compositionend event to\n // complete. This ensures the correct character is retrieved, this solution was used\n // because:\n // - The compositionend event's data property is unreliable, at least on Chromium\n // - The last compositionupdate event's data property does not always accurately describe\n // the character, a counter example being Korean where an ending consonsant can move to\n // the following character if the following input is a vowel.\n this.isSendingComposition = true;\n setTimeout(() => {\n // Ensure that the input has not already been sent\n if (this.isSendingComposition) {\n this.isSendingComposition = false;\n let input;\n if (this.isComposing) {\n // Use the end position to get the string if a new composition has started.\n input = this.textarea.value.substring(currentCompositionPosition.start, currentCompositionPosition.end);\n } else {\n // Don't use the end position here in order to pick up any characters after the\n // composition has finished, for example when typing a non-composition character\n // (eg. 2) after a composition character.\n input = this.textarea.value.substring(currentCompositionPosition.start);\n }\n this.terminal.handler(input);\n }\n }, 0);\n }\n }\n\n /**\n * Apply any changes made to the textarea after the current event chain is allowed to complete.\n * This should be called when not currently composing but a keydown event with the \"composition\n * character\" (229) is triggered, in order to allow non-composition text to be entered when an\n * IME is active.\n */\n private handleAnyTextareaChanges() {\n const oldValue = this.textarea.value;\n setTimeout(() => {\n // Ignore if a composition has started since the timeout\n if (!this.isComposing) {\n const newValue = this.textarea.value;\n const diff = newValue.replace(oldValue, '');\n if (diff.length > 0) {\n this.terminal.handler(diff);\n }\n }\n }, 0);\n }\n\n /**\n * Positions the composition view on top of the cursor and the textarea just below it (so the\n * IME helper dialog is positioned correctly).\n * @param dontRecurse Whether to use setTimeout to recursively trigger another update, this is\n * necessary as the IME events across browsers are not consistently triggered.\n */\n public updateCompositionElements(dontRecurse?: boolean) {\n if (!this.isComposing) {\n return;\n }\n const cursor = this.terminal.element.querySelector('.terminal-cursor');\n if (cursor) {\n // Take .xterm-rows offsetTop into account as well in case it's positioned absolutely within\n // the .xterm element.\n const xtermRows = this.terminal.element.querySelector('.xterm-rows');\n const cursorTop = xtermRows.offsetTop + cursor.offsetTop;\n\n this.compositionView.style.left = cursor.offsetLeft + 'px';\n this.compositionView.style.top = cursorTop + 'px';\n this.compositionView.style.height = cursor.offsetHeight + 'px';\n this.compositionView.style.lineHeight = cursor.offsetHeight + 'px';\n // Sync the textarea to the exact position of the composition view so the IME knows where the\n // text is.\n const compositionViewBounds = this.compositionView.getBoundingClientRect();\n this.textarea.style.left = cursor.offsetLeft + 'px';\n this.textarea.style.top = cursorTop + 'px';\n this.textarea.style.width = compositionViewBounds.width + 'px';\n this.textarea.style.height = compositionViewBounds.height + 'px';\n this.textarea.style.lineHeight = compositionViewBounds.height + 'px';\n }\n if (!dontRecurse) {\n setTimeout(() => this.updateCompositionElements(true), 0);\n }\n };\n\n /**\n * Clears the textarea's position so that the cursor does not blink on IE.\n * @private\n */\n private clearTextareaPosition() {\n this.textarea.style.left = '';\n this.textarea.style.top = '';\n };\n}\n","/**\n * @license MIT\n */\n\n/**\n * The character sets supported by the terminal. These enable several languages\n * to be represented within the terminal with only 8-bit encoding. See ISO 2022\n * for a discussion on character sets. Only VT100 character sets are supported.\n */\nexport const CHARSETS: {[key: string]: {[key: string]: string}} = {};\n\n/**\n * The default character set, US.\n */\nexport const DEFAULT_CHARSET = CHARSETS['B'];\n\n/**\n * DEC Special Character and Line Drawing Set.\n * Reference: http://vt100.net/docs/vt102-ug/table5-13.html\n * A lot of curses apps use this if they see TERM=xterm.\n * testing: echo -e '\\e(0a\\e(B'\n * The xterm output sometimes seems to conflict with the\n * reference above. xterm seems in line with the reference\n * when running vttest however.\n * The table below now uses xterm's output from vttest.\n */\nCHARSETS['0'] = {\n '`': '\\u25c6', // '◆'\n 'a': '\\u2592', // '▒'\n 'b': '\\u0009', // '\\t'\n 'c': '\\u000c', // '\\f'\n 'd': '\\u000d', // '\\r'\n 'e': '\\u000a', // '\\n'\n 'f': '\\u00b0', // '°'\n 'g': '\\u00b1', // '±'\n 'h': '\\u2424', // '\\u2424' (NL)\n 'i': '\\u000b', // '\\v'\n 'j': '\\u2518', // '┘'\n 'k': '\\u2510', // '┐'\n 'l': '\\u250c', // '┌'\n 'm': '\\u2514', // '└'\n 'n': '\\u253c', // '┼'\n 'o': '\\u23ba', // '⎺'\n 'p': '\\u23bb', // '⎻'\n 'q': '\\u2500', // '─'\n 'r': '\\u23bc', // '⎼'\n 's': '\\u23bd', // '⎽'\n 't': '\\u251c', // '├'\n 'u': '\\u2524', // '┤'\n 'v': '\\u2534', // '┴'\n 'w': '\\u252c', // '┬'\n 'x': '\\u2502', // '│'\n 'y': '\\u2264', // '≤'\n 'z': '\\u2265', // '≥'\n '{': '\\u03c0', // 'π'\n '|': '\\u2260', // '≠'\n '}': '\\u00a3', // '£'\n '~': '\\u00b7' // '·'\n};\n\n/**\n * British character set\n * ESC (A\n * Reference: http://vt100.net/docs/vt220-rm/table2-5.html\n */\nCHARSETS['A'] = {\n '#': '£'\n};\n\n/**\n * United States character set\n * ESC (B\n */\nCHARSETS['B'] = null;\n\n/**\n * Dutch character set\n * ESC (4\n * Reference: http://vt100.net/docs/vt220-rm/table2-6.html\n */\nCHARSETS['4'] = {\n '#': '£',\n '@': '¾',\n '[': 'ij',\n '\\\\': '½',\n ']': '|',\n '{': '¨',\n '|': 'f',\n '}': '¼',\n '~': '´'\n};\n\n/**\n * Finnish character set\n * ESC (C or ESC (5\n * Reference: http://vt100.net/docs/vt220-rm/table2-7.html\n */\nCHARSETS['C'] =\nCHARSETS['5'] = {\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Å',\n '^': 'Ü',\n '`': 'é',\n '{': 'ä',\n '|': 'ö',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * French character set\n * ESC (R\n * Reference: http://vt100.net/docs/vt220-rm/table2-8.html\n */\nCHARSETS['R'] = {\n '#': '£',\n '@': 'à',\n '[': '°',\n '\\\\': 'ç',\n ']': '§',\n '{': 'é',\n '|': 'ù',\n '}': 'è',\n '~': '¨'\n};\n\n/**\n * French Canadian character set\n * ESC (Q\n * Reference: http://vt100.net/docs/vt220-rm/table2-9.html\n */\nCHARSETS['Q'] = {\n '@': 'à',\n '[': 'â',\n '\\\\': 'ç',\n ']': 'ê',\n '^': 'î',\n '`': 'ô',\n '{': 'é',\n '|': 'ù',\n '}': 'è',\n '~': 'û'\n};\n\n/**\n * German character set\n * ESC (K\n * Reference: http://vt100.net/docs/vt220-rm/table2-10.html\n */\nCHARSETS['K'] = {\n '@': '§',\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Ü',\n '{': 'ä',\n '|': 'ö',\n '}': 'ü',\n '~': 'ß'\n};\n\n/**\n * Italian character set\n * ESC (Y\n * Reference: http://vt100.net/docs/vt220-rm/table2-11.html\n */\nCHARSETS['Y'] = {\n '#': '£',\n '@': '§',\n '[': '°',\n '\\\\': 'ç',\n ']': 'é',\n '`': 'ù',\n '{': 'à',\n '|': 'ò',\n '}': 'è',\n '~': 'ì'\n};\n\n/**\n * Norwegian/Danish character set\n * ESC (E or ESC (6\n * Reference: http://vt100.net/docs/vt220-rm/table2-12.html\n */\nCHARSETS['E'] =\nCHARSETS['6'] = {\n '@': 'Ä',\n '[': 'Æ',\n '\\\\': 'Ø',\n ']': 'Å',\n '^': 'Ü',\n '`': 'ä',\n '{': 'æ',\n '|': 'ø',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * Spanish character set\n * ESC (Z\n * Reference: http://vt100.net/docs/vt220-rm/table2-13.html\n */\nCHARSETS['Z'] = {\n '#': '£',\n '@': '§',\n '[': '¡',\n '\\\\': 'Ñ',\n ']': '¿',\n '{': '°',\n '|': 'ñ',\n '}': 'ç'\n};\n\n/**\n * Swedish character set\n * ESC (H or ESC (7\n * Reference: http://vt100.net/docs/vt220-rm/table2-14.html\n */\nCHARSETS['H'] =\nCHARSETS['7'] = {\n '@': 'É',\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Å',\n '^': 'Ü',\n '`': 'é',\n '{': 'ä',\n '|': 'ö',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * Swiss character set\n * ESC (=\n * Reference: http://vt100.net/docs/vt220-rm/table2-15.html\n */\nCHARSETS['='] = {\n '#': 'ù',\n '@': 'à',\n '[': 'é',\n '\\\\': 'ç',\n ']': 'ê',\n '^': 'î',\n '_': 'è',\n '`': 'ô',\n '{': 'ä',\n '|': 'ö',\n '}': 'ü',\n '~': 'û'\n};\n",null],"names":[],"mappings":"AmBAA;;;ADSa;AAKA;AAYb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AAMA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AD3OA;AAwBA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAMA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAOA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AAUA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAUA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AACA;AACA;AACA;AAAA;AACA;AAAA;AApNa;;;;;;;ADRb;AAAA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AACA;AAAC;;;;;;;ADtEA;AAED;AAGA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AA3Da;;;;;;;ADJb;AACA;AASA;AAEA;AAAA;AAAA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AAIA;AAEA;AACA;AAGA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAMA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAMA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAOA;AACA;AACA;AAOA;AACA;AACA;AAMA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAMA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAMA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAMA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AAIA;AACA;AACA;AACA;AAuCA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAOA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAUA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAwFA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AAKA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAoFA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkEA;AAEA;AACA;AACA;AACA;AAEA;AAOA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAIA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAIA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAIA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAyBA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAGA;AACA;AAGA;AACA;AAGA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAAA;AAj8Ca;AAm8Cb;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ADljDA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAKA;AAeA;AAFA;AAGA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AAMA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AAOA;AACA;AACA;AAYA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAOA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAAA;AAOA;AACA;AAEA;AACA;AACA;AACA;AAQA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AAAA;AAAA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AAWA;AAGA;AACA;AACA;AAKA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAhUmB;AANN;;;;;;;ADhCb;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AAKA;AACA;AACA;AAEA;AACA;AAOA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAKA;AACA;AAIA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AAIA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAMA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AAQA;AACA;AACA;AAQA;AACA;AACA;AAOA;AACA;AACA;AAKA;AACA;AACA;AAMA;AACA;AACA;AACA;AAKA;AACA;AACA;AASA;AAAA;AAvda;;;;;;;ADjKb;AAOA;AAKA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAC;AAED;AAEA;AAQA;AAAA;AANA;AACA;AACA;AAEA;AAKA;AACA;AACA;AACA;AAKA;AAQA;AACA;AACA;AACA;AACA;AACA;AAMA;AAKA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAuBA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAOA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAQA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAlWa;AAsWb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ADzYA;AACA;AAGA;AAEA;AAMA;AAKA;AAKA;AAMA;AAMA;AAMA;AAIA;AACA;AAEA;AACA;AAaA;AAAA;AACA;AACA;AACA;AACA;AAUA;AAAA;AA+CA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;;AACA;AAKA;AAAA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAKA;AAKA;AACA;AACA;AAOA;AACA;AACA;AACA;AAKA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAAA;AAKA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAIA;AACA;AACA;AAEA;AACA;;;AAAA;AAKA;AACA;AACA;AACA;AACA;AAYA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAOA;AAAA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAMA;AAEA;AACA;AACA;AAGA;AAGA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAKA;AAAA;AAEA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AAGA;AACA;AAOA;AAGA;AAGA;AAGA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AAIA;AACA;AACA;AAAA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAGA;AACA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AAOA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAAA;AA9nBa;;;;;;;ADrEb;AAuBA;AACA;AAEA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAKA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;;AAAA;AAMA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAAA;AAKA;AACA;AACA;AACA;AACA;AAOA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AArHa;;;;;;;ADCb;AAaA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAQA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAMA;AACA;AACA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAvIa;;;;;;;ADWb;AACA;AACA;AACA;AACA;AACA;AALA;AAWA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AATA;AAgBA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAzBA;AAgCA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AApBA;AA4BA;AACA;AAGA;AACA;AACA;AANA;;;;;;;ADvGA;AAEA;AACA;AACA;AAEa;AACA;AAKA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ADjBb;AAKA;AAAA;AAOA;AAAA;AAEA;AACA;;AACA;AAEA;AAAA;AACA;AACA;;;AAAA;AAEA;AAAA;AACA;AACA;;;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAnDa;;;;;;;;;;;;;;;;;ADJb;AAEA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAXA;AAaA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AATA;AAWA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAAA;AAUA;AACA;AACA;AAUA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAMA;AACA;AACA;AAWA;AAAA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AAAA;AAhMa;;;;;;;ADCb;AAYA;AAAA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAAA;AAhE0B;AAET;AAHJ;;;;;;;ADEb;AACA;AACA;AAFA;AAEC;;;;;;;ADPD;AAEA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAjBA;AAgCA;AACA;AAGA;AACA;AAGA;AACA;AAEA;AACA;AAZA;AAwBA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AAVA;;;;;;;ADlDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAcA;AAOA;AAMA;AAOA;AAkBA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AAAA;AACA;AAEA;AACA;AAEA;AAIA;AAIA;AACA;AACA;AAEA;AACA;AACA;AAMA;AAKA;AAKA;AAKA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAQA;AAGA;AAGA;AAMA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAEA;AAKA;AAEA;AACA;AAOA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAKA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAKA;AACA;AACA;AAMA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAAA;AACA;AAEA;AACA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAKA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAQA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAGA;AAIA;AAMA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAIA;AAOA;AACA;AAQA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAYA;AACA;AAKA;AACA;AAIA;AAGA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAIA;AACA;AACA;AAIA;AACA;AAGA;AACA;AAAA;AAIA;AAEA;AACA;AAIA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAQA;AAOA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAGA;AAEA;AACA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AAGA;AAIA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAMA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAQA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAGA;AAGA;AAEA;AAEA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAQA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAMA;AACA;AACA;AAKA;AACA;AACA;AAKA;AACA;AACA;AAMA;AACA;AAKA;AAGA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AAOA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAMA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AAUA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AAEA;AACA;AAQA;AACA;AACA;AACA;AACA;AAEA;AACA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAMA;AACA;AACA;AAKA;AACA;AACA;AAKA;AACA;AACA;AAQA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AASA;AACA;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAMA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAMA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAMA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAKA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAKA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAOA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AAMA;AACA;AAAA;AACA;AAAA;AAOA;AAKA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAOA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAOA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAQA;AACA;AACA;AACA;AAEA;AAMA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAOA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AAOA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAOA;AAOA;AACA;AAUA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAQA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAGA;AACA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AASA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AAQA;AACA;AACA;AAEA;;;"} \ No newline at end of file diff --git a/server/www/teleport/static/js/maintenance/install.js b/server/www/teleport/static/js/maintenance/install.js new file mode 100644 index 0000000..7ed5f4a --- /dev/null +++ b/server/www/teleport/static/js/maintenance/install.js @@ -0,0 +1,197 @@ +"use strict"; + +$app.on_init = function (cb_stack, cb_args) { + $app.dom = { + btn_config: $('#btn-config'), + steps_detail: $('#steps-detail'), + db_info: $('#db-info'), + account: $('#sysadmin-account'), + email: $('#sysadmin-email'), + password: $('#password'), + password2: $('#password-again'), + message: $('#message'), + step2: $('#step2') + }; + + $app._make_info = function (key, value) { + return '' + key + ':' + value + ''; + }; + + var html = []; + if ($app.options.db.type === DB_TYPE_SQLITE) { + html.push($app._make_info('数据库类型', 'SQLite')); + html.push($app._make_info('数据库文件', $app.options.db.sqlite_file)); + } else if ($app.options.db.type === DB_TYPE_MYSQL) { + html.push($app._make_info('数据库类型', 'MySQL')); + html.push($app._make_info('MySQL主机', $app.options.db.mysql_host)); + html.push($app._make_info('MySQL端口', $app.options.db.mysql_port)); + html.push($app._make_info('数据库名称', $app.options.db.mysql_db)); + html.push($app._make_info('用户名', $app.options.db.mysql_user)); + + var _t = []; + _t.push('
    '); + _t.push('注意:请确保您在执行后续创建操作之前,已经在MySQL数据库中创建了数据库"'); + _t.push($app.options.db.mysql_db); + _t.push('"和用户"'); + _t.push($app.options.db.mysql_user); + _t.push('",并为用户"'); + _t.push($app.options.db.mysql_user); + _t.push('"设置了在数据库"'); + _t.push($app.options.db.mysql_db); + _t.push('"创建表的权限!'); + _t.push('
    '); + $app.dom.db_info.after(_t.join('')); + } else { + html.push($app._make_info('数据库类型', '未知的数据库类型,请检查您的配置文件!')); + $app.dom.btn_config.attr('disabled', 'disabled').hide(); + } + $app.dom.db_info.append(html.join('')); + + $app.hide_op_box = function () { + $app.dom.message.hide(); + }; + + $app.show_op_box = function (op_type, op_msg) { + $app.dom.message.html(op_msg); + $app.dom.message.removeClass().addClass('op_box op_' + op_type); + $app.dom.message.show(); + }; + + $app.dom.btn_config.click(function () { + var str_account = $app.dom.account.val(); + var str_email = $app.dom.email.val(); + var str_password = $app.dom.password.val(); + var str_password2 = $app.dom.password2.val(); + + if (str_account.length === 0) { + $app.show_op_box('error', '请填写系统管理员登录账号名称!'); + $app.dom.account.focus(); + return; + } + if (str_email.length === 0) { + $app.show_op_box('error', '请填写系统管理员的电子邮件地址!'); + $app.dom.email.focus(); + return; + } + if(!tp_check_email(str_email)) { + $app.show_op_box('error', '电子邮件地址格式错啦,你会收不到邮件的!'); + $app.dom.email.focus(); + return; + } + if (str_password.length === 0) { + $app.show_op_box('error', '请设置系统管理员登录密码!'); + $app.dom.password.focus(); + return; + } + if (str_password2.length === 0) { + $app.show_op_box('error', '请再次输入系统管理员登录密码!'); + $app.dom.password.focus(); + return; + } + if (str_password !== str_password2) { + $app.show_op_box('error', '两次输入的密码不一致!'); + $app.dom.password2.focus().select(); + return; + } + + $app.dom.btn_config.attr('disabled', 'disabled').hide(); + $app.hide_op_box(); + $app.dom.steps_detail.show(); + + $tp.ajax_post_json('/maintenance/rpc', {cmd: 'install', sysadmin: str_account, email: str_email, password: str_password}, + function (ret) { + if (ret.code === TPE_OK) { + + var cb_stack = CALLBACK_STACK.create(); + cb_stack + .add_delay(500, $app.get_task_ret, {task_id: ret.data.task_id}) + .exec(); + } + + }, + function () { +// $app.show_message('error', '无法连接到服务器!'); + $app.show_op_box('error', '无法连接到服务器!'); + } + ); + + }); + + $app.get_task_ret = function (cb_stack, cb_args) { + var task_id = cb_args.task_id || 0; + if (task_id === 0) { + console.log('task-id', task_id); + return; + } + + $tp.ajax_post_json('/maintenance/rpc', {cmd: 'get_task_ret', 'tid': task_id}, + function (ret) { + if (ret.code === TPE_OK) { + + // show step progress. + var all_ok = true; + var steps = ret.data.steps; + $app.dom.steps_detail.empty(); + + var html = []; + var icon_class = ''; + var err_class = ''; + for (var i = 0; i < steps.length; ++i) { + if (steps[i].stat === 0) + icon_class = 'fa-check'; + else + icon_class = 'fa-cog fa-spin'; + + if (steps[i].code !== 0) { + icon_class = 'fa-exclamation-circle'; + err_class = ' class="error"'; + steps[i].msg += ' 失败!'; + all_ok = false; + } + else { + err_class = ''; + } + + html.push(' '); + html.push(steps[i].msg); + html.push('

    ') + } + $app.dom.steps_detail.html(html.join('')); + + if (!ret.data.running) { + if (all_ok) { + + $tp.ajax_post_json('/auth/do-logout', {}, + function () { + }, + function () { + } + ); + + $app.dom.step2.show('fast', function () { + // 确保页面滚动到最低端,使得下一步提示能够被看到。 + document.body.scrollTop = document.body.scrollHeight; + }); + } + return; + } + + cb_stack + .add_delay(500, $app.get_task_ret, {task_id: task_id}) + .exec(); + } + + }, + function () { + $app.show_op_box('error', '无法连接到服务器!'); + } + ); + + }; + + cb_stack.exec(); +}; \ No newline at end of file diff --git a/server/www/teleport/static/js/ops/auz-info.js b/server/www/teleport/static/js/ops/auz-info.js new file mode 100644 index 0000000..23436e3 --- /dev/null +++ b/server/www/teleport/static/js/ops/auz-info.js @@ -0,0 +1,1990 @@ +"use strict"; + +$app.on_init = function (cb_stack) { + $app.dom = { + area_operator: $('#area-operator'), + area_asset: $('#area-asset'), + + btn_refresh_operator: $('#btn-refresh-operator'), + btn_add_user: $('#btn-add-user'), + btn_add_user_group: $('#btn-add-user-group'), + select_all_operator: $('#table-operator-select-all'), + btn_remove_operator: $('#btn-remove-operator'), + + btn_refresh_asset: $('#btn-refresh-asset'), + btn_add_acc: $('#btn-add-acc'), + btn_add_acc_group: $('#btn-add-acc-group'), + btn_add_host: $('#btn-add-host'), + btn_add_host_group: $('#btn-add-host-group'), + select_all_asset: $('#table-asset-select-all'), + btn_remove_asset: $('#btn-remove-asset'), + + flag_checkboxes: $('#tab-config div.tp-checkbox.tp-editable'), + flag_record_allow_replay: $('#record-allow-replay'), + flag_rdp_allow_clipboard: $('#rdp-allow-clipboard'), + flag_rdp_allow_disk: $('#rdp-allow-disk'), + flag_rdp_allow_console: $('#rdp-allow-console'), + flag_ssh_allow_shell: $('#ssh-allow-shell'), + flag_ssh_allow_sftp: $('#ssh-allow-sftp'), + btn_save_flags: $('#btn-save-flags') + }; + + $app.init_flags(); + + if ($app.options.policy_id !== 0) { + window.onresize = $app.on_win_resize; + cb_stack + .add($app.sync_height) + .add($app.create_controls); + } + + + cb_stack.exec(); +}; + +//=================================== +// 创建页面控件对象 +//=================================== +$app.create_controls = function (cb_stack) { + + //------------------------------- + // 操作者列表表格 + //------------------------------- + var table_operator_options = { + dom_id: 'table-operator', + data_source: { + type: 'ajax-post', + url: '/ops/policy/get-operators' + }, + message_no_data: '还没有授权的操作者...', + column_default: {sort: false, align: 'left'}, + columns: [ + { + title: '
    ', + key: 'chkbox', + sort: false, + width: 36, + align: 'center', + render: 'make_check_box', + fields: {id: 'id'} + }, + { + title: '类型', + key: 'rtype', + sort: true, + width: 80, + render: 'ref_type', + fields: {rtype: 'rtype'} + }, + { + title: '操作者', + key: 'name', + sort: true, + header_render: 'filter_search', + fields: {name: 'name'} + } + ], + + // 重载回调函数 + on_header_created: $app.on_table_operator_header_created, + on_render_created: $app.on_table_operator_render_created, + on_cell_created: $app.on_table_operator_cell_created + }; + + $app.table_operator = $tp.create_table(table_operator_options); + cb_stack + .add($app.table_operator.load_data) + .add($app.table_operator.init); + + $tp.create_table_header_filter_search($app.table_operator, { + name: 'search', + place_holder: '搜索:用户名/用户组名' + }); + $tp.create_table_filter_fixed_value($app.table_operator, {policy_id: $app.options.policy_id}); + + $tp.create_table_paging($app.table_operator, 'table-operator-paging', + { + per_page: Cookies.get($app.page_id('ops_auz') + '_operator_per_page'), + on_per_page_changed: function (per_page) { + Cookies.set($app.page_id('ops_auz') + '_operator_per_page', per_page, {expires: 365}); + } + }); + $tp.create_table_pagination($app.table_operator, 'table-operator-pagination'); + + $app.dom.btn_refresh_operator.click(function () { + $app.table_operator.load_data(); + }); + $app.dom.select_all_operator.click(function () { + var _objects = $('#' + $app.table_operator.dom_id + ' tbody').find('[data-check-box]'); + if ($(this).is(':checked')) { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', true); + }); + } else { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', false); + }); + } + }); + $app.dom.btn_remove_operator.click($app.on_btn_remove_operator_click); + + //------------------------------- + // 资产列表表格 + //------------------------------- + var table_asset_options = { + dom_id: 'table-asset', + data_source: { + type: 'ajax-post', + url: '/ops/policy/get-asset' + }, + message_no_data: '还没有分配被授权访问的资产哦...', + column_default: {sort: false, align: 'left'}, + columns: [ + { + title: '', + key: 'chkbox', + sort: false, + width: 36, + align: 'center', + render: 'make_check_box', + fields: {id: 'id'} + }, + { + title: '类型', + key: 'rtype', + sort: true, + width: 80, + render: 'ref_type', + fields: {rtype: 'rtype'} + }, + { + title: '资产', + key: 'name', + sort: true, + header_render: 'filter_search', + fields: {name: 'name'} + } + ], + + // 重载回调函数 + on_header_created: $app.on_table_asset_header_created, + on_render_created: $app.on_table_asset_render_created, + on_cell_created: $app.on_table_asset_cell_created + }; + + $app.table_asset = $tp.create_table(table_asset_options); + cb_stack + .add($app.table_asset.load_data) + .add($app.table_asset.init); + + $tp.create_table_header_filter_search($app.table_asset, { + name: 'search', + place_holder: '搜索:账号名/账号组名/主机名/主机组名' + }); + $tp.create_table_filter_fixed_value($app.table_asset, {policy_id: $app.options.policy_id}); + + $tp.create_table_paging($app.table_asset, 'table-asset-paging', + { + per_page: Cookies.get($app.page_id('ops_auz') + '_asset_per_page'), + on_per_page_changed: function (per_page) { + Cookies.set($app.page_id('ops_auz') + '_asset_per_page', per_page, {expires: 365}); + } + }); + $tp.create_table_pagination($app.table_asset, 'table-asset-pagination'); + + $app.dom.btn_refresh_asset.click(function () { + $app.table_asset.load_data(); + }); + $app.dom.select_all_asset.click(function () { + var _objects = $('#' + $app.table_asset.dom_id + ' tbody').find('[data-check-box]'); + if ($(this).is(':checked')) { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', true); + }); + } else { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', false); + }); + } + }); + $app.dom.btn_remove_asset.click($app.on_btn_remove_asset_click); + + //------------------------------- + // 选择用户对话框 + //------------------------------- + var table_sel_user_options = { + dom_id: 'table-sel-user', + data_source: { + type: 'ajax-post', + url: '/user/get-users', + exclude: {'ops_policy_id': $app.options.policy_id} + }, + message_no_data: '所有用户都被授权了哦...', + column_default: {sort: false, align: 'left'}, + columns: [ + { + title: '', + key: 'chkbox', + sort: false, + width: 36, + align: 'center', + render: 'make_check_box', + fields: {id: 'id'} + }, + { + title: "用户", + key: "username", + sort: true, + header_render: 'filter_search', + render: 'user_info', + fields: {id: 'id', username: 'username', surname: 'surname', email: 'email'} + }, + { + title: "角色", + key: "role_id", + width: 120, + sort: true, + header_render: 'filter_role', + render: 'role', + fields: {role_id: 'role_id'} + }, + { + title: "状态", + key: "state", + sort: true, + width: 120, + align: 'center', + header_render: 'filter_state', + render: 'state', + fields: {state: 'state'} + } + ], + + // 重载回调函数 + on_header_created: $app.on_table_sel_user_header_created, + on_render_created: $app.on_table_sel_user_render_created, + on_cell_created: $app.on_table_sel_user_cell_created + }; + $app.table_sel_user = $tp.create_table(table_sel_user_options); + cb_stack.add($app.table_sel_user.init); + + $tp.create_table_header_filter_search($app.table_sel_user, { + name: 'search', + place_holder: '搜索:用户账号/姓名/邮箱/描述/等等...' + }); + $tp.create_table_filter_role($app.table_sel_user, $app.role_list); + $tp.create_table_header_filter_state($app.table_sel_user, 'state', $app.obj_states); + + $tp.create_table_paging($app.table_sel_user, 'table-sel-user-paging', + { + per_page: Cookies.get($app.page_id('ops_auz_detail') + '_sel_user_per_page'), + on_per_page_changed: function (per_page) { + Cookies.set($app.page_id('ops_auz_detail') + '_sel_user_per_page', per_page, {expires: 365}); + } + }); + $tp.create_table_pagination($app.table_sel_user, 'table-sel-user-pagination'); + + $app.dlg_sel_user = $app.create_dlg_sel_user(); + cb_stack.add($app.dlg_sel_user.init); + cb_stack.add($app.load_role_list); + + + //------------------------------- + // 选择用户组对话框 + //------------------------------- + var table_sel_user_group_options = { + dom_id: 'table-sel-user-group', + data_source: { + type: 'ajax-post', + url: '/group/get-groups', + exclude: {'ops_policy_id': {pid: $app.options.policy_id, gtype: TP_GROUP_USER}} // 排除指定成员 + }, + message_no_data: '所有用户组都被授权了哦...', + column_default: {sort: false, align: 'left'}, + columns: [ + { + title: '', + key: 'chkbox', + sort: false, + width: 36, + align: 'center', + render: 'make_check_box', + fields: {id: 'id'} + }, + { + title: "用户组", + key: "name", + sort: true, + header_render: 'filter_search', + render: 'name', + fields: {name: 'name', desc: 'desc'} + } + ], + + // 重载回调函数 + on_header_created: $app.on_table_sel_user_group_header_created, + on_render_created: $app.on_table_sel_user_group_render_created, + on_cell_created: $app.on_table_sel_user_group_cell_created + }; + $app.table_sel_user_group = $tp.create_table(table_sel_user_group_options); + cb_stack.add($app.table_sel_user_group.init); + + $tp.create_table_header_filter_search($app.table_sel_user_group, { + name: 'search', + place_holder: '搜索:用户组名称/描述/等等...' + }); + $tp.create_table_filter_fixed_value($app.table_sel_user_group, {type: TP_GROUP_USER}); + $tp.create_table_paging($app.table_sel_user_group, 'table-sel-user-group-paging', + { + per_page: Cookies.get($app.page_id('ops_auz_detail') + '_user_group_per_page'), + on_per_page_changed: function (per_page) { + Cookies.set($app.page_id('ops_auz_detail') + '_user_group_per_page', per_page, {expires: 365}); + } + }); + $tp.create_table_pagination($app.table_sel_user_group, 'table-sel-user-group-pagination'); + + $app.dlg_sel_user_group = $app.create_dlg_sel_user_group(); + cb_stack.add($app.dlg_sel_user_group.init); + + + //------------------------------- + // 选择账号对话框 + //------------------------------- + var table_sel_acc_options = { + dom_id: 'table-sel-acc', + data_source: { + type: 'ajax-post', + url: '/asset/get-accounts', + exclude: {'ops_policy_id': $app.options.policy_id} // 排除指定成员 + }, + message_no_data: '所有账号都被授权了哦...', + column_default: {sort: false, align: 'left'}, + columns: [ + { + title: '', + key: 'chkbox', + sort: false, + width: 36, + align: 'center', + render: 'make_check_box', + fields: {id: 'id'} + }, + { + title: "账号", + key: "username", + sort: true, + header_render: 'filter_search', + render: 'acc_info', + fields: {id: 'id', username: 'username', host_ip: 'host_ip', router_ip: 'router_ip', router_port: 'router_port'} + }, + { + title: "远程连接协议", + key: "protocol_type", + sort: true, + width: 120, + align: 'center', + render: 'protocol', + fields: {protocol_type: 'protocol_type'} + }, + { + title: "认证方式", + key: "auth_type", + width: 80, + align: 'center', + render: 'auth_type', + fields: {auth_type: 'auth_type'} + }, + { + title: "状态", + key: "state", + sort: true, + width: 80, + align: 'center', + render: 'state', + fields: {state: 'state'} + } + ], + + // 重载回调函数 + on_header_created: $app.on_table_sel_acc_header_created, + on_render_created: $app.on_table_sel_acc_render_created, + on_cell_created: $app.on_table_sel_acc_cell_created + }; + $app.table_sel_acc = $tp.create_table(table_sel_acc_options); + cb_stack.add($app.table_sel_acc.init); + + $tp.create_table_header_filter_search($app.table_sel_acc, { + name: 'search', + place_holder: '搜索:账号/主机IP/等等...' + }); + // 从cookie中读取用户分页限制的选择 + $tp.create_table_paging($app.table_sel_acc, 'table-sel-acc-paging', + { + per_page: Cookies.get($app.page_id('ops_auz_detail') + '_sel_acc_per_page'), + on_per_page_changed: function (per_page) { + Cookies.set($app.page_id('ops_auz_detail') + '_sel_acc_per_page', per_page, {expires: 365}); + } + }); + $tp.create_table_pagination($app.table_sel_acc, 'table-sel-acc-pagination'); + + $app.dlg_sel_acc = $app.create_dlg_sel_acc(); + cb_stack.add($app.dlg_sel_acc.init); + + + //------------------------------- + // 选择账号组对话框 + //------------------------------- + var table_sel_acc_group_options = { + dom_id: 'table-sel-acc-group', + data_source: { + type: 'ajax-post', + url: '/group/get-groups', + exclude: {'ops_policy_id': {pid: $app.options.policy_id, gtype: TP_GROUP_ACCOUNT}} // 排除指定成员 + }, + message_no_data: '所有账号组都被授权了哦...', + column_default: {sort: false, align: 'left'}, + columns: [ + { + title: '', + key: 'chkbox', + sort: false, + width: 36, + align: 'center', + render: 'make_check_box', + fields: {id: 'id'} + }, + { + title: "账号组", + key: "name", + sort: true, + header_render: 'filter_search', + render: 'name', + fields: {name: 'name', desc: 'desc'} + } + ], + + // 重载回调函数 + on_header_created: $app.on_table_sel_acc_group_header_created, + on_render_created: $app.on_table_sel_acc_group_render_created, + on_cell_created: $app.on_table_sel_acc_group_cell_created + }; + $app.table_sel_acc_group = $tp.create_table(table_sel_acc_group_options); + cb_stack.add($app.table_sel_acc_group.init); + + $tp.create_table_header_filter_search($app.table_sel_acc_group, { + name: 'search', + place_holder: '搜索:账号组名称/描述/等等...' + }); + $tp.create_table_filter_fixed_value($app.table_sel_acc_group, {type: TP_GROUP_ACCOUNT}); + $tp.create_table_paging($app.table_sel_acc_group, 'table-sel-acc-group-paging', + { + per_page: Cookies.get($app.page_id('ops_auz_detail') + '_acc_group_per_page'), + on_per_page_changed: function (per_page) { + Cookies.set($app.page_id('ops_auz_detail') + '_acc_group_per_page', per_page, {expires: 365}); + } + }); + $tp.create_table_pagination($app.table_sel_acc_group, 'table-sel-acc-group-pagination'); + + $app.dlg_sel_acc_group = $app.create_dlg_sel_acc_group(); + cb_stack.add($app.dlg_sel_acc_group.init); + + + //------------------------------- + // 选择主机对话框 + //------------------------------- + var table_sel_host_options = { + dom_id: 'table-sel-host', + data_source: { + type: 'ajax-post', + url: '/asset/get-hosts', + exclude: {'ops_policy_id': $app.options.policy_id} // 排除指定成员 + }, + message_no_data: '所有主机都被授权了哦...', + column_default: {sort: false, align: 'left'}, + columns: [ + { + title: '', + key: 'chkbox', + sort: false, + width: 36, + align: 'center', + render: 'make_check_box', + fields: {id: 'id'} + }, + { + title: "主机", + key: "ip", + sort: true, + // width: 240, + header_render: 'filter_search', + render: 'host_info', + fields: {id: 'id', ip: 'ip', name: 'name', router_ip: 'router_ip', router_port: 'router_port'} + }, + { + title: "系统", + key: "os_type", + width: 36, + align: 'center', + sort: true, + render: 'os_type', + fields: {os_type: 'os_type'} + }, + { + title: "资产编号", + key: "cid", + sort: true, + // width: 80, + // align: 'center', + //render: 'auth_type', + fields: {cid: 'cid'} + }, + { + title: "状态", + key: "state", + sort: true, + width: 90, + align: 'center', + render: 'state', + fields: {state: 'state'} + } + ], + + // 重载回调函数 + on_header_created: $app.on_table_sel_host_header_created, + on_render_created: $app.on_table_sel_host_render_created, + on_cell_created: $app.on_table_sel_host_cell_created + }; + $app.table_sel_host = $tp.create_table(table_sel_host_options); + cb_stack.add($app.table_sel_host.init); + + $tp.create_table_header_filter_search($app.table_sel_host, { + name: 'search', + place_holder: '搜索:主机IP/名称/等等...' + }); + // 从cookie中读取用户分页限制的选择 + $tp.create_table_paging($app.table_sel_host, 'table-sel-host-paging', + { + per_page: Cookies.get($app.page_id('ops_auz_detail') + '_sel_host_per_page'), + on_per_page_changed: function (per_page) { + Cookies.set($app.page_id('ops_auz_detail') + '_sel_host_per_page', per_page, {expires: 365}); + } + }); + $tp.create_table_pagination($app.table_sel_acc, 'table-sel-host-pagination'); + + $app.dlg_sel_host = $app.create_dlg_sel_host(); + cb_stack.add($app.dlg_sel_host.init); + + + //------------------------------- + // 选择主机组对话框 + //------------------------------- + var table_sel_host_group_options = { + dom_id: 'table-sel-host-group', + data_source: { + type: 'ajax-post', + url: '/group/get-groups', + exclude: {'ops_policy_id': {pid: $app.options.policy_id, gtype: TP_GROUP_HOST}} // 排除指定成员 + }, + message_no_data: '所有主机组都被授权了哦...', + column_default: {sort: false, align: 'left'}, + columns: [ + { + title: '', + key: 'chkbox', + sort: false, + width: 36, + align: 'center', + render: 'make_check_box', + fields: {id: 'id'} + }, + { + title: "主机组", + key: "name", + sort: true, + header_render: 'filter_search', + render: 'name', + fields: {name: 'name', desc: 'desc'} + } + ], + + // 重载回调函数 + on_header_created: $app.on_table_sel_host_group_header_created, + on_render_created: $app.on_table_sel_host_group_render_created, + on_cell_created: $app.on_table_sel_host_group_cell_created + }; + $app.table_sel_host_group = $tp.create_table(table_sel_host_group_options); + cb_stack.add($app.table_sel_host_group.init); + + $tp.create_table_header_filter_search($app.table_sel_host_group, { + name: 'search', + place_holder: '搜索:主机组名称/描述/等等...' + }); + $tp.create_table_filter_fixed_value($app.table_sel_host_group, {type: TP_GROUP_HOST}); + $tp.create_table_paging($app.table_sel_host_group, 'table-sel-host-group-paging', + { + per_page: Cookies.get($app.page_id('ops_auz_detail') + '_host_group_per_page'), + on_per_page_changed: function (per_page) { + Cookies.set($app.page_id('ops_auz_detail') + '_host_group_per_page', per_page, {expires: 365}); + } + }); + $tp.create_table_pagination($app.table_sel_host_group, 'table-sel-host-group-pagination'); + + $app.dlg_sel_host_group = $app.create_dlg_sel_host_group(); + cb_stack.add($app.dlg_sel_host_group.init); + + + //------------------------------- + // 页面控件事件绑定 + //------------------------------- + $app.dom.btn_add_user.click(function () { + $app.dlg_sel_user.show(); + }); + $app.dom.btn_add_user_group.click(function () { + $app.dlg_sel_user_group.show(); + }); + $app.dom.btn_add_acc.click(function () { + $app.dlg_sel_acc.show(); + }); + $app.dom.btn_add_acc_group.click(function () { + $app.dlg_sel_acc_group.show(); + }); + $app.dom.btn_add_host.click(function () { + $app.dlg_sel_host.show(); + }); + $app.dom.btn_add_host_group.click(function () { + $app.dlg_sel_host_group.show(); + }); + + $app.dom.flag_checkboxes.click(function (e) { + $app.on_click_flag(e); + }); + $app.dom.btn_save_flags.click(function () { + $app.on_save_flags(); + }); + + cb_stack.exec(); +}; + +// 为保证界面美观,两个表格的高度不一致时,自动调整到一致。 +$app.on_win_resize = function () { + $app.sync_height(); +}; +$app.sync_height = function (cb_stack) { + var o_top = $app.dom.area_operator.offset().top; + var a_top = $app.dom.area_asset.offset().top; + + // 如果两个表格的top不一致,说明是页面宽度缩小到一定程度后,两个表格上下排列了。 + if (o_top !== a_top) { + $app.dom.area_operator.css({height: 'auto', minHeight: 'auto'}); + $app.dom.area_asset.css({height: 'auto', minHeight: 'auto'}); + return; + } + + $app.dom.area_operator.css({height: 'auto', minHeight: 'auto'}); + $app.dom.area_asset.css({height: 'auto', minHeight: 'auto'}); + + var o_height = $app.dom.area_operator.height(); + var a_height = $app.dom.area_asset.height(); + + var h = _.max([o_height, a_height]); + + if (o_height <= h) { + $app.dom.area_operator.css({minHeight: h}); + } else { + $app.dom.area_operator.css({height: 'auto', minHeight: 'auto'}); + } + if (a_height <= h) { + $app.dom.area_asset.css({minHeight: h}); + } else { + $app.dom.area_asset.css({height: 'auto', minHeight: 'auto'}); + } + + if (cb_stack) + cb_stack.exec(); +}; + +//------------------------------- +// 通用渲染器 +//------------------------------- +$app._add_common_render = function (render) { + render.filter_search = function (header, title, col) { + var _ret = ['
    ']; + _ret.push('
    '); + _ret.push('
    ' + title + '
    '); + + // 表格内嵌过滤器的DOM实体在这时生成 + var filter_ctrl = header._table_ctrl.get_filter_ctrl('search'); + _ret.push(filter_ctrl.render()); + + _ret.push('
    '); + + return _ret.join(''); + }; + + render.filter_state = function (header, title, col) { + var _ret = ['
    ']; + _ret.push('
    '); + _ret.push('
    ' + title + '
    '); + + // 表格内嵌过滤器的DOM实体在这时生成 + var filter_ctrl = header._table_ctrl.get_filter_ctrl('state'); + _ret.push(filter_ctrl.render()); + + _ret.push('
    '); + + return _ret.join(''); + }; + + render.make_check_box = function (row_id, fields) { + return ''; + }; + + render.state = function (row_id, fields) { + var _style, _state; + + for (var i = 0; i < $app.obj_states.length; ++i) { + if ($app.obj_states[i].id === fields.state) { + _style = $app.obj_states[i].style; + _state = $app.obj_states[i].name; + break; + } + } + if (i === $app.obj_states.length) { + _style = 'info'; + _state = ' 未知'; + } + + return '' + _state + '' + }; + + render.ref_type = function (row_id, fields) { + switch (fields.rtype) { + case TP_USER: + return ' 用户'; + case TP_GROUP_USER: + return ' 用户组'; + case TP_ACCOUNT: + return ' 账号'; + case TP_GROUP_ACCOUNT: + return ' 账号组'; + case TP_HOST: + return ' 主机'; + case TP_GROUP_HOST: + return ' 主机组'; + default: + return '未知' + } + }; +}; + +//------------------------------- +// 操作者列表 +//------------------------------- + +$app.check_operator_all_selected = function (cb_stack) { + var _all_checked = true; + var _objs = $('#' + $app.table_operator.dom_id + ' tbody').find('[data-check-box]'); + if (_objs.length === 0) { + _all_checked = false; + } else { + $.each(_objs, function (i, _obj) { + if (!$(_obj).is(':checked')) { + _all_checked = false; + return false; + } + }); + } + + if (_all_checked) { + $app.dom.select_all_operator.prop('checked', true); + } else { + $app.dom.select_all_operator.prop('checked', false); + } + + if (cb_stack) + cb_stack.exec(); +}; + +$app.on_table_operator_cell_created = function (tbl, row_id, col_key, cell_obj) { + if (col_key === 'chkbox') { + cell_obj.find('[data-check-box]').click(function () { + $app.check_operator_all_selected(); + }); + } +}; + +$app.on_table_operator_render_created = function (render) { + + $app._add_common_render(render); + +}; + +$app.on_table_operator_header_created = function (header) { + $('#' + header._table_ctrl.dom_id + ' a[data-reset-filter]').click(function () { + CALLBACK_STACK.create() + .add(header._table_ctrl.load_data) + .add(header._table_ctrl.reset_filters) + .exec(); + }); + + // 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行) + header._table_ctrl.get_filter_ctrl('search').on_created(); +}; + +$app.get_selected_operator = function (tbl) { + var items = []; + var _objs = $('#' + $app.table_operator.dom_id + ' tbody tr td input[data-check-box]'); + $.each(_objs, function (i, _obj) { + if ($(_obj).is(':checked')) { + var _row_data = tbl.get_row(_obj); + items.push(_row_data.id); + } + }); + return items; +}; + +$app.on_btn_remove_operator_click = function () { + var items = $app.get_selected_operator($app.table_operator); + if (items.length === 0) { + $tp.notify_error('请选择要移除的操作者!'); + return; + } + + var _fn_sure = function (cb_stack) { + $tp.ajax_post_json('/ops/policy/remove-members', {policy_id: $app.options.policy_id, policy_type: TP_POLICY_OPERATOR, ids: items}, + function (ret) { + if (ret.code === TPE_OK) { + cb_stack + .add($app.sync_height) + .add($app.check_operator_all_selected) + .add($app.check_operator_all_selected) + .add($app.table_operator.load_data); + $tp.notify_success('移除授权操作者成功!'); + } else { + $tp.notify_error('移除授权操作者失败:' + tp_error_msg(ret.code, ret.message)); + } + + cb_stack.exec(); + }, + function () { + $tp.notify_error('网络故障,移除授权操作者失败!'); + cb_stack.exec(); + } + ); + }; + + var cb_stack = CALLBACK_STACK.create(); + $tp.dlg_confirm(cb_stack, { + msg: '

    注意:移除操作不可恢复!!

    您确定要移除选定的' + items.length + '个授权操作者吗?

    ', + fn_yes: _fn_sure + }); + +}; + + +//------------------------------- +// 资产列表 +//------------------------------- + +$app.check_asset_all_selected = function (cb_stack) { + var _all_checked = true; + var _objs = $('#' + $app.table_asset.dom_id + ' tbody').find('[data-check-box]'); + if (_objs.length === 0) { + _all_checked = false; + } else { + $.each(_objs, function (i, _obj) { + if (!$(_obj).is(':checked')) { + _all_checked = false; + return false; + } + }); + } + + if (_all_checked) { + $app.dom.select_all_asset.prop('checked', true); + } else { + $app.dom.select_all_asset.prop('checked', false); + } + + if (cb_stack) + cb_stack.exec(); +}; + +$app.on_table_asset_cell_created = function (tbl, row_id, col_key, cell_obj) { + if (col_key === 'chkbox') { + cell_obj.find('[data-check-box]').click(function () { + $app.check_asset_all_selected(); + }); + } +}; + +$app.on_table_asset_render_created = function (render) { + $app._add_common_render(render); +}; + +$app.on_table_asset_header_created = function (header) { + $('#' + header._table_ctrl.dom_id + ' a[data-reset-filter]').click(function () { + CALLBACK_STACK.create() + .add(header._table_ctrl.load_data) + .add(header._table_ctrl.reset_filters) + .exec(); + }); + + // 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行) + header._table_ctrl.get_filter_ctrl('search').on_created(); +}; + +$app.get_selected_asset = function (tbl) { + var items = []; + var _objs = $('#' + $app.table_asset.dom_id + ' tbody tr td input[data-check-box]'); + $.each(_objs, function (i, _obj) { + if ($(_obj).is(':checked')) { + var _row_data = tbl.get_row(_obj); + items.push(_row_data.id); + } + }); + return items; +}; + +$app.on_btn_remove_asset_click = function () { + var items = $app.get_selected_asset($app.table_asset); + if (items.length === 0) { + $tp.notify_error('请选择要移除的被授权资产!'); + return; + } + + var _fn_sure = function (cb_stack) { + $tp.ajax_post_json('/ops/policy/remove-members', {policy_id: $app.options.policy_id, policy_type: TP_POLICY_ASSET, ids: items}, + function (ret) { + if (ret.code === TPE_OK) { + cb_stack + .add($app.sync_height) + .add($app.check_asset_all_selected) + .add($app.check_asset_all_selected) + .add($app.table_asset.load_data); + $tp.notify_success('移除被授权资产成功!'); + } else { + $tp.notify_error('移除被授权资产失败:' + tp_error_msg(ret.code, ret.message)); + } + + cb_stack.exec(); + }, + function () { + $tp.notify_error('网络故障,移除被授权资产失败!'); + cb_stack.exec(); + } + ); + }; + + var cb_stack = CALLBACK_STACK.create(); + $tp.dlg_confirm(cb_stack, { + msg: '

    注意:移除操作不可恢复!!

    您确定要移除选定的' + items.length + '个被授权资产吗?

    ', + fn_yes: _fn_sure + }); + +}; + + +//------------------------------- +// 选择用户对话框 +//------------------------------- + +$app.on_table_sel_user_cell_created = function (tbl, row_id, col_key, cell_obj) { + if (col_key === 'chkbox') { + cell_obj.find('[data-check-box]').click(function () { + $app.dlg_sel_user.check_all_selected(); + }); + } +}; + +$app.on_table_sel_user_render_created = function (render) { + $app._add_common_render(render); + + render.filter_role = function (header, title, col) { + var _ret = ['
    ']; + _ret.push('
    '); + _ret.push('
    ' + title + '
    '); + + // 表格内嵌过滤器的DOM实体在这时生成 + var filter_ctrl = header._table_ctrl.get_filter_ctrl('role'); + _ret.push(filter_ctrl.render()); + + _ret.push('
    '); + + return _ret.join(''); + }; + + render.user_info = function (row_id, fields) { + var ret = []; + ret.push('' + fields.surname + ''); + ret.push(''); + ret.push(fields.username); + if (fields.email.length > 0) + ret.push(' <' + fields.email + '>'); + ret.push(''); + return ret.join('') + }; + + render.role = function (row_id, fields) { + for (var i = 0; i < $app.role_list.length; ++i) { + if ($app.role_list[i].id === fields.role_id) + return $app.role_list[i].name; + } + return ' 未设置'; + }; +}; + +$app.on_table_sel_user_header_created = function (header) { + $('#' + header._table_ctrl.dom_id + ' a[data-reset-filter]').click(function () { + CALLBACK_STACK.create() + .add(header._table_ctrl.load_data) + .add(header._table_ctrl.reset_filters) + .exec(); + }); + + // 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行) + header._table_ctrl.get_filter_ctrl('search').on_created(); + header._table_ctrl.get_filter_ctrl('role').on_created(); + header._table_ctrl.get_filter_ctrl('state').on_created(); +}; + +$app.create_dlg_sel_user = function () { + var dlg = {}; + dlg.dom_id = 'dlg-sel-user'; + dlg.field_id = -1; + dlg.field_name = ''; + dlg.field_desc = ''; + + dlg.dom = { + dialog: $('#' + dlg.dom_id), + btn_sel_all: $('#' + dlg.dom_id + ' input[data-action="sel-all"]'), + btn_add: $('#' + dlg.dom_id + ' button[data-action="use-selected"]') + }; + + dlg.init = function (cb_stack) { + dlg.dom.btn_add.click(dlg.on_add); + dlg.dom.btn_sel_all.click(dlg.on_sel_all); + cb_stack.exec(); + }; + + dlg.show = function () { + $app.table_sel_user.load_data(); + dlg.dom.dialog.modal(); + }; + + dlg.on_sel_all = function () { + var _objects = $('#' + $app.table_sel_user.dom_id + ' tbody').find('[data-check-box]'); + if ($(this).is(':checked')) { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', true); + }); + } else { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', false); + }); + } + }; + + dlg.check_all_selected = function (cb_stack) { + var _all_checked = true; + var _objs = $('#' + dlg.dom_id + ' tbody').find('[data-check-box]'); + if (_objs.length === 0) { + _all_checked = false; + } else { + $.each(_objs, function (i, _obj) { + if (!$(_obj).is(':checked')) { + _all_checked = false; + return false; + } + }); + } + + if (_all_checked) { + dlg.dom.btn_sel_all.prop('checked', true); + } else { + dlg.dom.btn_sel_all.prop('checked', false); + } + if (cb_stack) + cb_stack.exec(); + }; + + dlg.get_selected_items = function () { + var items = []; + var _objs = $('#' + dlg.dom_id + ' tbody tr td input[data-check-box]'); + $.each(_objs, function (i, _obj) { + if ($(_obj).is(':checked')) { + var _row_data = $app.table_sel_user.get_row(_obj); + + var name = _row_data.username; + if (_row_data.surname.length > 0 && _row_data.surname !== name) + name += '(' + _row_data.surname + ')'; + + items.push({id: _row_data.id, name: name}); + } + }); + + return items; + }; + + dlg.on_add = function () { + var items = dlg.get_selected_items(); + + $tp.ajax_post_json('/ops/policy/add-members', { + policy_id: $app.options.policy_id, + type: TP_POLICY_OPERATOR, // 授权操作者 + rtype: TP_USER, // 用户 + members: items + }, + function (ret) { + if (ret.code === TPE_OK) { + $tp.notify_success('授权操作者添加成功!'); + CALLBACK_STACK.create() + .add($app.sync_height) + .add(dlg.check_all_selected) + .add($app.table_operator.load_data) + .add($app.table_sel_user.load_data) + .exec(); + } else { + $tp.notify_error('授权操作者添加失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,授权操作者添加失败!'); + } + ); + + }; + + return dlg; +}; + + +//------------------------------- +// 选择用户组对话框 +//------------------------------- + +$app.on_table_sel_user_group_cell_created = function (tbl, row_id, col_key, cell_obj) { + if (col_key === 'chkbox') { + cell_obj.find('[data-check-box]').click(function () { + $app.dlg_sel_user_group.check_all_selected(); + }); + } +}; + +$app.on_table_sel_user_group_render_created = function (render) { + + $app._add_common_render(render); + + render.name = function (row_id, fields) { + return '' + fields.name + '' + fields.desc + ''; + }; +}; + +$app.on_table_sel_user_group_header_created = function (header) { + $('#' + header._table_ctrl.dom_id + ' a[data-reset-filter]').click(function () { + CALLBACK_STACK.create() + .add(header._table_ctrl.load_data) + .add(header._table_ctrl.reset_filters) + .exec(); + }); + + // 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行) + header._table_ctrl.get_filter_ctrl('search').on_created(); +}; + +$app.create_dlg_sel_user_group = function () { + var dlg = {}; + dlg.dom_id = 'dlg-sel-user-group'; + dlg.field_id = -1; // 用户id + dlg.field_name = ''; + dlg.field_desc = ''; + + dlg.dom = { + dialog: $('#' + dlg.dom_id), + btn_sel_all: $('#' + dlg.dom_id + ' input[data-action="sel-all"]'), + btn_add: $('#' + dlg.dom_id + ' button[data-action="use-selected"]') + }; + + dlg.init = function (cb_stack) { + dlg.dom.btn_add.click(dlg.on_add); + dlg.dom.btn_sel_all.click(dlg.on_sel_all); + cb_stack.exec(); + }; + + dlg.show = function () { + $app.table_sel_user_group.load_data(); + dlg.dom.dialog.modal(); + }; + + dlg.on_sel_all = function () { + var _objects = $('#' + $app.table_sel_user_group.dom_id + ' tbody').find('[data-check-box]'); + if ($(this).is(':checked')) { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', true); + }); + } else { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', false); + }); + } + }; + + dlg.check_all_selected = function (cb_stack) { + var _all_checked = true; + var _objs = $('#' + dlg.dom_id + ' tbody').find('[data-check-box]'); + if (_objs.length === 0) { + _all_checked = false; + } else { + $.each(_objs, function (i, _obj) { + if (!$(_obj).is(':checked')) { + _all_checked = false; + return false; + } + }); + } + + if (_all_checked) { + dlg.dom.btn_sel_all.prop('checked', true); + } else { + dlg.dom.btn_sel_all.prop('checked', false); + } + if (cb_stack) + cb_stack.exec(); + }; + + dlg.get_selected_items = function () { + var items = []; + var _objs = $('#' + dlg.dom_id + ' tbody tr td input[data-check-box]'); + $.each(_objs, function (i, _obj) { + if ($(_obj).is(':checked')) { + var _row_data = $app.table_sel_user_group.get_row(_obj); + items.push({id: _row_data.id, name: _row_data.name}); + } + }); + + return items; + }; + + dlg.on_add = function () { + var items = dlg.get_selected_items(); + + $tp.ajax_post_json('/ops/policy/add-members', { + policy_id: $app.options.policy_id, + type: TP_POLICY_OPERATOR, // 授权操作者 + rtype: TP_GROUP_USER, // 用户组 + members: items + }, + function (ret) { + if (ret.code === TPE_OK) { + $tp.notify_success('授权操作者添加成功!'); + CALLBACK_STACK.create() + .add($app.sync_height) + .add(dlg.check_all_selected) + .add($app.table_operator.load_data) + .add($app.table_sel_user_group.load_data) + .exec(); + } else { + $tp.notify_error('授权操作者添加失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,授权操作者添加失败!'); + } + ); + + }; + + return dlg; +}; + +//------------------------------- +// 选择账号对话框 +//------------------------------- + +$app.on_table_sel_acc_cell_created = function (tbl, row_id, col_key, cell_obj) { + if (col_key === 'chkbox') { + cell_obj.find('[data-check-box]').click(function () { + $app.dlg_sel_acc.check_all_selected(); + }); + } +}; + +$app.on_table_sel_acc_render_created = function (render) { + + $app._add_common_render(render); + + render.acc_info = function (row_id, fields) { + var ret = []; + + ret.push('' + fields.username + '@' + fields.host_ip + ''); + if (fields.router_ip.length > 0) + ret.push('由 ' + fields.router_ip + ':' + fields.router_port + ' 路由'); + + return ret.join(''); + }; + + render.protocol = function (row_id, fields) { + switch (fields.protocol_type) { + case TP_PROTOCOL_TYPE_RDP: + return ' RDP'; + case TP_PROTOCOL_TYPE_SSH: + return ' SSH'; + case TP_PROTOCOL_TYPE_TELNET: + return ' TELNET'; + default: + return ' 未设置'; + } + }; + + render.auth_type = function (row_id, fields) { + switch (fields.auth_type) { + case TP_AUTH_TYPE_NONE: + return ''; + case TP_AUTH_TYPE_PASSWORD: + return '密码'; + case TP_AUTH_TYPE_PRIVATE_KEY: + return '私钥'; + default: + return '未设置'; + } + }; +}; + +$app.on_table_sel_acc_header_created = function (header) { + $('#' + header._table_ctrl.dom_id + ' a[data-reset-filter]').click(function () { + CALLBACK_STACK.create() + .add(header._table_ctrl.load_data) + .add(header._table_ctrl.reset_filters) + .exec(); + }); + + // 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行) + header._table_ctrl.get_filter_ctrl('search').on_created(); +}; + +$app.create_dlg_sel_acc = function () { + var dlg = {}; + dlg.dom_id = 'dlg-sel-acc'; + dlg.field_id = -1; + dlg.field_name = ''; + dlg.field_desc = ''; + + dlg.dom = { + dialog: $('#' + dlg.dom_id), + btn_sel_all: $('#' + dlg.dom_id + ' input[data-action="sel-all"]'), + btn_add: $('#' + dlg.dom_id + ' button[data-action="use-selected"]') + }; + + dlg.init = function (cb_stack) { + dlg.dom.btn_add.click(dlg.on_add); + dlg.dom.btn_sel_all.click(dlg.on_sel_all); + cb_stack.exec(); + }; + + dlg.show = function () { + // dlg.init_fields(); + $app.table_sel_acc.load_data(); + dlg.dom.dialog.modal(); + }; + + dlg.on_sel_all = function () { + var _objects = $('#' + $app.table_sel_acc.dom_id + ' tbody').find('[data-check-box]'); + if ($(this).is(':checked')) { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', true); + }); + } else { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', false); + }); + } + }; + + dlg.check_all_selected = function (cb_stack) { + var _all_checked = true; + var _objs = $('#' + dlg.dom_id + ' tbody').find('[data-check-box]'); + if (_objs.length === 0) { + _all_checked = false; + } else { + $.each(_objs, function (i, _obj) { + if (!$(_obj).is(':checked')) { + _all_checked = false; + return false; + } + }); + } + + if (_all_checked) { + dlg.dom.btn_sel_all.prop('checked', true); + } else { + dlg.dom.btn_sel_all.prop('checked', false); + } + if (cb_stack) + cb_stack.exec(); + }; + + dlg.get_selected_items = function () { + var items = []; + var _objs = $('#' + dlg.dom_id + ' tbody tr td input[data-check-box]'); + $.each(_objs, function (i, _obj) { + if ($(_obj).is(':checked')) { + var _row_data = $app.table_sel_acc.get_row(_obj); + + var name = _row_data.username + '@' + _row_data.host_ip; + if (_row_data.router_ip.length > 0) + name += ' (由 ' + _row_data.router_ip + ':' + _row_data.router_port + ' 路由)'; + + + items.push({id: _row_data.id, name: name}); + } + }); + + return items; + }; + + dlg.on_add = function () { + var items = dlg.get_selected_items(); + + $tp.ajax_post_json('/ops/policy/add-members', { + policy_id: $app.options.policy_id, + type: TP_POLICY_ASSET, // 被授权资产 + rtype: TP_ACCOUNT, // 账号 + members: items + }, + function (ret) { + if (ret.code === TPE_OK) { + $tp.notify_success('被授权资产添加成功!'); + CALLBACK_STACK.create() + .add($app.sync_height) + .add(dlg.check_all_selected) + .add($app.table_asset.load_data) + .add($app.table_sel_acc.load_data) + .exec(); + } else { + $tp.notify_error('被授权资产添加失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,被授权资产添加失败!'); + } + ); + + }; + + return dlg; +}; + +//------------------------------- +// 选择账号组对话框 +//------------------------------- + +$app.on_table_sel_acc_group_cell_created = function (tbl, row_id, col_key, cell_obj) { + if (col_key === 'chkbox') { + cell_obj.find('[data-check-box]').click(function () { + // $app.check_users_all_selected(); + $app.dlg_sel_acc_group.check_all_selected(); + }); + } +}; + +$app.on_table_sel_acc_group_render_created = function (render) { + + $app._add_common_render(render); + + render.name = function (row_id, fields) { + return '' + fields.name + '' + fields.desc + ''; + }; +}; + +$app.on_table_sel_acc_group_header_created = function (header) { + $('#' + header._table_ctrl.dom_id + ' a[data-reset-filter]').click(function () { + CALLBACK_STACK.create() + .add(header._table_ctrl.load_data) + .add(header._table_ctrl.reset_filters) + .exec(); + }); + + // 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行) + header._table_ctrl.get_filter_ctrl('search').on_created(); +}; + +$app.create_dlg_sel_acc_group = function () { + var dlg = {}; + dlg.dom_id = 'dlg-sel-acc-group'; + dlg.field_id = -1; // 用户id + dlg.field_name = ''; + dlg.field_desc = ''; + + dlg.dom = { + dialog: $('#' + dlg.dom_id), + btn_sel_all: $('#' + dlg.dom_id + ' input[data-action="sel-all"]'), + btn_add: $('#' + dlg.dom_id + ' button[data-action="use-selected"]') + }; + + dlg.init = function (cb_stack) { + dlg.dom.btn_add.click(dlg.on_add); + dlg.dom.btn_sel_all.click(dlg.on_sel_all); + cb_stack.exec(); + }; + + dlg.show = function () { + // dlg.init_fields(); + $app.table_sel_acc_group.load_data(); + dlg.dom.dialog.modal(); + }; + + dlg.on_sel_all = function () { + var _objects = $('#' + $app.table_sel_acc_group.dom_id + ' tbody').find('[data-check-box]'); + if ($(this).is(':checked')) { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', true); + }); + } else { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', false); + }); + } + }; + + dlg.check_all_selected = function (cb_stack) { + var _all_checked = true; + var _objs = $('#' + dlg.dom_id + ' tbody').find('[data-check-box]'); + if (_objs.length === 0) { + _all_checked = false; + } else { + $.each(_objs, function (i, _obj) { + if (!$(_obj).is(':checked')) { + _all_checked = false; + return false; + } + }); + } + + if (_all_checked) { + dlg.dom.btn_sel_all.prop('checked', true); + } else { + dlg.dom.btn_sel_all.prop('checked', false); + } + if (cb_stack) + cb_stack.exec(); + }; + + dlg.get_selected_items = function () { + var items = []; + var _objs = $('#' + dlg.dom_id + ' tbody tr td input[data-check-box]'); + $.each(_objs, function (i, _obj) { + if ($(_obj).is(':checked')) { + var _row_data = $app.table_sel_acc_group.get_row(_obj); + items.push({id: _row_data.id, name: _row_data.name}); + } + }); + + return items; + }; + + dlg.on_add = function () { + var items = dlg.get_selected_items(); + + $tp.ajax_post_json('/ops/policy/add-members', { + policy_id: $app.options.policy_id, + type: TP_POLICY_ASSET, // 授权操作者 + rtype: TP_GROUP_ACCOUNT, // 账号组 + members: items + }, + function (ret) { + if (ret.code === TPE_OK) { + $tp.notify_success('被授权资产添加成功!'); + CALLBACK_STACK.create() + .add($app.sync_height) + .add(dlg.check_all_selected) + .add($app.table_asset.load_data) + .add($app.table_sel_acc_group.load_data) + .exec(); + } else { + $tp.notify_error('被授权资产添加失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,被授权资产添加失败!'); + } + ); + + }; + + return dlg; +}; + +//------------------------------- +// 选择主机对话框 +//------------------------------- + +$app.on_table_sel_host_cell_created = function (tbl, row_id, col_key, cell_obj) { + if (col_key === 'chkbox') { + cell_obj.find('[data-check-box]').click(function () { + $app.dlg_sel_host.check_all_selected(); + }); + } +}; + +$app.on_table_sel_host_render_created = function (render) { + + $app._add_common_render(render); + + render.host_info = function (row_id, fields) { + var ret = []; + + var name = fields.name; + if (name.length === 0) + name = fields.ip; + var ip = fields.ip; + ret.push('' + name + '
    [' + ip + ']'); + if (fields.router_ip.length > 0) + ret.push(' 由 ' + fields.router_ip + ':' + fields.router_port + ' 路由'); + ret.push('
    '); + + return ret.join(''); + }; + +}; + +$app.on_table_sel_host_header_created = function (header) { + $('#' + header._table_ctrl.dom_id + ' a[data-reset-filter]').click(function () { + CALLBACK_STACK.create() + .add(header._table_ctrl.load_data) + .add(header._table_ctrl.reset_filters) + .exec(); + }); + + // 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行) + header._table_ctrl.get_filter_ctrl('search').on_created(); +}; + +$app.create_dlg_sel_host = function () { + var dlg = {}; + dlg.dom_id = 'dlg-sel-host'; + dlg.field_id = -1; + dlg.field_name = ''; + dlg.field_desc = ''; + + dlg.dom = { + dialog: $('#' + dlg.dom_id), + btn_sel_all: $('#' + dlg.dom_id + ' input[data-action="sel-all"]'), + btn_add: $('#' + dlg.dom_id + ' button[data-action="use-selected"]') + }; + + dlg.init = function (cb_stack) { + dlg.dom.btn_add.click(dlg.on_add); + dlg.dom.btn_sel_all.click(dlg.on_sel_all); + cb_stack.exec(); + }; + + dlg.show = function () { + $app.table_sel_host.load_data(); + dlg.dom.dialog.modal(); + }; + + dlg.on_sel_all = function () { + var _objects = $('#' + $app.table_sel_host.dom_id + ' tbody').find('[data-check-box]'); + if ($(this).is(':checked')) { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', true); + }); + } else { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', false); + }); + } + }; + + dlg.check_all_selected = function (cb_stack) { + var _all_checked = true; + var _objs = $('#' + dlg.dom_id + ' tbody').find('[data-check-box]'); + if (_objs.length === 0) { + _all_checked = false; + } else { + $.each(_objs, function (i, _obj) { + if (!$(_obj).is(':checked')) { + _all_checked = false; + return false; + } + }); + } + + if (_all_checked) { + dlg.dom.btn_sel_all.prop('checked', true); + } else { + dlg.dom.btn_sel_all.prop('checked', false); + } + if (cb_stack) + cb_stack.exec(); + }; + + dlg.get_selected_items = function () { + var items = []; + var _objs = $('#' + dlg.dom_id + ' tbody tr td input[data-check-box]'); + $.each(_objs, function (i, _obj) { + if ($(_obj).is(':checked')) { + var _row_data = $app.table_sel_host.get_row(_obj); + + var name = ''; + if (_row_data.name.length > 0) + name = _row_data.name + ' [' + _row_data.ip + ']'; + else + name = _row_data.ip; + + if (_row_data.router_ip.length > 0) + name += ' (由 ' + _row_data.router_ip + ':' + _row_data.router_port + ' 路由)'; + + + items.push({id: _row_data.id, name: name}); + } + }); + + return items; + }; + + dlg.on_add = function () { + var items = dlg.get_selected_items(); + + $tp.ajax_post_json('/ops/policy/add-members', { + policy_id: $app.options.policy_id, + type: TP_POLICY_ASSET, // 被授权资产 + rtype: TP_HOST, // 主机 + members: items + }, + function (ret) { + if (ret.code === TPE_OK) { + $tp.notify_success('被授权资产添加成功!'); + CALLBACK_STACK.create() + .add($app.sync_height) + .add(dlg.check_all_selected) + .add($app.table_asset.load_data) + .add($app.table_sel_host.load_data) + .exec(); + } else { + $tp.notify_error('被授权资产添加失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,被授权资产添加失败!'); + } + ); + + }; + + return dlg; +}; + +//------------------------------- +// 选择主机组对话框 +//------------------------------- + +$app.on_table_sel_host_group_cell_created = function (tbl, row_id, col_key, cell_obj) { + if (col_key === 'chkbox') { + cell_obj.find('[data-check-box]').click(function () { + // $app.check_users_all_selected(); + $app.dlg_sel_host_group.check_all_selected(); + }); + } +}; + +$app.on_table_sel_host_group_render_created = function (render) { + + $app._add_common_render(render); + + render.name = function (row_id, fields) { + return '' + fields.name + '' + fields.desc + ''; + }; +}; + +$app.on_table_sel_host_group_header_created = function (header) { + $('#' + header._table_ctrl.dom_id + ' a[data-reset-filter]').click(function () { + CALLBACK_STACK.create() + .add(header._table_ctrl.load_data) + .add(header._table_ctrl.reset_filters) + .exec(); + }); + + // 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行) + header._table_ctrl.get_filter_ctrl('search').on_created(); +}; + +$app.create_dlg_sel_host_group = function () { + var dlg = {}; + dlg.dom_id = 'dlg-sel-host-group'; + dlg.field_id = -1; + dlg.field_name = ''; + dlg.field_desc = ''; + + dlg.dom = { + dialog: $('#' + dlg.dom_id), + btn_sel_all: $('#' + dlg.dom_id + ' input[data-action="sel-all"]'), + btn_add: $('#' + dlg.dom_id + ' button[data-action="use-selected"]') + }; + + dlg.init = function (cb_stack) { + dlg.dom.btn_add.click(dlg.on_add); + dlg.dom.btn_sel_all.click(dlg.on_sel_all); + cb_stack.exec(); + }; + + dlg.show = function () { + $app.table_sel_host_group.load_data(); + dlg.dom.dialog.modal(); + }; + + dlg.on_sel_all = function () { + var _objects = $('#' + $app.table_sel_host_group.dom_id + ' tbody').find('[data-check-box]'); + if ($(this).is(':checked')) { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', true); + }); + } else { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', false); + }); + } + }; + + dlg.check_all_selected = function (cb_stack) { + var _all_checked = true; + var _objs = $('#' + dlg.dom_id + ' tbody').find('[data-check-box]'); + if (_objs.length === 0) { + _all_checked = false; + } else { + $.each(_objs, function (i, _obj) { + if (!$(_obj).is(':checked')) { + _all_checked = false; + return false; + } + }); + } + + if (_all_checked) { + dlg.dom.btn_sel_all.prop('checked', true); + } else { + dlg.dom.btn_sel_all.prop('checked', false); + } + + if (cb_stack) + cb_stack.exec(); + }; + + dlg.get_selected_items = function () { + var items = []; + var _objs = $('#' + dlg.dom_id + ' tbody tr td input[data-check-box]'); + $.each(_objs, function (i, _obj) { + if ($(_obj).is(':checked')) { + var _row_data = $app.table_sel_host_group.get_row(_obj); + items.push({id: _row_data.id, name: _row_data.name}); + } + }); + + return items; + }; + + dlg.on_add = function () { + var items = dlg.get_selected_items(); + + $tp.ajax_post_json('/ops/policy/add-members', { + policy_id: $app.options.policy_id, + type: TP_POLICY_ASSET, // 授权操作者 + rtype: TP_GROUP_HOST, // 主机组 + members: items + }, + function (ret) { + if (ret.code === TPE_OK) { + $tp.notify_success('被授权资产添加成功!'); + CALLBACK_STACK.create() + .add($app.sync_height) + .add(dlg.check_all_selected) + .add($app.table_asset.load_data) + .add($app.table_sel_host_group.load_data) + .exec(); + } else { + $tp.notify_error('被授权资产添加失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,被授权资产添加失败!'); + } + ); + + }; + + return dlg; +}; + +$app.init_flags = function() { + console.log($app.options); + + if(($app.options.policy_flags.record & TP_FLAG_RECORD_REPLAY) !== 0) + $app.dom.flag_record_allow_replay.addClass('tp-selected'); + + if(($app.options.policy_flags.rdp & TP_FLAG_RDP_CLIPBOARD) !== 0) + $app.dom.flag_rdp_allow_clipboard.addClass('tp-selected'); + if(($app.options.policy_flags.rdp & TP_FLAG_RDP_DISK) !== 0) + $app.dom.flag_rdp_allow_disk.addClass('tp-selected'); + if(($app.options.policy_flags.rdp & TP_FLAG_RDP_CONSOLE) !== 0) + $app.dom.flag_rdp_allow_console.addClass('tp-selected'); + + if(($app.options.policy_flags.ssh & TP_FLAG_SSH_SHELL) !== 0) + $app.dom.flag_ssh_allow_shell.addClass('tp-selected'); + if(($app.options.policy_flags.ssh & TP_FLAG_SSH_SFTP) !== 0) + $app.dom.flag_ssh_allow_sftp.addClass('tp-selected'); +}; + +$app.on_click_flag = function (e) { + var obj = $(e.target); + if (obj.hasClass('tp-selected')) { + obj.removeClass('tp-selected'); + } else { + obj.addClass('tp-selected'); + } +}; + +$app.on_save_flags = function () { + var flag_record = 0; + flag_record |= TP_FLAG_RECORD_REAL_TIME; // not implement, set this flag for default. + if ($app.dom.flag_record_allow_replay.hasClass('tp-selected')) + flag_record |= TP_FLAG_RECORD_REPLAY; + + var flag_rdp = 0; + flag_rdp |= TP_FLAG_RDP_DESKTOP; // before support remote-app, remote-desktop is the only way to access remote host. + if ($app.dom.flag_rdp_allow_clipboard.hasClass('tp-selected')) + flag_rdp |= TP_FLAG_RDP_CLIPBOARD; + if ($app.dom.flag_rdp_allow_disk.hasClass('tp-selected')) + flag_rdp |= TP_FLAG_RDP_DISK; + if ($app.dom.flag_rdp_allow_console.hasClass('tp-selected')) + flag_rdp |= TP_FLAG_RDP_CONSOLE; + + var flag_ssh = 0; + if ($app.dom.flag_ssh_allow_shell.hasClass('tp-selected')) + flag_ssh |= TP_FLAG_SSH_SHELL; + if ($app.dom.flag_ssh_allow_sftp.hasClass('tp-selected')) + flag_ssh |= TP_FLAG_SSH_SFTP; + + if (flag_ssh === 0) { + $tp.notify_error('SSH选项都未选择,无法进行SSH连接哦!'); + return; + } + + + $tp.ajax_post_json('/ops/policy/set-flags', { + policy_id: $app.options.policy_id, + flag_record: flag_record, + flag_rdp: flag_rdp, + flag_ssh: flag_ssh + }, + function (ret) { + if (ret.code === TPE_OK) { + $tp.notify_success('选项设置成功!'); + } else { + $tp.notify_error('选项设置失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,选项设置失败!'); + } + ); +}; diff --git a/server/www/teleport/static/js/ops/auz-list.js b/server/www/teleport/static/js/ops/auz-list.js new file mode 100644 index 0000000..db745b8 --- /dev/null +++ b/server/www/teleport/static/js/ops/auz-list.js @@ -0,0 +1,633 @@ +"use strict"; + +$app.on_init = function (cb_stack) { + $app.dom = { + btn_refresh_policy: $('#btn-refresh-policy'), + btn_create_policy: $('#btn-create-policy'), + select_all_policy: $('#table-auz-select-all'), + + btn_lock: $('#btn-lock'), + btn_unlock: $('#btn-unlock'), + btn_remove: $('#btn-remove') + }; + + $app.drag = { + dragging: false, + drag_row_id: '0', + hover_row_id: '0', + drag_index: -1, + hover_index: -1, + insert_before: true, // 是插入到拖放目标之前还是之后 + items: [], + + dom: {} + }; + + $('#btn-test').click(function () { + $app.on_test(); + }); + + // $app.dragging = false; + // $app.drag_row_id = 0; + // $app.drag_to_insert = []; + $(document).mousemove(function (e) { + $app.on_dragging(e); + }).mouseup(function (e) { + $app.on_drag_end(e); + }); + + cb_stack + .add($app.create_controls) + .add($app.load_role_list); + + cb_stack.exec(); +}; + +$app.on_test = function () { + $tp.ajax_post_json('/ops/build-auz-map', {}, + function (ret) { + if (ret.code === TPE_OK) { + $tp.notify_success('重建授权映射成功!'); + } else { + $tp.notify_error('重建授权映射成功失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,重建授权映射成功失败!'); + } + ); +}; + +//=================================== +// 创建页面控件对象 +//=================================== +$app.create_controls = function (cb_stack) { + + //------------------------------- + // 资产列表表格 + //------------------------------- + var table_policy_options = { + dom_id: 'table-policy', + data_source: { + type: 'ajax-post', + url: '/ops/get-policies' + }, + column_default: {sort: false, align: 'left'}, + columns: [ + { + //title: '', + title: '', + key: 'chkbox', + sort: false, + width: 36, + align: 'center', + render: 'make_check_box', + fields: {id: 'id'} + }, + { + title: '顺序', + key: 'rank', + // sort: true, + align: 'center', + width: 60, + // header_render: 'filter_search', + render: 'rank', + fields: {rank: 'rank'} + }, + { + title: '授权策略', + key: 'name', + // sort: true, + // header_render: 'filter_search', + render: 'policy_info', + fields: {id: 'id', name: 'name', desc: 'desc'} + }, + { + title: "状态", + key: "state", + // sort: true, + width: 90, + align: 'center', + //header_render: 'filter_state', + render: 'state', + fields: {state: 'state'} + }, + { + title: '', + key: 'action', + // sort: false, + align: 'center', + width: 80, + render: 'make_action_btn', + fields: {id: 'id', state: 'state'} + } + ], + + // 重载回调函数 + on_header_created: $app.on_table_policy_header_created, + on_render_created: $app.on_table_policy_render_created, + on_cell_created: $app.on_table_policy_cell_created + }; + + $app.table_policy = $tp.create_table(table_policy_options); + cb_stack + .add($app.table_policy.load_data) + .add($app.table_policy.init); + + //------------------------------- + // 用户列表相关过滤器 + //------------------------------- + $tp.create_table_header_filter_search($app.table_policy, { + name: 'search', + place_holder: '搜索:授权策略名称/描述/等等...' + }); + $tp.create_table_header_filter_state($app.table_policy, 'state', $app.obj_states, [TP_STATE_LOCKED]); + // 从cookie中读取用户分页限制的选择 + $tp.create_table_paging($app.table_policy, 'table-auz-paging', + { + per_page: Cookies.get($app.page_id('ops_auz') + '_per_page'), + on_per_page_changed: function (per_page) { + Cookies.set($app.page_id('ops_auz') + '_per_page', per_page, {expires: 365}); + } + }); + $tp.create_table_pagination($app.table_policy, 'table-auz-pagination'); + + //------------------------------- + // 对话框 + //------------------------------- + $app.dlg_edit_policy = $app.create_dlg_edit_policy(); + cb_stack.add($app.dlg_edit_policy.init); + + //------------------------------- + // 页面控件事件绑定 + //------------------------------- + $app.dom.btn_create_policy.click(function () { + // $app.dom.dlg_edit_user.modal(); + $app.dlg_edit_policy.show_add(); + }); + $app.dom.btn_refresh_policy.click(function () { + $app.table_policy.load_data(); + }); + $app.dom.select_all_policy.click(function () { + var _objects = $('#' + $app.table_policy.dom_id + ' tbody').find('[data-check-box]'); + if ($(this).is(':checked')) { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', true); + }); + } else { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', false); + }); + } + }); + $app.dom.btn_lock.click($app.on_btn_lock_click); + $app.dom.btn_unlock.click($app.on_btn_unlock_click); + $app.dom.btn_remove.click($app.on_btn_remove_click); + + cb_stack.exec(); +}; + +$app.on_table_policy_cell_created = function (tbl, row_id, col_key, cell_obj) { + if (col_key === 'chkbox') { + cell_obj.find('[data-check-box]').click(function () { + $app.check_host_all_selected(); + }); + } else if (col_key === 'rank') { + cell_obj.find('.reorder').mousedown(function (e) { + $app.on_drag_begin(e, row_id); + }); + } else if (col_key === 'action') { + // 绑定系统选择框事件 + cell_obj.find('[data-action]').click(function () { + var action = $(this).attr('data-action'); + if (action === 'edit') { + $app.dlg_edit_policy.show_edit(row_id); + // } else if (action === 'account') { + // $app.dlg_accounts.show(row_id); + } + }); + } else if (col_key === 'name') { + cell_obj.find('[data-action="edit-policy"]').click(function () { + $app.dlg_accounts.show(row_id); + }); + } +}; + +$app.on_drag_begin = function (e, row_id) { + $(document).bind('selectstart', function () { + return false; + }); + + $app.drag = { + dragging: false, + drag_row_id: '0', + hover_row_id: '0', + drag_index: -1, + hover_index: -1, + items: [], + + dom: {} + }; + + $app.drag.drag_row_id = row_id; + + var body = $('body'); + // create a drag-div + var policy = $app.table_policy.get_row(row_id); + + body.after($('')); + + $app.drag.dom.move_box = $('#tp-drag-move-box'); + $app.drag.move_box_height = $app.drag.dom.move_box.height(); + $app.drag.dom.move_box.css({left: e.pageX - 5, top: e.pageY - $app.drag.move_box_height / 2}).show(); + + // create a location-pointer + body.after($('')); + $app.drag.dom.loc_insert = $('#tp-drag-insert'); + + var tr_item = $('tr[data-row-id]'); + for (var i = 0; i < tr_item.length; ++i) { + var item = $(tr_item[i]); + var _row_id = item.attr('data-row-id'); + if (_row_id === row_id) + $app.drag.drag_index = i; + $app.drag.items.push([item.offset().top, item.offset().top + item.height(), _row_id]); + } + + $app.drag.dragging = true; +}; + +$app.on_dragging = function (e) { + if (!$app.drag.dragging) + return; + + $app.drag.dom.move_box.css({left: e.pageX - 5, top: e.pageY - $app.drag.move_box_height / 2}); + + // check which we are moving on. + $app.drag.hover_row_id = null; + for (var i = 0; i < $app.drag.items.length; ++i) { + if (e.pageY < $app.drag.items[i][0]) + continue; + if (e.pageY > $app.drag.items[i][1]) + continue; + if ($app.drag_row_id === $app.drag.items[i][2]) + continue; + + if ($app.drag.drag_row_id === $app.drag.items[i][2]) + break; + + var idx = -1; + if (e.pageY <= $app.drag.items[i][0] + ($app.drag.items[i][1] - $app.drag.items[i][0]) / 2) { + $app.drag.insert_before = true; + idx = i - 1; + } + else { + $app.drag.insert_before = false; + idx = i + 1; + } + + if (idx === $app.drag.drag_index) + break; + + $app.drag.hover_row_id = $app.drag.items[i][2]; + + break; + } + + if ($app.drag.hover_row_id === null) { + $app.drag.dom.loc_insert.hide(); + return; + } else { + $app.drag.dom.loc_insert.show(); + } + + var hover_obj = $('tr[data-row-id="' + $app.drag.hover_row_id + '"]'); + + + var x = hover_obj.offset().left - $app.drag.dom.loc_insert.width(); + var y = 0; + if ($app.drag.insert_before) + y = hover_obj.offset().top - $app.drag.dom.loc_insert.height() / 2; + else + y = hover_obj.offset().top + hover_obj.height() - $app.drag.dom.loc_insert.height() / 2; + $app.drag.dom.loc_insert.css({left: x, top: y}); +}; + +$app.on_drag_end = function (e) { + if (!$app.drag.dragging) + return; + + $app.drag.dom.move_box.remove(); + $app.drag.dom.loc_insert.remove(); + $(document).unbind('selectstart'); + $app.drag.dragging = false; + + if ($app.drag.hover_row_id === null) + return; + + var policy_drag = $app.table_policy.get_row($app.drag.drag_row_id); + var policy_target = $app.table_policy.get_row($app.drag.hover_row_id); + + var direct = -1; // 移动方向,-1=向前移动,1=向后移动 + var start_rank = 0, end_rank = 0; // 导致rank变化的范围: start_rank <= rank <= end_rank + var new_rank = 0;//policy_target.rank; // 被移动的条目的新rank + + if (policy_drag.rank > policy_target.rank) { + // 这是向前移动 + direct = 1; + end_rank = policy_drag.rank - 1; + if ($app.drag.insert_before) { + new_rank = policy_target.rank; + start_rank = policy_target.rank; + } + else { + new_rank = policy_target.rank + 1; + start_rank = policy_target.rank + 1; + } + } else { + // 这是向后移动 + direct = -1; + start_rank = policy_drag.rank + 1; + if ($app.drag.insert_before) { + new_rank = policy_target.rank - 1; + end_rank = policy_target.rank - 1; + } + else { + new_rank = policy_target.rank; + end_rank = policy_target.rank; + } + } + + $tp.ajax_post_json('/ops/policy/rank-reorder', { + pid: policy_drag.id, + new_rank: new_rank, + start_rank: start_rank, + end_rank: end_rank, + direct: direct + }, + function (ret) { + if (ret.code === TPE_OK) { + $tp.notify_success('授权策略顺序调整成功!'); + $app.table_policy.load_data(); + } else { + $tp.notify_error('授权策略顺序调整失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,授权策略顺序调整失败!'); + } + ); +}; + +$app.check_host_all_selected = function (cb_stack) { + var _all_checked = true; + var _objs = $('#' + $app.table_policy.dom_id + ' tbody').find('[data-check-box]'); + if (_objs.length === 0) { + _all_checked = false; + } else { + $.each(_objs, function (i, _obj) { + if (!$(_obj).is(':checked')) { + _all_checked = false; + return false; + } + }); + } + + if (_all_checked) { + $app.dom.select_all_policy.prop('checked', true); + } else { + $app.dom.select_all_policy.prop('checked', false); + } + + if (cb_stack) + cb_stack.exec(); +}; + +$app.on_table_policy_render_created = function (render) { + + // render.filter_search = function (header, title, col) { + // var _ret = ['
    ']; + // _ret.push('
    '); + // _ret.push('
    ' + title + '
    '); + // + // // 表格内嵌过滤器的DOM实体在这时生成 + // var filter_ctrl = header._table_ctrl.get_filter_ctrl('search'); + // _ret.push(filter_ctrl.render()); + // + // _ret.push('
    '); + // + // return _ret.join(''); + // }; + // + // render.filter_state = function (header, title, col) { + // var _ret = ['
    ']; + // _ret.push('
    '); + // _ret.push('
    ' + title + '
    '); + // + // // 表格内嵌过滤器的DOM实体在这时生成 + // var filter_ctrl = header._table_ctrl.get_filter_ctrl('state'); + // _ret.push(filter_ctrl.render()); + // + // _ret.push('
    '); + // + // return _ret.join(''); + // }; + + render.rank = function (row_id, fields) { + return ' ' + fields.rank + '' + }; + + render.make_check_box = function (row_id, fields) { + return ''; + }; + + render.policy_info = function (row_id, fields) { + return '' + fields.name + '' + fields.desc + '' + }; + + render.state = function (row_id, fields) { + var _style, _state; + + for (var i = 0; i < $app.obj_states.length; ++i) { + if ($app.obj_states[i].id === fields.state) { + _style = $app.obj_states[i].style; + _state = $app.obj_states[i].name; + break; + } + } + if (i === $app.obj_states.length) { + _style = 'info'; + _state = ' 未知'; + } + + return '' + _state + '' + }; + + render.make_action_btn = function (row_id, fields) { + var ret = []; + ret.push('
    '); + ret.push(' 编辑'); + // ret.push(' 禁用'); + // ret.push(' 删除'); + ret.push('
    '); + return ret.join(''); + }; +}; + +$app.on_table_policy_header_created = function (header) { + // $('#' + header._table_ctrl.dom_id + ' a[data-reset-filter]').click(function () { + // CALLBACK_STACK.create() + // .add(header._table_ctrl.load_data) + // .add(header._table_ctrl.reset_filters) + // .exec(); + // }); + + // 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行) + // header._table_ctrl.get_filter_ctrl('search').on_created(); + // header._table_ctrl.get_filter_ctrl('state').on_created(); +}; + +$app.get_selected_policy = function (tbl) { + var users = []; + var _objs = $('#' + $app.table_policy.dom_id + ' tbody tr td input[data-check-box]'); + $.each(_objs, function (i, _obj) { + if ($(_obj).is(':checked')) { + var _row_data = tbl.get_row(_obj); + // _all_checked = false; + users.push(_row_data.id); + } + }); + return users; +}; + +$app.on_btn_lock_click = function () { +}; + +$app.on_btn_unlock_click = function () { +}; + +$app.on_btn_remove_click = function () { + var items = $app.get_selected_policy($app.table_policy); + if (items.length === 0) { + $tp.notify_error('请选择要删除的主机!'); + return; + } + + var _fn_sure = function (cb_stack, cb_args) { + $tp.ajax_post_json('/asset/remove-hosts', {hosts: items}, + function (ret) { + if (ret.code === TPE_OK) { + cb_stack.add($app.check_host_all_selected); + cb_stack.add($app.table_policy.load_data); + $tp.notify_success('删除主机操作成功!'); + } else { + $tp.notify_error('删除主机操作失败:' + tp_error_msg(ret.code, ret.message)); + } + + cb_stack.exec(); + }, + function () { + $tp.notify_error('网络故障,删除主机操作失败!'); + cb_stack.exec(); + } + ); + }; + + var cb_stack = CALLBACK_STACK.create(); + $tp.dlg_confirm(cb_stack, { + msg: '

    注意:删除操作不可恢复!!

    删除主机将同时删除与之相关的账号,并将主机和账号从所在分组中移除,同时删除所有相关授权!

    如果您希望临时禁止登录指定主机,可将其“禁用”!

    您确定要移除选定的' + items.length + '个主机吗?

    ', + fn_yes: _fn_sure + }); + +}; + +$app.create_dlg_edit_policy = function () { + var dlg = {}; + dlg.dom_id = 'dlg-edit-policy'; + dlg.field_id = -1; + dlg.field_name = ''; + dlg.field_desc = ''; + + dlg.dom = { + dialog: $('#' + dlg.dom_id), + dlg_title: $('#' + dlg.dom_id + ' [data-field="dlg-title"]'), + edit_name: $('#edit-name'), + edit_desc: $('#edit-desc'), + btn_save: $('#btn-edit-policy-save') + }; + + dlg.init = function (cb_stack) { + dlg.dom.btn_save.click(dlg.on_save); + cb_stack.exec(); + }; + + dlg.init_fields = function (policy) { + dlg.field_id = -1; + dlg.field_os_type = -1; + + if (_.isUndefined(policy)) { + dlg.dom.dlg_title.html('创建授权策略'); + + dlg.dom.edit_name.val(''); + dlg.dom.edit_desc.val(''); + } else { + dlg.field_id = policy.id; + dlg.dom.dlg_title.html('编辑授权策略:'); + dlg.dom.edit_name.val(policy.name); + dlg.dom.edit_desc.val(policy.desc); + } + }; + + dlg.show_add = function () { + dlg.init_fields(); + dlg.dom.dialog.modal({backdrop: 'static'}); + }; + + dlg.show_edit = function (row_id) { + var host = $app.table_policy.get_row(row_id); + dlg.init_fields(host); + dlg.dom.dialog.modal({backdrop: 'static'}); + }; + + dlg.check_input = function () { + dlg.field_name = dlg.dom.edit_name.val(); + dlg.field_desc = dlg.dom.edit_desc.val(); + + if (dlg.field_name.length === 0) { + dlg.dom.edit_name.focus(); + $tp.notify_error('请设定授权策略名称!'); + return false; + } + + return true; + }; + + dlg.on_save = function () { + if (!dlg.check_input()) + return; + + var action = (dlg.field_id === -1) ? '添加' : '更新'; + + // 如果id为-1表示创建,否则表示更新 + $tp.ajax_post_json('/ops/policy/update', { + id: dlg.field_id, + name: dlg.field_name, + desc: dlg.field_desc + }, + function (ret) { + if (ret.code === TPE_OK) { + $tp.notify_success('授权策略' + action + '成功!'); + $app.table_policy.load_data(); + dlg.dom.dialog.modal('hide'); + } else { + $tp.notify_error('授权策略' + action + '失败:' + tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $tp.notify_error('网络故障,授权策略' + action + '失败!'); + } + ); + }; + + return dlg; +}; diff --git a/server/www/teleport/static/js/ops/remote-list.js b/server/www/teleport/static/js/ops/remote-list.js new file mode 100644 index 0000000..ddc88af --- /dev/null +++ b/server/www/teleport/static/js/ops/remote-list.js @@ -0,0 +1,434 @@ +"use strict"; + +$app.on_init = function (cb_stack) { + $app.dom = { + btn_refresh_host: $('#btn-refresh-host'), + btn_add_user: $('#btn-add-host'), + chkbox_host_select_all: $('#table-host-select-all') + }; + + cb_stack + .add($app.create_controls) + .add($app.load_role_list); + + cb_stack.exec(); +}; + +//=================================== +// 创建页面控件对象 +//=================================== +$app.create_controls = function (cb_stack) { + + //------------------------------- + // 资产列表表格 + //------------------------------- + var table_host_options = { + dom_id: 'table-host', + data_source: { + type: 'ajax-post', + url: '/ops/get-remotes' + }, + column_default: {sort: false, align: 'left'}, + columns: [ + // { + // // title: '', + // title: '', + // key: 'chkbox', + // sort: false, + // width: 36, + // align: 'center', + // render: 'make_check_box', + // fields: {id: 'id'} + // }, + { + title: '主机', + key: 'host', + // sort: true, + // header_render: 'filter_search', + width: 300, + render: 'host_info', + fields: {ip: 'ip', router_ip: 'router_ip', router_port: 'router_port', h_name: 'h_name'} + }, + { + title: '远程账号', + key: 'account', + width: 100, + header_align: 'center', + cell_align: 'right', + render: 'account', + fields: {accs: 'accounts_', h_state: 'h_state', gh_state: 'gh_state'} + }, + { + title: '远程连接', + key: 'action', + render: 'action', + fields: {accs: 'accounts_', h_state: 'h_state', gh_state: 'gh_state'} + } + ], + + // 重载回调函数 + on_header_created: $app.on_table_host_header_created, + on_render_created: $app.on_table_host_render_created, + on_cell_created: $app.on_table_host_cell_created + }; + + $app.table_host = $tp.create_table(table_host_options); + cb_stack + .add($app.table_host.load_data) + .add($app.table_host.init); + + //------------------------------- + // 用户列表相关过滤器 + //------------------------------- + $tp.create_table_header_filter_search($app.table_host, { + name: 'search', + place_holder: '搜索:主机IP/名称/描述/资产编号/等等...' + }); + // $app.table_host_role_filter = $tp.create_table_filter_role($app.table_host, $app.role_list); + // 主机没有“临时锁定”状态,因此要排除掉 + // $tp.create_table_header_filter_state($app.table_host, 'state', $app.obj_states, [TP_STATE_LOCKED]); + + // 从cookie中读取用户分页限制的选择 + $tp.create_table_paging($app.table_host, 'table-host-paging', + { + per_page: Cookies.get($app.page_id('asset_host') + '_per_page'), + on_per_page_changed: function (per_page) { + Cookies.set($app.page_id('asset_host') + '_per_page', per_page, {expires: 365}); + } + }); + $tp.create_table_pagination($app.table_host, 'table-host-pagination'); + + //------------------------------- + // 对话框 + //------------------------------- + + //------------------------------- + // 页面控件事件绑定 + //------------------------------- + $app.dom.btn_refresh_host.click(function () { + $app.table_host.load_data(); + }); + + cb_stack.exec(); +}; + +$app.on_table_host_cell_created = function (tbl, row_id, col_key, cell_obj) { + + // if (col_key === 'chkbox') { + // cell_obj.find('[data-check-box]').click(function () { + // $app.check_host_all_selected(); + // }); + // } else + if (col_key === 'action') { + // 绑定系统选择框事件 + cell_obj.find('[data-action]').click(function () { + var action = $(this).attr('data-action'); + var protocol_sub_type = $(this).attr('data-sub-protocol'); + var uni_id = $(this).attr('data-id'); + + console.log(uni_id, protocol_sub_type); + + if (action === 'rdp') { + $tp.notify_error('尚未实现!'); + } else if (action === 'ssh') { + $app.connect_remote(uni_id, TP_PROTOCOL_TYPE_SSH, protocol_sub_type); + } else if (action === 'telnet') { + $tp.notify_error('尚未实现!'); + } + }); + } +}; + +// $app.check_host_all_selected = function (cb_stack) { +// var _all_checked = true; +// var _objs = $('#' + $app.table_host.dom_id + ' tbody').find('[data-check-box]'); +// if (_objs.length === 0) { +// _all_checked = false; +// } else { +// $.each(_objs, function (i, _obj) { +// if (!$(_obj).is(':checked')) { +// _all_checked = false; +// return false; +// } +// }); +// } +// +// if (_all_checked) { +// $app.dom.chkbox_host_select_all.prop('checked', true); +// } else { +// $app.dom.chkbox_host_select_all.prop('checked', false); +// } +// +// if (cb_stack) +// cb_stack.exec(); +// }; + +$app.on_table_host_render_created = function (render) { + // render.filter_role = function (header, title, col) { + // var _ret = ['
    ']; + // _ret.push('
    '); + // _ret.push('
    ' + title + '
    '); + // + // // 表格内嵌过滤器的DOM实体在这时生成 + // var filter_ctrl = header._table_ctrl.get_filter_ctrl('role'); + // _ret.push(filter_ctrl.render()); + // + // _ret.push('
    '); + // + // return _ret.join(''); + // }; + // render.filter_os = function (header, title, col) { + // return ''; + // }; + + render.filter_state = function (header, title, col) { + var _ret = ['
    ']; + _ret.push('
    '); + _ret.push('
    ' + title + '
    '); + + // 表格内嵌过滤器的DOM实体在这时生成 + var filter_ctrl = header._table_ctrl.get_filter_ctrl('state'); + _ret.push(filter_ctrl.render()); + + _ret.push('
    '); + + return _ret.join(''); + }; + + render.filter_search = function (header, title, col) { + var _ret = ['
    ']; + _ret.push('
    '); + _ret.push('
    ' + title + '
    '); + + // 表格内嵌过滤器的DOM实体在这时生成 + var filter_ctrl = header._table_ctrl.get_filter_ctrl('search'); + _ret.push(filter_ctrl.render()); + + _ret.push('
    '); + + return _ret.join(''); + }; + + // render.make_check_box = function (row_id, fields) { + // return ''; + // }; + // + render.host_info = function (row_id, fields) { + var title, sub_title; + + title = fields.h_name; + sub_title = fields.ip; + + if (title.length === 0) { + title = fields.ip; + } + + // title = fields.a_name + '@' + title; + + var desc = []; + // if (fields.desc.length > 0) { + // desc.push(fields.desc.replace(/\r/ig, "").replace(/\n/ig, "
    ")); + // } + if (fields.router_ip.length > 0) { + sub_title += ',由 ' + fields.router_ip + ':' + fields.router_port + ' 路由'; + } + + var ret = []; + // ret.push('
    ' + title + ''); + // if (desc.length > 0) { + // ret.push(''); + // } + + if (desc.length > 0) { + ret.push('
    ' + title + ''); + } else { + ret.push('
    ' + title + ''); + } + + ret.push('
    ' + sub_title + '
    '); + return ret.join(''); + }; + + render.account = function (row_id, fields) { + var h = []; + for (var i = 0; i < fields.accs.length; ++i) { + var acc = fields.accs[i]; + h.push('
      '); + h.push('
    • ' + acc.a_name + '
    • '); + h.push('
    '); + } + return h.join(''); + }; + render.action = function (row_id, fields) { + console.log(fields); + var h = []; + for (var i = 0; i < fields.accs.length; ++i) { + var acc = fields.accs[i]; + var act_btn = []; + + var disabled = ''; + if (acc.a_state !== TP_STATE_NORMAL) + disabled = '账号已禁用'; + if (disabled.length === 0 && (acc.policy_auth_type === TP_POLICY_AUTH_USER_gACC || acc.policy_auth_type === TP_POLICY_AUTH_gUSER_gACC) && acc.ga_state !== TP_STATE_NORMAL) + disabled = '账号所在组已禁用'; + if (disabled.length === 0 && fields.h_state !== TP_STATE_NORMAL) + disabled = '主机已禁用'; + if (disabled.length === 0 && (acc.policy_auth_type === TP_POLICY_AUTH_USER_gHOST || acc.policy_auth_type === TP_POLICY_AUTH_gUSER_gHOST) && fields.gh_state !== TP_STATE_NORMAL) + disabled = '主机所在组已禁用'; + + if (disabled.length > 0) { + act_btn.push('

    CFjsHbrk#u~Bh<#yO+!V=o2y7w?a16nu#f0C}N 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 KMNUMnLSTZrJ3|}* literal 0 HcmV?d00001 diff --git a/server/www/teleport/static/img/login/side-001.jpg b/server/www/teleport/static/img/login/side-001.jpg deleted file mode 100644 index 91a438e8c1898f6eeda0d2af821b81ba424765a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20701 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', + title: '', + key: 'chkbox', + sort: false, + width: 36, + align: 'center', + render: 'make_check_box', + fields: {id: 'id'} + }, + { + title: "账号", + key: "username", + sort: true, + // width: 240, + header_render: 'filter_search', + render: 'acc_info', + fields: {id: 'id', username: 'username', host_ip: 'host_ip', router_ip: 'router_ip', router_port: 'router_port'} + }, + { + title: "远程连接协议", + key: "protocol_type", + width: 120, + align: 'center', + sort: true, + render: 'protocol', + fields: {protocol_type: 'protocol_type'} + }, + { + title: "认证方式", + key: "auth_type", + width: 80, + align: 'center', + render: 'auth_type', + fields: {auth_type: 'auth_type'} + }, + { + title: "状态", + key: "state", + sort: true, + width: 120, + align: 'center', + render: 'acc_state', + fields: {state: 'state'} + } + ], + + // 重载回调函数 + on_header_created: $app.on_table_members_header_created, + on_render_created: $app.on_table_members_render_created, + on_cell_created: $app.on_table_members_cell_created + }; + + $app.table_members = $tp.create_table(table_members_options); + cb_stack + .add($app.table_members.load_data) + .add($app.table_members.init); + + //------------------------------- + // 成员列表相关过滤器 + //------------------------------- + $tp.create_table_header_filter_search($app.table_members, { + name: 'search', + place_holder: '搜索:账号/主机IP/等等...' + }); + // 从cookie中读取用户分页限制的选择 + $tp.create_table_paging($app.table_members, 'table-members-paging', + { + per_page: Cookies.get($app.page_id('acc_group_info') + '_member_per_page'), + on_per_page_changed: function (per_page) { + Cookies.set($app.page_id('acc_group_info') + '_member_per_page', per_page, {expires: 365}); + } + }); + $tp.create_table_pagination($app.table_members, 'table-members-pagination'); + + //------------------------------- + // 选择成员表格 + //------------------------------- + var table_acc_options = { + dom_id: 'table-acc', + data_source: { + type: 'ajax-post', + url: '/asset/get-accounts', + exclude: {'group_id': $app.options.group_id} // 排除指定成员 + }, + column_default: {sort: false, align: 'left'}, + columns: [ + { + // title: '', + title: '', + key: 'chkbox', + sort: false, + width: 36, + align: 'center', + render: 'make_check_box', + fields: {id: 'id'} + }, + { + title: "账号", + key: "username", + sort: true, + header_render: 'filter_search', + render: 'acc_info', + fields: {id: 'id', username: 'username', host_ip: 'host_ip', router_ip: 'router_ip', router_port: 'router_port'} + }, + { + title: "远程连接协议", + key: "protocol_type", + sort: true, + width: 120, + align: 'center', + render: 'protocol', + fields: {protocol_type: 'protocol_type'} + }, + { + title: "认证方式", + key: "auth_type", + width: 80, + align: 'center', + render: 'auth_type', + fields: {auth_type: 'auth_type'} + }, + { + title: "状态", + key: "state", + sort: true, + width: 80, + align: 'center', + render: 'acc_state', + fields: {state: 'state'} + } + ], + + // 重载回调函数 + on_header_created: $app.on_table_acc_header_created, + on_render_created: $app.on_table_acc_render_created, + on_cell_created: $app.on_table_acc_cell_created + }; + + $app.table_acc = $tp.create_table(table_acc_options); + cb_stack + .add($app.table_acc.load_data) + .add($app.table_acc.init); + + //------------------------------- + // 用户列表相关过滤器 + //------------------------------- + $tp.create_table_header_filter_search($app.table_acc, { + name: 'search', + place_holder: '搜索:账号/主机IP/等等...' + }); + // 从cookie中读取用户分页限制的选择 + $tp.create_table_paging($app.table_acc, 'table-acc-paging', + { + per_page: Cookies.get($app.page_id('acc_group_info') + '_sel_member_per_page'), + on_per_page_changed: function (per_page) { + Cookies.set($app.page_id('acc_group_info') + '_sel_member_per_page', per_page, {expires: 365}); + } + }); + $tp.create_table_pagination($app.table_acc, 'table-acc-pagination'); + + //------------------------------- + // 对话框 + //------------------------------- + $app.dlg_select_members = $app.create_dlg_select_members(); + cb_stack.add($app.dlg_select_members.init); + + //------------------------------- + // 页面控件事件绑定 + //------------------------------- + $app.dom.btn_add_members.click(function () { + $app.dlg_select_members.show(); + }); + $app.dom.btn_refresh_members.click(function () { + $app.table_members.load_data(); + }); + $app.dom.chkbox_members_select_all.click(function () { + var _objects = $('#' + $app.table_members.dom_id + ' tbody').find('[data-check-box]'); + if ($(this).is(':checked')) { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', true); + }); + } else { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', false); + }); + } + }); + + $app.dom.btn_remove_members.click(function () { + $app.on_btn_remove_members_click(); + }); + + $app.dom.chkbox_acc_select_all.click(function () { + var _objects = $('#' + $app.table_acc.dom_id + ' tbody').find('[data-check-box]'); + if ($(this).is(':checked')) { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', true); + }); + } else { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', false); + }); + } + }); + + cb_stack.exec(); +}; + +$app.on_table_members_cell_created = function (tbl, row_id, col_key, cell_obj) { + if (col_key === 'chkbox') { + cell_obj.find('[data-check-box]').click(function () { + $app.check_members_all_selected(); + }); + } +}; + +$app.check_members_all_selected = function (cb_stack) { + var _all_checked = true; + var _objs = $('#' + $app.table_members.dom_id + ' tbody').find('[data-check-box]'); + $.each(_objs, function (i, _obj) { + if (!$(_obj).is(':checked')) { + _all_checked = false; + return false; + } + }); + + if (_all_checked) { + $app.dom.chkbox_members_select_all.prop('checked', true); + } else { + $app.dom.chkbox_members_select_all.prop('checked', false); + } + + if (cb_stack) + cb_stack.exec(); +}; + +$app._add_common_render = function (render) { + render.filter_search = function (header, title, col) { + var _ret = ['

    Z6XzXTjeDo|=5hYv0w{ehK^!!Ba=&jH0omtRseJ^Yr~bv;p^E&AVC zPg&G=4eFz2e>OKCIq<8&QGuU0@Y2jq23_==JOU4?S!j+p!prPU;p_XD>`g`ORs57L2#Pbb$+QY5*;?b z-}A1oTs=@cH+%8ig?Rk)o6MhWJn@fWy+I!&IxL>!ym(waP&|iAeXXYFc5|F)9UniQ z(wjD(pCTUWU)PA|E$bd=rt|0Of#P|~i|74X@ljy6%+qK=CWi{}iCxrU|V74xXBP##sAa&s?p15&R%-Z)ygOTp`Jl-CU|P{ZoFafXTVZp7g{F&gX$rnv@ee1{7I)3r@ z)H4XK08dRmW~_a@tIhm_zlQNcN9B|7zX?2bR6Yg%4)E0ExA5YpUM>Fm`Rn{k_Jmjc z2Rc7_Nc`RNrKd&f`I3Krl14m-eB2(7sE-jHc7Af6HY`cACfT@ppm>%@eQrD_iw=vY z^1f~0WyC}ML5+CQ-urK^*7;5~+BYD_9ccSUt*z+!Qc@n8RBL~dDkP~^J_r6|;HlLf zg)f1h4xXBPMjMl)THANEwx1kg<8J{^9hEPD{|b0&@&(g+U;D1s_R~Xc`{#nECSTGg zk~Gu!T|LlxxIyZ3*Te0ibv^j+KO~0R_ILP%oj>ZmL@zfj+YRHXjO^1IkE^vm@v*kP z&!9eP^7oAB&%1h{{>+s6-2NObTKjXM_kK!wC)@r5XrKBS(P8~bppP1#_Q%!QpV-c} zzE@BmHT#qFcvmZ*0>2SFHTjswyIT1)_$>~y^Ftk#&w$?k~gsmZ&4|JL?ht$cbP%byRPntW29IPJSy`TV|?zZN_-c@wz9yV~&k zS^fv)p~+{paY?E*{;Uc~s+Es_)bbC4r&ha;UrHXDR4ealk~ zqIJD}$9w%vF0k?aTJ#I$69SX<345M zp^nPu!0!p3ntaS_-__cF9{f!3)KU2Y_;&Er%e=fu|;)Fmxa9YUK;y9|ccM{wa@l^+2z; zFGzjve7qt$Y(BCl+Wyb|tep?)g`≥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 literal 0 HcmV?d00001 diff --git a/server/www/packages/packages-darwin/x64/PIL/_imagingft.cpython-35m-darwin.so b/server/www/packages/packages-darwin/x64/PIL/_imagingft.cpython-35m-darwin.so new file mode 100644 index 0000000000000000000000000000000000000000..00ece7fca15f1932a04f693402e6795ff08661ad GIT binary patch literal 45752 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 literal 0 HcmV?d00001 diff --git a/server/www/packages/packages-darwin/x64/PIL/_imagingmath.cpython-35m-darwin.so b/server/www/packages/packages-darwin/x64/PIL/_imagingmath.cpython-35m-darwin.so new file mode 100644 index 0000000000000000000000000000000000000000..099e2860b14fd66be8942b1f8b6315e0a24ebd11 GIT binary patch literal 55068 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 literal 0 HcmV?d00001 diff --git a/server/www/packages/packages-darwin/x64/PIL/_imagingmorph.cpython-35m-darwin.so b/server/www/packages/packages-darwin/x64/PIL/_imagingmorph.cpython-35m-darwin.so new file mode 100644 index 0000000000000000000000000000000000000000..30b50dc7e45c2bab22e92236fb3014f0019d3031 GIT binary patch literal 26284 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 A6aWAK literal 0 HcmV?d00001 diff --git a/server/www/packages/packages-darwin/x64/PIL/_imagingtk.cpython-35m-darwin.so b/server/www/packages/packages-darwin/x64/PIL/_imagingtk.cpython-35m-darwin.so new file mode 100644 index 0000000000000000000000000000000000000000..d7943ff4fd61fbaf75bc736e2528d921158b403e GIT binary patch literal 26628 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 WF%`ZK^H~V}g~nQbmCbNC;(q}}oM31G literal 0 HcmV?d00001 diff --git a/server/www/packages/packages-darwin/x64/PIL/_util.py b/server/www/packages/packages-darwin/x64/PIL/_util.py new file mode 100644 index 0000000..51c6f68 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/_util.py @@ -0,0 +1,27 @@ +import os + +if bytes is str: + def isStringType(t): + return isinstance(t, basestring) + + def isPath(f): + return isinstance(f, basestring) +else: + def isStringType(t): + return isinstance(t, str) + + def isPath(f): + return isinstance(f, (bytes, str)) + + +# Checks if an object is a string, and that it points to a directory. +def isDirectory(f): + return isPath(f) and os.path.isdir(f) + + +class deferred_error(object): + def __init__(self, ex): + self.ex = ex + + def __getattr__(self, elt): + raise self.ex diff --git a/server/www/packages/packages-darwin/x64/PIL/_webp.cpython-35m-darwin.so b/server/www/packages/packages-darwin/x64/PIL/_webp.cpython-35m-darwin.so new file mode 100644 index 0000000000000000000000000000000000000000..6ff1bf5d8a52b45ac633dd55b589600c5043f530 GIT binary patch literal 32240 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 literal 0 HcmV?d00001 diff --git a/server/www/packages/packages-darwin/x64/PIL/features.py b/server/www/packages/packages-darwin/x64/PIL/features.py new file mode 100644 index 0000000..fd87f09 --- /dev/null +++ b/server/www/packages/packages-darwin/x64/PIL/features.py @@ -0,0 +1,67 @@ +from PIL import Image + +modules = { + "pil": "PIL._imaging", + "tkinter": "PIL._imagingtk", + "freetype2": "PIL._imagingft", + "littlecms2": "PIL._imagingcms", + "webp": "PIL._webp", + "transp_webp": ("WEBP", "WebPDecoderBuggyAlpha") +} + + +def check_module(feature): + if feature not in modules: + raise ValueError("Unknown module %s" % feature) + + module = modules[feature] + + method_to_call = None + if type(module) is tuple: + module, method_to_call = module + + try: + imported_module = __import__(module) + except ImportError: + # If a method is being checked, None means that + # rather than the method failing, the module required for the method + # failed to be imported first + return None if method_to_call else False + + if method_to_call: + method = getattr(imported_module, method_to_call) + return method() is True + else: + return True + + +def get_supported_modules(): + supported_modules = [] + for feature in modules: + if check_module(feature): + supported_modules.append(feature) + return supported_modules + +codecs = { + "jpg": "jpeg", + "jpg_2000": "jpeg2k", + "zlib": "zip", + "libtiff": "libtiff" +} + + +def check_codec(feature): + if feature not in codecs: + raise ValueError("Unknown codec %s" % feature) + + codec = codecs[feature] + + return codec + "_encoder" in dir(Image.core) + + +def get_supported_codecs(): + supported_codecs = [] + for feature in codecs: + if check_codec(feature): + supported_codecs.append(feature) + return supported_codecs diff --git a/server/www/teleport/.idea/teleport.iml b/server/www/teleport/.idea/teleport.iml index 0eaa135..6253974 100644 --- a/server/www/teleport/.idea/teleport.iml +++ b/server/www/teleport/.idea/teleport.iml @@ -1,28 +1,14 @@ - - - - - - - + - + -

  • '); + act_btn.push(' ' + disabled); + act_btn.push('
  • '); + } else { + if (acc.protocol_type === TP_PROTOCOL_TYPE_RDP) { + if ((acc.policy_.flag_rdp & TP_FLAG_RDP_DESKTOP) !== 0) { + act_btn.push('
  • '); + act_btn.push(''); + act_btn.push('
  • '); + } + } else if (acc.protocol_type === TP_PROTOCOL_TYPE_SSH) { + if ((acc.policy_.flag_ssh & TP_FLAG_SSH_SHELL) !== 0) { + act_btn.push('
  • '); + act_btn.push(''); + act_btn.push('
  • '); + } + + if ((acc.policy_.flag_ssh & TP_FLAG_SSH_SFTP) !== 0) { + act_btn.push('
  • '); + act_btn.push(''); + act_btn.push('
  • '); + } + } else if (acc.protocol_type === TP_PROTOCOL_TYPE_TELNET) { + act_btn.push('
  • '); + act_btn.push(''); + act_btn.push('
  • '); + } + } + + h.push('
      '); + h.push(act_btn.join('')); + h.push('
    '); + } + return h.join(''); + }; + + render.state = function (row_id, fields) { + console.log(fields); + var _prompt, _style, _state; + + if ((fields.h_state === TP_STATE_NORMAL || fields.h_state === 0) + && (fields.gh_state === TP_STATE_NORMAL || fields.gh_state === 0) + // && (fields.a_state === TP_STATE_NORMAL || fields.a_state === 0) + // && (fields.ga_state === TP_STATE_NORMAL || fields.ga_state === 0) + ) { + return '正常' + } + + var states = [ + {n: '主机', s: fields.h_state}, + {n: '主机组', s: fields.gh_state}, + // {n: '账号', s: fields.a_state}, + // {n: '账号组', s: fields.ga_state} + ]; + + for (var j = 0; j < states.length; ++j) { + if (states[j].s === TP_STATE_NORMAL) + continue; + + for (var i = 0; i < $app.obj_states.length; ++i) { + if ($app.obj_states[i].id === states[j].s) { + _style = $app.obj_states[i].style; + _state = $app.obj_states[i].name; + _prompt = states[j].n; + return '' + _prompt + '被' + _state + '' + } + } + } + + return ' 未知' + }; + + // render.make_host_action_btn = function (row_id, fields) { + // var h = []; + // h.push('
    '); + // h.push(''); + // h.push(''); + // h.push('
    '); + // + // return h.join(''); + // }; +}; + +$app.on_table_host_header_created = function (header) { + $app.dom.btn_table_host_reset_filter = $('#' + header._table_ctrl.dom_id + ' a[data-reset-filter]'); + $app.dom.btn_table_host_reset_filter.click(function () { + CALLBACK_STACK.create() + .add(header._table_ctrl.load_data) + .add(header._table_ctrl.reset_filters) + .exec(); + }); + + // TODO: 当过滤器不是默认值时,让“重置过滤器按钮”有呼吸效果,避免用户混淆 - 实验性质 + // var t1 = function(){ + // $app.dom.btn_table_host_reset_filter.fadeTo(1000, 1.0, function(){ + // $app.dom.btn_table_host_reset_filter.fadeTo(1000, 0.2, t1); + // }); + // }; + // $app.dom.btn_table_host_reset_filter.fadeTo(1000, 0.2, t1); + + // 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行) + header._table_ctrl.get_filter_ctrl('search').on_created(); + // header._table_ctrl.get_filter_ctrl('role').on_created(); + // header._table_ctrl.get_filter_ctrl('state').on_created(); +}; + +$app.get_selected_user = function (tbl) { + var users = []; + var _objs = $('#' + $app.table_host.dom_id + ' tbody tr td input[data-check-box]'); + $.each(_objs, function (i, _obj) { + if ($(_obj).is(':checked')) { + var _row_data = tbl.get_row(_obj); + // _all_checked = false; + users.push(_row_data.id); + } + }); + return users; +}; + +$app.connect_remote = function (uni_id, protocol_type, protocol_sub_type) { + $assist.do_teleport( + { + auth_id: uni_id, + protocol_type: protocol_type, + protocol_sub_type: protocol_sub_type + }, + function () { + // func_success + //$tp.notify_success('远程连接测试通过!'); + }, + function (code, message) { + if (code === TPE_NO_ASSIST) + $assist.alert_assist_not_found(); + else + $tp.notify_error('远程连接失败:' + tp_error_msg(code, message)); + } + ); +}; diff --git a/server/www/teleport/static/js/ops/session-list.js b/server/www/teleport/static/js/ops/session-list.js new file mode 100644 index 0000000..5033f5f --- /dev/null +++ b/server/www/teleport/static/js/ops/session-list.js @@ -0,0 +1,436 @@ +"use strict"; + +$app.on_init = function (cb_stack) { + $app.dom = { + btn_refresh_session: $('#btn-refresh-session'), + chkbox_session_select_all: $('#table-session-select-all'), + btn_kill_sessions: $('#btn-kill-sessions') + }; + + cb_stack.add($app.create_controls); + cb_stack.exec(); +}; + +//=================================== +// 创建页面控件对象 +//=================================== +$app.create_controls = function (cb_stack) { + + //------------------------------- + // 资产列表表格 + //------------------------------- + var table_session_options = { + dom_id: 'table-session', + data_source: { + type: 'ajax-post', + url: '/audit/get-records', + restrict: {'state': [TP_SESS_STAT_RUNNING, TP_SESS_STAT_STARTED]} + }, + column_default: {sort: false, align: 'left'}, + columns: [ + { + // title: '', + title: '', + key: 'chkbox', + sort: false, + width: 36, + align: 'center', + render: 'make_check_box', + fields: {id: 'id'} + }, + { + title: 'ID', + key: 'id', + fields: {id: 'id'} + }, + { + title: '用户', + key: 'user', + //sort: true, + //header_render: 'filter_search_host', + render: 'user', + fields: {user_name: 'user_name', user_surname: 'user_surname'} + }, + { + title: '来源', + key: 'client_ip', + //sort: true, + //header_render: 'filter_search_host', + //render: 'host_info', + fields: {client_ip: 'client_ip'} + }, + { + title: '远程连接', + key: 'remote', + //sort: true, + //header_render: 'filter_search_host', + render: 'remote', + fields: {account_name: 'account_name', real_host_ip: 'real_host_ip', host_ip: 'host_ip', host_port: 'host_port'} + }, + { + title: '远程协议', + key: 'protocol_type', + align: 'center', + width: 80, + // align: 'center', + // width: 36, + //sort: true + // header_render: 'filter_os', + render: 'protocol', + fields: {protocol_type: 'protocol_type', protocol_sub_type: 'protocol_sub_type'} + }, + { + title: '开始时间', + key: 'time_begin', + //sort: true, + //sort_asc: false, + render: 'time_begin', + fields: {time_begin: 'time_begin'} + }, + { + title: '耗时', + key: 'time_cost', + render: 'time_cost', + fields: {time_begin: 'time_begin', time_end: 'time_end', state: 'state'} + }, + { + title: "状态", + key: "state", + //sort: true, + width: 90, + align: 'center', + //header_render: 'filter_host_state', + render: 'state', + fields: {state: 'state'} + }, + { + title: '', + key: 'action', + //sort: false, + //align: 'center', + width: 160, + render: 'record_action', + fields: {id: 'id', state: 'state', time_end: 'time_end', protocol_sub_type: 'protocol_sub_type'} + } + ], + + // 重载回调函数 + on_header_created: $app.on_table_session_header_created, + on_render_created: $app.on_table_session_render_created, + on_cell_created: $app.on_table_session_cell_created + }; + + $app.table_session = $tp.create_table(table_session_options); + cb_stack + .add($app.table_session.load_data) + .add($app.table_session.init); + + //------------------------------- + // 用户列表相关过滤器 + //------------------------------- + $app.table_session_filter_search_host = $tp.create_table_header_filter_search($app.table_session, { + name: 'search_host', + place_holder: '搜索:主机IP/名称/描述/资产编号/等等...' + }); + // 从cookie中读取用户分页限制的选择 + var _per_page = Cookies.get($app.page_id('ops_session') + '_per_page'); + $app.table_session_paging = $tp.create_table_paging($app.table_session, 'table-session-paging', + { + per_page: _per_page, + on_per_page_changed: function (per_page) { + Cookies.set($app.page_id('ops_session') + '_per_page', per_page, {expires: 365}); + } + }); + $app.table_session_pagination = $tp.create_table_pagination($app.table_session, 'table-session-pagination'); + + //------------------------------- + // 页面控件事件绑定 + //------------------------------- + $app.dom.btn_refresh_session.click(function () { + $app.table_session.load_data(); + }); + $app.dom.chkbox_session_select_all.click(function () { + var _objects = $('#' + $app.table_session.dom_id + ' tbody').find('[data-check-box]'); + if ($(this).is(':checked')) { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', true); + }); + } else { + $.each(_objects, function (i, _obj) { + $(_obj).prop('checked', false); + }); + } + }); + $app.dom.btn_kill_sessions.click($app.on_btn_kill_sessions_click); + + cb_stack.exec(); +}; + +$app.on_table_session_cell_created = function (tbl, row_id, col_key, cell_obj) { + if (col_key === 'chkbox') { + cell_obj.find('[data-check-box]').click(function () { + $app.check_host_all_selected(); + }); + } + // else if (col_key === 'action') { + // // 绑定系统选择框事件 + // cell_obj.find('[data-action]').click(function () { + // var action = $(this).attr('data-action'); + // if (action === 'edit') { + // $app.dlg_edit_host.show_edit(row_id); + // } else if (action === 'account') { + // $app.dlg_accounts.show(row_id); + // } + // }); + // } else if (col_key === 'ip') { + // cell_obj.find('[data-toggle="popover"]').popover({trigger: 'hover'}); + // // } else if (col_key === 'account') { + // // cell_obj.find('[data-action="add-account"]').click(function () { + // // $app.dlg_accounts.show(row_id); + // // }); + // } else if (col_key === 'account_count') { + // cell_obj.find('[data-action="edit-account"]').click(function () { + // $app.dlg_accounts.show(row_id); + // }); + // } +}; + +$app.check_host_all_selected = function (cb_stack) { + var _all_checked = true; + var _objs = $('#' + $app.table_session.dom_id + ' tbody').find('[data-check-box]'); + if (_objs.length === 0) { + _all_checked = false; + } else { + $.each(_objs, function (i, _obj) { + if (!$(_obj).is(':checked')) { + _all_checked = false; + return false; + } + }); + } + + if (_all_checked) { + $app.dom.chkbox_session_select_all.prop('checked', true); + } else { + $app.dom.chkbox_session_select_all.prop('checked', false); + } + + if (cb_stack) + cb_stack.exec(); +}; + +$app.on_table_session_render_created = function (render) { + // render.filter_host_state = function (header, title, col) { + // var _ret = ['
    ']; + // _ret.push('
    '); + // _ret.push('
    ' + title + '
    '); + // + // // 表格内嵌过滤器的DOM实体在这时生成 + // var filter_ctrl = header._table_ctrl.get_filter_ctrl('host_state'); + // _ret.push(filter_ctrl.render()); + // + // _ret.push('
    '); + // + // return _ret.join(''); + // }; + // + // render.filter_search_host = function (header, title, col) { + // var _ret = ['
    ']; + // _ret.push('
    '); + // _ret.push('
    ' + title + '
    '); + // + // // 表格内嵌过滤器的DOM实体在这时生成 + // var filter_ctrl = header._table_ctrl.get_filter_ctrl('search_host'); + // _ret.push(filter_ctrl.render()); + // + // _ret.push('
    '); + // + // return _ret.join(''); + // }; + + render.make_check_box = function (row_id, fields) { + return ''; + }; + + render.user = function (row_id, fields) { + if (_.isNull(fields.user_surname) || fields.user_surname.length === 0 || fields.user_name === fields.user_surname) { + return fields.user_name; + } else { + return fields.user_name + ' (' + fields.user_surname + ')'; + } + }; + + render.remote = function (row_id, fields) { + if (fields.real_host_ip === fields.host_ip) { + return fields.account_name + '@' + fields.real_host_ip;// + ':' + fields.host_port; + } else { + return fields.account_name + '@' + fields.real_host_ip;// + '(' + fields.host_ip + ':' + fields.host_port + ')'; + } + }; + + // fields: {protocol_type: 'protocol_type', protocol_sub_type: 'protocol_sub_type'} + render.protocol = function (row_id, fields) { + switch (fields.protocol_sub_type) { + case 100: + return 'RDP'; + case 200: + return 'SSH'; + case 201: + return 'SFTP'; + case 300: + return 'TELNET'; + default: + return '未知'; + } + }; + + render.time_begin = function (row_id, fields) { + return tp_format_datetime(tp_utc2local(fields.time_begin), 'MM-dd HH:mm:ss'); + }; + + render.time_cost = function (row_id, fields) { + if (fields.time_end === 0) { + var _style = 'info'; + if (fields.state === TP_SESS_STAT_RUNNING) + _style = 'warning'; + else if (fields.state === TP_SESS_STAT_STARTED) + _style = 'primary'; + return ' ' + tp_second2str(tp_local2utc() - fields.time_begin) + ''; + } else { + return tp_second2str(fields.time_end - fields.time_begin); + } + }; + + render.state = function (row_id, fields) { + var msg = ''; + switch (fields.state) { + case TP_SESS_STAT_RUNNING: + return '正在连接'; + case TP_SESS_STAT_STARTED: + return '使用中'; + case TP_SESS_STAT_END: + return '已结束'; + case TP_SESS_STAT_ERR_AUTH_DENIED: + msg = '认证失败'; + break; + case TP_SESS_STAT_ERR_CONNECT: + msg = '连接失败'; + break; + case TP_SESS_STAT_ERR_BAD_SSH_KEY: + msg = '私钥错误'; + break; + case TP_SESS_STAT_ERR_START_INTERNAL: + case TP_SESS_STAT_ERR_INTERNAL: + msg = '内部错误'; + break; + case TP_SESS_STAT_ERR_UNSUPPORT_PROTOCOL: + msg = '协议不支持'; + break; + case TP_SESS_STAT_ERR_BAD_PKG: + case TP_SESS_STAT_ERR_START_BAD_PKG: + msg = '数据格式错误'; + break; + case TP_SESS_STAT_ERR_RESET: + case TP_SESS_STAT_ERR_START_RESET: + msg = '核心服务重置'; + break; + case TP_SESS_STAT_ERR_IO: + case TP_SESS_STAT_ERR_START_IO: + msg = '网络通讯故障'; + break; + case TP_SESS_STAT_ERR_SESSION: + msg = '无效会话'; + break; + default: + msg = '未知状态 [' + fields.state + ']'; + } + + return '' + msg + ''; + }; + + render.record_action = function (row_id, fields) { + var ret = []; + + if (fields.state >= TP_SESS_STAT_STARTED) { + if (fields.time_end === 0) { + ret.push(' 同步 '); + } else { + ret.push(' 播放 '); + } + if (fields.protocol_sub_type !== TP_PROTOCOL_TYPE_RDP_DESKTOP) { + ret.push(' 日志 '); + } + } + + return ret.join(''); + }; +}; + +$app.on_table_session_header_created = function (header) { + // $app.dom.btn_table_host_reset_filter = $('#' + header._table_ctrl.dom_id + ' a[data-reset-filter]'); + // $app.dom.btn_table_host_reset_filter.click(function () { + // CALLBACK_STACK.create() + // .add(header._table_ctrl.load_data) + // .add(header._table_ctrl.reset_filters) + // .exec(); + // }); + + // TODO: 当过滤器不是默认值时,让“重置过滤器按钮”有呼吸效果,避免用户混淆 - 实验性质 + // var t1 = function(){ + // $app.dom.btn_table_host_reset_filter.fadeTo(1000, 1.0, function(){ + // $app.dom.btn_table_host_reset_filter.fadeTo(1000, 0.2, t1); + // }); + // }; + // $app.dom.btn_table_host_reset_filter.fadeTo(1000, 0.2, t1); + + // 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行) + //header._table_ctrl.get_filter_ctrl('search_host').on_created(); + // header._table_ctrl.get_filter_ctrl('role').on_created(); + //header._table_ctrl.get_filter_ctrl('host_state').on_created(); +}; + +$app.get_selected_session = function (tbl) { + var records = []; + var _objs = $('#' + $app.table_session.dom_id + ' tbody tr td input[data-check-box]'); + $.each(_objs, function (i, _obj) { + if ($(_obj).is(':checked')) { + var _row_data = tbl.get_row(_obj); + records.push(_row_data.id); + } + }); + return records; +}; + +$app.on_btn_kill_sessions_click = function () { + // var records = $app.get_selected_session($app.table_session); + // if (records.length === 0) { + // $tp.notify_error('请选择要删除的会话记录!'); + // return; + // } + // + // var _fn_sure = function (cb_stack, cb_args) { + // $tp.ajax_post_json('/user/remove-user', {users: users}, + // function (ret) { + // if (ret.code === TPE_OK) { + // cb_stack.add($app.check_host_all_selected); + // cb_stack.add($app.table_session.load_data); + // $tp.notify_success('删除用户账号操作成功!'); + // } else { + // $tp.notify_error('删除用户账号操作失败:' + tp_error_msg(ret.code, ret.message)); + // } + // + // cb_stack.exec(); + // }, + // function () { + // $tp.notify_error('网络故障,删除用户账号操作失败!'); + // cb_stack.exec(); + // } + // ); + // }; + // + // var cb_stack = CALLBACK_STACK.create(); + // $tp.dlg_confirm(cb_stack, { + // msg: '

    注意:删除操作不可恢复!!

    删除用户账号将同时将其从所在用户组中移除,并且删除所有分配给此用户的授权!

    如果您希望禁止某个用户登录本系统,可对其进行“禁用”操作!

    您确定要移除所有选定的 ' + user_list.length + '个 用户账号吗?

    ', + // fn_yes: _fn_sure + // }); +}; diff --git a/server/www/teleport/static/js/system/config.js b/server/www/teleport/static/js/system/config.js new file mode 100644 index 0000000..01ac1b8 --- /dev/null +++ b/server/www/teleport/static/js/system/config.js @@ -0,0 +1,215 @@ +"use strict"; + +$app.on_init = function () { + $app.dom = { + // btn_reset_oath_code: $('#btn-reset-oath-code'), + // btn_verify_oath_code: $('#btn-verify-oath-code'), + // btn_verify_oath_code_and_save: $('#btn-verify-oath-and-save'), + // btn_modify_password: $('#btn-modify-password'), + // btn_toggle_oath_download: $('#toggle-oath-download'), + // + // oath_app_download_box: $('#oath-app-download-box'), + // + // input_current_password: $('#current-password'), + // input_new_password: $('#new-password-1'), + // input_new_password_confirm: $('#new-password-2'), + // input_oath_code: $('#oath-code'), + // input_oath_code_verify: $('#oath-code-verify'), + // + // dlg_reset_oath_code: $('#dialog-reset-oath-code'), + // oath_secret_image: $('#oath-secret-qrcode'), + // tmp_oath_secret: $('#tmp-oath-secret'), + + // 邮件系统设置 + mail: { + smtp_server: $('#smtp-server-info'), + smtp_port: $('#smtp-port-info'), + smtp_ssl: $('#smtp-ssl-info'), + smtp_sender: $('#smtp-sender-info'), + btn_edit_mail_config: $('#btn-edit-mail-config'), + + dlg_edit_mail_config: $('#dlg-edit-mail-config'), + edit_smtp_server: $('#edit-smtp-server'), + edit_smtp_port: $('#edit-smtp-port'), + edit_smtp_ssl: $('#edit-smtp-ssl'), + edit_smtp_sender: $('#edit-smtp-sender'), + edit_smtp_password: $('#edit-smtp-password'), + edit_smtp_test_recipient: $('#edit-smtp-test-recipient'), + btn_send_test_mail: $('#btn-send-test-mail'), + msg_send_test_mail: $('#msg-send-test-mail'), + btn_save_mail_config: $('#btn-save-mail-config') + } + }; + +// $app.dom.tmp_oath_secret.text($app.page_options.tmp_oath_secret); + + //========================================= + // 邮件系统配置相关 + //========================================= + $app.update_mail_info = function (smtp_info) { + var not_set = '未设置'; + if (0 === smtp_info.server.length) + $app.dom.mail.smtp_server.html(not_set); + else + $app.dom.mail.smtp_server.html(smtp_info.server); + + if (-1 === smtp_info.port) + $app.dom.mail.smtp_port.html(not_set); + else + $app.dom.mail.smtp_port.html(smtp_info.port); + + if (-1 === smtp_info.ssl) + $app.dom.mail.smtp_ssl.html(not_set); + else if (0 === smtp_info.ssl) + $app.dom.mail.smtp_ssl.html('否'); + else + $app.dom.mail.smtp_ssl.html('是'); + + if (0 === smtp_info.sender.length) + $app.dom.mail.smtp_sender.html(not_set); + else + $app.dom.mail.smtp_sender.html(smtp_info.sender); + }; + + $app.update_mail_info($app.options.sys_cfg.smtp); + + $app.dom.mail.btn_edit_mail_config.click(function () { + var smtp_info = $app.options.sys_cfg.smtp; + + $app.dom.mail.edit_smtp_server.val(smtp_info.server); + + if(smtp_info.port === -1) + $app.dom.mail.edit_smtp_port.val(''); + else + $app.dom.mail.edit_smtp_port.val(smtp_info.port); + + if (-1 === smtp_info.ssl || 0 === smtp_info.ssl) + $app.dom.mail.edit_smtp_ssl.removeClass('tp-selected'); + else + $app.dom.mail.edit_smtp_ssl.removeClass('tp-selected').addClass('tp-selected'); + + $app.dom.mail.edit_smtp_sender.val(smtp_info.sender); + $app.dom.mail.edit_smtp_password.val(''); + + $app.dom.mail.dlg_edit_mail_config.modal(); + }); + // $app.dom.mail.btn_edit_mail_config.trigger('click'); + $app.dom.mail.edit_smtp_ssl.click(function () { + if ($app.dom.mail.edit_smtp_ssl.hasClass('tp-selected')) + $app.dom.mail.edit_smtp_ssl.removeClass('tp-selected'); + else + $app.dom.mail.edit_smtp_ssl.addClass('tp-selected'); + }); + $app.dom.mail.btn_send_test_mail.click($app._on_btn_send_test_mail); + $app.dom.mail.btn_save_mail_config.click($app._on_btn_save_mail_config); +}; + +$app._edit_mail_config_check = function (_server, _port, _sender, _password) { + if(_server.length === 0) { + $app.dom.mail.edit_smtp_server.focus(); + $tp.notify_error('请填写SMTP服务器地址!'); + return false; + } + if(_port.length === 0) { + $app.dom.mail.edit_smtp_port.focus(); + $tp.notify_error('请填写SMTP服务器端口!'); + return false; + } + if(_sender.length === 0) { + $app.dom.mail.edit_smtp_sender.focus(); + $tp.notify_error('请填写发件人邮箱!'); + return false; + } + if(_password.length === 0) { + $app.dom.mail.edit_smtp_password.focus(); + $tp.notify_error('请填写发件人邮箱密码!'); + return false; + } + + return true; +}; + +$app._on_btn_send_test_mail = function () { + var _server = $app.dom.mail.edit_smtp_server.val(); + var _port = $app.dom.mail.edit_smtp_port.val(); + var _sender = $app.dom.mail.edit_smtp_sender.val(); + var _password = $app.dom.mail.edit_smtp_password.val(); + var _recipient = $app.dom.mail.edit_smtp_test_recipient.val(); + var _ssl = ($app.dom.mail.edit_smtp_ssl.hasClass('tp-selected')) ? 1 : 0; + + if(!$app._edit_mail_config_check(_server, _port, _sender, _password)) + return; + if(_recipient.length === 0) { + $app.dom.mail.edit_smtp_test_recipient.focus(); + $tp.notify_error('请填写测试收件人邮箱!'); + return; + } + + $app.dom.mail.btn_send_test_mail.attr('disabled', 'disabled'); + + $tp.ajax_post_json('/system/send-test-mail', + { + smtp_server: _server, + smtp_port: _port, + smtp_ssl: _ssl, + smtp_sender: _sender, + smtp_password: _password, + smtp_recipient: _recipient + }, + function (ret) { + $app.dom.mail.btn_send_test_mail.removeAttr('disabled'); + if (ret.code === TPE_OK) { + $app.dom.mail.msg_send_test_mail.slideDown('fast'); + } else { + $tp.notify_error(tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $app.dom.mail.btn_send_test_mail.removeAttr('disabled'); + $tp.notify_error('网路故障,无法连接到服务器!'); + }, + 15000 + ); +}; + +$app._on_btn_save_mail_config = function () { + var _server = $app.dom.mail.edit_smtp_server.val(); + var _port = $app.dom.mail.edit_smtp_port.val(); + var _sender = $app.dom.mail.edit_smtp_sender.val(); + var _password = $app.dom.mail.edit_smtp_password.val(); + var _ssl = ($app.dom.mail.edit_smtp_ssl.hasClass('tp-selected')) ? 1 : 0; + + if(!$app._edit_mail_config_check(_server, _port, _sender, _password)) + return; + + $app.dom.mail.btn_save_mail_config.attr('disabled', 'disabled'); + $tp.ajax_post_json('/system/save-mail-config', + { + smtp_server: _server, + smtp_port: _port, + smtp_ssl: _ssl, + smtp_sender: _sender, + smtp_password: _password + }, + function (ret) { + $app.dom.mail.btn_save_mail_config.removeAttr('disabled'); + if (ret.code === TPE_OK) { + $app.dom.mail.edit_smtp_password.val(''); + // 更新一下界面上显示的配置信息 + $app.options.sys_cfg.smtp.server = _server; + $app.options.sys_cfg.smtp.port = _port; + $app.options.sys_cfg.smtp.ssl = _ssl; + $app.options.sys_cfg.smtp.sender = _sender; + $app.update_mail_info($app.options.sys_cfg.smtp); + + $app.dom.mail.dlg_edit_mail_config.modal('hide'); + } else { + $tp.notify_error(tp_error_msg(ret.code, ret.message)); + } + }, + function () { + $app.dom.mail.btn_save_mail_config.removeAttr('disabled'); + $tp.notify_error('网路故障,无法连接到服务器!'); + } + ); +}; diff --git a/server/www/teleport/static/js/system/role.js b/server/www/teleport/static/js/system/role.js new file mode 100644 index 0000000..35625c0 --- /dev/null +++ b/server/www/teleport/static/js/system/role.js @@ -0,0 +1,207 @@ +"use strict"; + +$app.on_init = function (cb_stack) { + $app.last_role_id = 0; + $app.selected_role_id = 0; + $app.edit_mode = false; + + $app.dom = { + role_list: $('#role-list'), + btn_edit_role: $('#btn-edit-role'), + btn_del_role: $('#btn-delete-role'), + btn_save_role: $('#btn-save-role'), + btn_cancel_edit_role: $('#btn-cancel-edit-role'), + // btn_verify_oath_code: $('#btn-verify-oath-code'), + // btn_verify_oath_code_and_save: $('#btn-verify-oath-and-save'), + // btn_modify_password: $('#btn-modify-password'), + // btn_toggle_oath_download: $('#toggle-oath-download'), + // + // oath_app_download_box: $('#oath-app-download-box'), + // + // input_role_name: $('#input-role-name'), + // input_new_password: $('#new-password-1'), + // input_new_password_confirm: $('#new-password-2'), + // input_oath_code: $('#oath-code'), + // input_oath_code_verify: $('#oath-code-verify'), + // + // dlg_reset_oath_code: $('#dialog-reset-oath-code'), + // oath_secret_image: $('#oath-secret-qrcode'), + // tmp_oath_secret: $('#tmp-oath-secret'), + + role_info: $('#role-info'), + privilege_list: $('#privilege-list') + }; + + $app.dom.role = { + label_area: $('#label-role-name-area'), + input_area: $('#input-role-name-area'), + save_area: $('#save-area'), + label_role_name: $app.dom.role_info.find('span[data-role-name]'), + input_role_name: $('#input-role-name') + }; + + cb_stack + .add($app.create_controls) + .add($app.load_role_list); + + cb_stack.exec(); +}; + +$app.create_controls = function () { + var nodes = []; + var selected_role_id = 0; + for (var i = 0; i < $app.role_list.length; ++i) { + nodes.push('
  • '); + nodes.push($app.role_list[i].name); + nodes.push('
  • '); + } + // 增加一个“创建角色”的项 + nodes.push('
  • 创建角色
  • '); + + $app.dom.role_list.append($(nodes.join(''))); + $app.dom.btn_create_role = $('#btn-create-role'); + + + var privileges = [ + { + t: '资产', i: [ + {n: '主机信息创建/编辑', p: TP_PRIVILEGE_ASSET_CREATE}, + {n: '删除主机信息', p: TP_PRIVILEGE_ASSET_DELETE}, + {n: '主机禁用/解禁', p: TP_PRIVILEGE_ASSET_LOCK}, + {n: '主机分组管理', p: TP_PRIVILEGE_ASSET_GROUP}, + {n: '主机账号管理', p: TP_PRIVILEGE_ACCOUNT}, + {n: '主机账号分组管理', p: TP_PRIVILEGE_ACCOUNT_GROUP}] + }, + { + t: '用户', i: [ + {n: '登录WEB系统', p: TP_PRIVILEGE_LOGIN_WEB}, + {n: '用户创建/编辑', p: TP_PRIVILEGE_USER_CREATE}, + {n: '删除用户', p: TP_PRIVILEGE_USER_DELETE}, + {n: '用户禁用/解禁', p: TP_PRIVILEGE_USER_LOCK}, + {n: '用户分组管理', p: TP_PRIVILEGE_USER_GROUP}] + }, + { + t: '运维', i: [ + {n: '远程主机运维', p: TP_PRIVILEGE_OPS}, + {n: '运维授权管理', p: TP_PRIVILEGE_OPS_AUZ}, + {n: '查看在线会话', p: TP_PRIVILEGE_SESSION_VIEW}, + {n: '阻断在线会话', p: TP_PRIVILEGE_SESSION_BLOCK}] + }, + { + t: '审计', i: [ + {n: '审计(查看历史会话)', p: TP_PRIVILEGE_AUDIT_OPS_HISTORY}, + {n: '审计授权管理', p: TP_PRIVILEGE_AUDIT_AUZ}] + }, + { + t: '系统', i: [ + {n: '角色管理', p: TP_PRIVILEGE_SYS_ROLE}, + {n: '系统配置与维护', p: TP_PRIVILEGE_SYS_CONFIG}, + {n: '历史会话管理', p: TP_PRIVILEGE_SYS_OPS_HISTORY}, + {n: '系统日志管理', p: TP_PRIVILEGE_SYS_LOG}] + } + ]; + nodes = []; + $.each(privileges, function (_, ps) { + nodes.push('
    ' + ps.t + '
      '); + $.each(ps.i, function (_, p) { + nodes.push('
    • ' + p.n + '
    • '); + }); + nodes.push('
    '); + }); + $app.dom.privilege_list.append($(nodes.join(''))); + + $app.show_role(selected_role_id, false); + + //=================================================== + // 绑定事件 + //=================================================== + $app.dom.role_list.find('[data-role-id]').click(function () { + var obj = $(this); + if (obj.hasClass('active')) { + return; + } + var role_id = parseInt(obj.attr('data-role-id')); + $app.show_role(role_id, false); + }); + $app.dom.privilege_list.find('[data-privilege]').click(function () { + var obj = $(this); + if (obj.hasClass('enabled')) { + obj.removeClass('enabled'); + } else { + obj.addClass('enabled'); + } + + if (!$app.edit_mode) { + $app.edit_mode = true; + $app.dom.role.save_area.slideDown(); + } + }); + + $app.dom.btn_edit_role.click(function () { + $app.show_role($app.selected_role_id, true); + }); + $app.dom.btn_cancel_edit_role.click(function () { + if ($app.selected_role_id !== 0) + $app.show_role($app.selected_role_id, false); + else + $app.show_role($app.last_role_id, false); + }); +}; + +$app.show_role = function (role_id, edit_mode) { + var edit = edit_mode || false; + var role = null; + + if (role_id === 0) { + role = {id: 0, name: '', privilege: 0}; + edit = true; + } else { + for (var i = 0; i < $app.role_list.length; ++i) { + if ($app.role_list[i].id === role_id) { + role = $app.role_list[i]; + break; + } + } + + if (_.isNull(role)) + return; + } + + $app.dom.role_list.find('[data-role-id="' + $app.selected_role_id + '"]').removeClass('active'); + $app.dom.role_list.find('[data-role-id="' + role_id + '"]').addClass('active'); + + $app.dom.role.label_role_name.text(role.name); + $app.dom.role.input_role_name.val(role.name); + if (edit) { + $app.edit_mode = true; + $app.dom.role.label_area.hide(); + $app.dom.role.input_area.show(); + $app.dom.role.input_role_name.focus(); + $app.dom.role.save_area.slideDown(); + } else { + $app.edit_mode = false; + $app.dom.role.input_area.hide(); + $app.dom.role.label_area.show(); + $app.dom.role.save_area.slideUp(); + } + + var privilege_objs = $('#role-info').find('[data-privilege]'); + $.each(privilege_objs, function (i, j) { + var obj = $(j); + var p = parseInt(obj.attr('data-privilege')); + obj.removeClass('enabled'); + if (p & role.privilege) { + obj.addClass('enabled'); + } + }); + + $app.selected_role_id = role_id; + if (role_id !== 0) + $app.last_role_id = role_id; +}; diff --git a/server/www/teleport/static/js/system/syslog.js b/server/www/teleport/static/js/system/syslog.js new file mode 100644 index 0000000..90efb48 --- /dev/null +++ b/server/www/teleport/static/js/system/syslog.js @@ -0,0 +1,225 @@ +"use strict"; + +$app.on_init = function (cb_stack) { + $app.dom = { + btn_refresh_log: $('#btn-refresh-log'), + }; + + cb_stack.add($app.create_controls); + cb_stack.exec(); +}; + +//=================================== +// 创建页面控件对象 +//=================================== +$app.create_controls = function (cb_stack) { + + //------------------------------- + // 日志表格 + //------------------------------- + var table_log_options = { + dom_id: 'table-log', + data_source: { + type: 'ajax-post', + url: '/system/get-logs' + }, + column_default: {sort: false, align: 'left'}, + columns: [ + { + title: '时间', + key: 'log_time', + sort: true, + sort_asc: false, + width: 160, + //header_render: 'filter_search_host', + render: 'log_time', + fields: {log_time: 'log_time'} + }, + // { + // title: 'ID', + // key: 'id', + // width:80, + // fields: {id: 'id'} + // }, + { + title: '用户', + key: 'user', + width: 160, + //sort: true, + //header_render: 'filter_search_host', + render: 'user', + fields: {user_name: 'user_name', user_surname: 'user_surname'} + }, + { + title: '来源', + key: 'client_ip', + width: 100, + //sort: true, + //header_render: 'filter_search_host', + //render: 'host_info', + fields: {client_ip: 'client_ip'} + }, + { + title: '操作', + key: 'remote', + //sort: true, + //header_render: 'filter_search_host', + render: 'message', + fields: {code: 'code', message: 'message'} + } + ], + + // 重载回调函数 + on_header_created: $app.on_table_host_header_created, + on_render_created: $app.on_table_host_render_created + // on_cell_created: $app.on_table_host_cell_created + }; + + $app.table_log = $tp.create_table(table_log_options); + cb_stack + .add($app.table_log.load_data) + .add($app.table_log.init); + + //------------------------------- + // 用户列表相关过滤器 + //------------------------------- + $app.table_log_filter_search_host = $tp.create_table_header_filter_search($app.table_log, { + name: 'search_host', + place_holder: '搜索:主机IP/名称/描述/资产编号/等等...' + }); + // $app.table_log_role_filter = $tp.create_table_filter_role($app.table_log, $app.role_list); + //$tp.create_table_header_filter_state($app.table_log, 'state', $app.obj_states, [TP_STATE_LOCKED]); + + $app.table_log_paging = $tp.create_table_paging($app.table_log, 'table-log-paging', + { + per_page: Cookies.get($app.page_id('system_log') + '_per_page'), + on_per_page_changed: function (per_page) { + Cookies.set($app.page_id('system_log') + '_per_page', per_page, {expires: 365}); + } + }); + $tp.create_table_pagination($app.table_log, 'table-log-pagination'); + + //------------------------------- + // 页面控件事件绑定 + //------------------------------- + $app.dom.btn_refresh_log.click(function () { + $app.table_log.load_data(); + }); + + cb_stack.exec(); +}; + +// $app.on_table_host_cell_created = function (tbl, row_id, col_key, cell_obj) { +// if (col_key === 'chkbox') { +// cell_obj.find('[data-check-box]').click(function () { +// $app.check_host_all_selected(); +// }); +// } else if (col_key === 'action') { +// // 绑定系统选择框事件 +// cell_obj.find('[data-action]').click(function () { +// var action = $(this).attr('data-action'); +// if (action === 'edit') { +// $app.dlg_edit_host.show_edit(row_id); +// } else if (action === 'account') { +// $app.dlg_accounts.show(row_id); +// } +// }); +// } else if (col_key === 'ip') { +// cell_obj.find('[data-toggle="popover"]').popover({trigger: 'hover'}); +// // } else if (col_key === 'account') { +// // cell_obj.find('[data-action="add-account"]').click(function () { +// // $app.dlg_accounts.show(row_id); +// // }); +// } else if (col_key === 'account_count') { +// cell_obj.find('[data-action="edit-account"]').click(function () { +// $app.dlg_accounts.show(row_id); +// }); +// } +// }; + +$app.on_table_host_render_created = function (render) { + // render.filter_role = function (header, title, col) { + // var _ret = ['
    ']; + // _ret.push('
    '); + // _ret.push('
    ' + title + '
    '); + // + // // 表格内嵌过滤器的DOM实体在这时生成 + // var filter_ctrl = header._table_ctrl.get_filter_ctrl('role'); + // _ret.push(filter_ctrl.render()); + // + // _ret.push('
    '); + // + // return _ret.join(''); + // }; + // render.filter_os = function (header, title, col) { + // return ''; + // }; + + // render.filter_host_state = function (header, title, col) { + // var _ret = ['
    ']; + // _ret.push('
    '); + // _ret.push('
    ' + title + '
    '); + // + // // 表格内嵌过滤器的DOM实体在这时生成 + // var filter_ctrl = header._table_ctrl.get_filter_ctrl('host_state'); + // _ret.push(filter_ctrl.render()); + // + // _ret.push('
    '); + // + // return _ret.join(''); + // }; + + // render.filter_search_host = function (header, title, col) { + // var _ret = ['
    ']; + // _ret.push('
    '); + // _ret.push('
    ' + title + '
    '); + // + // // 表格内嵌过滤器的DOM实体在这时生成 + // var filter_ctrl = header._table_ctrl.get_filter_ctrl('search_host'); + // _ret.push(filter_ctrl.render()); + // + // _ret.push('
    '); + // + // return _ret.join(''); + // }; + + render.log_time = function (row_id, fields) { + return tp_format_datetime(tp_utc2local(fields.log_time)); + }; + + render.user = function (row, fields) { + if (_.isNull(fields.user_surname) || fields.user_surname.length === 0 || fields.user_name === fields.user_surname) { + return fields.user_name; + } else { + return fields.user_name + ' (' + fields.user_surname + ')'; + } + }; + + render.message = function (row_id, fields) { + if(fields.code === TPE_OK) + return fields.message; + + return ''+fields.message+''; + }; + + // render.os = function (row_id, fields) { + // return fields.os; + // }; + // + +}; + +$app.on_table_host_header_created = function (header) { + $('#' + header._table_ctrl.dom_id + ' a[data-reset-filter]').click(function () { + CALLBACK_STACK.create() + .add(header._table_ctrl.load_data) + .add(header._table_ctrl.reset_filters) + .exec(); + }); + + // 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行) + // header._table_ctrl.get_filter_ctrl('search_host').on_created(); + // // header._table_ctrl.get_filter_ctrl('role').on_created(); + // header._table_ctrl.get_filter_ctrl('host_state').on_created(); +}; + diff --git a/server/www/teleport/static/js/teleport.js b/server/www/teleport/static/js/teleport.js new file mode 100644 index 0000000..ba33d5c --- /dev/null +++ b/server/www/teleport/static/js/teleport.js @@ -0,0 +1,280 @@ +"use strict"; + +// 构造一个回调函数栈,遵循先进后出的原则进行顺序调用。 +var CALLBACK_STACK = { + create: function () { + var self = {}; + + self.cb_stack = []; + + // 加入一个函数到栈上等待被调用 + self.add = function (cb_func, cb_args) { + if (!_.isFunction(cb_func)) { + console.error('need callable function.'); + } + cb_args = cb_args || {}; + self.cb_stack.push({func: cb_func, args: cb_args}); + + return self; // 支持链式调用 + }; + + // 加入一个函数到栈上等待被调用,但是该函数被调用前会等待指定时间(非阻塞式等待) + self.add_delay = function (delay_ms, cb_func, cb_args) { + // 先将要调用的函数入栈 + self.add(cb_func, cb_args); + // 然后加一个定时器来做等待 + self.add(function (cb_stack, cb_args) { + var _delay_ms = cb_args.delay_ms || 500; + setTimeout(function () { + cb_stack.exec(); + }, _delay_ms); + }, {delay_ms: delay_ms}); + + return self; // 支持链式调用 + }; + + self.exec = function (ex_args) { + if (self.cb_stack.length > 0) { + var cb = self.cb_stack.pop(); + var ex_ = ex_args || {}; + cb.func(self, cb.args, ex_); + } + }; + + self.pop = function () { + if (self.cb_stack.length === 0) { + return null; + } else { + return self.cb_stack.pop(); + } + }; + + // self.check_error = function() { + // if (self.cb_stack.length > 0) { + // console.error('callback stack have '+ self.cb_stack.length + ' function not called.'); + // } + // }; + + return self; + } +}; + +// Teleport核心JS +var $tp = { + server_host: window.location.hostname || '', + server_port: (window.location.port === "") ? 80 : parseInt(window.location.port), + + // Teleport页面应用对象,放置页面自身特有的属性和函数 + app: { + options: {}, + on_init: function (cb_stack) { + cb_stack.exec(); + } // should be overwrite. + } +}; + +$tp.init = function () { + $app.obj_states = [ + {id: TP_STATE_NORMAL, name: '正常', style: 'success'}, + {id: TP_STATE_DISABLED, name: '禁用', style: 'danger'}, + {id: TP_STATE_LOCKED, name: '临时锁定', style: 'warning'} + ]; + + // $app.user_states = [ + // {id: 1, name: '正常', style: 'success'}, + // {id: 2, name: '临时锁定', style: 'warning'}, + // {id: 3, name: '禁用', style: 'danger'} + // ]; + // + // $app.acc_states = [ + // {id: 1, name: '正常', style: 'success'}, + // {id: 2, name: '临时锁定', style: 'warning'}, + // {id: 3, name: '禁用', style: 'danger'} + // ]; + // + // $app.host_states = [ + // {id: 1, name: '正常', style: 'success'}, + // {id: 2, name: '禁用', style: 'danger'} + // ]; + // + // $app.policy_states = [ + // {id: 1, name: '正常', style: 'success'}, + // {id: 2, name: '禁用', style: 'danger'} + // ]; + + $app.host_types = [ + {id: 1, name: '物理主机', style: 'success'}, + {id: 2, name: '虚拟主机', style: 'info'}, + {id: 3, name: '路由器', style: 'info'}, + {id: 4, name: '其它', style: 'default'} + ]; + + $app.host_os_type = [ + {id: 1, name: 'Windows', style: 'success'}, + {id: 2, name: 'Linux/Unix', style: 'info'} + // {id: 3, name: '其它', style: 'info'} + ]; + + var cs = CALLBACK_STACK.create(); + cs.add($tp.app.init); + + if(!_.isUndefined($tp.assist)) { + cs.add($tp.assist.init); + } + + cs.exec(); +}; + +$tp.logout = function () { + window.location.href = '/auth/logout'; +}; + +$tp.ajax_post_json = function (url, args, success, error, timeout) { + var timeout_ = timeout || 3000; + var _args = JSON.stringify(args); + + $.ajax({ + url: url, + type: 'POST', + timeout: timeout_, + data: {_xsrf: tp_get_cookie('_xsrf'), args: _args}, + dataType: 'json', + success: success, + error: error + }); +}; + +// $app 是 $tp.app 的别名,方便使用。 +var $app = $tp.app; + +$app.add_options = function (options) { + _.extend($app.options, options); +}; + +$app.init = function (cb_stack) { + cb_stack.add($app.on_init); + + if (!_.isUndefined($app.sidebar_menu)) { + cb_stack.add($app.sidebar_menu.init_active); + } + + cb_stack.exec(); +}; + +$app.active_menu = function (menu_id) { + if (_.isUndefined($app._make_sidebar_menu)) { + $app._make_sidebar_menu = function (menu_id) { + var _menu = {}; + _menu.active_menu_id = menu_id; + _menu.current_expand_menu_id = ''; + + _menu.toggle_submenu = function (id_) { + var obj = $('#sidebar_menu_' + id_); + if (obj.hasClass('expand')) { + obj.removeClass('expand'); + $('#sidebar_submenu_' + id_).slideUp(300); + } + else { + obj.addClass('expand'); + $('#sidebar_submenu_' + id_).slideDown(300); + } + + if (_menu.current_expand_menu_id !== id_) { + if (_menu.current_expand_menu_id.length > 0) { + $('#sidebar_menu_' + _menu.current_expand_menu_id).removeClass('expand'); + $('#sidebar_submenu_' + _menu.current_expand_menu_id).slideUp(300); + } + } + + _menu.current_expand_menu_id = id_; + }; + + _menu.init_active = function (cb_stack) { + if (_menu.active_menu_id.length === 1) { + $('#sidebar_menu_' + _menu.active_menu_id[0]).addClass('active'); + $('#sidebar_menu_' + _menu.active_menu_id[0] + ' a').addClass('active'); + } else if (_menu.active_menu_id.length === 2) { + $('#sidebar_menu_' + _menu.active_menu_id[0]).addClass('active expand'); + $('#sidebar_menu_' + _menu.active_menu_id[0] + ' a').addClass('selected'); + $('#sidebar_submenu_' + _menu.active_menu_id[0]).show(); + $('#sidebar_menu_' + _menu.active_menu_id[0] + '_' + _menu.active_menu_id[1] + ' a').addClass('active'); + } + _menu.current_expand_menu_id = _menu.active_menu_id[0]; + + cb_stack.exec(); + }; + + return _menu; + }; + } + + $app.sidebar_menu = $app._make_sidebar_menu(menu_id); + + // 绑定侧边栏导航栏的退出按钮点击事件 + $('#btn-sidebar-menu-logout').click($tp.logout); + + $('#page-sidebar').mCustomScrollbar({ + axis: "y", + theme: 'minimal' + }); +}; + +$app.has_sidebar = function () { + return !_.isUndefined($app.sidebar_menu); +}; + +$app.page_id = function (default_value) { + if (!$app.has_sidebar()) + return default_value; + return $app.sidebar_menu.active_menu_id.join('_'); +}; + +$app.load_role_list = function (cb_stack) { + $tp.ajax_post_json('/user/get-role-list', {}, + function (ret) { + if (ret.code === TPE_OK) { + $app.role_list = ret.data; + } else { + console.error('无法获取角色列表:' + tp_error_msg(ret.code, ret.message)); + } + cb_stack.exec(); + }, + function () { + console.error('网络故障,无法获取角色列表!'); + cb_stack.exec(); + } + ); +}; + +$app.id2name = function(_list, _id) { + if (_.isUndefined(_list)) { + console.error('_list not loaded.'); + return undefined; + } + + for (var i = 0; i < _list.length; ++i) { + if (_list[i].id === _id) + return _list[i].name; + } + + return undefined; +}; + +$app.role_id2name = function (id) { + if (_.isUndefined($app.role_list)) { + console.error('role list not loaded, call load_role_list() first.'); + return undefined; + } + + for (var i = 0; i < $app.role_list.length; ++i) { + if ($app.role_list[i].id === id) + return $app.role_list[i].name; + } + + return undefined; +}; + +// 页面加载完成后,自动初始化核心JS功能。 +$(function () { + $tp.init(); +}); diff --git a/server/www/teleport/static/js/ui/common.js b/server/www/teleport/static/js/teleport/common.js similarity index 69% rename from server/www/teleport/static/js/ui/common.js rename to server/www/teleport/static/js/teleport/common.js index e61e86e..935e8e5 100644 --- a/server/www/teleport/static/js/ui/common.js +++ b/server/www/teleport/static/js/teleport/common.js @@ -1,8 +1,10 @@ -/*! ywl v1.0.1, (c)2015 eomsoft.net */ +//=================================================== +// basic and common functions. +//=================================================== + "use strict"; - -ywl.notify_error = function (message_, title_) { +$tp.notify_error = function (message_, title_) { var _title = title_ || ''; $.gritter.add({ //sticky:true, @@ -11,94 +13,26 @@ ywl.notify_error = function (message_, title_) { title: ' 错误:' + _title, text: message_ }); + console.error('错误', _title, message_); }; -ywl.notify_success = function (message_, title_) { +$tp.notify_success = function (message_, title_) { var _title = title_ || null; if (_title !== null) _title = ' ' + _title; $.gritter.add({ //sticky:true, class_name: 'gritter-success', - time: 10000, + time: 5000, title: _title, text: message_ }); }; - -function get_host_group_by_id(gid) { - var _all = {id: 0, group_name: '全部'}; - return _all; -} - -function get_user_info_by_id(user_id) { - var _all = {id: 0, nickname: '未知'}; - return _all; -} - -function get_event_code_by_id(e_id) { - var _all = {id: 0, e_desc: '未知'}; - var ret = ywl.assist.get_cache_by_id(CACHE_TYPE_EVENT_CODE, e_id); - - if (ret == null) - return _all; - else - return ret; -} -function get_current_system_group() { - return get_system_group_by_id(0); -} - -function get_system_group_by_id(gid) { - var _all = {id: 0, name: '全部'}; - var ret = null; - - $.each(system_group, function (i, group) { - if (group.id == gid) { - ret = group; - return false; - } - }); - - if (ret == null) - return _all; - else - return ret; -} - - -//function get_command_name_by_id(cmd_id) { -// return ywl.assist.get_cache_by_id(CACHE_TYPE_COMMAND, cmd_id); -//} - -//function notify_error(message_, title_) { -// var _title = title_ || ''; -// $.gritter.add({ -// sticky: true, -// class_name: 'gritter-error', -// time: 10000, -// title: ' 错误:' + _title, -// text: message_ -// }); -//} -//function notify_success(message_, title_) { -// var _title = title_ || null; -// if (_title !== null) -// _title = ' ' + _title; -// $.gritter.add({ -// //sticky:true, -// class_name: 'gritter-success', -// time: 10000, -// title: _title, -// text: message_ -// }); -//} - // 切换一个dom节点显示与否 -ywl.toggle_display = function (selector) { +$tp.toggle_display = function (selector) { var obj = $(selector); - if (typeof(obj) == 'undefined') + if (_.isUndefined(obj)) return; if (obj.is(':hidden')) { @@ -108,24 +42,73 @@ ywl.toggle_display = function (selector) { } }; +$tp.disable_dom = function (dom_selector, message) { + // 计算被禁用的DOM对象的位置和大小 + var obj = $(dom_selector); + var pad_left = parseInt(obj.css("padding-left"), 10); + var pad_right = parseInt(obj.css("padding-right"), 10); + var pad_top = parseInt(obj.css("padding-top"), 10); + var pad_bottom = parseInt(obj.css("padding-bottom"), 10); + var w = obj.width() + pad_left + pad_right; + var h = obj.height() + pad_top + pad_bottom; + + // var html = '
    '; + var html = []; + html.push('
    '); + var has_message = false; + if (!_.isUndefined(message) && !_.isNull(message) && message.length > 0) { + html.push('
    ' + message + '
    '); + has_message = true; + } + + $('body').append($(html.join(''))); + + $('#tp-dom-disable-overlay').css({ + 'left': obj.offset().left, 'top': obj.offset().top, + 'width': w, 'height': h + } + ); + + if (has_message) { + var obj_msg = $('#tp-dom-disable-message'); + var _pad_left = parseInt(obj_msg.css("padding-left"), 10); + var _pad_right = parseInt(obj_msg.css("padding-right"), 10); + var _pad_top = parseInt(obj_msg.css("padding-top"), 10); + var _pad_bottom = parseInt(obj_msg.css("padding-bottom"), 10); + var _w = obj_msg.width() + _pad_left + _pad_right; + var _h = obj_msg.height() + _pad_top + _pad_bottom; + + console.log(_w, _h); + + obj_msg.css({ + 'left': obj.offset().left + (w-_w)/2, 'top': obj.offset().top + (h-_h)*2/7 + // 'width': w, 'height': h + } + ); + + } + +}; + //====================================================== // Dialog-box for confirm operation. //====================================================== -ywl.dlg_confirm = function (cb_stack, cb_args) { +$tp.dlg_confirm = function (cb_stack, cb_args) { var self = {}; self._cb_stack = cb_stack; - self._title = cb_args.title || '操作确认:'; + self._title = cb_args.title || ' 操作确认'; self._msg = cb_args.msg || ''; self._btn_yes = cb_args.btn_yes || '确定'; self._btn_no = cb_args.btn_no || '取消'; self._fn_yes = cb_args.fn_yes || null; self._fn_no = cb_args.fn_no || null; self._dlg_id = _.uniqueId('dlg-confirm-'); - self._cb_args = cb_args.cb_args || {}; + self._cb_args = cb_args || {}; + self.dom = {}; self._make_message_box = function () { var _html = [ - '

    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

    @_$j#mftL&8K($ zVnS#|o{(2^C5TvfZ#8%U8$Gbs)Luo_I>J!?{JfbsIgvFQk_cVAs~dAD-~3WvF%G4% zo<;`F9=0z+ujZtMj@+FYa5E()i69|waDGoN8A>V1WG9JO&765Yj3r8{=)zNeW4;0V zW0Y41Z1M(LUKE?g^+4B#(Uc~15GpbN1%)QkK)5_$rM1Fjb1rs81*OjClijV^67Na% zg%6rU{je}YHwVcPDydMGQ+1o0H@9xYX)UaF@cULo2gb35j4I|dL7iL^4eWt1X|6Aa`m18fLk zI)j~0Di8@mPhU1{I~MuKdSd7!WS)R*&YLyRpwwOr+A4x~(1%c?Z8fJgd7yy$AVnjz ziK52#2KtiJD)eBwmv%DcUrCx18w*lpJW$2e``q8Du6rTvjkfoS-efzZluLT@D3Ky5 zW3`;`vEc}_JpxQjwfM=JR?(9ZhSWZq+pA-ZG}Z>?XA z96CuQ6<%*CrvA#%vRK{jBGY*Y#sVFr8Du|pSwfYv>q}%rNL+rTt6-tSnu4yu1WM>J z(8NwX5FOQH%T}5&QAiy*1rDv3Ky7@y6m%*N9n#ziqXWE%XAetFaru0sS>V(=y!dXe z`jQp0>LN;Zqs2U`#UO#HeN~l4P?|UtC=&&%(t0D0O&P@NEgLqsZ{FC@-r7{x0g`Cu z;Z_}brGAkbIWI3@MiP-zLe+I(8g5upw=2|Oe{3*H+quBBN{6<0i*?72YziH~ zR(H$RRA|LWKpKFW?PD(_q-fGq{WMyskgqQZV!D!bmLgsf62&Z8p@hEEgbdRo$dHUI zMj2bn$wnMk=Bjdq0r{?lANdIUNW9i#AZ_f$-hRF&Nzs93emY*woPW)pw46^cN&STg zs5%KV9-cKHAuqY=!TicbdZcRNgDzzTy&XL`Q5ExaTDIt5C+%8Vg22&E-aZFmLLDzRHLwYUcfK}kZer0z zRgqa@{|aXISPTa1AySq|Mpa9TfLeDFAaau(IFHVpVsJt&QAZyukHPNMl3lEwHZ+#Y zG94v_yk25mNs=ak`2guI3DKB5 zZ>fX~X627W1z%FcG#^TuT2@xtCzcXQ&n(eet%RVrQm=C))tz5Y;t`I)+=I$&!?_Iz zxtdO_MzJWyc6pw|L}fw;EqLt4=D@}B4kpXc%am%hat#}Ng61CE?FZHjKR$TfvCrG-jX;7e2qyp3DIxF}fKI#^n*tqes& z(T0$^*@~+!;fO@(FbyRAA;+JNSg1RsTh4kJZ=N87v36C{6LUD?CM#hpa8PO+|4R3?;x_XwA8$L zcbK&e&a$)Fn2K%N(k>pQVNMzul+@MjPSMgN9CFoZ7q{6V=e-^Bpb1r9>*We>wCja5 z-6Z_!g%K_XgD@S)u*wE+t4sBGy+m#pNlI3C=%q`RSLUTkZQIV8k-n#Sx3Px zDKbf5D_1-rX%Z(%WW%M=&l0XD`7Wz9w!;`FU%s@X@l5XI3T1;@8hAPsp)78CyO$+W zC5a65b}IDP2~AGbt&XeT(4G?a7H8D*$}cDptgeZn{<73BS?R4!88XFuxyHAf&xa>U zLSzf}N=pgRmM||+w%8dgrA#8)E29$}nn;2U(#=Dpea=T32s5b7u1b8j2=NZ?reonu zNz&YI-IfzIVX)YToq%?X+KmTHqT1qMZJ?KS2b?>ggOHMQqQ=gO`4v~fyrNeC2Fwy0 z6IFAQs&=wP+w&&WD0_{nsLM)FhNvHD)Z>^Yu@;nrF~Yg?PBW!);RS%1IB~_v|q{{G(@+;?1mnJ?uV{O8)}FL zqxuLxOA9_2PkS<=;n{K-&@f2(Y$8hzEuD9(Gvn5Fhm@(!Jf};7QG*n=U0@22%kgEt zdSpX1m!k(l{oE1>d65lote}!`zL)OQPkujjGjrC1D>z!|O0uBQ%Ho++!0!ooQd24@#<^d8`uU(%U zbgjReni7(ST1T^@T-koKqgc? zFdg=8$l=Pe&0;{&ISS52*%y5#*2CGrBoPVql@19I?uE3HVd;qWT_qKmu!ZSN?FKO& zhqfl>{wNRIG?Y10Rg~7eJhU_gq(BHp#gc^;3s+gqQq}?XNJer!k_}vZ%@yr-OSZ)% z8Jz5v5Z(sAh##Tq;B8d=1}E2}jSOZTF&Wx9-$snl{NRun03Z6>N^yAlRCiUF}| z`;i4R5IGWKTY#Fxy2AB1k0i>l98uO8j$SD7SYA$3Fbh}`4x5*0vdjHzhP$w3&N8tk z;(6{16*g}Cr+ZKxEIQWxU z(6Nt?chu8sEc`RSEGblyh_DyMst}1<8ab>9z32+pc)f{Ulk8^o8pIStRZ{Pi!DgC_ zV?w9|OzvK*oibC6dkN~mJt_gz1J4Km%`&hGnuwLjYC~WF#55=^C0+$Cgq1R1qAIL; zz!0?SnlG9tPP8s+eemY1fu zD&Bn<-lMyKt|p#W^F>3D1`upA!lncY6$PC)*26G(jXK=0y~WQ-FL6xLJJ5?%O_2*O zoha?buG~1}4HV~SxlqeNi=h4WSP$M_1p_@&Z{MX(RyS$sj7TM=L0fG#MKo)ja{g*G z@(x4L1C9N~B8poROqwn6)xgELR>K+7)X>miBvVJRpm8Z+?!_pV{JM@$`4Vj@P7G&l zyyA?Cl;R#mw8FL`$@(WK5DQY6V*!MB$%VQr%9_#rwg;f>g892IV4C17u=FgQ8od@d zqdD>f1MI-1QOpEG-UXgOxW~h3$d_$YOpbZhYfQfED z!n8=P7Zr;hb?Fza-1>O&7nr35jbb4OUXo;_vr*n;apue1kX3KAa{)Ga1freA0uF@{ zMNo2|oo$jy4Fk1skIF>d{Sb4=3Wsi?&RAP=Q`chjrPJwyGv!Z zIdM50w^o@u7GZ=n)%3(LAca6yWPJoo8Md_fL9r`!k2;;u2(1IAW5jHqc3huKob z)8%Bz37A!Z6AZeg%$Z=wJ7+*dwj1S854yDl3@GhhY}*7`tG%4|SV?9i1~&1nGE}(* z5|g|g*uceY+;qPD6RFE_v$6au7G)sEC~(W9W?gJ%@QqiC`0l6GgaCuC45e2w-Y)N^ zn08tM$MIuBUxzJ=09+u>WuV2&;{Ze_(-H5@^0GdfUM`2YQwjqYPYze)Qi8xOG7GM;BHsG^c2~HT72{n*egoA@W3%D3UO<} zw3gN_RYo#JD}xSC?5o6l>*|AouUVzHP8bip3F|5K=kPMT2)x%C^D2;nfG+|A5;osBX| z;LCvY-sf_0;^?h8-Y4%N6e|fwE6e3*!TYlLGCsLQTQs$AF;ox)sW%Q_U6JOsd}ew+ zlmZ+G18v#|EwxR`GVCcr)td~_bF^iLj@;%mVvKYmdkZ;&syT3Z78nUIYEiB2Q#52aASnmA zS7sSGY=?0-ZEkI-sc)^>#@LEfrCCNW+-q{d^kOTO)d zP=>RabX%53_7|Ph;NdVCQ17jbOk*6t-K1kj_n zOol4zAVDCM#1p5Ja6%vxB~qCQ6NU5bL@}B2(WHa=w-Ki~8=&zZD`zo^oq-(Wkg3Gv zny1M>QzpRBYSOTbbo@nfikFzvKv26$t>i|xsIM_WZ6QN*2DZaQh(%ul87Ub|Zi?8r zv8IJNj0%*x)aEWOlrAWh(h8S_MdflhR!hUAL#pLq4RFE<5=`%CM}4`K#R(8BiE$CH zRI17J#a1>lKhX_Acu|T@+*FD$ZeZf=wLWzMbzjcy9UUv@lw`-?xuwkvCfXqjd*hgX z$=zL@7?IHw*(li-s&V;z%nSGmGe1rPA4lFT1Kl5BM z4S*f%#Gg^t)bxR8jSNarOT<umN)8 z76O@R&~&2oR4YZ6P^4$6)e4`W#>jZn2d!@g$XtV%+a@>==CWY zZA1c6PG*wkGO1rl8nQsf9=bHcaXcB6L8}paz{#z^$f|1WcjWeO5zd3PdG|xH|BD1Fj@*(TaBPQU^fCS)^QoS#zePdQN_oJcnWikKTHF8 z>YeAfO{KY}y`h|@E@?n&>NnRmbZ9`!GK=ei>GphRRkYf~+P z(hw{66)+IyRy*3-QMHbyO-=0`4V&m|J^TSD>o7ZBvm5jAC~bJ@bHVq161gZ~or`*; zNmi-+)JUD&*i2dhK7CURzq~yB_v97i zeSiC~yxAf@&ln@b1|-nm`cDog7!DV}FA=N7UpPl0sxKA=2Ua7`ABcj!=kQ#UpI2R% zFZvph$NGG6aD9H>fu?*h?uz{UgRjH$jrn(SY1^I{96o~4|g8Xrf@YmycQ-L_Nxgfv#GCa2z6oxM^$TK<$ME_d~^1{~_i11AX zdDRaWh+~fwh3dQ2e!h%EV3WeBRm^W@uq3C;4VPW4} z3dR1%3Jdx^Qz%-N4$I$P1I%1Dtl&`FFmdSZ!-pNXez-XN{^5CjcMKQjj6y#6O(X}u zylYxT-rjL}<4Q&p?MF&3K8J@KJ-Fu!$z7-59+YyaSosr`KTG*#%CAuVTIDw?zeV{w zlT|Dy7rQT`8<{|n{+ukw#6|7GPDJ}TQYM)^~f zKS%lVmA^vy)yls_`R&Soo$`B>A5s1rm4BV`_bdM{<$qZDpH%)6%Kx(RzpeZqEB~Km4CkS7b}0Y^6QnqN%`BA->Lk7@^>r0Px&_~|Gmn;SNRVr z|1sr1rTlr2*%KF--p9Ws{*LxiBBLGkM*ZJ%3q}D6^KjMHdN(0}Z;GcBBk4yvK zsNkP*z>`u*?bZ0yd`91G}G}cUIlsFnQgN_8zUIERS6#^V6;B-v)%>_g589Iy?Oi+$=Hq z4;|mf(V`DJEB*3YWj^J7{3u$sO8GlR#lQ9z8E-r(^O>OHHQ)CAQuf$X6))cw;$Xjo zzd*&y+6gi4Mj2Y7;tN!{``;(yD|NgqR_yo7_)As1%vFd(0U3X}iZ`#9FC0=6l};7^ zn9BdyZL(%psd(KRI)0CezeT|t9TGo%Dn6$2Z@E;~;CdAwcf{{k@x3=B*GE2OcJEXm z;pdY3ca@4i_Kb|b>sm=~x}Qg>^cqE1D=yb9lnEcm0AJ^TpM&~4>6voU`CsaQp9gsQ zw6yFMdRP85{7wh_1qxpC`>X^!zZ!DDmnrxW3XbNb^h5p({}uETKTd{GAY zs~qqnGr;e5z!ztz{~I0f69G^BrR(qHmm3`LZ&dJ_{+;~tUI+Yj8Q|}A!0%V^>G zlliL<@T2iB9X_Wx;78p*uzV2mII!@LmV}I0c^$|N9*9 z69J!(e;R(gkUx$8+Z^zdGSugO2mF)_^*QK(7ax-N*Z9nL)aQ#1_`D48-*mv|1Ad_X zdd>l#_u+x*`2`1jeg^nII^YX3z`yK(FI4d9#+MOSB-8(}4EaxWzz@#=zt90cB13)F zIpB*jDuju)E$f8&53uIl5=UsL^`9PlI3z>g$E;5X_@{U$$(A_u&TC0D{vbHI`Wg2mF*Y^`ENX-|v8*3i#Jj z(EoTvKOc3#PfG(oLBT)nfS<1F@09=A&h|A2{EQ6n-*>>zRPavz((7u!bikhr_<`v2 zPY(E5Y3ifxt}i>_&&vQ`__}2NHB^0c|Eq4YyfF^=*%{!cJK*Q2`e^)E8LR#(cfik8 z`KNu*>p=HC=mpPdf)`HuXZ_3v`PFL2af+r#Ip{P#NG zmnisj^6Ewhdt)!s)O@aq6S9RJe6 zf8GIKt?HxcLF03}%Kwl9zDCtY!|VPnRq#J`z}Esk)p)J@l3RW2pLUb-=d+p2jbgY}vbJD|+)f;J2iKpQGTT4)|?cpI48=OZwHQ`oGNq zza4-?&m)td$v!E6?@R-)$94T$I{3>oi#NI@ZWL3PXv4_`BRQO==XvH{wcuI`jkwS>w^Rb{BYEt9q|9tm%2Wn zH~ziifd6%0YW>GxXv|AqpUm&S0emWXHCMrpalrp?8u)n%ewqV*;wuq> z0lvZkKN;`?@o%jIeo6-T76<%PRUd74*7F2ie~$xx8sNv_pN7|RR>SXhz)#Nrf0G0L z7Qox-S<7kA5C86Uz~2gZS}$PY0)*DfG`!Q^atGiC!sla-{GWWAq-V`1^Hn{NKNtCw z1HS3Hf$9I74tW3dl74hMOA`5W=s5-dyc&<9fOoFH6QHioe>?IoyVTh+0e-6kej?zV_@s(xeEJ>mlN3A?BjB9t1#fV`PfiOj z>3P2cehT38@XtA3Xnfx5fS;=J*YH|@06bUmK?nRazz@XlPdebItNiu&sO7TG|9cMj z846y@H7ESf9Pl$U!2jL>f3AYp{9;gN;iv2KiUWQY;Hka3{t5Xh-y6}H%r92}p75{X zo%B4>0e@bG{7W71Mh5tm4*1!CC;Ci>&-D)YIT_&F9q@BAzTS70z9|Iz9AMIG?VRsLE&>weJqzt#c2BLn={`|ITydZ#dxJogx2~4*1(Lf_uUp+jvYPFbHDE&=^`SZtDRf!vv|8?aT4*Tfs zqpNB}t@7Wd{I3qXZtIAu1~F{7^e-9y!8LhRP2ye3e_r{sN3`7Zx5|y;D&>Dx`GrL? z{<5MEZvSm%tGHMB$CO_?^64?ZsN5>vtNh<7zq(k)-(GxQ-*+l^ia#iS{V4f-|ER$C zzg*cNURC}TCGz=6&Jbr zzft+arpV{FPWi}>S}NZvURC~^r^@H!%I}*dpYx`V|KiHZ>%_In zFPb5rZ&m)pncrA&e&tQ#F6GZVS3ZAI`Kx9vdwyc&t>VkdZ#hpszo7hpvFO7EmA8qP zmH*D!@_E)A=^vak<4?a{d%LKeEB)t{ADnmT-Y>7cOB9w$|6b*Cxq0n9wTwGWEV zDc`eDK95}V{AVYueMmg2{GE&C^ROi^fA(8zJ|P}a{uLEZ6@GNhBVy!I=|7?T?q%br z^sRYROkOViZ!CXg$22_eUGcU3GuJ#M%2&>L<>u8N7SFA`=3~#V{(#uCYRq5PtiD}L zy!dDDd~Wr-#6uT<^VVA~zCm2P+ViDXFMg}|((0RT+rRn^qIS*Q&)&Z}D!#Dhp~vrD z-76Naz2R+dU)?P}uy)Ze04oYBZ~Wc|F1}otm0#L2YfY>8V&#)#wybFu>|)D*sO9 ze^U8hQU1@BZ+t?I%>ByO`RDu`267n4VIYTr90qb2$YCIdfuV(gb7q&letmu4l(O*D za8YYbrhnnZ;c;Q3ucxfFzHbgW^=07)i+9%SJg1sJDvrzHqWkbQ!dQqxeC^d`SC892 zp}M1kz8B`*)#2^g)zKZtUHGE!2pKNum$zT0;~T$`u-ISi+ZVv)Rk3(y2W|*Qr06T! zue#;xGF?&~u40Rs`f5O&Tf2I3auQwJBJTjC#8o=c!(WI)Otp@o&s#@A`v_`-j-z{3 zqdoZ4S|W!QN187w|Lr;z)$(& z8KYs3*QBJq_9XSS8h)oQ&z^F199I^`xJ@@C5~xFx+O*%1mfWU0Y^lBuzJiFVa3B$l zTSC##QT3s4N_@~t@7a%NK0z-6OKgnZ7XEipEtf5-yr8pg{X*UY|jlrA4MIq zMbQmM9TfSzEfSZpd3qU7hi$Q~xKTDnphqYYx9QToMf7~k_NRjmxk?E(aEvTs91|DyFC5?6?jM|L~ONqo+5F7RY%?FacW20SwY59&u*(I?cSMM3>4B7lpjkohy}F{m1Lh@N-b zI^cPVU`7Qv|MEJp7B`&l))X7)!Z7hdK7CDB+%gqkKaPcP6)e7j`^Bm8-5uiaRD5JJ zj3##Y;=R55I_T>NbYHmm_&hOTqxf51op>OB3oZp*v8+8LJ~(VsNZdZ6O?g&-1nEkzx;F9d(mnESt_|pb0EUzImomci9E)!<%# zS;@!8<6Zz&i67=~l(qROUfe$mFCN04x`|uGO9j;KhYIV&Q^T6Xt;2!UcEYOo!*ITD zQT%Oqo49#oqxeK|t2kb~B`CfgU^oYTl&R|W9gF^vd)acr^as+ zPfci`FP?~RPr?@oAfekm-MC@7CxlkLGN~mZJ}{Fm?-TvAH`5(vKbtG4R9t z7){B1N8wQ%Zo-Xj^i?!m;r>9OI5rv$GK46W;5QDd6URp(|7L$QCSI7dQ9L^xNbvCo zh@PCm*Vl3QOEZw~j4i}DbTc5w{dERzW^FZhx6_9V#XYmP;(kXWp!??73%zTY_#Fy8 zuoal+4@!u~hSl>YuEb}D0kM|@y9ak*qf|iraadDBv!@f}_M_q4JL1|gaeSE$-)(wg zEce>&6Xn&4;z4wZ=?TWe;_bspa@{!GPhh{BhUV==j>le);-ccN;TTWEuO^CNOiuc~ zK;Yuga6*z#{C;|^xN*jou)NLDCq6b~V_R)Sb6c%=WCkkMiEPlx;eGR*4%U#pl2~&yC=Idu4?6m3wh}QH%I= zk;qpU<$Y&_y07k@qC#=-2COIL(>;UYS0hOFeKG;~Hw}0{0QcWSfGUgqMJkI2k#Yzr zNWYof1MK$QLg9XP`);N8BGALYn%^o)d=K~ea{6 z#5+dDK^4q(9~@UG4%3^3c=OSbxV@h)8f9Ai(JX2T2S0QkW%=@XVq~4T38W}KJsLEK zPY~eJMX>lQqZ17B@L1gJo_Kt0EVG8@{?AWhvGSYg+r&rb#KUcTDWiC5uE!x_b?`Mg^Zm^aak*|Dx6b6nj zk7wDKDEG$`>7!RBxG5^`pN*cPh0ual)Bff^MnUdMrv3G3;B;5w^}miqZ{3bp^3~P; zrjJXDiuacU#I@Ak_ak*UeUP<=uD=vNFKHA1U9ySLh3k-CEolzHyKywLr-XQLwB%9w z^vTg6qI;+W`NrQ%@FA3#OnV!p-AhDujNOADBsiIN&*)V$a6f>KApt~vfI-;&Q-_O1 zL%oTZe~f9^j*kRb!uR+XpoZScmm*SpcMP;7zJFAFcAP!0{~N=k#l-u$^DOcDK3tl3 z=<{5Wr`hedSHX`vTR$>Z(d5&!=&h*uJo`Nbc`dG;>t!u81b$XQf;X0pf! zR~#QFuS=$e?Vq6PP`i&l`XTN+XLCf8u%z3A<5AMrk=^iZ;+N-u;l(@0Gw5yO>4tFn z8jZMPd<)dolB?GqZrJri2R=ccqN!6sguX}@9p z^XGD>^+SB_KT3HXdvF-s{r`m>Qu#@w_xJ?*<`~AGzs^L-FH$-+Oni5O)ON)4bL@55 zKe0|cKG7=mcXRBe{%wvF{XX%^99-Hh-ZPhL@z7k9{7LNH$>(npB^q{cBBy^Elz8Z^ zSoz9#u*so`Jk}lqaUZ+32=zbkHgXTX2e8HU@!l}Y+)q!ct7~d+7f(*6ulS1Vr?#zc zg03mPJq_Qm7eAP`$=u#9o}b2_lN2vZYZ3pPp{{zSW{3x8~Od&=*QW=7gI zf51EYnOS|$Ik(Q8JGactB}w59ddDQHr@iv^xxE8@8>~;*@@}!bhmVCK+i){L8dB$t zqjrI`Q~tg!B|(&;xM7@h;_s)csCX|stlZBI=TT+<@VKQ5=UT5&;httaHEz1~0@a=N zQ*2XuK>|8+bY!LVHcPJ=%|ZTjOoWTB^?xLCP8kzvvF_X1YFx6wx_CVIJg*!-iz;!N zIv>x?#@~;p5KkS$?#|_7@qhVPdXOHsj?!JjdT>0Qyi2#Y8ub40%6P2_J|8cq>-Y&& z6UZtvRBApLZ+*WkTLc+SAycozG zZrwP6KX-q)b=w3=$lEcF#5;T}eh?#PZ1FTKUL*_mBi1<|vo0&8*7|4yk2O%E;WN^g zJ{7k=qqlUU)VuiQL~3pXdnM|axHi0&nC*Lyqj+vC$KbYow7~0^-F52NX2sQHoZCP zM%G@$T9IALvfH={b-qr%73El#qkS<;TsqRNlv4M~Hon&G2ULp6Vo>W8qSk zIC3n~(TdWomR2{QuSmCBmu}nDNrj<{3jNLOhgjK{N#Js<$kDl6By^-?WY$jzu|^=}5J=t~F_$v7K2c@*J*Ot`zIL#aCUH&$?|p>agXgxh zqS9!6WIOZa<|oKy`HOL!*=LXEOnQ}%_H`2?T;IOU+Uq8;{CaxiGpfb(XIl3?NOfQN zwyO9yDt?s2r8}$Qn^gQHTR*^FIe+G3=~+J7&x_@>+*psU3Mw~sV zx@>Axyg0nL^eE$UX|ny> zH&qZMzl)FdeSCBu z;IvT-NRt25j`HtI>b}z1cxgxL?-XeHVKICRnegF`)_?fSJl|94K z!n1s=$kBaHT))6}!4ZWAcj8+wT3H+Uj`YGrxfeajcR+GLfxM`a*GOW&ES|o~$I`oe zEdGl<)yv>Cz4^N2jq_Pme3^=GA+dYvHXNzb`DmZP$I=CIyig>U%J0khSdnAlQU2{b zvkgaF#z;QcIoo3$KbcbfoT#4XW08*3<)!<~X_Hr5zani#B>4^2MU!d7>2i{|FNn8t zEdG`38)SJW>(7&AB`)jD$&1>$dbL0QSUGtbQg-o2ONsZ{{#7{BzHfO zn0zV6legsvpS(RM;WWA*T5tVhXUWi;$+CjqH_-2mAF#GWN7XMHQD;jhnvBQok#3~W$ga!LN<%qnM@rEmgK|umQ1h({Uwtr{wF_Dx+8nfCgBrH0ZtH(HL^qsyF)&2E&5|BOBTZge

  • popT;SkCpsBN;iv8$@@vK=0XbumyGxoL;}C- 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�vY{~%~bb=t;K$r4>9 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≷IuD(S7|A$8JzZHqiLU8LA7me%xC-~ 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ʬi=I2q-*~|j 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 literal 0 HcmV?d00001 diff --git a/server/www/packages/packages-darwin/x64/PIL/.dylibs/libtiff.5.dylib b/server/www/packages/packages-darwin/x64/PIL/.dylibs/libtiff.5.dylib new file mode 100644 index 0000000000000000000000000000000000000000..7b89182d87314fd5666db3e48be6f974783ae06b GIT binary patch literal 1242044 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\QdlsG)*P(d*3TTL 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 h`c&aO6y23TD1 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