# decompyle3 version 3.9.0
# Python bytecode version base 3.8.0 (3413)
# Decompiled from: Python 3.8.10 (tags/v3.8.10:3d8993a, May  3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)]
# Embedded file name: L_Setup.py
import os, traceback, webview, threading, time
from tobbew import Tobbew
import TL_Setup, util, w32, win32gui, aF12Single, requests
from urllib.parse import urlencode
import json, random, base64
from datetime import datetime
FOLDER_NAME = os.path.basename(os.getcwd())
CLIENT_CODE_REVERT = util.cfgR('DEFAULT', 'CLIENT_CODE')
CLIENT_CODE = util.ccFromReverted(CLIENT_CODE_REVERT)
PROJECT_NAME = 'L_SETUP'
API_ENDPOINT = util.cfgR(PROJECT_NAME, 'API_ENDPOINT')
API_ENDPOINT = API_ENDPOINT.replace('*****.yyy.zzz', 'www.yek21f.xyz')
SHARE_MONEY_SETUP = str(util.cfgR(PROJECT_NAME, 'SHARE_MONEY_SETUP'))
MAX_CREATEROOM = util.cfgR(PROJECT_NAME, 'MAX_CREATEROOM')
ROOM_0_FIX_AFTER = util.cfgR(PROJECT_NAME, 'ROOM_0_FIX_AFTER')
ROOM_0_STOP_AFTER = util.cfgR(PROJECT_NAME, 'ROOM_0_STOP_AFTER')
EXT_DIRS = util.cfgR(PROJECT_NAME, 'EXT_DIRS')
CROOM_WAIT = util.cfgR(PROJECT_NAME, 'CROOM_WAIT')
CHAT_ID = util.cfgR(PROJECT_NAME, 'CHAT_ID')
SAVED_FILE = util.cfgR('DEFAULT', 'SAVED_FILE')
ROOM_PASS = util.cfgR(PROJECT_NAME, 'ROOM_PASS')
END_GAME_DELAY = 6
F12_ADMIN_MCODE = 'fegle'
F12_ADMIN2_MCODE = 'quy'
DEV_SUN = str(util.cfgR(PROJECT_NAME, 'DEV_SUN')) == '1'

class L_SETUP(aF12Single.AppF12Single):
    _destroyed = False

    def __init__(self):
        super().__init__()
        self._loadSaved()
        self.bot = L_SETUP_Bot(self)
        self.bot.app = self
        UI_HTML = self.getUIFile(PROJECT_NAME)
        w = 500
        h = 220
        wvw = webview.create_window(FOLDER_NAME, UI_HTML, width=w,
          height=h,
          js_api=self,
          text_select=True,
          resizable=False,
          on_top=True,
          x=(self._saved['x']),
          y=(self._saved['y']))
        wvw.events.loaded += self.uiOnLoaded
        wvw.events.closed += self.uiOnClosed
        self.wvw = self.bot.wvw = wvw
        util.log('#===== L_SETUP STARTED =====#')

    def hotSetting(self, data):
        if data['p_name'] == 'share_money':
            self.bot.share_money = data['p_value']
            if self.bot.share_money:
                self.bot._jsAll(' window.f12_share_money_playnsave = 1;')
                util.logY('Bật share tiền khi copy')
            else:
                self.bot._jsAll(' window.f12_share_money_playnsave = 0;')
                util.logY('Tắt share tiền khi copy')
        if data['p_name'] == 'max_copy':
            self.bot.max_copy = int(data['p_value'])
            util.logY('Giới hạn COPY: ' + str(self.bot.max_copy))


class L_SETUP_Bot(TL_Setup.TL_SETUP_Bot):
    WIN_X_BACK = 100
    WIN_X_BACK_S = 40
    BROWSER_WIDTH_S = 510
    BROWSER_HEIGHT_S = 320
    GROUP_SLOT = 0
    profs_idx = []
    prof_count = 0
    HOST_1_IDX = ''
    HOST_MAIN_IDX = ''
    _runAutoPlayNSave = False
    _gMain_rid = '0'
    _gMain_bet = '100'
    _runSetupDelay = 0
    _arrHostIdx = []

    def openProfiles(self, data):
        if 'slot' not in data:
            data['slot'] = 5
        if 'uc' not in data:
            data['uc'] = 0
        use_uc = data['uc'] == 1
        self.GROUP_SLOT = int(data['slot'])
        if DEV_SUN:
            self.GROUP_SLOT = 2
        self.HOST_1_IDX = '1'
        self.HOST_MAIN_IDX = str(self.GROUP_SLOT + 1)
        self._arrHostIdx = [self.HOST_1_IDX, self.HOST_MAIN_IDX]
        self.profs_idx = []
        if use_uc:
            self.profs_idx = [
             self.HOST_1_IDX, self.HOST_MAIN_IDX]
        else:
            pass
        for x in range(self.GROUP_SLOT + 2):
            self.profs_idx.append(str(x + 1))
        else:
            self.prof_count = len(self.profs_idx)
            util.logY('Closing opening profiles...')
            for idx in self.profs_idx:
                w = self._W(idx)
                if w is not None:
                    att_name = 'w' + str(idx)
                    self._webQuitByThread(w=w, remove_att_name=att_name)
                all_closed = False

            all_closed or time.sleep(1)
            all_closed = True
            for idx in self.profs_idx:
                w = self._W(idx)
                if w is not None:
                    all_closed = False
            else:
                util.logG('Opening profiles...')
                self._setSite(data['site'])
                self._countOpenProfileDone = 0
                for idx in self.profs_idx:
                    self._initWebGroup(idx)
                else:
                    while True:
                        if self._countOpenProfileDone < self.prof_count:
                            time.sleep(1)

                    return {'load': 'done'}

    def _initWebGroup(self, idx, use_uc=False):

        def __readF12Msg(msg):
            self._hdlBotWarnLogForL(idx, msg)

        def __fnc(idx):
            self.app.uiAddLogInfo('Load Profile: ' + idx)
            dev_prof = {'name':PROJECT_NAME + '_' + idx, 
             'cors':1, 
             'loggingPrefs':'1'}
            if use_uc:
                dev_prof['uc'] = '1'
            if len(EXT_DIRS) > 0:
                dev_prof['ext_dirs'] = EXT_DIRS
            w = Tobbew(profile=dev_prof)
            att_name = 'w' + idx
            setattr(self, att_name, w)
            time.sleep(5)
            dt_string = datetime.now().strftime('%d/%m/%Y%H:%M:%S')
            title = 'F12-' + str(dt_string) + '_' + idx
            self._js("document.title ='" + title + "'", w)
            time.sleep(1)
            hwnd = w32.findChrome(title)
            att_name += 'hwnd'
            if hwnd != 0:
                setattr(self, att_name, hwnd)
                self.app.uiAddLogInfo('Load Profile ' + idx + ' DONE')
            else:
                util.logR('CANNOT GET hwnd!!!' + idx)
            time.sleep(1)
            self.app.uiAddLogInfo('Web ' + idx + ' open PLAY URL')
            w.open_url(self.play_url)
            time.sleep(2)
            self.app.uiAddLogInfo('Web ' + idx + ' init done')
            self._countOpenProfileDone += 1
            w.startListenF12Msg(_L_SETUP_Bot__readF12Msg)

        thr = threading.Thread(target=_L_SETUP_Bot__fnc, args=(idx,), daemon=True)
        thr.start()

    def setBrowserViewMode(self, data):
        mode = str(data['mode'])

        def __fnc(idx):
            x = int(idx) - 1
            if 'arrage' in mode:
                if self.prof_count == 7:
                    if idx == self.HOST_1_IDX or idx == '2' or idx == '3' or idx == '4':
                        loc_x = x * (self.BROWSER_WIDTH_S - self.WIN_X_BACK_S)
                        loc_y = 0
                    else:
                        if idx == '5':
                            loc_x = 3 * (self.BROWSER_WIDTH_S - self.WIN_X_BACK_S)
                            loc_y = self.BROWSER_HEIGHT_S
                        else:
                            if idx == self.HOST_MAIN_IDX or idx == '7' or idx == '8' or idx == '9':
                                loc_x = x % 5 * (self.BROWSER_WIDTH_S - self.WIN_X_BACK_S)
                                loc_y = self.BROWSER_HEIGHT_S
                else:
                    if self.prof_count == 11:
                        if x < 8:
                            loc_x = x % 4 * (self.BROWSER_WIDTH_S - self.WIN_X_BACK_S)
                            loc_y = int(x / 4) * self.BROWSER_HEIGHT_S
                        else:
                            if idx == '9':
                                loc_x = 3 * (self.BROWSER_WIDTH_S - self.WIN_X_BACK_S)
                                loc_y = 2 * self.BROWSER_HEIGHT_S
                            else:
                                if x >= 9:
                                    loc_x = x % 9 * (self.BROWSER_WIDTH_S - self.WIN_X_BACK_S)
                                    loc_y = 2 * self.BROWSER_HEIGHT_S
                    else:
                        if self.prof_count == 18:
                            self.WIN_X_BACK_S = 125
                            if x < 9:
                                loc_x = -10 + x % 9 * (self.BROWSER_WIDTH_S - self.WIN_X_BACK_S)
                                loc_y = 0
                            else:
                                loc_x = -10 + (x - 9) % 5 * (self.BROWSER_WIDTH_S - self.WIN_X_BACK_S)
                                loc_y = (1 + int((x - 9) / 5)) * self.BROWSER_HEIGHT_S
                        else:
                            loc_x = x % 2 * (self.BROWSER_WIDTH_S - self.WIN_X_BACK_S)
                            loc_y = int(x / 2) * self.BROWSER_HEIGHT_S
                w_hwnd = getattr(self, 'w' + idx + 'hwnd')
                x0, y0, x1, y1 = win32gui.GetWindowRect(w_hwnd)
                w_width = self.BROWSER_WIDTH_S
                w_height = self.BROWSER_HEIGHT_S
                win32gui.MoveWindow(w_hwnd, loc_x, loc_y, w_width, w_height, True)
            if mode == 'resize':
                w_hwnd = getattr(self, 'w' + idx + 'hwnd')
                x0, y0, x1, y1 = win32gui.GetWindowRect(w_hwnd)
                w_width = self.BROWSER_WIDTH_S
                w_height = self.BROWSER_HEIGHT_S
                win32gui.MoveWindow(w_hwnd, x0, y0, w_width, w_height, True)

        for idx in self.profs_idx:
            _L_SETUP_Bot__fnc(idx)

    def createRoomNFind(self, data):
        self.main_money = data['main_money']
        if 'share_money' in data:
            self.share_money = data['share_money']
        if 'max_copy' in data:
            self.max_copy = int(data['max_copy'])
        self._runAutoCreateNFind = True

        def __findHostThr(idxh, arr_idxc):

            def __f():
                if self.stepFindHost_done:
                    util.logP('> > Time is over or host is out... skip!')
                else:
                    rid = self._b52GetRoomID(idxh)
                    buy_in_money = 30 * int(self.min_money)
                    if idxh == self.HOST_MAIN_IDX or self.selected_site == 'rik':
                        buy_in_money = 30 * int(self.main_money)
                    for idxc in arr_idxc:
                        rpass = ROOM_PASS
                        if int(idxh) > self.GROUP_SLOT or self.selected_site == '52':
                            rpass = ''
                        else:
                            js_code = 'f12FindRoomIDLieng(' + str(rid) + ',' + str(buy_in_money) + ",'" + rpass + "');"
                            self._W(idxc)._js(js_code)

            thr = threading.Thread(target=_L_SETUP_Bot__f, args=(), daemon=True)
            thr.start()

        def __hdlErrRoom(idxh):
            time.sleep(1)
            self._W(idxh)._js(' joinRoomBet(500,107); ')
            time.sleep(1)
            self._W(idxh)._js(' sendLeaveRoom(); ')
            time.sleep(1)

        self._jsAll(' window.f12_setup_mode = "1";')
        self._jsAll(' window.f12_auto_start_game = "0";')
        self._jsAll(" f12SetTurboMode('1'); f12SetPreventLogout('1'); ")
        self._jsAll(' window.fSkpSvccMn = 1;')
        self._jsAll(' window.f12_share_money_setup = ' + SHARE_MONEY_SETUP + ';')
        if self.share_money:
            self._jsAll(' window.f12_share_money_playnsave = 1;')
        else:
            self._jsAll(' window.f12_share_money_playnsave = 0;')
        self._host_list_enemy_dn = {self.HOST_1_IDX: [], 
         self.HOST_MAIN_IDX: []}
        host_1_dn = self._b52GetDisplayName(self.HOST_1_IDX)
        list_enemy_dn = []
        arr_enemy_idx = ['2']
        if self.prof_count == 7 or self.prof_count == 10:
            arr_enemy_idx = [
             '2', '3', '4', '5']
        else:
            if self.prof_count == 11 or self.prof_count == 18:
                arr_enemy_idx = [
                 '2','3','4','5','6','7','8','9']
        for idx in arr_enemy_idx:
            list_enemy_dn.append(self._b52GetDisplayName(idx))
            self._W(idx)._js(' window.f12_setup_mode_enemy_dn = "' + host_1_dn + '"; ')
        else:
            self._host_list_enemy_dn[self.HOST_1_IDX] = list_enemy_dn
            self._W(self.HOST_1_IDX)._js(' window.f12_setup_mode_enemy_dns = ["' + '","'.join(list_enemy_dn) + '"]; ')
            host_MAIN_dn = self._b52GetDisplayName(self.HOST_MAIN_IDX)
            list_enemy_dn = []
            arr_enemy_idx = ['4']
            if self.prof_count == 7:
                arr_enemy_idx = [
                 '7']
            else:
                if self.prof_count == 10:
                    arr_enemy_idx = [
                     '7', '8', '9', '10']
                else:
                    if self.prof_count == 11:
                        arr_enemy_idx = [
                         '11']
                    else:
                        if self.prof_count == 18:
                            arr_enemy_idx = [
                             '11','12','13','14','15','16','17','18']
            for idx in arr_enemy_idx:
                list_enemy_dn.append(self._b52GetDisplayName(idx))
                self._W(idx)._js(' window.f12_setup_mode_enemy_dn = "' + host_MAIN_dn + '"; ')
            else:
                self._host_list_enemy_dn[self.HOST_MAIN_IDX] = list_enemy_dn
                self._W(self.HOST_MAIN_IDX)._js(' window.f12_setup_mode_enemy_dns = ["' + '","'.join(list_enemy_dn) + '"]; ')
                success = False
                count_createRoom = 0
                count_roomError = 0
                while self._runAutoCreateNFind and not success:
                    if self._runSetupDelay > 0:
                        util.logY('Setup delay:' + str(self._runSetupDelay) + ' sec')
                        time.sleep(self._runSetupDelay)
                        self._runSetupDelay = 0
                        util.log('Setup delay done!')
                        time.sleep(1)
                    else:
                        util.logG('> > > 1 Loop START < < < ')
                        util.logY('Step 1: Create Room and check >')
                        step_done = False
                        rID = {self.HOST_1_IDX: -10, 
                         self.HOST_MAIN_IDX: -20}
                        chk_room_failed_count = {self.HOST_1_IDX: 0, 
                         self.HOST_MAIN_IDX: 0}
                        while True:
                            while not step_done:
                                count_createRoom += 1
                                util.logY('Count createRoom:' + str(count_createRoom))
                                if count_createRoom > MAX_CREATEROOM:
                                    self._runAutoCreateNFind = False
                                else:
                                    rID = {self.HOST_1_IDX: -10, 
                                     self.HOST_MAIN_IDX: -20}
                                    for idx in self._arrHostIdx:
                                        self._b52OutRoom(idx)

                            time.sleep(1)
                            for idx in self._arrHostIdx:
                                if idx == self.HOST_MAIN_IDX or self.selected_site == 'rik':
                                    money = self.main_money
                                else:
                                    money = self.min_money
                                thrCR = threading.Thread(target=(self._b52L_CreateRoom), args=(idx, money), daemon=True)
                                thrCR.start()
                            else:
                                time.sleep(CROOM_WAIT)
                                if self._runAutoCreateNFind:
                                    rID_merged_str = ''
                                    for idx in self._arrHostIdx:
                                        rID[idx] = self._b52GetRoomID(idx)
                                        rID_merged_str += ' ' + str(rID[idx])
                                    else:
                                        if rID[self.HOST_MAIN_IDX] - 1 == rID[self.HOST_1_IDX] or rID[self.HOST_MAIN_IDX] + 1 == rID[self.HOST_1_IDX]:
                                            util.logG('ROOM OK >>> ' + rID_merged_str)
                                            step_done = True
                                            count_roomError = 0
                                        else:
                                            util.log('ROOM Fail: ' + rID_merged_str)
                                            if self._runAutoCreateNFind:
                                                hasErrRoom = False
                                                for idx in self._arrHostIdx:
                                                    self._b52OutRoom(idx)
                                                    if rID[idx] == 0:
                                                        hasErrRoom = True
                                                        chk_room_failed_count[idx] += 1
                                                        if chk_room_failed_count[idx] >= ROOM_0_FIX_AFTER:
                                                            thrErrR = threading.Thread(target=_L_SETUP_Bot__hdlErrRoom, args=idx, daemon=True)
                                                            thrErrR.start()
                                                else:
                                                    time.sleep(3)
                                                    if hasErrRoom:
                                                        count_roomError += 1
                                                        if count_roomError >= ROOM_0_STOP_AFTER:
                                                            util.logY('Room Error ' + str(count_roomError) + ' times -> Stop!!!')
                                                            self.terminateThreadFind()
                                                            time.sleep(1)
                                                            self.allOutRoom()
                                                            time.sleep(1)
                                                        else:
                                                            time.sleep(5)
                                                    if self._runSetupDelay > 0:
                                                        util.logY('Setup delay:' + str(self._runSetupDelay) + ' sec')
                                                        time.sleep(self._runSetupDelay)
                                                        self._runSetupDelay = 0
                                                        util.log('Setup delay done!')
                                                        time.sleep(1)

                                if not self._runAutoCreateNFind:
                                    step_done = True

                util.logG('*** Step 1 DONE')
                if not self._runAutoCreateNFind:
                    self.terminateThreadFind()
                else:
                    util.logY('Step 2: find host >')
                    self.stepFindHost_done = False
                    if self.prof_count == 4:
                        _L_SETUP_Bot__findHostThr(self.HOST_1_IDX, ['2'])
                        _L_SETUP_Bot__findHostThr(self.HOST_MAIN_IDX, ['4'])
                    else:
                        if self.prof_count == 7:
                            _L_SETUP_Bot__findHostThr(self.HOST_1_IDX, ['2', '3', '4', '5'])
                            _L_SETUP_Bot__findHostThr(self.HOST_MAIN_IDX, ['7'])
                        else:
                            _L_SETUP_Bot__findHostThr(self.HOST_1_IDX, ['2','3','4','5','6','7','8','9'])
                            if self.prof_count == 11:
                                _L_SETUP_Bot__findHostThr(self.HOST_MAIN_IDX, ['11'])
                            else:
                                _L_SETUP_Bot__findHostThr(self.HOST_MAIN_IDX, ['11','12','13','14','15','16','17','18'])
                    time.sleep(3)
                    count = 0
                    all_matched = False
                self.stepFindHost_done or count += 1
                all_matched = True
                for idx in self._arrHostIdx:
                    host_arr_enemy_dn = self._b52GetEnemyJoinRoomDN(idx)
                    if len(host_arr_enemy_dn) == len(self._host_list_enemy_dn[idx]):
                        for enemy_dn in host_arr_enemy_dn:
                            if enemy_dn not in self._host_list_enemy_dn[idx]:
                                self.stepFindHost_done = True
                                continue

                    else:
                        while len(host_arr_enemy_dn) > len(self._host_list_enemy_dn[idx]):
                            all_matched = False
                            self.stepFindHost_done = True
                            continue

                        all_matched = False
                else:
                    if all_matched:
                        self.stepFindHost_done = True
                    else:
                        util.log('not match, wait..')
                        time.sleep(1)

        if self._runAutoCreateNFind and not count > 2:
            while not self._b52GetRoomID(self.HOST_1_IDX) == 0:
                if self._b52GetRoomID(self.HOST_MAIN_IDX) == 0:
                    pass
                util.log('end step 2')
                self.stepFindHost_done = True

            util.logG('*** stepFindHost_done: ' + str(all_matched))
            if not self._runAutoCreateNFind:
                self.terminateThreadFind()
        else:
            while all_matched:
                util.log('All Host-Client is Matched!!')
                util.logY('Step 3: startRoomNCheck >')
                success = self.startRoomNCheck()
                if not success:
                    end_all_game = False
                    arr_done_idx = []
                    while self._runAutoCreateNFind:
                        while not end_all_game:
                            end_all_game = True
                            for idx in self._arrHostIdx:
                                if self._b52CheckIsAutoFight(idx):
                                    end_all_game = False
                                else:
                                    if idx not in arr_done_idx:
                                        arr_done_idx.append(idx)
                                        util.logY('Autofight ' + idx + ' done')
                                        thr = threading.Thread(target=(self._b52GroupOutRoom), args=(idx, True), daemon=True)
                                        thr.start()
                                    time.sleep(1)
                            else:
                                time.sleep(END_GAME_DELAY)
                                util.logG('*** Auto Play done!!')
                                self.allOutRoom()
                                time.sleep(1)
                                delay = random.randint(5, 10)
                                util.log('wait ' + str(delay) + 's..')
                                for i in range(delay * 2):
                                    time.sleep(0.5)
                                    if not self._runAutoCreateNFind:
                                        break
                                else:
                                    self.stopFind()
                                    time.sleep(1)

                    util.log('Not Match All Host-Client, skip')
                    self._b52GroupOutRoom(self.HOST_1_IDX)
                    self._b52GroupOutRoom(self.HOST_MAIN_IDX)
                    time.sleep(1)
                    self._jsAllClient('f12StopFindHostAccOrRoomID();')
                    time.sleep(1)
                    self._b52GroupOutRoom(self.HOST_1_IDX)
                    self._b52GroupOutRoom(self.HOST_MAIN_IDX)
                    if self._runSetupDelay > 0:
                        util.logY('Setup delay:' + str(self._runSetupDelay) + ' sec')
                        time.sleep(self._runSetupDelay)
                        self._runSetupDelay = 0
                        util.log('Setup delay done!')
                        time.sleep(1)

            self._runAutoCreateNFind = False
            util.logG('_runAutoCreateNFind DONE !!')

    def startRoomNCheck--- This code section failed: ---

 L. 638         0  LOAD_FAST                'self'
                2  LOAD_METHOD              _jsAll
                4  LOAD_STR                 ' window.f12_last_3cards = [];'
                6  CALL_METHOD_1         1  ''
                8  POP_TOP          

 L. 640        10  LOAD_CONST               0
               12  STORE_FAST               'count_wait'
             14_0  COME_FROM            74  '74'

 L. 641        14  LOAD_FAST                'self'
               16  LOAD_ATTR                _runAutoCreateNFind
               18  POP_JUMP_IF_FALSE    76  'to 76'
               20  LOAD_FAST                'count_wait'
               22  LOAD_CONST               10
               24  COMPARE_OP               <
               26  POP_JUMP_IF_FALSE    76  'to 76'

 L. 642        28  LOAD_FAST                'self'
               30  LOAD_METHOD              _b52TableBtnIsActive
               32  LOAD_FAST                'self'
               34  LOAD_ATTR                HOST_1_IDX
               36  LOAD_STR                 'startBtn'
               38  CALL_METHOD_2         2  ''

 L. 641        40  POP_JUMP_IF_FALSE    56  'to 56'

 L. 643        42  LOAD_FAST                'self'
               44  LOAD_METHOD              _b52TableBtnIsActive
               46  LOAD_FAST                'self'
               48  LOAD_ATTR                HOST_MAIN_IDX
               50  LOAD_STR                 'startBtn'
               52  CALL_METHOD_2         2  ''

 L. 641        54  POP_JUMP_IF_TRUE     76  'to 76'
             56_0  COME_FROM            40  '40'

 L. 644        56  LOAD_GLOBAL              time
               58  LOAD_METHOD              sleep
               60  LOAD_CONST               0.5
               62  CALL_METHOD_1         1  ''
               64  POP_TOP          

 L. 645        66  LOAD_FAST                'count_wait'
               68  LOAD_CONST               1
               70  INPLACE_ADD      
               72  STORE_FAST               'count_wait'
               74  JUMP_LOOP            14  'to 14'
             76_0  COME_FROM            54  '54'
             76_1  COME_FROM            26  '26'
             76_2  COME_FROM            18  '18'

 L. 647        76  LOAD_FAST                'self'
               78  LOAD_ATTR                _runAutoCreateNFind
               80  POP_JUMP_IF_TRUE     86  'to 86'

 L. 648        82  LOAD_CONST               False
               84  RETURN_VALUE     
             86_0  COME_FROM            80  '80'

 L. 650        86  LOAD_GLOBAL              util
               88  LOAD_METHOD              logY
               90  LOAD_STR                 "All host has START BUTTON!! Let's go"
               92  CALL_METHOD_1         1  ''
               94  POP_TOP          

 L. 652        96  LOAD_FAST                'self'
               98  LOAD_METHOD              _b52L_SendStart
              100  LOAD_FAST                'self'
              102  LOAD_ATTR                HOST_1_IDX
              104  CALL_METHOD_1         1  ''
              106  POP_TOP          

 L. 653       108  LOAD_FAST                'self'
              110  LOAD_METHOD              _b52L_SendStart
              112  LOAD_FAST                'self'
              114  LOAD_ATTR                HOST_MAIN_IDX
              116  CALL_METHOD_1         1  ''
              118  POP_TOP          

 L. 655       120  LOAD_CONST               0
              122  STORE_FAST               'count'

 L. 656       124  BUILD_MAP_0           0 
              126  STORE_FAST               'cs_all'

 L. 657       128  LOAD_CONST               0
              130  STORE_FAST               'count_has_cs'

 L. 658       132  LOAD_GLOBAL              util
              134  LOAD_METHOD              logG
              136  LOAD_STR                 'Wait for cards..'
              138  CALL_METHOD_1         1  ''
              140  POP_TOP          
            142_0  COME_FROM           270  '270'

 L. 659       142  LOAD_FAST                'self'
              144  LOAD_ATTR                _runAutoCreateNFind
          146_148  POP_JUMP_IF_FALSE   272  'to 272'
              150  LOAD_FAST                'count'
              152  LOAD_CONST               10
              154  COMPARE_OP               <
          156_158  POP_JUMP_IF_FALSE   272  'to 272'
              160  LOAD_FAST                'count_has_cs'
              162  LOAD_FAST                'self'
              164  LOAD_ATTR                prof_count
              166  COMPARE_OP               <
          168_170  POP_JUMP_IF_FALSE   272  'to 272'

 L. 660       172  LOAD_GLOBAL              time
              174  LOAD_METHOD              sleep
              176  LOAD_CONST               1
              178  CALL_METHOD_1         1  ''
              180  POP_TOP          

 L. 661       182  LOAD_FAST                'count'
              184  LOAD_CONST               1
              186  INPLACE_ADD      
              188  STORE_FAST               'count'

 L. 663       190  LOAD_CONST               0
              192  STORE_FAST               'count_has_cs'

 L. 664       194  LOAD_GLOBAL              range
              196  LOAD_FAST                'self'
              198  LOAD_ATTR                prof_count
              200  CALL_FUNCTION_1       1  ''
              202  GET_ITER         
            204_0  COME_FROM           268  '268'
            204_1  COME_FROM           244  '244'
            204_2  COME_FROM           236  '236'
              204  FOR_ITER            270  'to 270'
              206  STORE_FAST               'x'

 L. 665       208  LOAD_GLOBAL              str
              210  LOAD_FAST                'x'
              212  LOAD_CONST               1
              214  BINARY_ADD       
              216  CALL_FUNCTION_1       1  ''
              218  STORE_FAST               'idx'

 L. 666       220  LOAD_FAST                'self'
              222  LOAD_METHOD              _b52GetLast3Cards
              224  LOAD_FAST                'idx'
              226  CALL_METHOD_1         1  ''
              228  STORE_FAST               'last3_cs'

 L. 667       230  LOAD_FAST                'last3_cs'
              232  LOAD_STR                 ''
              234  COMPARE_OP               !=
              236  POP_JUMP_IF_FALSE_LOOP   204  'to 204'
              238  LOAD_FAST                'last3_cs'
              240  LOAD_STR                 'None'
              242  COMPARE_OP               !=
              244  POP_JUMP_IF_FALSE_LOOP   204  'to 204'

 L. 668       246  LOAD_FAST                'last3_cs'
              248  LOAD_METHOD              split
              250  LOAD_STR                 ','
              252  CALL_METHOD_1         1  ''
              254  LOAD_FAST                'cs_all'
              256  LOAD_FAST                'idx'
              258  STORE_SUBSCR     

 L. 669       260  LOAD_FAST                'count_has_cs'
              262  LOAD_CONST               1
              264  INPLACE_ADD      
              266  STORE_FAST               'count_has_cs'
              268  JUMP_LOOP           204  'to 204'
            270_0  COME_FROM           204  '204'
              270  JUMP_LOOP           142  'to 142'
            272_0  COME_FROM           168  '168'
            272_1  COME_FROM           156  '156'
            272_2  COME_FROM           146  '146'

 L. 673       272  LOAD_FAST                'self'
              274  LOAD_ATTR                _runAutoCreateNFind
          276_278  POP_JUMP_IF_TRUE    284  'to 284'

 L. 674       280  LOAD_CONST               True
              282  RETURN_VALUE     
            284_0  COME_FROM           276  '276'

 L. 678       284  LOAD_FAST                'self'
              286  LOAD_METHOD              _b52_saveUserIDForAllProfiles
              288  CALL_METHOD_0         0  ''
              290  POP_TOP          

 L. 681       292  LOAD_FAST                'self'
              294  LOAD_METHOD              _b52_getPlayersPlaying
              296  LOAD_FAST                'self'
              298  LOAD_ATTR                HOST_1_IDX
              300  CALL_METHOD_1         1  ''
              302  STORE_FAST               'g_1_uids'

 L. 682       304  LOAD_FAST                'self'
              306  LOAD_METHOD              _b52_getPlayersPlaying
              308  LOAD_FAST                'self'
              310  LOAD_ATTR                HOST_MAIN_IDX
              312  CALL_METHOD_1         1  ''
              314  STORE_FAST               'g_MAIN_uids'

 L. 683       316  LOAD_CONST               0
              318  STORE_FAST               'count'
            320_0  COME_FROM           428  '428'

 L. 684       320  LOAD_FAST                'count'
              322  LOAD_CONST               10
              324  COMPARE_OP               <
          326_328  POP_JUMP_IF_FALSE   432  'to 432'
              330  LOAD_GLOBAL              len
              332  LOAD_FAST                'g_1_uids'
              334  CALL_FUNCTION_1       1  ''
              336  LOAD_CONST               0
              338  COMPARE_OP               ==
          340_342  POP_JUMP_IF_TRUE    358  'to 358'
              344  LOAD_GLOBAL              len
              346  LOAD_FAST                'g_MAIN_uids'
              348  CALL_FUNCTION_1       1  ''
              350  LOAD_CONST               0
              352  COMPARE_OP               ==
          354_356  POP_JUMP_IF_FALSE   432  'to 432'
            358_0  COME_FROM           340  '340'

 L. 685       358  LOAD_GLOBAL              len
              360  LOAD_FAST                'g_1_uids'
              362  CALL_FUNCTION_1       1  ''
              364  LOAD_CONST               0
              366  COMPARE_OP               ==
          368_370  POP_JUMP_IF_FALSE   384  'to 384'

 L. 686       372  LOAD_FAST                'self'
              374  LOAD_METHOD              _b52_getPlayersPlaying
              376  LOAD_FAST                'self'
              378  LOAD_ATTR                HOST_1_IDX
              380  CALL_METHOD_1         1  ''
              382  STORE_FAST               'g_1_uids'
            384_0  COME_FROM           368  '368'

 L. 687       384  LOAD_GLOBAL              len
              386  LOAD_FAST                'g_MAIN_uids'
              388  CALL_FUNCTION_1       1  ''
              390  LOAD_CONST               0
              392  COMPARE_OP               ==
          394_396  POP_JUMP_IF_FALSE   410  'to 410'

 L. 688       398  LOAD_FAST                'self'
              400  LOAD_METHOD              _b52_getPlayersPlaying
              402  LOAD_FAST                'self'
              404  LOAD_ATTR                HOST_MAIN_IDX
              406  CALL_METHOD_1         1  ''
              408  STORE_FAST               'g_MAIN_uids'
            410_0  COME_FROM           394  '394'

 L. 689       410  LOAD_GLOBAL              time
              412  LOAD_METHOD              sleep
              414  LOAD_CONST               0.5
              416  CALL_METHOD_1         1  ''
              418  POP_TOP          

 L. 690       420  LOAD_FAST                'count'
              422  LOAD_CONST               1
              424  INPLACE_ADD      
              426  STORE_FAST               'count'
          428_430  JUMP_LOOP           320  'to 320'
            432_0  COME_FROM           354  '354'
            432_1  COME_FROM           326  '326'

 L. 693       432  BUILD_LIST_0          0 
              434  STORE_FAST               'g_1_sorted_idx'

 L. 694       436  LOAD_FAST                'g_1_uids'
              438  GET_ITER         
            440_0  COME_FROM           484  '484'
            440_1  COME_FROM           470  '470'
            440_2  COME_FROM           460  '460'
              440  FOR_ITER            488  'to 488'
              442  STORE_FAST               'uid'

 L. 695       444  LOAD_FAST                'self'
              446  LOAD_METHOD              _b52_getIdxOfUserID
              448  LOAD_FAST                'uid'
              450  CALL_METHOD_1         1  ''
              452  STORE_FAST               'sorted_idx'

 L. 696       454  LOAD_FAST                'sorted_idx'
              456  LOAD_STR                 'None'
              458  COMPARE_OP               !=
          460_462  POP_JUMP_IF_FALSE_LOOP   440  'to 440'
              464  LOAD_FAST                'sorted_idx'
              466  LOAD_FAST                'g_1_sorted_idx'
              468  COMPARE_OP               not-in
          470_472  POP_JUMP_IF_FALSE_LOOP   440  'to 440'

 L. 697       474  LOAD_FAST                'g_1_sorted_idx'
              476  LOAD_METHOD              append
              478  LOAD_FAST                'sorted_idx'
              480  CALL_METHOD_1         1  ''
              482  POP_TOP          
          484_486  JUMP_LOOP           440  'to 440'
            488_0  COME_FROM           440  '440'

 L. 700       488  BUILD_LIST_0          0 
              490  STORE_FAST               'g_1_cs'

 L. 701       492  LOAD_FAST                'g_1_sorted_idx'
              494  GET_ITER         
            496_0  COME_FROM           514  '514'
              496  FOR_ITER            518  'to 518'
              498  STORE_FAST               'sorted_idx'

 L. 702       500  LOAD_FAST                'g_1_cs'
              502  LOAD_METHOD              append
              504  LOAD_FAST                'cs_all'
              506  LOAD_FAST                'sorted_idx'
              508  BINARY_SUBSCR    
              510  CALL_METHOD_1         1  ''
              512  POP_TOP          
          514_516  JUMP_LOOP           496  'to 496'
            518_0  COME_FROM           496  '496'

 L. 703       518  LOAD_GLOBAL              len
              520  LOAD_FAST                'g_1_cs'
              522  CALL_FUNCTION_1       1  ''
              524  LOAD_FAST                'self'
              526  LOAD_ATTR                GROUP_SLOT
              528  COMPARE_OP               !=
          530_532  POP_JUMP_IF_FALSE   556  'to 556'

 L. 704       534  LOAD_GLOBAL              util
              536  LOAD_METHOD              log
              538  LOAD_STR                 'Join error -> do auto play and quit..'
              540  CALL_METHOD_1         1  ''
              542  POP_TOP          

 L. 705       544  LOAD_FAST                'self'
              546  LOAD_METHOD              allPlay1Round
              548  CALL_METHOD_0         0  ''
              550  POP_TOP          

 L. 706       552  LOAD_CONST               False
              554  RETURN_VALUE     
            556_0  COME_FROM           530  '530'

 L. 710       556  LOAD_CONST               False
              558  STORE_FAST               'success'

 L. 712       560  SETUP_FINALLY       602  'to 602'

 L. 713       562  LOAD_FAST                'cs_all'
              564  LOAD_FAST                'self'
              566  LOAD_ATTR                HOST_MAIN_IDX
              568  BINARY_SUBSCR    
              570  STORE_FAST               'm_cs'

 L. 714       572  LOAD_GLOBAL              str
              574  LOAD_GLOBAL              int
              576  LOAD_FAST                'self'
              578  LOAD_ATTR                HOST_MAIN_IDX
              580  CALL_FUNCTION_1       1  ''
              582  LOAD_CONST               1
              584  BINARY_ADD       
              586  CALL_FUNCTION_1       1  ''
              588  STORE_FAST               'm_p_idx'

 L. 715       590  LOAD_FAST                'cs_all'
              592  LOAD_FAST                'm_p_idx'
              594  BINARY_SUBSCR    
              596  STORE_FAST               'm_p_cs'
              598  POP_BLOCK        
              600  JUMP_FORWARD        662  'to 662'
            602_0  COME_FROM_FINALLY   560  '560'

 L. 716       602  DUP_TOP          
              604  LOAD_GLOBAL              Exception
              606  COMPARE_OP               exception-match
          608_610  POP_JUMP_IF_FALSE   660  'to 660'
              612  POP_TOP          
              614  STORE_FAST               'e'
              616  POP_TOP          
              618  SETUP_FINALLY       648  'to 648'

 L. 717       620  LOAD_GLOBAL              util
              622  LOAD_METHOD              log
              624  LOAD_STR                 'Join error -> do auto play and quit..'
              626  CALL_METHOD_1         1  ''
              628  POP_TOP          

 L. 718       630  LOAD_FAST                'self'
              632  LOAD_METHOD              allPlay1Round
              634  CALL_METHOD_0         0  ''
              636  POP_TOP          

 L. 719       638  POP_BLOCK        
              640  POP_EXCEPT       
              642  CALL_FINALLY        648  'to 648'
              644  LOAD_CONST               False
              646  RETURN_VALUE     
            648_0  COME_FROM           642  '642'
            648_1  COME_FROM_FINALLY   618  '618'
              648  LOAD_CONST               None
              650  STORE_FAST               'e'
              652  DELETE_FAST              'e'
              654  END_FINALLY      
              656  POP_EXCEPT       
              658  JUMP_FORWARD        662  'to 662'
            660_0  COME_FROM           608  '608'
              660  END_FINALLY      
            662_0  COME_FROM           658  '658'
            662_1  COME_FROM           600  '600'

 L. 723       662  LOAD_GLOBAL              DEV_SUN
          664_666  POP_JUMP_IF_FALSE   750  'to 750'

 L. 724       668  LOAD_FAST                'm_cs'
              670  LOAD_CONST               0
              672  BINARY_SUBSCR    
              674  LOAD_FAST                'g_1_cs'
              676  LOAD_CONST               0
              678  BINARY_SUBSCR    
              680  LOAD_CONST               0
              682  BINARY_SUBSCR    
              684  COMPARE_OP               ==
          686_688  POP_JUMP_IF_FALSE   982  'to 982'

 L. 725       690  LOAD_FAST                'm_cs'
              692  LOAD_CONST               1
              694  BINARY_SUBSCR    
              696  LOAD_FAST                'g_1_cs'
              698  LOAD_CONST               0
              700  BINARY_SUBSCR    
              702  LOAD_CONST               1
              704  BINARY_SUBSCR    
              706  COMPARE_OP               ==

 L. 724   708_710  POP_JUMP_IF_FALSE   982  'to 982'

 L. 726       712  LOAD_FAST                'm_cs'
              714  LOAD_CONST               2
              716  BINARY_SUBSCR    
              718  LOAD_FAST                'g_1_cs'
              720  LOAD_CONST               0
              722  BINARY_SUBSCR    
              724  LOAD_CONST               2
              726  BINARY_SUBSCR    
              728  COMPARE_OP               ==

 L. 724   730_732  POP_JUMP_IF_FALSE   982  'to 982'

 L. 727       734  LOAD_CONST               True
              736  STORE_FAST               'success'

 L. 728       738  LOAD_GLOBAL              util
              740  LOAD_METHOD              logC
              742  LOAD_STR                 'Success'
              744  CALL_METHOD_1         1  ''
              746  POP_TOP          
              748  JUMP_FORWARD        982  'to 982'
            750_0  COME_FROM           664  '664'

 L. 730       750  LOAD_FAST                'm_cs'
              752  LOAD_CONST               0
              754  BINARY_SUBSCR    
              756  LOAD_FAST                'g_1_cs'
              758  LOAD_CONST               0
              760  BINARY_SUBSCR    
              762  LOAD_CONST               0
              764  BINARY_SUBSCR    
              766  COMPARE_OP               ==
          768_770  POP_JUMP_IF_FALSE   982  'to 982'

 L. 731       772  LOAD_FAST                'm_cs'
              774  LOAD_CONST               1
              776  BINARY_SUBSCR    
              778  LOAD_FAST                'g_1_cs'
              780  LOAD_CONST               2
              782  BINARY_SUBSCR    
              784  LOAD_CONST               0
              786  BINARY_SUBSCR    
              788  COMPARE_OP               ==

 L. 730   790_792  POP_JUMP_IF_FALSE   982  'to 982'

 L. 732       794  LOAD_FAST                'm_cs'
              796  LOAD_CONST               2
              798  BINARY_SUBSCR    
              800  LOAD_FAST                'g_1_cs'
              802  LOAD_CONST               4
              804  BINARY_SUBSCR    
              806  LOAD_CONST               0
              808  BINARY_SUBSCR    
              810  COMPARE_OP               ==

 L. 730   812_814  POP_JUMP_IF_FALSE   982  'to 982'

 L. 734       816  LOAD_FAST                'self'
              818  LOAD_ATTR                prof_count
              820  LOAD_CONST               7
              822  COMPARE_OP               ==
          824_826  POP_JUMP_IF_FALSE   900  'to 900'

 L. 735       828  LOAD_FAST                'm_p_cs'
              830  LOAD_CONST               0
              832  BINARY_SUBSCR    
              834  LOAD_FAST                'g_1_cs'
              836  LOAD_CONST               1
              838  BINARY_SUBSCR    
              840  LOAD_CONST               0
              842  BINARY_SUBSCR    
              844  COMPARE_OP               ==

 L. 734   846_848  POP_JUMP_IF_FALSE   900  'to 900'

 L. 736       850  LOAD_FAST                'm_p_cs'
              852  LOAD_CONST               1
              854  BINARY_SUBSCR    
              856  LOAD_FAST                'g_1_cs'
              858  LOAD_CONST               3
              860  BINARY_SUBSCR    
              862  LOAD_CONST               0
              864  BINARY_SUBSCR    
              866  COMPARE_OP               ==

 L. 734   868_870  POP_JUMP_IF_FALSE   900  'to 900'

 L. 737       872  LOAD_FAST                'm_p_cs'
              874  LOAD_CONST               2
              876  BINARY_SUBSCR    
              878  LOAD_FAST                'g_1_cs'
              880  LOAD_CONST               0
              882  BINARY_SUBSCR    
              884  LOAD_CONST               1
              886  BINARY_SUBSCR    
              888  COMPARE_OP               ==

 L. 734   890_892  POP_JUMP_IF_FALSE   900  'to 900'

 L. 738       894  LOAD_CONST               True
              896  STORE_FAST               'success'
              898  JUMP_FORWARD        982  'to 982'
            900_0  COME_FROM           890  '890'
            900_1  COME_FROM           868  '868'
            900_2  COME_FROM           846  '846'
            900_3  COME_FROM           824  '824'

 L. 739       900  LOAD_FAST                'self'
              902  LOAD_ATTR                prof_count
              904  LOAD_CONST               11
              906  COMPARE_OP               ==
          908_910  POP_JUMP_IF_FALSE   982  'to 982'

 L. 740       912  LOAD_FAST                'm_p_cs'
              914  LOAD_CONST               0
              916  BINARY_SUBSCR    
              918  LOAD_FAST                'g_1_cs'
              920  LOAD_CONST               1
              922  BINARY_SUBSCR    
              924  LOAD_CONST               0
              926  BINARY_SUBSCR    
              928  COMPARE_OP               ==

 L. 739   930_932  POP_JUMP_IF_FALSE   982  'to 982'

 L. 741       934  LOAD_FAST                'm_p_cs'
              936  LOAD_CONST               1
              938  BINARY_SUBSCR    
              940  LOAD_FAST                'g_1_cs'
              942  LOAD_CONST               3
              944  BINARY_SUBSCR    
              946  LOAD_CONST               0
              948  BINARY_SUBSCR    
              950  COMPARE_OP               ==

 L. 739   952_954  POP_JUMP_IF_FALSE   982  'to 982'

 L. 742       956  LOAD_FAST                'm_p_cs'
              958  LOAD_CONST               2
              960  BINARY_SUBSCR    
              962  LOAD_FAST                'g_1_cs'
              964  LOAD_CONST               5
              966  BINARY_SUBSCR    
              968  LOAD_CONST               0
              970  BINARY_SUBSCR    
              972  COMPARE_OP               ==

 L. 739   974_976  POP_JUMP_IF_FALSE   982  'to 982'

 L. 743       978  LOAD_CONST               True
              980  STORE_FAST               'success'
            982_0  COME_FROM           974  '974'
            982_1  COME_FROM           952  '952'
            982_2  COME_FROM           930  '930'
            982_3  COME_FROM           908  '908'
            982_4  COME_FROM           898  '898'
            982_5  COME_FROM           812  '812'
            982_6  COME_FROM           790  '790'
            982_7  COME_FROM           768  '768'
            982_8  COME_FROM           748  '748'
            982_9  COME_FROM           730  '730'
           982_10  COME_FROM           708  '708'
           982_11  COME_FROM           686  '686'

 L. 749       982  LOAD_FAST                'success'
          984_986  POP_JUMP_IF_FALSE  1332  'to 1332'

 L. 750       988  LOAD_GLOBAL              util
              990  LOAD_METHOD              logC
              992  LOAD_STR                 'Success'
              994  CALL_METHOD_1         1  ''
              996  POP_TOP          

 L. 751       998  LOAD_GLOBAL              util
             1000  LOAD_METHOD              soundDone
             1002  CALL_METHOD_0         0  ''
             1004  POP_TOP          

 L. 753      1006  LOAD_GLOBAL              util
             1008  LOAD_METHOD              log
             1010  LOAD_STR                 'Sorted idx: '
             1012  LOAD_STR                 ' '
             1014  LOAD_METHOD              join
             1016  LOAD_FAST                'g_1_sorted_idx'
             1018  CALL_METHOD_1         1  ''
             1020  BINARY_ADD       
             1022  CALL_METHOD_1         1  ''
             1024  POP_TOP          

 L. 756      1026  LOAD_FAST                'self'
             1028  LOAD_METHOD              runGroup1AutoPlayNSave
             1030  CALL_METHOD_0         0  ''
             1032  POP_TOP          

 L. 759      1034  LOAD_FAST                'self'
             1036  LOAD_METHOD              _W
             1038  LOAD_FAST                'self'
             1040  LOAD_ATTR                HOST_1_IDX
             1042  CALL_METHOD_1         1  ''
             1044  LOAD_METHOD              _js
             1046  LOAD_STR                 ' showGameConfirm("Đang đánh chụp", "Tạo Bàn Thành Công"); '
             1048  CALL_METHOD_1         1  ''
             1050  POP_TOP          

 L. 760      1052  LOAD_FAST                'self'
             1054  LOAD_METHOD              _W
             1056  LOAD_FAST                'self'
             1058  LOAD_ATTR                HOST_MAIN_IDX
             1060  CALL_METHOD_1         1  ''
             1062  LOAD_METHOD              _js
             1064  LOAD_STR                 ' showGameConfirm("Vào đánh đi đại ca ơi", "Tạo Bàn Thành Công"); '
             1066  CALL_METHOD_1         1  ''
             1068  POP_TOP          

 L. 761      1070  LOAD_FAST                'self'
             1072  LOAD_METHOD              _W
             1074  LOAD_FAST                'self'
             1076  LOAD_ATTR                HOST_MAIN_IDX
             1078  CALL_METHOD_1         1  ''
             1080  LOAD_METHOD              _js
             1082  LOAD_STR                 ' f12SaveLastRoomID(); '
             1084  CALL_METHOD_1         1  ''
             1086  POP_TOP          

 L. 763      1088  LOAD_FAST                'self'
             1090  LOAD_METHOD              _b52GetRoomMoney
             1092  LOAD_FAST                'self'
             1094  LOAD_ATTR                HOST_MAIN_IDX
             1096  CALL_METHOD_1         1  ''
             1098  LOAD_FAST                'self'
             1100  STORE_ATTR               _gMain_bet

 L. 764      1102  LOAD_FAST                'self'
             1104  LOAD_METHOD              _b52GetRoomID
             1106  LOAD_FAST                'self'
             1108  LOAD_ATTR                HOST_MAIN_IDX
             1110  CALL_METHOD_1         1  ''
             1112  LOAD_FAST                'self'
             1114  STORE_ATTR               _gMain_rid

 L. 765      1116  LOAD_GLOBAL              str
             1118  LOAD_FAST                'self'
             1120  LOAD_METHOD              _b52GetMCode
             1122  LOAD_FAST                'self'
             1124  LOAD_ATTR                HOST_MAIN_IDX
             1126  CALL_METHOD_1         1  ''
             1128  CALL_FUNCTION_1       1  ''
             1130  STORE_FAST               'mcode'

 L. 766      1132  LOAD_GLOBAL              base64
             1134  LOAD_METHOD              b64decode
             1136  LOAD_FAST                'mcode'
             1138  CALL_METHOD_1         1  ''
             1140  LOAD_METHOD              decode
             1142  LOAD_STR                 'utf-8'
             1144  CALL_METHOD_1         1  ''
             1146  LOAD_FAST                'self'
             1148  STORE_ATTR               mcode_dec

 L. 768      1150  LOAD_STR                 'Site: '
             1152  LOAD_FAST                'self'
             1154  LOAD_ATTR                selected_site
             1156  BINARY_ADD       
             1158  LOAD_STR                 ' - Cược: '
             1160  BINARY_ADD       
             1162  LOAD_GLOBAL              str
             1164  LOAD_FAST                'self'
             1166  LOAD_ATTR                _gMain_bet
             1168  CALL_FUNCTION_1       1  ''
             1170  BINARY_ADD       
             1172  STORE_FAST               'tele_msg_text'

 L. 769      1174  LOAD_FAST                'tele_msg_text'
             1176  LOAD_STR                 '\nLiêng Room: '
             1178  LOAD_GLOBAL              str
             1180  LOAD_FAST                'self'
             1182  LOAD_ATTR                _gMain_rid
             1184  CALL_FUNCTION_1       1  ''
             1186  BINARY_ADD       
             1188  INPLACE_ADD      
             1190  STORE_FAST               'tele_msg_text'

 L. 770      1192  LOAD_FAST                'tele_msg_text'
             1194  LOAD_STR                 '\n'
             1196  LOAD_FAST                'self'
             1198  LOAD_ATTR                mcode_dec
             1200  BINARY_ADD       
             1202  INPLACE_ADD      
             1204  STORE_FAST               'tele_msg_text'

 L. 772      1206  LOAD_FAST                'self'
             1208  LOAD_ATTR                _f12_tl_text
             1210  LOAD_GLOBAL              CHAT_ID
             1212  LOAD_FAST                'tele_msg_text'
             1214  LOAD_CONST               ('chat_id', 'text')
             1216  CALL_FUNCTION_KW_2     2  '2 total positional and keyword args'
             1218  POP_TOP          

 L. 775      1220  LOAD_GLOBAL              str
             1222  LOAD_CONST               30000
             1224  CALL_FUNCTION_1       1  ''
             1226  STORE_FAST               'one_match_timeout'

 L. 776      1228  LOAD_FAST                'self'
             1230  LOAD_METHOD              _W
             1232  LOAD_FAST                'self'
             1234  LOAD_ATTR                HOST_MAIN_IDX
             1236  CALL_METHOD_1         1  ''
             1238  LOAD_METHOD              _js
             1240  LOAD_STR                 " f12SetViewEnemy('1'); f12SetAutoPvP('1'); "
             1242  CALL_METHOD_1         1  ''
             1244  POP_TOP          

 L. 780      1246  LOAD_FAST                'self'
             1248  LOAD_METHOD              _jsAll
             1250  LOAD_STR                 " window.f12_setup_mode = '0'; f12SetPreventLogout('0'); "
             1252  CALL_METHOD_1         1  ''
             1254  POP_TOP          

 L. 782      1256  LOAD_FAST                'self'
             1258  LOAD_METHOD              _jsAllGroup1
             1260  LOAD_STR                 ' disableRoomUpdate(1); '
             1262  CALL_METHOD_1         1  ''
             1264  POP_TOP          

 L. 783      1266  LOAD_FAST                'self'
             1268  LOAD_METHOD              _jsAllGroup1
             1270  LOAD_STR                 " f12SetTurboMode('1'); "
             1272  CALL_METHOD_1         1  ''
             1274  POP_TOP          

 L. 785      1276  LOAD_FAST                'self'
             1278  LOAD_METHOD              _jsAllGroupMain
             1280  LOAD_STR                 " f12SetTurboMode('0'); "
             1282  CALL_METHOD_1         1  ''
             1284  POP_TOP          

 L. 787      1286  LOAD_FAST                'self'
             1288  LOAD_METHOD              _jsAllGroupMain
             1290  LOAD_STR                 ' setTimeout( function(){ window.fSkpSvccMn = 0; }, '
             1292  LOAD_FAST                'one_match_timeout'
             1294  BINARY_ADD       
             1296  LOAD_STR                 ' ); '
             1298  BINARY_ADD       
             1300  CALL_METHOD_1         1  ''
             1302  POP_TOP          

 L. 790      1304  LOAD_FAST                'self'
             1306  LOAD_METHOD              _W
             1308  LOAD_FAST                'm_p_idx'
             1310  CALL_METHOD_1         1  ''
             1312  LOAD_METHOD              _js
             1314  LOAD_STR                 " __require('GameConfigManager').default.getInstance().autoReady = 0; setTimeout( function(){ sendLeaveRoomWCheck(); }, "
             1316  LOAD_FAST                'one_match_timeout'
             1318  BINARY_ADD       
             1320  LOAD_STR                 ' ); '
             1322  BINARY_ADD       
             1324  CALL_METHOD_1         1  ''
             1326  POP_TOP          

 L. 792      1328  LOAD_CONST               True
             1330  RETURN_VALUE     
           1332_0  COME_FROM           984  '984'

 L. 794      1332  LOAD_GLOBAL              util
             1334  LOAD_METHOD              log
             1336  LOAD_STR                 'Cards not matched -> do auto play and quit..'
             1338  CALL_METHOD_1         1  ''
             1340  POP_TOP          

 L. 795      1342  LOAD_FAST                'self'
             1344  LOAD_METHOD              allPlay1Round
             1346  CALL_METHOD_0         0  ''
             1348  POP_TOP          

 L. 796      1350  LOAD_CONST               False
             1352  RETURN_VALUE     

Parse error at or near `LOAD_CONST' instruction at offset 644

    def allOutRoom(self):
        for x in range(self.prof_count):
            idx = str(x + 1)
            self._b52OutRoom(idx)

    def allPlay1Round(self):
        for x in range(self.prof_count):
            idx = str(x + 1)
            w = self._W(idx)
            w._js(' f12AutoPlay1Round(); ')

    def allStopAutoPlayNSave(self):
        for x in range(self.prof_count):
            idx = str(x + 1)
            w = self._W(idx)
            w._js(' f12StopAutoPlayNSave(); ')

    def group1StopAutoPlayNSave(self):
        if self._runAutoPlayNSave:
            self._runAutoPlayNSave = False
            GROUP_1_SLOT = self.GROUP_SLOT
            for x in range(GROUP_1_SLOT):
                idx = str(x + 1)
                w = self._W(idx)
                w._js(' f12StopAutoPlayNSave(); ')
            else:
                util.logR('group1AutoPlayNSave END!')

    def group1StopLeaveAlert(self, reach_max=False):
        self.group1StopAutoPlayNSave()
        tele_msg_text = ''
        if reach_max:
            tele_msg_text += '📢<b><i> Hoàn Thành Copy (' + str(self.max_copy) + ')</i></b>'
        else:
            tele_msg_text += '⚠<b><i> Báo Dừng Copy </i></b>'
        tele_msg_text += '\nSite: ' + self.selected_site + ' - Cược: ' + str(self._gMain_bet)
        tele_msg_text += '\nLiêng Room: ' + str(self._gMain_rid)
        tele_msg_text += '\n' + self.mcode_dec
        self._f12_tl_text(chat_id=CHAT_ID, text=tele_msg_text)
        self._jsAllGroup1(' sendLeaveRoom(); ')
        time.sleep(1)
        self._jsAllGroup1(' location.reload(); ')

    def stopAll(self):
        self.stopFind({'stop': '1'})
        self.group1StopAutoPlayNSave()

    def _hdlBotWarnLogForL(self, idx, msg):
        util.log('Profile ' + idx + ': ' + msg)
        if msg.startswith('NEW GAME READY|'):
            self._new_gid = msg.replace('NEW GAME READY|', '')
        else:
            if msg.startswith('PLAYNSAVE ROOM OUT|'):
                uid = msg.replace('PLAYNSAVE ROOM OUT|', '')
                util.logC('Handle ROOM OUT for: ' + idx + ' - ' + uid)
                self.group1StopLeaveAlert()
            else:
                if msg.startswith('PLAYNSAVE ROOM DESTROY|'):
                    uid = msg.replace('PLAYNSAVE ROOM DESTROY|', '')
                    util.logC('Handle ROOM DESTROY for: ' + idx + ' - ' + uid)
                    self.group1StopLeaveAlert()
                else:
                    if msg.startswith('PLAYNSAVE REJOIN FAILED|'):
                        uid = msg.replace('PLAYNSAVE REJOIN FAILED|', '')
                        util.logC('Handle REJOIN FAILED for: ' + idx + ' - ' + uid)
                        self.group1StopLeaveAlert()
                    else:
                        if msg.startswith('SETUP_DELAY|'):
                            print(msg.replace('SETUP_DELAY|', ''))
                            sec = int('0' + msg.replace('SETUP_DELAY|', ''))
                            self._runSetupDelay = sec
                            util.logC('Handle SETUP_DELAY for: ' + idx + ' - ' + str(sec))

    def runGroup1AutoPlayNSave(self):
        util.log('Thread Play & Save for group 1 is running..')
        self._runAutoPlayNSave = False
        thr = threading.Thread(target=(self.group1AutoPlayNSave), args=(), daemon=True)
        thr.start()

    def group1AutoPlayNSave(self):
        if self._runAutoPlayNSave:
            util.log('Already running _runAutoPlayNSave..')
            return
        util.logY('group1AutoPlayNSave START!')
        GROUP_1_SLOT = self.GROUP_SLOT
        for x in range(GROUP_1_SLOT):
            idx = str(x + 1)
            w = self._W(idx)
            w._js(' f12AutoPlayNSave(); ')
        else:
            rID = str(self._b52GetRoomID(self.HOST_MAIN_IDX))
            if rID == '0':
                rID = self._gMain_rid
            util.log('RoomID:' + rID)
            mcode = str(self._b52GetMCode(self.HOST_MAIN_IDX))
            self.mcode_dec = base64.b64decode(mcode).decode('utf-8')
            self._g1_rid = str(self._b52GetRoomID(self.HOST_1_IDX))
            self._gid = ''
            self._new_gid = ''
            self.count_copy = 0
            self._runAutoPlayNSave = True
            self._g1_need_resort_idx = True
            self._g1_count_failed = 0
            self._g1_last_game_cs = {}
            while True:
                if self._runAutoPlayNSave:
                    if self._gid != self._new_gid:
                        self.count_copy += 1
                        self._gid = self._new_gid
                        if self._g1_need_resort_idx:
                            resort_done = self.group1ResortIdx()
                            if not resort_done:
                                self.group1StopLeaveAlert()
                            else:
                                self._g1_need_resort_idx = False
                        count = 0
                        cs_all = {}
                        count_has_cs = 0
                        util.logG('Wait for cards..')
                        while self._runAutoPlayNSave:
                            while count < 10:
                                while count_has_cs < GROUP_1_SLOT:
                                    time.sleep(1)
                                    count += 1
                                    count_has_cs = 0
                                    for x in range(GROUP_1_SLOT):
                                        idx = str(x + 1)
                                        last3_cs = self._b52GetLast3Cards(idx)
                                        if last3_cs != '':
                                            if last3_cs != 'None':
                                                cs_all[idx] = last3_cs.split(',')
                                                count_has_cs += 1

                        if not self._runAutoPlayNSave:
                            pass
                        else:
                            if count_has_cs == GROUP_1_SLOT:
                                g_1_cs = []
                                util.logY(rID + ' - ' + self._gid + ' - (' + str(self.count_copy) + '/' + str(self.max_copy) + ') ')
                                tmp = 0
                                for sorted_idx in self.g_1_sorted_idx:
                                    tmp += 1
                                    g_1_cs = g_1_cs + cs_all[sorted_idx]
                                    str_idx_cs = ','.join(cs_all[sorted_idx])
                                    chk_idx = str(tmp)
                                    if chk_idx in self._g1_last_game_cs:
                                        while self._g1_last_game_cs[chk_idx]['cs'] == str_idx_cs:
                                            util.logY('>>> Acc ' + chk_idx + ' not have new cards')
                                            self._g1_last_game_cs[chk_idx]['count_failed'] += 1
                                            while self._g1_last_game_cs[chk_idx]['count_failed'] > 3:
                                                self.group1StopLeaveAlert()
                                                break

                                        self._g1_last_game_cs[chk_idx] = {'cs':str_idx_cs,  'count_failed':0}
                                else:
                                    all_cs = ','.join(g_1_cs)
                                    thr = threading.Thread(target=(self.saveMatch), args=(rID, self._gid, all_cs, mcode, 3), daemon=True)
                                    thr.start()

                            else:
                                util.logR('Not enough card -> skip this round')
                                self._g1_count_failed += 1
                            if self._g1_count_failed >= 3:
                                self.group1StopLeaveAlert()
                            if self.max_copy > 0:
                                if self.count_copy >= self.max_copy:
                                    time.sleep(5)
                                    util.logY('STOP COPY (Reach Max: ' + str(self.max_copy) + ')')
                                    self.group1StopLeaveAlert(reach_max=True)
                    time.sleep(1)

    def saveMatch(self, roomid, gid, all_cs, mcode, max_try=3):
        done = False
        tmp = 0
        while not done:
            while tmp < max_try:
                tmp += 1
                try:
                    params = { 'act': 'saveMatch',
                      'roomid': roomid,
                      'gid': gid,
                      'all_cs': all_cs,
                      'mcode': mcode}
                    api_url = API_ENDPOINT.replace('sss', self.selected_site) + urlencode(params)
                    req = requests.get(url=api_url)
                    self._g1_count_failed = 0
                    done = True
                    util.log('Save Match ok')
                except Exception as e:
                    try:
                        util.logR('Save Match API Failed!!')
                    finally:
                        e = None
                        del e

                else:
                    time.sleep(1)

        if not done:
            self._g1_count_failed += 1
        return done

    def group1RejoinRoom(self, idx):
        w = self._W(idx)
        buy_in_money = 15 * int(self.min_money)
        rpass = ROOM_PASS
        if self.selected_site == '52':
            rpass = ''
        js_code = 'f12FindRoomIDLieng(' + self._g1_rid + ',' + str(buy_in_money) + ",'" + rpass + "');"
        w._js(js_code)
        joined = False
        while True:
            if self._runAutoPlayNSave:
                joined or util.log('wait for rejoin..')
                time.sleep(1)
                rID = str(self._b52GetRoomID(idx))
                if rID == self._g1_rid:
                    joined = True

        if joined:
            w._js(' f12AutoPlayNSave(); ')
            util.logG('Profile [' + idx + '] rejoined successful')
        return joined

    def group1ResortIdx--- This code section failed: ---

 L.1090         0  LOAD_GLOBAL              util
                2  LOAD_METHOD              logY
                4  LOAD_STR                 '>>> Need to sort slot index for group1'
                6  CALL_METHOD_1         1  ''
                8  POP_TOP          

 L.1091        10  LOAD_FAST                'self'
               12  LOAD_ATTR                GROUP_SLOT
               14  STORE_FAST               'GROUP_1_SLOT'

 L.1093        16  LOAD_FAST                'self'
               18  LOAD_METHOD              _b52_saveUserIDForAllProfiles
               20  CALL_METHOD_0         0  ''
               22  POP_TOP          

 L.1095        24  BUILD_LIST_0          0 
               26  STORE_FAST               'g_1_uids'

 L.1097        28  LOAD_CONST               0
               30  STORE_FAST               'c_wait'
             32_0  COME_FROM           110  '110'

 L.1098        32  LOAD_FAST                'self'
               34  LOAD_ATTR                _runAutoPlayNSave
               36  POP_JUMP_IF_FALSE   112  'to 112'
               38  LOAD_GLOBAL              len
               40  LOAD_FAST                'g_1_uids'
               42  CALL_FUNCTION_1       1  ''
               44  LOAD_FAST                'GROUP_1_SLOT'
               46  COMPARE_OP               <
               48  POP_JUMP_IF_FALSE   112  'to 112'
               50  LOAD_FAST                'c_wait'
               52  LOAD_CONST               90
               54  COMPARE_OP               <
               56  POP_JUMP_IF_FALSE   112  'to 112'

 L.1099        58  LOAD_GLOBAL              util
               60  LOAD_METHOD              log
               62  LOAD_STR                 'Wait for game start all of '
               64  LOAD_GLOBAL              str
               66  LOAD_FAST                'GROUP_1_SLOT'
               68  CALL_FUNCTION_1       1  ''
               70  BINARY_ADD       
               72  LOAD_STR                 ' players..'
               74  BINARY_ADD       
               76  CALL_METHOD_1         1  ''
               78  POP_TOP          

 L.1100        80  LOAD_GLOBAL              time
               82  LOAD_METHOD              sleep
               84  LOAD_CONST               1
               86  CALL_METHOD_1         1  ''
               88  POP_TOP          

 L.1101        90  LOAD_FAST                'self'
               92  LOAD_METHOD              _b52_getPlayersPlaying
               94  LOAD_FAST                'self'
               96  LOAD_ATTR                HOST_1_IDX
               98  CALL_METHOD_1         1  ''
              100  STORE_FAST               'g_1_uids'

 L.1102       102  LOAD_FAST                'c_wait'
              104  LOAD_CONST               1
              106  INPLACE_ADD      
              108  STORE_FAST               'c_wait'
              110  JUMP_LOOP            32  'to 32'
            112_0  COME_FROM            56  '56'
            112_1  COME_FROM            48  '48'
            112_2  COME_FROM            36  '36'

 L.1105       112  SETUP_FINALLY       222  'to 222'

 L.1106       114  BUILD_LIST_0          0 
              116  LOAD_FAST                'self'
              118  STORE_ATTR               g_1_sorted_idx

 L.1107       120  LOAD_GLOBAL              len
              122  LOAD_FAST                'g_1_uids'
              124  CALL_FUNCTION_1       1  ''
              126  LOAD_FAST                'GROUP_1_SLOT'
              128  COMPARE_OP               ==
              130  POP_JUMP_IF_FALSE   202  'to 202'

 L.1108       132  LOAD_FAST                'g_1_uids'
              134  GET_ITER         
            136_0  COME_FROM           172  '172'
            136_1  COME_FROM           158  '158'
              136  FOR_ITER            174  'to 174'
              138  STORE_FAST               'uid'

 L.1109       140  LOAD_FAST                'self'
              142  LOAD_METHOD              _b52_getIdxOfUserID
              144  LOAD_FAST                'uid'
              146  CALL_METHOD_1         1  ''
              148  STORE_FAST               'sorted_idx'

 L.1110       150  LOAD_FAST                'sorted_idx'
              152  LOAD_FAST                'self'
              154  LOAD_ATTR                g_1_sorted_idx
              156  COMPARE_OP               not-in
              158  POP_JUMP_IF_FALSE_LOOP   136  'to 136'

 L.1111       160  LOAD_FAST                'self'
              162  LOAD_ATTR                g_1_sorted_idx
              164  LOAD_METHOD              append
              166  LOAD_FAST                'sorted_idx'
              168  CALL_METHOD_1         1  ''
              170  POP_TOP          
              172  JUMP_LOOP           136  'to 136'
            174_0  COME_FROM           136  '136'

 L.1112       174  LOAD_GLOBAL              util
              176  LOAD_METHOD              logC
              178  LOAD_STR                 'Sorted idx: '
              180  LOAD_STR                 ' '
              182  LOAD_METHOD              join
              184  LOAD_FAST                'self'
              186  LOAD_ATTR                g_1_sorted_idx
              188  CALL_METHOD_1         1  ''
              190  BINARY_ADD       
              192  CALL_METHOD_1         1  ''
              194  POP_TOP          

 L.1113       196  POP_BLOCK        
              198  LOAD_CONST               True
              200  RETURN_VALUE     
            202_0  COME_FROM           130  '130'

 L.1115       202  LOAD_GLOBAL              util
              204  LOAD_METHOD              logR
              206  LOAD_STR                 'group1ResortIdx FAILED '
              208  CALL_METHOD_1         1  ''
              210  POP_TOP          

 L.1116       212  POP_BLOCK        
              214  LOAD_CONST               False
              216  RETURN_VALUE     
              218  POP_BLOCK        
              220  JUMP_FORWARD        274  'to 274'
            222_0  COME_FROM_FINALLY   112  '112'

 L.1117       222  DUP_TOP          
              224  LOAD_GLOBAL              Exception
              226  COMPARE_OP               exception-match
          228_230  POP_JUMP_IF_FALSE   272  'to 272'
              232  POP_TOP          
              234  STORE_FAST               'e'
              236  POP_TOP          
              238  SETUP_FINALLY       260  'to 260'

 L.1118       240  LOAD_GLOBAL              util
              242  LOAD_METHOD              logR
              244  LOAD_STR                 'group1ResortIdx FAILED '
              246  CALL_METHOD_1         1  ''
              248  POP_TOP          

 L.1119       250  POP_BLOCK        
              252  POP_EXCEPT       
              254  CALL_FINALLY        260  'to 260'
              256  LOAD_CONST               False
              258  RETURN_VALUE     
            260_0  COME_FROM           254  '254'
            260_1  COME_FROM_FINALLY   238  '238'
              260  LOAD_CONST               None
              262  STORE_FAST               'e'
              264  DELETE_FAST              'e'
              266  END_FINALLY      
              268  POP_EXCEPT       
              270  JUMP_FORWARD        274  'to 274'
            272_0  COME_FROM           228  '228'
              272  END_FINALLY      
            274_0  COME_FROM           270  '270'
            274_1  COME_FROM           220  '220'

Parse error at or near `POP_BLOCK' instruction at offset 218

    def _b52GroupOutRoom(self, idx, wait_end=False):
        if wait_end:
            time.sleep(END_GAME_DELAY)
        if DEV_SUN:
            if idx == self.HOST_1_IDX:
                self._b52OutRoom(self.HOST_1_IDX)
                self._b52OutRoom('2')
            else:
                if idx == self.HOST_MAIN_IDX:
                    self._b52OutRoom(self.HOST_MAIN_IDX)
                    self._b52OutRoom('4')
        else:
            if idx == self.HOST_1_IDX:
                self._b52OutRoom(self.HOST_1_IDX)
                self._b52OutRoom('2')
                self._b52OutRoom('3')
                self._b52OutRoom('4')
                self._b52OutRoom('5')
                if self.prof_count > 7:
                    self._b52OutRoom('6')
                    self._b52OutRoom('7')
                    self._b52OutRoom('8')
                    self._b52OutRoom('9')
            else:
                if idx == self.HOST_MAIN_IDX:
                    self._b52OutRoom(self.HOST_MAIN_IDX)
                    if self.prof_count == 7:
                        self._b52OutRoom('7')
                    else:
                        self._b52OutRoom('11')
                        if self.prof_count > 11:
                            self._b52OutRoom('12')
                            self._b52OutRoom('13')
                            self._b52OutRoom('14')
                            self._b52OutRoom('15')
                            self._b52OutRoom('16')
                            self._b52OutRoom('17')
                            self._b52OutRoom('18')

    def _b52GetEnemyJoinRoomDN(self, idx):
        w = self._W(idx)
        arr_enemy_dn = []
        try:
            js_code = 'return f12GetInGameAllEnemyDN();'
            arr_enemy_dn = w._js(js_code)
        except:
            pass
        else:
            return arr_enemy_dn

    def _b52GetLast3Cards(self, idx):
        w = self._W(idx)
        str_cards = ''
        try:
            js_code = "return window.f12_last_3cards.join(',');"
            str_cards = str(w._js(js_code))
        except:
            pass
        else:
            return str_cards

    def _b52_getPlayersPlaying(self, idx):
        w = self._W(idx)
        arr_user_id = []
        try:
            js_code = 'return window.f12L_getPlayersPlaying(); '
            arr_user_id = w._js(js_code)
        except:
            pass
        else:
            return arr_user_id

    def _b52_saveUserIDForAllProfiles(self):
        self.profiles_uid = {}
        for x in range(self.prof_count):
            idx = str(x + 1)
            self.profiles_uid[idx] = self._b52GetUserID(idx)

    def _b52_getIdxOfUserID(self, uid):
        matched_idx = None
        for x in range(self.prof_count):
            idx = str(x + 1)
            if uid == self.profiles_uid[idx]:
                matched_idx = idx
                break
        else:
            return matched_idx

    def _b52L_SendStart(self, idx):
        w = self._W(idx)
        w._js(' f12_game_instance.sendStart(); ')

    def _b52L_CreateRoom(self, idx, money):
        w = self._W(idx)
        buy_in = 50 * int(money)
        lobby_lieng = 5
        slot = self.GROUP_SLOT
        if DEV_SUN:
            slot = 5
        rpass = ROOM_PASS
        if idx == self.HOST_MAIN_IDX or self.selected_site == '52':
            rpass = ''
        js_code = ' createRoomBetLieng(' + str(money) + ',' + str(slot) + ",'" + rpass + "');"
        w._js(js_code)

    def _b52OutRoom(self, idx):
        w = self._W(idx)
        w._js(' if ( f12_gm.roomID ) { sendLeaveRoom(); } ')
        w._js(" f12_gm.roomID = 0; f12_gm.enemy_dn = ''; ")

    def _jsAllGroup1(self, js_code):
        GROUP_1_SLOT = self.GROUP_SLOT
        for x in range(GROUP_1_SLOT):
            idx = str(x + 1)
            w = self._W(idx)
            w._js(js_code)

    def _jsAllGroupMain(self, js_code):
        idx_gMain = [self.HOST_MAIN_IDX]
        if self.prof_count == 7:
            idx_gMain = [
             self.HOST_MAIN_IDX, '7']
        else:
            if self.prof_count == 10:
                idx_gMain = [
                 self.HOST_MAIN_IDX, '7', '8', '9', '10']
            else:
                if self.prof_count == 11:
                    idx_gMain = [
                     self.HOST_MAIN_IDX, '11']
                else:
                    if self.prof_count == 18:
                        idx_gMain = [
                         self.HOST_MAIN_IDX, '11', '12', '13', '14', '15', '16', '17', '18']
        for idx in idx_gMain:
            w = self._W(idx)
            w._js(js_code)


if __name__ == '__main__':
    app = L_SETUP()
    if util.cfgR('DEFAULT', 'DEV_MOD'):
        thrDevCode = threading.Thread(target=(app.bot._devCodeMod), args=(), daemon=True)
        thrDevCode.start()
    webview.start()
    app.bot.__del__()
    app.__del__() 

Python Online Compiler

Write, Run & Share Python code online using OneCompiler's Python online compiler for free. It's one of the robust, feature-rich online compilers for python language, supporting both the versions which are Python 3 and Python 2.7. Getting started with the OneCompiler's Python editor is easy and fast. The editor shows sample boilerplate code when you choose language as Python or Python2 and start coding.

Taking inputs (stdin)

OneCompiler's python online editor supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample python program which takes name as input and print your name with hello.

import sys
name = sys.stdin.readline()
print("Hello "+ name)

About Python

Python is a very popular general-purpose programming language which was created by Guido van Rossum, and released in 1991. It is very popular for web development and you can build almost anything like mobile apps, web apps, tools, data analytics, machine learning etc. It is designed to be simple and easy like english language. It's is highly productive and efficient making it a very popular language.

Tutorial & Syntax help

Loops

1. If-Else:

When ever you want to perform a set of operations based on a condition IF-ELSE is used.

if conditional-expression
    #code
elif conditional-expression
    #code
else:
    #code

Note:

Indentation is very important in Python, make sure the indentation is followed correctly

2. For:

For loop is used to iterate over arrays(list, tuple, set, dictionary) or strings.

Example:

mylist=("Iphone","Pixel","Samsung")
for i in mylist:
    print(i)

3. While:

While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.

while condition  
    #code 

Collections

There are four types of collections in Python.

1. List:

List is a collection which is ordered and can be changed. Lists are specified in square brackets.

Example:

mylist=["iPhone","Pixel","Samsung"]
print(mylist)

2. Tuple:

Tuple is a collection which is ordered and can not be changed. Tuples are specified in round brackets.

Example:

myTuple=("iPhone","Pixel","Samsung")
print(myTuple)

Below throws an error if you assign another value to tuple again.

myTuple=("iPhone","Pixel","Samsung")
print(myTuple)
myTuple[1]="onePlus"
print(myTuple)

3. Set:

Set is a collection which is unordered and unindexed. Sets are specified in curly brackets.

Example:

myset = {"iPhone","Pixel","Samsung"}
print(myset)

4. Dictionary:

Dictionary is a collection of key value pairs which is unordered, can be changed, and indexed. They are written in curly brackets with key - value pairs.

Example:

mydict = {
    "brand" :"iPhone",
    "model": "iPhone 11"
}
print(mydict)

Supported Libraries

Following are the libraries supported by OneCompiler's Python compiler

NameDescription
NumPyNumPy python library helps users to work on arrays with ease
SciPySciPy is a scientific computation library which depends on NumPy for convenient and fast N-dimensional array manipulation
SKLearn/Scikit-learnScikit-learn or Scikit-learn is the most useful library for machine learning in Python
PandasPandas is the most efficient Python library for data manipulation and analysis
DOcplexDOcplex is IBM Decision Optimization CPLEX Modeling for Python, is a library composed of Mathematical Programming Modeling and Constraint Programming Modeling