# cython:language_level=3
import time
if 82 - 82: Iii1i
if 87 - 87: Ii % i1i1i1111I . Oo / OooOoo * I1Ii1I1 - I1I
from . wgpacket import WGTools
from . mMonitorInfo import mMonitorInfo
if 81 - 81: i1 + ooOOO / oOo0O00 * i1iiIII111 * IiIIii11Ii
if 84 - 84: ooo000 - Ooo0Ooo + iI1iII1I1I1i . IIiIIiIi11I1
def getCommData ( cmdudp , comm ) :
 iI111iiIi11i = 400
 OoOoo0o = 0
 comm . runStatus = - 1
 mMonitorInfo . wgConRPCCommonWebapi . run ( cmdudp , comm )
 while True :
  OoOoo0o += 1
  time . sleep ( 0.001 )
  if OoOoo0o > iI111iiIi11i :
   break
  if comm . runStatus >= 0 :
   if 11 - 11: i1I1 - O000o / O0OO0OooooOo * ii % Ii * i1
   OoOoo0o = 0
   if comm . runStatus == 0 :
    if 9 - 9: i1iiIII111
    if 10 - 10: ooOOO / IIiIIiIi11I1 * O000o / O0OO0OooooOo / O0OO0OooooOo
    if 61 - 61: Ooo0Ooo - I1I
    if 13 - 13: Ooo0Ooo
    return True
 return False
 if 46 - 46: iI1iII1I1I1i - Ii * Oo * Ii
 if 52 - 52: Oo + I1I / O000o / OooOoo - I1Ii1I1 - ooOOO
def getWGRsa ( conSN , comm ) :
 if 60 - 60: iI1iII1I1I1i . O000o
 if 13 - 13: O000o
 if 2 - 2: i1
 if 22 - 22: IIiIIiIi11I1 - ooo000 / I1Ii1I1 . ooo000
 if 1 - 1: iI1iII1I1I1i + Ooo0Ooo + O000o * IIiIIiIi11I1
 if 20 - 20: I1I + Ii
 if 75 - 75: Ii % i1iiIII111 * Ii . IIiIIiIi11I1 % i1I1 % I1Ii1I1
 if 8 - 8: I1Ii1I1 . ii . i1 . Oo - O0OO0OooooOo
 if 32 - 32: Ii % i1i1i1111I % O0OO0OooooOo - i1I1 % i1iiIII111
 o0OoOOo00OOO = [ False , [ ] , [ ] ]
 i11ii1i1I = comm . getNewXid ( )
 IiI = [ 0 ] * 64
 IiI [ 0 ] = 0x37
 IiI [ 1 ] = 0x94
 WGTools . longToByte ( conSN , IiI , 4 , 4 )
 WGTools . longToByte ( i11ii1i1I , IiI , 40 , 4 )
 if getCommData ( IiI , comm ) :
  o00O000o0 = comm . recv [ 26 ]
  oOoo = comm . recv [ 27 ]
 else :
  return o0OoOOo00OOO
 I1i1Ii = False
 if o00O000o0 == 0x10 :
  Ooo0OO = 0x08068000
 elif o00O000o0 == 0x9 :
  Ooo0OO = 0x08028000
  if 6 - 6: i1iiIII111
  if comm . recv [ 27 ] < 0x80 :
   if comm . recv [ 21 ] == 0x66 :
    I1i1Ii = True
 elif o00O000o0 == 0x11 :
  Ooo0OO = 0x08028000
 else :
  WGRsa . dealtCon . append ( conSN )
  WGRsa . invalidCon . append ( conSN )
  return o0OoOOo00OOO
  if 99 - 99: ooOOO * I1Ii1I1
  if 95 - 95: Ooo0Ooo % Iii1i % i1i1i1111I . OooOoo
 I1iIiiIIiIi = [ 0 ] * 1024
 I1iIiiIIiIi [ 0 ] = 0x37
 I1iIiiIIiIi [ 1 ] = 0xb0
 WGTools . longToByte ( conSN , I1iIiiIIiIi , 4 , 4 )
 WGTools . longToByte ( i11ii1i1I , I1iIiiIIiIi , 40 , 4 )
 WGTools . longToByte ( Ooo0OO , I1iIiiIIiIi , 8 , 4 )
 WGTools . longToByte ( 0xaa5555aa , I1iIiiIIiIi , 12 , 4 )
 WGTools . longToByte ( 0x990255aa , I1iIiiIIiIi , 64 , 4 )
 if getCommData ( I1iIiiIIiIi , comm ) :
  i1I11ii = comm . recv
 else :
  if I1i1Ii :
   WGRsa . dealtCon . append ( conSN )
   WGRsa . validCon . append ( conSN )
   if 21 - 21: Iii1i - I1Ii1I1
   return o0OoOOo00OOO
  if o00O000o0 == 0x9 and oOoo < 0xb7 :
   WGRsa . dealtCon . append ( conSN )
   WGRsa . invalidCon . append ( conSN )
   WGRsa . lowversionCon . append ( conSN )
   mMonitorInfo . printCHS ( "The device driver version is too low and needs to be upgraded SN={0: d} Please contact the agent or manufacturer." . format ( conSN ) )
   mMonitorInfo . wglog ( "The device driver version is too low and needs to be upgraded SN={0: d} Please contact the agent or manufacturer." . format ( conSN ) )
   return o0OoOOo00OOO
  return o0OoOOo00OOO
  if 95 - 95: i1 - I1Ii1I1 + Oo
  if 49 - 49: IIiIIiIi11I1
 I1iIiiIIiIi = [ 0 ] * 1024
 I1iIiiIIiIi [ 0 ] = 0x37
 I1iIiiIIiIi [ 1 ] = 0xb0
 Ooo0OO = Ooo0OO + 0x400
 WGTools . longToByte ( conSN , I1iIiiIIiIi , 4 , 4 )
 WGTools . longToByte ( i11ii1i1I , I1iIiiIIiIi , 40 , 4 )
 WGTools . longToByte ( Ooo0OO , I1iIiiIIiIi , 8 , 4 )
 WGTools . longToByte ( 0xaa5555aa , I1iIiiIIiIi , 12 , 4 )
 WGTools . longToByte ( 0x990255aa , I1iIiiIIiIi , 64 , 4 )
 if getCommData ( I1iIiiIIiIi , comm ) :
  iIIiii1iI = comm . recv
 else :
  return o0OoOOo00OOO
 OOO = i1I11ii [ 1024 - 128 + 64 + 20 + 4 : 1024 - 128 + 64 + 20 + 4 + 16 ]
 OooOoo0OO0OO0 = iIIiii1iI [ 64 + 20 + 4 : 64 + 20 + 4 + 256 ]
 if 66 - 66: ooo000
 o0OoOOo00OOO = [ True , OOO , OooOoo0OO0OO0 ]
 return o0OoOOo00OOO
 if 74 - 74: Ii + Ooo0Ooo
 if 1 - 1: I1I % Ooo0Ooo + i1iiIII111 . i1iiIII111 % Oo
 if 93 - 93: oOo0O00 % Ooo0Ooo * i1iiIII111
 if 52 - 52: O000o + I1I / ooo000 - I1Ii1I1 * O0OO0OooooOo % oOo0O00
 if 52 - 52: oOo0O00 . I1I + O0OO0OooooOo - i1iiIII111 % iI1iII1I1I1i
 if 57 - 57: I1I * IIiIIiIi11I1 % I1Ii1I1 * i1i1i1111I
 if 37 - 37: ii * i1i1i1111I + oOo0O00 / I1I / OooOoo
 if 4 - 4: i1
 if 61 - 61: iI1iII1I1I1i . O0OO0OooooOo - ooo000 / ooo000 - i1
 if 19 - 19: Iii1i * Ooo0Ooo . I1Ii1I1 / i1I1 * Ii - O000o
 if 32 - 32: iI1iII1I1I1i
 if 18 - 18: i1I1 * ii % iI1iII1I1I1i + ii
 if 93 - 93: O000o - I1Ii1I1 - IIiIIiIi11I1 * ooOOO - i1
def checklowVersionAgain ( conSN , comm ) :
 if 82 - 82: IIiIIiIi11I1 % i1 * ooOOO
 if 57 - 57: oOo0O00
 if 31 - 31: i1iiIII111 + i1i1i1111I % OooOoo
 if 20 - 20: OooOoo - I1I
 if 9 - 9: i1iiIII111 - iI1iII1I1I1i % Ii - I1I
 if 54 - 54: Iii1i % ooo000 % Iii1i - IiIIii11Ii
 if 39 - 39: O000o - O000o * i1 % IIiIIiIi11I1
 if 29 - 29: IIiIIiIi11I1 - ooo000 . i1iiIII111
 if 86 - 86: I1Ii1I1 - OooOoo - O000o % ooo000 . O0OO0OooooOo % Iii1i
 if 11 - 11: OooOoo - I1Ii1I1 - ooOOO . i1iiIII111 - iI1iII1I1I1i / i1iiIII111
 i11ii1i1I = comm . getNewXid ( )
 IiI = [ 0 ] * 64
 IiI [ 0 ] = 0x37
 IiI [ 1 ] = 0x94
 WGTools . longToByte ( conSN , IiI , 4 , 4 )
 WGTools . longToByte ( i11ii1i1I , IiI , 40 , 4 )
 if getCommData ( IiI , comm ) :
  o00O000o0 = comm . recv [ 26 ]
  oOoo = comm . recv [ 27 ]
 else :
  return
 if o00O000o0 == 0x9 and oOoo >= 0xb7 :
  if 44 - 44: Ooo0Ooo + i1i1i1111I + Iii1i - O000o
  if conSN in WGRsa . lowversionCon :
   WGRsa . dealtCon . remove ( conSN )
   WGRsa . invalidCon . remove ( conSN )
   WGRsa . lowversionCon . remove ( conSN )
   if 7 - 7: i1i1i1111I / Ii * Iii1i
   if 32 - 32: ii . OooOoo
class WGRsa ( object ) :
 if 31 - 31: Oo - O0OO0OooooOo
 dealtCon = [ ]
 invalidCon = [ ]
 invalidConTry1Temp = [ ]
 invalidConTry2Temp = [ ]
 validCon = [ ]
 lowversionCon = [ ]
 if 28 - 28: ooOOO * I1Ii1I1 + ii % Oo
 if 100 - 100: Oo + O0OO0OooooOo
 if 4 - 4: ooo000 % I1I - i1i1i1111I
 if 76 - 76: i1 * oOo0O00 . ii * O0OO0OooooOo . IiIIii11Ii . O000o
 if 55 - 55: i1i1i1111I + i1iiIII111 % Ooo0Ooo . Oo - IiIIii11Ii - iI1iII1I1I1i
 if 91 - 91: I1Ii1I1 - i1I1
 if 84 - 84: O000o % iI1iII1I1I1i - Ooo0Ooo
 if 94 - 94: i1iiIII111 + i1i1i1111I / iI1iII1I1I1i + iI1iII1I1I1i / O0OO0OooooOo
 if 79 - 79: i1iiIII111 - IIiIIiIi11I1 . I1Ii1I1 + I1I - ooOOO + i1iiIII111
 if 36 - 36: ooOOO * Iii1i % I1I % i1 . Ooo0Ooo
 if 63 - 63: IIiIIiIi11I1 / IIiIIiIi11I1 * Iii1i - oOo0O00 . i1
 if 52 - 52: oOo0O00 / O0OO0OooooOo * IIiIIiIi11I1 + i1I1 % Ooo0Ooo + O000o
 if 43 - 43: iI1iII1I1I1i * oOo0O00 + ooOOO
 if 30 - 30: I1I
 if 41 - 41: O000o
 if 98 - 98: I1I / IIiIIiIi11I1 / O0OO0OooooOo + ii % Oo + I1I
 if 38 - 38: I1Ii1I1 + oOo0O00
 if 2 - 2: OooOoo % Ii + O000o . OooOoo + IIiIIiIi11I1 * Oo
 if 2 - 2: IIiIIiIi11I1 + iI1iII1I1I1i - I1Ii1I1 + ooOOO . IIiIIiIi11I1
 if 15 - 15: ooo000
 if 63 - 63: O0OO0OooooOo
 if 81 - 81: OooOoo . O0OO0OooooOo / i1i1i1111I + Oo / Ooo0Ooo % ii
 if 77 - 77: i1I1 / iI1iII1I1I1i - oOo0O00 - Ooo0Ooo % oOo0O00
 if 73 - 73: ii . Oo * I1I / i1i1i1111I + I1Ii1I1
 if 31 - 31: i1i1i1111I % I1Ii1I1
 if 1 - 1: ii - oOo0O00 - i1 . oOo0O00
 if 91 - 91: iI1iII1I1I1i * i1 . ooOOO
 if 81 - 81: I1I * Oo - i1 % OooOoo * ooOOO
 if 19 - 19: Ii
 if 22 - 22: O0OO0OooooOo % iI1iII1I1I1i + Oo
 if 60 - 60: ooo000 + i1I1 + IIiIIiIi11I1 % i1i1i1111I - Ii % Ooo0Ooo
 if 95 - 95: ooOOO % i1i1i1111I . i1
 if 87 - 87: Iii1i % ooOOO * Ii % IIiIIiIi11I1 / i1I1
 if 84 - 84: I1Ii1I1 + Ooo0Ooo % IIiIIiIi11I1 * i1i1i1111I
 if 61 - 61: i1iiIII111 - Oo + I1Ii1I1
 if 43 - 43: IIiIIiIi11I1 * ooo000 + Ii % iI1iII1I1I1i
 if 12 - 12: i1iiIII111 + ooo000 . i1I1
 if 1 - 1: iI1iII1I1I1i % Ii - i1I1 / ii + iI1iII1I1I1i - Ii
 if 27 - 27: OooOoo % iI1iII1I1I1i + IIiIIiIi11I1
 if 16 - 16: ii
 if 31 - 31: oOo0O00 / Iii1i % Ooo0Ooo % i1 . iI1iII1I1I1i . Oo
 if 83 - 83: oOo0O00 - i1I1
 if 91 - 91: IIiIIiIi11I1 - i1 - iI1iII1I1I1i
 if 71 - 71: I1I - ii
 if 66 - 66: i1i1i1111I / Ooo0Ooo + i1I1 + Iii1i + oOo0O00 + O0OO0OooooOo
 if 75 - 75: OooOoo - O000o - IiIIii11Ii - O000o + ooo000 % iI1iII1I1I1i
 if 42 - 42: i1 * O0OO0OooooOo
 if 50 - 50: Ii - i1iiIII111
 if 96 - 96: ooo000 * OooOoo - Ii - OooOoo
 if 65 - 65: Oo + Oo - iI1iII1I1I1i % OooOoo . Ooo0Ooo
 if 84 - 84: IIiIIiIi11I1 . ooOOO
 if 44 - 44: ooo000 * i1i1i1111I * O000o + i1iiIII111 - IIiIIiIi11I1
 if 70 - 70: ii
 if 9 - 9: oOo0O00 * i1
 if 96 - 96: Ooo0Ooo
 if 13 - 13: Oo * I1Ii1I1 - oOo0O00 * Ii . Ii + oOo0O00
 if 46 - 46: OooOoo - i1I1 / Ooo0Ooo
 if 73 - 73: I1Ii1I1 / i1i1i1111I / ooo000 % i1 % O0OO0OooooOo - OooOoo
 if 30 - 30: ooOOO * ooOOO - Iii1i * iI1iII1I1I1i
 if 37 - 37: I1Ii1I1 % iI1iII1I1I1i . O0OO0OooooOo + Ooo0Ooo + ooOOO * iI1iII1I1I1i
 if 39 - 39: IIiIIiIi11I1 - Oo
 if 31 - 31: IiIIii11Ii % oOo0O00 % oOo0O00 * Iii1i
 if 85 - 85: Iii1i + Ii % IIiIIiIi11I1 % oOo0O00
 if 100 - 100: IiIIii11Ii % i1
 if 82 - 82: ooOOO % OooOoo
 if 81 - 81: Ii
 if 40 - 40: O0OO0OooooOo . OooOoo + oOo0O00 . i1iiIII111
 if 96 - 96: I1I / O000o / i1I1 + i1I1
 if 35 - 35: IIiIIiIi11I1 + oOo0O00
 if 96 - 96: iI1iII1I1I1i . OooOoo . i1
 if 87 - 87: ooo000 * IiIIii11Ii % ooo000 . ooOOO . Oo % iI1iII1I1I1i
 if 48 - 48: ooOOO * ooo000 % IiIIii11Ii * i1 . Iii1i - ii
 if 72 - 72: i1 % i1i1i1111I * iI1iII1I1I1i
 if 90 - 90: Ooo0Ooo * OooOoo . Ii
 if 5 - 5: Oo - i1 . O000o
 if 18 - 18: IiIIii11Ii - O000o * O0OO0OooooOo - OooOoo
 if 54 - 54: IIiIIiIi11I1 . Ooo0Ooo % Ii + IiIIii11Ii * iI1iII1I1I1i / iI1iII1I1I1i
 if 31 - 31: IiIIii11Ii . IiIIii11Ii % Ii
 if 51 - 51: Oo / i1i1i1111I - I1I
 if 83 - 83: Iii1i % i1iiIII111 . OooOoo / I1I % O000o . I1I
 if 76 - 76: i1iiIII111 / OooOoo
 if 77 - 77: ooOOO
 if 19 - 19: ooOOO % I1Ii1I1
 if 15 - 15: OooOoo . IiIIii11Ii . O0OO0OooooOo / Iii1i + ooOOO / Ii
 if 17 - 17: i1I1 - i1i1i1111I . iI1iII1I1I1i - i1I1 + Oo % iI1iII1I1I1i
 if 65 - 65: Ii % i1I1
 if 39 - 39: Iii1i * IIiIIiIi11I1 . Ooo0Ooo - Oo
 if 63 - 63: i1i1i1111I - i1iiIII111 . OooOoo % OooOoo . ii + O0OO0OooooOo
 if 71 - 71: ooo000 + i1I1 % iI1iII1I1I1i + ii % Oo - Oo
 if 84 - 84: I1I % iI1iII1I1I1i - Ooo0Ooo / iI1iII1I1I1i + Ooo0Ooo - Oo
 if 41 - 41: ooOOO + OooOoo + IIiIIiIi11I1 * i1i1i1111I
 if 12 - 12: i1i1i1111I
 if 56 - 56: IiIIii11Ii
 if 17 - 17: O0OO0OooooOo . O000o % Oo + IiIIii11Ii - Ooo0Ooo
 if 93 - 93: oOo0O00
 if 77 - 77: Oo + i1I1 % I1I
 if 20 - 20: i1 - IiIIii11Ii . IiIIii11Ii % ooOOO . i1 % Ooo0Ooo
 if 72 - 72: O000o % ii . ooOOO * I1Ii1I1 . ooOOO
 if 90 - 90: IiIIii11Ii + I1Ii1I1 . OooOoo
 if 73 - 73: i1i1i1111I - Iii1i / i1I1 . ooo000 / iI1iII1I1I1i - i1iiIII111
 if 21 - 21: i1iiIII111 + ii % i1i1i1111I
 if 7 - 7: ii / Ii
 if 87 - 87: ooOOO
 if 57 - 57: IIiIIiIi11I1 - iI1iII1I1I1i % ooOOO - i1I1 / IiIIii11Ii . Ooo0Ooo
 if 15 - 15: O0OO0OooooOo * i1I1 - oOo0O00
 if 6 - 6: ii - Ii
 if 1 - 1: I1I + OooOoo
 if 98 - 98: i1iiIII111 + Iii1i . IIiIIiIi11I1
 if 96 - 96: OooOoo / O000o - i1 * i1I1
 if 72 - 72: i1i1i1111I + Ii - Iii1i - i1i1i1111I - O0OO0OooooOo + Ooo0Ooo
 if 74 - 74: Ooo0Ooo * Oo + Iii1i - i1iiIII111
 if 22 - 22: IiIIii11Ii - Ooo0Ooo . i1 . O0OO0OooooOo - ooo000
 if 68 - 68: ooo000
 if 40 - 40: i1 + I1Ii1I1 + i1I1 . Oo * i1I1 % I1I
 if 100 - 100: OooOoo + Oo / OooOoo
 if 33 - 33: ii / OooOoo
 if 98 - 98: I1Ii1I1 . IIiIIiIi11I1 * O0OO0OooooOo - iI1iII1I1I1i % O0OO0OooooOo * ii
 if 42 - 42: OooOoo + i1i1i1111I - iI1iII1I1I1i - oOo0O00 * O0OO0OooooOo + Ii
 if 46 - 46: oOo0O00 . iI1iII1I1I1i - Ii . oOo0O00 + i1i1i1111I
 if 83 - 83: ii
 if 77 - 77: iI1iII1I1I1i - O000o % Ii * O0OO0OooooOo - I1I
 if 42 - 42: i1I1 - Ii / Oo - i1i1i1111I + i1I1
 if 83 - 83: i1 . iI1iII1I1I1i
 if 57 - 57: ii % IiIIii11Ii / oOo0O00 + Ooo0Ooo - i1iiIII111
 if 87 - 87: i1iiIII111 . i1iiIII111 . O000o . ooo000 * oOo0O00
 if 33 - 33: ii * i1iiIII111 / O0OO0OooooOo . OooOoo * oOo0O00 + ooo000
 if 17 - 17: i1i1i1111I * O000o + i1iiIII111 - i1I1 / i1i1i1111I
 if 83 - 83: i1I1 - Iii1i + oOo0O00 + I1I / IIiIIiIi11I1 + I1I
 if 29 - 29: i1i1i1111I / oOo0O00
 if 13 - 13: i1I1 % i1iiIII111 . OooOoo % ooo000 % OooOoo
 if 21 - 21: ii * I1Ii1I1
 if 93 - 93: Ooo0Ooo . i1 + ii - oOo0O00
 if 97 - 97: i1 - i1 % IIiIIiIi11I1 + IiIIii11Ii / O0OO0OooooOo * iI1iII1I1I1i
 if 60 - 60: i1I1 - Ooo0Ooo % I1Ii1I1
 if 26 - 26: ooOOO / IIiIIiIi11I1 . O000o + i1I1 . Oo
 if 37 - 37: I1Ii1I1
 if 35 - 35: OooOoo % i1i1i1111I - iI1iII1I1I1i / IiIIii11Ii
 if 4 - 4: ooo000 . IiIIii11Ii % ooo000 / i1i1i1111I
 if 48 - 48: i1iiIII111 . Oo
 if 92 - 92: OooOoo + Ii / IIiIIiIi11I1 + OooOoo * IIiIIiIi11I1 * iI1iII1I1I1i
 if 79 - 79: i1i1i1111I
 if 3 - 3: OooOoo / ii % i1I1
 if 55 - 55: oOo0O00
 if 31 - 31: Ii . Ooo0Ooo / ii
 if 59 - 59: Oo
 if 64 - 64: Iii1i % i1I1 * i1 % OooOoo * oOo0O00
 if 55 - 55: ii
 if 46 - 46: Ooo0Ooo % I1Ii1I1
 if 86 - 86: i1I1 . i1i1i1111I + O000o % i1I1 % Iii1i % ooo000
 if 61 - 61: ooo000
 if 48 - 48: Iii1i * i1i1i1111I + IiIIii11Ii
 if 31 - 31: Oo * i1iiIII111 % Ii / O000o + I1Ii1I1 + iI1iII1I1I1i
 if 90 - 90: I1Ii1I1 * i1i1i1111I / iI1iII1I1I1i * Ii
 if 38 - 38: I1I . Ii
 if 41 - 41: ooo000 % IIiIIiIi11I1 % ooOOO
 if 5 - 5: oOo0O00 / Ii + i1iiIII111 * Oo + Ooo0Ooo + ooo000
 if 96 - 96: i1iiIII111 - IIiIIiIi11I1 / IIiIIiIi11I1 * IiIIii11Ii
 if 67 - 67: Ooo0Ooo . Ooo0Ooo . ii
 if 24 - 24: i1iiIII111 + i1i1i1111I . oOo0O00 + iI1iII1I1I1i + ii
 if 92 - 92: iI1iII1I1I1i / iI1iII1I1I1i + IiIIii11Ii . ii
 if 56 - 56: Ii * ooo000 . IiIIii11Ii
 if 66 - 66: I1Ii1I1 * OooOoo . iI1iII1I1I1i % OooOoo . i1 . IiIIii11Ii
 if 47 - 47: Ii % OooOoo % iI1iII1I1I1i * IiIIii11Ii
 if 48 - 48: O0OO0OooooOo . i1I1 / ooo000 + i1iiIII111
 if 84 - 84: Oo / I1Ii1I1 . IIiIIiIi11I1
 if 67 - 67: Oo % ooOOO + iI1iII1I1I1i * I1I
 if 79 - 79: IIiIIiIi11I1 * Oo / OooOoo
 if 10 - 10: iI1iII1I1I1i / i1iiIII111 . IiIIii11Ii * i1i1i1111I
# dd678faae9ac167bc83abf78e5cb2f3f0688d3a3
