Explorar el Código

Merge pull request #2147 from openNAMU/dev

버그 수정 및 최적화
잉여개발기 hace 2 años
padre
commit
9ea30ca0cc
Se han modificado 72 ficheros con 30 adiciones y 235 borrados
  1. 1 5
      app.py
  2. 0 2
      route/bbs_make.py
  3. 0 4
      route/bbs_w_post.py
  4. 0 4
      route/bbs_w_set.py
  5. 1 3
      route/edit.py
  6. 0 2
      route/edit_delete.py
  7. 0 2
      route/edit_move.py
  8. 0 2
      route/edit_revert.py
  9. 0 2
      route/edit_upload.py
  10. 0 2
      route/filter_all_add.py
  11. 0 2
      route/filter_all_delete.py
  12. 0 2
      route/give_admin_groups.py
  13. 0 2
      route/give_auth.py
  14. 0 2
      route/give_delete_admin_group.py
  15. 0 2
      route/give_user_fix.py
  16. 0 1
      route/go_main_func_easter_egg.py
  17. 0 1
      route/list_user_check_delete.py
  18. 0 5
      route/login_find_email_check.py
  19. 0 1
      route/login_login.py
  20. 0 1
      route/login_login_2fa.py
  21. 0 1
      route/login_login_2fa_email.py
  22. 0 2
      route/login_register.py
  23. 0 1
      route/login_register_submit.py
  24. 0 3
      route/main_setting_acl.py
  25. 0 4
      route/main_setting_external.py
  26. 0 2
      route/main_setting_head.py
  27. 0 4
      route/main_setting_main.py
  28. 0 4
      route/main_setting_main_logo.py
  29. 0 3
      route/main_setting_phrase.py
  30. 0 2
      route/main_setting_robot.py
  31. 0 4
      route/main_setting_sitemap_set.py
  32. 0 2
      route/main_setting_skin_set.py
  33. 0 2
      route/main_setting_top_menu.py
  34. 0 2
      route/main_sys_shutdown.py
  35. 0 2
      route/recent_app_submit.py
  36. 0 2
      route/recent_history_add.py
  37. 0 1
      route/recent_history_delete.py
  38. 0 2
      route/recent_history_hidden.py
  39. 0 1
      route/recent_history_reset.py
  40. 0 2
      route/recent_history_send.py
  41. 0 1
      route/recent_record_reset.py
  42. 3 4
      route/tool/func.py
  43. 0 2
      route/tool/func_render.py
  44. 0 2
      route/topic.py
  45. 0 2
      route/topic_comment_blind.py
  46. 0 1
      route/topic_comment_delete.py
  47. 0 2
      route/topic_comment_notice.py
  48. 0 1
      route/topic_tool_delete.py
  49. 0 1
      route/user_alarm.py
  50. 0 2
      route/user_alarm_delete.py
  51. 0 2
      route/user_setting.py
  52. 0 1
      route/user_setting_email_delete.py
  53. 0 2
      route/user_setting_head.py
  54. 0 2
      route/user_setting_head_reset.py
  55. 0 1
      route/user_setting_key.py
  56. 0 1
      route/user_setting_key_delete.py
  57. 0 2
      route/user_setting_pw.py
  58. 0 2
      route/user_setting_skin_set_main.py
  59. 0 2
      route/user_setting_top_menu.py
  60. 0 2
      route/user_watch_list_name.py
  61. 0 2
      route/view_set.py
  62. 0 2
      route/vote_add.py
  63. 0 1
      route/vote_close.py
  64. 0 1
      route/vote_select.py
  65. BIN
      route_go/bin/main.amd64.bin
  66. BIN
      route_go/bin/main.amd64.exe
  67. BIN
      route_go/bin/main.arm64.bin
  68. BIN
      route_go/bin/main.arm64.exe
  69. 2 16
      route_go/go.mod
  70. 15 81
      route_go/go.sum
  71. 2 2
      version.json
  72. 6 2
      views/main_css/css/sub/dark.css

+ 1 - 5
app.py

@@ -118,7 +118,7 @@ with get_db_connect() as conn:
             pass
 
         if setup_tool == 'update':
-            update(conn, int(ver_set_data[0][0]), set_data)
+            update(conn, int(ver_set_data[0][0]), data_db_set)
         else:
             set_init(conn)
 
@@ -199,8 +199,6 @@ with get_db_connect() as conn:
 
         server_set[i] = server_set_val
 
-        conn.commit()
-
 def back_up(data_db_set):
     with get_db_connect() as conn:
         curs = conn.cursor()
@@ -326,8 +324,6 @@ def do_every_day():
 
             print('Make sitemap')
 
-        conn.commit()
-
         threading.Timer(60 * 60 * 24, do_every_day).start()
 
 def auto_do_something(data_db_set):

+ 0 - 2
route/bbs_make.py

@@ -19,8 +19,6 @@ def bbs_make():
             curs.execute(db_change("insert into bbs_set (set_name, set_code, set_id, set_data) values ('bbs_name', '', ?, ?)"), [bbs_num, bbs_name])
             curs.execute(db_change("insert into bbs_set (set_name, set_code, set_id, set_data) values ('bbs_type', '', ?, ?)"), [bbs_num, bbs_type])
 
-            conn.commit()
-
             return redirect(conn, '/bbs/main')
         else:
             return easy_minify(conn, flask.render_template(skin_check(conn),

+ 0 - 4
route/bbs_w_post.py

@@ -113,8 +113,6 @@ def bbs_w_post(bbs_num = '', post_num = ''):
 
                 add_alarm(conn, temp_dict['user_id'], ip, 'BBS <a href="/bbs/w/' + bbs_num_str + '/' + post_num_str + '#' + id_data + '">' + html.escape(bbs_name) + ' - ' + html.escape(temp_dict['title']) + '#' + id_data + '</a>')
 
-                conn.commit()
-
                 return redirect(conn, '/bbs/w/' + bbs_num_str + '/' + post_num_str + '#' + id_data)
             else:
                 if acl_check(conn, bbs_num_str, 'bbs_view') == 1:
@@ -221,8 +219,6 @@ def bbs_w_post(bbs_num = '', post_num = ''):
                 curs.execute(db_change("insert into bbs_data (set_name, set_code, set_id, set_data) values ('comment', ?, ?, ?)"), [id_data, set_id, data])
                 curs.execute(db_change("insert into bbs_data (set_name, set_code, set_id, set_data) values ('comment_date', ?, ?, ?)"), [id_data, set_id, date])
                 curs.execute(db_change("insert into bbs_data (set_name, set_code, set_id, set_data) values ('comment_user_id', ?, ?, ?)"), [id_data, set_id, ip])
-
-                conn.commit()
             
                 if set_id == '':
                     end_id = id_data

+ 0 - 4
route/bbs_w_set.py

@@ -26,8 +26,6 @@ def bbs_w_set(bbs_num = ''):
                         bbs_num
                     ])
 
-                conn.commit()
-
                 return redirect(conn, '/bbs/set/' + bbs_num_str)
         else:
             d_list = ['' for _ in range(0, len(i_list))]
@@ -48,8 +46,6 @@ def bbs_w_set(bbs_num = ''):
                     curs.execute(db_change('insert into bbs_set (set_name, set_code, set_id, set_data) values (?, "", ?, ?)'), [i_list[for_a], bbs_num, 'normal'])
                     d_list[for_a] = 'normal'
 
-            conn.commit()
-
             acl_div = ['' for _ in range(0, len(i_list))]
             acl_list = get_acl_list()
             for for_a in range(0, len(i_list)):

+ 1 - 3
route/edit.py

@@ -111,7 +111,7 @@ def edit(name = 'Test', section = 0, do_type = ''):
         edit_req_mode = 0
         if acl_check(conn, name, 'document_edit') == 1:
             edit_req_mode = 1
-            if acl_check(name, 'document_edit_request') == 1:
+            if acl_check(conn, name, 'document_edit_request') == 1:
                 return redirect('/raw_acl/' + url_pas(name))
             
         if do_title_length_check(conn, name) == 1:
@@ -235,8 +235,6 @@ def edit(name = 'Test', section = 0, do_type = ''):
                 for scan_user in curs.fetchall():
                     add_alarm(conn, scan_user[0], ip, '<a href="/edit_request/' + url_pas(name) + '">' + html.escape(name) + '</a> edit_request')
             
-            conn.commit()
-            
             section = (('#edit_load_' + str(section)) if section != '' else '')
             
             return redirect(conn, '/w/' + url_pas(name) + section)

+ 0 - 2
route/edit_delete.py

@@ -53,8 +53,6 @@ def edit_delete(name):
                 curs.execute(db_change("delete from back where link = ?"), [name])
                 curs.execute(db_change("delete from data where title = ?"), [name])
 
-                conn.commit()
-
             return redirect(conn, '/w/' + url_pas(name))
         else:            
             return easy_minify(conn, flask.render_template(skin_check(conn),

+ 0 - 2
route/edit_move.py

@@ -206,8 +206,6 @@ def edit_move(name):
                 curs.execute(db_change("update acl set title = ? where title = ?"), [move_title, name])
 
             # data_set 이동 파트 E
-                
-            conn.commit()
 
             if has_error == 0:
                 return redirect(conn, '/w/' + url_pas(move_title))

+ 0 - 2
route/edit_revert.py

@@ -69,8 +69,6 @@ def edit_revert(name, num):
                 data_type = 'backlink'
             )
 
-            conn.commit()
-
             return redirect(conn, '/w/' + url_pas(name))
         else:
             if data:

+ 0 - 2
route/edit_upload.py

@@ -111,8 +111,6 @@ def edit_upload():
                 if file_num:
                     file_num += 1
 
-                conn.commit()
-
             return redirect(conn, '/w/file:' + name)
         else:
             license_list = '<option value="direct_input">' + get_lang(conn, 'direct_input') + '</option>'

+ 0 - 2
route/filter_all_add.py

@@ -95,8 +95,6 @@ def filter_all_add(tool, name = None):
 
                 curs.execute(db_change('insert into html_filter (html, kind, plus, plus_t) values (?, ?, ?, ?)'), [title, type_d, plus_d, ''])
 
-            conn.commit()
-
             return redirect(conn, '/filter/' + tool)
         else:
             get_sub = 0

+ 0 - 2
route/filter_all_delete.py

@@ -31,6 +31,4 @@ def filter_all_delete(tool, name = 'Test'):
         else:
             curs.execute(db_change("delete from html_filter where html = ? and kind = 'edit_top'"), [name])
 
-        conn.commit()
-
         return redirect(conn, '/filter/' + tool)

+ 0 - 2
route/give_admin_groups.py

@@ -17,8 +17,6 @@ def give_admin_groups_2(name = 'test'):
                 if flask.request.form.get(i, 0) != 0:
                     curs.execute(db_change("insert into alist (name, acl) values (?, ?)"), [name, i])
 
-            conn.commit()
-
             return redirect(conn, '/auth/list/add/' + url_pas(name))
         else:
             data = ''

+ 0 - 2
route/give_auth.py

@@ -46,8 +46,6 @@ def give_auth(name):
 
             add_alarm(conn, name, ip, 'Auth change to ' + select_data + (' (' + time_limit + ')' if time_limit != '' else ''))
 
-            conn.commit()
-
             return redirect(conn, '/auth/give/' + url_pas(name))
         else:
             if admin_auth != 1:

+ 0 - 2
route/give_delete_admin_group.py

@@ -13,8 +13,6 @@ def give_delete_admin_group_2(name = 'test'):
             curs.execute(db_change("delete from alist where name = ?"), [name])
             curs.execute(db_change("update user_set set data = 'user' where name = 'acl' and data = ?"), [name])
 
-            conn.commit()
-
             return redirect(conn, '/auth/list')
         else:
             return easy_minify(conn, flask.render_template(skin_check(conn),

+ 0 - 2
route/give_user_fix.py

@@ -45,8 +45,6 @@ def give_user_fix(user_name = ''):
                 if curs.fetchall():
                     curs.execute(db_change("update user_set set data = '' where name = '2fa' and id = ?"), [user_name])
 
-            conn.commit()
-
             return redirect(conn, '/user/' + url_pas(user_name))
         else:
             return easy_minify(conn, flask.render_template(skin_check(conn),

+ 0 - 1
route/go_main_func_easter_egg.py

@@ -9,7 +9,6 @@ def main_func_easter_egg():
             curs.execute(db_change('select name from user_set where id = ? and name = ?'), [ip, 'get_🥚'])
             if not curs.fetchall():
                 curs.execute(db_change('insert into user_set (name, id, data) values ("get_🥚", ?, "Y")'), [ip])
-                conn.commit()
     
         if platform.system() == 'Linux':
             if platform.machine() in ["AMD64", "x86_64"]:

+ 0 - 1
route/list_user_check_delete.py

@@ -14,7 +14,6 @@ def list_user_check_delete(name = None, ip = None, time = None, do_type = 1):
         if user_id and user_ip and time:
             if flask.request.method == 'POST':
                 curs.execute(db_change("delete from ua_d where name = ? and ip = ? and today = ?"), [user_id, user_ip, time])
-                conn.commit()
 
                 return redirect(conn, '/list/user/check/' + url_pas(user_id if return_type == '0' else user_ip))
             else:

+ 0 - 5
route/login_find_email_check.py

@@ -29,8 +29,6 @@ def login_find_email_check(tool):
                 curs.execute(db_change('select data from other where name = "reset_user_text"'))
                 sql_d = curs.fetchall()
                 b_text = (sql_d[0][0] + '<hr class="main_hr">') if sql_d and sql_d[0][0] != '' else ''
-
-                conn.commit()
         
                 return easy_minify(conn, flask.render_template(skin_check(conn),
                     imp = [get_lang(conn, 'reset_user_ok'), wiki_set(conn), wiki_custom(conn), wiki_css([0, 0])],
@@ -82,7 +80,6 @@ def login_find_email_check(tool):
                         user_app_data['email'] = flask.session['c_email']
                         
                         curs.execute(db_change("insert into user_set (id, name, data) values (?, ?, ?)"), [flask.session['c_id'], 'application', json.dumps(user_app_data)])
-                        conn.commit()
         
                         for i in re_set_list:
                             flask.session.pop(i, None)
@@ -104,8 +101,6 @@ def login_find_email_check(tool):
         
                     flask.session['id'] = flask.session['c_id']
                     flask.session['head'] = ''
-        
-                    conn.commit()
                 else:
                     curs.execute(db_change('delete from user_set where name = "email" and id = ?'), [ip])
                     curs.execute(db_change('insert into user_set (name, id, data) values ("email", ?, ?)'), [ip, flask.session['c_email']])

+ 0 - 1
route/login_login.py

@@ -56,7 +56,6 @@ def login_login_2():
                 flask.session['id'] = user_id
 
                 ua_plus(conn, user_id, ip, user_agent, get_time())
-                conn.commit()
 
                 return redirect(conn, '/user')
         else:

+ 0 - 1
route/login_login_2fa.py

@@ -46,7 +46,6 @@ def login_login_2fa_2():
                 user_agent, 
                 get_time()
             )
-            conn.commit()
 
             flask.session.pop('b_id', None)
 

+ 0 - 1
route/login_login_2fa_email.py

@@ -41,7 +41,6 @@ def login_login_2fa_email_2():
             flask.session['id'] = user_id
 
             ua_plus(conn, user_id, ip, user_agent, get_time())
-            conn.commit()
 
             flask.session.pop('b_id', None)
 

+ 0 - 2
route/login_register.py

@@ -70,8 +70,6 @@ def login_register_2():
             # 전부 아니면 바로 가입 후 /login으로 발송
             add_user(conn, user_id, user_pw)
 
-            conn.commit()
-
             return redirect(conn, '/login')
         else:
             curs.execute(db_change('select data from other where name = "contract"'))

+ 0 - 1
route/login_register_submit.py

@@ -49,7 +49,6 @@ def login_register_submit_2():
                 flask.session.pop(for_a, None)
 
             curs.execute(db_change("insert into user_set (id, name, data) values (?, ?, ?)"), [user_app_data['id'], 'application', json.dumps(user_app_data)])
-            conn.commit()
 
             for for_a in get_admin_list(conn):
                 add_alarm(conn, for_a, user_app_data['id'], '<a href="/app_submit">' + get_lang(conn, 'new_application') + '</a>')

+ 0 - 3
route/main_setting_acl.py

@@ -29,7 +29,6 @@ def main_setting_acl():
                 return re_error(conn, '/ban')
             else:
                 curs.executemany(db_change("update other set data = ? where name = ?"), [[flask.request.form.get(i_list[for_a], 'normal'), i_list[for_a]] for for_a in i_list])
-                conn.commit()
 
                 return redirect(conn, '/setting/acl')
         else:
@@ -47,8 +46,6 @@ def main_setting_acl():
                     curs.execute(db_change('insert into other (name, data, coverage) values (?, ?, "")'), [i_list[for_a], default_data])
                     d_list[for_a] = default_data
 
-            conn.commit()
-
             acl_list = get_acl_list()
             for for_a in range(0, len(i_list)):
                 for data_list in acl_list:

+ 0 - 4
route/main_setting_external.py

@@ -26,8 +26,6 @@ def main_setting_external():
 
                 curs.execute(db_change("update other set data = ? where name = ?"), [into_data, data])
 
-            conn.commit()
-
             admin_check(conn, None, 'edit_set (external)')
 
             return redirect(conn, '/setting/external')
@@ -47,8 +45,6 @@ def main_setting_external():
 
                 x += 1
 
-            conn.commit()
-
             security_radios = ''
             for i in ['tls', 'starttls', 'plain']:
                 if d_list[4] == i:

+ 0 - 2
route/main_setting_head.py

@@ -30,8 +30,6 @@ def main_setting_head(num, skin_name = '', set_preview = 0):
             else:
                 curs.execute(db_change("insert into other (name, data, coverage) values (?, ?, ?)"), [info_d, flask.request.form.get('content', ''), coverage])
 
-            conn.commit()
-
             admin_check(conn, None, 'edit_set (' + info_d + ')')
 
             if skin_name == '':

+ 0 - 4
route/main_setting_main.py

@@ -55,8 +55,6 @@ def main_setting_main(db_set):
                     setting_list[i][0]
                 ])
 
-            conn.commit()
-
             admin_check(conn, None, 'edit_set (main)')
 
             return redirect(conn, '/setting/main')
@@ -69,8 +67,6 @@ def main_setting_main(db_set):
                     curs.execute(db_change('insert into other (name, data, coverage) values (?, ?, "")'), [setting_list[i][0], setting_list[i][1]])
 
                 d_list[i] = db_data[0][0] if db_data else setting_list[i][1]
-            else:
-                conn.commit()
 
             init_set_list = get_init_set_list()
                 

+ 0 - 4
route/main_setting_main_logo.py

@@ -20,8 +20,6 @@ def main_setting_main_logo():
                     i[1]
                 ])
 
-            conn.commit()
-
             admin_check(conn, None, 'edit_set (logo)')
 
             return redirect(conn, '/setting/main/logo')
@@ -37,8 +35,6 @@ def main_setting_main_logo():
 
                     d_list += ['']
 
-            conn.commit()
-
             end_data = ''
             for i in range(0, len(skin_list)):
                 end_data += '' + \

+ 0 - 3
route/main_setting_phrase.py

@@ -41,7 +41,6 @@ def main_setting_phrase():
         ]
         if flask.request.method == 'POST':
             curs.executemany(db_change("update other set data = ? where name = ?"), [[flask.request.form.get(for_a, ''), for_a] for for_a in i_list])
-            conn.commit()
 
             admin_check(conn, None, 'edit_set (phrase)')
 
@@ -57,8 +56,6 @@ def main_setting_phrase():
                     curs.execute(db_change('insert into other (name, data, coverage) values (?, ?, "")'), [i, ''])
                     d_list += ['']
 
-            conn.commit()
-
             return easy_minify(conn, flask.render_template(skin_check(conn),
                 imp = [get_lang(conn, 'text_setting'), wiki_set(conn), wiki_custom(conn), wiki_css([0, 0])],
                 data = render_simple_set(conn, '''

+ 0 - 2
route/main_setting_robot.py

@@ -32,8 +32,6 @@ def main_setting_robot():
             else:
                 curs.execute(db_change("insert into other (name, data, coverage) values ('robot_default', ?, '')"), [flask.request.form.get('default', '')])
 
-            conn.commit()
-
             admin_check(conn, None, 'edit_set (robot)')
 
             return redirect(conn, '/setting/robot')

+ 0 - 4
route/main_setting_sitemap_set.py

@@ -22,8 +22,6 @@ def main_setting_sitemap_set():
                     setting_list[i][0]
                 ])
 
-            conn.commit()
-
             admin_check(conn, None, 'edit_set (sitemap)')
 
             return redirect(conn, '/setting/sitemap_set')
@@ -39,8 +37,6 @@ def main_setting_sitemap_set():
                     ])
 
                 d_list[i] = db_data[0][0] if db_data else setting_list[i][1]
-            else:
-                conn.commit()
 
             check_box_div = [0, 1, 2, 3, 4, '']
             for i in range(0, len(check_box_div)):

+ 0 - 2
route/main_setting_skin_set.py

@@ -18,8 +18,6 @@ def main_setting_skin_set():
                     curs.execute(db_change("update other set data = ? where name = ?"), [flask.request.form.get(for_b, set_list[for_b][0][0]), for_b])
                 else:
                     curs.execute(db_change('insert into other (name, data, coverage) values (?, ?, "")'), [for_b, flask.request.form.get(for_b, set_list[for_b][0][0])])
-            
-            conn.commit()
 
             admin_check(conn, None, 'edit_set (skin_set)')
 

+ 0 - 2
route/main_setting_top_menu.py

@@ -14,8 +14,6 @@ def main_setting_top_menu():
             else:
                 curs.execute(db_change("insert into other (name, data, coverage) values ('top_menu', ?, '')"), [flask.request.form.get('content', '')])
 
-            conn.commit()
-
             admin_check(conn, None, 'edit_set (top_menu)')
 
             return redirect(conn, '/setting/top_menu')

+ 0 - 2
route/main_sys_shutdown.py

@@ -8,8 +8,6 @@ def main_sys_shutdown():
         if flask.request.method == 'POST':
             admin_check(conn, None, 'shutdown')
 
-            conn.commit()
-
             print('Shutdown')
 
             os._exit(0)

+ 0 - 2
route/recent_app_submit.py

@@ -109,9 +109,7 @@ def recent_app_submit_2():
                 curs.execute(db_change("insert into user_set (name, id, data) values ('approval_question_answer', ?, ?)"), [application['id'], application['answer']])
 
                 curs.execute(db_change('delete from user_set where id = ? and name = "application"'), [application['id']])
-                conn.commit()
             elif flask.request.form.get('decline', '') != '':
                 curs.execute(db_change('delete from user_set where id = ? and name = "application"'), [flask.request.form.get('decline', '')])
-                conn.commit()
 
             return redirect(conn, '/app_submit')

+ 0 - 2
route/recent_history_add.py

@@ -27,8 +27,6 @@ def recent_history_add(name = 'Test', do_type = ''):
                 mode = 'add'
             )
 
-            conn.commit()
-
             return redirect(conn, '/history/' + url_pas(name))
         else:            
             return easy_minify(conn, flask.render_template(skin_check(conn),

+ 0 - 1
route/recent_history_delete.py

@@ -13,7 +13,6 @@ def recent_history_delete(name = 'Test', rev = 1):
             admin_check(conn, None, 'history delete ' + name + ' r' + num)
 
             curs.execute(db_change("delete from history where id = ? and title = ?"), [num, name])
-            conn.commit()
 
             return redirect(conn, '/history/' + url_pas(name))
         else:

+ 0 - 2
route/recent_history_hidden.py

@@ -13,6 +13,4 @@ def recent_history_hidden(name = 'Test', rev = 1):
             else:
                 curs.execute(db_change("update history set hide = 'O' where title = ? and id = ?"), [name, num])
 
-            conn.commit()
-
         return redirect(conn, '/history/' + url_pas(name))

+ 0 - 1
route/recent_history_reset.py

@@ -11,7 +11,6 @@ def recent_history_reset(name = 'Test'):
             admin_check(conn, None, 'history reset ' + name)
 
             curs.execute(db_change("delete from history where title = ?"), [name])
-            conn.commit()
 
             return redirect(conn, '/history/' + url_pas(name))
         else:

+ 0 - 2
route/recent_history_send.py

@@ -20,8 +20,6 @@ def recent_history_send(name = 'Test', rev = 1):
                     num
                 ])
 
-            conn.commit()
-
             return redirect(conn, '/history/' + url_pas(name))
         else:
             curs.execute(db_change("select send from history where title = ? and id = ?"), [name, num])

+ 0 - 1
route/recent_record_reset.py

@@ -11,7 +11,6 @@ def recent_record_reset(name = 'Test'):
             admin_check(conn, None, 'record reset ' + name)
 
             curs.execute(db_change("delete from history where ip = ?"), [name])
-            conn.commit()
 
             return redirect(conn, '/record/' + url_pas(name))
         else:

+ 3 - 4
route/tool/func.py

@@ -157,7 +157,6 @@ class get_db_connect:
                 check_same_thread = False,
                 isolation_level = None
             )
-            self.conn.execute('pragma journal_mode = wal')
         else:
             self.conn = pymysql.connect(
                 host = self.db_set['mysql_host'],
@@ -380,8 +379,7 @@ def update(conn, ver_num, set_data):
                 curs.execute(db_change("update other set data = '' where name = 'recaptcha'"))
                 curs.execute(db_change("update other set data = '' where name = 'sec_re'"))
     
-    if  ver_num < 3172800 and \
-        set_data['db_type'] == 'mysql':
+    if ver_num < 3172800 and set_data['type'] == 'mysql':
         get_data_mysql = json.loads(open('data/mysql.json', encoding = 'utf8').read())
         
         with open('data/mysql.json', 'w') as f:
@@ -607,7 +605,8 @@ def update(conn, ver_num, set_data):
             if get_data and (int(get_data[0][0]) + 1) == int(for_a[1]):
                 curs.execute(db_change("insert into data_set (doc_name, doc_rev, set_name, set_data) values (?, ?, 'edit_request_doing', '1')"), [for_a[0], for_a[1]])
 
-    conn.commit()
+    if ver_num < 3500377 and set_data['type'] == 'sqlite':
+        conn.execute('pragma journal_mode = delete')
 
     print('Update completed')
 

+ 0 - 2
route/tool/func_render.py

@@ -91,7 +91,5 @@ class class_do_render:
                 curs.execute(db_change("insert into data_set (doc_name, doc_rev, set_name, set_data) values (?, '', 'doc_type', 'redirect')"), [doc_name])
             else:
                 curs.execute(db_change("insert into data_set (doc_name, doc_rev, set_name, set_data) values (?, '', 'doc_type', '')"), [doc_name])
-            
-            self.conn.commit()
 
         return [data_end[0], data_end[1], data_end[2]]

+ 0 - 2
route/topic.py

@@ -113,8 +113,6 @@ def topic(topic_num = 0, do_type = '', doc_name = 'Test'):
                 sub
             )
 
-            conn.commit()
-
             return redirect(conn, '/thread/' + topic_num + '#' + num)
         else:
             acl_display = 'display: none;' if topic_acl == 1 else ''

+ 0 - 2
route/topic_comment_blind.py

@@ -23,6 +23,4 @@ def topic_comment_blind(topic_num = 1, num = 1):
                 get_time()
             )
 
-            conn.commit()
-
         return redirect(conn, '/thread/' + topic_num + '#' + num)

+ 0 - 1
route/topic_comment_delete.py

@@ -12,7 +12,6 @@ def topic_comment_delete(topic_num = 1, num = 1):
 
         if flask.request.method == 'POST':
             curs.execute(db_change("delete from topic where code = ? and id = ?"), [topic_num, num])
-            conn.commit()
 
             return redirect(conn, '/thread/' + topic_num)
         else:

+ 0 - 2
route/topic_comment_notice.py

@@ -24,7 +24,5 @@ def topic_comment_notice(topic_num = 1, num = 1):
                 topic_num, 
                 get_time()
             )
-            
-            conn.commit()
 
         return redirect(conn, '/thread/' + topic_num + '#' + num)

+ 0 - 1
route/topic_tool_delete.py

@@ -12,7 +12,6 @@ def topic_tool_delete(topic_num = 1):
         if flask.request.method == 'POST':
             curs.execute(db_change("delete from topic where code = ?"), [topic_num])
             curs.execute(db_change("delete from rd where code = ?"), [topic_num])
-            conn.commit()
 
             return redirect(conn, '/')
         else:

+ 0 - 1
route/user_alarm.py

@@ -35,7 +35,6 @@ def user_alarm():
                 ''
 
         curs.execute(db_change("update user_notice set readme = '1' where name = ?"), [ip])
-        conn.commit()
     
         data += '' + \
             '</ul>' + \

+ 0 - 2
route/user_alarm_delete.py

@@ -8,7 +8,5 @@ def user_alarm_delete(id = ''):
             curs.execute(db_change("delete from user_notice where name = ? and id = ?"), [ip_check(), str(id)])
         else:
             curs.execute(db_change("delete from user_notice where name = ?"), [ip_check()])
-        
-        conn.commit()
 
         return redirect(conn, '/alarm')

+ 0 - 2
route/user_setting.py

@@ -41,8 +41,6 @@ def user_setting():
                     else:
                         curs.execute(db_change("insert into user_set (name, id, data) values (?, ?, ?)"), [auto_data[0], ip, auto_data[1]])
 
-                conn.commit()
-
                 return redirect(conn, '/change')
             else:
                 curs.execute(db_change('select data from user_set where name = "email" and id = ?'), [ip])

+ 0 - 1
route/user_setting_email_delete.py

@@ -7,6 +7,5 @@ def user_setting_email_delete():
         ip = ip_check()
         if ip_or_user(ip) == 0:
             curs.execute(db_change("delete from user_set where name = 'email' and id = ?"), [ip])
-            conn.commit()
     
         return redirect(conn, '/change')

+ 0 - 2
route/user_setting_head.py

@@ -18,8 +18,6 @@ def user_setting_head(skin_name = ''):
                     curs.execute(db_change("update user_set set data = ? where id = ? and name = ?"), [get_data, ip, 'custom_css' + skin_name])
                 else:
                     curs.execute(db_change("insert into user_set (id, name, data) values (?, ?, ?)"), [ip, 'custom_css' + skin_name, get_data])
-
-                conn.commit()
         
             flask.session['head' + skin_name] = get_data
 

+ 0 - 2
route/user_setting_head_reset.py

@@ -22,8 +22,6 @@ def user_setting_head_reset():
                 else:
                     curs.execute(db_change("insert into user_set (id, name, data) values (?, ?, ?)"), [ip, 'custom_css_' + skin_name, get_data])
 
-                conn.commit()
-
             flask.session['head'] = ''
             flask.session['head_' + skin_name] = ''
 

+ 0 - 1
route/user_setting_key.py

@@ -14,6 +14,5 @@ def user_setting_key():
 
             curs.execute(db_change("delete from user_set where name = 'random_key' and id = ?"), [ip])
             curs.execute(db_change("insert into user_set (name, id, data) values ('random_key', ?, ?)"), [ip, key])
-            conn.commit()
 
         return redirect(conn, '/change')

+ 0 - 1
route/user_setting_key_delete.py

@@ -7,6 +7,5 @@ def user_setting_key_delete():
         ip = ip_check()
         if ip_or_user(ip) == 0:
             curs.execute(db_change("delete from user_set where name = 'random_key' and id = ?"), [ip])
-            conn.commit()
     
         return redirect(conn, '/change')

+ 0 - 2
route/user_setting_pw.py

@@ -49,8 +49,6 @@ def user_setting_pw():
                 return re_error(conn, '/error/10')
 
             curs.execute(db_change("update user_set set data = ? where id = ? and name = 'pw'"), [pw_encode(conn, user_pw), ip])
-            
-            conn.commit()
 
             return redirect(conn, '/user')
         else:

+ 0 - 2
route/user_setting_skin_set_main.py

@@ -140,8 +140,6 @@ def user_setting_skin_set_main():
                 else:
                     flask.session[for_b] = flask.request.form.get(for_b, set_list[for_b][0][0])
 
-            conn.commit()
-
             return html_data
         else:
             set_data = {}

+ 0 - 2
route/user_setting_top_menu.py

@@ -18,8 +18,6 @@ def user_setting_top_menu():
             else:
                 curs.execute(db_change("insert into user_set (name, data, id) values ('top_menu', ?, ?)"), [flask.request.form.get('content', ''), ip])
 
-            conn.commit()
-
             return redirect(conn, '/change/top_menu')
         else:
             curs.execute(db_change("select data from user_set where name = 'top_menu' and id = ?"), [ip])

+ 0 - 2
route/user_watch_list_name.py

@@ -33,8 +33,6 @@ def user_watch_list_name(tool, name = 'Test'):
 
             curs.execute(db_change("insert into user_set (id, name, data) values (?, ?, ?)"), [ip, type_data, name])
 
-        conn.commit()
-
         if name_from == 1:
             return redirect(conn, '/w/' + url_pas(name))
         else:

+ 0 - 2
route/view_set.py

@@ -109,8 +109,6 @@ def view_set(name = 'Test'):
                 mode = 'setting'
             )
 
-            conn.commit()
-
             return redirect(conn, '/acl/' + url_pas(name))
         else:
             data = '<h2>' + get_lang(conn, 'acl') + '</h2>'

+ 0 - 2
route/vote_add.py

@@ -40,8 +40,6 @@ def vote_add():
                         id_data,
                         time_limit
                     ])
-                    
-            conn.commit()
 
             return redirect(conn, '/vote')
         else:

+ 0 - 1
route/vote_close.py

@@ -25,7 +25,6 @@ def vote_close(num = 1):
 
         curs.execute(db_change("update vote set type = ? where user = '' and id = ? and type = ?"), [type_set, num, data_list[0][0]])
         curs.execute(db_change('delete from vote where name = "end_date" and type = "option" and id = ?'), [num])
-        conn.commit()
 
         if data_list[0][0] == 'close' or data_list[0][0] == 'n_close':
             return redirect(conn, '/vote')

+ 0 - 1
route/vote_select.py

@@ -49,7 +49,6 @@ def vote_select(num = 1):
                 str(vaild_check),
                 ip_check()
             ])
-            conn.commit()
 
             return redirect(conn, '/vote/end/' + num)
         else:

BIN
route_go/bin/main.amd64.bin


BIN
route_go/bin/main.amd64.exe


BIN
route_go/bin/main.arm64.bin


BIN
route_go/bin/main.arm64.exe


+ 2 - 16
route_go/go.mod

@@ -6,9 +6,9 @@ toolchain go1.22.0
 
 require (
 	github.com/go-sql-driver/mysql v1.8.0
-	github.com/microcosm-cc/bluemonday v1.0.26
-	github.com/russross/blackfriday/v2 v2.1.0
+	github.com/google/generative-ai-go v0.10.0
 	github.com/yuin/goldmark v1.7.0
+	google.golang.org/api v0.149.0
 	modernc.org/sqlite v1.29.5
 )
 
@@ -19,48 +19,34 @@ require (
 	cloud.google.com/go/compute/metadata v0.2.3 // indirect
 	cloud.google.com/go/longrunning v0.5.2 // indirect
 	filippo.io/edwards25519 v1.1.0 // indirect
-	github.com/aymerick/douceur v0.2.0 // indirect
 	github.com/dustin/go-humanize v1.0.1 // indirect
 	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
 	github.com/golang/protobuf v1.5.3 // indirect
-	github.com/google/generative-ai-go v0.10.0 // indirect
 	github.com/google/s2a-go v0.1.7 // indirect
 	github.com/google/uuid v1.6.0 // indirect
 	github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
 	github.com/googleapis/gax-go/v2 v2.12.0 // indirect
-	github.com/gorilla/css v1.0.1 // indirect
 	github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
-	github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
 	github.com/mattn/go-isatty v0.0.20 // indirect
 	github.com/ncruces/go-strftime v0.1.9 // indirect
 	github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
-	github.com/russross/blackfriday v1.6.0 // indirect
 	go.opencensus.io v0.24.0 // indirect
 	golang.org/x/crypto v0.21.0 // indirect
-	golang.org/x/mod v0.16.0 // indirect
 	golang.org/x/net v0.22.0 // indirect
 	golang.org/x/oauth2 v0.13.0 // indirect
 	golang.org/x/sync v0.6.0 // indirect
 	golang.org/x/sys v0.18.0 // indirect
 	golang.org/x/text v0.14.0 // indirect
-	golang.org/x/tools v0.19.0 // indirect
-	golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
-	google.golang.org/api v0.149.0 // indirect
 	google.golang.org/appengine v1.6.7 // indirect
 	google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect
 	google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b // indirect
 	google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect
 	google.golang.org/grpc v1.59.0 // indirect
 	google.golang.org/protobuf v1.33.0 // indirect
-	lukechampine.com/uint128 v1.2.0 // indirect
-	modernc.org/cc/v3 v3.41.0 // indirect
-	modernc.org/ccgo/v3 v3.16.15 // indirect
 	modernc.org/gc/v3 v3.0.0-20240304020402-f0dba7c97c2b // indirect
 	modernc.org/libc v1.44.1 // indirect
 	modernc.org/mathutil v1.6.0 // indirect
 	modernc.org/memory v1.7.2 // indirect
-	modernc.org/opt v0.1.3 // indirect
 	modernc.org/strutil v1.2.0 // indirect
 	modernc.org/token v1.1.0 // indirect
-	mvdan.cc/xurls/v2 v2.5.0 // indirect
 )

+ 15 - 81
route_go/go.sum

@@ -12,8 +12,6 @@ cloud.google.com/go/longrunning v0.5.2/go.mod h1:nqo6DQbNV2pXhGDbDMoN2bWz68MjZUz
 filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
 filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
-github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
@@ -25,8 +23,6 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
-github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
 github.com/go-sql-driver/mysql v1.8.0 h1:UtktXaU2Nb64z/pLiGIxY4431SJ4/dR5cjMmlVHgnT4=
 github.com/go-sql-driver/mysql v1.8.0/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -56,60 +52,43 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
 github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ=
+github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo=
 github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
 github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
 github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
-github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
 github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=
 github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
 github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=
 github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
-github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY=
-github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c=
-github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
-github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0=
 github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
 github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
-github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
-github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
-github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
-github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
 github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
 github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
-github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
 github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
-github.com/microcosm-cc/bluemonday v1.0.26 h1:xbqSvqzQMeEHCqMi64VAs4d8uy6Mequs3rQ0k/Khz58=
-github.com/microcosm-cc/bluemonday v1.0.26/go.mod h1:JyzOCs9gkyQyjs+6h10UEVSe02CGwkhd72Xdqh78TWs=
+github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
 github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4=
 github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
-github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww=
-github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY=
-github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
-github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
 github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
 github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.7.0 h1:EfOIvIMZIzHdB/R/zVrikYLPPwJlfMcNczJFMs1m6sA=
 github.com/yuin/goldmark v1.7.0/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=
 go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
 go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
 golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
@@ -117,9 +96,7 @@ golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
 golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -127,13 +104,7 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
-golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
-golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo=
-golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
 golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc=
 golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -142,20 +113,13 @@ golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
 golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU=
-golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
-golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
-golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
 golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -168,19 +132,9 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
 golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78 h1:M8tBwCtWD/cZV9DZpFYRUgaymAYAr+aIUTWzDaM3uPs=
-golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc=
-golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps=
 golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw=
 golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
 google.golang.org/api v0.149.0 h1:b2CqT6kG+zqJIVKRQ3ELJVLN1PwHZ6DJ3dW8yl82rgY=
 google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
@@ -221,49 +175,29 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-lukechampine.com/uint128 v1.2.0 h1:mBi/5l91vocEN8otkC5bDLhi2KdCticRiwbdB0O+rjI=
-lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
-modernc.org/cc/v3 v3.40.0 h1:P3g79IUS/93SYhtoeaHW+kRCIrYaxJ27MFPv+7kaTOw=
-modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0=
-modernc.org/cc/v3 v3.41.0/go.mod h1:Ni4zjJYJ04CDOhG7dn640WGfwBzfE0ecX8TyMB0Fv0Y=
-modernc.org/ccgo/v3 v3.16.13 h1:Mkgdzl46i5F/CNR/Kj80Ri59hC8TKAhZrYSaqvkwzUw=
-modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY=
-modernc.org/ccgo/v3 v3.16.15/go.mod h1:yT7B+/E2m43tmMOT51GMoM98/MtHIcQQSleGnddkUNI=
-modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk=
-modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 h1:5D53IMaUuA5InSeMu9eJtlQXS2NxAhyWQvkKEgXZhHI=
-modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4=
+modernc.org/cc/v4 v4.19.3 h1:vE9kmJqUcyvNOf8F2Hn8od14SOMq34BiqcZ2tMzLk5c=
+modernc.org/cc/v4 v4.19.3/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ=
+modernc.org/ccgo/v4 v4.10.1 h1:qi+3luLv0LR5UkLmZyKXZxIC4K/136vcAUoYYeGSS+g=
+modernc.org/ccgo/v4 v4.10.1/go.mod h1:9YDnb1IIvHymh899K5a++jza0JIWygZPTc5dlh7xvhQ=
+modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE=
+modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ=
+modernc.org/gc/v2 v2.4.1 h1:9cNzOqPyMJBvrUipmynX0ZohMhcxPtMccYgGOJdOiBw=
+modernc.org/gc/v2 v2.4.1/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU=
 modernc.org/gc/v3 v3.0.0-20240304020402-f0dba7c97c2b h1:BnN1t+pb1cy61zbvSUV7SeI0PwosMhlAEi/vBY4qxp8=
 modernc.org/gc/v3 v3.0.0-20240304020402-f0dba7c97c2b/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4=
-modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM=
-modernc.org/libc v1.24.1 h1:uvJSeCKL/AgzBo2yYIPPTy82v21KgGnizcGYfBHaNuM=
-modernc.org/libc v1.24.1/go.mod h1:FmfO1RLrU3MHJfyi9eYYmZBfi/R+tqZ6+hQ3yQQUkak=
-modernc.org/libc v1.41.0 h1:g9YAc6BkKlgORsUWj+JwqoB1wU3o4DE3bM3yvA3k+Gk=
-modernc.org/libc v1.41.0/go.mod h1:w0eszPsiXoOnoMJgrXjglgLuDy/bt5RR4y3QzUUeodY=
 modernc.org/libc v1.44.1 h1:dsoFMypkA7AofdQCx4JZpwym4DuWqyzhH1tpyU8ZV5g=
 modernc.org/libc v1.44.1/go.mod h1:RRqfGVjvILF5AdNP3RPCiihj7+Dn2pIBrdlU60lA9vs=
-modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ=
-modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
 modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4=
 modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo=
-modernc.org/memory v1.6.0 h1:i6mzavxrE9a30whzMfwf7XWVODx2r5OYXvU46cirX7o=
-modernc.org/memory v1.6.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
 modernc.org/memory v1.7.2 h1:Klh90S215mmH8c9gO98QxQFsY+W451E8AnzjoE2ee1E=
 modernc.org/memory v1.7.2/go.mod h1:NO4NVCQy0N7ln+T9ngWqOQfi7ley4vpwvARR+Hjw95E=
 modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4=
 modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
-modernc.org/sqlite v1.25.0 h1:AFweiwPNd/b3BoKnBOfFm+Y260guGMF+0UFk0savqeA=
-modernc.org/sqlite v1.25.0/go.mod h1:FL3pVXie73rg3Rii6V/u5BoHlSoyeZeIgKZEgHARyCU=
+modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc=
+modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss=
 modernc.org/sqlite v1.29.5 h1:8l/SQKAjDtZFo9lkJLdk8g9JEOeYRG4/ghStDCCTiTE=
 modernc.org/sqlite v1.29.5/go.mod h1:S02dvcmm7TnTRvGhv8IGYyLnIt7AS2KPaB1F/71p75U=
-modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY=
-modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw=
 modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA=
 modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0=
-modernc.org/tcl v1.15.2 h1:C4ybAYCGJw968e+Me18oW55kD/FexcHbqH2xak1ROSY=
-modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg=
-modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
 modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
 modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
-modernc.org/z v1.7.3 h1:zDJf6iHjrnB+WRD88stbXokugjyc0/pB91ri1gO6LZY=
-mvdan.cc/xurls/v2 v2.5.0 h1:lyBNOm8Wo71UknhUs4QTFUNNMyxy2JEIaKKo0RWOh+8=
-mvdan.cc/xurls/v2 v2.5.0/go.mod h1:yQgaGQ1rFtJUzkmKiHYSSfuQxqfYmd//X6PxvholpeE=

+ 2 - 2
version.json

@@ -1,7 +1,7 @@
 {
     "beta" : {
-        "r_ver" : "v3.5.0-dev78",
-        "c_ver" : "3500376",
+        "r_ver" : "v3.5.0-dev80",
+        "c_ver" : "3500377",
         "s_ver" : "3500113"
     }
 }

+ 6 - 2
views/main_css/css/sub/dark.css

@@ -3,8 +3,12 @@ html, body {
     color: white;
 }
 
+a {
+    color: #A7C8FF;
+}
+
 a:hover {
-    color: cornflowerblue;
+    color: #A7C8FF;
 }
 
 textarea, input, button, select {
@@ -87,4 +91,4 @@ blockquote {
 
 .opennamu_diff_red {
     background: #803737;
-}
+}