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

478 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-16 01:23 +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.") 2RO

81  

82 @classmethod 

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

84 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb9eGmOiDiPiQiRiEiFiGiqiXjOoSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf

85 self._handle = handle 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb9eGmOiDiPiQiRiEiFiGiqiXjOoSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf

86 self._cache = {} 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb9eGmOiDiPiQiRiEiFiGiqiXjOoSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf

87 return self 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb9eGmOiDiPiQiRiEiFiGiqiXjOoSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf

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: 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j O nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBo5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COcPcQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf

94 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j O nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBo5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COcPcQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf

95 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j O nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBo5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COcPcQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf

96 return <int>default 

97 HANDLE_RETURN(err) 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j O nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBo5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COcPcQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf

98 return val 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j O nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBo5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COcPcQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf

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) 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d(E;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j EKO nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' VKJeKKKeLKLeMKMeWKNeXKOeYKPeNKQeZKReOKSe0KTePKUeQKVe1KWeRKXe2KYe`CZeSK0e#K1e2e3e4e$K5e%K6e'K7eYG8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBo5D6D7DOicD:CDi8D9DPidD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;D=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwExE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMizDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COcPcQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf

103 if cached is not None: 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d(E;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j EKO nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' VKJeKKKeLKLeMKMeWKNeXKOeYKPeNKQeZKReOKSe0KTePKUeQKVe1KWeRKXe2KYe`CZeSK0e#K1e2e3e4e$K5e%K6e'K7eYG8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBo5D6D7DOicD:CDi8D9DPidD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;D=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwExE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMizDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COcPcQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf

104 return cached 2=d?d@d[d]d^d4k7kWj~daebece_d(E;dde`dee{dfe|dgeheiejekelemekGK L M N EKO P Q R S T U V W X Y Z 0 1 2 3 4 5 6 2D7 3D8 4D9 ! # pGqG$ ;E% ' VKKKLKMKWKXKYKNKZKOK0KPKQK1KRK2K`CSK#K$K%K'KYGUGVGWGXGXHYHc dk?kek!iYjZj0jMC1jtiGnCjyozoAo3j(eDj4j5jEjuiviwi)e*exi6j7j8j9j!j#j$j;j}dFjyi%i%j'jWb$E%E'E$f%f'f(f)fa *f+f,f-f.f

105 cdef int value = self._get_attribute(attr, default) 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j O nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBo5D6D7DOicD:CDi8D9DPidD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;D=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwExE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMizDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COcPcQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf

106 self._cache[attr] = value # setdefault not needed for ints 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j O nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBo5D6D7DOicD:CDi8D9DPidD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;D=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwExE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMizDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COcPcQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf

107 return value 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j O nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBo5D6D7DOicD:CDi8D9DPidD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;D=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwExE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMizDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COcPcQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf

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) 2bEBDCDDDEDFDGDNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C$E=E?E@E[E]E^E%E_E`E{E|E}E~E'EaFbFcFdFeFfF

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) 2Si

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) 2[D

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) 2]D

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) 2_Dc

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) 2`D

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) 2{D

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) 2aEBDCDDDEDFDGDNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C$E=E?E@E[E]E^E%E_E`E{E|E}E~E'EaFbFcFdFeFfF

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) 2GE

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) 28i

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) 2}D

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) 2mE

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) 2lE

173  

174 @property 

175 def maximum_texture1d_mipmapped_width(self) -> int: 

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

177 return self._get_cached_attribute( 2sD

178 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2sD

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) 2qE

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) 2oE

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) 2Yi

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) 2Wi

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) 2Xi

205  

206 @property 

207 def maximum_texture2d_mipmapped_width(self) -> int: 

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

209 return self._get_cached_attribute( 2uD

210 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2uD

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( 2Ji

217 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2Ji

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) 2sE

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) 2Zi

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) 2rE

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( 2Ki

239 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 2Ki

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( 2wD

246 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2wD

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( 2vD

253 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2vD

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) 2tE

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) 2kE

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( 2rD

270 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2rD

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) 2pE

277  

278 @property 

279 def maximum_texture2d_layered_height(self) -> int: 

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

281 return self._get_cached_attribute( 2tD

282 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2tD

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( 2Ii

289 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2Ii

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( 2xD

296 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 2xD

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( 2Li

303 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 2Li

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) 2dE

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) 2Ui

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) 2eE

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) 2iE

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) 2hE

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) 2gE

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) 2cE

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( 2Hi

345 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2Hi

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) 2fE

352  

353 @property 

354 def maximum_surface2d_layered_height(self) -> int: 

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

356 return self._get_cached_attribute( 2nD

357 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 2nD

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( 2oD

364 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2oD

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) 2jE

371  

372 @property 

373 def maximum_surfacecubemap_layered_width(self) -> int: 

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

375 return self._get_cached_attribute( 2qD

376 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2qD

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( 2pD

383 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 2pD

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~D

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) 2[hHnhG:Flb+j8E

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) 26i

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) 27i

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)) 2+D

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) 2BEc

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)) 2Xj

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)) 2:D

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)) 27D

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;F

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!D

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)) 2Ri

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) 2CE

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) 2DE

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) 2EE

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)) 2FE

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=F

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(D

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=D

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) 2TiBDCDDDEDFDGDNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C

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)) 2UbHE

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) 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujYkDoEoZk0k1k2k3kFo]m^mKdydLdzdMdAdNdBdOdCdPdDdGo_m`m{m|m}mHoIoanbncndnenfngnhninjnkn-i.iEmFmBj5k6kln8k9k!k#k$k%kkklkmknkokpkqkrkdlelflBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCn:kvjPj;kQjRjSjTjUjVjwj[hHnhG9eBo9Dlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b(e)e*eXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l8d9d!d#d

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) 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujYkDoEoZk0k1k2k3kFo]m^mKdydLdzdMdAdNdBdOdCdPdDdGo_m`m{m|m}mHoIoanbncndnenfngnhninjnkn-i.iEmFmBj5k6kln8k9k!k#k$k%kkklkmknkokpkqkrkdlelflBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCn:kvjPj;kQjRjSjTjUjVjwj[hHnhG9eBoPilb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b(e)e*eXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l8d9d!d#d

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'D

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)) 2?D

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( 2mDBDCDDDEDFDGDNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C

515 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2mDBDCDDDEDFDGDNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C

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( 2kDNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C

522 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 2kDNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C

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)) 2~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeOo

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)) 2yE

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) 2zE

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( 2Fi

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

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) 2?F

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)) 24i

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]d^dSl=k6C7C8C9C!C#C~daezeAeBeCeDeEebece_d(E;dde`dFeee{dfe|dGeHeIegeheiejekeleme#D8E!e#e$eCIWHsldk?k@kektlul$i:ivl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CHl~k

561  

562 @property 

563 def compute_preemption_supported(self) -> bool: 

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

565 return bool( 2dD

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

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( 2:C

573 self._get_cached_attribute( 2:C

574 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 2:C

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$Dc

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( 2lD

591 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 2lD

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( 2^C

598 self._get_cached_attribute( 2^C

599 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 2^C

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( 2=C

607 self._get_cached_attribute( 2=C

608 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 2=C

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( 24k7kkGK L M N EKO P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # pGqG$ % ' VKJeKKKeLKLeMKMeWKNeXKOeYKPeNKQeZKReOKSe0KTePKUeQKVe1KWeRKXe2KYe`CZeSK0e#K1e2e3e4e$K5e%K6e'K7eYG8eUGVGWGXGXHYH_CyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#j$j;j}dFjyi%i%j'j

616 self._get_cached_attribute( 24k7kkGK L M N EKO P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # pGqG$ % ' VKJeKKKeLKLeMKMeWKNeXKOeYKPeNKQeZKReOKSe0KTePKUeQKVe1KWeRKXe2KYe`CZeSK0e#K1e2e3e4e$K5e%K6e'K7eYG8eUGVGWGXGXHYH_CyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#j$j;j}dFjyi%i%j'j

617 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 24k7kkGK L M N EKO P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # pGqG$ % ' VKJeKKKeLKLeMKMeWKNeXKOeYKPeNKQeZKReOKSe0KTePKUeQKVe1KWeRKXe2KYe`CZeSK0e#K1e2e3e4e$K5e%K6e'K7eYG8eUGVGWGXGXHYH_CyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#j$j;j}dFjyi%i%j'j

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* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbpGDbqGEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb@CQbRbSbTbd e ( )

625 self._get_cached_attribute( 2* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbpGDbqGEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb@CQbRbSbTbd e ( )

626 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 2* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbpGDbqGEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb@CQbRbSbTbd e ( )

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( 2gD

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

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( 2[C

641 self._get_cached_attribute( 2[C

642 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 2[C

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) 2^D

650  

651 @property 

652 def generic_compression_supported(self) -> bool: 

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

654 return bool( 2Ei

655 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 2Ei

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) 2|D

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) 2@D

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( 2?C

672 self._get_cached_attribute( 2?C

673 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 2?C

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( 2Mi

681 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 2Mi

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( 2zD

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

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( 2yD

695 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 2yD

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)) 2MoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-m.m/m:m;m=m?m@m[mUDVDWDXDYDZDte=d[f$d%d]fyd^f_f`f{f|fue?d}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@drg)d*dsgAdtgugvgwgxgwe[dyg+d,dzgBdAgBgCgDgEgxe]dFg-d.dGgCdHgIgJgKgLgye^dMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g0D1D~mqoroAmBmSlTlCmDmjl-i.isotouoklllmlvonlolplqlwoxorlmn#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhhFck=kTH:EUHVH* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbVbHbIbJbKbLbMbNbObPbxEhhihjh!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CEhHlhk~kFhGh!GMCHhQbRbSbIhTbJhKhLhMhNhOhPhQhRhSh$f%f'f(f)fa d e ( ) ThUhVhWhXh*f+f,f-f.fYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h;i

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)DEjikFj

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( 2eD

712 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 2eD

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*D

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) 20i

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( 2;C

729 self._get_cached_attribute( 2;C

730 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 2;C

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) 22i

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) 23i

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)) 2AE

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) 25i

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) 25D

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)) 2Oi

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) 2nE

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) 2Vi

773  

774 @property 

775 def stream_priorities_supported(self) -> bool: 

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

777 return bool( 2AD

778 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 2AD

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)) 26D

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)) 2/D

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)) 28D

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( 2cD

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

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( 2Di

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

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)) 2Qi

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;D

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) 2wE

835  

836 @property 

837 def tensor_map_access_supported(self) -> bool: 

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

839 return bool( 2Ni~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLf

840 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 2Ni~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLf

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( 2fD

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

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)) 2IE

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)) 21i

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) 26C7C9C!Cf g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J .Dekyh%ezhAhBhCh'eDh9fCj2j

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%D

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) 2uE

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) 2vE

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)) 2JE

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) 2,D

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) 2-D

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( 2]C

905 self._get_cached_attribute( 2]C

906 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2]C

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( 29E!EHnSoToiFjFkFlFmFnF2D3D4D#EUooF;EpFjD%e'e9f

914 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 29E!EHnSoToiFjFkFlFmFnF2D3D4D#EUooF;EpFjD%e'e9f

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( 2Gi

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

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( 2Wjf g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J iD!iBlyhYj%eClzhDlAhElBhFlChZj'eGlDhIl0jMC1jDIti9fGn-CCj2j.C

933 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 2Wjf g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J iD!iBlyhYj%eClzhDlAhElBhFlChZj'eGlDhIl0jMC1jDIti9fGn-CCj2j.C

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( 2qiPoQoRo

943 self._get_cached_attribute( 2qiPoQoRo

944 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2qiPoQoRo

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( 2hD

955 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 2hD

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( 2ri

965 self._get_cached_attribute( 2ri

966 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 2ri

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 Note 

987 ---- 

988 Will not initialize the GPU. 

989  

990 Parameters 

991 ---------- 

992 device_id : int, optional 

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

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

995  

996 """ 

997 __slots__ = ( 

998 "_device_id", 

999 "_memory_resource", 

1000 "_has_inited", 

1001 "_properties", 

1002 "_resources", 

1003 "_uuid", 

1004 "_context", 

1005 "__weakref__", 

1006 ) 

1007  

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

1009 if isinstance(device_id, Device): 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%gbL'gcL(gdL)geL*gfL+ggL,ghL-giL.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]shF^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtTHCt:EDtUHEtVHFtkGGt-E* f K RJ+ `Lg L LE, 9Eh M 0J- !Ei N HD. {Lj EKO hOnb/ k P FNob: l Q iOpbjOgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbpGDbqGEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' VKJeKKKeLKLeMKMeWKNeXKOeYKPeNKQeOnZKReOKSe0KTePKUeQKVe1KWeRKXe2KYe`CZeSK0e#K1exO2eyO3ezO4e$K5e%K6e'K7eYG8eIDFbJDGbUGVbVGHbUJIbVJJbWGKbXGLbWJMbXJNbXHObYHPb3HHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7HhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HBF#H$HyGzG%HCFkOhhVtlOihCJWtmOjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jGNkh?nPl/Cww9GxwkKlh9iywnOmhHNnhoOohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjx,KFh@lRljLGh*jkxlx[n]nmxnx!GoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nkLHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)xlL|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQb3KRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeA;JfA7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC

1010 return device_id 2qorojl4k-i.isotouoklllmlvonl7kolplqlwoxorlbLcLdLeLfLgLhLiLkklkmknkokpkqkrkhFckTH:EUHVHkG* K RJ+ `LL , M - N HD. {LEKO hO/ P FN: Q iOjO; R = S ? T @ U [ ] ^ _ ` { | } ~ abbbcbV W X Y Z 0 1 2 3 4 5 6 db7 eb8 fb9 gb! hb# SJTJpGqGib$ jb% kb' VKKKLKMKWKXKYKNKZKOK0KPKQK1KRK2K`CSK#KxOyOzO$K%K'KYGIDJDUGVGUJVJWGXGWJXJXHYHkOlOmOGN9GkK9inOHNoOlKmK/i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhEhhk,KjL!GkLyozoAo3j(e4j5jEjuiviwi)e*exi6j7j8j9j!j#jPoQoCGDGEGRo$j;j}dFjyi%i%j'jdJoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDH1G3K2G3Gd e

1011  

1012 Device_ensure_cuda_initialized() 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPb3HHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7HhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HBF#H$HyGzG%HCFhhVtihCJWtjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPl/CwwxwkKlh9iywmhnhohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)xlL|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeA;JfA7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC

1013 device_id = Device_resolve_device_id(device_id) 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPb3HHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7HhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HBF#H$HyGzG%HCFhhVtihCJWtjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPl/CwwxwkKlh9iywmhnhohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)xlL|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeA;JfA7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC

1014 devices = Device_ensure_tls_devices(cls) 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPb3HHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7HhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HBF#H$HyGzG%HCFhhVtihCJWtjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPl/CwwxwkKlh9iywmhnhohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)x|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeA;JfA7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC

1015  

1016 try: 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPb3HHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7HhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HBF#H$HyGzG%HCFhhVtihCJWtjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPl/CwwxwkKlh9iywmhnhohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)x|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeA;JfA7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC

1017 return devices[device_id] 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPb3HHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7HhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HBF#H$HyGzG%HCFhhVtihCJWtjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPl/CwwxwkKlh9iywmhnhohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)x|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeA;JfA7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC

1018 except IndexError: 2hKiK

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

1020  

1021 def _check_context_initialized(self) -> None: 

1022 if not self._has_inited: 2#G$GqF%G'G(G)G*G+GrG,G-G.G/G:GTkEIFIGIHIII;GHjIj=i?isG@iJj=G?G[iKjUkLj@G]iVkJI[G^i_itGWk]GMjNjOj^G_GXk`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujKILIMINIOI*m+m,m-mYk`GPIQIZk0k1k2k3k.m/m:m;m=m?m@m[m$d%d'd(d)d*d+d,d-d.d/d:d~mrFKEsFtFRISI?HAm{G|G}GBm~GSlTl@H[HCmDm]Hjl4k-i.iBj5k6kklllmlnl7kolplqlrluFTI8k9k!k#k$k%kmn'i(i)ibLcLdLeLfLgLhLiL|L}L~Lkklkmknkokpkqkrkdlelfl-K.K/KZH0H1HFKBiUIaHbHVIWI'k(k)kXIYIZI0I1I^H_H`H{HGK{C2IcHdH3I4I*k+k,k5I6I7I8I9IIN!IeHfH#I$I-k.k/k%I'I(I)I*IHKCi)E*E2HhF|C}C~C:kIKJKvFwFvjPj;kxFQjRjSjTjUjVjwjJJMfNfKJOf+Esk,EtkPfQfukmLRfnLSfTfLJUfaDVfMJWfvkwkxkbDNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkaMJkKkJNLkKNMkNkLNOkbMPkQkRkSkcM|HdMeM(E}H~HMNNN+I,IaIbIfMgMhMiMjMAFkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMBMCMDMEM[hFMHnGMhGHMONPNQNRNSNTNUNVNoLWNXNIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M%M'M(M)M*M+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuNvNwNxNyNzNANBNCNDN-I.I/I:I;I=I*i+icI?I#i_LCJBJpLYNjH=jlbzjdI(jkH@I[I]I^I_I`I+j{I|I}I~IaJbJcJ,jeIfIgIhIiIjIkIlImInIoIpIZNDJ/E?jAjLC/F8Ec -j.j/joepeqere0NqL1NrL)j@j[j]j^jNlOl2N3NsL4NtL5N6NuLvL7N8N9NwL!NxLyLzLALBLCLDLELFL#NGLHLILJL$NKLLL%N'N(N)NML*NNL+N,NOLPL-N.N/NQL:NRLSLTLULVLWLXLYLZL;N0L1L2L3L=N4L5L?N@N[N]N6L^N7L_N`N8L9L{N|N}N!L~N#L$L%L'L(L)L*L+L,LaO-L.L/L:LbO;L=LcOdOeO_j`j9i{j|j}j~jakbk$i/i:i!i,KjL*jfOti9fGnkLgOmHnH(euiviwi)e*exi}dyi%iseziAiTKdi[lOmeiPm]l^l_lQmfiRmgiSm`l{l|lTmhihl}l~lamUma d e ( ) iiVmbmcmdmWmjiilemfmgmXmkiYmhmimjmZmli0mkmlmmm1mmi2mnmompm3mni4mqmrmsm5moi6mtmumvm7mpi8mwmxmym9meJFHfJ-HgJhJiJjJ.HkJlJmJnJoJpJqJrJsJtJuJvJwJxJyFyJ:HzJAJQERESETEUEFGGGHGIGJGGHqIrIsItIuIvI(mHHwICoIHJHxIKHgFLHyIzIAIMHBIKGLGJoMGNGzF;HOGKoPGLoQGRGSGTG=HGj6E7E

1023 raise CUDAError( 

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

1025 ) 

1026 Context_check_open(self._context) 2#G$GqF%G'G(G)G*G+GrG,G-G.G/G:GTkEIFIGIHIII;GHjIj=i?isG@iJj=G?G[iKjUkLj@G]iVkJI[G^i_itGWk]GMjNjOj^G_GXk`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujKILIMINIOI*m+m,m-mYk`GPIQIZk0k1k2k3k.m/m:m;m=m?m@m[m$d%d'd(d)d*d+d,d-d.d/d:d~mrFKEsFtFRISI?HAm{G|G}GBm~GSlTl@H[HCmDm]Hjl4k-i.iBj5k6kklllmlnl7kolplqlrluFTI8k9k!k#k$k%kmn'i(i)ibLcLdLeLfLgLhLiL|L}L~Lkklkmknkokpkqkrkdlelfl-K.K/KZH0H1HFKBiUIaHbHVIWI'k(k)kXIYIZI0I1I^H_H`H{HGK{C2IcHdH3I4I*k+k,k5I6I7I8I9IIN!IeHfH#I$I-k.k/k%I'I(I)I*IHKCi)E*E2HhF|C}C~C:kIKJKvFwFvjPj;kxFQjRjSjTjUjVjwjJJMfNfKJOf+Esk,EtkPfQfukmLRfnLSfTfLJUfaDVfMJWfvkwkxkbDNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkaMJkKkJNLkKNMkNkLNOkbMPkQkRkSkcM|HdMeM(E}H~HMNNN+I,IaIbIfMgMhMiMjMAFkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMBMCMDMEM[hFMHnGMhGHMONPNQNRNSNTNUNVNoLWNXNIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M%M'M(M)M*M+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuNvNwNxNyNzNANBNCNDN-I.I/I:I;I=I*i+icI?I#i_LCJBJpLYNjH=jlbzjdI(jkH@I[I]I^I_I`I+j{I|I}I~IaJbJcJ,jeIfIgIhIiIjIkIlImInIoIpIZNDJ/E?jAjLC/F8Ec -j.j/joepeqere0NqL1NrL)j@j[j]j^jNlOl2N3NsL4NtL5N6NuLvL7N8N9NwL!NxLyLzLALBLCLDLELFL#NGLHLILJL$NKLLL%N'N(N)NML*NNL+N,NOLPL-N.N/NQL:NRLSLTLULVLWLXLYLZL;N0L1L2L3L=N4L5L?N@N[N]N6L^N7L_N`N8L9L{N|N}N!L~N#L$L%L'L(L)L*L+L,LaO-L.L/L:LbO;L=LcOdOeO_j`j9i{j|j}j~jakbk$i/i:i!i,KjL*jfOti9fGnkLgOmHnH(euiviwi)e*exi}dyi%iseziAiTKdi[lOmeiPm]l^l_lQmfiRmgiSm`l{l|lTmhihl}l~lamUma d e ( ) iiVmbmcmdmWmjiilemfmgmXmkiYmhmimjmZmli0mkmlmmm1mmi2mnmompm3mni4mqmrmsm5moi6mtmumvm7mpi8mwmxmym9meJFHfJ-HgJhJiJjJ.HkJlJmJnJoJpJqJrJsJtJuJvJwJxJyFyJ:HzJAJQERESETEUEFGGGHGIGJGGHqIrIsItIuIvI(mHHwICoIHJHxIKHgFLHyIzIAIMHBIKGLGJoMGNGzF;HOGKoPGLoQGRGSGTG=HGj6E7E

1027  

1028  

1029 @classmethod 

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

1031 """ 

1032 Query the available device instances. 

1033  

1034 Returns 

1035 ------- 

1036 tuple of Device 

1037 A tuple containing instances of available devices. 

1038 """ 

1039 return cls._get_all_devices_from_cuda_driver() 2In;dLnMnNnOnYJ4K5KKDLD6K7KMDvG=JPnxGQnNH8GyGzGRnOHNlOl/n:nAGBG;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokooHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHhlloilmo;iPHQHRHSHno?L@L[L]L^Loopo

1040  

1041 @classmethod 

1042 def _get_all_devices_from_cuda_driver(cls): 

1043 Device_ensure_cuda_initialized() 2In;dLnMnNnOnYJ4K5KKDLD6K7KMDvG=JPnxGQnNH8GyGzGRnOHNlOl/n:nAGBG;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokooHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHhlloilmo;iPHQHRHSHno?L@L[L]L^Loopo

1044 return tuple(Device_ensure_tls_devices(cls)) 2In;dLnMnNnOnYJ4K5KKDLD6K7KMDvG=JPnxGQnNH8GyGzGRnOHNlOl/n:nAGBG;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokooHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHhlloilmo;iPHQHRHSHno?L@L[L]L^Loopo

1045  

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

1047 """ 

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

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

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

1051  

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

1053  

1054 Returns 

1055 ------- 

1056 cuda.core.system.Device 

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

1058 """ 

1059 from cuda.core.system import Device as SystemDevice 2YJ4K5KKDLD6KMD(K)KUK

1060 return SystemDevice(uuid=self.uuid) 2YJ4K5KKDLD6KMD(K)KUK

1061  

1062 @property 

1063 def device_id(self) -> int: 

1064 """Return device ordinal.""" 

1065 return self._device_id 2MoNote=due?dve@dwe[dxe]dye^dqoroTljl4k-i.iEmFmBjsotouoklllmlvonl7kolplqlwoxorl'i(i)ibLcLdLeLfLgLhLiL|L}L~Lkklkmknkokpkqkrkdlelfl-K.K/KZH0H1HIJSO{C)E*E2HhF|C}C~CckMfNfOf+E,EPfQf@FRfSfTfUfaDVfWf8CbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F#CcM|HZJBK5CZGiG0GTOdMeM(E}H~HCKaIbITH:EUHVHkG-E* AOBORJ+ `LLE, 9EpO0J- !EqOHD. {LEKhO/ FN: iOjO[h; hGJn= *KKn? +K@ [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6JcbCODOEOFOGOHOIOJOKOMEdb2DrOsOeb3DtONEfb4DuOOEgb#EvOuGhbSJTJpGqG7JibLO8JjbMOPEkbNOVKKKLKMKWKXKYKNKZKOK0KPKQK1KRK2K`CSKYGIDJDUGVbVGUJVJWGXGWJXJBo*i+i=J8GBF#HCFkOlOCJmOeIfI9JgIhIiIjIkI!J#JlI$JmInI%J'J(J)J*J+JoIpI,J-JDJ/E?jAjLCDKoepeqereNlOlGN/C9GkK9inOHNoOlKmK.JWH@k/i:i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhEhhk,KjL!GkLmHnHyozoAo3j(eDj4j5jEjjkuiviwi)e*exi6j7j8j9j!j#j$j}dFjyi%i%j'jdJJlKl/J:JseziAiNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4CoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDH1G3K2G3Gdieifigihia nKoKd e iijikiliminioipiyFQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*FUO+F7E,F-F.F

1066  

1067 @property 

1068 def pci_bus_id(self) -> str: 

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

1070 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 27K#HUK

1071 return bus_id[:12].decode() 27K#HUK

1072  

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

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

1075  

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

1077 device and the specified peer device. 

1078  

1079 Parameters 

1080 ---------- 

1081 peer : Device | int 

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

1083 """ 

1084 peer = Device(peer) 

1085 cdef int d1 = <int> self.device_id 

1086 cdef int d2 = <int> peer.device_id 

1087 if d1 == d2: 

1088 return True 

1089 cdef int value = 0 

1090 with nogil: 

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

1092 return bool(value) 

1093  

1094 @property 

1095 def uuid(self) -> str: 

1096 """Return a UUID for the device. 

1097  

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

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

1100 subscribed MIG compute instance. 

1101  

1102 Note 

1103 ---- 

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

1105 driver is older than CUDA 11.4. 

1106  

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

1108  

1109 """ 

1110 cdef cydriver.CUuuid uuid 

1111 cdef cydriver.CUdevice dev 

1112 cdef bytes uuid_b 

1113 cdef str uuid_hex 

1114  

1115 if self._uuid is None: 25CZGiG0G* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbVbHbIbJbKbLbMbNbObPbYJ4K5KKDLD6K7KMD(K)KgHwGhHiHUKCFsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTb:Kd e ( ) ;K=K8K9K

1116 dev = self._device_id 25CZGiG0G* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbVbHbIbJbKbLbMbNbObPbYJKDLDMD(K)KgHwGhHiHUKCFsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTb:Kd e ( ) ;K=K8K9K

1117 with nogil: 25CZGiG0G* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbVbHbIbJbKbLbMbNbObPbYJKDLDMD(K)KgHwGhHiHUKCFsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTb:Kd e ( ) ;K=K8K9K

1118 IF CUDA_CORE_BUILD_MAJOR == 12: 

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

1120 ELSE: # 13.0+ 

1121 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 25CZGiG0G* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbVbHbIbJbKbLbMbNbObPbYJKDLDMD(K)KgHwGhHiHUKCFsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTb:Kd e ( ) ;K=K8K9K

1122 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 25CZGiG0G* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbVbHbIbJbKbLbMbNbObPbYJKDLDMD(K)KgHwGhHiHUKCFsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTb:Kd e ( ) ;K=K8K9K

1123 uuid_hex = uuid_b.hex() 25CZGiG0G* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbVbHbIbJbKbLbMbNbObPbYJKDLDMD(K)KgHwGhHiHUKCFsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTb:Kd e ( ) ;K=K8K9K

1124 # 8-4-4-4-12 

1125 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 25CZGiG0G* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbVbHbIbJbKbLbMbNbObPbYJKDLDMD(K)KgHwGhHiHUKCFsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTb:Kd e ( ) ;K=K8K9K

1126 return self._uuid 25CZGiG0G* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbVbHbIbJbKbLbMbNbObPbYJ4K5KKDLD6K7KMD(K)KgHwGhHiHUKCFsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTb:Kd e ( ) ;K=K8K9K

1127  

1128 @property 

1129 def name(self) -> str: 

1130 """Return the device name.""" 

1131 # Use 256 characters to be consistent with CUDA Runtime 

1132 cdef int LENGTH = 256 2qFrFKEsFtF?K@K[K]K^K_K`KuF{K|K}KFKBiGKHKCiIKJKvFwFxF5C.EBF~K

1133 cdef bytes name = bytes(LENGTH) 2qFrFKEsFtF?K@K[K]K^K_K`KuF{K|K}KFKBiGKHKCiIKJKvFwFxF5C.EBF~K

1134 cdef char* name_ptr = name 2qFrFKEsFtF?K@K[K]K^K_K`KuF{K|K}KFKBiGKHKCiIKJKvFwFxF5C.EBF~K

1135 cdef cydriver.CUdevice this_dev = self._device_id 2qFrFKEsFtF?K@K[K]K^K_K`KuF{K|K}KFKBiGKHKCiIKJKvFwFxF5C.EBF~K

1136 with nogil: 2qFrFKEsFtF?K@K[K]K^K_K`KuF{K|K}KFKBiGKHKCiIKJKvFwFxF5C.EBF~K

1137 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2qFrFKEsFtF?K@K[K]K^K_K`KuF{K|K}KFKBiGKHKCiIKJKvFwFxF5C.EBF~K

1138 name = name.split(b"\0")[0] 2qFrFKEsFtF?K@K[K]K^K_K`KuF{K|K}KFKBiGKHKCiIKJKvFwFxF5C.EBF~K

1139 return name.decode() 2qFrFKEsFtF?K@K[K]K^K_K`KuF{K|K}KFKBiGKHKCiIKJKvFwFxF5C.EBF~K

1140  

1141 @property 

1142 def properties(self) -> DeviceProperties: 

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

1144 if self._properties is None: 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d(E;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j EKO nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' VKJeKKKeLKLeMKMeWKNeXKOeYKPeNKQeZKReOKSe0KTePKUeQKVe1KWeRKXe2KYe`CZeSK0e#K1e2e3e4e$K5e%K6e'K7eYG8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBoGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqerelH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxdjG9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l,iEH-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf

1145 self._properties = DeviceProperties._init(self._device_id) 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb9eGmOiDiPiQiRiEiFiGiqiXjOoSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf

1146  

1147 return self._properties 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoNDODPDQDRDSD/f:f;f=f?f@fTD*m+m,m-mYkDoEoZk0k1k2k3k.m/m:m;m=m?m@m[mFoUDVDWDXDYDZD]m^mte=dKd[f$d%d]fyd^f_f`f{f|fue?dLd}f'd(d~fzdagbgcgdgegfggghgigjgkglgmgngogpgqgve@dMdrg)d*dsgAdtgugvgwgxgwe[dNdyg+d,dzgBdAgBgCgDgEgxe]dOdFg-d.dGgCdHgIgJgKgLgye^dPdMg/d:dNgDdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!gGo0D_m`m{m|m1D}mHo~mIoanbncndnenfnqognhninjnknroAmBmSlTlCmDmjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorlln8k9k!k#k$k%kmn#g$g%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhchdhehfhBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCnhF:kvjPj;kQjRjSjTjUjVjwjck=kWj6C7C8C9C!C#C~daezeAeBeCeDeEebeUlce_d(E;dde`dFeee{dfe|dGeHeIegeheiejekelemeTH:EUHVHkG* f K + g L , 9Eh M - !Ei N . j EKO nb/ k P ob: l Q pbgh[h; Hnm hGR qbrbsbtbubvbwbxbybzbAb= Son S ? Too T @ p U [ ] ^ _ ` { | } ~ abbbcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 db2DC 7 eb3DD 8 fb4DE 9 gb#EF ! hbUoG # BbCbpGDbqGEbiboFH $ jb;EI % kbpFJ ' VKJeKKKeLKLeMKMeWKNeXKOeYKPeNKQeZKReOKSe0KTePKUeQKVe1KWeRKXe2KYe`CZeSK0e#K1e2e3e4e$K5e%K6e'K7eYG8eFbGbUGVbVGHbIbJbWGKbXGLbMbNbXHObYHPb9eBoGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ihhihjhlb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqerelH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$ekh/C9Glh9imhnhohphqhrhCIWHsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jFhGh!GMC1jDIti9fGn-CCj2j.CHhyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoRo$j;j}dFjyi%i%j'jXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAiBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTb^cJhQdKhLh_cRdMhNh`c{cOhSdPhQh|cTdRhSh}c$fGd%f'f~cHd(f)fada d e ( ) bdcdThUdUhVhddVdWhXhedfdgdhd*fId+f,fidJd-f.fjdYhWdZh0hkdXd1h2hld3hYd4h5hmdZd6h7hnd8h0d9h!hod1d#h$hpd%h2d'h(hqd3d)h*hrd+h4d,h-hsd5d.h/htdud:h6d;h=hvd7d?h@hwdxdjG9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l,iEH-l;i~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLf

1148  

1149 @property 

1150 def resources(self) -> DeviceResources: 

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

1152 if self._resources is None: 2Sn]hTnUn^hb EdFd_h`h{h|h}h~haibiVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nci.n

1153 self._resources = DeviceResources._init(self._device_id) 2Sn]hTnUn^hb EdFd_h`h{h|h}h~haibiVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nci.n

1154 return self._resources 2Sn]hTnUn^hb EdFd_h`h{h|h}h~haibiVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nci.n

1155  

1156 @property 

1157 def compute_capability(self) -> ComputeCapability: 

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

1159 cdef DeviceProperties prop = self.properties 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujYkDoEoZk0k1k2k3kFo]m^mKdydLdzdMdAdNdBdOdCdPdDdGo_m`m{m|m}mHoIoanbncndnenfngnhninjnkn-i.iEmFmBj5k6kln8k9k!k#k$k%kkklkmknkokpkqkrkdlelflBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCn:kvjPj;kQjRjSjTjUjVjwj[hHnhG9eBolb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqerelH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b(e)e*eXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOc)HPc*HQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c+H$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxdjG9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l,iEH-l8d9d!d#d

1160 cached = prop._cache.get("compute_capability") 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujYkDoEoZk0k1k2k3kFo]m^mKdydLdzdMdAdNdBdOdCdPdDdGo_m`m{m|m}mHoIoanbncndnenfngnhninjnkn-i.iEmFmBj5k6kln8k9k!k#k$k%kkklkmknkokpkqkrkdlelflBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCn:kvjPj;kQjRjSjTjUjVjwj[hHnhG9eBolb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqerelH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b(e)e*eXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOc)HPc*HQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c+H$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxdjG9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l,iEH-l8d9d!d#d

1161 if cached is not None: 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujYkDoEoZk0k1k2k3kFo]m^mKdydLdzdMdAdNdBdOdCdPdDdGo_m`m{m|m}mHoIoanbncndnenfngnhninjnkn-i.iEmFmBj5k6kln8k9k!k#k$k%kkklkmknkokpkqkrkdlelflBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCn:kvjPj;kQjRjSjTjUjVjwj[hHnhG9eBolb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqerelH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b(e)e*eXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOc)HPc*HQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c+H$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxdjG9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l,iEH-l8d9d!d#d

1162 return cached 2Ubkklkmknkokpkqkrkdlelfl9e+j,jb EdFd-j.j/jXboepeYbZbqerelH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b(e)e*eXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOc)HPc*HQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c+H$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}cGd~cHdada bdcdddedfdgdhdIdidJdjdkdldmdndodpdqdrdsdtdudvdwdxdjG9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l,iEH-l

1163 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujYkDoEoZk0k1k2k3kFo]m^mKdydLdzdMdAdNdBdOdCdPdDdGo_m`m{m|m}mHoIoanbncndnenfngnhninjnkn-i.iEmFmBj5k6kln8k9k!k#k$k%kkklkmknkokpkqkrkdlelflBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCn:kvjPj;kQjRjSjTjUjVjwj[hHnhG9eBolb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b(e)e*eXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l8d9d!d#d

1164 return prop._cache.setdefault("compute_capability", cc) 2UbTkHjIj=i?i@iJj[iKjUkLj]iVk^i_iWkMjNjOjXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujYkDoEoZk0k1k2k3kFo]m^mKdydLdzdMdAdNdBdOdCdPdDdGo_m`m{m|m}mHoIoanbncndnenfngnhninjnkn-i.iEmFmBj5k6kln8k9k!k#k$k%kkklkmknkokpkqkrkdlelflBi'k(k)knnonpnqnrnsntnunvnwnxnynzn*k+k,kAn-k.k/kCiBnCn:kvjPj;kQjRjSjTjUjVjwj[hHnhG9eBolb+j,jb EdFdlGmGnG8Ec DnEnFnxjyj-j.j/jne:j`F{F|F}F~FaGbGcGdGeGfGgGoGXboepeYbZbqere0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b(e)e*eXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxd9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l-l8d9d!d#d

1165  

1166 @property 

1167 def arch(self) -> str: 

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

1169 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2Ubkklkmknkokpkqkrkdlelfl9e,jb EdFd-j.j/jXboepeYbZbqerelH0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b(e)e*eXl|b}b~bJlacKlbcccdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcziAircsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!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~cada bdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdjG9l!l,e#l$l%l'l-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l,iEH-l

1170  

1171 @property 

1172 def context(self) -> Context: 

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

1174  

1175 Note 

1176 ---- 

1177 Device must be initialized. 

1178  

1179 """ 

1180 self._check_context_initialized() 2#i_LCJBJpLLCPmSmhla VmilYm0m2m4m6m8myF

1181 return self._context 2#i_LCJBJpLLCPmSmhla VmilYm0m2m4m6m8myF

1182  

1183 @property 

1184 def memory_resource(self) -> MemoryResource: 

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

1186 cdef int attr, device_id 

1187 if self._memory_resource is None: 2'i(i)i{C)E*E|C}C~CMfNfOf+E,EOOPfPOQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F`C*i+i/E?jAjoepeqereNlOl}dseziAidieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F

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

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

1190 device_id = self._device_id 2'i(i)i{C)E*E|C}C~CMfNfOf+E,EPfQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F`C*i+i/E?jAjoepeqereNlOl}dseziAidieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F

1191 with nogil: 2'i(i)i{C)E*E|C}C~CMfNfOf+E,EPfQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F`C*i+i/E?jAjoepeqereNlOl}dseziAidieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F

1192 HANDLE_RETURN( 2'i(i)i{C)E*E|C}C~CMfNfOf+E,EPfQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F`C*i+i/E?jAjoepeqereNlOl}dseziAidieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F

1193 cydriver.cuDeviceGetAttribute( 2'i(i)i{C)E*E|C}C~CMfNfOf+E,EPfQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F`C*i+i/E?jAjoepeqereNlOl}dseziAidieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F

1194 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id 

1195 ) 

1196 ) 

1197 if attr == 1: 2'i(i)i{C)E*E|C}C~CMfNfOf+E,EPfQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F`C*i+i/E?jAjoepeqereNlOl}dseziAidieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F

1198 from cuda.core._memory import DeviceMemoryResource 2'i(i)i{C)E*E|C}C~CMfNfOf+E,EPfQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F`C*i+i/E?jAjoepeqereNlOl}dseziAidieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F

1199 self._memory_resource = DeviceMemoryResource(self._device_id) 2'i(i)i{C)E*E|C}C~CMfNfOf+E,EPfQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F`C*i+i/E?jAjoepeqereNlOl}dseziAidieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F

1200 else: 

1201 from cuda.core._memory._synchronous_memory_resource import ( 2{C)E*E|C}C~CMfNfOf+E,EPfQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F*i+i/E?jAjoepeqereNlOlsedieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F

1202 _SynchronousMemoryResource, 

1203 ) 

1204 self._memory_resource = _SynchronousMemoryResource( 2{C)E*E|C}C~CMfNfOf+E,EPfQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F*i+i/E?jAjoepeqereNlOlsedieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F

1205 self._device_id, self._context) 2{C)E*E|C}C~CMfNfOf+E,EPfQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F*i+i/E?jAjoepeqereNlOlsedieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F

1206  

1207 return self._memory_resource 2'i(i)i{C)E*E|C}C~CMfNfOf+E,EOOPfPOQf@FRfSfTfUfaDVfWfbDXfYfZf0f1f2f3f4f5f6f7f8f[F]F^F`C*i+i/E?jAjoepeqereNlOl}dseziAidieifigihia iijikiliminioipiQERESETEUE(mCoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F

1208  

1209 @memory_resource.setter 

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

1211 self._memory_resource = mr 

1212  

1213 @property 

1214 def default_stream(self) -> Stream: 

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

1216  

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

1218 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set. 

1219  

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

1221 the legacy stream. 

1222  

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

1224 is used. 

1225  

1226 """ 

1227 return default_stream() 2qorojl4k-i.isotouoklllmlvonl7kolplqlwoxorlck=kWjVO_d`d{d|dfMgMhMiMjMRJ`LLE9EpO0J!EqOHD{LEKFNWOXOYOJnSo*KKnTo+KZO1J0O2J1O3J2O4J3O5J4O6J5OiFjF6O7OkFlF8O9OmFnF!O#OCODOEO$OFOGOHO%OIOJOKOME2DrOsO3DtONE4DuOOE#EvOuGUoSJTJpGqG7JoFLO8J;EMOPEpFNOKKLKMKNKOKPKQKRK`CSKIDJDUGVGUJVJWGXGWJXJ*i+iglLlxjyj'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvP`F{F|F}F~FaGbGcGdGeGfGgGwPNlOlGNPl/C9G9iHNWHdk$ixP/i:i!ifk!fgk#f|k}kYj%eZj'ehk~k0j,K!GMC1jti9fGndieifigihia d e iijikiliminioipi;JQERESETEUECoVEWEXEYEZE0E1E2E3E4E5EJoKoLoDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F7E,F-F.F

1228  

1229 def __int__(self) -> int: 

1230 """Return device_id.""" 

1231 return self._device_id 2-K.K/KIJ*i+i

1232  

1233 def __repr__(self) -> str: 

1234 return f"<Device {self._device_id} ({self.name})>" 2qFrFKEsFtF?K@K[K]K^K_K`KuF{K|K}KFKBiGKHKCiIKJKvFwFxF5C.E~K

1235  

1236 def __hash__(self) -> int: 

1237 return hash(self.uuid) 25CZGiG0G* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbVbHbIbJbKbLbMbNbObPbgHwGhHiHsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTb:Kd e ( ) ;K=K8K9K

1238  

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

1240 if not isinstance(other, Device): 2|H5CiG(E}H~HaIbI* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbHbIbJbKbLbMbNbObPbfKwGgKjKsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTbwOQOd e ( ) 8K9K:H;HGj

1241 return NotImplemented 25CiGjKwOQO:H

1242 return self._device_id == other._device_id 2|H5C(E}H~HaIbI* f K + g L , h M - i N . j O nb/ k P ob: l Q pb; m R qbrbsbtbubvbwbxbybzbAb= n S ? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! hbG # BbCbDbEbibH $ jbI % kbJ ' FbGbHbIbJbKbLbMbNbObPbfKwGgKsh!fthuhvhwh#fxhyh%ezhAhBhCh'eDhEh9fCj2jQbRbSbTbwOd e ( ) 8K9K;HGj

1243  

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

1245 return Device, (self.device_id,) 2-EAOBORJ`LLE9EpO0J!EqOHD{LEK[hJnKn1J2J3J4J5J6JME2DrOsO3DtONE4DuOOE#EvOuGSJTJpGqG7J8JPEIDJDUJVJWJXJnKoK

1246  

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

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

1249  

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

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

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

1253  

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

1255  

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

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

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

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

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

1261  

1262 Parameters 

1263 ---------- 

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

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

1266  

1267 Returns 

1268 ------- 

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

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

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

1272 previously current. 

1273  

1274 Examples 

1275 -------- 

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

1277 calling this method, e.g. 

1278  

1279 >>> from cuda.core import Device 

1280 >>> dev0 = Device(0) 

1281 >>> dev0.set_current() 

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

1283  

1284 """ 

1285 cdef ContextHandle h_context 

1286 cdef cydriver.CUcontext prev_ctx, curr_ctx 

1287 cdef cydriver.CUdevice prev_dev 

1288 cdef Context prev_owned = None 2VoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptckqt=krtWjstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeUlztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeAFBtCt:EDtEtFtGt* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAbJn= Son *KS Kn? Too +KT @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! LnMnNnuGhbUoG aL# BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb3HHtItJtKtLtMtNtOtPtQt*i+i4HvG5HRtSt6HTt7H=JUt8H#iPnxG.E_F9HQn!H$HyGzG%HhhVtihWtjhRnBJXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFdEJ_h`h{hfuLC|h}hFJ~hai/FbiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nhuGJciHJ.niujuglLlc kulumunuoupuquxjruyjsutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlh9iywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w!w|k#w$wwl%w'wxl(w)wyl*w+wzl,w-w}k.w/wAl:w;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxpx1jqxrxtisxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1x2x3xCG4xDG5xEG6x7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c1GQb3KRb2GSbTKIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;zmb=z?z@z[z]z,i^z_z`z{z|z,H}z~zaA4GbA5GcA6GdAeAfA7GgAhAiAjAkAlAmAnAoApAqArAsAtAuAvA/HwAxAyAzAAABAyFCADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1289  

1290 if ctx is not None: 2VoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptckqt=krtWjstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeUlztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeAFBtCt:EDtEtFtGt* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAbJn= Son *KS Kn? Too +KT @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! LnMnNnuGhbUoG aL# BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb3HHtItJtKtLtMtNtOtPtQt*i+i4HvG5HRtSt6HTt7H=JUt8H#iPnxG.E_F9HQn!H$HyGzG%HhhVtihWtjhRnBJXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFdEJ_h`h{hfuLC|h}hFJ~hai/FbiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nhuGJciHJ.niujuglLlc kulumunuoupuquxjruyjsutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlh9iywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w!w|k#w$wwl%w'wxl(w)wyl*w+wzl,w-w}k.w/wAl:w;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxpx1jqxrxtisxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1x2x3xCG4xDG5xEG6x7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c1GQb3KRb2GSbTKIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;zmb=z?z@z[z]z,i^z_z`z{z|z,H}z~zaA4GbA5GcA6GdAeAfA7GgAhAiAjAkAlAmAnAoApAqArAsAtAuAvA/HwAxAyAzAAABAyFCADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1291 Context_check_open(ctx) 2BJEJLCFJ/FGJHJ

1292 if ctx._device_id != self._device_id: 2BJEJLCFJ/FGJ

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

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

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

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

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

1298 if self._has_inited and self._context is not None: 2BJEJLCFJ/FGJ

1299 prev_owned = self._context 2BJEJLCFJ/FGJ

1300 curr_ctx = as_cu(ctx._h_context) 2BJEJLCFJ/FGJ

1301 prev_ctx = NULL 2BJEJLCFJ/FGJ

1302 with nogil: 2BJEJLCFJ/FGJ

1303 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&prev_ctx)) 2BJEJLCFJ/FGJ

1304 if prev_ctx != NULL: 2BJEJLCFJ/FGJ

1305 HANDLE_RETURN(cydriver.cuCtxGetDevice(&prev_dev)) 2EJLCFJ/FGJ

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

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

1308 # a failure leaves the previous context current instead of 

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

1310 # would. 

1311 HANDLE_RETURN(cydriver.cuCtxSetCurrent(curr_ctx)) 2BJEJLCFJ/FGJ

1312 self._has_inited = True 2BJEJLCFJ/FGJ

1313 self._context = ctx # Store owning context reference 2BJEJLCFJ/FGJ

1314 if prev_ctx != NULL: 2BJEJLCFJ/FGJ

1315 if prev_owned is not None and as_cu(prev_owned._h_context) == prev_ctx: 2EJLCFJ/FGJ

1316 return prev_owned 2EJLCFJ/FGJ

1317 return Context._from_handle( 2LC

1318 Context, create_context_handle_ref(prev_ctx), <int>prev_dev) 2LC

1319 else: 

1320 # use primary ctx 

1321 h_context = get_primary_context(self._device_id) 2VoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptckqt=krtWjstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeUlztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeAFBtCt:EDtEtFtGt* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAbJn= Son *KS Kn? Too +KT @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! LnMnNnuGhbUoG aL# BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb3HHtItJtKtLtMtNtOtPtQt*i+i4HvG5HRtSt6HTt7H=JUt8H#iPnxG.E_F9HQn!H$HyGzG%HhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nhuci.niujuglLlc kulumunuoupuquxjruyjsutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlh9iywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w!w|k#w$wwl%w'wxl(w)wyl*w+wzl,w-w}k.w/wAl:w;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxpx1jqxrxtisxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1x2x3xCG4xDG5xEG6x7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c1GQb3KRb2GSbTKIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;zmb=z?z@z[z]z,i^z_z`z{z|z,H}z~zaA4GbA5GcA6GdAeAfA7GgAhAiAjAkAlAmAnAoApAqArAsAtAuAvA/HwAxAyAzAAABAyFCADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1322 if h_context.get() == NULL: 2VoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptckqt=krtWjstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeUlztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeAFBtCt:EDtEtFtGt* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAbJn= Son *KS Kn? Too +KT @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! LnMnNnuGhbUoG aL# BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb3HHtItJtKtLtMtNtOtPtQt*i+i4HvG5HRtSt6HTt7H=JUt8H#iPnxG.E_F9HQn!H$HyGzG%HhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nhuci.niujuglLlc kulumunuoupuquxjruyjsutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlh9iywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w!w|k#w$wwl%w'wxl(w)wyl*w+wzl,w-w}k.w/wAl:w;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxpx1jqxrxtisxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1x2x3xCG4xDG5xEG6x7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c1GQb3KRb2GSbTKIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;zmb=z?z@z[z]z,i^z_z`z{z|z,H}z~zaA4GbA5GcA6GdAeAfA7GgAhAiAjAkAlAmAnAoApAqArAsAtAuAvA/HwAxAyAzAAABAyFCADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1323 HANDLE_RETURN(get_last_error()) 

1324 raise RuntimeError( 

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

1326 ) 

1327 with nogil: 2VoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptckqt=krtWjstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeUlztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeAFBtCt:EDtEtFtGt* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAbJn= Son *KS Kn? Too +KT @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! LnMnNnuGhbUoG aL# BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb3HHtItJtKtLtMtNtOtPtQt*i+i4HvG5HRtSt6HTt7H=JUt8H#iPnxG.E_F9HQn!H$HyGzG%HhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nhuci.niujuglLlc kulumunuoupuquxjruyjsutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlh9iywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w!w|k#w$wwl%w'wxl(w)wyl*w+wzl,w-w}k.w/wAl:w;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxpx1jqxrxtisxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1x2x3xCG4xDG5xEG6x7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c1GQb3KRb2GSbTKIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;zmb=z?z@z[z]z,i^z_z`z{z|z,H}z~zaA4GbA5GcA6GdAeAfA7GgAhAiAjAkAlAmAnAoApAqArAsAtAuAvA/HwAxAyAzAAABAyFCADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1328 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 2VoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptckqt=krtWjstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeUlztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeAFBtCt:EDtEtFtGt* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAbJn= Son *KS Kn? Too +KT @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! LnMnNnuGhbUoG aL# BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb3HHtItJtKtLtMtNtOtPtQt*i+i4HvG5HRtSt6HTt7H=JUt8H#iPnxG.E_F9HQn!H$HyGzG%HhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nhuci.niujuglLlc kulumunuoupuquxjruyjsutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlh9iywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w!w|k#w$wwl%w'wxl(w)wyl*w+wzl,w-w}k.w/wAl:w;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxpx1jqxrxtisxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1x2x3xCG4xDG5xEG6x7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c1GQb3KRb2GSbTKIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;zmb=z?z@z[z]z,i^z_z`z{z|z,H}z~zaA4GbA5GcA6GdAeAfA7GgAhAiAjAkAlAmAnAoApAqArAsAtAuAvA/HwAxAyAzAAABAyFCADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1329 self._has_inited = True 2VoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptckqt=krtWjstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeUlztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeAFBtCt:EDtEtFtGt* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAbJn= Son *KS Kn? Too +KT @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! LnMnNnuGhbUoG aL# BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb3HHtItJtKtLtMtNtOtPtQt*i+i4HvG5HRtSt6HTt7H=JUt8H#iPnxG.E_F9HQn!H$HyGzG%HhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nhuci.niujuglLlc kulumunuoupuquxjruyjsutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlh9iywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w!w|k#w$wwl%w'wxl(w)wyl*w+wzl,w-w}k.w/wAl:w;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxpx1jqxrxtisxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1x2x3xCG4xDG5xEG6x7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c1GQb3KRb2GSbTKIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;zmb=z?z@z[z]z,i^z_z`z{z|z,H}z~zaA4GbA5GcA6GdAeAfA7GgAhAiAjAkAlAmAnAoApAqArAsAtAuAvA/HwAxAyAzAAABAyFCADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1330 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 2VoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptckqt=krtWjstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeUlztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeAFBtCt:EDtEtFtGt* f K + g L , h M - i N . j O nb/ k P ob: l Q pbgh; m R qbrbsbtbubvbwbxbybzbAbJn= Son *KS Kn? Too +KT @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 dbC 7 ebD 8 fbE 9 gbF ! LnMnNnuGhbUoG aL# BbCbDbEbibH $ jbI % kbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eFbGbVbHbIbJbKbLbMbNbObPb3HHtItJtKtLtMtNtOtPtQt*i+i4HvG5HRtSt6HTt7H=JUt8H#iPnxG.E_F9HQn!H$HyGzG%HhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-nhuci.niujuglLlc kulumunuoupuquxjruyjsutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlh9iywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w!w|k#w$wwl%w'wxl(w)wyl*w+wzl,w-w}k.w/wAl:w;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxpx1jqxrxtisxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1x2x3xCG4xDG5xEG6x7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c1GQb3KRb2GSbTKIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;zmb=z?z@z[z]z,i^z_z`z{z|z,H}z~zaA4GbA5GcA6GdAeAfA7GgAhAiAjAkAlAmAnAoApAqArAsAtAuAvA/HwAxAyAzAAABAyFCADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1331  

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

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

1334  

1335 Note 

1336 ---- 

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

1338  

1339 Parameters 

1340 ---------- 

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

1342 Customizable dataclass for context creation options. 

1343  

1344 Returns 

1345 ------- 

1346 :obj:`~_context.Context` 

1347 Newly created context object. 

1348  

1349 """ 

1350 cdef int i 

1351 cdef object resources 

1352 cdef object res 

1353 cdef SMResource sm_res 

1354 cdef WorkqueueResource wq_res 

1355  

1356 if options is None: 2zK]h^hb ?jAj_h`h{h|h}h~haibi!KAKENciHJ

1357 raise ValueError( 2EN

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

1359 ) 

1360  

1361 options = check_or_create_options(ContextOptions, options, "Context options") 2zK]h^hb ?jAj_h`h{h|h}h~haibi!KAKENciHJ

1362 if options.resources is None: 2zK]h^hb ?jAj_h`h{h|h}h~haibi!KAKENciHJ

1363 raise ValueError( 2EN

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

1365 ) 

1366  

1367 resources = tuple(options.resources) 2zK]h^hb ?jAj_h`h{h|h}h~haibi!KAKciHJ

1368 if len(resources) == 0: 2zK]h^hb ?jAj_h`h{h|h}h~haibi!KAKciHJ

1369 raise ValueError("ContextOptions.resources must not be empty") 

1370  

1371 cdef vector[cydriver.CUdevResource] c_resources 

1372 c_resources.resize(len(resources)) 2zK]h^hb ?jAj_h`h{h|h}h~haibi!KAKciHJ

1373  

1374 for i, res in enumerate(resources): 2zK]h^hb ?jAj_h`h{h|h}h~haibi!KAKciHJ

1375 if isinstance(res, SMResource): 2zK]h^hb ?jAj_h`h{h|h}h~haibi!KAKciHJ

1376 sm_res = <SMResource>res 2zK]h^hb ?jAj_h`h{h|h}h~haibi!KAKciHJ

1377 if not sm_res._is_usable: 2zK]h^hb ?jAj_h`h{h|h}h~haibi!KAKciHJ

1378 raise ValueError("dry-run SMResource objects cannot be used to create a context") 2!K

1379 c_resources[i] = sm_res._resource 2zK]h^hb ?jAj_h`h{h|h}h~haibiAKciHJ

1380 elif isinstance(res, WorkqueueResource): 2Aj

1381 wq_res = <WorkqueueResource>res 2Aj

1382 c_resources[i] = wq_res._wq_config_resource 2Aj

1383 else: 

1384 raise TypeError(f"Unsupported context resource type: {type(res)}") 

1385  

1386 cdef GreenCtxHandle h_green = create_green_ctx_handle( 2zK]h^hb ?jAj_h`h{h|h}h~haibiAKciHJ

1387 c_resources.data(), 

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

1389 <cydriver.CUdevice>(self._device_id), 2zK]h^hb ?jAj_h`h{h|h}h~haibiAKciHJ

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

1391 ) 

1392 if h_green.get() == NULL: 2zK]h^hb ?jAj_h`h{h|h}h~haibiAKciHJ

1393 HANDLE_RETURN(get_last_error()) 

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

1395  

1396 return Context._from_green_ctx(Context, h_green, self._device_id) 2zK]h^hb ?jAj_h`h{h|h}h~haibiAKciHJ

1397  

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

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

1400  

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

1402  

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

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

1405  

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

1407 such that the lifetime is managed. 

1408  

1409 Note 

1410 ---- 

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

1412  

1413 Parameters 

1414 ---------- 

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

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

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

1418 Customizable dataclass for stream creation options. 

1419  

1420 Returns 

1421 ------- 

1422 :obj:`~_stream.Stream` 

1423 Newly created stream object. 

1424  

1425 """ 

1426 self._check_context_initialized() 2#G$GqF%G'G(G)G*G+GrG,G-G.G/G:GTkEIFIGIHIII;GHjIj=i?isG@iJj=G?G[iKjUkLj@G]iVkJI[G^i_itGWk]GMjNjOj^G_GXk`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujKILIMINIOI*m+m,m-mYk`GPIQIZk0k1k2k3k.m/m:m;m=m?m@m[m~mrFKEsFtFRISI|G}Gjl4k-i.iBj5k6kklllmlnl7kolplqlrluFTI8k9k!k#k$k%kmn'i(i)ibLcLdLeLfLgLhLiL|L}L~Lkklkmknkokpkqkrkdlelfl-K.K/KZH0H1HFKBiUIaHbHVIWI'k(k)kXIYIZI0I1IGK{C2IcHdH3I4I*k+k,k5I6I7I8I9IIN!IeHfH#I$I-k.k/k%I'I(I)I*IHKCi)E*E2HhF|C}C~C:kIKJKvFwFvjPj;kxFQjRjSjTjUjVjwjJJMfNfKJOf+Esk,EtkPfQfukmLRfnLSfTfLJUfaDVfMJWfvkwkxkbDNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJkKkJNLkKNMkNkLNOkPkQkRkSkcM|HdMeM(E}H~HMNNN+I,IaIbIfMgMhMiMjMAF[hHnhGONPNQNRNSNTNUNVNoLWNXN-I.I/I:I;I=I?I#i_LYNjH=jlbzj@I[I]I^I_I`I+j{I|I}I~IaJbJcJ,jeIfIgIhIiIjIkIlImInIoIpIZNDJLC8Ec -j.j/joepeqere0NqL1NrL)j@j[j]j^j2N3NsL4NtL5N6NuLvL7N8N9NwL!NxLyLzLALBLCLDLELFL#NGLHLILJL$NKLLL%N'N(N)NML*NNL+N,NOLPL-N.N/NQL:NRLSLTLULVLWLXLYLZL;N0L1L2L3L=N4L5L?N@N[N]N6L^N7L_N`N8L9L{N|N}N!L~N#L$L%L'L(L)L*L+L,LaO-L.L/L:LbO;L=LcOdOeO_j`j9i{j|j}j~jakbk$ijL*jfOtikLgOmHnH(euiviwi)e*exi}dyi%iseziAiTKOmQmRmTmUma ( ) WmXmZm1m3m5m7m9meJFHfJ-HgJhJiJjJ.HkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJ:HzJAJ(mHHCoIHJHKHgFMH7E

1427 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 2#G$GqF%G'G(G)G*G+GrG,G-G.G/G:GTkEIFIGIHIII;GHjIj=i?isG@iJj=G?G[iKjUkLj@G]iVkJI[G^i_itGWk]GMjNjOj^G_GXk`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujKILIMINIOI*m+m,m-mYk`GPIQIZk0k1k2k3k.m/m:m;m=m?m@m[m~mrFKEsFtFRISI|G}Gjl4k-i.iBj5k6kklllmlnl7kolplqlrluFTI8k9k!k#k$k%kmn'i(i)ibLcLdLeLfLgLhLiL|L}L~Lkklkmknkokpkqkrkdlelfl-K.K/KZH0H1HFKBiUIaHbHVIWI'k(k)kXIYIZI0I1IGK{C2IcHdH3I4I*k+k,k5I6I7I8I9IIN!IeHfH#I$I-k.k/k%I'I(I)I*IHKCi)E*E2HhF|C}C~C:kIKJKvFwFvjPj;kxFQjRjSjTjUjVjwjJJMfNfKJOf+Esk,EtkPfQfukmLRfnLSfTfLJUfaDVfMJWfvkwkxkbDNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJkKkJNLkKNMkNkLNOkPkQkRkSkcM|HdMeM(E}H~HMNNN+I,IaIbIfMgMhMiMjMAF[hHnhGONPNQNRNSNTNUNVNoLWNXN-I.I/I:I;I=I?I#i_LYNjH=jlbzj@I[I]I^I_I`I+j{I|I}I~IaJbJcJ,jeIfIgIhIiIjIkIlImInIoIpIZNDJLC8Ec -j.j/joepeqere0NqL1NrL)j@j[j]j^j2N3NsL4NtL5N6NuLvL7N8N9NwL!NxLyLzLALBLCLDLELFL#NGLHLILJL$NKLLL%N'N(N)NML*NNL+N,NOLPL-N.N/NQL:NRLSLTLULVLWLXLYLZL;N0L1L2L3L=N4L5L?N@N[N]N6L^N7L_N`N8L9L{N|N}N!L~N#L$L%L'L(L)L*L+L,LaO-L.L/L:LbO;L=LcOdOeO_j`j9i{j|j}j~jakbk$ijL*jfOtikLgOmHnH(euiviwi)e*exi}dyi%iseziAiTKOmQmRmTmUma ( ) WmXmZm1m3m5m7m9meJFHfJ-HgJhJiJjJ.HkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJ:HzJAJ(mHHCoIHJHKHgFMH7E

1428  

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

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

1431  

1432 Note 

1433 ---- 

1434 Device must be initialized. 

1435  

1436 Parameters 

1437 ---------- 

1438 options : :obj:`EventOptions`, optional 

1439 Customizable dataclass for event creation options. 

1440  

1441 Returns 

1442 ------- 

1443 :obj:`~_event.Event` 

1444 Newly created event object. 

1445  

1446 """ 

1447 self._check_context_initialized() 2`G$d%d'd(d)d*d+d,d-d.d/d:d?HAm{G|G}GBm~GSlTl@H[HCmDm]HBjaHbH^H_H`H{HcHdHeHfHoLcI#ijHzjdI(jkHLC[l]l^l_l`l{l|l}l~lama bmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmym

1448 cdef Context ctx = self._context 2`G$d%d'd(d)d*d+d,d-d.d/d:d?HAm{G|G}GBm~GSlTl@H[HCmDm]HBjaHbH^H_H`H{HcHdHeHfHoLcI#ijHzjdI(jkHLC[l]l^l_l`l{l|l}l~lama bmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmym

1449 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2`G$d%d'd(d)d*d+d,d-d.d/d:d?HAm{G|G}GBm~GSlTl@H[HCmDm]HBjaHbH^H_H`H{HcHdHeHfHoLcI#ijHzjdI(jkHLC[l]l^l_l`l{l|l}l~lama bmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmym

1450  

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

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

1453  

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

1455 using the memory resource currently associated with this Device. 

1456  

1457 Note 

1458 ---- 

1459 Device must be initialized. 

1460  

1461 Parameters 

1462 ---------- 

1463 size : int 

1464 Number of bytes to allocate. 

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

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

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

1468 the default stream. 

1469  

1470 Returns 

1471 ------- 

1472 :obj:`~_memory.Buffer` 

1473 Newly created buffer object. 

1474  

1475 """ 

1476 self._check_context_initialized() 2*i+i/E?jAjNlOldieifigihia iijikiliminioipiQERESETEUE

1477 return self.memory_resource.allocate(size, stream=stream) 2*i+i/E?jAjNlOldieifigihia iijikiliminioipiQERESETEUE

1478  

1479 def sync(self) -> None: 

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

1481  

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

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

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

1485 green context) is unaffected. 

1486  

1487 Note 

1488 ---- 

1489 Device must be initialized. 

1490  

1491 """ 

1492 self._check_context_initialized() 2%G(G,G-G.GaDbDaMbMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMBMCMDMEMFMGMHMIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M%M'M(M)M*M+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuNvNwNxNyNzNANBNCNDN*i+i#ipLLCqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLILJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L9i$i/i:i!i,Kti9fGnd e

1493 cdef Context ctx = self._context 2%G(G,G-G.GaDbDaMbMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMBMCMDMEMFMGMHMIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M%M'M(M)M*M+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuNvNwNxNyNzNANBNCNDN*i+i#ipLLCqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLILJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L9i$i/i:i!i,Kti9fGnd e

1494 HANDLE_RETURN(context_synchronize(ctx._h_context)) 2%G(G,G-G.GaDbDaMbMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMBMCMDMEMFMGMHMIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M%M'M(M)M*M+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuNvNwNxNyNzNANBNCNDN*i+i#ipLLCqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLILJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L9i$i/i:i!i,Kti9fGnd e

1495  

1496 def create_graph_builder(self) -> GraphBuilder: 

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

1498  

1499 Returns 

1500 ------- 

1501 :obj:`~graph.GraphBuilder` 

1502 Newly created graph builder object. 

1503  

1504 """ 

1505 from cuda.core.graph._graph_builder import GraphBuilder 2#G$G'G)G*G+GrG/G:G;GHjIj=i?isG@iJj=G?G[iKjLj@G]i[G^i_itG]GMjNjOj^G_G`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujKE-K.K/KZH0H1H{C2HhF|C}C~CvjPjQjRjSjTjUjVjwjmLnL#iLCuiviwixiyiFH(m

1506  

1507 self._check_context_initialized() 2#G$G'G)G*G+GrG/G:G;GHjIj=i?isG@iJj=G?G[iKjLj@G]i[G^i_itG]GMjNjOj^G_G`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujKE-K.K/KZH0H1H{C2HhF|C}C~CvjPjQjRjSjTjUjVjwjmLnL#iLCuiviwixiyiFH(m

1508 return GraphBuilder._init(self.create_stream()) 2#G$G'G)G*G+GrG/G:G;GHjIj=i?isG@iJj=G?G[iKjLj@G]i[G^i_itG]GMjNjOj^G_G`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujKE-K.K/KZH0H1H{C2HhF|C}C~CvjPjQjRjSjTjUjVjwjmLnL#iLCuiviwixiyiFH(m

1509  

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

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

1512  

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

1514 access. 

1515  

1516 Note 

1517 ---- 

1518 Device must be initialized. 

1519  

1520 Parameters 

1521 ---------- 

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

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

1524  

1525 Returns 

1526 ------- 

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

1528 Newly created opaque array. 

1529  

1530 .. versionadded:: 1.1.0 

1531 """ 

1532 from cuda.core.texture._array import _create_opaque_array 2/FFGGGHGIGJGGHqIrIsItIuIvI(mHHwICoIHJHxIKHgFKGLGNGzFOGQGRGSGTGGj6E

1533  

1534 self._check_context_initialized() 2/FFGGGHGIGJGGHqIrIsItIuIvI(mHHwICoIHJHxIKHgFKGLGNGzFOGQGRGSGTGGj6E

1535 return _create_opaque_array(options, self._context, self._device_id) 2/FFGGGHGIGJGGHqIrIsItIuIvI(mHHwICoIHJHxIKHgFKGLGNGzFOGQGRGSGTGGj6E

1536  

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

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

1539  

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

1541 levels. 

1542  

1543 Note 

1544 ---- 

1545 Device must be initialized. 

1546  

1547 Parameters 

1548 ---------- 

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

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

1551  

1552 Returns 

1553 ------- 

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

1555 Newly created mipmapped array. 

1556  

1557 .. versionadded:: 1.1.0 

1558 """ 

1559 from cuda.core.texture._mipmapped_array import _create_mipmapped_array 2gFLHyIzIAIMHBIMGPG6E

1560  

1561 self._check_context_initialized() 2gFLHyIzIAIMHBIMGPG6E

1562 return _create_mipmapped_array(options, self._context, self._device_id) 2gFLHyIzIAIMHBIMGPG6E

1563  

1564 def create_texture_object( 

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

1566 ) -> TextureObject: 

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

1568  

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

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

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

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

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

1574  

1575 Note 

1576 ---- 

1577 Device must be initialized. 

1578  

1579 Parameters 

1580 ---------- 

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

1582 The memory backing the texture. 

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

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

1585  

1586 Returns 

1587 ------- 

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

1589 Newly created texture object. 

1590  

1591 .. versionadded:: 1.1.0 

1592 """ 

1593 from cuda.core.texture._texture import _create_texture_object 2/FFGGGHGIGJGgFzF;HOGKoPGLoQGRGSGTG=HGj6E

1594  

1595 self._check_context_initialized() 2/FFGGGHGIGJGgFzF;HOGKoPGLoQGRGSGTG=HGj6E

1596 return _create_texture_object( 2/FFGGGHGIGJGgFzF;HOGKoPGLoQGRGSGTG=HGj6E

1597 resource, options, self._context, self._device_id) 2/FFGGGHGIGJGgFzF;HOGKoPGLoQGRGSGTG=HGj6E

1598  

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

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

1601  

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

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

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

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

1606  

1607 Note 

1608 ---- 

1609 Device must be initialized. 

1610  

1611 Parameters 

1612 ---------- 

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

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

1615 ``is_surface_load_store=True``. 

1616  

1617 Returns 

1618 ------- 

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

1620 Newly created surface object. 

1621  

1622 .. versionadded:: 1.1.0 

1623 """ 

1624 from cuda.core.texture._surface import _create_surface_object 2KGLGJoMGNGzF6E

1625  

1626 self._check_context_initialized() 2KGLGJoMGNGzF6E

1627 return _create_surface_object( 2KGLGJoMGNGzF6E

1628 resource, self._context, self._device_id) 2KGLGJoMGNGzF6E

1629  

1630  

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

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

1633 global _is_cuInit 

1634 if _is_cuInit is False: 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPbYJ4K5KKDLD6K7K3HMDHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7H=JhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HNH8GBF#H$HyGzG%HCFhhVtihCJWtjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOHDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPl/CwwxwkKlh9iywmhnhohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)xlL|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeAPH;JfAQHRHSH7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#d?LHA@LIA[LJA]LKA^LLAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC

1635 with _lock, nogil: 

1636 HANDLE_RETURN(cydriver.cuInit(0)) 

1637 _is_cuInit = True 

1638 IF CUDA_CORE_BUILD_MAJOR >= 13: 

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

1640 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch 

1641 warn_if_cuda_major_version_mismatch() 

1642 return 0 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPbYJ4K5KKDLD6K7K3HMDHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7H=JhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HNH8GBF#H$HyGzG%HCFhhVtihCJWtjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOHDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPl/CwwxwkKlh9iywmhnhohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)xlL|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeAPH;JfAQHRHSH7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#d?LHA@LIA[LJA]LKA^LLAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC

1643  

1644  

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

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

1647 cdef cydriver.CUdevice dev 

1648 cdef cydriver.CUcontext ctx 

1649 cdef cydriver.CUresult err 

1650 if device_id is None: 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPb3HHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7HhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HBF#H$HyGzG%HCFhhVtihCJWtjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPl/CwwxwkKlh9iywmhnhohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)xlL|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeA;JfA7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC

1651 with nogil: 2Ub#G$GqF%G'G(G)G*G+GrG,G-G.G/G:GTkEIFIGIHIII;GHjIj=i?isG@iJj=G?G[iKjUkLj@G]iVkJI[G^i_itGWk]GMjNjOj^G_GXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoKILIMINIOI*m+m,m-mYk`GPIQIZk0k1k2k3k.m/m:m;m=m?m@m[m]m^mte=dKd$d%dydue?dLd'd(dzdve@dMd)d*dAdwe[dNd+d,dBdxe]dOd-d.dCdye^dPd/d:dDd_m`m{m|m}m~manbncndnenfnqorFgnhninjnKEsFtFRISIknro?HAm{G|G}GBm~GSlTl@H[HCmDm]Hjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorllnuFTI8k9k!k#k$k%kmnkklkmknkokpkqkrkdlelflIJBiUIaHbHVIWI'k(k)kXIYIZI0I1I?J^H_H@J[Jnnonpn]J^J_J`J{J|J`H{H}J~JqnrnsnaKbKcKdKeKtnunvnwnxnynzn2IcHdH3I4I*k+k,k5I6I7I8I9IAn!IeHfH#I$I-k.k/k%I'I(I)I*ICiBnCn:kvFwFvjPj;kxFQjRjSjTjUjVjwjck=kWjMfNfOfsktkPfQfukRfSfTfUfHmVfWf6Cvk7Cwk8CxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSk~daeZJzeAeBeCeDeEebeUlce_d(E;dde`dFeee{d+Ife,I|dGeHeIegeheiejekelemeAFf g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J -I.I/I:I;I=I9eBo*i+icI?IGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8i_FBF#HCFjH=jlbzjdI(jkH@I[I]I^I_I`I+j{I|I}I~IaJbJcJ,jeIfI9JgIhIiIjIkI!J#JlI$JmInI%J'J(J)J*J+JoIpI,J-JglLlc DnEnFnxjyj-j.j/jXboepeYbZbqerelH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$e)j@j[j]j^j.lMl/l:l_j`jPl9i;l=l{j|j?lQl}j~jakbk.Jsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0j@lRl*j1jti9f-CCj2j.CmHnHyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoCGDGEGRo$j;j}dFjyi%i%j'jXl|bdJ}b~bJlacKlbc/Jcc:JdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxdjG9l!l,e#l$l%l'lzm-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l,iEH-l4G5G6GeJ;J7GFHfJ-HgJhJiJjJ.HkJlJmJnJoJpJqJrJsJtJuJvJwJxJyFyJ:HzJAJ~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLfFGGGHGIGJGGHqIrIsItIuIvI(mHHwICoIHJHpKqKrKsKtKuKxIKHgFLHyIzIAIMHvKwKxKyKVEWEXEYEZE0EBI1E2E3E4E5EKGLGJoMGNGzFOGKoPGLoQGRGSGTG=H6E

1652 err = cydriver.cuCtxGetDevice(&dev) 2Ub#G$GqF%G'G(G)G*G+GrG,G-G.G/G:GTkEIFIGIHIII;GHjIj=i?isG@iJj=G?G[iKjUkLj@G]iVkJI[G^i_itGWk]GMjNjOj^G_GXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoKILIMINIOI*m+m,m-mYk`GPIQIZk0k1k2k3k.m/m:m;m=m?m@m[m]m^mte=dKd$d%dydue?dLd'd(dzdve@dMd)d*dAdwe[dNd+d,dBdxe]dOd-d.dCdye^dPd/d:dDd_m`m{m|m}m~manbncndnenfnqorFgnhninjnKEsFtFRISIknro?HAm{G|G}GBm~GSlTl@H[HCmDm]Hjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorllnuFTI8k9k!k#k$k%kmnkklkmknkokpkqkrkdlelflIJBiUIaHbHVIWI'k(k)kXIYIZI0I1I?J^H_H@J[Jnnonpn]J^J_J`J{J|J`H{H}J~JqnrnsnaKbKcKdKeKtnunvnwnxnynzn2IcHdH3I4I*k+k,k5I6I7I8I9IAn!IeHfH#I$I-k.k/k%I'I(I)I*ICiBnCn:kvFwFvjPj;kxFQjRjSjTjUjVjwjck=kWjMfNfOfsktkPfQfukRfSfTfUfHmVfWf6Cvk7Cwk8CxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSk~daeZJzeAeBeCeDeEebeUlce_d(E;dde`dFeee{d+Ife,I|dGeHeIegeheiejekelemeAFf g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J -I.I/I:I;I=I9eBo*i+icI?IGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8i_FBF#HCFjH=jlbzjdI(jkH@I[I]I^I_I`I+j{I|I}I~IaJbJcJ,jeIfI9JgIhIiIjIkI!J#JlI$JmInI%J'J(J)J*J+JoIpI,J-JglLlc DnEnFnxjyj-j.j/jXboepeYbZbqerelH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$e)j@j[j]j^j.lMl/l:l_j`jPl9i;l=l{j|j?lQl}j~jakbk.Jsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0j@lRl*j1jti9f-CCj2j.CmHnHyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoCGDGEGRo$j;j}dFjyi%i%j'jXl|bdJ}b~bJlacKlbc/Jcc:JdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxdjG9l!l,e#l$l%l'lzm-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l,iEH-l4G5G6GeJ;J7GFHfJ-HgJhJiJjJ.HkJlJmJnJoJpJqJrJsJtJuJvJwJxJyFyJ:HzJAJ~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLfFGGGHGIGJGGHqIrIsItIuIvI(mHHwICoIHJHpKqKrKsKtKuKxIKHgFLHyIzIAIMHvKwKxKyKVEWEXEYEZE0EBI1E2E3E4E5EKGLGJoMGNGzFOGKoPGLoQGRGSGTG=H6E

1653 if err == cydriver.CUresult.CUDA_SUCCESS: 2Ub#G$GqF%G'G(G)G*G+GrG,G-G.G/G:GTkEIFIGIHIII;GHjIj=i?isG@iJj=G?G[iKjUkLj@G]iVkJI[G^i_itGWk]GMjNjOj^G_GXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoKILIMINIOI*m+m,m-mYk`GPIQIZk0k1k2k3k.m/m:m;m=m?m@m[m]m^mte=dKd$d%dydue?dLd'd(dzdve@dMd)d*dAdwe[dNd+d,dBdxe]dOd-d.dCdye^dPd/d:dDd_m`m{m|m}m~manbncndnenfnqorFgnhninjnKEsFtFRISIknro?HAm{G|G}GBm~GSlTl@H[HCmDm]Hjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorllnuFTI8k9k!k#k$k%kmnkklkmknkokpkqkrkdlelflIJBiUIaHbHVIWI'k(k)kXIYIZI0I1I?J^H_H@J[Jnnonpn]J^J_J`J{J|J`H{H}J~JqnrnsnaKbKcKdKeKtnunvnwnxnynzn2IcHdH3I4I*k+k,k5I6I7I8I9IAn!IeHfH#I$I-k.k/k%I'I(I)I*ICiBnCn:kvFwFvjPj;kxFQjRjSjTjUjVjwjck=kWjMfNfOfsktkPfQfukRfSfTfUfHmVfWf6Cvk7Cwk8CxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSk~daeZJzeAeBeCeDeEebeUlce_d(E;dde`dFeee{d+Ife,I|dGeHeIegeheiejekelemeAFf g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J -I.I/I:I;I=I9eBo*i+icI?IGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8i_FBF#HCFjH=jlbzjdI(jkH@I[I]I^I_I`I+j{I|I}I~IaJbJcJ,jeIfI9JgIhIiIjIkI!J#JlI$JmInI%J'J(J)J*J+JoIpI,J-JglLlc DnEnFnxjyj-j.j/jXboepeYbZbqerelH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$e)j@j[j]j^j.lMl/l:l_j`jPl9i;l=l{j|j?lQl}j~jakbk.Jsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0j@lRl*j1jti9f-CCj2j.CmHnHyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoCGDGEGRo$j;j}dFjyi%i%j'jXl|bdJ}b~bJlacKlbc/Jcc:JdcseWb+eYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxdjG9l!l,e#l$l%l'lzm-e.e/e:e;e=e?e@e[e]e^e(l_e`e{e|e}e)l*lmb+l,l,iEH-l4G5G6GeJ;J7GFHfJ-HgJhJiJjJ.HkJlJmJnJoJpJqJrJsJtJuJvJwJxJyFyJ:HzJAJ~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLfFGGGHGIGJGGHqIrIsItIuIvI(mHHwICoIHJHpKqKrKsKtKuKxIKHgFLHyIzIAIMHvKwKxKyKVEWEXEYEZE0EBI1E2E3E4E5EKGLGJoMGNGzFOGKoPGLoQGRGSGTG=H6E

1654 return int(dev) 2#G$GqF%G'G(G)G*G+GrG,G-G.G/G:GTkEIFIGIHIII;GHjIj=i?isG@iJj=G?G[iKjUkLj@G]iVkJI[G^i_itGWk]GMjNjOj^G_GXk)m`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujMoNoKILIMINIOI*m+m,m-mYk`GPIQIZk0k1k2k3k.m/m:m;m=m?m@m[m]m^mte=dKd$d%dydue?dLd'd(dzdve@dMd)d*dAdwe[dNd+d,dBdxe]dOd-d.dCdye^dPd/d:dDd_m`m{m|m}m~manbncndnenfnqorFgnhninjnKEsFtFRISIknro?HAm{G|G}GBm~GSlTl@H[HCmDm]Hjl4k-i.iEmFmBj5k6ksotouoklllmlvonl7kolplqlwoxorllnuFTI8k9k!k#k$k%kmnkklkmknkokpkqkrkdlelflIJBiUIaHbHVIWI'k(k)kXIYIZI0I1I?J^H_H@J[Jnnonpn]J^J_J`J{J|J`H{H}J~JqnrnsnaKbKcKdKeKtnunvnwnxnynzn2IcHdH3I4I*k+k,k5I6I7I8I9IAn!IeHfH#I$I-k.k/k%I'I(I)I*ICiBnCn:kvFwFvjPj;kxFQjRjSjTjUjVjwjck=kWjMfNfOfsktkPfQfukRfSfTfUfHmVfWf6Cvk7Cwk8CxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSk~daeZJzeAeBeCeDeEebeUlce_d(E;dde`dFeee{d+Ife,I|dGeHeIegeheiejekelemeAFf g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J -I.I/I:I;I=IcI?IjHdIkH@I[I]I^I_I`I+j{I|I}I~IaJbJcJ,jeIfI9JgIhIiIjIkI!J#JlI$JmInI%J'J(J)J*J+JoIpI,J-Jglc DnEnFnxjyj-j.j/jXboepeYbZbqerelH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVlWl{b!e#e$e)jMl9iQl.Jsldk?k@kektlul$i/i:i!i[kshfk!f]kth^kuh_kvh`kwhgk#f{kxhvl$C|k%Cwl'Cxl(Cyl)Czl*C}k+CAl,CBlyhYj%eClzhDlAhElBhFlChZj'eGlDhEhHlIlhk~k0jRl*j1jti9f-CCj2j.CmHnHyozoAo3j(eDj4jalbl5jclEjikjkuiviwi)e*exi6j7j8j9j!j#jPoQoCGDGEGRo$j;j}dFjyi%i%j'jXl|bdJ}b~bJlacKlbc/Jcc:JdcseWbYlZl0l1l2l3l4l5l6l7l8lecfcgchcicjckclcmcncocpcqcBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c^cQd_cRd`c{cSd|cTd}cGd~cHdada bdcdUdddVdedfdgdhdIdidJdjdWdkdXdldYdmdZdnd0dod1dpd2dqd3drd4dsd5dtdud6dvd7dwdxd9l!l#l$l%l'l(l)l*l+l,lEH-l4G5G6GeJ;J7GFHfJ-HgJhJiJjJ.HkJlJmJnJoJpJqJrJsJtJuJvJwJxJyFyJ:HzJAJ~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dJfKfLfFGGGHGIGJGGHqIrIsItIuIvI(mHHwICoIHJHpKqKrKsKtKuKxIKHgFLHyIzIAIMHvKwKxKyKVEWEXEYEZE0EBI1E2E3E4E5EKGLGJoMGNGzFOGKoPGLoQGRGSGTG=H6E

1655 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT: 

1656 with nogil: 2Ub9eBo*i+iGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8i_FBF#HCF=jlbzj(jglLlc )j@j[j]j^j.lMl/l:l_j`jPl;l=l{j|j?lQl}j~jakbk@lRl*j+ejG,ezm-e.e/e:e;e=e?e@e[e]e^e_e`e{e|e}emb,i

1657 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2Ub9eBo*i+iGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8i_FBF#HCF=jlbzj(jglLlc )j@j[j]j^j.lMl/l:l_j`jPl;l=l{j|j?lQl}j~jakbk@lRl*j+ejG,ezm-e.e/e:e;e=e?e@e[e]e^e_e`e{e|e}emb,i

1658 assert <void*>(ctx) == NULL 2Ub9eBo*i+iGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8i_FBF#HCF=jlbzj(jglLlc )j@j[j]j^j.lMl/l:l_j`jPl;l=l{j|j?lQl}j~jakbk@lRl*j+ejG,ezm-e.e/e:e;e=e?e@e[e]e^e_e`e{e|e}emb,i

1659 return 0 # cudart behavior 2Ub9eBo*i+iGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8i_FBF#HCF=jlbzj(jglLlc )j@j[j]j^j.lMl/l:l_j`jPl;l=l{j|j?lQl}j~jakbk@lRl*j+ejG,ezm-e.e/e:e;e=e?e@e[e]e^e_e`e{e|e}emb,i

1660 else: 

1661 HANDLE_RETURN(err) 

1662 elif device_id < 0: 2UbVoWoXoYoZo0o1o2o3orG4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o=i,o?i-osG.o@i/o:o;o=o[i?o@o[o]o^o]i_o`o{o|o^i}o_i~otGapbpcpdpepfpgphpipjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'p(p)p*p+pDo,pEo-p.p/p:p;p=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q9q!q#q$q1D%q'qHo(q)q~m*qIo+q,q-q.q/q:q;qqo=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerrofrgrhrirjrkrlrmrnrorprqrrrAmsr{GtrurvrBmwr~GxrSlyrTlzrArBrCmCrDmDrErjlFrGr-iHr.iIrJrKrLrMrNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVrWrolXrplYrqlZrwo0rxo1rrl2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1Heh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPs{CQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~satbtctdtetvjftgthtitjtktltmtntotwjptqtrtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWfvkwkxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeytBKze5CAeZGBeiGCe0GDeEebeztce_d(E;d}Hde~H`dFeee{dAtfe|dGeCKHeIeaIgebIheiejekelemeBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPb3HHtItJtKtLtMtNtOtPtQt*i+i4HvG5HgHRtfKStwG6HgKTthH7HhKUtiK8H#iPnxG.EiH9HQnjK!H$HyGzG%HhhVtihCJWtjhRnXtYtZt0t1tkH2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nDK,n-nhuci.niujuc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdvevfvgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwkh?n/CwwxwkKlhywmhnhohph@nlKqhmKrhzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQw!iRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?wYj@w%e[w]w^w_w`w{w|w}w~wZjax'ebxcxdxexfxgxhxix0jjxFhGhkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnuxvxwxxxyx^nHhzx_nmHAxnHBx`n{n|nCxDxExFxGxDjHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x}d!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)xlL|bdJ}b~b*xac+xbcccdcse,xWb-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqczi_xAi`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;zmb=z?z@z[z]z,i^z_z`z{z|z,H}z~zaA;ibAcAdAeAfAgAhAiA-HjAkAlAmAnA.HoApAqArAsAtAuAvA/HwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQAGHRASATAUAVAWAXA(mYAZA0ACo1A2A3A4A5A6A7A8A9A!A#A$ALH%A'A(A)A*A+A,A-A.AVE/AWE:AXE;AYE=AZE?A0E@A[A1E]A2E^A3E_A4E`A5E{A|A}AJo~AaBbBcBoo;HdBeBKofBgBLohBiBjBkBlBmBnBoBpBGjpoqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC

1663 raise ValueError(f"device_id must be >= 0, got {device_id}") 

1664 return device_id 2UbVoWoXoYoZo0o1o2o3orG4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o=i,o?i-osG.o@i/o:o;o=o[i?o@o[o]o^o]i_o`o{o|o^i}o_i~otGapbpcpdpepfpgphpipjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'p(p)p*p+pDo,pEo-p.p/p:p;p=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q9q!q#q$q1D%q'qHo(q)q~m*qIo+q,q-q.q/q:q;qqo=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerrofrgrhrirjrkrlrmrnrorprqrrrAmsr{GtrurvrBmwr~GxrSlyrTlzrArBrCmCrDmDrErjlFrGr-iHr.iIrJrKrLrMrNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVrWrolXrplYrqlZrwo0rxo1rrl2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1Heh^rfh_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPs{CQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~satbtctdtetvjftgthtitjtktltmtntotwjptqtrtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWfvkwkxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeytBKze5CAeZGBeiGCe0GDeEebeztce_d(E;d}Hde~H`dFeee{dAtfe|dGeCKHeIeaIgebIheiejekelemeBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPb3HHtItJtKtLtMtNtOtPtQt*i+i4HvG5HgHRtfKStwG6HgKTthH7HhKUtiK8H#iPnxG.EiH9HQnjK!H$HyGzG%HhhVtihCJWtjhRnXtYtZt0t1tkH2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nDK,n-nhuci.niujuc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdvevfvgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwkh?n/CwwxwkKlhywmhnhohph@nlKqhmKrhzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQw!iRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?wYj@w%e[w]w^w_w`w{w|w}w~wZjax'ebxcxdxexfxgxhxix0jjxFhGhkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnuxvxwxxxyx^nHhzx_nmHAxnHBx`n{n|nCxDxExFxGxDjHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x}d!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|bdJ}b~b*xac+xbcccdcse,xWb-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqczi_xAi`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;zmb=z?z@z[z]z,i^z_z`z{z|z,H}z~zaA;ibAcAdAeAfAgAhAiA-HjAkAlAmAnA.HoApAqArAsAtAuAvA/HwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQAGHRASATAUAVAWAXA(mYAZA0ACo1A2A3A4A5A6A7A8A9A!A#A$ALH%A'A(A)A*A+A,A-A.AVE/AWE:AXE;AYE=AZE?A0E@A[A1E]A2E^A3E_A4E`A5E{A|A}AJo~AaBbBcBoo;HdBeBKofBgBLohBiBjBkBlBmBnBoBpBGjpoqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC

1665  

1666  

1667cdef inline list Device_ensure_tls_devices(cls): 

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

1669 cdef int total 

1670 try: 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPbYJ4K5KKDLD6K7K3HMDHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7H=JhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HNH8GBF#H$HyGzG%HCFhhVtihCJWtjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOHDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPl/CwwxwkKlh9iywmhnhohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)x|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeAPH;JfAQHRHSH7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#d?LHA@LIA[LJA]LKA^LLAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC

1671 return _tls.devices 2Ub#GVo$GWoqFXo%GYo'GZo(G0o)G1o*G2o+G3orG4o,G5o-G6o.G7o/G8o:G9oTk!oEI#oFI$oGI%oHI'oII(o;G)oHj*oIj+o=i,o?i-osG.o@i/oJj:o=G;o?G=o[i?oKj@oUk[oLj]o@G^o]i_oVk`oJI{o[G|o^i}o_i~otGapWkbp]GcpMjdpNjepOjfp^Ggp_GhpXkip)mjp`ikp{ilp|imp}inp~iopajppbjqpcjrpdjspejtpfjupgjvphjwpijxpjjypkjzpljApmjBpnjCpojDppjEpqjFprjGpsjHptjIpujJpMoKpNoLpNDMpODNpOpInPDPpQpQDRpRDSpSDTp/f:f;fUp=f?f@fTDVpWpXpKIYpLIZpMI0pNI1pOI2p3p4p5p6p7p8p9p!p*m#p+m$p,m%p-m'pYk(p`G)pPI*pQI+pDo,pEo-pZk.p0k/p1k:p2k;p3k=p.m?p/m@p:m[p;m]p=m^p?m_p@m`p[m{pFo|p}p~paqUDbqVDcqWDdqXDeqYDfqZDgqhqiqjq]mkq^mlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6qGo7q0D8q_m9q`m!q{m#q|m$q1D%q}m'qHo(q)q~m*qIo+qan,qbn-qcn.qdn/qen:qfn;qqo=qrF?q@q[q]q^qgn_qhn`qin{qjn|qKE}qsF~qtFarRIbrSIcrkndrerrofrgrhrirjrkrlrmrnrorprqr?HrrAmsr{Gtr|Gur}GvrBmwr~GxrSlyrTlzr@HAr[HBrCmCrDmDr]HErjlFr4kGr-iHr.iIrEmJrFmKrBjLr5kMr6kNrsoOrtoPruoQrklRrllSrmlTrvoUrnlVr7kWrolXrplYrqlZrwo0rxo1rrl2r3rln4ruF5r6r7rTI8r9r!r#r$r8k%r9k'r!k(r#k)r$k*r+r,r-r.r%k/r:r;r=r?r@rmn[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;gkk=glk?gmk@gnk[gok]gpk^gqk_grk`gdl{gel|gfl}g~gahbhZHch0Hdh1HehIJ^rfh_rBi`r{rUI|raH}rbH~rVIasWIbs'kcs(kds)kesXIfsYIgsZIhs0Iis1Ijs?Jks^Hls_Hms@Jns[Josnnpsonqspnrs]Jss^Jts_Jus`Jvs{Jws|Jxs`Hys{Hzs}JAs~JBsqnCsrnDssnEsaKFsbKGscKHsdKIseKJsKstnLsunMsvnNswnOsxnPs{CQsynRsSsTsznUs2IVscHWsdHXs3IYs4IZs*k0s+k1s,k2s5I3s6I4s7I5s8I6s9I7sAn8s9s!I!seH#sfH$s#I%s$I's-k(s.k)s/k*s%I+s'I,s(I-s)I.s*I/s:sCi;sBn=sCn?s)E@s*E[s2H]s^s|C_s}C`s~C{s|s}s~s:katbtctvFdtwFetvjftPjgt;khtxFitQjjtRjktSjltTjmtUjntVjotwjptckqt=krtWjstJJMfNfKJOf+Esk,EtkPfQf@FukRfSfTfLJUfaDHmVfMJWf6Cvk7Cwk8CxkbDImNJXfOJYfPJZfQJ0f1f2f3f4f5f6f7f8f[Fyk]FzkAkBkCkDk^FEkFkGk9CHk!CIkJm#CJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~d|HaeZJytBKze5CAeZGBeiGCe0GDeEebeUlztce_d(E;d}Hde~H`dFeee{dAt+Ife,I|dGeCKHeIeaIgebIheiejekelemeAFBtCtDtEtFtGt-E* f K RJ+ g L LE, 9Eh M 0J- !Ei N HD. j O nb/ k P ob: l Q pbgh[h; Hnm R qbrbsbtbubvbwbxbybzbAbJn= Son S Kn? Too T @ p U [ 1J] ^ 2J_ ` 3J{ | 4J} ~ 5Jabbb6Jcbq iFr jFs t u kFv lFw x y mFz nFA B V W X Y Z 0 1 2 3 4 5 6 MEdb2DC 7 eb3DD 8 NEfb4DE 9 OEgb#EF ! LnMnNnuGhbUoG # SJBbTJCbDbEb7JiboFH $ 8Jjb;EI % PEkbpFJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYe`CZe0e1e2e3e4e5e6e7eYG8eIDFbJDGbVbHbUJIbVJJbKbLbWJMbXJNbObPbYJ4K5KKDLD6K7K3HMDHtItJt-IKt.ILt/IMt:INt;IOt=IPtQt9eBo*i+icI4HvG?I5HgHRtfKStwG6HgKTthH7H=JhKUtiK8H#iPnGm5D6D7DOicD:CDi:F8D9DPi;FdD!D#D$D%D;C=CQiRiEi'D(DeD)D?C*D+D,D-DfD@CgD[ChDiDFi.DjDGi]C/Dqi:D;DXj=D?DOo@DSi[D]D^D_D`D{D|D}D~DkDaElDmDbETiHicEdEeEnDoDfEUigEhEiEpDqDjErDkElEsDmEVinEoEtDIipEWiXiYiJiuDqErEvDZiwDsEKiLixDtEuEvEwE=FxE0i1iyEzEAEBE2i3iri4i^CCEDEEEyDMi?FzDAD5iFENi6i7isiGEHEIE_CJE8ixG.E_FiH9HQnjK!HNH8GBF#H$HyGzG%HCFhhVtihCJWtjhRnXtYtZtjH0t=jlbzjdI1t(jkH2t@I3t[I4t]I5t^I6t_I7t`I8t+j9t{I!t|I#t}I$t~I%taJ'tbJ(tcJ)t,j*teI+tfI,t9J-tgI.thI/tiI:tjI;tkI=t!J?t#J@tlI[t$J]tmI^tnI_t%J`t'J{t(J|t)J}t*J~t+JauoIbupIcu,Jdu-JeuSn]hTnDJUn^h/Eb ?jEdAjFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOHDK,n-nhuci.niujuglLlc DnkuEnlumuFnnuoupuquxjruyjsu-jtuuuvuwuxuyuzuAuBuCuDuEuFuGu.jHu/jIuJuKuLuMuneNuOuPuQu:jRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXboe]upe^uYbZbqe_ure`ulH0b1b2b'H3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bVl{uWl|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvNlhvOliv/n:nAGjvBGkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v(H`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPl/CwwxwkKlh9iywmhnhohph@nlKqhmKrh;l=lzwAw{j|j?lQl}j~jakbk.JBwCwDwEwFwslGwdkHw?kIw@kJwekKwtlLwulMw$iNwOw/iPw:iQw!iRwSw[kTwshUwfkVw!fWw]kXwthYw^kZwuh0w_k1wvh2w`k3wwh4wgk5w#f6w{k7wxh8wvl9w$C!w|k#w%C$wwl%w'C'wxl(w(C)wyl*w)C+wzl,w*C-w}k.w+C/wAl:w,C;wBl=wyh?wYj@w%e[wCl]wzh^wDl_wAh`wEl{wBh|wFl}wCh~wZjax'ebxGlcxDhdxEhexHlfxIlgxhkhx~kix0jjxFh@lRlGh*jkxlx[n]nmxnxoxMCpx1jqxrxtisx9ftxGnux-CvxCjwx2jxx.Cyx^nHhzx_nmHAxnHBx`n{n|nyoCxzoDxAoEx3jFx(eGxDjHx4jIxalJxblKx5jLxclMxEjNxikOxjkPxuiQxviRxwiSx)eTx*eUxxiVx6jWx7jXx8jYx9jZx!j0x#j1xPo2xQo3xCG4xDG5xEG6xRo7x$j8x;j9x}d!xFj#xyi$x%i%x%j'x'j(x}n~naobocodoeofogohoiojokoXl)x|bdJ}b~bJl*xacKl+xbc/Jcc:Jdcse,xWb+eYl-xZl.x0l/x1l:x2l;x3l=x4l?x5l@x6l[x7l]x8l^xecfcgchcicjckclcmcncocpcqczi_xAi`xBDrcCDscDDtcEDucFDvcGDwcNCxcOCycPCzcQCAcRCBcSCCcTCDcUCEcVCFcWCGcXCHcYCIcZCJc0CKc1CLc2CMc3CNc4COc)HPc*HQc$ERc=ESc?ETc@EUc[EVc]EWc^EXc%EYc_EZc`E0c{E1c|E2c}E3c~E4c'E5caF6cbF7ccF8cdF9ceF!cfF#c+H$coH%cpH'cqH(crH)csH*ctH+cuH,cvH-cwH.cxH/cyH:czH;cAH=cBH?cCH@cDH[c]c1GQbRb2GSbIh3GTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya nKxyoKyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjG9ljz!lkz,e#llz$lmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz%lZz'l0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e(l:z_e`e{e|e}e)l;z*lmb+l=z,l?z@z[z]z,i^z_z`z{z|zEH,H-l}z~zaA;i4GbA5GcA6GdAeJeAPH;JfAQHRHSH7GgAFHhAfJiA-HjAgJkAhJlAiJmAjJnA.HoAkJpAlJqAmJrAnJsAoJtApJuAqJvArJ/HsJwAtJxAuJyAvJzAwJAAxJBAyFCAyJDA:HEAzJFAAJGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpfQE!mRE#mSE$mqfrfsftfufTE%mUE'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#d?LHA@LIA[LJA]LKA^LLAJfKfLfFGMAGGNAHGOAIGPAJGQAGHRAqISArITAsIUAtIVAuIWAvIXA(mYAHHZAwI0ACo1AIH2AJH3ApK4AqK5ArK6AsK7AtK8AuK9AxI!AKH#AgF$ALH%AyI'AzI(AAI)AMH*AvK+AwK,AxK-AyK.AVE/AWE:AXE;AYE=AZE?A0E@ABI[A1E]A2E^A3E_A4E`A5E{AKG|ALG}AJo~AMGaBNGbBzFcBoo;HdBOGeBKofBPGgBLohBQGiBRGjBkBlBSGmBnBTGoB=HpBGjpo6EqBDFrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBEFRBFFSBGFTBHFUBIFVBJFWBKFXBLFYBMFZBNF0BOF1BPF2BQF3BRF4BSF5BTF6BUF7BVF8BWF9BXF!BYF#BZF$B0F%B1F'B2F(B3F)B4F*B5F+B6F,B7F-B8F.B9F/B!F:B#F;B$F=B%F?B'F@B(F[B)F]B^B_B`B*F{B|B}B+F~BaC7EbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFC,FGC-FHCICJC.FKC

1672 except AttributeError: 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1673 with nogil: 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1674 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1675 devices = _tls.devices = [] 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1676 for dev_id in range(total): 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1677 device = super(Device, cls).__new__(cls) 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1678 device._device_id = dev_id 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1679 device._memory_resource = None 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1680 device._has_inited = False 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1681 device._properties = None 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1682 device._resources = None 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1683 device._uuid = None 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1684 device._context = None 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1685 devices.append(device) 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC

1686 return devices 2UbVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!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~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpInPpQpRpSpTp/f:f;fUp=f?f@fVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!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~paqbqcqdqeqfqgqhqiqjqkqlqte=dKd[f$d%d]fmqnqoqpqyd^f_f`f{f|fqqrque?dLd}f'd(d~fsqtquqvqzdagbgcgdgegwqxqfggghgyqigjgkglgmgngogpgqgve@dMdrg)d*dsgzqAqBqCqAdtgugvgwgxgDqEqwe[dNdyg+d,dzgFqGqHqIqBdAgBgCgDgEgJqKqxe]dOdFg-d.dGgLqMqNqOqCdHgIgJgKgLgPqQqye^dPdMg/d:dNgRqSqTqUqDdOgPgQgRgSgVqWqTgUgVgWgXgYgZg0g1g2g3g4gXq5g6g7g8g9g!gYqZq0q1q2q3q4q5q6q7q8q9q!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~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r'i#g(i$g)i%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhchdheh^rfh_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~satbtctdtetftgthtitjtktltmtntotptqtrtstMfNfOfsktkPfQfukRfSfTfUfHmVfWfvkwkxkImXfYfZf0f1f2f3f4f5f6f7f8fykzkAkBkCkDkEkFkGkHkIkJmJkKkKmLkLmMkNkMmOkNmPkQkRkSkttutvtwtxt~daeytzeAeBeCeDeEebeztce_d;dde`dFeee{dAtfe|dGeHeIegeheiejekelemeBtCtDtEtFtGt-E* f K + g L LE, h M - i N HD. j O nb/ k P ob: l Q pbgh[h; m R qbrbsbtbubvbwbxbybzbAbJn= n S Kn? o T @ p U [ ] ^ _ ` { | } ~ abbbcbq r s t u v w x y z A B V W X Y Z 0 1 2 3 4 5 6 MEdbC 7 ebD 8 NEfbE 9 OEgbF ! LnMnNnhbG # BbCbDbEbibH $ jbI % PEkbJ ' JeKeLeMeNeOePeQeOnReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8eIDFbJDGbVbHbIbJbKbLbMbNbObPbKDLDMDHtItJtKtLtMtNtOtPtQt9eRtStTtUt#iPnGmOiDiPiQiRiEiFiGiqiXjSiTiHiUiViIiWiXiYiJiZiKiLi0i1i2i3iri4iMi5iNi6i7isi8iQnNH8GhhVtihWtjhRnXtYtZt0t=jlbzj1t(j2t3t4t5t6t7t8t9t!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~taubucudueuSn]hTnUn^hb EdFd_h`h{hfu|h}h~haibiVnWnXnYnZngu0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+nOH,n-nhuci.niujuglLlc kulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuneNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[uXb]u^uYbZb_u`u0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{u|u{b!e#e$e}u~uavbvcvdv)j@j[j]j^jevfv.lMl/l:lgvhviv/n:njvkv;n=nlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvw_j`jkh?nPlwwxwlhywmhnhohph@nqhrh;l=lzwAw{j|j?lQl}j~jakbkBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxFh@lRlGh*jkxlx[n]nmxnxoxpxqxrxsxtxuxvxwxxxyx^nHhzx_nAxBx`n{n|nCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x}n~naobocodoeofogohoiojoko)x|b}b~b*xac+xbcccdc,xWb+e-x.x/x:x;x=x?x@x[x]x^xecfcgchcicjckclcmcncocpcqc_x`xrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]cQbRbSbIhTbdi[l^cOmJheiQd{xPm|xKh]l^l_lLh}x~xayby_cRdMhNh`ccyQmdyeyfi{cRmfyOhgiSdgySmhyPh`l{l|lQhiyjykyly|cTdRhSh}cmyTmnyoy$fhiGdpyhllo%f}l~lam'fqyrysyty~cHd(f)faduyUmvywya xyyyd e ( ) bdcdThiiUdzyVmAyUhbmcmdmVhByCyDyEyddVdWhXhedfdFygdhdGyHyWmIyJy*fjiIdKyilmo+femfmgm,fLyMyNyOyidJd-f.fjdPyXmQyRyYhkiWdSyYmTyZhhmimjm0hUyVyWyXykdXd1h2hldYyZmZy0y3hliYd1y0m2y4hkmlmmm5h3y4y5y6ymdZd6h7hnd7y1m8y9y8hmi0d!y2m#y9hnmompm!h$y%y'y(yod1d#h$hpd)y3m*y+y%hni2d,y4m-y'hqmrmsm(h.y/y:y;yqd3d)h*hrd=y5m?y@y+hoi4d[y6m]y,htmumvm-h^y_y`y{ysd5d.h/htdud|y7m}y~y:hpi6daz8mbz;hwmxmym=hczdzezfzvd7d?h@hwdxdgz9mhzizjzkz,elzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0zzm1z2z3z4z5z6z7z-e.e/e:e;e8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z=e?e@e[e]e^e:z_e`e{e|e}e;zmb=z?z@z[z]z,i^z_z`z{z|z}z~zaA;ibAcAdAeAPHfAQHRHSHgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAno~eafbfcfdfefffgfhfifjfkflfmfnfofpf!m#m$mqfrfsftfuf%m'mvfwfxfyfzfAfBfCfDfEfFfGfHfIf8d9d!d#dHAIAJAKALAJfKfLfMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBoodBeBfBgBhBiBjBkBlBmBnBoBpBGjpoqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKC