Coverage for cuda/core/_device.pyx: 83.61%

488 statements  

« prev     ^ index     » next       coverage.py v7.17.2, created at 2026-11-05 01:11 +0000

1# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 

2# 

3# SPDX-License-Identifier: Apache-2.0 

4  

5from __future__ import annotations 

6  

7cimport cpython 

8  

9from cuda.bindings cimport cydriver 

10from cuda.core._utils.cuda_utils cimport check_or_create_options, HANDLE_RETURN 

11from libcpp.vector cimport vector 

12  

13import threading 

14  

15from cuda.core._context cimport Context, Context_check_open 

16from cuda.core._context import ContextOptions 

17from cuda.core._device_resources cimport DeviceResources, SMResource, WorkqueueResource 

18from cuda.core._event cimport Event as cyEvent 

19from cuda.core._event import Event, EventOptions 

20from cuda.core._memory._buffer cimport Buffer, MemoryResource 

21from cuda.core._rt cimport ( 

22 ContextHandle, 

23 GreenCtxHandle, 

24 create_context_handle_ref, 

25 create_green_ctx_handle, 

26 context_synchronize, 

27 get_primary_context, 

28 get_last_error, 

29 as_cu, 

30) 

31  

32from cuda.core._stream import IsStreamType, Stream, StreamOptions 

33from cuda.core._utils.cuda_utils import ( 

34 ComputeCapability, 

35 CUDAError, 

36 driver, 

37 handle_return, 

38 runtime, 

39) 

40from cuda.core._stream cimport ( 

41 default_stream, 

42) 

43  

44from typing import TYPE_CHECKING 

45  

46if TYPE_CHECKING: 

47 import cuda.core.system # no-cython-lint 

48 from cuda.core.graph import GraphBuilder 

49 from cuda.core.texture import ( 

50 MipmappedArray, 

51 MipmappedArrayOptions, 

52 OpaqueArray, 

53 OpaqueArrayOptions, 

54 ResourceDescriptor, 

55 SurfaceObject, 

56 TextureObject, 

57 TextureObjectOptions, 

58 ) 

59  

60# TODO: I prefer to type these as "cdef object" and avoid accessing them from within Python, 

61# but it seems it is very convenient to expose them for testing purposes... 

62_tls = threading.local() 

63_lock = threading.Lock() 

64cdef bint _is_cuInit = False 

65  

66__all__ = ['Device'] 

67  

68  

69cdef class DeviceProperties: 

70 """ 

71 A class to query various attributes of a CUDA device. 

72  

73 Attributes are read-only and provide information about the device. 

74 """ 

75 cdef: 

76 int _handle 

77 dict _cache 

78  

79 def __init__(self, *args, **kwargs) -> None: 

80 raise RuntimeError("DeviceProperties cannot be instantiated directly. Please use Device APIs.") 2,Q

81  

82 @classmethod 

83 def _init(cls, handle: int) -> DeviceProperties: 

84 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSb%f#i$i%i'i(iQiZp2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd

85 self._handle = handle 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSb%f#i$i%i'i(iQiZp2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd

86 self._cache = {} 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSb%f#i$i%i'i(iQiZp2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd

87 return self 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSb%f#i$i%i'i(iQiZp2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd

88  

89 cdef inline int _get_attribute(self, cydriver.CUdevice_attribute attr, default=0) except? -2: 

90 """Retrieve the attribute value directly from the driver.""" 

91 cdef int val 

92 cdef cydriver.CUresult err 

93 with nogil: 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k P pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%f#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERcScTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd

94 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k P pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%f#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERcScTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd

95 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k P pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%f#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERcScTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd

96 return <int>default 

97 HANDLE_RETURN(err) 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k P pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%f#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERcScTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd

98 return val 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k P pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%f#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERcScTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd

99  

100 cdef inline int _get_cached_attribute(self, attr, default=0) except? -2: 

101 """Retrieve the attribute value, using cache if applicable.""" 

102 cached = self._cache.get(attr) 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe;G^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k xMP pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) YKSe#MTe$MUe%MVe:MWe;MXeZKYeeKZe0K0e1K1e=M2e'M3e?M4e(M5e)M6e@M7e*M8e2K9elF!e+M#e~M$e%e'eaN(ebN)ecN*e=G+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%f#i$i@F[FwFdFxF%i'i]FyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKGLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERcScTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd

103 if cached is not None: 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe;G^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k xMP pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) YKSe#MTe$MUe%MVe:MWe;MXeZKYeeKZe0K0e1K1e=M2e'M3e?M4e(M5e)M6e@M7e*M8e2K9elF!e+M#e~M$e%e'eaN(ebN)ecN*e=G+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%f#i$i@F[FwFdFxF%i'i]FyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKGLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERcScTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd

104 return cached 2`d{d|d}d~daeBlEljkgeheiejebe;G^dkeceledemeeeneoepeqereseteOIL M N O xMP Q R S T d U V W X Y Z 0 1 2 3 4 5 6 7 8 tF9 uF! vF# $ % @H[H' {G( ) YK#M$M%M:M;MZKeK0K1K=M'M?M(M)M@M*M2KlF+M~MaNbNcN=GnIoIpIqI#J$Je bjmknk8kZl9kdjokpkqkejfjgj3ErkUiAo=jEpFpGptk;e?jukvk@jViWiXi=e?eYiwkxkykzkAkBkCkDkMkfe[jNkZiljEkFk.G/G:Gdgegfggghga igjgkglgmg

105 cdef int value = self._get_attribute(attr, default) 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k P pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%f#i$i@F[FwFdFxF%i'i]FyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKGLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERcScTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd

106 self._cache[attr] = value # setdefault not needed for ints 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k P pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%f#i$i@F[FwFdFxF%i'i]FyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKGLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERcScTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd

107 return value 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k P pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%f#i$i@F[FwFdFxF%i'i]FyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKGLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERcScTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd

108  

109 @property 

110 def max_threads_per_block(self) -> int: 

111 """int: Maximum number of threads per block.""" 

112 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK) 2-iXFYFZF0F1F2F4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E.G|G}G~GaHbHcH/GdHeHfHgHhHiH:GjHkHlHmHnHoH

113  

114 @property 

115 def max_block_dim_x(self) -> int: 

116 """int: Maximum block dimension X.""" 

117 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X) 2jG

118  

119 @property 

120 def max_block_dim_y(self) -> int: 

121 """int: Maximum block dimension Y.""" 

122 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y) 2kG

123  

124 @property 

125 def max_block_dim_z(self) -> int: 

126 """int: Maximum block dimension Z.""" 

127 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z) 2lG

128  

129 @property 

130 def max_grid_dim_x(self) -> int: 

131 """int: Maximum grid dimension X.""" 

132 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X) 2nGe

133  

134 @property 

135 def max_grid_dim_y(self) -> int: 

136 """int: Maximum grid dimension Y.""" 

137 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y) 2oG

138  

139 @property 

140 def max_grid_dim_z(self) -> int: 

141 """int: Maximum grid dimension Z.""" 

142 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z) 2pG

143  

144 @property 

145 def max_shared_memory_per_block(self) -> int: 

146 """int: Maximum shared memory available per block in bytes.""" 

147 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK) 2sGXFYFZF0F1F2F4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E.G|G}G~GaHbHcH/GdHeHfHgHhHiH:GjHkHlHmHnHoH

148  

149 @property 

150 def total_constant_memory(self) -> int: 

151 """int: Memory available on device for constant variables in a CUDA C kernel in bytes.""" 

152 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY) 2WG

153  

154 @property 

155 def warp_size(self) -> int: 

156 """int: Warp size in threads.""" 

157 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_WARP_SIZE) 2aj

158  

159 @property 

160 def max_pitch(self) -> int: 

161 """int: Maximum pitch in bytes allowed by memory copies.""" 

162 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PITCH) 2rG

163  

164 @property 

165 def maximum_texture1d_width(self) -> int: 

166 """int: Maximum 1D texture width.""" 

167 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH) 2=i

168  

169 @property 

170 def maximum_texture1d_linear_width(self) -> int: 

171 """int: Maximum width for a 1D texture bound to linear memory.""" 

172 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH) 2AG

173  

174 @property 

175 def maximum_texture1d_mipmapped_width(self) -> int: 

176 """int: Maximum mipmapped 1D texture width.""" 

177 return self._get_cached_attribute( 2MF

178 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2MF

179 ) 

180  

181 @property 

182 def maximum_texture2d_width(self) -> int: 

183 """int: Maximum 2D texture width.""" 

184 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH) 2[i

185  

186 @property 

187 def maximum_texture2d_height(self) -> int: 

188 """int: Maximum 2D texture height.""" 

189 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT) 2CG

190  

191 @property 

192 def maximum_texture2d_linear_width(self) -> int: 

193 """int: Maximum width for a 2D texture bound to linear memory.""" 

194 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH) 2@i

195  

196 @property 

197 def maximum_texture2d_linear_height(self) -> int: 

198 """int: Maximum height for a 2D texture bound to linear memory.""" 

199 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT) 2EG

200  

201 @property 

202 def maximum_texture2d_linear_pitch(self) -> int: 

203 """int: Maximum pitch in bytes for a 2D texture bound to linear memory.""" 

204 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH) 2FG

205  

206 @property 

207 def maximum_texture2d_mipmapped_width(self) -> int: 

208 """int: Maximum mipmapped 2D texture width.""" 

209 return self._get_cached_attribute( 2QF

210 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2QF

211 ) 

212  

213 @property 

214 def maximum_texture2d_mipmapped_height(self) -> int: 

215 """int: Maximum mipmapped 2D texture height.""" 

216 return self._get_cached_attribute( 2PF

217 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2PF

218 ) 

219  

220 @property 

221 def maximum_texture3d_width(self) -> int: 

222 """int: Maximum 3D texture width.""" 

223 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH) 2IG

224  

225 @property 

226 def maximum_texture3d_height(self) -> int: 

227 """int: Maximum 3D texture height.""" 

228 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT) 2HG

229  

230 @property 

231 def maximum_texture3d_depth(self) -> int: 

232 """int: Maximum 3D texture depth.""" 

233 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH) 2GG

234  

235 @property 

236 def maximum_texture3d_width_alternate(self) -> int: 

237 """int: Alternate maximum 3D texture width, 0 if no alternate maximum 3D texture size is supported.""" 

238 return self._get_cached_attribute( 27i

239 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 27i

240 ) 

241  

242 @property 

243 def maximum_texture3d_height_alternate(self) -> int: 

244 """int: Alternate maximum 3D texture height, 0 if no alternate maximum 3D texture size is supported.""" 

245 return self._get_cached_attribute( 2SF

246 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2SF

247 ) 

248  

249 @property 

250 def maximum_texture3d_depth_alternate(self) -> int: 

251 """int: Alternate maximum 3D texture depth, 0 if no alternate maximum 3D texture size is supported.""" 

252 return self._get_cached_attribute( 2RF

253 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2RF

254 ) 

255  

256 @property 

257 def maximum_texturecubemap_width(self) -> int: 

258 """int: Maximum cubemap texture width or height.""" 

259 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH) 2]i

260  

261 @property 

262 def maximum_texture1d_layered_width(self) -> int: 

263 """int: Maximum 1D layered texture width.""" 

264 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH) 2zG

265  

266 @property 

267 def maximum_texture1d_layered_layers(self) -> int: 

268 """int: Maximum layers in a 1D layered texture.""" 

269 return self._get_cached_attribute( 2LF

270 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2LF

271 ) 

272  

273 @property 

274 def maximum_texture2d_layered_width(self) -> int: 

275 """int: Maximum 2D layered texture width.""" 

276 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH) 2DG

277  

278 @property 

279 def maximum_texture2d_layered_height(self) -> int: 

280 """int: Maximum 2D layered texture height.""" 

281 return self._get_cached_attribute( 2NF

282 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2NF

283 ) 

284  

285 @property 

286 def maximum_texture2d_layered_layers(self) -> int: 

287 """int: Maximum layers in a 2D layered texture.""" 

288 return self._get_cached_attribute( 2OF

289 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2OF

290 ) 

291  

292 @property 

293 def maximum_texturecubemap_layered_width(self) -> int: 

294 """int: Maximum cubemap layered texture width or height.""" 

295 return self._get_cached_attribute( 2UF

296 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 2UF

297 ) 

298  

299 @property 

300 def maximum_texturecubemap_layered_layers(self) -> int: 

301 """int: Maximum layers in a cubemap layered texture.""" 

302 return self._get_cached_attribute( 2TF

303 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 2TF

304 ) 

305  

306 @property 

307 def maximum_surface1d_width(self) -> int: 

308 """int: Maximum 1D surface width.""" 

309 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH) 2.i

310  

311 @property 

312 def maximum_surface2d_width(self) -> int: 

313 """int: Maximum 2D surface width.""" 

314 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH) 2/i

315  

316 @property 

317 def maximum_surface2d_height(self) -> int: 

318 """int: Maximum 2D surface height.""" 

319 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT) 2vG

320  

321 @property 

322 def maximum_surface3d_width(self) -> int: 

323 """int: Maximum 3D surface width.""" 

324 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH) 2xG

325  

326 @property 

327 def maximum_surface3d_height(self) -> int: 

328 """int: Maximum 3D surface height.""" 

329 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT) 2;i

330  

331 @property 

332 def maximum_surface3d_depth(self) -> int: 

333 """int: Maximum 3D surface depth.""" 

334 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH) 2:i

335  

336 @property 

337 def maximum_surface1d_layered_width(self) -> int: 

338 """int: Maximum 1D layered surface width.""" 

339 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH) 2uG

340  

341 @property 

342 def maximum_surface1d_layered_layers(self) -> int: 

343 """int: Maximum layers in a 1D layered surface.""" 

344 return self._get_cached_attribute( 2HF

345 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2HF

346 ) 

347  

348 @property 

349 def maximum_surface2d_layered_width(self) -> int: 

350 """int: Maximum 2D layered surface width.""" 

351 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH) 2wG

352  

353 @property 

354 def maximum_surface2d_layered_height(self) -> int: 

355 """int: Maximum 2D layered surface height.""" 

356 return self._get_cached_attribute( 2IF

357 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 2IF

358 ) 

359  

360 @property 

361 def maximum_surface2d_layered_layers(self) -> int: 

362 """int: Maximum layers in a 2D layered surface.""" 

363 return self._get_cached_attribute( 2JF

364 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2JF

365 ) 

366  

367 @property 

368 def maximum_surfacecubemap_width(self) -> int: 

369 """int: Maximum cubemap surface width.""" 

370 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH) 2yG

371  

372 @property 

373 def maximum_surfacecubemap_layered_width(self) -> int: 

374 """int: Maximum cubemap layered surface width.""" 

375 return self._get_cached_attribute( 2KF

376 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2KF

377 ) 

378  

379 @property 

380 def maximum_surfacecubemap_layered_layers(self) -> int: 

381 """int: Maximum layers in a cubemap layered surface.""" 

382 return self._get_cached_attribute( 26i

383 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 26i

384 ) 

385  

386 @property 

387 def max_registers_per_block(self) -> int: 

388 """int: Maximum number of 32-bit registers available to a thread block.""" 

389 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK) 2,i

390  

391 @property 

392 def clock_rate(self) -> int: 

393 """int: Typical clock frequency in kilohertz.""" 

394 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLOCK_RATE) 2BeBoDH]HsF6k-G

395  

396 @property 

397 def texture_alignment(self) -> int: 

398 """int: Alignment requirement for textures.""" 

399 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT) 2}i

400  

401 @property 

402 def texture_pitch_alignment(self) -> int: 

403 """int: Pitch alignment requirement for textures.""" 

404 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT) 2~i

405  

406 @property 

407 def gpu_overlap(self) -> bool: 

408 """bool: Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use :attr:`~DeviceProperties.async_engine_count` instead.""" 

409 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_OVERLAP)) 2aG

410  

411 @property 

412 def multiprocessor_count(self) -> int: 

413 """int: Number of multiprocessors on device.""" 

414 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT) 2QGe

415  

416 @property 

417 def kernel_exec_timeout(self) -> bool: 

418 """bool: Specifies whether there is a run time limit on kernels.""" 

419 return bool(self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT)) 2_H

420  

421 @property 

422 def integrated(self) -> bool: 

423 """bool: Device is integrated with host memory.""" 

424 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_INTEGRATED)) 2fG

425  

426 @property 

427 def can_map_host_memory(self) -> bool: 

428 """bool: Device can map host memory into CUDA address space.""" 

429 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY)) 2@F

430  

431 @property 

432 def compute_mode(self) -> int: 

433 """int: Compute mode (See CUcomputemode for details).""" 

434 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_MODE) 2^H

435  

436 @property 

437 def concurrent_kernels(self) -> bool: 

438 """bool: Device can possibly execute multiple kernels concurrently.""" 

439 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS)) 2^F

440  

441 @property 

442 def ecc_enabled(self) -> bool: 

443 """bool: Device has ECC support enabled.""" 

444 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ECC_ENABLED)) 2{F

445  

446 @property 

447 def pci_bus_id(self) -> int: 

448 """int: PCI bus ID of the device.""" 

449 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_BUS_ID) 2{i

450  

451 @property 

452 def pci_device_id(self) -> int: 

453 """int: PCI device ID of the device.""" 

454 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) 2TG

455  

456 @property 

457 def pci_domain_id(self) -> int: 

458 """int: PCI domain ID of the device.""" 

459 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID) 2|i

460  

461 @property 

462 def tcc_driver(self) -> bool: 

463 """bool: Device is using TCC driver model.""" 

464 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TCC_DRIVER)) 2VG

465  

466 @property 

467 def memory_clock_rate(self) -> int: 

468 """int: Peak memory clock frequency in kilohertz.""" 

469 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE) 2`H

470  

471 @property 

472 def global_memory_bus_width(self) -> int: 

473 """int: Global memory bus width in bits.""" 

474 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH) 2}F

475  

476 @property 

477 def l2_cache_size(self) -> int: 

478 """int: Size of L2 cache in bytes.""" 

479 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE) 2+i

480  

481 @property 

482 def max_threads_per_multiprocessor(self) -> int: 

483 """int: Maximum resident threads per multiprocessor.""" 

484 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR) 2tGXFYFZF0F1F2F4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E

485  

486 @property 

487 def unified_addressing(self) -> bool: 

488 """bool: Device shares a unified address space with the host.""" 

489 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)) 2Xbb XG

490  

491 @property 

492 def compute_capability_major(self) -> int: 

493 """int: Major compute capability version number.""" 

494 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jvlMpNpwlxlylzlAlOp/n:nQdBdRdCdSdDdTdEdUdFdVdGdb Pp;n=n?n@n[nQpRp^n_n`n{n|n}n~naobocodoqjrjqnrn;jClDleoFlGlHlIlJlKl+k,k-k.k/k:k;k=k*l+l,lLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoWl'jckXldkekfkgkhkik(jBeBoDHCo%f'isF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b;e=e?eHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4m'd(d)d*dNd

495  

496 @property 

497 def compute_capability_minor(self) -> int: 

498 """int: Minor compute capability version number.""" 

499 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jvlMpNpwlxlylzlAlOp/n:nQdBdRdCdSdDdTdEdUdFdVdGdb Pp;n=n?n@n[nQpRp^n_n`n{n|n}n~naobocodoqjrjqnrn;jClDleoFlGlHlIlJlKl+k,k-k.k/k:k;k=k*l+l,lLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoWl'jckXldkekfkgkhkik(jBeBoDHCo%f]FsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b;e=e?eHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4m'd(d)d*dNd

500  

501 @property 

502 def global_l1_cache_supported(self) -> bool: 

503 """bool: Device supports caching globals in L1.""" 

504 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED)) 2|F

505  

506 @property 

507 def local_l1_cache_supported(self) -> bool: 

508 """bool: Device supports caching locals in L1.""" 

509 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED)) 2gG

510  

511 @property 

512 def max_shared_memory_per_multiprocessor(self) -> int: 

513 """int: Maximum shared memory available per multiprocessor in bytes.""" 

514 return self._get_cached_attribute( 2GFXFYFZF0F1F2F4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E

515 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2GFXFYFZF0F1F2F4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E

516 ) 

517  

518 @property 

519 def max_registers_per_multiprocessor(self) -> int: 

520 """int: Maximum number of 32-bit registers available per multiprocessor.""" 

521 return self._get_cached_attribute( 25i4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E

522 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 25i4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E

523 ) 

524  

525 @property 

526 def managed_memory(self) -> bool: 

527 """bool: Device can allocate managed memory on this system.""" 

528 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY)) 2geheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresetehGlk

529  

530 @property 

531 def multi_gpu_board(self) -> bool: 

532 """bool: Device is on a multi-GPU board.""" 

533 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD)) 2OG

534  

535 @property 

536 def multi_gpu_board_group_id(self) -> int: 

537 """int: Unique id for a group of devices on the same multi-GPU board.""" 

538 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID) 2PG

539  

540 @property 

541 def host_native_atomic_supported(self) -> bool: 

542 """bool: Link between the device and the host supports all native atomic operations.""" 

543 return bool( 2CF

544 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED) 2CF

545 ) 

546  

547 @property 

548 def single_to_double_precision_perf_ratio(self) -> int: 

549 """int: Ratio of single precision performance (in floating-point operations per second) to double precision performance.""" 

550 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO) 2kk

551  

552 @property 

553 def pageable_memory_access(self) -> bool: 

554 """bool: Device supports coherently accessing pageable memory without calling cudaHostRegister on it.""" 

555 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS)) 2SG

556  

557 @property 

558 def concurrent_managed_access(self) -> bool: 

559 """bool: Device can coherently access managed memory concurrently with the CPU.""" 

560 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS)) 2`d{d|d}d~daeCmYl:E;E=E?E@E[EgeheIeJeKeLeMeNeiejebe;G^dkeceOeledemeeePeQeReneoepeqeresete(i-G,e-e.eWKCH!J_l8kZl0l9k`l{lhjtj|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~Ejm9llmujvjwjnmompm+j,j-j

561  

562 @property 

563 def compute_preemption_supported(self) -> bool: 

564 """bool: Device supports compute preemption.""" 

565 return bool( 2yF

566 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED) 2yF

567 ) 

568  

569 @property 

570 def can_use_host_pointer_for_registered_mem(self) -> bool: 

571 """bool: Device can access host registered memory at the same virtual address as the CPU.""" 

572 return bool( 2dF

573 self._get_cached_attribute( 2dF

574 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 2dF

575 ) 

576 ) 

577  

578 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675) 

579  

580 @property 

581 def cooperative_launch(self) -> bool: 

582 """bool: Device supports launching cooperative kernels via cuLaunchCooperativeKernel.""" 

583 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH)) 2_Fe

584  

585 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675) 

586  

587 @property 

588 def max_shared_memory_per_block_optin(self) -> int: 

589 """int: Maximum optin shared memory per block.""" 

590 return self._get_cached_attribute( 2FF

591 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 2FF

592 ) 

593  

594 @property 

595 def pageable_memory_access_uses_host_page_tables(self) -> bool: 

596 """bool: Device accesses pageable memory via the host's page tables.""" 

597 return bool( 2kF

598 self._get_cached_attribute( 2kF

599 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 2kF

600 ) 

601 ) 

602  

603 @property 

604 def direct_managed_mem_access_from_host(self) -> bool: 

605 """bool: The host can directly access managed memory on the device without migration.""" 

606 return bool( 2eF

607 self._get_cached_attribute( 2eF

608 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 2eF

609 ) 

610 ) 

611  

612 @property 

613 def virtual_memory_management_supported(self) -> bool: 

614 """bool: Device supports virtual memory management APIs like cuMemAddressReserve, cuMemCreate, cuMemMap and related APIs.""" 

615 return bool( 2BlElOIL M N O xMP Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % @H[H' ( ) YKSe#MTe$MUe%MVe:MWe;MXeZKYeeKZe0K0e1K1e=M2e'M3e?M4e(M5e)M6e@M7e*M8e2K9elF!e+M#e~M$e%e'eaN(ebN)ecN*e=G+enIoIpIqI#J$JTibjmknkEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBkDkMkfe[jNk(k)k*kZiljEkFk

616 self._get_cached_attribute( 2BlElOIL M N O xMP Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % @H[H' ( ) YKSe#MTe$MUe%MVe:MWe;MXeZKYeeKZe0K0e1K1e=M2e'M3e?M4e(M5e)M6e@M7e*M8e2K9elF!e+M#e~M$e%e'eaN(ebN)ecN*e=G+enIoIpIqI#J$JTibjmknkEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBkDkMkfe[jNk(k)k*kZiljEkFk

617 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2BlElOIL M N O xMP Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % @H[H' ( ) YKSe#MTe$MUe%MVe:MWe;MXeZKYeeKZe0K0e1K1e=M2e'M3e?M4e(M5e)M6e@M7e*M8e2K9elF!e+M#e~M$e%e'eaN(ebN)ecN*e=G+enIoIpIqI#J$JTibjmknkEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBkDkMkfe[jNk(k)k*kZiljEkFk

618 ) 

619 ) 

620  

621 @property 

622 def handle_type_posix_file_descriptor_supported(self) -> bool: 

623 """bool: Device supports exporting memory to a posix file descriptor with cuMemExportToShareableHandle, if requested via cuMemCreate.""" 

624 return bool( 2, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S @ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEb@HFb[HGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbRiTbUbVbWbf g * +

625 self._get_cached_attribute( 2, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S @ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEb@HFb[HGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbRiTbUbVbWbf g * +

626 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 2, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S @ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEb@HFb[HGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbRiTbUbVbWbf g * +

627 ) 

628 ) 

629  

630 @property 

631 def handle_type_win32_handle_supported(self) -> bool: 

632 """bool: Device supports exporting memory to a Win32 NT handle with cuMemExportToShareableHandle, if requested via cuMemCreate.""" 

633 return bool( 2AF

634 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED) 2AF

635 ) 

636  

637 @property 

638 def handle_type_win32_kmt_handle_supported(self) -> bool: 

639 """bool: Device supports exporting memory to a Win32 KMT handle with cuMemExportToShareableHandle, if requested via cuMemCreate.""" 

640 return bool( 2gF

641 self._get_cached_attribute( 2gF

642 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 2gF

643 ) 

644 ) 

645  

646 @property 

647 def max_blocks_per_multiprocessor(self) -> int: 

648 """int: Maximum number of blocks per multiprocessor.""" 

649 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR) 2mG

650  

651 @property 

652 def generic_compression_supported(self) -> bool: 

653 """bool: Device supports compression of memory.""" 

654 return bool( 22i

655 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 22i

656 ) 

657  

658 @property 

659 def max_persisting_l2_cache_size(self) -> int: 

660 """int: Maximum L2 persisting lines capacity setting in bytes.""" 

661 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE) 2qG

662  

663 @property 

664 def max_access_policy_window_size(self) -> int: 

665 """int: Maximum value of CUaccessPolicyWindow.num_bytes.""" 

666 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE) 2iG

667  

668 @property 

669 def gpu_direct_rdma_with_cuda_vmm_supported(self) -> bool: 

670 """bool: Device supports specifying the GPUDirect RDMA flag with cuMemCreate.""" 

671 return bool( 2fF

672 self._get_cached_attribute( 2fF

673 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 2fF

674 ) 

675 ) 

676  

677 @property 

678 def reserved_shared_memory_per_block(self) -> int: 

679 """int: Shared memory reserved by CUDA driver per block in bytes.""" 

680 return self._get_cached_attribute( 2VF

681 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 2VF

682 ) 

683  

684 @property 

685 def sparse_cuda_array_supported(self) -> bool: 

686 """bool: Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays.""" 

687 return bool( 2WF

688 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED) 2WF

689 ) 

690  

691 @property 

692 def read_only_host_register_supported(self) -> bool: 

693 """bool: True if device supports using the cuMemHostRegister flag CU_MEMHOSTREGISTER_READ_ONLY to register memory that must be mapped as read-only to the GPU, False if not.""" 

694 return bool( 28i

695 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 28i

696 ) 

697  

698 @property 

699 def memory_pools_supported(self) -> bool: 

700 """bool: Device supports using the cuMemAllocAsync and cuMemPool family of APIs.""" 

701 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED)) 2XpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%n'n(n)n*n+n,n-n.n)F*F+F,F-F.FCe`dtg+d,dugBdvgwgxgygzgDe{dAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dTg/d:dUgDdVgWgXgYgZgFe}d0g;d=d1gEd2g3g4g5g6gGe~d7g?d@d8gFd9g!g#g$g%gHeae'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbh/F:F]nwpxpmnnnCmDmonpn/lqjrjypzpAp:l;l=lBp?l@l[l]lCpDp^lfochdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhqH5kYl7J`G8J9J, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEbFbGbkbI ' lbJ ( mbK ) HbIbJbKbLbMbNbObPbQbRbSbLGJhKhLh,e-e.eMhcF?I7kNhcjOhPhQhRhzoShWKCH!J_l8kZl0l9k`l{lhjsjtj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~E5hjm$k9l!llmijjjkjujvjwj6h#l$l%lnmompmAj+jBjCj,j-j7h@I3E8hTbUbVb9hWb!h#h$h%h'h(h)h*h+h,hdgegfggghga f g * + -h.h/h:h;higjgkglgmg=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqiriDj

702  

703 @property 

704 def gpu_direct_rdma_supported(self) -> bool: 

705 """bool: Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information).""" 

706 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED)) 2~F@j%k[j

707  

708 @property 

709 def gpu_direct_rdma_flush_writes_options(self) -> int: 

710 """int: The returned attribute shall be interpreted as a bitmask, where the individual bits are described by the CUflushGPUDirectRDMAWritesOptions enum.""" 

711 return self._get_cached_attribute( 23i

712 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 23i

713 ) 

714  

715 @property 

716 def gpu_direct_rdma_writes_ordering(self) -> int: 

717 """int: GPUDirect RDMA writes to the device do not need to be flushed for consumers within the scope indicated by the returned attribute. See CUGPUDirectRDMAWritesOrdering for the numerical values returned here.""" 

718 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING) 2)i

719  

720 @property 

721 def mempool_supported_handle_types(self) -> int: 

722 """int: Handle types supported with mempool based IPC.""" 

723 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES) 2MG

724  

725 @property 

726 def deferred_mapping_cuda_array_supported(self) -> bool: 

727 """bool: Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays.""" 

728 return bool( 2Qi

729 self._get_cached_attribute( 2Qi

730 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 2Qi

731 ) 

732 ) 

733  

734 @property 

735 def numa_config(self) -> int: 

736 """int: NUMA configuration of a device: value is of type CUdeviceNumaConfig enum.""" 

737 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_CONFIG) 2`i

738  

739 @property 

740 def numa_id(self) -> int: 

741 """int: NUMA node ID of the GPU memory.""" 

742 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_ID) 2RG

743  

744 @property 

745 def multicast_supported(self) -> bool: 

746 """bool: Device supports switch multicast and reduction operations.""" 

747 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED)) 2_i

748  

749 @property 

750 def surface_alignment(self) -> int: 

751 """int: Surface alignment requirement in bytes.""" 

752 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT) 2UG

753  

754 @property 

755 def async_engine_count(self) -> int: 

756 """int: Number of asynchronous engines.""" 

757 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT) 2#i

758  

759 @property 

760 def can_tex2d_gather(self) -> bool: 

761 """bool: True if device supports 2D texture gather operations, False if not.""" 

762 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER)) 2[F

763  

764 @property 

765 def maximum_texture2d_gather_width(self) -> int: 

766 """int: Maximum 2D texture gather width.""" 

767 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH) 2BG

768  

769 @property 

770 def maximum_texture2d_gather_height(self) -> int: 

771 """int: Maximum 2D texture gather height.""" 

772 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT) 2?i

773  

774 @property 

775 def stream_priorities_supported(self) -> bool: 

776 """bool: True if device supports stream priorities, False if not.""" 

777 return bool( 29i

778 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 29i

779 ) 

780  

781 @property 

782 def can_flush_remote_writes(self) -> bool: 

783 """bool: The CU_STREAM_WAIT_VALUE_FLUSH flag and the CU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES MemOp are supported on the device. See Stream Memory Operations for additional details.""" 

784 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES)) 2$i

785  

786 @property 

787 def host_register_supported(self) -> bool: 

788 """bool: Device supports host memory registration via cudaHostRegister.""" 

789 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED)) 2eG

790  

791 @property 

792 def timeline_semaphore_interop_supported(self) -> bool: 

793 """bool: External timeline semaphore interop is supported on the device.""" 

794 return bool( 2Si

795 self._get_cached_attribute( 2Si

796 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 2Si

797 ) 

798 ) 

799  

800 @property 

801 def cluster_launch(self) -> bool: 

802 """bool: Indicates device supports cluster launch.""" 

803 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH)) 2%i

804  

805 @property 

806 def can_use_64_bit_stream_mem_ops(self) -> bool: 

807 """bool: 64-bit operations are supported in cuStreamBatchMemOp and related MemOp APIs.""" 

808 return bool( 2wF

809 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS) 2wF

810 ) 

811  

812 @property 

813 def can_use_stream_wait_value_nor(self) -> bool: 

814 """bool: CU_STREAM_WAIT_VALUE_NOR is supported by MemOp APIs.""" 

815 return bool( 2xF

816 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR) 2xF

817 ) 

818  

819 @property 

820 def dma_buf_supported(self) -> bool: 

821 """bool: Device supports buffer sharing with dma_buf mechanism.""" 

822 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED)) 2Zp

823  

824 # Start of CUDA 12 device attributes 

825  

826 @property 

827 def ipc_event_supported(self) -> bool: 

828 """bool: Device supports IPC Events.""" 

829 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED)) 2*i

830  

831 @property 

832 def mem_sync_domain_count(self) -> int: 

833 """int: Number of memory domains the device supports.""" 

834 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT, default=1) 2KG

835  

836 @property 

837 def tensor_map_access_supported(self) -> bool: 

838 """bool: Device supports accessing memory using Tensor Map.""" 

839 return bool( 2!ikflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f

840 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 2!ikflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f

841 ) 

842  

843 @property 

844 def handle_type_fabric_supported(self) -> bool: 

845 """bool: Device supports exporting memory to a fabric handle with cuMemExportToShareableHandle() or requested with cuMemCreate().""" 

846 return bool( 2zF

847 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED) 2zF

848 ) 

849  

850 @property 

851 def unified_function_pointers(self) -> bool: 

852 """bool: Device supports unified function pointers.""" 

853 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS)) 2YG

854  

855 @property 

856 def mps_enabled(self) -> bool: 

857 """bool: Indicates if contexts created on this device will be shared via MPS.""" 

858 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MPS_ENABLED)) 2NG

859  

860 @property 

861 def host_numa_id(self) -> int: 

862 """int: NUMA ID of the host node closest to the device. Returns -1 when system does not support NUMA.""" 

863 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID, default=-1) 2:E;E?E@Eh i j nbk l m n o d p q r s t u v w x y z A B C D E F G H I J K dG9kZh/e0h1h2h3h:e4hag=jskCk

864  

865 @property 

866 def d3d12_cig_supported(self) -> bool: 

867 """bool: Device supports CIG with D3D12.""" 

868 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED)) 2`F

869  

870 @property 

871 def mem_decompress_algorithm_mask(self) -> int: 

872 """int: The returned value shall be interpreted as a bitmask, where the individual bits are described by the CUmemDecompressAlgorithm enum.""" 

873 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK) 2^i

874  

875 @property 

876 def mem_decompress_maximum_length(self) -> int: 

877 """int: The returned value is the maximum length in bytes of a single decompress operation that is allowed.""" 

878 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH) 2JG

879  

880 @property 

881 def vulkan_cig_supported(self) -> bool: 

882 """bool: Device supports CIG with Vulkan.""" 

883 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED)) 2ZG

884  

885 @property 

886 def gpu_pci_device_id(self) -> int: 

887 """int: The combined 16-bit PCI device ID and 16-bit PCI vendor ID. 

888  

889 Returns 0 if the driver does not support this query. 

890 """ 

891 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID) 2bG

892  

893 @property 

894 def gpu_pci_subsystem_id(self) -> int: 

895 """int: The combined 16-bit PCI subsystem ID and 16-bit PCI subsystem vendor ID. 

896  

897 Returns 0 if the driver does not support this query. 

898 """ 

899 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID) 2cG

900  

901 @property 

902 def host_numa_virtual_memory_management_supported(self) -> bool: 

903 """bool: Device supports HOST_NUMA location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs.""" 

904 return bool( 2hFCk

905 self._get_cached_attribute( 2hFCk

906 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2hFCk

907 ) 

908 ) 

909  

910 @property 

911 def host_numa_memory_pools_supported(self) -> bool: 

912 """bool: Device supports HOST_NUMA location with the cuMemAllocAsync and cuMemPool family of APIs.""" 

913 return bool( 2;F=FBo3p4prHsHtHuHvHwHtFuFvF?F5pxH{GyHDF/e:eag

914 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 2;F=FBo3p4prHsHtHuHvHwHtFuFvF?F5pxH{GyHDF/e:eag

915 ) 

916  

917 # Start of CUDA 13 device attributes 

918  

919 @property 

920 def host_numa_multinode_ipc_supported(self) -> bool: 

921 """bool: Device supports HOST_NUMA location IPC between nodes in a multi-node system.""" 

922 return bool( 2EF

923 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED) 2EF

924 ) 

925  

926 @property 

927 def host_memory_pools_supported(self) -> bool: 

928 """bool: Device supports HOST location with the cuMemAllocAsync and cuMemPool family of APIs.""" 

929 IF CUDA_CORE_BUILD_MAJOR < 13: 

930 return False 

931 ELSE: 

932 return bool( 2jkh i j nbk l m n o d p q r s t u v w x y z A B C D E F G H I J K BFdjdmZhok/eem0hfm1hgm2hhm3hpk:eim4hkmqkmmxjyjzjqmrmsmejfjgj3ErkXKUiagAoaF=jskbF

933 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 2jkh i j nbk l m n o d p q r s t u v w x y z A B C D E F G H I J K BFdjdmZhok/eem0hfm1hgm2hhm3hpk:eim4hkmqkmmxjyjzjqmrmsmejfjgj3ErkXKUiagAoaF=jskbF

934 ) 

935  

936 @property 

937 def host_virtual_memory_management_supported(self) -> bool: 

938 """bool: Device supports HOST location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs.""" 

939 IF CUDA_CORE_BUILD_MAJOR < 13: 

940 return False 

941 ELSE: 

942 return bool( 2iF0p1p2p

943 self._get_cached_attribute( 2iF0p1p2p

944 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2iF0p1p2p

945 ) 

946 ) 

947  

948 @property 

949 def host_alloc_dma_buf_supported(self) -> bool: 

950 """bool: Device supports page-locked host memory buffer sharing with dma_buf mechanism.""" 

951 IF CUDA_CORE_BUILD_MAJOR < 13: 

952 return False 

953 ELSE: 

954 return bool( 24i

955 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 24i

956 ) 

957  

958 @property 

959 def only_partial_host_native_atomic_supported(self) -> bool: 

960 """bool: Link between the device and the host supports only some native atomic operations.""" 

961 IF CUDA_CORE_BUILD_MAJOR < 13: 

962 return False 

963 ELSE: 

964 return bool( 2jF

965 self._get_cached_attribute( 2jF

966 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 2jF

967 ) 

968 ) 

969  

970  

971class Device: 

972 """Represent a GPU and act as an entry point for cuda.core features. 

973  

974 This is a singleton object that helps ensure interoperability 

975 across multiple libraries imported in the process to both see 

976 and use the same GPU device. 

977  

978 While acting as the entry point, many other CUDA resources can be 

979 allocated such as streams and buffers. Any :obj:`~_context.Context` dependent 

980 resource created through this device, will continue to refer to 

981 this device's context. 

982  

983 Newly returned :obj:`~_device.Device` objects are thread-local singletons 

984 for a specified device. 

985  

986 A pickled :obj:`~_device.Device` names its device by UUID. Unpickling 

987 returns the device with that UUID in the receiving process, whatever its 

988 ordinal is there, and raises ``RuntimeError`` if that device is not 

989 visible. The pickled form is for processes on the same machine. 

990  

991 Note 

992 ---- 

993 Will not initialize the GPU. 

994  

995 Parameters 

996 ---------- 

997 device_id : int, optional 

998 Device ordinal to return a :obj:`~_device.Device` object for. 

999 Default value of `None` return the currently used device. 

1000  

1001 """ 

1002 __slots__ = ( 

1003 "_device_id", 

1004 "_memory_resource", 

1005 "_has_inited", 

1006 "_properties", 

1007 "_resources", 

1008 "_uuid", 

1009 "_context", 

1010 "__weakref__", 

1011 ) 

1012  

1013 def __new__(cls, device_id: Device | int | None = None) -> Device: 

1014 if isinstance(device_id, Device): 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehqNfhrNghsNhhtNihuNjhvNkhwNlhxNmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuqHiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSu7JTu`GUu8JVu9JWuOIXuFoGoHoIoJoKoLoMoSp, h L qL- yNi M Hp. ;Fj N {L/ =FnbO An: zNk xMP XQpb; l Q 7Pqb= m R YQrb? n S ZQIhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEb@HFb[HGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) YKSe#MTe$MUe%MVe:MWe;MXeZKYeeKZe0K0e1K1eQo=M2e'M3e?M4e(M5e)M6e@M7e*M8e2K9elF!e+M#e~M$e#Q%e$Q'eaN(ebN)ecN*e=G+eRoHbSoIbnIJboIKb(LLb)LMbpINbqIObtLPbuLQb#JRb$JSbYuZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$uQM%uRM'u3F(u)uTo.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=J4F*uFH?J@JZIWo+uvm0QJh,u1QKh+L-u2QLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWk8PMh`oAmcF;x?I=x7k?xTMNhcj@x3QOh9PPh4QQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@ygN6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%mAN7h3kjzkz|o}olzmz@Inz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~oBN8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-zCN~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITb[MUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnCwMoC=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E

1015 return device_id 2wpxp/lBlqjrjypzpAp:l;l=lBp?lEl@l[l]lCpDp^lqNrNsNtNuNvNwNxN+k,k-k.k/k:k;k=kqH5k7J`G8J9JOI, L qL- yNM . N / O An: zNxMP XQ; Q 7P= R YQ? S ZQ@ T [ U ] V .jW ^ _ ` { | } ~ abbbcbdbebX Y Z 0 1 2 3 4 5 6 7 8 fb9 gb! hb# ib$ jb% rLsL@H[Hkb' lb( mb) YK#M$M%M:M;MZKeK0K1K=M'M?M(M)M@M*M2KlF+M~M#Q$QaNbNcN=GRoSonIoI(L)LpIqItLuL#J$J0Q1Q2Qbj8P?I7kTMcj3Q9P4QUMVMmknksj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh5h$k!lijjjkjgN#l$l%lAjBjCjAN@IBNEpFpGptk;eukvk@jViWiXi=e?eYiwkxkykzkAkBk0p1p2I3I2pCk4IDkMkfe[jNk(k)k*kZiljEkFkQLDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJLI[MMINIf g

1016  

1017 Device_ensure_cuda_initialized() 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSbYuZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$uQM%uRM'u3F(u)uTo.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=J4F*uFH?J@JZIWo+uvmJh,uKh+L-uLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAmcF;x=x7k?xTMNhcj@xOhPhQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~o8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-zCN~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnCwMoC=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E

1018 device_id = Device_resolve_device_id(device_id) 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSbYuZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$uQM%uRM'u3F(u)uTo.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=J4F*uFH?J@JZIWo+uvmJh,uKh+L-uLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAmcF;x=x7k?xTMNhcj@xOhPhQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~o8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-zCN~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnCwMoC=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E

1019 devices = Device_ensure_tls_devices(cls) 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSbYuZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$uQM%uRM'u3F(u)uTo.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=J4F*uFH?J@JZIWo+uvmJh,uKh+L-uLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAmcF;x=x7k?xTMNhcj@xOhPhQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~o8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-z~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnCwMoC=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E

1020  

1021 try: 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSbYuZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$uQM%uRM'u3F(u)uTo.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=J4F*uFH?J@JZIWo+uvmJh,uKh+L-uLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAmcF;x=x7k?xTMNhcj@xOhPhQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~o8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-z~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnCwMoC=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E

1022 return devices[device_id] 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSbYuZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$uQM%uRM'u3F(u)uTo.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=J4F*uFH?J@JZIWo+uvmJh,uKh+L-uLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAmcF;x=x7k?xTMNhcj@xOhPhQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~o8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-z~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnCwMoC=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E

1023 except IndexError: 2QMRMCL

1024 raise ValueError(f"device_id must be within [0, {len(devices)}), got {device_id}") from None 2QMRMCL

1025  

1026 def _check_context_initialized(self) -> None: 

1027 if not self._has_inited: 2[I]I3K^I_I`I{I|I}ITI~IaJbJcJdJql4K5K6K7K8KeJ_j`jEjFjUIGj{jfJgJHj|jrl}jhJIjsl9KiJJjKjVItljJ~jakbkkJlJulLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j!K#K$K%K'K!n#n$n%nvlmJ(K)KwlxlylzlAl'n(n)n*n+n,n-n.n+d,d-d.d/d:d;d=d?d@d[d]db !P]n*KnJ+K,K-K.KfKmnoJpJqJnnrJCmDmgKhKonpniK/lBlqjrj;jClDl:l;l=l?lEl@l[l]l^l/K:KFlGlHlIlJlKlfonjojpjqNrNsNtNuNvNwNxNqOrOsO+k,k-k.k/k:k;k=k*l+l,lhNiNjN%J'J(J#PLl;KsJ#j=K?KMlNlOl@K[K]K^K_KjKkKlKmK$PmF`KtJ$j{K|KPlQlRl}K~KaLbLcL%PdLuJ%jeLfLSlTlUlgLhLiLjLkL'PVl?G@G)JqHnFoFpFWl(P)PlLmL'jckXlnLdkekfkrIsngkhkik(j=L'f(f?L)f[G?k]G@k*f+f[kDN,fEN-f.f@L/fqF:f[L;f]k^k_krF]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelfltOglhl*Pil+Pjlkl,PlluOmlnlolplvOnKwOxO;GoKpK-P.PoLpLqKrKyOzOAOBOCOEHDOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0OBe1OBo2ODH3O/P:P;P=P?P@P[P]PFN^P_P4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRPSPTPUPVPWPXPYPZPvLwLxLyLzLALOdPd$fsKBL3F)u4FoO+L'LGN`PyJQksF/juK]jzJDLELFLGLHLIL6kJLKLLLMLNLOLPLIkvKwKxKyKzKAKBKCKDKEKFKGK{P,L_GRk:j2E?H-GtIBnuIvIwIxIyIzICnAIBICIDIDnEIFIGIHIIIJIKIEne lkbjJkKkLkwexeyeze|PHN}PINGkHkSkTkUkymzm~PaQJNbQKNcQdQLNMNeQfQgQNNhQONPNQNRNSNTNUNVNWNiQXNYNZN0NjQ1N2NkQlQmQnQ3NoQ4NpQqQ5N6NrQsQtQ7NuQ8N9N!N#N$N%N'N(N)NvQ*N+N,N-NwQ.N/NxQyQzQAQ:NBQ;NCQDQ=N?NEQFQGQ@NHQ[N]N^N_N`N{N|N}N~NIQaObOcOdOJQeOfOKQLQMQVkWkcjXkYkZk0k1k2kCHhjsjtjdjijjjkjujvjwjxjyjzjgNAj+jejBjCj,j-jfjgjAN3kNQUiagAoBNOQBJCJ;eViWiXi=e?eYifeZiljAe0i1i,MDi'mFnEiGn(m)m*mHnFiInGiJn+m,m-mKnHi-l.m/m:mLna f g * + IiMn;m=m?mNnJi.l@m[m]mOnKiPn^m_m`mQnLiRn{m|m}mSnMiTn~manbnUnNiVncndnenWnOiXnfngnhnYnPiZninjnkn0n_d5FRLUJSL~JTLULVLWLaKXLYLZL0L1L2L3L4L5L6L7L8L9L!LzH#LbK$L%L0G1G2G3G4G5Gmj5I6I7I8I9IVJHKIKJKKKLKMK8nWJNKLpXJYJOKZJpH0JPKQKRK1JgOhOSK4kAH!I#IUp$I%IBHNdcK'IVp(IWp)I*I+I,IdK^j*G+GPQ

1028 raise CUDAError( 2$f

1029 f"Device {self._device_id} is not yet initialized, perhaps you forgot to call .set_current() first?" 2$f

1030 ) 

1031 Context_check_open(self._context) 2[I]I3K^I_I`I{I|I}ITI~IaJbJcJdJql4K5K6K7K8KeJ_j`jEjFjUIGj{jfJgJHj|jrl}jhJIjsl9KiJJjKjVItljJ~jakbkkJlJulLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j!K#K$K%K'K!n#n$n%nvlmJ(K)KwlxlylzlAl'n(n)n*n+n,n-n.n+d,d-d.d/d:d;d=d?d@d[d]db !P]n*KnJ+K,K-K.KfKmnoJpJqJnnrJCmDmgKhKonpniK/lBlqjrj;jClDl:l;l=l?lEl@l[l]l^l/K:KFlGlHlIlJlKlfonjojpjqNrNsNtNuNvNwNxNqOrOsO+k,k-k.k/k:k;k=k*l+l,lhNiNjN%J'J(J#PLl;KsJ#j=K?KMlNlOl@K[K]K^K_KjKkKlKmK$PmF`KtJ$j{K|KPlQlRl}K~KaLbLcL%PdLuJ%jeLfLSlTlUlgLhLiLjLkL'PVl?G@G)JqHnFoFpFWl(P)PlLmL'jckXlnLdkekfkrIsngkhkik(j=L'f(f?L)f[G?k]G@k*f+f[kDN,fEN-f.f@L/fqF:f[L;f]k^k_krF]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelfltOglhl*Pil+Pjlkl,PlluOmlnlolplvOnKwOxO;GoKpK-P.PoLpLqKrKyOzOAOBOCOEHDOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0OBe1OBo2ODH3O/P:P;P=P?P@P[P]PFN^P_P4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRPSPTPUPVPWPXPYPZPvLwLxLyLzLALOdPd$fsKBL3F)u4FoO+L'LGN`PyJQksF/juK]jzJDLELFLGLHLIL6kJLKLLLMLNLOLPLIkvKwKxKyKzKAKBKCKDKEKFKGK{P,L_GRk:j2E?H-GtIBnuIvIwIxIyIzICnAIBICIDIDnEIFIGIHIIIJIKIEne lkbjJkKkLkwexeyeze|PHN}PINGkHkSkTkUkymzm~PaQJNbQKNcQdQLNMNeQfQgQNNhQONPNQNRNSNTNUNVNWNiQXNYNZN0NjQ1N2NkQlQmQnQ3NoQ4NpQqQ5N6NrQsQtQ7NuQ8N9N!N#N$N%N'N(N)NvQ*N+N,N-NwQ.N/NxQyQzQAQ:NBQ;NCQDQ=N?NEQFQGQ@NHQ[N]N^N_N`N{N|N}N~NIQaObOcOdOJQeOfOKQLQMQVkWkcjXkYkZk0k1k2kCHhjsjtjdjijjjkjujvjwjxjyjzjgNAj+jejBjCj,j-jfjgjAN3kNQUiagAoBNOQBJCJ;eViWiXi=e?eYifeZiljAe0i1i,MDi'mFnEiGn(m)m*mHnFiInGiJn+m,m-mKnHi-l.m/m:mLna f g * + IiMn;m=m?mNnJi.l@m[m]mOnKiPn^m_m`mQnLiRn{m|m}mSnMiTn~manbnUnNiVncndnenWnOiXnfngnhnYnPiZninjnkn0n_d5FRLUJSL~JTLULVLWLaKXLYLZL0L1L2L3L4L5L6L7L8L9L!LzH#LbK$L%L0G1G2G3G4G5Gmj5I6I7I8I9IVJHKIKJKKKLKMK8nWJNKLpXJYJOKZJpH0JPKQKRK1JgOhOSK4kAH!I#IUp$I%IBHNdcK'IVp(IWp)I*I+I,IdK^j*G+GPQ

1032  

1033  

1034 @classmethod 

1035 def get_all_devices(cls) -> tuple[Device, ...]: 

1036 """ 

1037 Query the available device instances. 

1038  

1039 Returns 

1040 ------- 

1041 tuple of Device 

1042 A tuple containing instances of available devices. 

1043 """ 

1044 return cls._get_all_devices_from_cuda_driver() 2DoEo^dFoGoHoIoJoKoLoMoNoOoPoQo=G]M6F^M_M`M7F|L8FXI,GToTKUo*LCLVoiOoNZIWoXo2Jymzm[o]o0I1I^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqpDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ-lrpUKVK.lspDj3J4J5J6JtpjOkOlOmOnOupvp

1045  

1046 @classmethod 

1047 def _get_all_devices_from_cuda_driver(cls): 

1048 Device_ensure_cuda_initialized() 2DoEo^dFoGoHoIoJoKoLoMoNoOoPoQo=G]M6F^M_M`M7F|L8FXI,GToTKUo*LCLVoiOoNZIWoXo2Jymzm[o]o0I1I^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqpDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ-lrpUKVK.lspDj3J4J5J6JtpjOkOlOmOnOupvp

1049 return tuple(Device_ensure_tls_devices(cls)) 2DoEo^dFoGoHoIoJoKoLoMoNoOoPoQo=G]M6F^M_M`M7F|L8FXI,GToTKUo*LCLVoiOoNZIWoXo2Jymzm[o]o0I1I^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqpDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ-lrpUKVK.lspDj3J4J5J6JtpjOkOlOmOnOupvp

1050  

1051 def to_system_device(self) -> 'cuda.core.system.Device': 

1052 """ 

1053 Get the corresponding :class:`cuda.core.system.Device` (which is used 

1054 for NVIDIA Management Library (NVML) access) for this 

1055 :class:`cuda.core.Device` (which is used for CUDA access). 

1056  

1057 The devices are mapped to one another by their UUID. 

1058  

1059 Returns 

1060 ------- 

1061 cuda.core.system.Device 

1062 The corresponding system-level device instance used for NVML access. 

1063 """ 

1064 from cuda.core.system import Device as SystemDevice 2]M6F^M_M`M7F8FdNeN-M

1065 return SystemDevice(uuid=self.uuid) 2]M6F^M_M`M7F8FdNeN-M

1066  

1067 @property 

1068 def device_id(self) -> int: 

1069 """Return device ordinal.""" 

1070 return self._device_id 2XpYpCe`dDe{dEe|dFe}dGe~dHeaewpxpDm/lBlqjrjqnrn;jypzpAp:l;l=lBp?lEl@l[l]lCpDp^lnjojpjqNrNsNtNuNvNwNxNqOrOsO+k,k-k.k/k:k;k=k*l+l,lhNiNjN%J'J(J;L-QmF?G@G)JqHnFoFpFsn5k'f(f)f[G]G*f+f{H,f-f.f/fqF:f;f=ErF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~H[EvOnK}L8M/E-IsI.I.QwOxO;GoKpK9MqKrK7J`G8J9JOI, qL- yN. 0P/ 1PAn: zNxMXQ; 7P= YQ? ZQ@ DH[ .M] /M.j^ _ ` { | } ~ abbbcbdbebQQ%QRQ'QSQ(Qfb2Pgb3Phb4Pib5PjbrLsL@H[HkbTQlbUQmbVQYK#M$M%M:M;MZKeK0K1K=M'M?M(M)M@M*M2KlF+M=GRoSonIoI(L)LpIqItLuL%fOdPd$f,G3F*LCLoN4FFH?Jvm0Q1Q+L2QvKwKhMxKyKzKAKBKiMjMCKkMDKEKlMmMnMoMpMqMFKGKrMsM,L_GRk:j2E!MBnCnDnEnbjwexeyezeymzm8PcF?I7kTMcj3Q9P4QUMVMmknktMCH!J0lsjtj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh5h$k!lijjjkjgN#l$l%lAjBjCjAN@IBNBJCJEpFpGptk;e?jukvk@j'kViWiXi=e?eYiwkxkykzkAkBkDkfe[jZiljEkFkQLtmumuMvMAe0i1i4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.EDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJLI[MMINIDiEiFiGiHia f g IiJiKiLiMiNiOiPi_d5FzH0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/Q/H+G:H;H=H

1071  

1072 @property 

1073 def pci_bus_id(self) -> str: 

1074 """Return a PCI Bus Id string for this device.""" 

1075 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 2|L?J-M

1076 return bus_id[:12].decode() 2|L?J-M

1077  

1078 def can_access_peer(self, peer: Device | int) -> bool: 

1079 """Check if this device can access memory from the specified peer device. 

1080  

1081 Queries whether peer-to-peer memory access is supported between this 

1082 device and the specified peer device. 

1083  

1084 Parameters 

1085 ---------- 

1086 peer : Device | int 

1087 The peer device to check accessibility to. Can be a :obj:`~_device.Device` object or device ID. 

1088 """ 

1089 peer = Device(peer) 

1090 cdef int d1 = <int> self.device_id 

1091 cdef int d2 = <int> peer.device_id 

1092 if d1 == d2: 

1093 return True 

1094 cdef int value = 0 

1095 with nogil: 

1096 HANDLE_RETURN(cydriver.cuDeviceCanAccessPeer(&value, d1, d2)) 

1097 return bool(value) 

1098  

1099 @property 

1100 def uuid(self) -> str: 

1101 """Return a UUID for the device. 

1102  

1103 Returns 16-octets identifying the device. If the device is in 

1104 MIG mode, returns its MIG UUID which uniquely identifies the 

1105 subscribed MIG compute instance. 

1106  

1107 Note 

1108 ---- 

1109 MIG UUID is only returned when device is in MIG mode and the 

1110 driver is older than CUDA 11.4. 

1111  

1112 The UUID is cached after first access to avoid repeated CUDA API calls. 

1113  

1114 """ 

1115 cdef cydriver.CUuuid uuid 

1116 cdef cydriver.CUdevice dev 

1117 cdef bytes uuid_b 

1118 cdef str uuid_hex 

1119  

1120 if self._uuid is None: 2/E-IsI.ISp, 5Qh 6QL qL- yNi M Hp. ;Fj 0PN {L/ =Fnb1PO An: zNk xMP pb; l Q qb= m R rb? n S Be@ o DHT sbtbubvbwbxbybzbAbBbCbOk[ d .MU Pk] p /MV .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr s t u v w x y z A B C X QQY Z 7Q0 1 RQ2 3 8Q4 5 SQ6 7 9Q8 IpfbtFD 2P9 WQgbuFE 3P! JphbvFF 4P# Kpib?FG 5P$ WIjbH % rLDbsLEb@HFb[HGbfMkbI TQ' gMlbJ UQ( TpmbK VQ) YKZK0K1K2K=GRoHbSoIbnIJboIKb(LLb)LMbpINbqIObtLPbuLQbRbSb]M6F^M_M`M7F|L8FdNeNvJYIwJTKxJ-MvmThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskLITbUbMIVbNIWbkNUKVKf g * + lNmN{M|M

1121 dev = self._device_id 2/E-IsI.ISp, h L - i M Hp. j N / O An: k P pb; l Q qb= m R rb? n S Be@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ jbH % DbEbFbGbkbI ' lbJ ( TpmbK ) YKZK0K1K2K=GRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7F|L8FdNeNvJYIwJTKxJ-MvmThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskTbUbVbWbkNUKVKf g * + lNmN{M|M

1122 with nogil: 2/E-IsI.ISp, h L - i M Hp. j N / O An: k P pb; l Q qb= m R rb? n S Be@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ jbH % DbEbFbGbkbI ' lbJ ( TpmbK ) YKZK0K1K2K=GRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7F|L8FdNeNvJYIwJTKxJ-MvmThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskTbUbVbWbkNUKVKf g * + lNmN{M|M

1123 IF CUDA_CORE_BUILD_MAJOR == 12: 

1124 HANDLE_RETURN(cydriver.cuDeviceGetUuid_v2(&uuid, dev)) 

1125 ELSE: # 13.0+ 

1126 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 2/E-IsI.ISp, h L - i M Hp. j N / O An: k P pb; l Q qb= m R rb? n S Be@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ jbH % DbEbFbGbkbI ' lbJ ( TpmbK ) YKZK0K1K2K=GRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7F|L8FdNeNvJYIwJTKxJ-MvmThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskTbUbVbWbkNUKVKf g * + lNmN{M|M

1127 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 2/E-IsI.ISp, h L - i M Hp. j N / O An: k P pb; l Q qb= m R rb? n S Be@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ jbH % DbEbFbGbkbI ' lbJ ( TpmbK ) YKZK0K1K2K=GRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7F|L8FdNeNvJYIwJTKxJ-MvmThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskTbUbVbWbkNUKVKf g * + lNmN{M|M

1128 uuid_hex = uuid_b.hex() 2/E-IsI.ISp, h L - i M Hp. j N / O An: k P pb; l Q qb= m R rb? n S Be@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ jbH % DbEbFbGbkbI ' lbJ ( TpmbK ) YKZK0K1K2K=GRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7F|L8FdNeNvJYIwJTKxJ-MvmThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskTbUbVbWbkNUKVKf g * + lNmN{M|M

1129 # 8-4-4-4-12 

1130 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 2/E-IsI.ISp, h L - i M Hp. j N / O An: k P pb; l Q qb= m R rb? n S Be@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ jbH % DbEbFbGbkbI ' lbJ ( TpmbK ) YKZK0K1K2K=GRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7F|L8FdNeNvJYIwJTKxJ-MvmThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskTbUbVbWbkNUKVKf g * + lNmN{M|M

1131 return self._uuid 2/E-IsI.ISp, 5Qh 6QL qL- yNi M Hp. ;Fj 0PN {L/ =Fnb1PO An: zNk xMP pb; l Q qb= m R rb? n S Be@ o DHT sbtbubvbwbxbybzbAbBbCbOk[ d .MU Pk] p /MV .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr s t u v w x y z A B C X QQY Z 7Q0 1 RQ2 3 8Q4 5 SQ6 7 9Q8 IpfbtFD 2P9 WQgbuFE 3P! JphbvFF 4P# Kpib?FG 5P$ WIjbH % rLDbsLEb@HFb[HGbfMkbI TQ' gMlbJ UQ( TpmbK VQ) YKZK0K1K2K=GRoHbSoIbnIJboIKb(LLb)LMbpINbqIObtLPbuLQbRbSb]M6F^M_M`M7F|L8FdNeNvJYIwJTKxJ-MvmThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskLITbUbMIVbNIWbkNUKVKf g * + lNmN{M|M

1132  

1133 @property 

1134 def name(self) -> str: 

1135 """Return the device name.""" 

1136 # Use 256 characters to be consistent with CUDA Runtime 

1137 cdef int LENGTH = 256 2/EeK^GFHnN

1138 cdef bytes name = bytes(LENGTH) 2/EeK^GFHnN

1139 cdef char* name_ptr = name 2/EeK^GFHnN

1140 cdef cydriver.CUdevice this_dev = self._device_id 2/EeK^GFHnN

1141 with nogil: 2/EeK^GFHnN

1142 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2/EeK^GFHnN

1143 name = name.split(b"\0")[0] 2/EeK^GFHnN

1144 return name.decode() 2/EeK^GFHnN

1145  

1146 @property 

1147 def properties(self) -> DeviceProperties: 

1148 """Return a :obj:`~_device.DeviceProperties` class with information about the device.""" 

1149 if self._properties is None: 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe;G^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k xMP pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) YKSe#MTe$MUe%MVe:MWe;MXeZKYeeKZe0K0e1K1e=M2e'M3e?M4e(M5e)M6e@M7e*M8e2K9elF!e+M#e~M$e%e'eaN(ebN)ecN*e=G+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%ftK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byezeAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfTJob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd

1150 self._properties = DeviceProperties._init(self._device_id) 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSb%f#i$i%i'i(iQiZp2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd

1151  

1152 return self._properties 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp9F!F#F$F%F'Fngogpgqgrgsg(F!n#n$n%nvlMpNpwlxlylzlAl'n(n)n*n+n,n-n.nOp)F*F+F,F-F.F/n:nCe`dQdtg+d,dugBdvgwgxgygzgDe{dRdAg-d.dBgCdCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgDdVgWgXgYgZgFe}dTd0g;d=d1gEd2g3g4g5g6gGe~dUd7g?d@d8gFd9g!g#g$g%gHeaeVd'g[d]d(gGd)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhb Pp/F;n=n?n@n:F[nQp]nRp^n_n`n{n|n}nwp~naobocodoxpmnnnCmDmonpn/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leoFlGlHlIlJlKlfochdhehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDhEhFhGhHhLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoqHWl'jckXldkekfkgkhkik(j5kYljk:E;E=E?E@E[EgeheIeJeKeLeMeNeieEmjebe;G^dkeceOeledemeeePeQeReneoepeqeresete7J`G8J9JOI, h L - i M . ;Fj N / =FnbO : k xMP pb; l Q qb= m R rb? n S IhBe@ Boo DHT sbtbubvbwbxbybzbAbBbCb[ 3pd U ] 4pp V .jq W ^ _ ` { | } ~ abbbcbdbebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 fbtFD 9 gbuFE ! hbvFF # ib?FG $ jb5pH % DbEb@HFb[HGbkbxHI ' lb{GJ ( mbyHK ) YKSe#MTe$MUe%MVe:MWe;MXeZKYeeKZe0K0e1K1e=M2e'M3e?M4e(M5e)M6e@M7e*M8e2K9elF!e+M#e~M$e%e'eaN(ebN)ecN*e=G+eHbIbnIJboIKbLbMbpINbqIObPbQb#JRb$JSbCo%ftK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajJhKhLhsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byezeAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eMhcF?I7kNhcjOhPhQhRhzoShmknkWKCH!J_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj6h#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj7h@I3ErkXKUiagAoaF=jskbF8hEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2pCkDkMkfe[jNk(k)k*kZiljEkFkHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWb{c!hWd#h$h|cXd%h'h}c~c(hYd)h*hadZd+h,hbddgJdegfgcdKdgghgdda f g * + edfd-h0d.h/hgd1d:h;hhdidjdkdigLdjgkgldMdlgmgmd=h2d?h@hnd3d[h]hod^h4d_h`hpd5d{h|hqd}h6d~haird7dbicisddi8deifitd9dgihiudii!djikivd#dlimiwdxdni$doipiyd%dqirizdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfTJob0m1m2m3m4mDjkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWfmjXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fNd

1153  

1154 @property 

1155 def resources(self) -> DeviceResources: 

1156 """Return the hardware resource query namespace for this device.""" 

1157 if self._resources is None: 2b YosiZo0otic HdIduiviwixiyiziAiBi1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oCi@o4k

1158 self._resources = DeviceResources._init(self._device_id) 2b YosiZo0otic HdIduiviwixiyiziAiBi1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oCi@o4k

1159 return self._resources 2b YosiZo0otic HdIduiviwixiyiziAiBi1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oCi@o4k

1160  

1161 @property 

1162 def compute_capability(self) -> ComputeCapability: 

1163 """Return a named tuple with 2 fields: major and minor.""" 

1164 cdef DeviceProperties prop = self.properties 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jvlMpNpwlxlylzlAlOp/n:nQdBdRdCdSdDdTdEdUdFdVdGdb Pp;n=n?n@n[nQpRp^n_n`n{n|n}n~naobocodoqjrjqnrn;jClDleoFlGlHlIlJlKl+k,k-k.k/k:k;k=k*l+l,lLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoWl'jckXldkekfkgkhkik(jBeBoDHCo%fsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byezeAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b;e=e?eHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRc_JSc`JTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c{J(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfTJob0m1m2m3m4m'd(d)d*dNd

1165 cached = prop._cache.get("compute_capability") 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jvlMpNpwlxlylzlAlOp/n:nQdBdRdCdSdDdTdEdUdFdVdGdb Pp;n=n?n@n[nQpRp^n_n`n{n|n}n~naobocodoqjrjqnrn;jClDleoFlGlHlIlJlKl+k,k-k.k/k:k;k=k*l+l,lLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoWl'jckXldkekfkgkhkik(jBeBoDHCo%fsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byezeAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b;e=e?eHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRc_JSc`JTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c{J(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfTJob0m1m2m3m4m'd(d)d*dNd

1166 if cached is not None: 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jvlMpNpwlxlylzlAlOp/n:nQdBdRdCdSdDdTdEdUdFdVdGdb Pp;n=n?n@n[nQpRp^n_n`n{n|n}n~naobocodoqjrjqnrn;jClDleoFlGlHlIlJlKl+k,k-k.k/k:k;k=k*l+l,lLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoWl'jckXldkekfkgkhkik(jBeBoDHCo%fsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byezeAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b;e=e?eHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRc_JSc`JTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c{J(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfTJob0m1m2m3m4m'd(d)d*dNd

1167 return cached 2Xb+k,k-k.k/k:k;k=k*l+l,l#j$j%jCoIkc HdIdlkbjJkKkLkYbwexeZb0byezeAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b;e=e?eHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRc_JSc`JTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c{J(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdJdcdKddda edfdgdhdidjdkdLdldMdmdndodpdqdrdsdtdudvdwdxdydzdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfTJob0m1m2m3m4mNd

1168 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jvlMpNpwlxlylzlAlOp/n:nQdBdRdCdSdDdTdEdUdFdVdGdb Pp;n=n?n@n[nQpRp^n_n`n{n|n}n~naobocodoqjrjqnrn;jClDleoFlGlHlIlJlKl+k,k-k.k/k:k;k=k*l+l,lLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoWl'jckXldkekfkgkhkik(jBeBoDHCo%fsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b;e=e?eHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4m'd(d)d*dNd

1169 return prop._cache.setdefault("compute_capability", cc) 2Xbql_j`jEjFjGj{jHj|jrl}jIjslJjKjtl~jakbkul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jvlMpNpwlxlylzlAlOp/n:nQdBdRdCdSdDdTdEdUdFdVdGdb Pp;n=n?n@n[nQpRp^n_n`n{n|n}n~naobocodoqjrjqnrn;jClDleoFlGlHlIlJlKl+k,k-k.k/k:k;k=k*l+l,lLl#jMlNlOlgohoiojokolomonooopoqoroso$jPlQlRlto%jSlTlUlVluovoWl'jckXldkekfkgkhkik(jBeBoDHCo%fsF6kIkc HdIdPIQIRI-Ge lkbjwoxoyo)j*jJkueKkLkvebIcIdIeIfIgIhIiIjIkIlImISIYbwexeZb0byeze1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b;e=e?eHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfob0m1m2m3m4m'd(d)d*dNd

1170  

1171 @property 

1172 def arch(self) -> str: 

1173 """Return compute capability as a string (e.g., '75' for CC 7.5).""" 

1174 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2Xb+k,k-k.k/k:k;k=k*l+l,l#j$j%jCoIkc HdIdlkbjJkKkLkYbwexeZb0byezeAJ1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b;e=e?eHm~bacbctmccumdcecfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctc0i1iucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcddda edfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAd[eTmUm]eVmWm_dXmYm^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfTJob0m1m2m3m4mNd

1175  

1176 @property 

1177 def context(self) -> Context: 

1178 """Return the :obj:`~_context.Context` associated with this device. 

1179  

1180 Note 

1181 ---- 

1182 Device must be initialized. 

1183  

1184 """ 

1185 self._check_context_initialized() 2$f)uoO+L'LGN2EGnJn-la Mn.lPnRnTnVnXnZn5FzH

1186 return self._context 2$f)uoO+L'LGN2EGnJn-la Mn.lPnRnTnVnXnZn5FzH

1187  

1188 @property 

1189 def memory_resource(self) -> MemoryResource: 

1190 """Return :obj:`~_memory.MemoryResource` associated with this device.""" 

1191 cdef int attr, device_id 

1192 if self._memory_resource is None: 2njojpjmF?G@GnFoFpFsn'f(f)f[G]G)Q*f*Q+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HlFOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmfeAe0i1iDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H

1193 # If the device is in TCC mode, or does not support memory pools for some other reason, 

1194 # use the SynchronousMemoryResource which does not use memory pools. 

1195 device_id = self._device_id 2njojpjmF?G@GnFoFpFsn'f(f)f[G]G*f+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HlFOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmfeAe0i1iDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H

1196 with nogil: 2njojpjmF?G@GnFoFpFsn'f(f)f[G]G*f+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HlFOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmfeAe0i1iDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H

1197 HANDLE_RETURN( 2njojpjmF?G@GnFoFpFsn'f(f)f[G]G*f+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HlFOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmfeAe0i1iDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H

1198 cydriver.cuDeviceGetAttribute( 2njojpjmF?G@GnFoFpFsn'f(f)f[G]G*f+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HlFOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmfeAe0i1iDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H

1199 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id 

1200 ) 

1201 ) 

1202 if attr == 1: 2njojpjmF?G@GnFoFpFsn'f(f)f[G]G*f+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HlFOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmfeAe0i1iDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H

1203 from cuda.core._memory import DeviceMemoryResource 2njojpjmF?G@GnFoFpFsn'f(f)f[G]G*f+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HlFOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmfeAe0i1iDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H

1204 self._memory_resource = DeviceMemoryResource(self._device_id) 2njojpjmF?G@GnFoFpFsn'f(f)f[G]G*f+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HlFOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmfeAe0i1iDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H

1205 else: 

1206 from cuda.core._memory._synchronous_memory_resource import ( 2mF?G@GnFoFpFsn'f(f)f[G]G*f+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmAeDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H

1207 _SynchronousMemoryResource, 

1208 ) 

1209 self._memory_resource = _SynchronousMemoryResource( 2mF?G@GnFoFpFsn'f(f)f[G]G*f+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmAeDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H

1210 self._device_id, self._context) 2mF?G@GnFoFpFsn'f(f)f[G]G*f+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmAeDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H

1211  

1212 return self._memory_resource 2njojpjmF?G@GnFoFpFsn'f(f)f[G]G)Q*f*Q+f{H,f-f.f/fqF:f;frF=f?f@f[f]f^f_f`f{f|f}f~f|H}H~HlFOdPd$f3F4F_GRk:jBnCnDnEnwexeyezeymzmfeAe0i1iDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5Gmj8nLp6G7G8G9G!G#G$G%G'G(G)GGHUpNdVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H

1213  

1214 @memory_resource.setter 

1215 def memory_resource(self, MemoryResource mr not None: MemoryResource) -> None: 

1216 self._memory_resource = mr 23F4F

1217  

1218 @property 

1219 def default_stream(self) -> Stream: 

1220 """Return a default CUDA :obj:`~_stream.Stream` token. 

1221  

1222 The type of default stream returned depends on if the environment 

1223 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set. 

1224  

1225 If set, returns a per-thread default stream. Otherwise returns 

1226 the legacy stream. 

1227  

1228 A default-stream token uses the device that is current when the token 

1229 is used. 

1230  

1231 """ 

1232 return default_stream() 2wpxp/lBlqjrjypzpAp:l;l=lBp?lEl@l[l]lCpDp^l5kYljk:QbecedeeeyOzOAOBOCOqLyNHp;F0P{L=F1PAnzNxM7P;Q=Q?QOk3p.MPk4p/M@Q~L[QaM]QbM^QcM_QdM`QeM{QrHsH|Q}QtHuH~QaRvHwHbRcRQQ%Q7QdRRQ'Q8QeRSQ(Q9QIptF2PWQuF3PJpvF4PKp?F5PWI5prLsL@H[HfMxHTQgM{GUQTpyHVQ#M$M%MeK'M(M)M*MlF+MRoSonIoI(L)LpIqItLuLOdPd3F4Fwmxm)j*jfRgRhRiRjRkRlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRbIcIdIeIfIgIhIiIjIkIlImIYRymzm8PAmcF?I7kcj9P!J8khjZRsjtjdj!kbg#kcg7l8lok/epk:e$k9lqkgNAj+jejBjCj,j-jfjgj@I3ErkUiagAoDiEiFiGiHia f g IiJiKiLiMiNiOiPiwM0G1G2G3G4G5GmjLp6G7G8G9G!G#G$G%G'G(G)GGHUpVpWpHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H+G:H;H=H

1233  

1234 def __int__(self) -> int: 

1235 """Return device_id.""" 

1236 return self._device_id 2hNiNjN;LOdPd

1237  

1238 def __repr__(self) -> str: 

1239 return f"<Device {self._device_id} ({self.name})>" 2/E^GnN

1240  

1241 def __hash__(self) -> int: 

1242 return hash(self.uuid) 2/E-IsI.I, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S @ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEbFbGbkbI ' lbJ ( mbK ) HbIbJbKbLbMbNbObPbQbRbSbvJYIwJxJThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskTbUbVbWbkNf g * + lNmN{M|M

1243  

1244 def __eq__(self, other: object) -> bool: 

1245 if not isinstance(other, Device): 2nK/EsI;GoKpKqKrK, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S @ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEbFbGbkbI ' lbJ ( mbK ) HbIbJbKbLbMbNbObPbQbRbSbOMYIPMSMThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskTbUbVbWb!Q+Qf g * + {M|MbKAHcK^j

1246 return NotImplemented 2/EsISM!Q+QbK

1247 return self._device_id == other._device_id 2nK/E;GoKpKqKrK, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S @ o T sbtbubvbwbxbybzbAbBbCb[ d U ] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ jbH % DbEbFbGbkbI ' lbJ ( mbK ) HbIbJbKbLbMbNbObPbQbRbSbOMYIPMThbgUhVhWhXhcgYhZh/e0h1h2h3h:e4h5hag=jskTbUbVbWb!Qf g * + {M|MAHcK^j

1248  

1249 def __reduce__(self) -> tuple[object, ...]: 

1250 # Device ordinals are per process; the receiver maps the UUID to its own device. 

1251 return _device_from_uuid, (self.uuid,) 2Sp5Q6QqLyNHp;F0P{L=F1PAnzNxMIptF2PWQuF3PJpvF4PKp?F5PrLsL@H[HtLuLTKUKVK

1252  

1253 def set_current(self, Context ctx: Context | None = None) -> Context | None: 

1254 """Set device to be used for GPU executions. 

1255  

1256 Initializes CUDA and sets the calling thread to a valid CUDA 

1257 context. By default the primary context is used, but optional `ctx` 

1258 parameter can be used to explicitly supply a :obj:`~_context.Context` object. 

1259  

1260 Providing a `ctx` causes the previous set context to be popped and returned. 

1261  

1262 If `ctx` was created on a different device than this receiver, the call 

1263 is delegated to that device's own :meth:`set_current`. This keeps the 

1264 owning device's bookkeeping consistent and lets a context this method 

1265 handed out for a foreign device be pushed back through any ``Device`` 

1266 object, matching the CUDA context stack's own thread-wide semantics. 

1267  

1268 Parameters 

1269 ---------- 

1270 ctx : :obj:`~_context.Context`, optional 

1271 Optional context to push onto this device's current thread stack. 

1272  

1273 Returns 

1274 ------- 

1275 :obj:`~_context.Context`, optional 

1276 The previous context, or ``None`` if no context was current. When 

1277 returned, its ``device_id`` identifies the device that was 

1278 previously current. 

1279  

1280 Examples 

1281 -------- 

1282 Acts as an entry point of this object. Users always start a code by 

1283 calling this method, e.g. 

1284  

1285 >>> from cuda.core import Device 

1286 >>> dev0 = Device(0) 

1287 >>> dev0.set_current() 

1288 >>> # ... do work on device 0 ... 

1289  

1290 """ 

1291 cdef ContextHandle h_context 

1292 cdef cydriver.CUcontext prev_ctx, curr_ctx 

1293 cdef cydriver.CUdevice prev_dev 

1294 cdef Context prev_owned = None 26p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAurIBusnCuEoDuEuFuGu5kHuYlIujkJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieEmQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteEHSuTu`GUuVuWuXuFoGoHoIoJoKoLoMo, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCbOk[ 3pd .MU Pk] 4pp /MV .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ NoOoPoWIjb5pH pN% DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSbYuZu0u1u2u3u4u5u6u7u8uOdPd$f9u!uXI*J+J,J#u-J$u,G%u'u(u)uTo.JUo/J:J^GaI;JVo=J*u@JZIWo+uJh,uKh-uLhXo'L.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdId-LuiviwiEv2Exiyi.LziAi?HBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oGvHvIv/LCi:L@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve !v#v$v%v'v(v)v*v+v)j,v*j-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAm;x=x7k?xNhcj@xOhPhQhRh{ozoShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEyFy7lGyHy}lIyJy~lKyLyamMyNybmOyPy8lQyRycmSyTydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznzozrkpzqzUirzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z1z2z2I3z3I4z5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cLITb[MUbMIVb,M9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoBpBqBrBsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B}Jln7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]Bob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiC/IjC:IkClC;ImCnCoC=IpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCzHMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjD4kkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1295  

1296 if ctx is not None: 26p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAurIBusnCuEoDuEuFuGu5kHuYlIujkJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieEmQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteEHSuTu`GUuVuWuXuFoGoHoIoJoKoLoMo, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCbOk[ 3pd .MU Pk] 4pp /MV .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ NoOoPoWIjb5pH pN% DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSbYuZu0u1u2u3u4u5u6u7u8uOdPd$f9u!uXI*J+J,J#u-J$u,G%u'u(u)uTo.JUo/J:J^GaI;JVo=J*u@JZIWo+uJh,uKh-uLhXo'L.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdId-LuiviwiEv2Exiyi.LziAi?HBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oGvHvIv/LCi:L@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve !v#v$v%v'v(v)v*v+v)j,v*j-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAm;x=x7k?xNhcj@xOhPhQhRh{ozoShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEyFy7lGyHy}lIyJy~lKyLyamMyNybmOyPy8lQyRycmSyTydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznzozrkpzqzUirzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z1z2z2I3z3I4z5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cLITb[MUbMIVb,M9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoBpBqBrBsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B}Jln7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]Bob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiC/IjC:IkClC;ImCnCoC=IpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCzHMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjD4kkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1297 Context_check_open(ctx) 2b 'L-L2E.L?H/L:L4k

1298 if ctx._device_id != self._device_id: 2b 'L-L2E.L?H/L4k

1299 # The CUDA context stack is per-thread, not per-Device-object, 

1300 # so pushing/popping a foreign-device context is delegated to 

1301 # the device that owns it; its own bookkeeping (_context, 

1302 # _has_inited) is what should track this push, not ours. 

1303 return Device(ctx._device_id).set_current(ctx) 

1304 if self._has_inited and self._context is not None: 2b 'L-L2E.L?H/L4k

1305 prev_owned = self._context 2b 'L-L2E.L?H/L4k

1306 curr_ctx = as_cu(ctx._h_context) 2b 'L-L2E.L?H/L4k

1307 prev_ctx = NULL 2b 'L-L2E.L?H/L4k

1308 with nogil: 2b 'L-L2E.L?H/L4k

1309 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&prev_ctx)) 2b 'L-L2E.L?H/L4k

1310 if prev_ctx != NULL: 2b 'L-L2E.L?H/L4k

1311 HANDLE_RETURN(cydriver.cuCtxGetDevice(&prev_dev)) 2b -L2E.L?H/L4k

1312 # cuCtxSetCurrent replaces the top of the thread's context stack 

1313 # in one driver call (or binds ctx when nothing is current), so 

1314 # a failure leaves the previous context current instead of 

1315 # leaving the thread with no context, as a failed pop-then-push 

1316 # would. 

1317 HANDLE_RETURN(cydriver.cuCtxSetCurrent(curr_ctx)) 2b 'L-L2E.L?H/L4k

1318 self._has_inited = True 2b 'L-L2E.L?H/L4k

1319 self._context = ctx # Store owning context reference 2b 'L-L2E.L?H/L4k

1320 if prev_ctx != NULL: 2b 'L-L2E.L?H/L4k

1321 if prev_owned is not None and as_cu(prev_owned._h_context) == prev_ctx: 2b -L2E.L?H/L4k

1322 return prev_owned 2b -L2E.L?H/L4k

1323 return Context._from_handle( 22E

1324 Context, create_context_handle_ref(prev_ctx), <int>prev_dev) 22E

1325 else: 

1326 # use primary ctx 

1327 h_context = get_primary_context(self._device_id) 26p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAurIBusnCuEoDuEuFuGu5kHuYlIujkJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieEmQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteEHSuTu`GUuVuWuXuFoGoHoIoJoKoLoMo, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCbOk[ 3pd .MU Pk] 4pp /MV .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ NoOoPoWIjb5pH pN% DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSbYuZu0u1u2u3u4u5u6u7u8uOdPd$f9u!uXI*J+J,J#u-J$u,G%u'u(u)uTo.JUo/J:J^GaI;JVo=J*u@JZIWo+uJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve !v#v$v%v'v(v)v*v+v)j,v*j-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAm;x=x7k?xNhcj@xOhPhQhRh{ozoShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEyFy7lGyHy}lIyJy~lKyLyamMyNybmOyPy8lQyRycmSyTydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznzozrkpzqzUirzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z1z2z2I3z3I4z5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cLITb[MUbMIVb,M9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoBpBqBrBsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B}Jln7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]Bob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiC/IjC:IkClC;ImCnCoC=IpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCzHMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1328 if h_context.get() == NULL: 26p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAurIBusnCuEoDuEuFuGu5kHuYlIujkJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieEmQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteEHSuTu`GUuVuWuXuFoGoHoIoJoKoLoMo, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCbOk[ 3pd .MU Pk] 4pp /MV .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ NoOoPoWIjb5pH pN% DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSbYuZu0u1u2u3u4u5u6u7u8uOdPd$f9u!uXI*J+J,J#u-J$u,G%u'u(u)uTo.JUo/J:J^GaI;JVo=J*u@JZIWo+uJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve !v#v$v%v'v(v)v*v+v)j,v*j-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAm;x=x7k?xNhcj@xOhPhQhRh{ozoShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEyFy7lGyHy}lIyJy~lKyLyamMyNybmOyPy8lQyRycmSyTydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznzozrkpzqzUirzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z1z2z2I3z3I4z5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cLITb[MUbMIVb,M9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoBpBqBrBsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B}Jln7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]Bob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiC/IjC:IkClC;ImCnCoC=IpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCzHMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1329 HANDLE_RETURN(get_last_error()) 

1330 raise RuntimeError( 

1331 f"Failed to retain the primary context for device {self._device_id}" 

1332 ) 

1333 with nogil: 26p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAurIBusnCuEoDuEuFuGu5kHuYlIujkJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieEmQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteEHSuTu`GUuVuWuXuFoGoHoIoJoKoLoMo, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCbOk[ 3pd .MU Pk] 4pp /MV .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ NoOoPoWIjb5pH pN% DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSbYuZu0u1u2u3u4u5u6u7u8uOdPd$f9u!uXI*J+J,J#u-J$u,G%u'u(u)uTo.JUo/J:J^GaI;JVo=J*u@JZIWo+uJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve !v#v$v%v'v(v)v*v+v)j,v*j-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAm;x=x7k?xNhcj@xOhPhQhRh{ozoShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEyFy7lGyHy}lIyJy~lKyLyamMyNybmOyPy8lQyRycmSyTydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznzozrkpzqzUirzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z1z2z2I3z3I4z5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cLITb[MUbMIVb,M9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoBpBqBrBsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B}Jln7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]Bob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiC/IjC:IkClC;ImCnCoC=IpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCzHMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1334 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 26p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAurIBusnCuEoDuEuFuGu5kHuYlIujkJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieEmQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteEHSuTu`GUuVuWuXuFoGoHoIoJoKoLoMo, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCbOk[ 3pd .MU Pk] 4pp /MV .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ NoOoPoWIjb5pH pN% DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSbYuZu0u1u2u3u4u5u6u7u8uOdPd$f9u!uXI*J+J,J#u-J$u,G%u'u(u)uTo.JUo/J:J^GaI;JVo=J*u@JZIWo+uJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve !v#v$v%v'v(v)v*v+v)j,v*j-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAm;x=x7k?xNhcj@xOhPhQhRh{ozoShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEyFy7lGyHy}lIyJy~lKyLyamMyNybmOyPy8lQyRycmSyTydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznzozrkpzqzUirzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z1z2z2I3z3I4z5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cLITb[MUbMIVb,M9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoBpBqBrBsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B}Jln7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]Bob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiC/IjC:IkClC;ImCnCoC=IpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCzHMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1335 self._has_inited = True 26p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAurIBusnCuEoDuEuFuGu5kHuYlIujkJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieEmQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteEHSuTu`GUuVuWuXuFoGoHoIoJoKoLoMo, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCbOk[ 3pd .MU Pk] 4pp /MV .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ NoOoPoWIjb5pH pN% DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSbYuZu0u1u2u3u4u5u6u7u8uOdPd$f9u!uXI*J+J,J#u-J$u,G%u'u(u)uTo.JUo/J:J^GaI;JVo=J*u@JZIWo+uJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve !v#v$v%v'v(v)v*v+v)j,v*j-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAm;x=x7k?xNhcj@xOhPhQhRh{ozoShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEyFy7lGyHy}lIyJy~lKyLyamMyNybmOyPy8lQyRycmSyTydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznzozrkpzqzUirzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z1z2z2I3z3I4z5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cLITb[MUbMIVb,M9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoBpBqBrBsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B}Jln7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]Bob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiC/IjC:IkClC;ImCnCoC=IpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCzHMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1336 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 26p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAurIBusnCuEoDuEuFuGu5kHuYlIujkJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieEmQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteEHSuTu`GUuVuWuXuFoGoHoIoJoKoLoMo, h L - i M . j N / nbO : k P pb; l Q qb= m R rb? n S Ih@ o T sbtbubvbwbxbybzbAbBbCbOk[ 3pd .MU Pk] 4pp /MV .jq W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 fbD 9 gbE ! hbF # ibG $ NoOoPoWIjb5pH pN% DbEbFbGbkbI ' lbJ ( mbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eHbIbJbKbLbMbNbObPbQbRbSbYuZu0u1u2u3u4u5u6u7u8uOdPd$f9u!uXI*J+J,J#u-J$u,G%u'u(u)uTo.JUo/J:J^GaI;JVo=J*u@JZIWo+uJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve !v#v$v%v'v(v)v*v+v)j,v*j-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAm;x=x7k?xNhcj@xOhPhQhRh{ozoShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEyFy7lGyHy}lIyJy~lKyLyamMyNybmOyPy8lQyRycmSyTydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznzozrkpzqzUirzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z1z2z2I3z3I4z5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cLITb[MUbMIVb,M9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoBpBqBrBsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B}Jln7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]Bob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiC/IjC:IkClC;ImCnCoC=IpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCzHMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1337  

1338 def create_context(self, options: ContextOptions | None = None) -> Context: 

1339 """Create a new :obj:`~_context.Context` object. 

1340  

1341 Note 

1342 ---- 

1343 The newly created context will not be set as current. 

1344  

1345 Parameters 

1346 ---------- 

1347 options : :obj:`~_context.ContextOptions`, optional 

1348 Customizable dataclass for context creation options. 

1349  

1350 Returns 

1351 ------- 

1352 :obj:`~_context.Context` 

1353 Newly created context object. 

1354  

1355 """ 

1356 cdef int i 

1357 cdef object resources 

1358 cdef object res 

1359 cdef SMResource sm_res 

1360 cdef WorkqueueResource wq_res 

1361  

1362 if options is None: 2b 6Msitic Rk:juiviwixiyiziAiBi}M7MpOfN6PCi:L4k

1363 raise ValueError( 26P

1364 "options with device resources must be provided to create a green context" 

1365 ) 

1366  

1367 options = check_or_create_options(ContextOptions, options, "Context options") 2b 6Msitic Rk:juiviwixiyiziAiBi}M7MpOfN6PCi:L4k

1368 if options.resources is None: 2b 6Msitic Rk:juiviwixiyiziAiBi}M7MpOfN6PCi:L4k

1369 raise ValueError( 26P

1370 "ContextOptions.resources must be provided to create a green context" 

1371 ) 

1372  

1373 resources = tuple(options.resources) 2b 6Msitic Rk:juiviwixiyiziAiBi}M7MpOfNCi:L4k

1374 if len(resources) == 0: 2b 6Msitic Rk:juiviwixiyiziAiBi}M7MpOfNCi:L4k

1375 raise ValueError("ContextOptions.resources must not be empty") 2pO

1376  

1377 cdef vector[cydriver.CUdevResource] c_resources 

1378 c_resources.resize(len(resources)) 2b 6Msitic Rk:juiviwixiyiziAiBi}M7MfNCi:L4k

1379  

1380 for i, res in enumerate(resources): 2b 6Msitic Rk:juiviwixiyiziAiBi}M7MfNCi:L4k

1381 if isinstance(res, SMResource): 2b 6Msitic Rk:juiviwixiyiziAiBi}M7MfNCi:L4k

1382 sm_res = <SMResource>res 2b 6Msitic Rk:juiviwixiyiziAiBi}M7MCi:L4k

1383 if not sm_res._is_usable: 2b 6Msitic Rk:juiviwixiyiziAiBi}M7MCi:L4k

1384 raise ValueError("dry-run SMResource objects cannot be used to create a context") 2}M

1385 c_resources[i] = sm_res._resource 2b 6Msitic Rk:juiviwixiyiziAiBi7MCi:L4k

1386 elif isinstance(res, WorkqueueResource): 2:jfN

1387 wq_res = <WorkqueueResource>res 2:j

1388 c_resources[i] = wq_res._wq_config_resource 2:j

1389 else: 

1390 raise TypeError(f"Unsupported context resource type: {type(res)}") 2fN

1391  

1392 cdef GreenCtxHandle h_green = create_green_ctx_handle( 2b 6Msitic Rk:juiviwixiyiziAiBi7MCi:L4k

1393 c_resources.data(), 

1394 <unsigned int>(c_resources.size()), 

1395 <cydriver.CUdevice>(self._device_id), 2b 6Msitic Rk:juiviwixiyiziAiBi7MCi:L4k

1396 <unsigned int>(cydriver.CUgreenCtxCreate_flags.CU_GREEN_CTX_DEFAULT_STREAM), 

1397 ) 

1398 if h_green.get() == NULL: 2b 6Msitic Rk:juiviwixiyiziAiBi7MCi:L4k

1399 HANDLE_RETURN(get_last_error()) 

1400 raise RuntimeError("Failed to create CUDA green context") 

1401  

1402 return Context._from_green_ctx(Context, h_green, self._device_id) 2b 6Msitic Rk:juiviwixiyiziAiBi7MCi:L4k

1403  

1404 def create_stream(self, obj: IsStreamType | None = None, options: StreamOptions | None = None) -> Stream: 

1405 """Create or wrap a :obj:`~_stream.Stream` object. 

1406  

1407 New stream objects can be created in two different ways: 

1408  

1409 1) Create a new CUDA stream with customizable ``options``. 

1410 2) Wrap an existing foreign `obj` supporting the ``__cuda_stream__`` protocol. 

1411  

1412 Option (2) internally holds a reference to the foreign object 

1413 such that the lifetime is managed. 

1414  

1415 Note 

1416 ---- 

1417 Device must be initialized. New streams are created on this device. 

1418  

1419 Parameters 

1420 ---------- 

1421 obj : :obj:`~_stream.IsStreamType`, optional 

1422 Any object supporting the ``__cuda_stream__`` protocol. 

1423 options : :obj:`~_stream.StreamOptions`, optional 

1424 Customizable dataclass for stream creation options. 

1425  

1426 Returns 

1427 ------- 

1428 :obj:`~_stream.Stream` 

1429 Newly created stream object. 

1430  

1431 """ 

1432 self._check_context_initialized() 2[I]I3K^I_I`I{I|I}ITI~IaJbJcJdJql4K5K6K7K8KeJ_j`jEjFjUIGj{jfJgJHj|jrl}jhJIjsl9KiJJjKjVItljJ~jakbkkJlJulLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j!K#K$K%K'K!n#n$n%nvlmJ(K)KwlxlylzlAl'n(n)n*n+n,n-n.nb !P]n*KnJ+K,K-K.KpJqJ/lBlqjrj;jClDl:l;l=l?lEl@l[l]l^l/K:KFlGlHlIlJlKlfonjojpjqNrNsNtNuNvNwNxNqOrOsO+k,k-k.k/k:k;k=k*l+l,lhNiNjN%J'J(J#PLl;KsJ#j=K?KMlNlOl@K[K]K^K_K$PmF`KtJ$j{K|KPlQlRl}K~KaLbLcL%PdLuJ%jeLfLSlTlUlgLhLiLjLkL'PVl?G@G)JqHnFoFpFWl(P)PlLmL'jckXlnLdkekfkrIsngkhkik(j=L'f(f?L)f[G?k]G@k*f+f[kDN,fEN-f.f@L/fqF:f[L;f]k^k_krF]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflglhl*Pil+Pjlkl,PllmlnlolplvOnKwOxO;GoKpK-P.PoLpLqKrKyOzOAOBOCOEHBeBoDH/P:P;P=P?P@P[P]PFN^P_PvLwLxLyLzLAL$fBL)uoO`PyJQksF/jDLELFLGLHLIL6kJLKLLLMLNLOLPLIkvKwKxKyKzKAKBKCKDKEKFKGK{P,L2E-GtIBnuIvIwIxIyIzICnAIBICIDIDnEIFIGIHIIIJIKIEne lkbjJkKkLkwexeyeze|PHN}PINGkHkSkTkUk~PaQJNbQKNcQdQLNMNeQfQgQNNhQONPNQNRNSNTNUNVNWNiQXNYNZN0NjQ1N2NkQlQmQnQ3NoQ4NpQqQ5N6NrQsQtQ7NuQ8N9N!N#N$N%N'N(N)NvQ*N+N,N-NwQ.N/NxQyQzQAQ:NBQ;NCQDQ=N?NEQFQGQ@NHQ[N]N^N_N`N{N|N}N~NIQaObOcOdOJQeOfOKQLQMQVkWkcjXkYkZk0k1k2kCHhjijjjkjujvjwjxjyjzjAN3kNQUiBNOQBJCJ;eViWiXi=e?eYifeZiljAe0i1i,MFnHnInKnLna * + NnOnQnSnUnWnYn0n_dRLUJSL~JTLULVLWLaKXLYLZL0L1L2L3L4L5L6L7L8L9L!L#LbK$L%L8nWJLpXJYJZJpH1JgOhONd+GPQ

1433 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 2[I]I3K^I_I`I{I|I}ITI~IaJbJcJdJql4K5K6K7K8KeJ_j`jEjFjUIGj{jfJgJHj|jrl}jhJIjsl9KiJJjKjVItljJ~jakbkkJlJulLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j!K#K$K%K'K!n#n$n%nvlmJ(K)KwlxlylzlAl'n(n)n*n+n,n-n.nb !P]n*KnJ+K,K-K.KpJqJ/lBlqjrj;jClDl:l;l=l?lEl@l[l]l^l/K:KFlGlHlIlJlKlfonjojpjqNrNsNtNuNvNwNxNqOrOsO+k,k-k.k/k:k;k=k*l+l,lhNiNjN%J'J(J#PLl;KsJ#j=K?KMlNlOl@K[K]K^K_K$PmF`KtJ$j{K|KPlQlRl}K~KaLbLcL%PdLuJ%jeLfLSlTlUlgLhLiLjLkL'PVl?G@G)JqHnFoFpFWl(P)PlLmL'jckXlnLdkekfkrIsngkhkik(j=L'f(f?L)f[G?k]G@k*f+f[kDN,fEN-f.f@L/fqF:f[L;f]k^k_krF]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflglhl*Pil+Pjlkl,PllmlnlolplvOnKwOxO;GoKpK-P.PoLpLqKrKyOzOAOBOCOEHBeBoDH/P:P;P=P?P@P[P]PFN^P_PvLwLxLyLzLAL$fBL)uoO`PyJQksF/jDLELFLGLHLIL6kJLKLLLMLNLOLPLIkvKwKxKyKzKAKBKCKDKEKFKGK{P,L2E-GtIBnuIvIwIxIyIzICnAIBICIDIDnEIFIGIHIIIJIKIEne lkbjJkKkLkwexeyeze|PHN}PINGkHkSkTkUk~PaQJNbQKNcQdQLNMNeQfQgQNNhQONPNQNRNSNTNUNVNWNiQXNYNZN0NjQ1N2NkQlQmQnQ3NoQ4NpQqQ5N6NrQsQtQ7NuQ8N9N!N#N$N%N'N(N)NvQ*N+N,N-NwQ.N/NxQyQzQAQ:NBQ;NCQDQ=N?NEQFQGQ@NHQ[N]N^N_N`N{N|N}N~NIQaObOcOdOJQeOfOKQLQMQVkWkcjXkYkZk0k1k2kCHhjijjjkjujvjwjxjyjzjAN3kNQUiBNOQBJCJ;eViWiXi=e?eYifeZiljAe0i1i,MFnHnInKnLna * + NnOnQnSnUnWnYn0n_dRLUJSL~JTLULVLWLaKXLYLZL0L1L2L3L4L5L6L7L8L9L!L#LbK$L%L8nWJLpXJYJZJpH1JgOhONd+GPQ

1434  

1435 def create_event(self, options: EventOptions | None = None) -> Event: 

1436 """Create an :obj:`~_event.Event` on this device without recording it to a :obj:`~_stream.Stream`. 

1437  

1438 Note 

1439 ---- 

1440 Device must be initialized. 

1441  

1442 Parameters 

1443 ---------- 

1444 options : :obj:`EventOptions`, optional 

1445 Customizable dataclass for event creation options. 

1446  

1447 Returns 

1448 ------- 

1449 :obj:`~_event.Event` 

1450 Newly created event object. 

1451  

1452 """ 

1453 self._check_context_initialized() 2mJ+d,d-d.d/d:d;d=d?d@d[d]dfKmnoJpJqJnnrJCmDmgKhKonpniK;jsJ#jjKkKlKmKtJ$juJ%jFNsK)uyJsF/juK]jzJ2E'm(m)m*m+m,m-m.m/m:ma ;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnkn

1454 cdef Context ctx = self._context 2mJ+d,d-d.d/d:d;d=d?d@d[d]dfKmnoJpJqJnnrJCmDmgKhKonpniK;jsJ#jjKkKlKmKtJ$juJ%jFNsK)uyJsF/juK]jzJ2E'm(m)m*m+m,m-m.m/m:ma ;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnkn

1455 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2mJ+d,d-d.d/d:d;d=d?d@d[d]dfKmnoJpJqJnnrJCmDmgKhKonpniK;jsJ#jjKkKlKmKtJ$juJ%jFNsK)uyJsF/juK]jzJ2E'm(m)m*m+m,m-m.m/m:ma ;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnkn

1456  

1457 def allocate(self, size: int, *, stream: Stream | GraphBuilder) -> Buffer: 

1458 """Allocate device memory from a specified stream. 

1459  

1460 Allocates device memory of `size` bytes on the specified `stream` 

1461 using the memory resource currently associated with this Device. 

1462  

1463 Note 

1464 ---- 

1465 Device must be initialized. 

1466  

1467 Parameters 

1468 ---------- 

1469 size : int 

1470 Number of bytes to allocate. 

1471 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder` 

1472 Keyword-only. The stream establishing the stream ordering semantic. 

1473 Must be passed explicitly; pass ``self.default_stream`` to use 

1474 the default stream. 

1475  

1476 Returns 

1477 ------- 

1478 :obj:`~_memory.Buffer` 

1479 Newly created buffer object. 

1480  

1481 """ 

1482 self._check_context_initialized() 2snOdPd$f3F4F_GRk:jBnCnDnEnymzmDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5GmjNd

1483 return self.memory_resource.allocate(size, stream=stream) 2snOdPd$f3F4F_GRk:jBnCnDnEnymzmDiEiFiGiHia IiJiKiLiMiNiOiPi_d5F0G1G2G3G4G5GmjNd

1484  

1485 def sync(self) -> None: 

1486 """Synchronize this device's bound context. 

1487  

1488 Waits for all preceding work in this device's bound :obj:`~_context.Context` 

1489 to complete. Only that context is synchronized, not the device as a 

1490 whole; work queued in a different context on the same device (e.g. a 

1491 green context) is unaffected. 

1492  

1493 Note 

1494 ---- 

1495 Device must be initialized. 

1496  

1497 """ 

1498 self._check_context_initialized() 2^I`I~IaJbJqFrFtOuODOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRPSPTPUPVPWPXPYPZPOdPd)uGN2EHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOcjhjsjtjdjgNAj+jejBjCj,j-jfjgjUiagAof g

1499 cdef Context ctx = self._context 2^I`I~IaJbJqFrFtOuODOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRPSPTPUPVPWPXPYPZPOdPd)uGN2EHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOcjhjsjtjdjgNAj+jejBjCj,j-jfjgjUiagAof g

1500 HANDLE_RETURN(context_synchronize(ctx._h_context)) 2^I`I~IaJbJqFrFtOuODOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRPSPTPUPVPWPXPYPZPOdPd)uGN2EHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOcjhjsjtjdjgNAj+jejBjCj,j-jfjgjUiagAof g

1501  

1502 def create_graph_builder(self) -> GraphBuilder: 

1503 """Create a new :obj:`~graph.GraphBuilder` on this device. 

1504  

1505 Returns 

1506 ------- 

1507 :obj:`~graph.GraphBuilder` 

1508 Newly created graph builder object. 

1509  

1510 """ 

1511 from cuda.core.graph._graph_builder import GraphBuilder 2[I]I_I{I|I}ITIcJdJeJ_j`jEjFjUIGj{jfJgJHj|j}jhJIjiJJjKjVIjJ~jakbkkJlJLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jnJhNiNjN%J'J(JmF)JqHnFoFpF'jckdkekfkgkhkik(jDNEN)u2ECHijjjkjujvjwjxjyjzjViWiXiYiZiUJ8n

1512  

1513 self._check_context_initialized() 2[I]I_I{I|I}ITIcJdJeJ_j`jEjFjUIGj{jfJgJHj|j}jhJIjiJJjKjVIjJ~jakbkkJlJLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jnJhNiNjN%J'J(JmF)JqHnFoFpF'jckdkekfkgkhkik(jDNEN)u2ECHijjjkjujvjwjxjyjzjViWiXiYiZiUJ8n

1514 return GraphBuilder._init(self.create_stream()) 2[I]I_I{I|I}ITIcJdJeJ_j`jEjFjUIGj{jfJgJHj|j}jhJIjiJJjKjVIjJ~jakbkkJlJLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jnJhNiNjN%J'J(JmF)JqHnFoFpF'jckdkekfkgkhkik(jDNEN)u2ECHijjjkjujvjwjxjyjzjViWiXiYiZiUJ8n

1515  

1516 def create_opaque_array(self, options: OpaqueArrayOptions) -> OpaqueArray: 

1517 """Create an :obj:`~cuda.core.texture.OpaqueArray` on this device. 

1518  

1519 Allocates an opaque, hardware-laid-out CUDA array for texture/surface 

1520 access. 

1521  

1522 Note 

1523 ---- 

1524 Device must be initialized. 

1525  

1526 Parameters 

1527 ---------- 

1528 options : :obj:`~cuda.core.texture.OpaqueArrayOptions` 

1529 Allocation options (shape, format, channels, surface flag). 

1530  

1531 Returns 

1532 ------- 

1533 :obj:`~cuda.core.texture.OpaqueArray` 

1534 Newly created opaque array. 

1535  

1536 .. versionadded:: 1.1.0 

1537 """ 

1538 from cuda.core.texture._array import _create_opaque_array 2?H5I6I7I8I9IVJHKIKJKKKLKMK8nWJNKLpXJYJOKZJpH4kAH!I#I%IBHNd'I)I*I+I,I^j*G

1539  

1540 self._check_context_initialized() 2?H5I6I7I8I9IVJHKIKJKKKLKMK8nWJNKLpXJYJOKZJpH4kAH!I#I%IBHNd'I)I*I+I,I^j*G

1541 return _create_opaque_array(options, self._context, self._device_id) 2?H5I6I7I8I9IVJHKIKJKKKLKMK8nWJNKLpXJYJOKZJpH4kAH!I#I%IBHNd'I)I*I+I,I^j*G

1542  

1543 def create_mipmapped_array(self, options: MipmappedArrayOptions) -> MipmappedArray: 

1544 """Create a :obj:`~cuda.core.texture.MipmappedArray` on this device. 

1545  

1546 Allocates a mipmapped CUDA array for texture/surface access across 

1547 levels. 

1548  

1549 Note 

1550 ---- 

1551 Device must be initialized. 

1552  

1553 Parameters 

1554 ---------- 

1555 options : :obj:`~cuda.core.texture.MipmappedArrayOptions` 

1556 Allocation options (shape, format, channels, levels, surface flag). 

1557  

1558 Returns 

1559 ------- 

1560 :obj:`~cuda.core.texture.MipmappedArray` 

1561 Newly created mipmapped array. 

1562  

1563 .. versionadded:: 1.1.0 

1564 """ 

1565 from cuda.core.texture._mipmapped_array import _create_mipmapped_array 2pH0JPKQKRK1JgOhOSK$I(I*G

1566  

1567 self._check_context_initialized() 2pH0JPKQKRK1JgOhOSK$I(I*G

1568 return _create_mipmapped_array(options, self._context, self._device_id) 2pH0JPKQKRK1JgOhOSK$I(I*G

1569  

1570 def create_texture_object( 

1571 self, *, resource: ResourceDescriptor, options: TextureObjectOptions | None = None 

1572 ) -> TextureObject: 

1573 """Create a :obj:`~cuda.core.texture.TextureObject` on this device. 

1574  

1575 Binds a resource (an :obj:`~cuda.core.texture.OpaqueArray` / 

1576 :obj:`~cuda.core.texture.MipmappedArray` / linear or pitch2d 

1577 :obj:`~cuda.core.Buffer`, wrapped in a 

1578 :obj:`~cuda.core.texture.ResourceDescriptor`) as a bindless texture for 

1579 kernel-side sampled reads. The resource must belong to this device. 

1580  

1581 Note 

1582 ---- 

1583 Device must be initialized. 

1584  

1585 Parameters 

1586 ---------- 

1587 resource : :obj:`~cuda.core.texture.ResourceDescriptor` 

1588 The memory backing the texture. 

1589 options : :obj:`~cuda.core.texture.TextureObjectOptions` 

1590 Sampling state (address/filter/read modes, normalization, etc.). 

1591  

1592 Returns 

1593 ------- 

1594 :obj:`~cuda.core.texture.TextureObject` 

1595 Newly created texture object. 

1596  

1597 .. versionadded:: 1.1.0 

1598 """ 

1599 from cuda.core.texture._texture import _create_texture_object 2?H5I6I7I8I9IpHAHBHNdcK'IVp(IWp)I*I+I,IdK^j*G

1600  

1601 self._check_context_initialized() 2?H5I6I7I8I9IpHAHBHNdcK'IVp(IWp)I*I+I,IdK^j*G

1602 return _create_texture_object( 2?H5I6I7I8I9IpHAHBHNdcK'IVp(IWp)I*I+I,IdK^j*G

1603 resource, options, self._context, self._device_id) 2?H5I6I7I8I9IpHAHBHNdcK'IVp(IWp)I*I+I,IdK^j*G

1604  

1605 def create_surface_object(self, *, resource: ResourceDescriptor) -> SurfaceObject: 

1606 """Create a :obj:`~cuda.core.texture.SurfaceObject` on this device. 

1607  

1608 Binds an :obj:`~cuda.core.texture.OpaqueArray` (via a 

1609 :obj:`~cuda.core.texture.ResourceDescriptor`) as a bindless surface for 

1610 kernel-side typed load/store. The backing array must have been created 

1611 with ``is_surface_load_store=True`` and must belong to this device. 

1612  

1613 Note 

1614 ---- 

1615 Device must be initialized. 

1616  

1617 Parameters 

1618 ---------- 

1619 resource : :obj:`~cuda.core.texture.ResourceDescriptor` 

1620 Must wrap an :obj:`~cuda.core.texture.OpaqueArray` allocated with 

1621 ``is_surface_load_store=True``. 

1622  

1623 Returns 

1624 ------- 

1625 :obj:`~cuda.core.texture.SurfaceObject` 

1626 Newly created surface object. 

1627  

1628 .. versionadded:: 1.1.0 

1629 """ 

1630 from cuda.core.texture._surface import _create_surface_object 24kAH!I#IUp$I%IBH*G

1631  

1632 self._check_context_initialized() 24kAH!I#IUp$I%IBH*G

1633 return _create_surface_object( 24kAH!I#IUp$I%IBH*G

1634 resource, self._context, self._device_id) 24kAH!I#IUp$I%IBH*G

1635  

1636  

1637def _device_from_uuid(device_uuid: str) -> Device: 

1638 """Return the visible device whose :attr:`Device.uuid` is ``device_uuid``. 

1639  

1640 Device ordinals are per process (``CUDA_VISIBLE_DEVICES`` can renumber 

1641 devices), so objects that cross a process boundary name their devices by 

1642 UUID, and the receiving process maps each UUID back with this function. 

1643  

1644 Raises 

1645 ------ 

1646 RuntimeError 

1647 If no device visible to this process has the UUID. 

1648 """ 

1649 devices = Device.get_all_devices() 2=GTKUKVK

1650 for device in devices: 2=GTKUKVK

1651 if device.uuid == device_uuid: 2=GTKUKVK

1652 return device 2=GTKUKVK

1653 visible = ", ".join(f"{device.device_id} ({device.uuid})" for device in devices) or "none" 

1654 raise RuntimeError( 

1655 f"no CUDA device visible to this process has UUID {device_uuid}; the visible devices are: " 

1656 f"{visible}. Make the device visible to this process, for example through CUDA_VISIBLE_DEVICES." 

1657 ) 

1658  

1659  

1660cdef inline int Device_ensure_cuda_initialized() except? -1: 

1661 """Initialize CUDA driver and check version compatibility (once per process).""" 

1662 global _is_cuInit 

1663 if _is_cuInit is False: 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e=G+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSb]M6F^M_M`M7F|LYu8FZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$u,GQM%uRM'u3F(u)uToTK.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=JiOoN4F*uFH?J@JZIWo+uvmJh,uKh+L-uLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAmcF;x=x7k?xTMNhcj@xOhPhQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~o8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-zCN~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa UKDAVKEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnC3JwMoC4J5J6J=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*djORCkOSClOTCmOUCnOVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E

1664 with _lock, nogil: 

1665 HANDLE_RETURN(cydriver.cuInit(0)) 

1666 _is_cuInit = True 

1667 IF CUDA_CORE_BUILD_MAJOR >= 13: 

1668 # cuda-bindings 13.3 added this function. The 12.x line does not have it. 

1669 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch 

1670 warn_if_cuda_major_version_mismatch() 

1671 return 0 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e=G+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSb]M6F^M_M`M7F|LYu8FZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$u,GQM%uRM'u3F(u)uToTK.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=JiOoN4F*uFH?J@JZIWo+uvmJh,uKh+L-uLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAmcF;x=x7k?xTMNhcj@xOhPhQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~o8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-zCN~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa UKDAVKEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnC3JwMoC4J5J6J=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*djORCkOSClOTCmOUCnOVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E

1672  

1673  

1674cdef inline int Device_resolve_device_id(device_id) except? -1: 

1675 """Resolve device_id, defaulting to current device or 0.""" 

1676 cdef cydriver.CUdevice dev 

1677 cdef cydriver.CUcontext ctx 

1678 cdef cydriver.CUresult err 

1679 if device_id is None: 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSbYuZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$uQM%uRM'u3F(u)uTo.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=J4F*uFH?J@JZIWo+uvmJh,uKh+L-uLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAmcF;x=x7k?xTMNhcj@xOhPhQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~o8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-zCN~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnCwMoC=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E

1680 with nogil: 2Xb[I]I3K^I_I`I{I|I}ITI~IaJbJcJdJql4K5K6K7K8KeJ_j`jEjFjUIGj{jfJgJHj|jrl}jhJIjsl9KiJJjKjVItljJ~jakbkkJlJul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp!K#K$K%K'K!n#n$n%nvlmJ(K)KwlxlylzlAl'n(n)n*n+n,n-n.n/n:nCe`dQd+d,dBdDe{dRd-d.dCdEe|dSd/d:dDdFe}dTd;d=dEdGe~dUd?d@dFdHeaeVd[d]dGdb ;n=n?n@n[n]n^n_n`n{n|n}nwp*K~naoboconJ+K,K-K.KdoxpfKmnoJpJqJnnrJCmDmgKhKonpniK/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leo/K:KFlGlHlIlJlKlfo+k,k-k.k/k:k;k=k*l+l,l;LLl;KsJ#j=K?KMlNlOl@K[K]K^K_KyMjKkKzMAMgohoioBMCMDMEMFMGMlKmKHMIMjokoloJMKMLMMMNMmonooopoqoroso`KtJ$j{K|KPlQlRl}K~KaLbLcLtodLuJ%jeLfLSlTlUlgLhLiLjLkLVluovoWllLmL'jckXlnLdkekfkgkhkik(j5kYljk'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f:E]k;E^k=E_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldl?Eel@Eflvn[Eglhlwnilxnjlklynllznmlnlolplgehe}LIeJeKeLeMeNeieEmjebe;G^dkeceOeledeoLmepLeePeQeReneoepeqereseteEHh i j nbk l m n o d p q r s t u v w x y z A B C D E F G H I J K vLwLxLyLzLALCo%fOdPdsKBLtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajaIFH?JvmyJQk/juK]jzJDLELFLGLHLIL6kJLKLLLMLNLOLPLIkvKwKhMxKyKzKAKBKiMjMCKkMDKEKlMmMnMoMpMqMFKGKrMsMwmxme lkbjwoxoyo)j*jJkKkLkYbwexeZb0byezeAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eGkHkSkTkUk5m6m7m8mVkWkAm7kcjmknk9m!mXkYkBm#mZk0k1k2ktM_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj$m%m3krkUiagaF=jskbFBJCJEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2I3I2pCk4IDkMkfe[jNk(k)k*kZiljEkFkHm~bQLacbctmccumdcuMecvMfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctcXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAd[eTmUm]eVmWm_dXmYmln^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfTJob0m1m2m3m4m/I:I;IRLwM=IUJSL~JTLULVLWLaKXLYLZL0L1L2L3L4L5L6L7L8L9L!LzH#LbK$L%LkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5I6I7I8I9IVJHKIKJKKKLKMK8nWJNKLpXJYJWMXMYMZM0M1MOKZJpH0JPKQKRK1J2M3M4M5M6G7G8G9G!G#GSK$G%G'G(G)G!I#IUp$I%IBH'IVp(IWp)I*I+I,IdK*G

1681 err = cydriver.cuCtxGetDevice(&dev) 2Xb[I]I3K^I_I`I{I|I}ITI~IaJbJcJdJql4K5K6K7K8KeJ_j`jEjFjUIGj{jfJgJHj|jrl}jhJIjsl9KiJJjKjVItljJ~jakbkkJlJul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp!K#K$K%K'K!n#n$n%nvlmJ(K)KwlxlylzlAl'n(n)n*n+n,n-n.n/n:nCe`dQd+d,dBdDe{dRd-d.dCdEe|dSd/d:dDdFe}dTd;d=dEdGe~dUd?d@dFdHeaeVd[d]dGdb ;n=n?n@n[n]n^n_n`n{n|n}nwp*K~naoboconJ+K,K-K.KdoxpfKmnoJpJqJnnrJCmDmgKhKonpniK/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leo/K:KFlGlHlIlJlKlfo+k,k-k.k/k:k;k=k*l+l,l;LLl;KsJ#j=K?KMlNlOl@K[K]K^K_KyMjKkKzMAMgohoioBMCMDMEMFMGMlKmKHMIMjokoloJMKMLMMMNMmonooopoqoroso`KtJ$j{K|KPlQlRl}K~KaLbLcLtodLuJ%jeLfLSlTlUlgLhLiLjLkLVluovoWllLmL'jckXlnLdkekfkgkhkik(j5kYljk'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f:E]k;E^k=E_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldl?Eel@Eflvn[Eglhlwnilxnjlklynllznmlnlolplgehe}LIeJeKeLeMeNeieEmjebe;G^dkeceOeledeoLmepLeePeQeReneoepeqereseteEHh i j nbk l m n o d p q r s t u v w x y z A B C D E F G H I J K vLwLxLyLzLALCo%fOdPdsKBLtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajaIFH?JvmyJQk/juK]jzJDLELFLGLHLIL6kJLKLLLMLNLOLPLIkvKwKhMxKyKzKAKBKiMjMCKkMDKEKlMmMnMoMpMqMFKGKrMsMwmxme lkbjwoxoyo)j*jJkKkLkYbwexeZb0byezeAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eGkHkSkTkUk5m6m7m8mVkWkAm7kcjmknk9m!mXkYkBm#mZk0k1k2ktM_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj$m%m3krkUiagaF=jskbFBJCJEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2I3I2pCk4IDkMkfe[jNk(k)k*kZiljEkFkHm~bQLacbctmccumdcuMecvMfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctcXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAd[eTmUm]eVmWm_dXmYmln^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfTJob0m1m2m3m4m/I:I;IRLwM=IUJSL~JTLULVLWLaKXLYLZL0L1L2L3L4L5L6L7L8L9L!LzH#LbK$L%LkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5I6I7I8I9IVJHKIKJKKKLKMK8nWJNKLpXJYJWMXMYMZM0M1MOKZJpH0JPKQKRK1J2M3M4M5M6G7G8G9G!G#GSK$G%G'G(G)G!I#IUp$I%IBH'IVp(IWp)I*I+I,IdK*G

1682 if err == cydriver.CUresult.CUDA_SUCCESS: 2Xb[I]I3K^I_I`I{I|I}ITI~IaJbJcJdJql4K5K6K7K8KeJ_j`jEjFjUIGj{jfJgJHj|jrl}jhJIjsl9KiJJjKjVItljJ~jakbkkJlJul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp!K#K$K%K'K!n#n$n%nvlmJ(K)KwlxlylzlAl'n(n)n*n+n,n-n.n/n:nCe`dQd+d,dBdDe{dRd-d.dCdEe|dSd/d:dDdFe}dTd;d=dEdGe~dUd?d@dFdHeaeVd[d]dGdb ;n=n?n@n[n]n^n_n`n{n|n}nwp*K~naoboconJ+K,K-K.KdoxpfKmnoJpJqJnnrJCmDmgKhKonpniK/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leo/K:KFlGlHlIlJlKlfo+k,k-k.k/k:k;k=k*l+l,l;LLl;KsJ#j=K?KMlNlOl@K[K]K^K_KyMjKkKzMAMgohoioBMCMDMEMFMGMlKmKHMIMjokoloJMKMLMMMNMmonooopoqoroso`KtJ$j{K|KPlQlRl}K~KaLbLcLtodLuJ%jeLfLSlTlUlgLhLiLjLkLVluovoWllLmL'jckXlnLdkekfkgkhkik(j5kYljk'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f:E]k;E^k=E_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldl?Eel@Eflvn[Eglhlwnilxnjlklynllznmlnlolplgehe}LIeJeKeLeMeNeieEmjebe;G^dkeceOeledeoLmepLeePeQeReneoepeqereseteEHh i j nbk l m n o d p q r s t u v w x y z A B C D E F G H I J K vLwLxLyLzLALCo%fOdPdsKBLtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajaIFH?JvmyJQk/juK]jzJDLELFLGLHLIL6kJLKLLLMLNLOLPLIkvKwKhMxKyKzKAKBKiMjMCKkMDKEKlMmMnMoMpMqMFKGKrMsMwmxme lkbjwoxoyo)j*jJkKkLkYbwexeZb0byezeAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eGkHkSkTkUk5m6m7m8mVkWkAm7kcjmknk9m!mXkYkBm#mZk0k1k2ktM_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgj$m%m3krkUiagaF=jskbFBJCJEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2I3I2pCk4IDkMkfe[jNk(k)k*kZiljEkFkHm~bQLacbctmccumdcuMecvMfcAegc@eImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctcXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAd[eTmUm]eVmWm_dXmYmln^e_e`e{e|e}e~eafbfcfdfZmefffgfhfifjfTJob0m1m2m3m4m/I:I;IRLwM=IUJSL~JTLULVLWLaKXLYLZL0L1L2L3L4L5L6L7L8L9L!LzH#LbK$L%LkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5I6I7I8I9IVJHKIKJKKKLKMK8nWJNKLpXJYJWMXMYMZM0M1MOKZJpH0JPKQKRK1J2M3M4M5M6G7G8G9G!G#GSK$G%G'G(G)G!I#IUp$I%IBH'IVp(IWp)I*I+I,IdK*G

1683 return int(dev) 2[I]I3K^I_I`I{I|I}ITI~IaJbJcJdJql4K5K6K7K8KeJ_j`jEjFjUIGj{jfJgJHj|jrl}jhJIjsl9KiJJjKjVItljJ~jakbkkJlJul9nLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!jXpYp!K#K$K%K'K!n#n$n%nvlmJ(K)KwlxlylzlAl'n(n)n*n+n,n-n.n/n:nCe`dQd+d,dBdDe{dRd-d.dCdEe|dSd/d:dDdFe}dTd;d=dEdGe~dUd?d@dFdHeaeVd[d]dGdb ;n=n?n@n[n]n^n_n`n{n|n}nwp*K~naoboconJ+K,K-K.KdoxpfKmnoJpJqJnnrJCmDmgKhKonpniK/lBlqjrjqnrn;jClDlypzpAp:l;l=lBp?lEl@l[l]lCpDp^leo/K:KFlGlHlIlJlKlfo+k,k-k.k/k:k;k=k*l+l,l;LLl;KsJ#j=K?KMlNlOl@K[K]K^K_KyMjKkKzMAMgohoioBMCMDMEMFMGMlKmKHMIMjokoloJMKMLMMMNMmonooopoqoroso`KtJ$j{K|KPlQlRl}K~KaLbLcLtodLuJ%jeLfLSlTlUlgLhLiLjLkLVluovoWllLmL'jckXlnLdkekfkgkhkik(j5kYljk'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f:E]k;E^k=E_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldl?Eel@Eflvn[Eglhlwnilxnjlklynllznmlnlolplgehe}LIeJeKeLeMeNeieEmjebe;G^dkeceOeledeoLmepLeePeQeReneoepeqereseteEHh i j nbk l m n o d p q r s t u v w x y z A B C D E F G H I J K vLwLxLyLzLALsKBLyJuK]jzJDLELFLGLHLIL6kJLKLLLMLNLOLPLIkvKwKhMxKyKzKAKBKiMjMCKkMDKEKlMmMnMoMpMqMFKGKrMsMe lkbjwoxoyo)j*jJkKkLkYbwexeZb0byezeAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmGm}b,e-e.eGkHk7kcjmknkBmtM_l8kZl0l9k`l{lhjsjtjdj1lTh!kbg2lUh3lVh4lWh5lXh#kcg6lYh|l]E7l^E}l_E~l`Eam{Ebm|E8l}Ecm~EdmZhok/eem0hfm1hgm2hhm3hpk:eim4h5hjmkm$k9lqk!llmmmijjjkjujvjwjxjyjzj#l$l%lnmompmqmrmsmAj+jejBjCj,j-jfjgjrkUiagaF=jskbFBJCJEpFpGptk;e?juk'l(lvk)l@j%k'kViWiXi=e?eYiwkxkykzkAkBk0p1p2I3I2pCk4IDkMkfe[jNk(k)k*kZiljEkFkHm~bQLacbctmccumdcuMecvMfcAegcImJmKmLmMmNmOmPmQmRmSmhcicjckclcmcncocpcqcrcsctcXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`c{cWd|cXd}c~cYdadZdbdJdcdKddda edfd0dgd1dhdidjdkdLdldMdmd2dnd3dod4dpd5dqd6drd7dsd8dtd9dud!dvd#dwdxd$dyd%dzdAdTmUmVmWm_dXmYmZmTJ0m1m2m3m4m/I:I;IRLwM=IUJSL~JTLULVLWLaKXLYLZL0L1L2L3L4L5L6L7L8L9L!LzH#LbK$L%LkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5I6I7I8I9IVJHKIKJKKKLKMK8nWJNKLpXJYJWMXMYMZM0M1MOKZJpH0JPKQKRK1J2M3M4M5M6G7G8G9G!G#GSK$G%G'G(G)G!I#IUp$I%IBH'IVp(IWp)I*I+I,IdK*G

1684 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT: 

1685 with nogil: 2XbCo%fOdPdtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajaIFH?JvmQk/j]jwmxme GkHkSkTkUk5m6m7m8mVkWkAm9m!mXkYkBm#mZk0k1k2k$m%m3k@e[e]eln^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfob

1686 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2XbCo%fOdPdtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajaIFH?JvmQk/j]jwmxme GkHkSkTkUk5m6m7m8mVkWkAm9m!mXkYkBm#mZk0k1k2k$m%m3k@e[e]eln^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfob

1687 if <void*>(ctx) != NULL: 2XbCo%fOdPdtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajaIFH?JvmQk/j]jwmxme GkHkSkTkUk5m6m7m8mVkWkAm9m!mXkYkBm#mZk0k1k2k$m%m3k@e[e]eln^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfob

1688 raise RuntimeError( 

1689 "internal cuda.core error, please report: cuCtxGetDevice returned " 

1690 "CUDA_ERROR_INVALID_CONTEXT while a context is current" 

1691 ) 

1692 return 0 # cudart behavior 2XbCo%fOdPdtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajaIFH?JvmQk/j]jwmxme GkHkSkTkUk5m6m7m8mVkWkAm9m!mXkYkBm#mZk0k1k2k$m%m3k@e[e]eln^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfob

1693 else: 

1694 HANDLE_RETURN(err) 

1695 elif device_id < 0: 2Xb6p7p8p9p!p#p$p%p'pTI(p)p*p+p,p-p.p/p:p;p=p?p@p[p]pEj^pFj_pUI`pGj{p|p}p~pHjaqbqcqdqeqIjfqgqhqiqJjjqKjkqVIlqmqnqoqpqqqrqsqtquqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=q?q@q[q]qMp^qNp_q`q{q|q}q~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.FrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,rPp-r.r/r/F:r;r=r?r@r:F[r]rQp^r_r]n`rRp{r|r}r~rasbscswpdsesfsgshsisjskslsmsnsospsqsrssstsxpusvswsxsyszsAsBsCsDsEsFsGsmnHsoJIsJsKsnnLsrJMsCmNsDmOsPsQsonRspnSsTs/lUsVsqjWsrjXsYsZs0s1s2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!s#s@l$s[l%s]l'sCp(sDp)s^l*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tmF5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueu?Gfu@Ggu)JhuiunFjuoFkupFlumunuoupuqurusutu'juuvuwuxuyuzuAurIBusnCuEoDuEuFu(jGuHuIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f]k^k_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~HblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhePu8MIe/EJe-IKesILe.IMeNeieQujebe;G^doKkepKceOeledeRumeeePe9MQeReqKnerKoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSbYuZu0u1u2u3u4u5u6u7u8uOdPd$f9u!uXI*JvJ+JOM,JYI#uPM-JwJ$uQM%uRM'u3F(u)uTo.JUo*L/JCL:J^GxJ;JVoSM=J4F*u@JZIWo+uJh,uKh+L-uLhXo.u/u:u;u=u?uzJ@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o!M=o?oGvHvIvCi@o[JJvtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5w6w7w8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xMh`ocF;x=x?xTMNh@xOhPhQhRh{oUMzoVMSh[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylydjmynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyokWy/eXyYyZy0y1y2y3y4y5ypk6y:e7y8y9y!y#y$y%y'yqk(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzejczdzezfzgzfjhzgjiz7hjzkz|o}olzmznz3EozrkpzqzUirzagszAotzuzvzwzxz~o8hyzapBJzzCJAzbpcpdpBzCzDzEzFz?jGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9zfe!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-zCN~bQLacbc.zcc/zdcecfcAe:zgc;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoBpBqBrBsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4B5B6B}J7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]Bob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkC5FlCmCnCoCpCqCrC~JsCtCuCvCwCaKxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0CVJ1C2C3C4C5C6C7C8n8C9C!CLp#C$C%C'C(C)C*C+C,C-C.C/C0J:C;C=C?C@C[C]C^C_C`C{C6G|C7G}C8G~C9GaD!GbD#GcDdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlDmDnDUpoDpDqDrDNdsDupcKtDuDVpvDwDWpxDyDzDADBDCDDDEDFD^jvpGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E

1696 raise ValueError(f"device_id must be >= 0, got {device_id}") 2*L

1697 return device_id 2Xb6p7p8p9p!p#p$p%p'pTI(p)p*p+p,p-p.p/p:p;p=p?p@p[p]pEj^pFj_pUI`pGj{p|p}p~pHjaqbqcqdqeqIjfqgqhqiqJjjqKjkqVIlqmqnqoqpqqqrqsqtquqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=q?q@q[q]qMp^qNp_q`q{q|q}q~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.FrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,rPp-r.r/r/F:r;r=r?r@r:F[r]rQp^r_r]n`rRp{r|r}r~rasbscswpdsesfsgshsisjskslsmsnsospsqsrssstsxpusvswsxsyszsAsBsCsDsEsFsGsmnHsoJIsJsKsnnLsrJMsCmNsDmOsPsQsonRspnSsTs/lUsVsqjWsrjXsYsZs0s1s2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!s#s@l$s[l%s]l'sCp(sDp)s^l*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tmF5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueu?Gfu@Ggu)JhuiunFjuoFkupFlumunuoupuqurusutu'juuvuwuxuyuzuAurIBusnCuEoDuEuFu(jGuHuIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f]k^k_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~HblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhePu8MIe/EJe-IKesILe.IMeNeieQujebe;G^doKkepKceOeledeRumeeePe9MQeReqKnerKoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSbYuZu0u1u2u3u4u5u6u7u8uOdPd$f9u!uXI*JvJ+JOM,JYI#uPM-JwJ$uQM%uRM'u3F(u)uTo.JUo*L/JCL:J^GxJ;JVoSM=J4F*u@JZIWo+uJh,uKh+L-uLhXo.u/u:u;u=u?uzJ@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o!M=o?oGvHvIvCi@o[JJvtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5w6w7w8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xMh`ocF;x=x?xTMNh@xOhPhQhRh{oUMzoVMSh[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylydjmynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyokWy/eXyYyZy0y1y2y3y4y5ypk6y:e7y8y9y!y#y$y%y'yqk(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzejczdzezfzgzfjhzgjiz7hjzkz|o}olzmznz3EozrkpzqzUirzagszAotzuzvzwzxz~o8hyzapBJzzCJAzbpcpdpBzCzDzEzFz?jGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9zfe!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bQLacbc.zcc/zdcecfcAe:zgc;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoBpBqBrBsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4B5B6B}J7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]Bob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkC5FlCmCnCoCpCqCrC~JsCtCuCvCwCaKxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0CVJ1C2C3C4C5C6C7C8n8C9C!CLp#C$C%C'C(C)C*C+C,C-C.C/C0J:C;C=C?C@C[C]C^C_C`C{C6G|C7G}C8G~C9GaD!GbD#GcDdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlDmDnDUpoDpDqDrDNdsDupcKtDuDVpvDwDWpxDyDzDADBDCDDDEDFD^jvpGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E

1698  

1699  

1700cdef inline list Device_ensure_tls_devices(cls): 

1701 """Ensure thread-local Device singletons exist, creating if needed.""" 

1702 cdef int total 

1703 try: 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e=G+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSb]M6F^M_M`M7F|LYu8FZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$u,GQM%uRM'u3F(u)uToTK.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=JiOoN4F*uFH?J@JZIWo+uvmJh,uKh+L-uLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAmcF;x=x7k?xTMNhcj@xOhPhQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~o8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-z~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa UKDAVKEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnC3JwMoC4J5J6J=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*djORCkOSClOTCmOUCnOVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E

1704 return _tls.devices 2Xb[I6p]I7p3K8p^I9p_I!p`I#p{I$p|I%p}I'pTI(p~I)paJ*pbJ+pcJ,pdJ-pql.p4K/p5K:p6K;p7K=p8K?peJ@p_j[p`j]pEj^pFj_pUI`pGj{p{j|pfJ}pgJ~pHjaq|jbqrlcq}jdqhJeqIjfqslgq9KhqiJiqJjjqKjkqVIlqtlmqjJnq~joqakpqbkqqkJrqlJsqultq9nuqLjvqMjwqNjxqOjyqPjzqQjAqRjBqSjCqTjDqUjEqVjFqWjGqXjHqYjIqZjJq0jKq1jLq2jMq3jNq4jOq5jPq6jQq7jRq8jSq9jTq!jUqXpVqYpWq9FXq!FYqZqDo#F0q1q$F2q%F3q'F4qngogpg5qqgrgsg(F6q7q8q!K9q#K!q$K#q%K$q'K%q'q(q)q*q+q,q-q.q!n/q#n:q$n;q%n=qvl?qmJ@q(K[q)K]qMp^qNp_qwl`qxl{qyl|qzl}qAl~q'nar(nbr)ncr*ndr+ner,nfr-ngr.nhrOpirjrkrlr)Fmr*Fnr+For,Fpr-Fqr.Frrsrtrur/nvr:nwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(rb )r*r+r,rPp-r.r/r/F:r;n;r=n=r?n?r@n@r:F[r[n]rQp^r_r]n`rRp{r^n|r_n}r`n~r{nas|nbs}ncswpds*Kesfsgshsis~njsaoksbolscomsnJns+Kos,Kps-Kqs.KrsdosstsxpusvswsxsyszsAsBsCsDsEsFsfKGsmnHsoJIspJJsqJKsnnLsrJMsCmNsDmOsgKPshKQsonRspnSsiKTs/lUsBlVsqjWsrjXsqnYsrnZs;j0sCl1sDl2syp3szp4sAp5s:l6s;l7s=l8sBp9s?l!sEl#s@l$s[l%s]l'sCp(sDp)s^l*s+seo,s/K-s.s/s:K:s;s=s?s@sFl[sGl]sHl^sIl_sJl`s{s|s}s~sKlatbtctdtetftfogthtnjchojdhpjehfhghhhihjhkhlhmhnhohph+kqh,krh-ksh.kth/kuh:kvh;kwh=kxh*lyh+lzh,lAhBhChDh%JEh'JFh(JGh;LitHhjtLlktlt;KmtsJnt#jot=Kpt?KqtMlrtNlstOltt@Kut[Kvt]Kwt^Kxt_KytyMztjKAtkKBtzMCtAMDtgoEthoFtioGtBMHtCMItDMJtEMKtFMLtGMMtlKNtmKOtHMPtIMQtjoRtkoStloTtJMUtKMVtLMWtMMXtNMYtZtmo0tno1too2tpo3tqo4tmF5tro6t7t8tso9t`K!ttJ#t$j$t{K%t|K'tPl(tQl)tRl*t}K+t~K,taL-tbL.tcL/tto:t;tdL=tuJ?t%j@teL[tfL]tSl^tTl_tUl`tgL{thL|tiL}tjL~tkLaubuVlcuuoduvoeu?Gfu@Ggu)JhuiunFjuoFkupFlumunuouWlpuqurulLsumLtu'juuckvuXlwunLxudkyuekzufkAurIBusnCuEogkDuhkEuikFu(jGu5kHuYlIujkJu=L'f(f?L)f[G?k]G@k*f+f{H[k,f-f.f@L/fqFtn:f[L;f:E]k;E^k=E_krFun]L=f^L?f_L@f`L[f]f^f_f`f{f|f}f~f|H`k}H{k|k}k~kal~Hblcldl?Eel@Eflvn[EglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugenKhe}LPu8MIe/EJe-IKesILe.IMeNeieEmQujebe;G^doKkepKceOeledeRuoLmepLeePe9MQeReqKnerKoepeqereseteEHSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L qL- i M Hp. ;Fj N {L/ =FnbO An: k P pb; l Q qb= m R rb? n S IhBe@ Boo T sbtbubvbwbxbybzbAbBbCbOk[ 3pd U Pk] 4pp V .jq W ^ ~L_ ` aM{ | bM} ~ cMabbbdMcbdbeMebr rHs sHt u v tHw uHx y z vHA wHB C X Y Z 0 1 2 3 4 5 6 7 8 IpfbtFD 9 gbuFE ! JphbvFF # Kpib?FG $ NoOoPoWIjb5pH % rLDbsLEbFbGbfMkbxHI ' gMlb{GJ ( TpmbyHK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9elF!e#e$e%e'e(e)e*e=G+eRoHbSoIbJbKb(LLb)LMbNbObtLPbuLQbRbSb]M6F^M_M`M7F|LYu8FZu0u1uvL2uwL3uxL4uyL5uzL6uAL7u8uCo%fOdPd$f9usK!uXIBL*JvJ+JOM,JYI#uPM-JwJ$u,GQM%uRM'u3F(u)uToTK.JtK#i$i@F[FwFdFxF]H%i'i]F^HyF^F(i_F`FQieFZp{F2i|F}F3i~FfF)iaGbGcGzFRiAFgF4iBFCFdGDFEFhFeGiFfG*i_H+igGhGiGjGkGlGmGnGoGpGqGrG,i5isGFFGF-itGHFuG.ivGIFJFwG/i:i;ixG6iKFyGLFzGAGMF=i?iBGCGNFOFDGEGFG@iPFQF[iGGRFHGSFIG7iTFUF]i^iJGKG`HLGMGNGOGPG_iQG`iRGjFSGkF{iTG|i8iVFkkWF9iUGVG!i}i~iSiWGXGYGTiZGajUo*L/JCL:J^GaIxJ;JVoSM=JiOoN4F*uFH?J@JZIWo+uvmJh,uKh+L-uLhXo.u/u:uyJ;uQk=u/juK?u]jzJ@uDL[uEL]uFL^uGL_uHL`uIL{u6k|uJL}uKL~uLLavMLbvNLcvOLdvPLevIkfvvKgvwKhvhMivxKjvyKkvzKlvAKmvBKnviMovjMpvCKqvkMrvDKsvEKtvlMuvmMvvnMwvoMxvpMyvqMzvFKAvGKBvrMCvsMDvYosiZo,L0oti_Gc RkHd:jIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J!M=o?oGvHvIvCi@o[JJvwmxmtIKvBnLvuIMvvINvwIOvxIPvyIQvzIRvSvTvCnUvVvAIWvBIXvCIYvDIZvDn0vEI1vFI2vGI3v4vHI5vII6vJI7vKI8vEn9ve lk!vbj#vwo$vxo%v'vyo(v)v*v+v)j,v*j-vJk.v/v:v;v=v?v@v[v]v^v_vue`v{vKk|vLk}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbweUwxeVwZb0byeWwzeXwAJ1b2b3b]J4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bFmYwGmZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8wym9wzm!w[o]o0I#w1I$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x^J/x:xVkWkMh`oAmcF;x=x7k?xTMNhcj@xOhPhQhRh{oUMzoVMShmk[xnk]x9m!m^x_xXkYkBm#mZk0k1k2ktM`x{x|x}x~xay_lby8kcyZldy0ley9kfy`lgy{lhyhjiyjysjkytjlydjmyny1loyThpy!kqybgry2lsyUhty3luyVhvy4lwyWhxy5lyyXhzy#kAycgBy6lCyYhDy|lEy]EFy7lGy^EHy}lIy_EJy~lKy`ELyamMy{ENybmOy|EPy8lQy}ERycmSy~ETydmUyZhVyokWy/eXyemYy0hZyfm0y1h1ygm2y2h3yhm4y3h5ypk6y:e7yim8y4h9y5h!yjm#ykm$y$k%y9l'yqk(y!l)ylm*ymm+yij,yjj-ykj.yuj/yvj:ywj;yxj=yyj?yzj@y6h#l[y$l]y%l^ynm_yom`ypm{yqm|yrm}ysm~yAjaz+jbzejczBjdzCjez,jfz-jgzfjhzgjiz$m%m7h3kjzkz|o}olzmznz3EozrkpzqzUirzagszAotzaFuz=jvzskwzbFxz~o8hyzapBJzzCJAzbpcpdpEpBzFpCzGpDztkEz;eFz?jGzukHz'lIz(lJzvkKz)lLz@jMz%kNz'kOzViPzWiQzXiRz=eSz?eTzYiUzwkVzxkWzykXzzkYzAkZzBk0z0p1z1p2z2I3z3I4z2p5zCk6z4I7zDk8zMk9zfe!z[j#zNk$z(k%z)k'z*k(zZi)zlj*zEk+zFk,zepfpgphpipjpkplpmpnpopppqpHm-z~bQLacbctm.zccum/zdcuMecvMfcAe:zgc@eIm;zJm=zKm?zLm@zMm[zNm]zOm^zPm_zQm`zRm{zSm|zhcicjckclcmcncocpcqcrcsctc0i}z1i~zaAbAXFucYFvcZFwc0Fxc1Fyc2Fzc4EAc5EBc6ECc7EDc8EEc9EFc!EGc#EHc$EIc%EJc'EKc(ELc)EMc*ENc+EOc,EPc-EQc.ERc_JSc`JTc.GUc|GVc}GWc~GXcaHYcbHZccH0c/G1cdH2ceH3cfH4cgH5chH6ciH7c:G8cjH9ckH!clH#cmH$cnH%coH'c{J(cDJ)cEJ*cFJ+cGJ,cHJ-cIJ.cJJ/cKJ:cLJ;cMJ=cNJ?cOJ@cPJ[cQJ]cRJ^cSJ_c`cLITbUbMIVb9hNIWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa UKDAVKEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[eTmpBUmqB]eVmrBWmsBtBuBvBwBxByBzBABBB|JCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B_d4BXm5BYm6B}Jln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdfZm]BefffgfhfifjfTJob0m^B1m_B2m`B{B|B}B~BaCbCcCdCeC3mfC4mgChCiCDj/IjC:IkC5FlC;ImCRLnC3JwMoC4J5J6J=IpCUJqCSLrC~JsCTLtCULuCVLvCWLwCaKxCXLyCYLzCZLAC0LBC1LCC2LDC3LEC4LFC5LGC6LHC7LIC8LJC9LKC!LLCzHMC#LNCbKOC$LPC%LQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf0G1n1G2n2G3nBfCfDfEfFf3G4n4G5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*djORCkOSClOTCmOUCnOVCUfVfWf5G6nmj7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f5IWC6IXC7IYC8IZC9I0CVJ1CHK2CIK3CJK4CKK5CLK6CMK7C8n8CWJ9CNK!CLp#CXJ$CYJ%CWM'CXM(CYM)CZM*C0M+C1M,COK-CZJ.CpH/C0J:CPK;CQK=CRK?C1J@C[C]C2M^C3M_C4M`C5M{C6G|C7G}C8G~C9GaD!GbD#GcDSKdD$GeD%GfD'GgD(GhD)GiDGHjDkDAHlD!ImD#InDUpoD$IpD%IqDBHrDNdsDupcKtD'IuDVpvD(IwDWpxD)IyD*IzDADBD+ICDDD,IEDdKFD^jvp*GGDHHHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6DIH7DJH8DKH9DLH!DMH#DNH$DOH%DPH'DQH(DRH)DSH*DTH+DUH,DVH-DWH.DXH/DYH:DZH;D0H=D1H?D2H@D3H[D4H]D5H^D6H_D7H`D8H{D9H|D!H}D#H~D$HaE%HbE'HcE(HdE)HeE*HfE+HgE,HhE-HiEjEkElE.HmEnEoE/HpEqE+GrEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWE:HXE;HYEZE0E=H1E

1705 except AttributeError: 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1706 with nogil: 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1707 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1708 devices = _tls.devices = [] 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1709 for dev_id in range(total): 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1710 device = super(Device, cls).__new__(cls) 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1711 device._device_id = dev_id 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1712 device._memory_resource = None 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1713 device._has_inited = False 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1714 device._properties = None 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1715 device._resources = None 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1716 device._uuid = None 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1717 device._context = None 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1718 devices.append(device) 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E

1719 return devices 2Xb6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZqDo0q1q2q3q4qngogpg5qqgrgsg6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrCe`dQdtg+d,dugxryrzrArBdvgwgxgygzgBrCrDe{dRdAg-d.dBgDrErFrGrCdCgDgEgFgGgHrIrHgIgJgJrKgLgMgNgOgPgQgRgSgEe|dSdTg/d:dUgKrLrMrNrDdVgWgXgYgZgOrPrFe}dTd0g;d=d1gQrRrSrTrEd2g3g4g5g6gUrVrGe~dUd7g?d@d8gWrXrYrZrFd9g!g#g$g%g0r1rHeaeVd'g[d]d(g2r3r4r5rGd)g*g+g,g-g6r7r.g/g:g;g=g?g@g[g]g^g_g`g8r{g|g}g~gahbh9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtnjchojdhpjehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhitHhjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuEoDuEuFuGuHuIuJu'f(f)f?k@k*f+f[k,f-f.f/ftn:f;f]k^k_kun=f?f@f[f]f^f_f`f{f|f}f~f`k{k|k}k~kalblcldlelflvnglhlwnilxnjlklynllznmlnlolplKuLuMuNuOugehePuIeJeKeLeMeNeieQujebe^dkeceOeledeRumeeePeQeReneoepeqereseteSuTuUuVuWuXuFoGoHoIoJoKoLoMoSp, h L - i M Hp. j N / nbO An: k P pb; l Q qb= m R rb? n S IhBe@ o T sbtbubvbwbxbybzbAbBbCbOk[ d U Pk] p V q W ^ _ ` { | } ~ abbbcbdbebr s t u v w x y z A B C X Y Z 0 1 2 3 4 5 6 7 8 IpfbD 9 gbE ! JphbF # KpibG $ NoOoPojbH % DbEbFbGbkbI ' lbJ ( TpmbK ) SeTeUeVeWeXeYeZe0e1eQo2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+eRoHbSoIbJbKbLbMbNbObPbQbRbSb6F7FYu8FZu0u1u2u3u4u5u6u7u8u%fOdPd$f9u!u#u$u,G%u'u(uTo#i$i%i'i(iQi2i3i)iRi4i*i+i,i5i-i.i/i:i;i6i=i?i@i[i7i]i^i_i`i{i|i8ikk9i!i}i~iSiTiajUoVo*uWo+uvmJh,uKh-uLhXo.u/u:u;uQk=u/j?u]j@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvYosiZo0otic HdIduiviwiEvxiyiziAiBi1o2o3o4o5oFv6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o2J=o?oGvHvIvCi@oJvwmxmKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9ve !v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vue`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwveAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwYbUwVwZb0bWwXw1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|bYwZw}b,e-e.e0w1w2w3w4w5wGkHkSkTkUk6w7w5m6m7m8m8w9w!w[o]o#w$w^o_o%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:xVkWkMh`oAm;x=x?xNh@xOhPhQhRh{oSh[x]x9m!m^x_xXkYkBm#mZk0k1k2k`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y6h[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhziz$m%m7h3kjzkz|o}olzmznzozpzqzrzsztzuzvzwzxz~o8hyzapzzAzbpcpdpBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,zepfpgphpipjpkplpmpnpopppqp-z~bacbc.zcc/zdcecfc:zgc@e;z=z?z@z[z]z^z_z`z{z|zhcicjckclcmcncocpcqcrcsctc}z~zaAbAucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cTbUbVb9hWbDi'm{cFn!hEiWdcAGndA#h(m)m*m$heAfAgAhA|cXd%h'h}ciAHnjAkAFi~cInlA(hGiYdmAJnnA)h+m,m-m*hoApAqArAadZd+h,hbdsAKntAuAdgHiJdvA-lrpeg.m/m:mfgwAxAyAzAcdKdgghgddAALnBACAa DAEAf g * + edfd-hIi0dFAMnGA.h;m=m?m/hHAIAJAKAgd1d:h;hhdidLAjdkdMANANnOAPAigJiLdQA.lspjg@m[m]mkgRASATAUAldMdlgmgmdVAOnWAXA=hKi2dYAPnZA?h^m_m`m@h0A1A2A3And3d[h]hod4AQn5A6A^hLi4d7ARn8A_h{m|m}m`h9A!A#A$Apd5d{h|hqd%ASn'A(A}hMi6d)ATn*A~h~manbnai+A,A-A.Ard7dbicisd/AUn:A;AdiNi8d=AVn?Aeicndnenfi@A[A]A^Atd9dgihiud_AWn`A{AiiOi!d|AXn}Ajifngnhnki~AaBbBcBvd#dlimiwdxddBYneBfBniPi$dgBZnhBoiinjnknpiiBjBkBlByd%dqirizdAdmB0nnBoB[epBqB]erBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6Bln7B8B9B!B#B$B%B^e_e`e{e|e'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B}e~eafbfcfdf]Befffgfhfifjfob^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCDjjCkClCmCnC3JoC4J5J6JpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCtpkflfmfnfofpfqfrfsftfufvfwfxfyfzfAf1n2n3nBfCfDfEfFf4n5nGfHfIfJfKfLfMfNfOfPfQfRfSfTf'd(d)d*dRCSCTCUCVCUfVfWf6n7nXfYfZf0f1f2f3f4f5f6f7f8f9f!f#fWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDuptDuDvDwDxDyDzDADBDCDDDEDFD^jvpGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E