#-*- coding: utf-8 -*-

####################################################################
#                                                                  #
#  VERSION: 0.08                                                   #
#                                                                  #
#  DESCRIPTION:                                                    #
#  This plugin will show you the number of unique Hanzi in your    #
#  deck. It will also show you statistics on how many of the most  #
#  most frequent characters (based on the Modern Chinese list at   #
#  http://lingua.mtsu.edu/chinese-computing/statistics/) you have  #
#  seen in your deck. These statistics are sorted in groups of     #
#  500 of the most frequent characters list, up to 3500            #
#  characters. So, 1-500 are the 500 most frequent characters and  #
#  you will see how many of those are in your deck.                #
#                                                                  #
#  You will also be given statistics on how many of the unique     #
#  characters you have seen in each HSK level. This is based on    #
#  individual characters and not vocabulary. HSK statistics will   #
#  only be shown when Simplified characters has been chosen.       #
#                                                                  #
#  All 'seen' or 'missing' Hanzi is listed when you press the      #
#  on of the sums in ie. "1-500   250 of 500   50.0%". So          #
#  clicking 250 will show the 250 Hanzi in your deck and           #
#  clicking on 500 will show you the missing 250 Hanzi. All        #
#  displayed Hanzi are clickable, opening a website giving the     #
#  Hanzi definition.																							 #
#                                                                  #
#  This plugin can keep track of exactly how many Hanzi you know.  #
#  If you studied some (or a lot) outside of Anki and this plugin  #
#  insists on listing them as unkown, specify a text file in the   #
#  settings below and list all additional known characters there.  #
#  The plugin will then assume you know these as well and give you #
#  a much more accurate count and list of unknown characters.      #							                                               #
#                                                                  #
#  INSTALLATION:                                                   #
#  Put this file in the .anki/plugins directory.                   #
#  It will look for Hanzi in a field whose name includes 'Hanzi'   #
#                                                                  #
#  You can have as many Hanzi as you want and also non Hanzi       #
#  in the field. This plugin will count the Hanzi and ignore       #
#  anything else.                                                  #
#                                                                  #
#  You can choose between Simplified and Traditional characters.   #
#  See SETTINGS section below.                                     #
#                                                                  #
#  You can choose between counting new cards or not in the         #
#  statistics. See SETTINGS section below.                         #
#                                                                  #
#  AUTHOR:                                                         #
#  Hedge (c dot reksten dot monsen at gmail dot com)               #
#                                                                  #
####################################################################

import os
import codecs
import traceback
import sys

from PyQt4 import QtGui, QtCore
from ankiqt import mw
from anki.stats import isKanji

#  SETTINGS
#  Choose between Simplified (0) and Traditional (1) characters.
#  Toggle counting new cards (1) or not counting them (0)
#  Give file address if you want additional characters to be considered as learned
#  e. g. FILE = os.path.join(mw.config.configPath, "plugins", "known_hanzi.txt")
SIMPTRAD = 0
COUNTNEW = 1
FILE = os.path.join(mw.config.configPath, "plugins", "known_hanzi.txt")

####################################################################
#  Add Hanzi statisticts choice to the Tool menu. On pressing it,  #
#  slot_sync function will run.                                    #
####################################################################
def init_hook():
  mw.mainWin.HanziStats = QtGui.QAction('Hanzi statistics', mw)
  mw.mainWin.HanziStats.setStatusTip('Hanzi statistics')
  mw.mainWin.HanziStats.setEnabled(True)
  mw.mainWin.HanziStats.setIcon(QtGui.QIcon(":/icons/kanji.png"))
  mw.connect(mw.mainWin.HanziStats, QtCore.SIGNAL('triggered()'), slot_sync)
  mw.mainWin.menuTools.addAction(mw.mainWin.HanziStats)

####################################################################
#  Return all unique Hanzi in the current deck.                    #
####################################################################
def get_deckHanzi():
  hanzi_ids = mw.deck.s.column0("select id from fieldModels where name LIKE '%Hanzi%'")
  hanzis = ""
  hanzi = ""
  for hanzi_id in hanzi_ids:
    if COUNTNEW == 0:
      hanzis = mw.deck.s.column0("select value from cards, fields where fieldModelID = :hid AND cards.factId = fields.factId AND cards.reps > 0", hid=hanzi_id)
    if COUNTNEW == 1:
      hanzis = mw.deck.s.column0("select value from fields where fieldModelID = :hid", hid=hanzi_id)
    for u in hanzis:
      for c in u:
        if isKanji(c):
          if hanzi.find(c) == -1:
            hanzi = hanzi + c;
    
    # additionally get Hanzi from file
    if FILE:
      f = codecs.open(FILE, "rb", "utf8")
      for line in f.readlines():
        for c in line:
          if isKanji(c):
				    if hanzi.find(c) == -1:
					    hanzi = hanzi + c;
    
    
  return hanzi

####################################################################
#  Return all unique Hanzi from file.                              #
####################################################################
def get_fileHanzi(file):
  hanzis = ""
  hanzi = ""
  
  try:
    f = codecs.open(file, "rb", "utf8")
    for line in f.readlines():
      for c in line:
        if isKanji(c):
				  if hanzi.find(c) == -1:
					  hanzi = hanzi + c; 

    print "hanzi_stats", "read", file

  except:
    print "hanzi_stats", "error reading file", file
    
  return hanzi  

####################################################################
#  Return HTML formatted statistics on seen Hanzi in the frequent  #
#  Hanzi lists.                                                    #
####################################################################
def get_freqstats():
  hanzi = get_deckHanzi()

  #  Create a map of the frequent Hanzi, in intervals of 500 characters.
  hanziMap = [
    {'hanzi': get_freqHanzi500()[SIMPTRAD],  'all_count': 500, 'seen_count': 0},
    {'hanzi': get_freqHanzi1000()[SIMPTRAD], 'all_count': 500, 'seen_count': 0},
    {'hanzi': get_freqHanzi1500()[SIMPTRAD], 'all_count': 500, 'seen_count': 0},
    {'hanzi': get_freqHanzi2000()[SIMPTRAD], 'all_count': 500, 'seen_count': 0},
    {'hanzi': get_freqHanzi2500()[SIMPTRAD], 'all_count': 500, 'seen_count': 0},
    {'hanzi': get_freqHanzi3000()[SIMPTRAD], 'all_count': 500, 'seen_count': 0},
    {'hanzi': get_freqHanzi3500()[SIMPTRAD], 'all_count': 500, 'seen_count': 0}
  ]

  # Count of all other Hanzi
  up3500 = 0

  #  For each group of frequent characters, count how many of the unique
  #  deck Hanzi are in each group.
  for k in hanzi:
    seen = 0
    for i in range(7):
      if k in hanziMap[i]['hanzi']:
        hanziMap[i]['seen_count'] += 1
        seen = 1
        continue
    if seen == 0:
      up3500 += 1

  #  Create a map with the actual statistics that will be used when showing
  #  the stats.
  sub_map = {}
  for i in range(7):
    sub_map['lvl' + str(i+1) + '_t'] = hanziMap[i]['all_count']
    sub_map['lvl' + str(i+1) + '_s'] = hanziMap[i]['seen_count']
    sub_map['lvl' + str(i+1) + '_p'] = round(hanziMap[i]['seen_count']*100.0 / hanziMap[i]['all_count'],2)

  #  Create the HTML formatted output.
  stats = """
		Most frequent characters:<br>
    <table cellpadding=3>
    <tr><td><b>Freq chars</b></td><td><b>Seen</b></td><td><b>Seen %%</b></td></tr>
    <tr><td>1 - 500</td><td><a href=py:have500>%(lvl1_s)s</a> of <a href=py:missing500>%(lvl1_t)s</a></a></td><td>%(lvl1_p)s%%</td></tr>
    <tr><td>501 - 1000</td><td><a href=py:have1000>%(lvl2_s)s</a> of <a href=py:missing1000>%(lvl2_t)s</a></td><td>%(lvl2_p)s%%</td></tr>
    <tr><td>1001 - 1500</td><td><a href=py:have1500>%(lvl3_s)s</a> of <a href=py:missing1500>%(lvl3_t)s</a></td><td>%(lvl3_p)s%%</td></tr>
    <tr><td>1501 - 2000</td><td><a href=py:have2000>%(lvl4_s)s</a> of <a href=py:missing2000>%(lvl4_t)s</a></td><td>%(lvl4_p)s%%</td></tr>
    <tr><td>2001 - 2500</td><td><a href=py:have2500>%(lvl5_s)s</a> of <a href=py:missing2500>%(lvl5_t)s</a></td><td>%(lvl5_p)s%%</td></tr>
    <tr><td>2501 - 3000</td><td><a href=py:have3000>%(lvl6_s)s</a> of <a href=py:missing3000>%(lvl6_t)s</a></td><td>%(lvl6_p)s%%</td></tr>
    <tr><td>3001 - 3500</td><td><a href=py:have3500>%(lvl7_s)s</a> of <a href=py:missing3500>%(lvl7_t)s</a></td><td>%(lvl7_p)s%%</td></tr>
    <tr><td>3500++</td><td><a href=py:have3500up>""" % sub_map
  stats += str(up3500) + "</a></td><td></td></tr></table>"

  return stats

typeShow = "NONE"
whichStat = "NONE"

####################################################################
#  Return HTML formatted statistics on seen Hanzi in the 4 HSK     #
#  Hanzi lists.                                                    #
####################################################################
def get_hskstats():
  hanzi = get_deckHanzi()

  #  Map of unique Hanzi in the different HSK levels
  hanziMap = [
    {'hanzi': get_hskB(), 'all_count':len(get_hskB()), 'seen_count': 0},
    {'hanzi': get_hskE(), 'all_count':len(get_hskE()), 'seen_count': 0},
    {'hanzi': get_hskI(), 'all_count':len(get_hskI()), 'seen_count': 0},
    {'hanzi': get_hskA(), 'all_count':len(get_hskA()), 'seen_count': 0}
  ]

  #  For each HSK level, count how many of the unique
  #  deck Hanzi are in each group.
  for k in hanzi:
    for i in range(4):
      if k in hanziMap[i]['hanzi']:
        hanziMap[i]['seen_count'] += 1
        continue

  #  Create a map with the actual statistics that will be used when showing
  #  the stats.
  sub_map = {}
  for i in range(4):
    sub_map['lvl' + str(i+1) + '_t'] = hanziMap[i]['all_count']
    sub_map['lvl' + str(i+1) + '_s'] = hanziMap[i]['seen_count']
    sub_map['lvl' + str(i+1) + '_p'] = round(hanziMap[i]['seen_count']*100.0 / hanziMap[i]['all_count'],2)

  #  Create the HTML formatted output.
  stats = """
    HSK statistics (characters):<br>
    <table cellpadding=3>
    <tr><td><b>HSK Level</b></td><td><b>Seen</b></td><td><b>Seen %%</b></td></tr>
    <tr><td>Basic (甲)</td><td><a href=py:haveB>%(lvl1_s)s</a> of <a href=py:missingB>%(lvl1_t)s</a></td><td>%(lvl1_p)s%%</td></tr>
    <tr><td>Elementary (乙)</td><td><a href=py:haveE>%(lvl2_s)s</a> of <a href=py:missingE>%(lvl2_t)s</a></td><td>%(lvl2_p)s%%</td></tr>
    <tr><td>Intermediate (丙)</td><td><a href=py:haveI>%(lvl3_s)s</a> of <a href=py:missingI>%(lvl3_t)s</a></td><td>%(lvl3_p)s%%</td></tr>
    <tr><td>Advanced (丁)</td><td><a href=py:haveA>%(lvl4_s)s</a> of <a href=py:missingA>%(lvl4_t)s</a></td><td>%(lvl4_p)s%%</td></tr>
    </table>
  """.decode("utf-8") % sub_map

  return stats

####################################################################
#  "Main" function, run when Hanzi statistics is clicked in the    #
#  Tool menu.                                                      #
####################################################################
def slot_sync():

  #  Output the statistics
  ctype = "simplified"
  if SIMPTRAD == 1:
    ctype = "traditional"

  if FILE:
    outText = """
      <h1>Hanzi (""" + ctype + """) statistics</h1>
      You know """ + str(len(get_deckHanzi())) + """
      unique Hanzi.<br><br>"""
  else:
    outText = """
      <h1>Hanzi (""" + ctype + """) statistics</h1>
      This deck contains """ + str(len(get_deckHanzi())) + """
      unique Hanzi.<br><br>"""
  if SIMPTRAD == 0:
    outText += get_hskstats()
    outText += "<br><br>"

  outText += get_freqstats() + """
    <br><br>
    Cumulative frequency in terms of unique characters:<br>
    <table cellpadding=3>
      <tr><td><b>Freq chars</b></td><td><b>Cumulative freq</b></td></tr>
      <tr><td>500</td><td>75.8%</td></tr>
      <tr><td>1000</td><td>89.1%</td></tr>
      <tr><td>1500</td><td>94.6%</td></tr>
      <tr><td>2000</td><td>97.1%</td></tr>
      <tr><td>2500</td><td>98.5%</td></tr>
      <tr><td>3000</td><td>99.2%</td></tr>
      <tr><td>3500</td><td>99.5%</td></tr>
    </table>
  """
  mw.help.showText(outText, py={"missingB": onMhskB, "missingE": onMhskE, "missingI": onMhskI,
  "missingA": onMhskA, "haveB": onHhskB, "haveE": onHhskE, "haveI": onHhskI, "haveA": onHhskA,
  "missing500": onMFreq500, "missing1000": onMFreq1000, "missing1500": onMFreq1500, "missing2000": onMFreq2000,
  "missing2500": onMFreq2500, "missing3000": onMFreq3000, "missing3500": onMFreq3500, "have500": onHFreq500,
  "have1000": onHFreq1000, "have1500": onHFreq1500, "have2000": onHFreq2000, "have2500": onHFreq2500,
  "have3000": onHFreq3000, "have3500": onHFreq3500, "have3500up": onHFreq3500up})

def backLink():
  return "<a href=py:back>Go back</a>"

####################################################################
#  Show missing or seen Hanzi.                                     #
####################################################################
def onShowHanzi(base, choice):
  out = ""
  if choice == "missing": out += "<h1>Missing Hanzi</h1>"
  if choice == "have": out += "<h1>Seen Hanzi</h1>"
  if choice == "other": out += "<h1>Other Hanzi</h1>"
  out += backLink() + "<br><br>"
  missing = ""
  hanzi = get_deckHanzi()
  if choice == "other":
    for h in hanzi:
      if h not in base:
        missing += h
        continue
  else:
    for h in base:
      if choice == "missing":
        if h not in hanzi:
          missing += h
          continue
      if choice == "have":
        if h in hanzi:
          missing += h
          continue
  out += '<font size=12 face="SimSun"><b>'
  for h in missing:
    out += '<a href="http://www.nciku.com/search/all/' + h + '">' + h + '</a>'
  out += "</b></font>"
  mw.help.showText(out, py={"back": slot_sync})

def onMhskB(): onShowHanzi(get_hskB(), "missing")
def onMhskE(): onShowHanzi(get_hskE(), "missing")
def onMhskI(): onShowHanzi(get_hskI(), "missing")
def onMhskA(): onShowHanzi(get_hskA(), "missing")

def onHhskB(): onShowHanzi(get_hskB(), "have")
def onHhskE(): onShowHanzi(get_hskE(), "have")
def onHhskI(): onShowHanzi(get_hskI(), "have")
def onHhskA(): onShowHanzi(get_hskA(), "have")

def onMFreq500(): onShowHanzi(get_freqHanzi500()[SIMPTRAD], "missing")
def onMFreq1000(): onShowHanzi(get_freqHanzi1000()[SIMPTRAD], "missing")
def onMFreq1500(): onShowHanzi(get_freqHanzi1500()[SIMPTRAD], "missing")
def onMFreq2000(): onShowHanzi(get_freqHanzi2000()[SIMPTRAD], "missing")
def onMFreq2500(): onShowHanzi(get_freqHanzi2500()[SIMPTRAD], "missing")
def onMFreq3000(): onShowHanzi(get_freqHanzi3000()[SIMPTRAD], "missing")
def onMFreq3500(): onShowHanzi(get_freqHanzi3500()[SIMPTRAD], "missing")

def onHFreq500(): onShowHanzi(get_freqHanzi500()[SIMPTRAD], "have")
def onHFreq1000(): onShowHanzi(get_freqHanzi1000()[SIMPTRAD], "have")
def onHFreq1500(): onShowHanzi(get_freqHanzi1500()[SIMPTRAD], "have")
def onHFreq2000(): onShowHanzi(get_freqHanzi2000()[SIMPTRAD], "have")
def onHFreq2500(): onShowHanzi(get_freqHanzi2500()[SIMPTRAD], "have")
def onHFreq3000(): onShowHanzi(get_freqHanzi3000()[SIMPTRAD], "have")
def onHFreq3500(): onShowHanzi(get_freqHanzi3500()[SIMPTRAD], "have")
def onHFreq3500up(): onShowHanzi(get_freqHanzi500()[SIMPTRAD] + get_freqHanzi1000()[SIMPTRAD] + get_freqHanzi1500()[SIMPTRAD] + get_freqHanzi2000()[SIMPTRAD] + get_freqHanzi2500()[SIMPTRAD] + get_freqHanzi3000()[SIMPTRAD] + get_freqHanzi3500()[SIMPTRAD], "other")

def get_freqHanzi500():
  return ['的一是不了在人有我他这个们中来上大为和国地到以说时要就出会可也你对生能而子那得于着下自之年过发后作里用道行所然家种事成方多经么去法学如都同现当没动面起看定天分还进好小部其些主样理心她本前开但因只从想实日军者意无力它与长把机十民第公此已工使情明性知全三又关点正业外将两高间由问很最重并物手应战向头文体政美相见被利什二等产或新己制身果加西斯月话合回特代内信表化老给世位次度门任常先海通教儿原东声提立及比员解水名真论处走义各入几口认条平系气题活尔更别打女变四神总何电数安少报才结反受目太量再感建务做接必场件计管期市直德资命山金指克许统区保至队形社便空决治展马科司五基眼书非则听白却界达光放强即像难且权思王象完设式色路记南品住告类求据程北边死张该交规万取拉格望觉术领共确传师观清今切院让识候带导争运笑飞风步改收根干造言联持组每济车亲极林服快办议往元英士证近失转夫令准布始怎呢存未远叫台单影具罗字爱击流备兵连调深商算质团集百需价花党华城石级整府离况亚请技际约示复病息究线似官火断精满支视消越器容照须九增研写称企八功吗包片史委乎查轻易早曾除农找装广显吧阿李标谈吃图念六引历首医局突专费号尽另周较注语仅考落青随选列'.decode("utf-8"),
       '的一是不了在人有我他這個們中來上大為和國地到以說時要就出會可也你對生能而子那得於著下自之年過發后作裡用道行所然家種事成方多經麼去法學如都同現當沒動面起看定天分還進好小部其些主樣理心她本前開但因隻從想實日軍者意無力它與長把機十民第公此已工使情明性知全三又關點正業外將兩高間由問很最重並物手應戰向頭文體政美相見被利什二等產或新己制身果加西斯月話合回特代內信表化老給世位次度門任常先海通教兒原東聲提立及比員解水名真論處走義各入幾口認條平系氣題活爾更別打女變四神總何電數安少報才結反受目太量再感建務做接必場件計管期市直德資命山金指克許統區保至隊形社便空決治展馬科司五基眼書非則聽白卻界達光放強即像難且權思王象完設式色路記南品住告類求據程北邊死張該交規萬取拉格望覺術領共確傳師觀清今切院讓識候帶導爭運笑飛風步改收根干造言聯持組每濟車親極林服快辦議往元英士証近失轉夫令准布始怎呢存未遠叫台單影具羅字愛擊流備兵連調深商算質團集百需價花黨華城石級整府離況亞請技際約示復病息究線似官火斷精滿支視消越器容照須九增研寫稱企八功嗎包片史委乎查輕易早曾除農找裝廣顯吧阿李標談吃圖念六引歷首醫局突專費號盡另周較注語僅考落青隨選列'.decode("utf-8")]

def get_freqHanzi1000():
  return ['武红响虽推势参希古众构房半节土投某案黑维革划敌致陈律足态护七兴派孩验责营星够章音跟志底站严巴例防族供效续施留讲型料终答紧黄绝奇察母京段依批群项故按河米围江织害斗双境客纪采举杀攻父苏密低朝友诉止细愿千值仍男钱破网热助倒育属坐帝限船脸职速刻乐否刚威毛状率甚独球般普怕弹校苦创假久错承印晚兰试股拿脑预谁益阳若哪微尼继送急血惊伤素药适波夜省初喜卫源食险待述陆习置居劳财环排福纳欢雷警获模充负云停木游龙树疑层冷洲冲射略范竟句室异激汉村哈策演简卡罪判担州静退既衣您宗积余痛检差富灵协角占配征修皮挥胜降阶审沉坚善妈刘读啊超免压银买皇养伊怀执副乱抗犯追帮宣佛岁航优怪香著田铁控税左右份穿艺背阵草脚概恶块顿敢守酒岛托央户烈洋哥索胡款靠评版宝座释景顾弟登货互付伯慢欧换闻危忙核暗姐介坏讨丽良序升监临亮露永呼味野架域沙掉括舰鱼杂误湾吉减编楚肯测败屋跑梦散温困剑渐封救贵枪缺楼县尚毫移娘朋画班智亦耳恩短掌恐遗固席松秘谢鲁遇康虑幸均销钟诗藏赶剧票损忽巨炮旧端探湖录叶春乡附吸予礼港雨呀板庭妇归睛饭额含顺输摇招婚脱补谓督毒油疗旅泽材灭逐莫笔亡鲜词圣择寻厂睡博勒烟授诺伦岸奥唐卖俄炸载洛健堂旁宫喝借君禁阴园谋宋避抓荣姑孙逃牙束跳顶'.decode("utf-8"),
          '武紅響雖推勢參希古眾構房半節土投某案黑維革劃敵致陳律足態護七興派孩驗責營星夠章音跟志底站嚴巴例防族供效續施留講型料終答緊黃絕奇察母京段依批群項故按河米圍江織害斗雙境客紀採舉殺攻父蘇密低朝友訴止細願千值仍男錢破網熱助倒育屬坐帝限船臉職速刻樂否剛威毛狀率甚獨球般普怕彈校苦創假久錯承印晚蘭試股拿腦預誰益陽若哪微尼繼送急血驚傷素藥適波夜省初喜衛源食險待述陸習置居勞財環排福納歡雷警獲模充負雲停木游龍樹疑層冷洲沖射略范竟句室異激漢村哈策演簡卡罪判擔州靜退既衣您宗積余痛檢差富靈協角佔配征修皮揮勝降階審沉堅善媽劉讀啊超免壓銀買皇養伊懷執副亂抗犯追幫宣佛歲航優怪香著田鐵控稅左右份穿藝背陣草腳概惡塊頓敢守酒島托央戶烈洋哥索胡款靠評版寶座釋景顧弟登貨互付伯慢歐換聞危忙核暗姐介壞討麗良序升監臨亮露永呼味野架域沙掉括艦魚雜誤灣吉減編楚肯測敗屋跑夢散溫困劍漸封救貴槍缺樓縣尚毫移娘朋畫班智亦耳恩短掌恐遺固席鬆秘謝魯遇康慮幸均銷鐘詩藏趕劇票損忽巨炮舊端探湖錄葉春鄉附吸予禮港雨呀板庭婦歸睛飯額含順輸搖招婚脫補謂督毒油療旅澤材滅逐莫筆亡鮮詞聖擇尋廠睡博勒煙授諾倫岸奧唐賣俄炸載洛健堂旁宮喝借君禁陰園謀宋避抓榮姑孫逃牙束跳頂'.decode("utf-8")]

def get_freqHanzi1500():
  return ['玉镇雪午练迫爷篇肉嘴馆遍凡础洞卷坦牛宁纸诸训私庄祖丝翻暴森塔默握戏隐熟骨访弱蒙歌店鬼软典欲萨伙遭盘爸扩盖弄雄稳忘亿刺拥徒姆杨齐赛趣曲刀床迎冰虚玩析窗醒妻透购替塞努休虎扬途侵刑绿兄迅套贸毕唯谷轮库迹尤竞街促延震弃甲伟麻川申缓潜闪售灯针哲络抵朱埃抱鼓植纯夏忍页杰筑折郑贝尊吴秀混臣雅振染盛怒舞圆搞狂措姓残秋培迷诚宽宇猛摆梅毁伸摩盟末乃悲拍丁赵硬麦蒋操耶阻订彩抽赞魔纷沿喊违妹浪汇币丰蓝殊献桌啦瓦莱援译夺汽烧距裁偏符勇触课敬哭懂墙袭召罚侠厅拜巧侧韩冒债曼融惯享戴童犹乘挂奖绍厚纵障讯涉彻刊丈爆乌役描洗玛患妙镜唱烦签仙彼弗症仿倾牌陷鸟轰咱菜闭奋庆撤泪茶疾缘播朗杜奶季丹狗尾仪偷奔珠虫驻孔宜艾桥淡翼恨繁寒伴叹旦愈潮粮缩罢聚径恰挑袋灰捕徐珍幕映裂泰隔启尖忠累炎暂估泛荒偿横拒瑞忆孤鼻闹羊呆厉衡胞零穷舍码赫婆魂灾洪腿胆津俗辩胸晓劲贫仁偶辑邦恢赖圈摸仰润堆碰艇稍迟辆废净凶署壁御奉旋冬矿抬蛋晨伏吹鸡倍糊秦盾杯租骑乏隆诊奴摄丧污渡旗甘耐凭扎抢绪粗肩梁幻菲皆碎宙叔岩荡综爬荷悉蒂返井壮薄悄扫敏碍殖详迪矛霍允幅撒剩凯颗骂赏液番箱贴漫酸郎腰舒眉忧浮辛恋餐吓挺励辞艘键伍峰尺昨黎辈贯侦滑券崇扰宪绕趋慈乔阅汗枝拖墨胁插箭腊粉泥氏'.decode("utf-8"),
          '玉鎮雪午練迫爺篇肉嘴館遍凡礎洞卷坦牛寧紙諸訓私庄祖絲翻暴森塔默握戲隱熟骨訪弱蒙歌店鬼軟典欲薩伙遭盤爸擴蓋弄雄穩忘億刺擁徒姆楊齊賽趣曲刀床迎冰虛玩析窗醒妻透購替塞努休虎揚途侵刑綠兄迅套貿畢唯谷輪庫跡尤競街促延震棄甲偉麻川申緩潛閃售燈針哲絡抵朱埃抱鼓植純夏忍頁杰筑折鄭貝尊吳秀混臣雅振染盛怒舞圓搞狂措姓殘秋培迷誠寬宇猛擺梅毀伸摩盟末乃悲拍丁趙硬麥蔣操耶阻訂彩抽贊魔紛沿喊違妹浪匯幣豐藍殊獻桌啦瓦萊援譯奪汽燒距裁偏符勇觸課敬哭懂牆襲召罰俠廳拜巧側韓冒債曼融慣享戴童猶乘挂獎紹厚縱障訊涉徹刊丈爆烏役描洗瑪患妙鏡唱煩簽仙彼弗症仿傾牌陷鳥轟咱菜閉奮慶撤淚茶疾緣播朗杜奶季丹狗尾儀偷奔珠虫駐孔宜艾橋淡翼恨繁寒伴嘆旦愈潮糧縮罷聚徑恰挑袋灰捕徐珍幕映裂泰隔啟尖忠累炎暫估泛荒償橫拒瑞憶孤鼻鬧羊呆厲衡胞零窮舍碼赫婆魂災洪腿膽津俗辯胸曉勁貧仁偶輯邦恢賴圈摸仰潤堆碰艇稍遲輛廢淨凶署壁御奉旋冬礦抬蛋晨伏吹雞倍糊秦盾杯租騎乏隆診奴攝喪污渡旗甘耐憑扎搶緒粗肩梁幻菲皆碎宙叔岩蕩綜爬荷悉蒂返井壯薄悄掃敏礙殖詳迪矛霍允幅撒剩凱顆罵賞液番箱貼漫酸郎腰舒眉憂浮辛戀餐嚇挺勵辭艘鍵伍峰尺昨黎輩貫偵滑券崇擾憲繞趨慈喬閱汗枝拖墨脅插箭臘粉泥氏'.decode("utf-8")]

def get_freqHanzi2000():
  return ['彭拔骗凤慧媒佩愤扑龄驱惜豪掩兼跃尸肃帕驶堡届欣惠册储飘桑闲惨洁踪勃宾频仇磨递邪撞拟滚奏巡颜剂绩贡疯坡瞧截燃焦殿伪柳锁逼颇昏劝呈搜勤戒驾漂饮曹朵仔柔俩孟腐幼践籍牧凉牲佳娜浓芳稿竹腹跌逻垂遵脉貌柏狱猜怜惑陶兽帐饰贷昌叙躺钢沟寄扶铺邓寿惧询汤盗肥尝匆辉奈扣廷澳嘛董迁凝慰厌脏腾幽怨鞋丢埋泉涌辖躲晋紫艰魏吾慌祝邮吐狠鉴曰械咬邻赤挤弯椅陪割揭韦悟聪雾锋梯猫祥阔誉筹丛牵鸣沈阁穆屈旨袖猎臂蛇贺柱抛鼠瑟戈牢逊迈欺吨琴衰瓶恼燕仲诱狼池疼卢仗冠粒遥吕玄尘冯抚浅敦纠钻晶岂峡苍喷耗凌敲菌赔涂粹扁亏寂煤熊恭湿循暖糖赋抑秩帽哀宿踏烂袁侯抖夹昆肝擦猪炼恒慎搬纽纹玻渔磁铜齿跨押怖漠疲叛遣兹祭醉拳弥斜档稀捷肤疫肿豆削岗晃吞宏癌肚隶履涨耀扭坛拨沃绘伐堪仆郭牺歼墓雇廉契拼惩捉覆刷劫嫌瓜歇雕闷乳串娃缴唤赢莲霸桃妥瘦搭赴岳嘉舱俊址庞耕锐缝悔邀玲惟斥宅添挖呵讼氧浩羽斤酷掠妖祸侍乙妨贪挣汪尿莉悬唇翰仓轨枚盐览傅帅庙芬屏寺胖璃愚滴疏萧姿颤丑劣柯寸扔盯辱匹俱辨饿蜂哦腔郁溃谨糟葛苗肠忌溜鸿爵鹏鹰笼丘桂滋聊挡纲肌茨壳痕碗穴膀卓贤卧膜毅锦欠哩函茫昂薛皱夸豫胃舌剥傲拾窝睁携陵哼棉晴铃填饲渴吻扮逆脆喘罩卜炉柴愉绳胎蓄眠竭喂傻慕浑奸扇柜悦拦诞饱乾泡'.decode("utf-8"),
          '彭拔騙鳳慧媒佩憤扑齡驅惜豪掩兼躍尸肅帕駛堡屆欣惠冊儲飄桑閑慘潔蹤勃賓頻仇磨遞邪撞擬滾奏巡顏劑績貢瘋坡瞧截燃焦殿偽柳鎖逼頗昏勸呈搜勤戒駕漂飲曹朵仔柔倆孟腐幼踐籍牧涼牲佳娜濃芳稿竹腹跌邏垂遵脈貌柏獄猜憐惑陶獸帳飾貸昌敘躺鋼溝寄扶鋪鄧壽懼詢湯盜肥嘗匆輝奈扣廷澳嘛董遷凝慰厭臟騰幽怨鞋丟埋泉涌轄躲晉紫艱魏吾慌祝郵吐狠鑒曰械咬鄰赤擠彎椅陪割揭韋悟聰霧鋒梯貓祥闊譽籌叢牽鳴沈閣穆屈旨袖獵臂蛇賀柱拋鼠瑟戈牢遜邁欺噸琴衰瓶惱燕仲誘狼池疼盧仗冠粒遙呂玄塵馮撫淺敦糾鑽晶豈峽蒼噴耗凌敲菌賠涂粹扁虧寂煤熊恭濕循暖糖賦抑秩帽哀宿踏爛袁侯抖夾昆肝擦豬煉恆慎搬紐紋玻漁磁銅齒跨押怖漠疲叛遣茲祭醉拳彌斜檔稀捷膚疫腫豆削崗晃吞宏癌肚隸履漲耀扭壇撥沃繪伐堪仆郭犧殲墓雇廉契拼懲捉覆刷劫嫌瓜歇雕悶乳串娃繳喚贏蓮霸桃妥瘦搭赴岳嘉艙俊址龐耕銳縫悔邀玲惟斥宅添挖呵訟氧浩羽斤酷掠妖禍侍乙妨貪掙汪尿莉懸唇翰倉軌枚鹽覽傅帥廟芬屏寺胖璃愚滴疏蕭姿顫丑劣柯寸扔盯辱匹俱辨餓蜂哦腔郁潰謹糟葛苗腸忌溜鴻爵鵬鷹籠丘桂滋聊擋綱肌茨殼痕碗穴膀卓賢臥膜毅錦欠哩函茫昂薛皺夸豫胃舌剝傲拾窩睜攜陵哼棉晴鈴填飼渴吻扮逆脆喘罩卜爐柴愉繩胎蓄眠竭喂傻慕渾奸扇櫃悅攔誕飽乾泡'.decode("utf-8")]

def get_freqHanzi2500():
  return ['贼亭夕爹酬儒姻卵氛泄杆挨僧蜜吟猩遂狭肖甜霞驳裕顽於摘矮秒卿畜咽披辅勾盆疆赌塑畏吵囊嗯泊肺骤缠冈羞瞪吊贾漏斑涛悠鹿俘锡卑葬铭滩嫁催璇翅盒蛮矣潘歧赐鲍锅廊拆灌勉盲宰佐啥胀扯禧辽抹筒棋裤唉朴咐孕誓喉妄拘链驰栏逝窃艳臭纤玑棵趁匠盈翁愁瞬婴孝颈倘浙谅蔽畅赠妮莎尉冻跪闯葡後厨鸭颠遮谊圳吁仑辟瘤嫂陀框谭亨钦庸歉芝吼甫衫摊宴嘱衷娇陕矩浦讶耸裸碧摧薪淋耻胶屠鹅饥盼脖虹翠崩账萍逢赚撑翔倡绵猴枯巫昭怔渊凑溪蠢禅阐旺寓藤匪伞碑挪琼脂谎慨菩萄狮掘抄岭晕逮砍掏狄晰罕挽脾舟痴蔡剪脊弓懒叉拐喃僚捐姊骚拓歪粘柄坑陌窄湘兆崖骄刹鞭芒筋聘钩棍嚷腺弦焰耍俯厘愣厦恳饶钉寡憾摔叠惹喻谱愧煌徽溶坠煞巾滥洒堵瓷咒姨棒郡浴媚稣淮哎屁漆淫巢吩撰啸滞玫硕钓蝶膝姚茂躯吏猿寨恕渠戚辰舶颁惶狐讽笨袍嘲啡泼衔倦涵雀旬僵撕肢垄夷逸茅侨舆窑涅蒲谦杭噢弊勋刮郊凄捧浸砖鼎篮蒸饼亩肾陡爪兔殷贞荐哑炭坟眨搏咳拢舅昧擅爽咖搁禄雌哨巩绢螺裹昔轩谬谍龟媳姜瞎冤鸦蓬巷琳栽沾诈斋瞒彪厄咨纺罐桶壤糕颂膨谐垒咕隙辣绑宠嘿兑霉挫稽辐乞纱裙嘻哇绣杖塘衍轴攀膊譬斌祈踢肆坎轿棚泣屡躁邱凰溢椎砸趟帘帆栖窜丸斩堤塌贩厢掀喀乖谜捏阎滨虏匙芦苹卸沼钥株祷剖熙哗劈怯棠胳桩瑰娱娶沫嗓蹲焚淘嫩'.decode("utf-8"),
          '賊亭夕爹酬儒姻卵氛泄杆挨僧蜜吟猩遂狹肖甜霞駁裕頑於摘矮秒卿畜咽披輔勾盆疆賭塑畏吵囊嗯泊肺驟纏岡羞瞪吊賈漏斑濤悠鹿俘錫卑葬銘灘嫁催璇翅盒蠻矣潘歧賜鮑鍋廊拆灌勉盲宰佐啥脹扯禧遼抹筒棋褲唉朴咐孕誓喉妄拘鏈馳欄逝竊艷臭纖璣棵趁匠盈翁愁瞬嬰孝頸倘浙諒蔽暢贈妮莎尉凍跪闖葡後廚鴨顛遮誼圳吁侖辟瘤嫂陀框譚亨欽庸歉芝吼甫衫攤宴囑衷嬌陝矩浦訝聳裸碧摧薪淋恥膠屠鵝飢盼脖虹翠崩賬萍逢賺撐翔倡綿猴枯巫昭怔淵湊溪蠢禪闡旺寓藤匪傘碑挪瓊脂謊慨菩萄獅掘抄嶺暈逮砍掏狄晰罕挽脾舟痴蔡剪脊弓懶叉拐喃僚捐姊騷拓歪粘柄坑陌窄湘兆崖驕剎鞭芒筋聘鉤棍嚷腺弦焰耍俯厘愣廈懇饒釘寡憾摔疊惹喻譜愧煌徽溶墜煞巾濫洒堵瓷咒姨棒郡浴媚穌淮哎屁漆淫巢吩撰嘯滯玫碩釣蝶膝姚茂軀吏猿寨恕渠戚辰舶頒惶狐諷笨袍嘲啡潑銜倦涵雀旬僵撕肢壟夷逸茅僑輿窯涅蒲謙杭噢弊勛刮郊淒捧浸磚鼎籃蒸餅畝腎陡爪兔殷貞薦啞炭墳眨搏咳攏舅昧擅爽咖擱祿雌哨鞏絹螺裹昔軒謬諜龜媳姜瞎冤鴉蓬巷琳栽沾詐齋瞞彪厄咨紡罐桶壤糕頌膨諧壘咕隙辣綁寵嘿兌霉挫稽輻乞紗裙嘻哇繡杖塘衍軸攀膊譬斌祈踢肆坎轎棚泣屢躁邱凰溢椎砸趟帘帆棲竄丸斬堤塌販廂掀喀乖謎捏閻濱虜匙蘆蘋卸沼鑰株禱剖熙嘩劈怯棠胳樁瑰娛娶沫嗓蹲焚淘嫩'.decode("utf-8")]

def get_freqHanzi3000():
  return ['韵衬匈钧竖峻豹捞菊鄙魄兜哄颖镑屑蚁壶怡渗秃迦旱哟咸焉谴宛稻铸锻伽詹毙恍贬烛骇芯汁桓坊驴朽靖佣汝碌迄冀荆崔雁绅珊榜诵傍彦醇笛禽勿娟瞄幢寇睹贿踩霆呜拱妃蔑谕缚诡篷淹腕煮倩卒勘馨逗甸贱炒灿敞蜡囚栗辜垫妒魁谣寞蜀甩涯枕丐泳奎泌逾叮黛燥掷藉枢憎鲸弘倚侮藩拂鹤蚀浆芙垃烤晒霜剿蕴圾绸屿氢驼妆捆铅逛淑榴丙痒钞蹄犬躬昼藻蛛褐颊奠募耽蹈陋侣魅岚侄虐堕陛莹荫狡阀绞膏垮茎缅喇绒搅凳梭丫姬诏钮棺耿缔懈嫉灶匀嗣鸽澡凿纬沸畴刃遏烁嗅叭熬瞥骸奢拙栋毯桐砂莽泻坪梳杉晤稚蔬蝇捣顷麽尴镖诧尬硫嚼羡沦沪旷彬芽狸冥碳咧惕暑咯萝汹腥窥俺潭崎麟捡拯厥澄萎哉涡滔暇溯鳞酿茵愕瞅暮衙诫斧兮焕棕佑嘶妓喧蓉删樱伺嗡娥梢坝蚕敷澜杏绥冶庇挠搂倏聂婉噪稼鳍菱盏匿吱寝揽髓秉哺矢啪帜邵嗽挟缸揉腻驯缆晌瘫贮觅朦僻隋蔓咋嵌虔畔琐碟涩胧嘟蹦冢浏裔襟叨诀旭虾簿啤擒枣嘎苑牟呕骆凸熄兀喔裳凹赎屯膛浇灼裘砰棘橡碱聋姥瑜毋娅沮萌俏黯撇粟粪尹苟癫蚂禹廖俭帖煎缕窦簇棱叩呐瑶墅莺烫蛙歹伶葱哮眩坤廓讳啼乍瓣矫跋枉梗厕琢讥釉窟敛轼庐胚呻绰扼懿炯竿慷虞锤栓桨蚊磅孽惭戳禀鄂馈垣溅咚钙礁彰豁眯磷雯墟迂瞻颅琉悼蝴拣渺眷悯汰慑婶斐嘘镶炕宦趴绷窘襄珀嚣拚酌浊毓撼嗜扛峭磕翘槽淌栅颓熏瑛颐忖'.decode("utf-8"),
          '韻襯匈鈞豎峻豹撈菊鄙魄兜哄穎鎊屑蟻壺怡滲禿迦旱喲咸焉譴宛稻鑄鍛伽詹斃恍貶燭駭芯汁桓坊驢朽靖佣汝碌迄冀荊崔雁紳珊榜誦傍彥醇笛禽勿娟瞄幢寇睹賄踩霆嗚拱妃蔑諭縛詭篷淹腕煮倩卒勘馨逗甸賤炒燦敞蠟囚栗辜墊妒魁謠寞蜀甩涯枕丐泳奎泌逾叮黛燥擲藉樞憎鯨弘倚侮藩拂鶴蝕漿芙垃烤晒霜剿蘊圾綢嶼氫駝妝捆鉛逛淑榴丙痒鈔蹄犬躬晝藻蛛褐頰奠募耽蹈陋侶魅嵐侄虐墮陛瑩蔭狡閥絞膏垮莖緬喇絨攪凳梭丫姬詔鈕棺耿締懈嫉灶勻嗣鴿澡鑿緯沸疇刃遏爍嗅叭熬瞥骸奢拙棟毯桐砂莽瀉坪梳杉晤稚蔬蠅搗頃麼尷鏢詫尬硫嚼羨淪滬曠彬芽狸冥碳咧惕暑咯蘿洶腥窺俺潭崎麟撿拯厥澄萎哉渦滔暇溯鱗釀茵愕瞅暮衙誡斧兮煥棕佑嘶妓喧蓉刪櫻伺嗡娥梢壩蠶敷瀾杏綏冶庇撓摟倏聶婉噪稼鰭菱盞匿吱寢攬髓秉哺矢啪幟邵嗽挾缸揉膩馴纜晌癱貯覓朦僻隋蔓咋嵌虔畔瑣碟澀朧嘟蹦塚瀏裔襟叨訣旭蝦簿啤擒棗嘎苑牟嘔駱凸熄兀喔裳凹贖屯膛澆灼裘砰棘橡鹼聾姥瑜毋婭沮萌俏黯撇粟糞尹苟癲螞禹廖儉帖煎縷竇簇棱叩吶瑤墅鶯燙蛙歹伶蔥哮眩坤廓諱啼乍瓣矯跋枉梗廁琢譏釉窟斂軾廬胚呻綽扼懿炯竿慷虞錘栓槳蚊磅孽慚戳稟鄂饋垣濺咚鈣礁彰豁瞇磷雯墟迂瞻顱琉悼蝴揀渺眷憫汰懾嬸斐噓鑲炕宦趴繃窘襄珀囂拚酌濁毓撼嗜扛峭磕翹槽淌柵頹熏瑛頤忖'.decode("utf-8")]

def get_freqHanzi3500():
  return ['牡缀徊梨肪涕惫摹踱肘熔挚氯凛绎庶脯迭睦窍粥庵沧怠沁奕咙氨矗盔拇沛榻揣崭鞘鞠垦洽唾橱仕蜘痰袜峙柬蝉蟹谏鹃擎皓朕疤禺铲酶钝氓匣弧峨锥揪杠吭崛诬冉抒庚悍靡晦醋壕锯夭咦侈婢猾徘硝煽皂舵嗦狈靴捂疮郝苛秽茜搓芸酱赁檐饷蕉铀苔赦缎舷筷朔婪紊厮婿寥兢糙卦槐扒裴祀埔絮芭屉痪霄绽宵邑霖岔饵茄韧琪邹瑚憋殆噜忒忿衅淳悖髦孜粤隘濒铮畸剔坞篱淀蓦唬锣汀趾缉嫦斟鞍扳拴诅谟呃懦逞犁忏拧亥佟叱舜绊龚腮邸椒蔚湛狩眶栈薇肮瀑渣褂叽臀妞巍唔疚鲤戎肇笃辙娴阮札懊焘恤疹潇铝涤恃喽砌遁楞阱咎洼炳噬枫拷哆矶苇翩窒侬靶胰芜辫嚎妾幌踉佃葫皖拽滤睬俞匕谤嗤捍孵倪瘾敝匡磋绫淆尧蕊烘璋亢轧赂蝗榆骏诛勺梵炽笠颌闸狒樊镕垢瘟缪菇琦剃迸溺炫惚嗨陨赃羁臻嘀膳赣踌殉桔瞿闽豚掺沌惰喳椭咪霎侃猝窖戮祠瞩菁躇佬肋咄忡雍忱蕾跄硅伎炊钊蝠屎拭谛褪丞卉隧茸钳啃伢闺舔蹬挛眺袱陇殴柿梧惺弛侥琛捅酝薯曳澈锈稠眸咆簧鸥疡渎汲嬉脓骡穗槛拎巳邢廿搀曙樵隅筛谒倭痹猖佯肛奚甭抨蛾唠荧嵩漱酋攘诘篡睿噩怅盎徙鞅漓祟睫攸翎呛筐堑檀寅磊驭惘吠驮瑙炬痉曝恺胺萤敕筝幡霹竺烙毗鸠埠蒜阜嘈乒帷啄鳌毡阙褥搔笋冕狞韶骼蔼烹奄嫖沐噗岑蛟掳咏弩捻圃孚悴诣呱祁捶钠袄澎氮恪雏撮堰彷鹦晖犀腑沽橄掐亵龋嗒咀祺锚'.decode("utf-8"),
          '牡缀徊梨肪涕惫摹踱肘熔挚氯凛绎庶脯迭睦窍粥庵沧怠沁奕咙氨矗盔拇沛榻揣崭鞘鞠垦洽唾橱仕蜘痰袜峙柬蝉蟹谏鹃擎皓朕疤禺铲酶钝氓匣弧峨锥揪杠吭崛诬冉抒庚悍靡晦醋壕锯夭咦侈婢猾徘硝煽皂舵嗦狈靴捂疮郝苛秽茜搓芸酱赁檐饷蕉铀苔赦缎舷筷朔婪紊厮婿寥兢糙卦槐扒裴祀埔絮芭屉痪霄绽宵邑霖岔饵茄韧琪邹瑚憋殆噜忒忿衅淳悖髦孜粤隘濒铮畸剔坞篱淀蓦唬锣汀趾缉嫦斟鞍扳拴诅谟呃懦逞犁忏拧亥佟叱舜绊龚腮邸椒蔚湛狩眶栈薇肮瀑渣褂叽臀妞巍唔疚鲤戎肇笃辙娴阮札懊焘恤疹潇铝涤恃喽砌遁楞阱咎洼炳噬枫拷哆矶苇翩窒侬靶胰芜辫嚎妾幌踉佃葫皖拽滤睬俞匕谤嗤捍孵倪瘾敝匡磋绫淆尧蕊烘璋亢轧赂蝗榆骏诛勺梵炽笠颌闸狒樊镕垢瘟缪菇琦剃迸溺炫惚嗨陨赃羁臻嘀膳赣踌殉桔瞿闽豚掺沌惰喳椭咪霎侃猝窖戮祠瞩菁躇佬肋咄忡雍忱蕾跄硅伎炊钊蝠屎拭谛褪丞卉隧茸钳啃伢闺舔蹬挛眺袱陇殴柿梧惺弛侥琛捅酝薯曳澈锈稠眸咆簧鸥疡渎汲嬉脓骡穗槛拎巳邢廿搀曙樵隅筛谒倭痹猖佯肛奚甭抨蛾唠荧嵩漱酋攘诘篡睿噩怅盎徙鞅漓祟睫攸翎呛筐堑檀寅磊驭惘吠驮瑙炬痉曝恺胺萤敕筝幡霹竺烙毗鸠埠蒜阜嘈乒帷啄鳌毡阙褥搔笋冕狞韶骼蔼烹奄嫖沐噗岑蛟掳咏弩捻圃孚悴诣呱祁捶钠袄澎氮恪雏撮堰彷鹦晖犀腑沽橄掐亵龋嗒咀祺锚'.decode("utf-8")]

def get_hskB():
  return '一七万三上下不且世业东丢两个中丰为主举久么义之乐九也习书买乱了事二云互五些交产亮亲人亿什今介从他代以们件任休会伟但位低住体何作你使例侯便信俩倍倒候借假做停健傅像儿元先克全八公六共关兴其典内再冒写农冬决况冷净准凉几出刀分切划刚初利别刮到刻前剩力办加务动助努劳包化北医十千午半单卖南占卡危厂历原去参又友双反发取变口句只叫可史右号吃各合同名后向吗吧听吹呀告呐员呢周和咖咱咳哈响哥哪哭唱商啊啡啤啦喂喊喜喝嗯嗽嘛嘴器四回因团园困围国图圆在地场坏坐块坚城基堂墙增声处备复夏外多夜够大天太夫头女奶她好如妈妹始姐姑姓娘子字学孩它安完定宜实客室宴家容宿寄富寒对导封将小少尤就尺局层屋展山岁工左差己已市布师希带帮常帽干平年幸广床应店府度座庭康建开弟张当录彩影往很得心必志忘忙快念忽态怎怕思急总息您情惯想愉意感愿慢懂成我或戴户房所手才打扬批找技把报抬抱抽拉拍拾拿持挂指挤挺换掉掌排接推提握搞搬摆播操擦支收改放政故教敢散数整文斤新方旁旅族日旧早时明易星春昨是晚晨晴暖更最月有朋服望朝期本术机杂李村束条来杯板极果查树校样根桌桔桥检棵椅楚楼概橘次欢歌正步死段母每比毛民气水永求汉江汤汽没河治法注泳洗活派流浅济海消深清渴游湖满漂演澡火灯点炼烦烧热然照熟爬爱父爸片牛物特猪玩现班球理瓶生用电男画界留疼病痛白百的目直相省看真眼着睛睡知短矮研破础确碗碰磁示礼社祖祝神票福离秋种科租究空穿突窗立站章笑笔第等答简算篇篮米精糖系紧累红级纪纸练组细织绍经结给继绩续绿羊翻老考者而联肉育胜能脏脚脱脸腿自舍舒舞般船色艺节花苦英苹茶草药菜蓝蕉虽蛋行街衣表袜被装西要见观视览觉角解言计认讨让记讲许论设访评识诉词译试话该语误说请读课谁调谅谈谊谢象负责贵赛赢走起足跑跟路跳践踢身躺车轻较辅辆输辛边过迎运近还这进远连迟退送适通遇遍道那邮部都酒酸里重钟钢钱铅银错锻长门问间闻阳阴附院除险难集雨雪零需青静非面鞋音页须顾顿预领题颜风飞食饭饱饺饿馆首香马驾验骑高鱼鸡麻黄齐'.decode("utf-8")

def get_hskE():
  return '丈与专丝严临丽乎乏乒乓乘乡争于井亩享京仅仍仔付令仪仰价份仿企伍众优伙伞传伤伯估伸似余佛供依侵促俗保修俱倡值偏偷傍催傲傻允兄充光免兔党入兵具养册军冠冰冲冻减凡击列则创判制刷刺剧剪副割劝功励劲势勇勺匹区升卜卫印即却卷厅厉压厌厕厘厚厨县叉及叔受叠古另召台叶司吊吐吓否吨吩含启吵吸呆味呼命咐咬咽品哇哎哲哼善喷嗓嘿嚷固圈土圾址均坡垃型埋堆堵塑塔填境墨壁士壶央失夹夺奇奋奖套妇妙妻委姨姻婚嫂孔存季守宝宣害宽宾密察寸寻射尊尖尝尽尾居届属岛岸崇巧巨巩巴巾币帝席幅并庄庆序底庙延异弃弄式引弯弱弹强形彻征待律微德忆忍怒怜性怪恋恐恢恨恳悄悉悔悟悠悲惊惹愁愤慌慕慰懒戏战戚扁扇扎扑扔托扛扣执扩扫扭扮扰扶承抄抓投抖抗折抢护披担拆拐拒拔拖招拜拣拥拦择括拼按挑挖挡挥挨捆捉捕捞损捡捧据掀授掏探控措描插援搁搭摇摔摘撒撕撞攻效敌救敬敲斗料斜断施旗无既昏映显晒晓普景暂暑暗曾替朗木未朴朵杀杆材松构析林枪架某染柴柿标株格案桶梁梦梨梯械棉森植榜模欠欺款歇歉止此武歪殊毕毫毯汗池污沉沙油沿泛泥泪泼洋洒洞测浓浪浮涂涨液淡混添渐渠渡温港湿源滑滚滴漏漠激灭灰灵灾炮烂烈烟烤烫煤煮熊燃燥爷版牌牙牲牵牺犯状狗独狮狼猜猫献猴率玉王环玻珠璃瓜甜甩田由略疑疲瘦登皂皇皮盆益盐盒盖盗盘盼盾睁瞧矛石矿码砍硬碎碑磨禁秀私秒秘秩积称移程稍稳稻稼穷窄竞竟童端竹符筑策筷签管箭箱类粉粒粗粘粮糊糕糟素紫繁纠纤约纷纺线终绕绝统绢绪绳维综编缩缺罐网置美羡群羽翅耐耳聊职聪肃肚肝肠肤肥肩肯肺胃胆背胖胡胳胸脆脉脑脖脾腐腰膀膊臭至致舌航良艰苯范荣获菌萝营落著蔬薄藏虎虑虚虫蛇蜂蜜血补衫衬袋袖裙裤规触警订训议讯证诗诚详谓豆貌贡败货质购贯贴贸费贺资赔赞赶趁超越趟趣跃跌距跨跪踩蹲躲转轮软辉辟达迅迈违迫述迷迹追逃选透逐递途逗逛速造逢逼遭遵避邀邻郊郎配酱醉醋醒采释野量金针钓钻铁铃铜铺锅锐键镜闪闭闯闲闹阅阔队防阵阶阿际陆降限陪随隔雄雷雾露靠革顶项顺颗飘餐饼馒骂骄骗骨鬼鲜鸟鹅麦默鼓鼻龄龙'.decode("utf-8")

def get_hskI():
  return '丁丑丘丙丛丧串丸乖乙予亏亚亡亭仇仓仗伊伴伺佩佳侧侨侮俄俏俯倘倚倦债倾偶偿僚僵兑兰兼兽冤冶凑凝凭凳凶凿刊删削剖剥劣勃勉勤勾匀匆匙华协博卧卵卸厢叙叭叹吞吻吼呵咙咸哀哆哗哟哦哨唇唤售喇喉喘喽嗦嘱噢囱圣坑坝坟坦垂垄垫垮域培堤塌塞墓墟壤壮壳夸奈奔奠奥奴妥妨姥姿威娃娱娶婆婴婶媳嫁嫌嫩孙孤宁宅宇宏宗官宙审宪宫宵寂寓寞寡寿尔尘尚屁屈屿岗岩峡峰崖崭巷帐帘帜幕幢幻幼库废廊廓弓归彼径徒御循忠怀怖怨恰恶患悦悬惕惜惦惨惭愈愚愧慎慧憾截扒扯抑抛抵抹押拢拧拨拳拴挣挫振挽捏捷掠掩揉揪揭搂搅搓搜摄摊摧摩撑撤攀敏斥斯旋旦旬旱昆晃晕晰智暴曲末朽权枉枕枝枯柄柏柔柜柱柳核栽桃档桩梅梳棋棍棒棚椒楞横欣歼残殖殿毁毅毒氏氓氛氧汇沟沸沾泌泡波泽洁洪浆浇浑浴浸涉涌润淆淋淹渔渣溅溉溜溶滥滩漆漫潮灌灸灿炉炒炸烁烛焊焦焰煌煎熬燕爆爹牢牧犹狂狠狡狱猎猛猾猿珍琴瓣瓦瓷甘甚甭甲申畅畔番疆疗疯疾症痕癌皱盏监盛盟盯盲眉眠眯督瞎瞒瞪矩砖砸碍碱秧稀税稚稿窑窜窟窿竭笼筋筐筒籍粥粪粱索纯纱纲纵纹绑络缓缘缚缝缸罚罢罩罪署翁翘耀耍耕耗耽聚肌股肿胀胁胞胶腔腾膏膨舅舰舱艘艳芽苍苗若茅荐荒菠萄葡蒙蒸蓬蔑虾蚀蚊蚕蛙蜡蝇蝴蝶蠢衡衰衷袍袭袱裁裂裕裹譬讶讽诊诞询诬诵谋谜谣谦谨谷豪豫财贫贱赏赚赠赤趴踊踏蹄蹈蹬躁轨载辈辑辜辞辣辩辱返逝逮逻遗遥遮酬酷鉴钉钞钥钩铝铲铸锁锈锡锣镇镑闷阂阻陈陌陡陵陷隐障隶雇雕震霉霜顷顽颂额颤饥饮饰饲饶驮驴驶驻驼骆骚骤魂鲸鸣鸭鸽黎齿'.decode("utf-8")

def get_hskA():
  return '丹乃乌乔乞乳亢亦仁仆仙伏伐伪伶佣侄侈侍侣侦俊俐俘俭储僻兆兜兢冈凄凌凤凯凰凸凹函刁刃刑刨券刹剂剃剑劈劫勒勘勿匠匪卑卓厦叁叛叨叮叼吁吉君吟呈呕呜呻咋咏咨哄哑唆唐唠唯唾啃啄啥啸喻嗅嘉嘲噪嚼囊坊坛坯垒垦埠堕堡堪塘壹夕奉奏奢奸妄妆妒妖姆姜娇媒嫉孕孝宰寇寨寺尸尼尿屉屎屏屑屠屡履屯岂岔岭峻崩嵌川州巡巫帅帆帖幽庞庸廉弊弥弦彰役徊徐徘徽忌忧怠怯恒恩恭恼悼惋惑惠惧惩惫惰慈慨慷憋戒抚抠抡拄拇拌拓拘拙拟拱拽挎挚挟挠挪捅捌捍捎捐捣捶捻掂掐掘掰掷掺揍揽搀搏携摸撇撵擅攒敞敷斑斧斩旨旷旺昂昌昧昼晋晌晤晶晾暄暮曰杏杜杠杨杰枚枣柒柠柬栋栏栗桂桅框桐桑桨梗梢梧棕棱棺椭榆榨榴榷槐槽樱橡檬欲歧歹殃殴毙氢氮汁汛汞汪汰汹沃沏沛沥沫沼泄泉泊泣泰泻津洲洽浊浩涕涛涝涤淀淇淘淫渗渺湾溃溪滋滔滞滤滨潜潦潭澄瀑灶炊炎炕炭烘烹熄熏熔爪爽犁犬狈狐狭狸猖玖玫玲珊珑琢瑚瑞瑰畏畜畴疏疙疤疫疮痒痪痰痴痹瘟瘤瘩瘫瘸皆盈眨眶睦睬睹瞥瞩瞻砂砌硅硫碌碟碧碳磋磕磷祥祸禽禾秃秆秉秤秽稠穆穗穴窃窝竖竿笆笋笛笨筛筝筹箩篱簸籽粹糠絮纳绅绒绘绞绣绵绷绸缀缎缔缠缴罕罗羞羿翔翠翼耸耻聋聘肆肖肢肪肾脂脊腊腥腮腹膛膜膝臂臣舆舟舵舶艇艾芒芝芦芬芭芳芹苏茂茄茎茧茫荔荡荷莫莲菇菊萌萍董葫葬葱葵蒂蒜蓄蔓蔗蔼蔽蕴蕾薪薯藤蘑虏虹蚁蚂蛛蛮蛾蜓蜘蜻蝉蝗融螺衅衍衔袄裳覆誉誓讥讹讼诈诧诫诱诸诽谎谐谗谤谬谱谴豁豌贝贞贤贩贪贬贰贷贼贿赂赋赌赖赴趋跺踌踪蹋蹦蹭躇躬轧轰轿辐辖辙辨辫辰辽迁逆逊遣邦邪郁郑鄙酌酗酝酶酿钙钦钮钳铀铭链销锋锌锤锦锯锹镁镰镶闸闺阀阁阐陋陶隆隘隙隧雀雁雅雌雹霍霞霸靴鞠鞭韧韵颁颇颈颊频颖颠饪馈馋驰驱驳骡髦魄魔鲁鸦鹊鹰鹿鼠龟黑'.decode("utf-8")

if __name__ == "__main__":
  print "Don't run me.  I'm a plugin!"

else:
  mw.addHook('init', init_hook)
  print 'HanziStats plugin loaded'

