import time
start = time .time ( )
algs = [ "" ,
"R' U R' U' R' U' R' U R U R2" ,
"R U' R U R U R U' R' U' R2" ,
"R2 U2 R U2 R2 U2 R2 U2 R U2 R2" ,
"R2 U R2 U' R2 F2 R2 U' F2 U R2 F2" ,
"R U' R F2 R' U R' U' R2 F2 R2" ,
"R2 F2 R2 U R U' R F2 R' U R'" ,
"R U R' U R' U' R F' R U R' U' R' F R2 U' R2 U R" ,
"F' U2 R' U F U' F' U' R U' F" ,
"R U R' F' R U R' U' R' F R2 U' R'" ,
"R' U2 R U2 R' F R U R' U' R' F' R2" ,
"F' R' U' R F' R' U F' U' F' U F R F2" ,
"F2 R2 U' R' U' R F2 R' U R F2 U R2 F2" ,
"F2 R2 U' F2 R' U' R F2 R' U R U R2 F2" ,
"R' U' R2 U' R2 U' R U2 R2 F U R' U' R F' R" ,
"R' F R' U R U' F' R2 U2 R' U R2 U R2 U R" ,
"F' R U R' U' R' F R2 F U' R' U' R U F' R'" ,
"R' U R' F R F' R U' R' F' U F R U R' U' R" ,
"R U R' U' R' F R2 U' R' U' R U R' F'" ,
"F R U' R' U' R U R' F' R U R' U' R' F R F'" ,
"F' U2 F' U' R' F' R2 U' R' U R' F R U' F" ,
"R U' R U F R F2 U F U' F R' F' R'" ]
##################################################
class MyCube:
"""A virtual 3x3x3 matrix"""
uSide = [ ] #URF, UF, etc
fSide = [ ] #FRD, FD, etc
lSide = [ ] #LFD, LD, etc
bSide = [ ] #BRD, BD, etc
rSide = [ ] #RBD, RD, etc
dSide = [ ] #DBR, DR, etc
def __init__ ( self ) :
self .uSide = [ 'U' , 'U' , 'U' , 'U' , 'U' , 'U' , 'U' , 'U' ] #URF, UF, etc
self .fSide = [ 'F' , 'F' , 'F' , 'F' , 'F' , 'F' , 'F' , 'F' ] #FRD, FD, etc
self .lSide = [ 'L' , 'L' , 'L' , 'L' , 'L' , 'L' , 'L' , 'L' ] #LFD, LD, etc
self .bSide = [ 'B' , 'B' , 'B' , 'B' , 'B' , 'B' , 'B' , 'B' ] #BRD, BD, etc
self .rSide = [ 'R' , 'R' , 'R' , 'R' , 'R' , 'R' , 'R' , 'R' ] #RBD, RD, etc
self .dSide = [ 'D' , 'D' , 'D' , 'D' , 'D' , 'D' , 'D' , 'D' ] #DBR, DR, etc
def resetSelf( self , new ) :
#print new
MyCube.uSide = new [ 0 ] ; MyCube.fSide = new [ 1 ] ; MyCube.lSide = new [ 2 ]
MyCube.bSide = new [ 3 ] ; MyCube.rSide = new [ 4 ] ; MyCube.dSide = new [ 5 ]
def doU( self ) :
self .uSide [ 0 ] , self .uSide [ 1 ] , self .uSide [ 2 ] , self .uSide [ 3 ] , self .uSide [ 4 ] , self .uSide [ 5 ] , self .uSide [ 6 ] , self .uSide [ 7 ] = self .uSide [ 6 ] , self .uSide [ 7 ] , self .uSide [ 0 ] , self .uSide [ 1 ] , self .uSide [ 2 ] , self .uSide [ 3 ] , self .uSide [ 4 ] , self .uSide [ 5 ]
self .fSide [ 5 ] , self .lSide [ 5 ] , self .bSide [ 1 ] , self .rSide [ 5 ] = self .rSide [ 5 ] , self .fSide [ 5 ] , self .lSide [ 5 ] , self .bSide [ 1 ]
self .fSide [ 6 ] , self .lSide [ 6 ] , self .bSide [ 2 ] , self .rSide [ 6 ] = self .rSide [ 6 ] , self .fSide [ 6 ] , self .lSide [ 6 ] , self .bSide [ 2 ]
self .fSide [ 7 ] , self .lSide [ 7 ] , self .bSide [ 3 ] , self .rSide [ 7 ] = self .rSide [ 7 ] , self .fSide [ 7 ] , self .lSide [ 7 ] , self .bSide [ 3 ]
def doUp( self ) :
self .uSide [ 6 ] , self .uSide [ 7 ] , self .uSide [ 0 ] , self .uSide [ 1 ] , self .uSide [ 2 ] , self .uSide [ 3 ] , self .uSide [ 4 ] , self .uSide [ 5 ] = self .uSide [ 0 ] , self .uSide [ 1 ] , self .uSide [ 2 ] , self .uSide [ 3 ] , self .uSide [ 4 ] , self .uSide [ 5 ] , self .uSide [ 6 ] , self .uSide [ 7 ]
self .rSide [ 5 ] , self .fSide [ 5 ] , self .lSide [ 5 ] , self .bSide [ 1 ] = self .fSide [ 5 ] , self .lSide [ 5 ] , self .bSide [ 1 ] , self .rSide [ 5 ]
self .rSide [ 6 ] , self .fSide [ 6 ] , self .lSide [ 6 ] , self .bSide [ 2 ] = self .fSide [ 6 ] , self .lSide [ 6 ] , self .bSide [ 2 ] , self .rSide [ 6 ]
self .rSide [ 7 ] , self .fSide [ 7 ] , self .lSide [ 7 ] , self .bSide [ 3 ] = self .fSide [ 7 ] , self .lSide [ 7 ] , self .bSide [ 3 ] , self .rSide [ 7 ]
def doR( self ) :
self .rSide [ 0 ] , self .rSide [ 1 ] , self .rSide [ 2 ] , self .rSide [ 3 ] , self .rSide [ 4 ] , self .rSide [ 5 ] , self .rSide [ 6 ] , self .rSide [ 7 ] = self .rSide [ 6 ] , self .rSide [ 7 ] , self .rSide [ 0 ] , self .rSide [ 1 ] , self .rSide [ 2 ] , self .rSide [ 3 ] , self .rSide [ 4 ] , self .rSide [ 5 ]
self .fSide [ 7 ] , self .uSide [ 7 ] , self .bSide [ 7 ] , self .dSide [ 7 ] = self .dSide [ 7 ] , self .fSide [ 7 ] , self .uSide [ 7 ] , self .bSide [ 7 ]
self .fSide [ 0 ] , self .uSide [ 0 ] , self .bSide [ 0 ] , self .dSide [ 0 ] = self .dSide [ 0 ] , self .fSide [ 0 ] , self .uSide [ 0 ] , self .bSide [ 0 ]
self .fSide [ 1 ] , self .uSide [ 1 ] , self .bSide [ 1 ] , self .dSide [ 1 ] = self .dSide [ 1 ] , self .fSide [ 1 ] , self .uSide [ 1 ] , self .bSide [ 1 ]
def doRp( self ) :
self .rSide [ 6 ] , self .rSide [ 7 ] , self .rSide [ 0 ] , self .rSide [ 1 ] , self .rSide [ 2 ] , self .rSide [ 3 ] , self .rSide [ 4 ] , self .rSide [ 5 ] = self .rSide [ 0 ] , self .rSide [ 1 ] , self .rSide [ 2 ] , self .rSide [ 3 ] , self .rSide [ 4 ] , self .rSide [ 5 ] , self .rSide [ 6 ] , self .rSide [ 7 ]
self .dSide [ 7 ] , self .fSide [ 7 ] , self .uSide [ 7 ] , self .bSide [ 7 ] = self .fSide [ 7 ] , self .uSide [ 7 ] , self .bSide [ 7 ] , self .dSide [ 7 ]
self .dSide [ 0 ] , self .fSide [ 0 ] , self .uSide [ 0 ] , self .bSide [ 0 ] = self .fSide [ 0 ] , self .uSide [ 0 ] , self .bSide [ 0 ] , self .dSide [ 0 ]
self .dSide [ 1 ] , self .fSide [ 1 ] , self .uSide [ 1 ] , self .bSide [ 1 ] = self .fSide [ 1 ] , self .uSide [ 1 ] , self .bSide [ 1 ] , self .dSide [ 1 ]
def doF( self ) :
self .fSide [ 0 ] , self .fSide [ 1 ] , self .fSide [ 2 ] , self .fSide [ 3 ] , self .fSide [ 4 ] , self .fSide [ 5 ] , self .fSide [ 6 ] , self .fSide [ 7 ] = self .fSide [ 6 ] , self .fSide [ 7 ] , self .fSide [ 0 ] , self .fSide [ 1 ] , self .fSide [ 2 ] , self .fSide [ 3 ] , self .fSide [ 4 ] , self .fSide [ 5 ]
self .uSide [ 1 ] , self .rSide [ 3 ] , self .dSide [ 5 ] , self .lSide [ 7 ] = self .lSide [ 7 ] , self .uSide [ 1 ] , self .rSide [ 3 ] , self .dSide [ 5 ]
self .uSide [ 2 ] , self .rSide [ 4 ] , self .dSide [ 6 ] , self .lSide [ 0 ] = self .lSide [ 0 ] , self .uSide [ 2 ] , self .rSide [ 4 ] , self .dSide [ 6 ]
self .uSide [ 3 ] , self .rSide [ 5 ] , self .dSide [ 7 ] , self .lSide [ 1 ] = self .lSide [ 1 ] , self .uSide [ 3 ] , self .rSide [ 5 ] , self .dSide [ 7 ]
def doFp( self ) :
self .fSide [ 6 ] , self .fSide [ 7 ] , self .fSide [ 0 ] , self .fSide [ 1 ] , self .fSide [ 2 ] , self .fSide [ 3 ] , self .fSide [ 4 ] , self .fSide [ 5 ] = self .fSide [ 0 ] , self .fSide [ 1 ] , self .fSide [ 2 ] , self .fSide [ 3 ] , self .fSide [ 4 ] , self .fSide [ 5 ] , self .fSide [ 6 ] , self .fSide [ 7 ]
self .lSide [ 7 ] , self .uSide [ 1 ] , self .rSide [ 3 ] , self .dSide [ 5 ] = self .uSide [ 1 ] , self .rSide [ 3 ] , self .dSide [ 5 ] , self .lSide [ 7 ]
self .lSide [ 0 ] , self .uSide [ 2 ] , self .rSide [ 4 ] , self .dSide [ 6 ] = self .uSide [ 2 ] , self .rSide [ 4 ] , self .dSide [ 6 ] , self .lSide [ 0 ]
self .lSide [ 1 ] , self .uSide [ 3 ] , self .rSide [ 5 ] , self .dSide [ 7 ] = self .uSide [ 3 ] , self .rSide [ 5 ] , self .dSide [ 7 ] , self .lSide [ 1 ]
def doAlg( self , algString) :
ialg = algString.replace ( '(' , '' ) #get rid of unwanted
ialg = ialg.replace ( ')' , '' ) # or otherwise unneeded characters
ialg = ialg.replace ( "2'" , '2' ) # incl. whitespace, paren., 2's
ialg = ialg.replace ( ' ' , ' ' )
parts = ialg.split ( ' ' ) #Divide the alg up into individual moves
parts.reverse ( )
for part in parts:
if part == 'U' : self .doUp ( )
elif part == 'U2' : self .doU ( ) ; self .doU ( )
elif part == "U'" : self .doU ( )
elif part == 'F' : self .doFp ( )
elif part == 'F2' : self .doF ( ) ; self .doF ( )
elif part == "F'" : self .doF ( )
elif part == 'R' : self .doRp ( )
elif part == 'R2' : self .doR ( ) ; self .doR ( )
elif part == "R'" : self .doR ( )
##################################################
def doCrazy( self , a) : #code generated with writing.py
temp = self
if a == "" : #default (finished) case:
pass
elif a == "R' U R' U' R' U' R' U R U R2" : #1
temp.uSide [ 6 ] = self .uSide [ 0 ] ; temp.uSide [ 1 ] = self .uSide [ 1 ] ; temp.uSide [ 2 ] = self .uSide [ 2 ] ; temp.uSide [ 3 ] = self .uSide [ 3 ] ; temp.uSide [ 0 ] = self .uSide [ 4 ] ; temp.uSide [ 5 ] = self .uSide [ 5 ] ; temp.uSide [ 4 ] = self .uSide [ 6 ] ; temp.uSide [ 7 ] = self .uSide [ 7 ]
temp.fSide [ 5 ] = self .fSide [ 5 ] ; temp.fSide [ 6 ] = self .fSide [ 6 ] ; temp.fSide [ 7 ] = self .fSide [ 7 ]
temp.lSide [ 5 ] = self .lSide [ 5 ] ; temp.rSide [ 6 ] = self .lSide [ 6 ] ; temp.lSide [ 7 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.rSide [ 5 ] = self .rSide [ 5 ] ; temp.bSide [ 2 ] = self .rSide [ 6 ] ; temp.rSide [ 7 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
elif a == "R U' R U R U R U' R' U' R2" : #2
temp.uSide [ 2 ] = self .uSide [ 0 ] ; temp.uSide [ 1 ] = self .uSide [ 1 ] ; temp.uSide [ 4 ] = self .uSide [ 2 ] ; temp.uSide [ 3 ] = self .uSide [ 3 ] ; temp.uSide [ 0 ] = self .uSide [ 4 ] ; temp.uSide [ 5 ] = self .uSide [ 5 ] ; temp.uSide [ 6 ] = self .uSide [ 6 ] ; temp.uSide [ 7 ] = self .uSide [ 7 ]
temp.fSide [ 5 ] = self .fSide [ 5 ] ; temp.lSide [ 6 ] = self .fSide [ 6 ] ; temp.fSide [ 7 ] = self .fSide [ 7 ]
temp.lSide [ 5 ] = self .lSide [ 5 ] ; temp.rSide [ 6 ] = self .lSide [ 6 ] ; temp.lSide [ 7 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.rSide [ 5 ] = self .rSide [ 5 ] ; temp.fSide [ 6 ] = self .rSide [ 6 ] ; temp.rSide [ 7 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
elif a == "R2 U2 R U2 R2 U2 R2 U2 R U2 R2" : #3
temp.uSide [ 4 ] = self .uSide [ 0 ] ; temp.uSide [ 1 ] = self .uSide [ 1 ] ; temp.uSide [ 6 ] = self .uSide [ 2 ] ; temp.uSide [ 3 ] = self .uSide [ 3 ] ; temp.uSide [ 0 ] = self .uSide [ 4 ] ; temp.uSide [ 5 ] = self .uSide [ 5 ] ; temp.uSide [ 2 ] = self .uSide [ 6 ] ; temp.uSide [ 7 ] = self .uSide [ 7 ]
temp.fSide [ 5 ] = self .fSide [ 5 ] ; temp.bSide [ 2 ] = self .fSide [ 6 ] ; temp.fSide [ 7 ] = self .fSide [ 7 ]
temp.lSide [ 5 ] = self .lSide [ 5 ] ; temp.rSide [ 6 ] = self .lSide [ 6 ] ; temp.lSide [ 7 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.rSide [ 5 ] = self .rSide [ 5 ] ; temp.lSide [ 6 ] = self .rSide [ 6 ] ; temp.rSide [ 7 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
elif a == "R2 U R2 U' R2 F2 R2 U' F2 U R2 F2" : #4
temp.uSide [ 6 ] = self .uSide [ 0 ] ; temp.uSide [ 1 ] = self .uSide [ 1 ] ; temp.uSide [ 4 ] = self .uSide [ 2 ] ; temp.uSide [ 3 ] = self .uSide [ 3 ] ; temp.uSide [ 2 ] = self .uSide [ 4 ] ; temp.uSide [ 5 ] = self .uSide [ 5 ] ; temp.uSide [ 0 ] = self .uSide [ 6 ] ; temp.uSide [ 7 ] = self .uSide [ 7 ]
temp.fSide [ 5 ] = self .fSide [ 5 ] ; temp.lSide [ 6 ] = self .fSide [ 6 ] ; temp.fSide [ 7 ] = self .fSide [ 7 ]
temp.lSide [ 5 ] = self .lSide [ 5 ] ; temp.fSide [ 6 ] = self .lSide [ 6 ] ; temp.lSide [ 7 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.rSide [ 5 ] = self .rSide [ 5 ] ; temp.bSide [ 2 ] = self .rSide [ 6 ] ; temp.rSide [ 7 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
elif a == "R U' R F2 R' U R' U' R2 F2 R2" : #5
temp.uSide [ 2 ] = self .uSide [ 0 ] ; temp.uSide [ 3 ] = self .uSide [ 1 ] ; temp.uSide [ 4 ] = self .uSide [ 2 ] ; temp.uSide [ 1 ] = self .uSide [ 3 ] ; temp.uSide [ 6 ] = self .uSide [ 4 ] ; temp.uSide [ 5 ] = self .uSide [ 5 ] ; temp.uSide [ 0 ] = self .uSide [ 6 ] ; temp.uSide [ 7 ] = self .uSide [ 7 ]
temp.rSide [ 5 ] = self .fSide [ 5 ] ; temp.lSide [ 6 ] = self .fSide [ 6 ] ; temp.lSide [ 7 ] = self .fSide [ 7 ]
temp.lSide [ 5 ] = self .lSide [ 5 ] ; temp.bSide [ 2 ] = self .lSide [ 6 ] ; temp.fSide [ 7 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.fSide [ 5 ] = self .rSide [ 5 ] ; temp.fSide [ 6 ] = self .rSide [ 6 ] ; temp.rSide [ 7 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
elif a == "R2 F2 R2 U R U' R F2 R' U R'" : #6
temp.uSide [ 6 ] = self .uSide [ 0 ] ; temp.uSide [ 3 ] = self .uSide [ 1 ] ; temp.uSide [ 0 ] = self .uSide [ 2 ] ; temp.uSide [ 1 ] = self .uSide [ 3 ] ; temp.uSide [ 2 ] = self .uSide [ 4 ] ; temp.uSide [ 5 ] = self .uSide [ 5 ] ; temp.uSide [ 4 ] = self .uSide [ 6 ] ; temp.uSide [ 7 ] = self .uSide [ 7 ]
temp.rSide [ 5 ] = self .fSide [ 5 ] ; temp.rSide [ 6 ] = self .fSide [ 6 ] ; temp.lSide [ 7 ] = self .fSide [ 7 ]
temp.lSide [ 5 ] = self .lSide [ 5 ] ; temp.fSide [ 6 ] = self .lSide [ 6 ] ; temp.fSide [ 7 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.fSide [ 5 ] = self .rSide [ 5 ] ; temp.bSide [ 2 ] = self .rSide [ 6 ] ; temp.rSide [ 7 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
elif a == "R U R' U R' U' R F' R U R' U' R' F R2 U' R2 U R" : #7
temp.uSide [ 6 ] = self .uSide [ 0 ] ; temp.uSide [ 1 ] = self .uSide [ 1 ] ; temp.uSide [ 0 ] = self .uSide [ 2 ] ; temp.uSide [ 7 ] = self .uSide [ 3 ] ; temp.uSide [ 2 ] = self .uSide [ 4 ] ; temp.uSide [ 5 ] = self .uSide [ 5 ] ; temp.uSide [ 4 ] = self .uSide [ 6 ] ; temp.uSide [ 3 ] = self .uSide [ 7 ]
temp.bSide [ 1 ] = self .fSide [ 5 ] ; temp.rSide [ 6 ] = self .fSide [ 6 ] ; temp.fSide [ 7 ] = self .fSide [ 7 ]
temp.lSide [ 5 ] = self .lSide [ 5 ] ; temp.fSide [ 6 ] = self .lSide [ 6 ] ; temp.rSide [ 7 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.rSide [ 5 ] = self .rSide [ 5 ] ; temp.bSide [ 2 ] = self .rSide [ 6 ] ; temp.lSide [ 7 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
elif a == "F' U2 R' U F U' F' U' R U' F" : #8
temp.uSide [ 0 ] = self .uSide [ 0 ] ; temp.uSide [ 1 ] = self .uSide [ 1 ] ; temp.uSide [ 6 ] = self .uSide [ 2 ] ; temp.uSide [ 7 ] = self .uSide [ 3 ] ; temp.uSide [ 2 ] = self .uSide [ 4 ] ; temp.uSide [ 3 ] = self .uSide [ 5 ] ; temp.uSide [ 4 ] = self .uSide [ 6 ] ; temp.uSide [ 5 ] = self .uSide [ 7 ]
temp.bSide [ 1 ] = self .fSide [ 5 ] ; temp.bSide [ 2 ] = self .fSide [ 6 ] ; temp.fSide [ 7 ] = self .fSide [ 7 ]
temp.fSide [ 5 ] = self .lSide [ 5 ] ; temp.fSide [ 6 ] = self .lSide [ 6 ] ; temp.rSide [ 7 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.rSide [ 5 ] = self .rSide [ 5 ] ; temp.rSide [ 6 ] = self .rSide [ 6 ] ; temp.bSide [ 3 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
elif a == "R U R' F' R U R' U' R' F R2 U' R'" : #9
temp.uSide [ 6 ] = self .uSide [ 0 ] ; temp.uSide [ 1 ] = self .uSide [ 1 ] ; temp.uSide [ 2 ] = self .uSide [ 2 ] ; temp.uSide [ 7 ] = self .uSide [ 3 ] ; temp.uSide [ 0 ] = self .uSide [ 4 ] ; temp.uSide [ 3 ] = self .uSide [ 5 ] ; temp.uSide [ 4 ] = self .uSide [ 6 ] ; temp.uSide [ 5 ] = self .uSide [ 7 ]
temp.bSide [ 1 ] = self .fSide [ 5 ] ; temp.fSide [ 6 ] = self .fSide [ 6 ] ; temp.fSide [ 7 ] = self .fSide [ 7 ]
temp.fSide [ 5 ] = self .lSide [ 5 ] ; temp.rSide [ 6 ] = self .lSide [ 6 ] ; temp.rSide [ 7 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.rSide [ 5 ] = self .rSide [ 5 ] ; temp.bSide [ 2 ] = self .rSide [ 6 ] ; temp.bSide [ 3 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
elif a == "R' U2 R U2 R' F R U R' U' R' F' R2" : #10
temp.uSide [ 6 ] = self .uSide [ 0 ] ; temp.uSide [ 5 ] = self .uSide [ 1 ] ; temp.uSide [ 2 ] = self .uSide [ 2 ] ; temp.uSide [ 1 ] = self .uSide [ 3 ] ; temp.uSide [ 0 ] = self .uSide [ 4 ] ; temp.uSide [ 3 ] = self .uSide [ 5 ] ; temp.uSide [ 4 ] = self .uSide [ 6 ] ; temp.uSide [ 7 ] = self .uSide [ 7 ]
temp.rSide [ 5 ] = self .fSide [ 5 ] ; temp.fSide [ 6 ] = self .fSide [ 6 ] ; temp.bSide [ 3 ] = self .fSide [ 7 ]
temp.fSide [ 5 ] = self .lSide [ 5 ] ; temp.rSide [ 6 ] = self .lSide [ 6 ] ; temp.fSide [ 7 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.lSide [ 5 ] = self .rSide [ 5 ] ; temp.bSide [ 2 ] = self .rSide [ 6 ] ; temp.rSide [ 7 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
elif a == "F' R' U' R F' R' U F' U' F' U F R F2" : #11
temp.uSide [ 0 ] = self .uSide [ 0 ] ; temp.uSide [ 1 ] = self .uSide [ 1 ] ; temp.uSide [ 4 ] = self .uSide [ 2 ] ; temp.uSide [ 3 ] = self .uSide [ 3 ] ; temp.uSide [ 2 ] = self .uSide [ 4 ] ; temp.uSide [ 7 ] = self .uSide [ 5 ] ; temp.uSide [ 6 ] = self .uSide [ 6 ] ; temp.uSide [ 5 ] = self .uSide [ 7 ]
temp.fSide [ 5 ] = self .fSide [ 5 ] ; temp.lSide [ 6 ] = self .fSide [ 6 ] ; temp.fSide [ 7 ] = self .fSide [ 7 ]
temp.bSide [ 1 ] = self .lSide [ 5 ] ; temp.fSide [ 6 ] = self .lSide [ 6 ] ; temp.lSide [ 7 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.rSide [ 5 ] = self .rSide [ 5 ] ; temp.rSide [ 6 ] = self .rSide [ 6 ] ; temp.bSide [ 3 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
elif a == "F2 R2 U' R' U' R F2 R' U R F2 U R2 F2" : #12
temp.uSide [ 0 ] = self .uSide [ 0 ] ; temp.uSide [ 1 ] = self .uSide [ 1 ] ; temp.uSide [ 4 ] = self .uSide [ 2 ] ; temp.uSide [ 7 ] = self .uSide [ 3 ] ; temp.uSide [ 6 ] = self .uSide [ 4 ] ; temp.uSide [ 3 ] = self .uSide [ 5 ] ; temp.uSide [ 2 ] = self .uSide [ 6 ] ; temp.uSide [ 5 ] = self .uSide [ 7 ]
temp.bSide [ 1 ] = self .fSide [ 5 ] ; temp.lSide [ 6 ] = self .fSide [ 6 ] ; temp.fSide [ 7 ] = self .fSide [ 7 ]
temp.fSide [ 5 ] = self .lSide [ 5 ] ; temp.bSide [ 2 ] = self .lSide [ 6 ] ; temp.rSide [ 7 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.rSide [ 5 ] = self .rSide [ 5 ] ; temp.rSide [ 6 ] = self .rSide [ 6 ] ; temp.bSide [ 3 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
elif a == "F2 R2 U' F2 R' U' R F2 R' U R U R2 F2" : #13
temp.uSide [ 0 ] = self .uSide [ 0 ] ; temp.uSide [ 1 ] = self .uSide [ 1 ] ; temp.uSide [ 6 ] = self .uSide [ 2 ] ; temp.uSide [ 5 ] = self .uSide [ 3 ] ; temp.uSide [ 2 ] = self .uSide [ 4 ] ; temp.uSide [ 7 ] = self .uSide [ 5 ] ; temp.uSide [ 4 ] = self .uSide [ 6 ] ; temp.uSide [ 3 ] = self .uSide [ 7 ]
temp.lSide [ 5 ] = self .fSide [ 5 ] ; temp.bSide [ 2 ] = self .fSide [ 6 ] ; temp.fSide [ 7 ] = self .fSide [ 7 ]
temp.bSide [ 1 ] = self .lSide [ 5 ] ; temp.fSide [ 6 ] = self .lSide [ 6 ] ; temp.bSide [ 3 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.rSide [ 5 ] = self .rSide [ 5 ] ; temp.rSide [ 6 ] = self .rSide [ 6 ] ; temp.lSide [ 7 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
elif a == "R' U' R2 U' R2 U' R U2 R2 F U R' U' R F' R" : #14
temp.uSide [ 6 ] = self .uSide [ 0 ] ; temp.uSide [ 1 ] = self .uSide [ 1 ] ; temp.uSide [ 2 ] = self .uSide [ 2 ] ; temp.uSide [ 5 ] = self .uSide [ 3 ] ; temp.uSide [ 0 ] = self .uSide [ 4 ] ; temp.uSide [ 7 ] = self .uSide [ 5 ] ; temp.uSide [ 4 ] = self .uSide [ 6 ] ; temp.uSide [ 3 ] = self .uSide [ 7 ]
temp.lSide [ 5 ] = self .fSide [ 5 ] ; temp.fSide [ 6 ] = self .fSide [ 6 ] ; temp.fSide [ 7 ] = self .fSide [ 7 ]
temp.bSide [ 1 ] = self .lSide [ 5 ] ; temp.rSide [ 6 ] = self .lSide [ 6 ] ; temp.bSide [ 3 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.rSide [ 5 ] = self .rSide [ 5 ] ; temp.bSide [ 2 ] = self .rSide [ 6 ] ; temp.lSide [ 7 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
elif a == "R' F R' U R U' F' R2 U2 R' U R2 U R2 U R" : #15
temp.uSide [ 4 ] = self .uSide [ 0 ] ; temp.uSide [ 1 ] = self .uSide [ 1 ] ; temp.uSide [ 2 ] = self .uSide [ 2 ] ; temp.uSide [ 7 ] = self .uSide [ 3 ] ; temp.uSide [ 6 ] = self .uSide [ 4 ] ; temp.uSide [ 3 ] = self .uSide [ 5 ] ; temp.uSide [ 0 ] = self .uSide [ 6 ] ; temp.uSide [ 5 ] = self .uSide [ 7 ]
temp.bSide [ 1 ] = self .fSide [ 5 ] ; temp.fSide [ 6 ] = self .fSide [ 6 ] ; temp.fSide [ 7 ] = self .fSide [ 7 ]
temp.fSide [ 5 ] = self .lSide [ 5 ] ; temp.bSide [ 2 ] = self .lSide [ 6 ] ; temp.rSide [ 7 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.rSide [ 5 ] = self .rSide [ 5 ] ; temp.lSide [ 6 ] = self .rSide [ 6 ] ; temp.bSide [ 3 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
elif a == "F' R U R' U' R' F R2 F U' R' U' R U F' R'" : #16
temp.uSide [ 4 ] = self .uSide [ 0 ] ; temp.uSide [ 1 ] = self .uSide [ 1 ] ; temp.uSide [ 2 ] = self .uSide [ 2 ] ; temp.uSide [ 7 ] = self .uSide [ 3 ] ; temp.uSide [ 0 ] = self .uSide [ 4 ] ; temp.uSide [ 5 ] = self .uSide [ 5 ] ; temp.uSide [ 6 ] = self .uSide [ 6 ] ; temp.uSide [ 3 ] = self .uSide [ 7 ]
temp.bSide [ 1 ] = self .fSide [ 5 ] ; temp.fSide [ 6 ] = self .fSide [ 6 ] ; temp.fSide [ 7 ] = self .fSide [ 7 ]
temp.lSide [ 5 ] = self .lSide [ 5 ] ; temp.rSide [ 6 ] = self .lSide [ 6 ] ; temp.rSide [ 7 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.rSide [ 5 ] = self .rSide [ 5 ] ; temp.lSide [ 6 ] = self .rSide [ 6 ] ; temp.lSide [ 7 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
elif a == "R' U R' F R F' R U' R' F' U F R U R' U' R" : #17
temp.uSide [ 4 ] = self .uSide [ 0 ] ; temp.uSide [ 5 ] = self .uSide [ 1 ] ; temp.uSide [ 2 ] = self .uSide [ 2 ] ; temp.uSide [ 3 ] = self .uSide [ 3 ] ; temp.uSide [ 0 ] = self .uSide [ 4 ] ; temp.uSide [ 1 ] = self .uSide [ 5 ] ; temp.uSide [ 6 ] = self .uSide [ 6 ] ; temp.uSide [ 7 ] = self .uSide [ 7 ]
temp.fSide [ 5 ] = self .fSide [ 5 ] ; temp.fSide [ 6 ] = self .fSide [ 6 ] ; temp.bSide [ 3 ] = self .fSide [ 7 ]
temp.rSide [ 5 ] = self .lSide [ 5 ] ; temp.rSide [ 6 ] = self .lSide [ 6 ] ; temp.lSide [ 7 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.lSide [ 5 ] = self .rSide [ 5 ] ; temp.lSide [ 6 ] = self .rSide [ 6 ] ; temp.rSide [ 7 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
elif a == "R U R' U' R' F R2 U' R' U' R U R' F'" : #18
temp.uSide [ 4 ] = self .uSide [ 0 ] ; temp.uSide [ 7 ] = self .uSide [ 1 ] ; temp.uSide [ 2 ] = self .uSide [ 2 ] ; temp.uSide [ 3 ] = self .uSide [ 3 ] ; temp.uSide [ 0 ] = self .uSide [ 4 ] ; temp.uSide [ 5 ] = self .uSide [ 5 ] ; temp.uSide [ 6 ] = self .uSide [ 6 ] ; temp.uSide [ 1 ] = self .uSide [ 7 ]
temp.fSide [ 5 ] = self .fSide [ 5 ] ; temp.fSide [ 6 ] = self .fSide [ 6 ] ; temp.rSide [ 7 ] = self .fSide [ 7 ]
temp.lSide [ 5 ] = self .lSide [ 5 ] ; temp.rSide [ 6 ] = self .lSide [ 6 ] ; temp.lSide [ 7 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.bSide [ 1 ] = self .rSide [ 5 ] ; temp.lSide [ 6 ] = self .rSide [ 6 ] ; temp.fSide [ 7 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
elif a == "F R U' R' U' R U R' F' R U R' U' R' F R F'" : #19
temp.uSide [ 0 ] = self .uSide [ 0 ] ; temp.uSide [ 5 ] = self .uSide [ 1 ] ; temp.uSide [ 2 ] = self .uSide [ 2 ] ; temp.uSide [ 3 ] = self .uSide [ 3 ] ; temp.uSide [ 6 ] = self .uSide [ 4 ] ; temp.uSide [ 1 ] = self .uSide [ 5 ] ; temp.uSide [ 4 ] = self .uSide [ 6 ] ; temp.uSide [ 7 ] = self .uSide [ 7 ]
temp.fSide [ 5 ] = self .fSide [ 5 ] ; temp.fSide [ 6 ] = self .fSide [ 6 ] ; temp.bSide [ 3 ] = self .fSide [ 7 ]
temp.rSide [ 5 ] = self .lSide [ 5 ] ; temp.bSide [ 2 ] = self .lSide [ 6 ] ; temp.lSide [ 7 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.lSide [ 5 ] = self .rSide [ 5 ] ; temp.rSide [ 6 ] = self .rSide [ 6 ] ; temp.rSide [ 7 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
elif a == "F' U2 F' U' R' F' R2 U' R' U R' F R U' F" : #20
temp.uSide [ 0 ] = self .uSide [ 0 ] ; temp.uSide [ 1 ] = self .uSide [ 1 ] ; temp.uSide [ 6 ] = self .uSide [ 2 ] ; temp.uSide [ 5 ] = self .uSide [ 3 ] ; temp.uSide [ 4 ] = self .uSide [ 4 ] ; temp.uSide [ 3 ] = self .uSide [ 5 ] ; temp.uSide [ 2 ] = self .uSide [ 6 ] ; temp.uSide [ 7 ] = self .uSide [ 7 ]
temp.lSide [ 5 ] = self .fSide [ 5 ] ; temp.bSide [ 2 ] = self .fSide [ 6 ] ; temp.fSide [ 7 ] = self .fSide [ 7 ]
temp.fSide [ 5 ] = self .lSide [ 5 ] ; temp.lSide [ 6 ] = self .lSide [ 6 ] ; temp.bSide [ 3 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.rSide [ 5 ] = self .rSide [ 5 ] ; temp.rSide [ 6 ] = self .rSide [ 6 ] ; temp.rSide [ 7 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
elif a == "R U' R U F R F2 U F U' F R' F' R'" : #21
temp.uSide [ 2 ] = self .uSide [ 0 ] ; temp.uSide [ 1 ] = self .uSide [ 1 ] ; temp.uSide [ 0 ] = self .uSide [ 2 ] ; temp.uSide [ 7 ] = self .uSide [ 3 ] ; temp.uSide [ 4 ] = self .uSide [ 4 ] ; temp.uSide [ 5 ] = self .uSide [ 5 ] ; temp.uSide [ 6 ] = self .uSide [ 6 ] ; temp.uSide [ 3 ] = self .uSide [ 7 ]
temp.bSide [ 1 ] = self .fSide [ 5 ] ; temp.rSide [ 6 ] = self .fSide [ 6 ] ; temp.fSide [ 7 ] = self .fSide [ 7 ]
temp.lSide [ 5 ] = self .lSide [ 5 ] ; temp.lSide [ 6 ] = self .lSide [ 6 ] ; temp.rSide [ 7 ] = self .lSide [ 7 ]
temp.bSide [ 5 ] = self .bSide [ 5 ] ; temp.bSide [ 6 ] = self .bSide [ 6 ] ; temp.bSide [ 7 ] = self .bSide [ 7 ]
temp.rSide [ 5 ] = self .rSide [ 5 ] ; temp.fSide [ 6 ] = self .rSide [ 6 ] ; temp.lSide [ 7 ] = self .rSide [ 7 ]
self .resetSelf ( [ temp.uSide , temp.fSide , temp.lSide , temp.bSide , temp.rSide , temp.dSide ] )
else : print "BAD"
##################################################
def checkSolved( self ) :
if self .uSide [ 0 ] == self .uSide [ 1 ] == self .uSide [ 2 ] == self .uSide [ 3 ] == self .uSide [ 4 ] == self .uSide [ 5 ] == self .uSide [ 6 ] == self .uSide [ 7 ] :
if self .fSide [ 5 ] == self .fSide [ 6 ] == self .fSide [ 7 ] :
if self .lSide [ 5 ] == self .lSide [ 6 ] == self .lSide [ 7 ] :
if self .rSide [ 5 ] == self .rSide [ 6 ] == self .rSide [ 7 ] :
if self .bSide [ 3 ] == self .bSide [ 2 ] == self .bSide [ 1 ] :
return True
return False
def printMin( self ) :
print
print " " , self .bSide [ 3 ] + self .bSide [ 2 ] + self .bSide [ 1 ] # + '\n'
print " " + self .lSide [ 5 ] , self .uSide [ 5 ] + self .uSide [ 6 ] + self .uSide [ 7 ] , self .rSide [ 7 ]
print " " + self .lSide [ 6 ] , self .uSide [ 4 ] + "u" + self .uSide [ 0 ] , self .rSide [ 6 ]
print " " + self .lSide [ 7 ] , self .uSide [ 3 ] + self .uSide [ 2 ] + self .uSide [ 1 ] , self .rSide [ 5 ] # + '\n'#\n'
print " " , self .fSide [ 5 ] + self .fSide [ 6 ] + self .fSide [ 7 ] + '\n '
def doAlg( self , algString) :
ialg = algString.replace ( '(' , '' ) #get rid of unwanted
ialg = ialg.replace ( ')' , '' ) # or otherwise unneeded characters
ialg = ialg.replace ( "2'" , '2' ) # incl. whitespace, paren., 2's
ialg = ialg.replace ( ' ' , ' ' )
parts = ialg.split ( ' ' ) #Divide the alg up into individual moves
parts.reverse ( )
for part in parts:
if part == 'U' : self .doU ( ) ; self .doU ( ) ; self .doU ( )
elif part == 'U2' : self .doU ( ) ; self .doU ( )
elif part == "U'" : self .doU ( )
elif part == 'F' : self .doF ( ) ; self .doF ( ) ; self .doF ( )
elif part == 'F2' : self .doF ( ) ; self .doF ( )
elif part == "F'" : self .doF ( )
elif part == 'R' : self .doR ( ) ; self .doR ( ) ; self .doR ( )
elif part == 'R2' : self .doR ( ) ; self .doR ( )
elif part == "R'" : self .doR ( )
##################################################
for alg in algs:
new = MyCube( )
#new.doAlg(alg)
new .doCrazy ( alg)
new .printMin ( )
aW1wb3J0IHRpbWUKc3RhcnQgPSB0aW1lLnRpbWUoKQoKYWxncyA9IFsiIiwKIlInIFUgUicgVScgUicgVScgUicgVSBSIFUgUjIiLAoiUiBVJyBSIFUgUiBVIFIgVScgUicgVScgUjIiLAoiUjIgVTIgUiBVMiBSMiBVMiBSMiBVMiBSIFUyIFIyIiwKIlIyIFUgUjIgVScgUjIgRjIgUjIgVScgRjIgVSBSMiBGMiIsCiJSIFUnIFIgRjIgUicgVSBSJyBVJyBSMiBGMiBSMiIsCiJSMiBGMiBSMiBVIFIgVScgUiBGMiBSJyBVIFInIiwKIlIgVSBSJyBVIFInIFUnIFIgRicgUiBVIFInIFUnIFInIEYgUjIgVScgUjIgVSBSIiwKIkYnIFUyIFInIFUgRiBVJyBGJyBVJyBSIFUnIEYiLAoiUiBVIFInIEYnIFIgVSBSJyBVJyBSJyBGIFIyIFUnIFInIiwKIlInIFUyIFIgVTIgUicgRiBSIFUgUicgVScgUicgRicgUjIiLAoiRicgUicgVScgUiBGJyBSJyBVIEYnIFUnIEYnIFUgRiBSIEYyIiwKIkYyIFIyIFUnIFInIFUnIFIgRjIgUicgVSBSIEYyIFUgUjIgRjIiLAoiRjIgUjIgVScgRjIgUicgVScgUiBGMiBSJyBVIFIgVSBSMiBGMiIsCiJSJyBVJyBSMiBVJyBSMiBVJyBSIFUyIFIyIEYgVSBSJyBVJyBSIEYnIFIiLAoiUicgRiBSJyBVIFIgVScgRicgUjIgVTIgUicgVSBSMiBVIFIyIFUgUiIsCiJGJyBSIFUgUicgVScgUicgRiBSMiBGIFUnIFInIFUnIFIgVSBGJyBSJyIsCiJSJyBVIFInIEYgUiBGJyBSIFUnIFInIEYnIFUgRiBSIFUgUicgVScgUiIsCiJSIFUgUicgVScgUicgRiBSMiBVJyBSJyBVJyBSIFUgUicgRiciLAoiRiBSIFUnIFInIFUnIFIgVSBSJyBGJyBSIFUgUicgVScgUicgRiBSIEYnIiwKIkYnIFUyIEYnIFUnIFInIEYnIFIyIFUnIFInIFUgUicgRiBSIFUnIEYiLAoiUiBVJyBSIFUgRiBSIEYyIFUgRiBVJyBGIFInIEYnIFInIl0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmNsYXNzIE15Q3ViZToKICAgICIiIkEgdmlydHVhbCAzeDN4MyBtYXRyaXgiIiIKICAgIHVTaWRlID0gW10gI1VSRiwgVUYsIGV0YwogICAgZlNpZGUgPSBbXSAjRlJELCBGRCwgZXRjCiAgICBsU2lkZSA9IFtdICNMRkQsIExELCBldGMKICAgIGJTaWRlID0gW10gI0JSRCwgQkQsIGV0YwogICAgclNpZGUgPSBbXSAjUkJELCBSRCwgZXRjCiAgICBkU2lkZSA9IFtdICNEQlIsIERSLCBldGMKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi51U2lkZSA9IFsnVScsICdVJywgJ1UnLCAnVScsICdVJywgJ1UnLCAnVScsICdVJ10gI1VSRiwgVUYsIGV0YwogICAgICAgIHNlbGYuZlNpZGUgPSBbJ0YnLCAnRicsICdGJywgJ0YnLCAnRicsICdGJywgJ0YnLCAnRiddICNGUkQsIEZELCBldGMKICAgICAgICBzZWxmLmxTaWRlID0gWydMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnXSAjTEZELCBMRCwgZXRjCiAgICAgICAgc2VsZi5iU2lkZSA9IFsnQicsICdCJywgJ0InLCAnQicsICdCJywgJ0InLCAnQicsICdCJ10gI0JSRCwgQkQsIGV0YwogICAgICAgIHNlbGYuclNpZGUgPSBbJ1InLCAnUicsICdSJywgJ1InLCAnUicsICdSJywgJ1InLCAnUiddICNSQkQsIFJELCBldGMKICAgICAgICBzZWxmLmRTaWRlID0gWydEJywgJ0QnLCAnRCcsICdEJywgJ0QnLCAnRCcsICdEJywgJ0QnXSAjREJSLCBEUiwgZXRjCgogICAgZGVmIHJlc2V0U2VsZihzZWxmLCBuZXcpOgogICAgICAgICNwcmludCBuZXcKICAgICAgICBNeUN1YmUudVNpZGUgPSBuZXdbMF07IE15Q3ViZS5mU2lkZSA9IG5ld1sxXTsgTXlDdWJlLmxTaWRlID0gbmV3WzJdCiAgICAgICAgTXlDdWJlLmJTaWRlID0gbmV3WzNdOyBNeUN1YmUuclNpZGUgPSBuZXdbNF07IE15Q3ViZS5kU2lkZSA9IG5ld1s1XQoKCiAgICBkZWYgZG9VKHNlbGYpOgoKICAgICAgICBzZWxmLnVTaWRlWzBdLCBzZWxmLnVTaWRlWzFdLCBzZWxmLnVTaWRlWzJdLCBzZWxmLnVTaWRlWzNdLCBzZWxmLnVTaWRlWzRdLCBzZWxmLnVTaWRlWzVdLCBzZWxmLnVTaWRlWzZdLCBzZWxmLnVTaWRlWzddID0gc2VsZi51U2lkZVs2XSwgc2VsZi51U2lkZVs3XSwgc2VsZi51U2lkZVswXSwgc2VsZi51U2lkZVsxXSwgc2VsZi51U2lkZVsyXSwgc2VsZi51U2lkZVszXSwgc2VsZi51U2lkZVs0XSwgc2VsZi51U2lkZVs1XQoKICAgICAgICBzZWxmLmZTaWRlWzVdLCBzZWxmLmxTaWRlWzVdLCBzZWxmLmJTaWRlWzFdLCBzZWxmLnJTaWRlWzVdID0gc2VsZi5yU2lkZVs1XSwgc2VsZi5mU2lkZVs1XSwgc2VsZi5sU2lkZVs1XSwgc2VsZi5iU2lkZVsxXQogICAgICAgIHNlbGYuZlNpZGVbNl0sIHNlbGYubFNpZGVbNl0sIHNlbGYuYlNpZGVbMl0sIHNlbGYuclNpZGVbNl0gPSBzZWxmLnJTaWRlWzZdLCBzZWxmLmZTaWRlWzZdLCBzZWxmLmxTaWRlWzZdLCBzZWxmLmJTaWRlWzJdCiAgICAgICAgc2VsZi5mU2lkZVs3XSwgc2VsZi5sU2lkZVs3XSwgc2VsZi5iU2lkZVszXSwgc2VsZi5yU2lkZVs3XSA9IHNlbGYuclNpZGVbN10sIHNlbGYuZlNpZGVbN10sIHNlbGYubFNpZGVbN10sIHNlbGYuYlNpZGVbM10KCiAgICBkZWYgZG9VcChzZWxmKToKICAgICAgICBzZWxmLnVTaWRlWzZdLCBzZWxmLnVTaWRlWzddLCBzZWxmLnVTaWRlWzBdLCBzZWxmLnVTaWRlWzFdLCBzZWxmLnVTaWRlWzJdLCBzZWxmLnVTaWRlWzNdLCBzZWxmLnVTaWRlWzRdLCBzZWxmLnVTaWRlWzVdID0gc2VsZi51U2lkZVswXSwgc2VsZi51U2lkZVsxXSwgc2VsZi51U2lkZVsyXSwgc2VsZi51U2lkZVszXSwgc2VsZi51U2lkZVs0XSwgc2VsZi51U2lkZVs1XSwgc2VsZi51U2lkZVs2XSwgc2VsZi51U2lkZVs3XQoKICAgICAgICBzZWxmLnJTaWRlWzVdLCBzZWxmLmZTaWRlWzVdLCBzZWxmLmxTaWRlWzVdLCBzZWxmLmJTaWRlWzFdID0gc2VsZi5mU2lkZVs1XSwgc2VsZi5sU2lkZVs1XSwgc2VsZi5iU2lkZVsxXSwgc2VsZi5yU2lkZVs1XQogICAgICAgIHNlbGYuclNpZGVbNl0sIHNlbGYuZlNpZGVbNl0sIHNlbGYubFNpZGVbNl0sIHNlbGYuYlNpZGVbMl0gPSBzZWxmLmZTaWRlWzZdLCBzZWxmLmxTaWRlWzZdLCBzZWxmLmJTaWRlWzJdLCBzZWxmLnJTaWRlWzZdCiAgICAgICAgc2VsZi5yU2lkZVs3XSwgc2VsZi5mU2lkZVs3XSwgc2VsZi5sU2lkZVs3XSwgc2VsZi5iU2lkZVszXSA9IHNlbGYuZlNpZGVbN10sIHNlbGYubFNpZGVbN10sIHNlbGYuYlNpZGVbM10sIHNlbGYuclNpZGVbN10KCiAgICBkZWYgZG9SKHNlbGYpOgoKICAgICAgICBzZWxmLnJTaWRlWzBdLCBzZWxmLnJTaWRlWzFdLCBzZWxmLnJTaWRlWzJdLCBzZWxmLnJTaWRlWzNdLCBzZWxmLnJTaWRlWzRdLCBzZWxmLnJTaWRlWzVdLCBzZWxmLnJTaWRlWzZdLCBzZWxmLnJTaWRlWzddID0gc2VsZi5yU2lkZVs2XSwgc2VsZi5yU2lkZVs3XSwgc2VsZi5yU2lkZVswXSwgc2VsZi5yU2lkZVsxXSwgc2VsZi5yU2lkZVsyXSwgc2VsZi5yU2lkZVszXSwgc2VsZi5yU2lkZVs0XSwgc2VsZi5yU2lkZVs1XQogICAgICAgICAgCiAgICAgICAgc2VsZi5mU2lkZVs3XSwgc2VsZi51U2lkZVs3XSwgc2VsZi5iU2lkZVs3XSwgc2VsZi5kU2lkZVs3XSA9IHNlbGYuZFNpZGVbN10sIHNlbGYuZlNpZGVbN10sIHNlbGYudVNpZGVbN10sIHNlbGYuYlNpZGVbN10KICAgICAgICBzZWxmLmZTaWRlWzBdLCBzZWxmLnVTaWRlWzBdLCBzZWxmLmJTaWRlWzBdLCBzZWxmLmRTaWRlWzBdID0gc2VsZi5kU2lkZVswXSwgc2VsZi5mU2lkZVswXSwgc2VsZi51U2lkZVswXSwgc2VsZi5iU2lkZVswXQogICAgICAgIHNlbGYuZlNpZGVbMV0sIHNlbGYudVNpZGVbMV0sIHNlbGYuYlNpZGVbMV0sIHNlbGYuZFNpZGVbMV0gPSBzZWxmLmRTaWRlWzFdLCBzZWxmLmZTaWRlWzFdLCBzZWxmLnVTaWRlWzFdLCBzZWxmLmJTaWRlWzFdCgogICAgZGVmIGRvUnAoc2VsZik6CiAgICAgICAgc2VsZi5yU2lkZVs2XSwgc2VsZi5yU2lkZVs3XSwgc2VsZi5yU2lkZVswXSwgc2VsZi5yU2lkZVsxXSwgc2VsZi5yU2lkZVsyXSwgc2VsZi5yU2lkZVszXSwgc2VsZi5yU2lkZVs0XSwgc2VsZi5yU2lkZVs1XSA9IHNlbGYuclNpZGVbMF0sIHNlbGYuclNpZGVbMV0sIHNlbGYuclNpZGVbMl0sIHNlbGYuclNpZGVbM10sIHNlbGYuclNpZGVbNF0sIHNlbGYuclNpZGVbNV0sIHNlbGYuclNpZGVbNl0sIHNlbGYuclNpZGVbN10KCiAgICAgICAgc2VsZi5kU2lkZVs3XSwgc2VsZi5mU2lkZVs3XSwgc2VsZi51U2lkZVs3XSwgc2VsZi5iU2lkZVs3XSA9IHNlbGYuZlNpZGVbN10sIHNlbGYudVNpZGVbN10sIHNlbGYuYlNpZGVbN10sIHNlbGYuZFNpZGVbN10KICAgICAgICBzZWxmLmRTaWRlWzBdLCBzZWxmLmZTaWRlWzBdLCBzZWxmLnVTaWRlWzBdLCBzZWxmLmJTaWRlWzBdID0gc2VsZi5mU2lkZVswXSwgc2VsZi51U2lkZVswXSwgc2VsZi5iU2lkZVswXSwgc2VsZi5kU2lkZVswXQogICAgICAgIHNlbGYuZFNpZGVbMV0sIHNlbGYuZlNpZGVbMV0sIHNlbGYudVNpZGVbMV0sIHNlbGYuYlNpZGVbMV0gPSBzZWxmLmZTaWRlWzFdLCBzZWxmLnVTaWRlWzFdLCBzZWxmLmJTaWRlWzFdLCBzZWxmLmRTaWRlWzFdCgogICAgZGVmIGRvRihzZWxmKToKICAgICAgICBzZWxmLmZTaWRlWzBdLCBzZWxmLmZTaWRlWzFdLCBzZWxmLmZTaWRlWzJdLCBzZWxmLmZTaWRlWzNdLCBzZWxmLmZTaWRlWzRdLCBzZWxmLmZTaWRlWzVdLCBzZWxmLmZTaWRlWzZdLCBzZWxmLmZTaWRlWzddID0gc2VsZi5mU2lkZVs2XSwgc2VsZi5mU2lkZVs3XSwgc2VsZi5mU2lkZVswXSwgc2VsZi5mU2lkZVsxXSwgc2VsZi5mU2lkZVsyXSwgc2VsZi5mU2lkZVszXSwgc2VsZi5mU2lkZVs0XSwgc2VsZi5mU2lkZVs1XQoKICAgICAgICBzZWxmLnVTaWRlWzFdLCBzZWxmLnJTaWRlWzNdLCBzZWxmLmRTaWRlWzVdLCBzZWxmLmxTaWRlWzddID0gc2VsZi5sU2lkZVs3XSwgc2VsZi51U2lkZVsxXSwgc2VsZi5yU2lkZVszXSwgc2VsZi5kU2lkZVs1XQogICAgICAgIHNlbGYudVNpZGVbMl0sIHNlbGYuclNpZGVbNF0sIHNlbGYuZFNpZGVbNl0sIHNlbGYubFNpZGVbMF0gPSBzZWxmLmxTaWRlWzBdLCBzZWxmLnVTaWRlWzJdLCBzZWxmLnJTaWRlWzRdLCBzZWxmLmRTaWRlWzZdCiAgICAgICAgc2VsZi51U2lkZVszXSwgc2VsZi5yU2lkZVs1XSwgc2VsZi5kU2lkZVs3XSwgc2VsZi5sU2lkZVsxXSA9IHNlbGYubFNpZGVbMV0sIHNlbGYudVNpZGVbM10sIHNlbGYuclNpZGVbNV0sIHNlbGYuZFNpZGVbN10KICAgIAogICAgZGVmIGRvRnAoc2VsZik6CiAgICAgICAgc2VsZi5mU2lkZVs2XSwgc2VsZi5mU2lkZVs3XSwgc2VsZi5mU2lkZVswXSwgc2VsZi5mU2lkZVsxXSwgc2VsZi5mU2lkZVsyXSwgc2VsZi5mU2lkZVszXSwgc2VsZi5mU2lkZVs0XSwgc2VsZi5mU2lkZVs1XSA9IHNlbGYuZlNpZGVbMF0sIHNlbGYuZlNpZGVbMV0sIHNlbGYuZlNpZGVbMl0sIHNlbGYuZlNpZGVbM10sIHNlbGYuZlNpZGVbNF0sIHNlbGYuZlNpZGVbNV0sIHNlbGYuZlNpZGVbNl0sIHNlbGYuZlNpZGVbN10KICAgICAKICAgICAgICBzZWxmLmxTaWRlWzddLCBzZWxmLnVTaWRlWzFdLCBzZWxmLnJTaWRlWzNdLCBzZWxmLmRTaWRlWzVdID0gc2VsZi51U2lkZVsxXSwgc2VsZi5yU2lkZVszXSwgc2VsZi5kU2lkZVs1XSwgc2VsZi5sU2lkZVs3XQogICAgICAgIHNlbGYubFNpZGVbMF0sIHNlbGYudVNpZGVbMl0sIHNlbGYuclNpZGVbNF0sIHNlbGYuZFNpZGVbNl0gPSBzZWxmLnVTaWRlWzJdLCBzZWxmLnJTaWRlWzRdLCBzZWxmLmRTaWRlWzZdLCBzZWxmLmxTaWRlWzBdCiAgICAgICAgc2VsZi5sU2lkZVsxXSwgc2VsZi51U2lkZVszXSwgc2VsZi5yU2lkZVs1XSwgc2VsZi5kU2lkZVs3XSA9IHNlbGYudVNpZGVbM10sIHNlbGYuclNpZGVbNV0sIHNlbGYuZFNpZGVbN10sIHNlbGYubFNpZGVbMV0KICAgIAogICAgZGVmIGRvQWxnKHNlbGYsIGFsZ1N0cmluZyk6CiAgICAgICAgaWFsZyA9IGFsZ1N0cmluZy5yZXBsYWNlKCcoJywgJycpICAgICAjZ2V0IHJpZCBvZiB1bndhbnRlZAogICAgICAgIGlhbGcgPSBpYWxnLnJlcGxhY2UoJyknLCAnJykgICAgICAgICAgIyBvciBvdGhlcndpc2UgdW5uZWVkZWQgY2hhcmFjdGVycwogICAgICAgIGlhbGcgPSBpYWxnLnJlcGxhY2UoIjInIiwgJzInKSAgICAgICAgIyBpbmNsLiB3aGl0ZXNwYWNlLCBwYXJlbi4sIDIncwogICAgICAgIGlhbGcgPSBpYWxnLnJlcGxhY2UoJyAgJywgJyAnKQogICAgICAgIHBhcnRzID0gaWFsZy5zcGxpdCgnICcpICAgICAgICAgICAgICAgI0RpdmlkZSB0aGUgYWxnIHVwIGludG8gaW5kaXZpZHVhbCBtb3ZlcwoKICAgICAgICBwYXJ0cy5yZXZlcnNlKCkKICAgICAgICAKICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKICAgICAgICAgICAgaWYgcGFydCA9PSAgICdVJzogIHNlbGYuZG9VcCgpCiAgICAgICAgICAgIGVsaWYgcGFydCA9PSAnVTInOiBzZWxmLmRvVSgpOyBzZWxmLmRvVSgpCiAgICAgICAgICAgIGVsaWYgcGFydCA9PSAiVSciOiBzZWxmLmRvVSgpCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgZWxpZiBwYXJ0ID09ICdGJzogIHNlbGYuZG9GcCgpCiAgICAgICAgICAgIGVsaWYgcGFydCA9PSAnRjInOiBzZWxmLmRvRigpOyBzZWxmLmRvRigpCiAgICAgICAgICAgIGVsaWYgcGFydCA9PSAiRiciOiBzZWxmLmRvRigpCiAgICAgICAgICAKICAgICAgICAgICAgZWxpZiBwYXJ0ID09ICdSJzogIHNlbGYuZG9ScCgpCiAgICAgICAgICAgIGVsaWYgcGFydCA9PSAnUjInOiBzZWxmLmRvUigpOyBzZWxmLmRvUigpCiAgICAgICAgICAgIGVsaWYgcGFydCA9PSAiUiciOiBzZWxmLmRvUigpCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICBkZWYgZG9DcmF6eShzZWxmLCBhKToJI2NvZGUgZ2VuZXJhdGVkIHdpdGggd3JpdGluZy5weQogICAgICAgIHRlbXAgPSBzZWxmCgogICAgICAgIGlmIGEgPT0gIiI6CSNkZWZhdWx0IChmaW5pc2hlZCkgY2FzZToKICAgICAgICAgICAgcGFzcwoKICAgICAgICBlbGlmIGEgPT0gIlInIFUgUicgVScgUicgVScgUicgVSBSIFUgUjIiOgkjMQogICAgICAgICAgICB0ZW1wLnVTaWRlWzZdID0gc2VsZi51U2lkZVswXTsgdGVtcC51U2lkZVsxXSA9IHNlbGYudVNpZGVbMV07IHRlbXAudVNpZGVbMl0gPSBzZWxmLnVTaWRlWzJdOyB0ZW1wLnVTaWRlWzNdID0gc2VsZi51U2lkZVszXTsgdGVtcC51U2lkZVswXSA9IHNlbGYudVNpZGVbNF07IHRlbXAudVNpZGVbNV0gPSBzZWxmLnVTaWRlWzVdOyB0ZW1wLnVTaWRlWzRdID0gc2VsZi51U2lkZVs2XTsgdGVtcC51U2lkZVs3XSA9IHNlbGYudVNpZGVbN10KCiAgICAgICAgICAgIHRlbXAuZlNpZGVbNV0gPSBzZWxmLmZTaWRlWzVdOyB0ZW1wLmZTaWRlWzZdID0gc2VsZi5mU2lkZVs2XTsgdGVtcC5mU2lkZVs3XSA9IHNlbGYuZlNpZGVbN10KICAgICAgICAgICAgdGVtcC5sU2lkZVs1XSA9IHNlbGYubFNpZGVbNV07IHRlbXAuclNpZGVbNl0gPSBzZWxmLmxTaWRlWzZdOyB0ZW1wLmxTaWRlWzddID0gc2VsZi5sU2lkZVs3XQogICAgICAgICAgICB0ZW1wLmJTaWRlWzVdID0gc2VsZi5iU2lkZVs1XTsgdGVtcC5iU2lkZVs2XSA9IHNlbGYuYlNpZGVbNl07IHRlbXAuYlNpZGVbN10gPSBzZWxmLmJTaWRlWzddCiAgICAgICAgICAgIHRlbXAuclNpZGVbNV0gPSBzZWxmLnJTaWRlWzVdOyB0ZW1wLmJTaWRlWzJdID0gc2VsZi5yU2lkZVs2XTsgdGVtcC5yU2lkZVs3XSA9IHNlbGYuclNpZGVbN10KICAgICAgICAgICAgc2VsZi5yZXNldFNlbGYoW3RlbXAudVNpZGUsIHRlbXAuZlNpZGUsIHRlbXAubFNpZGUsIHRlbXAuYlNpZGUsIHRlbXAuclNpZGUsIHRlbXAuZFNpZGVdKQoKICAgICAgICBlbGlmIGEgPT0gIlIgVScgUiBVIFIgVSBSIFUnIFInIFUnIFIyIjoJIzIKICAgICAgICAgICAgdGVtcC51U2lkZVsyXSA9IHNlbGYudVNpZGVbMF07IHRlbXAudVNpZGVbMV0gPSBzZWxmLnVTaWRlWzFdOyB0ZW1wLnVTaWRlWzRdID0gc2VsZi51U2lkZVsyXTsgdGVtcC51U2lkZVszXSA9IHNlbGYudVNpZGVbM107IHRlbXAudVNpZGVbMF0gPSBzZWxmLnVTaWRlWzRdOyB0ZW1wLnVTaWRlWzVdID0gc2VsZi51U2lkZVs1XTsgdGVtcC51U2lkZVs2XSA9IHNlbGYudVNpZGVbNl07IHRlbXAudVNpZGVbN10gPSBzZWxmLnVTaWRlWzddCgogICAgICAgICAgICB0ZW1wLmZTaWRlWzVdID0gc2VsZi5mU2lkZVs1XTsgdGVtcC5sU2lkZVs2XSA9IHNlbGYuZlNpZGVbNl07IHRlbXAuZlNpZGVbN10gPSBzZWxmLmZTaWRlWzddCiAgICAgICAgICAgIHRlbXAubFNpZGVbNV0gPSBzZWxmLmxTaWRlWzVdOyB0ZW1wLnJTaWRlWzZdID0gc2VsZi5sU2lkZVs2XTsgdGVtcC5sU2lkZVs3XSA9IHNlbGYubFNpZGVbN10KICAgICAgICAgICAgdGVtcC5iU2lkZVs1XSA9IHNlbGYuYlNpZGVbNV07IHRlbXAuYlNpZGVbNl0gPSBzZWxmLmJTaWRlWzZdOyB0ZW1wLmJTaWRlWzddID0gc2VsZi5iU2lkZVs3XQogICAgICAgICAgICB0ZW1wLnJTaWRlWzVdID0gc2VsZi5yU2lkZVs1XTsgdGVtcC5mU2lkZVs2XSA9IHNlbGYuclNpZGVbNl07IHRlbXAuclNpZGVbN10gPSBzZWxmLnJTaWRlWzddCiAgICAgICAgICAgIHNlbGYucmVzZXRTZWxmKFt0ZW1wLnVTaWRlLCB0ZW1wLmZTaWRlLCB0ZW1wLmxTaWRlLCB0ZW1wLmJTaWRlLCB0ZW1wLnJTaWRlLCB0ZW1wLmRTaWRlXSkKCiAgICAgICAgZWxpZiBhID09ICJSMiBVMiBSIFUyIFIyIFUyIFIyIFUyIFIgVTIgUjIiOgkjMwogICAgICAgICAgICB0ZW1wLnVTaWRlWzRdID0gc2VsZi51U2lkZVswXTsgdGVtcC51U2lkZVsxXSA9IHNlbGYudVNpZGVbMV07IHRlbXAudVNpZGVbNl0gPSBzZWxmLnVTaWRlWzJdOyB0ZW1wLnVTaWRlWzNdID0gc2VsZi51U2lkZVszXTsgdGVtcC51U2lkZVswXSA9IHNlbGYudVNpZGVbNF07IHRlbXAudVNpZGVbNV0gPSBzZWxmLnVTaWRlWzVdOyB0ZW1wLnVTaWRlWzJdID0gc2VsZi51U2lkZVs2XTsgdGVtcC51U2lkZVs3XSA9IHNlbGYudVNpZGVbN10KCiAgICAgICAgICAgIHRlbXAuZlNpZGVbNV0gPSBzZWxmLmZTaWRlWzVdOyB0ZW1wLmJTaWRlWzJdID0gc2VsZi5mU2lkZVs2XTsgdGVtcC5mU2lkZVs3XSA9IHNlbGYuZlNpZGVbN10KICAgICAgICAgICAgdGVtcC5sU2lkZVs1XSA9IHNlbGYubFNpZGVbNV07IHRlbXAuclNpZGVbNl0gPSBzZWxmLmxTaWRlWzZdOyB0ZW1wLmxTaWRlWzddID0gc2VsZi5sU2lkZVs3XQogICAgICAgICAgICB0ZW1wLmJTaWRlWzVdID0gc2VsZi5iU2lkZVs1XTsgdGVtcC5iU2lkZVs2XSA9IHNlbGYuYlNpZGVbNl07IHRlbXAuYlNpZGVbN10gPSBzZWxmLmJTaWRlWzddCiAgICAgICAgICAgIHRlbXAuclNpZGVbNV0gPSBzZWxmLnJTaWRlWzVdOyB0ZW1wLmxTaWRlWzZdID0gc2VsZi5yU2lkZVs2XTsgdGVtcC5yU2lkZVs3XSA9IHNlbGYuclNpZGVbN10KICAgICAgICAgICAgc2VsZi5yZXNldFNlbGYoW3RlbXAudVNpZGUsIHRlbXAuZlNpZGUsIHRlbXAubFNpZGUsIHRlbXAuYlNpZGUsIHRlbXAuclNpZGUsIHRlbXAuZFNpZGVdKQoKICAgICAgICBlbGlmIGEgPT0gIlIyIFUgUjIgVScgUjIgRjIgUjIgVScgRjIgVSBSMiBGMiI6CSM0CiAgICAgICAgICAgIHRlbXAudVNpZGVbNl0gPSBzZWxmLnVTaWRlWzBdOyB0ZW1wLnVTaWRlWzFdID0gc2VsZi51U2lkZVsxXTsgdGVtcC51U2lkZVs0XSA9IHNlbGYudVNpZGVbMl07IHRlbXAudVNpZGVbM10gPSBzZWxmLnVTaWRlWzNdOyB0ZW1wLnVTaWRlWzJdID0gc2VsZi51U2lkZVs0XTsgdGVtcC51U2lkZVs1XSA9IHNlbGYudVNpZGVbNV07IHRlbXAudVNpZGVbMF0gPSBzZWxmLnVTaWRlWzZdOyB0ZW1wLnVTaWRlWzddID0gc2VsZi51U2lkZVs3XQoKICAgICAgICAgICAgdGVtcC5mU2lkZVs1XSA9IHNlbGYuZlNpZGVbNV07IHRlbXAubFNpZGVbNl0gPSBzZWxmLmZTaWRlWzZdOyB0ZW1wLmZTaWRlWzddID0gc2VsZi5mU2lkZVs3XQogICAgICAgICAgICB0ZW1wLmxTaWRlWzVdID0gc2VsZi5sU2lkZVs1XTsgdGVtcC5mU2lkZVs2XSA9IHNlbGYubFNpZGVbNl07IHRlbXAubFNpZGVbN10gPSBzZWxmLmxTaWRlWzddCiAgICAgICAgICAgIHRlbXAuYlNpZGVbNV0gPSBzZWxmLmJTaWRlWzVdOyB0ZW1wLmJTaWRlWzZdID0gc2VsZi5iU2lkZVs2XTsgdGVtcC5iU2lkZVs3XSA9IHNlbGYuYlNpZGVbN10KICAgICAgICAgICAgdGVtcC5yU2lkZVs1XSA9IHNlbGYuclNpZGVbNV07IHRlbXAuYlNpZGVbMl0gPSBzZWxmLnJTaWRlWzZdOyB0ZW1wLnJTaWRlWzddID0gc2VsZi5yU2lkZVs3XQogICAgICAgICAgICBzZWxmLnJlc2V0U2VsZihbdGVtcC51U2lkZSwgdGVtcC5mU2lkZSwgdGVtcC5sU2lkZSwgdGVtcC5iU2lkZSwgdGVtcC5yU2lkZSwgdGVtcC5kU2lkZV0pCgogICAgICAgIGVsaWYgYSA9PSAiUiBVJyBSIEYyIFInIFUgUicgVScgUjIgRjIgUjIiOgkjNQogICAgICAgICAgICB0ZW1wLnVTaWRlWzJdID0gc2VsZi51U2lkZVswXTsgdGVtcC51U2lkZVszXSA9IHNlbGYudVNpZGVbMV07IHRlbXAudVNpZGVbNF0gPSBzZWxmLnVTaWRlWzJdOyB0ZW1wLnVTaWRlWzFdID0gc2VsZi51U2lkZVszXTsgdGVtcC51U2lkZVs2XSA9IHNlbGYudVNpZGVbNF07IHRlbXAudVNpZGVbNV0gPSBzZWxmLnVTaWRlWzVdOyB0ZW1wLnVTaWRlWzBdID0gc2VsZi51U2lkZVs2XTsgdGVtcC51U2lkZVs3XSA9IHNlbGYudVNpZGVbN10KCiAgICAgICAgICAgIHRlbXAuclNpZGVbNV0gPSBzZWxmLmZTaWRlWzVdOyB0ZW1wLmxTaWRlWzZdID0gc2VsZi5mU2lkZVs2XTsgdGVtcC5sU2lkZVs3XSA9IHNlbGYuZlNpZGVbN10KICAgICAgICAgICAgdGVtcC5sU2lkZVs1XSA9IHNlbGYubFNpZGVbNV07IHRlbXAuYlNpZGVbMl0gPSBzZWxmLmxTaWRlWzZdOyB0ZW1wLmZTaWRlWzddID0gc2VsZi5sU2lkZVs3XQogICAgICAgICAgICB0ZW1wLmJTaWRlWzVdID0gc2VsZi5iU2lkZVs1XTsgdGVtcC5iU2lkZVs2XSA9IHNlbGYuYlNpZGVbNl07IHRlbXAuYlNpZGVbN10gPSBzZWxmLmJTaWRlWzddCiAgICAgICAgICAgIHRlbXAuZlNpZGVbNV0gPSBzZWxmLnJTaWRlWzVdOyB0ZW1wLmZTaWRlWzZdID0gc2VsZi5yU2lkZVs2XTsgdGVtcC5yU2lkZVs3XSA9IHNlbGYuclNpZGVbN10KICAgICAgICAgICAgc2VsZi5yZXNldFNlbGYoW3RlbXAudVNpZGUsIHRlbXAuZlNpZGUsIHRlbXAubFNpZGUsIHRlbXAuYlNpZGUsIHRlbXAuclNpZGUsIHRlbXAuZFNpZGVdKQoKICAgICAgICBlbGlmIGEgPT0gIlIyIEYyIFIyIFUgUiBVJyBSIEYyIFInIFUgUiciOgkjNgogICAgICAgICAgICB0ZW1wLnVTaWRlWzZdID0gc2VsZi51U2lkZVswXTsgdGVtcC51U2lkZVszXSA9IHNlbGYudVNpZGVbMV07IHRlbXAudVNpZGVbMF0gPSBzZWxmLnVTaWRlWzJdOyB0ZW1wLnVTaWRlWzFdID0gc2VsZi51U2lkZVszXTsgdGVtcC51U2lkZVsyXSA9IHNlbGYudVNpZGVbNF07IHRlbXAudVNpZGVbNV0gPSBzZWxmLnVTaWRlWzVdOyB0ZW1wLnVTaWRlWzRdID0gc2VsZi51U2lkZVs2XTsgdGVtcC51U2lkZVs3XSA9IHNlbGYudVNpZGVbN10KCiAgICAgICAgICAgIHRlbXAuclNpZGVbNV0gPSBzZWxmLmZTaWRlWzVdOyB0ZW1wLnJTaWRlWzZdID0gc2VsZi5mU2lkZVs2XTsgdGVtcC5sU2lkZVs3XSA9IHNlbGYuZlNpZGVbN10KICAgICAgICAgICAgdGVtcC5sU2lkZVs1XSA9IHNlbGYubFNpZGVbNV07IHRlbXAuZlNpZGVbNl0gPSBzZWxmLmxTaWRlWzZdOyB0ZW1wLmZTaWRlWzddID0gc2VsZi5sU2lkZVs3XQogICAgICAgICAgICB0ZW1wLmJTaWRlWzVdID0gc2VsZi5iU2lkZVs1XTsgdGVtcC5iU2lkZVs2XSA9IHNlbGYuYlNpZGVbNl07IHRlbXAuYlNpZGVbN10gPSBzZWxmLmJTaWRlWzddCiAgICAgICAgICAgIHRlbXAuZlNpZGVbNV0gPSBzZWxmLnJTaWRlWzVdOyB0ZW1wLmJTaWRlWzJdID0gc2VsZi5yU2lkZVs2XTsgdGVtcC5yU2lkZVs3XSA9IHNlbGYuclNpZGVbN10KICAgICAgICAgICAgc2VsZi5yZXNldFNlbGYoW3RlbXAudVNpZGUsIHRlbXAuZlNpZGUsIHRlbXAubFNpZGUsIHRlbXAuYlNpZGUsIHRlbXAuclNpZGUsIHRlbXAuZFNpZGVdKQoKICAgICAgICBlbGlmIGEgPT0gIlIgVSBSJyBVIFInIFUnIFIgRicgUiBVIFInIFUnIFInIEYgUjIgVScgUjIgVSBSIjoJIzcKICAgICAgICAgICAgdGVtcC51U2lkZVs2XSA9IHNlbGYudVNpZGVbMF07IHRlbXAudVNpZGVbMV0gPSBzZWxmLnVTaWRlWzFdOyB0ZW1wLnVTaWRlWzBdID0gc2VsZi51U2lkZVsyXTsgdGVtcC51U2lkZVs3XSA9IHNlbGYudVNpZGVbM107IHRlbXAudVNpZGVbMl0gPSBzZWxmLnVTaWRlWzRdOyB0ZW1wLnVTaWRlWzVdID0gc2VsZi51U2lkZVs1XTsgdGVtcC51U2lkZVs0XSA9IHNlbGYudVNpZGVbNl07IHRlbXAudVNpZGVbM10gPSBzZWxmLnVTaWRlWzddCgogICAgICAgICAgICB0ZW1wLmJTaWRlWzFdID0gc2VsZi5mU2lkZVs1XTsgdGVtcC5yU2lkZVs2XSA9IHNlbGYuZlNpZGVbNl07IHRlbXAuZlNpZGVbN10gPSBzZWxmLmZTaWRlWzddCiAgICAgICAgICAgIHRlbXAubFNpZGVbNV0gPSBzZWxmLmxTaWRlWzVdOyB0ZW1wLmZTaWRlWzZdID0gc2VsZi5sU2lkZVs2XTsgdGVtcC5yU2lkZVs3XSA9IHNlbGYubFNpZGVbN10KICAgICAgICAgICAgdGVtcC5iU2lkZVs1XSA9IHNlbGYuYlNpZGVbNV07IHRlbXAuYlNpZGVbNl0gPSBzZWxmLmJTaWRlWzZdOyB0ZW1wLmJTaWRlWzddID0gc2VsZi5iU2lkZVs3XQogICAgICAgICAgICB0ZW1wLnJTaWRlWzVdID0gc2VsZi5yU2lkZVs1XTsgdGVtcC5iU2lkZVsyXSA9IHNlbGYuclNpZGVbNl07IHRlbXAubFNpZGVbN10gPSBzZWxmLnJTaWRlWzddCiAgICAgICAgICAgIHNlbGYucmVzZXRTZWxmKFt0ZW1wLnVTaWRlLCB0ZW1wLmZTaWRlLCB0ZW1wLmxTaWRlLCB0ZW1wLmJTaWRlLCB0ZW1wLnJTaWRlLCB0ZW1wLmRTaWRlXSkKCiAgICAgICAgZWxpZiBhID09ICJGJyBVMiBSJyBVIEYgVScgRicgVScgUiBVJyBGIjoJIzgKICAgICAgICAgICAgdGVtcC51U2lkZVswXSA9IHNlbGYudVNpZGVbMF07IHRlbXAudVNpZGVbMV0gPSBzZWxmLnVTaWRlWzFdOyB0ZW1wLnVTaWRlWzZdID0gc2VsZi51U2lkZVsyXTsgdGVtcC51U2lkZVs3XSA9IHNlbGYudVNpZGVbM107IHRlbXAudVNpZGVbMl0gPSBzZWxmLnVTaWRlWzRdOyB0ZW1wLnVTaWRlWzNdID0gc2VsZi51U2lkZVs1XTsgdGVtcC51U2lkZVs0XSA9IHNlbGYudVNpZGVbNl07IHRlbXAudVNpZGVbNV0gPSBzZWxmLnVTaWRlWzddCgogICAgICAgICAgICB0ZW1wLmJTaWRlWzFdID0gc2VsZi5mU2lkZVs1XTsgdGVtcC5iU2lkZVsyXSA9IHNlbGYuZlNpZGVbNl07IHRlbXAuZlNpZGVbN10gPSBzZWxmLmZTaWRlWzddCiAgICAgICAgICAgIHRlbXAuZlNpZGVbNV0gPSBzZWxmLmxTaWRlWzVdOyB0ZW1wLmZTaWRlWzZdID0gc2VsZi5sU2lkZVs2XTsgdGVtcC5yU2lkZVs3XSA9IHNlbGYubFNpZGVbN10KICAgICAgICAgICAgdGVtcC5iU2lkZVs1XSA9IHNlbGYuYlNpZGVbNV07IHRlbXAuYlNpZGVbNl0gPSBzZWxmLmJTaWRlWzZdOyB0ZW1wLmJTaWRlWzddID0gc2VsZi5iU2lkZVs3XQogICAgICAgICAgICB0ZW1wLnJTaWRlWzVdID0gc2VsZi5yU2lkZVs1XTsgdGVtcC5yU2lkZVs2XSA9IHNlbGYuclNpZGVbNl07IHRlbXAuYlNpZGVbM10gPSBzZWxmLnJTaWRlWzddCiAgICAgICAgICAgIHNlbGYucmVzZXRTZWxmKFt0ZW1wLnVTaWRlLCB0ZW1wLmZTaWRlLCB0ZW1wLmxTaWRlLCB0ZW1wLmJTaWRlLCB0ZW1wLnJTaWRlLCB0ZW1wLmRTaWRlXSkKCiAgICAgICAgZWxpZiBhID09ICJSIFUgUicgRicgUiBVIFInIFUnIFInIEYgUjIgVScgUiciOgkjOQogICAgICAgICAgICB0ZW1wLnVTaWRlWzZdID0gc2VsZi51U2lkZVswXTsgdGVtcC51U2lkZVsxXSA9IHNlbGYudVNpZGVbMV07IHRlbXAudVNpZGVbMl0gPSBzZWxmLnVTaWRlWzJdOyB0ZW1wLnVTaWRlWzddID0gc2VsZi51U2lkZVszXTsgdGVtcC51U2lkZVswXSA9IHNlbGYudVNpZGVbNF07IHRlbXAudVNpZGVbM10gPSBzZWxmLnVTaWRlWzVdOyB0ZW1wLnVTaWRlWzRdID0gc2VsZi51U2lkZVs2XTsgdGVtcC51U2lkZVs1XSA9IHNlbGYudVNpZGVbN10KCiAgICAgICAgICAgIHRlbXAuYlNpZGVbMV0gPSBzZWxmLmZTaWRlWzVdOyB0ZW1wLmZTaWRlWzZdID0gc2VsZi5mU2lkZVs2XTsgdGVtcC5mU2lkZVs3XSA9IHNlbGYuZlNpZGVbN10KICAgICAgICAgICAgdGVtcC5mU2lkZVs1XSA9IHNlbGYubFNpZGVbNV07IHRlbXAuclNpZGVbNl0gPSBzZWxmLmxTaWRlWzZdOyB0ZW1wLnJTaWRlWzddID0gc2VsZi5sU2lkZVs3XQogICAgICAgICAgICB0ZW1wLmJTaWRlWzVdID0gc2VsZi5iU2lkZVs1XTsgdGVtcC5iU2lkZVs2XSA9IHNlbGYuYlNpZGVbNl07IHRlbXAuYlNpZGVbN10gPSBzZWxmLmJTaWRlWzddCiAgICAgICAgICAgIHRlbXAuclNpZGVbNV0gPSBzZWxmLnJTaWRlWzVdOyB0ZW1wLmJTaWRlWzJdID0gc2VsZi5yU2lkZVs2XTsgdGVtcC5iU2lkZVszXSA9IHNlbGYuclNpZGVbN10KICAgICAgICAgICAgc2VsZi5yZXNldFNlbGYoW3RlbXAudVNpZGUsIHRlbXAuZlNpZGUsIHRlbXAubFNpZGUsIHRlbXAuYlNpZGUsIHRlbXAuclNpZGUsIHRlbXAuZFNpZGVdKQoKICAgICAgICBlbGlmIGEgPT0gIlInIFUyIFIgVTIgUicgRiBSIFUgUicgVScgUicgRicgUjIiOgkjMTAKICAgICAgICAgICAgdGVtcC51U2lkZVs2XSA9IHNlbGYudVNpZGVbMF07IHRlbXAudVNpZGVbNV0gPSBzZWxmLnVTaWRlWzFdOyB0ZW1wLnVTaWRlWzJdID0gc2VsZi51U2lkZVsyXTsgdGVtcC51U2lkZVsxXSA9IHNlbGYudVNpZGVbM107IHRlbXAudVNpZGVbMF0gPSBzZWxmLnVTaWRlWzRdOyB0ZW1wLnVTaWRlWzNdID0gc2VsZi51U2lkZVs1XTsgdGVtcC51U2lkZVs0XSA9IHNlbGYudVNpZGVbNl07IHRlbXAudVNpZGVbN10gPSBzZWxmLnVTaWRlWzddCgogICAgICAgICAgICB0ZW1wLnJTaWRlWzVdID0gc2VsZi5mU2lkZVs1XTsgdGVtcC5mU2lkZVs2XSA9IHNlbGYuZlNpZGVbNl07IHRlbXAuYlNpZGVbM10gPSBzZWxmLmZTaWRlWzddCiAgICAgICAgICAgIHRlbXAuZlNpZGVbNV0gPSBzZWxmLmxTaWRlWzVdOyB0ZW1wLnJTaWRlWzZdID0gc2VsZi5sU2lkZVs2XTsgdGVtcC5mU2lkZVs3XSA9IHNlbGYubFNpZGVbN10KICAgICAgICAgICAgdGVtcC5iU2lkZVs1XSA9IHNlbGYuYlNpZGVbNV07IHRlbXAuYlNpZGVbNl0gPSBzZWxmLmJTaWRlWzZdOyB0ZW1wLmJTaWRlWzddID0gc2VsZi5iU2lkZVs3XQogICAgICAgICAgICB0ZW1wLmxTaWRlWzVdID0gc2VsZi5yU2lkZVs1XTsgdGVtcC5iU2lkZVsyXSA9IHNlbGYuclNpZGVbNl07IHRlbXAuclNpZGVbN10gPSBzZWxmLnJTaWRlWzddCiAgICAgICAgICAgIHNlbGYucmVzZXRTZWxmKFt0ZW1wLnVTaWRlLCB0ZW1wLmZTaWRlLCB0ZW1wLmxTaWRlLCB0ZW1wLmJTaWRlLCB0ZW1wLnJTaWRlLCB0ZW1wLmRTaWRlXSkKCiAgICAgICAgZWxpZiBhID09ICJGJyBSJyBVJyBSIEYnIFInIFUgRicgVScgRicgVSBGIFIgRjIiOgkjMTEKICAgICAgICAgICAgdGVtcC51U2lkZVswXSA9IHNlbGYudVNpZGVbMF07IHRlbXAudVNpZGVbMV0gPSBzZWxmLnVTaWRlWzFdOyB0ZW1wLnVTaWRlWzRdID0gc2VsZi51U2lkZVsyXTsgdGVtcC51U2lkZVszXSA9IHNlbGYudVNpZGVbM107IHRlbXAudVNpZGVbMl0gPSBzZWxmLnVTaWRlWzRdOyB0ZW1wLnVTaWRlWzddID0gc2VsZi51U2lkZVs1XTsgdGVtcC51U2lkZVs2XSA9IHNlbGYudVNpZGVbNl07IHRlbXAudVNpZGVbNV0gPSBzZWxmLnVTaWRlWzddCgogICAgICAgICAgICB0ZW1wLmZTaWRlWzVdID0gc2VsZi5mU2lkZVs1XTsgdGVtcC5sU2lkZVs2XSA9IHNlbGYuZlNpZGVbNl07IHRlbXAuZlNpZGVbN10gPSBzZWxmLmZTaWRlWzddCiAgICAgICAgICAgIHRlbXAuYlNpZGVbMV0gPSBzZWxmLmxTaWRlWzVdOyB0ZW1wLmZTaWRlWzZdID0gc2VsZi5sU2lkZVs2XTsgdGVtcC5sU2lkZVs3XSA9IHNlbGYubFNpZGVbN10KICAgICAgICAgICAgdGVtcC5iU2lkZVs1XSA9IHNlbGYuYlNpZGVbNV07IHRlbXAuYlNpZGVbNl0gPSBzZWxmLmJTaWRlWzZdOyB0ZW1wLmJTaWRlWzddID0gc2VsZi5iU2lkZVs3XQogICAgICAgICAgICB0ZW1wLnJTaWRlWzVdID0gc2VsZi5yU2lkZVs1XTsgdGVtcC5yU2lkZVs2XSA9IHNlbGYuclNpZGVbNl07IHRlbXAuYlNpZGVbM10gPSBzZWxmLnJTaWRlWzddCiAgICAgICAgICAgIHNlbGYucmVzZXRTZWxmKFt0ZW1wLnVTaWRlLCB0ZW1wLmZTaWRlLCB0ZW1wLmxTaWRlLCB0ZW1wLmJTaWRlLCB0ZW1wLnJTaWRlLCB0ZW1wLmRTaWRlXSkKCiAgICAgICAgZWxpZiBhID09ICJGMiBSMiBVJyBSJyBVJyBSIEYyIFInIFUgUiBGMiBVIFIyIEYyIjoJIzEyCiAgICAgICAgICAgIHRlbXAudVNpZGVbMF0gPSBzZWxmLnVTaWRlWzBdOyB0ZW1wLnVTaWRlWzFdID0gc2VsZi51U2lkZVsxXTsgdGVtcC51U2lkZVs0XSA9IHNlbGYudVNpZGVbMl07IHRlbXAudVNpZGVbN10gPSBzZWxmLnVTaWRlWzNdOyB0ZW1wLnVTaWRlWzZdID0gc2VsZi51U2lkZVs0XTsgdGVtcC51U2lkZVszXSA9IHNlbGYudVNpZGVbNV07IHRlbXAudVNpZGVbMl0gPSBzZWxmLnVTaWRlWzZdOyB0ZW1wLnVTaWRlWzVdID0gc2VsZi51U2lkZVs3XQoKICAgICAgICAgICAgdGVtcC5iU2lkZVsxXSA9IHNlbGYuZlNpZGVbNV07IHRlbXAubFNpZGVbNl0gPSBzZWxmLmZTaWRlWzZdOyB0ZW1wLmZTaWRlWzddID0gc2VsZi5mU2lkZVs3XQogICAgICAgICAgICB0ZW1wLmZTaWRlWzVdID0gc2VsZi5sU2lkZVs1XTsgdGVtcC5iU2lkZVsyXSA9IHNlbGYubFNpZGVbNl07IHRlbXAuclNpZGVbN10gPSBzZWxmLmxTaWRlWzddCiAgICAgICAgICAgIHRlbXAuYlNpZGVbNV0gPSBzZWxmLmJTaWRlWzVdOyB0ZW1wLmJTaWRlWzZdID0gc2VsZi5iU2lkZVs2XTsgdGVtcC5iU2lkZVs3XSA9IHNlbGYuYlNpZGVbN10KICAgICAgICAgICAgdGVtcC5yU2lkZVs1XSA9IHNlbGYuclNpZGVbNV07IHRlbXAuclNpZGVbNl0gPSBzZWxmLnJTaWRlWzZdOyB0ZW1wLmJTaWRlWzNdID0gc2VsZi5yU2lkZVs3XQogICAgICAgICAgICBzZWxmLnJlc2V0U2VsZihbdGVtcC51U2lkZSwgdGVtcC5mU2lkZSwgdGVtcC5sU2lkZSwgdGVtcC5iU2lkZSwgdGVtcC5yU2lkZSwgdGVtcC5kU2lkZV0pCgogICAgICAgIGVsaWYgYSA9PSAiRjIgUjIgVScgRjIgUicgVScgUiBGMiBSJyBVIFIgVSBSMiBGMiI6CSMxMwogICAgICAgICAgICB0ZW1wLnVTaWRlWzBdID0gc2VsZi51U2lkZVswXTsgdGVtcC51U2lkZVsxXSA9IHNlbGYudVNpZGVbMV07IHRlbXAudVNpZGVbNl0gPSBzZWxmLnVTaWRlWzJdOyB0ZW1wLnVTaWRlWzVdID0gc2VsZi51U2lkZVszXTsgdGVtcC51U2lkZVsyXSA9IHNlbGYudVNpZGVbNF07IHRlbXAudVNpZGVbN10gPSBzZWxmLnVTaWRlWzVdOyB0ZW1wLnVTaWRlWzRdID0gc2VsZi51U2lkZVs2XTsgdGVtcC51U2lkZVszXSA9IHNlbGYudVNpZGVbN10KCiAgICAgICAgICAgIHRlbXAubFNpZGVbNV0gPSBzZWxmLmZTaWRlWzVdOyB0ZW1wLmJTaWRlWzJdID0gc2VsZi5mU2lkZVs2XTsgdGVtcC5mU2lkZVs3XSA9IHNlbGYuZlNpZGVbN10KICAgICAgICAgICAgdGVtcC5iU2lkZVsxXSA9IHNlbGYubFNpZGVbNV07IHRlbXAuZlNpZGVbNl0gPSBzZWxmLmxTaWRlWzZdOyB0ZW1wLmJTaWRlWzNdID0gc2VsZi5sU2lkZVs3XQogICAgICAgICAgICB0ZW1wLmJTaWRlWzVdID0gc2VsZi5iU2lkZVs1XTsgdGVtcC5iU2lkZVs2XSA9IHNlbGYuYlNpZGVbNl07IHRlbXAuYlNpZGVbN10gPSBzZWxmLmJTaWRlWzddCiAgICAgICAgICAgIHRlbXAuclNpZGVbNV0gPSBzZWxmLnJTaWRlWzVdOyB0ZW1wLnJTaWRlWzZdID0gc2VsZi5yU2lkZVs2XTsgdGVtcC5sU2lkZVs3XSA9IHNlbGYuclNpZGVbN10KICAgICAgICAgICAgc2VsZi5yZXNldFNlbGYoW3RlbXAudVNpZGUsIHRlbXAuZlNpZGUsIHRlbXAubFNpZGUsIHRlbXAuYlNpZGUsIHRlbXAuclNpZGUsIHRlbXAuZFNpZGVdKQoKICAgICAgICBlbGlmIGEgPT0gIlInIFUnIFIyIFUnIFIyIFUnIFIgVTIgUjIgRiBVIFInIFUnIFIgRicgUiI6CSMxNAogICAgICAgICAgICB0ZW1wLnVTaWRlWzZdID0gc2VsZi51U2lkZVswXTsgdGVtcC51U2lkZVsxXSA9IHNlbGYudVNpZGVbMV07IHRlbXAudVNpZGVbMl0gPSBzZWxmLnVTaWRlWzJdOyB0ZW1wLnVTaWRlWzVdID0gc2VsZi51U2lkZVszXTsgdGVtcC51U2lkZVswXSA9IHNlbGYudVNpZGVbNF07IHRlbXAudVNpZGVbN10gPSBzZWxmLnVTaWRlWzVdOyB0ZW1wLnVTaWRlWzRdID0gc2VsZi51U2lkZVs2XTsgdGVtcC51U2lkZVszXSA9IHNlbGYudVNpZGVbN10KCiAgICAgICAgICAgIHRlbXAubFNpZGVbNV0gPSBzZWxmLmZTaWRlWzVdOyB0ZW1wLmZTaWRlWzZdID0gc2VsZi5mU2lkZVs2XTsgdGVtcC5mU2lkZVs3XSA9IHNlbGYuZlNpZGVbN10KICAgICAgICAgICAgdGVtcC5iU2lkZVsxXSA9IHNlbGYubFNpZGVbNV07IHRlbXAuclNpZGVbNl0gPSBzZWxmLmxTaWRlWzZdOyB0ZW1wLmJTaWRlWzNdID0gc2VsZi5sU2lkZVs3XQogICAgICAgICAgICB0ZW1wLmJTaWRlWzVdID0gc2VsZi5iU2lkZVs1XTsgdGVtcC5iU2lkZVs2XSA9IHNlbGYuYlNpZGVbNl07IHRlbXAuYlNpZGVbN10gPSBzZWxmLmJTaWRlWzddCiAgICAgICAgICAgIHRlbXAuclNpZGVbNV0gPSBzZWxmLnJTaWRlWzVdOyB0ZW1wLmJTaWRlWzJdID0gc2VsZi5yU2lkZVs2XTsgdGVtcC5sU2lkZVs3XSA9IHNlbGYuclNpZGVbN10KICAgICAgICAgICAgc2VsZi5yZXNldFNlbGYoW3RlbXAudVNpZGUsIHRlbXAuZlNpZGUsIHRlbXAubFNpZGUsIHRlbXAuYlNpZGUsIHRlbXAuclNpZGUsIHRlbXAuZFNpZGVdKQoKICAgICAgICBlbGlmIGEgPT0gIlInIEYgUicgVSBSIFUnIEYnIFIyIFUyIFInIFUgUjIgVSBSMiBVIFIiOgkjMTUKICAgICAgICAgICAgdGVtcC51U2lkZVs0XSA9IHNlbGYudVNpZGVbMF07IHRlbXAudVNpZGVbMV0gPSBzZWxmLnVTaWRlWzFdOyB0ZW1wLnVTaWRlWzJdID0gc2VsZi51U2lkZVsyXTsgdGVtcC51U2lkZVs3XSA9IHNlbGYudVNpZGVbM107IHRlbXAudVNpZGVbNl0gPSBzZWxmLnVTaWRlWzRdOyB0ZW1wLnVTaWRlWzNdID0gc2VsZi51U2lkZVs1XTsgdGVtcC51U2lkZVswXSA9IHNlbGYudVNpZGVbNl07IHRlbXAudVNpZGVbNV0gPSBzZWxmLnVTaWRlWzddCgogICAgICAgICAgICB0ZW1wLmJTaWRlWzFdID0gc2VsZi5mU2lkZVs1XTsgdGVtcC5mU2lkZVs2XSA9IHNlbGYuZlNpZGVbNl07IHRlbXAuZlNpZGVbN10gPSBzZWxmLmZTaWRlWzddCiAgICAgICAgICAgIHRlbXAuZlNpZGVbNV0gPSBzZWxmLmxTaWRlWzVdOyB0ZW1wLmJTaWRlWzJdID0gc2VsZi5sU2lkZVs2XTsgdGVtcC5yU2lkZVs3XSA9IHNlbGYubFNpZGVbN10KICAgICAgICAgICAgdGVtcC5iU2lkZVs1XSA9IHNlbGYuYlNpZGVbNV07IHRlbXAuYlNpZGVbNl0gPSBzZWxmLmJTaWRlWzZdOyB0ZW1wLmJTaWRlWzddID0gc2VsZi5iU2lkZVs3XQogICAgICAgICAgICB0ZW1wLnJTaWRlWzVdID0gc2VsZi5yU2lkZVs1XTsgdGVtcC5sU2lkZVs2XSA9IHNlbGYuclNpZGVbNl07IHRlbXAuYlNpZGVbM10gPSBzZWxmLnJTaWRlWzddCiAgICAgICAgICAgIHNlbGYucmVzZXRTZWxmKFt0ZW1wLnVTaWRlLCB0ZW1wLmZTaWRlLCB0ZW1wLmxTaWRlLCB0ZW1wLmJTaWRlLCB0ZW1wLnJTaWRlLCB0ZW1wLmRTaWRlXSkKCiAgICAgICAgZWxpZiBhID09ICJGJyBSIFUgUicgVScgUicgRiBSMiBGIFUnIFInIFUnIFIgVSBGJyBSJyI6CSMxNgogICAgICAgICAgICB0ZW1wLnVTaWRlWzRdID0gc2VsZi51U2lkZVswXTsgdGVtcC51U2lkZVsxXSA9IHNlbGYudVNpZGVbMV07IHRlbXAudVNpZGVbMl0gPSBzZWxmLnVTaWRlWzJdOyB0ZW1wLnVTaWRlWzddID0gc2VsZi51U2lkZVszXTsgdGVtcC51U2lkZVswXSA9IHNlbGYudVNpZGVbNF07IHRlbXAudVNpZGVbNV0gPSBzZWxmLnVTaWRlWzVdOyB0ZW1wLnVTaWRlWzZdID0gc2VsZi51U2lkZVs2XTsgdGVtcC51U2lkZVszXSA9IHNlbGYudVNpZGVbN10KCiAgICAgICAgICAgIHRlbXAuYlNpZGVbMV0gPSBzZWxmLmZTaWRlWzVdOyB0ZW1wLmZTaWRlWzZdID0gc2VsZi5mU2lkZVs2XTsgdGVtcC5mU2lkZVs3XSA9IHNlbGYuZlNpZGVbN10KICAgICAgICAgICAgdGVtcC5sU2lkZVs1XSA9IHNlbGYubFNpZGVbNV07IHRlbXAuclNpZGVbNl0gPSBzZWxmLmxTaWRlWzZdOyB0ZW1wLnJTaWRlWzddID0gc2VsZi5sU2lkZVs3XQogICAgICAgICAgICB0ZW1wLmJTaWRlWzVdID0gc2VsZi5iU2lkZVs1XTsgdGVtcC5iU2lkZVs2XSA9IHNlbGYuYlNpZGVbNl07IHRlbXAuYlNpZGVbN10gPSBzZWxmLmJTaWRlWzddCiAgICAgICAgICAgIHRlbXAuclNpZGVbNV0gPSBzZWxmLnJTaWRlWzVdOyB0ZW1wLmxTaWRlWzZdID0gc2VsZi5yU2lkZVs2XTsgdGVtcC5sU2lkZVs3XSA9IHNlbGYuclNpZGVbN10KICAgICAgICAgICAgc2VsZi5yZXNldFNlbGYoW3RlbXAudVNpZGUsIHRlbXAuZlNpZGUsIHRlbXAubFNpZGUsIHRlbXAuYlNpZGUsIHRlbXAuclNpZGUsIHRlbXAuZFNpZGVdKQoKICAgICAgICBlbGlmIGEgPT0gIlInIFUgUicgRiBSIEYnIFIgVScgUicgRicgVSBGIFIgVSBSJyBVJyBSIjoJIzE3CiAgICAgICAgICAgIHRlbXAudVNpZGVbNF0gPSBzZWxmLnVTaWRlWzBdOyB0ZW1wLnVTaWRlWzVdID0gc2VsZi51U2lkZVsxXTsgdGVtcC51U2lkZVsyXSA9IHNlbGYudVNpZGVbMl07IHRlbXAudVNpZGVbM10gPSBzZWxmLnVTaWRlWzNdOyB0ZW1wLnVTaWRlWzBdID0gc2VsZi51U2lkZVs0XTsgdGVtcC51U2lkZVsxXSA9IHNlbGYudVNpZGVbNV07IHRlbXAudVNpZGVbNl0gPSBzZWxmLnVTaWRlWzZdOyB0ZW1wLnVTaWRlWzddID0gc2VsZi51U2lkZVs3XQoKICAgICAgICAgICAgdGVtcC5mU2lkZVs1XSA9IHNlbGYuZlNpZGVbNV07IHRlbXAuZlNpZGVbNl0gPSBzZWxmLmZTaWRlWzZdOyB0ZW1wLmJTaWRlWzNdID0gc2VsZi5mU2lkZVs3XQogICAgICAgICAgICB0ZW1wLnJTaWRlWzVdID0gc2VsZi5sU2lkZVs1XTsgdGVtcC5yU2lkZVs2XSA9IHNlbGYubFNpZGVbNl07IHRlbXAubFNpZGVbN10gPSBzZWxmLmxTaWRlWzddCiAgICAgICAgICAgIHRlbXAuYlNpZGVbNV0gPSBzZWxmLmJTaWRlWzVdOyB0ZW1wLmJTaWRlWzZdID0gc2VsZi5iU2lkZVs2XTsgdGVtcC5iU2lkZVs3XSA9IHNlbGYuYlNpZGVbN10KICAgICAgICAgICAgdGVtcC5sU2lkZVs1XSA9IHNlbGYuclNpZGVbNV07IHRlbXAubFNpZGVbNl0gPSBzZWxmLnJTaWRlWzZdOyB0ZW1wLnJTaWRlWzddID0gc2VsZi5yU2lkZVs3XQogICAgICAgICAgICBzZWxmLnJlc2V0U2VsZihbdGVtcC51U2lkZSwgdGVtcC5mU2lkZSwgdGVtcC5sU2lkZSwgdGVtcC5iU2lkZSwgdGVtcC5yU2lkZSwgdGVtcC5kU2lkZV0pCgogICAgICAgIGVsaWYgYSA9PSAiUiBVIFInIFUnIFInIEYgUjIgVScgUicgVScgUiBVIFInIEYnIjoJIzE4CiAgICAgICAgICAgIHRlbXAudVNpZGVbNF0gPSBzZWxmLnVTaWRlWzBdOyB0ZW1wLnVTaWRlWzddID0gc2VsZi51U2lkZVsxXTsgdGVtcC51U2lkZVsyXSA9IHNlbGYudVNpZGVbMl07IHRlbXAudVNpZGVbM10gPSBzZWxmLnVTaWRlWzNdOyB0ZW1wLnVTaWRlWzBdID0gc2VsZi51U2lkZVs0XTsgdGVtcC51U2lkZVs1XSA9IHNlbGYudVNpZGVbNV07IHRlbXAudVNpZGVbNl0gPSBzZWxmLnVTaWRlWzZdOyB0ZW1wLnVTaWRlWzFdID0gc2VsZi51U2lkZVs3XQoKICAgICAgICAgICAgdGVtcC5mU2lkZVs1XSA9IHNlbGYuZlNpZGVbNV07IHRlbXAuZlNpZGVbNl0gPSBzZWxmLmZTaWRlWzZdOyB0ZW1wLnJTaWRlWzddID0gc2VsZi5mU2lkZVs3XQogICAgICAgICAgICB0ZW1wLmxTaWRlWzVdID0gc2VsZi5sU2lkZVs1XTsgdGVtcC5yU2lkZVs2XSA9IHNlbGYubFNpZGVbNl07IHRlbXAubFNpZGVbN10gPSBzZWxmLmxTaWRlWzddCiAgICAgICAgICAgIHRlbXAuYlNpZGVbNV0gPSBzZWxmLmJTaWRlWzVdOyB0ZW1wLmJTaWRlWzZdID0gc2VsZi5iU2lkZVs2XTsgdGVtcC5iU2lkZVs3XSA9IHNlbGYuYlNpZGVbN10KICAgICAgICAgICAgdGVtcC5iU2lkZVsxXSA9IHNlbGYuclNpZGVbNV07IHRlbXAubFNpZGVbNl0gPSBzZWxmLnJTaWRlWzZdOyB0ZW1wLmZTaWRlWzddID0gc2VsZi5yU2lkZVs3XQogICAgICAgICAgICBzZWxmLnJlc2V0U2VsZihbdGVtcC51U2lkZSwgdGVtcC5mU2lkZSwgdGVtcC5sU2lkZSwgdGVtcC5iU2lkZSwgdGVtcC5yU2lkZSwgdGVtcC5kU2lkZV0pCgogICAgICAgIGVsaWYgYSA9PSAiRiBSIFUnIFInIFUnIFIgVSBSJyBGJyBSIFUgUicgVScgUicgRiBSIEYnIjoJIzE5CiAgICAgICAgICAgIHRlbXAudVNpZGVbMF0gPSBzZWxmLnVTaWRlWzBdOyB0ZW1wLnVTaWRlWzVdID0gc2VsZi51U2lkZVsxXTsgdGVtcC51U2lkZVsyXSA9IHNlbGYudVNpZGVbMl07IHRlbXAudVNpZGVbM10gPSBzZWxmLnVTaWRlWzNdOyB0ZW1wLnVTaWRlWzZdID0gc2VsZi51U2lkZVs0XTsgdGVtcC51U2lkZVsxXSA9IHNlbGYudVNpZGVbNV07IHRlbXAudVNpZGVbNF0gPSBzZWxmLnVTaWRlWzZdOyB0ZW1wLnVTaWRlWzddID0gc2VsZi51U2lkZVs3XQoKICAgICAgICAgICAgdGVtcC5mU2lkZVs1XSA9IHNlbGYuZlNpZGVbNV07IHRlbXAuZlNpZGVbNl0gPSBzZWxmLmZTaWRlWzZdOyB0ZW1wLmJTaWRlWzNdID0gc2VsZi5mU2lkZVs3XQogICAgICAgICAgICB0ZW1wLnJTaWRlWzVdID0gc2VsZi5sU2lkZVs1XTsgdGVtcC5iU2lkZVsyXSA9IHNlbGYubFNpZGVbNl07IHRlbXAubFNpZGVbN10gPSBzZWxmLmxTaWRlWzddCiAgICAgICAgICAgIHRlbXAuYlNpZGVbNV0gPSBzZWxmLmJTaWRlWzVdOyB0ZW1wLmJTaWRlWzZdID0gc2VsZi5iU2lkZVs2XTsgdGVtcC5iU2lkZVs3XSA9IHNlbGYuYlNpZGVbN10KICAgICAgICAgICAgdGVtcC5sU2lkZVs1XSA9IHNlbGYuclNpZGVbNV07IHRlbXAuclNpZGVbNl0gPSBzZWxmLnJTaWRlWzZdOyB0ZW1wLnJTaWRlWzddID0gc2VsZi5yU2lkZVs3XQogICAgICAgICAgICBzZWxmLnJlc2V0U2VsZihbdGVtcC51U2lkZSwgdGVtcC5mU2lkZSwgdGVtcC5sU2lkZSwgdGVtcC5iU2lkZSwgdGVtcC5yU2lkZSwgdGVtcC5kU2lkZV0pCgogICAgICAgIGVsaWYgYSA9PSAiRicgVTIgRicgVScgUicgRicgUjIgVScgUicgVSBSJyBGIFIgVScgRiI6CSMyMAogICAgICAgICAgICB0ZW1wLnVTaWRlWzBdID0gc2VsZi51U2lkZVswXTsgdGVtcC51U2lkZVsxXSA9IHNlbGYudVNpZGVbMV07IHRlbXAudVNpZGVbNl0gPSBzZWxmLnVTaWRlWzJdOyB0ZW1wLnVTaWRlWzVdID0gc2VsZi51U2lkZVszXTsgdGVtcC51U2lkZVs0XSA9IHNlbGYudVNpZGVbNF07IHRlbXAudVNpZGVbM10gPSBzZWxmLnVTaWRlWzVdOyB0ZW1wLnVTaWRlWzJdID0gc2VsZi51U2lkZVs2XTsgdGVtcC51U2lkZVs3XSA9IHNlbGYudVNpZGVbN10KCiAgICAgICAgICAgIHRlbXAubFNpZGVbNV0gPSBzZWxmLmZTaWRlWzVdOyB0ZW1wLmJTaWRlWzJdID0gc2VsZi5mU2lkZVs2XTsgdGVtcC5mU2lkZVs3XSA9IHNlbGYuZlNpZGVbN10KICAgICAgICAgICAgdGVtcC5mU2lkZVs1XSA9IHNlbGYubFNpZGVbNV07IHRlbXAubFNpZGVbNl0gPSBzZWxmLmxTaWRlWzZdOyB0ZW1wLmJTaWRlWzNdID0gc2VsZi5sU2lkZVs3XQogICAgICAgICAgICB0ZW1wLmJTaWRlWzVdID0gc2VsZi5iU2lkZVs1XTsgdGVtcC5iU2lkZVs2XSA9IHNlbGYuYlNpZGVbNl07IHRlbXAuYlNpZGVbN10gPSBzZWxmLmJTaWRlWzddCiAgICAgICAgICAgIHRlbXAuclNpZGVbNV0gPSBzZWxmLnJTaWRlWzVdOyB0ZW1wLnJTaWRlWzZdID0gc2VsZi5yU2lkZVs2XTsgdGVtcC5yU2lkZVs3XSA9IHNlbGYuclNpZGVbN10KICAgICAgICAgICAgc2VsZi5yZXNldFNlbGYoW3RlbXAudVNpZGUsIHRlbXAuZlNpZGUsIHRlbXAubFNpZGUsIHRlbXAuYlNpZGUsIHRlbXAuclNpZGUsIHRlbXAuZFNpZGVdKQoKICAgICAgICBlbGlmIGEgPT0gIlIgVScgUiBVIEYgUiBGMiBVIEYgVScgRiBSJyBGJyBSJyI6CSMyMQogICAgICAgICAgICB0ZW1wLnVTaWRlWzJdID0gc2VsZi51U2lkZVswXTsgdGVtcC51U2lkZVsxXSA9IHNlbGYudVNpZGVbMV07IHRlbXAudVNpZGVbMF0gPSBzZWxmLnVTaWRlWzJdOyB0ZW1wLnVTaWRlWzddID0gc2VsZi51U2lkZVszXTsgdGVtcC51U2lkZVs0XSA9IHNlbGYudVNpZGVbNF07IHRlbXAudVNpZGVbNV0gPSBzZWxmLnVTaWRlWzVdOyB0ZW1wLnVTaWRlWzZdID0gc2VsZi51U2lkZVs2XTsgdGVtcC51U2lkZVszXSA9IHNlbGYudVNpZGVbN10KCiAgICAgICAgICAgIHRlbXAuYlNpZGVbMV0gPSBzZWxmLmZTaWRlWzVdOyB0ZW1wLnJTaWRlWzZdID0gc2VsZi5mU2lkZVs2XTsgdGVtcC5mU2lkZVs3XSA9IHNlbGYuZlNpZGVbN10KICAgICAgICAgICAgdGVtcC5sU2lkZVs1XSA9IHNlbGYubFNpZGVbNV07IHRlbXAubFNpZGVbNl0gPSBzZWxmLmxTaWRlWzZdOyB0ZW1wLnJTaWRlWzddID0gc2VsZi5sU2lkZVs3XQogICAgICAgICAgICB0ZW1wLmJTaWRlWzVdID0gc2VsZi5iU2lkZVs1XTsgdGVtcC5iU2lkZVs2XSA9IHNlbGYuYlNpZGVbNl07IHRlbXAuYlNpZGVbN10gPSBzZWxmLmJTaWRlWzddCiAgICAgICAgICAgIHRlbXAuclNpZGVbNV0gPSBzZWxmLnJTaWRlWzVdOyB0ZW1wLmZTaWRlWzZdID0gc2VsZi5yU2lkZVs2XTsgdGVtcC5sU2lkZVs3XSA9IHNlbGYuclNpZGVbN10KICAgICAgICAgICAgc2VsZi5yZXNldFNlbGYoW3RlbXAudVNpZGUsIHRlbXAuZlNpZGUsIHRlbXAubFNpZGUsIHRlbXAuYlNpZGUsIHRlbXAuclNpZGUsIHRlbXAuZFNpZGVdKQoKICAgICAgICBlbHNlOiBwcmludCAiQkFEIgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCgoKCiAgICBkZWYgY2hlY2tTb2x2ZWQoc2VsZik6CiAgICAgICAgaWYgc2VsZi51U2lkZVswXSA9PSBzZWxmLnVTaWRlWzFdID09IHNlbGYudVNpZGVbMl0gPT0gc2VsZi51U2lkZVszXSA9PSBzZWxmLnVTaWRlWzRdID09IHNlbGYudVNpZGVbNV0gPT0gc2VsZi51U2lkZVs2XSA9PSBzZWxmLnVTaWRlWzddOgogICAgICAgICAgICBpZiBzZWxmLmZTaWRlWzVdID09IHNlbGYuZlNpZGVbNl0gPT0gc2VsZi5mU2lkZVs3XToKICAgICAgICAgICAgICAgIGlmIHNlbGYubFNpZGVbNV0gPT0gc2VsZi5sU2lkZVs2XSA9PSBzZWxmLmxTaWRlWzddOgogICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuclNpZGVbNV0gPT0gc2VsZi5yU2lkZVs2XSA9PSBzZWxmLnJTaWRlWzddOgogICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmJTaWRlWzNdID09IHNlbGYuYlNpZGVbMl0gPT0gc2VsZi5iU2lkZVsxXToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZGVmIHByaW50TWluKHNlbGYpOgogICAgICAgIHByaW50CgogICAgICAgIHByaW50ICIgICAiLCBzZWxmLmJTaWRlWzNdICsgc2VsZi5iU2lkZVsyXSArIHNlbGYuYlNpZGVbMV0jICsgJ1xuJwoKICAgICAgICBwcmludCAiICAiICsgc2VsZi5sU2lkZVs1XSwgc2VsZi51U2lkZVs1XSArIHNlbGYudVNpZGVbNl0gICArIHNlbGYudVNpZGVbN10sIHNlbGYuclNpZGVbN10KICAgICAgICBwcmludCAiICAiICsgc2VsZi5sU2lkZVs2XSwgc2VsZi51U2lkZVs0XSArICJ1IiAgICAgICAgICAgICArIHNlbGYudVNpZGVbMF0sIHNlbGYuclNpZGVbNl0KICAgICAgICBwcmludCAiICAiICsgc2VsZi5sU2lkZVs3XSwgc2VsZi51U2lkZVszXSArIHNlbGYudVNpZGVbMl0gICArIHNlbGYudVNpZGVbMV0sIHNlbGYuclNpZGVbNV0jICsgJ1xuJyNcbicKCiAgICAgICAgcHJpbnQgIiAgICIsIHNlbGYuZlNpZGVbNV0gKyBzZWxmLmZTaWRlWzZdICsgc2VsZi5mU2lkZVs3XSArICdcbicKCiAgICBkZWYgZG9BbGcoc2VsZiwgYWxnU3RyaW5nKToKICAgICAgICBpYWxnID0gYWxnU3RyaW5nLnJlcGxhY2UoJygnLCAnJykgICAgICNnZXQgcmlkIG9mIHVud2FudGVkCiAgICAgICAgaWFsZyA9IGlhbGcucmVwbGFjZSgnKScsICcnKSAgICAgICAgICAjIG9yIG90aGVyd2lzZSB1bm5lZWRlZCBjaGFyYWN0ZXJzCiAgICAgICAgaWFsZyA9IGlhbGcucmVwbGFjZSgiMiciLCAnMicpICAgICAgICAjIGluY2wuIHdoaXRlc3BhY2UsIHBhcmVuLiwgMidzCiAgICAgICAgaWFsZyA9IGlhbGcucmVwbGFjZSgnICAnLCAnICcpCiAgICAgICAgcGFydHMgPSBpYWxnLnNwbGl0KCcgJykgICAgICAgICAgICAgICAjRGl2aWRlIHRoZSBhbGcgdXAgaW50byBpbmRpdmlkdWFsIG1vdmVzCgogICAgICAgIHBhcnRzLnJldmVyc2UoKQogICAgICAgIAogICAgICAgIGZvciBwYXJ0IGluIHBhcnRzOgogICAgICAgICAgICBpZiBwYXJ0ID09ICAgJ1UnOiAgc2VsZi5kb1UoKTsgc2VsZi5kb1UoKTsgc2VsZi5kb1UoKQogICAgICAgICAgICBlbGlmIHBhcnQgPT0gJ1UyJzogc2VsZi5kb1UoKTsgc2VsZi5kb1UoKQogICAgICAgICAgICBlbGlmIHBhcnQgPT0gIlUnIjogc2VsZi5kb1UoKQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGVsaWYgcGFydCA9PSAnRic6ICBzZWxmLmRvRigpOyBzZWxmLmRvRigpOyBzZWxmLmRvRigpCiAgICAgICAgICAgIGVsaWYgcGFydCA9PSAnRjInOiBzZWxmLmRvRigpOyBzZWxmLmRvRigpCiAgICAgICAgICAgIGVsaWYgcGFydCA9PSAiRiciOiBzZWxmLmRvRigpCiAgICAgICAgICAgIAogICAgICAgICAgICBlbGlmIHBhcnQgPT0gJ1InOiAgc2VsZi5kb1IoKTsgc2VsZi5kb1IoKTsgc2VsZi5kb1IoKQogICAgICAgICAgICBlbGlmIHBhcnQgPT0gJ1IyJzogc2VsZi5kb1IoKTsgc2VsZi5kb1IoKQogICAgICAgICAgICBlbGlmIHBhcnQgPT0gIlInIjogc2VsZi5kb1IoKQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKZm9yIGFsZyBpbiBhbGdzOgogICAgCiAgICBuZXcgPSBNeUN1YmUoKQoKICAgICNuZXcuZG9BbGcoYWxnKQogICAgbmV3LmRvQ3JhenkoYWxnKQogICAgCiAgICBuZXcucHJpbnRNaW4oKQo=