@agent-webui/ai-desk-python-win32-x64 1.0.29-beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3340) hide show
  1. package/README.md +3 -0
  2. package/package.json +20 -0
  3. package/python/DLLs/_asyncio.pdb +0 -0
  4. package/python/DLLs/_asyncio.pyd +0 -0
  5. package/python/DLLs/_bz2.pdb +0 -0
  6. package/python/DLLs/_bz2.pyd +0 -0
  7. package/python/DLLs/_ctypes.pdb +0 -0
  8. package/python/DLLs/_ctypes.pyd +0 -0
  9. package/python/DLLs/_ctypes_test.pdb +0 -0
  10. package/python/DLLs/_ctypes_test.pyd +0 -0
  11. package/python/DLLs/_decimal.pdb +0 -0
  12. package/python/DLLs/_decimal.pyd +0 -0
  13. package/python/DLLs/_elementtree.pdb +0 -0
  14. package/python/DLLs/_elementtree.pyd +0 -0
  15. package/python/DLLs/_hashlib.pdb +0 -0
  16. package/python/DLLs/_hashlib.pyd +0 -0
  17. package/python/DLLs/_lzma.pdb +0 -0
  18. package/python/DLLs/_lzma.pyd +0 -0
  19. package/python/DLLs/_multiprocessing.pdb +0 -0
  20. package/python/DLLs/_multiprocessing.pyd +0 -0
  21. package/python/DLLs/_overlapped.pdb +0 -0
  22. package/python/DLLs/_overlapped.pyd +0 -0
  23. package/python/DLLs/_queue.pdb +0 -0
  24. package/python/DLLs/_queue.pyd +0 -0
  25. package/python/DLLs/_socket.pdb +0 -0
  26. package/python/DLLs/_socket.pyd +0 -0
  27. package/python/DLLs/_sqlite3.pdb +0 -0
  28. package/python/DLLs/_sqlite3.pyd +0 -0
  29. package/python/DLLs/_ssl.pdb +0 -0
  30. package/python/DLLs/_ssl.pyd +0 -0
  31. package/python/DLLs/_testbuffer.pdb +0 -0
  32. package/python/DLLs/_testbuffer.pyd +0 -0
  33. package/python/DLLs/_testcapi.pdb +0 -0
  34. package/python/DLLs/_testcapi.pyd +0 -0
  35. package/python/DLLs/_testclinic.pdb +0 -0
  36. package/python/DLLs/_testclinic.pyd +0 -0
  37. package/python/DLLs/_testclinic_limited.pdb +0 -0
  38. package/python/DLLs/_testclinic_limited.pyd +0 -0
  39. package/python/DLLs/_testconsole.pdb +0 -0
  40. package/python/DLLs/_testconsole.pyd +0 -0
  41. package/python/DLLs/_testimportmultiple.pdb +0 -0
  42. package/python/DLLs/_testimportmultiple.pyd +0 -0
  43. package/python/DLLs/_testinternalcapi.pdb +0 -0
  44. package/python/DLLs/_testinternalcapi.pyd +0 -0
  45. package/python/DLLs/_testlimitedcapi.pdb +0 -0
  46. package/python/DLLs/_testlimitedcapi.pyd +0 -0
  47. package/python/DLLs/_testmultiphase.pdb +0 -0
  48. package/python/DLLs/_testmultiphase.pyd +0 -0
  49. package/python/DLLs/_testsinglephase.pdb +0 -0
  50. package/python/DLLs/_testsinglephase.pyd +0 -0
  51. package/python/DLLs/_tkinter.pdb +0 -0
  52. package/python/DLLs/_tkinter.pyd +0 -0
  53. package/python/DLLs/_uuid.pdb +0 -0
  54. package/python/DLLs/_uuid.pyd +0 -0
  55. package/python/DLLs/_wmi.pdb +0 -0
  56. package/python/DLLs/_wmi.pyd +0 -0
  57. package/python/DLLs/_zoneinfo.pdb +0 -0
  58. package/python/DLLs/_zoneinfo.pyd +0 -0
  59. package/python/DLLs/libcrypto-3-x64.dll +0 -0
  60. package/python/DLLs/libcrypto-3-x64.pdb +0 -0
  61. package/python/DLLs/libffi-8.dll +0 -0
  62. package/python/DLLs/libssl-3-x64.dll +0 -0
  63. package/python/DLLs/libssl-3-x64.pdb +0 -0
  64. package/python/DLLs/pyexpat.pdb +0 -0
  65. package/python/DLLs/pyexpat.pyd +0 -0
  66. package/python/DLLs/select.pdb +0 -0
  67. package/python/DLLs/select.pyd +0 -0
  68. package/python/DLLs/sqlite3.dll +0 -0
  69. package/python/DLLs/sqlite3.pdb +0 -0
  70. package/python/DLLs/tcl86t.dll +0 -0
  71. package/python/DLLs/tk86t.dll +0 -0
  72. package/python/DLLs/unicodedata.pdb +0 -0
  73. package/python/DLLs/unicodedata.pyd +0 -0
  74. package/python/DLLs/winsound.pdb +0 -0
  75. package/python/DLLs/winsound.pyd +0 -0
  76. package/python/LICENSE.txt +445 -0
  77. package/python/Lib/__future__.py +147 -0
  78. package/python/Lib/__hello__.py +16 -0
  79. package/python/Lib/__phello__/__init__.py +7 -0
  80. package/python/Lib/__phello__/ham/__init__.py +0 -0
  81. package/python/Lib/__phello__/ham/eggs.py +0 -0
  82. package/python/Lib/__phello__/spam.py +7 -0
  83. package/python/Lib/__pycache__/__future__.cpython-313.pyc +0 -0
  84. package/python/Lib/__pycache__/_colorize.cpython-313.pyc +0 -0
  85. package/python/Lib/__pycache__/_compat_pickle.cpython-313.pyc +0 -0
  86. package/python/Lib/__pycache__/_compression.cpython-313.pyc +0 -0
  87. package/python/Lib/__pycache__/_markupbase.cpython-313.pyc +0 -0
  88. package/python/Lib/__pycache__/_opcode_metadata.cpython-313.pyc +0 -0
  89. package/python/Lib/__pycache__/_weakrefset.cpython-313.pyc +0 -0
  90. package/python/Lib/__pycache__/ast.cpython-313.pyc +0 -0
  91. package/python/Lib/__pycache__/base64.cpython-313.pyc +0 -0
  92. package/python/Lib/__pycache__/bisect.cpython-313.pyc +0 -0
  93. package/python/Lib/__pycache__/bz2.cpython-313.pyc +0 -0
  94. package/python/Lib/__pycache__/calendar.cpython-313.pyc +0 -0
  95. package/python/Lib/__pycache__/colorsys.cpython-313.pyc +0 -0
  96. package/python/Lib/__pycache__/compileall.cpython-313.pyc +0 -0
  97. package/python/Lib/__pycache__/configparser.cpython-313.pyc +0 -0
  98. package/python/Lib/__pycache__/contextlib.cpython-313.pyc +0 -0
  99. package/python/Lib/__pycache__/copy.cpython-313.pyc +0 -0
  100. package/python/Lib/__pycache__/copyreg.cpython-313.pyc +0 -0
  101. package/python/Lib/__pycache__/csv.cpython-313.pyc +0 -0
  102. package/python/Lib/__pycache__/dataclasses.cpython-313.pyc +0 -0
  103. package/python/Lib/__pycache__/datetime.cpython-313.pyc +0 -0
  104. package/python/Lib/__pycache__/decimal.cpython-313.pyc +0 -0
  105. package/python/Lib/__pycache__/dis.cpython-313.pyc +0 -0
  106. package/python/Lib/__pycache__/enum.cpython-313.pyc +0 -0
  107. package/python/Lib/__pycache__/filecmp.cpython-313.pyc +0 -0
  108. package/python/Lib/__pycache__/fnmatch.cpython-313.pyc +0 -0
  109. package/python/Lib/__pycache__/fractions.cpython-313.pyc +0 -0
  110. package/python/Lib/__pycache__/functools.cpython-313.pyc +0 -0
  111. package/python/Lib/__pycache__/getpass.cpython-313.pyc +0 -0
  112. package/python/Lib/__pycache__/gettext.cpython-313.pyc +0 -0
  113. package/python/Lib/__pycache__/glob.cpython-313.pyc +0 -0
  114. package/python/Lib/__pycache__/gzip.cpython-313.pyc +0 -0
  115. package/python/Lib/__pycache__/hashlib.cpython-313.pyc +0 -0
  116. package/python/Lib/__pycache__/heapq.cpython-313.pyc +0 -0
  117. package/python/Lib/__pycache__/hmac.cpython-313.pyc +0 -0
  118. package/python/Lib/__pycache__/inspect.cpython-313.pyc +0 -0
  119. package/python/Lib/__pycache__/ipaddress.cpython-313.pyc +0 -0
  120. package/python/Lib/__pycache__/keyword.cpython-313.pyc +0 -0
  121. package/python/Lib/__pycache__/linecache.cpython-313.pyc +0 -0
  122. package/python/Lib/__pycache__/locale.cpython-313.pyc +0 -0
  123. package/python/Lib/__pycache__/lzma.cpython-313.pyc +0 -0
  124. package/python/Lib/__pycache__/mimetypes.cpython-313.pyc +0 -0
  125. package/python/Lib/__pycache__/nturl2path.cpython-313.pyc +0 -0
  126. package/python/Lib/__pycache__/numbers.cpython-313.pyc +0 -0
  127. package/python/Lib/__pycache__/opcode.cpython-313.pyc +0 -0
  128. package/python/Lib/__pycache__/operator.cpython-313.pyc +0 -0
  129. package/python/Lib/__pycache__/optparse.cpython-313.pyc +0 -0
  130. package/python/Lib/__pycache__/pickle.cpython-313.pyc +0 -0
  131. package/python/Lib/__pycache__/pkgutil.cpython-313.pyc +0 -0
  132. package/python/Lib/__pycache__/platform.cpython-313.pyc +0 -0
  133. package/python/Lib/__pycache__/py_compile.cpython-313.pyc +0 -0
  134. package/python/Lib/__pycache__/queue.cpython-313.pyc +0 -0
  135. package/python/Lib/__pycache__/quopri.cpython-313.pyc +0 -0
  136. package/python/Lib/__pycache__/random.cpython-313.pyc +0 -0
  137. package/python/Lib/__pycache__/reprlib.cpython-313.pyc +0 -0
  138. package/python/Lib/__pycache__/selectors.cpython-313.pyc +0 -0
  139. package/python/Lib/__pycache__/shlex.cpython-313.pyc +0 -0
  140. package/python/Lib/__pycache__/shutil.cpython-313.pyc +0 -0
  141. package/python/Lib/__pycache__/signal.cpython-313.pyc +0 -0
  142. package/python/Lib/__pycache__/socket.cpython-313.pyc +0 -0
  143. package/python/Lib/__pycache__/socketserver.cpython-313.pyc +0 -0
  144. package/python/Lib/__pycache__/ssl.cpython-313.pyc +0 -0
  145. package/python/Lib/__pycache__/string.cpython-313.pyc +0 -0
  146. package/python/Lib/__pycache__/stringprep.cpython-313.pyc +0 -0
  147. package/python/Lib/__pycache__/struct.cpython-313.pyc +0 -0
  148. package/python/Lib/__pycache__/subprocess.cpython-313.pyc +0 -0
  149. package/python/Lib/__pycache__/tarfile.cpython-313.pyc +0 -0
  150. package/python/Lib/__pycache__/tempfile.cpython-313.pyc +0 -0
  151. package/python/Lib/__pycache__/textwrap.cpython-313.pyc +0 -0
  152. package/python/Lib/__pycache__/threading.cpython-313.pyc +0 -0
  153. package/python/Lib/__pycache__/token.cpython-313.pyc +0 -0
  154. package/python/Lib/__pycache__/tokenize.cpython-313.pyc +0 -0
  155. package/python/Lib/__pycache__/traceback.cpython-313.pyc +0 -0
  156. package/python/Lib/__pycache__/types.cpython-313.pyc +0 -0
  157. package/python/Lib/__pycache__/typing.cpython-313.pyc +0 -0
  158. package/python/Lib/__pycache__/uuid.cpython-313.pyc +0 -0
  159. package/python/Lib/__pycache__/warnings.cpython-313.pyc +0 -0
  160. package/python/Lib/__pycache__/weakref.cpython-313.pyc +0 -0
  161. package/python/Lib/_aix_support.py +108 -0
  162. package/python/Lib/_android_support.py +192 -0
  163. package/python/Lib/_apple_support.py +66 -0
  164. package/python/Lib/_collections_abc.py +1182 -0
  165. package/python/Lib/_colorize.py +119 -0
  166. package/python/Lib/_compat_pickle.py +251 -0
  167. package/python/Lib/_compression.py +162 -0
  168. package/python/Lib/_ios_support.py +71 -0
  169. package/python/Lib/_markupbase.py +396 -0
  170. package/python/Lib/_opcode_metadata.py +343 -0
  171. package/python/Lib/_osx_support.py +579 -0
  172. package/python/Lib/_py_abc.py +147 -0
  173. package/python/Lib/_pydatetime.py +2639 -0
  174. package/python/Lib/_pydecimal.py +6351 -0
  175. package/python/Lib/_pyio.py +2704 -0
  176. package/python/Lib/_pylong.py +363 -0
  177. package/python/Lib/_pyrepl/__init__.py +19 -0
  178. package/python/Lib/_pyrepl/__main__.py +10 -0
  179. package/python/Lib/_pyrepl/_minimal_curses.py +68 -0
  180. package/python/Lib/_pyrepl/_threading_handler.py +74 -0
  181. package/python/Lib/_pyrepl/base_eventqueue.py +110 -0
  182. package/python/Lib/_pyrepl/commands.py +492 -0
  183. package/python/Lib/_pyrepl/completing_reader.py +295 -0
  184. package/python/Lib/_pyrepl/console.py +229 -0
  185. package/python/Lib/_pyrepl/curses.py +33 -0
  186. package/python/Lib/_pyrepl/fancy_termios.py +82 -0
  187. package/python/Lib/_pyrepl/historical_reader.py +419 -0
  188. package/python/Lib/_pyrepl/input.py +114 -0
  189. package/python/Lib/_pyrepl/keymap.py +213 -0
  190. package/python/Lib/_pyrepl/main.py +59 -0
  191. package/python/Lib/_pyrepl/mypy.ini +29 -0
  192. package/python/Lib/_pyrepl/pager.py +175 -0
  193. package/python/Lib/_pyrepl/reader.py +764 -0
  194. package/python/Lib/_pyrepl/readline.py +599 -0
  195. package/python/Lib/_pyrepl/simple_interact.py +180 -0
  196. package/python/Lib/_pyrepl/trace.py +21 -0
  197. package/python/Lib/_pyrepl/types.py +10 -0
  198. package/python/Lib/_pyrepl/unix_console.py +852 -0
  199. package/python/Lib/_pyrepl/unix_eventqueue.py +76 -0
  200. package/python/Lib/_pyrepl/utils.py +83 -0
  201. package/python/Lib/_pyrepl/windows_console.py +692 -0
  202. package/python/Lib/_pyrepl/windows_eventqueue.py +42 -0
  203. package/python/Lib/_sitebuiltins.py +91 -0
  204. package/python/Lib/_strptime.py +800 -0
  205. package/python/Lib/_threading_local.py +120 -0
  206. package/python/Lib/_weakrefset.py +205 -0
  207. package/python/Lib/abc.py +188 -0
  208. package/python/Lib/antigravity.py +17 -0
  209. package/python/Lib/argparse.py +2690 -0
  210. package/python/Lib/ast.py +1865 -0
  211. package/python/Lib/asyncio/__init__.py +47 -0
  212. package/python/Lib/asyncio/__main__.py +207 -0
  213. package/python/Lib/asyncio/base_events.py +2075 -0
  214. package/python/Lib/asyncio/base_futures.py +67 -0
  215. package/python/Lib/asyncio/base_subprocess.py +319 -0
  216. package/python/Lib/asyncio/base_tasks.py +94 -0
  217. package/python/Lib/asyncio/constants.py +41 -0
  218. package/python/Lib/asyncio/coroutines.py +109 -0
  219. package/python/Lib/asyncio/events.py +882 -0
  220. package/python/Lib/asyncio/exceptions.py +62 -0
  221. package/python/Lib/asyncio/format_helpers.py +84 -0
  222. package/python/Lib/asyncio/futures.py +425 -0
  223. package/python/Lib/asyncio/locks.py +617 -0
  224. package/python/Lib/asyncio/log.py +7 -0
  225. package/python/Lib/asyncio/mixins.py +21 -0
  226. package/python/Lib/asyncio/proactor_events.py +896 -0
  227. package/python/Lib/asyncio/protocols.py +216 -0
  228. package/python/Lib/asyncio/queues.py +307 -0
  229. package/python/Lib/asyncio/runners.py +216 -0
  230. package/python/Lib/asyncio/selector_events.py +1326 -0
  231. package/python/Lib/asyncio/sslproto.py +929 -0
  232. package/python/Lib/asyncio/staggered.py +174 -0
  233. package/python/Lib/asyncio/streams.py +787 -0
  234. package/python/Lib/asyncio/subprocess.py +229 -0
  235. package/python/Lib/asyncio/taskgroups.py +278 -0
  236. package/python/Lib/asyncio/tasks.py +1118 -0
  237. package/python/Lib/asyncio/threads.py +25 -0
  238. package/python/Lib/asyncio/timeouts.py +184 -0
  239. package/python/Lib/asyncio/transports.py +337 -0
  240. package/python/Lib/asyncio/trsock.py +98 -0
  241. package/python/Lib/asyncio/unix_events.py +1536 -0
  242. package/python/Lib/asyncio/windows_events.py +903 -0
  243. package/python/Lib/asyncio/windows_utils.py +173 -0
  244. package/python/Lib/base64.py +621 -0
  245. package/python/Lib/bdb.py +973 -0
  246. package/python/Lib/bisect.py +118 -0
  247. package/python/Lib/bz2.py +352 -0
  248. package/python/Lib/cProfile.py +197 -0
  249. package/python/Lib/calendar.py +813 -0
  250. package/python/Lib/cmd.py +409 -0
  251. package/python/Lib/code.py +386 -0
  252. package/python/Lib/codecs.py +1132 -0
  253. package/python/Lib/codeop.py +155 -0
  254. package/python/Lib/collections/__init__.py +1600 -0
  255. package/python/Lib/collections/__pycache__/__init__.cpython-313.pyc +0 -0
  256. package/python/Lib/colorsys.py +166 -0
  257. package/python/Lib/compileall.py +470 -0
  258. package/python/Lib/concurrent/__init__.py +1 -0
  259. package/python/Lib/concurrent/futures/__init__.py +54 -0
  260. package/python/Lib/concurrent/futures/_base.py +654 -0
  261. package/python/Lib/concurrent/futures/process.py +862 -0
  262. package/python/Lib/concurrent/futures/thread.py +240 -0
  263. package/python/Lib/configparser.py +1387 -0
  264. package/python/Lib/contextlib.py +814 -0
  265. package/python/Lib/contextvars.py +4 -0
  266. package/python/Lib/copy.py +306 -0
  267. package/python/Lib/copyreg.py +217 -0
  268. package/python/Lib/csv.py +513 -0
  269. package/python/Lib/ctypes/__init__.py +600 -0
  270. package/python/Lib/ctypes/__pycache__/__init__.cpython-313.pyc +0 -0
  271. package/python/Lib/ctypes/__pycache__/_endian.cpython-313.pyc +0 -0
  272. package/python/Lib/ctypes/__pycache__/wintypes.cpython-313.pyc +0 -0
  273. package/python/Lib/ctypes/_aix.py +327 -0
  274. package/python/Lib/ctypes/_endian.py +78 -0
  275. package/python/Lib/ctypes/macholib/README.ctypes +7 -0
  276. package/python/Lib/ctypes/macholib/__init__.py +9 -0
  277. package/python/Lib/ctypes/macholib/dyld.py +165 -0
  278. package/python/Lib/ctypes/macholib/dylib.py +42 -0
  279. package/python/Lib/ctypes/macholib/fetch_macholib +2 -0
  280. package/python/Lib/ctypes/macholib/fetch_macholib.bat +1 -0
  281. package/python/Lib/ctypes/macholib/framework.py +42 -0
  282. package/python/Lib/ctypes/util.py +388 -0
  283. package/python/Lib/ctypes/wintypes.py +202 -0
  284. package/python/Lib/curses/__init__.py +101 -0
  285. package/python/Lib/curses/ascii.py +99 -0
  286. package/python/Lib/curses/has_key.py +192 -0
  287. package/python/Lib/curses/panel.py +6 -0
  288. package/python/Lib/curses/textpad.py +204 -0
  289. package/python/Lib/dataclasses.py +1630 -0
  290. package/python/Lib/datetime.py +9 -0
  291. package/python/Lib/dbm/__init__.py +194 -0
  292. package/python/Lib/dbm/dumb.py +319 -0
  293. package/python/Lib/dbm/gnu.py +3 -0
  294. package/python/Lib/dbm/ndbm.py +3 -0
  295. package/python/Lib/dbm/sqlite3.py +144 -0
  296. package/python/Lib/decimal.py +109 -0
  297. package/python/Lib/difflib.py +2056 -0
  298. package/python/Lib/dis.py +1075 -0
  299. package/python/Lib/doctest.py +2919 -0
  300. package/python/Lib/email/__init__.py +61 -0
  301. package/python/Lib/email/__pycache__/__init__.cpython-313.pyc +0 -0
  302. package/python/Lib/email/__pycache__/_encoded_words.cpython-313.pyc +0 -0
  303. package/python/Lib/email/__pycache__/_parseaddr.cpython-313.pyc +0 -0
  304. package/python/Lib/email/__pycache__/_policybase.cpython-313.pyc +0 -0
  305. package/python/Lib/email/__pycache__/base64mime.cpython-313.pyc +0 -0
  306. package/python/Lib/email/__pycache__/charset.cpython-313.pyc +0 -0
  307. package/python/Lib/email/__pycache__/encoders.cpython-313.pyc +0 -0
  308. package/python/Lib/email/__pycache__/errors.cpython-313.pyc +0 -0
  309. package/python/Lib/email/__pycache__/feedparser.cpython-313.pyc +0 -0
  310. package/python/Lib/email/__pycache__/header.cpython-313.pyc +0 -0
  311. package/python/Lib/email/__pycache__/iterators.cpython-313.pyc +0 -0
  312. package/python/Lib/email/__pycache__/message.cpython-313.pyc +0 -0
  313. package/python/Lib/email/__pycache__/parser.cpython-313.pyc +0 -0
  314. package/python/Lib/email/__pycache__/quoprimime.cpython-313.pyc +0 -0
  315. package/python/Lib/email/__pycache__/utils.cpython-313.pyc +0 -0
  316. package/python/Lib/email/_encoded_words.py +233 -0
  317. package/python/Lib/email/_header_value_parser.py +3145 -0
  318. package/python/Lib/email/_parseaddr.py +563 -0
  319. package/python/Lib/email/_policybase.py +382 -0
  320. package/python/Lib/email/architecture.rst +216 -0
  321. package/python/Lib/email/base64mime.py +115 -0
  322. package/python/Lib/email/charset.py +398 -0
  323. package/python/Lib/email/contentmanager.py +253 -0
  324. package/python/Lib/email/encoders.py +65 -0
  325. package/python/Lib/email/errors.py +117 -0
  326. package/python/Lib/email/feedparser.py +536 -0
  327. package/python/Lib/email/generator.py +530 -0
  328. package/python/Lib/email/header.py +582 -0
  329. package/python/Lib/email/headerregistry.py +618 -0
  330. package/python/Lib/email/iterators.py +68 -0
  331. package/python/Lib/email/message.py +1217 -0
  332. package/python/Lib/email/mime/__init__.py +0 -0
  333. package/python/Lib/email/mime/application.py +37 -0
  334. package/python/Lib/email/mime/audio.py +97 -0
  335. package/python/Lib/email/mime/base.py +29 -0
  336. package/python/Lib/email/mime/image.py +152 -0
  337. package/python/Lib/email/mime/message.py +33 -0
  338. package/python/Lib/email/mime/multipart.py +47 -0
  339. package/python/Lib/email/mime/nonmultipart.py +21 -0
  340. package/python/Lib/email/mime/text.py +40 -0
  341. package/python/Lib/email/parser.py +127 -0
  342. package/python/Lib/email/policy.py +232 -0
  343. package/python/Lib/email/quoprimime.py +300 -0
  344. package/python/Lib/email/utils.py +494 -0
  345. package/python/Lib/encodings/__init__.py +174 -0
  346. package/python/Lib/encodings/__pycache__/__init__.cpython-313.pyc +0 -0
  347. package/python/Lib/encodings/__pycache__/aliases.cpython-313.pyc +0 -0
  348. package/python/Lib/encodings/__pycache__/cp1252.cpython-313.pyc +0 -0
  349. package/python/Lib/encodings/__pycache__/cp437.cpython-313.pyc +0 -0
  350. package/python/Lib/encodings/__pycache__/hex_codec.cpython-313.pyc +0 -0
  351. package/python/Lib/encodings/__pycache__/idna.cpython-313.pyc +0 -0
  352. package/python/Lib/encodings/__pycache__/utf_8.cpython-313.pyc +0 -0
  353. package/python/Lib/encodings/aliases.py +552 -0
  354. package/python/Lib/encodings/ascii.py +50 -0
  355. package/python/Lib/encodings/base64_codec.py +55 -0
  356. package/python/Lib/encodings/big5.py +39 -0
  357. package/python/Lib/encodings/big5hkscs.py +39 -0
  358. package/python/Lib/encodings/bz2_codec.py +78 -0
  359. package/python/Lib/encodings/charmap.py +69 -0
  360. package/python/Lib/encodings/cp037.py +307 -0
  361. package/python/Lib/encodings/cp1006.py +307 -0
  362. package/python/Lib/encodings/cp1026.py +307 -0
  363. package/python/Lib/encodings/cp1125.py +698 -0
  364. package/python/Lib/encodings/cp1140.py +307 -0
  365. package/python/Lib/encodings/cp1250.py +307 -0
  366. package/python/Lib/encodings/cp1251.py +307 -0
  367. package/python/Lib/encodings/cp1252.py +307 -0
  368. package/python/Lib/encodings/cp1253.py +307 -0
  369. package/python/Lib/encodings/cp1254.py +307 -0
  370. package/python/Lib/encodings/cp1255.py +307 -0
  371. package/python/Lib/encodings/cp1256.py +307 -0
  372. package/python/Lib/encodings/cp1257.py +307 -0
  373. package/python/Lib/encodings/cp1258.py +307 -0
  374. package/python/Lib/encodings/cp273.py +307 -0
  375. package/python/Lib/encodings/cp424.py +307 -0
  376. package/python/Lib/encodings/cp437.py +698 -0
  377. package/python/Lib/encodings/cp500.py +307 -0
  378. package/python/Lib/encodings/cp720.py +309 -0
  379. package/python/Lib/encodings/cp737.py +698 -0
  380. package/python/Lib/encodings/cp775.py +697 -0
  381. package/python/Lib/encodings/cp850.py +698 -0
  382. package/python/Lib/encodings/cp852.py +698 -0
  383. package/python/Lib/encodings/cp855.py +698 -0
  384. package/python/Lib/encodings/cp856.py +307 -0
  385. package/python/Lib/encodings/cp857.py +694 -0
  386. package/python/Lib/encodings/cp858.py +698 -0
  387. package/python/Lib/encodings/cp860.py +698 -0
  388. package/python/Lib/encodings/cp861.py +698 -0
  389. package/python/Lib/encodings/cp862.py +698 -0
  390. package/python/Lib/encodings/cp863.py +698 -0
  391. package/python/Lib/encodings/cp864.py +690 -0
  392. package/python/Lib/encodings/cp865.py +698 -0
  393. package/python/Lib/encodings/cp866.py +698 -0
  394. package/python/Lib/encodings/cp869.py +689 -0
  395. package/python/Lib/encodings/cp874.py +307 -0
  396. package/python/Lib/encodings/cp875.py +307 -0
  397. package/python/Lib/encodings/cp932.py +39 -0
  398. package/python/Lib/encodings/cp949.py +39 -0
  399. package/python/Lib/encodings/cp950.py +39 -0
  400. package/python/Lib/encodings/euc_jis_2004.py +39 -0
  401. package/python/Lib/encodings/euc_jisx0213.py +39 -0
  402. package/python/Lib/encodings/euc_jp.py +39 -0
  403. package/python/Lib/encodings/euc_kr.py +39 -0
  404. package/python/Lib/encodings/gb18030.py +39 -0
  405. package/python/Lib/encodings/gb2312.py +39 -0
  406. package/python/Lib/encodings/gbk.py +39 -0
  407. package/python/Lib/encodings/hex_codec.py +55 -0
  408. package/python/Lib/encodings/hp_roman8.py +314 -0
  409. package/python/Lib/encodings/hz.py +39 -0
  410. package/python/Lib/encodings/idna.py +387 -0
  411. package/python/Lib/encodings/iso2022_jp.py +39 -0
  412. package/python/Lib/encodings/iso2022_jp_1.py +39 -0
  413. package/python/Lib/encodings/iso2022_jp_2.py +39 -0
  414. package/python/Lib/encodings/iso2022_jp_2004.py +39 -0
  415. package/python/Lib/encodings/iso2022_jp_3.py +39 -0
  416. package/python/Lib/encodings/iso2022_jp_ext.py +39 -0
  417. package/python/Lib/encodings/iso2022_kr.py +39 -0
  418. package/python/Lib/encodings/iso8859_1.py +307 -0
  419. package/python/Lib/encodings/iso8859_10.py +307 -0
  420. package/python/Lib/encodings/iso8859_11.py +307 -0
  421. package/python/Lib/encodings/iso8859_13.py +307 -0
  422. package/python/Lib/encodings/iso8859_14.py +307 -0
  423. package/python/Lib/encodings/iso8859_15.py +307 -0
  424. package/python/Lib/encodings/iso8859_16.py +307 -0
  425. package/python/Lib/encodings/iso8859_2.py +307 -0
  426. package/python/Lib/encodings/iso8859_3.py +307 -0
  427. package/python/Lib/encodings/iso8859_4.py +307 -0
  428. package/python/Lib/encodings/iso8859_5.py +307 -0
  429. package/python/Lib/encodings/iso8859_6.py +307 -0
  430. package/python/Lib/encodings/iso8859_7.py +307 -0
  431. package/python/Lib/encodings/iso8859_8.py +307 -0
  432. package/python/Lib/encodings/iso8859_9.py +307 -0
  433. package/python/Lib/encodings/johab.py +39 -0
  434. package/python/Lib/encodings/koi8_r.py +307 -0
  435. package/python/Lib/encodings/koi8_t.py +308 -0
  436. package/python/Lib/encodings/koi8_u.py +307 -0
  437. package/python/Lib/encodings/kz1048.py +307 -0
  438. package/python/Lib/encodings/latin_1.py +50 -0
  439. package/python/Lib/encodings/mac_arabic.py +698 -0
  440. package/python/Lib/encodings/mac_croatian.py +307 -0
  441. package/python/Lib/encodings/mac_cyrillic.py +307 -0
  442. package/python/Lib/encodings/mac_farsi.py +307 -0
  443. package/python/Lib/encodings/mac_greek.py +307 -0
  444. package/python/Lib/encodings/mac_iceland.py +307 -0
  445. package/python/Lib/encodings/mac_latin2.py +312 -0
  446. package/python/Lib/encodings/mac_roman.py +307 -0
  447. package/python/Lib/encodings/mac_romanian.py +307 -0
  448. package/python/Lib/encodings/mac_turkish.py +307 -0
  449. package/python/Lib/encodings/mbcs.py +47 -0
  450. package/python/Lib/encodings/oem.py +41 -0
  451. package/python/Lib/encodings/palmos.py +308 -0
  452. package/python/Lib/encodings/ptcp154.py +312 -0
  453. package/python/Lib/encodings/punycode.py +253 -0
  454. package/python/Lib/encodings/quopri_codec.py +56 -0
  455. package/python/Lib/encodings/raw_unicode_escape.py +46 -0
  456. package/python/Lib/encodings/rot_13.py +113 -0
  457. package/python/Lib/encodings/shift_jis.py +39 -0
  458. package/python/Lib/encodings/shift_jis_2004.py +39 -0
  459. package/python/Lib/encodings/shift_jisx0213.py +39 -0
  460. package/python/Lib/encodings/tis_620.py +307 -0
  461. package/python/Lib/encodings/undefined.py +49 -0
  462. package/python/Lib/encodings/unicode_escape.py +46 -0
  463. package/python/Lib/encodings/utf_16.py +155 -0
  464. package/python/Lib/encodings/utf_16_be.py +42 -0
  465. package/python/Lib/encodings/utf_16_le.py +42 -0
  466. package/python/Lib/encodings/utf_32.py +150 -0
  467. package/python/Lib/encodings/utf_32_be.py +37 -0
  468. package/python/Lib/encodings/utf_32_le.py +37 -0
  469. package/python/Lib/encodings/utf_7.py +38 -0
  470. package/python/Lib/encodings/utf_8.py +42 -0
  471. package/python/Lib/encodings/utf_8_sig.py +130 -0
  472. package/python/Lib/encodings/uu_codec.py +103 -0
  473. package/python/Lib/encodings/zlib_codec.py +77 -0
  474. package/python/Lib/ensurepip/__init__.py +264 -0
  475. package/python/Lib/ensurepip/__main__.py +5 -0
  476. package/python/Lib/ensurepip/_bundled/pip-25.3-py3-none-any.whl +0 -0
  477. package/python/Lib/ensurepip/_uninstall.py +31 -0
  478. package/python/Lib/enum.py +2182 -0
  479. package/python/Lib/filecmp.py +320 -0
  480. package/python/Lib/fileinput.py +442 -0
  481. package/python/Lib/fnmatch.py +192 -0
  482. package/python/Lib/fractions.py +1043 -0
  483. package/python/Lib/ftplib.py +966 -0
  484. package/python/Lib/functools.py +1036 -0
  485. package/python/Lib/genericpath.py +200 -0
  486. package/python/Lib/getopt.py +215 -0
  487. package/python/Lib/getpass.py +192 -0
  488. package/python/Lib/gettext.py +657 -0
  489. package/python/Lib/glob.py +551 -0
  490. package/python/Lib/graphlib.py +250 -0
  491. package/python/Lib/gzip.py +691 -0
  492. package/python/Lib/hashlib.py +255 -0
  493. package/python/Lib/heapq.py +603 -0
  494. package/python/Lib/hmac.py +220 -0
  495. package/python/Lib/html/__init__.py +132 -0
  496. package/python/Lib/html/__pycache__/__init__.cpython-313.pyc +0 -0
  497. package/python/Lib/html/__pycache__/entities.cpython-313.pyc +0 -0
  498. package/python/Lib/html/__pycache__/parser.cpython-313.pyc +0 -0
  499. package/python/Lib/html/entities.py +2513 -0
  500. package/python/Lib/html/parser.py +553 -0
  501. package/python/Lib/http/__init__.py +202 -0
  502. package/python/Lib/http/__pycache__/__init__.cpython-313.pyc +0 -0
  503. package/python/Lib/http/__pycache__/client.cpython-313.pyc +0 -0
  504. package/python/Lib/http/__pycache__/cookiejar.cpython-313.pyc +0 -0
  505. package/python/Lib/http/__pycache__/cookies.cpython-313.pyc +0 -0
  506. package/python/Lib/http/client.py +1570 -0
  507. package/python/Lib/http/cookiejar.py +2122 -0
  508. package/python/Lib/http/cookies.py +615 -0
  509. package/python/Lib/http/server.py +1351 -0
  510. package/python/Lib/idlelib/CREDITS.txt +48 -0
  511. package/python/Lib/idlelib/ChangeLog +1591 -0
  512. package/python/Lib/idlelib/HISTORY.txt +296 -0
  513. package/python/Lib/idlelib/Icons/README.txt +51 -0
  514. package/python/Lib/idlelib/Icons/folder.gif +0 -0
  515. package/python/Lib/idlelib/Icons/idle.ico +0 -0
  516. package/python/Lib/idlelib/Icons/idle_16.gif +0 -0
  517. package/python/Lib/idlelib/Icons/idle_16.png +0 -0
  518. package/python/Lib/idlelib/Icons/idle_256.png +0 -0
  519. package/python/Lib/idlelib/Icons/idle_32.gif +0 -0
  520. package/python/Lib/idlelib/Icons/idle_32.png +0 -0
  521. package/python/Lib/idlelib/Icons/idle_48.gif +0 -0
  522. package/python/Lib/idlelib/Icons/idle_48.png +0 -0
  523. package/python/Lib/idlelib/Icons/minusnode.gif +0 -0
  524. package/python/Lib/idlelib/Icons/openfolder.gif +0 -0
  525. package/python/Lib/idlelib/Icons/plusnode.gif +0 -0
  526. package/python/Lib/idlelib/Icons/python.gif +0 -0
  527. package/python/Lib/idlelib/Icons/tk.gif +0 -0
  528. package/python/Lib/idlelib/NEWS2x.txt +660 -0
  529. package/python/Lib/idlelib/News3.txt +1407 -0
  530. package/python/Lib/idlelib/README.txt +290 -0
  531. package/python/Lib/idlelib/TODO.txt +210 -0
  532. package/python/Lib/idlelib/__init__.py +10 -0
  533. package/python/Lib/idlelib/__main__.py +7 -0
  534. package/python/Lib/idlelib/autocomplete.py +228 -0
  535. package/python/Lib/idlelib/autocomplete_w.py +498 -0
  536. package/python/Lib/idlelib/autoexpand.py +96 -0
  537. package/python/Lib/idlelib/browser.py +260 -0
  538. package/python/Lib/idlelib/calltip.py +205 -0
  539. package/python/Lib/idlelib/calltip_w.py +202 -0
  540. package/python/Lib/idlelib/codecontext.py +270 -0
  541. package/python/Lib/idlelib/colorizer.py +384 -0
  542. package/python/Lib/idlelib/config-extensions.def +62 -0
  543. package/python/Lib/idlelib/config-highlight.def +105 -0
  544. package/python/Lib/idlelib/config-keys.def +309 -0
  545. package/python/Lib/idlelib/config-main.def +92 -0
  546. package/python/Lib/idlelib/config.py +917 -0
  547. package/python/Lib/idlelib/config_key.py +354 -0
  548. package/python/Lib/idlelib/configdialog.py +2408 -0
  549. package/python/Lib/idlelib/debugger.py +602 -0
  550. package/python/Lib/idlelib/debugger_r.py +390 -0
  551. package/python/Lib/idlelib/debugobj.py +146 -0
  552. package/python/Lib/idlelib/debugobj_r.py +41 -0
  553. package/python/Lib/idlelib/delegator.py +34 -0
  554. package/python/Lib/idlelib/dynoption.py +57 -0
  555. package/python/Lib/idlelib/editor.py +1721 -0
  556. package/python/Lib/idlelib/extend.txt +83 -0
  557. package/python/Lib/idlelib/filelist.py +132 -0
  558. package/python/Lib/idlelib/format.py +426 -0
  559. package/python/Lib/idlelib/grep.py +223 -0
  560. package/python/Lib/idlelib/help.html +865 -0
  561. package/python/Lib/idlelib/help.py +343 -0
  562. package/python/Lib/idlelib/help_about.py +211 -0
  563. package/python/Lib/idlelib/history.py +106 -0
  564. package/python/Lib/idlelib/hyperparser.py +312 -0
  565. package/python/Lib/idlelib/idle.bat +4 -0
  566. package/python/Lib/idlelib/idle.py +14 -0
  567. package/python/Lib/idlelib/idle.pyw +17 -0
  568. package/python/Lib/idlelib/iomenu.py +441 -0
  569. package/python/Lib/idlelib/macosx.py +278 -0
  570. package/python/Lib/idlelib/mainmenu.py +126 -0
  571. package/python/Lib/idlelib/multicall.py +451 -0
  572. package/python/Lib/idlelib/outwin.py +188 -0
  573. package/python/Lib/idlelib/parenmatch.py +183 -0
  574. package/python/Lib/idlelib/pathbrowser.py +107 -0
  575. package/python/Lib/idlelib/percolator.py +120 -0
  576. package/python/Lib/idlelib/pyparse.py +589 -0
  577. package/python/Lib/idlelib/pyshell.py +1699 -0
  578. package/python/Lib/idlelib/query.py +390 -0
  579. package/python/Lib/idlelib/redirector.py +174 -0
  580. package/python/Lib/idlelib/replace.py +299 -0
  581. package/python/Lib/idlelib/rpc.py +635 -0
  582. package/python/Lib/idlelib/run.py +653 -0
  583. package/python/Lib/idlelib/runscript.py +213 -0
  584. package/python/Lib/idlelib/scrolledlist.py +151 -0
  585. package/python/Lib/idlelib/search.py +165 -0
  586. package/python/Lib/idlelib/searchbase.py +210 -0
  587. package/python/Lib/idlelib/searchengine.py +234 -0
  588. package/python/Lib/idlelib/sidebar.py +543 -0
  589. package/python/Lib/idlelib/squeezer.py +345 -0
  590. package/python/Lib/idlelib/stackviewer.py +134 -0
  591. package/python/Lib/idlelib/statusbar.py +52 -0
  592. package/python/Lib/idlelib/textview.py +193 -0
  593. package/python/Lib/idlelib/tooltip.py +190 -0
  594. package/python/Lib/idlelib/tree.py +509 -0
  595. package/python/Lib/idlelib/undo.py +367 -0
  596. package/python/Lib/idlelib/util.py +37 -0
  597. package/python/Lib/idlelib/window.py +98 -0
  598. package/python/Lib/idlelib/zoomheight.py +124 -0
  599. package/python/Lib/idlelib/zzdummy.py +73 -0
  600. package/python/Lib/imaplib.py +1651 -0
  601. package/python/Lib/importlib/__init__.py +136 -0
  602. package/python/Lib/importlib/__pycache__/__init__.cpython-313.pyc +0 -0
  603. package/python/Lib/importlib/__pycache__/_abc.cpython-313.pyc +0 -0
  604. package/python/Lib/importlib/__pycache__/abc.cpython-313.pyc +0 -0
  605. package/python/Lib/importlib/__pycache__/readers.cpython-313.pyc +0 -0
  606. package/python/Lib/importlib/_abc.py +39 -0
  607. package/python/Lib/importlib/_bootstrap.py +1551 -0
  608. package/python/Lib/importlib/_bootstrap_external.py +1826 -0
  609. package/python/Lib/importlib/abc.py +243 -0
  610. package/python/Lib/importlib/machinery.py +21 -0
  611. package/python/Lib/importlib/metadata/__init__.py +1093 -0
  612. package/python/Lib/importlib/metadata/__pycache__/__init__.cpython-313.pyc +0 -0
  613. package/python/Lib/importlib/metadata/__pycache__/_adapters.cpython-313.pyc +0 -0
  614. package/python/Lib/importlib/metadata/__pycache__/_collections.cpython-313.pyc +0 -0
  615. package/python/Lib/importlib/metadata/__pycache__/_functools.cpython-313.pyc +0 -0
  616. package/python/Lib/importlib/metadata/__pycache__/_itertools.cpython-313.pyc +0 -0
  617. package/python/Lib/importlib/metadata/__pycache__/_meta.cpython-313.pyc +0 -0
  618. package/python/Lib/importlib/metadata/__pycache__/_text.cpython-313.pyc +0 -0
  619. package/python/Lib/importlib/metadata/_adapters.py +89 -0
  620. package/python/Lib/importlib/metadata/_collections.py +30 -0
  621. package/python/Lib/importlib/metadata/_functools.py +104 -0
  622. package/python/Lib/importlib/metadata/_itertools.py +73 -0
  623. package/python/Lib/importlib/metadata/_meta.py +67 -0
  624. package/python/Lib/importlib/metadata/_text.py +99 -0
  625. package/python/Lib/importlib/metadata/diagnose.py +21 -0
  626. package/python/Lib/importlib/readers.py +12 -0
  627. package/python/Lib/importlib/resources/__init__.py +43 -0
  628. package/python/Lib/importlib/resources/__pycache__/__init__.cpython-313.pyc +0 -0
  629. package/python/Lib/importlib/resources/__pycache__/_adapters.cpython-313.pyc +0 -0
  630. package/python/Lib/importlib/resources/__pycache__/_common.cpython-313.pyc +0 -0
  631. package/python/Lib/importlib/resources/__pycache__/_functional.cpython-313.pyc +0 -0
  632. package/python/Lib/importlib/resources/__pycache__/_itertools.cpython-313.pyc +0 -0
  633. package/python/Lib/importlib/resources/__pycache__/abc.cpython-313.pyc +0 -0
  634. package/python/Lib/importlib/resources/__pycache__/readers.cpython-313.pyc +0 -0
  635. package/python/Lib/importlib/resources/_adapters.py +168 -0
  636. package/python/Lib/importlib/resources/_common.py +211 -0
  637. package/python/Lib/importlib/resources/_functional.py +81 -0
  638. package/python/Lib/importlib/resources/_itertools.py +38 -0
  639. package/python/Lib/importlib/resources/abc.py +173 -0
  640. package/python/Lib/importlib/resources/readers.py +203 -0
  641. package/python/Lib/importlib/resources/simple.py +106 -0
  642. package/python/Lib/importlib/simple.py +14 -0
  643. package/python/Lib/importlib/util.py +274 -0
  644. package/python/Lib/inspect.py +3471 -0
  645. package/python/Lib/io.py +99 -0
  646. package/python/Lib/ipaddress.py +2440 -0
  647. package/python/Lib/json/__init__.py +365 -0
  648. package/python/Lib/json/__pycache__/__init__.cpython-313.pyc +0 -0
  649. package/python/Lib/json/__pycache__/decoder.cpython-313.pyc +0 -0
  650. package/python/Lib/json/__pycache__/encoder.cpython-313.pyc +0 -0
  651. package/python/Lib/json/__pycache__/scanner.cpython-313.pyc +0 -0
  652. package/python/Lib/json/decoder.py +364 -0
  653. package/python/Lib/json/encoder.py +446 -0
  654. package/python/Lib/json/scanner.py +73 -0
  655. package/python/Lib/json/tool.py +89 -0
  656. package/python/Lib/keyword.py +64 -0
  657. package/python/Lib/linecache.py +236 -0
  658. package/python/Lib/locale.py +1778 -0
  659. package/python/Lib/logging/__init__.py +2326 -0
  660. package/python/Lib/logging/__pycache__/__init__.cpython-313.pyc +0 -0
  661. package/python/Lib/logging/__pycache__/config.cpython-313.pyc +0 -0
  662. package/python/Lib/logging/__pycache__/handlers.cpython-313.pyc +0 -0
  663. package/python/Lib/logging/config.py +1065 -0
  664. package/python/Lib/logging/handlers.py +1629 -0
  665. package/python/Lib/lzma.py +364 -0
  666. package/python/Lib/mailbox.py +2219 -0
  667. package/python/Lib/mimetypes.py +679 -0
  668. package/python/Lib/modulefinder.py +671 -0
  669. package/python/Lib/multiprocessing/__init__.py +37 -0
  670. package/python/Lib/multiprocessing/connection.py +1190 -0
  671. package/python/Lib/multiprocessing/context.py +377 -0
  672. package/python/Lib/multiprocessing/dummy/__init__.py +126 -0
  673. package/python/Lib/multiprocessing/dummy/connection.py +75 -0
  674. package/python/Lib/multiprocessing/forkserver.py +364 -0
  675. package/python/Lib/multiprocessing/heap.py +337 -0
  676. package/python/Lib/multiprocessing/managers.py +1397 -0
  677. package/python/Lib/multiprocessing/pool.py +957 -0
  678. package/python/Lib/multiprocessing/popen_fork.py +87 -0
  679. package/python/Lib/multiprocessing/popen_forkserver.py +74 -0
  680. package/python/Lib/multiprocessing/popen_spawn_posix.py +76 -0
  681. package/python/Lib/multiprocessing/popen_spawn_win32.py +147 -0
  682. package/python/Lib/multiprocessing/process.py +436 -0
  683. package/python/Lib/multiprocessing/queues.py +399 -0
  684. package/python/Lib/multiprocessing/reduction.py +281 -0
  685. package/python/Lib/multiprocessing/resource_sharer.py +154 -0
  686. package/python/Lib/multiprocessing/resource_tracker.py +420 -0
  687. package/python/Lib/multiprocessing/shared_memory.py +544 -0
  688. package/python/Lib/multiprocessing/sharedctypes.py +240 -0
  689. package/python/Lib/multiprocessing/spawn.py +307 -0
  690. package/python/Lib/multiprocessing/synchronize.py +404 -0
  691. package/python/Lib/multiprocessing/util.py +562 -0
  692. package/python/Lib/netrc.py +199 -0
  693. package/python/Lib/ntpath.py +870 -0
  694. package/python/Lib/nturl2path.py +69 -0
  695. package/python/Lib/numbers.py +427 -0
  696. package/python/Lib/opcode.py +115 -0
  697. package/python/Lib/operator.py +467 -0
  698. package/python/Lib/optparse.py +1681 -0
  699. package/python/Lib/os.py +1184 -0
  700. package/python/Lib/pathlib/__init__.py +12 -0
  701. package/python/Lib/pathlib/__pycache__/__init__.cpython-313.pyc +0 -0
  702. package/python/Lib/pathlib/__pycache__/_abc.cpython-313.pyc +0 -0
  703. package/python/Lib/pathlib/__pycache__/_local.cpython-313.pyc +0 -0
  704. package/python/Lib/pathlib/_abc.py +930 -0
  705. package/python/Lib/pathlib/_local.py +861 -0
  706. package/python/Lib/pdb.py +2550 -0
  707. package/python/Lib/pickle.py +1866 -0
  708. package/python/Lib/pickletools.py +2904 -0
  709. package/python/Lib/pkgutil.py +529 -0
  710. package/python/Lib/platform.py +1454 -0
  711. package/python/Lib/plistlib.py +948 -0
  712. package/python/Lib/poplib.py +477 -0
  713. package/python/Lib/posixpath.py +578 -0
  714. package/python/Lib/pprint.py +658 -0
  715. package/python/Lib/profile.py +616 -0
  716. package/python/Lib/pstats.py +778 -0
  717. package/python/Lib/pty.py +211 -0
  718. package/python/Lib/py_compile.py +212 -0
  719. package/python/Lib/pyclbr.py +314 -0
  720. package/python/Lib/pydoc.py +2859 -0
  721. package/python/Lib/pydoc_data/__init__.py +0 -0
  722. package/python/Lib/pydoc_data/_pydoc.css +112 -0
  723. package/python/Lib/pydoc_data/module_docs.py +314 -0
  724. package/python/Lib/pydoc_data/topics.py +13000 -0
  725. package/python/Lib/queue.py +383 -0
  726. package/python/Lib/quopri.py +237 -0
  727. package/python/Lib/random.py +1070 -0
  728. package/python/Lib/re/__init__.py +428 -0
  729. package/python/Lib/re/__pycache__/__init__.cpython-313.pyc +0 -0
  730. package/python/Lib/re/__pycache__/_casefix.cpython-313.pyc +0 -0
  731. package/python/Lib/re/__pycache__/_compiler.cpython-313.pyc +0 -0
  732. package/python/Lib/re/__pycache__/_constants.cpython-313.pyc +0 -0
  733. package/python/Lib/re/__pycache__/_parser.cpython-313.pyc +0 -0
  734. package/python/Lib/re/_casefix.py +106 -0
  735. package/python/Lib/re/_compiler.py +768 -0
  736. package/python/Lib/re/_constants.py +222 -0
  737. package/python/Lib/re/_parser.py +1081 -0
  738. package/python/Lib/reprlib.py +230 -0
  739. package/python/Lib/rlcompleter.py +221 -0
  740. package/python/Lib/runpy.py +319 -0
  741. package/python/Lib/sched.py +167 -0
  742. package/python/Lib/secrets.py +71 -0
  743. package/python/Lib/selectors.py +603 -0
  744. package/python/Lib/shelve.py +250 -0
  745. package/python/Lib/shlex.py +345 -0
  746. package/python/Lib/shutil.py +1583 -0
  747. package/python/Lib/signal.py +94 -0
  748. package/python/Lib/site-packages/README.txt +2 -0
  749. package/python/Lib/site-packages/pip/__init__.py +13 -0
  750. package/python/Lib/site-packages/pip/__main__.py +24 -0
  751. package/python/Lib/site-packages/pip/__pip-runner__.py +50 -0
  752. package/python/Lib/site-packages/pip/__pycache__/__init__.cpython-313.pyc +0 -0
  753. package/python/Lib/site-packages/pip/__pycache__/__main__.cpython-313.pyc +0 -0
  754. package/python/Lib/site-packages/pip/__pycache__/__pip-runner__.cpython-313.pyc +0 -0
  755. package/python/Lib/site-packages/pip/_internal/__init__.py +18 -0
  756. package/python/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-313.pyc +0 -0
  757. package/python/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-313.pyc +0 -0
  758. package/python/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-313.pyc +0 -0
  759. package/python/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-313.pyc +0 -0
  760. package/python/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-313.pyc +0 -0
  761. package/python/Lib/site-packages/pip/_internal/__pycache__/main.cpython-313.pyc +0 -0
  762. package/python/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-313.pyc +0 -0
  763. package/python/Lib/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-313.pyc +0 -0
  764. package/python/Lib/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-313.pyc +0 -0
  765. package/python/Lib/site-packages/pip/_internal/build_env.py +606 -0
  766. package/python/Lib/site-packages/pip/_internal/cache.py +291 -0
  767. package/python/Lib/site-packages/pip/_internal/cli/__init__.py +3 -0
  768. package/python/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-313.pyc +0 -0
  769. package/python/Lib/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-313.pyc +0 -0
  770. package/python/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-313.pyc +0 -0
  771. package/python/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-313.pyc +0 -0
  772. package/python/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-313.pyc +0 -0
  773. package/python/Lib/site-packages/pip/_internal/cli/__pycache__/index_command.cpython-313.pyc +0 -0
  774. package/python/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-313.pyc +0 -0
  775. package/python/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-313.pyc +0 -0
  776. package/python/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-313.pyc +0 -0
  777. package/python/Lib/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-313.pyc +0 -0
  778. package/python/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-313.pyc +0 -0
  779. package/python/Lib/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-313.pyc +0 -0
  780. package/python/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-313.pyc +0 -0
  781. package/python/Lib/site-packages/pip/_internal/cli/autocompletion.py +184 -0
  782. package/python/Lib/site-packages/pip/_internal/cli/base_command.py +255 -0
  783. package/python/Lib/site-packages/pip/_internal/cli/cmdoptions.py +1267 -0
  784. package/python/Lib/site-packages/pip/_internal/cli/command_context.py +28 -0
  785. package/python/Lib/site-packages/pip/_internal/cli/index_command.py +195 -0
  786. package/python/Lib/site-packages/pip/_internal/cli/main.py +85 -0
  787. package/python/Lib/site-packages/pip/_internal/cli/main_parser.py +136 -0
  788. package/python/Lib/site-packages/pip/_internal/cli/parser.py +358 -0
  789. package/python/Lib/site-packages/pip/_internal/cli/progress_bars.py +153 -0
  790. package/python/Lib/site-packages/pip/_internal/cli/req_command.py +447 -0
  791. package/python/Lib/site-packages/pip/_internal/cli/spinners.py +235 -0
  792. package/python/Lib/site-packages/pip/_internal/cli/status_codes.py +6 -0
  793. package/python/Lib/site-packages/pip/_internal/commands/__init__.py +139 -0
  794. package/python/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-313.pyc +0 -0
  795. package/python/Lib/site-packages/pip/_internal/commands/__pycache__/cache.cpython-313.pyc +0 -0
  796. package/python/Lib/site-packages/pip/_internal/commands/__pycache__/check.cpython-313.pyc +0 -0
  797. package/python/Lib/site-packages/pip/_internal/commands/__pycache__/completion.cpython-313.pyc +0 -0
  798. package/python/Lib/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-313.pyc +0 -0
  799. package/python/Lib/site-packages/pip/_internal/commands/__pycache__/debug.cpython-313.pyc +0 -0
  800. package/python/Lib/site-packages/pip/_internal/commands/__pycache__/download.cpython-313.pyc +0 -0
  801. package/python/Lib/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-313.pyc +0 -0
  802. package/python/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-313.pyc +0 -0
  803. package/python/Lib/site-packages/pip/_internal/commands/__pycache__/help.cpython-313.pyc +0 -0
  804. package/python/Lib/site-packages/pip/_internal/commands/__pycache__/index.cpython-313.pyc +0 -0
  805. package/python/Lib/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-313.pyc +0 -0
  806. package/python/Lib/site-packages/pip/_internal/commands/__pycache__/install.cpython-313.pyc +0 -0
  807. package/python/Lib/site-packages/pip/_internal/commands/__pycache__/list.cpython-313.pyc +0 -0
  808. package/python/Lib/site-packages/pip/_internal/commands/__pycache__/lock.cpython-313.pyc +0 -0
  809. package/python/Lib/site-packages/pip/_internal/commands/__pycache__/search.cpython-313.pyc +0 -0
  810. package/python/Lib/site-packages/pip/_internal/commands/__pycache__/show.cpython-313.pyc +0 -0
  811. package/python/Lib/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-313.pyc +0 -0
  812. package/python/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-313.pyc +0 -0
  813. package/python/Lib/site-packages/pip/_internal/commands/cache.py +255 -0
  814. package/python/Lib/site-packages/pip/_internal/commands/check.py +66 -0
  815. package/python/Lib/site-packages/pip/_internal/commands/completion.py +136 -0
  816. package/python/Lib/site-packages/pip/_internal/commands/configuration.py +288 -0
  817. package/python/Lib/site-packages/pip/_internal/commands/debug.py +203 -0
  818. package/python/Lib/site-packages/pip/_internal/commands/download.py +146 -0
  819. package/python/Lib/site-packages/pip/_internal/commands/freeze.py +107 -0
  820. package/python/Lib/site-packages/pip/_internal/commands/hash.py +58 -0
  821. package/python/Lib/site-packages/pip/_internal/commands/help.py +40 -0
  822. package/python/Lib/site-packages/pip/_internal/commands/index.py +166 -0
  823. package/python/Lib/site-packages/pip/_internal/commands/inspect.py +92 -0
  824. package/python/Lib/site-packages/pip/_internal/commands/install.py +810 -0
  825. package/python/Lib/site-packages/pip/_internal/commands/list.py +398 -0
  826. package/python/Lib/site-packages/pip/_internal/commands/lock.py +175 -0
  827. package/python/Lib/site-packages/pip/_internal/commands/search.py +178 -0
  828. package/python/Lib/site-packages/pip/_internal/commands/show.py +231 -0
  829. package/python/Lib/site-packages/pip/_internal/commands/uninstall.py +113 -0
  830. package/python/Lib/site-packages/pip/_internal/commands/wheel.py +171 -0
  831. package/python/Lib/site-packages/pip/_internal/configuration.py +396 -0
  832. package/python/Lib/site-packages/pip/_internal/distributions/__init__.py +21 -0
  833. package/python/Lib/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-313.pyc +0 -0
  834. package/python/Lib/site-packages/pip/_internal/distributions/__pycache__/base.cpython-313.pyc +0 -0
  835. package/python/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-313.pyc +0 -0
  836. package/python/Lib/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-313.pyc +0 -0
  837. package/python/Lib/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-313.pyc +0 -0
  838. package/python/Lib/site-packages/pip/_internal/distributions/base.py +55 -0
  839. package/python/Lib/site-packages/pip/_internal/distributions/installed.py +33 -0
  840. package/python/Lib/site-packages/pip/_internal/distributions/sdist.py +164 -0
  841. package/python/Lib/site-packages/pip/_internal/distributions/wheel.py +44 -0
  842. package/python/Lib/site-packages/pip/_internal/exceptions.py +971 -0
  843. package/python/Lib/site-packages/pip/_internal/index/__init__.py +1 -0
  844. package/python/Lib/site-packages/pip/_internal/index/__pycache__/__init__.cpython-313.pyc +0 -0
  845. package/python/Lib/site-packages/pip/_internal/index/__pycache__/collector.cpython-313.pyc +0 -0
  846. package/python/Lib/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-313.pyc +0 -0
  847. package/python/Lib/site-packages/pip/_internal/index/__pycache__/sources.cpython-313.pyc +0 -0
  848. package/python/Lib/site-packages/pip/_internal/index/collector.py +488 -0
  849. package/python/Lib/site-packages/pip/_internal/index/package_finder.py +1125 -0
  850. package/python/Lib/site-packages/pip/_internal/index/sources.py +287 -0
  851. package/python/Lib/site-packages/pip/_internal/locations/__init__.py +440 -0
  852. package/python/Lib/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-313.pyc +0 -0
  853. package/python/Lib/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-313.pyc +0 -0
  854. package/python/Lib/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-313.pyc +0 -0
  855. package/python/Lib/site-packages/pip/_internal/locations/__pycache__/base.cpython-313.pyc +0 -0
  856. package/python/Lib/site-packages/pip/_internal/locations/_distutils.py +173 -0
  857. package/python/Lib/site-packages/pip/_internal/locations/_sysconfig.py +218 -0
  858. package/python/Lib/site-packages/pip/_internal/locations/base.py +82 -0
  859. package/python/Lib/site-packages/pip/_internal/main.py +12 -0
  860. package/python/Lib/site-packages/pip/_internal/metadata/__init__.py +169 -0
  861. package/python/Lib/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-313.pyc +0 -0
  862. package/python/Lib/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-313.pyc +0 -0
  863. package/python/Lib/site-packages/pip/_internal/metadata/__pycache__/base.cpython-313.pyc +0 -0
  864. package/python/Lib/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-313.pyc +0 -0
  865. package/python/Lib/site-packages/pip/_internal/metadata/_json.py +87 -0
  866. package/python/Lib/site-packages/pip/_internal/metadata/base.py +685 -0
  867. package/python/Lib/site-packages/pip/_internal/metadata/importlib/__init__.py +6 -0
  868. package/python/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-313.pyc +0 -0
  869. package/python/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-313.pyc +0 -0
  870. package/python/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-313.pyc +0 -0
  871. package/python/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-313.pyc +0 -0
  872. package/python/Lib/site-packages/pip/_internal/metadata/importlib/_compat.py +87 -0
  873. package/python/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py +229 -0
  874. package/python/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py +143 -0
  875. package/python/Lib/site-packages/pip/_internal/metadata/pkg_resources.py +298 -0
  876. package/python/Lib/site-packages/pip/_internal/models/__init__.py +1 -0
  877. package/python/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-313.pyc +0 -0
  878. package/python/Lib/site-packages/pip/_internal/models/__pycache__/candidate.cpython-313.pyc +0 -0
  879. package/python/Lib/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-313.pyc +0 -0
  880. package/python/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-313.pyc +0 -0
  881. package/python/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-313.pyc +0 -0
  882. package/python/Lib/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-313.pyc +0 -0
  883. package/python/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-313.pyc +0 -0
  884. package/python/Lib/site-packages/pip/_internal/models/__pycache__/release_control.cpython-313.pyc +0 -0
  885. package/python/Lib/site-packages/pip/_internal/models/__pycache__/scheme.cpython-313.pyc +0 -0
  886. package/python/Lib/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-313.pyc +0 -0
  887. package/python/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-313.pyc +0 -0
  888. package/python/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-313.pyc +0 -0
  889. package/python/Lib/site-packages/pip/_internal/models/__pycache__/wheel.cpython-313.pyc +0 -0
  890. package/python/Lib/site-packages/pip/_internal/models/candidate.py +25 -0
  891. package/python/Lib/site-packages/pip/_internal/models/direct_url.py +227 -0
  892. package/python/Lib/site-packages/pip/_internal/models/format_control.py +78 -0
  893. package/python/Lib/site-packages/pip/_internal/models/index.py +28 -0
  894. package/python/Lib/site-packages/pip/_internal/models/installation_report.py +57 -0
  895. package/python/Lib/site-packages/pip/_internal/models/link.py +617 -0
  896. package/python/Lib/site-packages/pip/_internal/models/release_control.py +92 -0
  897. package/python/Lib/site-packages/pip/_internal/models/scheme.py +25 -0
  898. package/python/Lib/site-packages/pip/_internal/models/search_scope.py +126 -0
  899. package/python/Lib/site-packages/pip/_internal/models/selection_prefs.py +56 -0
  900. package/python/Lib/site-packages/pip/_internal/models/target_python.py +122 -0
  901. package/python/Lib/site-packages/pip/_internal/models/wheel.py +80 -0
  902. package/python/Lib/site-packages/pip/_internal/network/__init__.py +1 -0
  903. package/python/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-313.pyc +0 -0
  904. package/python/Lib/site-packages/pip/_internal/network/__pycache__/auth.cpython-313.pyc +0 -0
  905. package/python/Lib/site-packages/pip/_internal/network/__pycache__/cache.cpython-313.pyc +0 -0
  906. package/python/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-313.pyc +0 -0
  907. package/python/Lib/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-313.pyc +0 -0
  908. package/python/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-313.pyc +0 -0
  909. package/python/Lib/site-packages/pip/_internal/network/__pycache__/utils.cpython-313.pyc +0 -0
  910. package/python/Lib/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-313.pyc +0 -0
  911. package/python/Lib/site-packages/pip/_internal/network/auth.py +568 -0
  912. package/python/Lib/site-packages/pip/_internal/network/cache.py +128 -0
  913. package/python/Lib/site-packages/pip/_internal/network/download.py +341 -0
  914. package/python/Lib/site-packages/pip/_internal/network/lazy_wheel.py +215 -0
  915. package/python/Lib/site-packages/pip/_internal/network/session.py +532 -0
  916. package/python/Lib/site-packages/pip/_internal/network/utils.py +98 -0
  917. package/python/Lib/site-packages/pip/_internal/network/xmlrpc.py +61 -0
  918. package/python/Lib/site-packages/pip/_internal/operations/__init__.py +0 -0
  919. package/python/Lib/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-313.pyc +0 -0
  920. package/python/Lib/site-packages/pip/_internal/operations/__pycache__/check.cpython-313.pyc +0 -0
  921. package/python/Lib/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-313.pyc +0 -0
  922. package/python/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-313.pyc +0 -0
  923. package/python/Lib/site-packages/pip/_internal/operations/build/__init__.py +0 -0
  924. package/python/Lib/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-313.pyc +0 -0
  925. package/python/Lib/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-313.pyc +0 -0
  926. package/python/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-313.pyc +0 -0
  927. package/python/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-313.pyc +0 -0
  928. package/python/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-313.pyc +0 -0
  929. package/python/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-313.pyc +0 -0
  930. package/python/Lib/site-packages/pip/_internal/operations/build/build_tracker.py +140 -0
  931. package/python/Lib/site-packages/pip/_internal/operations/build/metadata.py +38 -0
  932. package/python/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py +41 -0
  933. package/python/Lib/site-packages/pip/_internal/operations/build/wheel.py +38 -0
  934. package/python/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py +47 -0
  935. package/python/Lib/site-packages/pip/_internal/operations/check.py +175 -0
  936. package/python/Lib/site-packages/pip/_internal/operations/freeze.py +259 -0
  937. package/python/Lib/site-packages/pip/_internal/operations/install/__init__.py +1 -0
  938. package/python/Lib/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-313.pyc +0 -0
  939. package/python/Lib/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-313.pyc +0 -0
  940. package/python/Lib/site-packages/pip/_internal/operations/install/wheel.py +745 -0
  941. package/python/Lib/site-packages/pip/_internal/operations/prepare.py +747 -0
  942. package/python/Lib/site-packages/pip/_internal/pyproject.py +123 -0
  943. package/python/Lib/site-packages/pip/_internal/req/__init__.py +103 -0
  944. package/python/Lib/site-packages/pip/_internal/req/__pycache__/__init__.cpython-313.pyc +0 -0
  945. package/python/Lib/site-packages/pip/_internal/req/__pycache__/constructors.cpython-313.pyc +0 -0
  946. package/python/Lib/site-packages/pip/_internal/req/__pycache__/pep723.cpython-313.pyc +0 -0
  947. package/python/Lib/site-packages/pip/_internal/req/__pycache__/req_dependency_group.cpython-313.pyc +0 -0
  948. package/python/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-313.pyc +0 -0
  949. package/python/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-313.pyc +0 -0
  950. package/python/Lib/site-packages/pip/_internal/req/__pycache__/req_set.cpython-313.pyc +0 -0
  951. package/python/Lib/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-313.pyc +0 -0
  952. package/python/Lib/site-packages/pip/_internal/req/constructors.py +568 -0
  953. package/python/Lib/site-packages/pip/_internal/req/pep723.py +41 -0
  954. package/python/Lib/site-packages/pip/_internal/req/req_dependency_group.py +75 -0
  955. package/python/Lib/site-packages/pip/_internal/req/req_file.py +631 -0
  956. package/python/Lib/site-packages/pip/_internal/req/req_install.py +828 -0
  957. package/python/Lib/site-packages/pip/_internal/req/req_set.py +81 -0
  958. package/python/Lib/site-packages/pip/_internal/req/req_uninstall.py +639 -0
  959. package/python/Lib/site-packages/pip/_internal/resolution/__init__.py +0 -0
  960. package/python/Lib/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-313.pyc +0 -0
  961. package/python/Lib/site-packages/pip/_internal/resolution/__pycache__/base.cpython-313.pyc +0 -0
  962. package/python/Lib/site-packages/pip/_internal/resolution/base.py +20 -0
  963. package/python/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
  964. package/python/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-313.pyc +0 -0
  965. package/python/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-313.pyc +0 -0
  966. package/python/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +598 -0
  967. package/python/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
  968. package/python/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-313.pyc +0 -0
  969. package/python/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-313.pyc +0 -0
  970. package/python/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-313.pyc +0 -0
  971. package/python/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-313.pyc +0 -0
  972. package/python/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-313.pyc +0 -0
  973. package/python/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-313.pyc +0 -0
  974. package/python/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-313.pyc +0 -0
  975. package/python/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-313.pyc +0 -0
  976. package/python/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-313.pyc +0 -0
  977. package/python/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +142 -0
  978. package/python/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +591 -0
  979. package/python/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +856 -0
  980. package/python/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +166 -0
  981. package/python/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +285 -0
  982. package/python/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +98 -0
  983. package/python/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +251 -0
  984. package/python/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +332 -0
  985. package/python/Lib/site-packages/pip/_internal/self_outdated_check.py +255 -0
  986. package/python/Lib/site-packages/pip/_internal/utils/__init__.py +0 -0
  987. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-313.pyc +0 -0
  988. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-313.pyc +0 -0
  989. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/_log.cpython-313.pyc +0 -0
  990. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-313.pyc +0 -0
  991. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/compat.cpython-313.pyc +0 -0
  992. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-313.pyc +0 -0
  993. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-313.pyc +0 -0
  994. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-313.pyc +0 -0
  995. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-313.pyc +0 -0
  996. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-313.pyc +0 -0
  997. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-313.pyc +0 -0
  998. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-313.pyc +0 -0
  999. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-313.pyc +0 -0
  1000. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-313.pyc +0 -0
  1001. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-313.pyc +0 -0
  1002. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/logging.cpython-313.pyc +0 -0
  1003. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-313.pyc +0 -0
  1004. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-313.pyc +0 -0
  1005. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/pylock.cpython-313.pyc +0 -0
  1006. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/retry.cpython-313.pyc +0 -0
  1007. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-313.pyc +0 -0
  1008. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-313.pyc +0 -0
  1009. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-313.pyc +0 -0
  1010. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-313.pyc +0 -0
  1011. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-313.pyc +0 -0
  1012. package/python/Lib/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-313.pyc +0 -0
  1013. package/python/Lib/site-packages/pip/_internal/utils/_jaraco_text.py +109 -0
  1014. package/python/Lib/site-packages/pip/_internal/utils/_log.py +38 -0
  1015. package/python/Lib/site-packages/pip/_internal/utils/appdirs.py +52 -0
  1016. package/python/Lib/site-packages/pip/_internal/utils/compat.py +85 -0
  1017. package/python/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +201 -0
  1018. package/python/Lib/site-packages/pip/_internal/utils/datetime.py +28 -0
  1019. package/python/Lib/site-packages/pip/_internal/utils/deprecation.py +126 -0
  1020. package/python/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +87 -0
  1021. package/python/Lib/site-packages/pip/_internal/utils/egg_link.py +81 -0
  1022. package/python/Lib/site-packages/pip/_internal/utils/entrypoints.py +88 -0
  1023. package/python/Lib/site-packages/pip/_internal/utils/filesystem.py +203 -0
  1024. package/python/Lib/site-packages/pip/_internal/utils/filetypes.py +24 -0
  1025. package/python/Lib/site-packages/pip/_internal/utils/glibc.py +102 -0
  1026. package/python/Lib/site-packages/pip/_internal/utils/hashes.py +150 -0
  1027. package/python/Lib/site-packages/pip/_internal/utils/logging.py +396 -0
  1028. package/python/Lib/site-packages/pip/_internal/utils/misc.py +771 -0
  1029. package/python/Lib/site-packages/pip/_internal/utils/packaging.py +44 -0
  1030. package/python/Lib/site-packages/pip/_internal/utils/pylock.py +116 -0
  1031. package/python/Lib/site-packages/pip/_internal/utils/retry.py +45 -0
  1032. package/python/Lib/site-packages/pip/_internal/utils/subprocess.py +248 -0
  1033. package/python/Lib/site-packages/pip/_internal/utils/temp_dir.py +294 -0
  1034. package/python/Lib/site-packages/pip/_internal/utils/unpacking.py +362 -0
  1035. package/python/Lib/site-packages/pip/_internal/utils/urls.py +55 -0
  1036. package/python/Lib/site-packages/pip/_internal/utils/virtualenv.py +105 -0
  1037. package/python/Lib/site-packages/pip/_internal/utils/wheel.py +132 -0
  1038. package/python/Lib/site-packages/pip/_internal/vcs/__init__.py +15 -0
  1039. package/python/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-313.pyc +0 -0
  1040. package/python/Lib/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-313.pyc +0 -0
  1041. package/python/Lib/site-packages/pip/_internal/vcs/__pycache__/git.cpython-313.pyc +0 -0
  1042. package/python/Lib/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-313.pyc +0 -0
  1043. package/python/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-313.pyc +0 -0
  1044. package/python/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-313.pyc +0 -0
  1045. package/python/Lib/site-packages/pip/_internal/vcs/bazaar.py +130 -0
  1046. package/python/Lib/site-packages/pip/_internal/vcs/git.py +571 -0
  1047. package/python/Lib/site-packages/pip/_internal/vcs/mercurial.py +186 -0
  1048. package/python/Lib/site-packages/pip/_internal/vcs/subversion.py +335 -0
  1049. package/python/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +695 -0
  1050. package/python/Lib/site-packages/pip/_internal/wheel_builder.py +261 -0
  1051. package/python/Lib/site-packages/pip/_vendor/README.rst +180 -0
  1052. package/python/Lib/site-packages/pip/_vendor/__init__.py +117 -0
  1053. package/python/Lib/site-packages/pip/_vendor/__pycache__/__init__.cpython-313.pyc +0 -0
  1054. package/python/Lib/site-packages/pip/_vendor/cachecontrol/LICENSE.txt +13 -0
  1055. package/python/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +32 -0
  1056. package/python/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-313.pyc +0 -0
  1057. package/python/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-313.pyc +0 -0
  1058. package/python/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-313.pyc +0 -0
  1059. package/python/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-313.pyc +0 -0
  1060. package/python/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-313.pyc +0 -0
  1061. package/python/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-313.pyc +0 -0
  1062. package/python/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-313.pyc +0 -0
  1063. package/python/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-313.pyc +0 -0
  1064. package/python/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-313.pyc +0 -0
  1065. package/python/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +70 -0
  1066. package/python/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +167 -0
  1067. package/python/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +75 -0
  1068. package/python/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +8 -0
  1069. package/python/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-313.pyc +0 -0
  1070. package/python/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-313.pyc +0 -0
  1071. package/python/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-313.pyc +0 -0
  1072. package/python/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +145 -0
  1073. package/python/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +48 -0
  1074. package/python/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +511 -0
  1075. package/python/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +121 -0
  1076. package/python/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +157 -0
  1077. package/python/Lib/site-packages/pip/_vendor/cachecontrol/py.typed +0 -0
  1078. package/python/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +146 -0
  1079. package/python/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +43 -0
  1080. package/python/Lib/site-packages/pip/_vendor/certifi/LICENSE +20 -0
  1081. package/python/Lib/site-packages/pip/_vendor/certifi/__init__.py +4 -0
  1082. package/python/Lib/site-packages/pip/_vendor/certifi/__main__.py +12 -0
  1083. package/python/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-313.pyc +0 -0
  1084. package/python/Lib/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-313.pyc +0 -0
  1085. package/python/Lib/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-313.pyc +0 -0
  1086. package/python/Lib/site-packages/pip/_vendor/certifi/cacert.pem +4468 -0
  1087. package/python/Lib/site-packages/pip/_vendor/certifi/core.py +83 -0
  1088. package/python/Lib/site-packages/pip/_vendor/certifi/py.typed +0 -0
  1089. package/python/Lib/site-packages/pip/_vendor/dependency_groups/LICENSE.txt +9 -0
  1090. package/python/Lib/site-packages/pip/_vendor/dependency_groups/__init__.py +13 -0
  1091. package/python/Lib/site-packages/pip/_vendor/dependency_groups/__main__.py +65 -0
  1092. package/python/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/__init__.cpython-313.pyc +0 -0
  1093. package/python/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/__main__.cpython-313.pyc +0 -0
  1094. package/python/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/_implementation.cpython-313.pyc +0 -0
  1095. package/python/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/_lint_dependency_groups.cpython-313.pyc +0 -0
  1096. package/python/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/_pip_wrapper.cpython-313.pyc +0 -0
  1097. package/python/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/_toml_compat.cpython-313.pyc +0 -0
  1098. package/python/Lib/site-packages/pip/_vendor/dependency_groups/_implementation.py +209 -0
  1099. package/python/Lib/site-packages/pip/_vendor/dependency_groups/_lint_dependency_groups.py +59 -0
  1100. package/python/Lib/site-packages/pip/_vendor/dependency_groups/_pip_wrapper.py +62 -0
  1101. package/python/Lib/site-packages/pip/_vendor/dependency_groups/_toml_compat.py +9 -0
  1102. package/python/Lib/site-packages/pip/_vendor/dependency_groups/py.typed +0 -0
  1103. package/python/Lib/site-packages/pip/_vendor/distlib/LICENSE.txt +284 -0
  1104. package/python/Lib/site-packages/pip/_vendor/distlib/__init__.py +33 -0
  1105. package/python/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-313.pyc +0 -0
  1106. package/python/Lib/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-313.pyc +0 -0
  1107. package/python/Lib/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-313.pyc +0 -0
  1108. package/python/Lib/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-313.pyc +0 -0
  1109. package/python/Lib/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-313.pyc +0 -0
  1110. package/python/Lib/site-packages/pip/_vendor/distlib/compat.py +1137 -0
  1111. package/python/Lib/site-packages/pip/_vendor/distlib/resources.py +358 -0
  1112. package/python/Lib/site-packages/pip/_vendor/distlib/scripts.py +447 -0
  1113. package/python/Lib/site-packages/pip/_vendor/distlib/t32.exe +0 -0
  1114. package/python/Lib/site-packages/pip/_vendor/distlib/t64-arm.exe +0 -0
  1115. package/python/Lib/site-packages/pip/_vendor/distlib/t64.exe +0 -0
  1116. package/python/Lib/site-packages/pip/_vendor/distlib/util.py +1984 -0
  1117. package/python/Lib/site-packages/pip/_vendor/distlib/w32.exe +0 -0
  1118. package/python/Lib/site-packages/pip/_vendor/distlib/w64-arm.exe +0 -0
  1119. package/python/Lib/site-packages/pip/_vendor/distlib/w64.exe +0 -0
  1120. package/python/Lib/site-packages/pip/_vendor/distro/LICENSE +202 -0
  1121. package/python/Lib/site-packages/pip/_vendor/distro/__init__.py +54 -0
  1122. package/python/Lib/site-packages/pip/_vendor/distro/__main__.py +4 -0
  1123. package/python/Lib/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-313.pyc +0 -0
  1124. package/python/Lib/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-313.pyc +0 -0
  1125. package/python/Lib/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-313.pyc +0 -0
  1126. package/python/Lib/site-packages/pip/_vendor/distro/distro.py +1403 -0
  1127. package/python/Lib/site-packages/pip/_vendor/distro/py.typed +0 -0
  1128. package/python/Lib/site-packages/pip/_vendor/idna/LICENSE.md +31 -0
  1129. package/python/Lib/site-packages/pip/_vendor/idna/__init__.py +45 -0
  1130. package/python/Lib/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-313.pyc +0 -0
  1131. package/python/Lib/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-313.pyc +0 -0
  1132. package/python/Lib/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-313.pyc +0 -0
  1133. package/python/Lib/site-packages/pip/_vendor/idna/__pycache__/core.cpython-313.pyc +0 -0
  1134. package/python/Lib/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-313.pyc +0 -0
  1135. package/python/Lib/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-313.pyc +0 -0
  1136. package/python/Lib/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-313.pyc +0 -0
  1137. package/python/Lib/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-313.pyc +0 -0
  1138. package/python/Lib/site-packages/pip/_vendor/idna/codec.py +122 -0
  1139. package/python/Lib/site-packages/pip/_vendor/idna/compat.py +15 -0
  1140. package/python/Lib/site-packages/pip/_vendor/idna/core.py +437 -0
  1141. package/python/Lib/site-packages/pip/_vendor/idna/idnadata.py +4309 -0
  1142. package/python/Lib/site-packages/pip/_vendor/idna/intranges.py +57 -0
  1143. package/python/Lib/site-packages/pip/_vendor/idna/package_data.py +1 -0
  1144. package/python/Lib/site-packages/pip/_vendor/idna/py.typed +0 -0
  1145. package/python/Lib/site-packages/pip/_vendor/idna/uts46data.py +8841 -0
  1146. package/python/Lib/site-packages/pip/_vendor/msgpack/COPYING +14 -0
  1147. package/python/Lib/site-packages/pip/_vendor/msgpack/__init__.py +55 -0
  1148. package/python/Lib/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-313.pyc +0 -0
  1149. package/python/Lib/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-313.pyc +0 -0
  1150. package/python/Lib/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-313.pyc +0 -0
  1151. package/python/Lib/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-313.pyc +0 -0
  1152. package/python/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +48 -0
  1153. package/python/Lib/site-packages/pip/_vendor/msgpack/ext.py +170 -0
  1154. package/python/Lib/site-packages/pip/_vendor/msgpack/fallback.py +929 -0
  1155. package/python/Lib/site-packages/pip/_vendor/packaging/LICENSE +3 -0
  1156. package/python/Lib/site-packages/pip/_vendor/packaging/LICENSE.APACHE +177 -0
  1157. package/python/Lib/site-packages/pip/_vendor/packaging/LICENSE.BSD +23 -0
  1158. package/python/Lib/site-packages/pip/_vendor/packaging/__init__.py +15 -0
  1159. package/python/Lib/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-313.pyc +0 -0
  1160. package/python/Lib/site-packages/pip/_vendor/packaging/__pycache__/_elffile.cpython-313.pyc +0 -0
  1161. package/python/Lib/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-313.pyc +0 -0
  1162. package/python/Lib/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-313.pyc +0 -0
  1163. package/python/Lib/site-packages/pip/_vendor/packaging/__pycache__/_parser.cpython-313.pyc +0 -0
  1164. package/python/Lib/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-313.pyc +0 -0
  1165. package/python/Lib/site-packages/pip/_vendor/packaging/__pycache__/_tokenizer.cpython-313.pyc +0 -0
  1166. package/python/Lib/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-313.pyc +0 -0
  1167. package/python/Lib/site-packages/pip/_vendor/packaging/__pycache__/metadata.cpython-313.pyc +0 -0
  1168. package/python/Lib/site-packages/pip/_vendor/packaging/__pycache__/pylock.cpython-313.pyc +0 -0
  1169. package/python/Lib/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-313.pyc +0 -0
  1170. package/python/Lib/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-313.pyc +0 -0
  1171. package/python/Lib/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-313.pyc +0 -0
  1172. package/python/Lib/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-313.pyc +0 -0
  1173. package/python/Lib/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-313.pyc +0 -0
  1174. package/python/Lib/site-packages/pip/_vendor/packaging/_elffile.py +108 -0
  1175. package/python/Lib/site-packages/pip/_vendor/packaging/_manylinux.py +262 -0
  1176. package/python/Lib/site-packages/pip/_vendor/packaging/_musllinux.py +85 -0
  1177. package/python/Lib/site-packages/pip/_vendor/packaging/_parser.py +365 -0
  1178. package/python/Lib/site-packages/pip/_vendor/packaging/_structures.py +69 -0
  1179. package/python/Lib/site-packages/pip/_vendor/packaging/_tokenizer.py +193 -0
  1180. package/python/Lib/site-packages/pip/_vendor/packaging/licenses/__init__.py +147 -0
  1181. package/python/Lib/site-packages/pip/_vendor/packaging/licenses/__pycache__/__init__.cpython-313.pyc +0 -0
  1182. package/python/Lib/site-packages/pip/_vendor/packaging/licenses/__pycache__/_spdx.cpython-313.pyc +0 -0
  1183. package/python/Lib/site-packages/pip/_vendor/packaging/licenses/_spdx.py +799 -0
  1184. package/python/Lib/site-packages/pip/_vendor/packaging/markers.py +388 -0
  1185. package/python/Lib/site-packages/pip/_vendor/packaging/metadata.py +978 -0
  1186. package/python/Lib/site-packages/pip/_vendor/packaging/py.typed +0 -0
  1187. package/python/Lib/site-packages/pip/_vendor/packaging/pylock.py +635 -0
  1188. package/python/Lib/site-packages/pip/_vendor/packaging/requirements.py +86 -0
  1189. package/python/Lib/site-packages/pip/_vendor/packaging/specifiers.py +1068 -0
  1190. package/python/Lib/site-packages/pip/_vendor/packaging/tags.py +651 -0
  1191. package/python/Lib/site-packages/pip/_vendor/packaging/utils.py +158 -0
  1192. package/python/Lib/site-packages/pip/_vendor/packaging/version.py +792 -0
  1193. package/python/Lib/site-packages/pip/_vendor/pkg_resources/LICENSE +17 -0
  1194. package/python/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +3676 -0
  1195. package/python/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-313.pyc +0 -0
  1196. package/python/Lib/site-packages/pip/_vendor/platformdirs/LICENSE +21 -0
  1197. package/python/Lib/site-packages/pip/_vendor/platformdirs/__init__.py +631 -0
  1198. package/python/Lib/site-packages/pip/_vendor/platformdirs/__main__.py +55 -0
  1199. package/python/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-313.pyc +0 -0
  1200. package/python/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-313.pyc +0 -0
  1201. package/python/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-313.pyc +0 -0
  1202. package/python/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-313.pyc +0 -0
  1203. package/python/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-313.pyc +0 -0
  1204. package/python/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-313.pyc +0 -0
  1205. package/python/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-313.pyc +0 -0
  1206. package/python/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-313.pyc +0 -0
  1207. package/python/Lib/site-packages/pip/_vendor/platformdirs/android.py +249 -0
  1208. package/python/Lib/site-packages/pip/_vendor/platformdirs/api.py +299 -0
  1209. package/python/Lib/site-packages/pip/_vendor/platformdirs/macos.py +146 -0
  1210. package/python/Lib/site-packages/pip/_vendor/platformdirs/py.typed +0 -0
  1211. package/python/Lib/site-packages/pip/_vendor/platformdirs/unix.py +272 -0
  1212. package/python/Lib/site-packages/pip/_vendor/platformdirs/version.py +34 -0
  1213. package/python/Lib/site-packages/pip/_vendor/platformdirs/windows.py +278 -0
  1214. package/python/Lib/site-packages/pip/_vendor/pygments/LICENSE +25 -0
  1215. package/python/Lib/site-packages/pip/_vendor/pygments/__init__.py +82 -0
  1216. package/python/Lib/site-packages/pip/_vendor/pygments/__main__.py +17 -0
  1217. package/python/Lib/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-313.pyc +0 -0
  1218. package/python/Lib/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-313.pyc +0 -0
  1219. package/python/Lib/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-313.pyc +0 -0
  1220. package/python/Lib/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-313.pyc +0 -0
  1221. package/python/Lib/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-313.pyc +0 -0
  1222. package/python/Lib/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-313.pyc +0 -0
  1223. package/python/Lib/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-313.pyc +0 -0
  1224. package/python/Lib/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-313.pyc +0 -0
  1225. package/python/Lib/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-313.pyc +0 -0
  1226. package/python/Lib/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-313.pyc +0 -0
  1227. package/python/Lib/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-313.pyc +0 -0
  1228. package/python/Lib/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-313.pyc +0 -0
  1229. package/python/Lib/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-313.pyc +0 -0
  1230. package/python/Lib/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-313.pyc +0 -0
  1231. package/python/Lib/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-313.pyc +0 -0
  1232. package/python/Lib/site-packages/pip/_vendor/pygments/console.py +70 -0
  1233. package/python/Lib/site-packages/pip/_vendor/pygments/filter.py +70 -0
  1234. package/python/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py +940 -0
  1235. package/python/Lib/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-313.pyc +0 -0
  1236. package/python/Lib/site-packages/pip/_vendor/pygments/formatter.py +129 -0
  1237. package/python/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py +157 -0
  1238. package/python/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-313.pyc +0 -0
  1239. package/python/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-313.pyc +0 -0
  1240. package/python/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py +23 -0
  1241. package/python/Lib/site-packages/pip/_vendor/pygments/lexer.py +963 -0
  1242. package/python/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py +362 -0
  1243. package/python/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-313.pyc +0 -0
  1244. package/python/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-313.pyc +0 -0
  1245. package/python/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-313.pyc +0 -0
  1246. package/python/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py +602 -0
  1247. package/python/Lib/site-packages/pip/_vendor/pygments/lexers/python.py +1201 -0
  1248. package/python/Lib/site-packages/pip/_vendor/pygments/modeline.py +43 -0
  1249. package/python/Lib/site-packages/pip/_vendor/pygments/plugin.py +72 -0
  1250. package/python/Lib/site-packages/pip/_vendor/pygments/regexopt.py +91 -0
  1251. package/python/Lib/site-packages/pip/_vendor/pygments/scanner.py +104 -0
  1252. package/python/Lib/site-packages/pip/_vendor/pygments/sphinxext.py +247 -0
  1253. package/python/Lib/site-packages/pip/_vendor/pygments/style.py +203 -0
  1254. package/python/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py +61 -0
  1255. package/python/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-313.pyc +0 -0
  1256. package/python/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/_mapping.cpython-313.pyc +0 -0
  1257. package/python/Lib/site-packages/pip/_vendor/pygments/styles/_mapping.py +54 -0
  1258. package/python/Lib/site-packages/pip/_vendor/pygments/token.py +214 -0
  1259. package/python/Lib/site-packages/pip/_vendor/pygments/unistring.py +153 -0
  1260. package/python/Lib/site-packages/pip/_vendor/pygments/util.py +324 -0
  1261. package/python/Lib/site-packages/pip/_vendor/pyproject_hooks/LICENSE +21 -0
  1262. package/python/Lib/site-packages/pip/_vendor/pyproject_hooks/__init__.py +31 -0
  1263. package/python/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
  1264. package/python/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-313.pyc +0 -0
  1265. package/python/Lib/site-packages/pip/_vendor/pyproject_hooks/_impl.py +410 -0
  1266. package/python/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py +21 -0
  1267. package/python/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-313.pyc +0 -0
  1268. package/python/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-313.pyc +0 -0
  1269. package/python/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py +389 -0
  1270. package/python/Lib/site-packages/pip/_vendor/pyproject_hooks/py.typed +0 -0
  1271. package/python/Lib/site-packages/pip/_vendor/requests/LICENSE +175 -0
  1272. package/python/Lib/site-packages/pip/_vendor/requests/__init__.py +179 -0
  1273. package/python/Lib/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-313.pyc +0 -0
  1274. package/python/Lib/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-313.pyc +0 -0
  1275. package/python/Lib/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-313.pyc +0 -0
  1276. package/python/Lib/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-313.pyc +0 -0
  1277. package/python/Lib/site-packages/pip/_vendor/requests/__pycache__/api.cpython-313.pyc +0 -0
  1278. package/python/Lib/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-313.pyc +0 -0
  1279. package/python/Lib/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-313.pyc +0 -0
  1280. package/python/Lib/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-313.pyc +0 -0
  1281. package/python/Lib/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-313.pyc +0 -0
  1282. package/python/Lib/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-313.pyc +0 -0
  1283. package/python/Lib/site-packages/pip/_vendor/requests/__pycache__/help.cpython-313.pyc +0 -0
  1284. package/python/Lib/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-313.pyc +0 -0
  1285. package/python/Lib/site-packages/pip/_vendor/requests/__pycache__/models.cpython-313.pyc +0 -0
  1286. package/python/Lib/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-313.pyc +0 -0
  1287. package/python/Lib/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-313.pyc +0 -0
  1288. package/python/Lib/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-313.pyc +0 -0
  1289. package/python/Lib/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-313.pyc +0 -0
  1290. package/python/Lib/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-313.pyc +0 -0
  1291. package/python/Lib/site-packages/pip/_vendor/requests/__version__.py +14 -0
  1292. package/python/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +50 -0
  1293. package/python/Lib/site-packages/pip/_vendor/requests/adapters.py +696 -0
  1294. package/python/Lib/site-packages/pip/_vendor/requests/api.py +157 -0
  1295. package/python/Lib/site-packages/pip/_vendor/requests/auth.py +314 -0
  1296. package/python/Lib/site-packages/pip/_vendor/requests/certs.py +17 -0
  1297. package/python/Lib/site-packages/pip/_vendor/requests/compat.py +90 -0
  1298. package/python/Lib/site-packages/pip/_vendor/requests/cookies.py +561 -0
  1299. package/python/Lib/site-packages/pip/_vendor/requests/exceptions.py +151 -0
  1300. package/python/Lib/site-packages/pip/_vendor/requests/help.py +127 -0
  1301. package/python/Lib/site-packages/pip/_vendor/requests/hooks.py +33 -0
  1302. package/python/Lib/site-packages/pip/_vendor/requests/models.py +1039 -0
  1303. package/python/Lib/site-packages/pip/_vendor/requests/packages.py +25 -0
  1304. package/python/Lib/site-packages/pip/_vendor/requests/sessions.py +831 -0
  1305. package/python/Lib/site-packages/pip/_vendor/requests/status_codes.py +128 -0
  1306. package/python/Lib/site-packages/pip/_vendor/requests/structures.py +99 -0
  1307. package/python/Lib/site-packages/pip/_vendor/requests/utils.py +1086 -0
  1308. package/python/Lib/site-packages/pip/_vendor/resolvelib/LICENSE +13 -0
  1309. package/python/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +27 -0
  1310. package/python/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-313.pyc +0 -0
  1311. package/python/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-313.pyc +0 -0
  1312. package/python/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-313.pyc +0 -0
  1313. package/python/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-313.pyc +0 -0
  1314. package/python/Lib/site-packages/pip/_vendor/resolvelib/providers.py +196 -0
  1315. package/python/Lib/site-packages/pip/_vendor/resolvelib/py.typed +0 -0
  1316. package/python/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +55 -0
  1317. package/python/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__init__.py +27 -0
  1318. package/python/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__pycache__/__init__.cpython-313.pyc +0 -0
  1319. package/python/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__pycache__/abstract.cpython-313.pyc +0 -0
  1320. package/python/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__pycache__/criterion.cpython-313.pyc +0 -0
  1321. package/python/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__pycache__/exceptions.cpython-313.pyc +0 -0
  1322. package/python/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__pycache__/resolution.cpython-313.pyc +0 -0
  1323. package/python/Lib/site-packages/pip/_vendor/resolvelib/resolvers/abstract.py +47 -0
  1324. package/python/Lib/site-packages/pip/_vendor/resolvelib/resolvers/criterion.py +48 -0
  1325. package/python/Lib/site-packages/pip/_vendor/resolvelib/resolvers/exceptions.py +57 -0
  1326. package/python/Lib/site-packages/pip/_vendor/resolvelib/resolvers/resolution.py +627 -0
  1327. package/python/Lib/site-packages/pip/_vendor/resolvelib/structs.py +209 -0
  1328. package/python/Lib/site-packages/pip/_vendor/rich/LICENSE +19 -0
  1329. package/python/Lib/site-packages/pip/_vendor/rich/__init__.py +177 -0
  1330. package/python/Lib/site-packages/pip/_vendor/rich/__main__.py +245 -0
  1331. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-313.pyc +0 -0
  1332. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-313.pyc +0 -0
  1333. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-313.pyc +0 -0
  1334. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-313.pyc +0 -0
  1335. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-313.pyc +0 -0
  1336. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-313.pyc +0 -0
  1337. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-313.pyc +0 -0
  1338. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-313.pyc +0 -0
  1339. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-313.pyc +0 -0
  1340. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-313.pyc +0 -0
  1341. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-313.pyc +0 -0
  1342. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-313.pyc +0 -0
  1343. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-313.pyc +0 -0
  1344. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-313.pyc +0 -0
  1345. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-313.pyc +0 -0
  1346. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-313.pyc +0 -0
  1347. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-313.pyc +0 -0
  1348. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-313.pyc +0 -0
  1349. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-313.pyc +0 -0
  1350. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-313.pyc +0 -0
  1351. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-313.pyc +0 -0
  1352. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-313.pyc +0 -0
  1353. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-313.pyc +0 -0
  1354. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/align.cpython-313.pyc +0 -0
  1355. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-313.pyc +0 -0
  1356. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-313.pyc +0 -0
  1357. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/box.cpython-313.pyc +0 -0
  1358. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-313.pyc +0 -0
  1359. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/color.cpython-313.pyc +0 -0
  1360. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-313.pyc +0 -0
  1361. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-313.pyc +0 -0
  1362. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/console.cpython-313.pyc +0 -0
  1363. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-313.pyc +0 -0
  1364. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-313.pyc +0 -0
  1365. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/control.cpython-313.pyc +0 -0
  1366. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-313.pyc +0 -0
  1367. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-313.pyc +0 -0
  1368. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-313.pyc +0 -0
  1369. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-313.pyc +0 -0
  1370. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-313.pyc +0 -0
  1371. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-313.pyc +0 -0
  1372. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-313.pyc +0 -0
  1373. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/json.cpython-313.pyc +0 -0
  1374. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-313.pyc +0 -0
  1375. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-313.pyc +0 -0
  1376. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/live.cpython-313.pyc +0 -0
  1377. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-313.pyc +0 -0
  1378. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-313.pyc +0 -0
  1379. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-313.pyc +0 -0
  1380. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-313.pyc +0 -0
  1381. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-313.pyc +0 -0
  1382. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-313.pyc +0 -0
  1383. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-313.pyc +0 -0
  1384. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-313.pyc +0 -0
  1385. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-313.pyc +0 -0
  1386. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-313.pyc +0 -0
  1387. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-313.pyc +0 -0
  1388. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-313.pyc +0 -0
  1389. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-313.pyc +0 -0
  1390. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/region.cpython-313.pyc +0 -0
  1391. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-313.pyc +0 -0
  1392. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-313.pyc +0 -0
  1393. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-313.pyc +0 -0
  1394. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-313.pyc +0 -0
  1395. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-313.pyc +0 -0
  1396. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-313.pyc +0 -0
  1397. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/status.cpython-313.pyc +0 -0
  1398. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/style.cpython-313.pyc +0 -0
  1399. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-313.pyc +0 -0
  1400. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-313.pyc +0 -0
  1401. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/table.cpython-313.pyc +0 -0
  1402. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-313.pyc +0 -0
  1403. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/text.cpython-313.pyc +0 -0
  1404. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-313.pyc +0 -0
  1405. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-313.pyc +0 -0
  1406. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-313.pyc +0 -0
  1407. package/python/Lib/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-313.pyc +0 -0
  1408. package/python/Lib/site-packages/pip/_vendor/rich/_cell_widths.py +454 -0
  1409. package/python/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py +3610 -0
  1410. package/python/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py +32 -0
  1411. package/python/Lib/site-packages/pip/_vendor/rich/_export_format.py +76 -0
  1412. package/python/Lib/site-packages/pip/_vendor/rich/_extension.py +10 -0
  1413. package/python/Lib/site-packages/pip/_vendor/rich/_fileno.py +24 -0
  1414. package/python/Lib/site-packages/pip/_vendor/rich/_inspect.py +268 -0
  1415. package/python/Lib/site-packages/pip/_vendor/rich/_log_render.py +94 -0
  1416. package/python/Lib/site-packages/pip/_vendor/rich/_loop.py +43 -0
  1417. package/python/Lib/site-packages/pip/_vendor/rich/_null_file.py +69 -0
  1418. package/python/Lib/site-packages/pip/_vendor/rich/_palettes.py +309 -0
  1419. package/python/Lib/site-packages/pip/_vendor/rich/_pick.py +17 -0
  1420. package/python/Lib/site-packages/pip/_vendor/rich/_ratio.py +153 -0
  1421. package/python/Lib/site-packages/pip/_vendor/rich/_spinners.py +482 -0
  1422. package/python/Lib/site-packages/pip/_vendor/rich/_stack.py +16 -0
  1423. package/python/Lib/site-packages/pip/_vendor/rich/_timer.py +19 -0
  1424. package/python/Lib/site-packages/pip/_vendor/rich/_win32_console.py +661 -0
  1425. package/python/Lib/site-packages/pip/_vendor/rich/_windows.py +71 -0
  1426. package/python/Lib/site-packages/pip/_vendor/rich/_windows_renderer.py +56 -0
  1427. package/python/Lib/site-packages/pip/_vendor/rich/_wrap.py +93 -0
  1428. package/python/Lib/site-packages/pip/_vendor/rich/abc.py +33 -0
  1429. package/python/Lib/site-packages/pip/_vendor/rich/align.py +306 -0
  1430. package/python/Lib/site-packages/pip/_vendor/rich/ansi.py +241 -0
  1431. package/python/Lib/site-packages/pip/_vendor/rich/bar.py +93 -0
  1432. package/python/Lib/site-packages/pip/_vendor/rich/box.py +474 -0
  1433. package/python/Lib/site-packages/pip/_vendor/rich/cells.py +174 -0
  1434. package/python/Lib/site-packages/pip/_vendor/rich/color.py +621 -0
  1435. package/python/Lib/site-packages/pip/_vendor/rich/color_triplet.py +38 -0
  1436. package/python/Lib/site-packages/pip/_vendor/rich/columns.py +187 -0
  1437. package/python/Lib/site-packages/pip/_vendor/rich/console.py +2680 -0
  1438. package/python/Lib/site-packages/pip/_vendor/rich/constrain.py +37 -0
  1439. package/python/Lib/site-packages/pip/_vendor/rich/containers.py +167 -0
  1440. package/python/Lib/site-packages/pip/_vendor/rich/control.py +219 -0
  1441. package/python/Lib/site-packages/pip/_vendor/rich/default_styles.py +193 -0
  1442. package/python/Lib/site-packages/pip/_vendor/rich/diagnose.py +39 -0
  1443. package/python/Lib/site-packages/pip/_vendor/rich/emoji.py +91 -0
  1444. package/python/Lib/site-packages/pip/_vendor/rich/errors.py +34 -0
  1445. package/python/Lib/site-packages/pip/_vendor/rich/file_proxy.py +57 -0
  1446. package/python/Lib/site-packages/pip/_vendor/rich/filesize.py +88 -0
  1447. package/python/Lib/site-packages/pip/_vendor/rich/highlighter.py +232 -0
  1448. package/python/Lib/site-packages/pip/_vendor/rich/json.py +139 -0
  1449. package/python/Lib/site-packages/pip/_vendor/rich/jupyter.py +101 -0
  1450. package/python/Lib/site-packages/pip/_vendor/rich/layout.py +442 -0
  1451. package/python/Lib/site-packages/pip/_vendor/rich/live.py +400 -0
  1452. package/python/Lib/site-packages/pip/_vendor/rich/live_render.py +106 -0
  1453. package/python/Lib/site-packages/pip/_vendor/rich/logging.py +297 -0
  1454. package/python/Lib/site-packages/pip/_vendor/rich/markup.py +251 -0
  1455. package/python/Lib/site-packages/pip/_vendor/rich/measure.py +151 -0
  1456. package/python/Lib/site-packages/pip/_vendor/rich/padding.py +141 -0
  1457. package/python/Lib/site-packages/pip/_vendor/rich/pager.py +34 -0
  1458. package/python/Lib/site-packages/pip/_vendor/rich/palette.py +100 -0
  1459. package/python/Lib/site-packages/pip/_vendor/rich/panel.py +317 -0
  1460. package/python/Lib/site-packages/pip/_vendor/rich/pretty.py +1016 -0
  1461. package/python/Lib/site-packages/pip/_vendor/rich/progress.py +1715 -0
  1462. package/python/Lib/site-packages/pip/_vendor/rich/progress_bar.py +223 -0
  1463. package/python/Lib/site-packages/pip/_vendor/rich/prompt.py +400 -0
  1464. package/python/Lib/site-packages/pip/_vendor/rich/protocol.py +42 -0
  1465. package/python/Lib/site-packages/pip/_vendor/rich/py.typed +0 -0
  1466. package/python/Lib/site-packages/pip/_vendor/rich/region.py +10 -0
  1467. package/python/Lib/site-packages/pip/_vendor/rich/repr.py +149 -0
  1468. package/python/Lib/site-packages/pip/_vendor/rich/rule.py +130 -0
  1469. package/python/Lib/site-packages/pip/_vendor/rich/scope.py +86 -0
  1470. package/python/Lib/site-packages/pip/_vendor/rich/screen.py +54 -0
  1471. package/python/Lib/site-packages/pip/_vendor/rich/segment.py +752 -0
  1472. package/python/Lib/site-packages/pip/_vendor/rich/spinner.py +132 -0
  1473. package/python/Lib/site-packages/pip/_vendor/rich/status.py +131 -0
  1474. package/python/Lib/site-packages/pip/_vendor/rich/style.py +792 -0
  1475. package/python/Lib/site-packages/pip/_vendor/rich/styled.py +42 -0
  1476. package/python/Lib/site-packages/pip/_vendor/rich/syntax.py +985 -0
  1477. package/python/Lib/site-packages/pip/_vendor/rich/table.py +1006 -0
  1478. package/python/Lib/site-packages/pip/_vendor/rich/terminal_theme.py +153 -0
  1479. package/python/Lib/site-packages/pip/_vendor/rich/text.py +1361 -0
  1480. package/python/Lib/site-packages/pip/_vendor/rich/theme.py +115 -0
  1481. package/python/Lib/site-packages/pip/_vendor/rich/themes.py +5 -0
  1482. package/python/Lib/site-packages/pip/_vendor/rich/traceback.py +899 -0
  1483. package/python/Lib/site-packages/pip/_vendor/rich/tree.py +257 -0
  1484. package/python/Lib/site-packages/pip/_vendor/tomli/LICENSE +21 -0
  1485. package/python/Lib/site-packages/pip/_vendor/tomli/__init__.py +8 -0
  1486. package/python/Lib/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-313.pyc +0 -0
  1487. package/python/Lib/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-313.pyc +0 -0
  1488. package/python/Lib/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-313.pyc +0 -0
  1489. package/python/Lib/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-313.pyc +0 -0
  1490. package/python/Lib/site-packages/pip/_vendor/tomli/_parser.py +777 -0
  1491. package/python/Lib/site-packages/pip/_vendor/tomli/_re.py +115 -0
  1492. package/python/Lib/site-packages/pip/_vendor/tomli/_types.py +10 -0
  1493. package/python/Lib/site-packages/pip/_vendor/tomli/py.typed +1 -0
  1494. package/python/Lib/site-packages/pip/_vendor/tomli_w/LICENSE +21 -0
  1495. package/python/Lib/site-packages/pip/_vendor/tomli_w/__init__.py +4 -0
  1496. package/python/Lib/site-packages/pip/_vendor/tomli_w/__pycache__/__init__.cpython-313.pyc +0 -0
  1497. package/python/Lib/site-packages/pip/_vendor/tomli_w/__pycache__/_writer.cpython-313.pyc +0 -0
  1498. package/python/Lib/site-packages/pip/_vendor/tomli_w/_writer.py +229 -0
  1499. package/python/Lib/site-packages/pip/_vendor/tomli_w/py.typed +1 -0
  1500. package/python/Lib/site-packages/pip/_vendor/truststore/LICENSE +21 -0
  1501. package/python/Lib/site-packages/pip/_vendor/truststore/__init__.py +36 -0
  1502. package/python/Lib/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-313.pyc +0 -0
  1503. package/python/Lib/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-313.pyc +0 -0
  1504. package/python/Lib/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-313.pyc +0 -0
  1505. package/python/Lib/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-313.pyc +0 -0
  1506. package/python/Lib/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-313.pyc +0 -0
  1507. package/python/Lib/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-313.pyc +0 -0
  1508. package/python/Lib/site-packages/pip/_vendor/truststore/_api.py +341 -0
  1509. package/python/Lib/site-packages/pip/_vendor/truststore/_macos.py +571 -0
  1510. package/python/Lib/site-packages/pip/_vendor/truststore/_openssl.py +68 -0
  1511. package/python/Lib/site-packages/pip/_vendor/truststore/_ssl_constants.py +31 -0
  1512. package/python/Lib/site-packages/pip/_vendor/truststore/_windows.py +567 -0
  1513. package/python/Lib/site-packages/pip/_vendor/truststore/py.typed +0 -0
  1514. package/python/Lib/site-packages/pip/_vendor/urllib3/LICENSE.txt +21 -0
  1515. package/python/Lib/site-packages/pip/_vendor/urllib3/__init__.py +102 -0
  1516. package/python/Lib/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-313.pyc +0 -0
  1517. package/python/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-313.pyc +0 -0
  1518. package/python/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-313.pyc +0 -0
  1519. package/python/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-313.pyc +0 -0
  1520. package/python/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-313.pyc +0 -0
  1521. package/python/Lib/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-313.pyc +0 -0
  1522. package/python/Lib/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-313.pyc +0 -0
  1523. package/python/Lib/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-313.pyc +0 -0
  1524. package/python/Lib/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-313.pyc +0 -0
  1525. package/python/Lib/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-313.pyc +0 -0
  1526. package/python/Lib/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-313.pyc +0 -0
  1527. package/python/Lib/site-packages/pip/_vendor/urllib3/_collections.py +355 -0
  1528. package/python/Lib/site-packages/pip/_vendor/urllib3/_version.py +2 -0
  1529. package/python/Lib/site-packages/pip/_vendor/urllib3/connection.py +572 -0
  1530. package/python/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +1140 -0
  1531. package/python/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
  1532. package/python/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-313.pyc +0 -0
  1533. package/python/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-313.pyc +0 -0
  1534. package/python/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-313.pyc +0 -0
  1535. package/python/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-313.pyc +0 -0
  1536. package/python/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-313.pyc +0 -0
  1537. package/python/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-313.pyc +0 -0
  1538. package/python/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-313.pyc +0 -0
  1539. package/python/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +36 -0
  1540. package/python/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
  1541. package/python/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-313.pyc +0 -0
  1542. package/python/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-313.pyc +0 -0
  1543. package/python/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-313.pyc +0 -0
  1544. package/python/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +519 -0
  1545. package/python/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +397 -0
  1546. package/python/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +314 -0
  1547. package/python/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +130 -0
  1548. package/python/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +518 -0
  1549. package/python/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +920 -0
  1550. package/python/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +216 -0
  1551. package/python/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +323 -0
  1552. package/python/Lib/site-packages/pip/_vendor/urllib3/fields.py +274 -0
  1553. package/python/Lib/site-packages/pip/_vendor/urllib3/filepost.py +98 -0
  1554. package/python/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +0 -0
  1555. package/python/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-313.pyc +0 -0
  1556. package/python/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-313.pyc +0 -0
  1557. package/python/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
  1558. package/python/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-313.pyc +0 -0
  1559. package/python/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-313.pyc +0 -0
  1560. package/python/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-313.pyc +0 -0
  1561. package/python/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +51 -0
  1562. package/python/Lib/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py +155 -0
  1563. package/python/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +1076 -0
  1564. package/python/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +540 -0
  1565. package/python/Lib/site-packages/pip/_vendor/urllib3/request.py +191 -0
  1566. package/python/Lib/site-packages/pip/_vendor/urllib3/response.py +879 -0
  1567. package/python/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +49 -0
  1568. package/python/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-313.pyc +0 -0
  1569. package/python/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-313.pyc +0 -0
  1570. package/python/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-313.pyc +0 -0
  1571. package/python/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-313.pyc +0 -0
  1572. package/python/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-313.pyc +0 -0
  1573. package/python/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-313.pyc +0 -0
  1574. package/python/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-313.pyc +0 -0
  1575. package/python/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-313.pyc +0 -0
  1576. package/python/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-313.pyc +0 -0
  1577. package/python/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-313.pyc +0 -0
  1578. package/python/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-313.pyc +0 -0
  1579. package/python/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-313.pyc +0 -0
  1580. package/python/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-313.pyc +0 -0
  1581. package/python/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +149 -0
  1582. package/python/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +57 -0
  1583. package/python/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +22 -0
  1584. package/python/Lib/site-packages/pip/_vendor/urllib3/util/request.py +137 -0
  1585. package/python/Lib/site-packages/pip/_vendor/urllib3/util/response.py +107 -0
  1586. package/python/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +622 -0
  1587. package/python/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +504 -0
  1588. package/python/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +159 -0
  1589. package/python/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +221 -0
  1590. package/python/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +271 -0
  1591. package/python/Lib/site-packages/pip/_vendor/urllib3/util/url.py +435 -0
  1592. package/python/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +152 -0
  1593. package/python/Lib/site-packages/pip/_vendor/vendor.txt +19 -0
  1594. package/python/Lib/site-packages/pip/py.typed +4 -0
  1595. package/python/Lib/site-packages/pip-26.0.1.dist-info/INSTALLER +1 -0
  1596. package/python/Lib/site-packages/pip-26.0.1.dist-info/METADATA +111 -0
  1597. package/python/Lib/site-packages/pip-26.0.1.dist-info/RECORD +879 -0
  1598. package/python/Lib/site-packages/pip-26.0.1.dist-info/REQUESTED +0 -0
  1599. package/python/Lib/site-packages/pip-26.0.1.dist-info/WHEEL +4 -0
  1600. package/python/Lib/site-packages/pip-26.0.1.dist-info/direct_url.json +1 -0
  1601. package/python/Lib/site-packages/pip-26.0.1.dist-info/entry_points.txt +4 -0
  1602. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/AUTHORS.txt +860 -0
  1603. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/LICENSE.txt +20 -0
  1604. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/cachecontrol/LICENSE.txt +13 -0
  1605. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/certifi/LICENSE +20 -0
  1606. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/dependency_groups/LICENSE.txt +9 -0
  1607. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/distlib/LICENSE.txt +284 -0
  1608. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/distro/LICENSE +202 -0
  1609. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/idna/LICENSE.md +31 -0
  1610. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/msgpack/COPYING +14 -0
  1611. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE +3 -0
  1612. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.APACHE +177 -0
  1613. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.BSD +23 -0
  1614. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pkg_resources/LICENSE +17 -0
  1615. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/platformdirs/LICENSE +21 -0
  1616. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pygments/LICENSE +25 -0
  1617. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pyproject_hooks/LICENSE +21 -0
  1618. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/requests/LICENSE +175 -0
  1619. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/resolvelib/LICENSE +13 -0
  1620. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/rich/LICENSE +19 -0
  1621. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/tomli/LICENSE +21 -0
  1622. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/tomli_w/LICENSE +21 -0
  1623. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/truststore/LICENSE +21 -0
  1624. package/python/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/urllib3/LICENSE.txt +21 -0
  1625. package/python/Lib/site.py +773 -0
  1626. package/python/Lib/smtplib.py +1123 -0
  1627. package/python/Lib/socket.py +982 -0
  1628. package/python/Lib/socketserver.py +863 -0
  1629. package/python/Lib/sqlite3/__init__.py +70 -0
  1630. package/python/Lib/sqlite3/__main__.py +139 -0
  1631. package/python/Lib/sqlite3/dbapi2.py +108 -0
  1632. package/python/Lib/sqlite3/dump.py +113 -0
  1633. package/python/Lib/sre_compile.py +7 -0
  1634. package/python/Lib/sre_constants.py +7 -0
  1635. package/python/Lib/sre_parse.py +7 -0
  1636. package/python/Lib/ssl.py +1529 -0
  1637. package/python/Lib/stat.py +212 -0
  1638. package/python/Lib/statistics.py +1817 -0
  1639. package/python/Lib/string.py +309 -0
  1640. package/python/Lib/stringprep.py +272 -0
  1641. package/python/Lib/struct.py +15 -0
  1642. package/python/Lib/subprocess.py +2258 -0
  1643. package/python/Lib/symtable.py +414 -0
  1644. package/python/Lib/sysconfig/__init__.py +726 -0
  1645. package/python/Lib/sysconfig/__main__.py +248 -0
  1646. package/python/Lib/sysconfig/__pycache__/__init__.cpython-313.pyc +0 -0
  1647. package/python/Lib/tabnanny.py +340 -0
  1648. package/python/Lib/tarfile.py +3070 -0
  1649. package/python/Lib/tempfile.py +957 -0
  1650. package/python/Lib/textwrap.py +497 -0
  1651. package/python/Lib/this.py +28 -0
  1652. package/python/Lib/threading.py +1602 -0
  1653. package/python/Lib/timeit.py +381 -0
  1654. package/python/Lib/tkinter/__init__.py +5002 -0
  1655. package/python/Lib/tkinter/__main__.py +7 -0
  1656. package/python/Lib/tkinter/colorchooser.py +86 -0
  1657. package/python/Lib/tkinter/commondialog.py +53 -0
  1658. package/python/Lib/tkinter/constants.py +110 -0
  1659. package/python/Lib/tkinter/dialog.py +49 -0
  1660. package/python/Lib/tkinter/dnd.py +324 -0
  1661. package/python/Lib/tkinter/filedialog.py +492 -0
  1662. package/python/Lib/tkinter/font.py +239 -0
  1663. package/python/Lib/tkinter/messagebox.py +146 -0
  1664. package/python/Lib/tkinter/scrolledtext.py +56 -0
  1665. package/python/Lib/tkinter/simpledialog.py +441 -0
  1666. package/python/Lib/tkinter/ttk.py +1647 -0
  1667. package/python/Lib/token.py +141 -0
  1668. package/python/Lib/tokenize.py +592 -0
  1669. package/python/Lib/tomllib/__init__.py +10 -0
  1670. package/python/Lib/tomllib/__pycache__/__init__.cpython-313.pyc +0 -0
  1671. package/python/Lib/tomllib/__pycache__/_parser.cpython-313.pyc +0 -0
  1672. package/python/Lib/tomllib/__pycache__/_re.cpython-313.pyc +0 -0
  1673. package/python/Lib/tomllib/__pycache__/_types.cpython-313.pyc +0 -0
  1674. package/python/Lib/tomllib/_parser.py +691 -0
  1675. package/python/Lib/tomllib/_re.py +107 -0
  1676. package/python/Lib/tomllib/_types.py +10 -0
  1677. package/python/Lib/tomllib/mypy.ini +17 -0
  1678. package/python/Lib/trace.py +754 -0
  1679. package/python/Lib/traceback.py +1638 -0
  1680. package/python/Lib/tracemalloc.py +560 -0
  1681. package/python/Lib/tty.py +73 -0
  1682. package/python/Lib/turtle.py +4199 -0
  1683. package/python/Lib/turtledemo/__init__.py +14 -0
  1684. package/python/Lib/turtledemo/__main__.py +401 -0
  1685. package/python/Lib/turtledemo/bytedesign.py +161 -0
  1686. package/python/Lib/turtledemo/chaos.py +59 -0
  1687. package/python/Lib/turtledemo/clock.py +138 -0
  1688. package/python/Lib/turtledemo/colormixer.py +58 -0
  1689. package/python/Lib/turtledemo/forest.py +108 -0
  1690. package/python/Lib/turtledemo/fractalcurves.py +138 -0
  1691. package/python/Lib/turtledemo/lindenmayer.py +119 -0
  1692. package/python/Lib/turtledemo/minimal_hanoi.py +79 -0
  1693. package/python/Lib/turtledemo/nim.py +226 -0
  1694. package/python/Lib/turtledemo/paint.py +54 -0
  1695. package/python/Lib/turtledemo/peace.py +61 -0
  1696. package/python/Lib/turtledemo/penrose.py +175 -0
  1697. package/python/Lib/turtledemo/planet_and_moon.py +111 -0
  1698. package/python/Lib/turtledemo/rosette.py +65 -0
  1699. package/python/Lib/turtledemo/round_dance.py +86 -0
  1700. package/python/Lib/turtledemo/sorting_animate.py +204 -0
  1701. package/python/Lib/turtledemo/tree.py +62 -0
  1702. package/python/Lib/turtledemo/turtle.cfg +10 -0
  1703. package/python/Lib/turtledemo/two_canvases.py +54 -0
  1704. package/python/Lib/turtledemo/yinyang.py +49 -0
  1705. package/python/Lib/types.py +345 -0
  1706. package/python/Lib/typing.py +3831 -0
  1707. package/python/Lib/unittest/__init__.py +80 -0
  1708. package/python/Lib/unittest/__main__.py +18 -0
  1709. package/python/Lib/unittest/_log.py +86 -0
  1710. package/python/Lib/unittest/async_case.py +146 -0
  1711. package/python/Lib/unittest/case.py +1478 -0
  1712. package/python/Lib/unittest/loader.py +453 -0
  1713. package/python/Lib/unittest/main.py +280 -0
  1714. package/python/Lib/unittest/mock.py +3179 -0
  1715. package/python/Lib/unittest/result.py +256 -0
  1716. package/python/Lib/unittest/runner.py +292 -0
  1717. package/python/Lib/unittest/signals.py +71 -0
  1718. package/python/Lib/unittest/suite.py +379 -0
  1719. package/python/Lib/unittest/util.py +170 -0
  1720. package/python/Lib/urllib/__init__.py +0 -0
  1721. package/python/Lib/urllib/__pycache__/__init__.cpython-313.pyc +0 -0
  1722. package/python/Lib/urllib/__pycache__/error.cpython-313.pyc +0 -0
  1723. package/python/Lib/urllib/__pycache__/parse.cpython-313.pyc +0 -0
  1724. package/python/Lib/urllib/__pycache__/request.cpython-313.pyc +0 -0
  1725. package/python/Lib/urllib/__pycache__/response.cpython-313.pyc +0 -0
  1726. package/python/Lib/urllib/error.py +74 -0
  1727. package/python/Lib/urllib/parse.py +1262 -0
  1728. package/python/Lib/urllib/request.py +2797 -0
  1729. package/python/Lib/urllib/response.py +84 -0
  1730. package/python/Lib/urllib/robotparser.py +286 -0
  1731. package/python/Lib/uuid.py +784 -0
  1732. package/python/Lib/venv/__init__.py +687 -0
  1733. package/python/Lib/venv/__main__.py +10 -0
  1734. package/python/Lib/venv/scripts/common/Activate.ps1 +248 -0
  1735. package/python/Lib/venv/scripts/common/activate +76 -0
  1736. package/python/Lib/venv/scripts/common/activate.fish +69 -0
  1737. package/python/Lib/venv/scripts/nt/activate.bat +34 -0
  1738. package/python/Lib/venv/scripts/nt/deactivate.bat +22 -0
  1739. package/python/Lib/venv/scripts/nt/venvlauncher.exe +0 -0
  1740. package/python/Lib/venv/scripts/nt/venvlauncher.pdb +0 -0
  1741. package/python/Lib/venv/scripts/nt/venvwlauncher.exe +0 -0
  1742. package/python/Lib/venv/scripts/nt/venvwlauncher.pdb +0 -0
  1743. package/python/Lib/venv/scripts/posix/activate.csh +27 -0
  1744. package/python/Lib/warnings.py +735 -0
  1745. package/python/Lib/wave.py +665 -0
  1746. package/python/Lib/weakref.py +674 -0
  1747. package/python/Lib/webbrowser.py +710 -0
  1748. package/python/Lib/wsgiref/__init__.py +25 -0
  1749. package/python/Lib/wsgiref/handlers.py +573 -0
  1750. package/python/Lib/wsgiref/headers.py +187 -0
  1751. package/python/Lib/wsgiref/simple_server.py +161 -0
  1752. package/python/Lib/wsgiref/types.py +54 -0
  1753. package/python/Lib/wsgiref/util.py +159 -0
  1754. package/python/Lib/wsgiref/validate.py +438 -0
  1755. package/python/Lib/xml/__init__.py +20 -0
  1756. package/python/Lib/xml/__pycache__/__init__.cpython-313.pyc +0 -0
  1757. package/python/Lib/xml/dom/NodeFilter.py +27 -0
  1758. package/python/Lib/xml/dom/__init__.py +140 -0
  1759. package/python/Lib/xml/dom/domreg.py +99 -0
  1760. package/python/Lib/xml/dom/expatbuilder.py +962 -0
  1761. package/python/Lib/xml/dom/minicompat.py +109 -0
  1762. package/python/Lib/xml/dom/minidom.py +2024 -0
  1763. package/python/Lib/xml/dom/pulldom.py +336 -0
  1764. package/python/Lib/xml/dom/xmlbuilder.py +389 -0
  1765. package/python/Lib/xml/etree/ElementInclude.py +186 -0
  1766. package/python/Lib/xml/etree/ElementPath.py +423 -0
  1767. package/python/Lib/xml/etree/ElementTree.py +2098 -0
  1768. package/python/Lib/xml/etree/__init__.py +33 -0
  1769. package/python/Lib/xml/etree/cElementTree.py +3 -0
  1770. package/python/Lib/xml/parsers/__init__.py +8 -0
  1771. package/python/Lib/xml/parsers/__pycache__/__init__.cpython-313.pyc +0 -0
  1772. package/python/Lib/xml/parsers/__pycache__/expat.cpython-313.pyc +0 -0
  1773. package/python/Lib/xml/parsers/expat.py +8 -0
  1774. package/python/Lib/xml/sax/__init__.py +94 -0
  1775. package/python/Lib/xml/sax/_exceptions.py +127 -0
  1776. package/python/Lib/xml/sax/expatreader.py +454 -0
  1777. package/python/Lib/xml/sax/handler.py +387 -0
  1778. package/python/Lib/xml/sax/saxutils.py +369 -0
  1779. package/python/Lib/xml/sax/xmlreader.py +378 -0
  1780. package/python/Lib/xmlrpc/__init__.py +1 -0
  1781. package/python/Lib/xmlrpc/__pycache__/__init__.cpython-313.pyc +0 -0
  1782. package/python/Lib/xmlrpc/__pycache__/client.cpython-313.pyc +0 -0
  1783. package/python/Lib/xmlrpc/client.py +1503 -0
  1784. package/python/Lib/xmlrpc/server.py +1002 -0
  1785. package/python/Lib/zipapp.py +229 -0
  1786. package/python/Lib/zipfile/__init__.py +2375 -0
  1787. package/python/Lib/zipfile/__main__.py +4 -0
  1788. package/python/Lib/zipfile/__pycache__/__init__.cpython-313.pyc +0 -0
  1789. package/python/Lib/zipfile/_path/__init__.py +452 -0
  1790. package/python/Lib/zipfile/_path/__pycache__/__init__.cpython-313.pyc +0 -0
  1791. package/python/Lib/zipfile/_path/__pycache__/glob.cpython-313.pyc +0 -0
  1792. package/python/Lib/zipfile/_path/glob.py +113 -0
  1793. package/python/Lib/zipimport.py +803 -0
  1794. package/python/Lib/zoneinfo/__init__.py +34 -0
  1795. package/python/Lib/zoneinfo/_common.py +168 -0
  1796. package/python/Lib/zoneinfo/_tzpath.py +189 -0
  1797. package/python/Lib/zoneinfo/_zoneinfo.py +772 -0
  1798. package/python/Scripts/.empty +0 -0
  1799. package/python/include/Python.h +140 -0
  1800. package/python/include/abstract.h +921 -0
  1801. package/python/include/bltinmodule.h +14 -0
  1802. package/python/include/boolobject.h +54 -0
  1803. package/python/include/bytearrayobject.h +44 -0
  1804. package/python/include/bytesobject.h +66 -0
  1805. package/python/include/ceval.h +145 -0
  1806. package/python/include/codecs.h +176 -0
  1807. package/python/include/compile.h +22 -0
  1808. package/python/include/complexobject.h +30 -0
  1809. package/python/include/cpython/abstract.h +87 -0
  1810. package/python/include/cpython/bytearrayobject.h +34 -0
  1811. package/python/include/cpython/bytesobject.h +37 -0
  1812. package/python/include/cpython/cellobject.h +44 -0
  1813. package/python/include/cpython/ceval.h +25 -0
  1814. package/python/include/cpython/classobject.h +71 -0
  1815. package/python/include/cpython/code.h +358 -0
  1816. package/python/include/cpython/compile.h +50 -0
  1817. package/python/include/cpython/complexobject.h +33 -0
  1818. package/python/include/cpython/context.h +74 -0
  1819. package/python/include/cpython/critical_section.h +134 -0
  1820. package/python/include/cpython/descrobject.h +62 -0
  1821. package/python/include/cpython/dictobject.h +102 -0
  1822. package/python/include/cpython/fileobject.h +16 -0
  1823. package/python/include/cpython/fileutils.h +8 -0
  1824. package/python/include/cpython/floatobject.h +27 -0
  1825. package/python/include/cpython/frameobject.h +35 -0
  1826. package/python/include/cpython/funcobject.h +184 -0
  1827. package/python/include/cpython/genobject.h +83 -0
  1828. package/python/include/cpython/import.h +25 -0
  1829. package/python/include/cpython/initconfig.h +274 -0
  1830. package/python/include/cpython/listobject.h +53 -0
  1831. package/python/include/cpython/lock.h +63 -0
  1832. package/python/include/cpython/longintrepr.h +146 -0
  1833. package/python/include/cpython/longobject.h +116 -0
  1834. package/python/include/cpython/memoryobject.h +50 -0
  1835. package/python/include/cpython/methodobject.h +66 -0
  1836. package/python/include/cpython/modsupport.h +26 -0
  1837. package/python/include/cpython/monitoring.h +250 -0
  1838. package/python/include/cpython/object.h +535 -0
  1839. package/python/include/cpython/objimpl.h +104 -0
  1840. package/python/include/cpython/odictobject.h +43 -0
  1841. package/python/include/cpython/picklebufobject.h +31 -0
  1842. package/python/include/cpython/pthread_stubs.h +105 -0
  1843. package/python/include/cpython/pyatomic.h +569 -0
  1844. package/python/include/cpython/pyatomic_gcc.h +551 -0
  1845. package/python/include/cpython/pyatomic_msc.h +1095 -0
  1846. package/python/include/cpython/pyatomic_std.h +976 -0
  1847. package/python/include/cpython/pyctype.h +39 -0
  1848. package/python/include/cpython/pydebug.h +38 -0
  1849. package/python/include/cpython/pyerrors.h +132 -0
  1850. package/python/include/cpython/pyfpe.h +15 -0
  1851. package/python/include/cpython/pyframe.h +45 -0
  1852. package/python/include/cpython/pyhash.h +47 -0
  1853. package/python/include/cpython/pylifecycle.h +92 -0
  1854. package/python/include/cpython/pymem.h +84 -0
  1855. package/python/include/cpython/pystate.h +277 -0
  1856. package/python/include/cpython/pystats.h +175 -0
  1857. package/python/include/cpython/pythonrun.h +96 -0
  1858. package/python/include/cpython/pythread.h +43 -0
  1859. package/python/include/cpython/pytime.h +27 -0
  1860. package/python/include/cpython/setobject.h +71 -0
  1861. package/python/include/cpython/sysmodule.h +22 -0
  1862. package/python/include/cpython/traceback.h +13 -0
  1863. package/python/include/cpython/tracemalloc.h +32 -0
  1864. package/python/include/cpython/tupleobject.h +38 -0
  1865. package/python/include/cpython/unicodeobject.h +703 -0
  1866. package/python/include/cpython/warnings.h +20 -0
  1867. package/python/include/cpython/weakrefobject.h +63 -0
  1868. package/python/include/critical_section.h +16 -0
  1869. package/python/include/datetime.h +267 -0
  1870. package/python/include/descrobject.h +100 -0
  1871. package/python/include/dictobject.h +108 -0
  1872. package/python/include/dynamic_annotations.h +499 -0
  1873. package/python/include/enumobject.h +17 -0
  1874. package/python/include/errcode.h +45 -0
  1875. package/python/include/exports.h +108 -0
  1876. package/python/include/fileobject.h +41 -0
  1877. package/python/include/fileutils.h +62 -0
  1878. package/python/include/floatobject.h +54 -0
  1879. package/python/include/frameobject.h +20 -0
  1880. package/python/include/genericaliasobject.h +14 -0
  1881. package/python/include/import.h +103 -0
  1882. package/python/include/internal/mimalloc/mimalloc/atomic.h +392 -0
  1883. package/python/include/internal/mimalloc/mimalloc/internal.h +969 -0
  1884. package/python/include/internal/mimalloc/mimalloc/prim.h +329 -0
  1885. package/python/include/internal/mimalloc/mimalloc/track.h +147 -0
  1886. package/python/include/internal/mimalloc/mimalloc/types.h +721 -0
  1887. package/python/include/internal/mimalloc/mimalloc.h +565 -0
  1888. package/python/include/internal/pycore_abstract.h +61 -0
  1889. package/python/include/internal/pycore_asdl.h +112 -0
  1890. package/python/include/internal/pycore_ast.h +926 -0
  1891. package/python/include/internal/pycore_ast_state.h +268 -0
  1892. package/python/include/internal/pycore_atexit.h +67 -0
  1893. package/python/include/internal/pycore_backoff.h +145 -0
  1894. package/python/include/internal/pycore_bitutils.h +186 -0
  1895. package/python/include/internal/pycore_blocks_output_buffer.h +321 -0
  1896. package/python/include/internal/pycore_brc.h +74 -0
  1897. package/python/include/internal/pycore_bytes_methods.h +82 -0
  1898. package/python/include/internal/pycore_bytesobject.h +152 -0
  1899. package/python/include/internal/pycore_call.h +205 -0
  1900. package/python/include/internal/pycore_capsule.h +17 -0
  1901. package/python/include/internal/pycore_cell.h +48 -0
  1902. package/python/include/internal/pycore_ceval.h +305 -0
  1903. package/python/include/internal/pycore_ceval_state.h +137 -0
  1904. package/python/include/internal/pycore_code.h +603 -0
  1905. package/python/include/internal/pycore_codecs.h +86 -0
  1906. package/python/include/internal/pycore_compile.h +118 -0
  1907. package/python/include/internal/pycore_complexobject.h +25 -0
  1908. package/python/include/internal/pycore_condvar.h +93 -0
  1909. package/python/include/internal/pycore_context.h +61 -0
  1910. package/python/include/internal/pycore_critical_section.h +233 -0
  1911. package/python/include/internal/pycore_crossinterp.h +340 -0
  1912. package/python/include/internal/pycore_descrobject.h +28 -0
  1913. package/python/include/internal/pycore_dict.h +340 -0
  1914. package/python/include/internal/pycore_dict_state.h +32 -0
  1915. package/python/include/internal/pycore_dtoa.h +75 -0
  1916. package/python/include/internal/pycore_emscripten_signal.h +30 -0
  1917. package/python/include/internal/pycore_emscripten_trampoline.h +81 -0
  1918. package/python/include/internal/pycore_exceptions.h +40 -0
  1919. package/python/include/internal/pycore_faulthandler.h +99 -0
  1920. package/python/include/internal/pycore_fileutils.h +335 -0
  1921. package/python/include/internal/pycore_fileutils_windows.h +98 -0
  1922. package/python/include/internal/pycore_floatobject.h +62 -0
  1923. package/python/include/internal/pycore_flowgraph.h +40 -0
  1924. package/python/include/internal/pycore_format.h +27 -0
  1925. package/python/include/internal/pycore_frame.h +370 -0
  1926. package/python/include/internal/pycore_freelist.h +153 -0
  1927. package/python/include/internal/pycore_function.h +55 -0
  1928. package/python/include/internal/pycore_gc.h +365 -0
  1929. package/python/include/internal/pycore_genobject.h +32 -0
  1930. package/python/include/internal/pycore_getopt.h +22 -0
  1931. package/python/include/internal/pycore_gil.h +66 -0
  1932. package/python/include/internal/pycore_global_objects.h +105 -0
  1933. package/python/include/internal/pycore_global_objects_fini_generated.h +1554 -0
  1934. package/python/include/internal/pycore_global_strings.h +814 -0
  1935. package/python/include/internal/pycore_hamt.h +134 -0
  1936. package/python/include/internal/pycore_hashtable.h +150 -0
  1937. package/python/include/internal/pycore_identifier.h +20 -0
  1938. package/python/include/internal/pycore_import.h +213 -0
  1939. package/python/include/internal/pycore_importdl.h +139 -0
  1940. package/python/include/internal/pycore_initconfig.h +200 -0
  1941. package/python/include/internal/pycore_instruction_sequence.h +73 -0
  1942. package/python/include/internal/pycore_instruments.h +75 -0
  1943. package/python/include/internal/pycore_interp.h +423 -0
  1944. package/python/include/internal/pycore_intrinsics.h +51 -0
  1945. package/python/include/internal/pycore_jit.h +25 -0
  1946. package/python/include/internal/pycore_list.h +66 -0
  1947. package/python/include/internal/pycore_llist.h +106 -0
  1948. package/python/include/internal/pycore_lock.h +241 -0
  1949. package/python/include/internal/pycore_long.h +310 -0
  1950. package/python/include/internal/pycore_memoryobject.h +20 -0
  1951. package/python/include/internal/pycore_mimalloc.h +69 -0
  1952. package/python/include/internal/pycore_modsupport.h +107 -0
  1953. package/python/include/internal/pycore_moduleobject.h +56 -0
  1954. package/python/include/internal/pycore_namespace.h +21 -0
  1955. package/python/include/internal/pycore_object.h +867 -0
  1956. package/python/include/internal/pycore_object_alloc.h +71 -0
  1957. package/python/include/internal/pycore_object_stack.h +97 -0
  1958. package/python/include/internal/pycore_object_state.h +41 -0
  1959. package/python/include/internal/pycore_obmalloc.h +702 -0
  1960. package/python/include/internal/pycore_obmalloc_init.h +66 -0
  1961. package/python/include/internal/pycore_opcode_metadata.h +1922 -0
  1962. package/python/include/internal/pycore_opcode_utils.h +73 -0
  1963. package/python/include/internal/pycore_optimizer.h +272 -0
  1964. package/python/include/internal/pycore_parking_lot.h +97 -0
  1965. package/python/include/internal/pycore_parser.h +95 -0
  1966. package/python/include/internal/pycore_pathconfig.h +26 -0
  1967. package/python/include/internal/pycore_pyarena.h +68 -0
  1968. package/python/include/internal/pycore_pyatomic_ft_wrappers.h +165 -0
  1969. package/python/include/internal/pycore_pybuffer.h +21 -0
  1970. package/python/include/internal/pycore_pyerrors.h +190 -0
  1971. package/python/include/internal/pycore_pyhash.h +107 -0
  1972. package/python/include/internal/pycore_pylifecycle.h +136 -0
  1973. package/python/include/internal/pycore_pymath.h +205 -0
  1974. package/python/include/internal/pycore_pymem.h +161 -0
  1975. package/python/include/internal/pycore_pymem_init.h +103 -0
  1976. package/python/include/internal/pycore_pystate.h +299 -0
  1977. package/python/include/internal/pycore_pystats.h +21 -0
  1978. package/python/include/internal/pycore_pythonrun.h +39 -0
  1979. package/python/include/internal/pycore_pythread.h +172 -0
  1980. package/python/include/internal/pycore_qsbr.h +173 -0
  1981. package/python/include/internal/pycore_range.h +21 -0
  1982. package/python/include/internal/pycore_runtime.h +410 -0
  1983. package/python/include/internal/pycore_runtime_init.h +329 -0
  1984. package/python/include/internal/pycore_runtime_init_generated.h +1551 -0
  1985. package/python/include/internal/pycore_semaphore.h +67 -0
  1986. package/python/include/internal/pycore_setobject.h +39 -0
  1987. package/python/include/internal/pycore_signal.h +108 -0
  1988. package/python/include/internal/pycore_sliceobject.h +20 -0
  1989. package/python/include/internal/pycore_stackref.h +195 -0
  1990. package/python/include/internal/pycore_strhex.h +39 -0
  1991. package/python/include/internal/pycore_structseq.h +40 -0
  1992. package/python/include/internal/pycore_symtable.h +204 -0
  1993. package/python/include/internal/pycore_sysmodule.h +38 -0
  1994. package/python/include/internal/pycore_time.h +337 -0
  1995. package/python/include/internal/pycore_token.h +106 -0
  1996. package/python/include/internal/pycore_traceback.h +106 -0
  1997. package/python/include/internal/pycore_tracemalloc.h +170 -0
  1998. package/python/include/internal/pycore_tstate.h +46 -0
  1999. package/python/include/internal/pycore_tuple.h +35 -0
  2000. package/python/include/internal/pycore_typeobject.h +245 -0
  2001. package/python/include/internal/pycore_typevarobject.h +27 -0
  2002. package/python/include/internal/pycore_ucnhash.h +36 -0
  2003. package/python/include/internal/pycore_unicodeobject.h +351 -0
  2004. package/python/include/internal/pycore_unicodeobject_generated.h +2980 -0
  2005. package/python/include/internal/pycore_unionobject.h +25 -0
  2006. package/python/include/internal/pycore_uop_ids.h +295 -0
  2007. package/python/include/internal/pycore_uop_metadata.h +1010 -0
  2008. package/python/include/internal/pycore_warnings.h +31 -0
  2009. package/python/include/internal/pycore_weakref.h +133 -0
  2010. package/python/include/intrcheck.h +23 -0
  2011. package/python/include/iterobject.h +24 -0
  2012. package/python/include/listobject.h +55 -0
  2013. package/python/include/lock.h +16 -0
  2014. package/python/include/longobject.h +114 -0
  2015. package/python/include/marshal.h +31 -0
  2016. package/python/include/memoryobject.h +34 -0
  2017. package/python/include/methodobject.h +137 -0
  2018. package/python/include/modsupport.h +146 -0
  2019. package/python/include/moduleobject.h +122 -0
  2020. package/python/include/monitoring.h +18 -0
  2021. package/python/include/object.h +1280 -0
  2022. package/python/include/objimpl.h +211 -0
  2023. package/python/include/opcode.h +42 -0
  2024. package/python/include/opcode_ids.h +244 -0
  2025. package/python/include/osdefs.h +57 -0
  2026. package/python/include/osmodule.h +17 -0
  2027. package/python/include/patchlevel.h +35 -0
  2028. package/python/include/py_curses.h +117 -0
  2029. package/python/include/pyatomic.h +16 -0
  2030. package/python/include/pybuffer.h +145 -0
  2031. package/python/include/pycapsule.h +58 -0
  2032. package/python/include/pyconfig.h +759 -0
  2033. package/python/include/pydtrace.h +59 -0
  2034. package/python/include/pyerrors.h +335 -0
  2035. package/python/include/pyexpat.h +62 -0
  2036. package/python/include/pyframe.h +26 -0
  2037. package/python/include/pyhash.h +59 -0
  2038. package/python/include/pylifecycle.h +80 -0
  2039. package/python/include/pymacconfig.h +91 -0
  2040. package/python/include/pymacro.h +199 -0
  2041. package/python/include/pymath.h +62 -0
  2042. package/python/include/pymem.h +110 -0
  2043. package/python/include/pyport.h +633 -0
  2044. package/python/include/pystate.h +132 -0
  2045. package/python/include/pystats.h +26 -0
  2046. package/python/include/pystrcmp.h +23 -0
  2047. package/python/include/pystrtod.h +37 -0
  2048. package/python/include/pythonrun.h +49 -0
  2049. package/python/include/pythread.h +131 -0
  2050. package/python/include/pytypedefs.h +30 -0
  2051. package/python/include/rangeobject.h +27 -0
  2052. package/python/include/setobject.h +49 -0
  2053. package/python/include/sliceobject.h +69 -0
  2054. package/python/include/structmember.h +56 -0
  2055. package/python/include/structseq.h +46 -0
  2056. package/python/include/sysmodule.h +44 -0
  2057. package/python/include/traceback.h +26 -0
  2058. package/python/include/tupleobject.h +46 -0
  2059. package/python/include/typeslots.h +88 -0
  2060. package/python/include/unicodeobject.h +1021 -0
  2061. package/python/include/warnings.h +45 -0
  2062. package/python/include/weakrefobject.h +46 -0
  2063. package/python/libs/python3.lib +0 -0
  2064. package/python/libs/python313.lib +0 -0
  2065. package/python/python.exe +0 -0
  2066. package/python/python.pdb +0 -0
  2067. package/python/python3.dll +0 -0
  2068. package/python/python3.pdb +0 -0
  2069. package/python/python313.dll +0 -0
  2070. package/python/python313.pdb +0 -0
  2071. package/python/pythonw.exe +0 -0
  2072. package/python/pythonw.pdb +0 -0
  2073. package/python/tcl/dde1.4/pkgIndex.tcl +12 -0
  2074. package/python/tcl/dde1.4/tcldde14.dll +0 -0
  2075. package/python/tcl/nmake/nmakehlp.c +815 -0
  2076. package/python/tcl/nmake/rules.vc +1869 -0
  2077. package/python/tcl/nmake/targets.vc +98 -0
  2078. package/python/tcl/nmake/tcl.nmake +4 -0
  2079. package/python/tcl/reg1.3/pkgIndex.tcl +9 -0
  2080. package/python/tcl/reg1.3/tclreg13.dll +0 -0
  2081. package/python/tcl/tcl8/8.4/platform/shell-1.1.4.tm +241 -0
  2082. package/python/tcl/tcl8/8.4/platform-1.0.18.tm +439 -0
  2083. package/python/tcl/tcl8/8.5/msgcat-1.6.1.tm +1210 -0
  2084. package/python/tcl/tcl8/8.5/tcltest-2.5.3.tm +3515 -0
  2085. package/python/tcl/tcl8/8.6/http-2.9.5.tm +3506 -0
  2086. package/python/tcl/tcl8.6/auto.tcl +648 -0
  2087. package/python/tcl/tcl8.6/clock.tcl +4546 -0
  2088. package/python/tcl/tcl8.6/encoding/ascii.enc +20 -0
  2089. package/python/tcl/tcl8.6/encoding/big5.enc +1516 -0
  2090. package/python/tcl/tcl8.6/encoding/cns11643.enc +1584 -0
  2091. package/python/tcl/tcl8.6/encoding/cp1250.enc +20 -0
  2092. package/python/tcl/tcl8.6/encoding/cp1251.enc +20 -0
  2093. package/python/tcl/tcl8.6/encoding/cp1252.enc +20 -0
  2094. package/python/tcl/tcl8.6/encoding/cp1253.enc +20 -0
  2095. package/python/tcl/tcl8.6/encoding/cp1254.enc +20 -0
  2096. package/python/tcl/tcl8.6/encoding/cp1255.enc +20 -0
  2097. package/python/tcl/tcl8.6/encoding/cp1256.enc +20 -0
  2098. package/python/tcl/tcl8.6/encoding/cp1257.enc +20 -0
  2099. package/python/tcl/tcl8.6/encoding/cp1258.enc +20 -0
  2100. package/python/tcl/tcl8.6/encoding/cp437.enc +20 -0
  2101. package/python/tcl/tcl8.6/encoding/cp737.enc +20 -0
  2102. package/python/tcl/tcl8.6/encoding/cp775.enc +20 -0
  2103. package/python/tcl/tcl8.6/encoding/cp850.enc +20 -0
  2104. package/python/tcl/tcl8.6/encoding/cp852.enc +20 -0
  2105. package/python/tcl/tcl8.6/encoding/cp855.enc +20 -0
  2106. package/python/tcl/tcl8.6/encoding/cp857.enc +20 -0
  2107. package/python/tcl/tcl8.6/encoding/cp860.enc +20 -0
  2108. package/python/tcl/tcl8.6/encoding/cp861.enc +20 -0
  2109. package/python/tcl/tcl8.6/encoding/cp862.enc +20 -0
  2110. package/python/tcl/tcl8.6/encoding/cp863.enc +20 -0
  2111. package/python/tcl/tcl8.6/encoding/cp864.enc +20 -0
  2112. package/python/tcl/tcl8.6/encoding/cp865.enc +20 -0
  2113. package/python/tcl/tcl8.6/encoding/cp866.enc +20 -0
  2114. package/python/tcl/tcl8.6/encoding/cp869.enc +20 -0
  2115. package/python/tcl/tcl8.6/encoding/cp874.enc +20 -0
  2116. package/python/tcl/tcl8.6/encoding/cp932.enc +801 -0
  2117. package/python/tcl/tcl8.6/encoding/cp936.enc +2162 -0
  2118. package/python/tcl/tcl8.6/encoding/cp949.enc +2128 -0
  2119. package/python/tcl/tcl8.6/encoding/cp950.enc +1499 -0
  2120. package/python/tcl/tcl8.6/encoding/dingbats.enc +20 -0
  2121. package/python/tcl/tcl8.6/encoding/ebcdic.enc +19 -0
  2122. package/python/tcl/tcl8.6/encoding/euc-cn.enc +1397 -0
  2123. package/python/tcl/tcl8.6/encoding/euc-jp.enc +1353 -0
  2124. package/python/tcl/tcl8.6/encoding/euc-kr.enc +1533 -0
  2125. package/python/tcl/tcl8.6/encoding/gb12345.enc +1414 -0
  2126. package/python/tcl/tcl8.6/encoding/gb1988.enc +20 -0
  2127. package/python/tcl/tcl8.6/encoding/gb2312-raw.enc +1380 -0
  2128. package/python/tcl/tcl8.6/encoding/gb2312.enc +1397 -0
  2129. package/python/tcl/tcl8.6/encoding/iso2022-jp.enc +12 -0
  2130. package/python/tcl/tcl8.6/encoding/iso2022-kr.enc +7 -0
  2131. package/python/tcl/tcl8.6/encoding/iso2022.enc +14 -0
  2132. package/python/tcl/tcl8.6/encoding/iso8859-1.enc +20 -0
  2133. package/python/tcl/tcl8.6/encoding/iso8859-10.enc +20 -0
  2134. package/python/tcl/tcl8.6/encoding/iso8859-11.enc +20 -0
  2135. package/python/tcl/tcl8.6/encoding/iso8859-13.enc +20 -0
  2136. package/python/tcl/tcl8.6/encoding/iso8859-14.enc +20 -0
  2137. package/python/tcl/tcl8.6/encoding/iso8859-15.enc +20 -0
  2138. package/python/tcl/tcl8.6/encoding/iso8859-16.enc +20 -0
  2139. package/python/tcl/tcl8.6/encoding/iso8859-2.enc +20 -0
  2140. package/python/tcl/tcl8.6/encoding/iso8859-3.enc +20 -0
  2141. package/python/tcl/tcl8.6/encoding/iso8859-4.enc +20 -0
  2142. package/python/tcl/tcl8.6/encoding/iso8859-5.enc +20 -0
  2143. package/python/tcl/tcl8.6/encoding/iso8859-6.enc +20 -0
  2144. package/python/tcl/tcl8.6/encoding/iso8859-7.enc +20 -0
  2145. package/python/tcl/tcl8.6/encoding/iso8859-8.enc +20 -0
  2146. package/python/tcl/tcl8.6/encoding/iso8859-9.enc +20 -0
  2147. package/python/tcl/tcl8.6/encoding/jis0201.enc +20 -0
  2148. package/python/tcl/tcl8.6/encoding/jis0208.enc +1319 -0
  2149. package/python/tcl/tcl8.6/encoding/jis0212.enc +1159 -0
  2150. package/python/tcl/tcl8.6/encoding/koi8-r.enc +20 -0
  2151. package/python/tcl/tcl8.6/encoding/koi8-u.enc +20 -0
  2152. package/python/tcl/tcl8.6/encoding/ksc5601.enc +1516 -0
  2153. package/python/tcl/tcl8.6/encoding/macCentEuro.enc +20 -0
  2154. package/python/tcl/tcl8.6/encoding/macCroatian.enc +20 -0
  2155. package/python/tcl/tcl8.6/encoding/macCyrillic.enc +20 -0
  2156. package/python/tcl/tcl8.6/encoding/macDingbats.enc +20 -0
  2157. package/python/tcl/tcl8.6/encoding/macGreek.enc +20 -0
  2158. package/python/tcl/tcl8.6/encoding/macIceland.enc +20 -0
  2159. package/python/tcl/tcl8.6/encoding/macJapan.enc +785 -0
  2160. package/python/tcl/tcl8.6/encoding/macRoman.enc +20 -0
  2161. package/python/tcl/tcl8.6/encoding/macRomania.enc +20 -0
  2162. package/python/tcl/tcl8.6/encoding/macThai.enc +20 -0
  2163. package/python/tcl/tcl8.6/encoding/macTurkish.enc +20 -0
  2164. package/python/tcl/tcl8.6/encoding/macUkraine.enc +20 -0
  2165. package/python/tcl/tcl8.6/encoding/shiftjis.enc +690 -0
  2166. package/python/tcl/tcl8.6/encoding/symbol.enc +20 -0
  2167. package/python/tcl/tcl8.6/encoding/tis-620.enc +20 -0
  2168. package/python/tcl/tcl8.6/history.tcl +335 -0
  2169. package/python/tcl/tcl8.6/http1.0/http.tcl +377 -0
  2170. package/python/tcl/tcl8.6/http1.0/pkgIndex.tcl +11 -0
  2171. package/python/tcl/tcl8.6/init.tcl +827 -0
  2172. package/python/tcl/tcl8.6/msgs/af.msg +49 -0
  2173. package/python/tcl/tcl8.6/msgs/af_za.msg +6 -0
  2174. package/python/tcl/tcl8.6/msgs/ar.msg +54 -0
  2175. package/python/tcl/tcl8.6/msgs/ar_in.msg +6 -0
  2176. package/python/tcl/tcl8.6/msgs/ar_jo.msg +39 -0
  2177. package/python/tcl/tcl8.6/msgs/ar_lb.msg +39 -0
  2178. package/python/tcl/tcl8.6/msgs/ar_sy.msg +39 -0
  2179. package/python/tcl/tcl8.6/msgs/be.msg +52 -0
  2180. package/python/tcl/tcl8.6/msgs/bg.msg +52 -0
  2181. package/python/tcl/tcl8.6/msgs/bn.msg +49 -0
  2182. package/python/tcl/tcl8.6/msgs/bn_in.msg +6 -0
  2183. package/python/tcl/tcl8.6/msgs/ca.msg +50 -0
  2184. package/python/tcl/tcl8.6/msgs/cs.msg +54 -0
  2185. package/python/tcl/tcl8.6/msgs/da.msg +52 -0
  2186. package/python/tcl/tcl8.6/msgs/de.msg +54 -0
  2187. package/python/tcl/tcl8.6/msgs/de_at.msg +35 -0
  2188. package/python/tcl/tcl8.6/msgs/de_be.msg +53 -0
  2189. package/python/tcl/tcl8.6/msgs/el.msg +52 -0
  2190. package/python/tcl/tcl8.6/msgs/en_au.msg +7 -0
  2191. package/python/tcl/tcl8.6/msgs/en_be.msg +7 -0
  2192. package/python/tcl/tcl8.6/msgs/en_bw.msg +6 -0
  2193. package/python/tcl/tcl8.6/msgs/en_ca.msg +7 -0
  2194. package/python/tcl/tcl8.6/msgs/en_gb.msg +7 -0
  2195. package/python/tcl/tcl8.6/msgs/en_hk.msg +8 -0
  2196. package/python/tcl/tcl8.6/msgs/en_ie.msg +7 -0
  2197. package/python/tcl/tcl8.6/msgs/en_in.msg +8 -0
  2198. package/python/tcl/tcl8.6/msgs/en_nz.msg +7 -0
  2199. package/python/tcl/tcl8.6/msgs/en_ph.msg +8 -0
  2200. package/python/tcl/tcl8.6/msgs/en_sg.msg +6 -0
  2201. package/python/tcl/tcl8.6/msgs/en_za.msg +6 -0
  2202. package/python/tcl/tcl8.6/msgs/en_zw.msg +6 -0
  2203. package/python/tcl/tcl8.6/msgs/eo.msg +54 -0
  2204. package/python/tcl/tcl8.6/msgs/es.msg +52 -0
  2205. package/python/tcl/tcl8.6/msgs/es_ar.msg +6 -0
  2206. package/python/tcl/tcl8.6/msgs/es_bo.msg +6 -0
  2207. package/python/tcl/tcl8.6/msgs/es_cl.msg +6 -0
  2208. package/python/tcl/tcl8.6/msgs/es_co.msg +6 -0
  2209. package/python/tcl/tcl8.6/msgs/es_cr.msg +6 -0
  2210. package/python/tcl/tcl8.6/msgs/es_do.msg +6 -0
  2211. package/python/tcl/tcl8.6/msgs/es_ec.msg +6 -0
  2212. package/python/tcl/tcl8.6/msgs/es_gt.msg +6 -0
  2213. package/python/tcl/tcl8.6/msgs/es_hn.msg +6 -0
  2214. package/python/tcl/tcl8.6/msgs/es_mx.msg +6 -0
  2215. package/python/tcl/tcl8.6/msgs/es_ni.msg +6 -0
  2216. package/python/tcl/tcl8.6/msgs/es_pa.msg +6 -0
  2217. package/python/tcl/tcl8.6/msgs/es_pe.msg +6 -0
  2218. package/python/tcl/tcl8.6/msgs/es_pr.msg +6 -0
  2219. package/python/tcl/tcl8.6/msgs/es_py.msg +6 -0
  2220. package/python/tcl/tcl8.6/msgs/es_sv.msg +6 -0
  2221. package/python/tcl/tcl8.6/msgs/es_uy.msg +6 -0
  2222. package/python/tcl/tcl8.6/msgs/es_ve.msg +6 -0
  2223. package/python/tcl/tcl8.6/msgs/et.msg +52 -0
  2224. package/python/tcl/tcl8.6/msgs/eu.msg +47 -0
  2225. package/python/tcl/tcl8.6/msgs/eu_es.msg +7 -0
  2226. package/python/tcl/tcl8.6/msgs/fa.msg +47 -0
  2227. package/python/tcl/tcl8.6/msgs/fa_in.msg +52 -0
  2228. package/python/tcl/tcl8.6/msgs/fa_ir.msg +9 -0
  2229. package/python/tcl/tcl8.6/msgs/fi.msg +50 -0
  2230. package/python/tcl/tcl8.6/msgs/fo.msg +47 -0
  2231. package/python/tcl/tcl8.6/msgs/fo_fo.msg +7 -0
  2232. package/python/tcl/tcl8.6/msgs/fr.msg +52 -0
  2233. package/python/tcl/tcl8.6/msgs/fr_be.msg +7 -0
  2234. package/python/tcl/tcl8.6/msgs/fr_ca.msg +7 -0
  2235. package/python/tcl/tcl8.6/msgs/fr_ch.msg +7 -0
  2236. package/python/tcl/tcl8.6/msgs/ga.msg +47 -0
  2237. package/python/tcl/tcl8.6/msgs/ga_ie.msg +7 -0
  2238. package/python/tcl/tcl8.6/msgs/gl.msg +47 -0
  2239. package/python/tcl/tcl8.6/msgs/gl_es.msg +6 -0
  2240. package/python/tcl/tcl8.6/msgs/gv.msg +47 -0
  2241. package/python/tcl/tcl8.6/msgs/gv_gb.msg +6 -0
  2242. package/python/tcl/tcl8.6/msgs/he.msg +52 -0
  2243. package/python/tcl/tcl8.6/msgs/hi.msg +39 -0
  2244. package/python/tcl/tcl8.6/msgs/hi_in.msg +6 -0
  2245. package/python/tcl/tcl8.6/msgs/hr.msg +50 -0
  2246. package/python/tcl/tcl8.6/msgs/hu.msg +54 -0
  2247. package/python/tcl/tcl8.6/msgs/id.msg +47 -0
  2248. package/python/tcl/tcl8.6/msgs/id_id.msg +6 -0
  2249. package/python/tcl/tcl8.6/msgs/is.msg +50 -0
  2250. package/python/tcl/tcl8.6/msgs/it.msg +54 -0
  2251. package/python/tcl/tcl8.6/msgs/it_ch.msg +6 -0
  2252. package/python/tcl/tcl8.6/msgs/ja.msg +44 -0
  2253. package/python/tcl/tcl8.6/msgs/kl.msg +47 -0
  2254. package/python/tcl/tcl8.6/msgs/kl_gl.msg +7 -0
  2255. package/python/tcl/tcl8.6/msgs/ko.msg +55 -0
  2256. package/python/tcl/tcl8.6/msgs/ko_kr.msg +8 -0
  2257. package/python/tcl/tcl8.6/msgs/kok.msg +39 -0
  2258. package/python/tcl/tcl8.6/msgs/kok_in.msg +6 -0
  2259. package/python/tcl/tcl8.6/msgs/kw.msg +47 -0
  2260. package/python/tcl/tcl8.6/msgs/kw_gb.msg +6 -0
  2261. package/python/tcl/tcl8.6/msgs/lt.msg +52 -0
  2262. package/python/tcl/tcl8.6/msgs/lv.msg +52 -0
  2263. package/python/tcl/tcl8.6/msgs/mk.msg +52 -0
  2264. package/python/tcl/tcl8.6/msgs/mr.msg +39 -0
  2265. package/python/tcl/tcl8.6/msgs/mr_in.msg +6 -0
  2266. package/python/tcl/tcl8.6/msgs/ms.msg +47 -0
  2267. package/python/tcl/tcl8.6/msgs/ms_my.msg +6 -0
  2268. package/python/tcl/tcl8.6/msgs/mt.msg +27 -0
  2269. package/python/tcl/tcl8.6/msgs/nb.msg +52 -0
  2270. package/python/tcl/tcl8.6/msgs/nl.msg +50 -0
  2271. package/python/tcl/tcl8.6/msgs/nl_be.msg +7 -0
  2272. package/python/tcl/tcl8.6/msgs/nn.msg +52 -0
  2273. package/python/tcl/tcl8.6/msgs/pl.msg +52 -0
  2274. package/python/tcl/tcl8.6/msgs/pt.msg +50 -0
  2275. package/python/tcl/tcl8.6/msgs/pt_br.msg +7 -0
  2276. package/python/tcl/tcl8.6/msgs/ro.msg +52 -0
  2277. package/python/tcl/tcl8.6/msgs/ru.msg +52 -0
  2278. package/python/tcl/tcl8.6/msgs/ru_ua.msg +6 -0
  2279. package/python/tcl/tcl8.6/msgs/sh.msg +52 -0
  2280. package/python/tcl/tcl8.6/msgs/sk.msg +52 -0
  2281. package/python/tcl/tcl8.6/msgs/sl.msg +52 -0
  2282. package/python/tcl/tcl8.6/msgs/sq.msg +54 -0
  2283. package/python/tcl/tcl8.6/msgs/sr.msg +52 -0
  2284. package/python/tcl/tcl8.6/msgs/sv.msg +52 -0
  2285. package/python/tcl/tcl8.6/msgs/sw.msg +49 -0
  2286. package/python/tcl/tcl8.6/msgs/ta.msg +39 -0
  2287. package/python/tcl/tcl8.6/msgs/ta_in.msg +6 -0
  2288. package/python/tcl/tcl8.6/msgs/te.msg +47 -0
  2289. package/python/tcl/tcl8.6/msgs/te_in.msg +8 -0
  2290. package/python/tcl/tcl8.6/msgs/th.msg +54 -0
  2291. package/python/tcl/tcl8.6/msgs/tr.msg +50 -0
  2292. package/python/tcl/tcl8.6/msgs/uk.msg +52 -0
  2293. package/python/tcl/tcl8.6/msgs/vi.msg +50 -0
  2294. package/python/tcl/tcl8.6/msgs/zh.msg +55 -0
  2295. package/python/tcl/tcl8.6/msgs/zh_cn.msg +7 -0
  2296. package/python/tcl/tcl8.6/msgs/zh_hk.msg +28 -0
  2297. package/python/tcl/tcl8.6/msgs/zh_sg.msg +8 -0
  2298. package/python/tcl/tcl8.6/msgs/zh_tw.msg +8 -0
  2299. package/python/tcl/tcl8.6/opt0.4/optparse.tcl +1072 -0
  2300. package/python/tcl/tcl8.6/opt0.4/pkgIndex.tcl +12 -0
  2301. package/python/tcl/tcl8.6/package.tcl +751 -0
  2302. package/python/tcl/tcl8.6/parray.tcl +28 -0
  2303. package/python/tcl/tcl8.6/safe.tcl +1289 -0
  2304. package/python/tcl/tcl8.6/tclIndex +78 -0
  2305. package/python/tcl/tcl8.6/tm.tcl +380 -0
  2306. package/python/tcl/tcl8.6/tzdata/Africa/Abidjan +6 -0
  2307. package/python/tcl/tcl8.6/tzdata/Africa/Accra +5 -0
  2308. package/python/tcl/tcl8.6/tzdata/Africa/Addis_Ababa +5 -0
  2309. package/python/tcl/tcl8.6/tzdata/Africa/Algiers +39 -0
  2310. package/python/tcl/tcl8.6/tzdata/Africa/Asmara +5 -0
  2311. package/python/tcl/tcl8.6/tzdata/Africa/Asmera +5 -0
  2312. package/python/tcl/tcl8.6/tzdata/Africa/Bamako +5 -0
  2313. package/python/tcl/tcl8.6/tzdata/Africa/Bangui +5 -0
  2314. package/python/tcl/tcl8.6/tzdata/Africa/Banjul +5 -0
  2315. package/python/tcl/tcl8.6/tzdata/Africa/Bissau +7 -0
  2316. package/python/tcl/tcl8.6/tzdata/Africa/Blantyre +5 -0
  2317. package/python/tcl/tcl8.6/tzdata/Africa/Brazzaville +5 -0
  2318. package/python/tcl/tcl8.6/tzdata/Africa/Bujumbura +5 -0
  2319. package/python/tcl/tcl8.6/tzdata/Africa/Cairo +132 -0
  2320. package/python/tcl/tcl8.6/tzdata/Africa/Casablanca +202 -0
  2321. package/python/tcl/tcl8.6/tzdata/Africa/Ceuta +259 -0
  2322. package/python/tcl/tcl8.6/tzdata/Africa/Conakry +5 -0
  2323. package/python/tcl/tcl8.6/tzdata/Africa/Dakar +5 -0
  2324. package/python/tcl/tcl8.6/tzdata/Africa/Dar_es_Salaam +5 -0
  2325. package/python/tcl/tcl8.6/tzdata/Africa/Djibouti +5 -0
  2326. package/python/tcl/tcl8.6/tzdata/Africa/Douala +5 -0
  2327. package/python/tcl/tcl8.6/tzdata/Africa/El_Aaiun +191 -0
  2328. package/python/tcl/tcl8.6/tzdata/Africa/Freetown +5 -0
  2329. package/python/tcl/tcl8.6/tzdata/Africa/Gaborone +5 -0
  2330. package/python/tcl/tcl8.6/tzdata/Africa/Harare +5 -0
  2331. package/python/tcl/tcl8.6/tzdata/Africa/Johannesburg +11 -0
  2332. package/python/tcl/tcl8.6/tzdata/Africa/Juba +40 -0
  2333. package/python/tcl/tcl8.6/tzdata/Africa/Kampala +5 -0
  2334. package/python/tcl/tcl8.6/tzdata/Africa/Khartoum +40 -0
  2335. package/python/tcl/tcl8.6/tzdata/Africa/Kigali +5 -0
  2336. package/python/tcl/tcl8.6/tzdata/Africa/Kinshasa +5 -0
  2337. package/python/tcl/tcl8.6/tzdata/Africa/Lagos +9 -0
  2338. package/python/tcl/tcl8.6/tzdata/Africa/Libreville +5 -0
  2339. package/python/tcl/tcl8.6/tzdata/Africa/Lome +5 -0
  2340. package/python/tcl/tcl8.6/tzdata/Africa/Luanda +5 -0
  2341. package/python/tcl/tcl8.6/tzdata/Africa/Lubumbashi +5 -0
  2342. package/python/tcl/tcl8.6/tzdata/Africa/Lusaka +5 -0
  2343. package/python/tcl/tcl8.6/tzdata/Africa/Malabo +5 -0
  2344. package/python/tcl/tcl8.6/tzdata/Africa/Maputo +6 -0
  2345. package/python/tcl/tcl8.6/tzdata/Africa/Maseru +5 -0
  2346. package/python/tcl/tcl8.6/tzdata/Africa/Mbabane +5 -0
  2347. package/python/tcl/tcl8.6/tzdata/Africa/Mogadishu +5 -0
  2348. package/python/tcl/tcl8.6/tzdata/Africa/Monrovia +8 -0
  2349. package/python/tcl/tcl8.6/tzdata/Africa/Nairobi +10 -0
  2350. package/python/tcl/tcl8.6/tzdata/Africa/Ndjamena +8 -0
  2351. package/python/tcl/tcl8.6/tzdata/Africa/Niamey +5 -0
  2352. package/python/tcl/tcl8.6/tzdata/Africa/Nouakchott +5 -0
  2353. package/python/tcl/tcl8.6/tzdata/Africa/Ouagadougou +5 -0
  2354. package/python/tcl/tcl8.6/tzdata/Africa/Porto-Novo +5 -0
  2355. package/python/tcl/tcl8.6/tzdata/Africa/Sao_Tome +9 -0
  2356. package/python/tcl/tcl8.6/tzdata/Africa/Timbuktu +5 -0
  2357. package/python/tcl/tcl8.6/tzdata/Africa/Tripoli +34 -0
  2358. package/python/tcl/tcl8.6/tzdata/Africa/Tunis +39 -0
  2359. package/python/tcl/tcl8.6/tzdata/Africa/Windhoek +58 -0
  2360. package/python/tcl/tcl8.6/tzdata/America/Adak +276 -0
  2361. package/python/tcl/tcl8.6/tzdata/America/Anchorage +275 -0
  2362. package/python/tcl/tcl8.6/tzdata/America/Anguilla +5 -0
  2363. package/python/tcl/tcl8.6/tzdata/America/Antigua +5 -0
  2364. package/python/tcl/tcl8.6/tzdata/America/Araguaina +60 -0
  2365. package/python/tcl/tcl8.6/tzdata/America/Argentina/Buenos_Aires +67 -0
  2366. package/python/tcl/tcl8.6/tzdata/America/Argentina/Catamarca +68 -0
  2367. package/python/tcl/tcl8.6/tzdata/America/Argentina/ComodRivadavia +5 -0
  2368. package/python/tcl/tcl8.6/tzdata/America/Argentina/Cordoba +67 -0
  2369. package/python/tcl/tcl8.6/tzdata/America/Argentina/Jujuy +67 -0
  2370. package/python/tcl/tcl8.6/tzdata/America/Argentina/La_Rioja +69 -0
  2371. package/python/tcl/tcl8.6/tzdata/America/Argentina/Mendoza +68 -0
  2372. package/python/tcl/tcl8.6/tzdata/America/Argentina/Rio_Gallegos +68 -0
  2373. package/python/tcl/tcl8.6/tzdata/America/Argentina/Salta +66 -0
  2374. package/python/tcl/tcl8.6/tzdata/America/Argentina/San_Juan +69 -0
  2375. package/python/tcl/tcl8.6/tzdata/America/Argentina/San_Luis +68 -0
  2376. package/python/tcl/tcl8.6/tzdata/America/Argentina/Tucuman +69 -0
  2377. package/python/tcl/tcl8.6/tzdata/America/Argentina/Ushuaia +68 -0
  2378. package/python/tcl/tcl8.6/tzdata/America/Aruba +5 -0
  2379. package/python/tcl/tcl8.6/tzdata/America/Asuncion +259 -0
  2380. package/python/tcl/tcl8.6/tzdata/America/Atikokan +5 -0
  2381. package/python/tcl/tcl8.6/tzdata/America/Atka +5 -0
  2382. package/python/tcl/tcl8.6/tzdata/America/Bahia +68 -0
  2383. package/python/tcl/tcl8.6/tzdata/America/Bahia_Banderas +222 -0
  2384. package/python/tcl/tcl8.6/tzdata/America/Barbados +22 -0
  2385. package/python/tcl/tcl8.6/tzdata/America/Belem +35 -0
  2386. package/python/tcl/tcl8.6/tzdata/America/Belize +103 -0
  2387. package/python/tcl/tcl8.6/tzdata/America/Blanc-Sablon +5 -0
  2388. package/python/tcl/tcl8.6/tzdata/America/Boa_Vista +40 -0
  2389. package/python/tcl/tcl8.6/tzdata/America/Bogota +9 -0
  2390. package/python/tcl/tcl8.6/tzdata/America/Boise +281 -0
  2391. package/python/tcl/tcl8.6/tzdata/America/Buenos_Aires +5 -0
  2392. package/python/tcl/tcl8.6/tzdata/America/Cambridge_Bay +252 -0
  2393. package/python/tcl/tcl8.6/tzdata/America/Campo_Grande +96 -0
  2394. package/python/tcl/tcl8.6/tzdata/America/Cancun +47 -0
  2395. package/python/tcl/tcl8.6/tzdata/America/Caracas +10 -0
  2396. package/python/tcl/tcl8.6/tzdata/America/Catamarca +5 -0
  2397. package/python/tcl/tcl8.6/tzdata/America/Cayenne +7 -0
  2398. package/python/tcl/tcl8.6/tzdata/America/Cayman +5 -0
  2399. package/python/tcl/tcl8.6/tzdata/America/Chicago +369 -0
  2400. package/python/tcl/tcl8.6/tzdata/America/Chihuahua +221 -0
  2401. package/python/tcl/tcl8.6/tzdata/America/Coral_Harbour +5 -0
  2402. package/python/tcl/tcl8.6/tzdata/America/Cordoba +5 -0
  2403. package/python/tcl/tcl8.6/tzdata/America/Costa_Rica +15 -0
  2404. package/python/tcl/tcl8.6/tzdata/America/Creston +5 -0
  2405. package/python/tcl/tcl8.6/tzdata/America/Cuiaba +96 -0
  2406. package/python/tcl/tcl8.6/tzdata/America/Curacao +5 -0
  2407. package/python/tcl/tcl8.6/tzdata/America/Danmarkshavn +39 -0
  2408. package/python/tcl/tcl8.6/tzdata/America/Dawson +98 -0
  2409. package/python/tcl/tcl8.6/tzdata/America/Dawson_Creek +64 -0
  2410. package/python/tcl/tcl8.6/tzdata/America/Denver +291 -0
  2411. package/python/tcl/tcl8.6/tzdata/America/Detroit +275 -0
  2412. package/python/tcl/tcl8.6/tzdata/America/Dominica +5 -0
  2413. package/python/tcl/tcl8.6/tzdata/America/Edmonton +280 -0
  2414. package/python/tcl/tcl8.6/tzdata/America/Eirunepe +41 -0
  2415. package/python/tcl/tcl8.6/tzdata/America/El_Salvador +10 -0
  2416. package/python/tcl/tcl8.6/tzdata/America/Ensenada +5 -0
  2417. package/python/tcl/tcl8.6/tzdata/America/Fort_Nelson +151 -0
  2418. package/python/tcl/tcl8.6/tzdata/America/Fort_Wayne +5 -0
  2419. package/python/tcl/tcl8.6/tzdata/America/Fortaleza +48 -0
  2420. package/python/tcl/tcl8.6/tzdata/America/Glace_Bay +273 -0
  2421. package/python/tcl/tcl8.6/tzdata/America/Godthab +5 -0
  2422. package/python/tcl/tcl8.6/tzdata/America/Goose_Bay +338 -0
  2423. package/python/tcl/tcl8.6/tzdata/America/Grand_Turk +245 -0
  2424. package/python/tcl/tcl8.6/tzdata/America/Grenada +5 -0
  2425. package/python/tcl/tcl8.6/tzdata/America/Guadeloupe +5 -0
  2426. package/python/tcl/tcl8.6/tzdata/America/Guatemala +14 -0
  2427. package/python/tcl/tcl8.6/tzdata/America/Guayaquil +9 -0
  2428. package/python/tcl/tcl8.6/tzdata/America/Guyana +9 -0
  2429. package/python/tcl/tcl8.6/tzdata/America/Halifax +361 -0
  2430. package/python/tcl/tcl8.6/tzdata/America/Havana +285 -0
  2431. package/python/tcl/tcl8.6/tzdata/America/Hermosillo +21 -0
  2432. package/python/tcl/tcl8.6/tzdata/America/Indiana/Indianapolis +234 -0
  2433. package/python/tcl/tcl8.6/tzdata/America/Indiana/Knox +285 -0
  2434. package/python/tcl/tcl8.6/tzdata/America/Indiana/Marengo +236 -0
  2435. package/python/tcl/tcl8.6/tzdata/America/Indiana/Petersburg +247 -0
  2436. package/python/tcl/tcl8.6/tzdata/America/Indiana/Tell_City +230 -0
  2437. package/python/tcl/tcl8.6/tzdata/America/Indiana/Vevay +213 -0
  2438. package/python/tcl/tcl8.6/tzdata/America/Indiana/Vincennes +234 -0
  2439. package/python/tcl/tcl8.6/tzdata/America/Indiana/Winamac +240 -0
  2440. package/python/tcl/tcl8.6/tzdata/America/Indianapolis +5 -0
  2441. package/python/tcl/tcl8.6/tzdata/America/Inuvik +249 -0
  2442. package/python/tcl/tcl8.6/tzdata/America/Iqaluit +250 -0
  2443. package/python/tcl/tcl8.6/tzdata/America/Jamaica +29 -0
  2444. package/python/tcl/tcl8.6/tzdata/America/Jujuy +5 -0
  2445. package/python/tcl/tcl8.6/tzdata/America/Juneau +276 -0
  2446. package/python/tcl/tcl8.6/tzdata/America/Kentucky/Louisville +311 -0
  2447. package/python/tcl/tcl8.6/tzdata/America/Kentucky/Monticello +279 -0
  2448. package/python/tcl/tcl8.6/tzdata/America/Knox_IN +5 -0
  2449. package/python/tcl/tcl8.6/tzdata/America/Kralendijk +5 -0
  2450. package/python/tcl/tcl8.6/tzdata/America/La_Paz +8 -0
  2451. package/python/tcl/tcl8.6/tzdata/America/Lima +16 -0
  2452. package/python/tcl/tcl8.6/tzdata/America/Los_Angeles +317 -0
  2453. package/python/tcl/tcl8.6/tzdata/America/Louisville +5 -0
  2454. package/python/tcl/tcl8.6/tzdata/America/Lower_Princes +5 -0
  2455. package/python/tcl/tcl8.6/tzdata/America/Maceio +52 -0
  2456. package/python/tcl/tcl8.6/tzdata/America/Managua +21 -0
  2457. package/python/tcl/tcl8.6/tzdata/America/Manaus +39 -0
  2458. package/python/tcl/tcl8.6/tzdata/America/Marigot +5 -0
  2459. package/python/tcl/tcl8.6/tzdata/America/Martinique +9 -0
  2460. package/python/tcl/tcl8.6/tzdata/America/Matamoros +219 -0
  2461. package/python/tcl/tcl8.6/tzdata/America/Mazatlan +222 -0
  2462. package/python/tcl/tcl8.6/tzdata/America/Mendoza +5 -0
  2463. package/python/tcl/tcl8.6/tzdata/America/Menominee +274 -0
  2464. package/python/tcl/tcl8.6/tzdata/America/Merida +216 -0
  2465. package/python/tcl/tcl8.6/tzdata/America/Metlakatla +213 -0
  2466. package/python/tcl/tcl8.6/tzdata/America/Mexico_City +228 -0
  2467. package/python/tcl/tcl8.6/tzdata/America/Miquelon +234 -0
  2468. package/python/tcl/tcl8.6/tzdata/America/Moncton +342 -0
  2469. package/python/tcl/tcl8.6/tzdata/America/Monterrey +218 -0
  2470. package/python/tcl/tcl8.6/tzdata/America/Montevideo +96 -0
  2471. package/python/tcl/tcl8.6/tzdata/America/Montreal +5 -0
  2472. package/python/tcl/tcl8.6/tzdata/America/Montserrat +5 -0
  2473. package/python/tcl/tcl8.6/tzdata/America/Nassau +5 -0
  2474. package/python/tcl/tcl8.6/tzdata/America/New_York +369 -0
  2475. package/python/tcl/tcl8.6/tzdata/America/Nipigon +264 -0
  2476. package/python/tcl/tcl8.6/tzdata/America/Nome +276 -0
  2477. package/python/tcl/tcl8.6/tzdata/America/Noronha +48 -0
  2478. package/python/tcl/tcl8.6/tzdata/America/North_Dakota/Beulah +279 -0
  2479. package/python/tcl/tcl8.6/tzdata/America/North_Dakota/Center +279 -0
  2480. package/python/tcl/tcl8.6/tzdata/America/North_Dakota/New_Salem +279 -0
  2481. package/python/tcl/tcl8.6/tzdata/America/Nuuk +246 -0
  2482. package/python/tcl/tcl8.6/tzdata/America/Ojinaga +222 -0
  2483. package/python/tcl/tcl8.6/tzdata/America/Panama +7 -0
  2484. package/python/tcl/tcl8.6/tzdata/America/Pangnirtung +252 -0
  2485. package/python/tcl/tcl8.6/tzdata/America/Paramaribo +9 -0
  2486. package/python/tcl/tcl8.6/tzdata/America/Phoenix +17 -0
  2487. package/python/tcl/tcl8.6/tzdata/America/Port-au-Prince +215 -0
  2488. package/python/tcl/tcl8.6/tzdata/America/Port_of_Spain +5 -0
  2489. package/python/tcl/tcl8.6/tzdata/America/Porto_Acre +5 -0
  2490. package/python/tcl/tcl8.6/tzdata/America/Porto_Velho +35 -0
  2491. package/python/tcl/tcl8.6/tzdata/America/Puerto_Rico +10 -0
  2492. package/python/tcl/tcl8.6/tzdata/America/Punta_Arenas +122 -0
  2493. package/python/tcl/tcl8.6/tzdata/America/Rainy_River +264 -0
  2494. package/python/tcl/tcl8.6/tzdata/America/Rankin_Inlet +248 -0
  2495. package/python/tcl/tcl8.6/tzdata/America/Recife +48 -0
  2496. package/python/tcl/tcl8.6/tzdata/America/Regina +58 -0
  2497. package/python/tcl/tcl8.6/tzdata/America/Resolute +248 -0
  2498. package/python/tcl/tcl8.6/tzdata/America/Rio_Branco +37 -0
  2499. package/python/tcl/tcl8.6/tzdata/America/Rosario +5 -0
  2500. package/python/tcl/tcl8.6/tzdata/America/Santa_Isabel +5 -0
  2501. package/python/tcl/tcl8.6/tzdata/America/Santarem +36 -0
  2502. package/python/tcl/tcl8.6/tzdata/America/Santiago +289 -0
  2503. package/python/tcl/tcl8.6/tzdata/America/Santo_Domingo +21 -0
  2504. package/python/tcl/tcl8.6/tzdata/America/Sao_Paulo +97 -0
  2505. package/python/tcl/tcl8.6/tzdata/America/Scoresbysund +246 -0
  2506. package/python/tcl/tcl8.6/tzdata/America/Shiprock +5 -0
  2507. package/python/tcl/tcl8.6/tzdata/America/Sitka +275 -0
  2508. package/python/tcl/tcl8.6/tzdata/America/St_Barthelemy +5 -0
  2509. package/python/tcl/tcl8.6/tzdata/America/St_Johns +372 -0
  2510. package/python/tcl/tcl8.6/tzdata/America/St_Kitts +5 -0
  2511. package/python/tcl/tcl8.6/tzdata/America/St_Lucia +5 -0
  2512. package/python/tcl/tcl8.6/tzdata/America/St_Thomas +5 -0
  2513. package/python/tcl/tcl8.6/tzdata/America/St_Vincent +5 -0
  2514. package/python/tcl/tcl8.6/tzdata/America/Swift_Current +29 -0
  2515. package/python/tcl/tcl8.6/tzdata/America/Tegucigalpa +12 -0
  2516. package/python/tcl/tcl8.6/tzdata/America/Thule +224 -0
  2517. package/python/tcl/tcl8.6/tzdata/America/Thunder_Bay +272 -0
  2518. package/python/tcl/tcl8.6/tzdata/America/Tijuana +285 -0
  2519. package/python/tcl/tcl8.6/tzdata/America/Toronto +365 -0
  2520. package/python/tcl/tcl8.6/tzdata/America/Tortola +5 -0
  2521. package/python/tcl/tcl8.6/tzdata/America/Vancouver +320 -0
  2522. package/python/tcl/tcl8.6/tzdata/America/Virgin +5 -0
  2523. package/python/tcl/tcl8.6/tzdata/America/Whitehorse +98 -0
  2524. package/python/tcl/tcl8.6/tzdata/America/Winnipeg +316 -0
  2525. package/python/tcl/tcl8.6/tzdata/America/Yakutat +276 -0
  2526. package/python/tcl/tcl8.6/tzdata/America/Yellowknife +252 -0
  2527. package/python/tcl/tcl8.6/tzdata/Antarctica/Casey +17 -0
  2528. package/python/tcl/tcl8.6/tzdata/Antarctica/Davis +12 -0
  2529. package/python/tcl/tcl8.6/tzdata/Antarctica/DumontDUrville +5 -0
  2530. package/python/tcl/tcl8.6/tzdata/Antarctica/Macquarie +276 -0
  2531. package/python/tcl/tcl8.6/tzdata/Antarctica/Mawson +7 -0
  2532. package/python/tcl/tcl8.6/tzdata/Antarctica/McMurdo +5 -0
  2533. package/python/tcl/tcl8.6/tzdata/Antarctica/Palmer +87 -0
  2534. package/python/tcl/tcl8.6/tzdata/Antarctica/Rothera +6 -0
  2535. package/python/tcl/tcl8.6/tzdata/Antarctica/South_Pole +5 -0
  2536. package/python/tcl/tcl8.6/tzdata/Antarctica/Syowa +5 -0
  2537. package/python/tcl/tcl8.6/tzdata/Antarctica/Troll +196 -0
  2538. package/python/tcl/tcl8.6/tzdata/Antarctica/Vostok +6 -0
  2539. package/python/tcl/tcl8.6/tzdata/Arctic/Longyearbyen +5 -0
  2540. package/python/tcl/tcl8.6/tzdata/Asia/Aden +5 -0
  2541. package/python/tcl/tcl8.6/tzdata/Asia/Almaty +57 -0
  2542. package/python/tcl/tcl8.6/tzdata/Asia/Amman +246 -0
  2543. package/python/tcl/tcl8.6/tzdata/Asia/Anadyr +72 -0
  2544. package/python/tcl/tcl8.6/tzdata/Asia/Aqtau +58 -0
  2545. package/python/tcl/tcl8.6/tzdata/Asia/Aqtobe +58 -0
  2546. package/python/tcl/tcl8.6/tzdata/Asia/Ashgabat +31 -0
  2547. package/python/tcl/tcl8.6/tzdata/Asia/Ashkhabad +5 -0
  2548. package/python/tcl/tcl8.6/tzdata/Asia/Atyrau +58 -0
  2549. package/python/tcl/tcl8.6/tzdata/Asia/Baghdad +59 -0
  2550. package/python/tcl/tcl8.6/tzdata/Asia/Bahrain +5 -0
  2551. package/python/tcl/tcl8.6/tzdata/Asia/Baku +74 -0
  2552. package/python/tcl/tcl8.6/tzdata/Asia/Bangkok +7 -0
  2553. package/python/tcl/tcl8.6/tzdata/Asia/Barnaul +73 -0
  2554. package/python/tcl/tcl8.6/tzdata/Asia/Beirut +270 -0
  2555. package/python/tcl/tcl8.6/tzdata/Asia/Bishkek +58 -0
  2556. package/python/tcl/tcl8.6/tzdata/Asia/Brunei +7 -0
  2557. package/python/tcl/tcl8.6/tzdata/Asia/Calcutta +5 -0
  2558. package/python/tcl/tcl8.6/tzdata/Asia/Chita +72 -0
  2559. package/python/tcl/tcl8.6/tzdata/Asia/Choibalsan +56 -0
  2560. package/python/tcl/tcl8.6/tzdata/Asia/Chongqing +5 -0
  2561. package/python/tcl/tcl8.6/tzdata/Asia/Chungking +5 -0
  2562. package/python/tcl/tcl8.6/tzdata/Asia/Colombo +13 -0
  2563. package/python/tcl/tcl8.6/tzdata/Asia/Dacca +5 -0
  2564. package/python/tcl/tcl8.6/tzdata/Asia/Damascus +280 -0
  2565. package/python/tcl/tcl8.6/tzdata/Asia/Dhaka +13 -0
  2566. package/python/tcl/tcl8.6/tzdata/Asia/Dili +9 -0
  2567. package/python/tcl/tcl8.6/tzdata/Asia/Dubai +6 -0
  2568. package/python/tcl/tcl8.6/tzdata/Asia/Dushanbe +29 -0
  2569. package/python/tcl/tcl8.6/tzdata/Asia/Famagusta +256 -0
  2570. package/python/tcl/tcl8.6/tzdata/Asia/Gaza +284 -0
  2571. package/python/tcl/tcl8.6/tzdata/Asia/Harbin +5 -0
  2572. package/python/tcl/tcl8.6/tzdata/Asia/Hebron +283 -0
  2573. package/python/tcl/tcl8.6/tzdata/Asia/Ho_Chi_Minh +14 -0
  2574. package/python/tcl/tcl8.6/tzdata/Asia/Hong_Kong +75 -0
  2575. package/python/tcl/tcl8.6/tzdata/Asia/Hovd +55 -0
  2576. package/python/tcl/tcl8.6/tzdata/Asia/Irkutsk +72 -0
  2577. package/python/tcl/tcl8.6/tzdata/Asia/Istanbul +5 -0
  2578. package/python/tcl/tcl8.6/tzdata/Asia/Jakarta +13 -0
  2579. package/python/tcl/tcl8.6/tzdata/Asia/Jayapura +8 -0
  2580. package/python/tcl/tcl8.6/tzdata/Asia/Jerusalem +278 -0
  2581. package/python/tcl/tcl8.6/tzdata/Asia/Kabul +7 -0
  2582. package/python/tcl/tcl8.6/tzdata/Asia/Kamchatka +71 -0
  2583. package/python/tcl/tcl8.6/tzdata/Asia/Karachi +16 -0
  2584. package/python/tcl/tcl8.6/tzdata/Asia/Kashgar +5 -0
  2585. package/python/tcl/tcl8.6/tzdata/Asia/Kathmandu +7 -0
  2586. package/python/tcl/tcl8.6/tzdata/Asia/Katmandu +5 -0
  2587. package/python/tcl/tcl8.6/tzdata/Asia/Khandyga +73 -0
  2588. package/python/tcl/tcl8.6/tzdata/Asia/Kolkata +12 -0
  2589. package/python/tcl/tcl8.6/tzdata/Asia/Krasnoyarsk +71 -0
  2590. package/python/tcl/tcl8.6/tzdata/Asia/Kuala_Lumpur +13 -0
  2591. package/python/tcl/tcl8.6/tzdata/Asia/Kuching +23 -0
  2592. package/python/tcl/tcl8.6/tzdata/Asia/Kuwait +5 -0
  2593. package/python/tcl/tcl8.6/tzdata/Asia/Macao +5 -0
  2594. package/python/tcl/tcl8.6/tzdata/Asia/Macau +76 -0
  2595. package/python/tcl/tcl8.6/tzdata/Asia/Magadan +72 -0
  2596. package/python/tcl/tcl8.6/tzdata/Asia/Makassar +9 -0
  2597. package/python/tcl/tcl8.6/tzdata/Asia/Manila +15 -0
  2598. package/python/tcl/tcl8.6/tzdata/Asia/Muscat +5 -0
  2599. package/python/tcl/tcl8.6/tzdata/Asia/Nicosia +257 -0
  2600. package/python/tcl/tcl8.6/tzdata/Asia/Novokuznetsk +71 -0
  2601. package/python/tcl/tcl8.6/tzdata/Asia/Novosibirsk +73 -0
  2602. package/python/tcl/tcl8.6/tzdata/Asia/Omsk +71 -0
  2603. package/python/tcl/tcl8.6/tzdata/Asia/Oral +58 -0
  2604. package/python/tcl/tcl8.6/tzdata/Asia/Phnom_Penh +5 -0
  2605. package/python/tcl/tcl8.6/tzdata/Asia/Pontianak +13 -0
  2606. package/python/tcl/tcl8.6/tzdata/Asia/Pyongyang +10 -0
  2607. package/python/tcl/tcl8.6/tzdata/Asia/Qatar +7 -0
  2608. package/python/tcl/tcl8.6/tzdata/Asia/Qostanay +58 -0
  2609. package/python/tcl/tcl8.6/tzdata/Asia/Qyzylorda +58 -0
  2610. package/python/tcl/tcl8.6/tzdata/Asia/Rangoon +5 -0
  2611. package/python/tcl/tcl8.6/tzdata/Asia/Riyadh +6 -0
  2612. package/python/tcl/tcl8.6/tzdata/Asia/Saigon +5 -0
  2613. package/python/tcl/tcl8.6/tzdata/Asia/Sakhalin +73 -0
  2614. package/python/tcl/tcl8.6/tzdata/Asia/Samarkand +31 -0
  2615. package/python/tcl/tcl8.6/tzdata/Asia/Seoul +34 -0
  2616. package/python/tcl/tcl8.6/tzdata/Asia/Shanghai +34 -0
  2617. package/python/tcl/tcl8.6/tzdata/Asia/Singapore +13 -0
  2618. package/python/tcl/tcl8.6/tzdata/Asia/Srednekolymsk +71 -0
  2619. package/python/tcl/tcl8.6/tzdata/Asia/Taipei +46 -0
  2620. package/python/tcl/tcl8.6/tzdata/Asia/Tashkent +31 -0
  2621. package/python/tcl/tcl8.6/tzdata/Asia/Tbilisi +60 -0
  2622. package/python/tcl/tcl8.6/tzdata/Asia/Tehran +229 -0
  2623. package/python/tcl/tcl8.6/tzdata/Asia/Tel_Aviv +5 -0
  2624. package/python/tcl/tcl8.6/tzdata/Asia/Thimbu +5 -0
  2625. package/python/tcl/tcl8.6/tzdata/Asia/Thimphu +7 -0
  2626. package/python/tcl/tcl8.6/tzdata/Asia/Tokyo +14 -0
  2627. package/python/tcl/tcl8.6/tzdata/Asia/Tomsk +73 -0
  2628. package/python/tcl/tcl8.6/tzdata/Asia/Ujung_Pandang +5 -0
  2629. package/python/tcl/tcl8.6/tzdata/Asia/Ulaanbaatar +55 -0
  2630. package/python/tcl/tcl8.6/tzdata/Asia/Ulan_Bator +5 -0
  2631. package/python/tcl/tcl8.6/tzdata/Asia/Urumqi +6 -0
  2632. package/python/tcl/tcl8.6/tzdata/Asia/Ust-Nera +71 -0
  2633. package/python/tcl/tcl8.6/tzdata/Asia/Vientiane +5 -0
  2634. package/python/tcl/tcl8.6/tzdata/Asia/Vladivostok +71 -0
  2635. package/python/tcl/tcl8.6/tzdata/Asia/Yakutsk +71 -0
  2636. package/python/tcl/tcl8.6/tzdata/Asia/Yangon +9 -0
  2637. package/python/tcl/tcl8.6/tzdata/Asia/Yekaterinburg +72 -0
  2638. package/python/tcl/tcl8.6/tzdata/Asia/Yerevan +70 -0
  2639. package/python/tcl/tcl8.6/tzdata/Atlantic/Azores +347 -0
  2640. package/python/tcl/tcl8.6/tzdata/Atlantic/Bermuda +286 -0
  2641. package/python/tcl/tcl8.6/tzdata/Atlantic/Canary +247 -0
  2642. package/python/tcl/tcl8.6/tzdata/Atlantic/Cape_Verde +9 -0
  2643. package/python/tcl/tcl8.6/tzdata/Atlantic/Faeroe +5 -0
  2644. package/python/tcl/tcl8.6/tzdata/Atlantic/Faroe +245 -0
  2645. package/python/tcl/tcl8.6/tzdata/Atlantic/Jan_Mayen +5 -0
  2646. package/python/tcl/tcl8.6/tzdata/Atlantic/Madeira +348 -0
  2647. package/python/tcl/tcl8.6/tzdata/Atlantic/Reykjavik +73 -0
  2648. package/python/tcl/tcl8.6/tzdata/Atlantic/South_Georgia +6 -0
  2649. package/python/tcl/tcl8.6/tzdata/Atlantic/St_Helena +5 -0
  2650. package/python/tcl/tcl8.6/tzdata/Atlantic/Stanley +75 -0
  2651. package/python/tcl/tcl8.6/tzdata/Australia/ACT +5 -0
  2652. package/python/tcl/tcl8.6/tzdata/Australia/Adelaide +273 -0
  2653. package/python/tcl/tcl8.6/tzdata/Australia/Brisbane +23 -0
  2654. package/python/tcl/tcl8.6/tzdata/Australia/Broken_Hill +275 -0
  2655. package/python/tcl/tcl8.6/tzdata/Australia/Canberra +5 -0
  2656. package/python/tcl/tcl8.6/tzdata/Australia/Currie +5 -0
  2657. package/python/tcl/tcl8.6/tzdata/Australia/Darwin +15 -0
  2658. package/python/tcl/tcl8.6/tzdata/Australia/Eucla +25 -0
  2659. package/python/tcl/tcl8.6/tzdata/Australia/Hobart +285 -0
  2660. package/python/tcl/tcl8.6/tzdata/Australia/LHI +5 -0
  2661. package/python/tcl/tcl8.6/tzdata/Australia/Lindeman +28 -0
  2662. package/python/tcl/tcl8.6/tzdata/Australia/Lord_Howe +245 -0
  2663. package/python/tcl/tcl8.6/tzdata/Australia/Melbourne +272 -0
  2664. package/python/tcl/tcl8.6/tzdata/Australia/NSW +5 -0
  2665. package/python/tcl/tcl8.6/tzdata/Australia/North +5 -0
  2666. package/python/tcl/tcl8.6/tzdata/Australia/Perth +25 -0
  2667. package/python/tcl/tcl8.6/tzdata/Australia/Queensland +5 -0
  2668. package/python/tcl/tcl8.6/tzdata/Australia/South +5 -0
  2669. package/python/tcl/tcl8.6/tzdata/Australia/Sydney +272 -0
  2670. package/python/tcl/tcl8.6/tzdata/Australia/Tasmania +5 -0
  2671. package/python/tcl/tcl8.6/tzdata/Australia/Victoria +5 -0
  2672. package/python/tcl/tcl8.6/tzdata/Australia/West +5 -0
  2673. package/python/tcl/tcl8.6/tzdata/Australia/Yancowinna +5 -0
  2674. package/python/tcl/tcl8.6/tzdata/Brazil/Acre +5 -0
  2675. package/python/tcl/tcl8.6/tzdata/Brazil/DeNoronha +5 -0
  2676. package/python/tcl/tcl8.6/tzdata/Brazil/East +5 -0
  2677. package/python/tcl/tcl8.6/tzdata/Brazil/West +5 -0
  2678. package/python/tcl/tcl8.6/tzdata/CET +265 -0
  2679. package/python/tcl/tcl8.6/tzdata/CST6CDT +278 -0
  2680. package/python/tcl/tcl8.6/tzdata/Canada/Atlantic +5 -0
  2681. package/python/tcl/tcl8.6/tzdata/Canada/Central +5 -0
  2682. package/python/tcl/tcl8.6/tzdata/Canada/East-Saskatchewan +5 -0
  2683. package/python/tcl/tcl8.6/tzdata/Canada/Eastern +5 -0
  2684. package/python/tcl/tcl8.6/tzdata/Canada/Mountain +5 -0
  2685. package/python/tcl/tcl8.6/tzdata/Canada/Newfoundland +5 -0
  2686. package/python/tcl/tcl8.6/tzdata/Canada/Pacific +5 -0
  2687. package/python/tcl/tcl8.6/tzdata/Canada/Saskatchewan +5 -0
  2688. package/python/tcl/tcl8.6/tzdata/Canada/Yukon +5 -0
  2689. package/python/tcl/tcl8.6/tzdata/Chile/Continental +5 -0
  2690. package/python/tcl/tcl8.6/tzdata/Chile/EasterIsland +5 -0
  2691. package/python/tcl/tcl8.6/tzdata/Cuba +5 -0
  2692. package/python/tcl/tcl8.6/tzdata/EET +251 -0
  2693. package/python/tcl/tcl8.6/tzdata/EST +5 -0
  2694. package/python/tcl/tcl8.6/tzdata/EST5EDT +278 -0
  2695. package/python/tcl/tcl8.6/tzdata/Egypt +5 -0
  2696. package/python/tcl/tcl8.6/tzdata/Eire +5 -0
  2697. package/python/tcl/tcl8.6/tzdata/Etc/GMT +5 -0
  2698. package/python/tcl/tcl8.6/tzdata/Etc/GMT+0 +5 -0
  2699. package/python/tcl/tcl8.6/tzdata/Etc/GMT+1 +5 -0
  2700. package/python/tcl/tcl8.6/tzdata/Etc/GMT+10 +5 -0
  2701. package/python/tcl/tcl8.6/tzdata/Etc/GMT+11 +5 -0
  2702. package/python/tcl/tcl8.6/tzdata/Etc/GMT+12 +5 -0
  2703. package/python/tcl/tcl8.6/tzdata/Etc/GMT+2 +5 -0
  2704. package/python/tcl/tcl8.6/tzdata/Etc/GMT+3 +5 -0
  2705. package/python/tcl/tcl8.6/tzdata/Etc/GMT+4 +5 -0
  2706. package/python/tcl/tcl8.6/tzdata/Etc/GMT+5 +5 -0
  2707. package/python/tcl/tcl8.6/tzdata/Etc/GMT+6 +5 -0
  2708. package/python/tcl/tcl8.6/tzdata/Etc/GMT+7 +5 -0
  2709. package/python/tcl/tcl8.6/tzdata/Etc/GMT+8 +5 -0
  2710. package/python/tcl/tcl8.6/tzdata/Etc/GMT+9 +5 -0
  2711. package/python/tcl/tcl8.6/tzdata/Etc/GMT-0 +5 -0
  2712. package/python/tcl/tcl8.6/tzdata/Etc/GMT-1 +5 -0
  2713. package/python/tcl/tcl8.6/tzdata/Etc/GMT-10 +5 -0
  2714. package/python/tcl/tcl8.6/tzdata/Etc/GMT-11 +5 -0
  2715. package/python/tcl/tcl8.6/tzdata/Etc/GMT-12 +5 -0
  2716. package/python/tcl/tcl8.6/tzdata/Etc/GMT-13 +5 -0
  2717. package/python/tcl/tcl8.6/tzdata/Etc/GMT-14 +5 -0
  2718. package/python/tcl/tcl8.6/tzdata/Etc/GMT-2 +5 -0
  2719. package/python/tcl/tcl8.6/tzdata/Etc/GMT-3 +5 -0
  2720. package/python/tcl/tcl8.6/tzdata/Etc/GMT-4 +5 -0
  2721. package/python/tcl/tcl8.6/tzdata/Etc/GMT-5 +5 -0
  2722. package/python/tcl/tcl8.6/tzdata/Etc/GMT-6 +5 -0
  2723. package/python/tcl/tcl8.6/tzdata/Etc/GMT-7 +5 -0
  2724. package/python/tcl/tcl8.6/tzdata/Etc/GMT-8 +5 -0
  2725. package/python/tcl/tcl8.6/tzdata/Etc/GMT-9 +5 -0
  2726. package/python/tcl/tcl8.6/tzdata/Etc/GMT0 +5 -0
  2727. package/python/tcl/tcl8.6/tzdata/Etc/Greenwich +5 -0
  2728. package/python/tcl/tcl8.6/tzdata/Etc/UCT +5 -0
  2729. package/python/tcl/tcl8.6/tzdata/Etc/UTC +5 -0
  2730. package/python/tcl/tcl8.6/tzdata/Etc/Universal +5 -0
  2731. package/python/tcl/tcl8.6/tzdata/Etc/Zulu +5 -0
  2732. package/python/tcl/tcl8.6/tzdata/Europe/Amsterdam +310 -0
  2733. package/python/tcl/tcl8.6/tzdata/Europe/Andorra +237 -0
  2734. package/python/tcl/tcl8.6/tzdata/Europe/Astrakhan +71 -0
  2735. package/python/tcl/tcl8.6/tzdata/Europe/Athens +268 -0
  2736. package/python/tcl/tcl8.6/tzdata/Europe/Belfast +5 -0
  2737. package/python/tcl/tcl8.6/tzdata/Europe/Belgrade +250 -0
  2738. package/python/tcl/tcl8.6/tzdata/Europe/Berlin +274 -0
  2739. package/python/tcl/tcl8.6/tzdata/Europe/Bratislava +5 -0
  2740. package/python/tcl/tcl8.6/tzdata/Europe/Brussels +316 -0
  2741. package/python/tcl/tcl8.6/tzdata/Europe/Bucharest +268 -0
  2742. package/python/tcl/tcl8.6/tzdata/Europe/Budapest +283 -0
  2743. package/python/tcl/tcl8.6/tzdata/Europe/Busingen +5 -0
  2744. package/python/tcl/tcl8.6/tzdata/Europe/Chisinau +272 -0
  2745. package/python/tcl/tcl8.6/tzdata/Europe/Copenhagen +264 -0
  2746. package/python/tcl/tcl8.6/tzdata/Europe/Dublin +358 -0
  2747. package/python/tcl/tcl8.6/tzdata/Europe/Gibraltar +328 -0
  2748. package/python/tcl/tcl8.6/tzdata/Europe/Guernsey +5 -0
  2749. package/python/tcl/tcl8.6/tzdata/Europe/Helsinki +248 -0
  2750. package/python/tcl/tcl8.6/tzdata/Europe/Isle_of_Man +5 -0
  2751. package/python/tcl/tcl8.6/tzdata/Europe/Istanbul +125 -0
  2752. package/python/tcl/tcl8.6/tzdata/Europe/Jersey +5 -0
  2753. package/python/tcl/tcl8.6/tzdata/Europe/Kaliningrad +86 -0
  2754. package/python/tcl/tcl8.6/tzdata/Europe/Kiev +251 -0
  2755. package/python/tcl/tcl8.6/tzdata/Europe/Kirov +70 -0
  2756. package/python/tcl/tcl8.6/tzdata/Europe/Lisbon +353 -0
  2757. package/python/tcl/tcl8.6/tzdata/Europe/Ljubljana +5 -0
  2758. package/python/tcl/tcl8.6/tzdata/Europe/London +372 -0
  2759. package/python/tcl/tcl8.6/tzdata/Europe/Luxembourg +313 -0
  2760. package/python/tcl/tcl8.6/tzdata/Europe/Madrid +292 -0
  2761. package/python/tcl/tcl8.6/tzdata/Europe/Malta +299 -0
  2762. package/python/tcl/tcl8.6/tzdata/Europe/Mariehamn +5 -0
  2763. package/python/tcl/tcl8.6/tzdata/Europe/Minsk +75 -0
  2764. package/python/tcl/tcl8.6/tzdata/Europe/Monaco +315 -0
  2765. package/python/tcl/tcl8.6/tzdata/Europe/Moscow +83 -0
  2766. package/python/tcl/tcl8.6/tzdata/Europe/Nicosia +5 -0
  2767. package/python/tcl/tcl8.6/tzdata/Europe/Oslo +271 -0
  2768. package/python/tcl/tcl8.6/tzdata/Europe/Paris +314 -0
  2769. package/python/tcl/tcl8.6/tzdata/Europe/Podgorica +5 -0
  2770. package/python/tcl/tcl8.6/tzdata/Europe/Prague +275 -0
  2771. package/python/tcl/tcl8.6/tzdata/Europe/Riga +258 -0
  2772. package/python/tcl/tcl8.6/tzdata/Europe/Rome +302 -0
  2773. package/python/tcl/tcl8.6/tzdata/Europe/Samara +73 -0
  2774. package/python/tcl/tcl8.6/tzdata/Europe/San_Marino +5 -0
  2775. package/python/tcl/tcl8.6/tzdata/Europe/Sarajevo +5 -0
  2776. package/python/tcl/tcl8.6/tzdata/Europe/Saratov +71 -0
  2777. package/python/tcl/tcl8.6/tzdata/Europe/Simferopol +82 -0
  2778. package/python/tcl/tcl8.6/tzdata/Europe/Skopje +5 -0
  2779. package/python/tcl/tcl8.6/tzdata/Europe/Sofia +258 -0
  2780. package/python/tcl/tcl8.6/tzdata/Europe/Stockholm +250 -0
  2781. package/python/tcl/tcl8.6/tzdata/Europe/Tallinn +254 -0
  2782. package/python/tcl/tcl8.6/tzdata/Europe/Tirane +263 -0
  2783. package/python/tcl/tcl8.6/tzdata/Europe/Tiraspol +5 -0
  2784. package/python/tcl/tcl8.6/tzdata/Europe/Ulyanovsk +73 -0
  2785. package/python/tcl/tcl8.6/tzdata/Europe/Uzhgorod +254 -0
  2786. package/python/tcl/tcl8.6/tzdata/Europe/Vaduz +5 -0
  2787. package/python/tcl/tcl8.6/tzdata/Europe/Vatican +5 -0
  2788. package/python/tcl/tcl8.6/tzdata/Europe/Vienna +271 -0
  2789. package/python/tcl/tcl8.6/tzdata/Europe/Vilnius +252 -0
  2790. package/python/tcl/tcl8.6/tzdata/Europe/Volgograd +73 -0
  2791. package/python/tcl/tcl8.6/tzdata/Europe/Warsaw +296 -0
  2792. package/python/tcl/tcl8.6/tzdata/Europe/Zagreb +5 -0
  2793. package/python/tcl/tcl8.6/tzdata/Europe/Zaporozhye +252 -0
  2794. package/python/tcl/tcl8.6/tzdata/Europe/Zurich +250 -0
  2795. package/python/tcl/tcl8.6/tzdata/GB +5 -0
  2796. package/python/tcl/tcl8.6/tzdata/GB-Eire +5 -0
  2797. package/python/tcl/tcl8.6/tzdata/GMT +5 -0
  2798. package/python/tcl/tcl8.6/tzdata/GMT+0 +5 -0
  2799. package/python/tcl/tcl8.6/tzdata/GMT-0 +5 -0
  2800. package/python/tcl/tcl8.6/tzdata/GMT0 +5 -0
  2801. package/python/tcl/tcl8.6/tzdata/Greenwich +5 -0
  2802. package/python/tcl/tcl8.6/tzdata/HST +5 -0
  2803. package/python/tcl/tcl8.6/tzdata/Hongkong +5 -0
  2804. package/python/tcl/tcl8.6/tzdata/Iceland +5 -0
  2805. package/python/tcl/tcl8.6/tzdata/Indian/Antananarivo +5 -0
  2806. package/python/tcl/tcl8.6/tzdata/Indian/Chagos +7 -0
  2807. package/python/tcl/tcl8.6/tzdata/Indian/Christmas +6 -0
  2808. package/python/tcl/tcl8.6/tzdata/Indian/Cocos +6 -0
  2809. package/python/tcl/tcl8.6/tzdata/Indian/Comoro +5 -0
  2810. package/python/tcl/tcl8.6/tzdata/Indian/Kerguelen +6 -0
  2811. package/python/tcl/tcl8.6/tzdata/Indian/Mahe +6 -0
  2812. package/python/tcl/tcl8.6/tzdata/Indian/Maldives +7 -0
  2813. package/python/tcl/tcl8.6/tzdata/Indian/Mauritius +10 -0
  2814. package/python/tcl/tcl8.6/tzdata/Indian/Mayotte +5 -0
  2815. package/python/tcl/tcl8.6/tzdata/Indian/Reunion +6 -0
  2816. package/python/tcl/tcl8.6/tzdata/Iran +5 -0
  2817. package/python/tcl/tcl8.6/tzdata/Israel +5 -0
  2818. package/python/tcl/tcl8.6/tzdata/Jamaica +5 -0
  2819. package/python/tcl/tcl8.6/tzdata/Japan +5 -0
  2820. package/python/tcl/tcl8.6/tzdata/Kwajalein +5 -0
  2821. package/python/tcl/tcl8.6/tzdata/Libya +5 -0
  2822. package/python/tcl/tcl8.6/tzdata/MET +265 -0
  2823. package/python/tcl/tcl8.6/tzdata/MST +5 -0
  2824. package/python/tcl/tcl8.6/tzdata/MST7MDT +278 -0
  2825. package/python/tcl/tcl8.6/tzdata/Mexico/BajaNorte +5 -0
  2826. package/python/tcl/tcl8.6/tzdata/Mexico/BajaSur +5 -0
  2827. package/python/tcl/tcl8.6/tzdata/Mexico/General +5 -0
  2828. package/python/tcl/tcl8.6/tzdata/NZ +5 -0
  2829. package/python/tcl/tcl8.6/tzdata/NZ-CHAT +5 -0
  2830. package/python/tcl/tcl8.6/tzdata/Navajo +5 -0
  2831. package/python/tcl/tcl8.6/tzdata/PRC +5 -0
  2832. package/python/tcl/tcl8.6/tzdata/PST8PDT +278 -0
  2833. package/python/tcl/tcl8.6/tzdata/Pacific/Apia +31 -0
  2834. package/python/tcl/tcl8.6/tzdata/Pacific/Auckland +285 -0
  2835. package/python/tcl/tcl8.6/tzdata/Pacific/Bougainville +10 -0
  2836. package/python/tcl/tcl8.6/tzdata/Pacific/Chatham +258 -0
  2837. package/python/tcl/tcl8.6/tzdata/Pacific/Chuuk +11 -0
  2838. package/python/tcl/tcl8.6/tzdata/Pacific/Easter +268 -0
  2839. package/python/tcl/tcl8.6/tzdata/Pacific/Efate +28 -0
  2840. package/python/tcl/tcl8.6/tzdata/Pacific/Enderbury +5 -0
  2841. package/python/tcl/tcl8.6/tzdata/Pacific/Fakaofo +7 -0
  2842. package/python/tcl/tcl8.6/tzdata/Pacific/Fiji +189 -0
  2843. package/python/tcl/tcl8.6/tzdata/Pacific/Funafuti +6 -0
  2844. package/python/tcl/tcl8.6/tzdata/Pacific/Galapagos +9 -0
  2845. package/python/tcl/tcl8.6/tzdata/Pacific/Gambier +6 -0
  2846. package/python/tcl/tcl8.6/tzdata/Pacific/Guadalcanal +6 -0
  2847. package/python/tcl/tcl8.6/tzdata/Pacific/Guam +26 -0
  2848. package/python/tcl/tcl8.6/tzdata/Pacific/Honolulu +12 -0
  2849. package/python/tcl/tcl8.6/tzdata/Pacific/Johnston +5 -0
  2850. package/python/tcl/tcl8.6/tzdata/Pacific/Kanton +8 -0
  2851. package/python/tcl/tcl8.6/tzdata/Pacific/Kiritimati +8 -0
  2852. package/python/tcl/tcl8.6/tzdata/Pacific/Kosrae +14 -0
  2853. package/python/tcl/tcl8.6/tzdata/Pacific/Kwajalein +11 -0
  2854. package/python/tcl/tcl8.6/tzdata/Pacific/Majuro +12 -0
  2855. package/python/tcl/tcl8.6/tzdata/Pacific/Marquesas +6 -0
  2856. package/python/tcl/tcl8.6/tzdata/Pacific/Midway +5 -0
  2857. package/python/tcl/tcl8.6/tzdata/Pacific/Nauru +9 -0
  2858. package/python/tcl/tcl8.6/tzdata/Pacific/Niue +7 -0
  2859. package/python/tcl/tcl8.6/tzdata/Pacific/Norfolk +172 -0
  2860. package/python/tcl/tcl8.6/tzdata/Pacific/Noumea +12 -0
  2861. package/python/tcl/tcl8.6/tzdata/Pacific/Pago_Pago +7 -0
  2862. package/python/tcl/tcl8.6/tzdata/Pacific/Palau +7 -0
  2863. package/python/tcl/tcl8.6/tzdata/Pacific/Pitcairn +7 -0
  2864. package/python/tcl/tcl8.6/tzdata/Pacific/Pohnpei +12 -0
  2865. package/python/tcl/tcl8.6/tzdata/Pacific/Ponape +5 -0
  2866. package/python/tcl/tcl8.6/tzdata/Pacific/Port_Moresby +7 -0
  2867. package/python/tcl/tcl8.6/tzdata/Pacific/Rarotonga +33 -0
  2868. package/python/tcl/tcl8.6/tzdata/Pacific/Saipan +5 -0
  2869. package/python/tcl/tcl8.6/tzdata/Pacific/Samoa +5 -0
  2870. package/python/tcl/tcl8.6/tzdata/Pacific/Tahiti +6 -0
  2871. package/python/tcl/tcl8.6/tzdata/Pacific/Tarawa +6 -0
  2872. package/python/tcl/tcl8.6/tzdata/Pacific/Tongatapu +16 -0
  2873. package/python/tcl/tcl8.6/tzdata/Pacific/Truk +5 -0
  2874. package/python/tcl/tcl8.6/tzdata/Pacific/Wake +6 -0
  2875. package/python/tcl/tcl8.6/tzdata/Pacific/Wallis +6 -0
  2876. package/python/tcl/tcl8.6/tzdata/Pacific/Yap +5 -0
  2877. package/python/tcl/tcl8.6/tzdata/Poland +5 -0
  2878. package/python/tcl/tcl8.6/tzdata/Portugal +5 -0
  2879. package/python/tcl/tcl8.6/tzdata/ROC +5 -0
  2880. package/python/tcl/tcl8.6/tzdata/ROK +5 -0
  2881. package/python/tcl/tcl8.6/tzdata/Singapore +5 -0
  2882. package/python/tcl/tcl8.6/tzdata/SystemV/AST4 +5 -0
  2883. package/python/tcl/tcl8.6/tzdata/SystemV/AST4ADT +5 -0
  2884. package/python/tcl/tcl8.6/tzdata/SystemV/CST6 +5 -0
  2885. package/python/tcl/tcl8.6/tzdata/SystemV/CST6CDT +5 -0
  2886. package/python/tcl/tcl8.6/tzdata/SystemV/EST5 +5 -0
  2887. package/python/tcl/tcl8.6/tzdata/SystemV/EST5EDT +5 -0
  2888. package/python/tcl/tcl8.6/tzdata/SystemV/HST10 +5 -0
  2889. package/python/tcl/tcl8.6/tzdata/SystemV/MST7 +5 -0
  2890. package/python/tcl/tcl8.6/tzdata/SystemV/MST7MDT +5 -0
  2891. package/python/tcl/tcl8.6/tzdata/SystemV/PST8 +5 -0
  2892. package/python/tcl/tcl8.6/tzdata/SystemV/PST8PDT +5 -0
  2893. package/python/tcl/tcl8.6/tzdata/SystemV/YST9 +5 -0
  2894. package/python/tcl/tcl8.6/tzdata/SystemV/YST9YDT +5 -0
  2895. package/python/tcl/tcl8.6/tzdata/Turkey +5 -0
  2896. package/python/tcl/tcl8.6/tzdata/UCT +5 -0
  2897. package/python/tcl/tcl8.6/tzdata/US/Alaska +5 -0
  2898. package/python/tcl/tcl8.6/tzdata/US/Aleutian +5 -0
  2899. package/python/tcl/tcl8.6/tzdata/US/Arizona +5 -0
  2900. package/python/tcl/tcl8.6/tzdata/US/Central +5 -0
  2901. package/python/tcl/tcl8.6/tzdata/US/East-Indiana +5 -0
  2902. package/python/tcl/tcl8.6/tzdata/US/Eastern +5 -0
  2903. package/python/tcl/tcl8.6/tzdata/US/Hawaii +5 -0
  2904. package/python/tcl/tcl8.6/tzdata/US/Indiana-Starke +5 -0
  2905. package/python/tcl/tcl8.6/tzdata/US/Michigan +5 -0
  2906. package/python/tcl/tcl8.6/tzdata/US/Mountain +5 -0
  2907. package/python/tcl/tcl8.6/tzdata/US/Pacific +5 -0
  2908. package/python/tcl/tcl8.6/tzdata/US/Pacific-New +5 -0
  2909. package/python/tcl/tcl8.6/tzdata/US/Samoa +5 -0
  2910. package/python/tcl/tcl8.6/tzdata/UTC +5 -0
  2911. package/python/tcl/tcl8.6/tzdata/Universal +5 -0
  2912. package/python/tcl/tcl8.6/tzdata/W-SU +5 -0
  2913. package/python/tcl/tcl8.6/tzdata/WET +251 -0
  2914. package/python/tcl/tcl8.6/tzdata/Zulu +5 -0
  2915. package/python/tcl/tcl8.6/word.tcl +154 -0
  2916. package/python/tcl/tcl86t.lib +0 -0
  2917. package/python/tcl/tclConfig.sh +181 -0
  2918. package/python/tcl/tclooConfig.sh +19 -0
  2919. package/python/tcl/tclstub86.lib +0 -0
  2920. package/python/tcl/tix8.4.3/Balloon.tcl +585 -0
  2921. package/python/tcl/tix8.4.3/BtnBox.tcl +120 -0
  2922. package/python/tcl/tix8.4.3/CObjView.tcl +360 -0
  2923. package/python/tcl/tix8.4.3/ChkList.tcl +239 -0
  2924. package/python/tcl/tix8.4.3/ComboBox.tcl +1558 -0
  2925. package/python/tcl/tix8.4.3/Compat.tcl +33 -0
  2926. package/python/tcl/tix8.4.3/Console.tcl +612 -0
  2927. package/python/tcl/tix8.4.3/Control.tcl +482 -0
  2928. package/python/tcl/tix8.4.3/DefSchm.tcl +103 -0
  2929. package/python/tcl/tix8.4.3/DialogS.tcl +175 -0
  2930. package/python/tcl/tix8.4.3/DirBox.tcl +207 -0
  2931. package/python/tcl/tix8.4.3/DirDlg.tcl +95 -0
  2932. package/python/tcl/tix8.4.3/DirList.tcl +272 -0
  2933. package/python/tcl/tix8.4.3/DirTree.tcl +350 -0
  2934. package/python/tcl/tix8.4.3/DragDrop.tcl +166 -0
  2935. package/python/tcl/tix8.4.3/DtlList.tcl +49 -0
  2936. package/python/tcl/tix8.4.3/EFileBox.tcl +436 -0
  2937. package/python/tcl/tix8.4.3/EFileDlg.tcl +65 -0
  2938. package/python/tcl/tix8.4.3/Event.tcl +217 -0
  2939. package/python/tcl/tix8.4.3/FileBox.tcl +568 -0
  2940. package/python/tcl/tix8.4.3/FileCbx.tcl +108 -0
  2941. package/python/tcl/tix8.4.3/FileDlg.tcl +75 -0
  2942. package/python/tcl/tix8.4.3/FileEnt.tcl +270 -0
  2943. package/python/tcl/tix8.4.3/FloatEnt.tcl +132 -0
  2944. package/python/tcl/tix8.4.3/Grid.tcl +1122 -0
  2945. package/python/tcl/tix8.4.3/HList.tcl +917 -0
  2946. package/python/tcl/tix8.4.3/HListDD.tcl +204 -0
  2947. package/python/tcl/tix8.4.3/IconView.tcl +272 -0
  2948. package/python/tcl/tix8.4.3/Init.tcl +232 -0
  2949. package/python/tcl/tix8.4.3/LabEntry.tcl +86 -0
  2950. package/python/tcl/tix8.4.3/LabFrame.tcl +49 -0
  2951. package/python/tcl/tix8.4.3/LabWidg.tcl +157 -0
  2952. package/python/tcl/tix8.4.3/ListNBk.tcl +153 -0
  2953. package/python/tcl/tix8.4.3/Makefile +5 -0
  2954. package/python/tcl/tix8.4.3/Meter.tcl +137 -0
  2955. package/python/tcl/tix8.4.3/MultView.tcl +157 -0
  2956. package/python/tcl/tix8.4.3/NoteBook.tcl +247 -0
  2957. package/python/tcl/tix8.4.3/OldUtil.tcl +108 -0
  2958. package/python/tcl/tix8.4.3/OptMenu.tcl +394 -0
  2959. package/python/tcl/tix8.4.3/PanedWin.tcl +1215 -0
  2960. package/python/tcl/tix8.4.3/PopMenu.tcl +239 -0
  2961. package/python/tcl/tix8.4.3/Primitiv.tcl +428 -0
  2962. package/python/tcl/tix8.4.3/ResizeH.tcl +505 -0
  2963. package/python/tcl/tix8.4.3/SGrid.tcl +243 -0
  2964. package/python/tcl/tix8.4.3/SHList.tcl +140 -0
  2965. package/python/tcl/tix8.4.3/SListBox.tcl +295 -0
  2966. package/python/tcl/tix8.4.3/STList.tcl +93 -0
  2967. package/python/tcl/tix8.4.3/SText.tcl +134 -0
  2968. package/python/tcl/tix8.4.3/SWidget.tcl +465 -0
  2969. package/python/tcl/tix8.4.3/SWindow.tcl +274 -0
  2970. package/python/tcl/tix8.4.3/Select.tcl +300 -0
  2971. package/python/tcl/tix8.4.3/Shell.tcl +47 -0
  2972. package/python/tcl/tix8.4.3/SimpDlg.tcl +47 -0
  2973. package/python/tcl/tix8.4.3/StackWin.tcl +84 -0
  2974. package/python/tcl/tix8.4.3/StatBar.tcl +56 -0
  2975. package/python/tcl/tix8.4.3/StdBBox.tcl +71 -0
  2976. package/python/tcl/tix8.4.3/StdShell.tcl +49 -0
  2977. package/python/tcl/tix8.4.3/TList.tcl +953 -0
  2978. package/python/tcl/tix8.4.3/Tix.tcl +398 -0
  2979. package/python/tcl/tix8.4.3/Tree.tcl +211 -0
  2980. package/python/tcl/tix8.4.3/Utils.tcl +442 -0
  2981. package/python/tcl/tix8.4.3/VResize.tcl +211 -0
  2982. package/python/tcl/tix8.4.3/VStack.tcl +430 -0
  2983. package/python/tcl/tix8.4.3/VTree.tcl +195 -0
  2984. package/python/tcl/tix8.4.3/Variable.tcl +101 -0
  2985. package/python/tcl/tix8.4.3/WInfo.tcl +40 -0
  2986. package/python/tcl/tix8.4.3/bitmaps/act_fold.gif +0 -0
  2987. package/python/tcl/tix8.4.3/bitmaps/act_fold.xbm +5 -0
  2988. package/python/tcl/tix8.4.3/bitmaps/act_fold.xpm +22 -0
  2989. package/python/tcl/tix8.4.3/bitmaps/balarrow.xbm +4 -0
  2990. package/python/tcl/tix8.4.3/bitmaps/cbxarrow.xbm +6 -0
  2991. package/python/tcl/tix8.4.3/bitmaps/ck_def.xbm +6 -0
  2992. package/python/tcl/tix8.4.3/bitmaps/ck_off.xbm +6 -0
  2993. package/python/tcl/tix8.4.3/bitmaps/ck_on.xbm +6 -0
  2994. package/python/tcl/tix8.4.3/bitmaps/cross.xbm +6 -0
  2995. package/python/tcl/tix8.4.3/bitmaps/decr.xbm +4 -0
  2996. package/python/tcl/tix8.4.3/bitmaps/drop.xbm +8 -0
  2997. package/python/tcl/tix8.4.3/bitmaps/file.gif +0 -0
  2998. package/python/tcl/tix8.4.3/bitmaps/file.xbm +5 -0
  2999. package/python/tcl/tix8.4.3/bitmaps/file.xpm +18 -0
  3000. package/python/tcl/tix8.4.3/bitmaps/folder.gif +0 -0
  3001. package/python/tcl/tix8.4.3/bitmaps/folder.xbm +5 -0
  3002. package/python/tcl/tix8.4.3/bitmaps/folder.xpm +21 -0
  3003. package/python/tcl/tix8.4.3/bitmaps/harddisk.xbm +14 -0
  3004. package/python/tcl/tix8.4.3/bitmaps/hourglas.mask +16 -0
  3005. package/python/tcl/tix8.4.3/bitmaps/hourglas.xbm +16 -0
  3006. package/python/tcl/tix8.4.3/bitmaps/incr.xbm +4 -0
  3007. package/python/tcl/tix8.4.3/bitmaps/info.gif +0 -0
  3008. package/python/tcl/tix8.4.3/bitmaps/info.xpm +38 -0
  3009. package/python/tcl/tix8.4.3/bitmaps/maximize.xbm +6 -0
  3010. package/python/tcl/tix8.4.3/bitmaps/minimize.xbm +6 -0
  3011. package/python/tcl/tix8.4.3/bitmaps/minus.gif +0 -0
  3012. package/python/tcl/tix8.4.3/bitmaps/minus.xbm +5 -0
  3013. package/python/tcl/tix8.4.3/bitmaps/minus.xpm +14 -0
  3014. package/python/tcl/tix8.4.3/bitmaps/minusarm.gif +0 -0
  3015. package/python/tcl/tix8.4.3/bitmaps/minusarm.xbm +5 -0
  3016. package/python/tcl/tix8.4.3/bitmaps/minusarm.xpm +15 -0
  3017. package/python/tcl/tix8.4.3/bitmaps/mktransgif.tcl +14 -0
  3018. package/python/tcl/tix8.4.3/bitmaps/network.xbm +14 -0
  3019. package/python/tcl/tix8.4.3/bitmaps/no_entry.gif +0 -0
  3020. package/python/tcl/tix8.4.3/bitmaps/no_entry.xpm +39 -0
  3021. package/python/tcl/tix8.4.3/bitmaps/openfile.xbm +5 -0
  3022. package/python/tcl/tix8.4.3/bitmaps/openfold.gif +0 -0
  3023. package/python/tcl/tix8.4.3/bitmaps/openfold.xbm +5 -0
  3024. package/python/tcl/tix8.4.3/bitmaps/openfold.xpm +21 -0
  3025. package/python/tcl/tix8.4.3/bitmaps/plus.gif +0 -0
  3026. package/python/tcl/tix8.4.3/bitmaps/plus.xbm +5 -0
  3027. package/python/tcl/tix8.4.3/bitmaps/plus.xpm +14 -0
  3028. package/python/tcl/tix8.4.3/bitmaps/plusarm.gif +0 -0
  3029. package/python/tcl/tix8.4.3/bitmaps/plusarm.xbm +5 -0
  3030. package/python/tcl/tix8.4.3/bitmaps/plusarm.xpm +15 -0
  3031. package/python/tcl/tix8.4.3/bitmaps/resize1.xbm +8 -0
  3032. package/python/tcl/tix8.4.3/bitmaps/resize2.xbm +8 -0
  3033. package/python/tcl/tix8.4.3/bitmaps/restore.xbm +6 -0
  3034. package/python/tcl/tix8.4.3/bitmaps/srcfile.gif +0 -0
  3035. package/python/tcl/tix8.4.3/bitmaps/srcfile.xbm +5 -0
  3036. package/python/tcl/tix8.4.3/bitmaps/srcfile.xpm +18 -0
  3037. package/python/tcl/tix8.4.3/bitmaps/system.xbm +6 -0
  3038. package/python/tcl/tix8.4.3/bitmaps/textfile.gif +0 -0
  3039. package/python/tcl/tix8.4.3/bitmaps/textfile.xbm +5 -0
  3040. package/python/tcl/tix8.4.3/bitmaps/textfile.xpm +18 -0
  3041. package/python/tcl/tix8.4.3/bitmaps/tick.xbm +6 -0
  3042. package/python/tcl/tix8.4.3/bitmaps/warning.gif +0 -0
  3043. package/python/tcl/tix8.4.3/bitmaps/warning.xpm +38 -0
  3044. package/python/tcl/tix8.4.3/demos/MkChoose.tcl +280 -0
  3045. package/python/tcl/tix8.4.3/demos/MkDirLis.tcl +69 -0
  3046. package/python/tcl/tix8.4.3/demos/MkSample.tcl +270 -0
  3047. package/python/tcl/tix8.4.3/demos/MkScroll.tcl +160 -0
  3048. package/python/tcl/tix8.4.3/demos/bitmaps/about.xpm +50 -0
  3049. package/python/tcl/tix8.4.3/demos/bitmaps/bold.xbm +6 -0
  3050. package/python/tcl/tix8.4.3/demos/bitmaps/capital.xbm +6 -0
  3051. package/python/tcl/tix8.4.3/demos/bitmaps/centerj.xbm +6 -0
  3052. package/python/tcl/tix8.4.3/demos/bitmaps/code.xpm +22 -0
  3053. package/python/tcl/tix8.4.3/demos/bitmaps/combobox.xbm +14 -0
  3054. package/python/tcl/tix8.4.3/demos/bitmaps/combobox.xpm +49 -0
  3055. package/python/tcl/tix8.4.3/demos/bitmaps/drivea.xbm +14 -0
  3056. package/python/tcl/tix8.4.3/demos/bitmaps/drivea.xpm +43 -0
  3057. package/python/tcl/tix8.4.3/demos/bitmaps/exit.xpm +48 -0
  3058. package/python/tcl/tix8.4.3/demos/bitmaps/filebox.xbm +14 -0
  3059. package/python/tcl/tix8.4.3/demos/bitmaps/filebox.xpm +49 -0
  3060. package/python/tcl/tix8.4.3/demos/bitmaps/harddisk.xbm +14 -0
  3061. package/python/tcl/tix8.4.3/demos/bitmaps/harddisk.xpm +43 -0
  3062. package/python/tcl/tix8.4.3/demos/bitmaps/italic.xbm +6 -0
  3063. package/python/tcl/tix8.4.3/demos/bitmaps/justify.xbm +6 -0
  3064. package/python/tcl/tix8.4.3/demos/bitmaps/leftj.xbm +6 -0
  3065. package/python/tcl/tix8.4.3/demos/bitmaps/netw.xbm +14 -0
  3066. package/python/tcl/tix8.4.3/demos/bitmaps/netw.xpm +45 -0
  3067. package/python/tcl/tix8.4.3/demos/bitmaps/network.xbm +14 -0
  3068. package/python/tcl/tix8.4.3/demos/bitmaps/network.xpm +45 -0
  3069. package/python/tcl/tix8.4.3/demos/bitmaps/optmenu.xpm +48 -0
  3070. package/python/tcl/tix8.4.3/demos/bitmaps/rightj.xbm +6 -0
  3071. package/python/tcl/tix8.4.3/demos/bitmaps/select.xpm +52 -0
  3072. package/python/tcl/tix8.4.3/demos/bitmaps/tix.gif +0 -0
  3073. package/python/tcl/tix8.4.3/demos/bitmaps/underlin.xbm +6 -0
  3074. package/python/tcl/tix8.4.3/demos/samples/AllSampl.tcl +201 -0
  3075. package/python/tcl/tix8.4.3/demos/samples/ArrowBtn.tcl +187 -0
  3076. package/python/tcl/tix8.4.3/demos/samples/Balloon.tcl +48 -0
  3077. package/python/tcl/tix8.4.3/demos/samples/BtnBox.tcl +57 -0
  3078. package/python/tcl/tix8.4.3/demos/samples/CObjView.tcl +80 -0
  3079. package/python/tcl/tix8.4.3/demos/samples/ChkList.tcl +179 -0
  3080. package/python/tcl/tix8.4.3/demos/samples/CmpImg.tcl +64 -0
  3081. package/python/tcl/tix8.4.3/demos/samples/CmpImg1.tcl +182 -0
  3082. package/python/tcl/tix8.4.3/demos/samples/CmpImg2.tcl +136 -0
  3083. package/python/tcl/tix8.4.3/demos/samples/CmpImg3.tcl +90 -0
  3084. package/python/tcl/tix8.4.3/demos/samples/CmpImg4.tcl +125 -0
  3085. package/python/tcl/tix8.4.3/demos/samples/ComboBox.tcl +119 -0
  3086. package/python/tcl/tix8.4.3/demos/samples/Control.tcl +133 -0
  3087. package/python/tcl/tix8.4.3/demos/samples/DirDlg.tcl +90 -0
  3088. package/python/tcl/tix8.4.3/demos/samples/DirList.tcl +91 -0
  3089. package/python/tcl/tix8.4.3/demos/samples/DirTree.tcl +92 -0
  3090. package/python/tcl/tix8.4.3/demos/samples/DragDrop.tcl +50 -0
  3091. package/python/tcl/tix8.4.3/demos/samples/DynTree.tcl +149 -0
  3092. package/python/tcl/tix8.4.3/demos/samples/EFileDlg.tcl +104 -0
  3093. package/python/tcl/tix8.4.3/demos/samples/EditGrid.tcl +281 -0
  3094. package/python/tcl/tix8.4.3/demos/samples/FileDlg.tcl +98 -0
  3095. package/python/tcl/tix8.4.3/demos/samples/FileEnt.tcl +81 -0
  3096. package/python/tcl/tix8.4.3/demos/samples/HList1.tcl +159 -0
  3097. package/python/tcl/tix8.4.3/demos/samples/LabEntry.tcl +94 -0
  3098. package/python/tcl/tix8.4.3/demos/samples/LabFrame.tcl +85 -0
  3099. package/python/tcl/tix8.4.3/demos/samples/ListNBK.tcl +86 -0
  3100. package/python/tcl/tix8.4.3/demos/samples/Meter.tcl +77 -0
  3101. package/python/tcl/tix8.4.3/demos/samples/NoteBook.tcl +102 -0
  3102. package/python/tcl/tix8.4.3/demos/samples/OptMenu.tcl +103 -0
  3103. package/python/tcl/tix8.4.3/demos/samples/PanedWin.tcl +112 -0
  3104. package/python/tcl/tix8.4.3/demos/samples/PopMenu.tcl +73 -0
  3105. package/python/tcl/tix8.4.3/demos/samples/SGrid0.tcl +135 -0
  3106. package/python/tcl/tix8.4.3/demos/samples/SGrid1.tcl +215 -0
  3107. package/python/tcl/tix8.4.3/demos/samples/SHList.tcl +111 -0
  3108. package/python/tcl/tix8.4.3/demos/samples/SHList2.tcl +159 -0
  3109. package/python/tcl/tix8.4.3/demos/samples/SListBox.tcl +84 -0
  3110. package/python/tcl/tix8.4.3/demos/samples/STList1.tcl +57 -0
  3111. package/python/tcl/tix8.4.3/demos/samples/STList2.tcl +85 -0
  3112. package/python/tcl/tix8.4.3/demos/samples/STList3.tcl +112 -0
  3113. package/python/tcl/tix8.4.3/demos/samples/SText.tcl +75 -0
  3114. package/python/tcl/tix8.4.3/demos/samples/SWindow.tcl +89 -0
  3115. package/python/tcl/tix8.4.3/demos/samples/Sample.tcl +36 -0
  3116. package/python/tcl/tix8.4.3/demos/samples/Select.tcl +114 -0
  3117. package/python/tcl/tix8.4.3/demos/samples/StdBBox.tcl +65 -0
  3118. package/python/tcl/tix8.4.3/demos/samples/Tree.tcl +91 -0
  3119. package/python/tcl/tix8.4.3/demos/samples/Xpm.tcl +89 -0
  3120. package/python/tcl/tix8.4.3/demos/samples/Xpm1.tcl +108 -0
  3121. package/python/tcl/tix8.4.3/demos/tclIndex +55 -0
  3122. package/python/tcl/tix8.4.3/demos/tixwidgets.tcl +344 -0
  3123. package/python/tcl/tix8.4.3/demos/widget +450 -0
  3124. package/python/tcl/tix8.4.3/fs.tcl +170 -0
  3125. package/python/tcl/tix8.4.3/pkgIndex.tcl +2 -0
  3126. package/python/tcl/tix8.4.3/pref/10Point.fs +23 -0
  3127. package/python/tcl/tix8.4.3/pref/10Point.fsc +44 -0
  3128. package/python/tcl/tix8.4.3/pref/12Point.fs +23 -0
  3129. package/python/tcl/tix8.4.3/pref/12Point.fsc +44 -0
  3130. package/python/tcl/tix8.4.3/pref/14Point.fs +22 -0
  3131. package/python/tcl/tix8.4.3/pref/14Point.fsc +50 -0
  3132. package/python/tcl/tix8.4.3/pref/Bisque.cs +35 -0
  3133. package/python/tcl/tix8.4.3/pref/Bisque.csc +338 -0
  3134. package/python/tcl/tix8.4.3/pref/Blue.cs +35 -0
  3135. package/python/tcl/tix8.4.3/pref/Blue.csc +338 -0
  3136. package/python/tcl/tix8.4.3/pref/Gray.cs +36 -0
  3137. package/python/tcl/tix8.4.3/pref/Gray.csc +339 -0
  3138. package/python/tcl/tix8.4.3/pref/Makefile +48 -0
  3139. package/python/tcl/tix8.4.3/pref/Old12Pt.fs +14 -0
  3140. package/python/tcl/tix8.4.3/pref/Old14Pt.fs +13 -0
  3141. package/python/tcl/tix8.4.3/pref/SGIGray.cs +38 -0
  3142. package/python/tcl/tix8.4.3/pref/SGIGray.csc +339 -0
  3143. package/python/tcl/tix8.4.3/pref/TK.cs +35 -0
  3144. package/python/tcl/tix8.4.3/pref/TK.csc +72 -0
  3145. package/python/tcl/tix8.4.3/pref/TK.fs +16 -0
  3146. package/python/tcl/tix8.4.3/pref/TK.fsc +19 -0
  3147. package/python/tcl/tix8.4.3/pref/TixGray.cs +36 -0
  3148. package/python/tcl/tix8.4.3/pref/TixGray.csc +339 -0
  3149. package/python/tcl/tix8.4.3/pref/TkWin.cs +68 -0
  3150. package/python/tcl/tix8.4.3/pref/TkWin.csc +333 -0
  3151. package/python/tcl/tix8.4.3/pref/TkWin.fs +16 -0
  3152. package/python/tcl/tix8.4.3/pref/TkWin.fsc +34 -0
  3153. package/python/tcl/tix8.4.3/pref/WmDefault.cs +45 -0
  3154. package/python/tcl/tix8.4.3/pref/WmDefault.csc +316 -0
  3155. package/python/tcl/tix8.4.3/pref/WmDefault.fs +23 -0
  3156. package/python/tcl/tix8.4.3/pref/WmDefault.fsc +57 -0
  3157. package/python/tcl/tix8.4.3/pref/WmDefault.py +96 -0
  3158. package/python/tcl/tix8.4.3/pref/WmDefault.tcl +1053 -0
  3159. package/python/tcl/tix8.4.3/pref/WmDefault.txt +142 -0
  3160. package/python/tcl/tix8.4.3/pref/pkgIndex.tcl +9 -0
  3161. package/python/tcl/tix8.4.3/pref/tixmkpref +381 -0
  3162. package/python/tcl/tix8.4.3/tix84.dll +0 -0
  3163. package/python/tcl/tix8.4.3/tix84.lib +0 -0
  3164. package/python/tcl/tk8.6/bgerror.tcl +272 -0
  3165. package/python/tcl/tk8.6/button.tcl +782 -0
  3166. package/python/tcl/tk8.6/choosedir.tcl +308 -0
  3167. package/python/tcl/tk8.6/clrpick.tcl +695 -0
  3168. package/python/tcl/tk8.6/comdlg.tcl +322 -0
  3169. package/python/tcl/tk8.6/console.tcl +1150 -0
  3170. package/python/tcl/tk8.6/demos/README +44 -0
  3171. package/python/tcl/tk8.6/demos/anilabel.tcl +160 -0
  3172. package/python/tcl/tk8.6/demos/aniwave.tcl +104 -0
  3173. package/python/tcl/tk8.6/demos/arrow.tcl +241 -0
  3174. package/python/tcl/tk8.6/demos/bind.tcl +78 -0
  3175. package/python/tcl/tk8.6/demos/bitmap.tcl +52 -0
  3176. package/python/tcl/tk8.6/demos/browse +66 -0
  3177. package/python/tcl/tk8.6/demos/button.tcl +47 -0
  3178. package/python/tcl/tk8.6/demos/check.tcl +71 -0
  3179. package/python/tcl/tk8.6/demos/clrpick.tcl +54 -0
  3180. package/python/tcl/tk8.6/demos/colors.tcl +99 -0
  3181. package/python/tcl/tk8.6/demos/combo.tcl +61 -0
  3182. package/python/tcl/tk8.6/demos/cscroll.tcl +172 -0
  3183. package/python/tcl/tk8.6/demos/ctext.tcl +176 -0
  3184. package/python/tcl/tk8.6/demos/dialog1.tcl +25 -0
  3185. package/python/tcl/tk8.6/demos/dialog2.tcl +18 -0
  3186. package/python/tcl/tk8.6/demos/en.msg +97 -0
  3187. package/python/tcl/tk8.6/demos/entry1.tcl +34 -0
  3188. package/python/tcl/tk8.6/demos/entry2.tcl +46 -0
  3189. package/python/tcl/tk8.6/demos/entry3.tcl +185 -0
  3190. package/python/tcl/tk8.6/demos/filebox.tcl +81 -0
  3191. package/python/tcl/tk8.6/demos/floor.tcl +1371 -0
  3192. package/python/tcl/tk8.6/demos/fontchoose.tcl +67 -0
  3193. package/python/tcl/tk8.6/demos/form.tcl +38 -0
  3194. package/python/tcl/tk8.6/demos/goldberg.tcl +1833 -0
  3195. package/python/tcl/tk8.6/demos/hello +22 -0
  3196. package/python/tcl/tk8.6/demos/hscale.tcl +45 -0
  3197. package/python/tcl/tk8.6/demos/icon.tcl +51 -0
  3198. package/python/tcl/tk8.6/demos/image1.tcl +35 -0
  3199. package/python/tcl/tk8.6/demos/image2.tcl +108 -0
  3200. package/python/tcl/tk8.6/demos/images/earth.gif +0 -0
  3201. package/python/tcl/tk8.6/demos/images/earthmenu.png +0 -0
  3202. package/python/tcl/tk8.6/demos/images/earthris.gif +0 -0
  3203. package/python/tcl/tk8.6/demos/images/flagdown.xbm +27 -0
  3204. package/python/tcl/tk8.6/demos/images/flagup.xbm +27 -0
  3205. package/python/tcl/tk8.6/demos/images/gray25.xbm +6 -0
  3206. package/python/tcl/tk8.6/demos/images/letters.xbm +27 -0
  3207. package/python/tcl/tk8.6/demos/images/noletter.xbm +27 -0
  3208. package/python/tcl/tk8.6/demos/images/ouster.png +0 -0
  3209. package/python/tcl/tk8.6/demos/images/pattern.xbm +6 -0
  3210. package/python/tcl/tk8.6/demos/images/tcllogo.gif +0 -0
  3211. package/python/tcl/tk8.6/demos/images/teapot.ppm +31 -0
  3212. package/python/tcl/tk8.6/demos/items.tcl +302 -0
  3213. package/python/tcl/tk8.6/demos/ixset +328 -0
  3214. package/python/tcl/tk8.6/demos/knightstour.tcl +268 -0
  3215. package/python/tcl/tk8.6/demos/label.tcl +40 -0
  3216. package/python/tcl/tk8.6/demos/labelframe.tcl +76 -0
  3217. package/python/tcl/tk8.6/demos/license.terms +40 -0
  3218. package/python/tcl/tk8.6/demos/mclist.tcl +119 -0
  3219. package/python/tcl/tk8.6/demos/menu.tcl +180 -0
  3220. package/python/tcl/tk8.6/demos/menubu.tcl +90 -0
  3221. package/python/tcl/tk8.6/demos/msgbox.tcl +62 -0
  3222. package/python/tcl/tk8.6/demos/nl.msg +125 -0
  3223. package/python/tcl/tk8.6/demos/paned1.tcl +32 -0
  3224. package/python/tcl/tk8.6/demos/paned2.tcl +74 -0
  3225. package/python/tcl/tk8.6/demos/pendulum.tcl +197 -0
  3226. package/python/tcl/tk8.6/demos/plot.tcl +97 -0
  3227. package/python/tcl/tk8.6/demos/puzzle.tcl +82 -0
  3228. package/python/tcl/tk8.6/demos/radio.tcl +66 -0
  3229. package/python/tcl/tk8.6/demos/rmt +210 -0
  3230. package/python/tcl/tk8.6/demos/rolodex +204 -0
  3231. package/python/tcl/tk8.6/demos/ruler.tcl +175 -0
  3232. package/python/tcl/tk8.6/demos/sayings.tcl +44 -0
  3233. package/python/tcl/tk8.6/demos/search.tcl +139 -0
  3234. package/python/tcl/tk8.6/demos/spin.tcl +53 -0
  3235. package/python/tcl/tk8.6/demos/square +60 -0
  3236. package/python/tcl/tk8.6/demos/states.tcl +54 -0
  3237. package/python/tcl/tk8.6/demos/style.tcl +155 -0
  3238. package/python/tcl/tk8.6/demos/tclIndex +67 -0
  3239. package/python/tcl/tk8.6/demos/tcolor +358 -0
  3240. package/python/tcl/tk8.6/demos/text.tcl +113 -0
  3241. package/python/tcl/tk8.6/demos/textpeer.tcl +62 -0
  3242. package/python/tcl/tk8.6/demos/timer +47 -0
  3243. package/python/tcl/tk8.6/demos/toolbar.tcl +92 -0
  3244. package/python/tcl/tk8.6/demos/tree.tcl +89 -0
  3245. package/python/tcl/tk8.6/demos/ttkbut.tcl +84 -0
  3246. package/python/tcl/tk8.6/demos/ttkmenu.tcl +53 -0
  3247. package/python/tcl/tk8.6/demos/ttknote.tcl +57 -0
  3248. package/python/tcl/tk8.6/demos/ttkpane.tcl +112 -0
  3249. package/python/tcl/tk8.6/demos/ttkprogress.tcl +46 -0
  3250. package/python/tcl/tk8.6/demos/ttkscale.tcl +39 -0
  3251. package/python/tcl/tk8.6/demos/twind.tcl +351 -0
  3252. package/python/tcl/tk8.6/demos/unicodeout.tcl +145 -0
  3253. package/python/tcl/tk8.6/demos/vscale.tcl +46 -0
  3254. package/python/tcl/tk8.6/demos/widget +734 -0
  3255. package/python/tcl/tk8.6/dialog.tcl +175 -0
  3256. package/python/tcl/tk8.6/entry.tcl +686 -0
  3257. package/python/tcl/tk8.6/focus.tcl +178 -0
  3258. package/python/tcl/tk8.6/fontchooser.tcl +456 -0
  3259. package/python/tcl/tk8.6/iconlist.tcl +717 -0
  3260. package/python/tcl/tk8.6/icons.tcl +153 -0
  3261. package/python/tcl/tk8.6/images/README +7 -0
  3262. package/python/tcl/tk8.6/images/logo.eps +2091 -0
  3263. package/python/tcl/tk8.6/images/logo100.gif +0 -0
  3264. package/python/tcl/tk8.6/images/logo64.gif +0 -0
  3265. package/python/tcl/tk8.6/images/logoLarge.gif +0 -0
  3266. package/python/tcl/tk8.6/images/logoMed.gif +0 -0
  3267. package/python/tcl/tk8.6/images/pwrdLogo.eps +1897 -0
  3268. package/python/tcl/tk8.6/images/pwrdLogo100.gif +0 -0
  3269. package/python/tcl/tk8.6/images/pwrdLogo150.gif +0 -0
  3270. package/python/tcl/tk8.6/images/pwrdLogo175.gif +0 -0
  3271. package/python/tcl/tk8.6/images/pwrdLogo200.gif +0 -0
  3272. package/python/tcl/tk8.6/images/pwrdLogo75.gif +0 -0
  3273. package/python/tcl/tk8.6/images/tai-ku.gif +0 -0
  3274. package/python/tcl/tk8.6/license.terms +40 -0
  3275. package/python/tcl/tk8.6/listbox.tcl +560 -0
  3276. package/python/tcl/tk8.6/megawidget.tcl +297 -0
  3277. package/python/tcl/tk8.6/menu.tcl +1377 -0
  3278. package/python/tcl/tk8.6/mkpsenc.tcl +1488 -0
  3279. package/python/tcl/tk8.6/msgbox.tcl +427 -0
  3280. package/python/tcl/tk8.6/msgs/cs.msg +77 -0
  3281. package/python/tcl/tk8.6/msgs/da.msg +78 -0
  3282. package/python/tcl/tk8.6/msgs/de.msg +91 -0
  3283. package/python/tcl/tk8.6/msgs/el.msg +86 -0
  3284. package/python/tcl/tk8.6/msgs/en.msg +91 -0
  3285. package/python/tcl/tk8.6/msgs/en_gb.msg +3 -0
  3286. package/python/tcl/tk8.6/msgs/eo.msg +75 -0
  3287. package/python/tcl/tk8.6/msgs/es.msg +76 -0
  3288. package/python/tcl/tk8.6/msgs/fr.msg +72 -0
  3289. package/python/tcl/tk8.6/msgs/hu.msg +78 -0
  3290. package/python/tcl/tk8.6/msgs/it.msg +73 -0
  3291. package/python/tcl/tk8.6/msgs/nl.msg +91 -0
  3292. package/python/tcl/tk8.6/msgs/pl.msg +91 -0
  3293. package/python/tcl/tk8.6/msgs/pt.msg +74 -0
  3294. package/python/tcl/tk8.6/msgs/ru.msg +75 -0
  3295. package/python/tcl/tk8.6/msgs/sv.msg +76 -0
  3296. package/python/tcl/tk8.6/obsolete.tcl +178 -0
  3297. package/python/tcl/tk8.6/optMenu.tcl +43 -0
  3298. package/python/tcl/tk8.6/palette.tcl +244 -0
  3299. package/python/tcl/tk8.6/panedwindow.tcl +194 -0
  3300. package/python/tcl/tk8.6/pkgIndex.tcl +7 -0
  3301. package/python/tcl/tk8.6/safetk.tcl +262 -0
  3302. package/python/tcl/tk8.6/scale.tcl +290 -0
  3303. package/python/tcl/tk8.6/scrlbar.tcl +456 -0
  3304. package/python/tcl/tk8.6/spinbox.tcl +593 -0
  3305. package/python/tcl/tk8.6/tclIndex +253 -0
  3306. package/python/tcl/tk8.6/tearoff.tcl +184 -0
  3307. package/python/tcl/tk8.6/text.tcl +1237 -0
  3308. package/python/tcl/tk8.6/tk.tcl +712 -0
  3309. package/python/tcl/tk8.6/tkfbox.tcl +1240 -0
  3310. package/python/tcl/tk8.6/ttk/altTheme.tcl +109 -0
  3311. package/python/tcl/tk8.6/ttk/aquaTheme.tcl +119 -0
  3312. package/python/tcl/tk8.6/ttk/button.tcl +83 -0
  3313. package/python/tcl/tk8.6/ttk/clamTheme.tcl +147 -0
  3314. package/python/tcl/tk8.6/ttk/classicTheme.tcl +115 -0
  3315. package/python/tcl/tk8.6/ttk/combobox.tcl +448 -0
  3316. package/python/tcl/tk8.6/ttk/cursors.tcl +208 -0
  3317. package/python/tcl/tk8.6/ttk/defaults.tcl +143 -0
  3318. package/python/tcl/tk8.6/ttk/entry.tcl +632 -0
  3319. package/python/tcl/tk8.6/ttk/fonts.tcl +157 -0
  3320. package/python/tcl/tk8.6/ttk/menubutton.tcl +241 -0
  3321. package/python/tcl/tk8.6/ttk/notebook.tcl +199 -0
  3322. package/python/tcl/tk8.6/ttk/panedwindow.tcl +91 -0
  3323. package/python/tcl/tk8.6/ttk/progress.tcl +49 -0
  3324. package/python/tcl/tk8.6/ttk/scale.tcl +94 -0
  3325. package/python/tcl/tk8.6/ttk/scrollbar.tcl +126 -0
  3326. package/python/tcl/tk8.6/ttk/sizegrip.tcl +102 -0
  3327. package/python/tcl/tk8.6/ttk/spinbox.tcl +192 -0
  3328. package/python/tcl/tk8.6/ttk/treeview.tcl +383 -0
  3329. package/python/tcl/tk8.6/ttk/ttk.tcl +176 -0
  3330. package/python/tcl/tk8.6/ttk/utils.tcl +337 -0
  3331. package/python/tcl/tk8.6/ttk/vistaTheme.tcl +229 -0
  3332. package/python/tcl/tk8.6/ttk/winTheme.tcl +84 -0
  3333. package/python/tcl/tk8.6/ttk/xpTheme.tcl +67 -0
  3334. package/python/tcl/tk8.6/unsupported.tcl +269 -0
  3335. package/python/tcl/tk8.6/xmfbox.tcl +989 -0
  3336. package/python/tcl/tk86t.lib +0 -0
  3337. package/python/tcl/tkstub86.lib +0 -0
  3338. package/python/vcruntime140.dll +0 -0
  3339. package/python/vcruntime140_1.dll +0 -0
  3340. package/runtime-manifest.json +7 -0
@@ -0,0 +1,3506 @@
1
+ # http.tcl --
2
+ #
3
+ # Client-side HTTP for GET, POST, and HEAD commands. These routines can
4
+ # be used in untrusted code that uses the Safesock security policy.
5
+ # These procedures use a callback interface to avoid using vwait, which
6
+ # is not defined in the safe base.
7
+ #
8
+ # See the file "license.terms" for information on usage and redistribution of
9
+ # this file, and for a DISCLAIMER OF ALL WARRANTIES.
10
+
11
+ package require Tcl 8.6-
12
+ # Keep this in sync with pkgIndex.tcl and with the install directories in
13
+ # Makefiles
14
+ package provide http 2.9.5
15
+
16
+ namespace eval http {
17
+ # Allow resourcing to not clobber existing data
18
+
19
+ variable http
20
+ if {![info exists http]} {
21
+ array set http {
22
+ -accept */*
23
+ -pipeline 1
24
+ -postfresh 0
25
+ -proxyhost {}
26
+ -proxyport {}
27
+ -proxyfilter http::ProxyRequired
28
+ -repost 0
29
+ -urlencoding utf-8
30
+ -zip 1
31
+ }
32
+ # We need a useragent string of this style or various servers will
33
+ # refuse to send us compressed content even when we ask for it. This
34
+ # follows the de-facto layout of user-agent strings in current browsers.
35
+ # Safe interpreters do not have ::tcl_platform(os) or
36
+ # ::tcl_platform(osVersion).
37
+ if {[interp issafe]} {
38
+ set http(-useragent) "Mozilla/5.0\
39
+ (Windows; U;\
40
+ Windows NT 10.0)\
41
+ http/[package provide http] Tcl/[package provide Tcl]"
42
+ } else {
43
+ set http(-useragent) "Mozilla/5.0\
44
+ ([string totitle $::tcl_platform(platform)]; U;\
45
+ $::tcl_platform(os) $::tcl_platform(osVersion))\
46
+ http/[package provide http] Tcl/[package provide Tcl]"
47
+ }
48
+ }
49
+
50
+ proc init {} {
51
+ # Set up the map for quoting chars. RFC3986 Section 2.3 say percent
52
+ # encode all except: "... percent-encoded octets in the ranges of
53
+ # ALPHA (%41-%5A and %61-%7A), DIGIT (%30-%39), hyphen (%2D), period
54
+ # (%2E), underscore (%5F), or tilde (%7E) should not be created by URI
55
+ # producers ..."
56
+ for {set i 0} {$i <= 256} {incr i} {
57
+ set c [format %c $i]
58
+ if {![string match {[-._~a-zA-Z0-9]} $c]} {
59
+ set map($c) %[format %.2X $i]
60
+ }
61
+ }
62
+ # These are handled specially
63
+ set map(\n) %0D%0A
64
+ variable formMap [array get map]
65
+
66
+ # Create a map for HTTP/1.1 open sockets
67
+ variable socketMapping
68
+ variable socketRdState
69
+ variable socketWrState
70
+ variable socketRdQueue
71
+ variable socketWrQueue
72
+ variable socketClosing
73
+ variable socketPlayCmd
74
+ if {[info exists socketMapping]} {
75
+ # Close open sockets on re-init. Do not permit retries.
76
+ foreach {url sock} [array get socketMapping] {
77
+ unset -nocomplain socketClosing($url)
78
+ unset -nocomplain socketPlayCmd($url)
79
+ CloseSocket $sock
80
+ }
81
+ }
82
+
83
+ # CloseSocket should have unset the socket* arrays, one element at
84
+ # a time. Now unset anything that was overlooked.
85
+ # Traces on "unset socketRdState(*)" will call CancelReadPipeline and
86
+ # cancel any queued responses.
87
+ # Traces on "unset socketWrState(*)" will call CancelWritePipeline and
88
+ # cancel any queued requests.
89
+ array unset socketMapping
90
+ array unset socketRdState
91
+ array unset socketWrState
92
+ array unset socketRdQueue
93
+ array unset socketWrQueue
94
+ array unset socketClosing
95
+ array unset socketPlayCmd
96
+ array set socketMapping {}
97
+ array set socketRdState {}
98
+ array set socketWrState {}
99
+ array set socketRdQueue {}
100
+ array set socketWrQueue {}
101
+ array set socketClosing {}
102
+ array set socketPlayCmd {}
103
+ }
104
+ init
105
+
106
+ variable urlTypes
107
+ if {![info exists urlTypes]} {
108
+ set urlTypes(http) [list 80 ::socket]
109
+ }
110
+
111
+ variable encodings [string tolower [encoding names]]
112
+ # This can be changed, but iso8859-1 is the RFC standard.
113
+ variable defaultCharset
114
+ if {![info exists defaultCharset]} {
115
+ set defaultCharset "iso8859-1"
116
+ }
117
+
118
+ # Force RFC 3986 strictness in geturl url verification?
119
+ variable strict
120
+ if {![info exists strict]} {
121
+ set strict 1
122
+ }
123
+
124
+ # Let user control default keepalive for compatibility
125
+ variable defaultKeepalive
126
+ if {![info exists defaultKeepalive]} {
127
+ set defaultKeepalive 0
128
+ }
129
+
130
+ namespace export geturl config reset wait formatQuery quoteString
131
+ namespace export register unregister registerError
132
+ # - Useful, but not exported: data, size, status, code, cleanup, error,
133
+ # meta, ncode, mapReply, init. Comments suggest that "init" can be used
134
+ # for re-initialisation, although the command is undocumented.
135
+ # - Not exported, probably should be upper-case initial letter as part
136
+ # of the internals: getTextLine, make-transformation-chunked.
137
+ }
138
+
139
+ # http::Log --
140
+ #
141
+ # Debugging output -- define this to observe HTTP/1.1 socket usage.
142
+ # Should echo any args received.
143
+ #
144
+ # Arguments:
145
+ # msg Message to output
146
+ #
147
+ if {[info command http::Log] eq {}} {proc http::Log {args} {}}
148
+
149
+ # http::register --
150
+ #
151
+ # See documentation for details.
152
+ #
153
+ # Arguments:
154
+ # proto URL protocol prefix, e.g. https
155
+ # port Default port for protocol
156
+ # command Command to use to create socket
157
+ # Results:
158
+ # list of port and command that was registered.
159
+
160
+ proc http::register {proto port command} {
161
+ variable urlTypes
162
+ set urlTypes([string tolower $proto]) [list $port $command]
163
+ }
164
+
165
+ # http::unregister --
166
+ #
167
+ # Unregisters URL protocol handler
168
+ #
169
+ # Arguments:
170
+ # proto URL protocol prefix, e.g. https
171
+ # Results:
172
+ # list of port and command that was unregistered.
173
+
174
+ proc http::unregister {proto} {
175
+ variable urlTypes
176
+ set lower [string tolower $proto]
177
+ if {![info exists urlTypes($lower)]} {
178
+ return -code error "unsupported url type \"$proto\""
179
+ }
180
+ set old $urlTypes($lower)
181
+ unset urlTypes($lower)
182
+ return $old
183
+ }
184
+
185
+ # http::config --
186
+ #
187
+ # See documentation for details.
188
+ #
189
+ # Arguments:
190
+ # args Options parsed by the procedure.
191
+ # Results:
192
+ # TODO
193
+
194
+ proc http::config {args} {
195
+ variable http
196
+ set options [lsort [array names http -*]]
197
+ set usage [join $options ", "]
198
+ if {[llength $args] == 0} {
199
+ set result {}
200
+ foreach name $options {
201
+ lappend result $name $http($name)
202
+ }
203
+ return $result
204
+ }
205
+ set options [string map {- ""} $options]
206
+ set pat ^-(?:[join $options |])$
207
+ if {[llength $args] == 1} {
208
+ set flag [lindex $args 0]
209
+ if {![regexp -- $pat $flag]} {
210
+ return -code error "Unknown option $flag, must be: $usage"
211
+ }
212
+ return $http($flag)
213
+ } else {
214
+ foreach {flag value} $args {
215
+ if {![regexp -- $pat $flag]} {
216
+ return -code error "Unknown option $flag, must be: $usage"
217
+ }
218
+ set http($flag) $value
219
+ }
220
+ }
221
+ }
222
+
223
+ # http::Finish --
224
+ #
225
+ # Clean up the socket and eval close time callbacks
226
+ #
227
+ # Arguments:
228
+ # token Connection token.
229
+ # errormsg (optional) If set, forces status to error.
230
+ # skipCB (optional) If set, don't call the -command callback. This
231
+ # is useful when geturl wants to throw an exception instead
232
+ # of calling the callback. That way, the same error isn't
233
+ # reported to two places.
234
+ #
235
+ # Side Effects:
236
+ # May close the socket.
237
+
238
+ proc http::Finish {token {errormsg ""} {skipCB 0}} {
239
+ variable socketMapping
240
+ variable socketRdState
241
+ variable socketWrState
242
+ variable socketRdQueue
243
+ variable socketWrQueue
244
+ variable socketClosing
245
+ variable socketPlayCmd
246
+
247
+ variable $token
248
+ upvar 0 $token state
249
+ global errorInfo errorCode
250
+ set closeQueue 0
251
+ if {$errormsg ne ""} {
252
+ set state(error) [list $errormsg $errorInfo $errorCode]
253
+ set state(status) "error"
254
+ }
255
+ if {[info commands ${token}EventCoroutine] ne {}} {
256
+ rename ${token}EventCoroutine {}
257
+ }
258
+ if { ($state(status) eq "timeout")
259
+ || ($state(status) eq "error")
260
+ || ($state(status) eq "eof")
261
+ || ([info exists state(-keepalive)] && !$state(-keepalive))
262
+ || ([info exists state(connection)] && ($state(connection) eq "close"))
263
+ } {
264
+ set closeQueue 1
265
+ set connId $state(socketinfo)
266
+ set sock $state(sock)
267
+ CloseSocket $state(sock) $token
268
+ } elseif {
269
+ ([info exists state(-keepalive)] && $state(-keepalive))
270
+ && ([info exists state(connection)] && ($state(connection) ne "close"))
271
+ } {
272
+ KeepSocket $token
273
+ }
274
+ if {[info exists state(after)]} {
275
+ after cancel $state(after)
276
+ unset state(after)
277
+ }
278
+ if {[info exists state(-command)] && (!$skipCB)
279
+ && (![info exists state(done-command-cb)])} {
280
+ set state(done-command-cb) yes
281
+ if {[catch {eval $state(-command) {$token}} err] && $errormsg eq ""} {
282
+ set state(error) [list $err $errorInfo $errorCode]
283
+ set state(status) error
284
+ }
285
+ }
286
+
287
+ if { $closeQueue
288
+ && [info exists socketMapping($connId)]
289
+ && ($socketMapping($connId) eq $sock)
290
+ } {
291
+ http::CloseQueuedQueries $connId $token
292
+ }
293
+ }
294
+
295
+ # http::KeepSocket -
296
+ #
297
+ # Keep a socket in the persistent sockets table and connect it to its next
298
+ # queued task if possible. Otherwise leave it idle and ready for its next
299
+ # use.
300
+ #
301
+ # If $socketClosing(*), then ($state(connection) eq "close") and therefore
302
+ # this command will not be called by Finish.
303
+ #
304
+ # Arguments:
305
+ # token Connection token.
306
+
307
+ proc http::KeepSocket {token} {
308
+ variable http
309
+ variable socketMapping
310
+ variable socketRdState
311
+ variable socketWrState
312
+ variable socketRdQueue
313
+ variable socketWrQueue
314
+ variable socketClosing
315
+ variable socketPlayCmd
316
+
317
+ variable $token
318
+ upvar 0 $token state
319
+ set tk [namespace tail $token]
320
+
321
+ # Keep this socket open for another request ("Keep-Alive").
322
+ # React if the server half-closes the socket.
323
+ # Discussion is in http::geturl.
324
+ catch {fileevent $state(sock) readable [list http::CheckEof $state(sock)]}
325
+
326
+ # The line below should not be changed in production code.
327
+ # It is edited by the test suite.
328
+ set TEST_EOF 0
329
+ if {$TEST_EOF} {
330
+ # ONLY for testing reaction to server eof.
331
+ # No server timeouts will be caught.
332
+ catch {fileevent $state(sock) readable {}}
333
+ }
334
+
335
+ if { [info exists state(socketinfo)]
336
+ && [info exists socketMapping($state(socketinfo))]
337
+ } {
338
+ set connId $state(socketinfo)
339
+ # The value "Rready" is set only here.
340
+ set socketRdState($connId) Rready
341
+
342
+ if { $state(-pipeline)
343
+ && [info exists socketRdQueue($connId)]
344
+ && [llength $socketRdQueue($connId)]
345
+ } {
346
+ # The usual case for pipelined responses - if another response is
347
+ # queued, arrange to read it.
348
+ set token3 [lindex $socketRdQueue($connId) 0]
349
+ set socketRdQueue($connId) [lrange $socketRdQueue($connId) 1 end]
350
+ variable $token3
351
+ upvar 0 $token3 state3
352
+ set tk2 [namespace tail $token3]
353
+
354
+ #Log pipelined, GRANT read access to $token3 in KeepSocket
355
+ set socketRdState($connId) $token3
356
+ ReceiveResponse $token3
357
+
358
+ # Other pipelined cases.
359
+ # - The test above ensures that, for the pipelined cases in the two
360
+ # tests below, the read queue is empty.
361
+ # - In those two tests, check whether the next write will be
362
+ # nonpipeline.
363
+ } elseif {
364
+ $state(-pipeline)
365
+ && [info exists socketWrState($connId)]
366
+ && ($socketWrState($connId) eq "peNding")
367
+
368
+ && [info exists socketWrQueue($connId)]
369
+ && [llength $socketWrQueue($connId)]
370
+ && (![set token3 [lindex $socketWrQueue($connId) 0]
371
+ set ${token3}(-pipeline)
372
+ ]
373
+ )
374
+ } {
375
+ # This case:
376
+ # - Now it the time to run the "pending" request.
377
+ # - The next token in the write queue is nonpipeline, and
378
+ # socketWrState has been marked "pending" (in
379
+ # http::NextPipelinedWrite or http::geturl) so a new pipelined
380
+ # request cannot jump the queue.
381
+ #
382
+ # Tests:
383
+ # - In this case the read queue (tested above) is empty and this
384
+ # "pending" write token is in front of the rest of the write
385
+ # queue.
386
+ # - The write state is not Wready and therefore appears to be busy,
387
+ # but because it is "pending" we know that it is reserved for the
388
+ # first item in the write queue, a non-pipelined request that is
389
+ # waiting for the read queue to empty. That has now happened: so
390
+ # give that request read and write access.
391
+ variable $token3
392
+ set conn [set ${token3}(tmpConnArgs)]
393
+ #Log nonpipeline, GRANT r/w access to $token3 in KeepSocket
394
+ set socketRdState($connId) $token3
395
+ set socketWrState($connId) $token3
396
+ set socketWrQueue($connId) [lrange $socketWrQueue($connId) 1 end]
397
+ # Connect does its own fconfigure.
398
+ fileevent $state(sock) writable [list http::Connect $token3 {*}$conn]
399
+ #Log ---- $state(sock) << conn to $token3 for HTTP request (c)
400
+
401
+ } elseif {
402
+ $state(-pipeline)
403
+ && [info exists socketWrState($connId)]
404
+ && ($socketWrState($connId) eq "peNding")
405
+
406
+ } {
407
+ # Should not come here. The second block in the previous "elseif"
408
+ # test should be tautologous (but was needed in an earlier
409
+ # implementation) and will be removed after testing.
410
+ # If we get here, the value "pending" was assigned in error.
411
+ # This error would block the queue for ever.
412
+ Log ^X$tk <<<<< Error in queueing of requests >>>>> - token $token
413
+
414
+ } elseif {
415
+ $state(-pipeline)
416
+ && [info exists socketWrState($connId)]
417
+ && ($socketWrState($connId) eq "Wready")
418
+
419
+ && [info exists socketWrQueue($connId)]
420
+ && [llength $socketWrQueue($connId)]
421
+ && (![set token3 [lindex $socketWrQueue($connId) 0]
422
+ set ${token3}(-pipeline)
423
+ ]
424
+ )
425
+ } {
426
+ # This case:
427
+ # - The next token in the write queue is nonpipeline, and
428
+ # socketWrState is Wready. Get the next event from socketWrQueue.
429
+ # Tests:
430
+ # - In this case the read state (tested above) is Rready and the
431
+ # write state (tested here) is Wready - there is no "pending"
432
+ # request.
433
+ # Code:
434
+ # - The code is the same as the code below for the nonpipelined
435
+ # case with a queued request.
436
+ variable $token3
437
+ set conn [set ${token3}(tmpConnArgs)]
438
+ #Log nonpipeline, GRANT r/w access to $token3 in KeepSocket
439
+ set socketRdState($connId) $token3
440
+ set socketWrState($connId) $token3
441
+ set socketWrQueue($connId) [lrange $socketWrQueue($connId) 1 end]
442
+ # Connect does its own fconfigure.
443
+ fileevent $state(sock) writable [list http::Connect $token3 {*}$conn]
444
+ #Log ---- $state(sock) << conn to $token3 for HTTP request (c)
445
+
446
+ } elseif {
447
+ (!$state(-pipeline))
448
+ && [info exists socketWrQueue($connId)]
449
+ && [llength $socketWrQueue($connId)]
450
+ && ($state(connection) ne "close")
451
+ } {
452
+ # If not pipelined, (socketRdState eq Rready) tells us that we are
453
+ # ready for the next write - there is no need to check
454
+ # socketWrState. Write the next request, if one is waiting.
455
+ # If the next request is pipelined, it receives premature read
456
+ # access to the socket. This is not a problem.
457
+ set token3 [lindex $socketWrQueue($connId) 0]
458
+ variable $token3
459
+ set conn [set ${token3}(tmpConnArgs)]
460
+ #Log nonpipeline, GRANT r/w access to $token3 in KeepSocket
461
+ set socketRdState($connId) $token3
462
+ set socketWrState($connId) $token3
463
+ set socketWrQueue($connId) [lrange $socketWrQueue($connId) 1 end]
464
+ # Connect does its own fconfigure.
465
+ fileevent $state(sock) writable [list http::Connect $token3 {*}$conn]
466
+ #Log ---- $state(sock) << conn to $token3 for HTTP request (d)
467
+
468
+ } elseif {(!$state(-pipeline))} {
469
+ set socketWrState($connId) Wready
470
+ # Rready and Wready and idle: nothing to do.
471
+ }
472
+
473
+ } else {
474
+ CloseSocket $state(sock) $token
475
+ # There is no socketMapping($state(socketinfo)), so it does not matter
476
+ # that CloseQueuedQueries is not called.
477
+ }
478
+ }
479
+
480
+ # http::CheckEof -
481
+ #
482
+ # Read from a socket and close it if eof.
483
+ # The command is bound to "fileevent readable" on an idle socket, and
484
+ # "eof" is the only event that should trigger the binding, occurring when
485
+ # the server times out and half-closes the socket.
486
+ #
487
+ # A read is necessary so that [eof] gives a meaningful result.
488
+ # Any bytes sent are junk (or a bug).
489
+
490
+ proc http::CheckEof {sock} {
491
+ set junk [read $sock]
492
+ set n [string length $junk]
493
+ if {$n} {
494
+ Log "WARNING: $n bytes received but no HTTP request sent"
495
+ }
496
+
497
+ if {[catch {eof $sock} res] || $res} {
498
+ # The server has half-closed the socket.
499
+ # If a new write has started, its transaction will fail and
500
+ # will then be error-handled.
501
+ CloseSocket $sock
502
+ }
503
+ }
504
+
505
+ # http::CloseSocket -
506
+ #
507
+ # Close a socket and remove it from the persistent sockets table. If
508
+ # possible an http token is included here but when we are called from a
509
+ # fileevent on remote closure we need to find the correct entry - hence
510
+ # the "else" block of the first "if" command.
511
+
512
+ proc http::CloseSocket {s {token {}}} {
513
+ variable socketMapping
514
+ variable socketRdState
515
+ variable socketWrState
516
+ variable socketRdQueue
517
+ variable socketWrQueue
518
+ variable socketClosing
519
+ variable socketPlayCmd
520
+
521
+ set tk [namespace tail $token]
522
+
523
+ catch {fileevent $s readable {}}
524
+ set connId {}
525
+ if {$token ne ""} {
526
+ variable $token
527
+ upvar 0 $token state
528
+ if {[info exists state(socketinfo)]} {
529
+ set connId $state(socketinfo)
530
+ }
531
+ } else {
532
+ set map [array get socketMapping]
533
+ set ndx [lsearch -exact $map $s]
534
+ if {$ndx >= 0} {
535
+ incr ndx -1
536
+ set connId [lindex $map $ndx]
537
+ }
538
+ }
539
+ if { ($connId ne {})
540
+ && [info exists socketMapping($connId)]
541
+ && ($socketMapping($connId) eq $s)
542
+ } {
543
+ Log "Closing connection $connId (sock $socketMapping($connId))"
544
+ if {[catch {close $socketMapping($connId)} err]} {
545
+ Log "Error closing connection: $err"
546
+ }
547
+ if {$token eq {}} {
548
+ # Cases with a non-empty token are handled by Finish, so the tokens
549
+ # are finished in connection order.
550
+ http::CloseQueuedQueries $connId
551
+ }
552
+ } else {
553
+ Log "Closing socket $s (no connection info)"
554
+ if {[catch {close $s} err]} {
555
+ Log "Error closing socket: $err"
556
+ }
557
+ }
558
+ }
559
+
560
+ # http::CloseQueuedQueries
561
+ #
562
+ # connId - identifier "domain:port" for the connection
563
+ # token - (optional) used only for logging
564
+ #
565
+ # Called from http::CloseSocket and http::Finish, after a connection is closed,
566
+ # to clear the read and write queues if this has not already been done.
567
+
568
+ proc http::CloseQueuedQueries {connId {token {}}} {
569
+ variable socketMapping
570
+ variable socketRdState
571
+ variable socketWrState
572
+ variable socketRdQueue
573
+ variable socketWrQueue
574
+ variable socketClosing
575
+ variable socketPlayCmd
576
+
577
+ if {![info exists socketMapping($connId)]} {
578
+ # Command has already been called.
579
+ # Don't come here again - especially recursively.
580
+ return
581
+ }
582
+
583
+ # Used only for logging.
584
+ if {$token eq {}} {
585
+ set tk {}
586
+ } else {
587
+ set tk [namespace tail $token]
588
+ }
589
+
590
+ if { [info exists socketPlayCmd($connId)]
591
+ && ($socketPlayCmd($connId) ne {ReplayIfClose Wready {} {}})
592
+ } {
593
+ # Before unsetting, there is some unfinished business.
594
+ # - If the server sent "Connection: close", we have stored the command
595
+ # for retrying any queued requests in socketPlayCmd, so copy that
596
+ # value for execution below. socketClosing(*) was also set.
597
+ # - Also clear the queues to prevent calls to Finish that would set the
598
+ # state for the requests that will be retried to "finished with error
599
+ # status".
600
+ set unfinished $socketPlayCmd($connId)
601
+ set socketRdQueue($connId) {}
602
+ set socketWrQueue($connId) {}
603
+ } else {
604
+ set unfinished {}
605
+ }
606
+
607
+ Unset $connId
608
+
609
+ if {$unfinished ne {}} {
610
+ Log ^R$tk Any unfinished transactions (excluding $token) failed \
611
+ - token $token
612
+ {*}$unfinished
613
+ }
614
+ }
615
+
616
+ # http::Unset
617
+ #
618
+ # The trace on "unset socketRdState(*)" will call CancelReadPipeline
619
+ # and cancel any queued responses.
620
+ # The trace on "unset socketWrState(*)" will call CancelWritePipeline
621
+ # and cancel any queued requests.
622
+
623
+ proc http::Unset {connId} {
624
+ variable socketMapping
625
+ variable socketRdState
626
+ variable socketWrState
627
+ variable socketRdQueue
628
+ variable socketWrQueue
629
+ variable socketClosing
630
+ variable socketPlayCmd
631
+
632
+ unset socketMapping($connId)
633
+ unset socketRdState($connId)
634
+ unset socketWrState($connId)
635
+ unset -nocomplain socketRdQueue($connId)
636
+ unset -nocomplain socketWrQueue($connId)
637
+ unset -nocomplain socketClosing($connId)
638
+ unset -nocomplain socketPlayCmd($connId)
639
+ }
640
+
641
+ # http::reset --
642
+ #
643
+ # See documentation for details.
644
+ #
645
+ # Arguments:
646
+ # token Connection token.
647
+ # why Status info.
648
+ #
649
+ # Side Effects:
650
+ # See Finish
651
+
652
+ proc http::reset {token {why reset}} {
653
+ variable $token
654
+ upvar 0 $token state
655
+ set state(status) $why
656
+ catch {fileevent $state(sock) readable {}}
657
+ catch {fileevent $state(sock) writable {}}
658
+ Finish $token
659
+ if {[info exists state(error)]} {
660
+ set errorlist $state(error)
661
+ unset state
662
+ eval ::error $errorlist
663
+ }
664
+ }
665
+
666
+ # http::geturl --
667
+ #
668
+ # Establishes a connection to a remote url via http.
669
+ #
670
+ # Arguments:
671
+ # url The http URL to goget.
672
+ # args Option value pairs. Valid options include:
673
+ # -blocksize, -validate, -headers, -timeout
674
+ # Results:
675
+ # Returns a token for this connection. This token is the name of an
676
+ # array that the caller should unset to garbage collect the state.
677
+
678
+ proc http::geturl {url args} {
679
+ variable http
680
+ variable urlTypes
681
+ variable defaultCharset
682
+ variable defaultKeepalive
683
+ variable strict
684
+
685
+ # Initialize the state variable, an array. We'll return the name of this
686
+ # array as the token for the transaction.
687
+
688
+ if {![info exists http(uid)]} {
689
+ set http(uid) 0
690
+ }
691
+ set token [namespace current]::[incr http(uid)]
692
+ ##Log Starting http::geturl - token $token
693
+ variable $token
694
+ upvar 0 $token state
695
+ set tk [namespace tail $token]
696
+ reset $token
697
+ Log ^A$tk URL $url - token $token
698
+
699
+ # Process command options.
700
+
701
+ array set state {
702
+ -binary false
703
+ -blocksize 8192
704
+ -queryblocksize 8192
705
+ -validate 0
706
+ -headers {}
707
+ -timeout 0
708
+ -type application/x-www-form-urlencoded
709
+ -queryprogress {}
710
+ -protocol 1.1
711
+ binary 0
712
+ state created
713
+ meta {}
714
+ method {}
715
+ coding {}
716
+ currentsize 0
717
+ totalsize 0
718
+ querylength 0
719
+ queryoffset 0
720
+ type text/html
721
+ body {}
722
+ status ""
723
+ http ""
724
+ connection keep-alive
725
+ }
726
+ set state(-keepalive) $defaultKeepalive
727
+ set state(-strict) $strict
728
+ # These flags have their types verified [Bug 811170]
729
+ array set type {
730
+ -binary boolean
731
+ -blocksize integer
732
+ -queryblocksize integer
733
+ -strict boolean
734
+ -timeout integer
735
+ -validate boolean
736
+ -headers dict
737
+ }
738
+ set state(charset) $defaultCharset
739
+ set options {
740
+ -binary -blocksize -channel -command -handler -headers -keepalive
741
+ -method -myaddr -progress -protocol -query -queryblocksize
742
+ -querychannel -queryprogress -strict -timeout -type -validate
743
+ }
744
+ set usage [join [lsort $options] ", "]
745
+ set options [string map {- ""} $options]
746
+ set pat ^-(?:[join $options |])$
747
+ foreach {flag value} $args {
748
+ if {[regexp -- $pat $flag]} {
749
+ # Validate numbers
750
+ if {($flag eq "-headers") ? [catch {dict size $value}] :
751
+ ([info exists type($flag)] && ![string is $type($flag) -strict $value])
752
+ } {
753
+ unset $token
754
+ return -code error \
755
+ "Bad value for $flag ($value), must be $type($flag)"
756
+ }
757
+ set state($flag) $value
758
+ } else {
759
+ unset $token
760
+ return -code error "Unknown option $flag, can be: $usage"
761
+ }
762
+ }
763
+
764
+ # Make sure -query and -querychannel aren't both specified
765
+
766
+ set isQueryChannel [info exists state(-querychannel)]
767
+ set isQuery [info exists state(-query)]
768
+ if {$isQuery && $isQueryChannel} {
769
+ unset $token
770
+ return -code error "Can't combine -query and -querychannel options!"
771
+ }
772
+
773
+ # Validate URL, determine the server host and port, and check proxy case
774
+ # Recognize user:pass@host URLs also, although we do not do anything with
775
+ # that info yet.
776
+
777
+ # URLs have basically four parts.
778
+ # First, before the colon, is the protocol scheme (e.g. http)
779
+ # Second, for HTTP-like protocols, is the authority
780
+ # The authority is preceded by // and lasts up to (but not including)
781
+ # the following / or ? and it identifies up to four parts, of which
782
+ # only one, the host, is required (if an authority is present at all).
783
+ # All other parts of the authority (user name, password, port number)
784
+ # are optional.
785
+ # Third is the resource name, which is split into two parts at a ?
786
+ # The first part (from the single "/" up to "?") is the path, and the
787
+ # second part (from that "?" up to "#") is the query. *HOWEVER*, we do
788
+ # not need to separate them; we send the whole lot to the server.
789
+ # Both, path and query are allowed to be missing, including their
790
+ # delimiting character.
791
+ # Fourth is the fragment identifier, which is everything after the first
792
+ # "#" in the URL. The fragment identifier MUST NOT be sent to the server
793
+ # and indeed, we don't bother to validate it (it could be an error to
794
+ # pass it in here, but it's cheap to strip).
795
+ #
796
+ # An example of a URL that has all the parts:
797
+ #
798
+ # http://jschmoe:xyzzy@www.bogus.net:8000/foo/bar.tml?q=foo#changes
799
+ #
800
+ # The "http" is the protocol, the user is "jschmoe", the password is
801
+ # "xyzzy", the host is "www.bogus.net", the port is "8000", the path is
802
+ # "/foo/bar.tml", the query is "q=foo", and the fragment is "changes".
803
+ #
804
+ # Note that the RE actually combines the user and password parts, as
805
+ # recommended in RFC 3986. Indeed, that RFC states that putting passwords
806
+ # in URLs is a Really Bad Idea, something with which I would agree utterly.
807
+ #
808
+ # From a validation perspective, we need to ensure that the parts of the
809
+ # URL that are going to the server are correctly encoded. This is only
810
+ # done if $state(-strict) is true (inherited from $::http::strict).
811
+
812
+ set URLmatcher {(?x) # this is _expanded_ syntax
813
+ ^
814
+ (?: (\w+) : ) ? # <protocol scheme>
815
+ (?: //
816
+ (?:
817
+ (
818
+ [^@/\#?]+ # <userinfo part of authority>
819
+ ) @
820
+ )?
821
+ ( # <host part of authority>
822
+ [^/:\#?]+ | # host name or IPv4 address
823
+ \[ [^/\#?]+ \] # IPv6 address in square brackets
824
+ )
825
+ (?: : (\d+) )? # <port part of authority>
826
+ )?
827
+ ( [/\?] [^\#]*)? # <path> (including query)
828
+ (?: \# (.*) )? # <fragment>
829
+ $
830
+ }
831
+
832
+ # Phase one: parse
833
+ if {![regexp -- $URLmatcher $url -> proto user host port srvurl]} {
834
+ unset $token
835
+ return -code error "Unsupported URL: $url"
836
+ }
837
+ # Phase two: validate
838
+ set host [string trim $host {[]}]; # strip square brackets from IPv6 address
839
+ if {$host eq ""} {
840
+ # Caller has to provide a host name; we do not have a "default host"
841
+ # that would enable us to handle relative URLs.
842
+ unset $token
843
+ return -code error "Missing host part: $url"
844
+ # Note that we don't check the hostname for validity here; if it's
845
+ # invalid, we'll simply fail to resolve it later on.
846
+ }
847
+ if {$port ne "" && $port > 65535} {
848
+ unset $token
849
+ return -code error "Invalid port number: $port"
850
+ }
851
+ # The user identification and resource identification parts of the URL can
852
+ # have encoded characters in them; take care!
853
+ if {$user ne ""} {
854
+ # Check for validity according to RFC 3986, Appendix A
855
+ set validityRE {(?xi)
856
+ ^
857
+ (?: [-\w.~!$&'()*+,;=:] | %[0-9a-f][0-9a-f] )+
858
+ $
859
+ }
860
+ if {$state(-strict) && ![regexp -- $validityRE $user]} {
861
+ unset $token
862
+ # Provide a better error message in this error case
863
+ if {[regexp {(?i)%(?![0-9a-f][0-9a-f]).?.?} $user bad]} {
864
+ return -code error \
865
+ "Illegal encoding character usage \"$bad\" in URL user"
866
+ }
867
+ return -code error "Illegal characters in URL user"
868
+ }
869
+ }
870
+ if {$srvurl ne ""} {
871
+ # RFC 3986 allows empty paths (not even a /), but servers
872
+ # return 400 if the path in the HTTP request doesn't start
873
+ # with / , so add it here if needed.
874
+ if {[string index $srvurl 0] ne "/"} {
875
+ set srvurl /$srvurl
876
+ }
877
+ # Check for validity according to RFC 3986, Appendix A
878
+ set validityRE {(?xi)
879
+ ^
880
+ # Path part (already must start with / character)
881
+ (?: [-\w.~!$&'()*+,;=:@/] | %[0-9a-f][0-9a-f] )*
882
+ # Query part (optional, permits ? characters)
883
+ (?: \? (?: [-\w.~!$&'()*+,;=:@/?] | %[0-9a-f][0-9a-f] )* )?
884
+ $
885
+ }
886
+ if {$state(-strict) && ![regexp -- $validityRE $srvurl]} {
887
+ unset $token
888
+ # Provide a better error message in this error case
889
+ if {[regexp {(?i)%(?![0-9a-f][0-9a-f])..} $srvurl bad]} {
890
+ return -code error \
891
+ "Illegal encoding character usage \"$bad\" in URL path"
892
+ }
893
+ return -code error "Illegal characters in URL path"
894
+ }
895
+ } else {
896
+ set srvurl /
897
+ }
898
+ if {$proto eq ""} {
899
+ set proto http
900
+ }
901
+ set lower [string tolower $proto]
902
+ if {![info exists urlTypes($lower)]} {
903
+ unset $token
904
+ return -code error "Unsupported URL type \"$proto\""
905
+ }
906
+ set defport [lindex $urlTypes($lower) 0]
907
+ set defcmd [lindex $urlTypes($lower) 1]
908
+
909
+ if {$port eq ""} {
910
+ set port $defport
911
+ }
912
+ if {![catch {$http(-proxyfilter) $host} proxy]} {
913
+ set phost [lindex $proxy 0]
914
+ set pport [lindex $proxy 1]
915
+ }
916
+
917
+ # OK, now reassemble into a full URL
918
+ set url ${proto}://
919
+ if {$user ne ""} {
920
+ append url $user
921
+ append url @
922
+ }
923
+ append url $host
924
+ if {$port != $defport} {
925
+ append url : $port
926
+ }
927
+ append url $srvurl
928
+ # Don't append the fragment!
929
+ set state(url) $url
930
+
931
+ set sockopts [list -async]
932
+
933
+ # If we are using the proxy, we must pass in the full URL that includes
934
+ # the server name.
935
+
936
+ if {[info exists phost] && ($phost ne "")} {
937
+ set srvurl $url
938
+ set targetAddr [list $phost $pport]
939
+ } else {
940
+ set targetAddr [list $host $port]
941
+ }
942
+ # Proxy connections aren't shared among different hosts.
943
+ set state(socketinfo) $host:$port
944
+
945
+ # Save the accept types at this point to prevent a race condition. [Bug
946
+ # c11a51c482]
947
+ set state(accept-types) $http(-accept)
948
+
949
+ if {$isQuery || $isQueryChannel} {
950
+ # It's a POST.
951
+ # A client wishing to send a non-idempotent request SHOULD wait to send
952
+ # that request until it has received the response status for the
953
+ # previous request.
954
+ if {$http(-postfresh)} {
955
+ # Override -keepalive for a POST. Use a new connection, and thus
956
+ # avoid the small risk of a race against server timeout.
957
+ set state(-keepalive) 0
958
+ } else {
959
+ # Allow -keepalive but do not -pipeline - wait for the previous
960
+ # transaction to finish.
961
+ # There is a small risk of a race against server timeout.
962
+ set state(-pipeline) 0
963
+ }
964
+ } else {
965
+ # It's a GET or HEAD.
966
+ set state(-pipeline) $http(-pipeline)
967
+ }
968
+
969
+ # We cannot handle chunked encodings with -handler, so force HTTP/1.0
970
+ # until we can manage this.
971
+ if {[info exists state(-handler)]} {
972
+ set state(-protocol) 1.0
973
+ }
974
+
975
+ # RFC 7320 A.1 - HTTP/1.0 Keep-Alive is problematic. We do not support it.
976
+ if {$state(-protocol) eq "1.0"} {
977
+ set state(connection) close
978
+ set state(-keepalive) 0
979
+ }
980
+
981
+ # See if we are supposed to use a previously opened channel.
982
+ # - In principle, ANY call to http::geturl could use a previously opened
983
+ # channel if it is available - the "Connection: keep-alive" header is a
984
+ # request to leave the channel open AFTER completion of this call.
985
+ # - In fact, we try to use an existing channel only if -keepalive 1 -- this
986
+ # means that at most one channel is left open for each value of
987
+ # $state(socketinfo). This property simplifies the mapping of open
988
+ # channels.
989
+ set reusing 0
990
+ set alreadyQueued 0
991
+ if {$state(-keepalive)} {
992
+ variable socketMapping
993
+ variable socketRdState
994
+ variable socketWrState
995
+ variable socketRdQueue
996
+ variable socketWrQueue
997
+ variable socketClosing
998
+ variable socketPlayCmd
999
+
1000
+ if {[info exists socketMapping($state(socketinfo))]} {
1001
+ # - If the connection is idle, it has a "fileevent readable" binding
1002
+ # to http::CheckEof, in case the server times out and half-closes
1003
+ # the socket (http::CheckEof closes the other half).
1004
+ # - We leave this binding in place until just before the last
1005
+ # puts+flush in http::Connected (GET/HEAD) or http::Write (POST),
1006
+ # after which the HTTP response might be generated.
1007
+
1008
+ if { [info exists socketClosing($state(socketinfo))]
1009
+ && $socketClosing($state(socketinfo))
1010
+ } {
1011
+ # socketClosing(*) is set because the server has sent a
1012
+ # "Connection: close" header.
1013
+ # Do not use the persistent socket again.
1014
+ # Since we have only one persistent socket per server, and the
1015
+ # old socket is not yet dead, add the request to the write queue
1016
+ # of the dying socket, which will be replayed by ReplayIfClose.
1017
+ # Also add it to socketWrQueue(*) which is used only if an error
1018
+ # causes a call to Finish.
1019
+ set reusing 1
1020
+ set sock $socketMapping($state(socketinfo))
1021
+ Log "reusing socket $sock for $state(socketinfo) - token $token"
1022
+
1023
+ set alreadyQueued 1
1024
+ lassign $socketPlayCmd($state(socketinfo)) com0 com1 com2 com3
1025
+ lappend com3 $token
1026
+ set socketPlayCmd($state(socketinfo)) [list $com0 $com1 $com2 $com3]
1027
+ lappend socketWrQueue($state(socketinfo)) $token
1028
+ } elseif {[catch {fconfigure $socketMapping($state(socketinfo))}]} {
1029
+ # FIXME Is it still possible for this code to be executed? If
1030
+ # so, this could be another place to call TestForReplay,
1031
+ # rather than discarding the queued transactions.
1032
+ Log "WARNING: socket for $state(socketinfo) was closed\
1033
+ - token $token"
1034
+ Log "WARNING - if testing, pay special attention to this\
1035
+ case (GH) which is seldom executed - token $token"
1036
+
1037
+ # This will call CancelReadPipeline, CancelWritePipeline, and
1038
+ # cancel any queued requests, responses.
1039
+ Unset $state(socketinfo)
1040
+ } else {
1041
+ # Use the persistent socket.
1042
+ # The socket may not be ready to write: an earlier request might
1043
+ # still be still writing (in the pipelined case) or
1044
+ # writing/reading (in the nonpipeline case). This possibility
1045
+ # is handled by socketWrQueue later in this command.
1046
+ set reusing 1
1047
+ set sock $socketMapping($state(socketinfo))
1048
+ Log "reusing socket $sock for $state(socketinfo) - token $token"
1049
+
1050
+ }
1051
+ # Do not automatically close the connection socket.
1052
+ set state(connection) keep-alive
1053
+ }
1054
+ }
1055
+
1056
+ if {$reusing} {
1057
+ # Define state(tmpState) and state(tmpOpenCmd) for use
1058
+ # by http::ReplayIfDead if the persistent connection has died.
1059
+ set state(tmpState) [array get state]
1060
+
1061
+ # Pass -myaddr directly to the socket command
1062
+ if {[info exists state(-myaddr)]} {
1063
+ lappend sockopts -myaddr $state(-myaddr)
1064
+ }
1065
+
1066
+ set state(tmpOpenCmd) [list {*}$defcmd {*}$sockopts {*}$targetAddr]
1067
+ }
1068
+
1069
+ set state(reusing) $reusing
1070
+ # Excluding ReplayIfDead and the decision whether to call it, there are four
1071
+ # places outside http::geturl where state(reusing) is used:
1072
+ # - Connected - if reusing and not pipelined, start the state(-timeout)
1073
+ # timeout (when writing).
1074
+ # - DoneRequest - if reusing and pipelined, send the next pipelined write
1075
+ # - Event - if reusing and pipelined, start the state(-timeout)
1076
+ # timeout (when reading).
1077
+ # - Event - if (not reusing) and pipelined, send the next pipelined
1078
+ # write
1079
+
1080
+ # See comments above re the start of this timeout in other cases.
1081
+ if {(!$state(reusing)) && ($state(-timeout) > 0)} {
1082
+ set state(after) [after $state(-timeout) \
1083
+ [list http::reset $token timeout]]
1084
+ }
1085
+
1086
+ if {![info exists sock]} {
1087
+ # Pass -myaddr directly to the socket command
1088
+ if {[info exists state(-myaddr)]} {
1089
+ lappend sockopts -myaddr $state(-myaddr)
1090
+ }
1091
+ set pre [clock milliseconds]
1092
+ ##Log pre socket opened, - token $token
1093
+ ##Log [concat $defcmd $sockopts $targetAddr] - token $token
1094
+ if {[catch {eval $defcmd $sockopts $targetAddr} sock errdict]} {
1095
+ # Something went wrong while trying to establish the connection.
1096
+ # Clean up after events and such, but DON'T call the command
1097
+ # callback (if available) because we're going to throw an
1098
+ # exception from here instead.
1099
+
1100
+ set state(sock) NONE
1101
+ Finish $token $sock 1
1102
+ cleanup $token
1103
+ dict unset errdict -level
1104
+ return -options $errdict $sock
1105
+ } else {
1106
+ # Initialisation of a new socket.
1107
+ ##Log post socket opened, - token $token
1108
+ ##Log socket opened, now fconfigure - token $token
1109
+ set delay [expr {[clock milliseconds] - $pre}]
1110
+ if {$delay > 3000} {
1111
+ Log socket delay $delay - token $token
1112
+ }
1113
+ fconfigure $sock -translation {auto crlf} \
1114
+ -buffersize $state(-blocksize)
1115
+ ##Log socket opened, DONE fconfigure - token $token
1116
+ }
1117
+ }
1118
+ # Command [socket] is called with -async, but takes 5s to 5.1s to return,
1119
+ # with probability of order 1 in 10,000. This may be a bizarre scheduling
1120
+ # issue with my (KJN's) system (Fedora Linux).
1121
+ # This does not cause a problem (unless the request times out when this
1122
+ # command returns).
1123
+
1124
+ set state(sock) $sock
1125
+ Log "Using $sock for $state(socketinfo) - token $token" \
1126
+ [expr {$state(-keepalive)?"keepalive":""}]
1127
+
1128
+ if { $state(-keepalive)
1129
+ && (![info exists socketMapping($state(socketinfo))])
1130
+ } {
1131
+ # Freshly-opened socket that we would like to become persistent.
1132
+ set socketMapping($state(socketinfo)) $sock
1133
+
1134
+ if {![info exists socketRdState($state(socketinfo))]} {
1135
+ set socketRdState($state(socketinfo)) {}
1136
+ set varName ::http::socketRdState($state(socketinfo))
1137
+ trace add variable $varName unset ::http::CancelReadPipeline
1138
+ }
1139
+ if {![info exists socketWrState($state(socketinfo))]} {
1140
+ set socketWrState($state(socketinfo)) {}
1141
+ set varName ::http::socketWrState($state(socketinfo))
1142
+ trace add variable $varName unset ::http::CancelWritePipeline
1143
+ }
1144
+
1145
+ if {$state(-pipeline)} {
1146
+ #Log new, init for pipelined, GRANT write access to $token in geturl
1147
+ # Also grant premature read access to the socket. This is OK.
1148
+ set socketRdState($state(socketinfo)) $token
1149
+ set socketWrState($state(socketinfo)) $token
1150
+ } else {
1151
+ # socketWrState is not used by this non-pipelined transaction.
1152
+ # We cannot leave it as "Wready" because the next call to
1153
+ # http::geturl with a pipelined transaction would conclude that the
1154
+ # socket is available for writing.
1155
+ #Log new, init for nonpipeline, GRANT r/w access to $token in geturl
1156
+ set socketRdState($state(socketinfo)) $token
1157
+ set socketWrState($state(socketinfo)) $token
1158
+ }
1159
+
1160
+ set socketRdQueue($state(socketinfo)) {}
1161
+ set socketWrQueue($state(socketinfo)) {}
1162
+ set socketClosing($state(socketinfo)) 0
1163
+ set socketPlayCmd($state(socketinfo)) {ReplayIfClose Wready {} {}}
1164
+ }
1165
+
1166
+ if {![info exists phost]} {
1167
+ set phost ""
1168
+ }
1169
+ if {$reusing} {
1170
+ # For use by http::ReplayIfDead if the persistent connection has died.
1171
+ # Also used by NextPipelinedWrite.
1172
+ set state(tmpConnArgs) [list $proto $phost $srvurl]
1173
+ }
1174
+
1175
+ # The element socketWrState($connId) has a value which is either the name of
1176
+ # the token that is permitted to write to the socket, or "Wready" if no
1177
+ # token is permitted to write.
1178
+ #
1179
+ # The code that sets the value to Wready immediately calls
1180
+ # http::NextPipelinedWrite, which examines socketWrQueue($connId) and
1181
+ # processes the next request in the queue, if there is one. The value
1182
+ # Wready is not found when the interpreter is in the event loop unless the
1183
+ # socket is idle.
1184
+ #
1185
+ # The element socketRdState($connId) has a value which is either the name of
1186
+ # the token that is permitted to read from the socket, or "Rready" if no
1187
+ # token is permitted to read.
1188
+ #
1189
+ # The code that sets the value to Rready then examines
1190
+ # socketRdQueue($connId) and processes the next request in the queue, if
1191
+ # there is one. The value Rready is not found when the interpreter is in
1192
+ # the event loop unless the socket is idle.
1193
+
1194
+ if {$alreadyQueued} {
1195
+ # A write may or may not be in progress. There is no need to set
1196
+ # socketWrState to prevent another call stealing write access - all
1197
+ # subsequent calls on this socket will come here because the socket
1198
+ # will close after the current read, and its
1199
+ # socketClosing($connId) is 1.
1200
+ ##Log "HTTP request for token $token is queued"
1201
+
1202
+ } elseif { $reusing
1203
+ && $state(-pipeline)
1204
+ && ($socketWrState($state(socketinfo)) ne "Wready")
1205
+ } {
1206
+ ##Log "HTTP request for token $token is queued for pipelined use"
1207
+ lappend socketWrQueue($state(socketinfo)) $token
1208
+
1209
+ } elseif { $reusing
1210
+ && (!$state(-pipeline))
1211
+ && ($socketWrState($state(socketinfo)) ne "Wready")
1212
+ } {
1213
+ # A write is queued or in progress. Lappend to the write queue.
1214
+ ##Log "HTTP request for token $token is queued for nonpipeline use"
1215
+ lappend socketWrQueue($state(socketinfo)) $token
1216
+
1217
+ } elseif { $reusing
1218
+ && (!$state(-pipeline))
1219
+ && ($socketWrState($state(socketinfo)) eq "Wready")
1220
+ && ($socketRdState($state(socketinfo)) ne "Rready")
1221
+ } {
1222
+ # A read is queued or in progress, but not a write. Cannot start the
1223
+ # nonpipeline transaction, but must set socketWrState to prevent a
1224
+ # pipelined request jumping the queue.
1225
+ ##Log "HTTP request for token $token is queued for nonpipeline use"
1226
+ #Log re-use nonpipeline, GRANT delayed write access to $token in geturl
1227
+
1228
+ set socketWrState($state(socketinfo)) peNding
1229
+ lappend socketWrQueue($state(socketinfo)) $token
1230
+
1231
+ } else {
1232
+ if {$reusing && $state(-pipeline)} {
1233
+ #Log re-use pipelined, GRANT write access to $token in geturl
1234
+ set socketWrState($state(socketinfo)) $token
1235
+
1236
+ } elseif {$reusing} {
1237
+ # Cf tests above - both are ready.
1238
+ #Log re-use nonpipeline, GRANT r/w access to $token in geturl
1239
+ set socketRdState($state(socketinfo)) $token
1240
+ set socketWrState($state(socketinfo)) $token
1241
+ }
1242
+
1243
+ # All (!$reusing) cases come here, and also some $reusing cases if the
1244
+ # connection is ready.
1245
+ #Log ---- $state(socketinfo) << conn to $token for HTTP request (a)
1246
+ # Connect does its own fconfigure.
1247
+ fileevent $sock writable \
1248
+ [list http::Connect $token $proto $phost $srvurl]
1249
+ }
1250
+
1251
+ # Wait for the connection to complete.
1252
+ if {![info exists state(-command)]} {
1253
+ # geturl does EVERYTHING asynchronously, so if the user
1254
+ # calls it synchronously, we just do a wait here.
1255
+ http::wait $token
1256
+
1257
+ if {![info exists state]} {
1258
+ # If we timed out then Finish has been called and the users
1259
+ # command callback may have cleaned up the token. If so we end up
1260
+ # here with nothing left to do.
1261
+ return $token
1262
+ } elseif {$state(status) eq "error"} {
1263
+ # Something went wrong while trying to establish the connection.
1264
+ # Clean up after events and such, but DON'T call the command
1265
+ # callback (if available) because we're going to throw an
1266
+ # exception from here instead.
1267
+ set err [lindex $state(error) 0]
1268
+ cleanup $token
1269
+ return -code error $err
1270
+ }
1271
+ }
1272
+ ##Log Leaving http::geturl - token $token
1273
+ return $token
1274
+ }
1275
+
1276
+ # http::Connected --
1277
+ #
1278
+ # Callback used when the connection to the HTTP server is actually
1279
+ # established.
1280
+ #
1281
+ # Arguments:
1282
+ # token State token.
1283
+ # proto What protocol (http, https, etc.) was used to connect.
1284
+ # phost Are we using keep-alive? Non-empty if yes.
1285
+ # srvurl Service-local URL that we're requesting
1286
+ # Results:
1287
+ # None.
1288
+
1289
+ proc http::Connected {token proto phost srvurl} {
1290
+ variable http
1291
+ variable urlTypes
1292
+ variable socketMapping
1293
+ variable socketRdState
1294
+ variable socketWrState
1295
+ variable socketRdQueue
1296
+ variable socketWrQueue
1297
+ variable socketClosing
1298
+ variable socketPlayCmd
1299
+
1300
+ variable $token
1301
+ upvar 0 $token state
1302
+ set tk [namespace tail $token]
1303
+
1304
+ if {$state(reusing) && (!$state(-pipeline)) && ($state(-timeout) > 0)} {
1305
+ set state(after) [after $state(-timeout) \
1306
+ [list http::reset $token timeout]]
1307
+ }
1308
+
1309
+ # Set back the variables needed here.
1310
+ set sock $state(sock)
1311
+ set isQueryChannel [info exists state(-querychannel)]
1312
+ set isQuery [info exists state(-query)]
1313
+ set host [lindex [split $state(socketinfo) :] 0]
1314
+ set port [lindex [split $state(socketinfo) :] 1]
1315
+
1316
+ set lower [string tolower $proto]
1317
+ set defport [lindex $urlTypes($lower) 0]
1318
+
1319
+ # Send data in cr-lf format, but accept any line terminators.
1320
+ # Initialisation to {auto *} now done in geturl, KeepSocket and DoneRequest.
1321
+ # We are concerned here with the request (write) not the response (read).
1322
+ lassign [fconfigure $sock -translation] trRead trWrite
1323
+ fconfigure $sock -translation [list $trRead crlf] \
1324
+ -buffersize $state(-blocksize)
1325
+
1326
+ # The following is disallowed in safe interpreters, but the socket is
1327
+ # already in non-blocking mode in that case.
1328
+
1329
+ catch {fconfigure $sock -blocking off}
1330
+ set how GET
1331
+ if {$isQuery} {
1332
+ set state(querylength) [string length $state(-query)]
1333
+ if {$state(querylength) > 0} {
1334
+ set how POST
1335
+ set contDone 0
1336
+ } else {
1337
+ # There's no query data.
1338
+ unset state(-query)
1339
+ set isQuery 0
1340
+ }
1341
+ } elseif {$state(-validate)} {
1342
+ set how HEAD
1343
+ } elseif {$isQueryChannel} {
1344
+ set how POST
1345
+ # The query channel must be blocking for the async Write to
1346
+ # work properly.
1347
+ fconfigure $state(-querychannel) -blocking 1 -translation binary
1348
+ set contDone 0
1349
+ }
1350
+ if {[info exists state(-method)] && ($state(-method) ne "")} {
1351
+ set how $state(-method)
1352
+ }
1353
+ set accept_types_seen 0
1354
+
1355
+ Log ^B$tk begin sending request - token $token
1356
+
1357
+ if {[catch {
1358
+ set state(method) $how
1359
+ puts $sock "$how $srvurl HTTP/$state(-protocol)"
1360
+ if {[dict exists $state(-headers) Host]} {
1361
+ # Allow Host spoofing. [Bug 928154]
1362
+ puts $sock "Host: [dict get $state(-headers) Host]"
1363
+ } elseif {$port == $defport} {
1364
+ # Don't add port in this case, to handle broken servers. [Bug
1365
+ # #504508]
1366
+ puts $sock "Host: $host"
1367
+ } else {
1368
+ puts $sock "Host: $host:$port"
1369
+ }
1370
+ puts $sock "User-Agent: $http(-useragent)"
1371
+ if {($state(-protocol) > 1.0) && $state(-keepalive)} {
1372
+ # Send this header, because a 1.1 server is not compelled to treat
1373
+ # this as the default.
1374
+ puts $sock "Connection: keep-alive"
1375
+ }
1376
+ if {($state(-protocol) > 1.0) && !$state(-keepalive)} {
1377
+ puts $sock "Connection: close" ;# RFC2616 sec 8.1.2.1
1378
+ }
1379
+ if {($state(-protocol) < 1.1)} {
1380
+ # RFC7230 A.1
1381
+ # Some server implementations of HTTP/1.0 have a faulty
1382
+ # implementation of RFC 2068 Keep-Alive.
1383
+ # Don't leave this to chance.
1384
+ # For HTTP/1.0 we have already "set state(connection) close"
1385
+ # and "state(-keepalive) 0".
1386
+ puts $sock "Connection: close"
1387
+ }
1388
+ # RFC7230 A.1 - "clients are encouraged not to send the
1389
+ # Proxy-Connection header field in any requests"
1390
+ set accept_encoding_seen 0
1391
+ set content_type_seen 0
1392
+ dict for {key value} $state(-headers) {
1393
+ set value [string map [list \n "" \r ""] $value]
1394
+ set key [string map {" " -} [string trim $key]]
1395
+ if {[string equal -nocase $key "host"]} {
1396
+ continue
1397
+ }
1398
+ if {[string equal -nocase $key "accept-encoding"]} {
1399
+ set accept_encoding_seen 1
1400
+ }
1401
+ if {[string equal -nocase $key "accept"]} {
1402
+ set accept_types_seen 1
1403
+ }
1404
+ if {[string equal -nocase $key "content-type"]} {
1405
+ set content_type_seen 1
1406
+ }
1407
+ if {[string equal -nocase $key "content-length"]} {
1408
+ set contDone 1
1409
+ set state(querylength) $value
1410
+ }
1411
+ if {[string length $key]} {
1412
+ puts $sock "$key: $value"
1413
+ }
1414
+ }
1415
+ # Allow overriding the Accept header on a per-connection basis. Useful
1416
+ # for working with REST services. [Bug c11a51c482]
1417
+ if {!$accept_types_seen} {
1418
+ puts $sock "Accept: $state(accept-types)"
1419
+ }
1420
+ if { (!$accept_encoding_seen)
1421
+ && (![info exists state(-handler)])
1422
+ && $http(-zip)
1423
+ } {
1424
+ puts $sock "Accept-Encoding: gzip,deflate,compress"
1425
+ }
1426
+ if {$isQueryChannel && ($state(querylength) == 0)} {
1427
+ # Try to determine size of data in channel. If we cannot seek, the
1428
+ # surrounding catch will trap us
1429
+
1430
+ set start [tell $state(-querychannel)]
1431
+ seek $state(-querychannel) 0 end
1432
+ set state(querylength) \
1433
+ [expr {[tell $state(-querychannel)] - $start}]
1434
+ seek $state(-querychannel) $start
1435
+ }
1436
+
1437
+ # Flush the request header and set up the fileevent that will either
1438
+ # push the POST data or read the response.
1439
+ #
1440
+ # fileevent note:
1441
+ #
1442
+ # It is possible to have both the read and write fileevents active at
1443
+ # this point. The only scenario it seems to affect is a server that
1444
+ # closes the connection without reading the POST data. (e.g., early
1445
+ # versions TclHttpd in various error cases). Depending on the
1446
+ # platform, the client may or may not be able to get the response from
1447
+ # the server because of the error it will get trying to write the post
1448
+ # data. Having both fileevents active changes the timing and the
1449
+ # behavior, but no two platforms (among Solaris, Linux, and NT) behave
1450
+ # the same, and none behave all that well in any case. Servers should
1451
+ # always read their POST data if they expect the client to read their
1452
+ # response.
1453
+
1454
+ if {$isQuery || $isQueryChannel} {
1455
+ # POST method.
1456
+ if {!$content_type_seen} {
1457
+ puts $sock "Content-Type: $state(-type)"
1458
+ }
1459
+ if {!$contDone} {
1460
+ puts $sock "Content-Length: $state(querylength)"
1461
+ }
1462
+ puts $sock ""
1463
+ flush $sock
1464
+ # Flush flushes the error in the https case with a bad handshake:
1465
+ # else the socket never becomes writable again, and hangs until
1466
+ # timeout (if any).
1467
+
1468
+ lassign [fconfigure $sock -translation] trRead trWrite
1469
+ fconfigure $sock -translation [list $trRead binary]
1470
+ fileevent $sock writable [list http::Write $token]
1471
+ # The http::Write command decides when to make the socket readable,
1472
+ # using the same test as the GET/HEAD case below.
1473
+ } else {
1474
+ # GET or HEAD method.
1475
+ if { (![catch {fileevent $sock readable} binding])
1476
+ && ($binding eq [list http::CheckEof $sock])
1477
+ } {
1478
+ # Remove the "fileevent readable" binding of an idle persistent
1479
+ # socket to http::CheckEof. We can no longer treat bytes
1480
+ # received as junk. The server might still time out and
1481
+ # half-close the socket if it has not yet received the first
1482
+ # "puts".
1483
+ fileevent $sock readable {}
1484
+ }
1485
+ puts $sock ""
1486
+ flush $sock
1487
+ Log ^C$tk end sending request - token $token
1488
+ # End of writing (GET/HEAD methods). The request has been sent.
1489
+
1490
+ DoneRequest $token
1491
+ }
1492
+
1493
+ } err]} {
1494
+ # The socket probably was never connected, OR the connection dropped
1495
+ # later, OR https handshake error, which may be discovered as late as
1496
+ # the "flush" command above...
1497
+ Log "WARNING - if testing, pay special attention to this\
1498
+ case (GI) which is seldom executed - token $token"
1499
+ if {[info exists state(reusing)] && $state(reusing)} {
1500
+ # The socket was closed at the server end, and closed at
1501
+ # this end by http::CheckEof.
1502
+ if {[TestForReplay $token write $err a]} {
1503
+ return
1504
+ } else {
1505
+ Finish $token {failed to re-use socket}
1506
+ }
1507
+
1508
+ # else:
1509
+ # This is NOT a persistent socket that has been closed since its
1510
+ # last use.
1511
+ # If any other requests are in flight or pipelined/queued, they will
1512
+ # be discarded.
1513
+ } elseif {$state(status) eq ""} {
1514
+ # ...https handshake errors come here.
1515
+ set msg [registerError $sock]
1516
+ registerError $sock {}
1517
+ if {$msg eq {}} {
1518
+ set msg {failed to use socket}
1519
+ }
1520
+ Finish $token $msg
1521
+ } elseif {$state(status) ne "error"} {
1522
+ Finish $token $err
1523
+ }
1524
+ }
1525
+ }
1526
+
1527
+ # http::registerError
1528
+ #
1529
+ # Called (for example when processing TclTLS activity) to register
1530
+ # an error for a connection on a specific socket. This helps
1531
+ # http::Connected to deliver meaningful error messages, e.g. when a TLS
1532
+ # certificate fails verification.
1533
+ #
1534
+ # Usage: http::registerError socket ?newValue?
1535
+ #
1536
+ # "set" semantics, except that a "get" (a call without a new value) for a
1537
+ # non-existent socket returns {}, not an error.
1538
+
1539
+ proc http::registerError {sock args} {
1540
+ variable registeredErrors
1541
+
1542
+ if { ([llength $args] == 0)
1543
+ && (![info exists registeredErrors($sock)])
1544
+ } {
1545
+ return
1546
+ } elseif { ([llength $args] == 1)
1547
+ && ([lindex $args 0] eq {})
1548
+ } {
1549
+ unset -nocomplain registeredErrors($sock)
1550
+ return
1551
+ }
1552
+ set registeredErrors($sock) {*}$args
1553
+ }
1554
+
1555
+ # http::DoneRequest --
1556
+ #
1557
+ # Command called when a request has been sent. It will arrange the
1558
+ # next request and/or response as appropriate.
1559
+ #
1560
+ # If this command is called when $socketClosing(*), the request $token
1561
+ # that calls it must be pipelined and destined to fail.
1562
+
1563
+ proc http::DoneRequest {token} {
1564
+ variable http
1565
+ variable socketMapping
1566
+ variable socketRdState
1567
+ variable socketWrState
1568
+ variable socketRdQueue
1569
+ variable socketWrQueue
1570
+ variable socketClosing
1571
+ variable socketPlayCmd
1572
+
1573
+ variable $token
1574
+ upvar 0 $token state
1575
+ set tk [namespace tail $token]
1576
+ set sock $state(sock)
1577
+
1578
+ # If pipelined, connect the next HTTP request to the socket.
1579
+ if {$state(reusing) && $state(-pipeline)} {
1580
+ # Enable next token (if any) to write.
1581
+ # The value "Wready" is set only here, and
1582
+ # in http::Event after reading the response-headers of a
1583
+ # non-reusing transaction.
1584
+ # Previous value is $token. It cannot be pending.
1585
+ set socketWrState($state(socketinfo)) Wready
1586
+
1587
+ # Now ready to write the next pipelined request (if any).
1588
+ http::NextPipelinedWrite $token
1589
+ } else {
1590
+ # If pipelined, this is the first transaction on this socket. We wait
1591
+ # for the response headers to discover whether the connection is
1592
+ # persistent. (If this is not done and the connection is not
1593
+ # persistent, we SHOULD retry and then MUST NOT pipeline before knowing
1594
+ # that we have a persistent connection
1595
+ # (rfc2616 8.1.2.2)).
1596
+ }
1597
+
1598
+ # Connect to receive the response, unless the socket is pipelined
1599
+ # and another response is being sent.
1600
+ # This code block is separate from the code below because there are
1601
+ # cases where socketRdState already has the value $token.
1602
+ if { $state(-keepalive)
1603
+ && $state(-pipeline)
1604
+ && [info exists socketRdState($state(socketinfo))]
1605
+ && ($socketRdState($state(socketinfo)) eq "Rready")
1606
+ } {
1607
+ #Log pipelined, GRANT read access to $token in Connected
1608
+ set socketRdState($state(socketinfo)) $token
1609
+ }
1610
+
1611
+ if { $state(-keepalive)
1612
+ && $state(-pipeline)
1613
+ && [info exists socketRdState($state(socketinfo))]
1614
+ && ($socketRdState($state(socketinfo)) ne $token)
1615
+ } {
1616
+ # Do not read from the socket until it is ready.
1617
+ ##Log "HTTP response for token $token is queued for pipelined use"
1618
+ # If $socketClosing(*), then the caller will be a pipelined write and
1619
+ # execution will come here.
1620
+ # This token has already been recorded as "in flight" for writing.
1621
+ # When the socket is closed, the read queue will be cleared in
1622
+ # CloseQueuedQueries and so the "lappend" here has no effect.
1623
+ lappend socketRdQueue($state(socketinfo)) $token
1624
+ } else {
1625
+ # In the pipelined case, connection for reading depends on the
1626
+ # value of socketRdState.
1627
+ # In the nonpipeline case, connection for reading always occurs.
1628
+ ReceiveResponse $token
1629
+ }
1630
+ }
1631
+
1632
+ # http::ReceiveResponse
1633
+ #
1634
+ # Connects token to its socket for reading.
1635
+
1636
+ proc http::ReceiveResponse {token} {
1637
+ variable $token
1638
+ upvar 0 $token state
1639
+ set tk [namespace tail $token]
1640
+ set sock $state(sock)
1641
+
1642
+ #Log ---- $state(socketinfo) >> conn to $token for HTTP response
1643
+ lassign [fconfigure $sock -translation] trRead trWrite
1644
+ fconfigure $sock -translation [list auto $trWrite] \
1645
+ -buffersize $state(-blocksize)
1646
+ Log ^D$tk begin receiving response - token $token
1647
+
1648
+ coroutine ${token}EventCoroutine http::Event $sock $token
1649
+ if {[info exists state(-handler)] || [info exists state(-progress)]} {
1650
+ fileevent $sock readable [list http::EventGateway $sock $token]
1651
+ } else {
1652
+ fileevent $sock readable ${token}EventCoroutine
1653
+ }
1654
+ return
1655
+ }
1656
+
1657
+
1658
+ # http::EventGateway
1659
+ #
1660
+ # Bug [c2dc1da315].
1661
+ # - Recursive launch of the coroutine can occur if a -handler or -progress
1662
+ # callback is used, and the callback command enters the event loop.
1663
+ # - To prevent this, the fileevent "binding" is disabled while the
1664
+ # coroutine is in flight.
1665
+ # - If a recursive call occurs despite these precautions, it is not
1666
+ # trapped and discarded here, because it is better to report it as a
1667
+ # bug.
1668
+ # - Although this solution is believed to be sufficiently general, it is
1669
+ # used only if -handler or -progress is specified. In other cases,
1670
+ # the coroutine is called directly.
1671
+
1672
+ proc http::EventGateway {sock token} {
1673
+ variable $token
1674
+ upvar 0 $token state
1675
+ fileevent $sock readable {}
1676
+ catch {${token}EventCoroutine} res opts
1677
+ if {[info commands ${token}EventCoroutine] ne {}} {
1678
+ # The coroutine can be deleted by completion (a non-yield return), by
1679
+ # http::Finish (when there is a premature end to the transaction), by
1680
+ # http::reset or http::cleanup, or if the caller set option -channel
1681
+ # but not option -handler: in the last case reading from the socket is
1682
+ # now managed by commands ::http::Copy*, http::ReceiveChunked, and
1683
+ # http::make-transformation-chunked.
1684
+ #
1685
+ # Catch in case the coroutine has closed the socket.
1686
+ catch {fileevent $sock readable [list http::EventGateway $sock $token]}
1687
+ }
1688
+
1689
+ # If there was an error, re-throw it.
1690
+ return -options $opts $res
1691
+ }
1692
+
1693
+
1694
+ # http::NextPipelinedWrite
1695
+ #
1696
+ # - Connecting a socket to a token for writing is done by this command and by
1697
+ # command KeepSocket.
1698
+ # - If another request has a pipelined write scheduled for $token's socket,
1699
+ # and if the socket is ready to accept it, connect the write and update
1700
+ # the queue accordingly.
1701
+ # - This command is called from http::DoneRequest and http::Event,
1702
+ # IF $state(-pipeline) AND (the current transfer has reached the point at
1703
+ # which the socket is ready for the next request to be written).
1704
+ # - This command is called when a token has write access and is pipelined and
1705
+ # keep-alive, and sets socketWrState to Wready.
1706
+ # - The command need not consider the case where socketWrState is set to a token
1707
+ # that does not yet have write access. Such a token is waiting for Rready,
1708
+ # and the assignment of the connection to the token will be done elsewhere (in
1709
+ # http::KeepSocket).
1710
+ # - This command cannot be called after socketWrState has been set to a
1711
+ # "pending" token value (that is then overwritten by the caller), because that
1712
+ # value is set by this command when it is called by an earlier token when it
1713
+ # relinquishes its write access, and the pending token is always the next in
1714
+ # line to write.
1715
+
1716
+ proc http::NextPipelinedWrite {token} {
1717
+ variable http
1718
+ variable socketRdState
1719
+ variable socketWrState
1720
+ variable socketWrQueue
1721
+ variable socketClosing
1722
+ variable $token
1723
+ upvar 0 $token state
1724
+ set connId $state(socketinfo)
1725
+
1726
+ if { [info exists socketClosing($connId)]
1727
+ && $socketClosing($connId)
1728
+ } {
1729
+ # socketClosing(*) is set because the server has sent a
1730
+ # "Connection: close" header.
1731
+ # Behave as if the queues are empty - so do nothing.
1732
+ } elseif { $state(-pipeline)
1733
+ && [info exists socketWrState($connId)]
1734
+ && ($socketWrState($connId) eq "Wready")
1735
+
1736
+ && [info exists socketWrQueue($connId)]
1737
+ && [llength $socketWrQueue($connId)]
1738
+ && ([set token2 [lindex $socketWrQueue($connId) 0]
1739
+ set ${token2}(-pipeline)
1740
+ ]
1741
+ )
1742
+ } {
1743
+ # - The usual case for a pipelined connection, ready for a new request.
1744
+ #Log pipelined, GRANT write access to $token2 in NextPipelinedWrite
1745
+ set conn [set ${token2}(tmpConnArgs)]
1746
+ set socketWrState($connId) $token2
1747
+ set socketWrQueue($connId) [lrange $socketWrQueue($connId) 1 end]
1748
+ # Connect does its own fconfigure.
1749
+ fileevent $state(sock) writable [list http::Connect $token2 {*}$conn]
1750
+ #Log ---- $connId << conn to $token2 for HTTP request (b)
1751
+
1752
+ # In the tests below, the next request will be nonpipeline.
1753
+ } elseif { $state(-pipeline)
1754
+ && [info exists socketWrState($connId)]
1755
+ && ($socketWrState($connId) eq "Wready")
1756
+
1757
+ && [info exists socketWrQueue($connId)]
1758
+ && [llength $socketWrQueue($connId)]
1759
+ && (![ set token3 [lindex $socketWrQueue($connId) 0]
1760
+ set ${token3}(-pipeline)
1761
+ ]
1762
+ )
1763
+
1764
+ && [info exists socketRdState($connId)]
1765
+ && ($socketRdState($connId) eq "Rready")
1766
+ } {
1767
+ # The case in which the next request will be non-pipelined, and the read
1768
+ # and write queues is ready: which is the condition for a non-pipelined
1769
+ # write.
1770
+ variable $token3
1771
+ upvar 0 $token3 state3
1772
+ set conn [set ${token3}(tmpConnArgs)]
1773
+ #Log nonpipeline, GRANT r/w access to $token3 in NextPipelinedWrite
1774
+ set socketRdState($connId) $token3
1775
+ set socketWrState($connId) $token3
1776
+ set socketWrQueue($connId) [lrange $socketWrQueue($connId) 1 end]
1777
+ # Connect does its own fconfigure.
1778
+ fileevent $state(sock) writable [list http::Connect $token3 {*}$conn]
1779
+ #Log ---- $state(sock) << conn to $token3 for HTTP request (c)
1780
+
1781
+ } elseif { $state(-pipeline)
1782
+ && [info exists socketWrState($connId)]
1783
+ && ($socketWrState($connId) eq "Wready")
1784
+
1785
+ && [info exists socketWrQueue($connId)]
1786
+ && [llength $socketWrQueue($connId)]
1787
+ && (![set token2 [lindex $socketWrQueue($connId) 0]
1788
+ set ${token2}(-pipeline)
1789
+ ]
1790
+ )
1791
+ } {
1792
+ # - The case in which the next request will be non-pipelined, but the
1793
+ # read queue is NOT ready.
1794
+ # - A read is queued or in progress, but not a write. Cannot start the
1795
+ # nonpipeline transaction, but must set socketWrState to prevent a new
1796
+ # pipelined request (in http::geturl) jumping the queue.
1797
+ # - Because socketWrState($connId) is not set to Wready, the assignment
1798
+ # of the connection to $token2 will be done elsewhere - by command
1799
+ # http::KeepSocket when $socketRdState($connId) is set to "Rready".
1800
+
1801
+ #Log re-use nonpipeline, GRANT delayed write access to $token in NextP..
1802
+ set socketWrState($connId) peNding
1803
+ }
1804
+ }
1805
+
1806
+ # http::CancelReadPipeline
1807
+ #
1808
+ # Cancel pipelined responses on a closing "Keep-Alive" socket.
1809
+ #
1810
+ # - Called by a variable trace on "unset socketRdState($connId)".
1811
+ # - The variable relates to a Keep-Alive socket, which has been closed.
1812
+ # - Cancels all pipelined responses. The requests have been sent,
1813
+ # the responses have not yet been received.
1814
+ # - This is a hard cancel that ends each transaction with error status,
1815
+ # and closes the connection. Do not use it if you want to replay failed
1816
+ # transactions.
1817
+ # - N.B. Always delete ::http::socketRdState($connId) before deleting
1818
+ # ::http::socketRdQueue($connId), or this command will do nothing.
1819
+ #
1820
+ # Arguments
1821
+ # As for a trace command on a variable.
1822
+
1823
+ proc http::CancelReadPipeline {name1 connId op} {
1824
+ variable socketRdQueue
1825
+ ##Log CancelReadPipeline $name1 $connId $op
1826
+ if {[info exists socketRdQueue($connId)]} {
1827
+ set msg {the connection was closed by CancelReadPipeline}
1828
+ foreach token $socketRdQueue($connId) {
1829
+ set tk [namespace tail $token]
1830
+ Log ^X$tk end of response "($msg)" - token $token
1831
+ set ${token}(status) eof
1832
+ Finish $token ;#$msg
1833
+ }
1834
+ set socketRdQueue($connId) {}
1835
+ }
1836
+ }
1837
+
1838
+ # http::CancelWritePipeline
1839
+ #
1840
+ # Cancel queued events on a closing "Keep-Alive" socket.
1841
+ #
1842
+ # - Called by a variable trace on "unset socketWrState($connId)".
1843
+ # - The variable relates to a Keep-Alive socket, which has been closed.
1844
+ # - In pipelined or nonpipeline case: cancels all queued requests. The
1845
+ # requests have not yet been sent, the responses are not due.
1846
+ # - This is a hard cancel that ends each transaction with error status,
1847
+ # and closes the connection. Do not use it if you want to replay failed
1848
+ # transactions.
1849
+ # - N.B. Always delete ::http::socketWrState($connId) before deleting
1850
+ # ::http::socketWrQueue($connId), or this command will do nothing.
1851
+ #
1852
+ # Arguments
1853
+ # As for a trace command on a variable.
1854
+
1855
+ proc http::CancelWritePipeline {name1 connId op} {
1856
+ variable socketWrQueue
1857
+
1858
+ ##Log CancelWritePipeline $name1 $connId $op
1859
+ if {[info exists socketWrQueue($connId)]} {
1860
+ set msg {the connection was closed by CancelWritePipeline}
1861
+ foreach token $socketWrQueue($connId) {
1862
+ set tk [namespace tail $token]
1863
+ Log ^X$tk end of response "($msg)" - token $token
1864
+ set ${token}(status) eof
1865
+ Finish $token ;#$msg
1866
+ }
1867
+ set socketWrQueue($connId) {}
1868
+ }
1869
+ }
1870
+
1871
+ # http::ReplayIfDead --
1872
+ #
1873
+ # - A query on a re-used persistent socket failed at the earliest opportunity,
1874
+ # because the socket had been closed by the server. Keep the token, tidy up,
1875
+ # and try to connect on a fresh socket.
1876
+ # - The connection is monitored for eof by the command http::CheckEof. Thus
1877
+ # http::ReplayIfDead is needed only when a server event (half-closing an
1878
+ # apparently idle connection), and a client event (sending a request) occur at
1879
+ # almost the same time, and neither client nor server detects the other's
1880
+ # action before performing its own (an "asynchronous close event").
1881
+ # - To simplify testing of http::ReplayIfDead, set TEST_EOF 1 in
1882
+ # http::KeepSocket, and then http::ReplayIfDead will be called if http::geturl
1883
+ # is called at any time after the server timeout.
1884
+ #
1885
+ # Arguments:
1886
+ # token Connection token.
1887
+ #
1888
+ # Side Effects:
1889
+ # Use the same token, but try to open a new socket.
1890
+
1891
+ proc http::ReplayIfDead {tokenArg doing} {
1892
+ variable socketMapping
1893
+ variable socketRdState
1894
+ variable socketWrState
1895
+ variable socketRdQueue
1896
+ variable socketWrQueue
1897
+ variable socketClosing
1898
+ variable socketPlayCmd
1899
+
1900
+ variable $tokenArg
1901
+ upvar 0 $tokenArg stateArg
1902
+
1903
+ Log running http::ReplayIfDead for $tokenArg $doing
1904
+
1905
+ # 1. Merge the tokens for transactions in flight, the read (response) queue,
1906
+ # and the write (request) queue.
1907
+
1908
+ set InFlightR {}
1909
+ set InFlightW {}
1910
+
1911
+ # Obtain the tokens for transactions in flight.
1912
+ if {$stateArg(-pipeline)} {
1913
+ # Two transactions may be in flight. The "read" transaction was first.
1914
+ # It is unlikely that the server would close the socket if a response
1915
+ # was pending; however, an earlier request (as well as the present
1916
+ # request) may have been sent and ignored if the socket was half-closed
1917
+ # by the server.
1918
+
1919
+ if { [info exists socketRdState($stateArg(socketinfo))]
1920
+ && ($socketRdState($stateArg(socketinfo)) ne "Rready")
1921
+ } {
1922
+ lappend InFlightR $socketRdState($stateArg(socketinfo))
1923
+ } elseif {($doing eq "read")} {
1924
+ lappend InFlightR $tokenArg
1925
+ }
1926
+
1927
+ if { [info exists socketWrState($stateArg(socketinfo))]
1928
+ && $socketWrState($stateArg(socketinfo)) ni {Wready peNding}
1929
+ } {
1930
+ lappend InFlightW $socketWrState($stateArg(socketinfo))
1931
+ } elseif {($doing eq "write")} {
1932
+ lappend InFlightW $tokenArg
1933
+ }
1934
+
1935
+ # Report any inconsistency of $tokenArg with socket*state.
1936
+ if { ($doing eq "read")
1937
+ && [info exists socketRdState($stateArg(socketinfo))]
1938
+ && ($tokenArg ne $socketRdState($stateArg(socketinfo)))
1939
+ } {
1940
+ Log WARNING - ReplayIfDead pipelined tokenArg $tokenArg $doing \
1941
+ ne socketRdState($stateArg(socketinfo)) \
1942
+ $socketRdState($stateArg(socketinfo))
1943
+
1944
+ } elseif {
1945
+ ($doing eq "write")
1946
+ && [info exists socketWrState($stateArg(socketinfo))]
1947
+ && ($tokenArg ne $socketWrState($stateArg(socketinfo)))
1948
+ } {
1949
+ Log WARNING - ReplayIfDead pipelined tokenArg $tokenArg $doing \
1950
+ ne socketWrState($stateArg(socketinfo)) \
1951
+ $socketWrState($stateArg(socketinfo))
1952
+ }
1953
+ } else {
1954
+ # One transaction should be in flight.
1955
+ # socketRdState, socketWrQueue are used.
1956
+ # socketRdQueue should be empty.
1957
+
1958
+ # Report any inconsistency of $tokenArg with socket*state.
1959
+ if {$tokenArg ne $socketRdState($stateArg(socketinfo))} {
1960
+ Log WARNING - ReplayIfDead nonpipeline tokenArg $tokenArg $doing \
1961
+ ne socketRdState($stateArg(socketinfo)) \
1962
+ $socketRdState($stateArg(socketinfo))
1963
+ }
1964
+
1965
+ # Report the inconsistency that socketRdQueue is non-empty.
1966
+ if { [info exists socketRdQueue($stateArg(socketinfo))]
1967
+ && ($socketRdQueue($stateArg(socketinfo)) ne {})
1968
+ } {
1969
+ Log WARNING - ReplayIfDead nonpipeline tokenArg $tokenArg $doing \
1970
+ has read queue socketRdQueue($stateArg(socketinfo)) \
1971
+ $socketRdQueue($stateArg(socketinfo)) ne {}
1972
+ }
1973
+
1974
+ lappend InFlightW $socketRdState($stateArg(socketinfo))
1975
+ set socketRdQueue($stateArg(socketinfo)) {}
1976
+ }
1977
+
1978
+ set newQueue {}
1979
+ lappend newQueue {*}$InFlightR
1980
+ lappend newQueue {*}$socketRdQueue($stateArg(socketinfo))
1981
+ lappend newQueue {*}$InFlightW
1982
+ lappend newQueue {*}$socketWrQueue($stateArg(socketinfo))
1983
+
1984
+
1985
+ # 2. Tidy up tokenArg. This is a cut-down form of Finish/CloseSocket.
1986
+ # Do not change state(status).
1987
+ # No need to after cancel stateArg(after) - either this is done in
1988
+ # ReplayCore/ReInit, or Finish is called.
1989
+
1990
+ catch {close $stateArg(sock)}
1991
+
1992
+ # 2a. Tidy the tokens in the queues - this is done in ReplayCore/ReInit.
1993
+ # - Transactions, if any, that are awaiting responses cannot be completed.
1994
+ # They are listed for re-sending in newQueue.
1995
+ # - All tokens are preserved for re-use by ReplayCore, and their variables
1996
+ # will be re-initialised by calls to ReInit.
1997
+ # - The relevant element of socketMapping, socketRdState, socketWrState,
1998
+ # socketRdQueue, socketWrQueue, socketClosing, socketPlayCmd will be set
1999
+ # to new values in ReplayCore.
2000
+
2001
+ ReplayCore $newQueue
2002
+ }
2003
+
2004
+ # http::ReplayIfClose --
2005
+ #
2006
+ # A request on a socket that was previously "Connection: keep-alive" has
2007
+ # received a "Connection: close" response header. The server supplies
2008
+ # that response correctly, but any later requests already queued on this
2009
+ # connection will be lost when the socket closes.
2010
+ #
2011
+ # This command takes arguments that represent the socketWrState,
2012
+ # socketRdQueue and socketWrQueue for this connection. The socketRdState
2013
+ # is not needed because the server responds in full to the request that
2014
+ # received the "Connection: close" response header.
2015
+ #
2016
+ # Existing request tokens $token (::http::$n) are preserved. The caller
2017
+ # will be unaware that the request was processed this way.
2018
+
2019
+ proc http::ReplayIfClose {Wstate Rqueue Wqueue} {
2020
+ Log running http::ReplayIfClose for $Wstate $Rqueue $Wqueue
2021
+
2022
+ if {$Wstate in $Rqueue || $Wstate in $Wqueue} {
2023
+ Log WARNING duplicate token in http::ReplayIfClose - token $Wstate
2024
+ set Wstate Wready
2025
+ }
2026
+
2027
+ # 1. Create newQueue
2028
+ set InFlightW {}
2029
+ if {$Wstate ni {Wready peNding}} {
2030
+ lappend InFlightW $Wstate
2031
+ }
2032
+
2033
+ set newQueue {}
2034
+ lappend newQueue {*}$Rqueue
2035
+ lappend newQueue {*}$InFlightW
2036
+ lappend newQueue {*}$Wqueue
2037
+
2038
+ # 2. Cleanup - none needed, done by the caller.
2039
+
2040
+ ReplayCore $newQueue
2041
+ }
2042
+
2043
+ # http::ReInit --
2044
+ #
2045
+ # Command to restore a token's state to a condition that
2046
+ # makes it ready to replay a request.
2047
+ #
2048
+ # Command http::geturl stores extra state in state(tmp*) so
2049
+ # we don't need to do the argument processing again.
2050
+ #
2051
+ # The caller must:
2052
+ # - Set state(reusing) and state(sock) to their new values after calling
2053
+ # this command.
2054
+ # - Unset state(tmpState), state(tmpOpenCmd) if future calls to ReplayCore
2055
+ # or ReInit are inappropriate for this token. Typically only one retry
2056
+ # is allowed.
2057
+ # The caller may also unset state(tmpConnArgs) if this value (and the
2058
+ # token) will be used immediately. The value is needed by tokens that
2059
+ # will be stored in a queue.
2060
+ #
2061
+ # Arguments:
2062
+ # token Connection token.
2063
+ #
2064
+ # Return Value: (boolean) true iff the re-initialisation was successful.
2065
+
2066
+ proc http::ReInit {token} {
2067
+ variable $token
2068
+ upvar 0 $token state
2069
+
2070
+ if {!(
2071
+ [info exists state(tmpState)]
2072
+ && [info exists state(tmpOpenCmd)]
2073
+ && [info exists state(tmpConnArgs)]
2074
+ )
2075
+ } {
2076
+ Log FAILED in http::ReInit via ReplayCore - NO tmp vars for $token
2077
+ return 0
2078
+ }
2079
+
2080
+ if {[info exists state(after)]} {
2081
+ after cancel $state(after)
2082
+ unset state(after)
2083
+ }
2084
+
2085
+ # Don't alter state(status) - this would trigger http::wait if it is in use.
2086
+ set tmpState $state(tmpState)
2087
+ set tmpOpenCmd $state(tmpOpenCmd)
2088
+ set tmpConnArgs $state(tmpConnArgs)
2089
+ foreach name [array names state] {
2090
+ if {$name ne "status"} {
2091
+ unset state($name)
2092
+ }
2093
+ }
2094
+
2095
+ # Don't alter state(status).
2096
+ # Restore state(tmp*) - the caller may decide to unset them.
2097
+ # Restore state(tmpConnArgs) which is needed for connection.
2098
+ # state(tmpState), state(tmpOpenCmd) are needed only for retries.
2099
+
2100
+ dict unset tmpState status
2101
+ array set state $tmpState
2102
+ set state(tmpState) $tmpState
2103
+ set state(tmpOpenCmd) $tmpOpenCmd
2104
+ set state(tmpConnArgs) $tmpConnArgs
2105
+
2106
+ return 1
2107
+ }
2108
+
2109
+ # http::ReplayCore --
2110
+ #
2111
+ # Command to replay a list of requests, using existing connection tokens.
2112
+ #
2113
+ # Abstracted from http::geturl which stores extra state in state(tmp*) so
2114
+ # we don't need to do the argument processing again.
2115
+ #
2116
+ # Arguments:
2117
+ # newQueue List of connection tokens.
2118
+ #
2119
+ # Side Effects:
2120
+ # Use existing tokens, but try to open a new socket.
2121
+
2122
+ proc http::ReplayCore {newQueue} {
2123
+ variable socketMapping
2124
+ variable socketRdState
2125
+ variable socketWrState
2126
+ variable socketRdQueue
2127
+ variable socketWrQueue
2128
+ variable socketClosing
2129
+ variable socketPlayCmd
2130
+
2131
+ if {[llength $newQueue] == 0} {
2132
+ # Nothing to do.
2133
+ return
2134
+ }
2135
+
2136
+ ##Log running ReplayCore for {*}$newQueue
2137
+ set newToken [lindex $newQueue 0]
2138
+ set newQueue [lrange $newQueue 1 end]
2139
+
2140
+ # 3. Use newToken, and restore its values of state(*). Do not restore
2141
+ # elements tmp* - we try again only once.
2142
+
2143
+ set token $newToken
2144
+ variable $token
2145
+ upvar 0 $token state
2146
+
2147
+ if {![ReInit $token]} {
2148
+ Log FAILED in http::ReplayCore - NO tmp vars
2149
+ Finish $token {cannot send this request again}
2150
+ return
2151
+ }
2152
+
2153
+ set tmpState $state(tmpState)
2154
+ set tmpOpenCmd $state(tmpOpenCmd)
2155
+ set tmpConnArgs $state(tmpConnArgs)
2156
+ unset state(tmpState)
2157
+ unset state(tmpOpenCmd)
2158
+ unset state(tmpConnArgs)
2159
+
2160
+ set state(reusing) 0
2161
+
2162
+ if {$state(-timeout) > 0} {
2163
+ set resetCmd [list http::reset $token timeout]
2164
+ set state(after) [after $state(-timeout) $resetCmd]
2165
+ }
2166
+
2167
+ set pre [clock milliseconds]
2168
+ ##Log pre socket opened, - token $token
2169
+ ##Log $tmpOpenCmd - token $token
2170
+ # 4. Open a socket.
2171
+ if {[catch {eval $tmpOpenCmd} sock]} {
2172
+ # Something went wrong while trying to establish the connection.
2173
+ Log FAILED - $sock
2174
+ set state(sock) NONE
2175
+ Finish $token $sock
2176
+ return
2177
+ }
2178
+ ##Log post socket opened, - token $token
2179
+ set delay [expr {[clock milliseconds] - $pre}]
2180
+ if {$delay > 3000} {
2181
+ Log socket delay $delay - token $token
2182
+ }
2183
+ # Command [socket] is called with -async, but takes 5s to 5.1s to return,
2184
+ # with probability of order 1 in 10,000. This may be a bizarre scheduling
2185
+ # issue with my (KJN's) system (Fedora Linux).
2186
+ # This does not cause a problem (unless the request times out when this
2187
+ # command returns).
2188
+
2189
+ # 5. Configure the persistent socket data.
2190
+ if {$state(-keepalive)} {
2191
+ set socketMapping($state(socketinfo)) $sock
2192
+
2193
+ if {![info exists socketRdState($state(socketinfo))]} {
2194
+ set socketRdState($state(socketinfo)) {}
2195
+ set varName ::http::socketRdState($state(socketinfo))
2196
+ trace add variable $varName unset ::http::CancelReadPipeline
2197
+ }
2198
+
2199
+ if {![info exists socketWrState($state(socketinfo))]} {
2200
+ set socketWrState($state(socketinfo)) {}
2201
+ set varName ::http::socketWrState($state(socketinfo))
2202
+ trace add variable $varName unset ::http::CancelWritePipeline
2203
+ }
2204
+
2205
+ if {$state(-pipeline)} {
2206
+ #Log new, init for pipelined, GRANT write acc to $token ReplayCore
2207
+ set socketRdState($state(socketinfo)) $token
2208
+ set socketWrState($state(socketinfo)) $token
2209
+ } else {
2210
+ #Log new, init for nonpipeline, GRANT r/w acc to $token ReplayCore
2211
+ set socketRdState($state(socketinfo)) $token
2212
+ set socketWrState($state(socketinfo)) $token
2213
+ }
2214
+
2215
+ set socketRdQueue($state(socketinfo)) {}
2216
+ set socketWrQueue($state(socketinfo)) $newQueue
2217
+ set socketClosing($state(socketinfo)) 0
2218
+ set socketPlayCmd($state(socketinfo)) {ReplayIfClose Wready {} {}}
2219
+ }
2220
+
2221
+ ##Log pre newQueue ReInit, - token $token
2222
+ # 6. Configure sockets in the queue.
2223
+ foreach tok $newQueue {
2224
+ if {[ReInit $tok]} {
2225
+ set ${tok}(reusing) 1
2226
+ set ${tok}(sock) $sock
2227
+ } else {
2228
+ set ${tok}(reusing) 1
2229
+ set ${tok}(sock) NONE
2230
+ Finish $token {cannot send this request again}
2231
+ }
2232
+ }
2233
+
2234
+ # 7. Configure the socket for newToken to send a request.
2235
+ set state(sock) $sock
2236
+ Log "Using $sock for $state(socketinfo) - token $token" \
2237
+ [expr {$state(-keepalive)?"keepalive":""}]
2238
+
2239
+ # Initialisation of a new socket.
2240
+ ##Log socket opened, now fconfigure - token $token
2241
+ fconfigure $sock -translation {auto crlf} -buffersize $state(-blocksize)
2242
+ ##Log socket opened, DONE fconfigure - token $token
2243
+
2244
+ # Connect does its own fconfigure.
2245
+ fileevent $sock writable [list http::Connect $token {*}$tmpConnArgs]
2246
+ #Log ---- $sock << conn to $token for HTTP request (e)
2247
+ }
2248
+
2249
+ # Data access functions:
2250
+ # Data - the URL data
2251
+ # Status - the transaction status: ok, reset, eof, timeout, error
2252
+ # Code - the HTTP transaction code, e.g., 200
2253
+ # Size - the size of the URL data
2254
+
2255
+ proc http::data {token} {
2256
+ variable $token
2257
+ upvar 0 $token state
2258
+ return $state(body)
2259
+ }
2260
+ proc http::status {token} {
2261
+ if {![info exists $token]} {
2262
+ return "error"
2263
+ }
2264
+ variable $token
2265
+ upvar 0 $token state
2266
+ return $state(status)
2267
+ }
2268
+ proc http::code {token} {
2269
+ variable $token
2270
+ upvar 0 $token state
2271
+ return $state(http)
2272
+ }
2273
+ proc http::ncode {token} {
2274
+ variable $token
2275
+ upvar 0 $token state
2276
+ if {[regexp {[0-9]{3}} $state(http) numeric_code]} {
2277
+ return $numeric_code
2278
+ } else {
2279
+ return $state(http)
2280
+ }
2281
+ }
2282
+ proc http::size {token} {
2283
+ variable $token
2284
+ upvar 0 $token state
2285
+ return $state(currentsize)
2286
+ }
2287
+ proc http::meta {token} {
2288
+ variable $token
2289
+ upvar 0 $token state
2290
+ return $state(meta)
2291
+ }
2292
+ proc http::error {token} {
2293
+ variable $token
2294
+ upvar 0 $token state
2295
+ if {[info exists state(error)]} {
2296
+ return $state(error)
2297
+ }
2298
+ return ""
2299
+ }
2300
+
2301
+ # http::cleanup
2302
+ #
2303
+ # Garbage collect the state associated with a transaction
2304
+ #
2305
+ # Arguments
2306
+ # token The token returned from http::geturl
2307
+ #
2308
+ # Side Effects
2309
+ # unsets the state array
2310
+
2311
+ proc http::cleanup {token} {
2312
+ variable $token
2313
+ upvar 0 $token state
2314
+ if {[info commands ${token}EventCoroutine] ne {}} {
2315
+ rename ${token}EventCoroutine {}
2316
+ }
2317
+ if {[info exists state(after)]} {
2318
+ after cancel $state(after)
2319
+ unset state(after)
2320
+ }
2321
+ if {[info exists state]} {
2322
+ unset state
2323
+ }
2324
+ }
2325
+
2326
+ # http::Connect
2327
+ #
2328
+ # This callback is made when an asyncronous connection completes.
2329
+ #
2330
+ # Arguments
2331
+ # token The token returned from http::geturl
2332
+ #
2333
+ # Side Effects
2334
+ # Sets the status of the connection, which unblocks
2335
+ # the waiting geturl call
2336
+
2337
+ proc http::Connect {token proto phost srvurl} {
2338
+ variable $token
2339
+ upvar 0 $token state
2340
+ set tk [namespace tail $token]
2341
+ set err "due to unexpected EOF"
2342
+ if {
2343
+ [eof $state(sock)] ||
2344
+ [set err [fconfigure $state(sock) -error]] ne ""
2345
+ } {
2346
+ Log "WARNING - if testing, pay special attention to this\
2347
+ case (GJ) which is seldom executed - token $token"
2348
+ if {[info exists state(reusing)] && $state(reusing)} {
2349
+ # The socket was closed at the server end, and closed at
2350
+ # this end by http::CheckEof.
2351
+ if {[TestForReplay $token write $err b]} {
2352
+ return
2353
+ }
2354
+
2355
+ # else:
2356
+ # This is NOT a persistent socket that has been closed since its
2357
+ # last use.
2358
+ # If any other requests are in flight or pipelined/queued, they will
2359
+ # be discarded.
2360
+ }
2361
+ Finish $token "connect failed $err"
2362
+ } else {
2363
+ set state(state) connecting
2364
+ fileevent $state(sock) writable {}
2365
+ ::http::Connected $token $proto $phost $srvurl
2366
+ }
2367
+ }
2368
+
2369
+ # http::Write
2370
+ #
2371
+ # Write POST query data to the socket
2372
+ #
2373
+ # Arguments
2374
+ # token The token for the connection
2375
+ #
2376
+ # Side Effects
2377
+ # Write the socket and handle callbacks.
2378
+
2379
+ proc http::Write {token} {
2380
+ variable http
2381
+ variable socketMapping
2382
+ variable socketRdState
2383
+ variable socketWrState
2384
+ variable socketRdQueue
2385
+ variable socketWrQueue
2386
+ variable socketClosing
2387
+ variable socketPlayCmd
2388
+
2389
+ variable $token
2390
+ upvar 0 $token state
2391
+ set tk [namespace tail $token]
2392
+ set sock $state(sock)
2393
+
2394
+ # Output a block. Tcl will buffer this if the socket blocks
2395
+ set done 0
2396
+ if {[catch {
2397
+ # Catch I/O errors on dead sockets
2398
+
2399
+ if {[info exists state(-query)]} {
2400
+ # Chop up large query strings so queryprogress callback can give
2401
+ # smooth feedback.
2402
+ if { $state(queryoffset) + $state(-queryblocksize)
2403
+ >= $state(querylength)
2404
+ } {
2405
+ # This will be the last puts for the request-body.
2406
+ if { (![catch {fileevent $sock readable} binding])
2407
+ && ($binding eq [list http::CheckEof $sock])
2408
+ } {
2409
+ # Remove the "fileevent readable" binding of an idle
2410
+ # persistent socket to http::CheckEof. We can no longer
2411
+ # treat bytes received as junk. The server might still time
2412
+ # out and half-close the socket if it has not yet received
2413
+ # the first "puts".
2414
+ fileevent $sock readable {}
2415
+ }
2416
+ }
2417
+ puts -nonewline $sock \
2418
+ [string range $state(-query) $state(queryoffset) \
2419
+ [expr {$state(queryoffset) + $state(-queryblocksize) - 1}]]
2420
+ incr state(queryoffset) $state(-queryblocksize)
2421
+ if {$state(queryoffset) >= $state(querylength)} {
2422
+ set state(queryoffset) $state(querylength)
2423
+ set done 1
2424
+ }
2425
+ } else {
2426
+ # Copy blocks from the query channel
2427
+
2428
+ set outStr [read $state(-querychannel) $state(-queryblocksize)]
2429
+ if {[eof $state(-querychannel)]} {
2430
+ # This will be the last puts for the request-body.
2431
+ if { (![catch {fileevent $sock readable} binding])
2432
+ && ($binding eq [list http::CheckEof $sock])
2433
+ } {
2434
+ # Remove the "fileevent readable" binding of an idle
2435
+ # persistent socket to http::CheckEof. We can no longer
2436
+ # treat bytes received as junk. The server might still time
2437
+ # out and half-close the socket if it has not yet received
2438
+ # the first "puts".
2439
+ fileevent $sock readable {}
2440
+ }
2441
+ }
2442
+ puts -nonewline $sock $outStr
2443
+ incr state(queryoffset) [string length $outStr]
2444
+ if {[eof $state(-querychannel)]} {
2445
+ set done 1
2446
+ }
2447
+ }
2448
+ } err]} {
2449
+ # Do not call Finish here, but instead let the read half of the socket
2450
+ # process whatever server reply there is to get.
2451
+
2452
+ set state(posterror) $err
2453
+ set done 1
2454
+ }
2455
+
2456
+ if {$done} {
2457
+ catch {flush $sock}
2458
+ fileevent $sock writable {}
2459
+ Log ^C$tk end sending request - token $token
2460
+ # End of writing (POST method). The request has been sent.
2461
+
2462
+ DoneRequest $token
2463
+ }
2464
+
2465
+ # Callback to the client after we've completely handled everything.
2466
+
2467
+ if {[string length $state(-queryprogress)]} {
2468
+ eval $state(-queryprogress) \
2469
+ [list $token $state(querylength) $state(queryoffset)]
2470
+ }
2471
+ }
2472
+
2473
+ # http::Event
2474
+ #
2475
+ # Handle input on the socket. This command is the core of
2476
+ # the coroutine commands ${token}EventCoroutine that are
2477
+ # bound to "fileevent $sock readable" and process input.
2478
+ #
2479
+ # Arguments
2480
+ # sock The socket receiving input.
2481
+ # token The token returned from http::geturl
2482
+ #
2483
+ # Side Effects
2484
+ # Read the socket and handle callbacks.
2485
+
2486
+ proc http::Event {sock token} {
2487
+ variable http
2488
+ variable socketMapping
2489
+ variable socketRdState
2490
+ variable socketWrState
2491
+ variable socketRdQueue
2492
+ variable socketWrQueue
2493
+ variable socketClosing
2494
+ variable socketPlayCmd
2495
+
2496
+ variable $token
2497
+ upvar 0 $token state
2498
+ set tk [namespace tail $token]
2499
+ while 1 {
2500
+ yield
2501
+ ##Log Event call - token $token
2502
+
2503
+ if {![info exists state]} {
2504
+ Log "Event $sock with invalid token '$token' - remote close?"
2505
+ if {![eof $sock]} {
2506
+ if {[set d [read $sock]] ne ""} {
2507
+ Log "WARNING: additional data left on closed socket\
2508
+ - token $token"
2509
+ }
2510
+ }
2511
+ Log ^X$tk end of response (token error) - token $token
2512
+ CloseSocket $sock
2513
+ return
2514
+ }
2515
+ if {$state(state) eq "connecting"} {
2516
+ ##Log - connecting - token $token
2517
+ if { $state(reusing)
2518
+ && $state(-pipeline)
2519
+ && ($state(-timeout) > 0)
2520
+ && (![info exists state(after)])
2521
+ } {
2522
+ set state(after) [after $state(-timeout) \
2523
+ [list http::reset $token timeout]]
2524
+ }
2525
+
2526
+ if {[catch {gets $sock state(http)} nsl]} {
2527
+ Log "WARNING - if testing, pay special attention to this\
2528
+ case (GK) which is seldom executed - token $token"
2529
+ if {[info exists state(reusing)] && $state(reusing)} {
2530
+ # The socket was closed at the server end, and closed at
2531
+ # this end by http::CheckEof.
2532
+
2533
+ if {[TestForReplay $token read $nsl c]} {
2534
+ return
2535
+ }
2536
+
2537
+ # else:
2538
+ # This is NOT a persistent socket that has been closed since
2539
+ # its last use.
2540
+ # If any other requests are in flight or pipelined/queued,
2541
+ # they will be discarded.
2542
+ } else {
2543
+ Log ^X$tk end of response (error) - token $token
2544
+ Finish $token $nsl
2545
+ return
2546
+ }
2547
+ } elseif {$nsl >= 0} {
2548
+ ##Log - connecting 1 - token $token
2549
+ set state(state) "header"
2550
+ } elseif { [eof $sock]
2551
+ && [info exists state(reusing)]
2552
+ && $state(reusing)
2553
+ } {
2554
+ # The socket was closed at the server end, and we didn't notice.
2555
+ # This is the first read - where the closure is usually first
2556
+ # detected.
2557
+
2558
+ if {[TestForReplay $token read {} d]} {
2559
+ return
2560
+ }
2561
+
2562
+ # else:
2563
+ # This is NOT a persistent socket that has been closed since its
2564
+ # last use.
2565
+ # If any other requests are in flight or pipelined/queued, they
2566
+ # will be discarded.
2567
+ }
2568
+ } elseif {$state(state) eq "header"} {
2569
+ if {[catch {gets $sock line} nhl]} {
2570
+ ##Log header failed - token $token
2571
+ Log ^X$tk end of response (error) - token $token
2572
+ Finish $token $nhl
2573
+ return
2574
+ } elseif {$nhl == 0} {
2575
+ ##Log header done - token $token
2576
+ Log ^E$tk end of response headers - token $token
2577
+ # We have now read all headers
2578
+ # We ignore HTTP/1.1 100 Continue returns. RFC2616 sec 8.2.3
2579
+ if { ($state(http) == "")
2580
+ || ([regexp {^\S+\s(\d+)} $state(http) {} x] && $x == 100)
2581
+ } {
2582
+ set state(state) "connecting"
2583
+ continue
2584
+ # This was a "return" in the pre-coroutine code.
2585
+ }
2586
+
2587
+ if { ([info exists state(connection)])
2588
+ && ([info exists socketMapping($state(socketinfo))])
2589
+ && ($state(connection) eq "keep-alive")
2590
+ && ($state(-keepalive))
2591
+ && (!$state(reusing))
2592
+ && ($state(-pipeline))
2593
+ } {
2594
+ # Response headers received for first request on a
2595
+ # persistent socket. Now ready for pipelined writes (if
2596
+ # any).
2597
+ # Previous value is $token. It cannot be "pending".
2598
+ set socketWrState($state(socketinfo)) Wready
2599
+ http::NextPipelinedWrite $token
2600
+ }
2601
+
2602
+ # Once a "close" has been signaled, the client MUST NOT send any
2603
+ # more requests on that connection.
2604
+ #
2605
+ # If either the client or the server sends the "close" token in
2606
+ # the Connection header, that request becomes the last one for
2607
+ # the connection.
2608
+
2609
+ if { ([info exists state(connection)])
2610
+ && ([info exists socketMapping($state(socketinfo))])
2611
+ && ($state(connection) eq "close")
2612
+ && ($state(-keepalive))
2613
+ } {
2614
+ # The server warns that it will close the socket after this
2615
+ # response.
2616
+ ##Log WARNING - socket will close after response for $token
2617
+ # Prepare data for a call to ReplayIfClose.
2618
+ if { ($socketRdQueue($state(socketinfo)) ne {})
2619
+ || ($socketWrQueue($state(socketinfo)) ne {})
2620
+ || ($socketWrState($state(socketinfo)) ni
2621
+ [list Wready peNding $token])
2622
+ } {
2623
+ set InFlightW $socketWrState($state(socketinfo))
2624
+ if {$InFlightW in [list Wready peNding $token]} {
2625
+ set InFlightW Wready
2626
+ } else {
2627
+ set msg "token ${InFlightW} is InFlightW"
2628
+ ##Log $msg - token $token
2629
+ }
2630
+
2631
+ set socketPlayCmd($state(socketinfo)) \
2632
+ [list ReplayIfClose $InFlightW \
2633
+ $socketRdQueue($state(socketinfo)) \
2634
+ $socketWrQueue($state(socketinfo))]
2635
+
2636
+ # - All tokens are preserved for re-use by ReplayCore.
2637
+ # - Queues are preserved in case of Finish with error,
2638
+ # but are not used for anything else because
2639
+ # socketClosing(*) is set below.
2640
+ # - Cancel the state(after) timeout events.
2641
+ foreach tokenVal $socketRdQueue($state(socketinfo)) {
2642
+ if {[info exists ${tokenVal}(after)]} {
2643
+ after cancel [set ${tokenVal}(after)]
2644
+ unset ${tokenVal}(after)
2645
+ }
2646
+ }
2647
+
2648
+ } else {
2649
+ set socketPlayCmd($state(socketinfo)) \
2650
+ {ReplayIfClose Wready {} {}}
2651
+ }
2652
+
2653
+ # Do not allow further connections on this socket.
2654
+ set socketClosing($state(socketinfo)) 1
2655
+ }
2656
+
2657
+ set state(state) body
2658
+
2659
+ # If doing a HEAD, then we won't get any body
2660
+ if {$state(-validate)} {
2661
+ Log ^F$tk end of response for HEAD request - token $token
2662
+ set state(state) complete
2663
+ Eot $token
2664
+ return
2665
+ }
2666
+
2667
+ # - For non-chunked transfer we may have no body - in this case
2668
+ # we may get no further file event if the connection doesn't
2669
+ # close and no more data is sent. We can tell and must finish
2670
+ # up now - not later - the alternative would be to wait until
2671
+ # the server times out.
2672
+ # - In this case, the server has NOT told the client it will
2673
+ # close the connection, AND it has NOT indicated the resource
2674
+ # length EITHER by setting the Content-Length (totalsize) OR
2675
+ # by using chunked Transfer-Encoding.
2676
+ # - Do not worry here about the case (Connection: close) because
2677
+ # the server should close the connection.
2678
+ # - IF (NOT Connection: close) AND (NOT chunked encoding) AND
2679
+ # (totalsize == 0).
2680
+
2681
+ if { (!( [info exists state(connection)]
2682
+ && ($state(connection) eq "close")
2683
+ )
2684
+ )
2685
+ && (![info exists state(transfer)])
2686
+ && ($state(totalsize) == 0)
2687
+ } {
2688
+ set msg {body size is 0 and no events likely - complete}
2689
+ Log "$msg - token $token"
2690
+ set msg {(length unknown, set to 0)}
2691
+ Log ^F$tk end of response body {*}$msg - token $token
2692
+ set state(state) complete
2693
+ Eot $token
2694
+ return
2695
+ }
2696
+
2697
+ # We have to use binary translation to count bytes properly.
2698
+ lassign [fconfigure $sock -translation] trRead trWrite
2699
+ fconfigure $sock -translation [list binary $trWrite]
2700
+
2701
+ if {
2702
+ $state(-binary) || [IsBinaryContentType $state(type)]
2703
+ } {
2704
+ # Turn off conversions for non-text data.
2705
+ set state(binary) 1
2706
+ }
2707
+ if {[info exists state(-channel)]} {
2708
+ if {$state(binary) || [llength [ContentEncoding $token]]} {
2709
+ fconfigure $state(-channel) -translation binary
2710
+ }
2711
+ if {![info exists state(-handler)]} {
2712
+ # Initiate a sequence of background fcopies.
2713
+ fileevent $sock readable {}
2714
+ rename ${token}EventCoroutine {}
2715
+ CopyStart $sock $token
2716
+ return
2717
+ }
2718
+ }
2719
+ } elseif {$nhl > 0} {
2720
+ # Process header lines.
2721
+ ##Log header - token $token - $line
2722
+ if {[regexp -nocase {^([^:]+):(.+)$} $line x key value]} {
2723
+ switch -- [string tolower $key] {
2724
+ content-type {
2725
+ set state(type) [string trim [string tolower $value]]
2726
+ # Grab the optional charset information.
2727
+ if {[regexp -nocase \
2728
+ {charset\s*=\s*\"((?:[^""]|\\\")*)\"} \
2729
+ $state(type) -> cs]} {
2730
+ set state(charset) [string map {{\"} \"} $cs]
2731
+ } else {
2732
+ regexp -nocase {charset\s*=\s*(\S+?);?} \
2733
+ $state(type) -> state(charset)
2734
+ }
2735
+ }
2736
+ content-length {
2737
+ set state(totalsize) [string trim $value]
2738
+ }
2739
+ content-encoding {
2740
+ set state(coding) [string trim $value]
2741
+ }
2742
+ transfer-encoding {
2743
+ set state(transfer) \
2744
+ [string trim [string tolower $value]]
2745
+ }
2746
+ proxy-connection -
2747
+ connection {
2748
+ set tmpHeader [string trim [string tolower $value]]
2749
+ # RFC 7230 Section 6.1 states that a comma-separated
2750
+ # list is an acceptable value. According to
2751
+ # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Connection
2752
+ # any comma-separated list implies keep-alive, but I
2753
+ # don't see this in the RFC so we'll play safe and
2754
+ # scan any list for "close".
2755
+ if {$tmpHeader in {close keep-alive}} {
2756
+ # The common cases, continue.
2757
+ } elseif {[string first , $tmpHeader] < 0} {
2758
+ # Not a comma-separated list, not "close",
2759
+ # therefore "keep-alive".
2760
+ set tmpHeader keep-alive
2761
+ } else {
2762
+ set tmpResult keep-alive
2763
+ set tmpCsl [split $tmpHeader ,]
2764
+ # Optional whitespace either side of separator.
2765
+ foreach el $tmpCsl {
2766
+ if {[string trim $el] eq {close}} {
2767
+ set tmpResult close
2768
+ break
2769
+ }
2770
+ }
2771
+ set tmpHeader $tmpResult
2772
+ }
2773
+ set state(connection) $tmpHeader
2774
+ }
2775
+ }
2776
+ lappend state(meta) $key [string trim $value]
2777
+ }
2778
+ }
2779
+ } else {
2780
+ # Now reading body
2781
+ ##Log body - token $token
2782
+ if {[catch {
2783
+ if {[info exists state(-handler)]} {
2784
+ set n [eval $state(-handler) [list $sock $token]]
2785
+ ##Log handler $n - token $token
2786
+ # N.B. the protocol has been set to 1.0 because the -handler
2787
+ # logic is not expected to handle chunked encoding.
2788
+ # FIXME Allow -handler with 1.1 on dechunked stacked chan.
2789
+ if {$state(totalsize) == 0} {
2790
+ # We know the transfer is complete only when the server
2791
+ # closes the connection - i.e. eof is not an error.
2792
+ set state(state) complete
2793
+ }
2794
+ if {![string is integer -strict $n]} {
2795
+ if 1 {
2796
+ # Do not tolerate bad -handler - fail with error
2797
+ # status.
2798
+ set msg {the -handler command for http::geturl must\
2799
+ return an integer (the number of bytes\
2800
+ read)}
2801
+ Log ^X$tk end of response (handler error) -\
2802
+ token $token
2803
+ Eot $token $msg
2804
+ } else {
2805
+ # Tolerate the bad -handler, and continue. The
2806
+ # penalty:
2807
+ # (a) Because the handler returns nonsense, we know
2808
+ # the transfer is complete only when the server
2809
+ # closes the connection - i.e. eof is not an
2810
+ # error.
2811
+ # (b) http::size will not be accurate.
2812
+ # (c) The transaction is already downgraded to 1.0
2813
+ # to avoid chunked transfer encoding. It MUST
2814
+ # also be forced to "Connection: close" or the
2815
+ # HTTP/1.0 equivalent; or it MUST fail (as
2816
+ # above) if the server sends
2817
+ # "Connection: keep-alive" or the HTTP/1.0
2818
+ # equivalent.
2819
+ set n 0
2820
+ set state(state) complete
2821
+ }
2822
+ }
2823
+ } elseif {[info exists state(transfer_final)]} {
2824
+ # This code forgives EOF in place of the final CRLF.
2825
+ set line [getTextLine $sock]
2826
+ set n [string length $line]
2827
+ set state(state) complete
2828
+ if {$n > 0} {
2829
+ # - HTTP trailers (late response headers) are permitted
2830
+ # by Chunked Transfer-Encoding, and can be safely
2831
+ # ignored.
2832
+ # - Do not count these bytes in the total received for
2833
+ # the response body.
2834
+ Log "trailer of $n bytes after final chunk -\
2835
+ token $token"
2836
+ append state(transfer_final) $line
2837
+ set n 0
2838
+ } else {
2839
+ Log ^F$tk end of response body (chunked) - token $token
2840
+ Log "final chunk part - token $token"
2841
+ Eot $token
2842
+ }
2843
+ } elseif { [info exists state(transfer)]
2844
+ && ($state(transfer) eq "chunked")
2845
+ } {
2846
+ ##Log chunked - token $token
2847
+ set size 0
2848
+ set hexLenChunk [getTextLine $sock]
2849
+ #set ntl [string length $hexLenChunk]
2850
+ if {[string trim $hexLenChunk] ne ""} {
2851
+ scan $hexLenChunk %x size
2852
+ if {$size != 0} {
2853
+ ##Log chunk-measure $size - token $token
2854
+ set chunk [BlockingRead $sock $size]
2855
+ set n [string length $chunk]
2856
+ if {$n >= 0} {
2857
+ append state(body) $chunk
2858
+ incr state(log_size) [string length $chunk]
2859
+ ##Log chunk $n cumul $state(log_size) -\
2860
+ token $token
2861
+ }
2862
+ if {$size != [string length $chunk]} {
2863
+ Log "WARNING: mis-sized chunk:\
2864
+ was [string length $chunk], should be\
2865
+ $size - token $token"
2866
+ set n 0
2867
+ set state(connection) close
2868
+ Log ^X$tk end of response (chunk error) \
2869
+ - token $token
2870
+ set msg {error in chunked encoding - fetch\
2871
+ terminated}
2872
+ Eot $token $msg
2873
+ }
2874
+ # CRLF that follows chunk.
2875
+ # If eof, this is handled at the end of this proc.
2876
+ getTextLine $sock
2877
+ } else {
2878
+ set n 0
2879
+ set state(transfer_final) {}
2880
+ }
2881
+ } else {
2882
+ # Line expected to hold chunk length is empty, or eof.
2883
+ ##Log bad-chunk-measure - token $token
2884
+ set n 0
2885
+ set state(connection) close
2886
+ Log ^X$tk end of response (chunk error) - token $token
2887
+ Eot $token {error in chunked encoding -\
2888
+ fetch terminated}
2889
+ }
2890
+ } else {
2891
+ ##Log unchunked - token $token
2892
+ if {$state(totalsize) == 0} {
2893
+ # We know the transfer is complete only when the server
2894
+ # closes the connection.
2895
+ set state(state) complete
2896
+ set reqSize $state(-blocksize)
2897
+ } else {
2898
+ # Ask for the whole of the unserved response-body.
2899
+ # This works around a problem with a tls::socket - for
2900
+ # https in keep-alive mode, and a request for
2901
+ # $state(-blocksize) bytes, the last part of the
2902
+ # resource does not get read until the server times out.
2903
+ set reqSize [expr { $state(totalsize)
2904
+ - $state(currentsize)}]
2905
+
2906
+ # The workaround fails if reqSize is
2907
+ # capped at $state(-blocksize).
2908
+ # set reqSize [expr {min($reqSize, $state(-blocksize))}]
2909
+ }
2910
+ set c $state(currentsize)
2911
+ set t $state(totalsize)
2912
+ ##Log non-chunk currentsize $c of totalsize $t -\
2913
+ token $token
2914
+ set block [read $sock $reqSize]
2915
+ set n [string length $block]
2916
+ if {$n >= 0} {
2917
+ append state(body) $block
2918
+ ##Log non-chunk [string length $state(body)] -\
2919
+ token $token
2920
+ }
2921
+ }
2922
+ # This calculation uses n from the -handler, chunked, or
2923
+ # unchunked case as appropriate.
2924
+ if {[info exists state]} {
2925
+ if {$n >= 0} {
2926
+ incr state(currentsize) $n
2927
+ set c $state(currentsize)
2928
+ set t $state(totalsize)
2929
+ ##Log another $n currentsize $c totalsize $t -\
2930
+ token $token
2931
+ }
2932
+ # If Content-Length - check for end of data.
2933
+ if {
2934
+ ($state(totalsize) > 0)
2935
+ && ($state(currentsize) >= $state(totalsize))
2936
+ } {
2937
+ Log ^F$tk end of response body (unchunked) -\
2938
+ token $token
2939
+ set state(state) complete
2940
+ Eot $token
2941
+ }
2942
+ }
2943
+ } err]} {
2944
+ Log ^X$tk end of response (error ${err}) - token $token
2945
+ Finish $token $err
2946
+ return
2947
+ } else {
2948
+ if {[info exists state(-progress)]} {
2949
+ eval $state(-progress) \
2950
+ [list $token $state(totalsize) $state(currentsize)]
2951
+ }
2952
+ }
2953
+ }
2954
+
2955
+ # catch as an Eot above may have closed the socket already
2956
+ # $state(state) may be connecting, header, body, or complete
2957
+ if {![set cc [catch {eof $sock} eof]] && $eof} {
2958
+ ##Log eof - token $token
2959
+ if {[info exists $token]} {
2960
+ set state(connection) close
2961
+ if {$state(state) eq "complete"} {
2962
+ # This includes all cases in which the transaction
2963
+ # can be completed by eof.
2964
+ # The value "complete" is set only in http::Event, and it is
2965
+ # used only in the test above.
2966
+ Log ^F$tk end of response body (unchunked, eof) -\
2967
+ token $token
2968
+ Eot $token
2969
+ } else {
2970
+ # Premature eof.
2971
+ Log ^X$tk end of response (unexpected eof) - token $token
2972
+ Eot $token eof
2973
+ }
2974
+ } else {
2975
+ # open connection closed on a token that has been cleaned up.
2976
+ Log ^X$tk end of response (token error) - token $token
2977
+ CloseSocket $sock
2978
+ }
2979
+ } elseif {$cc} {
2980
+ return
2981
+ }
2982
+ }
2983
+ }
2984
+
2985
+ # http::TestForReplay
2986
+ #
2987
+ # Command called if eof is discovered when a socket is first used for a
2988
+ # new transaction. Typically this occurs if a persistent socket is used
2989
+ # after a period of idleness and the server has half-closed the socket.
2990
+ #
2991
+ # token - the connection token returned by http::geturl
2992
+ # doing - "read" or "write"
2993
+ # err - error message, if any
2994
+ # caller - code to identify the caller - used only in logging
2995
+ #
2996
+ # Return Value: boolean, true iff the command calls http::ReplayIfDead.
2997
+
2998
+ proc http::TestForReplay {token doing err caller} {
2999
+ variable http
3000
+ variable $token
3001
+ upvar 0 $token state
3002
+ set tk [namespace tail $token]
3003
+ if {$doing eq "read"} {
3004
+ set code Q
3005
+ set action response
3006
+ set ing reading
3007
+ } else {
3008
+ set code P
3009
+ set action request
3010
+ set ing writing
3011
+ }
3012
+
3013
+ if {$err eq {}} {
3014
+ set err "detect eof when $ing (server timed out?)"
3015
+ }
3016
+
3017
+ if {$state(method) eq "POST" && !$http(-repost)} {
3018
+ # No Replay.
3019
+ # The present transaction will end when Finish is called.
3020
+ # That call to Finish will abort any other transactions
3021
+ # currently in the write queue.
3022
+ # For calls from http::Event this occurs when execution
3023
+ # reaches the code block at the end of that proc.
3024
+ set msg {no retry for POST with http::config -repost 0}
3025
+ Log reusing socket failed "($caller)" - $msg - token $token
3026
+ Log error - $err - token $token
3027
+ Log ^X$tk end of $action (error) - token $token
3028
+ return 0
3029
+ } else {
3030
+ # Replay.
3031
+ set msg {try a new socket}
3032
+ Log reusing socket failed "($caller)" - $msg - token $token
3033
+ Log error - $err - token $token
3034
+ Log ^$code$tk Any unfinished (incl this one) failed - token $token
3035
+ ReplayIfDead $token $doing
3036
+ return 1
3037
+ }
3038
+ }
3039
+
3040
+ # http::IsBinaryContentType --
3041
+ #
3042
+ # Determine if the content-type means that we should definitely transfer
3043
+ # the data as binary. [Bug 838e99a76d]
3044
+ #
3045
+ # Arguments
3046
+ # type The content-type of the data.
3047
+ #
3048
+ # Results:
3049
+ # Boolean, true if we definitely should be binary.
3050
+
3051
+ proc http::IsBinaryContentType {type} {
3052
+ lassign [split [string tolower $type] "/;"] major minor
3053
+ if {$major eq "text"} {
3054
+ return false
3055
+ }
3056
+ # There's a bunch of XML-as-application-format things about. See RFC 3023
3057
+ # and so on.
3058
+ if {$major eq "application"} {
3059
+ set minor [string trimright $minor]
3060
+ if {$minor in {"json" "xml" "xml-external-parsed-entity" "xml-dtd"}} {
3061
+ return false
3062
+ }
3063
+ }
3064
+ # Not just application/foobar+xml but also image/svg+xml, so let us not
3065
+ # restrict things for now...
3066
+ if {[string match "*+xml" $minor]} {
3067
+ return false
3068
+ }
3069
+ return true
3070
+ }
3071
+
3072
+ # http::getTextLine --
3073
+ #
3074
+ # Get one line with the stream in crlf mode.
3075
+ # Used if Transfer-Encoding is chunked.
3076
+ # Empty line is not distinguished from eof. The caller must
3077
+ # be able to handle this.
3078
+ #
3079
+ # Arguments
3080
+ # sock The socket receiving input.
3081
+ #
3082
+ # Results:
3083
+ # The line of text, without trailing newline
3084
+
3085
+ proc http::getTextLine {sock} {
3086
+ set tr [fconfigure $sock -translation]
3087
+ lassign $tr trRead trWrite
3088
+ fconfigure $sock -translation [list crlf $trWrite]
3089
+ set r [BlockingGets $sock]
3090
+ fconfigure $sock -translation $tr
3091
+ return $r
3092
+ }
3093
+
3094
+ # http::BlockingRead
3095
+ #
3096
+ # Replacement for a blocking read.
3097
+ # The caller must be a coroutine.
3098
+
3099
+ proc http::BlockingRead {sock size} {
3100
+ if {$size < 1} {
3101
+ return
3102
+ }
3103
+ set result {}
3104
+ while 1 {
3105
+ set need [expr {$size - [string length $result]}]
3106
+ set block [read $sock $need]
3107
+ set eof [eof $sock]
3108
+ append result $block
3109
+ if {[string length $result] >= $size || $eof} {
3110
+ return $result
3111
+ } else {
3112
+ yield
3113
+ }
3114
+ }
3115
+ }
3116
+
3117
+ # http::BlockingGets
3118
+ #
3119
+ # Replacement for a blocking gets.
3120
+ # The caller must be a coroutine.
3121
+ # Empty line is not distinguished from eof. The caller must
3122
+ # be able to handle this.
3123
+
3124
+ proc http::BlockingGets {sock} {
3125
+ while 1 {
3126
+ set count [gets $sock line]
3127
+ set eof [eof $sock]
3128
+ if {$count > -1 || $eof} {
3129
+ return $line
3130
+ } else {
3131
+ yield
3132
+ }
3133
+ }
3134
+ }
3135
+
3136
+ # http::CopyStart
3137
+ #
3138
+ # Error handling wrapper around fcopy
3139
+ #
3140
+ # Arguments
3141
+ # sock The socket to copy from
3142
+ # token The token returned from http::geturl
3143
+ #
3144
+ # Side Effects
3145
+ # This closes the connection upon error
3146
+
3147
+ proc http::CopyStart {sock token {initial 1}} {
3148
+ upvar #0 $token state
3149
+ if {[info exists state(transfer)] && $state(transfer) eq "chunked"} {
3150
+ foreach coding [ContentEncoding $token] {
3151
+ lappend state(zlib) [zlib stream $coding]
3152
+ }
3153
+ make-transformation-chunked $sock [namespace code [list CopyChunk $token]]
3154
+ } else {
3155
+ if {$initial} {
3156
+ foreach coding [ContentEncoding $token] {
3157
+ zlib push $coding $sock
3158
+ }
3159
+ }
3160
+ if {[catch {
3161
+ # FIXME Keep-Alive on https tls::socket with unchunked transfer
3162
+ # hangs until the server times out. A workaround is possible, as for
3163
+ # the case without -channel, but it does not use the neat "fcopy"
3164
+ # solution.
3165
+ fcopy $sock $state(-channel) -size $state(-blocksize) -command \
3166
+ [list http::CopyDone $token]
3167
+ } err]} {
3168
+ Finish $token $err
3169
+ }
3170
+ }
3171
+ }
3172
+
3173
+ proc http::CopyChunk {token chunk} {
3174
+ upvar 0 $token state
3175
+ if {[set count [string length $chunk]]} {
3176
+ incr state(currentsize) $count
3177
+ if {[info exists state(zlib)]} {
3178
+ foreach stream $state(zlib) {
3179
+ set chunk [$stream add $chunk]
3180
+ }
3181
+ }
3182
+ puts -nonewline $state(-channel) $chunk
3183
+ if {[info exists state(-progress)]} {
3184
+ eval [linsert $state(-progress) end \
3185
+ $token $state(totalsize) $state(currentsize)]
3186
+ }
3187
+ } else {
3188
+ Log "CopyChunk Finish - token $token"
3189
+ if {[info exists state(zlib)]} {
3190
+ set excess ""
3191
+ foreach stream $state(zlib) {
3192
+ catch {set excess [$stream add -finalize $excess]}
3193
+ }
3194
+ puts -nonewline $state(-channel) $excess
3195
+ foreach stream $state(zlib) { $stream close }
3196
+ unset state(zlib)
3197
+ }
3198
+ Eot $token ;# FIX ME: pipelining.
3199
+ }
3200
+ }
3201
+
3202
+ # http::CopyDone
3203
+ #
3204
+ # fcopy completion callback
3205
+ #
3206
+ # Arguments
3207
+ # token The token returned from http::geturl
3208
+ # count The amount transfered
3209
+ #
3210
+ # Side Effects
3211
+ # Invokes callbacks
3212
+
3213
+ proc http::CopyDone {token count {error {}}} {
3214
+ variable $token
3215
+ upvar 0 $token state
3216
+ set sock $state(sock)
3217
+ incr state(currentsize) $count
3218
+ if {[info exists state(-progress)]} {
3219
+ eval $state(-progress) \
3220
+ [list $token $state(totalsize) $state(currentsize)]
3221
+ }
3222
+ # At this point the token may have been reset.
3223
+ if {[string length $error]} {
3224
+ Finish $token $error
3225
+ } elseif {[catch {eof $sock} iseof] || $iseof} {
3226
+ Eot $token
3227
+ } else {
3228
+ CopyStart $sock $token 0
3229
+ }
3230
+ }
3231
+
3232
+ # http::Eot
3233
+ #
3234
+ # Called when either:
3235
+ # a. An eof condition is detected on the socket.
3236
+ # b. The client decides that the response is complete.
3237
+ # c. The client detects an inconsistency and aborts the transaction.
3238
+ #
3239
+ # Does:
3240
+ # 1. Set state(status)
3241
+ # 2. Reverse any Content-Encoding
3242
+ # 3. Convert charset encoding and line ends if necessary
3243
+ # 4. Call http::Finish
3244
+ #
3245
+ # Arguments
3246
+ # token The token returned from http::geturl
3247
+ # force (previously) optional, has no effect
3248
+ # reason - "eof" means premature EOF (not EOF as the natural end of
3249
+ # the response)
3250
+ # - "" means completion of response, with or without EOF
3251
+ # - anything else describes an error confition other than
3252
+ # premature EOF.
3253
+ #
3254
+ # Side Effects
3255
+ # Clean up the socket
3256
+
3257
+ proc http::Eot {token {reason {}}} {
3258
+ variable $token
3259
+ upvar 0 $token state
3260
+ if {$reason eq "eof"} {
3261
+ # Premature eof.
3262
+ set state(status) eof
3263
+ set reason {}
3264
+ } elseif {$reason ne ""} {
3265
+ # Abort the transaction.
3266
+ set state(status) $reason
3267
+ } else {
3268
+ # The response is complete.
3269
+ set state(status) ok
3270
+ }
3271
+
3272
+ if {[string length $state(body)] > 0} {
3273
+ if {[catch {
3274
+ foreach coding [ContentEncoding $token] {
3275
+ set state(body) [zlib $coding $state(body)]
3276
+ }
3277
+ } err]} {
3278
+ Log "error doing decompression for token $token: $err"
3279
+ Finish $token $err
3280
+ return
3281
+ }
3282
+
3283
+ if {!$state(binary)} {
3284
+ # If we are getting text, set the incoming channel's encoding
3285
+ # correctly. iso8859-1 is the RFC default, but this could be any
3286
+ # IANA charset. However, we only know how to convert what we have
3287
+ # encodings for.
3288
+
3289
+ set enc [CharsetToEncoding $state(charset)]
3290
+ if {$enc ne "binary"} {
3291
+ set state(body) [encoding convertfrom $enc $state(body)]
3292
+ }
3293
+
3294
+ # Translate text line endings.
3295
+ set state(body) [string map {\r\n \n \r \n} $state(body)]
3296
+ }
3297
+ }
3298
+ Finish $token $reason
3299
+ }
3300
+
3301
+ # http::wait --
3302
+ #
3303
+ # See documentation for details.
3304
+ #
3305
+ # Arguments:
3306
+ # token Connection token.
3307
+ #
3308
+ # Results:
3309
+ # The status after the wait.
3310
+
3311
+ proc http::wait {token} {
3312
+ variable $token
3313
+ upvar 0 $token state
3314
+
3315
+ if {![info exists state(status)] || $state(status) eq ""} {
3316
+ # We must wait on the original variable name, not the upvar alias
3317
+ vwait ${token}(status)
3318
+ }
3319
+
3320
+ return [status $token]
3321
+ }
3322
+
3323
+ # http::formatQuery --
3324
+ #
3325
+ # See documentation for details. Call http::formatQuery with an even
3326
+ # number of arguments, where the first is a name, the second is a value,
3327
+ # the third is another name, and so on.
3328
+ #
3329
+ # Arguments:
3330
+ # args A list of name-value pairs.
3331
+ #
3332
+ # Results:
3333
+ # TODO
3334
+
3335
+ proc http::formatQuery {args} {
3336
+ if {[llength $args] % 2} {
3337
+ return \
3338
+ -code error \
3339
+ -errorcode [list HTTP BADARGCNT $args] \
3340
+ {Incorrect number of arguments, must be an even number.}
3341
+ }
3342
+ set result ""
3343
+ set sep ""
3344
+ foreach i $args {
3345
+ append result $sep [mapReply $i]
3346
+ if {$sep eq "="} {
3347
+ set sep &
3348
+ } else {
3349
+ set sep =
3350
+ }
3351
+ }
3352
+ return $result
3353
+ }
3354
+
3355
+ # http::mapReply --
3356
+ #
3357
+ # Do x-www-urlencoded character mapping
3358
+ #
3359
+ # Arguments:
3360
+ # string The string the needs to be encoded
3361
+ #
3362
+ # Results:
3363
+ # The encoded string
3364
+
3365
+ proc http::mapReply {string} {
3366
+ variable http
3367
+ variable formMap
3368
+
3369
+ # The spec says: "non-alphanumeric characters are replaced by '%HH'". Use
3370
+ # a pre-computed map and [string map] to do the conversion (much faster
3371
+ # than [regsub]/[subst]). [Bug 1020491]
3372
+
3373
+ if {$http(-urlencoding) ne ""} {
3374
+ set string [encoding convertto $http(-urlencoding) $string]
3375
+ return [string map $formMap $string]
3376
+ }
3377
+ set converted [string map $formMap $string]
3378
+ if {[string match "*\[\u0100-\uffff\]*" $converted]} {
3379
+ regexp "\[\u0100-\uffff\]" $converted badChar
3380
+ # Return this error message for maximum compatibility... :^/
3381
+ return -code error \
3382
+ "can't read \"formMap($badChar)\": no such element in array"
3383
+ }
3384
+ return $converted
3385
+ }
3386
+ interp alias {} http::quoteString {} http::mapReply
3387
+
3388
+ # http::ProxyRequired --
3389
+ # Default proxy filter.
3390
+ #
3391
+ # Arguments:
3392
+ # host The destination host
3393
+ #
3394
+ # Results:
3395
+ # The current proxy settings
3396
+
3397
+ proc http::ProxyRequired {host} {
3398
+ variable http
3399
+ if {[info exists http(-proxyhost)] && [string length $http(-proxyhost)]} {
3400
+ if {
3401
+ ![info exists http(-proxyport)] ||
3402
+ ![string length $http(-proxyport)]
3403
+ } {
3404
+ set http(-proxyport) 8080
3405
+ }
3406
+ return [list $http(-proxyhost) $http(-proxyport)]
3407
+ }
3408
+ }
3409
+
3410
+ # http::CharsetToEncoding --
3411
+ #
3412
+ # Tries to map a given IANA charset to a tcl encoding. If no encoding
3413
+ # can be found, returns binary.
3414
+ #
3415
+
3416
+ proc http::CharsetToEncoding {charset} {
3417
+ variable encodings
3418
+
3419
+ set charset [string tolower $charset]
3420
+ if {[regexp {iso-?8859-([0-9]+)} $charset -> num]} {
3421
+ set encoding "iso8859-$num"
3422
+ } elseif {[regexp {iso-?2022-(jp|kr)} $charset -> ext]} {
3423
+ set encoding "iso2022-$ext"
3424
+ } elseif {[regexp {shift[-_]?js} $charset]} {
3425
+ set encoding "shiftjis"
3426
+ } elseif {[regexp {(?:windows|cp)-?([0-9]+)} $charset -> num]} {
3427
+ set encoding "cp$num"
3428
+ } elseif {$charset eq "us-ascii"} {
3429
+ set encoding "ascii"
3430
+ } elseif {[regexp {(?:iso-?)?lat(?:in)?-?([0-9]+)} $charset -> num]} {
3431
+ switch -- $num {
3432
+ 5 {set encoding "iso8859-9"}
3433
+ 1 - 2 - 3 {
3434
+ set encoding "iso8859-$num"
3435
+ }
3436
+ }
3437
+ } else {
3438
+ # other charset, like euc-xx, utf-8,... may directly map to encoding
3439
+ set encoding $charset
3440
+ }
3441
+ set idx [lsearch -exact $encodings $encoding]
3442
+ if {$idx >= 0} {
3443
+ return $encoding
3444
+ } else {
3445
+ return "binary"
3446
+ }
3447
+ }
3448
+
3449
+ # Return the list of content-encoding transformations we need to do in order.
3450
+ proc http::ContentEncoding {token} {
3451
+ upvar 0 $token state
3452
+ set r {}
3453
+ if {[info exists state(coding)]} {
3454
+ foreach coding [split $state(coding) ,] {
3455
+ switch -exact -- $coding {
3456
+ deflate { lappend r inflate }
3457
+ gzip - x-gzip { lappend r gunzip }
3458
+ compress - x-compress { lappend r decompress }
3459
+ identity {}
3460
+ default {
3461
+ return -code error "unsupported content-encoding \"$coding\""
3462
+ }
3463
+ }
3464
+ }
3465
+ }
3466
+ return $r
3467
+ }
3468
+
3469
+ proc http::ReceiveChunked {chan command} {
3470
+ set data ""
3471
+ set size -1
3472
+ yield
3473
+ while {1} {
3474
+ chan configure $chan -translation {crlf binary}
3475
+ while {[gets $chan line] < 1} { yield }
3476
+ chan configure $chan -translation {binary binary}
3477
+ if {[scan $line %x size] != 1} {
3478
+ return -code error "invalid size: \"$line\""
3479
+ }
3480
+ set chunk ""
3481
+ while {$size && ![chan eof $chan]} {
3482
+ set part [chan read $chan $size]
3483
+ incr size -[string length $part]
3484
+ append chunk $part
3485
+ }
3486
+ if {[catch {
3487
+ uplevel #0 [linsert $command end $chunk]
3488
+ }]} {
3489
+ http::Log "Error in callback: $::errorInfo"
3490
+ }
3491
+ if {[string length $chunk] == 0} {
3492
+ # channel might have been closed in the callback
3493
+ catch {chan event $chan readable {}}
3494
+ return
3495
+ }
3496
+ }
3497
+ }
3498
+
3499
+ proc http::make-transformation-chunked {chan command} {
3500
+ coroutine [namespace current]::dechunk$chan ::http::ReceiveChunked $chan $command
3501
+ chan event $chan readable [namespace current]::dechunk$chan
3502
+ }
3503
+
3504
+ # Local variables:
3505
+ # indent-tabs-mode: t
3506
+ # End: