Best JavaScript code snippet using devicefarmer-stf
gfwlist.pac
Source:gfwlist.pac
1 var strProxy = "SOCKS5 127.0.0.1:7070;SOCKS 127.0.0.1:7070";2 function regExpMatch(url, patter) 3 { 4 try { 5 return new RegExp(pattern).test(url); 6 } catch (ex) { 7 return false; 8 } 9 } 10 function FindProxyForURL(url, host) 11 {12 if (shExpMatch(url, "http*://*.lsxszzg.com*")) return strProxy;13 if (shExpMatch(url, "http*://*.85.17.73.31*")) return strProxy;14 if (shExpMatch(url, "http*://*.alien-ufos.com*")) return strProxy;15 if (shExpMatch(url, "http*://*.altrec.com*")) return strProxy;16 if (shExpMatch(url, "http*://*.azubu.tv*")) return strProxy;17 if (shExpMatch(url, "http*://*.beeg.com*")) return strProxy;18 if (shExpMatch(url, "http*://*.darpa.mil*")) return strProxy;19 if (shExpMatch(url, "http*://*.img.dlsite.jp*")) return strProxy;20 if (shExpMatch(url, "http*://*.fastpic.ru*")) return strProxy;21 if (shExpMatch(url, "http*://*.fxnetworks.com*")) return strProxy;22 if (shExpMatch(url, "http*://*.getuploader.com*")) return strProxy;23 if (shExpMatch(url, "http*://*.hulu.com*")) return strProxy;24 if (shExpMatch(url, "http*://*.huluim.com*")) return strProxy;25 if (shExpMatch(url, "http*://*.ilovelongtoes.com*")) return strProxy;26 if (shExpMatch(url, "http*://*.m-sport.co.uk*")) return strProxy;27 if (shExpMatch(url, "http*://*.metarthunter.com*")) return strProxy;28 if (shExpMatch(url, "http*://*.muzu.tv*")) return strProxy;29 if (shExpMatch(url, "http*://*.nbc.com*")) return strProxy;30 if (shExpMatch(url, "http*://*.netflix.com*")) return strProxy;31 if (shExpMatch(url, "http*://*.nuuvem.com*")) return strProxy;32 if (shExpMatch(url, "http*://*.pandora.com*")) return strProxy;33 if (shExpMatch(url, "http*://*.pandora.tv*")) return strProxy;34 if (shExpMatch(url, "http*://*.parkansky.com*")) return strProxy;35 if (shExpMatch(url, "http*://*.pure18.com*")) return strProxy;36 if (shExpMatch(url, "http*://*.radiko.jp*")) return strProxy;37 if (shExpMatch(url, "http*://*.rdio.com*")) return strProxy;38 if (shExpMatch(url, "http*://*.slacker.com*")) return strProxy;39 if (shExpMatch(url, "http*://*.spotify.com*")) return strProxy;40 if (shExpMatch(url, "http*://*.springboardplatform.com*")) return strProxy;41 if (shExpMatch(url, "http*://*.target.com*")) return strProxy;42 if (shExpMatch(url, "http*://*.turntable.fm*")) return strProxy;43 if (shExpMatch(url, "http*://*.vevo.com*")) return strProxy;44 if (shExpMatch(url, "http*://*.ecsm.vs.com*")) return strProxy;45 if (shExpMatch(url, "http*://*.zattoo.com*")) return strProxy;46 if (shExpMatch(url, "http*://*.qq.co.za*")) return strProxy;47 if (shExpMatch(url, "http*://*.zozotown.com*")) return strProxy;48 if (shExpMatch(url, "http*://*.0rz.tw*")) return strProxy;49 if (shExpMatch(url, "http*://*.0rz.tw*")) return strProxy;50 if (shExpMatch(url, "http*://*.0to255.com*")) return strProxy;51 if (shExpMatch(url, "http*://*.1-apple.com.tw*")) return strProxy;52 if (shExpMatch(url, "http*://*.1-apple.com.tw*")) return strProxy;53 if (shExpMatch(url, "http*://*.10conditionsoflove.com*")) return strProxy;54 if (shExpMatch(url, "http*://*.10musume.com*")) return strProxy;55 if (shExpMatch(url, "http*://*.123rf.com*")) return strProxy;56 if (shExpMatch(url, "http*://*.12bet.com*")) return strProxy;57 if (shExpMatch(url, "http*://*.12bet.com*")) return strProxy;58 if (shExpMatch(url, "http*://*.12vpn.com*")) return strProxy;59 if (shExpMatch(url, "http*://*.12vpn.com*")) return strProxy;60 if (shExpMatch(url, "http*://*.141hongkong.com*")) return strProxy;61 if (shExpMatch(url, "http*://*.17t17p.com*")) return strProxy;62 if (shExpMatch(url, "http*://*.173ng.com*")) return strProxy;63 if (shExpMatch(url, "http*://*.173ng.com*")) return strProxy;64 if (shExpMatch(url, "http*://*.1984bbs.com*")) return strProxy;65 if (shExpMatch(url, "http*://*.1984bbs.com*")) return strProxy;66 if (shExpMatch(url, "http*://*.1984bbs.org*")) return strProxy;67 if (shExpMatch(url, "http*://*.1984bbs.org*")) return strProxy;68 if (shExpMatch(url, "http*://*.1bao.org*")) return strProxy;69 if (shExpMatch(url, "http*://*.1bao.org*")) return strProxy;70 if (shExpMatch(url, "http*://*.1pondo.tv*")) return strProxy;71 if (shExpMatch(url, "http*://*.1eew.com*")) return strProxy;72 if (shExpMatch(url, "http*://*.2-hand.info*")) return strProxy;73 if (shExpMatch(url, "http*://*.2000fun.com*")) return strProxy;74 if (shExpMatch(url, "http*://*.2008xianzhang.info*")) return strProxy;75 if (shExpMatch(url, "http*://*.2008xianzhang.info*")) return strProxy;76 if (shExpMatch(url, "http*://*.213.so*")) return strProxy;77 if (shExpMatch(url, "http*://*.21andy.com*")) return strProxy;78 if (shExpMatch(url, "http*://*.24smile.org*")) return strProxy;79 if (shExpMatch(url, "http*://*.2shared.com*")) return strProxy;80 if (shExpMatch(url, "http*://*.315lz.com*")) return strProxy;81 if (shExpMatch(url, "http*://*.32red.com*")) return strProxy;82 if (shExpMatch(url, "http*://*.36rain.com*")) return strProxy;83 if (shExpMatch(url, "http*://*.3a5a.com*")) return strProxy;84 if (shExpMatch(url, "http*://*.3boys2girls.com*")) return strProxy;85 if (shExpMatch(url, "http*://*.4bluestones.biz*")) return strProxy;86 if (shExpMatch(url, "http*://*.4chan.org*")) return strProxy;87 if (shExpMatch(url, "http*://*.4shared.com*")) return strProxy;88 if (shExpMatch(url, "http*://*.5i01.com*")) return strProxy;89 if (shExpMatch(url, "http*://*.taiwannation.50webs.com*")) return strProxy;90 if (shExpMatch(url, "http*://*.51.ca*")) return strProxy;91 if (shExpMatch(url, "http*://*.5isotoi5.org*")) return strProxy;92 if (shExpMatch(url, "http*://*.5maodang.com*")) return strProxy;93 if (shExpMatch(url, "http*://*.64tianwang.com*")) return strProxy;94 if (shExpMatch(url, "http*://*.64wiki.com*")) return strProxy;95 if (shExpMatch(url, "http*://*.666kb.com*")) return strProxy;96 if (shExpMatch(url, "http*://*.6park.com*")) return strProxy;97 if (shExpMatch(url, "http*://*.6park.com*")) return strProxy;98 if (shExpMatch(url, "http*://*.7capture.com*")) return strProxy;99 if (shExpMatch(url, "http*://*.85st.com*")) return strProxy;100 if (shExpMatch(url, "http*://*.881903.com*")) return strProxy;101 if (shExpMatch(url, "http*://*.888.com*")) return strProxy;102 if (shExpMatch(url, "http*://*.881903.com*")) return strProxy;103 if (shExpMatch(url, "http*://*.89-64.org*")) return strProxy;104 if (shExpMatch(url, "http*://*.89-64.org*")) return strProxy;105 if (shExpMatch(url, "http*://*.9001700.com*")) return strProxy;106 if (shExpMatch(url, "http*://*.908taiwan.org*")) return strProxy;107 if (shExpMatch(url, "http*://*.91porn.com*")) return strProxy;108 if (shExpMatch(url, "http*://*.92ccav.com*")) return strProxy;109 if (shExpMatch(url, "http*://*.9bis.com*")) return strProxy;110 if (shExpMatch(url, "http*://*.9bis.net*")) return strProxy;111 if (shExpMatch(url, "http*://*.a-normal-day.com*")) return strProxy;112 if (shExpMatch(url, "http*://*.a5.com.ru*")) return strProxy;113 if (shExpMatch(url, "http*://*.aamacau.com*")) return strProxy;114 if (shExpMatch(url, "http*://*.ablwang.com*")) return strProxy;115 if (shExpMatch(url, "http*://*.aboluowang.com*")) return strProxy;116 if (shExpMatch(url, "http*://*.aboluowang.com*")) return strProxy;117 if (shExpMatch(url, "http*://*.aboutgfw.com*")) return strProxy;118 if (shExpMatch(url, "http*://*.acgkj.com*")) return strProxy;119 if (shExpMatch(url, "http*://*.actimes.com.au*")) return strProxy;120 if (shExpMatch(url, "http*://*.aculo.us*")) return strProxy;121 if (shExpMatch(url, "http*://*.addictedtocoffee.de*")) return strProxy;122 if (shExpMatch(url, "http*://*.adultfriendfinder.com*")) return strProxy;123 if (shExpMatch(url, "http*://*.adultkeep.net*")) return strProxy;124 if (shExpMatch(url, "http*://*.advanscene.com*")) return strProxy;125 if (shExpMatch(url, "http*://*.advertfan.com*")) return strProxy;126 if (shExpMatch(url, "http*://*.aenhancers.com*")) return strProxy;127 if (shExpMatch(url, "http*://*.af.mil*")) return strProxy;128 if (shExpMatch(url, "http*://*.aiph.net*")) return strProxy;129 if (shExpMatch(url, "http*://*.aiph.net*")) return strProxy;130 if (shExpMatch(url, "http*://*.aisex.com*")) return strProxy;131 if (shExpMatch(url, "http*://*.ait.org.tw*")) return strProxy;132 if (shExpMatch(url, "http*://*.aiweiwei.com*")) return strProxy;133 if (shExpMatch(url, "http*://*.aiweiweiblog.com*")) return strProxy;134 if (shExpMatch(url, "http*://*.aiweiweiblog.com*")) return strProxy;135 if (shExpMatch(url, "http*://*.ajsands.com*")) return strProxy;136 if (shExpMatch(url, "http*://*.akiba-online.com*")) return strProxy;137 if (shExpMatch(url, "http*://*.al-qimmah.net*")) return strProxy;138 if (shExpMatch(url, "http*://*.alabout.com*")) return strProxy;139 if (shExpMatch(url, "http*://*.alasbarricadas.org*")) return strProxy;140 if (shExpMatch(url, "http*://*.alexlur.org*")) return strProxy;141 if (shExpMatch(url, "http*://*.aliengu.com*")) return strProxy;142 if (shExpMatch(url, "http*://*.alkasir.com*")) return strProxy;143 if (shExpMatch(url, "http*://*.allgirlsallowed.org*")) return strProxy;144 if (shExpMatch(url, "http*://*.alliance.org.hk*")) return strProxy;145 if (shExpMatch(url, "http*://*.allinfa.com*")) return strProxy;146 if (shExpMatch(url, "http*://*.allinfa.com*")) return strProxy;147 if (shExpMatch(url, "http*://*.allmovie.com*")) return strProxy;148 if (shExpMatch(url, "http*://*.alternate-tools.com*")) return strProxy;149 if (shExpMatch(url, "http*://*.alvinalexander.com*")) return strProxy;150 if (shExpMatch(url, "http*://*.alwaysdata.com*")) return strProxy;151 if (shExpMatch(url, "http*://*.alwaysdata.com*")) return strProxy;152 if (shExpMatch(url, "http*://*.alwaysdata.net*")) return strProxy;153 if (shExpMatch(url, "http*://*.am730.com.hk*")) return strProxy;154 if (shExpMatch(url, "http*://*.amazon.com*")) return strProxy;155 if (shExpMatch(url, "http*://*.ameblo.jp*")) return strProxy;156 if (shExpMatch(url, "http*://*.ameblo.jp*")) return strProxy;157 if (shExpMatch(url, "http*://*.americangreencard.com*")) return strProxy;158 if (shExpMatch(url, "http*://*.amiblockedornot.com*")) return strProxy;159 if (shExpMatch(url, "http*://*.amnesty.org*")) return strProxy;160 if (shExpMatch(url, "http*://*.amnesty.org*")) return strProxy;161 if (shExpMatch(url, "http*://*.amnestyusa.org*")) return strProxy;162 if (shExpMatch(url, "http*://*.amnestyusa.org*")) return strProxy;163 if (shExpMatch(url, "http*://*.amoiist.com*")) return strProxy;164 if (shExpMatch(url, "http*://*.analyze-v.com*")) return strProxy;165 if (shExpMatch(url, "http*://*.anchorfree.com*")) return strProxy;166 if (shExpMatch(url, "http*://*.ancsconf.org*")) return strProxy;167 if (shExpMatch(url, "http*://*.andfaraway.net*")) return strProxy;168 if (shExpMatch(url, "http*://*.android.com*")) return strProxy;169 if (shExpMatch(url, "http*://*.android-x86.org*")) return strProxy;170 if (shExpMatch(url, "http*://*.angularjs.org*")) return strProxy;171 if (shExpMatch(url, "http*://*.animecrazy.net*")) return strProxy;172 if (shExpMatch(url, "http*://*.anobii.com*")) return strProxy;173 if (shExpMatch(url, "http*://*.anonymizer.com*")) return strProxy;174 if (shExpMatch(url, "http*://*.anontext.com*")) return strProxy;175 if (shExpMatch(url, "http*://*.answering-islam.org*")) return strProxy;176 if (shExpMatch(url, "http*://*.antd.org*")) return strProxy;177 if (shExpMatch(url, "http*://*.anthonycalzadilla.com*")) return strProxy;178 if (shExpMatch(url, "http*://*.antiwave.net*")) return strProxy;179 if (shExpMatch(url, "http*://*.antiwave.net*")) return strProxy;180 if (shExpMatch(url, "http*://*.aobo.com.au*")) return strProxy;181 if (shExpMatch(url, "http*://*.aolchannels.aol.com*")) return strProxy;182 if (shExpMatch(url, "http*://*.video.aol.ca*")) return strProxy;183 if (shExpMatch(url, "http*://*.video.aol.co.uk*")) return strProxy;184 if (shExpMatch(url, "http*://*.video.aol.com*")) return strProxy;185 if (shExpMatch(url, "http*://*.video.aol.com*")) return strProxy;186 if (shExpMatch(url, "http*://*.aolnews.com*")) return strProxy;187 if (shExpMatch(url, "http*://*.aomiwang.com*")) return strProxy;188 if (shExpMatch(url, "http*://*.video.ap.org*")) return strProxy;189 if (shExpMatch(url, "http*://*.apetube.com*")) return strProxy;190 if (shExpMatch(url, "http*://*.apiary.io*")) return strProxy;191 if (shExpMatch(url, "http*://*.apigee.com*")) return strProxy;192 if (shExpMatch(url, "http*://*.apigee.com*")) return strProxy;193 if (shExpMatch(url, "http*://*.appledaily.com*")) return strProxy;194 if (shExpMatch(url, "http*://*.archive.is*")) return strProxy;195 if (shExpMatch(url, "http*://*.archive.org*")) return strProxy;196 if (shExpMatch(url, "http*://*.arctosia.com*")) return strProxy;197 if (shExpMatch(url, "http*://*.arctosia.com*")) return strProxy;198 if (shExpMatch(url, "http*://*.areca-backup.org*")) return strProxy;199 if (shExpMatch(url, "http*://*.army.mil*")) return strProxy;200 if (shExpMatch(url, "http*://*.artsy.net*")) return strProxy;201 if (shExpMatch(url, "http*://*.asahichinese.com*")) return strProxy;202 if (shExpMatch(url, "http*://*.asahichinese.com*")) return strProxy;203 if (shExpMatch(url, "http*://*.asdfg.jp*")) return strProxy;204 if (shExpMatch(url, "http*://*.japanfirst.asianfreeforum.com*")) return strProxy;205 if (shExpMatch(url, "http*://*.asiaharvest.org*")) return strProxy;206 if (shExpMatch(url, "http*://*.asiaharvest.org*")) return strProxy;207 if (shExpMatch(url, "http*://*.asianews.it*")) return strProxy;208 if (shExpMatch(url, "http*://*.asianwomensfilm.de*")) return strProxy;209 if (shExpMatch(url, "http*://*.askstudent.com*")) return strProxy;210 if (shExpMatch(url, "http*://*.askynz.net*")) return strProxy;211 if (shExpMatch(url, "http*://*.askynz.net*")) return strProxy;212 if (shExpMatch(url, "http*://*.assembla.com*")) return strProxy;213 if (shExpMatch(url, "http*://*.astonmartinnews.com*")) return strProxy;214 if (shExpMatch(url, "http*://*.astrill.com*")) return strProxy;215 if (shExpMatch(url, "http*://*.atc.org.au*")) return strProxy;216 if (shExpMatch(url, "http*://*.atchinese.com*")) return strProxy;217 if (shExpMatch(url, "http*://*.atchinese.com*")) return strProxy;218 if (shExpMatch(url, "http*://*.atgfw.org*")) return strProxy;219 if (shExpMatch(url, "http*://*.atj.org.tw*")) return strProxy;220 if (shExpMatch(url, "http*://*.atlaspost.com*")) return strProxy;221 if (shExpMatch(url, "http*://*.atlaspost.com*")) return strProxy;222 if (shExpMatch(url, "http*://*.atdmt.com*")) return strProxy;223 if (shExpMatch(url, "http*://*.atnext.com*")) return strProxy;224 if (shExpMatch(url, "http*://*.atnext.com*")) return strProxy;225 if (shExpMatch(url, "http*://*.avaaz.org*")) return strProxy;226 if (shExpMatch(url, "http*://*.avaaz.org*")) return strProxy;227 if (shExpMatch(url, "http*://*.avast.com*")) return strProxy;228 if (shExpMatch(url, "http*://*.avdb.in*")) return strProxy;229 if (shExpMatch(url, "http*://*.avdb.in*")) return strProxy;230 if (shExpMatch(url, "http*://*.avdb.tv*")) return strProxy;231 if (shExpMatch(url, "http*://*.avdb.tv*")) return strProxy;232 if (shExpMatch(url, "http*://*.avidemux.org*")) return strProxy;233 if (shExpMatch(url, "http*://*.avoision.com*")) return strProxy;234 if (shExpMatch(url, "http*://*.axureformac.com*")) return strProxy;235 if (shExpMatch(url, "http*://*.forum.baby-kingdom.com*")) return strProxy;236 if (shExpMatch(url, "http*://*.babynet.com.hk*")) return strProxy;237 if (shExpMatch(url, "http*://*.backchina.com*")) return strProxy;238 if (shExpMatch(url, "http*://*.backchina.com*")) return strProxy;239 if (shExpMatch(url, "http*://*.backpackers.com.tw*")) return strProxy;240 if (shExpMatch(url, "http*://*.backtotiananmen.com*")) return strProxy;241 if (shExpMatch(url, "http*://*.badoo.com*")) return strProxy;242 if (shExpMatch(url, "http*://*.baidu.jp*")) return strProxy;243 if (shExpMatch(url, "http*://*.baixing.me*")) return strProxy;244 if (shExpMatch(url, "http*://*.hen.bao.li*")) return strProxy;245 if (shExpMatch(url, "http*://*.bannedbook.org*")) return strProxy;246 if (shExpMatch(url, "http*://*.bannedbook.org*")) return strProxy;247 if (shExpMatch(url, "http*://*.barenakedislam.com*")) return strProxy;248 if (shExpMatch(url, "http*://*.barnabu.co.uk*")) return strProxy;249 if (shExpMatch(url, "http*://*.bayvoice.net*")) return strProxy;250 if (shExpMatch(url, "http*://*.bayvoice.net*")) return strProxy;251 if (shExpMatch(url, "http*://*.dajusha.baywords.com*")) return strProxy;252 if (shExpMatch(url, "http*://*.bbc.co.uk*")) return strProxy;253 if (shExpMatch(url, "http*://*.bbc.co.uk*")) return strProxy;254 if (shExpMatch(url, "http*://*.bbc.co*")) return strProxy;255 if (shExpMatch(url, "http*://*.news.bbc.co.uk*")) return strProxy;256 if (shExpMatch(url, "http*://*.newsforums.bbc.co.uk*")) return strProxy;257 if (shExpMatch(url, "http*://*.bbcchinese.com*")) return strProxy;258 if (shExpMatch(url, "http*://*.bbcchinese.com*")) return strProxy;259 if (shExpMatch(url, "http*://*.bbc.in*")) return strProxy;260 if (shExpMatch(url, "http*://*.bbg.gov*")) return strProxy;261 if (shExpMatch(url, "http*://*.bbsfeed.com*")) return strProxy;262 if (shExpMatch(url, "http*://*.bbsland.com*")) return strProxy;263 if (shExpMatch(url, "http*://*.bcc.com.tw*")) return strProxy;264 if (shExpMatch(url, "http*://*.bcchinese.net*")) return strProxy;265 if (shExpMatch(url, "http*://*.bebo.com*")) return strProxy;266 if (shExpMatch(url, "http*://*.bebo.com*")) return strProxy;267 if (shExpMatch(url, "http*://*.beijing1989.com*")) return strProxy;268 if (shExpMatch(url, "http*://*.beijingspring.com*")) return strProxy;269 if (shExpMatch(url, "http*://*.beijingspring.com*")) return strProxy;270 if (shExpMatch(url, "http*://*.berlintwitterwall.com*")) return strProxy;271 if (shExpMatch(url, "http*://*.berlintwitterwall.com*")) return strProxy;272 if (shExpMatch(url, "http*://*.bestforchina.org*")) return strProxy;273 if (shExpMatch(url, "http*://*.bestforchina.org*")) return strProxy;274 if (shExpMatch(url, "http*://*.bestvpnservice.com*")) return strProxy;275 if (shExpMatch(url, "http*://*.bet365.com*")) return strProxy;276 if (shExpMatch(url, "http*://*.betfair.com*")) return strProxy;277 if (shExpMatch(url, "http*://*.bettween.com*")) return strProxy;278 if (shExpMatch(url, "http*://*.bettween.com*")) return strProxy;279 if (shExpMatch(url, "http*://*.betvictor.com*")) return strProxy;280 if (shExpMatch(url, "http*://*.bewww.net*")) return strProxy;281 if (shExpMatch(url, "http*://*.beyondfirewall.com*")) return strProxy;282 if (shExpMatch(url, "http*://*.bfnn.org*")) return strProxy;283 if (shExpMatch(url, "http*://*.bfsh.hk*")) return strProxy;284 if (shExpMatch(url, "http*://*.biantailajiao.com*")) return strProxy;285 if (shExpMatch(url, "http*://*.biantailajiao.in*")) return strProxy;286 if (shExpMatch(url, "http*://*.bic2011.org*")) return strProxy;287 if (shExpMatch(url, "http*://*.bigfools.com*")) return strProxy;288 if (shExpMatch(url, "http*://*.bignews.org*")) return strProxy;289 if (shExpMatch(url, "http*://*.bignews.org*")) return strProxy;290 if (shExpMatch(url, "http*://*.bigsound.org*")) return strProxy;291 if (shExpMatch(url, "http*://*.bill2-software.com*")) return strProxy;292 if (shExpMatch(url, "http*://*.billypan.com*")) return strProxy;293 if (shExpMatch(url, "http*://*.billywr.com*")) return strProxy;294 if (shExpMatch(url, "http*://*.bipic.net*")) return strProxy;295 if (shExpMatch(url, "http*://*.bit.ly*")) return strProxy;296 if (shExpMatch(url, "http*://*.bit.ly*")) return strProxy;297 if (shExpMatch(url, "http*://*.bitcointalk.org*")) return strProxy;298 if (shExpMatch(url, "http*://*.bitshare.com*")) return strProxy;299 if (shExpMatch(url, "http*://*.bitshare.com*")) return strProxy;300 if (shExpMatch(url, "http*://*.bjzc.org*")) return strProxy;301 if (shExpMatch(url, "http*://*.bjzc.org*")) return strProxy;302 if (shExpMatch(url, "http*://*.tor.blingblingsquad.net*")) return strProxy;303 if (shExpMatch(url, "http*://*.blinkx.com*")) return strProxy;304 if (shExpMatch(url, "http*://*.blinkx.com*")) return strProxy;305 if (shExpMatch(url, "http*://*.blinw.com*")) return strProxy;306 if (shExpMatch(url, "http*://*.blip.tv*")) return strProxy;307 if (shExpMatch(url, "http*://*.blip.tv*")) return strProxy;308 if (shExpMatch(url, "http*://*.blockcn.com*")) return strProxy;309 if (shExpMatch(url, "http*://*.blockcn.com*")) return strProxy;310 if (shExpMatch(url, "http*://*.blog.de*")) return strProxy;311 if (shExpMatch(url, "http*://*.blogblog.com*")) return strProxy;312 if (shExpMatch(url, "http*://*.blogcatalog.com*")) return strProxy;313 if (shExpMatch(url, "http*://*.blogcatalog.com*")) return strProxy;314 if (shExpMatch(url, "http*://*.blogger.com*")) return strProxy;315 if (shExpMatch(url, "http*://*.blogger.com*")) return strProxy;316 if (shExpMatch(url, "http*://*.blogimg.jp*")) return strProxy;317 if (shExpMatch(url, "http*://*.blog.kangye.org*")) return strProxy;318 if (shExpMatch(url, "http*://*.bloglines.com*")) return strProxy;319 if (shExpMatch(url, "http*://*.bloglines.com*")) return strProxy;320 if (shExpMatch(url, "http*://*.bloglovin.com*")) return strProxy;321 if (shExpMatch(url, "http*://*.rconversation.blogs.com*")) return strProxy;322 if (shExpMatch(url, "http*://*.blogtd.net*")) return strProxy;323 if (shExpMatch(url, "http*://*.blogtd.org*")) return strProxy;324 if (shExpMatch(url, "http*://*.blogtd.org*")) return strProxy;325 if (shExpMatch(url, "http*://*.bloodshed.net*")) return strProxy;326 if (shExpMatch(url, "http*://*.bloomberg.cn*")) return strProxy;327 if (shExpMatch(url, "http*://*.bloomberg.cn*")) return strProxy;328 if (shExpMatch(url, "http*://*.bloomberg.com*")) return strProxy;329 if (shExpMatch(url, "http*://*.bloomberg.com*")) return strProxy;330 if (shExpMatch(url, "http*://*.bloomberg.de*")) return strProxy;331 if (shExpMatch(url, "http*://*.bloomberg.de*")) return strProxy;332 if (shExpMatch(url, "http*://*.bloomfortune.com*")) return strProxy;333 if (shExpMatch(url, "http*://*.bnrmetal.com*")) return strProxy;334 if (shExpMatch(url, "http*://*.boardreader.com*")) return strProxy;335 if (shExpMatch(url, "http*://*.boardreader.com*")) return strProxy;336 if (shExpMatch(url, "http*://*.bonbonme.com*")) return strProxy;337 if (shExpMatch(url, "http*://*.boobstagram.com*")) return strProxy;338 if (shExpMatch(url, "http*://*.book.com.tw*")) return strProxy;339 if (shExpMatch(url, "http*://*.books.com.tw*")) return strProxy;340 if (shExpMatch(url, "http*://*.botanwang.com*")) return strProxy;341 if (shExpMatch(url, "http*://*.bot.nu*")) return strProxy;342 if (shExpMatch(url, "http*://*.bowenpress.com*")) return strProxy;343 if (shExpMatch(url, "http*://*.bowenpress.com*")) return strProxy;344 if (shExpMatch(url, "http*://*.dl.box.net*")) return strProxy;345 if (shExpMatch(url, "http*://*.dl.box.net*")) return strProxy;346 if (shExpMatch(url, "http*://*.boxun.com*")) return strProxy;347 if (shExpMatch(url, "http*://*.boxun.com*")) return strProxy;348 if (shExpMatch(url, "http*://*.boxun.tv*")) return strProxy;349 if (shExpMatch(url, "http*://*.boxun.tv*")) return strProxy;350 if (shExpMatch(url, "http*://*.boxunblog.com*")) return strProxy;351 if (shExpMatch(url, "http*://*.boxunblog.com*")) return strProxy;352 if (shExpMatch(url, "http*://*.boxunclub.com*")) return strProxy;353 if (shExpMatch(url, "http*://*.br.st*")) return strProxy;354 if (shExpMatch(url, "http*://*.brandonhutchinson.com*")) return strProxy;355 if (shExpMatch(url, "http*://*.braumeister.org*")) return strProxy;356 if (shExpMatch(url, "http*://*.break.com*")) return strProxy;357 if (shExpMatch(url, "http*://*.break.com*")) return strProxy;358 if (shExpMatch(url, "http*://*.breakingtweets.com*")) return strProxy;359 if (shExpMatch(url, "http*://*.breakingtweets.com*")) return strProxy;360 if (shExpMatch(url, "http*://*.breakwall.net*")) return strProxy;361 if (shExpMatch(url, "http*://*.briefdream.com*")) return strProxy;362 if (shExpMatch(url, "http*://*.brightkite.com*")) return strProxy;363 if (shExpMatch(url, "http*://*.brightkite.com*")) return strProxy;364 if (shExpMatch(url, "http*://*.brizzly.com*")) return strProxy;365 if (shExpMatch(url, "http*://*.brizzly.com*")) return strProxy;366 if (shExpMatch(url, "http*://*.broadbook.com*")) return strProxy;367 if (shExpMatch(url, "http*://*.ibros.org*")) return strProxy;368 if (shExpMatch(url, "http*://*.brucewang.net*")) return strProxy;369 if (shExpMatch(url, "http*://*.bt95.com*")) return strProxy;370 if (shExpMatch(url, "http*://*.btdigg.org*")) return strProxy;371 if (shExpMatch(url, "http*://*.btspread.com*")) return strProxy;372 if (shExpMatch(url, "http*://*.budaedu.org*")) return strProxy;373 if (shExpMatch(url, "http*://*.budaedu.org*")) return strProxy;374 if (shExpMatch(url, "http*://*.bullog.org*")) return strProxy;375 if (shExpMatch(url, "http*://*.bullog.org*")) return strProxy;376 if (shExpMatch(url, "http*://*.bullogger.com*")) return strProxy;377 if (shExpMatch(url, "http*://*.bullogger.com*")) return strProxy;378 if (shExpMatch(url, "http*://*.businessinsider.com.au*")) return strProxy;379 if (shExpMatch(url, "http*://*.businessweek.com*")) return strProxy;380 if (shExpMatch(url, "http*://*.businesstimes.com.cn*")) return strProxy;381 if (shExpMatch(url, "http*://*.businesstimes.com.cn*")) return strProxy;382 if (shExpMatch(url, "http*://*.bugclub.org*")) return strProxy;383 if (shExpMatch(url, "http*://*.buugaa.com*")) return strProxy;384 if (shExpMatch(url, "http*://*.buzzhand.com*")) return strProxy;385 if (shExpMatch(url, "http*://*.buzzurl.jp*")) return strProxy;386 if (shExpMatch(url, "http*://*.bwsj.hk*")) return strProxy;387 if (shExpMatch(url, "http*://*.bx.tl*")) return strProxy;388 if (shExpMatch(url, "http*://*.holz.byethost8.com*")) return strProxy;389 if (shExpMatch(url, "http*://*.c-spanvideo.org*")) return strProxy;390 if (shExpMatch(url, "http*://*.c-spanvideo.org*")) return strProxy;391 if (shExpMatch(url, "http*://*.c-est-simple.com*")) return strProxy;392 if (shExpMatch(url, "http*://*.cacnw.com*")) return strProxy;393 if (shExpMatch(url, "http*://*.cactusvpn.com*")) return strProxy;394 if (shExpMatch(url, "http*://*.cactusvpn.com*")) return strProxy;395 if (shExpMatch(url, "http*://*.cafepress.com*")) return strProxy;396 if (shExpMatch(url, "http*://*.cahr.org.tw*")) return strProxy;397 if (shExpMatch(url, "http*://*.calameo.com*")) return strProxy;398 if (shExpMatch(url, "http*://*.cn.calameo.com*")) return strProxy;399 if (shExpMatch(url, "http*://*.cn.calameo.com*")) return strProxy;400 if (shExpMatch(url, "http*://*.cam4.com*")) return strProxy;401 if (shExpMatch(url, "http*://*.cam4.jp*")) return strProxy;402 if (shExpMatch(url, "http*://*.cam4.sg*")) return strProxy;403 if (shExpMatch(url, "http*://*.cams.com*")) return strProxy;404 if (shExpMatch(url, "http*://*.cams.org.sg*")) return strProxy;405 if (shExpMatch(url, "http*://*.canadameet.com*")) return strProxy;406 if (shExpMatch(url, "http*://*.bbs.cantonese.asia*")) return strProxy;407 if (shExpMatch(url, "http*://*.canyu.org*")) return strProxy;408 if (shExpMatch(url, "http*://*.cao.im*")) return strProxy;409 if (shExpMatch(url, "http*://*.caobian.info*")) return strProxy;410 if (shExpMatch(url, "http*://*.caobian.info*")) return strProxy;411 if (shExpMatch(url, "http*://*.catcatbox.com*")) return strProxy;412 if (shExpMatch(url, "http*://*.caochangqing.com*")) return strProxy;413 if (shExpMatch(url, "http*://*.caochangqing.com*")) return strProxy;414 if (shExpMatch(url, "http*://*.cari.com.my*")) return strProxy;415 if (shExpMatch(url, "http*://*.catch22.net*")) return strProxy;416 if (shExpMatch(url, "http*://*.catfightpayperview.xxx*")) return strProxy;417 if (shExpMatch(url, "http*://*.catholic.org.hk*")) return strProxy;418 if (shExpMatch(url, "http*://*.catholic.org.hk*")) return strProxy;419 if (shExpMatch(url, "http*://*.catholic.org.tw*")) return strProxy;420 if (shExpMatch(url, "http*://*.catholic.org.tw*")) return strProxy;421 if (shExpMatch(url, "http*://*.cattt.com*")) return strProxy;422 if (shExpMatch(url, "http*://*.cbc.ca*")) return strProxy;423 if (shExpMatch(url, "http*://*.cbsnews.com*")) return strProxy;424 if (shExpMatch(url, "http*://*.ccavtop10.com*")) return strProxy;425 if (shExpMatch(url, "http*://*.ccdtr.org*")) return strProxy;426 if (shExpMatch(url, "http*://*.ccdtr.org*")) return strProxy;427 if (shExpMatch(url, "http*://*.ccim.org*")) return strProxy;428 if (shExpMatch(url, "http*://*.cclife.org*")) return strProxy;429 if (shExpMatch(url, "http*://*.ccthere.com*")) return strProxy;430 if (shExpMatch(url, "http*://*.cctongbao.com*")) return strProxy;431 if (shExpMatch(url, "http*://*.ccue.ca*")) return strProxy;432 if (shExpMatch(url, "http*://*.ccue.com*")) return strProxy;433 if (shExpMatch(url, "http*://*.cgdepot.org*")) return strProxy;434 if (shExpMatch(url, "http*://*.cgdepot.org*")) return strProxy;435 if (shExpMatch(url, "http*://*.cdef.org*")) return strProxy;436 if (shExpMatch(url, "http*://*.cdig.info*")) return strProxy;437 if (shExpMatch(url, "http*://*.cdjp.org*")) return strProxy;438 if (shExpMatch(url, "http*://*.cdjp.org*")) return strProxy;439 if (shExpMatch(url, "http*://*.cdninstagram.com*")) return strProxy;440 if (shExpMatch(url, "http*://*.cdnews.com.tw*")) return strProxy;441 if (shExpMatch(url, "http*://*.cdp1998.org*")) return strProxy;442 if (shExpMatch(url, "http*://*.cdp1998.org*")) return strProxy;443 if (shExpMatch(url, "http*://*.cdp2006.org*")) return strProxy;444 if (shExpMatch(url, "http*://*.cdp2006.org*")) return strProxy;445 if (shExpMatch(url, "http*://*.cdpa.url.tw*")) return strProxy;446 if (shExpMatch(url, "http*://*.cdpusa.org*")) return strProxy;447 if (shExpMatch(url, "http*://*.cdpweb.org*")) return strProxy;448 if (shExpMatch(url, "http*://*.cdpweb.org*")) return strProxy;449 if (shExpMatch(url, "http*://*.cdpwu.org*")) return strProxy;450 if (shExpMatch(url, "http*://*.cdpwu.org*")) return strProxy;451 if (shExpMatch(url, "http*://*.cdw.com*")) return strProxy;452 if (shExpMatch(url, "http*://*.cecc.gov*")) return strProxy;453 if (shExpMatch(url, "http*://*.cecc.gov*")) return strProxy;454 if (shExpMatch(url, "http*://*.cellulo.info*")) return strProxy;455 if (shExpMatch(url, "http*://*.cenci.tk*")) return strProxy;456 if (shExpMatch(url, "http*://*.cenews.eu*")) return strProxy;457 if (shExpMatch(url, "http*://*.centralnation.com*")) return strProxy;458 if (shExpMatch(url, "http*://*.centurys.net*")) return strProxy;459 if (shExpMatch(url, "http*://*.centurys.net*")) return strProxy;460 if (shExpMatch(url, "http*://*.cfhks.org.hk*")) return strProxy;461 if (shExpMatch(url, "http*://*.cftfc.com*")) return strProxy;462 if (shExpMatch(url, "http*://*.chandoo.org*")) return strProxy;463 if (shExpMatch(url, "http*://*.change.org*")) return strProxy;464 if (shExpMatch(url, "http*://*.change.org*")) return strProxy;465 if (shExpMatch(url, "http*://*.changp.com*")) return strProxy;466 if (shExpMatch(url, "http*://*.changp.com*")) return strProxy;467 if (shExpMatch(url, "http*://*.chapm25.com*")) return strProxy;468 if (shExpMatch(url, "http*://*.chaturbate.com*")) return strProxy;469 if (shExpMatch(url, "http*://*.chengmingmag.com*")) return strProxy;470 if (shExpMatch(url, "http*://*.chenguangcheng.com*")) return strProxy;471 if (shExpMatch(url, "http*://*.chenguangcheng.com*")) return strProxy;472 if (shExpMatch(url, "http*://*.chenpokong.com*")) return strProxy;473 if (shExpMatch(url, "http*://*.cherrysave.com*")) return strProxy;474 if (shExpMatch(url, "http*://*.chhongbi.org*")) return strProxy;475 if (shExpMatch(url, "http*://*.chicagoncmtv.com*")) return strProxy;476 if (shExpMatch(url, "http*://*.china-week.com*")) return strProxy;477 if (shExpMatch(url, "http*://*.china101.com*")) return strProxy;478 if (shExpMatch(url, "http*://*.china101.com*")) return strProxy;479 if (shExpMatch(url, "http*://*.china18.org*")) return strProxy;480 if (shExpMatch(url, "http*://*.china21.com*")) return strProxy;481 if (shExpMatch(url, "http*://*.china21.org*")) return strProxy;482 if (shExpMatch(url, "http*://*.china21.org*")) return strProxy;483 if (shExpMatch(url, "http*://*.china5000.us*")) return strProxy;484 if (shExpMatch(url, "http*://*.chinaaffairs.org*")) return strProxy;485 if (shExpMatch(url, "http*://*.chinaaffairs.org*")) return strProxy;486 if (shExpMatch(url, "http*://*.chinaaid.me*")) return strProxy;487 if (shExpMatch(url, "http*://*.chinaaid.us*")) return strProxy;488 if (shExpMatch(url, "http*://*.chinaaid.org*")) return strProxy;489 if (shExpMatch(url, "http*://*.chinaaid.net*")) return strProxy;490 if (shExpMatch(url, "http*://*.chinacomments.org*")) return strProxy;491 if (shExpMatch(url, "http*://*.chinacomments.org*")) return strProxy;492 if (shExpMatch(url, "http*://*.chinachange.org*")) return strProxy;493 if (shExpMatch(url, "http*://*.chinachannel.hk*")) return strProxy;494 if (shExpMatch(url, "http*://*.chinachannel.hk*")) return strProxy;495 if (shExpMatch(url, "http*://*.chinadigitaltimes.net*")) return strProxy;496 if (shExpMatch(url, "http*://*.chinadigitaltimes.net*")) return strProxy;497 if (shExpMatch(url, "http*://*.chinaeweekly.com*")) return strProxy;498 if (shExpMatch(url, "http*://*.chinaeweekly.com*")) return strProxy;499 if (shExpMatch(url, "http*://*.chinafreepress.org*")) return strProxy;500 if (shExpMatch(url, "http*://*.chinagate.com*")) return strProxy;501 if (shExpMatch(url, "http*://*.chinageeks.org*")) return strProxy;502 if (shExpMatch(url, "http*://*.chinagfw.org*")) return strProxy;503 if (shExpMatch(url, "http*://*.chinagfw.org*")) return strProxy;504 if (shExpMatch(url, "http*://*.chinagreenparty.org*")) return strProxy;505 if (shExpMatch(url, "http*://*.chinagreenparty.org*")) return strProxy;506 if (shExpMatch(url, "http*://*.chinahush.com*")) return strProxy;507 if (shExpMatch(url, "http*://*.chinalawtranslate.com*")) return strProxy;508 if (shExpMatch(url, "http*://*.chinaxchina.com*")) return strProxy;509 if (shExpMatch(url, "http*://*.chinainperspective.com*")) return strProxy;510 if (shExpMatch(url, "http*://*.chinainperspective.net*")) return strProxy;511 if (shExpMatch(url, "http*://*.chinainperspective.net*")) return strProxy;512 if (shExpMatch(url, "http*://*.chinainperspective.org*")) return strProxy;513 if (shExpMatch(url, "http*://*.chinainperspective.org*")) return strProxy;514 if (shExpMatch(url, "http*://*.chinainterimgov.org*")) return strProxy;515 if (shExpMatch(url, "http*://*.chinalawandpolicy.com*")) return strProxy;516 if (shExpMatch(url, "http*://*.chinamule.com*")) return strProxy;517 if (shExpMatch(url, "http*://*.chinamule.com*")) return strProxy;518 if (shExpMatch(url, "http*://*.chinamz.org*")) return strProxy;519 if (shExpMatch(url, "http*://*.chinarightsia.org*")) return strProxy;520 if (shExpMatch(url, "http*://*.chinasocialdemocraticparty.com*")) return strProxy;521 if (shExpMatch(url, "http*://*.chinasocialdemocraticparty.com*")) return strProxy;522 if (shExpMatch(url, "http*://*.chinasoul.org*")) return strProxy;523 if (shExpMatch(url, "http*://*.chinasoul.org*")) return strProxy;524 if (shExpMatch(url, "http*://*.chinatimes.com*")) return strProxy;525 if (shExpMatch(url, "http*://*.chinatweeps.com*")) return strProxy;526 if (shExpMatch(url, "http*://*.chinaway.org*")) return strProxy;527 if (shExpMatch(url, "http*://*.chinaworker.info*")) return strProxy;528 if (shExpMatch(url, "http*://*.chinaworker.info*")) return strProxy;529 if (shExpMatch(url, "http*://*.chinayouth.org.hk*")) return strProxy;530 if (shExpMatch(url, "http*://*.chinayuanmin.org*")) return strProxy;531 if (shExpMatch(url, "http*://*.chinayuanmin.org*")) return strProxy;532 if (shExpMatch(url, "http*://*.chinese-hermit.net*")) return strProxy;533 if (shExpMatch(url, "http*://*.chinese-memorial.org*")) return strProxy;534 if (shExpMatch(url, "http*://*.chinesedailynews.com*")) return strProxy;535 if (shExpMatch(url, "http*://*.chinesen.de*")) return strProxy;536 if (shExpMatch(url, "http*://*.chinesen.de*")) return strProxy;537 if (shExpMatch(url, "http*://*.chinesepen.org*")) return strProxy;538 if (shExpMatch(url, "http*://*.chinesetalks.net*")) return strProxy;539 if (shExpMatch(url, "http*://*.chingcheong.com*")) return strProxy;540 if (shExpMatch(url, "http*://*.chingcheong.com*")) return strProxy;541 if (shExpMatch(url, "http*://*.chn.chosun.com*")) return strProxy;542 if (shExpMatch(url, "http*://*.christianstudy.com*")) return strProxy;543 if (shExpMatch(url, "http*://*.christianstudy.com*")) return strProxy;544 if (shExpMatch(url, "http*://*.christusrex.org*")) return strProxy;545 if (shExpMatch(url, "http*://*.chrlcg-hk.org*")) return strProxy;546 if (shExpMatch(url, "http*://*.chrome.com*")) return strProxy;547 if (shExpMatch(url, "http*://*.chromeadblock.com*")) return strProxy;548 if (shExpMatch(url, "http*://*.chromium.org*")) return strProxy;549 if (shExpMatch(url, "http*://*.chubun.com*")) return strProxy;550 if (shExpMatch(url, "http*://*.chuizi.net*")) return strProxy;551 if (shExpMatch(url, "http*://*.chuizi.net*")) return strProxy;552 if (shExpMatch(url, "http*://*.christiantimes.org.hk*")) return strProxy;553 if (shExpMatch(url, "http*://*.chrlawyers.hk*")) return strProxy;554 if (shExpMatch(url, "http*://*.allaboutalpha.com*")) return strProxy;555 if (shExpMatch(url, "http*://*.circlethebayfortibet.org*")) return strProxy;556 if (shExpMatch(url, "http*://*.citizenlab.org*")) return strProxy;557 if (shExpMatch(url, "http*://*.citizensradio.org*")) return strProxy;558 if (shExpMatch(url, "http*://*.city9x.com*")) return strProxy;559 if (shExpMatch(url, "http*://*.civicparty.hk*")) return strProxy;560 if (shExpMatch(url, "http*://*.civicparty.hk*")) return strProxy;561 if (shExpMatch(url, "http*://*.civilhrfront.org*")) return strProxy;562 if (shExpMatch(url, "http*://*.civilhrfront.org*")) return strProxy;563 if (shExpMatch(url, "http*://*.civilmedia.tw*")) return strProxy;564 if (shExpMatch(url, "http*://*.psiphon.civisec.org*")) return strProxy;565 if (shExpMatch(url, "http*://*.cjb.net*")) return strProxy;566 if (shExpMatch(url, "http*://*.ck101.com*")) return strProxy;567 if (shExpMatch(url, "http*://*.ck101.com*")) return strProxy;568 if (shExpMatch(url, "http*://*.classicalguitarblog.net*")) return strProxy;569 if (shExpMatch(url, "http*://*.clb.org.hk*")) return strProxy;570 if (shExpMatch(url, "http*://*.clipfish.de*")) return strProxy;571 if (shExpMatch(url, "http*://*.club1069.com*")) return strProxy;572 if (shExpMatch(url, "http*://*.cmoinc.org*")) return strProxy;573 if (shExpMatch(url, "http*://*.cms.gov*")) return strProxy;574 if (shExpMatch(url, "http*://*.cna.com.tw*")) return strProxy;575 if (shExpMatch(url, "http*://*.cnavista.com.tw*")) return strProxy;576 if (shExpMatch(url, "http*://*.cnd.org*")) return strProxy;577 if (shExpMatch(url, "http*://*.cnd.org*")) return strProxy;578 if (shExpMatch(url, "http*://*.wiki.cnitter.com*")) return strProxy;579 if (shExpMatch(url, "http*://*.cnn.com*")) return strProxy;580 if (shExpMatch(url, "http*://*.news.cnyes.com*")) return strProxy;581 if (shExpMatch(url, "http*://*.cochina.co*")) return strProxy;582 if (shExpMatch(url, "http*://*.cochina.org*")) return strProxy;583 if (shExpMatch(url, "http*://*.code1984.com*")) return strProxy;584 if (shExpMatch(url, "http*://*.codeshare.io*")) return strProxy;585 if (shExpMatch(url, "http*://*.codeskulptor.org*")) return strProxy;586 if (shExpMatch(url, "http*://*.tosh.comedycentral.com*")) return strProxy;587 if (shExpMatch(url, "http*://*.comefromchina.com*")) return strProxy;588 if (shExpMatch(url, "http*://*.comefromchina.com*")) return strProxy;589 if (shExpMatch(url, "http*://*.compileheart.com*")) return strProxy;590 if (shExpMatch(url, "http*://*.conoyo.com*")) return strProxy;591 if (shExpMatch(url, "http*://*.contactmagazine.net*")) return strProxy;592 if (shExpMatch(url, "http*://*.convio.net*")) return strProxy;593 if (shExpMatch(url, "http*://*.cool18.com*")) return strProxy;594 if (shExpMatch(url, "http*://*.coolaler.com*")) return strProxy;595 if (shExpMatch(url, "http*://*.coolaler.com*")) return strProxy;596 if (shExpMatch(url, "http*://*.coolder.com*")) return strProxy;597 if (shExpMatch(url, "http*://*.coolder.com*")) return strProxy;598 if (shExpMatch(url, "http*://*.coolloud.org.tw*")) return strProxy;599 if (shExpMatch(url, "http*://*.corumcollege.com*")) return strProxy;600 if (shExpMatch(url, "http*://*.couchdbwiki.com*")) return strProxy;601 if (shExpMatch(url, "http*://*.cotweet.com*")) return strProxy;602 if (shExpMatch(url, "http*://*.cpj.org*")) return strProxy;603 if (shExpMatch(url, "http*://*.cpj.org*")) return strProxy;604 if (shExpMatch(url, "http*://*.crackle.com*")) return strProxy;605 if (shExpMatch(url, "http*://*.crackle.com*")) return strProxy;606 if (shExpMatch(url, "http*://*.crchina.org*")) return strProxy;607 if (shExpMatch(url, "http*://*.crd-net.org*")) return strProxy;608 if (shExpMatch(url, "http*://*.creaders.net*")) return strProxy;609 if (shExpMatch(url, "http*://*.creaders.net*")) return strProxy;610 if (shExpMatch(url, "http*://*.crossthewall.net*")) return strProxy;611 if (shExpMatch(url, "http*://*.crossthewall.net*")) return strProxy;612 if (shExpMatch(url, "http*://*.csdparty.com*")) return strProxy;613 if (shExpMatch(url, "http*://*.csdparty.com*")) return strProxy;614 if (shExpMatch(url, "http*://*.csuchen.de*")) return strProxy;615 if (shExpMatch(url, "http*://*.ctfriend.net*")) return strProxy;616 if (shExpMatch(url, "http*://*.ctitv.com.tw*")) return strProxy;617 if (shExpMatch(url, "http*://*.cts.com.tw*")) return strProxy;618 if (shExpMatch(url, "http*://*.library.usc.cuhk.edu.hk*")) return strProxy;619 if (shExpMatch(url, "http*://*.mjlsh.usc.cuhk.edu.hk*")) return strProxy;620 if (shExpMatch(url, "http*://*.cuhkacs.org*")) return strProxy;621 if (shExpMatch(url, "http*://*.cuihua.org*")) return strProxy;622 if (shExpMatch(url, "http*://*.cuihua.org*")) return strProxy;623 if (shExpMatch(url, "http*://*.cuiweiping.net*")) return strProxy;624 if (shExpMatch(url, "http*://*.cuiweiping.net*")) return strProxy;625 if (shExpMatch(url, "http*://*.curvefish.com*")) return strProxy;626 if (shExpMatch(url, "http*://*.culture.tw*")) return strProxy;627 if (shExpMatch(url, "http*://*.culture.tw*")) return strProxy;628 if (shExpMatch(url, "http*://*.cw.com.tw*")) return strProxy;629 if (shExpMatch(url, "http*://*.forum.cyberctm.com*")) return strProxy;630 if (shExpMatch(url, "http*://*.cyberghostvpn.com*")) return strProxy;631 if (shExpMatch(url, "http*://*.cynscribe.com*")) return strProxy;632 if (shExpMatch(url, "http*://*.cytode.us*")) return strProxy;633 if (shExpMatch(url, "http*://*.ifan.cz.cc*")) return strProxy;634 if (shExpMatch(url, "http*://*.mike.cz.cc*")) return strProxy;635 if (shExpMatch(url, "http*://*.nic.cz.cc*")) return strProxy;636 if (shExpMatch(url, "http*://*.cl.d0z.net*")) return strProxy;637 if (shExpMatch(url, "http*://*.dabr.co.uk*")) return strProxy;638 if (shExpMatch(url, "http*://*.dabr.co.uk*")) return strProxy;639 if (shExpMatch(url, "http*://*.dabr.mobi*")) return strProxy;640 if (shExpMatch(url, "http*://*.dabr.mobi*")) return strProxy;641 if (shExpMatch(url, "http*://*.dabr.me*")) return strProxy;642 if (shExpMatch(url, "http*://*.dadazim.com*")) return strProxy;643 if (shExpMatch(url, "http*://*.dadazim.com*")) return strProxy;644 if (shExpMatch(url, "http*://*.dadi360.com*")) return strProxy;645 if (shExpMatch(url, "http*://*.dafagood.com*")) return strProxy;646 if (shExpMatch(url, "http*://*.dafahao.com*")) return strProxy;647 if (shExpMatch(url, "http*://*.dalailama.ru*")) return strProxy;648 if (shExpMatch(url, "http*://*.dailidaili.com*")) return strProxy;649 if (shExpMatch(url, "http*://*.dailidaili.com*")) return strProxy;650 if (shExpMatch(url, "http*://*.dailymotion.com*")) return strProxy;651 if (shExpMatch(url, "http*://*.dajiyuan.com*")) return strProxy;652 if (shExpMatch(url, "http*://*.dajiyuan.eu*")) return strProxy;653 if (shExpMatch(url, "http*://*.dalailama.com*")) return strProxy;654 if (shExpMatch(url, "http*://*.dalailamaworld.com*")) return strProxy;655 if (shExpMatch(url, "http*://*.dalailamaworld.com*")) return strProxy;656 if (shExpMatch(url, "http*://*.dalianmeng.org*")) return strProxy;657 if (shExpMatch(url, "http*://*.dalianmeng.org*")) return strProxy;658 if (shExpMatch(url, "http*://*.daliulian.org*")) return strProxy;659 if (shExpMatch(url, "http*://*.danke4china.net*")) return strProxy;660 if (shExpMatch(url, "http*://*.danke4china.net*")) return strProxy;661 if (shExpMatch(url, "http*://*.danwei.org*")) return strProxy;662 if (shExpMatch(url, "http*://*.daolan.net*")) return strProxy;663 if (shExpMatch(url, "http*://*.daxa.cn*")) return strProxy;664 if (shExpMatch(url, "http*://*.daxa.cn*")) return strProxy;665 if (shExpMatch(url, "http*://*.cn.dayabook.com*")) return strProxy;666 if (shExpMatch(url, "http*://*.daylife.com*")) return strProxy;667 if (shExpMatch(url, "http*://*.dcard.tw*")) return strProxy;668 if (shExpMatch(url, "http*://*.ddc.com.tw*")) return strProxy;669 if (shExpMatch(url, "http*://*.de-sci.org*")) return strProxy;670 if (shExpMatch(url, "http*://*.de-sci.org*")) return strProxy;671 if (shExpMatch(url, "http*://*.lists.debian.org*")) return strProxy;672 if (shExpMatch(url, "http*://*.packages.debian.org*")) return strProxy;673 if (shExpMatch(url, "http*://*.delcamp.net*")) return strProxy;674 if (shExpMatch(url, "http*://*.delicious.com*")) return strProxy;675 if (shExpMatch(url, "http*://*.democrats.org*")) return strProxy;676 if (shExpMatch(url, "http*://*.democrats.org*")) return strProxy;677 if (shExpMatch(url, "http*://*.desc.se*")) return strProxy;678 if (shExpMatch(url, "http*://*.destroy-china.jp*")) return strProxy;679 if (shExpMatch(url, "http*://*.deutsche-welle.de*")) return strProxy;680 if (shExpMatch(url, "http*://*.dev102.com*")) return strProxy;681 if (shExpMatch(url, "http*://*.deviantart.com*")) return strProxy;682 if (shExpMatch(url, "http*://*.deviantart.net*")) return strProxy;683 if (shExpMatch(url, "http*://*.devio.us*")) return strProxy;684 if (shExpMatch(url, "http*://*.devpn.com*")) return strProxy;685 if (shExpMatch(url, "http*://*.dfanning.com*")) return strProxy;686 if (shExpMatch(url, "http*://*.dfas.mil*")) return strProxy;687 if (shExpMatch(url, "http*://*.diaoyuislands.org*")) return strProxy;688 if (shExpMatch(url, "http*://*.diaoyuislands.org*")) return strProxy;689 if (shExpMatch(url, "http*://*.static.digg.com*")) return strProxy;690 if (shExpMatch(url, "http*://*.digiland.tw*")) return strProxy;691 if (shExpMatch(url, "http*://*.digitalnomadsproject.org*")) return strProxy;692 if (shExpMatch(url, "http*://*.diigo.com*")) return strProxy;693 if (shExpMatch(url, "http*://*.diigo.com*")) return strProxy;694 if (shExpMatch(url, "http*://*.furl.net*")) return strProxy;695 if (shExpMatch(url, "http*://*.dipity.com*")) return strProxy;696 if (shExpMatch(url, "http*://*.directcreative.com*")) return strProxy;697 if (shExpMatch(url, "http*://*.discogs.com*")) return strProxy;698 if (shExpMatch(url, "http*://*.discuss.com.hk*")) return strProxy;699 if (shExpMatch(url, "http*://*.discuss.com.hk*")) return strProxy;700 if (shExpMatch(url, "http*://*.disp.cc*")) return strProxy;701 if (shExpMatch(url, "http*://*.dit-inc.us*")) return strProxy;702 if (shExpMatch(url, "http*://*.dit-inc.us*")) return strProxy;703 if (shExpMatch(url, "http*://*.dizhidizhi.com*")) return strProxy;704 if (shExpMatch(url, "http*://*.djangosnippets.org*")) return strProxy;705 if (shExpMatch(url, "http*://*.dl-laby.jp*")) return strProxy;706 if (shExpMatch(url, "http*://*.dlsite.com*")) return strProxy;707 if (shExpMatch(url, "http*://*.dmcdn.net*")) return strProxy;708 if (shExpMatch(url, "http*://*.dnscrypt.org*")) return strProxy;709 if (shExpMatch(url, "http*://*.dns2go.com*")) return strProxy;710 if (shExpMatch(url, "http*://*.dnssec.net*")) return strProxy;711 if (shExpMatch(url, "http*://*.dojin.com*")) return strProxy;712 if (shExpMatch(url, "http*://*.dok-forum.net*")) return strProxy;713 if (shExpMatch(url, "http*://*.dolc.de*")) return strProxy;714 if (shExpMatch(url, "http*://*.dolf.org.hk*")) return strProxy;715 if (shExpMatch(url, "http*://*.dollf.com*")) return strProxy;716 if (shExpMatch(url, "http*://*.domain.club.tw*")) return strProxy;717 if (shExpMatch(url, "http*://*.dongde.com*")) return strProxy;718 if (shExpMatch(url, "http*://*.dongtaiwang.com*")) return strProxy;719 if (shExpMatch(url, "http*://*.dongtaiwang.com*")) return strProxy;720 if (shExpMatch(url, "http*://*.dongtaiwang.net*")) return strProxy;721 if (shExpMatch(url, "http*://*.dongtaiwang.net*")) return strProxy;722 if (shExpMatch(url, "http*://*.dongyangjing.com*")) return strProxy;723 if (shExpMatch(url, "http*://*.dontfilter.us*")) return strProxy;724 if (shExpMatch(url, "http*://*.dontmovetochina.com*")) return strProxy;725 if (shExpMatch(url, "http*://*.dotplane.com*")) return strProxy;726 if (shExpMatch(url, "http*://*.dotplane.com*")) return strProxy;727 if (shExpMatch(url, "http*://*.dotsub.com*")) return strProxy;728 if (shExpMatch(url, "http*://*.doubleaf.com*")) return strProxy;729 if (shExpMatch(url, "http*://*.dougscripts.com*")) return strProxy;730 if (shExpMatch(url, "http*://*.dowei.org*")) return strProxy;731 if (shExpMatch(url, "http*://*.doxygen.org*")) return strProxy;732 if (shExpMatch(url, "http*://*.dphk.org*")) return strProxy;733 if (shExpMatch(url, "http*://*.dpp.org.tw*")) return strProxy;734 if (shExpMatch(url, "http*://*.dpp.org.tw*")) return strProxy;735 if (shExpMatch(url, "http*://*.weigegebyc.dreamhosters.com*")) return strProxy;736 if (shExpMatch(url, "http*://*.drgan.net*")) return strProxy;737 if (shExpMatch(url, "http*://*.dropbox.com*")) return strProxy;738 if (shExpMatch(url, "http*://*.dropboxusercontent.com*")) return strProxy;739 if (shExpMatch(url, "http*://*.drsunacademy.com*")) return strProxy;740 if (shExpMatch(url, "http*://*.drtuber.com*")) return strProxy;741 if (shExpMatch(url, "http*://*.dscn.info*")) return strProxy;742 if (shExpMatch(url, "http*://*.dtiblog.com*")) return strProxy;743 if (shExpMatch(url, "http*://*.dtic.mil*")) return strProxy;744 if (shExpMatch(url, "http*://*.dtiserv2.com*")) return strProxy;745 if (shExpMatch(url, "http*://*.duckduckgo.com*")) return strProxy;746 if (shExpMatch(url, "http*://*.duckload.com*")) return strProxy;747 if (shExpMatch(url, "http*://*.duckmylife.com*")) return strProxy;748 if (shExpMatch(url, "http*://*.duihua.org*")) return strProxy;749 if (shExpMatch(url, "http*://*.duihua.org*")) return strProxy;750 if (shExpMatch(url, "http*://*.duihuahrjournal.org*")) return strProxy;751 if (shExpMatch(url, "http*://*.duoweitimes.com*")) return strProxy;752 if (shExpMatch(url, "http*://*.duoweitimes.com*")) return strProxy;753 if (shExpMatch(url, "http*://*.duping.net*")) return strProxy;754 if (shExpMatch(url, "http*://*.duplicati.com*")) return strProxy;755 if (shExpMatch(url, "http*://*.dupola.com*")) return strProxy;756 if (shExpMatch(url, "http*://*.dupola.net*")) return strProxy;757 if (shExpMatch(url, "http*://*.dvorak.org*")) return strProxy;758 if (shExpMatch(url, "http*://*.dw.com*")) return strProxy;759 if (shExpMatch(url, "http*://*.dw.com*")) return strProxy;760 if (shExpMatch(url, "http*://*.dw.de*")) return strProxy;761 if (shExpMatch(url, "http*://*.dw-world.com*")) return strProxy;762 if (shExpMatch(url, "http*://*.dw-world.com*")) return strProxy;763 if (shExpMatch(url, "http*://*.dw-world.de*")) return strProxy;764 if (shExpMatch(url, "http*://*.dw-world.de*")) return strProxy;765 if (shExpMatch(url, "http*://*.dwheeler.com*")) return strProxy;766 if (shExpMatch(url, "http*://*.dwnews.com*")) return strProxy;767 if (shExpMatch(url, "http*://*.dwnews.com*")) return strProxy;768 if (shExpMatch(url, "http*://*.dwnews.net*")) return strProxy;769 if (shExpMatch(url, "http*://*.dwnews.net*")) return strProxy;770 if (shExpMatch(url, "http*://*.xys.dxiong.com*")) return strProxy;771 if (shExpMatch(url, "http*://*.dy24k.info*")) return strProxy;772 if (shExpMatch(url, "http*://*.dynawebinc.com*")) return strProxy;773 if (shExpMatch(url, "http*://*.dyndns.org*")) return strProxy;774 if (shExpMatch(url, "http*://*.dzze.com*")) return strProxy;775 if (shExpMatch(url, "http*://*.e-gold.com*")) return strProxy;776 if (shExpMatch(url, "http*://*.e-gold.com*")) return strProxy;777 if (shExpMatch(url, "http*://*.e-hentai.org*")) return strProxy;778 if (shExpMatch(url, "http*://*.e-info.org.tw*")) return strProxy;779 if (shExpMatch(url, "http*://*.e-traderland.net*")) return strProxy;780 if (shExpMatch(url, "http*://*.e123.hk*")) return strProxy;781 if (shExpMatch(url, "http*://*.eastturkestan.com*")) return strProxy;782 if (shExpMatch(url, "http*://*.eastturkistan.net*")) return strProxy;783 if (shExpMatch(url, "http*://*.eastturkistan-gov.org*")) return strProxy;784 if (shExpMatch(url, "http*://*.eastturkistangovernmentinexile.us*")) return strProxy;785 if (shExpMatch(url, "http*://*.eastturkistangovernmentinexile.us*")) return strProxy;786 if (shExpMatch(url, "http*://*.ebookbrowse.com*")) return strProxy;787 if (shExpMatch(url, "http*://*.ebookee.com*")) return strProxy;788 if (shExpMatch(url, "http*://*.ecministry.net*")) return strProxy;789 if (shExpMatch(url, "http*://*.bbs.ecstart.com*")) return strProxy;790 if (shExpMatch(url, "http*://*.edgecastcdn.net*")) return strProxy;791 if (shExpMatch(url, "http*://*.twimg\.edgesuite\.net\*")) return strProxy;792 if (shExpMatch(url, "http*://*.edicypages.com*")) return strProxy;793 if (shExpMatch(url, "http*://*.edoors.com*")) return strProxy;794 if (shExpMatch(url, "http*://*.edubridge.com*")) return strProxy;795 if (shExpMatch(url, "http*://*.edubridge.com*")) return strProxy;796 if (shExpMatch(url, "http*://*.eevpn.com*")) return strProxy;797 if (shExpMatch(url, "http*://*.efcc.org.hk*")) return strProxy;798 if (shExpMatch(url, "http*://*.efmoe.com*")) return strProxy;799 if (shExpMatch(url, "http*://*.eic-av.com*")) return strProxy;800 if (shExpMatch(url, "http*://*.electionsmeter.com*")) return strProxy;801 if (shExpMatch(url, "http*://*.elgoog.im*")) return strProxy;802 if (shExpMatch(url, "http*://*.elpais.com*")) return strProxy;803 if (shExpMatch(url, "http*://*.eltondisney.com*")) return strProxy;804 if (shExpMatch(url, "http*://*.emacsblog.org*")) return strProxy;805 if (shExpMatch(url, "http*://*.emory.edu*")) return strProxy;806 if (shExpMatch(url, "http*://*.emule-ed2k.com*")) return strProxy;807 if (shExpMatch(url, "http*://*.emule-ed2k.com*")) return strProxy;808 if (shExpMatch(url, "http*://*.emuparadise.me*")) return strProxy;809 if (shExpMatch(url, "http*://*.enewstree.com*")) return strProxy;810 if (shExpMatch(url, "http*://*.chinese.engadget.com*")) return strProxy;811 if (shExpMatch(url, "http*://*.englishfromengland.co.uk*")) return strProxy;812 if (shExpMatch(url, "http*://*.entermap.com*")) return strProxy;813 if (shExpMatch(url, "http*://*.epochtimes-bg.com*")) return strProxy;814 if (shExpMatch(url, "http*://*.epochtimes-bg.com*")) return strProxy;815 if (shExpMatch(url, "http*://*.epochtimes-romania.com*")) return strProxy;816 if (shExpMatch(url, "http*://*.epochtimes-romania.com*")) return strProxy;817 if (shExpMatch(url, "http*://*.epochtimes.co.il*")) return strProxy;818 if (shExpMatch(url, "http*://*.epochtimes.co.il*")) return strProxy;819 if (shExpMatch(url, "http*://*.epochtimes.co.kr*")) return strProxy;820 if (shExpMatch(url, "http*://*.epochtimes.co.kr*")) return strProxy;821 if (shExpMatch(url, "http*://*.epochtimes.com*")) return strProxy;822 if (shExpMatch(url, "http*://*.epochtimes.com*")) return strProxy;823 if (shExpMatch(url, "http*://*.epochtimes.de*")) return strProxy;824 if (shExpMatch(url, "http*://*.epochtimes.fr*")) return strProxy;825 if (shExpMatch(url, "http*://*.epochtimes.ie*")) return strProxy;826 if (shExpMatch(url, "http*://*.epochtimes.jp*")) return strProxy;827 if (shExpMatch(url, "http*://*.epochtimes.ru*")) return strProxy;828 if (shExpMatch(url, "http*://*.epochtimes.se*")) return strProxy;829 if (shExpMatch(url, "http*://*.epochtimestr.com*")) return strProxy;830 if (shExpMatch(url, "http*://*.epochweekly.com*")) return strProxy;831 if (shExpMatch(url, "http*://*.erabaru.net*")) return strProxy;832 if (shExpMatch(url, "http*://*.erepublik.com*")) return strProxy;833 if (shExpMatch(url, "http*://*.erktv.com*")) return strProxy;834 if (shExpMatch(url, "http*://*.ernestmandel.org*")) return strProxy;835 if (shExpMatch(url, "http*://*.erights.net*")) return strProxy;836 if (shExpMatch(url, "http*://*.etaa.org.au*")) return strProxy;837 if (shExpMatch(url, "http*://*.etaiwannews.com*")) return strProxy;838 if (shExpMatch(url, "http*://*.etizer.org*")) return strProxy;839 if (shExpMatch(url, "http*://*.ettoday.net*")) return strProxy;840 if (shExpMatch(url, "http*://*.eulam.com*")) return strProxy;841 if (shExpMatch(url, "http*://*.eventful.com*")) return strProxy;842 if (shExpMatch(url, "http*://*.exblog.jp*")) return strProxy;843 if (shExpMatch(url, "http*://*.blog.exblog.co.jp*")) return strProxy;844 if (shExpMatch(url, "http*://*.blog.excite.co.jp*")) return strProxy;845 if (shExpMatch(url, "http*://*.expatshield.com*")) return strProxy;846 if (shExpMatch(url, "http*://*.exploader.net*")) return strProxy;847 if (shExpMatch(url, "http*://*.extremetube.com*")) return strProxy;848 if (shExpMatch(url, "http*://*.eyevio.jp*")) return strProxy;849 if (shExpMatch(url, "http*://*.eyevio.jp*")) return strProxy;850 if (shExpMatch(url, "http*://*.eyny.com*")) return strProxy;851 if (shExpMatch(url, "http*://*.ezpc.tk*")) return strProxy;852 if (shExpMatch(url, "http*://*.ezpeer.com*")) return strProxy;853 if (shExpMatch(url, "http*://*.facebook.com*")) return strProxy;854 if (shExpMatch(url, "http*://*.facebook.com*")) return strProxy;855 if (shExpMatch(url, "http*://*.connect.facebook.net*")) return strProxy;856 if (shExpMatch(url, "http*://*.facebookquotes4u.com*")) return strProxy;857 if (shExpMatch(url, "http*://*.facesofnyfw.com*")) return strProxy;858 if (shExpMatch(url, "http*://*.faiththedog.info*")) return strProxy;859 if (shExpMatch(url, "http*://*.fakku.net*")) return strProxy;860 if (shExpMatch(url, "http*://*.falunart.org*")) return strProxy;861 if (shExpMatch(url, "http*://*.falunasia.info*")) return strProxy;862 if (shExpMatch(url, "http*://*.falundafa.org*")) return strProxy;863 if (shExpMatch(url, "http*://*.falundafamuseum.org*")) return strProxy;864 if (shExpMatch(url, "http*://*.falunhr.org*")) return strProxy;865 if (shExpMatch(url, "http*://*.fanglizhi.info*")) return strProxy;866 if (shExpMatch(url, "http*://*.fangong.org*")) return strProxy;867 if (shExpMatch(url, "http*://*.fangongheike.com*")) return strProxy;868 if (shExpMatch(url, "http*://*.fanqianghou.com*")) return strProxy;869 if (shExpMatch(url, "http*://*.fapdu.com*")) return strProxy;870 if (shExpMatch(url, "http*://*.fawanghuihui.org*")) return strProxy;871 if (shExpMatch(url, "http*://*.fbcdn.net*")) return strProxy;872 if (shExpMatch(url, "http*://*.fanqiangyakexi.net*")) return strProxy;873 if (shExpMatch(url, "http*://*.fail.hk*")) return strProxy;874 if (shExpMatch(url, "http*://*.famunion.com*")) return strProxy;875 if (shExpMatch(url, "http*://*.fan-qiang.com*")) return strProxy;876 if (shExpMatch(url, "http*://*.fangbinxing.com*")) return strProxy;877 if (shExpMatch(url, "http*://*.fangbinxing.com*")) return strProxy;878 if (shExpMatch(url, "http*://*.fangeming.com*")) return strProxy;879 if (shExpMatch(url, "http*://*.fanswong.com*")) return strProxy;880 if (shExpMatch(url, "http*://*.fanyue.info*")) return strProxy;881 if (shExpMatch(url, "http*://*.farwestchina.com*")) return strProxy;882 if (shExpMatch(url, "http*://*.en.favotter.net*")) return strProxy;883 if (shExpMatch(url, "http*://*.faststone.org*")) return strProxy;884 if (shExpMatch(url, "http*://*.favstar.fm*")) return strProxy;885 if (shExpMatch(url, "http*://*.favstar.fm*")) return strProxy;886 if (shExpMatch(url, "http*://*.faydao.com*")) return strProxy;887 if (shExpMatch(url, "http*://*.fb.com*")) return strProxy;888 if (shExpMatch(url, "http*://*.fb.me*")) return strProxy;889 if (shExpMatch(url, "http*://*.fb.me*")) return strProxy;890 if (shExpMatch(url, "http*://*.fbsbx.com*")) return strProxy;891 if (shExpMatch(url, "http*://*.fc2.com*")) return strProxy;892 if (shExpMatch(url, "http*://*.fc2china.com*")) return strProxy;893 if (shExpMatch(url, "http*://*.fc2blog.net*")) return strProxy;894 if (shExpMatch(url, "http*://*.uygur.fc2web.com*")) return strProxy;895 if (shExpMatch(url, "http*://*.video.fdbox.com*")) return strProxy;896 if (shExpMatch(url, "http*://*.fdc89.jp*")) return strProxy;897 if (shExpMatch(url, "http*://*.fourface.nodesnoop.com*")) return strProxy;898 if (shExpMatch(url, "http*://*.feedburner.com*")) return strProxy;899 if (shExpMatch(url, "http*://*.feedzshare.com*")) return strProxy;900 if (shExpMatch(url, "http*://*.feelssh.com*")) return strProxy;901 if (shExpMatch(url, "http*://*.feer.com*")) return strProxy;902 if (shExpMatch(url, "http*://*.feministteacher.com*")) return strProxy;903 if (shExpMatch(url, "http*://*.fengzhenghu.com*")) return strProxy;904 if (shExpMatch(url, "http*://*.fengzhenghu.com*")) return strProxy;905 if (shExpMatch(url, "http*://*.fflick.com*")) return strProxy;906 if (shExpMatch(url, "http*://*.fgmtv.net*")) return strProxy;907 if (shExpMatch(url, "http*://*.fgmtv.org*")) return strProxy;908 if (shExpMatch(url, "http*://*.files2me.com*")) return strProxy;909 if (shExpMatch(url, "http*://*.files2me.com*")) return strProxy;910 if (shExpMatch(url, "http*://*.fileserve.com*")) return strProxy;911 if (shExpMatch(url, "http*://*.fillthesquare.org*")) return strProxy;912 if (shExpMatch(url, "http*://*.finalion.jp*")) return strProxy;913 if (shExpMatch(url, "http*://*.findbook.tw*")) return strProxy;914 if (shExpMatch(url, "http*://*.fingerdaily.com*")) return strProxy;915 if (shExpMatch(url, "http*://*.finler.net*")) return strProxy;916 if (shExpMatch(url, "http*://*.fireofliberty.org*")) return strProxy;917 if (shExpMatch(url, "http*://*.fireofliberty.org*")) return strProxy;918 if (shExpMatch(url, "http*://*.falsefire.com*")) return strProxy;919 if (shExpMatch(url, "http*://*.falsefire.com*")) return strProxy;920 if (shExpMatch(url, "http*://*.fleshbot.com*")) return strProxy;921 if (shExpMatch(url, "http*://*.flickr.com*")) return strProxy;922 if (shExpMatch(url, "http*://*.staticflickr.com*")) return strProxy;923 if (shExpMatch(url, "http*://*.flickrhivemind.net*")) return strProxy;924 if (shExpMatch(url, "http*://*.yuming.flnet.org*")) return strProxy;925 if (shExpMatch(url, "http*://*.cn.fmnnow.com*")) return strProxy;926 if (shExpMatch(url, "http*://*.blog.foolsmountain.com*")) return strProxy;927 if (shExpMatch(url, "http*://*.forum4hk.com*")) return strProxy;928 if (shExpMatch(url, "http*://*.pioneer-worker.forums-free.com*")) return strProxy;929 if (shExpMatch(url, "http*://*.4sq.com*")) return strProxy;930 if (shExpMatch(url, "http*://*.fotop.net*")) return strProxy;931 if (shExpMatch(url, "http*://*.video.foxbusiness.com*")) return strProxy;932 if (shExpMatch(url, "http*://*.fringenetwork.com*")) return strProxy;933 if (shExpMatch(url, "http*://*.flecheinthepeche.fr*")) return strProxy;934 if (shExpMatch(url, "http*://*.focustaiwan.tw*")) return strProxy;935 if (shExpMatch(url, "http*://*.focusvpn.com*")) return strProxy;936 if (shExpMatch(url, "http*://*.fofg.org*")) return strProxy;937 if (shExpMatch(url, "http*://*.fooooo.com*")) return strProxy;938 if (shExpMatch(url, "http*://*.fooooo.com*")) return strProxy;939 if (shExpMatch(url, "http*://*.footwiball.com*")) return strProxy;940 if (shExpMatch(url, "http*://*.fourthinternational.org*")) return strProxy;941 if (shExpMatch(url, "http*://*.foxdie.us*")) return strProxy;942 if (shExpMatch(url, "http*://*.foxsub.com*")) return strProxy;943 if (shExpMatch(url, "http*://*.foxtang.com*")) return strProxy;944 if (shExpMatch(url, "http*://*.fqrouter.com*")) return strProxy;945 if (shExpMatch(url, "http*://*.franklc.com*")) return strProxy;946 if (shExpMatch(url, "http*://*.freakshare.com*")) return strProxy;947 if (shExpMatch(url, "http*://*.freakshare.com*")) return strProxy;948 if (shExpMatch(url, "http*://*.free4u.com.ar*")) return strProxy;949 if (shExpMatch(url, "http*://*.free-gate.org*")) return strProxy;950 if (shExpMatch(url, "http*://*.free.fr*")) return strProxy;951 if (shExpMatch(url, "http*://*.allonlinux.free.fr*")) return strProxy;952 if (shExpMatch(url, "http*://*.dimitrik.free.fr*")) return strProxy;953 if (shExpMatch(url, "http*://*.kineox.free.fr*")) return strProxy;954 if (shExpMatch(url, "http*://*.puttycm.free.fr*")) return strProxy;955 if (shExpMatch(url, "http*://*.freealim.com*")) return strProxy;956 if (shExpMatch(url, "http*://*.whitebear.freebearblog.org*")) return strProxy;957 if (shExpMatch(url, "http*://*.freechal.com*")) return strProxy;958 if (shExpMatch(url, "http*://*.freedomhouse.org*")) return strProxy;959 if (shExpMatch(url, "http*://*.freedomhouse.org*")) return strProxy;960 if (shExpMatch(url, "http*://*.freegao.com*")) return strProxy;961 if (shExpMatch(url, "http*://*.freegao.com*")) return strProxy;962 if (shExpMatch(url, "http*://*.free-hada-now.org*")) return strProxy;963 if (shExpMatch(url, "http*://*.freelotto.com*")) return strProxy;964 if (shExpMatch(url, "http*://*.freelotto.com*")) return strProxy;965 if (shExpMatch(url, "http*://*.freeman2.com*")) return strProxy;966 if (shExpMatch(url, "http*://*.freeopenvpn.com*")) return strProxy;967 if (shExpMatch(url, "http*://*.freemoren.com*")) return strProxy;968 if (shExpMatch(url, "http*://*.freemorenews.com*")) return strProxy;969 if (shExpMatch(url, "http*://*.freenet-china.org*")) return strProxy;970 if (shExpMatch(url, "http*://*.freenewscn.com*")) return strProxy;971 if (shExpMatch(url, "http*://*.freeoz.org*")) return strProxy;972 if (shExpMatch(url, "http*://*.freeoz.org*")) return strProxy;973 if (shExpMatch(url, "http*://*.bulbous.freeserve.co.uk*")) return strProxy;974 if (shExpMatch(url, "http*://*.freessh.us*")) return strProxy;975 if (shExpMatch(url, "http*://*.free4u.com.ar*")) return strProxy;976 if (shExpMatch(url, "http*://*.free-ssh.com*")) return strProxy;977 if (shExpMatch(url, "http*://*.free-ssh.com*")) return strProxy;978 if (shExpMatch(url, "http*://*.freeforums.org*")) return strProxy;979 if (shExpMatch(url, "http*://*.freenetproject.org*")) return strProxy;980 if (shExpMatch(url, "http*://*.freeoz.org*")) return strProxy;981 if (shExpMatch(url, "http*://*.freetibet.net*")) return strProxy;982 if (shExpMatch(url, "http*://*.freetibet.org*")) return strProxy;983 if (shExpMatch(url, "http*://*.freetibetanheroes.org*")) return strProxy;984 if (shExpMatch(url, "http*://*.freewallpaper4.me*")) return strProxy;985 if (shExpMatch(url, "http*://*.freewebs.com*")) return strProxy;986 if (shExpMatch(url, "http*://*.freeweibo.com*")) return strProxy;987 if (shExpMatch(url, "http*://*.freexinwen.com*")) return strProxy;988 if (shExpMatch(url, "http*://*.freeyoutubeproxy.net*")) return strProxy;989 if (shExpMatch(url, "http*://*.freeyoutubeproxy.net*")) return strProxy;990 if (shExpMatch(url, "http*://*.friendfeed.com*")) return strProxy;991 if (shExpMatch(url, "http*://*.friendfeed-media.com*")) return strProxy;992 if (shExpMatch(url, "http*://*.ff.im*")) return strProxy;993 if (shExpMatch(url, "http*://*.zensur.freerk.com*")) return strProxy;994 if (shExpMatch(url, "http*://*.freevpn.nl*")) return strProxy;995 if (shExpMatch(url, "http*://*.adult.friendfinder.com*")) return strProxy;996 if (shExpMatch(url, "http*://*.fring.com*")) return strProxy;997 if (shExpMatch(url, "http*://*.fring.com*")) return strProxy;998 if (shExpMatch(url, "http*://*.frommel.net*")) return strProxy;999 if (shExpMatch(url, "http*://*.frontlinedefenders.org*")) return strProxy;1000 if (shExpMatch(url, "http*://*.fscked.org*")) return strProxy;1001 if (shExpMatch(url, "http*://*.fsurf.com*")) return strProxy;1002 if (shExpMatch(url, "http*://*.ftchinese.com*")) return strProxy;1003 if (shExpMatch(url, "http*://*.ftchinese.com*")) return strProxy;1004 if (shExpMatch(url, "http*://*.ftchinese.com*")) return strProxy;1005 if (shExpMatch(url, "http*://*.fuckcnnic.net*")) return strProxy;1006 if (shExpMatch(url, "http*://*.fuckcnnic.net*")) return strProxy;1007 if (shExpMatch(url, "http*://*.fuckgfw.org*")) return strProxy;1008 if (shExpMatch(url, "http*://*.fulue.com*")) return strProxy;1009 if (shExpMatch(url, "http*://*.funf.tw*")) return strProxy;1010 if (shExpMatch(url, "http*://*.funp.com*")) return strProxy;1011 if (shExpMatch(url, "http*://*.furinkan.com*")) return strProxy;1012 if (shExpMatch(url, "http*://*.futurechinaforum.org*")) return strProxy;1013 if (shExpMatch(url, "http*://*.futuremessage.org*")) return strProxy;1014 if (shExpMatch(url, "http*://*.fuyin.net*")) return strProxy;1015 if (shExpMatch(url, "http*://*.fw.cm*")) return strProxy;1016 if (shExpMatch(url, "http*://*.fzh999.com*")) return strProxy;1017 if (shExpMatch(url, "http*://*.fzh999.net*")) return strProxy;1018 if (shExpMatch(url, "http*://*.gabocorp.com*")) return strProxy;1019 if (shExpMatch(url, "http*://*.gaeproxy.com*")) return strProxy;1020 if (shExpMatch(url, "http*://*.galenwu.com*")) return strProxy;1021 if (shExpMatch(url, "http*://*.game735.com*")) return strProxy;1022 if (shExpMatch(url, "http*://*.gamebase.com.tw*")) return strProxy;1023 if (shExpMatch(url, "http*://*.gamer.com.tw*")) return strProxy;1024 if (shExpMatch(url, "http*://*.gamer.com.tw*")) return strProxy;1025 if (shExpMatch(url, "http*://*.gamez.com.tw*")) return strProxy;1026 if (shExpMatch(url, "http*://*.gamez.com.tw*")) return strProxy;1027 if (shExpMatch(url, "http*://*.gaoming.net*")) return strProxy;1028 if (shExpMatch(url, "http*://*.gaoming.net*")) return strProxy;1029 if (shExpMatch(url, "http*://*.ganges.com*")) return strProxy;1030 if (shExpMatch(url, "http*://*.gaopi.net*")) return strProxy;1031 if (shExpMatch(url, "http*://*.gaopi.net*")) return strProxy;1032 if (shExpMatch(url, "http*://*.gaozhisheng.org*")) return strProxy;1033 if (shExpMatch(url, "http*://*.gaozhisheng.net*")) return strProxy;1034 if (shExpMatch(url, "http*://*.gardennetworks.com*")) return strProxy;1035 if (shExpMatch(url, "http*://*.gardennetworks.org*")) return strProxy;1036 if (shExpMatch(url, "http*://*.72.52.81.22*")) return strProxy;1037 if (shExpMatch(url, "http*://*.gartlive.com*")) return strProxy;1038 if (shExpMatch(url, "http*://*.gather.com*")) return strProxy;1039 if (shExpMatch(url, "http*://*.gaymap.cc*")) return strProxy;1040 if (shExpMatch(url, "http*://*.gazotube.com*")) return strProxy;1041 if (shExpMatch(url, "http*://*.gazotube.com*")) return strProxy;1042 if (shExpMatch(url, "http*://*.gcc.org.hk*")) return strProxy;1043 if (shExpMatch(url, "http*://*.gclooney.com*")) return strProxy;1044 if (shExpMatch(url, "http*://*.gcpnews.com*")) return strProxy;1045 if (shExpMatch(url, "http*://*.gdbt.net*")) return strProxy;1046 if (shExpMatch(url, "http*://*.gdzf.org*")) return strProxy;1047 if (shExpMatch(url, "http*://*.geek-art.net*")) return strProxy;1048 if (shExpMatch(url, "http*://*.geekerhome.com*")) return strProxy;1049 if (shExpMatch(url, "http*://*.geekmanuals.com*")) return strProxy;1050 if (shExpMatch(url, "http*://*.genuitec.com*")) return strProxy;1051 if (shExpMatch(url, "http*://*.geocities.co.jp*")) return strProxy;1052 if (shExpMatch(url, "http*://*.geocities.com*")) return strProxy;1053 if (shExpMatch(url, "http*://*.hk.geocities.com*")) return strProxy;1054 if (shExpMatch(url, "http*://*.geocities.jp*")) return strProxy;1055 if (shExpMatch(url, "http*://*.geohot.com*")) return strProxy;1056 if (shExpMatch(url, "http*://*.geometrictools.com*")) return strProxy;1057 if (shExpMatch(url, "http*://*.get-digital-help.com*")) return strProxy;1058 if (shExpMatch(url, "http*://*.getchu.com*")) return strProxy;1059 if (shExpMatch(url, "http*://*.getfoxyproxy.org*")) return strProxy;1060 if (shExpMatch(url, "http*://*.getfreedur.com*")) return strProxy;1061 if (shExpMatch(url, "http*://*.getgom.com*")) return strProxy;1062 if (shExpMatch(url, "http*://*.getlantern.org*")) return strProxy;1063 if (shExpMatch(url, "http*://*.getlantern.org*")) return strProxy;1064 if (shExpMatch(url, "http*://*.getjetso.com*")) return strProxy;1065 if (shExpMatch(url, "http*://*.getiton.com*")) return strProxy;1066 if (shExpMatch(url, "http*://*.getsocialscope.com*")) return strProxy;1067 if (shExpMatch(url, "http*://*.gfw.org.ua*")) return strProxy;1068 if (shExpMatch(url, "http*://*.ggssl.com*")) return strProxy;1069 if (shExpMatch(url, "http*://*.ggssl.com*")) return strProxy;1070 if (shExpMatch(url, "http*://*.ghost.org*")) return strProxy;1071 if (shExpMatch(url, "http*://*.ghut.org*")) return strProxy;1072 if (shExpMatch(url, "http*://*.giga-web.jp*")) return strProxy;1073 if (shExpMatch(url, "http*://*.tw.gigacircle.com*")) return strProxy;1074 if (shExpMatch(url, "http*://*.cn.giganews.com*")) return strProxy;1075 if (shExpMatch(url, "http*://*.gigporno.ru*")) return strProxy;1076 if (shExpMatch(url, "http*://*.gimpshop.com*")) return strProxy;1077 if (shExpMatch(url, "http*://*.girlbanker.com*")) return strProxy;1078 if (shExpMatch(url, "http*://*.softwaredownload.gitbooks.io*")) return strProxy;1079 if (shExpMatch(url, "http*://*.gist.github.com*")) return strProxy;1080 if (shExpMatch(url, "http*://*.cthlo.github.io*")) return strProxy;1081 if (shExpMatch(url, "http*://*.glennhilton.com*")) return strProxy;1082 if (shExpMatch(url, "http*://*.globaljihad.net*")) return strProxy;1083 if (shExpMatch(url, "http*://*.globalmuseumoncommunism.org*")) return strProxy;1084 if (shExpMatch(url, "http*://*.globalrescue.net*")) return strProxy;1085 if (shExpMatch(url, "http*://*.globalvoicesonline.org*")) return strProxy;1086 if (shExpMatch(url, "http*://*.globalvoicesonline.org*")) return strProxy;1087 if (shExpMatch(url, "http*://*.gmbd.cn*")) return strProxy;1088 if (shExpMatch(url, "http*://*.gmhz.org*")) return strProxy;1089 if (shExpMatch(url, "http*://*.gmiddle.com*")) return strProxy;1090 if (shExpMatch(url, "http*://*.gmiddle.net*")) return strProxy;1091 if (shExpMatch(url, "http*://*.gnci.org.hk*")) return strProxy;1092 if (shExpMatch(url, "http*://*.goagent.biz*")) return strProxy;1093 if (shExpMatch(url, "http*://*.goagentplus.com*")) return strProxy;1094 if (shExpMatch(url, "http*://*.godfootsteps.org*")) return strProxy;1095 if (shExpMatch(url, "http*://*.godfootsteps.org*")) return strProxy;1096 if (shExpMatch(url, "http*://*.gokbayrak.com*")) return strProxy;1097 if (shExpMatch(url, "http*://*.goldbetsports.com*")) return strProxy;1098 if (shExpMatch(url, "http*://*.goldenmelody.com.tw*")) return strProxy;1099 if (shExpMatch(url, "http*://*.goldwave.com*")) return strProxy;1100 if (shExpMatch(url, "http*://*.gongmeng.info*")) return strProxy;1101 if (shExpMatch(url, "http*://*.gongm.in*")) return strProxy;1102 if (shExpMatch(url, "http*://*.gongminliliang.com*")) return strProxy;1103 if (shExpMatch(url, "http*://*.gongwt.com*")) return strProxy;1104 if (shExpMatch(url, "http*://*.gongwt.com*")) return strProxy;1105 if (shExpMatch(url, "http*://*.goodreads.com*")) return strProxy;1106 if (shExpMatch(url, "http*://*.goodreads.com*")) return strProxy;1107 if (shExpMatch(url, "http*://*.goodreaders.com*")) return strProxy;1108 if (shExpMatch(url, "http*://*.goodreaders.com*")) return strProxy;1109 if (shExpMatch(url, "http*://*.goofind.com*")) return strProxy;1110 if (shExpMatch(url, "http*://*.googlesile.com*")) return strProxy;1111 if (shExpMatch(url, "http*://*.gopetition.com*")) return strProxy;1112 if (shExpMatch(url, "http*://*.gopetition.com*")) return strProxy;1113 if (shExpMatch(url, "http*://*.gotw.ca*")) return strProxy;1114 if (shExpMatch(url, "http*://*.grandtrial.org*")) return strProxy;1115 if (shExpMatch(url, "http*://*.graphis.ne.jp*")) return strProxy;1116 if (shExpMatch(url, "http*://*.gravatar.com*")) return strProxy;1117 if (shExpMatch(url, "http*://*.greatfirewall.biz*")) return strProxy;1118 if (shExpMatch(url, "http*://*.greatfirewallofchina.net*")) return strProxy;1119 if (shExpMatch(url, "http*://*.greatfirewallofchina.org*")) return strProxy;1120 if (shExpMatch(url, "http*://*.greatfirewallofchina.org*")) return strProxy;1121 if (shExpMatch(url, "http*://*.greenparty.org.tw*")) return strProxy;1122 if (shExpMatch(url, "http*://*.greenpeace.org*")) return strProxy;1123 if (shExpMatch(url, "http*://*.great-firewall.com*")) return strProxy;1124 if (shExpMatch(url, "http*://*.great-roc.org*")) return strProxy;1125 if (shExpMatch(url, "http*://*.greatroc.org*")) return strProxy;1126 if (shExpMatch(url, "http*://*.greatzhonghua.org*")) return strProxy;1127 if (shExpMatch(url, "http*://*.greenpeace.com.tw*")) return strProxy;1128 if (shExpMatch(url, "http*://*.greenvpn.net*")) return strProxy;1129 if (shExpMatch(url, "http*://*.greenvpn.net*")) return strProxy;1130 if (shExpMatch(url, "http*://*.gs-discuss.com*")) return strProxy;1131 if (shExpMatch(url, "http*://*.gtricks.com*")) return strProxy;1132 if (shExpMatch(url, "http*://*.guancha.org*")) return strProxy;1133 if (shExpMatch(url, "http*://*.gun-world.net*")) return strProxy;1134 if (shExpMatch(url, "http*://*.gutteruncensored.com*")) return strProxy;1135 if (shExpMatch(url, "http*://*.gvm.com.tw*")) return strProxy;1136 if (shExpMatch(url, "http*://*.gzm.tv*")) return strProxy;1137 if (shExpMatch(url, "http*://*.gzone-anime.info*")) return strProxy;1138 if (shExpMatch(url, "http*://*.agoogleaday.com*")) return strProxy;1139 if (shExpMatch(url, "http*://*.chromeexperiments.com*")) return strProxy;1140 if (shExpMatch(url, "http*://*.chromercise.com*")) return strProxy;1141 if (shExpMatch(url, "http*://*.data-vocabulary.org*")) return strProxy;1142 if (shExpMatch(url, "http*://*.g.co*")) return strProxy;1143 if (shExpMatch(url, "http*://*.ggpht.com*")) return strProxy;1144 if (shExpMatch(url, "http*://*.gmail.com*")) return strProxy;1145 if (shExpMatch(url, "http*://*.gmodules.com*")) return strProxy;1146 if (shExpMatch(url, "http*://*.goo.gl*")) return strProxy;1147 if (shExpMatch(url, "http*://*.googleapis.com*")) return strProxy;1148 if (shExpMatch(url, "http*://*.googleartproject.com*")) return strProxy;1149 if (shExpMatch(url, "http*://*.googlecode.com*")) return strProxy;1150 if (shExpMatch(url, "http*://*.googlecommerce.com*")) return strProxy;1151 if (shExpMatch(url, "http*://*.googledomains.com*")) return strProxy;1152 if (shExpMatch(url, "http*://*.googleearth.com*")) return strProxy;1153 if (shExpMatch(url, "http*://*.googledrive.com*")) return strProxy;1154 if (shExpMatch(url, "http*://*.googlegroups.com*")) return strProxy;1155 if (shExpMatch(url, "http*://*.googlehosted.com*")) return strProxy;1156 if (shExpMatch(url, "http*://*.googlelabs.com*")) return strProxy;1157 if (shExpMatch(url, "http*://*.googlemail.com*")) return strProxy;1158 if (shExpMatch(url, "http*://*.googleplus.com*")) return strProxy;1159 if (shExpMatch(url, "http*://*.googlesource.com*")) return strProxy;1160 if (shExpMatch(url, "http*://*.googleusercontent.com*")) return strProxy;1161 if (shExpMatch(url, "http*://*.googlevideo.com*")) return strProxy;1162 if (shExpMatch(url, "http*://*.proxy.googlezip.net*")) return strProxy;1163 if (shExpMatch(url, "http*://*.groups.google.cn*")) return strProxy;1164 if (shExpMatch(url, "http*://*.gvt0.com*")) return strProxy;1165 if (shExpMatch(url, "http*://*.gvt1.com*")) return strProxy;1166 if (shExpMatch(url, "http*://*.html5rocks.com*")) return strProxy;1167 if (shExpMatch(url, "http*://*.panoramio.com*")) return strProxy;1168 if (shExpMatch(url, "http*://*.recaptcha.net*")) return strProxy;1169 if (shExpMatch(url, "http*://*.sipml5.org*")) return strProxy;1170 if (shExpMatch(url, "http*://*.appspot.com*")) return strProxy;1171 if (shExpMatch(url, "http*://*.appspot.com*")) return strProxy;1172 if (shExpMatch(url, "http*://*.chinaaid.net*")) return strProxy;1173 if (shExpMatch(url, "http*://*.echofon.com*")) return strProxy;1174 if (shExpMatch(url, "http*://*.golang.org*")) return strProxy;1175 if (shExpMatch(url, "http*://*.greasespot.net*")) return strProxy;1176 if (shExpMatch(url, "http*://*.klip.me*")) return strProxy;1177 if (shExpMatch(url, "http*://*.ub0.cc*")) return strProxy;1178 if (shExpMatch(url, "http*://*.wozy.in*")) return strProxy;1179 if (shExpMatch(url, "http*://*.anti.anti.cnn.googlepages.com*")) return strProxy;1180 if (shExpMatch(url, "http*://*.freegateget.googlepages.com*")) return strProxy;1181 if (shExpMatch(url, "http*://*.myboooks.googlepages.com*")) return strProxy;1182 if (shExpMatch(url, "http*://*.googlevideo.com*")) return strProxy;1183 if (shExpMatch(url, "http*://*.gospelherald.com*")) return strProxy;1184 if (shExpMatch(url, "http*://*.gospelherald.com*")) return strProxy;1185 if (shExpMatch(url, "http*://*.hk.gradconnection.com*")) return strProxy;1186 if (shExpMatch(url, "http*://*.grangorz.org*")) return strProxy;1187 if (shExpMatch(url, "http*://*.graylog2.org*")) return strProxy;1188 if (shExpMatch(url, "http*://*.greatfire.org*")) return strProxy;1189 if (shExpMatch(url, "http*://*.greatfire.org*")) return strProxy;1190 if (shExpMatch(url, "http*://*.greatfirewallofchina.org*")) return strProxy;1191 if (shExpMatch(url, "http*://*.greatroc.tw*")) return strProxy;1192 if (shExpMatch(url, "http*://*.gstatic.com*")) return strProxy;1193 if (shExpMatch(url, "http*://*.guishan.org*")) return strProxy;1194 if (shExpMatch(url, "http*://*.guishan.org*")) return strProxy;1195 if (shExpMatch(url, "http*://*.gunsamerica.com*")) return strProxy;1196 if (shExpMatch(url, "http*://*.gvlib.com*")) return strProxy;1197 if (shExpMatch(url, "http*://*.gyalwarinpoche.com*")) return strProxy;1198 if (shExpMatch(url, "http*://*.h-china.org*")) return strProxy;1199 if (shExpMatch(url, "http*://*.h1n1china.org*")) return strProxy;1200 if (shExpMatch(url, "http*://*.hacken.cc*")) return strProxy;1201 if (shExpMatch(url, "http*://*.hackthatphone.net*")) return strProxy;1202 if (shExpMatch(url, "http*://*.hahlo.com*")) return strProxy;1203 if (shExpMatch(url, "http*://*.hakkatv.org.tw*")) return strProxy;1204 if (shExpMatch(url, "http*://*.bbs.hanminzu.org*")) return strProxy;1205 if (shExpMatch(url, "http*://*.hanunyi.com*")) return strProxy;1206 if (shExpMatch(url, "http*://*.jp.hao123.com*")) return strProxy;1207 if (shExpMatch(url, "http*://*.hardsextube.com*")) return strProxy;1208 if (shExpMatch(url, "http*://*.harunyahya.com*")) return strProxy;1209 if (shExpMatch(url, "http*://*.hasaowall.com*")) return strProxy;1210 if (shExpMatch(url, "http*://*.have8.com*")) return strProxy;1211 if (shExpMatch(url, "http*://*.hdtvb.net*")) return strProxy;1212 if (shExpMatch(url, "http*://*.heartyit.com*")) return strProxy;1213 if (shExpMatch(url, "http*://*.hecaitou.net*")) return strProxy;1214 if (shExpMatch(url, "http*://*.hecaitou.net*")) return strProxy;1215 if (shExpMatch(url, "http*://*.hechaji.com*")) return strProxy;1216 if (shExpMatch(url, "http*://*.hechaji.com*")) return strProxy;1217 if (shExpMatch(url, "http*://*.helplinfen.com*")) return strProxy;1218 if (shExpMatch(url, "http*://*.helloandroid.com*")) return strProxy;1219 if (shExpMatch(url, "http*://*.helloqueer.com*")) return strProxy;1220 if (shExpMatch(url, "http*://*.hellotxt.com*")) return strProxy;1221 if (shExpMatch(url, "http*://*.hellotxt.com*")) return strProxy;1222 if (shExpMatch(url, "http*://*.htxt.it*")) return strProxy;1223 if (shExpMatch(url, "http*://*.hellouk.org*")) return strProxy;1224 if (shExpMatch(url, "http*://*.helpeachpeople.com*")) return strProxy;1225 if (shExpMatch(url, "http*://*.helpeachpeople.com*")) return strProxy;1226 if (shExpMatch(url, "http*://*.helpzhuling.org*")) return strProxy;1227 if (shExpMatch(url, "http*://*.date.fm*")) return strProxy;1228 if (shExpMatch(url, "http*://*.flightcaster.com*")) return strProxy;1229 if (shExpMatch(url, "http*://*.branch.com*")) return strProxy;1230 if (shExpMatch(url, "http*://*.awardwinningfjords.com*")) return strProxy;1231 if (shExpMatch(url, "http*://*.futureme.org*")) return strProxy;1232 if (shExpMatch(url, "http*://*.getcloudapp.com*")) return strProxy;1233 if (shExpMatch(url, "http*://*.cl.ly*")) return strProxy;1234 if (shExpMatch(url, "http*://*.getsmartlinks.com*")) return strProxy;1235 if (shExpMatch(url, "http*://*.git-scm.com*")) return strProxy;1236 if (shExpMatch(url, "http*://*.lesscss.org*")) return strProxy;1237 if (shExpMatch(url, "http*://*.list.ly*")) return strProxy;1238 if (shExpMatch(url, "http*://*.maxgif.com*")) return strProxy;1239 if (shExpMatch(url, "http*://*.overlapr.com*")) return strProxy;1240 if (shExpMatch(url, "http*://*.peerpong.com*")) return strProxy;1241 if (shExpMatch(url, "http*://*.pose.com*")) return strProxy;1242 if (shExpMatch(url, "http*://*.samsoff.es*")) return strProxy;1243 if (shExpMatch(url, "http*://*.sendoid.com*")) return strProxy;1244 if (shExpMatch(url, "http*://*.speckleapp.com*")) return strProxy;1245 if (shExpMatch(url, "http*://*.stuffimreading.net*")) return strProxy;1246 if (shExpMatch(url, "http*://*.tomayko.com*")) return strProxy;1247 if (shExpMatch(url, "http*://*.twt.fm*")) return strProxy;1248 if (shExpMatch(url, "http*://*.views.fm*")) return strProxy;1249 if (shExpMatch(url, "http*://*.heqinglian.net*")) return strProxy;1250 if (shExpMatch(url, "http*://*.here4news.com*")) return strProxy;1251 if (shExpMatch(url, "http*://*.heungkongdiscuss.com*")) return strProxy;1252 if (shExpMatch(url, "http*://*.app.heywire.com*")) return strProxy;1253 if (shExpMatch(url, "http*://*.hgseav.com*")) return strProxy;1254 if (shExpMatch(url, "http*://*.hidden-advent.org*")) return strProxy;1255 if (shExpMatch(url, "http*://*.hidden-advent.org*")) return strProxy;1256 if (shExpMatch(url, "http*://*.hidecloud.com*")) return strProxy;1257 if (shExpMatch(url, "http*://*.hidemyass.com*")) return strProxy;1258 if (shExpMatch(url, "http*://*.hidemyass.com*")) return strProxy;1259 if (shExpMatch(url, "http*://*.hideipvpn.com*")) return strProxy;1260 if (shExpMatch(url, "http*://*.hihiforum.com*")) return strProxy;1261 if (shExpMatch(url, "http*://*.hihiforum.com*")) return strProxy;1262 if (shExpMatch(url, "http*://*.hihistory.net*")) return strProxy;1263 if (shExpMatch(url, "http*://*.higfw.com*")) return strProxy;1264 if (shExpMatch(url, "http*://*.highrockmedia.com*")) return strProxy;1265 if (shExpMatch(url, "http*://*.hiitch.com*")) return strProxy;1266 if (shExpMatch(url, "http*://*.hikinggfw.org*")) return strProxy;1267 if (shExpMatch(url, "http*://*.himemix.com*")) return strProxy;1268 if (shExpMatch(url, "http*://*.himemix.com*")) return strProxy;1269 if (shExpMatch(url, "http*://*.himemix.net*")) return strProxy;1270 if (shExpMatch(url, "http*://*.times.hinet.net*")) return strProxy;1271 if (shExpMatch(url, "http*://*.hjclub.info*")) return strProxy;1272 if (shExpMatch(url, "http*://*.hk-pub.com*")) return strProxy;1273 if (shExpMatch(url, "http*://*.hk-pub.com*")) return strProxy;1274 if (shExpMatch(url, "http*://*.hk32168.com*")) return strProxy;1275 if (shExpMatch(url, "http*://*.hk32168.com*")) return strProxy;1276 if (shExpMatch(url, "http*://*.app.hkatvnews.com*")) return strProxy;1277 if (shExpMatch(url, "http*://*.hkbc.net*")) return strProxy;1278 if (shExpMatch(url, "http*://*.hkbf.org*")) return strProxy;1279 if (shExpMatch(url, "http*://*.hkchurch.org*")) return strProxy;1280 if (shExpMatch(url, "http*://*.hkday.net*")) return strProxy;1281 if (shExpMatch(url, "http*://*.hkdailynews.com.hk*")) return strProxy;1282 if (shExpMatch(url, "http*://*.hkej.com*")) return strProxy;1283 if (shExpMatch(url, "http*://*.hkepc.com*")) return strProxy;1284 if (shExpMatch(url, "http*://*.global.hkepc.com*")) return strProxy;1285 if (shExpMatch(url, "http*://*.hkfront.org*")) return strProxy;1286 if (shExpMatch(url, "http*://*.hkgolden.com*")) return strProxy;1287 if (shExpMatch(url, "http*://*.hkgreenradio.org*")) return strProxy;1288 if (shExpMatch(url, "http*://*.hkheadline.com*")) return strProxy;1289 if (shExpMatch(url, "http*://*.hkheadline.com*")) return strProxy;1290 if (shExpMatch(url, "http*://*.hkhkhk.com*")) return strProxy;1291 if (shExpMatch(url, "http*://*.hkjc.com*")) return strProxy;1292 if (shExpMatch(url, "http*://*.hkjp.org*")) return strProxy;1293 if (shExpMatch(url, "http*://*.hkptu.org*")) return strProxy;1294 if (shExpMatch(url, "http*://*.hkreporter.com*")) return strProxy;1295 if (shExpMatch(url, "http*://*.hkreporter.com*")) return strProxy;1296 if (shExpMatch(url, "http*://*.hkupop.hku.hk*")) return strProxy;1297 if (shExpMatch(url, "http*://*.hkwcc.org.hk*")) return strProxy;1298 if (shExpMatch(url, "http*://*.hkzone.org*")) return strProxy;1299 if (shExpMatch(url, "http*://*.hnjhj.com*")) return strProxy;1300 if (shExpMatch(url, "http*://*.hnjhj.com*")) return strProxy;1301 if (shExpMatch(url, "http*://*.hola.com*")) return strProxy;1302 if (shExpMatch(url, "http*://*.hola.org*")) return strProxy;1303 if (shExpMatch(url, "http*://*.holyspiritspeaks.org*")) return strProxy;1304 if (shExpMatch(url, "http*://*.holyspiritspeaks.org*")) return strProxy;1305 if (shExpMatch(url, "http*://*.derekhsu.homeip.net*")) return strProxy;1306 if (shExpMatch(url, "http*://*.homeservershow.com*")) return strProxy;1307 if (shExpMatch(url, "http*://*.old.honeynet.org*")) return strProxy;1308 if (shExpMatch(url, "http*://*.hongmeimei.com*")) return strProxy;1309 if (shExpMatch(url, "http*://*.hongzhi.li*")) return strProxy;1310 if (shExpMatch(url, "http*://*.hootsuite.com*")) return strProxy;1311 if (shExpMatch(url, "http*://*.hootsuite.com*")) return strProxy;1312 if (shExpMatch(url, "http*://*.globalrescue.hopto.org*")) return strProxy;1313 if (shExpMatch(url, "http*://*.hotpot.hk*")) return strProxy;1314 if (shExpMatch(url, "http*://*.hotshame.com*")) return strProxy;1315 if (shExpMatch(url, "http*://*.hotspotshield.com*")) return strProxy;1316 if (shExpMatch(url, "http*://*.hougaige.com*")) return strProxy;1317 if (shExpMatch(url, "http*://*.howtoforge.com*")) return strProxy;1318 if (shExpMatch(url, "http*://*.hqcdp.org*")) return strProxy;1319 if (shExpMatch(url, "http*://*.hqcdp.org*")) return strProxy;1320 if (shExpMatch(url, "http*://*.hrcir.com*")) return strProxy;1321 if (shExpMatch(url, "http*://*.hrcchina.org*")) return strProxy;1322 if (shExpMatch(url, "http*://*.hrichina.org*")) return strProxy;1323 if (shExpMatch(url, "http*://*.hrichina.org*")) return strProxy;1324 if (shExpMatch(url, "http*://*.hrw.org*")) return strProxy;1325 if (shExpMatch(url, "http*://*.hrw.org*")) return strProxy;1326 if (shExpMatch(url, "http*://*.hsjp.net*")) return strProxy;1327 if (shExpMatch(url, "http*://*.hsselite.com*")) return strProxy;1328 if (shExpMatch(url, "http*://*.htkou.net*")) return strProxy;1329 if (shExpMatch(url, "http*://*.htmldog.com*")) return strProxy;1330 if (shExpMatch(url, "http*://*.huaglad.com*")) return strProxy;1331 if (shExpMatch(url, "http*://*.huanghuagang.org*")) return strProxy;1332 if (shExpMatch(url, "http*://*.huanghuagang.org*")) return strProxy;1333 if (shExpMatch(url, "http*://*.huaren.us*")) return strProxy;1334 if (shExpMatch(url, "http*://*.huaren.us*")) return strProxy;1335 if (shExpMatch(url, "http*://*.huaxia-news.com*")) return strProxy;1336 if (shExpMatch(url, "http*://*.huaxin.ph*")) return strProxy;1337 if (shExpMatch(url, "http*://*.hua-yue.net*")) return strProxy;1338 if (shExpMatch(url, "http*://*.hugoroy.eu*")) return strProxy;1339 if (shExpMatch(url, "http*://*.huhaitai.com*")) return strProxy;1340 if (shExpMatch(url, "http*://*.huhamhire.com*")) return strProxy;1341 if (shExpMatch(url, "http*://*.hung-ya.com*")) return strProxy;1342 if (shExpMatch(url, "http*://*.hungerstrikeforaids.org*")) return strProxy;1343 if (shExpMatch(url, "http*://*.huping.net*")) return strProxy;1344 if (shExpMatch(url, "http*://*.hutianyi.net*")) return strProxy;1345 if (shExpMatch(url, "http*://*.hutong9.net*")) return strProxy;1346 if (shExpMatch(url, "http*://*.hwinfo.com*")) return strProxy;1347 if (shExpMatch(url, "http*://*.hxwq.org*")) return strProxy;1348 if (shExpMatch(url, "http*://*.hypeshell.com*")) return strProxy;1349 if (shExpMatch(url, "http*://*.hyperrate.com*")) return strProxy;1350 if (shExpMatch(url, "http*://*.i-cable.com*")) return strProxy;1351 if (shExpMatch(url, "http*://*.i1.hk*")) return strProxy;1352 if (shExpMatch(url, "http*://*.i2p2.de*")) return strProxy;1353 if (shExpMatch(url, "http*://*.i2runner.com*")) return strProxy;1354 if (shExpMatch(url, "http*://*.iask.ca*")) return strProxy;1355 if (shExpMatch(url, "http*://*.iask.ca*")) return strProxy;1356 if (shExpMatch(url, "http*://*.iask.bz*")) return strProxy;1357 if (shExpMatch(url, "http*://*.iask.bz*")) return strProxy;1358 if (shExpMatch(url, "http*://*.ibiblio.org*")) return strProxy;1359 if (shExpMatch(url, "http*://*.iblogserv-f.net*")) return strProxy;1360 if (shExpMatch(url, "http*://*.cn.ibtimes.com*")) return strProxy;1361 if (shExpMatch(url, "http*://*.blogs.icerocket.com*")) return strProxy;1362 if (shExpMatch(url, "http*://*.icij.org*")) return strProxy;1363 if (shExpMatch(url, "http*://*.icl-fi.org*")) return strProxy;1364 if (shExpMatch(url, "http*://*.iconpaper.org*")) return strProxy;1365 if (shExpMatch(url, "http*://*.icu-project.org*")) return strProxy;1366 if (shExpMatch(url, "http*://*.w.idaiwan.com*")) return strProxy;1367 if (shExpMatch(url, "http*://*.idemocracy.asia*")) return strProxy;1368 if (shExpMatch(url, "http*://*.identi.ca*")) return strProxy;1369 if (shExpMatch(url, "http*://*.identi.ca*")) return strProxy;1370 if (shExpMatch(url, "http*://*.idiomconnection.com*")) return strProxy;1371 if (shExpMatch(url, "http*://*.idlcoyote.com*")) return strProxy;1372 if (shExpMatch(url, "http*://*.idouga.com*")) return strProxy;1373 if (shExpMatch(url, "http*://*.forum.idsam.com*")) return strProxy;1374 if (shExpMatch(url, "http*://*.idv.tw*")) return strProxy;1375 if (shExpMatch(url, "http*://*.ieasynews.net*")) return strProxy;1376 if (shExpMatch(url, "http*://*.ied2k.net*")) return strProxy;1377 if (shExpMatch(url, "http*://*.if.ttt*")) return strProxy;1378 if (shExpMatch(url, "http*://*.ifanqiang.com*")) return strProxy;1379 if (shExpMatch(url, "http*://*.ifanr.com*")) return strProxy;1380 if (shExpMatch(url, "http*://*.ifcss.org*")) return strProxy;1381 if (shExpMatch(url, "http*://*.ifcss.org*")) return strProxy;1382 if (shExpMatch(url, "http*://*.ifjc.org*")) return strProxy;1383 if (shExpMatch(url, "http*://*.ift.tt*")) return strProxy;1384 if (shExpMatch(url, "http*://*.antidrm.hpg.ig.com.br*")) return strProxy;1385 if (shExpMatch(url, "http*://*.igfw.net*")) return strProxy;1386 if (shExpMatch(url, "http*://*.ignitedetroit.net*")) return strProxy;1387 if (shExpMatch(url, "http*://*.igvita.com*")) return strProxy;1388 if (shExpMatch(url, "http*://*.ihakka.net*")) return strProxy;1389 if (shExpMatch(url, "http*://*.iicns.com*")) return strProxy;1390 if (shExpMatch(url, "http*://*.illusionfactory.com*")) return strProxy;1391 if (shExpMatch(url, "http*://*.ilove80.be*")) return strProxy;1392 if (shExpMatch(url, "http*://*.im.tv*")) return strProxy;1393 if (shExpMatch(url, "http*://*.im88.tw*")) return strProxy;1394 if (shExpMatch(url, "http*://*.imageflea.com*")) return strProxy;1395 if (shExpMatch(url, "http*://*.imageshack.us*")) return strProxy;1396 if (shExpMatch(url, "http*://*.imagevenue.com*")) return strProxy;1397 if (shExpMatch(url, "http*://*.imagezilla.net*")) return strProxy;1398 if (shExpMatch(url, "http*://*.imdb.com*")) return strProxy;1399 if (shExpMatch(url, "http*://*.imdb.com*")) return strProxy;1400 if (shExpMatch(url, "http*://*.img.ly*")) return strProxy;1401 if (shExpMatch(url, "http*://*.img.ly*")) return strProxy;1402 if (shExpMatch(url, "http*://*.imkev.com*")) return strProxy;1403 if (shExpMatch(url, "http*://*.imkev.com*")) return strProxy;1404 if (shExpMatch(url, "http*://*.imlive.com*")) return strProxy;1405 if (shExpMatch(url, "http*://*.immigration.gov.tw*")) return strProxy;1406 if (shExpMatch(url, "http*://*.tech2.in.com*")) return strProxy;1407 if (shExpMatch(url, "http*://*.incredibox.fr*")) return strProxy;1408 if (shExpMatch(url, "http*://*.initiativesforchina.org*")) return strProxy;1409 if (shExpMatch(url, "http*://*.inmediahk.net*")) return strProxy;1410 if (shExpMatch(url, "http*://*.inmediahk.net*")) return strProxy;1411 if (shExpMatch(url, "http*://*.innermongolia.org*")) return strProxy;1412 if (shExpMatch(url, "http*://*.instagram.com*")) return strProxy;1413 if (shExpMatch(url, "http*://*.instagram.com*")) return strProxy;1414 if (shExpMatch(url, "http*://*.interfaceaddiction.com*")) return strProxy;1415 if (shExpMatch(url, "http*://*.internationalrivers.org*")) return strProxy;1416 if (shExpMatch(url, "http*://*.internet.org*")) return strProxy;1417 if (shExpMatch(url, "http*://*.internetdefenseleague.org*")) return strProxy;1418 if (shExpMatch(url, "http*://*.internetfreedom.org*")) return strProxy;1419 if (shExpMatch(url, "http*://*.internetpopculture.com*")) return strProxy;1420 if (shExpMatch(url, "http*://*.inxian.com*")) return strProxy;1421 if (shExpMatch(url, "http*://*.inxian.com*")) return strProxy;1422 if (shExpMatch(url, "http*://*.iphone4hongkong.com*")) return strProxy;1423 if (shExpMatch(url, "http*://*.iphonehacks.com*")) return strProxy;1424 if (shExpMatch(url, "http*://*.iphonix.fr*")) return strProxy;1425 if (shExpMatch(url, "http*://*.ipicture.ru*")) return strProxy;1426 if (shExpMatch(url, "http*://*.ipobar.com*")) return strProxy;1427 if (shExpMatch(url, "http*://*.ippotv.com*")) return strProxy;1428 if (shExpMatch(url, "http*://*.iptorrents.com*")) return strProxy;1429 if (shExpMatch(url, "http*://*.ipvanish.com*")) return strProxy;1430 if (shExpMatch(url, "http*://*.iredmail.org*")) return strProxy;1431 if (shExpMatch(url, "http*://*.ironicsoftware.com*")) return strProxy;1432 if (shExpMatch(url, "http*://*.ironbigfools.compython.net*")) return strProxy;1433 if (shExpMatch(url, "http*://*.ironpython.net*")) return strProxy;1434 if (shExpMatch(url, "http*://*.beta.iset.com.tw*")) return strProxy;1435 if (shExpMatch(url, "http*://*.beta.iset.com.tw*")) return strProxy;1436 if (shExpMatch(url, "http*://*.forum.iset.com.tw*")) return strProxy;1437 if (shExpMatch(url, "http*://*.islam.org.hk*")) return strProxy;1438 if (shExpMatch(url, "http*://*.islamicity.com*")) return strProxy;1439 if (shExpMatch(url, "http*://*.isaacmao.com*")) return strProxy;1440 if (shExpMatch(url, "http*://*.!--isaacmao.com*")) return strProxy;1441 if (shExpMatch(url, "http*://*.isgreat.org*")) return strProxy;1442 if (shExpMatch(url, "http*://*.ismprofessional.net*")) return strProxy;1443 if (shExpMatch(url, "http*://*.isohunt.com*")) return strProxy;1444 if (shExpMatch(url, "http*://*.israbox.com*")) return strProxy;1445 if (shExpMatch(url, "http*://*.blog.istef.info*")) return strProxy;1446 if (shExpMatch(url, "http*://*.istockphoto.com*")) return strProxy;1447 if (shExpMatch(url, "http*://*.isunaffairs.com*")) return strProxy;1448 if (shExpMatch(url, "http*://*.isuntv.com*")) return strProxy;1449 if (shExpMatch(url, "http*://*.itaboo.info*")) return strProxy;1450 if (shExpMatch(url, "http*://*.itaboo.info*")) return strProxy;1451 if (shExpMatch(url, "http*://*.download.ithome.com.tw*")) return strProxy;1452 if (shExpMatch(url, "http*://*.ithelp.ithome.com.tw*")) return strProxy;1453 if (shExpMatch(url, "http*://*.itshidden.com*")) return strProxy;1454 if (shExpMatch(url, "http*://*.itweet.net*")) return strProxy;1455 if (shExpMatch(url, "http*://*.itweet.net*")) return strProxy;1456 if (shExpMatch(url, "http*://*.iu45.com*")) return strProxy;1457 if (shExpMatch(url, "http*://*.iuhrdf.org*")) return strProxy;1458 if (shExpMatch(url, "http*://*.iverycd.com*")) return strProxy;1459 if (shExpMatch(url, "http*://*.lvv2.com*")) return strProxy;1460 if (shExpMatch(url, "http*://*.ixquick.com*")) return strProxy;1461 if (shExpMatch(url, "http*://*.izaobao.us*")) return strProxy;1462 if (shExpMatch(url, "http*://*.gmozomg.izihost.org*")) return strProxy;1463 if (shExpMatch(url, "http*://*.izles.net*")) return strProxy;1464 if (shExpMatch(url, "http*://*.j.mp*")) return strProxy;1465 if (shExpMatch(url, "http*://*.blog.jackjia.com*")) return strProxy;1466 if (shExpMatch(url, "http*://*.japan-whores.com*")) return strProxy;1467 if (shExpMatch(url, "http*://*.javbus.com*")) return strProxy;1468 if (shExpMatch(url, "http*://*.jbtalks.cc*")) return strProxy;1469 if (shExpMatch(url, "http*://*.jbtalks.com*")) return strProxy;1470 if (shExpMatch(url, "http*://*.jbtalks.my*")) return strProxy;1471 if (shExpMatch(url, "http*://*.jeanyim.com*")) return strProxy;1472 if (shExpMatch(url, "http*://*.jgoodies.com*")) return strProxy;1473 if (shExpMatch(url, "http*://*.jiaoyou8.com*")) return strProxy;1474 if (shExpMatch(url, "http*://*.jiehua.cz*")) return strProxy;1475 if (shExpMatch(url, "http*://*.hk.jiepang.com*")) return strProxy;1476 if (shExpMatch(url, "http*://*.tw.jiepang.com*")) return strProxy;1477 if (shExpMatch(url, "http*://*.jieshibaobao.com*")) return strProxy;1478 if (shExpMatch(url, "http*://*.jinbushe.org*")) return strProxy;1479 if (shExpMatch(url, "http*://*.jinbushe.org*")) return strProxy;1480 if (shExpMatch(url, "http*://*.zhao.jinhai.de*")) return strProxy;1481 if (shExpMatch(url, "http*://*.jingpin.org*")) return strProxy;1482 if (shExpMatch(url, "http*://*.jingpin.org*")) return strProxy;1483 if (shExpMatch(url, "http*://*.ac.jiruan.net*")) return strProxy;1484 if (shExpMatch(url, "http*://*.jitouch.com*")) return strProxy;1485 if (shExpMatch(url, "http*://*.jkforum.net*")) return strProxy;1486 if (shExpMatch(url, "http*://*.research.jmsc.hku.hk*")) return strProxy;1487 if (shExpMatch(url, "http*://*.joachims.org*")) return strProxy;1488 if (shExpMatch(url, "http*://*.jobso.tv*")) return strProxy;1489 if (shExpMatch(url, "http*://*.joeedelman.com*")) return strProxy;1490 if (shExpMatch(url, "http*://*.journalofdemocracy.org*")) return strProxy;1491 if (shExpMatch(url, "http*://*.jpopforum.net*")) return strProxy;1492 if (shExpMatch(url, "http*://*.juliereyc.com*")) return strProxy;1493 if (shExpMatch(url, "http*://*.junauza.com*")) return strProxy;1494 if (shExpMatch(url, "http*://*.junefourth-20.net*")) return strProxy;1495 if (shExpMatch(url, "http*://*.junefourth-20.net*")) return strProxy;1496 if (shExpMatch(url, "http*://*.justfreevpn.com*")) return strProxy;1497 if (shExpMatch(url, "http*://*.justtristan.com*")) return strProxy;1498 if (shExpMatch(url, "http*://*.juziyue.com*")) return strProxy;1499 if (shExpMatch(url, "http*://*.juziyue.com*")) return strProxy;1500 if (shExpMatch(url, "http*://*.jwmusic.org*")) return strProxy;1501 if (shExpMatch(url, "http*://*.jyxf.net*")) return strProxy;1502 if (shExpMatch(url, "http*://*.ka-wai.com*")) return strProxy;1503 if (shExpMatch(url, "http*://*.kagyuoffice.org.tw*")) return strProxy;1504 if (shExpMatch(url, "http*://*.kagyuoffice.org.tw*")) return strProxy;1505 if (shExpMatch(url, "http*://*.kaiyuan.de*")) return strProxy;1506 if (shExpMatch(url, "http*://*.kakao.com*")) return strProxy;1507 if (shExpMatch(url, "http*://*.kanzhongguo.com*")) return strProxy;1508 if (shExpMatch(url, "http*://*.kanzhongguo.eu*")) return strProxy;1509 if (shExpMatch(url, "http*://*.karayou.com*")) return strProxy;1510 if (shExpMatch(url, "http*://*.kcsoftwares.com*")) return strProxy;1511 if (shExpMatch(url, "http*://*.kechara.com*")) return strProxy;1512 if (shExpMatch(url, "http*://*.keepandshare.com*")) return strProxy;1513 if (shExpMatch(url, "http*://*.kendincos.net*")) return strProxy;1514 if (shExpMatch(url, "http*://*.kenengba.com*")) return strProxy;1515 if (shExpMatch(url, "http*://*.kenengba.com*")) return strProxy;1516 if (shExpMatch(url, "http*://*.keontech.net*")) return strProxy;1517 if (shExpMatch(url, "http*://*.wiki.keso.cn*")) return strProxy;1518 if (shExpMatch(url, "http*://*.khmusic.com.tw*")) return strProxy;1519 if (shExpMatch(url, "http*://*.bbs.kimy.com.tw*")) return strProxy;1520 if (shExpMatch(url, "http*://*.kingdomsalvation.org*")) return strProxy;1521 if (shExpMatch(url, "http*://*.kinghost.com*")) return strProxy;1522 if (shExpMatch(url, "http*://*.kingstone.com.tw*")) return strProxy;1523 if (shExpMatch(url, "http*://*.killwall.com*")) return strProxy;1524 if (shExpMatch(url, "http*://*.killwall.com*")) return strProxy;1525 if (shExpMatch(url, "http*://*.kissbbao.cn*")) return strProxy;1526 if (shExpMatch(url, "http*://*.knowledgerush.com*")) return strProxy;1527 if (shExpMatch(url, "http*://*.kodingen.com*")) return strProxy;1528 if (shExpMatch(url, "http*://*.kompozer.net*")) return strProxy;1529 if (shExpMatch(url, "http*://*.koolsolutions.com*")) return strProxy;1530 if (shExpMatch(url, "http*://*.koornk.com*")) return strProxy;1531 if (shExpMatch(url, "http*://*.koornk.com*")) return strProxy;1532 if (shExpMatch(url, "http*://*.kui.name*")) return strProxy;1533 if (shExpMatch(url, "http*://*.kun.im*")) return strProxy;1534 if (shExpMatch(url, "http*://*.kurashsultan.com*")) return strProxy;1535 if (shExpMatch(url, "http*://*.kurtmunger.com*")) return strProxy;1536 if (shExpMatch(url, "http*://*.kusocity.com*")) return strProxy;1537 if (shExpMatch(url, "http*://*.kwcg.ca*")) return strProxy;1538 if (shExpMatch(url, "http*://*.kwongwah.com.my*")) return strProxy;1539 if (shExpMatch(url, "http*://*.kyohk.net*")) return strProxy;1540 if (shExpMatch(url, "http*://*.kzeng.info*")) return strProxy;1541 if (shExpMatch(url, "http*://*.kzeng.info*")) return strProxy;1542 if (shExpMatch(url, "http*://*.la-forum.org*")) return strProxy;1543 if (shExpMatch(url, "http*://*.ladbrokes.com*")) return strProxy;1544 if (shExpMatch(url, "http*://*.labiennale.org*")) return strProxy;1545 if (shExpMatch(url, "http*://*.lagranepoca.com*")) return strProxy;1546 if (shExpMatch(url, "http*://*.lalulalu.com*")) return strProxy;1547 if (shExpMatch(url, "http*://*.lamenhu.com*")) return strProxy;1548 if (shExpMatch(url, "http*://*.laogai.org*")) return strProxy;1549 if (shExpMatch(url, "http*://*.laogai.org*")) return strProxy;1550 if (shExpMatch(url, "http*://*.laomiu.com*")) return strProxy;1551 if (shExpMatch(url, "http*://*.laoyang.info*")) return strProxy;1552 if (shExpMatch(url, "http*://*.laoyang.info*")) return strProxy;1553 if (shExpMatch(url, "http*://*.laptoplockdown.com*")) return strProxy;1554 if (shExpMatch(url, "http*://*.laqingdan.net*")) return strProxy;1555 if (shExpMatch(url, "http*://*.larsgeorge.com*")) return strProxy;1556 if (shExpMatch(url, "http*://*.lastfm.es*")) return strProxy;1557 if (shExpMatch(url, "http*://*.latelinenews.com*")) return strProxy;1558 if (shExpMatch(url, "http*://*.lazarsearlymusic.com*")) return strProxy;1559 if (shExpMatch(url, "http*://*.leecheukyan.org*")) return strProxy;1560 if (shExpMatch(url, "http*://*.lematin.ch*")) return strProxy;1561 if (shExpMatch(url, "http*://*.lemonde.fr*")) return strProxy;1562 if (shExpMatch(url, "http*://*.lenwhite.com*")) return strProxy;1563 if (shExpMatch(url, "http*://*.lerosua.org*")) return strProxy;1564 if (shExpMatch(url, "http*://*.lerosua.org*")) return strProxy;1565 if (shExpMatch(url, "http*://*.blog.lester850.info*")) return strProxy;1566 if (shExpMatch(url, "http*://*.lesoir.be*")) return strProxy;1567 if (shExpMatch(url, "http*://*.letscorp.net*")) return strProxy;1568 if (shExpMatch(url, "http*://*.letscorp.net*")) return strProxy;1569 if (shExpMatch(url, "http*://*.liansi.org*")) return strProxy;1570 if (shExpMatch(url, "http*://*.lianyue.net*")) return strProxy;1571 if (shExpMatch(url, "http*://*.liaowangxizang.net*")) return strProxy;1572 if (shExpMatch(url, "http*://*.liaowangxizang.net*")) return strProxy;1573 if (shExpMatch(url, "http*://*.liberal.org.hk*")) return strProxy;1574 if (shExpMatch(url, "http*://*.libertytimes.com.tw*")) return strProxy;1575 if (shExpMatch(url, "http*://*.lidecheng.com*")) return strProxy;1576 if (shExpMatch(url, "http*://*.limiao.net*")) return strProxy;1577 if (shExpMatch(url, "http*://*.abitno.linpie.com*")) return strProxy;1578 if (shExpMatch(url, "http*://*.line.me*")) return strProxy;1579 if (shExpMatch(url, "http*://*.linglingfa.com*")) return strProxy;1580 if (shExpMatch(url, "http*://*.lingvodics.com*")) return strProxy;1581 if (shExpMatch(url, "http*://*.linkideo.com*")) return strProxy;1582 if (shExpMatch(url, "http*://*.api.linksalpha.com*")) return strProxy;1583 if (shExpMatch(url, "http*://*.apidocs.linksalpha.com*")) return strProxy;1584 if (shExpMatch(url, "http*://*.linksalpha.com*")) return strProxy;1585 if (shExpMatch(url, "http*://*.help.linksalpha.com*")) return strProxy;1586 if (shExpMatch(url, "http*://*.linux-engineer.net*")) return strProxy;1587 if (shExpMatch(url, "http*://*.linuxconfig.org*")) return strProxy;1588 if (shExpMatch(url, "http*://*.linuxreviews.org*")) return strProxy;1589 if (shExpMatch(url, "http*://*.linuxtoy.org*")) return strProxy;1590 if (shExpMatch(url, "http*://*.lipuman.com*")) return strProxy;1591 if (shExpMatch(url, "http*://*.listentoyoutube.com*")) return strProxy;1592 if (shExpMatch(url, "http*://*.listorious.com*")) return strProxy;1593 if (shExpMatch(url, "http*://*.liudejun.com*")) return strProxy;1594 if (shExpMatch(url, "http*://*.liuhanyu.com*")) return strProxy;1595 if (shExpMatch(url, "http*://*.liujianshu.com*")) return strProxy;1596 if (shExpMatch(url, "http*://*.liujianshu.com*")) return strProxy;1597 if (shExpMatch(url, "http*://*.liuxiaotong.com*")) return strProxy;1598 if (shExpMatch(url, "http*://*.liuxiaotong.com*")) return strProxy;1599 if (shExpMatch(url, "http*://*.liu.lu*")) return strProxy;1600 if (shExpMatch(url, "http*://*.liveleak.com*")) return strProxy;1601 if (shExpMatch(url, "http*://*.liveleak.com*")) return strProxy;1602 if (shExpMatch(url, "http*://*.livestation.com*")) return strProxy;1603 if (shExpMatch(url, "http*://*.livestream.com*")) return strProxy;1604 if (shExpMatch(url, "http*://*.livestream.com*")) return strProxy;1605 if (shExpMatch(url, "http*://*.livingonline.us*")) return strProxy;1606 if (shExpMatch(url, "http*://*.livingstream.com*")) return strProxy;1607 if (shExpMatch(url, "http*://*.livevideo.com*")) return strProxy;1608 if (shExpMatch(url, "http*://*.livevideo.com*")) return strProxy;1609 if (shExpMatch(url, "http*://*.lizhizhuangbi.com*")) return strProxy;1610 if (shExpMatch(url, "http*://*.lkcn.net*")) return strProxy;1611 if (shExpMatch(url, "http*://*.localpresshk.com*")) return strProxy;1612 if (shExpMatch(url, "http*://*.lockdown.com*")) return strProxy;1613 if (shExpMatch(url, "http*://*.lockestek.com*")) return strProxy;1614 if (shExpMatch(url, "http*://*.logbot.net*")) return strProxy;1615 if (shExpMatch(url, "http*://*.logiqx.com*")) return strProxy;1616 if (shExpMatch(url, "http*://*.logmike.com*")) return strProxy;1617 if (shExpMatch(url, "http*://*.longhair.hk*")) return strProxy;1618 if (shExpMatch(url, "http*://*.longtermly.net*")) return strProxy;1619 if (shExpMatch(url, "http*://*.lookatgame.com*")) return strProxy;1620 if (shExpMatch(url, "http*://*.lookatgame.com*")) return strProxy;1621 if (shExpMatch(url, "http*://*.lookingglasstheatre.org*")) return strProxy;1622 if (shExpMatch(url, "http*://*.lookpic.com*")) return strProxy;1623 if (shExpMatch(url, "http*://*.looktoronto.com*")) return strProxy;1624 if (shExpMatch(url, "http*://*.lotuslight.org.tw*")) return strProxy;1625 if (shExpMatch(url, "http*://*.hkreporter.loved.hk*")) return strProxy;1626 if (shExpMatch(url, "http*://*.lrfz.com*")) return strProxy;1627 if (shExpMatch(url, "http*://*.lrip.org*")) return strProxy;1628 if (shExpMatch(url, "http*://*.lsd.org.hk*")) return strProxy;1629 if (shExpMatch(url, "http*://*.lsd.org.hk*")) return strProxy;1630 if (shExpMatch(url, "http*://*.lsforum.net*")) return strProxy;1631 if (shExpMatch(url, "http*://*.lsm.org*")) return strProxy;1632 if (shExpMatch(url, "http*://*.lsmchinese.org*")) return strProxy;1633 if (shExpMatch(url, "http*://*.lsmkorean.org*")) return strProxy;1634 if (shExpMatch(url, "http*://*.ltn.com.tw*")) return strProxy;1635 if (shExpMatch(url, "http*://*.lupm.org*")) return strProxy;1636 if (shExpMatch(url, "http*://*.lupm.org*")) return strProxy;1637 if (shExpMatch(url, "http*://*.lushstories.com*")) return strProxy;1638 if (shExpMatch(url, "http*://*.lvhai.org*")) return strProxy;1639 if (shExpMatch(url, "http*://*.lvhai.org*")) return strProxy;1640 if (shExpMatch(url, "http*://*.mh4u.org*")) return strProxy;1641 if (shExpMatch(url, "http*://*.m-team.cc*")) return strProxy;1642 if (shExpMatch(url, "http*://*.macrovpn.com*")) return strProxy;1643 if (shExpMatch(url, "http*://*.mad-ar.ch*")) return strProxy;1644 if (shExpMatch(url, "http*://*.maiplus.com*")) return strProxy;1645 if (shExpMatch(url, "http*://*.marc.info*")) return strProxy;1646 if (shExpMatch(url, "http*://*.marguerite.su*")) return strProxy;1647 if (shExpMatch(url, "http*://*.martincartoons.com*")) return strProxy;1648 if (shExpMatch(url, "http*://*.maiio.net*")) return strProxy;1649 if (shExpMatch(url, "http*://*.mail-archive.com*")) return strProxy;1650 if (shExpMatch(url, "http*://*.malaysiakini.com*")) return strProxy;1651 if (shExpMatch(url, "http*://*.makemymood.com*")) return strProxy;1652 if (shExpMatch(url, "http*://*.marines.mil*")) return strProxy;1653 if (shExpMatch(url, "http*://*.markmail.org*")) return strProxy;1654 if (shExpMatch(url, "http*://*.martau.com*")) return strProxy;1655 if (shExpMatch(url, "http*://*.maruta.be*")) return strProxy;1656 if (shExpMatch(url, "http*://*.marxist.com*")) return strProxy;1657 if (shExpMatch(url, "http*://*.marxist.net*")) return strProxy;1658 if (shExpMatch(url, "http*://*.marxists.org*")) return strProxy;1659 if (shExpMatch(url, "http*://*.matainja.com*")) return strProxy;1660 if (shExpMatch(url, "http*://*.mathiew-badimon.com*")) return strProxy;1661 if (shExpMatch(url, "http*://*.matsushimakaede.com*")) return strProxy;1662 if (shExpMatch(url, "http*://*.maturejp.com*")) return strProxy;1663 if (shExpMatch(url, "http*://*.mayimayi.com*")) return strProxy;1664 if (shExpMatch(url, "http*://*.mcadforums.com*")) return strProxy;1665 if (shExpMatch(url, "http*://*.mcfog.com*")) return strProxy;1666 if (shExpMatch(url, "http*://*.md-t.org*")) return strProxy;1667 if (shExpMatch(url, "http*://*.md-t.org*")) return strProxy;1668 if (shExpMatch(url, "http*://*.mediafire.com*")) return strProxy;1669 if (shExpMatch(url, "http*://*.meetup.com*")) return strProxy;1670 if (shExpMatch(url, "http*://*.mefeedia.com*")) return strProxy;1671 if (shExpMatch(url, "http*://*.megaporn.com*")) return strProxy;1672 if (shExpMatch(url, "http*://*.megarotic.com*")) return strProxy;1673 if (shExpMatch(url, "http*://*.megavideo.com*")) return strProxy;1674 if (shExpMatch(url, "http*://*.megurineluka.com*")) return strProxy;1675 if (shExpMatch(url, "http*://*.meirixiaochao.com*")) return strProxy;1676 if (shExpMatch(url, "http*://*.melon-peach.com*")) return strProxy;1677 if (shExpMatch(url, "http*://*.memedia.cn*")) return strProxy;1678 if (shExpMatch(url, "http*://*.memehk.com*")) return strProxy;1679 if (shExpMatch(url, "http*://*.memehk.com*")) return strProxy;1680 if (shExpMatch(url, "http*://*.memrijttm.org*")) return strProxy;1681 if (shExpMatch(url, "http*://*.merit-times.com.tw*")) return strProxy;1682 if (shExpMatch(url, "http*://*.mesotw.com*")) return strProxy;1683 if (shExpMatch(url, "http*://*.metacafe.com*")) return strProxy;1684 if (shExpMatch(url, "http*://*.meteorshowersonline.com*")) return strProxy;1685 if (shExpMatch(url, "http*://*.metro.taipei*")) return strProxy;1686 if (shExpMatch(url, "http*://*.metrolife.ca*")) return strProxy;1687 if (shExpMatch(url, "http*://*.mgoon.com*")) return strProxy;1688 if (shExpMatch(url, "http*://*.mgstage.com*")) return strProxy;1689 if (shExpMatch(url, "http*://*.mhradio.org*")) return strProxy;1690 if (shExpMatch(url, "http*://*.michaelanti.com*")) return strProxy;1691 if (shExpMatch(url, "http*://*.michaelmarketl.com*")) return strProxy;1692 if (shExpMatch(url, "http*://*.middle-way.net*")) return strProxy;1693 if (shExpMatch(url, "http*://*.mihk.hk*")) return strProxy;1694 if (shExpMatch(url, "http*://*.mihua.org*")) return strProxy;1695 if (shExpMatch(url, "http*://*.mimivip.com*")) return strProxy;1696 if (shExpMatch(url, "http*://*.minghui.org*")) return strProxy;1697 if (shExpMatch(url, "http*://*.minghui.org*")) return strProxy;1698 if (shExpMatch(url, "http*://*.minghui-a.org*")) return strProxy;1699 if (shExpMatch(url, "http*://*.minghui-b.org*")) return strProxy;1700 if (shExpMatch(url, "http*://*.minghui-school.org*")) return strProxy;1701 if (shExpMatch(url, "http*://*.mingjinglishi.com*")) return strProxy;1702 if (shExpMatch(url, "http*://*.mingjinglishi.com*")) return strProxy;1703 if (shExpMatch(url, "http*://*.mingjingnews.com*")) return strProxy;1704 if (shExpMatch(url, "http*://*.mingpao.com*")) return strProxy;1705 if (shExpMatch(url, "http*://*.mingpaocanada.com*")) return strProxy;1706 if (shExpMatch(url, "http*://*.mingpaomonthly.com*")) return strProxy;1707 if (shExpMatch(url, "http*://*.mingpaonews.com*")) return strProxy;1708 if (shExpMatch(url, "http*://*.mingpaony.com*")) return strProxy;1709 if (shExpMatch(url, "http*://*.mingpaosf.com*")) return strProxy;1710 if (shExpMatch(url, "http*://*.mingpaotor.com*")) return strProxy;1711 if (shExpMatch(url, "http*://*.mingpaovan.com*")) return strProxy;1712 if (shExpMatch(url, "http*://*.mininova.org*")) return strProxy;1713 if (shExpMatch(url, "http*://*.mimivv.com*")) return strProxy;1714 if (shExpMatch(url, "http*://*.minzhuhua.net*")) return strProxy;1715 if (shExpMatch(url, "http*://*.minzhuhua.net*")) return strProxy;1716 if (shExpMatch(url, "http*://*.minzhuzhanxian.com*")) return strProxy;1717 if (shExpMatch(url, "http*://*.minzhuzhongguo.org*")) return strProxy;1718 if (shExpMatch(url, "http*://*.miroguide.com*")) return strProxy;1719 if (shExpMatch(url, "http*://*.mirrorbooks.com*")) return strProxy;1720 if (shExpMatch(url, "http*://*.mitbbs.com*")) return strProxy;1721 if (shExpMatch(url, "http*://*.mixero.com*")) return strProxy;1722 if (shExpMatch(url, "http*://*.mixero.com*")) return strProxy;1723 if (shExpMatch(url, "http*://*.mixpod.com*")) return strProxy;1724 if (shExpMatch(url, "http*://*.mixx.com*")) return strProxy;1725 if (shExpMatch(url, "http*://*.mixx.com*")) return strProxy;1726 if (shExpMatch(url, "http*://*.mizzmona.com*")) return strProxy;1727 if (shExpMatch(url, "http*://*.mk5000.com*")) return strProxy;1728 if (shExpMatch(url, "http*://*.mlcool.com*")) return strProxy;1729 if (shExpMatch(url, "http*://*.mmaaxx.com*")) return strProxy;1730 if (shExpMatch(url, "http*://*.plurktop.mmdays.com*")) return strProxy;1731 if (shExpMatch(url, "http*://*.mmmca.com*")) return strProxy;1732 if (shExpMatch(url, "http*://*.mobatek.net*")) return strProxy;1733 if (shExpMatch(url, "http*://*.mobile01.com*")) return strProxy;1734 if (shExpMatch(url, "http*://*.mobileways.de*")) return strProxy;1735 if (shExpMatch(url, "http*://*.mobypicture.com*")) return strProxy;1736 if (shExpMatch(url, "http*://*.moby.to*")) return strProxy;1737 if (shExpMatch(url, "http*://*.mrdoob.com*")) return strProxy;1738 if (shExpMatch(url, "http*://*.wiki.moegirl.org*")) return strProxy;1739 if (shExpMatch(url, "http*://*.mog.com*")) return strProxy;1740 if (shExpMatch(url, "http*://*.molihua.org*")) return strProxy;1741 if (shExpMatch(url, "http*://*.mondex.org*")) return strProxy;1742 if (shExpMatch(url, "http*://*.monlamit.org*")) return strProxy;1743 if (shExpMatch(url, "http*://*.c1522.mooo.com*")) return strProxy;1744 if (shExpMatch(url, "http*://*.monitorchina.org*")) return strProxy;1745 if (shExpMatch(url, "http*://*.bbs.morbell.com*")) return strProxy;1746 if (shExpMatch(url, "http*://*.morningsun.org*")) return strProxy;1747 if (shExpMatch(url, "http*://*.movabletype.com*")) return strProxy;1748 if (shExpMatch(url, "http*://*.moviefap.com*")) return strProxy;1749 if (shExpMatch(url, "http*://*.moztw.org*")) return strProxy;1750 if (shExpMatch(url, "http*://*.mp3ye.eu*")) return strProxy;1751 if (shExpMatch(url, "http*://*.mpettis.com*")) return strProxy;1752 if (shExpMatch(url, "http*://*.mpfinance.com*")) return strProxy;1753 if (shExpMatch(url, "http*://*.mpinews.com*")) return strProxy;1754 if (shExpMatch(url, "http*://*.mrtweet.com*")) return strProxy;1755 if (shExpMatch(url, "http*://*.mrtweet.com*")) return strProxy;1756 if (shExpMatch(url, "http*://*.news.msn.com.tw*")) return strProxy;1757 if (shExpMatch(url, "http*://*.msguancha.com*")) return strProxy;1758 if (shExpMatch(url, "http*://*.mthruf.com*")) return strProxy;1759 if (shExpMatch(url, "http*://*.multiply.com*")) return strProxy;1760 if (shExpMatch(url, "http*://*.multiproxy.org*")) return strProxy;1761 if (shExpMatch(url, "http*://*.forum.mymaji.com*")) return strProxy;1762 if (shExpMatch(url, "http*://*.multiupload.com*")) return strProxy;1763 if (shExpMatch(url, "http*://*.muouju.com*")) return strProxy;1764 if (shExpMatch(url, "http*://*.muselinks.co.jp*")) return strProxy;1765 if (shExpMatch(url, "http*://*.muzi.com*")) return strProxy;1766 if (shExpMatch(url, "http*://*.muzi.net*")) return strProxy;1767 if (shExpMatch(url, "http*://*.mx981.com*")) return strProxy;1768 if (shExpMatch(url, "http*://*.my-proxy.com*")) return strProxy;1769 if (shExpMatch(url, "http*://*.forum.my903.com*")) return strProxy;1770 if (shExpMatch(url, "http*://*.myactimes.com*")) return strProxy;1771 if (shExpMatch(url, "http*://*.my-addr.com*")) return strProxy;1772 if (shExpMatch(url, "http*://*.myaudiocast.com*")) return strProxy;1773 if (shExpMatch(url, "http*://*.myav.com.tw*")) return strProxy;1774 if (shExpMatch(url, "http*://*.bbs.mychat.to*")) return strProxy;1775 if (shExpMatch(url, "http*://*.mychinamyhome.com*")) return strProxy;1776 if (shExpMatch(url, "http*://*.mychinamyhome.com*")) return strProxy;1777 if (shExpMatch(url, "http*://*.mycould.com*")) return strProxy;1778 if (shExpMatch(url, "http*://*.myeclipseide.com*")) return strProxy;1779 if (shExpMatch(url, "http*://*.myforum.com.hk*")) return strProxy;1780 if (shExpMatch(url, "http*://*.myforum.com.hk*")) return strProxy;1781 if (shExpMatch(url, "http*://*.myforum.com.uk*")) return strProxy;1782 if (shExpMatch(url, "http*://*.myfreshnet.com*")) return strProxy;1783 if (shExpMatch(url, "http*://*.myparagliding.com*")) return strProxy;1784 if (shExpMatch(url, "http*://*.mypopescu.com*")) return strProxy;1785 if (shExpMatch(url, "http*://*.mysinablog.com*")) return strProxy;1786 if (shExpMatch(url, "http*://*.myspace.com*")) return strProxy;1787 if (shExpMatch(url, "http*://*.naacoalition.org*")) return strProxy;1788 if (shExpMatch(url, "http*://*.old.nabble.com*")) return strProxy;1789 if (shExpMatch(url, "http*://*.naitik.net*")) return strProxy;1790 if (shExpMatch(url, "http*://*.namsisi.com*")) return strProxy;1791 if (shExpMatch(url, "http*://*.nanyang.com*")) return strProxy;1792 if (shExpMatch(url, "http*://*.nanyang.com*")) return strProxy;1793 if (shExpMatch(url, "http*://*.nanyangpost.com*")) return strProxy;1794 if (shExpMatch(url, "http*://*.nanyangpost.com*")) return strProxy;1795 if (shExpMatch(url, "http*://*.nanzao.com*")) return strProxy;1796 if (shExpMatch(url, "http*://*.jpl.nasa.gov*")) return strProxy;1797 if (shExpMatch(url, "http*://*.pds.nasa.gov*")) return strProxy;1798 if (shExpMatch(url, "http*://*.navicat.com*")) return strProxy;1799 if (shExpMatch(url, "http*://*.nakido.com*")) return strProxy;1800 if (shExpMatch(url, "http*://*.nakido.com*")) return strProxy;1801 if (shExpMatch(url, "http*://*.naol.ca*")) return strProxy;1802 if (shExpMatch(url, "http*://*.cyberghost.natado.com*")) return strProxy;1803 if (shExpMatch(url, "http*://*.national-lottery.co.uk*")) return strProxy;1804 if (shExpMatch(url, "http*://*.navy.mil*")) return strProxy;1805 if (shExpMatch(url, "http*://*.nccwatch.org.tw*")) return strProxy;1806 if (shExpMatch(url, "http*://*.nch.com.tw*")) return strProxy;1807 if (shExpMatch(url, "http*://*.ncn.org*")) return strProxy;1808 if (shExpMatch(url, "http*://*.ncn.org*")) return strProxy;1809 if (shExpMatch(url, "http*://*.etools.ncol.com*")) return strProxy;1810 if (shExpMatch(url, "http*://*.nde.de*")) return strProxy;1811 if (shExpMatch(url, "http*://*.ndr.de*")) return strProxy;1812 if (shExpMatch(url, "http*://*.ned.org*")) return strProxy;1813 if (shExpMatch(url, "http*://*.nekoslovakia.net*")) return strProxy;1814 if (shExpMatch(url, "http*://*.t.neolee.cn*")) return strProxy;1815 if (shExpMatch(url, "http*://*.netcolony.com*")) return strProxy;1816 if (shExpMatch(url, "http*://*.bolin.netfirms.com*")) return strProxy;1817 if (shExpMatch(url, "http*://*.zh.netlog.com*")) return strProxy;1818 if (shExpMatch(url, "http*://*.netme.cc*")) return strProxy;1819 if (shExpMatch(url, "http*://*.networkedblogs.com*")) return strProxy;1820 if (shExpMatch(url, "http*://*.neverforget8964.org*")) return strProxy;1821 if (shExpMatch(url, "http*://*.new-3lunch.net*")) return strProxy;1822 if (shExpMatch(url, "http*://*.new-akiba.com*")) return strProxy;1823 if (shExpMatch(url, "http*://*.newcenturymc.com*")) return strProxy;1824 if (shExpMatch(url, "http*://*.newcenturymc.com*")) return strProxy;1825 if (shExpMatch(url, "http*://*.newcenturynews.com*")) return strProxy;1826 if (shExpMatch(url, "http*://*.newchen.com*")) return strProxy;1827 if (shExpMatch(url, "http*://*.newchen.com*")) return strProxy;1828 if (shExpMatch(url, "http*://*.newgrounds.com*")) return strProxy;1829 if (shExpMatch(url, "http*://*.newlandmagazine.com.au*")) return strProxy;1830 if (shExpMatch(url, "http*://*.news100.com.tw*")) return strProxy;1831 if (shExpMatch(url, "http*://*.newscn.org*")) return strProxy;1832 if (shExpMatch(url, "http*://*.newscn.org*")) return strProxy;1833 if (shExpMatch(url, "http*://*.newsminer.com*")) return strProxy;1834 if (shExpMatch(url, "http*://*.newspeak.cc*")) return strProxy;1835 if (shExpMatch(url, "http*://*.newsancai.com*")) return strProxy;1836 if (shExpMatch(url, "http*://*.newstapa.org*")) return strProxy;1837 if (shExpMatch(url, "http*://*.newtaiwan.com.tw*")) return strProxy;1838 if (shExpMatch(url, "http*://*.newtalk.tw*")) return strProxy;1839 if (shExpMatch(url, "http*://*.newtalk.tw*")) return strProxy;1840 if (shExpMatch(url, "http*://*.newyorktimes.com*")) return strProxy;1841 if (shExpMatch(url, "http*://*.nexton-net.jp*")) return strProxy;1842 if (shExpMatch(url, "http*://*.nexttv.com.tw*")) return strProxy;1843 if (shExpMatch(url, "http*://*.nga.mil*")) return strProxy;1844 if (shExpMatch(url, "http*://*.ngensis.com*")) return strProxy;1845 if (shExpMatch(url, "http*://*.nicovideo.jp*")) return strProxy;1846 if (shExpMatch(url, "http*://*.nighost.org*")) return strProxy;1847 if (shExpMatch(url, "http*://*.nintendium.com*")) return strProxy;1848 if (shExpMatch(url, "http*://*.dayaarmongol.ning.com*")) return strProxy;1849 if (shExpMatch(url, "http*://*.dayaarmongol.ning.com*")) return strProxy;1850 if (shExpMatch(url, "http*://*.taiwanyes.ning.com*")) return strProxy;1851 if (shExpMatch(url, "http*://*.njactb.org*")) return strProxy;1852 if (shExpMatch(url, "http*://*.njuice.com*")) return strProxy;1853 if (shExpMatch(url, "http*://*.njuice.com*")) return strProxy;1854 if (shExpMatch(url, "http*://*.nlfreevpn.com*")) return strProxy;1855 if (shExpMatch(url, "http*://*.nobel.se*")) return strProxy;1856 if (shExpMatch(url, "http*://*.nobelprize.org*")) return strProxy;1857 if (shExpMatch(url, "http*://*.nobodycanstop.us*")) return strProxy;1858 if (shExpMatch(url, "http*://*.nobodycanstop.us*")) return strProxy;1859 if (shExpMatch(url, "http*://*.nokogiri.org*")) return strProxy;1860 if (shExpMatch(url, "http*://*.nokola.com*")) return strProxy;1861 if (shExpMatch(url, "http*://*.noobbox.com*")) return strProxy;1862 if (shExpMatch(url, "http*://*.novelasia.com*")) return strProxy;1863 if (shExpMatch(url, "http*://*.news.now.com*")) return strProxy;1864 if (shExpMatch(url, "http*://*.nownews.com*")) return strProxy;1865 if (shExpMatch(url, "http*://*.nowtorrents.com*")) return strProxy;1866 if (shExpMatch(url, "http*://*.noypf.com*")) return strProxy;1867 if (shExpMatch(url, "http*://*.noypf.com*")) return strProxy;1868 if (shExpMatch(url, "http*://*.npa.go.jp*")) return strProxy;1869 if (shExpMatch(url, "http*://*.nps.gov*")) return strProxy;1870 if (shExpMatch(url, "http*://*.nrk.no*")) return strProxy;1871 if (shExpMatch(url, "http*://*.nrk.no*")) return strProxy;1872 if (shExpMatch(url, "http*://*.nsc.gov.tw*")) return strProxy;1873 if (shExpMatch(url, "http*://*.ntd.tv*")) return strProxy;1874 if (shExpMatch(url, "http*://*.ntdtv.co*")) return strProxy;1875 if (shExpMatch(url, "http*://*.ntdtv.ca*")) return strProxy;1876 if (shExpMatch(url, "http*://*.ntdtv.org*")) return strProxy;1877 if (shExpMatch(url, "http*://*.ntdtv.ru*")) return strProxy;1878 if (shExpMatch(url, "http*://*.cbs.ntu.edu.tw*")) return strProxy;1879 if (shExpMatch(url, "http*://*.nuexpo.com*")) return strProxy;1880 if (shExpMatch(url, "http*://*.nurgo-software.com*")) return strProxy;1881 if (shExpMatch(url, "http*://*.nuvid.com*")) return strProxy;1882 if (shExpMatch(url, "http*://*.nuzcom.com*")) return strProxy;1883 if (shExpMatch(url, "http*://*.nvquan.org*")) return strProxy;1884 if (shExpMatch(url, "http*://*.nyaa.se*")) return strProxy;1885 if (shExpMatch(url, "http*://*.nydus.ca*")) return strProxy;1886 if (shExpMatch(url, "http*://*.nyt.com*")) return strProxy;1887 if (shExpMatch(url, "http*://*.nytco.com*")) return strProxy;1888 if (shExpMatch(url, "http*://*.nytimes.com*")) return strProxy;1889 if (shExpMatch(url, "http*://*.nytimes.com*")) return strProxy;1890 if (shExpMatch(url, "http*://*.nytimg.com*")) return strProxy;1891 if (shExpMatch(url, "http*://*.nysingtao.com*")) return strProxy;1892 if (shExpMatch(url, "http*://*.nzchinese.net.nz*")) return strProxy;1893 if (shExpMatch(url, "http*://*.observechina.net*")) return strProxy;1894 if (shExpMatch(url, "http*://*.oclp.hk*")) return strProxy;1895 if (shExpMatch(url, "http*://*.october-review.org*")) return strProxy;1896 if (shExpMatch(url, "http*://*.offbeatchina.com*")) return strProxy;1897 if (shExpMatch(url, "http*://*.ogaoga.org*")) return strProxy;1898 if (shExpMatch(url, "http*://*.twtr2src.ogaoga.org*")) return strProxy;1899 if (shExpMatch(url, "http*://*.oikos.com.tw*")) return strProxy;1900 if (shExpMatch(url, "http*://*.oiktv.com*")) return strProxy;1901 if (shExpMatch(url, "http*://*.oizoblog.com*")) return strProxy;1902 if (shExpMatch(url, "http*://*.okayfreedom.com*")) return strProxy;1903 if (shExpMatch(url, "http*://*.old-cat.net*")) return strProxy;1904 if (shExpMatch(url, "http*://*.olumpo.com*")) return strProxy;1905 if (shExpMatch(url, "http*://*.olympicwatch.org*")) return strProxy;1906 if (shExpMatch(url, "http*://*.omgili.com*")) return strProxy;1907 if (shExpMatch(url, "http*://*.omnitalk.com*")) return strProxy;1908 if (shExpMatch(url, "http*://*.omnitalk.org*")) return strProxy;1909 if (shExpMatch(url, "http*://*.cling.omy.sg*")) return strProxy;1910 if (shExpMatch(url, "http*://*.forum.omy.sg*")) return strProxy;1911 if (shExpMatch(url, "http*://*.news.omy.sg*")) return strProxy;1912 if (shExpMatch(url, "http*://*.showbiz.omy.sg*")) return strProxy;1913 if (shExpMatch(url, "http*://*.on.cc*")) return strProxy;1914 if (shExpMatch(url, "http*://*.onedrive.live.com*")) return strProxy;1915 if (shExpMatch(url, "http*://*.onion.city*")) return strProxy;1916 if (shExpMatch(url, "http*://*.onlylady.cn*")) return strProxy;1917 if (shExpMatch(url, "http*://*.onmoon.net*")) return strProxy;1918 if (shExpMatch(url, "http*://*.onmoon.com*")) return strProxy;1919 if (shExpMatch(url, "http*://*.ontrac.com*")) return strProxy;1920 if (shExpMatch(url, "http*://*.oopsforum.com*")) return strProxy;1921 if (shExpMatch(url, "http*://*.open.com.hk*")) return strProxy;1922 if (shExpMatch(url, "http*://*.opendemocracy.net*")) return strProxy;1923 if (shExpMatch(url, "http*://*.myopenid.com*")) return strProxy;1924 if (shExpMatch(url, "http*://*.myopenid.com*")) return strProxy;1925 if (shExpMatch(url, "http*://*.openid.net*")) return strProxy;1926 if (shExpMatch(url, "http*://*.openid.net*")) return strProxy;1927 if (shExpMatch(url, "http*://*.blog.openinkpot.org*")) return strProxy;1928 if (shExpMatch(url, "http*://*.openleaks.org*")) return strProxy;1929 if (shExpMatch(url, "http*://*.openleaks.org*")) return strProxy;1930 if (shExpMatch(url, "http*://*.openvpn.net*")) return strProxy;1931 if (shExpMatch(url, "http*://*.openvpn.net*")) return strProxy;1932 if (shExpMatch(url, "http*://*.openwebster.com*")) return strProxy;1933 if (shExpMatch(url, "http*://*.help.opera.com*")) return strProxy;1934 if (shExpMatch(url, "http*://*.my.opera.com*")) return strProxy;1935 if (shExpMatch(url, "http*://*.demo.opera-mini.net*")) return strProxy;1936 if (shExpMatch(url, "http*://*.opnir.com*")) return strProxy;1937 if (shExpMatch(url, "http*://*.orchidbbs.com*")) return strProxy;1938 if (shExpMatch(url, "http*://*.orient-doll.com*")) return strProxy;1939 if (shExpMatch(url, "http*://*.orientaldaily.com.my*")) return strProxy;1940 if (shExpMatch(url, "http*://*.orientaldaily.com.my*")) return strProxy;1941 if (shExpMatch(url, "http*://*.orn.jp*")) return strProxy;1942 if (shExpMatch(url, "http*://*.t.orzdream.com*")) return strProxy;1943 if (shExpMatch(url, "http*://*.t.orzdream.com*")) return strProxy;1944 if (shExpMatch(url, "http*://*.tui.orzdream.com*")) return strProxy;1945 if (shExpMatch(url, "http*://*.orzistic.org*")) return strProxy;1946 if (shExpMatch(url, "http*://*.osfoora.com*")) return strProxy;1947 if (shExpMatch(url, "http*://*.osmdroid.net*")) return strProxy;1948 if (shExpMatch(url, "http*://*.ourdearamy.com*")) return strProxy;1949 if (shExpMatch(url, "http*://*.oursogo.com*")) return strProxy;1950 if (shExpMatch(url, "http*://*.oursteps.com.au*")) return strProxy;1951 if (shExpMatch(url, "http*://*.xinqimeng.over-blog.com*")) return strProxy;1952 if (shExpMatch(url, "http*://*.share.ovi.com*")) return strProxy;1953 if (shExpMatch(url, "http*://*.owl.li*")) return strProxy;1954 if (shExpMatch(url, "http*://*.ht.ly*")) return strProxy;1955 if (shExpMatch(url, "http*://*.htl.li*")) return strProxy;1956 if (shExpMatch(url, "http*://*.mash.to*")) return strProxy;1957 if (shExpMatch(url, "http*://*.owind.com*")) return strProxy;1958 if (shExpMatch(url, "http*://*.oxid.it*")) return strProxy;1959 if (shExpMatch(url, "http*://*.oyax.com*")) return strProxy;1960 if (shExpMatch(url, "http*://*.ozchinese.com*")) return strProxy;1961 if (shExpMatch(url, "http*://*.ow.ly*")) return strProxy;1962 if (shExpMatch(url, "http*://*.bbs.ozchinese.com*")) return strProxy;1963 if (shExpMatch(url, "http*://*.ozyoyo.com*")) return strProxy;1964 if (shExpMatch(url, "http*://*.pacificpoker.com*")) return strProxy;1965 if (shExpMatch(url, "http*://*.packetix.net*")) return strProxy;1966 if (shExpMatch(url, "http*://*.page2rss.com*")) return strProxy;1967 if (shExpMatch(url, "http*://*.pagodabox.com*")) return strProxy;1968 if (shExpMatch(url, "http*://*.paint.net*")) return strProxy;1969 if (shExpMatch(url, "http*://*.coveringweb.com*")) return strProxy;1970 if (shExpMatch(url, "http*://*.palacemoon.com*")) return strProxy;1971 if (shExpMatch(url, "http*://*.forum.palmislife.com*")) return strProxy;1972 if (shExpMatch(url, "http*://*.paper-replika.com*")) return strProxy;1973 if (shExpMatch(url, "http*://*.eriversoft.com*")) return strProxy;1974 if (shExpMatch(url, "http*://*.paper.li*")) return strProxy;1975 if (shExpMatch(url, "http*://*.paperb.us*")) return strProxy;1976 if (shExpMatch(url, "http*://*.panluan.net*")) return strProxy;1977 if (shExpMatch(url, "http*://*.panluan.net*")) return strProxy;1978 if (shExpMatch(url, "http*://*.pao-pao.net*")) return strProxy;1979 if (shExpMatch(url, "http*://*.parade.com*")) return strProxy;1980 if (shExpMatch(url, "http*://*.passiontimes.hk*")) return strProxy;1981 if (shExpMatch(url, "http*://*.pastebin.com*")) return strProxy;1982 if (shExpMatch(url, "http*://*.pastie.org*")) return strProxy;1983 if (shExpMatch(url, "http*://*.pastie.org*")) return strProxy;1984 if (shExpMatch(url, "http*://*.blog.pathtosharepoint.com*")) return strProxy;1985 if (shExpMatch(url, "http*://*.pbs.org*")) return strProxy;1986 if (shExpMatch(url, "http*://*.pbs.org*")) return strProxy;1987 if (shExpMatch(url, "http*://*.pbwiki.com*")) return strProxy;1988 if (shExpMatch(url, "http*://*.pbworks.com*")) return strProxy;1989 if (shExpMatch(url, "http*://*.developers.box.net*")) return strProxy;1990 if (shExpMatch(url, "http*://*.wiki.oauth.net*")) return strProxy;1991 if (shExpMatch(url, "http*://*.wiki.phonegap.com*")) return strProxy;1992 if (shExpMatch(url, "http*://*.wiki.jqueryui.com*")) return strProxy;1993 if (shExpMatch(url, "http*://*.pbxes.com*")) return strProxy;1994 if (shExpMatch(url, "http*://*.pbxes.org*")) return strProxy;1995 if (shExpMatch(url, "http*://*.pcdiscuss.com*")) return strProxy;1996 if (shExpMatch(url, "http*://*.pcdvd.com.tw*")) return strProxy;1997 if (shExpMatch(url, "http*://*.pchome.com.tw*")) return strProxy;1998 if (shExpMatch(url, "http*://*.pcij.org*")) return strProxy;1999 if (shExpMatch(url, "http*://*.pct.org.tw*")) return strProxy;2000 if (shExpMatch(url, "http*://*.pdetails.com*")) return strProxy;2001 if (shExpMatch(url, "http*://*.pdproxy.com*")) return strProxy;2002 if (shExpMatch(url, "http*://*.peacefire.org*")) return strProxy;2003 if (shExpMatch(url, "http*://*.peacehall.com*")) return strProxy;2004 if (shExpMatch(url, "http*://*.peeasian.com*")) return strProxy;2005 if (shExpMatch(url, "http*://*.pekingduck.org*")) return strProxy;2006 if (shExpMatch(url, "http*://*.pekingduck.org*")) return strProxy;2007 if (shExpMatch(url, "http*://*.penchinese.com*")) return strProxy;2008 if (shExpMatch(url, "http*://*.penchinese.net*")) return strProxy;2009 if (shExpMatch(url, "http*://*.penchinese.net*")) return strProxy;2010 if (shExpMatch(url, "http*://*.pengyulong.com*")) return strProxy;2011 if (shExpMatch(url, "http*://*.blog.pentalogic.net*")) return strProxy;2012 if (shExpMatch(url, "http*://*.penthouse.com*")) return strProxy;2013 if (shExpMatch(url, "http*://*.peopo.org*")) return strProxy;2014 if (shExpMatch(url, "http*://*.peopo.org*")) return strProxy;2015 if (shExpMatch(url, "http*://*.percy.in*")) return strProxy;2016 if (shExpMatch(url, "http*://*.perfectgirls.net*")) return strProxy;2017 if (shExpMatch(url, "http*://*.perfectvpn.net*")) return strProxy;2018 if (shExpMatch(url, "http*://*.perfspot.com*")) return strProxy;2019 if (shExpMatch(url, "http*://*.perlhowto.com*")) return strProxy;2020 if (shExpMatch(url, "http*://*.philly.com*")) return strProxy;2021 if (shExpMatch(url, "http*://*.photofocus.com*")) return strProxy;2022 if (shExpMatch(url, "http*://*.phuquocservices.com*")) return strProxy;2023 if (shExpMatch(url, "http*://*.picidae.net*")) return strProxy;2024 if (shExpMatch(url, "http*://*.picturesocial.com*")) return strProxy;2025 if (shExpMatch(url, "http*://*.pidown.com*")) return strProxy;2026 if (shExpMatch(url, "http*://*.pign.net*")) return strProxy;2027 if (shExpMatch(url, "http*://*.blog.pilotmoon.com*")) return strProxy;2028 if (shExpMatch(url, "http*://*.pin6.com*")) return strProxy;2029 if (shExpMatch(url, "http*://*.pin6.com*")) return strProxy;2030 if (shExpMatch(url, "http*://*.ping.fm*")) return strProxy;2031 if (shExpMatch(url, "http*://*.ping.fm*")) return strProxy;2032 if (shExpMatch(url, "http*://*.pinoy-n.com*")) return strProxy;2033 if (shExpMatch(url, "http*://*.piposay.com*")) return strProxy;2034 if (shExpMatch(url, "http*://*.piring.com*")) return strProxy;2035 if (shExpMatch(url, "http*://*.pixelqi.com*")) return strProxy;2036 if (shExpMatch(url, "http*://*.css.pixnet.in*")) return strProxy;2037 if (shExpMatch(url, "http*://*.pixnet.net*")) return strProxy;2038 if (shExpMatch(url, "http*://*.pixnet.net*")) return strProxy;2039 if (shExpMatch(url, "http*://*.pk.com*")) return strProxy;2040 if (shExpMatch(url, "http*://*.placemix.com*")) return strProxy;2041 if (shExpMatch(url, "http*://*.pictures.playboy.com*")) return strProxy;2042 if (shExpMatch(url, "http*://*.playboy.com*")) return strProxy;2043 if (shExpMatch(url, "http*://*.playpcesor.com*")) return strProxy;2044 if (shExpMatch(url, "http*://*.plays.com.tw*")) return strProxy;2045 if (shExpMatch(url, "http*://*.m.plixi.com*")) return strProxy;2046 if (shExpMatch(url, "http*://*.plm.org.hk*")) return strProxy;2047 if (shExpMatch(url, "http*://*.plunder.com*")) return strProxy;2048 if (shExpMatch(url, "http*://*.plus28.com*")) return strProxy;2049 if (shExpMatch(url, "http*://*.plusbb.com*")) return strProxy;2050 if (shExpMatch(url, "http*://*.pmates.com*")) return strProxy;2051 if (shExpMatch(url, "http*://*.po2b.com*")) return strProxy;2052 if (shExpMatch(url, "http*://*.podictionary.com*")) return strProxy;2053 if (shExpMatch(url, "http*://*.pokerstars.com*")) return strProxy;2054 if (shExpMatch(url, "http*://*.pokerstars.com*")) return strProxy;2055 if (shExpMatch(url, "http*://*.zh.pokerstrategy.com*")) return strProxy;2056 if (shExpMatch(url, "http*://*.politicalchina.org*")) return strProxy;2057 if (shExpMatch(url, "http*://*.popvote.hk*")) return strProxy;2058 if (shExpMatch(url, "http*://*.popyard.com*")) return strProxy;2059 if (shExpMatch(url, "http*://*.popyard.org*")) return strProxy;2060 if (shExpMatch(url, "http*://*.porn.com*")) return strProxy;2061 if (shExpMatch(url, "http*://*.porn2.com*")) return strProxy;2062 if (shExpMatch(url, "http*://*.pornbase.org*")) return strProxy;2063 if (shExpMatch(url, "http*://*.pornhd.com*")) return strProxy;2064 if (shExpMatch(url, "http*://*.pornhub.com*")) return strProxy;2065 if (shExpMatch(url, "http*://*.pornmm.net*")) return strProxy;2066 if (shExpMatch(url, "http*://*.pornoxo.com*")) return strProxy;2067 if (shExpMatch(url, "http*://*.pornrapidshare.com*")) return strProxy;2068 if (shExpMatch(url, "http*://*.pornrapidshare.com*")) return strProxy;2069 if (shExpMatch(url, "http*://*.pornstarclub.com*")) return strProxy;2070 if (shExpMatch(url, "http*://*.porntube.com*")) return strProxy;2071 if (shExpMatch(url, "http*://*.pornvisit.com*")) return strProxy;2072 if (shExpMatch(url, "http*://*.portablevpn.nl*")) return strProxy;2073 if (shExpMatch(url, "http*://*.post852.com*")) return strProxy;2074 if (shExpMatch(url, "http*://*.postadult.com*")) return strProxy;2075 if (shExpMatch(url, "http*://*.powercx.com*")) return strProxy;2076 if (shExpMatch(url, "http*://*.powerpointninja.com*")) return strProxy;2077 if (shExpMatch(url, "http*://*.cdn.printfriendly.com*")) return strProxy;2078 if (shExpMatch(url, "http*://*.pts.org.tw*")) return strProxy;2079 if (shExpMatch(url, "http*://*.pubu.com.tw*")) return strProxy;2080 if (shExpMatch(url, "http*://*.puffinbrowser.com*")) return strProxy;2081 if (shExpMatch(url, "http*://*.putty.org*")) return strProxy;2082 if (shExpMatch(url, "http*://*.post.ly*")) return strProxy;2083 if (shExpMatch(url, "http*://*.posterous.com*")) return strProxy;2084 if (shExpMatch(url, "http*://*.posterous.com*")) return strProxy;2085 if (shExpMatch(url, "http*://*.post.anyu.org*")) return strProxy;2086 if (shExpMatch(url, "http*://*.bralio.com*")) return strProxy;2087 if (shExpMatch(url, "http*://*.calebelston.com*")) return strProxy;2088 if (shExpMatch(url, "http*://*.designerol.com*")) return strProxy;2089 if (shExpMatch(url, "http*://*.blog.fizzik.com*")) return strProxy;2090 if (shExpMatch(url, "http*://*.nf.id.au*")) return strProxy;2091 if (shExpMatch(url, "http*://*.markmilian.com*")) return strProxy;2092 if (shExpMatch(url, "http*://*.log.riku.me*")) return strProxy;2093 if (shExpMatch(url, "http*://*.sogrady.me*")) return strProxy;2094 if (shExpMatch(url, "http*://*.vatn.org*")) return strProxy;2095 if (shExpMatch(url, "http*://*.veempiire.com*")) return strProxy;2096 if (shExpMatch(url, "http*://*.vegorpedersen.com*")) return strProxy;2097 if (shExpMatch(url, "http*://*.ventureswell.com*")) return strProxy;2098 if (shExpMatch(url, "http*://*.webfee.tk*")) return strProxy;2099 if (shExpMatch(url, "http*://*.whereiswerner.com*")) return strProxy;2100 if (shExpMatch(url, "http*://*.bill.zhong.pp.ru*")) return strProxy;2101 if (shExpMatch(url, "http*://*.power.com*")) return strProxy;2102 if (shExpMatch(url, "http*://*.power.com*")) return strProxy;2103 if (shExpMatch(url, "http*://*.powerapple.com*")) return strProxy;2104 if (shExpMatch(url, "http*://*.abc.pp.ru*")) return strProxy;2105 if (shExpMatch(url, "http*://*.heix.pp.ru*")) return strProxy;2106 if (shExpMatch(url, "http*://*.prayforchina.net*")) return strProxy;2107 if (shExpMatch(url, "http*://*.premeforwindows7.com*")) return strProxy;2108 if (shExpMatch(url, "http*://*.presentationzen.com*")) return strProxy;2109 if (shExpMatch(url, "http*://*.prestige-av.com*")) return strProxy;2110 if (shExpMatch(url, "http*://*.pritunl.com*")) return strProxy;2111 if (shExpMatch(url, "http*://*.privacybox.de*")) return strProxy;2112 if (shExpMatch(url, "http*://*.privateinternetaccess.com*")) return strProxy;2113 if (shExpMatch(url, "http*://*.privatepaste.com*")) return strProxy;2114 if (shExpMatch(url, "http*://*.privatepaste.com*")) return strProxy;2115 if (shExpMatch(url, "http*://*.privatetunnel.com*")) return strProxy;2116 if (shExpMatch(url, "http*://*.privatetunnel.com*")) return strProxy;2117 if (shExpMatch(url, "http*://*.procopytips.com*")) return strProxy;2118 if (shExpMatch(url, "http*://*.provideocoalition.com*")) return strProxy;2119 if (shExpMatch(url, "http*://*.prosiben.de*")) return strProxy;2120 if (shExpMatch(url, "http*://*.proxifier.com*")) return strProxy;2121 if (shExpMatch(url, "http*://*.api.proxlet.com*")) return strProxy;2122 if (shExpMatch(url, "http*://*.proxomitron.info*")) return strProxy;2123 if (shExpMatch(url, "http*://*.proxy.org*")) return strProxy;2124 if (shExpMatch(url, "http*://*.proxypy.net*")) return strProxy;2125 if (shExpMatch(url, "http*://*.proxypy.net*")) return strProxy;2126 if (shExpMatch(url, "http*://*.proxyroad.com*")) return strProxy;2127 if (shExpMatch(url, "http*://*.prozz.net*")) return strProxy;2128 if (shExpMatch(url, "http*://*.psblog.name*")) return strProxy;2129 if (shExpMatch(url, "http*://*.psblog.name*")) return strProxy;2130 if (shExpMatch(url, "http*://*.psiphon.ca*")) return strProxy;2131 if (shExpMatch(url, "http*://*.ptt.cc*")) return strProxy;2132 if (shExpMatch(url, "http*://*.puffstore.com*")) return strProxy;2133 if (shExpMatch(url, "http*://*.pullfolio.com*")) return strProxy;2134 if (shExpMatch(url, "http*://*.pureconcepts.net*")) return strProxy;2135 if (shExpMatch(url, "http*://*.purepdf.com*")) return strProxy;2136 if (shExpMatch(url, "http*://*.purevpn.com*")) return strProxy;2137 if (shExpMatch(url, "http*://*.putlocker.com*")) return strProxy;2138 if (shExpMatch(url, "http*://*.pwned.com*")) return strProxy;2139 if (shExpMatch(url, "http*://*.python.com*")) return strProxy;2140 if (shExpMatch(url, "http*://*.python.com.tw*")) return strProxy;2141 if (shExpMatch(url, "http*://*.python.com.tw*")) return strProxy;2142 if (shExpMatch(url, "http*://*.qanote.com*")) return strProxy;2143 if (shExpMatch(url, "http*://*.qanote.com*")) return strProxy;2144 if (shExpMatch(url, "http*://*.qi-gong.me*")) return strProxy;2145 if (shExpMatch(url, "http*://*.qidian.ca*")) return strProxy;2146 if (shExpMatch(url, "http*://*.qienkuen.org*")) return strProxy;2147 if (shExpMatch(url, "http*://*.qienkuen.org*")) return strProxy;2148 if (shExpMatch(url, "http*://*.qiwen.lu*")) return strProxy;2149 if (shExpMatch(url, "http*://*.qixianglu.cn*")) return strProxy;2150 if (shExpMatch(url, "http*://*.bbs.qmzdd.com*")) return strProxy;2151 if (shExpMatch(url, "http*://*.qkshare.com*")) return strProxy;2152 if (shExpMatch(url, "http*://*.qoos.com*")) return strProxy;2153 if (shExpMatch(url, "http*://*.qoos.com*")) return strProxy;2154 if (shExpMatch(url, "http*://*.blog.qooza.hk*")) return strProxy;2155 if (shExpMatch(url, "http*://*.efksoft.com*")) return strProxy;2156 if (shExpMatch(url, "http*://*.qstatus.com*")) return strProxy;2157 if (shExpMatch(url, "http*://*.qtweeter.com*")) return strProxy;2158 if (shExpMatch(url, "http*://*.qtrac.eu*")) return strProxy;2159 if (shExpMatch(url, "http*://*.quitccp.net*")) return strProxy;2160 if (shExpMatch(url, "http*://*.quitccp.net*")) return strProxy;2161 if (shExpMatch(url, "http*://*.quitccp.org*")) return strProxy;2162 if (shExpMatch(url, "http*://*.quitccp.org*")) return strProxy;2163 if (shExpMatch(url, "http*://*.quran.com*")) return strProxy;2164 if (shExpMatch(url, "http*://*.qusi8.net*")) return strProxy;2165 if (shExpMatch(url, "http*://*.qvodzy.org*")) return strProxy;2166 if (shExpMatch(url, "http*://*.nemesis2.qx.net*")) return strProxy;2167 if (shExpMatch(url, "http*://*.qxbbs.org*")) return strProxy;2168 if (shExpMatch(url, "http*://*.radicalparty.org*")) return strProxy;2169 if (shExpMatch(url, "http*://*.radioaustralia.net.au*")) return strProxy;2170 if (shExpMatch(url, "http*://*.opml.radiotime.com*")) return strProxy;2171 if (shExpMatch(url, "http*://*.radiovaticana.org*")) return strProxy;2172 if (shExpMatch(url, "http*://*.radiovncr.com*")) return strProxy;2173 if (shExpMatch(url, "http*://*.raidcall.com.tw*")) return strProxy;2174 if (shExpMatch(url, "http*://*.raidtalk.com.tw*")) return strProxy;2175 if (shExpMatch(url, "http*://*.rangzen.org*")) return strProxy;2176 if (shExpMatch(url, "http*://*.blog.ranxiang.com*")) return strProxy;2177 if (shExpMatch(url, "http*://*.ranyunfei.com*")) return strProxy;2178 if (shExpMatch(url, "http*://*.ranyunfei.com*")) return strProxy;2179 if (shExpMatch(url, "http*://*.rapbull.net*")) return strProxy;2180 if (shExpMatch(url, "http*://*.rapidgator.net*")) return strProxy;2181 if (shExpMatch(url, "http*://*.rapidshare8.com*")) return strProxy;2182 if (shExpMatch(url, "http*://*.rapidsharedata.com*")) return strProxy;2183 if (shExpMatch(url, "http*://*.rcinet.ca*")) return strProxy;2184 if (shExpMatch(url, "http*://*.read100.com*")) return strProxy;2185 if (shExpMatch(url, "http*://*.readingtimes.com.tw*")) return strProxy;2186 if (shExpMatch(url, "http*://*.readingtimes.com.tw*")) return strProxy;2187 if (shExpMatch(url, "http*://*.readmoo.com*")) return strProxy;2188 if (shExpMatch(url, "http*://*.realraptalk.com*")) return strProxy;2189 if (shExpMatch(url, "http*://*.recordhistory.org*")) return strProxy;2190 if (shExpMatch(url, "http*://*.redchinacn.org*")) return strProxy;2191 if (shExpMatch(url, "http*://*.redtube.com*")) return strProxy;2192 if (shExpMatch(url, "http*://*.referer.us*")) return strProxy;2193 if (shExpMatch(url, "http*://*.referer.us*")) return strProxy;2194 if (shExpMatch(url, "http*://*.reflectivecode.com*")) return strProxy;2195 if (shExpMatch(url, "http*://*.relaxbbs.com*")) return strProxy;2196 if (shExpMatch(url, "http*://*.renminbao.com*")) return strProxy;2197 if (shExpMatch(url, "http*://*.renyurenquan.org*")) return strProxy;2198 if (shExpMatch(url, "http*://*.renyurenquan.org*")) return strProxy;2199 if (shExpMatch(url, "http*://*.certificate.revocationcheck.com*")) return strProxy;2200 if (shExpMatch(url, "http*://*.subacme.rerouted.org*")) return strProxy;2201 if (shExpMatch(url, "http*://*.reuters.com*")) return strProxy;2202 if (shExpMatch(url, "http*://*.revleft.com*")) return strProxy;2203 if (shExpMatch(url, "http*://*.retweetist.com*")) return strProxy;2204 if (shExpMatch(url, "http*://*.retweetrank.com*")) return strProxy;2205 if (shExpMatch(url, "http*://*.revver.com*")) return strProxy;2206 if (shExpMatch(url, "http*://*.rfa.org*")) return strProxy;2207 if (shExpMatch(url, "http*://*.rfachina.com*")) return strProxy;2208 if (shExpMatch(url, "http*://*.rfamobile.org*")) return strProxy;2209 if (shExpMatch(url, "http*://*.rferl.org*")) return strProxy;2210 if (shExpMatch(url, "http*://*.rfi.fr*")) return strProxy;2211 if (shExpMatch(url, "http*://*.rfi.fr*")) return strProxy;2212 if (shExpMatch(url, "http*://*.rfi.my*")) return strProxy;2213 if (shExpMatch(url, "http*://*.rhcloud.com*")) return strProxy;2214 if (shExpMatch(url, "http*://*.vds.rightster.com*")) return strProxy;2215 if (shExpMatch(url, "http*://*.rileyguide.com*")) return strProxy;2216 if (shExpMatch(url, "http*://*.riku.me*")) return strProxy;2217 if (shExpMatch(url, "http*://*.ritouki.jp*")) return strProxy;2218 if (shExpMatch(url, "http*://*.rlwlw.com*")) return strProxy;2219 if (shExpMatch(url, "http*://*.rlwlw.com*")) return strProxy;2220 if (shExpMatch(url, "http*://*.rmjdw.com*")) return strProxy;2221 if (shExpMatch(url, "http*://*.chinese.rnw.nl*")) return strProxy;2222 if (shExpMatch(url, "http*://*.rnw.nl*")) return strProxy;2223 if (shExpMatch(url, "http*://*.robtex.com*")) return strProxy;2224 if (shExpMatch(url, "http*://*.robustnessiskey.com*")) return strProxy;2225 if (shExpMatch(url, "http*://*.www2.rocketbbs.com*")) return strProxy;2226 if (shExpMatch(url, "http*://*.www2.rocketbbs.com*")) return strProxy;2227 if (shExpMatch(url, "http*://*.rocmp.org*")) return strProxy;2228 if (shExpMatch(url, "http*://*.rojo.com*")) return strProxy;2229 if (shExpMatch(url, "http*://*.ronjoneswriter.com*")) return strProxy;2230 if (shExpMatch(url, "http*://*.roodo.com*")) return strProxy;2231 if (shExpMatch(url, "http*://*.rosechina.net*")) return strProxy;2232 if (shExpMatch(url, "http*://*.rotten.com*")) return strProxy;2233 if (shExpMatch(url, "http*://*.rsf.org*")) return strProxy;2234 if (shExpMatch(url, "http*://*.rsf.org*")) return strProxy;2235 if (shExpMatch(url, "http*://*.rsf-chinese.org*")) return strProxy;2236 if (shExpMatch(url, "http*://*.rsf-chinese.org*")) return strProxy;2237 if (shExpMatch(url, "http*://*.rssmeme.com*")) return strProxy;2238 if (shExpMatch(url, "http*://*.rssmeme.com*")) return strProxy;2239 if (shExpMatch(url, "http*://*.rthk.hk*")) return strProxy;2240 if (shExpMatch(url, "http*://*.rthk.hk*")) return strProxy;2241 if (shExpMatch(url, "http*://*.rthk.org.hk*")) return strProxy;2242 if (shExpMatch(url, "http*://*.rthk.org.hk*")) return strProxy;2243 if (shExpMatch(url, "http*://*.rti.org.tw*")) return strProxy;2244 if (shExpMatch(url, "http*://*.ruanyifeng.com*")) return strProxy;2245 if (shExpMatch(url, "http*://*.rushbee.com*")) return strProxy;2246 if (shExpMatch(url, "http*://*.rutube.ru*")) return strProxy;2247 if (shExpMatch(url, "http*://*.ruyiseek.com*")) return strProxy;2248 if (shExpMatch(url, "http*://*.rxhj.net*")) return strProxy;2249 if (shExpMatch(url, "http*://*.rxhj.net*")) return strProxy;2250 if (shExpMatch(url, "http*://*.s-cute.com*")) return strProxy;2251 if (shExpMatch(url, "http*://*.s-dragon.org*")) return strProxy;2252 if (shExpMatch(url, "http*://*.s1heng.com*")) return strProxy;2253 if (shExpMatch(url, "http*://*.s4miniarchive.com*")) return strProxy;2254 if (shExpMatch(url, "http*://*.s8forum.com*")) return strProxy;2255 if (shExpMatch(url, "http*://*.sacom.hk*")) return strProxy;2256 if (shExpMatch(url, "http*://*.sacom.hk*")) return strProxy;2257 if (shExpMatch(url, "http*://*.sadpanda.us*")) return strProxy;2258 if (shExpMatch(url, "http*://*.saiq.me*")) return strProxy;2259 if (shExpMatch(url, "http*://*.saiq.me*")) return strProxy;2260 if (shExpMatch(url, "http*://*.salvation.org.hk*")) return strProxy;2261 if (shExpMatch(url, "http*://*.salvation.org.hk*")) return strProxy;2262 if (shExpMatch(url, "http*://*.samair.ru*")) return strProxy;2263 if (shExpMatch(url, "http*://*.sammyjs.org*")) return strProxy;2264 if (shExpMatch(url, "http*://*.sandnoble.com*")) return strProxy;2265 if (shExpMatch(url, "http*://*.sankaizok.com*")) return strProxy;2266 if (shExpMatch(url, "http*://*.sanmin.com.tw*")) return strProxy;2267 if (shExpMatch(url, "http*://*.sapikachu.net*")) return strProxy;2268 if (shExpMatch(url, "http*://*.savemedia.com*")) return strProxy;2269 if (shExpMatch(url, "http*://*.savetibet.de*")) return strProxy;2270 if (shExpMatch(url, "http*://*.savetibet.fr*")) return strProxy;2271 if (shExpMatch(url, "http*://*.savetibet.nl*")) return strProxy;2272 if (shExpMatch(url, "http*://*.savetibet.org*")) return strProxy;2273 if (shExpMatch(url, "http*://*.savetibet.ru*")) return strProxy;2274 if (shExpMatch(url, "http*://*.savevid.com*")) return strProxy;2275 if (shExpMatch(url, "http*://*.say2.info*")) return strProxy;2276 if (shExpMatch(url, "http*://*.sciencemag.org*")) return strProxy;2277 if (shExpMatch(url, "http*://*.scmp.com*")) return strProxy;2278 if (shExpMatch(url, "http*://*.scmpchinese.com*")) return strProxy;2279 if (shExpMatch(url, "http*://*.scribd.com*")) return strProxy;2280 if (shExpMatch(url, "http*://*.scriptspot.com*")) return strProxy;2281 if (shExpMatch(url, "http*://*.seapuff.com*")) return strProxy;2282 if (shExpMatch(url, "http*://*.domainhelp.search.com*")) return strProxy;2283 if (shExpMatch(url, "http*://*.secretchina.com*")) return strProxy;2284 if (shExpMatch(url, "http*://*.secretgarden.no*")) return strProxy;2285 if (shExpMatch(url, "http*://*.default.secureserver.net*")) return strProxy;2286 if (shExpMatch(url, "http*://*.securitykiss.com*")) return strProxy;2287 if (shExpMatch(url, "http*://*.seesmic.com*")) return strProxy;2288 if (shExpMatch(url, "http*://*.seevpn.com*")) return strProxy;2289 if (shExpMatch(url, "http*://*.seezone.net*")) return strProxy;2290 if (shExpMatch(url, "http*://*.sejie.com*")) return strProxy;2291 if (shExpMatch(url, "http*://*.sendspace.com*")) return strProxy;2292 if (shExpMatch(url, "http*://*.tweets.seraph.me*")) return strProxy;2293 if (shExpMatch(url, "http*://*.sesawe.net*")) return strProxy;2294 if (shExpMatch(url, "http*://*.sesawe.net*")) return strProxy;2295 if (shExpMatch(url, "http*://*.sesawe.org*")) return strProxy;2296 if (shExpMatch(url, "http*://*.sethwklein.net*")) return strProxy;2297 if (shExpMatch(url, "http*://*.forum.setty.com.tw*")) return strProxy;2298 if (shExpMatch(url, "http*://*.sevenload.com*")) return strProxy;2299 if (shExpMatch(url, "http*://*.sevenload.com*")) return strProxy;2300 if (shExpMatch(url, "http*://*.sex.com*")) return strProxy;2301 if (shExpMatch(url, "http*://*.sex-11.com*")) return strProxy;2302 if (shExpMatch(url, "http*://*.sex3.com*")) return strProxy;2303 if (shExpMatch(url, "http*://*.sex8.cc*")) return strProxy;2304 if (shExpMatch(url, "http*://*.sexandsubmission.com*")) return strProxy;2305 if (shExpMatch(url, "http*://*.sexhu.com*")) return strProxy;2306 if (shExpMatch(url, "http*://*.sexhuang.com*")) return strProxy;2307 if (shExpMatch(url, "http*://*.sexinsex.net*")) return strProxy;2308 if (shExpMatch(url, "http*://*.sexinsex.net*")) return strProxy;2309 if (shExpMatch(url, "http*://*.67.220.91.18*")) return strProxy;2310 if (shExpMatch(url, "http*://*.67.220.91.23*")) return strProxy;2311 if (shExpMatch(url, "http*://*.sfileydy.com*")) return strProxy;2312 if (shExpMatch(url, "http*://*.sftuk.org*")) return strProxy;2313 if (shExpMatch(url, "http*://*.sftuk.org*")) return strProxy;2314 if (shExpMatch(url, "http*://*.shadow.ma*")) return strProxy;2315 if (shExpMatch(url, "http*://*.shadowsocks.org*")) return strProxy;2316 if (shExpMatch(url, "http*://*.shahamat-english.com*")) return strProxy;2317 if (shExpMatch(url, "http*://*.shangfang.org*")) return strProxy;2318 if (shExpMatch(url, "http*://*.shangfang.org*")) return strProxy;2319 if (shExpMatch(url, "http*://*.shapeservices.com*")) return strProxy;2320 if (shExpMatch(url, "http*://*.sharebee.com*")) return strProxy;2321 if (shExpMatch(url, "http*://*.sharecool.org*")) return strProxy;2322 if (shExpMatch(url, "http*://*.sharkdolphin.com*")) return strProxy;2323 if (shExpMatch(url, "http*://*.sharpdaily.com.hk*")) return strProxy;2324 if (shExpMatch(url, "http*://*.sharpdaily.com.hk*")) return strProxy;2325 if (shExpMatch(url, "http*://*.sharpdaily.hk*")) return strProxy;2326 if (shExpMatch(url, "http*://*.shaunthesheep.com*")) return strProxy;2327 if (shExpMatch(url, "http*://*.shaunthesheep.com*")) return strProxy;2328 if (shExpMatch(url, "http*://*.sheikyermami.com*")) return strProxy;2329 if (shExpMatch(url, "http*://*.shellmix.com*")) return strProxy;2330 if (shExpMatch(url, "http*://*.shenshou.org*")) return strProxy;2331 if (shExpMatch(url, "http*://*.shenyunperformingarts.org*")) return strProxy;2332 if (shExpMatch(url, "http*://*.shenzhoufilm.com*")) return strProxy;2333 if (shExpMatch(url, "http*://*.shenzhoufilm.com*")) return strProxy;2334 if (shExpMatch(url, "http*://*.shinychan.com*")) return strProxy;2335 if (shExpMatch(url, "http*://*.shitaotv.org*")) return strProxy;2336 if (shExpMatch(url, "http*://*.shixiao.org*")) return strProxy;2337 if (shExpMatch(url, "http*://*.shizhao.org*")) return strProxy;2338 if (shExpMatch(url, "http*://*.shizhao.org*")) return strProxy;2339 if (shExpMatch(url, "http*://*.shkspr.mobi*")) return strProxy;2340 if (shExpMatch(url, "http*://*.shodanhq.com*")) return strProxy;2341 if (shExpMatch(url, "http*://*.shopping.com*")) return strProxy;2342 if (shExpMatch(url, "http*://*.showtime.jp*")) return strProxy;2343 if (shExpMatch(url, "http*://*.ch.shvoong.com*")) return strProxy;2344 if (shExpMatch(url, "http*://*.shwchurch3.com*")) return strProxy;2345 if (shExpMatch(url, "http*://*.shwchurch3.com*")) return strProxy;2346 if (shExpMatch(url, "http*://*.sidelinesnews.com*")) return strProxy;2347 if (shExpMatch(url, "http*://*.sidelinessportseatery.com*")) return strProxy;2348 if (shExpMatch(url, "http*://*.simplecd.org*")) return strProxy;2349 if (shExpMatch(url, "http*://*.simplecd.org*")) return strProxy;2350 if (shExpMatch(url, "http*://*.simpleproductivityblog.com*")) return strProxy;2351 if (shExpMatch(url, "http*://*.bbs.sina.com*")) return strProxy;2352 if (shExpMatch(url, "http*://*.bbs.sina.com%2F*")) return strProxy;2353 if (shExpMatch(url, "http*://*.blog.sina.com.tw*")) return strProxy;2354 if (shExpMatch(url, "http*://*.dailynews.sina.com*")) return strProxy;2355 if (shExpMatch(url, "http*://*.dailynews.sina.com%2F*")) return strProxy;2356 if (shExpMatch(url, "http*://*.forum.sina.com.hk*")) return strProxy;2357 if (shExpMatch(url, "http*://*.home.sina.com*")) return strProxy;2358 if (shExpMatch(url, "http*://*.magazines.sina.com.tw*")) return strProxy;2359 if (shExpMatch(url, "http*://*.news.sina.com.hk*")) return strProxy;2360 if (shExpMatch(url, "http*://*.news.sina.com.tw*")) return strProxy;2361 if (shExpMatch(url, "http*://*.news.sinchew.com.my*")) return strProxy;2362 if (shExpMatch(url, "http*://*.singtao.com*")) return strProxy;2363 if (shExpMatch(url, "http*://*.singtao.com*")) return strProxy;2364 if (shExpMatch(url, "http*://*.news.singtao.ca*")) return strProxy;2365 if (shExpMatch(url, "http*://*.cdp.sinica.edu.tw*")) return strProxy;2366 if (shExpMatch(url, "http*://*.sino-monthly.com*")) return strProxy;2367 if (shExpMatch(url, "http*://*.sinocast.com*")) return strProxy;2368 if (shExpMatch(url, "http*://*.sinocism.com*")) return strProxy;2369 if (shExpMatch(url, "http*://*.sinomontreal.ca*")) return strProxy;2370 if (shExpMatch(url, "http*://*.sinonet.ca*")) return strProxy;2371 if (shExpMatch(url, "http*://*.sinopitt.info*")) return strProxy;2372 if (shExpMatch(url, "http*://*.sinoants.com*")) return strProxy;2373 if (shExpMatch(url, "http*://*.sinoants.com*")) return strProxy;2374 if (shExpMatch(url, "http*://*.sinoquebec.com*")) return strProxy;2375 if (shExpMatch(url, "http*://*.site90.net*")) return strProxy;2376 if (shExpMatch(url, "http*://*.sitebro.tw*")) return strProxy;2377 if (shExpMatch(url, "http*://*.siteks.uk.to*")) return strProxy;2378 if (shExpMatch(url, "http*://*.sitemaps.org*")) return strProxy;2379 if (shExpMatch(url, "http*://*.sitetag.us*")) return strProxy;2380 if (shExpMatch(url, "http*://*.sis.xxx*")) return strProxy;2381 if (shExpMatch(url, "http*://*.sis001.com*")) return strProxy;2382 if (shExpMatch(url, "http*://*.sis001.us*")) return strProxy;2383 if (shExpMatch(url, "http*://*.sjum.cn*")) return strProxy;2384 if (shExpMatch(url, "http*://*.skimtube.com*")) return strProxy;2385 if (shExpMatch(url, "http*://*.skybet.com*")) return strProxy;2386 if (shExpMatch(url, "http*://*.skyhighpremium.com*")) return strProxy;2387 if (shExpMatch(url, "http*://*.bbs.skykiwi.com*")) return strProxy;2388 if (shExpMatch(url, "http*://*.skype.com*")) return strProxy;2389 if (shExpMatch(url, "http*://*.skype.com*")) return strProxy;2390 if (shExpMatch(url, "http*://*.skyvegas.com*")) return strProxy;2391 if (shExpMatch(url, "http*://*.xskywalker.com*")) return strProxy;2392 if (shExpMatch(url, "http*://*.xskywalker.com*")) return strProxy;2393 if (shExpMatch(url, "http*://*.m.slandr.net*")) return strProxy;2394 if (shExpMatch(url, "http*://*.slavasoft.com*")) return strProxy;2395 if (shExpMatch(url, "http*://*.slheng.com*")) return strProxy;2396 if (shExpMatch(url, "http*://*.slideshare.net*")) return strProxy;2397 if (shExpMatch(url, "http*://*.forum.slime.com.tw*")) return strProxy;2398 if (shExpMatch(url, "http*://*.slutload.com*")) return strProxy;2399 if (shExpMatch(url, "http*://*.smhric.org*")) return strProxy;2400 if (shExpMatch(url, "http*://*.sndcdn.com*")) return strProxy;2401 if (shExpMatch(url, "http*://*.so-ga.net*")) return strProxy;2402 if (shExpMatch(url, "http*://*.so-ga.net*")) return strProxy;2403 if (shExpMatch(url, "http*://*.so-news.com*")) return strProxy;2404 if (shExpMatch(url, "http*://*.so-news.com*")) return strProxy;2405 if (shExpMatch(url, "http*://*.home.so-net.net.tw*")) return strProxy;2406 if (shExpMatch(url, "http*://*.soc.mil*")) return strProxy;2407 if (shExpMatch(url, "http*://*.sockslist.net*")) return strProxy;2408 if (shExpMatch(url, "http*://*.sod.co.jp*")) return strProxy;2409 if (shExpMatch(url, "http*://*.softether.org*")) return strProxy;2410 if (shExpMatch(url, "http*://*.softether.org*")) return strProxy;2411 if (shExpMatch(url, "http*://*.softether-download.com*")) return strProxy;2412 if (shExpMatch(url, "http*://*.softether-download.com*")) return strProxy;2413 if (shExpMatch(url, "http*://*.cdn.softlayer.net*")) return strProxy;2414 if (shExpMatch(url, "http*://*.sogclub.com*")) return strProxy;2415 if (shExpMatch(url, "http*://*.sohcradio.com*")) return strProxy;2416 if (shExpMatch(url, "http*://*.sohcradio.com*")) return strProxy;2417 if (shExpMatch(url, "http*://*.somee.com*")) return strProxy;2418 if (shExpMatch(url, "http*://*.sorting-algorithms.com*")) return strProxy;2419 if (shExpMatch(url, "http*://*.soumo.info*")) return strProxy;2420 if (shExpMatch(url, "http*://*.soup.io*")) return strProxy;2421 if (shExpMatch(url, "http*://*.slinkset.com*")) return strProxy;2422 if (shExpMatch(url, "http*://*.slickvpn.com*")) return strProxy;2423 if (shExpMatch(url, "http*://*.snapchat.com*")) return strProxy;2424 if (shExpMatch(url, "http*://*.snaptu.com*")) return strProxy;2425 if (shExpMatch(url, "http*://*.snaptu.com*")) return strProxy;2426 if (shExpMatch(url, "http*://*.sneakme.net*")) return strProxy;2427 if (shExpMatch(url, "http*://*.snooper.co.uk*")) return strProxy;2428 if (shExpMatch(url, "http*://*.sobees.com*")) return strProxy;2429 if (shExpMatch(url, "http*://*.sobees.com*")) return strProxy;2430 if (shExpMatch(url, "http*://*.socialwhale.com*")) return strProxy;2431 if (shExpMatch(url, "http*://*.softether.co.jp*")) return strProxy;2432 if (shExpMatch(url, "http*://*.softwarebychuck.com*")) return strProxy;2433 if (shExpMatch(url, "http*://*.blog.sogoo.org*")) return strProxy;2434 if (shExpMatch(url, "http*://*.soh.tw*")) return strProxy;2435 if (shExpMatch(url, "http*://*.soh.tw*")) return strProxy;2436 if (shExpMatch(url, "http*://*.sohfrance.org*")) return strProxy;2437 if (shExpMatch(url, "http*://*.sohfrance.org*")) return strProxy;2438 if (shExpMatch(url, "http*://*.chinese.soifind.com*")) return strProxy;2439 if (shExpMatch(url, "http*://*.sokamonline.com*")) return strProxy;2440 if (shExpMatch(url, "http*://*.somee.com*")) return strProxy;2441 if (shExpMatch(url, "http*://*.songjianjun.com*")) return strProxy;2442 if (shExpMatch(url, "http*://*.songjianjun.com*")) return strProxy;2443 if (shExpMatch(url, "http*://*.sonidodelaesperanza.org*")) return strProxy;2444 if (shExpMatch(url, "http*://*.sopcast.com*")) return strProxy;2445 if (shExpMatch(url, "http*://*.sopcast.org*")) return strProxy;2446 if (shExpMatch(url, "http*://*.bbs.soul-plus.net*")) return strProxy;2447 if (shExpMatch(url, "http*://*.soundcloud.com*")) return strProxy;2448 if (shExpMatch(url, "http*://*.soundofhope.kr*")) return strProxy;2449 if (shExpMatch(url, "http*://*.soundofhope.org*")) return strProxy;2450 if (shExpMatch(url, "http*://*.soundofhope.org*")) return strProxy;2451 if (shExpMatch(url, "http*://*.soupofmedia.com*")) return strProxy;2452 if (shExpMatch(url, "http*://*.sourceforge.net*")) return strProxy;2453 if (shExpMatch(url, "http*://*.sourceforge.net*")) return strProxy;2454 if (shExpMatch(url, "http*://*.southnews.com.tw*")) return strProxy;2455 if (shExpMatch(url, "http*://*.sowers.org.hk*")) return strProxy;2456 if (shExpMatch(url, "http*://*.wlx.sowiki.net*")) return strProxy;2457 if (shExpMatch(url, "http*://*.space-scape.com*")) return strProxy;2458 if (shExpMatch(url, "http*://*.spankwire.com*")) return strProxy;2459 if (shExpMatch(url, "http*://*.spb.com*")) return strProxy;2460 if (shExpMatch(url, "http*://*.spencertipping.com*")) return strProxy;2461 if (shExpMatch(url, "http*://*.spinejs.com*")) return strProxy;2462 if (shExpMatch(url, "http*://*.sproutcore.com*")) return strProxy;2463 if (shExpMatch(url, "http*://*.squarespace.com*")) return strProxy;2464 if (shExpMatch(url, "http*://*.ssh91.com*")) return strProxy;2465 if (shExpMatch(url, "http*://*.stackfile.com*")) return strProxy;2466 if (shExpMatch(url, "http*://*.standupfortibet.org*")) return strProxy;2467 if (shExpMatch(url, "http*://*.usinfo.state.gov*")) return strProxy;2468 if (shExpMatch(url, "http*://*.starp2p.com*")) return strProxy;2469 if (shExpMatch(url, "http*://*.starp2p.com*")) return strProxy;2470 if (shExpMatch(url, "http*://*.startpage.com*")) return strProxy;2471 if (shExpMatch(url, "http*://*.state168.com*")) return strProxy;2472 if (shExpMatch(url, "http*://*.steel-storm.com*")) return strProxy;2473 if (shExpMatch(url, "http*://*.stepmania.com*")) return strProxy;2474 if (shExpMatch(url, "http*://*.sthoo.com*")) return strProxy;2475 if (shExpMatch(url, "http*://*.sthoo.com*")) return strProxy;2476 if (shExpMatch(url, "http*://*.stickam.com*")) return strProxy;2477 if (shExpMatch(url, "http*://*.stickeraction.com*")) return strProxy;2478 if (shExpMatch(url, "http*://*.stonegames.net*")) return strProxy;2479 if (shExpMatch(url, "http*://*.stoneip.info*")) return strProxy;2480 if (shExpMatch(url, "http*://*.storagenewsletter.com*")) return strProxy;2481 if (shExpMatch(url, "http*://*.stoptibetcrisis.net*")) return strProxy;2482 if (shExpMatch(url, "http*://*.stoptibetcrisis.net*")) return strProxy;2483 if (shExpMatch(url, "http*://*.storify.com*")) return strProxy;2484 if (shExpMatch(url, "http*://*.stoweboyd.com*")) return strProxy;2485 if (shExpMatch(url, "http*://*.streamingthe.net*")) return strProxy;2486 if (shExpMatch(url, "http*://*.cn.streetvoice.com*")) return strProxy;2487 if (shExpMatch(url, "http*://*.cn.streetvoice.com*")) return strProxy;2488 if (shExpMatch(url, "http*://*.cn2.streetvoice.com*")) return strProxy;2489 if (shExpMatch(url, "http*://*.tw.streetvoice.com*")) return strProxy;2490 if (shExpMatch(url, "http*://*.strongvpn.com*")) return strProxy;2491 if (shExpMatch(url, "http*://*.student.tw*")) return strProxy;2492 if (shExpMatch(url, "http*://*.studentsforafreetibet.org*")) return strProxy;2493 if (shExpMatch(url, "http*://*.stupidvideos.com*")) return strProxy;2494 if (shExpMatch(url, "http*://*.sugarsync.com*")) return strProxy;2495 if (shExpMatch(url, "http*://*.sugarsync.com*")) return strProxy;2496 if (shExpMatch(url, "http*://*.summify.com*")) return strProxy;2497 if (shExpMatch(url, "http*://*.sun1911.com*")) return strProxy;2498 if (shExpMatch(url, "http*://*.suyangg.com*")) return strProxy;2499 if (shExpMatch(url, "http*://*.suyangg.com*")) return strProxy;2500 if (shExpMatch(url, "http*://*.suoluo.org*")) return strProxy;2501 if (shExpMatch(url, "http*://*.api.supertweet.net*")) return strProxy;2502 if (shExpMatch(url, "http*://*.supertweet.net*")) return strProxy;2503 if (shExpMatch(url, "http*://*.surfeasy.com.au*")) return strProxy;2504 if (shExpMatch(url, "http*://*.surrenderat20.net*")) return strProxy;2505 if (shExpMatch(url, "http*://*.svwind.com*")) return strProxy;2506 if (shExpMatch(url, "http*://*.sweux.com*")) return strProxy;2507 if (shExpMatch(url, "http*://*.swift-tools.net*")) return strProxy;2508 if (shExpMatch(url, "http*://*.sydneytoday.com*")) return strProxy;2509 if (shExpMatch(url, "http*://*.sylfoundation.org*")) return strProxy;2510 if (shExpMatch(url, "http*://*.syncback.com*")) return strProxy;2511 if (shExpMatch(url, "http*://*.sysadmin1138.net*")) return strProxy;2512 if (shExpMatch(url, "http*://*.sysresccd.org*")) return strProxy;2513 if (shExpMatch(url, "http*://*.sytes.net*")) return strProxy;2514 if (shExpMatch(url, "http*://*.blog.syx86.com*")) return strProxy;2515 if (shExpMatch(url, "http*://*.blog.syx86.cn*")) return strProxy;2516 if (shExpMatch(url, "http*://*.szbbs.net*")) return strProxy;2517 if (shExpMatch(url, "http*://*.szetowah.org.hk*")) return strProxy;2518 if (shExpMatch(url, "http*://*.t35.com*")) return strProxy;2519 if (shExpMatch(url, "http*://*.t66y.com*")) return strProxy;2520 if (shExpMatch(url, "http*://*.t66y.com*")) return strProxy;2521 if (shExpMatch(url, "http*://*.t88.ca*")) return strProxy;2522 if (shExpMatch(url, "http*://*.taa-usa.org*")) return strProxy;2523 if (shExpMatch(url, "http*://*.taa-usa.org*")) return strProxy;2524 if (shExpMatch(url, "http*://*.tablesgenerator.com*")) return strProxy;2525 if (shExpMatch(url, "http*://*.tabtter.jp*")) return strProxy;2526 if (shExpMatch(url, "http*://*.tacem.org*")) return strProxy;2527 if (shExpMatch(url, "http*://*.tafaward.com*")) return strProxy;2528 if (shExpMatch(url, "http*://*.tagwalk.com*")) return strProxy;2529 if (shExpMatch(url, "http*://*.tagwalk.com*")) return strProxy;2530 if (shExpMatch(url, "http*://*.taipei.gov.tw*")) return strProxy;2531 if (shExpMatch(url, "http*://*.taipeisociety.org*")) return strProxy;2532 if (shExpMatch(url, "http*://*.taipeisociety.org*")) return strProxy;2533 if (shExpMatch(url, "http*://*.taiwandaily.net*")) return strProxy;2534 if (shExpMatch(url, "http*://*.taiwantt.org.tw*")) return strProxy;2535 if (shExpMatch(url, "http*://*.taiwandaily.net*")) return strProxy;2536 if (shExpMatch(url, "http*://*.taiwankiss.com*")) return strProxy;2537 if (shExpMatch(url, "http*://*.taiwannation.com*")) return strProxy;2538 if (shExpMatch(url, "http*://*.taiwannation.com.tw*")) return strProxy;2539 if (shExpMatch(url, "http*://*.taiwannews.com.tw*")) return strProxy;2540 if (shExpMatch(url, "http*://*.taiwanonline.cc*")) return strProxy;2541 if (shExpMatch(url, "http*://*.taiwantp.net*")) return strProxy;2542 if (shExpMatch(url, "http*://*.taiwanus.net*")) return strProxy;2543 if (shExpMatch(url, "http*://*.taiwanyes.com*")) return strProxy;2544 if (shExpMatch(url, "http*://*.taiwan-sex.com*")) return strProxy;2545 if (shExpMatch(url, "http*://*.talk853.com*")) return strProxy;2546 if (shExpMatch(url, "http*://*.tamiaode.tk*")) return strProxy;2547 if (shExpMatch(url, "http*://*.tanc.org*")) return strProxy;2548 if (shExpMatch(url, "http*://*.tangben.com*")) return strProxy;2549 if (shExpMatch(url, "http*://*.taolun.info*")) return strProxy;2550 if (shExpMatch(url, "http*://*.taolun.info*")) return strProxy;2551 if (shExpMatch(url, "http*://*.blog.taragana.com*")) return strProxy;2552 if (shExpMatch(url, "http*://*.taup.net*")) return strProxy;2553 if (shExpMatch(url, "http*://*.taup.org.tw*")) return strProxy;2554 if (shExpMatch(url, "http*://*.taweet.com*")) return strProxy;2555 if (shExpMatch(url, "http*://*.taweet.com*")) return strProxy;2556 if (shExpMatch(url, "http*://*.tbpic.info*")) return strProxy;2557 if (shExpMatch(url, "http*://*.tbsec.org*")) return strProxy;2558 if (shExpMatch(url, "http*://*.tbsn.org*")) return strProxy;2559 if (shExpMatch(url, "http*://*.tbsseattle.org*")) return strProxy;2560 if (shExpMatch(url, "http*://*.tchrd.org*")) return strProxy;2561 if (shExpMatch(url, "http*://*.tcno.net*")) return strProxy;2562 if (shExpMatch(url, "http*://*.teamseesmic.com*")) return strProxy;2563 if (shExpMatch(url, "http*://*.teashark.com*")) return strProxy;2564 if (shExpMatch(url, "http*://*.techlifeweb.com*")) return strProxy;2565 if (shExpMatch(url, "http*://*.techparaiso.com*")) return strProxy;2566 if (shExpMatch(url, "http*://*.teck.in*")) return strProxy;2567 if (shExpMatch(url, "http*://*.telecomspace.com*")) return strProxy;2568 if (shExpMatch(url, "http*://*.telegraph.co.uk*")) return strProxy;2569 if (shExpMatch(url, "http*://*.tenacy.com*")) return strProxy;2570 if (shExpMatch(url, "http*://*.theampfactory.com*")) return strProxy;2571 if (shExpMatch(url, "http*://*.theappleblog.com*")) return strProxy;2572 if (shExpMatch(url, "http*://*.theatrum-belli.com*")) return strProxy;2573 if (shExpMatch(url, "http*://*.thebodyshop-usa.com*")) return strProxy;2574 if (shExpMatch(url, "http*://*.theblemish.com*")) return strProxy;2575 if (shExpMatch(url, "http*://*.thebcomplex.com*")) return strProxy;2576 if (shExpMatch(url, "http*://*.thechinabeat.org*")) return strProxy;2577 if (shExpMatch(url, "http*://*.thechinastory.org*")) return strProxy;2578 if (shExpMatch(url, "http*://*.thedieline.com*")) return strProxy;2579 if (shExpMatch(url, "http*://*.thedw.us*")) return strProxy;2580 if (shExpMatch(url, "http*://*.thegatesnotes.com*")) return strProxy;2581 if (shExpMatch(url, "http*://*.thegioitinhoc.vn*")) return strProxy;2582 if (shExpMatch(url, "http*://*.thehots.info*")) return strProxy;2583 if (shExpMatch(url, "http*://*.thehousenews.com*")) return strProxy;2584 if (shExpMatch(url, "http*://*.thehun.net*")) return strProxy;2585 if (shExpMatch(url, "http*://*.thelifeyoucansave.com*")) return strProxy;2586 if (shExpMatch(url, "http*://*.thelius.org*")) return strProxy;2587 if (shExpMatch(url, "http*://*.thenewslens.com*")) return strProxy;2588 if (shExpMatch(url, "http*://*.thepiratebay.org*")) return strProxy;2589 if (shExpMatch(url, "http*://*.theqii.info*")) return strProxy;2590 if (shExpMatch(url, "http*://*.thereallove.kr*")) return strProxy;2591 if (shExpMatch(url, "http*://*.thesartorialist.com*")) return strProxy;2592 if (shExpMatch(url, "http*://*.thespeeder.com*")) return strProxy;2593 if (shExpMatch(url, "http*://*.thestandnews.com*")) return strProxy;2594 if (shExpMatch(url, "http*://*.thetibetpost.com*")) return strProxy;2595 if (shExpMatch(url, "http*://*.thetrotskymovie.com*")) return strProxy;2596 if (shExpMatch(url, "http*://*.thevivekspot.com*")) return strProxy;2597 if (shExpMatch(url, "http*://*.thewgo.org*")) return strProxy;2598 if (shExpMatch(url, "http*://*.thinkingtaiwan.com*")) return strProxy;2599 if (shExpMatch(url, "http*://*.thisav.com*")) return strProxy;2600 if (shExpMatch(url, "http*://*.thisav.com*")) return strProxy;2601 if (shExpMatch(url, "http*://*.thkphoto.com*")) return strProxy;2602 if (shExpMatch(url, "http*://*.thomasbernhard.org*")) return strProxy;2603 if (shExpMatch(url, "http*://*.threatchaos.com*")) return strProxy;2604 if (shExpMatch(url, "http*://*.throughnightsfire.com*")) return strProxy;2605 if (shExpMatch(url, "http*://*.thumbzilla.com*")) return strProxy;2606 if (shExpMatch(url, "http*://*.thywords.com*")) return strProxy;2607 if (shExpMatch(url, "http*://*.tiananmenmother.org*")) return strProxy;2608 if (shExpMatch(url, "http*://*.tiananmenuniv.com*")) return strProxy;2609 if (shExpMatch(url, "http*://*.tiananmenuniv.net*")) return strProxy;2610 if (shExpMatch(url, "http*://*.tiandixing.org*")) return strProxy;2611 if (shExpMatch(url, "http*://*.tianhuayuan.com*")) return strProxy;2612 if (shExpMatch(url, "http*://*.tianlawoffice.com*")) return strProxy;2613 if (shExpMatch(url, "http*://*.tiantibooks.org*")) return strProxy;2614 if (shExpMatch(url, "http*://*.tianzhu.org*")) return strProxy;2615 if (shExpMatch(url, "http*://*.tibet.at*")) return strProxy;2616 if (shExpMatch(url, "http*://*.tibet.com*")) return strProxy;2617 if (shExpMatch(url, "http*://*.tibet.com*")) return strProxy;2618 if (shExpMatch(url, "http*://*.tibet.net*")) return strProxy;2619 if (shExpMatch(url, "http*://*.tibet.net*")) return strProxy;2620 if (shExpMatch(url, "http*://*.tibet.org*")) return strProxy;2621 if (shExpMatch(url, "http*://*.tibet.org*")) return strProxy;2622 if (shExpMatch(url, "http*://*.tibet.org.tw*")) return strProxy;2623 if (shExpMatch(url, "http*://*.tibetalk.com*")) return strProxy;2624 if (shExpMatch(url, "http*://*.tibetanyouthcongress.org*")) return strProxy;2625 if (shExpMatch(url, "http*://*.tibetanyouthcongress.org*")) return strProxy;2626 if (shExpMatch(url, "http*://*.tibetcorps.org*")) return strProxy;2627 if (shExpMatch(url, "http*://*.tibetfund.org*")) return strProxy;2628 if (shExpMatch(url, "http*://*.tibetjustice.org*")) return strProxy;2629 if (shExpMatch(url, "http*://*.tibetoffice.org*")) return strProxy;2630 if (shExpMatch(url, "http*://*.tibetonline.com*")) return strProxy;2631 if (shExpMatch(url, "http*://*.tibetonline.com*")) return strProxy;2632 if (shExpMatch(url, "http*://*.tibetonline.tv*")) return strProxy;2633 if (shExpMatch(url, "http*://*.tibetonline.tv*")) return strProxy;2634 if (shExpMatch(url, "http*://*.tibetsun.com*")) return strProxy;2635 if (shExpMatch(url, "http*://*.tibetwrites.org*")) return strProxy;2636 if (shExpMatch(url, "http*://*.time.com*")) return strProxy;2637 if (shExpMatch(url, "http*://*.time.com*")) return strProxy;2638 if (shExpMatch(url, "http*://*.time.com*")) return strProxy;2639 if (shExpMatch(url, "http*://*.blog.tiney.com*")) return strProxy;2640 if (shExpMatch(url, "http*://*.tinychat.com*")) return strProxy;2641 if (shExpMatch(url, "http*://*.tinypaste.com*")) return strProxy;2642 if (shExpMatch(url, "http*://*.tidyread.com*")) return strProxy;2643 if (shExpMatch(url, "http*://*.tistory.com*")) return strProxy;2644 if (shExpMatch(url, "http*://*.tkcs-collins.com*")) return strProxy;2645 if (shExpMatch(url, "http*://*.tkforum.tk*")) return strProxy;2646 if (shExpMatch(url, "http*://*.tmagazine.com*")) return strProxy;2647 if (shExpMatch(url, "http*://*.tmagazine.com*")) return strProxy;2648 if (shExpMatch(url, "http*://*.tmi.me*")) return strProxy;2649 if (shExpMatch(url, "http*://*.tnaflix.com*")) return strProxy;2650 if (shExpMatch(url, "http*://*.tnaflix.com*")) return strProxy;2651 if (shExpMatch(url, "http*://*.togetter.com*")) return strProxy;2652 if (shExpMatch(url, "http*://*.tokyo-247.com*")) return strProxy;2653 if (shExpMatch(url, "http*://*.tokyo-hot.com*")) return strProxy;2654 if (shExpMatch(url, "http*://*.tokyocn.com*")) return strProxy;2655 if (shExpMatch(url, "http*://*.tono-oka.jp*")) return strProxy;2656 if (shExpMatch(url, "http*://*.tonyyan.net*")) return strProxy;2657 if (shExpMatch(url, "http*://*.toodoc.com*")) return strProxy;2658 if (shExpMatch(url, "http*://*.toonel.net*")) return strProxy;2659 if (shExpMatch(url, "http*://*.topnews.in*")) return strProxy;2660 if (shExpMatch(url, "http*://*.topshare.us*")) return strProxy;2661 if (shExpMatch(url, "http*://*.topshareware.com*")) return strProxy;2662 if (shExpMatch(url, "http*://*.topstyle4.com*")) return strProxy;2663 if (shExpMatch(url, "http*://*.topsy.com*")) return strProxy;2664 if (shExpMatch(url, "http*://*.topsy.com*")) return strProxy;2665 if (shExpMatch(url, "http*://*.tora.to*")) return strProxy;2666 if (shExpMatch(url, "http*://*.torproject.org*")) return strProxy;2667 if (shExpMatch(url, "http*://*.torproject.org*")) return strProxy;2668 if (shExpMatch(url, "http*://*.torrentcrazy.com*")) return strProxy;2669 if (shExpMatch(url, "http*://*.torrentcrazy.com*")) return strProxy;2670 if (shExpMatch(url, "http*://*.torrentproject.se*")) return strProxy;2671 if (shExpMatch(url, "http*://*.torvpn.com*")) return strProxy;2672 if (shExpMatch(url, "http*://*.touch99.com*")) return strProxy;2673 if (shExpMatch(url, "http*://*.toutfr.com*")) return strProxy;2674 if (shExpMatch(url, "http*://*.tpi.org.tw*")) return strProxy;2675 if (shExpMatch(url, "http*://*.tpi.org.tw*")) return strProxy;2676 if (shExpMatch(url, "http*://*.transgressionism.org*")) return strProxy;2677 if (shExpMatch(url, "http*://*.transparency.org*")) return strProxy;2678 if (shExpMatch(url, "http*://*.travelinlocal.com*")) return strProxy;2679 if (shExpMatch(url, "http*://*.treemall.com.tw*")) return strProxy;2680 if (shExpMatch(url, "http*://*.trendsmap.com*")) return strProxy;2681 if (shExpMatch(url, "http*://*.trendsmap.com*")) return strProxy;2682 if (shExpMatch(url, "http*://*.trialofccp.org*")) return strProxy;2683 if (shExpMatch(url, "http*://*.trialofccp.org*")) return strProxy;2684 if (shExpMatch(url, "http*://*.tripod.com*")) return strProxy;2685 if (shExpMatch(url, "http*://*.trouw.nl*")) return strProxy;2686 if (shExpMatch(url, "http*://*.trt.net.tr*")) return strProxy;2687 if (shExpMatch(url, "http*://*.trtc.com.tw*")) return strProxy;2688 if (shExpMatch(url, "http*://*.trulyergonomic.com*")) return strProxy;2689 if (shExpMatch(url, "http*://*.trustedbi.com*")) return strProxy;2690 if (shExpMatch(url, "http*://*.truth101.co.tv*")) return strProxy;2691 if (shExpMatch(url, "http*://*.truth101.co.tv*")) return strProxy;2692 if (shExpMatch(url, "http*://*.truthcn.com*")) return strProxy;2693 if (shExpMatch(url, "http*://*.truveo.com*")) return strProxy;2694 if (shExpMatch(url, "http*://*.tsemtulku.com*")) return strProxy;2695 if (shExpMatch(url, "http*://*.tsquare.tv*")) return strProxy;2696 if (shExpMatch(url, "http*://*.tsu.org.tw*")) return strProxy;2697 if (shExpMatch(url, "http*://*.tsunagarumon.com*")) return strProxy;2698 if (shExpMatch(url, "http*://*.tsuru-bird.net*")) return strProxy;2699 if (shExpMatch(url, "http*://*.tsctv.net*")) return strProxy;2700 if (shExpMatch(url, "http*://*.tt-rss.org*")) return strProxy;2701 if (shExpMatch(url, "http*://*.tt1069.com*")) return strProxy;2702 if (shExpMatch(url, "http*://*.tttan.com*")) return strProxy;2703 if (shExpMatch(url, "http*://*.tttan.com*")) return strProxy;2704 if (shExpMatch(url, "http*://*.bb.ttv.com.tw*")) return strProxy;2705 if (shExpMatch(url, "http*://*.tu8964.com*")) return strProxy;2706 if (shExpMatch(url, "http*://*.tuanzt.com*")) return strProxy;2707 if (shExpMatch(url, "http*://*.tube.com*")) return strProxy;2708 if (shExpMatch(url, "http*://*.tube8.com*")) return strProxy;2709 if (shExpMatch(url, "http*://*.tube8.com*")) return strProxy;2710 if (shExpMatch(url, "http*://*.tubecao.com*")) return strProxy;2711 if (shExpMatch(url, "http*://*.tubewolf.com*")) return strProxy;2712 if (shExpMatch(url, "http*://*.tuidang.net*")) return strProxy;2713 if (shExpMatch(url, "http*://*.tuidang.org*")) return strProxy;2714 if (shExpMatch(url, "http*://*.bbs.tuitui.info*")) return strProxy;2715 if (shExpMatch(url, "http*://*.tumutanzi.com*")) return strProxy;2716 if (shExpMatch(url, "http*://*.tunein.com*")) return strProxy;2717 if (shExpMatch(url, "http*://*.tunein.com*")) return strProxy;2718 if (shExpMatch(url, "http*://*.tunnelbear.com*")) return strProxy;2719 if (shExpMatch(url, "http*://*.tuo8.hk*")) return strProxy;2720 if (shExpMatch(url, "http*://*.turbobit.net*")) return strProxy;2721 if (shExpMatch(url, "http*://*.turbobit.net*")) return strProxy;2722 if (shExpMatch(url, "http*://*.turningtorso.com*")) return strProxy;2723 if (shExpMatch(url, "http*://*.tuxtraining.com*")) return strProxy;2724 if (shExpMatch(url, "http*://*.301works.org*")) return strProxy;2725 if (shExpMatch(url, "http*://*.365singles.com.ar*")) return strProxy;2726 if (shExpMatch(url, "http*://*.all-that-is-interesting.com*")) return strProxy;2727 if (shExpMatch(url, "http*://*.art-or-porn.com*")) return strProxy;2728 if (shExpMatch(url, "http*://*.news.atebits.com*")) return strProxy;2729 if (shExpMatch(url, "http*://*.tumblr.awflasher.com*")) return strProxy;2730 if (shExpMatch(url, "http*://*.badassjs.com*")) return strProxy;2731 if (shExpMatch(url, "http*://*.basetimesheightdividedby2.com*")) return strProxy;2732 if (shExpMatch(url, "http*://*.benjaminste.in*")) return strProxy;2733 if (shExpMatch(url, "http*://*.blog.birdhouseapp.com*")) return strProxy;2734 if (shExpMatch(url, "http*://*.bobulate.com*")) return strProxy;2735 if (shExpMatch(url, "http*://*.bonjourlesgeeks.com*")) return strProxy;2736 if (shExpMatch(url, "http*://*.bookshelfporn.com*")) return strProxy;2737 if (shExpMatch(url, "http*://*.blog.boxcar.io*")) return strProxy;2738 if (shExpMatch(url, "http*://*.blog.bitly.com*")) return strProxy;2739 if (shExpMatch(url, "http*://*.chevronwp7.com*")) return strProxy;2740 if (shExpMatch(url, "http*://*.clientsfromhell.net*")) return strProxy;2741 if (shExpMatch(url, "http*://*.codeboxapp.com*")) return strProxy;2742 if (shExpMatch(url, "http*://*.cookingtothegoodlife.com*")) return strProxy;2743 if (shExpMatch(url, "http*://*.cubicle17.com*")) return strProxy;2744 if (shExpMatch(url, "http*://*.photos.dailyme.com*")) return strProxy;2745 if (shExpMatch(url, "http*://*.davidslog.com*")) return strProxy;2746 if (shExpMatch(url, "http*://*.blog.davidziegler.net*")) return strProxy;2747 if (shExpMatch(url, "http*://*.blog.dayoneapp.com*")) return strProxy;2748 if (shExpMatch(url, "http*://*.drewolanoff.com*")) return strProxy;2749 if (shExpMatch(url, "http*://*.blog.dribbble.com*")) return strProxy;2750 if (shExpMatch(url, "http*://*.chaos.e-spacy.com*")) return strProxy;2751 if (shExpMatch(url, "http*://*.eamonnbrennan.com*")) return strProxy;2752 if (shExpMatch(url, "http*://*.everyday-carry.com*")) return strProxy;2753 if (shExpMatch(url, "http*://*.eyespirit.info*")) return strProxy;2754 if (shExpMatch(url, "http*://*.life.fly4ever.me*")) return strProxy;2755 if (shExpMatch(url, "http*://*.fredwilson.vc*")) return strProxy;2756 if (shExpMatch(url, "http*://*.fuckgfw.com*")) return strProxy;2757 if (shExpMatch(url, "http*://*.geekmade.co.uk*")) return strProxy;2758 if (shExpMatch(url, "http*://*.generesis.com*")) return strProxy;2759 if (shExpMatch(url, "http*://*.news.ghostery.com*")) return strProxy;2760 if (shExpMatch(url, "http*://*.givemesomethingtoread.com*")) return strProxy;2761 if (shExpMatch(url, "http*://*.blog.gowalla.com*")) return strProxy;2762 if (shExpMatch(url, "http*://*.heiyo.info*")) return strProxy;2763 if (shExpMatch(url, "http*://*.hellonewyork.us*")) return strProxy;2764 if (shExpMatch(url, "http*://*.blog.hotpotato.com*")) return strProxy;2765 if (shExpMatch(url, "http*://*.ialmostlaugh.com*")) return strProxy;2766 if (shExpMatch(url, "http*://*.blog.ifttt.com*")) return strProxy;2767 if (shExpMatch(url, "http*://*.blog.instagram.com*")) return strProxy;2768 if (shExpMatch(url, "http*://*.blog.instapaper.com*")) return strProxy;2769 if (shExpMatch(url, "http*://*.interestinglaugh.com*")) return strProxy;2770 if (shExpMatch(url, "http*://*.blog.iphone-dev.org*")) return strProxy;2771 if (shExpMatch(url, "http*://*.jayparkinsonmd.com*")) return strProxy;2772 if (shExpMatch(url, "http*://*.blog.joeyrobert.org*")) return strProxy;2773 if (shExpMatch(url, "http*://*.kt.kcome.org*")) return strProxy;2774 if (shExpMatch(url, "http*://*.my.keso.cn*")) return strProxy;2775 if (shExpMatch(url, "http*://*.blog.kickstarter.com*")) return strProxy;2776 if (shExpMatch(url, "http*://*.blog.kl.am*")) return strProxy;2777 if (shExpMatch(url, "http*://*.blog.klip.me*")) return strProxy;2778 if (shExpMatch(url, "http*://*.t.kun.im*")) return strProxy;2779 if (shExpMatch(url, "http*://*.blog.lightbox.com*")) return strProxy;2780 if (shExpMatch(url, "http*://*.littlebigdetails.com*")) return strProxy;2781 if (shExpMatch(url, "http*://*.lovequicksilver.com*")) return strProxy;2782 if (shExpMatch(url, "http*://*.lyricsquote.com*")) return strProxy;2783 if (shExpMatch(url, "http*://*.madmenunbuttoned.com*")) return strProxy;2784 if (shExpMatch(url, "http*://*.marco.org*")) return strProxy;2785 if (shExpMatch(url, "http*://*.minimalmac.com*")) return strProxy;2786 if (shExpMatch(url, "http*://*.mixedmedialabs.com*")) return strProxy;2787 if (shExpMatch(url, "http*://*.modfetish.com*")) return strProxy;2788 if (shExpMatch(url, "http*://*.blog.mongodb.org*")) return strProxy;2789 if (shExpMatch(url, "http*://*.navigeaters.com*")) return strProxy;2790 if (shExpMatch(url, "http*://*.london.neighborhoodr.com*")) return strProxy;2791 if (shExpMatch(url, "http*://*.blog.path.com*")) return strProxy;2792 if (shExpMatch(url, "http*://*.parislemon.com*")) return strProxy;2793 if (shExpMatch(url, "http*://*.blog.pikchur.com*")) return strProxy;2794 if (shExpMatch(url, "http*://*.blog.rockmelt.com*")) return strProxy;2795 if (shExpMatch(url, "http*://*.blog.romanandreg.com*")) return strProxy;2796 if (shExpMatch(url, "http*://*.solozorro.tk*")) return strProxy;2797 if (shExpMatch(url, "http*://*.blog.sparrowmailapp.com*")) return strProxy;2798 if (shExpMatch(url, "http*://*.stuffimreading.com*")) return strProxy;2799 if (shExpMatch(url, "http*://*.blog.summify.com*")) return strProxy;2800 if (shExpMatch(url, "http*://*.thedailywh.at*")) return strProxy;2801 if (shExpMatch(url, "http*://*.theinternetwishlist.com*")) return strProxy;2802 if (shExpMatch(url, "http*://*.thisiswhyyouarefat.com*")) return strProxy;2803 if (shExpMatch(url, "http*://*.tiffanyarment.com*")) return strProxy;2804 if (shExpMatch(url, "http*://*.tjholowaychuk.com*")) return strProxy;2805 if (shExpMatch(url, "http*://*.tomsc.com*")) return strProxy;2806 if (shExpMatch(url, "http*://*.blog.topify.com*")) return strProxy;2807 if (shExpMatch(url, "http*://*.thehungrydudes.com*")) return strProxy;2808 if (shExpMatch(url, "http*://*.tumblweed.org*")) return strProxy;2809 if (shExpMatch(url, "http*://*.status.twhirl.org*")) return strProxy;2810 if (shExpMatch(url, "http*://*.blog.usa.gov*")) return strProxy;2811 if (shExpMatch(url, "http*://*.photo.utom.us*")) return strProxy;2812 if (shExpMatch(url, "http*://*.v-state.org*")) return strProxy;2813 if (shExpMatch(url, "http*://*.wellplacedpixels.com*")) return strProxy;2814 if (shExpMatch(url, "http*://*.whydidyoubuymethat.com*")) return strProxy;2815 if (shExpMatch(url, "http*://*.wordboner.com*")) return strProxy;2816 if (shExpMatch(url, "http*://*.wordsandturds.com*")) return strProxy;2817 if (shExpMatch(url, "http*://*.worstthingieverate.com*")) return strProxy;2818 if (shExpMatch(url, "http*://*.xmusic.fm*")) return strProxy;2819 if (shExpMatch(url, "http*://*.xuzhuoer.com*")) return strProxy;2820 if (shExpMatch(url, "http*://*.bd.zhe.la*")) return strProxy;2821 if (shExpMatch(url, "http*://*.cocoa.zonble.net*")) return strProxy;2822 if (shExpMatch(url, "http*://*.tv.com*")) return strProxy;2823 if (shExpMatch(url, "http*://*.tv.com*")) return strProxy;2824 if (shExpMatch(url, "http*://*.tv.com*")) return strProxy;2825 if (shExpMatch(url, "http*://*.tv-intros.com*")) return strProxy;2826 if (shExpMatch(url, "http*://*.tvants.com*")) return strProxy;2827 if (shExpMatch(url, "http*://*.forum.tvb.com*")) return strProxy;2828 if (shExpMatch(url, "http*://*.tvboxnow.com*")) return strProxy;2829 if (shExpMatch(url, "http*://*.tvider.com*")) return strProxy;2830 if (shExpMatch(url, "http*://*.tvunetworks.com*")) return strProxy;2831 if (shExpMatch(url, "http*://*.tw-npo.org*")) return strProxy;2832 if (shExpMatch(url, "http*://*.twapperkeeper.com*")) return strProxy;2833 if (shExpMatch(url, "http*://*.twapperkeeper.com*")) return strProxy;2834 if (shExpMatch(url, "http*://*.twaud.io*")) return strProxy;2835 if (shExpMatch(url, "http*://*.twaud.io*")) return strProxy;2836 if (shExpMatch(url, "http*://*.twbbs.net.tw*")) return strProxy;2837 if (shExpMatch(url, "http*://*.twbbs.org*")) return strProxy;2838 if (shExpMatch(url, "http*://*.twbbs.tw*")) return strProxy;2839 if (shExpMatch(url, "http*://*.twblogger.com*")) return strProxy;2840 if (shExpMatch(url, "http*://*.tweepmag.com*")) return strProxy;2841 if (shExpMatch(url, "http*://*.tweepml.org*")) return strProxy;2842 if (shExpMatch(url, "http*://*.tweepml.org*")) return strProxy;2843 if (shExpMatch(url, "http*://*.tweetbackup.com*")) return strProxy;2844 if (shExpMatch(url, "http*://*.tweetbackup.com*")) return strProxy;2845 if (shExpMatch(url, "http*://*.tweetboard.com*")) return strProxy;2846 if (shExpMatch(url, "http*://*.tweetboard.com*")) return strProxy;2847 if (shExpMatch(url, "http*://*.tweetboner.biz*")) return strProxy;2848 if (shExpMatch(url, "http*://*.tweetboner.biz*")) return strProxy;2849 if (shExpMatch(url, "http*://*.tweetdeck.com*")) return strProxy;2850 if (shExpMatch(url, "http*://*.tweetdeck.com*")) return strProxy;2851 if (shExpMatch(url, "http*://*.deck.ly*")) return strProxy;2852 if (shExpMatch(url, "http*://*.mtw.tl*")) return strProxy;2853 if (shExpMatch(url, "http*://*.tweetedtimes.com*")) return strProxy;2854 if (shExpMatch(url, "http*://*.tweetmylast.fm*")) return strProxy;2855 if (shExpMatch(url, "http*://*.tweetphoto.com*")) return strProxy;2856 if (shExpMatch(url, "http*://*.tweetphoto.com*")) return strProxy;2857 if (shExpMatch(url, "http*://*.tweetrans.com*")) return strProxy;2858 if (shExpMatch(url, "http*://*.tweetree.com*")) return strProxy;2859 if (shExpMatch(url, "http*://*.tweetree.com*")) return strProxy;2860 if (shExpMatch(url, "http*://*.tweetwally.com*")) return strProxy;2861 if (shExpMatch(url, "http*://*.tweetymail.com*")) return strProxy;2862 if (shExpMatch(url, "http*://*.twftp.org*")) return strProxy;2863 if (shExpMatch(url, "http*://*.twibase.com*")) return strProxy;2864 if (shExpMatch(url, "http*://*.twibble.de*")) return strProxy;2865 if (shExpMatch(url, "http*://*.twibble.de*")) return strProxy;2866 if (shExpMatch(url, "http*://*.twibbon.com*")) return strProxy;2867 if (shExpMatch(url, "http*://*.twibs.com*")) return strProxy;2868 if (shExpMatch(url, "http*://*.twicsy.com*")) return strProxy;2869 if (shExpMatch(url, "http*://*.twifan.com*")) return strProxy;2870 if (shExpMatch(url, "http*://*.twifan.com*")) return strProxy;2871 if (shExpMatch(url, "http*://*.twiffo.com*")) return strProxy;2872 if (shExpMatch(url, "http*://*.twiffo.com*")) return strProxy;2873 if (shExpMatch(url, "http*://*.twilog.org*")) return strProxy;2874 if (shExpMatch(url, "http*://*.twimbow.com*")) return strProxy;2875 if (shExpMatch(url, "http*://*.twimbow.com*")) return strProxy;2876 if (shExpMatch(url, "http*://*.twindexx.com*")) return strProxy;2877 if (shExpMatch(url, "http*://*.twipple.jp*")) return strProxy;2878 if (shExpMatch(url, "http*://*.twipple.jp*")) return strProxy;2879 if (shExpMatch(url, "http*://*.twip.me*")) return strProxy;2880 if (shExpMatch(url, "http*://*.twistar.cc*")) return strProxy;2881 if (shExpMatch(url, "http*://*.twister.net.co*")) return strProxy;2882 if (shExpMatch(url, "http*://*.twisterio.com*")) return strProxy;2883 if (shExpMatch(url, "http*://*.twisternow.com*")) return strProxy;2884 if (shExpMatch(url, "http*://*.twistory.net*")) return strProxy;2885 if (shExpMatch(url, "http*://*.twitbrowser.net*")) return strProxy;2886 if (shExpMatch(url, "http*://*.twitcause.com*")) return strProxy;2887 if (shExpMatch(url, "http*://*.twitgether.com*")) return strProxy;2888 if (shExpMatch(url, "http*://*.twiggit.org*")) return strProxy;2889 if (shExpMatch(url, "http*://*.twitgoo.com*")) return strProxy;2890 if (shExpMatch(url, "http*://*.twitiq.com*")) return strProxy;2891 if (shExpMatch(url, "http*://*.twitiq.com*")) return strProxy;2892 if (shExpMatch(url, "http*://*.twitlonger.com*")) return strProxy;2893 if (shExpMatch(url, "http*://*.twitlonger.com*")) return strProxy;2894 if (shExpMatch(url, "http*://*.tl.gd*")) return strProxy;2895 if (shExpMatch(url, "http*://*.twitoaster.com*")) return strProxy;2896 if (shExpMatch(url, "http*://*.twitoaster.com*")) return strProxy;2897 if (shExpMatch(url, "http*://*.twitonmsn.com*")) return strProxy;2898 if (shExpMatch(url, "http*://*.twitpic.com*")) return strProxy;2899 if (shExpMatch(url, "http*://*.twitpic.com*")) return strProxy;2900 if (shExpMatch(url, "http*://*.twit2d.com*")) return strProxy;2901 if (shExpMatch(url, "http*://*.twit2d.com*")) return strProxy;2902 if (shExpMatch(url, "http*://*.twitstat.com*")) return strProxy;2903 if (shExpMatch(url, "http*://*.twitstat.com*")) return strProxy;2904 if (shExpMatch(url, "http*://*.firstfivefollowers.com*")) return strProxy;2905 if (shExpMatch(url, "http*://*.retweeteffect.com*")) return strProxy;2906 if (shExpMatch(url, "http*://*.tweeplike.me*")) return strProxy;2907 if (shExpMatch(url, "http*://*.tweepguide.com*")) return strProxy;2908 if (shExpMatch(url, "http*://*.turbotwitter.com*")) return strProxy;2909 if (shExpMatch(url, "http*://*.twitvid.com*")) return strProxy;2910 if (shExpMatch(url, "http*://*.twitvid.com*")) return strProxy;2911 if (shExpMatch(url, "http*://*.199.59.148.20*")) return strProxy;2912 if (shExpMatch(url, "http*://*.t.co*")) return strProxy;2913 if (shExpMatch(url, "http*://*.t.co*")) return strProxy;2914 if (shExpMatch(url, "http*://*.twt.tl*")) return strProxy;2915 if (shExpMatch(url, "http*://*.twittbot.net*")) return strProxy;2916 if (shExpMatch(url, "http*://*.twitter.com*")) return strProxy;2917 if (shExpMatch(url, "http*://*.twitter.com*")) return strProxy;2918 if (shExpMatch(url, "http*://*.twitter.jp*")) return strProxy;2919 if (shExpMatch(url, "http*://*.twttr.com*")) return strProxy;2920 if (shExpMatch(url, "http*://*.twitter4j.org*")) return strProxy;2921 if (shExpMatch(url, "http*://*.twittercounter.com*")) return strProxy;2922 if (shExpMatch(url, "http*://*.twittercounter.com*")) return strProxy;2923 if (shExpMatch(url, "http*://*.twitterfeed.com*")) return strProxy;2924 if (shExpMatch(url, "http*://*.twittergadget.com*")) return strProxy;2925 if (shExpMatch(url, "http*://*.twittergadget.com*")) return strProxy;2926 if (shExpMatch(url, "http*://*.twitterkr.com*")) return strProxy;2927 if (shExpMatch(url, "http*://*.twitterkr.com*")) return strProxy;2928 if (shExpMatch(url, "http*://*.twittermail.com*")) return strProxy;2929 if (shExpMatch(url, "http*://*.twittertim.es*")) return strProxy;2930 if (shExpMatch(url, "http*://*.twittertim.es*")) return strProxy;2931 if (shExpMatch(url, "http*://*.twitthat.com*")) return strProxy;2932 if (shExpMatch(url, "http*://*.twitturk.com*")) return strProxy;2933 if (shExpMatch(url, "http*://*.twitturly.com*")) return strProxy;2934 if (shExpMatch(url, "http*://*.twitturly.com*")) return strProxy;2935 if (shExpMatch(url, "http*://*.twitzap.com*")) return strProxy;2936 if (shExpMatch(url, "http*://*.twiyia.com*")) return strProxy;2937 if (shExpMatch(url, "http*://*.twstar.net*")) return strProxy;2938 if (shExpMatch(url, "http*://*.twtkr.com*")) return strProxy;2939 if (shExpMatch(url, "http*://*.twtkr.com*")) return strProxy;2940 if (shExpMatch(url, "http*://*.twimg.com*")) return strProxy;2941 if (shExpMatch(url, "http*://*.twtrland.com*")) return strProxy;2942 if (shExpMatch(url, "http*://*.twurl.nl*")) return strProxy;2943 if (shExpMatch(url, "http*://*.twyac.org*")) return strProxy;2944 if (shExpMatch(url, "http*://*.twyac.org*")) return strProxy;2945 if (shExpMatch(url, "http*://*.tycool.com*")) return strProxy;2946 if (shExpMatch(url, "http*://*.tycool.com*")) return strProxy;2947 if (shExpMatch(url, "http*://*.tzangms.com*")) return strProxy;2948 if (shExpMatch(url, "http*://*.typepad.com*")) return strProxy;2949 if (shExpMatch(url, "http*://*.blog.expofutures.com*")) return strProxy;2950 if (shExpMatch(url, "http*://*.legaltech.law.com*")) return strProxy;2951 if (shExpMatch(url, "http*://*.latimesblogs.latimes.com*")) return strProxy;2952 if (shExpMatch(url, "http*://*.blog.palm.com*")) return strProxy;2953 if (shExpMatch(url, "http*://*.blogs.tampabay.com*")) return strProxy;2954 if (shExpMatch(url, "http*://*.contests.twilio.com*")) return strProxy;2955 if (shExpMatch(url, "http*://*.embr.in*")) return strProxy;2956 if (shExpMatch(url, "http*://*.embr.in*")) return strProxy;2957 if (shExpMatch(url, "http*://*.guomin.us*")) return strProxy;2958 if (shExpMatch(url, "http*://*.uberproxy.net*")) return strProxy;2959 if (shExpMatch(url, "http*://*.srcf.ucam.org*")) return strProxy;2960 if (shExpMatch(url, "http*://*.ucdc1998.org*")) return strProxy;2961 if (shExpMatch(url, "http*://*.uderzo.it*")) return strProxy;2962 if (shExpMatch(url, "http*://*.udn.com*")) return strProxy;2963 if (shExpMatch(url, "http*://*.udn.com*")) return strProxy;2964 if (shExpMatch(url, "http*://*.ufreevpn.com*")) return strProxy;2965 if (shExpMatch(url, "http*://*.ugo.com*")) return strProxy;2966 if (shExpMatch(url, "http*://*.uhrp.org*")) return strProxy;2967 if (shExpMatch(url, "http*://*.uighur.nl*")) return strProxy;2968 if (shExpMatch(url, "http*://*.uighur.nl*")) return strProxy;2969 if (shExpMatch(url, "http*://*.uighurbiz.net*")) return strProxy;2970 if (shExpMatch(url, "http*://*.ulike.net*")) return strProxy;2971 if (shExpMatch(url, "http*://*.ukliferadio.co.uk*")) return strProxy;2972 if (shExpMatch(url, "http*://*.ukliferadio.co.uk*")) return strProxy;2973 if (shExpMatch(url, "http*://*.ultravpn.fr*")) return strProxy;2974 if (shExpMatch(url, "http*://*.ultravpn.fr*")) return strProxy;2975 if (shExpMatch(url, "http*://*.ultraxs.com*")) return strProxy;2976 if (shExpMatch(url, "http*://*.unblock.cn.com*")) return strProxy;2977 if (shExpMatch(url, "http*://*.unblocksit.es*")) return strProxy;2978 if (shExpMatch(url, "http*://*.uncyclomedia.org*")) return strProxy;2979 if (shExpMatch(url, "http*://*.uncyclopedia.info*")) return strProxy;2980 if (shExpMatch(url, "http*://*.uncyclopedia.tw*")) return strProxy;2981 if (shExpMatch(url, "http*://*.unholyknight.com*")) return strProxy;2982 if (shExpMatch(url, "http*://*.uni.cc*")) return strProxy;2983 if (shExpMatch(url, "http*://*.unicode.org*")) return strProxy;2984 if (shExpMatch(url, "http*://*.uniteddaily.com.my*")) return strProxy;2985 if (shExpMatch(url, "http*://*.unix100.com*")) return strProxy;2986 if (shExpMatch(url, "http*://*.unknownspace.org*")) return strProxy;2987 if (shExpMatch(url, "http*://*.unpo.org*")) return strProxy;2988 if (shExpMatch(url, "http*://*.uocn.org*")) return strProxy;2989 if (shExpMatch(url, "http*://*.tor.updatestar.com*")) return strProxy;2990 if (shExpMatch(url, "http*://*.upholdjustice.org*")) return strProxy;2991 if (shExpMatch(url, "http*://*.upload4u.info*")) return strProxy;2992 if (shExpMatch(url, "http*://*.uploaded.net*")) return strProxy;2993 if (shExpMatch(url, "http*://*.uploaded.to*")) return strProxy;2994 if (shExpMatch(url, "http*://*.uploaded.to*")) return strProxy;2995 if (shExpMatch(url, "http*://*.uploadstation.com*")) return strProxy;2996 if (shExpMatch(url, "http*://*.urbanoutfitters.com*")) return strProxy;2997 if (shExpMatch(url, "http*://*.myshare.url.com.tw*")) return strProxy;2998 if (shExpMatch(url, "http*://*.urlborg.com*")) return strProxy;2999 if (shExpMatch(url, "http*://*.urlparser.com*")) return strProxy;3000 if (shExpMatch(url, "http*://*.us.to*")) return strProxy;3001 if (shExpMatch(url, "http*://*.usacn.com*")) return strProxy;3002 if (shExpMatch(url, "http*://*.beta.usejump.com*")) return strProxy;3003 if (shExpMatch(url, "http*://*.usfk.mil*")) return strProxy;3004 if (shExpMatch(url, "http*://*.earthquake.usgs.gov*")) return strProxy;3005 if (shExpMatch(url, "http*://*.usmc.mil*")) return strProxy;3006 if (shExpMatch(url, "http*://*.tarr.uspto.gov*")) return strProxy;3007 if (shExpMatch(url, "http*://*.tsdr.uspto.gov*")) return strProxy;3008 if (shExpMatch(url, "http*://*.ustream.tv*")) return strProxy;3009 if (shExpMatch(url, "http*://*.ustream.tv*")) return strProxy;3010 if (shExpMatch(url, "http*://*.ustwrap.info*")) return strProxy;3011 if (shExpMatch(url, "http*://*.usus.cc*")) return strProxy;3012 if (shExpMatch(url, "http*://*.uwants.com*")) return strProxy;3013 if (shExpMatch(url, "http*://*.uwants.net*")) return strProxy;3014 if (shExpMatch(url, "http*://*.uyghur-j.org*")) return strProxy;3015 if (shExpMatch(url, "http*://*.uyghuramerican.org*")) return strProxy;3016 if (shExpMatch(url, "http*://*.uyghurcanadiansociety.org*")) return strProxy;3017 if (shExpMatch(url, "http*://*.uyghurensemble.co.uk*")) return strProxy;3018 if (shExpMatch(url, "http*://*.uyghurcongress.org*")) return strProxy;3019 if (shExpMatch(url, "http*://*.uyghurpen.org*")) return strProxy;3020 if (shExpMatch(url, "http*://*.uygur.org*")) return strProxy;3021 if (shExpMatch(url, "http*://*.uymaarip.com*")) return strProxy;3022 if (shExpMatch(url, "http*://*.vaayoo.com*")) return strProxy;3023 if (shExpMatch(url, "http*://*.van698.com*")) return strProxy;3024 if (shExpMatch(url, "http*://*.vanemu.cn*")) return strProxy;3025 if (shExpMatch(url, "http*://*.vanilla-jp.com*")) return strProxy;3026 if (shExpMatch(url, "http*://*.vansky.com*")) return strProxy;3027 if (shExpMatch(url, "http*://*.vcf-online.org*")) return strProxy;3028 if (shExpMatch(url, "http*://*.vcfbuilder.org*")) return strProxy;3029 if (shExpMatch(url, "http*://*.velkaepocha.sk*")) return strProxy;3030 if (shExpMatch(url, "http*://*.venbbs.com*")) return strProxy;3031 if (shExpMatch(url, "http*://*.venchina.com*")) return strProxy;3032 if (shExpMatch(url, "http*://*.veoh.com*")) return strProxy;3033 if (shExpMatch(url, "http*://*.verizon.net*")) return strProxy;3034 if (shExpMatch(url, "http*://*.verybs.com*")) return strProxy;3035 if (shExpMatch(url, "http*://*.vft.com.tw*")) return strProxy;3036 if (shExpMatch(url, "http*://*.videobam.com*")) return strProxy;3037 if (shExpMatch(url, "http*://*.videobam.com*")) return strProxy;3038 if (shExpMatch(url, "http*://*.videomo.com*")) return strProxy;3039 if (shExpMatch(url, "http*://*.vidoemo.com*")) return strProxy;3040 if (shExpMatch(url, "http*://*.viki.com*")) return strProxy;3041 if (shExpMatch(url, "http*://*.vimeo.com*")) return strProxy;3042 if (shExpMatch(url, "http*://*.vimgolf.com*")) return strProxy;3043 if (shExpMatch(url, "http*://*.vimperator.org*")) return strProxy;3044 if (shExpMatch(url, "http*://*.vincnd.com*")) return strProxy;3045 if (shExpMatch(url, "http*://*.vinniev.com*")) return strProxy;3046 if (shExpMatch(url, "http*://*.ny.visiontimes.com*")) return strProxy;3047 if (shExpMatch(url, "http*://*.vjmedia.com.hk*")) return strProxy;3048 if (shExpMatch(url, "http*://*.vllcs.org*")) return strProxy;3049 if (shExpMatch(url, "http*://*.vmixcore.com*")) return strProxy;3050 if (shExpMatch(url, "http*://*.cn.voa.mobi*")) return strProxy;3051 if (shExpMatch(url, "http*://*.tw.voa.mobi*")) return strProxy;3052 if (shExpMatch(url, "http*://*.voachineseblog.com*")) return strProxy;3053 if (shExpMatch(url, "http*://*.voachineseblog.com*")) return strProxy;3054 if (shExpMatch(url, "http*://*.voagd.com*")) return strProxy;3055 if (shExpMatch(url, "http*://*.voacantonese.com*")) return strProxy;3056 if (shExpMatch(url, "http*://*.voacantonese.com*")) return strProxy;3057 if (shExpMatch(url, "http*://*.voachinese.com*")) return strProxy;3058 if (shExpMatch(url, "http*://*.voachinese.com*")) return strProxy;3059 if (shExpMatch(url, "http*://*.voatibetan.com*")) return strProxy;3060 if (shExpMatch(url, "http*://*.voatibetan.com*")) return strProxy;3061 if (shExpMatch(url, "http*://*.voanews.com*")) return strProxy;3062 if (shExpMatch(url, "http*://*.vocn.tv*")) return strProxy;3063 if (shExpMatch(url, "http*://*.vot.org*")) return strProxy;3064 if (shExpMatch(url, "http*://*.vot.org*")) return strProxy;3065 if (shExpMatch(url, "http*://*.voy.com*")) return strProxy;3066 if (shExpMatch(url, "http*://*.vpncup.com*")) return strProxy;3067 if (shExpMatch(url, "http*://*.vpnbook.com*")) return strProxy;3068 if (shExpMatch(url, "http*://*.vpnfire.com*")) return strProxy;3069 if (shExpMatch(url, "http*://*.vpngate.jp*")) return strProxy;3070 if (shExpMatch(url, "http*://*.vpngate.net*")) return strProxy;3071 if (shExpMatch(url, "http*://*.vpngate.net*")) return strProxy;3072 if (shExpMatch(url, "http*://*.vpnpop.com*")) return strProxy;3073 if (shExpMatch(url, "http*://*.vpnpronet.com*")) return strProxy;3074 if (shExpMatch(url, "http*://*.vpnreviewz.com*")) return strProxy;3075 if (shExpMatch(url, "http*://*.vtunnel.com*")) return strProxy;3076 if (shExpMatch(url, "http*://*.w.org*")) return strProxy;3077 if (shExpMatch(url, "http*://*.lists.w3.org*")) return strProxy;3078 if (shExpMatch(url, "http*://*.w3schools.com*")) return strProxy;3079 if (shExpMatch(url, "http*://*.waffle1999.com*")) return strProxy;3080 if (shExpMatch(url, "http*://*.wahas.com*")) return strProxy;3081 if (shExpMatch(url, "http*://*.waigaobu.com*")) return strProxy;3082 if (shExpMatch(url, "http*://*.waikeung.org*")) return strProxy;3083 if (shExpMatch(url, "http*://*.waiwaier.com*")) return strProxy;3084 if (shExpMatch(url, "http*://*.waiwaier.com*")) return strProxy;3085 if (shExpMatch(url, "http*://*.wallornot.org*")) return strProxy;3086 if (shExpMatch(url, "http*://*.wallpapercasa.com*")) return strProxy;3087 if (shExpMatch(url, "http*://*.wan-press.org*")) return strProxy;3088 if (shExpMatch(url, "http*://*.wanderinghorse.net*")) return strProxy;3089 if (shExpMatch(url, "http*://*.wangafu.net*")) return strProxy;3090 if (shExpMatch(url, "http*://*.wangjinbo.org*")) return strProxy;3091 if (shExpMatch(url, "http*://*.wangjinbo.org*")) return strProxy;3092 if (shExpMatch(url, "http*://*.wanglixiong.com*")) return strProxy;3093 if (shExpMatch(url, "http*://*.wangruoshui.net*")) return strProxy;3094 if (shExpMatch(url, "http*://*.wangruowang.org*")) return strProxy;3095 if (shExpMatch(url, "http*://*.want-daily.com*")) return strProxy;3096 if (shExpMatch(url, "http*://*.wapedia.mobi*")) return strProxy;3097 if (shExpMatch(url, "http*://*.waselpro.com*")) return strProxy;3098 if (shExpMatch(url, "http*://*.wattpad.com*")) return strProxy;3099 if (shExpMatch(url, "http*://*.wattpad.com*")) return strProxy;3100 if (shExpMatch(url, "http*://*.makzhou.warehouse333.com*")) return strProxy;3101 if (shExpMatch(url, "http*://*.washeng.net*")) return strProxy;3102 if (shExpMatch(url, "http*://*.watchmygf.net*")) return strProxy;3103 if (shExpMatch(url, "http*://*.wav.tv*")) return strProxy;3104 if (shExpMatch(url, "http*://*.wdf5.com*")) return strProxy;3105 if (shExpMatch(url, "http*://*.wearn.com*")) return strProxy;3106 if (shExpMatch(url, "http*://*.wearn.com*")) return strProxy;3107 if (shExpMatch(url, "http*://*.hudatoriq.web.id*")) return strProxy;3108 if (shExpMatch(url, "http*://*.web2project.net*")) return strProxy;3109 if (shExpMatch(url, "http*://*.webbang.net*")) return strProxy;3110 if (shExpMatch(url, "http*://*.weblagu.com*")) return strProxy;3111 if (shExpMatch(url, "http*://*.webmproject.org*")) return strProxy;3112 if (shExpMatch(url, "http*://*.webs-tv.net*")) return strProxy;3113 if (shExpMatch(url, "http*://*.websitepulse.com*")) return strProxy;3114 if (shExpMatch(url, "http*://*.websnapr.com*")) return strProxy;3115 if (shExpMatch(url, "http*://*.webworkerdaily.com*")) return strProxy;3116 if (shExpMatch(url, "http*://*.weekmag.info*")) return strProxy;3117 if (shExpMatch(url, "http*://*.wefightcensorship.org*")) return strProxy;3118 if (shExpMatch(url, "http*://*.wefong.com*")) return strProxy;3119 if (shExpMatch(url, "http*://*.weiboleak.com*")) return strProxy;3120 if (shExpMatch(url, "http*://*.weijingsheng.org*")) return strProxy;3121 if (shExpMatch(url, "http*://*.weiming.info*")) return strProxy;3122 if (shExpMatch(url, "http*://*.weiquanwang.org*")) return strProxy;3123 if (shExpMatch(url, "http*://*.weisuo.ws*")) return strProxy;3124 if (shExpMatch(url, "http*://*.wengewang.com*")) return strProxy;3125 if (shExpMatch(url, "http*://*.wengewang.org*")) return strProxy;3126 if (shExpMatch(url, "http*://*.wenhui.ch*")) return strProxy;3127 if (shExpMatch(url, "http*://*.trans.wenweipo.com*")) return strProxy;3128 if (shExpMatch(url, "http*://*.wenxuecity.com*")) return strProxy;3129 if (shExpMatch(url, "http*://*.wenyunchao.com*")) return strProxy;3130 if (shExpMatch(url, "http*://*.wenyunchao.com*")) return strProxy;3131 if (shExpMatch(url, "http*://*.westca.com*")) return strProxy;3132 if (shExpMatch(url, "http*://*.westca.com*")) return strProxy;3133 if (shExpMatch(url, "http*://*.westernwolves.com*")) return strProxy;3134 if (shExpMatch(url, "http*://*.hkg.westkit.net*")) return strProxy;3135 if (shExpMatch(url, "http*://*.wet123.com*")) return strProxy;3136 if (shExpMatch(url, "http*://*.wepn.info*")) return strProxy;3137 if (shExpMatch(url, "http*://*.wetpussygames.com*")) return strProxy;3138 if (shExpMatch(url, "http*://*.wetplace.com*")) return strProxy;3139 if (shExpMatch(url, "http*://*.wexiaobo.org*")) return strProxy;3140 if (shExpMatch(url, "http*://*.wexiaobo.org*")) return strProxy;3141 if (shExpMatch(url, "http*://*.wezhiyong.org*")) return strProxy;3142 if (shExpMatch(url, "http*://*.wezone.net*")) return strProxy;3143 if (shExpMatch(url, "http*://*.wforum.com*")) return strProxy;3144 if (shExpMatch(url, "http*://*.wforum.com*")) return strProxy;3145 if (shExpMatch(url, "http*://*.whatblocked.com*")) return strProxy;3146 if (shExpMatch(url, "http*://*.whatblocked.com*")) return strProxy;3147 if (shExpMatch(url, "http*://*.whippedass.com*")) return strProxy;3148 if (shExpMatch(url, "http*://*.who.is*")) return strProxy;3149 if (shExpMatch(url, "http*://*.whylover.com*")) return strProxy;3150 if (shExpMatch(url, "http*://*.whyx.org*")) return strProxy;3151 if (shExpMatch(url, "http*://*.evchk.wikia.com*")) return strProxy;3152 if (shExpMatch(url, "http*://*.cn.uncyclopedia.wikia.com*")) return strProxy;3153 if (shExpMatch(url, "http*://*.zh.uncyclopedia.wikia.com*")) return strProxy;3154 if (shExpMatch(url, "http*://*.wikileaks.ch*")) return strProxy;3155 if (shExpMatch(url, "http*://*.wikileaks.de*")) return strProxy;3156 if (shExpMatch(url, "http*://*.wikileaks.eu*")) return strProxy;3157 if (shExpMatch(url, "http*://*.wikileaks.lu*")) return strProxy;3158 if (shExpMatch(url, "http*://*.wikileaks.org*")) return strProxy;3159 if (shExpMatch(url, "http*://*.wikileaks.org*")) return strProxy;3160 if (shExpMatch(url, "http*://*.wikileaks.pl*")) return strProxy;3161 if (shExpMatch(url, "http*://*.collateralmurder.com*")) return strProxy;3162 if (shExpMatch(url, "http*://*.collateralmurder.org*")) return strProxy;3163 if (shExpMatch(url, "http*://*.wikilivres.info*")) return strProxy;3164 if (shExpMatch(url, "http*://*.wikimapia.org*")) return strProxy;3165 if (shExpMatch(url, "http*://*.secure.wikimedia.org*")) return strProxy;3166 if (shExpMatch(url, "http*://*.wikimedia.org.mo*")) return strProxy;3167 if (shExpMatch(url, "http*://*.zh.wikinews.org*")) return strProxy;3168 if (shExpMatch(url, "http*://*.wikiwiki.jp*")) return strProxy;3169 if (shExpMatch(url, "http*://*.sports.williamhill.com*")) return strProxy;3170 if (shExpMatch(url, "http*://*.willw.net*")) return strProxy;3171 if (shExpMatch(url, "http*://*.windowsphoneme.com*")) return strProxy;3172 if (shExpMatch(url, "http*://*.winwhispers.info*")) return strProxy;3173 if (shExpMatch(url, "http*://*.wiredbytes.com*")) return strProxy;3174 if (shExpMatch(url, "http*://*.wiredpen.com*")) return strProxy;3175 if (shExpMatch(url, "http*://*.wireshark.org*")) return strProxy;3176 if (shExpMatch(url, "http*://*.wisevid.com*")) return strProxy;3177 if (shExpMatch(url, "http*://*.wisevid.com*")) return strProxy;3178 if (shExpMatch(url, "http*://*.witnessleeteaching.com*")) return strProxy;3179 if (shExpMatch(url, "http*://*.witopia.net*")) return strProxy;3180 if (shExpMatch(url, "http*://*.wnacg.com*")) return strProxy;3181 if (shExpMatch(url, "http*://*.wo.tc*")) return strProxy;3182 if (shExpMatch(url, "http*://*.woeser.com*")) return strProxy;3183 if (shExpMatch(url, "http*://*.woesermiddle-way.net*")) return strProxy;3184 if (shExpMatch(url, "http*://*.wolfax.com*")) return strProxy;3185 if (shExpMatch(url, "http*://*.wolfax.com*")) return strProxy;3186 if (shExpMatch(url, "http*://*.woopie.jp*")) return strProxy;3187 if (shExpMatch(url, "http*://*.woopie.jp*")) return strProxy;3188 if (shExpMatch(url, "http*://*.woopie.tv*")) return strProxy;3189 if (shExpMatch(url, "http*://*.woopie.tv*")) return strProxy;3190 if (shExpMatch(url, "http*://*.workatruna.com*")) return strProxy;3191 if (shExpMatch(url, "http*://*.worldcat.org*")) return strProxy;3192 if (shExpMatch(url, "http*://*.worldjournal.com*")) return strProxy;3193 if (shExpMatch(url, "http*://*.wordpress.com*")) return strProxy;3194 if (shExpMatch(url, "http*://*.wp.com*")) return strProxy;3195 if (shExpMatch(url, "http*://*.woxinghuiguo.com*")) return strProxy;3196 if (shExpMatch(url, "http*://*.wow-life.net*")) return strProxy;3197 if (shExpMatch(url, "http*://*.wowlegacy.ml*")) return strProxy;3198 if (shExpMatch(url, "http*://*.wpoforum.com*")) return strProxy;3199 if (shExpMatch(url, "http*://*.wpoforum.com*")) return strProxy;3200 if (shExpMatch(url, "http*://*.wqlhw.com*")) return strProxy;3201 if (shExpMatch(url, "http*://*.wqyd.org*")) return strProxy;3202 if (shExpMatch(url, "http*://*.wqyd.org*")) return strProxy;3203 if (shExpMatch(url, "http*://*.wrchina.org*")) return strProxy;3204 if (shExpMatch(url, "http*://*.wretch.cc*")) return strProxy;3205 if (shExpMatch(url, "http*://*.wsj.com*")) return strProxy;3206 if (shExpMatch(url, "http*://*.wsj.net*")) return strProxy;3207 if (shExpMatch(url, "http*://*.wtfpeople.com*")) return strProxy;3208 if (shExpMatch(url, "http*://*.wuala.com*")) return strProxy;3209 if (shExpMatch(url, "http*://*.wuerkaixi.com*")) return strProxy;3210 if (shExpMatch(url, "http*://*.wufi.org.tw*")) return strProxy;3211 if (shExpMatch(url, "http*://*.wuguoguang.com*")) return strProxy;3212 if (shExpMatch(url, "http*://*.wujie.net*")) return strProxy;3213 if (shExpMatch(url, "http*://*.wujieliulan.com*")) return strProxy;3214 if (shExpMatch(url, "http*://*.wujieliulan.com*")) return strProxy;3215 if (shExpMatch(url, "http*://*.wukangrui.net*")) return strProxy;3216 if (shExpMatch(url, "http*://*.wwitv.com*")) return strProxy;3217 if (shExpMatch(url, "http*://*.wzyboy.im*")) return strProxy;3218 if (shExpMatch(url, "http*://*.x-berry.com*")) return strProxy;3219 if (shExpMatch(url, "http*://*.x-art.com*")) return strProxy;3220 if (shExpMatch(url, "http*://*.x-wall.org*")) return strProxy;3221 if (shExpMatch(url, "http*://*.x1949x.com*")) return strProxy;3222 if (shExpMatch(url, "http*://*.x365x.com*")) return strProxy;3223 if (shExpMatch(url, "http*://*.xanga.com*")) return strProxy;3224 if (shExpMatch(url, "http*://*.xbabe.com*")) return strProxy;3225 if (shExpMatch(url, "http*://*.xbookcn.com*")) return strProxy;3226 if (shExpMatch(url, "http*://*.xbookcn.com*")) return strProxy;3227 if (shExpMatch(url, "http*://*.xcafe.in*")) return strProxy;3228 if (shExpMatch(url, "http*://*.x.xcity.jp*")) return strProxy;3229 if (shExpMatch(url, "http*://*.xcritic.com*")) return strProxy;3230 if (shExpMatch(url, "http*://*.destiny.xfiles.to*")) return strProxy;3231 if (shExpMatch(url, "http*://*.xfm.pp.ru*")) return strProxy;3232 if (shExpMatch(url, "http*://*.xgmyd.com*")) return strProxy;3233 if (shExpMatch(url, "http*://*.xh4n.cn*")) return strProxy;3234 if (shExpMatch(url, "http*://*.xhamster.com*")) return strProxy;3235 if (shExpMatch(url, "http*://*.one.xthost.info*")) return strProxy;3236 if (shExpMatch(url, "http*://*.xiaochuncnjp.com*")) return strProxy;3237 if (shExpMatch(url, "http*://*.s.xiaod.in*")) return strProxy;3238 if (shExpMatch(url, "http*://*.xiaohexie.com*")) return strProxy;3239 if (shExpMatch(url, "http*://*.xiaolan.me*")) return strProxy;3240 if (shExpMatch(url, "http*://*.xiaoma.org*")) return strProxy;3241 if (shExpMatch(url, "http*://*.xiaohexie.com*")) return strProxy;3242 if (shExpMatch(url, "http*://*.xiezhua.com*")) return strProxy;3243 if (shExpMatch(url, "http*://*.xing.com*")) return strProxy;3244 if (shExpMatch(url, "http*://*.xing.com*")) return strProxy;3245 if (shExpMatch(url, "http*://*.xinmiao.com.hk*")) return strProxy;3246 if (shExpMatch(url, "http*://*.xinmiao.com.hk*")) return strProxy;3247 if (shExpMatch(url, "http*://*.xinsheng.net*")) return strProxy;3248 if (shExpMatch(url, "http*://*.xinshijue.com*")) return strProxy;3249 if (shExpMatch(url, "http*://*.xinhuanet.org*")) return strProxy;3250 if (shExpMatch(url, "http*://*.xinyubbs.net*")) return strProxy;3251 if (shExpMatch(url, "http*://*.xiongpian.com*")) return strProxy;3252 if (shExpMatch(url, "http*://*.xizang-zhiye.org*")) return strProxy;3253 if (shExpMatch(url, "http*://*.xjp.cc*")) return strProxy;3254 if (shExpMatch(url, "http*://*.xjp.cc*")) return strProxy;3255 if (shExpMatch(url, "http*://*.xlfmwz.info*")) return strProxy;3256 if (shExpMatch(url, "http*://*.xml-training-guide.com*")) return strProxy;3257 if (shExpMatch(url, "http*://*.xmovies.com*")) return strProxy;3258 if (shExpMatch(url, "http*://*.xnxx.com*")) return strProxy;3259 if (shExpMatch(url, "http*://*.xpdo.net*")) return strProxy;3260 if (shExpMatch(url, "http*://*.xpud.org*")) return strProxy;3261 if (shExpMatch(url, "http*://*.k2.xrea.com*")) return strProxy;3262 if (shExpMatch(url, "http*://*.xtube.com*")) return strProxy;3263 if (shExpMatch(url, "http*://*.blog.xuite.net*")) return strProxy;3264 if (shExpMatch(url, "http*://*.vlog.xuite.net*")) return strProxy;3265 if (shExpMatch(url, "http*://*.xuzhiyong.net*")) return strProxy;3266 if (shExpMatch(url, "http*://*.xuchao.org*")) return strProxy;3267 if (shExpMatch(url, "http*://*.xuchao.net*")) return strProxy;3268 if (shExpMatch(url, "http*://*.xuchao.net*")) return strProxy;3269 if (shExpMatch(url, "http*://*.xvedios.com*")) return strProxy;3270 if (shExpMatch(url, "http*://*.xvideos.com*")) return strProxy;3271 if (shExpMatch(url, "http*://*.xxbbx.com*")) return strProxy;3272 if (shExpMatch(url, "http*://*.xxxx.com.au*")) return strProxy;3273 if (shExpMatch(url, "http*://*.xys.org*")) return strProxy;3274 if (shExpMatch(url, "http*://*.xysblogs.org*")) return strProxy;3275 if (shExpMatch(url, "http*://*.xyy69.com*")) return strProxy;3276 if (shExpMatch(url, "http*://*.xyy69.info*")) return strProxy;3277 if (shExpMatch(url, "http*://*.page.bid.yahoo.com*")) return strProxy;3278 if (shExpMatch(url, "http*://*.blogs.yahoo.co.jp*")) return strProxy;3279 if (shExpMatch(url, "http*://*.buy.yahoo.com.tw*")) return strProxy;3280 if (shExpMatch(url, "http*://*.hk.yahoo.com*")) return strProxy;3281 if (shExpMatch(url, "http*://*.hk.knowledge.yahoo.com*")) return strProxy;3282 if (shExpMatch(url, "http*://*.hk.myblog.yahoo.com*")) return strProxy;3283 if (shExpMatch(url, "http*://*.hk.news.yahoo.com*")) return strProxy;3284 if (shExpMatch(url, "http*://*.hk.rd.yahoo.com*")) return strProxy;3285 if (shExpMatch(url, "http*://*.hk.search.yahoo.com*")) return strProxy;3286 if (shExpMatch(url, "http*://*.hk.video.news.yahoo.com*")) return strProxy;3287 if (shExpMatch(url, "http*://*.meme.yahoo.com*")) return strProxy;3288 if (shExpMatch(url, "http*://*.tw.yahoo.com*")) return strProxy;3289 if (shExpMatch(url, "http*://*.tw.myblog.yahoo.com*")) return strProxy;3290 if (shExpMatch(url, "http*://*.tw.news.yahoo.com*")) return strProxy;3291 if (shExpMatch(url, "http*://*.pulse.yahoo.com*")) return strProxy;3292 if (shExpMatch(url, "http*://*.upcoming.yahoo.com*")) return strProxy;3293 if (shExpMatch(url, "http*://*.video.yahoo.com*")) return strProxy;3294 if (shExpMatch(url, "http*://*.yahoo.com.hk*")) return strProxy;3295 if (shExpMatch(url, "http*://*.yam.com*")) return strProxy;3296 if (shExpMatch(url, "http*://*.yam.com*")) return strProxy;3297 if (shExpMatch(url, "http*://*.yasni.co.uk*")) return strProxy;3298 if (shExpMatch(url, "http*://*.yasukuni.or.jp*")) return strProxy;3299 if (shExpMatch(url, "http*://*.ydy.com*")) return strProxy;3300 if (shExpMatch(url, "http*://*.yeelou.com*")) return strProxy;3301 if (shExpMatch(url, "http*://*.yeeyi.com*")) return strProxy;3302 if (shExpMatch(url, "http*://*.yegle.net*")) return strProxy;3303 if (shExpMatch(url, "http*://*.yegle.net*")) return strProxy;3304 if (shExpMatch(url, "http*://*.yes123.com.tw*")) return strProxy;3305 if (shExpMatch(url, "http*://*.yfrog.com*")) return strProxy;3306 if (shExpMatch(url, "http*://*.yhcw.net*")) return strProxy;3307 if (shExpMatch(url, "http*://*.yi.org*")) return strProxy;3308 if (shExpMatch(url, "http*://*.yibada.com*")) return strProxy;3309 if (shExpMatch(url, "http*://*.yibaochina.com*")) return strProxy;3310 if (shExpMatch(url, "http*://*.yidio.com*")) return strProxy;3311 if (shExpMatch(url, "http*://*.yidio.com*")) return strProxy;3312 if (shExpMatch(url, "http*://*.yilubbs.com*")) return strProxy;3313 if (shExpMatch(url, "http*://*.xa.yimg.com*")) return strProxy;3314 if (shExpMatch(url, "http*://*.yipub.com*")) return strProxy;3315 if (shExpMatch(url, "http*://*.yipub.com*")) return strProxy;3316 if (shExpMatch(url, "http*://*.yogichen.org*")) return strProxy;3317 if (shExpMatch(url, "http*://*.yogichen.org*")) return strProxy;3318 if (shExpMatch(url, "http*://*.yong.hu*")) return strProxy;3319 if (shExpMatch(url, "http*://*.yorkbbs.ca*")) return strProxy;3320 if (shExpMatch(url, "http*://*.youxu.info*")) return strProxy;3321 if (shExpMatch(url, "http*://*.yyii.org*")) return strProxy;3322 if (shExpMatch(url, "http*://*.yyii.org*")) return strProxy;3323 if (shExpMatch(url, "http*://*.yzzk.com*")) return strProxy;3324 if (shExpMatch(url, "http*://*.yzzk.com*")) return strProxy;3325 if (shExpMatch(url, "http*://*.youjizz.com*")) return strProxy;3326 if (shExpMatch(url, "http*://*.youjizz.com*")) return strProxy;3327 if (shExpMatch(url, "http*://*.youmaker.com*")) return strProxy;3328 if (shExpMatch(url, "http*://*.youpai.org*")) return strProxy;3329 if (shExpMatch(url, "http*://*.youpai.org*")) return strProxy;3330 if (shExpMatch(url, "http*://*.your-freedom.net*")) return strProxy;3331 if (shExpMatch(url, "http*://*.yourepeat.com*")) return strProxy;3332 if (shExpMatch(url, "http*://*.yousendit.com*")) return strProxy;3333 if (shExpMatch(url, "http*://*.yousendit.com*")) return strProxy;3334 if (shExpMatch(url, "http*://*.youthbao.com*")) return strProxy;3335 if (shExpMatch(url, "http*://*.youthnetradio.org*")) return strProxy;3336 if (shExpMatch(url, "http*://*.blog.youthwant.com.tw*")) return strProxy;3337 if (shExpMatch(url, "http*://*.share.youthwant.com.tw*")) return strProxy;3338 if (shExpMatch(url, "http*://*.topic.youthwant.com.tw*")) return strProxy;3339 if (shExpMatch(url, "http*://*.youporn.com*")) return strProxy;3340 if (shExpMatch(url, "http*://*.youporn.com*")) return strProxy;3341 if (shExpMatch(url, "http*://*.youtu.be*")) return strProxy;3342 if (shExpMatch(url, "http*://*.youtube.com*")) return strProxy;3343 if (shExpMatch(url, "http*://*.youtube.com*")) return strProxy;3344 if (shExpMatch(url, "http*://*.youtube-nocookie.com*")) return strProxy;3345 if (shExpMatch(url, "http*://*.youtubecn.com*")) return strProxy;3346 if (shExpMatch(url, "http*://*.youversion.com*")) return strProxy;3347 if (shExpMatch(url, "http*://*.youversion.com*")) return strProxy;3348 if (shExpMatch(url, "http*://*.blog.youxu.info*")) return strProxy;3349 if (shExpMatch(url, "http*://*.ytimg.com*")) return strProxy;3350 if (shExpMatch(url, "http*://*.ytht.net*")) return strProxy;3351 if (shExpMatch(url, "http*://*.yuanming.net*")) return strProxy;3352 if (shExpMatch(url, "http*://*.yunchao.net*")) return strProxy;3353 if (shExpMatch(url, "http*://*.yvesgeleyn.com*")) return strProxy;3354 if (shExpMatch(url, "http*://*.yx51.net*")) return strProxy;3355 if (shExpMatch(url, "http*://*.yymaya.com*")) return strProxy;3356 if (shExpMatch(url, "http*://*.zacebook.com*")) return strProxy;3357 if (shExpMatch(url, "http*://*.zannel.com*")) return strProxy;3358 if (shExpMatch(url, "http*://*.tap11.com*")) return strProxy;3359 if (shExpMatch(url, "http*://*.zaobao.com*")) return strProxy;3360 if (shExpMatch(url, "http*://*.zaobao.com.sg*")) return strProxy;3361 if (shExpMatch(url, "http*://*.zaobao.com.sg*")) return strProxy;3362 if (shExpMatch(url, "http*://*.zaozon.com*")) return strProxy;3363 if (shExpMatch(url, "http*://*.zarias.com*")) return strProxy;3364 if (shExpMatch(url, "http*://*.zaurus.org.uk*")) return strProxy;3365 if (shExpMatch(url, "http*://*.zdnet.com.tw*")) return strProxy;3366 if (shExpMatch(url, "http*://*.zengjinyan.org*")) return strProxy;3367 if (shExpMatch(url, "http*://*.zeutch.com*")) return strProxy;3368 if (shExpMatch(url, "http*://*.zfreet.com*")) return strProxy;3369 if (shExpMatch(url, "http*://*.zgzcjj.net*")) return strProxy;3370 if (shExpMatch(url, "http*://*.zhanbin.net*")) return strProxy;3371 if (shExpMatch(url, "http*://*.zhanbin.net*")) return strProxy;3372 if (shExpMatch(url, "http*://*.zhangboli.net*")) return strProxy;3373 if (shExpMatch(url, "http*://*.zhenghui.org*")) return strProxy;3374 if (shExpMatch(url, "http*://*.zhenlibu.info*")) return strProxy;3375 if (shExpMatch(url, "http*://*.zhenlibu.info*")) return strProxy;3376 if (shExpMatch(url, "http*://*.zhenxiang.biz*")) return strProxy;3377 if (shExpMatch(url, "http*://*.zhinengluyou.com*")) return strProxy;3378 if (shExpMatch(url, "http*://*.zhongguotese.net*")) return strProxy;3379 if (shExpMatch(url, "http*://*.zhongmeng.org*")) return strProxy;3380 if (shExpMatch(url, "http*://*.zhreader.com*")) return strProxy;3381 if (shExpMatch(url, "http*://*.zhuichaguoji.org*")) return strProxy;3382 if (shExpMatch(url, "http*://*.zhuichaguoji.org*")) return strProxy;3383 if (shExpMatch(url, "http*://*.ziddu.com*")) return strProxy;3384 if (shExpMatch(url, "http*://*.zillionk.com*")) return strProxy;3385 if (shExpMatch(url, "http*://*.zinio.com*")) return strProxy;3386 if (shExpMatch(url, "http*://*.zinio.com*")) return strProxy;3387 if (shExpMatch(url, "http*://*.ziplib.com*")) return strProxy;3388 if (shExpMatch(url, "http*://*.zkaip.com*")) return strProxy;3389 if (shExpMatch(url, "http*://*.zkaip.com*")) return strProxy;3390 if (shExpMatch(url, "http*://*.zlib.net*")) return strProxy;3391 if (shExpMatch(url, "http*://*.zmw.cn*")) return strProxy;3392 if (shExpMatch(url, "http*://*.zomobo.net*")) return strProxy;3393 if (shExpMatch(url, "http*://*.zonaeuropa.com*")) return strProxy;3394 if (shExpMatch(url, "http*://*.zonaeuropa.com*")) return strProxy;3395 if (shExpMatch(url, "http*://*.zootool.com*")) return strProxy;3396 if (shExpMatch(url, "http*://*.zoozle.net*")) return strProxy;3397 if (shExpMatch(url, "http*://*.writer.zoho.com*")) return strProxy;3398 if (shExpMatch(url, "http*://*.zshare.net*")) return strProxy;3399 if (shExpMatch(url, "http*://*.zsrhao.com*")) return strProxy;3400 if (shExpMatch(url, "http*://*.zuo.la*")) return strProxy;3401 if (shExpMatch(url, "http*://*.zuo.la*")) return strProxy;3402 if (shExpMatch(url, "http*://*.zuobiao.me*")) return strProxy;3403 if (shExpMatch(url, "http*://*.zuola.com*")) return strProxy;3404 if (shExpMatch(url, "http*://*.zuola.com*")) return strProxy;3405 if (shExpMatch(url, "http*://*.zvereff.com*")) return strProxy;3406 if (shExpMatch(url, "http*://*.zyzc9.com*")) return strProxy;3407 if (shExpMatch(url, "http*://*.upload.wikimedia.org*")) return strProxy;3408 if (shExpMatch(url, "http*://*.zh.wikipedia.org*")) return strProxy;3409 if (shExpMatch(url, "http*://*.zh.m.wikipedia.org*")) return strProxy;3410 if (shExpMatch(url, "http*://*.zh.wikibooks.org*")) return strProxy;3411 if (shExpMatch(url, "http*://*.gov.tw*")) return strProxy;3412 if (shExpMatch(url, "http*://*.174.142.105.153*")) return strProxy;3413 if (shExpMatch(url, "http*://*.69.65.19.160*")) return strProxy;3414 else return "DIRECT";...
ZeParser.js
Source:ZeParser.js
1if (typeof exports !== 'undefined') {2 var Tokenizer = require('./Tokenizer').Tokenizer;3 exports.ZeParser = ZeParser;4}5/**6 * This is my js Parser: Ze. It's actually the post-dev pre-cleanup version. Clearly.7 * Some optimizations have been applied :)8 * (c) Peter van der Zee, qfox.nl9 * @param {String} inp Input10 * @param {Tokenizer} tok11 * @param {Array} stack The tokens will be put in this array. If you're looking for the AST, this would be it :)12 */13function ZeParser(inp, tok, stack, simple){14 this.input = inp;15 this.tokenizer = tok;16 this.stack = stack;17 this.stack.root = true;18 this.scope = stack.scope = [{value:'this', isDeclared:true, isEcma:true, thisIsGlobal:true}]; // names of variables19 this.scope.global = true;20 this.statementLabels = [];21 this.errorStack = [];22 stack.scope = this.scope; // hook root23 stack.labels = this.statementLabels;24 this.regexLhsStart = ZeParser.regexLhsStart;25/*26 this.regexStartKeyword = ZeParser.regexStartKeyword;27 this.regexKeyword = ZeParser.regexKeyword;28 this.regexStartReserved = ZeParser.regexStartReserved;29 this.regexReserved = ZeParser.regexReserved;30*/31 this.regexStartKeyOrReserved = ZeParser.regexStartKeyOrReserved;32 this.hashStartKeyOrReserved = ZeParser.hashStartKeyOrReserved;33 this.regexIsKeywordOrReserved = ZeParser.regexIsKeywordOrReserved;34 this.regexAssignments = ZeParser.regexAssignments;35 this.regexNonAssignmentBinaryExpressionOperators = ZeParser.regexNonAssignmentBinaryExpressionOperators;36 this.regexUnaryKeywords = ZeParser.regexUnaryKeywords;37 this.hashUnaryKeywordStart = ZeParser.hashUnaryKeywordStart;38 this.regexUnaryOperators = ZeParser.regexUnaryOperators;39 this.regexLiteralKeywords = ZeParser.regexLiteralKeywords;40 this.testing = {'this':1,'null':1,'true':1,'false':1};41 this.ast = !simple; ///#define FULL_AST42};43/**44 * Returns just a stacked parse tree (regular array)45 * @param {string} input46 * @param {boolean} simple=false47 * @return {Array}48 */49ZeParser.parse = function(input, simple){50 var tok = new Tokenizer(input);51 var stack = [];52 try {53 var parser = new ZeParser(input, tok, stack);54 if (simple) parser.ast = false;55 parser.parse();56 return stack;57 } catch (e) {58 console.log("Parser has a bug for this input, please report it :)", e);59 return null;60 }61};62/**63 * Returns a new parser instance with parse details for input64 * @param {string} input65 * @returns {ZeParser}66 */67ZeParser.createParser = function(input){68 var tok = new Tokenizer(input);69 var stack = [];70 try {71 var parser = new ZeParser(input, tok, stack);72 parser.parse();73 return parser;74 } catch (e) {75 console.log("Parser has a bug for this input, please report it :)", e);76 return null;77 }78};79ZeParser.prototype = {80 input: null,81 tokenizer: null,82 stack: null,83 scope: null,84 statementLabels: null,85 errorStack: null,86 ast: null,87 parse: function(match){88 if (match) match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, this.stack); // meh89 else match = this.tokenizer.storeCurrentAndFetchNextToken(false, null, this.stack, true); // initialization step, dont store the match (there isnt any!)90 match = this.eatSourceElements(match, this.stack);91 var cycled = false;92 do {93 if (match && match.name != 12/*eof*/) {94 // if not already an error, insert an error before it95 if (match.name != 14/*error*/) this.failignore('UnexpectedToken', match, this.stack);96 // just parse the token as is and continue.97 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, this.stack);98 cycled = true;99 }100 // keep gobbling any errors...101 } while (match && match.name == 14/*error*/);102 // now try again (but only if we gobbled at least one token)...103 if (cycled && match && match.name != 12/*eof*/) match = this.parse(match);104 // pop the last token off the stack if it caused an error at eof105 if (this.tokenizer.errorEscape) {106 this.stack.push(this.tokenizer.errorEscape);107 this.tokenizer.errorEscape = null;108 }109 return match;110 },111 eatSemiColon: function(match, stack){112 //this.stats.eatSemiColon = (+//this.stats.eatSemiColon||0)+1;113 if (match.value == ';') match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);114 else {115 // try asi116 // only if:117 // - this token was preceeded by at least one newline (match.newline) or next token is }118 // - this is EOF119 // - prev token was one of return,continue,break,throw (restricted production), not checked here.120 // the exceptions to this rule are 121 // - if the next line is a regex 122 // - the semi is part of the for-header. 123 // these exceptions are automatically caught by the way the parser is built124 // not eof and just parsed semi or no newline preceeding and next isnt }125 if (match.name != 12/*EOF*/ && (match.semi || (!match.newline && match.value != '}')) && !(match.newline && (match.value == '++' || match.value == '--'))) {126 this.failignore('NoASI', match, stack);127 } else {128 // ASI129 // (match is actually the match _after_ this asi, so the position of asi is match.start, not stop (!)130 var asi = {start:match.start,stop:match.start,name:13/*ASI*/};131 stack.push(asi);132 133 // slip it in the stream, before the current match.134 // for the other tokens see the tokenizer near the end of the main parsing function135 this.tokenizer.addTokenToStreamBefore(asi, match);136 }137 }138 match.semi = true;139 return match;140 },141 /**142 * Eat one or more "AssignmentExpression"s. May also eat a labeled statement if143 * the parameters are set that way. This is the only way to linearly distinct between144 * an expression-statement and a labeled-statement without double lookahead. (ok, maybe not "only")145 * @param {boolean} mayParseLabeledStatementInstead=false If the first token is an identifier and the second a colon, accept this match as a labeled statement instead... Only true if the match in the parameter is an (unreserved) identifier (so no need to validate that further) 146 * @param {Object} match147 * @param {Array} stack148 * @param {boolean} onlyOne=false Only parse a AssignmentExpression149 * @param {boolean} forHeader=false Do not allow the `in` operator150 * @param {boolean} isBreakOrContinueArg=false The argument for break or continue is always a single identifier151 * @return {Object}152 */153 eatExpressions: function(mayParseLabeledStatementInstead, match, stack, onlyOne, forHeader, isBreakOrContinueArg){154 if (this.ast) { //#ifdef FULL_AST155 var pstack = stack;156 stack = [];157 stack.desc = 'expressions';158 stack.nextBlack = match.tokposb;159 pstack.push(stack);160 var parsedExpressions = 0;161 } //#endif162 var first = true;163 do {164 var parsedNonAssignmentOperator = false; // once we parse a non-assignment, this expression can no longer parse an assignment165 // TOFIX: can probably get the regex out somehow...166 if (!first) {167 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);168 if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) match = this.failsafe('ExpectedAnotherExpressionComma', match);169 }170 if (this.ast) { //#ifdef FULL_AST171 ++parsedExpressions;172 var astack = stack;173 stack = [];174 stack.desc = 'expression';175 stack.nextBlack = match.tokposb;176 astack.push(stack);177 } //#endif178 // start of expression is given: match179 // it should indeed be a properly allowed lhs180 // first eat all unary operators181 // they can be added to the stack, but we need to ensure they have indeed a valid operator182 var parseAnotherExpression = true;183 while (parseAnotherExpression) { // keep parsing lhs+operator as long as there is an operator after the lhs.184 if (this.ast) { //#ifdef FULL_AST185 var estack = stack;186 stack = [];187 stack.desc = 'sub-expression';188 stack.nextBlack = match.tokposb;189 estack.push(stack);190 var news = 0; // encountered new operators waiting for parenthesis191 } //#endif192 // start checking lhs193 // if lhs is identifier (new/call expression), allow to parse an assignment operator next194 // otherwise keep eating unary expressions and then any "value"195 // after that search for a binary operator. if we only ate a new/call expression then196 // also allow to eat assignments. repeat for the rhs.197 var parsedUnaryOperator = false;198 var isUnary = null;199 while (200 !isBreakOrContinueArg && // no unary for break/continue201 (isUnary =202 (match.value && this.hashUnaryKeywordStart[match.value[0]] && this.regexUnaryKeywords.test(match.value)) || // (match.value == 'delete' || match.value == 'void' || match.value == 'typeof' || match.value == 'new') ||203 (match.name == 11/*PUNCTUATOR*/ && this.regexUnaryOperators.test(match.value))204 )205 ) {206 if (isUnary) match.isUnaryOp = true;207 if (this.ast) { //#ifdef FULL_AST208 // find parenthesis209 if (match.value == 'new') ++news;210 } //#endif211 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);212 // ensure that it is in fact a valid lhs-start213 if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) match = this.failsafe('ExpectedAnotherExpressionRhs', match);214 // not allowed to parse assignment215 parsedUnaryOperator = true;216 };217 // if we parsed any kind of unary operator, we cannot be parsing a labeled statement218 if (parsedUnaryOperator) mayParseLabeledStatementInstead = false;219 // so now we know match is a valid lhs-start and not a unary operator220 // it must be a string, number, regex, identifier 221 // or the start of an object literal ({), array literal ([) or group operator (().222 var acceptAssignment = false;223 // take care of the "open" cases first (group, array, object)224 if (match.value == '(') {225 if (this.ast) { //#ifdef FULL_AST226 var groupStack = stack;227 stack = [];228 stack.desc = 'grouped';229 stack.nextBlack = match.tokposb;230 groupStack.push(stack);231 var lhp = match;232 match.isGroupStart = true;233 } //#endif234 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);235 if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) match = this.failsafe('GroupingShouldStartWithExpression', match);236 // keep parsing expressions as long as they are followed by a comma237 match = this.eatExpressions(false, match, stack);238 if (match.value != ')') match = this.failsafe('UnclosedGroupingOperator', match);239 if (this.ast) { //#ifdef FULL_AST240 match.twin = lhp;241 lhp.twin = match;242 match.isGroupStop = true;243 if (stack[stack.length-1].desc == 'expressions') {244 // create ref to this expression group to the opening paren245 lhp.expressionArg = stack[stack.length-1];246 }247 } //#endif248 match = this.tokenizer.storeCurrentAndFetchNextToken(true, match, stack); // might be div249 if (this.ast) { //#ifdef FULL_AST250 stack = groupStack;251 } //#endif252 // you can assign to group results. and as long as the group does not contain a comma (and valid ref), it will work too :)253 acceptAssignment = true;254 // there's an extra rule for [ namely that, it must start with an expression but after that, expressions are optional255 } else if (match.value == '[') {256 if (this.ast) { //#ifdef FULL_AST257 stack.sub = 'array literal';258 stack.hasArrayLiteral = true;259 var lhsb = match;260 match.isArrayLiteralStart = true;261 if (!this.scope.arrays) this.scope.arrays = [];262 match.arrayId = this.scope.arrays.length;263 this.scope.arrays.push(match);264 match.targetScope = this.scope;265 } //#endif266 // keep parsing expressions as long as they are followed by a comma267 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);268 // arrays may start with "elided" commas269 while (match.value == ',') match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);270 var foundAtLeastOneComma = true; // for entry in while271 while (foundAtLeastOneComma && match.value != ']') {272 foundAtLeastOneComma = false;273 if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value)) && match.name != 14/*error*/) match = this.failsafe('ArrayShouldStartWithExpression', match);274 match = this.eatExpressions(false, match, stack, true);275 while (match.value == ',') {276 foundAtLeastOneComma = true;277 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);278 }279 }280 if (match.value != ']') {281 match = this.failsafe('UnclosedPropertyBracket', match);282 }283 if (this.ast) { //#ifdef FULL_AST284 match.twin = lhsb;285 lhsb.twin = match;286 match.isArrayLiteralStop = true;287 } //#endif288 match = this.tokenizer.storeCurrentAndFetchNextToken(true, match, stack); // might be div289 while (match.value == '++' || match.value == '--') {290 // gobble and ignore?291 this.failignore('InvalidPostfixOperandArray', match, stack);292 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);293 }294 // object literals need seperate handling...295 } else if (match.value == '{') {296 if (this.ast) { //#ifdef FULL_AST297 stack.sub = 'object literal';298 stack.hasObjectLiteral = true;299 match.isObjectLiteralStart = true;300 if (!this.scope.objects) this.scope.objects = [];301 match.objectId = this.scope.objects.length;302 this.scope.objects.push(match);303 var targetObject = match;304 match.targetScope = this.scope;305 306 var lhc = match;307 } //#endif308 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);309 if (match.name == 12/*eof*/) {310 match = this.failsafe('ObjectLiteralExpectsColonAfterName', match);311 }312 // ObjectLiteral313 // PropertyNameAndValueList314 while (match.value != '}' && match.name != 14/*error*/) { // will stop if next token is } or throw if not and no comma is found315 // expecting a string, number, or identifier316 //if (match.name != 5/*STRING_SINGLE*/ && match.name != 6/*STRING_DOUBLE*/ && match.name != 3/*NUMERIC_HEX*/ && match.name != 4/*NUMERIC_DEC*/ && match.name != 2/*IDENTIFIER*/) {317 // TOFIX: more specific errors depending on type...318 if (!match.isNumber && !match.isString && match.name != 2/*IDENTIFIER*/) {319 match = this.failsafe('IllegalPropertyNameToken', match);320 }321 if (this.ast) { //#ifdef FULL_AST322 var objLitStack = stack;323 stack = [];324 stack.desc = 'objlit pair';325 stack.isObjectLiteralPair = true;326 stack.nextBlack = match.tokposb;327 objLitStack.push(stack);328 var propNameStack = stack;329 stack = [];330 stack.desc = 'objlit pair name';331 stack.nextBlack = match.tokposb;332 propNameStack.push(stack);333 propNameStack.sub = 'data';334 var propName = match;335 propName.isPropertyName = true;336 } //#endif337 var getset = match.value;338 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);339 if (this.ast) { //#ifdef FULL_AST340 stack = propNameStack;341 } //#endif342 343 // for get/set we parse a function-like definition. but only if it's immediately followed by an identifier (otherwise it'll just be the property 'get' or 'set')344 if (getset == 'get') {345 // "get" PropertyName "(" ")" "{" FunctionBody "}"346 if (match.value == ':') {347 if (this.ast) { //#ifdef FULL_AST348 propName.isPropertyOf = targetObject;349 } //#endif350 match = this.eatObjectLiteralColonAndBody(match, stack);351 } else {352 if (this.ast) { //#ifdef FULL_AST353 match.isPropertyOf = targetObject;354 propNameStack.sub = 'getter';355 propNameStack.isAccessor = true;356 } //#endif357 // if (match.name != 2/*IDENTIFIER*/ && match.name != 5/*STRING_SINGLE*/ && match.name != 6/*STRING_DOUBLE*/ && match.name != 3/*NUMERIC_HEX*/ && match.name != 4/*NUMERIC_DEC*/) {358 if (!match.isNumber && !match.isString && match.name != 2/*IDENTIFIER*/) match = this.failsafe('IllegalGetterSetterNameToken', match, true);359 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);360 if (match.value != '(') match = this.failsafe('GetterSetterNameFollowedByOpenParen', match);361 if (this.ast) { //#ifdef FULL_AST362 var lhp = match;363 } //#endif364 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);365 if (match.value != ')') match = this.failsafe('GetterHasNoArguments', match);366 if (this.ast) { //#ifdef FULL_AST367 match.twin = lhp;368 lhp.twin = match;369 } //#endif370 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);371 match = this.eatFunctionBody(match, stack);372 }373 } else if (getset == 'set') {374 // "set" PropertyName "(" PropertySetParameterList ")" "{" FunctionBody "}"375 if (match.value == ':') {376 if (this.ast) { //#ifdef FULL_AST377 propName.isPropertyOf = targetObject;378 } //#endif379 match = this.eatObjectLiteralColonAndBody(match, stack);380 } else {381 if (this.ast) { //#ifdef FULL_AST382 match.isPropertyOf = targetObject;383 propNameStack.sub = 'setter';384 propNameStack.isAccessor = true;385 } //#endif386 if (!match.isNumber && !match.isString && match.name != 2/*IDENTIFIER*/) match = this.failsafe('IllegalGetterSetterNameToken', match);387 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);388 if (match.value != '(') match = this.failsafe('GetterSetterNameFollowedByOpenParen', match);389 if (this.ast) { //#ifdef FULL_AST390 var lhp = match;391 } //#endif392 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);393 if (match.name != 2/*IDENTIFIER*/) {394 if (match.value == ')') match = this.failsafe('SettersMustHaveArgument', match);395 else match = this.failsafe('IllegalSetterArgumentNameToken', match);396 }397 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);398 if (match.value != ')') {399 if (match.value == ',') match = this.failsafe('SettersOnlyGetOneArgument', match);400 else match = this.failsafe('SetterHeaderShouldHaveClosingParen', match);401 }402 if (this.ast) { //#ifdef FULL_AST403 match.twin = lhp;404 lhp.twin = match;405 } //#endif406 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);407 match = this.eatFunctionBody(match, stack);408 }409 } else {410 // PropertyName ":" AssignmentExpression411 if (this.ast) { //#ifdef FULL_AST412 propName.isPropertyOf = targetObject;413 } //#endif414 match = this.eatObjectLiteralColonAndBody(match, stack);415 }416 if (this.ast) { //#ifdef FULL_AST417 stack = objLitStack;418 } //#endif419 // one trailing comma allowed420 if (match.value == ',') {421 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);422 if (match.value == ',') match = this.failsafe('IllegalDoubleCommaInObjectLiteral', match);423 } else if (match.value != '}') match = this.failsafe('UnclosedObjectLiteral', match);424 // either the next token is } and the loop breaks or425 // the next token is the start of the next PropertyAssignment...426 }427 // closing curly428 if (this.ast) { //#ifdef FULL_AST429 match.twin = lhc;430 lhc.twin = match;431 match.isObjectLiteralStop = true;432 } //#endif433 match = this.tokenizer.storeCurrentAndFetchNextToken(true, match, stack); // next may be div434 while (match.value == '++' || match.value == '--') {435 this.failignore('InvalidPostfixOperandObject', match, stack);436 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);437 }438 } else if (match.value == 'function') { // function expression439 if (this.ast) { //#ifdef FULL_AST440 var oldstack = stack;441 stack = [];442 stack.desc = 'func expr';443 stack.isFunction = true;444 stack.nextBlack = match.tokposb;445 if (!this.scope.functions) this.scope.functions = [];446 match.functionId = this.scope.functions.length;447 this.scope.functions.push(match);448 oldstack.push(stack);449 var oldscope = this.scope;450 // add new scope451 match.scope = stack.scope = this.scope = [452 this.scope,453 {value:'this', isDeclared:true, isEcma:true, functionStack: stack},454 {value:'arguments', isDeclared:true, isEcma:true, varType:['Object']}455 ]; // add the current scope (to build chain up-down)456 this.scope.upper = oldscope;457 // ref to back to function that's the cause for this scope458 this.scope.scopeFor = match;459 match.targetScope = oldscope; // consistency460 match.isFuncExprKeyword = true;461 match.functionStack = stack;462 } //#endif463 var funcExprToken = match;464 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);465 if (mayParseLabeledStatementInstead && match.value == ':') match = this.failsafe('LabelsMayNotBeReserved', match);466 if (match.name == 2/*IDENTIFIER*/) {467 funcExprToken.funcName = match;468 match.meta = "func expr name";469 match.varType = ['Function'];470 match.functionStack = stack; // ref to the stack, in case we detect the var being a constructor471 if (this.ast) { //#ifdef FULL_AST472 // name is only available to inner scope473 this.scope.push({value:match.value});474 } //#endif475 if (this.hashStartKeyOrReserved[match.value[0]] /*this.regexStartKeyOrReserved.test(match.value[0])*/ && this.regexIsKeywordOrReserved.test(match.value)) match = this.failsafe('FunctionNameMustNotBeReserved', match);476 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);477 }478 match = this.eatFunctionParametersAndBody(match, stack, true, funcExprToken); // first token after func-expr is div479 while (match.value == '++' || match.value == '--') {480 this.failignore('InvalidPostfixOperandFunction', match, stack);481 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);482 }483 if (this.ast) { //#ifdef FULL_AST484 // restore stack and scope485 stack = oldstack;486 this.scope = oldscope;487 } //#endif488 } else if (match.name <= 6) { // IDENTIFIER STRING_SINGLE STRING_DOUBLE NUMERIC_HEX NUMERIC_DEC REG_EX489 // save it in case it turns out to be a label.490 var possibleLabel = match;491 // validate the identifier, if any492 if (match.name == 2/*IDENTIFIER*/) {493 if (494 // this, null, true, false are actually allowed here495 !this.regexLiteralKeywords.test(match.value) &&496 // other reserved words are not497 this.hashStartKeyOrReserved[match.value[0]] /*this.regexStartKeyOrReserved.test(match.value[0])*/ && this.regexIsKeywordOrReserved.test(match.value)498 ) {499 // if break/continue, we skipped the unary operator check so throw the proper error here500 if (isBreakOrContinueArg) {501 this.failignore('BreakOrContinueArgMustBeJustIdentifier', match, stack);502 } else if (match.value == 'else') {503 this.failignore('DidNotExpectElseHere', match, stack);504 } else {505 //if (mayParseLabeledStatementInstead) {new ZeParser.Error('LabelsMayNotBeReserved', match);506 // TOFIX: lookahead to see if colon is following. throw label error instead if that's the case507 // any forbidden keyword at this point is likely to be a statement start.508 // its likely that the parser will take a while to recover from this point...509 this.failignore('UnexpectedToken', match, stack);510 // TOFIX: maybe i should just return at this point. cut my losses and hope for the best.511 }512 }513 // only accept assignments after a member expression (identifier or ending with a [] suffix)514 acceptAssignment = true;515 } else if (isBreakOrContinueArg) match = this.failsafe('BreakOrContinueArgMustBeJustIdentifier', match);516 // the current match is the lead value being queried. tag it that way517 if (this.ast) { //#ifdef FULL_AST518 // dont mark labels519 if (!isBreakOrContinueArg) {520 match.meta = 'lead value';521 match.leadValue = true;522 }523 } //#endif524 // ok. gobble it.525 match = this.tokenizer.storeCurrentAndFetchNextToken(true, match, stack); // division allowed526 // now check for labeled statement (if mayParseLabeledStatementInstead then the first token for this expression must be an (unreserved) identifier)527 if (mayParseLabeledStatementInstead && match.value == ':') {528 if (possibleLabel.name != 2/*IDENTIFIER*/) {529 // label was not an identifier530 // TOFIX: this colon might be a different type of error... more analysis required531 this.failignore('LabelsMayOnlyBeIdentifiers', match, stack);532 }533 mayParseLabeledStatementInstead = true; // mark label parsed (TOFIX:speed?)534 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);535 possibleLabel.isLabel = true;536 if (this.ast) { //#ifdef FULL_AST537 delete possibleLabel.meta; // oh oops, it's not a lead value.538 possibleLabel.isLabelDeclaration = true;539 this.statementLabels.push(possibleLabel.value);540 stack.desc = 'labeled statement';541 } //#endif542 var errorIdToReplace = this.errorStack.length;543 // eat another statement now, its the body of the labeled statement (like if and while)544 match = this.eatStatement(false, match, stack);545 // if no statement was found, check here now and correct error546 if (match.error && match.error.msg == ZeParser.Errors.UnableToParseStatement.msg) {547 // replace with better error...548 match.error = new ZeParser.Error('LabelRequiresStatement');549 // also replace on stack550 this.errorStack[errorIdToReplace] = match.error;551 }552 match.wasLabel = true;553 return match;554 }555 mayParseLabeledStatementInstead = false;556 } else if (match.value == '}') {557 // ignore... its certainly the end of this expression, but maybe asi can be applied...558 // it might also be an object literal expecting more, but that case has been covered else where.559 // if it turns out the } is bad after all, .parse() will try to recover560 } else if (match.name == 14/*error*/) {561 do {562 if (match.tokenError) {563 var pe = new ZeParser.Error('TokenizerError', match);564 pe.msg += ': '+match.error.msg;565 this.errorStack.push(pe);566 567 this.failSpecial({start:match.start,stop:match.start,name:14/*error*/,error:pe}, match, stack)568 }569 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);570 } while (match.name == 14/*error*/);571 } else if (match.name == 12/*eof*/) {572 // cant parse any further. you're probably just typing...573 return match;574 } else {575 //if (!this.errorStack.length && match.name != 12/*eof*/) console.log(["unknown token", match, stack, Gui.escape(this.input)]);576 this.failignore('UnknownToken', match, stack);577 // we cant really ignore this. eat the token and try again. possibly you're just typing?578 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);579 }580 // search for "value" suffix. property access and call parens.581 while (match.value == '.' || match.value == '[' || match.value == '(') {582 if (isBreakOrContinueArg) match = this.failsafe('BreakOrContinueArgMustBeJustIdentifier', match);583 if (match.value == '.') {584 // property access. read in an IdentifierName (no keyword checks). allow assignments585 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);586 if (match.name != 2/*IDENTIFIER*/) this.failignore('PropertyNamesMayOnlyBeIdentifiers', match, stack);587 if (this.ast) { //#ifdef FULL_AST588 match.isPropertyName = true;589 } //#endif590 match = this.tokenizer.storeCurrentAndFetchNextToken(true, match, stack); // may parse div591 acceptAssignment = true;592 } else if (match.value == '[') {593 if (this.ast) { //#ifdef FULL_AST594 var lhsb = match;595 match.propertyAccessStart = true;596 } //#endif597 // property access, read expression list. allow assignments598 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);599 if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) {600 if (match.value == ']') match = this.failsafe('SquareBracketsMayNotBeEmpty', match);601 else match = this.failsafe('SquareBracketExpectsExpression', match);602 }603 match = this.eatExpressions(false, match, stack);604 if (match.value != ']') match = this.failsafe('UnclosedSquareBrackets', match);605 if (this.ast) { //#ifdef FULL_AST606 match.twin = lhsb;607 match.propertyAccessStop = true;608 lhsb.twin = match;609 if (stack[stack.length-1].desc == 'expressions') {610 // create ref to this expression group to the opening bracket611 lhsb.expressionArg = stack[stack.length-1];612 }613 } //#endif614 match = this.tokenizer.storeCurrentAndFetchNextToken(true, match, stack); // might be div615 acceptAssignment = true;616 } else if (match.value == '(') {617 if (this.ast) { //#ifdef FULL_AST618 var lhp = match;619 match.isCallExpressionStart = true;620 if (news) {621 match.parensBelongToNew = true;622 --news;623 }624 } //#endif625 // call expression, eat optional expression list, disallow assignments626 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);627 if (/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value)) match = this.eatExpressions(false, match, stack); // arguments are optional628 if (match.value != ')') match = this.failsafe('UnclosedCallParens', match);629 if (this.ast) { //#ifdef FULL_AST630 match.twin = lhp;631 lhp.twin = match;632 match.isCallExpressionStop = true;633 if (stack[stack.length-1].desc == 'expressions') {634 // create ref to this expression group to the opening bracket635 lhp.expressionArg = stack[stack.length-1];636 }637 } //#endif638 match = this.tokenizer.storeCurrentAndFetchNextToken(true, match, stack); // might be div639 acceptAssignment = false;640 }641 }642 // check for postfix operators ++ and --643 // they are stronger than the + or - binary operators644 // they can be applied to any lhs (even when it wouldnt make sense)645 // if there was a newline, it should get an ASI646 if ((match.value == '++' || match.value == '--') && !match.newline) {647 if (isBreakOrContinueArg) match = this.failsafe('BreakOrContinueArgMustBeJustIdentifier', match);648 match = this.tokenizer.storeCurrentAndFetchNextToken(true, match, stack); // may parse div649 }650 if (this.ast) { //#ifdef FULL_AST651 // restore "expression" stack652 stack = estack;653 } //#endif654 // now see if there is an operator following...655 do { // this do allows us to parse multiple ternary expressions in succession without screwing up.656 var ternary = false;657 if (658 (!forHeader && match.value == 'in') || // one of two named binary operators, may not be first expression in for-header (when semi's occur in the for-header)659 (match.value == 'instanceof') || // only other named binary operator660 ((match.name == 11/*PUNCTUATOR*/) && // we can only expect a punctuator now661 (match.isAssignment = this.regexAssignments.test(match.value)) || // assignments are only okay with proper lhs662 this.regexNonAssignmentBinaryExpressionOperators.test(match.value) // test all other binary operators663 )664 ) {665 if (match.isAssignment) {666 if (!acceptAssignment) this.failignore('IllegalLhsForAssignment', match, stack);667 else if (parsedNonAssignmentOperator) this.failignore('AssignmentNotAllowedAfterNonAssignmentInExpression', match, stack);668 }669 if (isBreakOrContinueArg) match = this.failsafe('BreakOrContinueArgMustBeJustIdentifier', match);670 if (!match.isAssignment) parsedNonAssignmentOperator = true; // last allowed assignment671 if (this.ast) { //#ifdef FULL_AST672 match.isBinaryOperator = true;673 // we build a stack to ensure any whitespace doesnt break the 1+(n*2) children rule for expressions674 var ostack = stack;675 stack = [];676 stack.desc = 'operator-expression';677 stack.isBinaryOperator = true;678 stack.sub = match.value;679 stack.nextBlack = match.tokposb;680 ostack.sub = match.value;681 stack.isAssignment = match.isAssignment;682 ostack.push(stack);683 } //#endif684 ternary = match.value == '?';685 // math, logic, assignment or in or instanceof686 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);687 if (this.ast) { //#ifdef FULL_AST688 // restore "expression" stack689 stack = ostack;690 } //#endif691 // minor exception to ternary operator, we need to parse two expressions nao. leave the trailing expression to the loop.692 if (ternary) {693 // LogicalORExpression "?" AssignmentExpression ":" AssignmentExpression694 // so that means just one expression center and right.695 if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) this.failignore('InvalidCenterTernaryExpression', match, stack);696 match = this.eatExpressions(false, match, stack, true, forHeader); // only one expression allowed inside ternary center/right697 if (match.value != ':') {698 if (match.value == ',') match = this.failsafe('TernarySecondExpressionCanNotContainComma', match);699 else match = this.failsafe('UnfinishedTernaryOperator', match);700 }701 if (this.ast) { //#ifdef FULL_AST702 // we build a stack to ensure any whitespace doesnt break the 1+(n*2) children rule for expressions703 var ostack = stack;704 stack = [];705 stack.desc = 'operator-expression';706 stack.sub = match.value;707 stack.nextBlack = match.tokposb;708 ostack.sub = match.value;709 stack.isAssignment = match.isAssignment;710 ostack.push(stack);711 } //#endif712 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);713 if (this.ast) { //#ifdef FULL_AST714 stack = ostack;715 } //#endif716 // rhs of the ternary can not contain a comma either717 match = this.eatExpressions(false, match, stack, true, forHeader); // only one expression allowed inside ternary center/right718 }719 } else {720 parseAnotherExpression = false;721 }722 } while (ternary); // if we just parsed a ternary expression, we need to check _again_ whether the next token is a binary operator.723 // start over. match is the rhs for the lhs we just parsed, but lhs for the next expression724 if (parseAnotherExpression && !(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) {725 // no idea what to do now. lets just ignore and see where it ends. TOFIX: maybe just break the loop or return?726 this.failignore('InvalidRhsExpression', match, stack);727 }728 }729 if (this.ast) { //#ifdef FULL_AST730 // restore "expressions" stack731 stack = astack;732 } //#endif733 // at this point we should have parsed one AssignmentExpression734 // lets see if we can parse another one...735 mayParseLabeledStatementInstead = first = false;736 } while (!onlyOne && match.value == ',');737 if (this.ast) { //#ifdef FULL_AST738 // remove empty array739 if (!stack.length) pstack.length = pstack.length-1;740 pstack.numberOfExpressions = parsedExpressions;741 if (pstack[0]) pstack[0].numberOfExpressions = parsedExpressions;742 stack.expressionCount = parsedExpressions;743 } //#endif744 return match;745 },746 eatFunctionDeclaration: function(match, stack){747 if (this.ast) { //#ifdef FULL_AST748 stack.push(stack = []);749 var prevscope = this.scope;750 stack.desc = 'func decl';751 stack.isFunction = true;752 stack.nextBlack = match.tokposb;753 if (!this.scope.functions) this.scope.functions = [];754 match.functionId = this.scope.functions.length;755 this.scope.functions.push(match);756 // add new scope757 match.scope = stack.scope = this.scope = [758 this.scope, // add current scope (build scope chain up-down)759 // Object.create(null,760 {value:'this', isDeclared:true, isEcma:true, functionStack:stack},761 // Object.create(null,762 {value:'arguments', isDeclared:true, isEcma:true, varType:['Object']}763 ];764 // ref to back to function that's the cause for this scope765 this.scope.scopeFor = match;766 match.targetScope = prevscope; // consistency767 768 match.functionStack = stack;769 match.isFuncDeclKeyword = true;770 } //#endif771 // only place that this function is used already checks whether next token is function772 var functionKeyword = match;773 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);774 if (match.name != 2/*IDENTIFIER*/) match = this.failsafe('FunctionDeclarationsMustHaveName', match);775 if (this.hashStartKeyOrReserved[match.value[0]] /*this.regexStartKeyOrReserved.test(match.value[0])*/ && this.regexIsKeywordOrReserved.test(match.value)) this.failignore('FunctionNameMayNotBeReserved', match, stack);776 if (this.ast) { //#ifdef FULL_AST777 functionKeyword.funcName = match;778 prevscope.push({value:match.value});779 match.meta = 'func decl name'; // that's what it is, really780 match.varType = ['Function'];781 match.functionStack = stack;782 } //#endif783 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);784 match = this.eatFunctionParametersAndBody(match, stack, false, functionKeyword); // first token after func-decl is regex785 if (this.ast) { //#ifdef FULL_AST786 // restore previous scope787 this.scope = prevscope;788 } //#endif789 return match;790 },791 eatObjectLiteralColonAndBody: function(match, stack){792 if (this.ast) { //#ifdef FULL_AST793 var propValueStack = stack;794 stack = [];795 stack.desc = 'objlit pair colon';796 stack.nextBlack = match.tokposb;797 propValueStack.push(stack);798 } //#endif799 if (match.value != ':') match = this.failsafe('ObjectLiteralExpectsColonAfterName', match);800 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);801 if (this.ast) { //#ifdef FULL_AST802 stack = propValueStack;803 } //#endif804 // this might actually fail due to ASI optimization.805 // if the property name does not exist and it is the last item806 // of the objlit, the expression parser will see an unexpected807 // } and ignore it, giving some leeway to apply ASI. of course,808 // that doesnt work for objlits. but we dont want to break the809 // existing mechanisms. so we check this differently... :)810 var prevMatch = match;811 match = this.eatExpressions(false, match, stack, true); // only one expression812 if (match == prevMatch) match = this.failsafe('ObjectLiteralMissingPropertyValue', match);813 return match;814 },815 eatFunctionParametersAndBody: function(match, stack, div, funcToken){816 // div: the first token _after_ a function expression may be a division...817 if (match.value != '(') match = this.failsafe('ExpectingFunctionHeaderStart', match);818 else if (this.ast) { //#ifdef FULL_AST819 var lhp = match;820 funcToken.lhp = match;821 } //#endif822 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);823 if (match.name == 2/*IDENTIFIER*/) { // params824 if (this.hashStartKeyOrReserved[match.value[0]] /*this.regexStartKeyOrReserved.test(match.value[0])*/ && this.regexIsKeywordOrReserved.test(match.value)) this.failignore('FunctionArgumentsCanNotBeReserved', match, stack);825 if (this.ast) { //#ifdef FULL_AST826 if (!funcToken.paramNames) funcToken.paramNames = [];827 stack.paramNames = funcToken.paramNames;828 funcToken.paramNames.push(match);829 this.scope.push({value:match.value}); // add param name to scope830 match.meta = 'parameter';831 } //#endif832 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);833 while (match.value == ',') {834 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);835 if (match.name != 2/*IDENTIFIER*/) {836 // example: if name is 12, the source is incomplete...837 this.failignore('FunctionParametersMustBeIdentifiers', match, stack);838 } else if (this.hashStartKeyOrReserved[match.value[0]] /*this.regexStartKeyOrReserved.test(match.value[0])*/ && this.regexIsKeywordOrReserved.test(match.value)) {839 this.failignore('FunctionArgumentsCanNotBeReserved', match, stack);840 }841 if (this.ast) { //#ifdef FULL_AST842 // Object.create(null,843 this.scope.push({value:match.value}); // add param name to scope844 match.meta = 'parameter';845 if (match.name == 2/*IDENTIFIER*/) funcToken.paramNames.push(match);846 } //#endif847 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);848 }849 }850 if (this.ast) { //#ifdef FULL_AST851 if (lhp) {852 match.twin = lhp;853 lhp.twin = match;854 funcToken.rhp = match;855 }856 } //#endif857 if (match.value != ')') match = this.failsafe('ExpectedFunctionHeaderClose', match); // TOFIX: can be various things here...858 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);859 match = this.eatFunctionBody(match, stack, div, funcToken);860 return match;861 },862 eatFunctionBody: function(match, stack, div, funcToken){863 if (this.ast) { //#ifdef FULL_AST864 stack.push(stack = []);865 stack.desc = 'func body';866 stack.nextBlack = match.tokposb;867 // create EMPTY list of functions. labels cannot cross function boundaries868 var labelBackup = this.statementLabels;869 this.statementLabels = [];870 stack.labels = this.statementLabels;871 } //#endif872 // if div, a division can occur _after_ this function expression873 //this.stats.eatFunctionBody = (+//this.stats.eatFunctionBody||0)+1;874 if (match.value != '{') match = this.failsafe('ExpectedFunctionBodyCurlyOpen', match);875 if (this.ast) { //#ifdef FULL_AST876 var lhc = match;877 if (funcToken) funcToken.lhc = lhc;878 } //#endif879 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);880 match = this.eatSourceElements(match, stack);881 if (match.value != '}') match = this.failsafe('ExpectedFunctionBodyCurlyClose', match);882 if (this.ast) { //#ifdef FULL_AST883 match.twin = lhc;884 lhc.twin = match;885 if (funcToken) funcToken.rhc = match;886 } //#endif887 match = this.tokenizer.storeCurrentAndFetchNextToken(div, match, stack);888 if (this.ast) { //#ifdef FULL_AST889 // restore label set890 this.statementLabels = labelBackup;891 } //#endif892 return match;893 },894 eatVar: function(match, stack){895 if (this.ast) { //#ifdef FULL_AST896 stack.push(stack = []);897 stack.desc = 'statement';898 stack.sub = 'var';899 stack.nextBlack = match.tokposb;900 match.stack = stack;901 match.isVarKeyword = true;902 } //#endif903 match = this.eatVarDecl(match, stack);904 match = this.eatSemiColon(match, stack);905 return match;906 },907 eatVarDecl: function(match, stack, forHeader){908 // assumes match is indeed the identifier 'var'909 if (this.ast) { //#ifdef FULL_AST910 stack.push(stack = []);911 stack.desc = 'var decl';912 stack.nextBlack = match.tokposb;913 var targetScope = this.scope;914 while (targetScope.catchScope) targetScope = targetScope[0];915 } //#endif916 var first = true;917 var varsDeclared = 0;918 do {919 ++varsDeclared;920 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack); // start: var, iteration: comma921 if (this.ast) { //#ifdef FULL_AST922 var declStack = stack;923 var stack = [];924 stack.desc = 'single var decl';925 stack.varStack = declStack; // reference to the var statement stack, it might hook to jsdoc needed for these vars926 stack.nextBlack = match.tokposb;927 declStack.push(stack);928 var singleDecStack = stack;929 stack = [];930 stack.desc = 'sub-expression';931 stack.nextBlack = match.tokposb;932 singleDecStack.push(stack);933 } //#endif934 // next token should be a valid identifier935 if (match.name == 12/*eof*/) {936 if (first) match = this.failsafe('VarKeywordMissingName', match);937 // else, ignore. TOFIX: return?938 else match = this.failsafe('IllegalTrailingComma', match);939 } else if (match.name != 2/*IDENTIFIER*/) {940 match = this.failsafe('VarNamesMayOnlyBeIdentifiers', match);941 } else if (this.hashStartKeyOrReserved[match.value[0]] /*this.regexStartKeyOrReserved.test(match.value[0])*/ && this.regexIsKeywordOrReserved.test(match.value)) {942 match = this.failsafe('VarNamesCanNotBeReserved', match);943 }944 // mark the match as being a variable name. we need it for lookup later :)945 if (this.ast) { //#ifdef FULL_AST946 match.meta = 'var name';947 targetScope.push({value:match.value});948 } //#endif949 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);950 if (this.ast) { //#ifdef FULL_AST951 stack = singleDecStack;952 } //#endif953 // next token should either be a = , or ;954 // if = parse an expression and optionally a comma955 if (match.value == '=') {956 if (this.ast) { //#ifdef FULL_AST957 singleDecStack = stack;958 stack = [];959 stack.desc = 'operator-expression';960 stack.sub = '=';961 stack.nextBlack = match.tokposb;962 singleDecStack.push(stack);963 stack.isAssignment = true;964 } //#endif965 match.isInitialiser = true;966 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);967 if (this.ast) { //#ifdef FULL_AST968 stack = singleDecStack;969 } //#endif970 if (!(/*is left hand side start?*/ match.name <= 6 || match.name == 14/*error*/ || this.regexLhsStart.test(match.value))) match = this.failsafe('VarInitialiserExpressionExpected', match);971 match = this.eatExpressions(false, match, stack, true, forHeader); // only one expression 972 // var statement: comma or semi now973 // for statement: semi, comma or 'in'974 }975 if (this.ast) { //#ifdef FULL_AST976 stack = declStack;977 } //#endif978 // determines proper error message in one case979 first = false;980 // keep parsing name(=expression) sequences as long as you see a comma here981 } while (match.value == ',');982 if (this.ast) { //#ifdef FULL_AST983 stack.varsDeclared = varsDeclared;984 } //#endif985 return match;986 },987 eatIf: function(match, stack){988 if (this.ast) { //#ifdef FULL_AST989 stack.push(stack = []);990 stack.desc = 'statement';991 stack.sub = 'if';992 stack.hasElse = false;993 stack.nextBlack = match.tokposb;994 } //#endif995 // (996 // expression997 // )998 // statement999 // [else statement]1000 var ifKeyword = match;1001 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1002 if (match.value != '(') match = this.failsafe('ExpectedStatementHeaderOpen', match);1003 if (this.ast) { //#ifdef FULL_AST1004 var lhp = match;1005 match.statementHeaderStart = true;1006 } //#endif1007 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1008 if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) match = this.failsafe('StatementHeaderIsNotOptional', match);1009 match = this.eatExpressions(false, match, stack);1010 if (match.value != ')') match = this.failsafe('ExpectedStatementHeaderClose', match);1011 if (this.ast) { //#ifdef FULL_AST1012 match.twin = lhp;1013 match.statementHeaderStop = true;1014 lhp.twin = match;1015 if (stack[stack.length-1].desc == 'expressions') {1016 // create ref to this expression group to the opening bracket1017 lhp.expressionArg = stack[stack.length-1];1018 }1019 } //#endif1020 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1021 match = this.eatStatement(false, match, stack);1022 // match might be null here... (if the if-statement was end part of the source)1023 if (match && match.value == 'else') {1024 if (this.ast) { //#ifdef FULL_AST1025 ifKeyword.hasElse = match;1026 } //#endif1027 match = this.eatElse(match, stack);1028 }1029 return match;1030 },1031 eatElse: function(match, stack){1032 if (this.ast) { //#ifdef FULL_AST1033 stack.hasElse = true;1034 stack.push(stack = []);1035 stack.desc = 'statement';1036 stack.sub = 'else';1037 stack.nextBlack = match.tokposb;1038 } //#endif1039 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1040 match = this.eatStatement(false, match, stack);1041 return match;1042 },1043 eatDo: function(match, stack){1044 if (this.ast) { //#ifdef FULL_AST1045 stack.push(stack = []);1046 stack.desc = 'statement';1047 stack.sub = 'do';1048 stack.isIteration = true;1049 stack.nextBlack = match.tokposb;1050 this.statementLabels.push(''); // add "empty"1051 var doToken = match;1052 } //#endif1053 // statement1054 // while1055 // (1056 // expression1057 // )1058 // semi-colon1059 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1060 match = this.eatStatement(false, match, stack);1061 if (match.value != 'while') match = this.failsafe('DoShouldBeFollowedByWhile', match);1062 if (this.ast) { //#ifdef FULL_AST1063 match.hasDo = doToken;1064 } //#endif1065 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1066 if (match.value != '(') match = this.failsafe('ExpectedStatementHeaderOpen', match);1067 if (this.ast) { //#ifdef FULL_AST1068 var lhp = match;1069 match.statementHeaderStart = true;1070 } //#endif1071 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1072 if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) match = this.failsafe('StatementHeaderIsNotOptional', match);1073 match = this.eatExpressions(false, match, stack);1074 if (match.value != ')') match = this.failsafe('ExpectedStatementHeaderClose', match);1075 if (this.ast) { //#ifdef FULL_AST1076 match.twin = lhp;1077 match.statementHeaderStop = true;1078 match.isForDoWhile = true; // prevents missing block warnings1079 lhp.twin = match;1080 if (stack[stack.length-1].desc == 'expressions') {1081 // create ref to this expression group to the opening bracket1082 lhp.expressionArg = stack[stack.length-1];1083 }1084 } //#endif1085 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1086 match = this.eatSemiColon(match, stack); // TOFIX: this is not optional according to the spec, but browsers apply ASI anyways1087 return match;1088 },1089 eatWhile: function(match, stack){1090 if (this.ast) { //#ifdef FULL_AST1091 stack.push(stack = []);1092 stack.desc = 'statement';1093 stack.sub = 'while';1094 stack.isIteration = true;1095 stack.nextBlack = match.tokposb;1096 this.statementLabels.push(''); // add "empty"1097 } //#endif1098 // (1099 // expression1100 // )1101 // statement1102 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1103 if (match.value != '(') match = this.failsafe('ExpectedStatementHeaderOpen', match);1104 if (this.ast) { //#ifdef FULL_AST1105 var lhp = match;1106 match.statementHeaderStart = true;1107 } //#endif1108 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1109 if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) match = this.failsafe('StatementHeaderIsNotOptional', match);1110 match = this.eatExpressions(false, match, stack);1111 if (match.value != ')') match = this.failsafe('ExpectedStatementHeaderClose', match);1112 if (this.ast) { //#ifdef FULL_AST1113 match.twin = lhp;1114 match.statementHeaderStop = true;1115 lhp.twin = match;1116 if (stack[stack.length-1].desc == 'expressions') {1117 // create ref to this expression group to the opening bracket1118 lhp.expressionArg = stack[stack.length-1];1119 }1120 } //#endif1121 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1122 match = this.eatStatement(false, match, stack);1123 return match;1124 },1125 eatFor: function(match, stack){1126 if (this.ast) { //#ifdef FULL_AST1127 stack.push(stack = []);1128 stack.desc = 'statement';1129 stack.sub = 'for';1130 stack.isIteration = true;1131 stack.nextBlack = match.tokposb;1132 this.statementLabels.push(''); // add "empty"1133 } //#endif1134 // either a for(..in..) or for(..;..;..)1135 // start eating an expression but refuse to parse1136 // 'in' on the top-level of that expression. they are fine1137 // in sub-levels (group, array, etc). Now the expression1138 // must be followed by either ';' or 'in'. Else throw.1139 // Branch on that case, ; requires two.1140 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1141 if (match.value != '(') match = this.failsafe('ExpectedStatementHeaderOpen', match);1142 if (this.ast) { //#ifdef FULL_AST1143 var lhp = match;1144 match.statementHeaderStart = true;1145 match.forHeaderStart = true;1146 } //#endif1147 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1148 // for (either case) may start with var, in which case you'll parse a var declaration before encountering the 'in' or first semi.1149 if (match.value == 'var') {1150 match = this.eatVarDecl(match, stack, true);1151 } else if (match.value != ';') { // expressions are optional in for-each1152 if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) {1153 this.failignore('StatementHeaderIsNotOptional', match, stack);1154 }1155 match = this.eatExpressions(false, match, stack, false, true); // can parse multiple expressions, in is not ok here1156 }1157 // now we parsed an expression if it existed. the next token should be either ';' or 'in'. branch accordingly1158 if (match.value == 'in') {1159 var declStack = stack[stack.length-1];1160 if (declStack.varsDeclared > 1) {1161 // disallowed. for-in var decls can only have one var name declared1162 this.failignore('ForInCanOnlyDeclareOnVar', match, stack);1163 }1164 1165 if (this.ast) { //#ifdef FULL_AST1166 stack.forType = 'in';1167 match.forFor = true; // make easy distinction between conditional and iterational operator1168 } //#endif1169 // just parse another expression, where 'in' is allowed.1170 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1171 match = this.eatExpressions(false, match, stack);1172 } else {1173 if (match.value != ';') match = this.failsafe('ForHeaderShouldHaveSemisOrIn', match);1174 if (this.ast) { //#ifdef FULL_AST1175 stack.forType = 'each';1176 match.forEachHeaderStart = true;1177 } //#endif1178 // parse another optional no-in expression, another semi and then one more optional no-in expression1179 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1180 if (/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value)) match = this.eatExpressions(false, match, stack); // in is ok here1181 if (match.value != ';') match = this.failsafe('ExpectedSecondSemiOfForHeader', match);1182 if (this.ast) { //#ifdef FULL_AST1183 match.forEachHeaderStop = true;1184 } //#endif1185 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1186 if (/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value)) match = this.eatExpressions(false, match, stack); // in is ok here1187 }1188 if (match.value != ')') match = this.failsafe('ExpectedStatementHeaderClose', match);1189 if (this.ast) { //#ifdef FULL_AST1190 match.twin = lhp;1191 match.statementHeaderStop = true;1192 match.forHeaderStop = true;1193 lhp.twin = match;1194 if (match.forType == 'in' && stack[stack.length-1].desc == 'expressions') {1195 // create ref to this expression group to the opening bracket1196 lhp.expressionArg = stack[stack.length-1];1197 }1198 } //#endif1199 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1200 match = this.eatStatement(false, match, stack);1201 return match;1202 },1203 eatContinue: function(match, stack){1204 if (this.ast) { //#ifdef FULL_AST1205 stack.push(stack = []);1206 stack.desc = 'statement';1207 stack.sub = 'continue';1208 stack.nextBlack = match.tokposb;1209 match.restricted = true;1210 } //#endif1211 // (no-line-break identifier)1212 // ;1213 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack); // may not have line terminator...1214 if (!match.newline && match.value != ';' && match.name != 12/*EOF*/ && match.value != '}') {1215 if (this.ast) { //#ifdef FULL_AST1216 match.isLabel = true;1217 match.isLabelTarget = true;1218 var continueArg = match; // remember to see if this continue parsed a label1219 } //#endif1220 // may only parse exactly an identifier at this point1221 match = this.eatExpressions(false, match, stack, true, false, true); // first true=onlyOne, second: continue/break arg1222 if (this.ast) { //#ifdef FULL_AST1223 stack.hasLabel = continueArg != match;1224 } //#endif1225 if (match.value != ';' && !match.newline && match.name != 12/*eof*/ && match.value != '}') match = this.failsafe('BreakOrContinueArgMustBeJustIdentifier', match);1226 }1227 match = this.eatSemiColon(match, stack);1228 return match;1229 },1230 eatBreak: function(match, stack){1231 if (this.ast) { //#ifdef FULL_AST1232 var parentstack = stack1233 stack = [];1234 stack.desc = 'statement';1235 stack.sub = 'break';1236 stack.nextBlack = match.tokposb;1237 1238 parentstack.push(stack);1239 match.restricted = true;1240 } //#endif1241 // (no-line-break identifier)1242 // ;1243 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack); // may not have line terminator...1244 if (!match.newline && match.value != ';' && match.name != 12/*EOF*/ && match.value != '}') {1245 if (this.ast) { //#ifdef FULL_AST1246 match.isLabel = true;1247 match.isLabelTarget = true;1248 var breakArg = match; // remember to see if this break parsed a label1249 } //#endif1250 // may only parse exactly an identifier at this point1251 match = this.eatExpressions(false, match, stack, true, false, true); // first true=onlyOne, second: continue/break arg1252 if (this.ast) { //#ifdef FULL_AST1253 stack.hasLabel = breakArg != match;1254 } //#endif1255 if (match.value != ';' && !match.newline && match.name != 12/*eof*/ && match.value != '}') match = this.failsafe('BreakOrContinueArgMustBeJustIdentifier', match);1256 }1257 match = this.eatSemiColon(match, stack);1258 return match;1259 },1260 eatReturn: function(match, stack){1261 if (this.ast) { //#ifdef FULL_AST1262 stack.push(stack = []);1263 stack.desc = 'statement';1264 stack.sub = 'return';1265 stack.nextBlack = match.tokposb;1266 stack.returnFor = this.scope.scopeFor;1267 match.restricted = true;1268 } //#endif1269 // (no-line-break expression)1270 // ;1271 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack); // may not have line terminator...1272 if (!match.newline && match.value != ';' && match.name != 12/*EOF*/ && match.value != '}') {1273 match = this.eatExpressions(false, match, stack);1274 }1275 match = this.eatSemiColon(match, stack);1276 return match;1277 },1278 eatThrow: function(match, stack){1279 if (this.ast) { //#ifdef FULL_AST1280 stack.push(stack = []);1281 stack.desc = 'statement';1282 stack.sub = 'throw';1283 stack.nextBlack = match.tokposb;1284 match.restricted = true;1285 } //#endif1286 // (no-line-break expression)1287 // ;1288 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack); // may not have line terminator...1289 if (match.newline) match = this.failsafe('ThrowCannotHaveReturn', match);1290 if (match.value == ';') match = this.failsafe('ThrowMustHaveArgument', match);1291 match = this.eatExpressions(false, match, stack);1292 match = this.eatSemiColon(match, stack);1293 return match;1294 },1295 eatSwitch: function(match, stack){1296 if (this.ast) { //#ifdef FULL_AST1297 stack.push(stack = []);1298 stack.desc = 'statement';1299 stack.sub = 'switch';1300 stack.nextBlack = match.tokposb;1301 this.statementLabels.push(''); // add "empty"1302 } //#endif1303 // meh.1304 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1305 if (match.value != '(') match = this.failsafe('ExpectedStatementHeaderOpen', match);1306 if (this.ast) { //#ifdef FULL_AST1307 var lhp = match;1308 match.statementHeaderStart = true;1309 } //#endif1310 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1311 if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) {1312 this.failignore('StatementHeaderIsNotOptional', match, stack);1313 }1314 match = this.eatExpressions(false, match, stack);1315 if (match.value != ')') match = this.failsafe('ExpectedStatementHeaderClose', match);1316 if (this.ast) { //#ifdef FULL_AST1317 match.twin = lhp;1318 match.statementHeaderStop = true;1319 lhp.twin = match;1320 if (stack[stack.length-1].desc == 'expressions') {1321 // create ref to this expression group to the opening bracket1322 lhp.expressionArg = stack[stack.length-1];1323 }1324 } //#endif1325 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1326 if (match.value != '{') match = this.failsafe('SwitchBodyStartsWithCurly', match);1327 if (this.ast) { //#ifdef FULL_AST1328 var lhc = match;1329 } //#endif1330 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1331 // you may parse a default case, and only once per switch. but you may do so anywhere.1332 var parsedAnything = false;1333 while (match.value == 'case' || (!stack.parsedSwitchDefault && match.value == 'default')) {1334 parsedAnything = true;1335 if (match.value == 'default') stack.parsedSwitchDefault = true;1336 match = this.eatSwitchClause(match, stack);1337 }1338 // if you didnt parse anything but not encountering a closing curly now, you might be thinking that switches may start with silly stuff1339 if (!parsedAnything && match.value != '}') {1340 match = this.failsafe('SwitchBodyMustStartWithClause', match);1341 }1342 if (stack.parsedSwitchDefault && match.value == 'default') {1343 this.failignore('SwitchCannotHaveDoubleDefault', match, stack);1344 }1345 if (match.value != '}' && match.name != 14/*error*/) match = this.failsafe('SwitchBodyEndsWithCurly', match);1346 if (this.ast) { //#ifdef FULL_AST1347 match.twin = lhc;1348 lhc.twin = match;1349 } //#endif1350 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1351 return match;1352 },1353 eatSwitchClause: function(match, stack){1354 match = this.eatSwitchHeader(match, stack);1355 match = this.eatSwitchBody(match, stack);1356 return match;1357 },1358 eatSwitchHeader: function(match, stack){1359 if (this.ast) { //#ifdef FULL_AST1360 // collect whitespace...1361 var switchHeaderStack = stack1362 stack.push(stack = []);1363 stack.desc = 'switch clause header';1364 stack.nextBlack = match.tokposb;1365 } //#endif1366 if (match.value == 'case') {1367 match = this.eatSwitchCaseHead(match, stack);1368 } else { // default1369 if (this.ast) { //#ifdef FULL_AST1370 switchHeaderStack.hasDefaultClause = true;1371 } //#endif1372 match = this.eatSwitchDefaultHead(match, stack);1373 }1374 if (this.ast) { //#ifdef FULL_AST1375 // just to group whitespace (makes certain navigation easier..)1376 stack.push(stack = []);1377 stack.desc = 'colon';1378 stack.nextBlack = match.tokposb;1379 } //#endif1380 if (match.value != ':') {1381 match = this.failsafe('SwitchClausesEndWithColon', match);1382 }1383 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1384 return match;1385 },1386 eatSwitchBody: function(match, stack){1387 if (this.ast) { //#ifdef FULL_AST1388 stack.push(stack = []);1389 stack.desc = 'switch clause body';1390 stack.nextBlack = match.tokposb;1391 } //#endif1392 // parse body of case or default, just so long case and default keywords are not seen and end of switch is not reached1393 // (clause bodies may be empty, for instance to fall through)1394 var lastMatch = null;1395 while (match.value != 'default' && match.value != 'case' && match.value != '}' && match.name != 14/*error*/ && match.name != 12/*eof*/ && lastMatch != match) {1396 lastMatch = match; // prevents endless loops on error ;)1397 match = this.eatStatement(true, match, stack);1398 }1399 if (lastMatch == match) this.failsafe('UnexpectedInputSwitch', match);1400 return match;1401 },1402 eatSwitchCaseHead: function(match, stack){1403 if (this.ast) { //#ifdef FULL_AST1404 stack.sub = 'case';1405 var caseHeadStack = stack;1406 stack.push(stack = []);1407 stack.desc = 'case';1408 stack.nextBlack = match.tokposb;1409 match.isCase = true;1410 } //#endif1411 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1412 if (match.value == ':') {1413 this.failignore('CaseMissingExpression', match, stack);1414 } else {1415 if (this.ast) { //#ifdef FULL_AST1416 caseHeadStack.push(stack = []);1417 stack.desc = 'case arg';1418 stack.nextBlack = match.tokposb;1419 } //#endif1420 match = this.eatExpressions(false, match, stack);1421 }1422 return match;1423 },1424 eatSwitchDefaultHead: function(match, stack){1425 if (this.ast) { //#ifdef FULL_AST1426 stack.sub = 'default';1427 stack.push(stack = []);1428 stack.desc = 'case';1429 stack.nextBlack = match.tokposb;1430 match.isDefault = true;1431 } //#endif1432 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1433 return match;1434 },1435 eatTryCatchFinally: function(match, stack){1436 if (this.ast) { //#ifdef FULL_AST1437 stack.push(stack = []);1438 stack.desc = 'statement';1439 stack.sub = 'try';1440 stack.nextBlack = match.tokposb;1441 } //#endif1442 match = this.eatTry(match, stack);1443 if (match.value == 'catch') {1444 if (this.ast) { //#ifdef FULL_AST1445 stack.hasCatch = true;1446 } //#endif1447 match = this.eatCatch(match, stack);1448 }1449 if (match.value == 'finally') {1450 if (this.ast) { //#ifdef FULL_AST1451 stack.hasFinally = true;1452 } //#endif1453 match = this.eatFinally(match, stack);1454 }1455 // at least a catch or finally block must follow. may be both.1456 if (!stack.tryHasCatchOrFinally) {1457 this.failignore('TryMustHaveCatchOrFinally', match, stack);1458 }1459 return match;1460 },1461 eatTry: function(match, stack){1462 // block1463 // (catch ( identifier ) block )1464 // (finally block)1465 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1466 if (match.value != '{') match = this.failsafe('MissingTryBlockCurlyOpen', match);1467 if (this.ast) { //#ifdef FULL_AST1468 stack.push(stack = []);1469 stack.desc = 'statement';1470 stack.sub = 'tryblock';1471 stack.nextBlack = match.tokposb;1472 var lhc = match;1473 } //#endif1474 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1475 if (match.value != '}') match = this.eatStatements(match, stack);1476 if (match.value != '}') match = this.failsafe('MissingTryBlockCurlyClose', match);1477 if (this.ast) { //#ifdef FULL_AST1478 match.twin = lhc;1479 lhc.twin = match;1480 } //#endif1481 1482 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1483 return match;1484 },1485 eatCatch: function(match, stack){1486 stack.tryHasCatchOrFinally = true;1487 if (this.ast) { //#ifdef FULL_AST1488 stack.push(stack = []);1489 stack.desc = 'statement';1490 stack.sub = 'catch';1491 stack.nextBlack = match.tokposb;1492 // the catch block has a header which can contain at most one parameter1493 // this parameter is bound to a local stack. formally, if that parameter1494 // shadows another variable, changes made to the variable inside the catch1495 // should not be reflected by the variable being shadowed. however, this1496 // is not very safe to rely on so there ought to be a warning. note that1497 // only this parameter gets bound to this inner scope, other parameters.1498 var catchScopeBackup = this.scope;1499 match.scope = this.scope = stack.scope = [this.scope];1500 this.scope.catchScope = true; // mark this as being a catchScope1501 // find first function scope or global scope object...1502 var nonCatchScope = catchScopeBackup;1503 while (nonCatchScope.catchScope) nonCatchScope = nonCatchScope[0];1504 // get catch id, which is governed by the function/global scope only1505 if (!nonCatchScope.catches) nonCatchScope.catches = [];1506 match.catchId = nonCatchScope.catches.length;1507 nonCatchScope.catches.push(match);1508 match.targetScope = nonCatchScope;1509 match.catchScope = this.scope;1510 // ref to back to function that's the cause for this scope1511 this.scope.scopeFor = match;1512 // catch clauses dont have a special `this` or `arguments`, map them to their parent scope1513 if (catchScopeBackup.global) this.scope.push(catchScopeBackup[0]); // global (has no `arguments` but always a `this`)1514 else if (catchScopeBackup.catchScope) {1515 // tricky. there will at least be a this1516 this.scope.push(catchScopeBackup[1]);1517 // but there might not be an arguments1518 if (catchScopeBackup[2] && catchScopeBackup[2].value == 'arguments') this.scope.push(catchScopeBackup[2]);1519 } else this.scope.push(catchScopeBackup[1], catchScopeBackup[2]); // function scope, copy this and arguments1520 } //#endif1521 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1522 if (match.value != '(') match = this.failsafe('CatchHeaderMissingOpen', match);1523 if (this.ast) { //#ifdef FULL_AST1524 var lhp = match;1525 } //#endif1526 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1527 if (match.name != 2/*IDENTIFIER*/) match = this.failsafe('MissingCatchParameter', match);1528 if (this.hashStartKeyOrReserved[match.value[0]] /*this.regexStartKeyOrReserved.test(match.value[0])*/ && this.regexIsKeywordOrReserved.test(match.value)) {1529 this.failignore('CatchParameterNameMayNotBeReserved', match, stack);1530 }1531 if (this.ast) { //#ifdef FULL_AST1532 match.meta = 'var name';1533 // this is the catch variable. bind it to a scope but keep the scope as1534 // it currently is.1535 this.scope.push(match);1536 match.isCatchVar = true;1537 } //#endif1538 // now the catch body will use the outer scope to bind new variables. the problem is that1539 // inner scopes, if any, should have access to the scope variable, so their scope should1540 // be linked to the catch scope. this is a problem in the current architecture but the 1541 // idea is to pass on the catchScope as the scope to the eatStatements call, etc.1542 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1543 if (match.value != ')') match = this.failsafe('CatchHeaderMissingClose', match);1544 if (this.ast) { //#ifdef FULL_AST1545 match.twin = lhp;1546 lhp.twin = match;1547 } //#endif1548 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1549 if (match.value != '{') match = this.failsafe('MissingCatchBlockCurlyOpen', match);1550 if (this.ast) { //#ifdef FULL_AST1551 var lhc = match;1552 } //#endif1553 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1554 // catch body. statements are optional. 1555 if (match.value != '}') match = this.eatStatements(match, stack);1556 if (match.value != '}') match = this.failsafe('MissingCatchBlockCurlyClose', match);1557 if (this.ast) { //#ifdef FULL_AST1558 match.twin = lhc;1559 lhc.twin = match;1560 } //#endif1561 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1562 if (this.ast) { //#ifdef FULL_AST1563 this.scope = catchScopeBackup;1564 } //#endif1565 return match;1566 },1567 eatFinally: function(match, stack){1568 stack.tryHasCatchOrFinally = true;1569 if (this.ast) { //#ifdef FULL_AST1570 stack.push(stack = []);1571 stack.desc = 'statement';1572 stack.sub = 'finally';1573 stack.nextBlack = match.tokposb;1574 } //#endif1575 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1576 if (match.value != '{') match = this.failsafe('MissingFinallyBlockCurlyOpen', match);1577 if (this.ast) { //#ifdef FULL_AST1578 var lhc = match;1579 } //#endif1580 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1581 if (match.value != '}') match = this.eatStatements(match, stack);1582 if (match.value != '}') match = this.failsafe('MissingFinallyBlockCurlyClose', match);1583 if (this.ast) { //#ifdef FULL_AST1584 match.twin = lhc;1585 lhc.twin = match;1586 } //#endif1587 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1588 return match;1589 },1590 eatDebugger: function(match, stack){1591 if (this.ast) { //#ifdef FULL_AST1592 stack.push(stack = []);1593 stack.desc = 'statement';1594 stack.sub = 'debugger';1595 stack.nextBlack = match.tokposb;1596 } //#endif1597 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1598 match = this.eatSemiColon(match, stack);1599 return match;1600 },1601 eatWith: function(match, stack){1602 if (this.ast) { //#ifdef FULL_AST1603 stack.push(stack = []);1604 stack.desc = 'statement';1605 stack.sub = 'with';1606 stack.nextBlack = match.tokposb;1607 } //#endif1608 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1609 if (match.value != '(') match = this.failsafe('ExpectedStatementHeaderOpen', match);1610 if (this.ast) { //#ifdef FULL_AST1611 var lhp = match;1612 match.statementHeaderStart = true;1613 } //#endif1614 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1615 if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) match = this.failsafe('StatementHeaderIsNotOptional', match);1616 match = this.eatExpressions(false, match, stack);1617 if (match.value != ')') match = this.failsafe('ExpectedStatementHeaderClose', match);1618 if (this.ast) { //#ifdef FULL_AST1619 match.twin = lhp;1620 match.statementHeaderStop = true;1621 lhp.twin = match;1622 if (stack[stack.length-1].desc == 'expressions') {1623 // create ref to this expression group to the opening bracket1624 lhp.expressionArg = stack[stack.length-1];1625 }1626 } //#endif1627 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1628 match = this.eatStatement(false, match, stack);1629 return match;1630 },1631 eatFunction: function(match, stack){1632 var pe = new ZeParser.Error1633 this.errorStack.push(pe);1634 // ignore. browsers will accept it anyways1635 var error = {start:match.stop,stop:match.stop,name:14/*error*/,error:pe};1636 this.specialError(error, match, stack);1637 // now try parsing a function declaration...1638 match = this.eatFunctionDeclaration(match, stack);1639 return match;1640 },1641 eatLabelOrExpression: function(match, stack){1642 if (this.ast) { //#ifdef FULL_AST1643 var parentstack = stack;1644 stack = [];1645 stack.desc = 'statement';1646 stack.sub = 'expression';1647 stack.nextBlack = match.tokposb;1648 parentstack.push(stack);1649 } //#endif1650 // must be an expression or a labeled statement.1651 // in order to prevent very weird return constructs, we'll first check the first match1652 // if that's an identifier, we'll gobble it here and move on to the second.1653 // if that's a colon, we'll gobble it as a labeled statement. otherwise, we'll pass on1654 // control to eatExpression, with the note that we've already gobbled a 1655 match = this.eatExpressions(true, match, stack);1656 // if we parsed a label, the returned match (colon) will have this property1657 if (match.wasLabel) {1658 if (this.ast) { //#ifdef FULL_AST1659 stack.sub = 'labeled';1660 } //#endif1661 // it will have already eaten another statement for the label1662 } else {1663 if (this.ast) { //#ifdef FULL_AST1664 stack.sub = 'expression';1665 } //#endif1666 // only parse semi if we didnt parse a label just now...1667 match = this.eatSemiColon(match, stack);1668 }1669 return match;1670 },1671 eatBlock: function(match, stack){1672 if (this.ast) { //#ifdef FULL_AST1673 stack.sub = 'block';1674 var lhc = match;1675 } //#endif1676 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1677 if (match.value == '}') {1678 if (this.ast) { //#ifdef FULL_AST1679 stack.isEmptyBlock = true;1680 } //#endif1681 } else {1682 match = this.eatStatements(match, stack);1683 }1684 if (match.value != '}') match = this.failsafe('BlockCurlyClose', match);1685 if (this.ast) { //#ifdef FULL_AST1686 match.twin = lhc;1687 lhc.twin = match;1688 } //#endif1689 match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1690 return match;1691 },1692 eatStatements: function(match, stack){1693 //this.stats.eatStatements = (+//this.stats.eatStatements||0)+1;1694 // detecting the start of a statement "quickly" is virtually impossible.1695 // instead we keep eating statements until the match stops changing1696 // the first argument indicates that the statement is optional. if that1697 // statement was not found, the input match will also be the output.1698 while (match != (match = this.eatStatement(true, match, stack)));1699 return match;1700 },1701 eatStatement: function(isOptional, match, stack){1702 if (!match && isOptional) return match; // eof1703 if (this.ast) { //#ifdef FULL_AST1704 match.statementStart = true;1705 var pstack = stack;1706 stack = [];1707 stack.desc = 'statement-parent';1708 stack.nextBlack = match.tokposb;1709 pstack.push(stack);1710 // list of labels, these are bound to statements (and can access any label higher up, but not cross functions)1711 var labelBackup = this.statementLabels;1712 this.statementLabels = [labelBackup]; // make ref like tree. we need this to catch labels parsed beyond the current position (not yet known to use)1713 stack.labels = this.statementLabels;1714 } //#endif1715 if (match.name == 2/*IDENTIFIER*/) {1716 // try to determine whether it's a statement1717 // (block/empty statements come later, this branch is only for identifiers)1718 switch (match.value) {1719 case 'var':1720 match = this.eatVar(match, stack);1721 break;1722 case 'if':1723 match = this.eatIf(match, stack);1724 break;1725 case 'do':1726 match = this.eatDo(match, stack);1727 break;1728 case 'while':1729 match = this.eatWhile(match, stack);1730 break;1731 case 'for':1732 match = this.eatFor(match, stack);1733 break;1734 case 'continue':1735 match = this.eatContinue(match, stack);1736 break;1737 case 'break':1738 match = this.eatBreak(match, stack);1739 break;1740 case 'return':1741 match = this.eatReturn(match, stack);1742 break;1743 case 'throw':1744 match = this.eatThrow(match, stack);1745 break;1746 case 'switch':1747 match = this.eatSwitch(match, stack);1748 break;1749 case 'try':1750 match = this.eatTryCatchFinally(match, stack);1751 break;1752 case 'debugger':1753 match = this.eatDebugger(match, stack);1754 break;1755 case 'with':1756 match = this.eatWith(match, stack);1757 break;1758 case 'function':1759 // I'm not sure whether this is at all possible.... (but it's bad, either way ;)1760 // so add an error token, but parse the function as if it was a declaration.1761 this.failignore('StatementMayNotStartWithFunction', match, stack);1762 // now parse as declaration... (most likely?)1763 match = this.eatFunctionDeclaration(match, stack);1764 break;1765 default: // either a label or an expression-statement1766 match = this.eatLabelOrExpression(match, stack);1767 }1768 } else if (match.value == '{') { // Block (make sure you do this before checking for expression...)1769 match = this.eatBlock(match, stack);1770 } else if (1771 // expression statements:1772 match.isString ||1773 match.isNumber ||1774 match.name == 1/*REG_EX*/ ||1775 this.regexLhsStart.test(match.value)1776 ) {1777 match = this.eatExpressions(false, match,stack);1778 match = this.eatSemiColon(match, stack);1779 } else if (match.value == ';') { // empty statement1780 match.emptyStatement = true;1781 match = this.eatSemiColon(match, stack);1782 } else if (!isOptional) {1783 if (this.ast) { //#ifdef FULL_AST1784 // unmark token as being start of a statement, since it's obviously not1785 match.statementStart = false;1786 } //#endif1787 match = this.failsafe('UnableToParseStatement', match);1788 } else {1789 // unmark token as being start of a statement, since it's obviously not1790 if (this.ast) match.statementStart = true;1791 }1792 if (this.ast) { //#ifdef FULL_AST1793 if (!stack.length) pstack.length = pstack.length-1;1794 // restore label set1795 this.statementLabels = labelBackup;1796 } //#endif1797 return match;1798 },1799 eatSourceElements: function(match, stack){1800 //this.stats.eatSourceElements = (+//this.stats.eatSourceElements||0)+1;1801 // detecting the start of a statement "quickly" is virtually impossible.1802 // instead we keep eating statements until the match stops changing1803 // the first argument indicates that the statement is optional. if that1804 // statement was not found, the input match will also be the output.1805 while (match != oldMatch) { // difficult to determine whether ` && match.name != 12/*EOF*/` is actually speeding things up. it's an extra check vs one less call to eatStatement...1806 var oldMatch = match;1807 // always try to eat function declaration first. otherwise 'function' at the start might cause eatStatement to throw up1808 if (match.value == 'function') match = this.eatFunctionDeclaration(match, stack);1809 else match = this.eatStatement(true, match, stack);1810 }1811 return match;1812 },1813 failsafe: function(name, match, doNotAddMatch){1814 var pe = new ZeParser.Error(name, match);1815 this.errorStack.push(pe);1816 if (!doNotAddMatch) {1817 // the match was bad, but add it to the ast anyways. in most cases this is the case but in some its not.1818 // the tokenizer will pick up on the errorEscape property and add it after the match we passed on.1819 if (this.tokenizer.errorEscape) this.stack.push(this.tokenizer.errorEscape);1820 this.tokenizer.errorEscape = match;1821 }1822 var error = {start:match.start,stop:match.start,len:0, name:14/*error*/,error:pe, value:''};1823 this.tokenizer.addTokenToStreamBefore(error, match);1824 return error;1825 },1826 failignore: function(name, match, stack){1827 var pe = new ZeParser.Error(name, match);1828 this.errorStack.push(pe);1829 // ignore the error (this will screw up :)1830 var error = {start:match.start,stop:match.start,len:0,name:14/*error*/,error:pe, value:''};1831 stack.push(error);1832 this.tokenizer.addTokenToStreamBefore(error, match);1833 },1834 failSpecial: function(error, match, stack){1835 // we cant really ignore this. eat the token1836 stack.push(error);1837 this.tokenizer.addTokenToStreamBefore(error, match);1838 },18390:0};1840//#ifdef TEST_SUITE1841ZeParser.testSuite = function(tests){1842 var ok = 0;1843 var fail = 0;1844 var start = +new Date;1845 for (var i = 0; i < tests.length; ++i) {1846 var test = tests[i], input = test[0], outputLen = test[1].length ? test[1][1] : test[1], desc = test[test.length - 1], stack = [];1847 try {1848 var result = ZeParser.parse(input, true);1849 if (result.length == outputLen) {1850 ++ok;1851 } else {1852 ++fail;1853 }1854 } catch (e) {1855 ++fail;1856 }1857 document.getElementsByTagName('div')[0].innerHTML = ('Ze parser test suite finished ('+(+new Date - start)+' ms). ok:'+ok+', fail:'+fail);1858 };1859};1860//#endif1861ZeParser.regexLhsStart = /[\+\-\~\!\(\{\[]/;1862/*1863ZeParser.regexStartKeyword = /[bcdefinrstvw]/;1864ZeParser.regexKeyword = /^break$|^catch$|^continue$|^debugger$|^default$|^delete$|^do$|^else$|^finally$|^for$|^function$|^if$|^in$|^instanceof$|^new$|^return$|^switch$|^this$|^throw$|^try$|^typeof$|^var$|^void$|^while$|^with$/;1865ZeParser.regexStartReserved = /[ceis]/;1866ZeParser.regexReserved = /^class$|^const$|^enum$|^export$|^extends$|^import$|^super$/;1867*/1868ZeParser.regexStartKeyOrReserved = /[bcdefinrstvw]/;1869ZeParser.hashStartKeyOrReserved = Object.create ? Object.create(null, {b:{value:1},c:{value:1},d:{value:1},e:{value:1},f:{value:1},i:{value:1},n:{value:1},r:{value:1},s:{value:1},t:{value:1},v:{value:1},w:{value:1}}) : {b:1,c:1,d:1,e:1,f:1,i:1,n:1,r:1,s:1,t:1,v:1,w:1};1870ZeParser.regexIsKeywordOrReserved = /^break$|^catch$|^continue$|^debugger$|^default$|^delete$|^do$|^else$|^finally$|^for$|^function$|^if$|^in$|^instanceof$|^new$|^return$|^switch$|^case$|^this$|^true$|^false$|^null$|^throw$|^try$|^typeof$|^var$|^void$|^while$|^with$|^class$|^const$|^enum$|^export$|^extends$|^import$|^super$/;1871ZeParser.regexAssignments = /^[\+\-\*\%\&\|\^\/]?=$|^\<\<\=$|^\>{2,3}\=$/;1872ZeParser.regexNonAssignmentBinaryExpressionOperators = /^[\+\-\*\%\|\^\&\?\/]$|^[\<\>]\=?$|^[\=\!]\=\=?$|^\<\<|\>\>\>?$|^\&\&$|^\|\|$/;1873ZeParser.regexUnaryKeywords = /^delete$|^void$|^typeof$|^new$/;1874ZeParser.hashUnaryKeywordStart = Object.create ? Object.create(null, {d:{value:1},v:{value:1},t:{value:1},n:{value:1}}) : {d:1,v:1,t:1,n:1};1875ZeParser.regexUnaryOperators = /[\+\-\~\!]/;1876ZeParser.regexLiteralKeywords = /^this$|^null$|^true$|^false$/;1877ZeParser.Error = function(type, match){1878 //if (type == 'BreakOrContinueArgMustBeJustIdentifier') throw here;1879 this.msg = ZeParser.Errors[type].msg;1880 this.before = ZeParser.Errors[type].before;1881 this.match = match;1882};1883ZeParser.Errors = {1884 NoASI: {msg:'Expected semi-colon, was unable to apply ASI'},1885 ExpectedAnotherExpressionComma: {msg:'expecting another (left hand sided) expression after the comma'},1886 ExpectedAnotherExpressionRhs: {msg:"expected a rhs expression"},1887 UnclosedGroupingOperator: {msg:"Unclosed grouping operator"},1888 GroupingShouldStartWithExpression: {msg:'The grouping operator (`(`) should start with a left hand sided expression'},1889 ArrayShouldStartWithExpression: {msg:'The array literal (`[`) should start with a left hand sided expression'},1890 UnclosedPropertyBracket: {msg:'Property bracket was not closed after expression (expecting `]`)'},1891 IllegalPropertyNameToken: {msg:'Object literal property names can only be assigned as strings, numbers or identifiers'},1892 IllegalGetterSetterNameToken: {msg:'Name of a getter/setter can only be assigned as strings, numbers or identifiers'},1893 GetterSetterNameFollowedByOpenParen: {msg:'The name of the getter/setter should immediately be followed by the opening parenthesis `(`'},1894 GetterHasNoArguments: {msg:'The opening parenthesis `(` of the getter should be immediately followed by the closing parenthesis `)`, the getter cannot have an argument'},1895 IllegalSetterArgumentNameToken: {msg:'Expecting the name of the argument of a setter, can only be assigned as strings, numbers or identifiers'},1896 SettersOnlyGetOneArgument: {msg:'Setters have one and only one argument, missing the closing parenthesis `)`'},1897 SetterHeaderShouldHaveClosingParen: {msg:'After the first argument of a setter should come a closing parenthesis `)`'},1898 SettersMustHaveArgument: {msg:'Setters must have exactly one argument defined'},1899 UnclosedObjectLiteral: {msg:'Expected to find a comma `,` for the next expression or a closing curly brace `}` to end the object literal'},1900 FunctionNameMustNotBeReserved: {msg:'Function name may not be a keyword or a reserved word'},1901 ExpressionMayNotStartWithKeyword: {msg:'Expressions may not start with keywords or reserved words that are not in this list: [this, null, true, false, void, typeof, delete, new]'},1902 LabelsMayOnlyBeIdentifiers: {msg:'Label names may only be defined as an identifier'},1903 LabelsMayNotBeReserved: {msg:'Labels may not be a keyword or a reserved word'},1904 UnknownToken: {msg:'Unknown token encountered, dont know how to proceed'},1905 PropertyNamesMayOnlyBeIdentifiers: {msg:'The tokens of property names accessed through the dot operator may only be identifiers'},1906 SquareBracketExpectsExpression: {msg:'The square bracket property access expects an expression'},1907 SquareBracketsMayNotBeEmpty: {msg:'Square brackets may never be empty, expecting an expression'},1908 UnclosedSquareBrackets: {msg:'Unclosed square bracket encountered, was expecting `]` after the expression'},1909 UnclosedCallParens: {msg:'Unclosed call parenthesis, expecting `)` after the optional expression'},1910 InvalidCenterTernaryExpression: {msg:'Center expression of ternary operator should be a regular expression (but may not contain the comma operator directly)'},1911 UnfinishedTernaryOperator: {msg:'Encountered a ternary operator start (`?`) but did not find the required colon (`:`) after the center expression'},1912 TernarySecondExpressionCanNotContainComma: {msg:'The second and third expressions of the ternary operator can/may not "directly" contain a comma operator'},1913 InvalidRhsExpression: {msg:'Expected a right hand side expression after the operator (which should also be a valid lhs) but did not find one'},1914 FunctionDeclarationsMustHaveName: {msg:'Function declaration must have name'},1915 FunctionNameMayNotBeReserved: {msg:'Function name may not be a keyword or reserved word'},1916 ExpectingFunctionHeaderStart: {msg:'Expected the opening parenthesis of the function header'},1917 FunctionArgumentsCanNotBeReserved: {msg:'Function arguments may not be keywords or reserved words'},1918 FunctionParametersMustBeIdentifiers: {msg:'Function arguments must be identifiers'},1919 ExpectedFunctionHeaderClose: {msg:'Expected the closing parenthesis `)` of the function header'},1920 ExpectedFunctionBodyCurlyOpen: {msg:'Expected the opening curly brace `{` for the function body'},1921 ExpectedFunctionBodyCurlyClose: {msg:'Expected the closing curly brace `}` for the function body'},1922 VarNamesMayOnlyBeIdentifiers: {msg:'Missing variable name, must be a proper identifier'},1923 VarNamesCanNotBeReserved: {msg:'Variable names may not be keywords or reserved words'},1924 VarInitialiserExpressionExpected: {msg:'The initialiser of the variable statement should be an expression without comma'},1925 ExpectedStatementHeaderOpen: {msg:'Expected opening parenthesis `(` for statement header'},1926 StatementHeaderIsNotOptional: {msg:'Statement header must not be empty'},1927 ExpectedStatementHeaderClose: {msg:'Expected closing parenthesis `)` for statement header'},1928 DoShouldBeFollowedByWhile: {msg:'The do-while statement requires the `while` keyword after the expression'},1929 ExpectedSecondSemiOfForHeader: {msg:'Expected the second semi-colon of the for-each header'},1930 ForHeaderShouldHaveSemisOrIn: {msg:'The for-header should contain at least the `in` operator or two semi-colons (`;`)'},1931 SwitchBodyStartsWithCurly: {msg:'The body of a switch statement starts with a curly brace `{`'},1932 SwitchClausesEndWithColon: {msg:'Switch clauses (`case` and `default`) end with a colon (`:`)'},1933 SwitchCannotHaveDoubleDefault: {msg:'Switches cannot have more than one `default` clause'},1934 SwitchBodyEndsWithCurly: {msg:'The body of a switch statement ends with a curly brace `}`'},1935 MissingTryBlockCurlyOpen: {msg:'Missing the opening curly brace (`{`) for the block of the try statement'},1936 MissingTryBlockCurlyClose: {msg:'Missing the closing curly brace (`}`) for the block of the try statement'},1937 CatchHeaderMissingOpen: {msg:'Missing the opening parenthesis of the catch header'},1938 MissingCatchParameter: {msg:'Catch clauses should have exactly one argument which will be bound to the error object being thrown'},1939 CatchParameterNameMayNotBeReserved: {msg:'Catch clause parameter may not be a keyword or reserved word'},1940 CatchHeaderMissingClose: {msg:'Missing the closing parenthesis of the catch header'},1941 MissingCatchBlockCurlyOpen: {msg:'Missing the opening curly brace (`{`) for the block of the catch statement'},1942 MissingCatchBlockCurlyClose: {msg:'Missing the closing curly brace (`}`) for the block of the catch statement'},1943 MissingFinallyBlockCurlyOpen: {msg:'Missing the opening curly brace (`{`) for the block of the finally statement'},1944 MissingFinallyBlockCurlyClose: {msg:'Missing the closing curly brace (`}`) for the block of the finally statement'},1945 StatementMayNotStartWithFunction: {msg:'statements may not start with function...', before:true},1946 BlockCurlyClose: {msg:'Expected the closing curly (`}`) for a block statement'},1947 BlockCurlyOpen: {msg:'Expected the closing curly (`}`) for a block statement'},1948 UnableToParseStatement: {msg:'Was unable to find a statement when it was requested'},1949 IllegalDoubleCommaInObjectLiteral: {msg:'A double comma in object literals is not allowed'},1950 ObjectLiteralExpectsColonAfterName: {msg:'After every property name (identifier, string or number) a colon (`:`) should follow'},1951 ThrowMustHaveArgument: {msg:'The expression argument for throw is not optional'},1952 ThrowCannotHaveReturn: {msg:'There may not be a return between throw and the start of its expression argument'},1953 SwitchBodyMustStartWithClause: {msg:'The body of a switch clause must start with at a case or default clause (but may be empty, which would be silly)'},1954 BreakOrContinueArgMustBeJustIdentifier: {msg:'The argument to a break or continue statement must be exactly and only an identifier (an existing label)'},1955 AssignmentNotAllowedAfterNonAssignmentInExpression: {msg:'An assignment is not allowed if it is preceeded by a non-expression operator in the same expression-level'},1956 IllegalLhsForAssignment: {msg:'Illegal left hand side for assignment (you cannot assign to things like string literals, number literals or function calls}'},1957 VarKeywordMissingName: {msg:'Var keyword should be followed by a variable name'},1958 IllegalTrailingComma: {msg:'Illegal trailing comma found'},1959 ObjectLiteralMissingPropertyValue: {msg:'Missing object literal property value'},1960 TokenizerError: {msg:'Tokenizer encountered unexpected input'},1961 LabelRequiresStatement: {msg:'Saw a label without the (required) statement following'},1962 DidNotExpectElseHere: {msg:'Did not expect an else here. To what if should it belong? Maybe you put a ; after the if-block? (if(x){};else{})'},1963 UnexpectedToken: {msg:'Found an unexpected token and have no idea why'},1964 InvalidPostfixOperandArray: {msg:'You cannot apply ++ or -- to an array'},1965 InvalidPostfixOperandObject: {msg:'You cannot apply ++ or -- to an object'},1966 InvalidPostfixOperandFunction: {msg:'You cannot apply ++ or -- to a function'},1967 CaseMissingExpression: {msg:'Case expects an expression before the colon'},1968 TryMustHaveCatchOrFinally: {msg:'The try statement must have a catch or finally block'},1969 UnexpectedInputSwitch: {msg:'Unexpected input while parsing a switch clause...'},1970 ForInCanOnlyDeclareOnVar: {msg:'For-in header can only introduce one new variable'}...
ezproxy autoforwarding.user.js
Source:ezproxy autoforwarding.user.js
1// ==UserScript==2// @name EzProxy Redirector3// @namespace http://example.com4// @author @ronery5// @description Automatically redirect to the proxified equivalent as provided by the UofL.6// @updateRUL https://github.com/biochemputer/Javascripts/raw/master/ezproxy%20autoforwarding.user.js7// @version 0.18// @match https://www.thieme.de/*9// @match http://www.thieme-chemistry.com/*10// @match http://www.tandfonline.com/*11// @match https://www.reaxys.com/*12// @match https://origin-scifinder.cas.org/*13// @match https://scifinder.cas.org/*14// @match http://pubs.acs.org/*15// @match https://pubs.acs.org/*16// @match http://acta.astrouw.edu.pl/*17// @match https://acta.astrouw.edu.pl/*18// @match http://www.actahort.org/*19// @match https://www.actahort.org/*20// @match http://www.actamathematica.org/*21// @match https://www.actamathematica.org/*22// @match http://www.acta.hu/*23// @match https://www.acta.hu/*24// @match http://app.pan.pl/*25// @match https://app.pan.pl/*26// @match http://www.architecture.com.au/*27// @match https://www.architecture.com.au/*28// @match http://www.ahajournals.org/*29// @match https://www.ahajournals.org/*30// @match http://www.aiaa.org/*31// @match https://www.aiaa.org/*32// @match http://aids-clinical-care.jwatch.org/*33// @match https://aids-clinical-care.jwatch.org/*34// @match http://www.humanitiesebook.org/*35// @match https://www.humanitiesebook.org/*36// @match http://search.alexanderstreet.com/*37// @match https://search.alexanderstreet.com/*38// @match http://www.akademiai.com/*39// @match https://www.akademiai.com/*40// @match http://www.astreetpress.com/*41// @match https://www.astreetpress.com/*42// @match http://ejournals.wspc.com.sg/*43// @match https://ejournals.wspc.com.sg/*44// @match http://neur.allenpress.com/*45// @match https://neur.allenpress.com/*46// @match http://intl.alphamedpress.org/*47// @match https://intl.alphamedpress.org/*48// @match http://www.aacc.org/*49// @match https://www.aacc.org/*50// @match http://www.aapm.org/*51// @match https://www.aapm.org/*52// @match http://jada.ada.org/*53// @match https://jada.ada.org/*54// @match http://www.aeaweb.org/*55// @match https://www.aeaweb.org/*56// @match http://www.agu.org/*57// @match https://www.agu.org/*58// @match http://intl.amjbot.org/*59// @match https://intl.amjbot.org/*60// @match http://www.ajcn.org/*61// @match https://www.ajcn.org/*62// @match http://www.ajhg.org/*63// @match https://www.ajhg.org/*64// @match http://www.amjpathol.org/*65// @match https://www.amjpathol.org/*66// @match http://ajp.press.uiuc.edu/*67// @match https://ajp.press.uiuc.edu/*68// @match http://www.ajsonline.org/*69// @match https://www.ajsonline.org/*70// @match http://www.ajtmh.org/*71// @match https://www.ajtmh.org/*72// @match http://www.ams.org/*73// @match https://www.ams.org/*74// @match http://www.minsocam.org/*75// @match https://www.minsocam.org/*76// @match http://*.aps.org/*77// @match https://*.aps.org/*78// @match http://www.physiology.org/*79// @match https://www.physiology.org/*80// @match http://www.the-aps.org/*81// @match https://www.the-aps.org/*82// @match http://www.amamanualofstyle.com/*83// @match https://www.amamanualofstyle.com/*84// @match http://alatechsource.metapress.com/*85// @match https://alatechsource.metapress.com/*86// @match http://alcts.metapress.com/*87// @match https://alcts.metapress.com/*88// @match http://journals.ametsoc.org/*89// @match https://journals.ametsoc.org/*90// @match http://www.agronomy.org/*91// @match https://www.agronomy.org/*92// @match http://www.ascb.org/*93// @match https://www.ascb.org/*94// @match http://www.asbmb.org/*95// @match https://www.asbmb.org/*96// @match http://ajcp.ascpjournals.org/*97// @match https://ajcp.ascpjournals.org/*98// @match http://horttech.ashspublications.org/*99// @match https://horttech.ashspublications.org/*100// @match http://www.hematology.org/*101// @match https://www.hematology.org/*102// @match http://jasn.asnjournals.org/*103// @match https://jasn.asnjournals.org/*104// @match http://www.asn-online.org/*105// @match https://www.asn-online.org/*106// @match http://www.atsjournals.org/*107// @match https://www.atsjournals.org/*108// @match http://www.annee-philologique.com/*109// @match https://www.annee-philologique.com/*110// @match http://www.anesthesiaprogress.org/*111// @match https://www.anesthesiaprogress.org/*112// @match http://www.annallergy.org/*113// @match https://www.annallergy.org/*114// @match http://www.annals.org/*115// @match https://www.annals.org/*116// @match http://annals.princeton.edu/*117// @match https://annals.princeton.edu/*118// @match http://www.theannals.com/*119// @match https://www.theannals.com/*120// @match http://www.annualreviews.org/*121// @match https://www.annualreviews.org/*122// @match http://www.imfareaer.org/*123// @match https://www.imfareaer.org/*124// @match http://www.anthrosource.net/*125// @match https://www.anthrosource.net/*126// @match http://antiquity.ac.uk/*127// @match https://antiquity.ac.uk/*128// @match http://content.apa.org/*129// @match https://content.apa.org/*130// @match http://www.adtmag.com/*131// @match https://www.adtmag.com/*132// @match http://apsjournals.apsnet.org/*133// @match https://apsjournals.apsnet.org/*134// @match http://www.artstor.org/*135// @match https://www.artstor.org/*136// @match http://www.ascelibrary.org/*137// @match https://www.ascelibrary.org/*138// @match http://www.asip.org/*139// @match https://www.asip.org/*140// @match http://www.aslo.org/*141// @match https://www.aslo.org/*142// @match http://products.asminternational.org/*143// @match https://products.asminternational.org/*144// @match http://www.asm.org/*145// @match https://www.asm.org/*146// @match http://elibrary.asabe.org/*147// @match https://elibrary.asabe.org/*148// @match http://www.asmedigitalcollection.asme.org/*149// @match https://www.asmedigitalcollection.asme.org/*150// @match http://www.aspectfinancial.com.au/*151// @match https://www.aspectfinancial.com.au/*152// @match http://www.aspetjournals.org/*153// @match https://www.aspetjournals.org/*154// @match http://www.asia-studies.com/*155// @match https://www.asia-studies.com/*156// @match http://www.afpe.org.uk/*157// @match https://www.afpe.org.uk/*158// @match http://crl.acrl.org/*159// @match https://crl.acrl.org/*160// @match http://journalsip.astm.org/*161// @match https://journalsip.astm.org/*162// @match http://enterprise.astm.org/*163// @match https://enterprise.astm.org/*164// @match http://www.oxford-auslawdictionary.com/*165// @match https://www.oxford-auslawdictionary.com/*166// @match http://www.austms.org.au/*167// @match https://www.austms.org.au/*168// @match http://www.onlinepublications.austroads.com.au/*169// @match https://www.onlinepublications.austroads.com.au/*170// @match http://www.abs.gov.au/*171// @match https://www.abs.gov.au/*172// @match http://www.austlit.edu.au/*173// @match https://www.austlit.edu.au/*174// @match http://www.asmjournals.org/*175// @match https://www.asmjournals.org/*176// @match http://eureka.rlg.org/*177// @match https://eureka.rlg.org/*178// @match http://journals.bcdecker.com/*179// @match https://journals.bcdecker.com/*180// @match http://www.bepress.com/*181// @match https://www.bepress.com/*182// @match http://www.waspress.co.uk/*183// @match https://www.waspress.co.uk/*184// @match http://www.begellhouse.com/*185// @match https://www.begellhouse.com/*186// @match http://ebooks.benthamscience.com/*187// @match https://ebooks.benthamscience.com/*188// @match http://bmc.lib.umich.edu/*189// @match https://bmc.lib.umich.edu/*190// @match http://apps.brepolis.net/*191// @match https://apps.brepolis.net/*192// @match http://autoweb.rlg.org/*193// @match https://autoweb.rlg.org/*194// @match http://www.biochemj.org/*195// @match https://www.biochemj.org/*196// @match http://bst.portlandpress.com/*197// @match https://bst.portlandpress.com/*198// @match http://www.biochemsoctrans.org/*199// @match https://www.biochemsoctrans.org/*200// @match http://www.biolbull.org/*201// @match https://www.biolbull.org/*202// @match http://www.biolreprod.org/*203// @match https://www.biolreprod.org/*204// @match http://www.biomedcentral.com/*205// @match https://www.biomedcentral.com/*206// @match http://ccforum.com/*207// @match https://ccforum.com/*208// @match http://alzres.com/*209// @match https://alzres.com/*210// @match http://arthritis-research.com/*211// @match https://arthritis-research.com/*212// @match http://breast-cancer-research.com/*213// @match https://breast-cancer-research.com/*214// @match http://genomebiology.com/*215// @match https://genomebiology.com/*216// @match http://genomemedicine.com/*217// @match https://genomemedicine.com/*218// @match http://stemcellres.com/*219// @match https://stemcellres.com/*220// @match http://www.biophysj.org/*221// @match https://www.biophysj.org/*222// @match http://www.sociologyencyclopedia.com/*223// @match https://www.sociologyencyclopedia.com/*224// @match http://www.blackwellreference.com/*225// @match https://www.blackwellreference.com/*226// @match http://www.blackwell-synergy.com/*227// @match https://www.blackwell-synergy.com/*228// @match http://www.bloodjournal.org/*229// @match https://www.bloodjournal.org/*230// @match http://www.bioscientifica.com/*231// @match https://www.bioscientifica.com/*232// @match http://dmfr.birjournals.org/*233// @match https://dmfr.birjournals.org/*234// @match http://journals.bmj.com/*235// @match https://journals.bmj.com/*236// @match http://journals.brepols.net/*237// @match https://journals.brepols.net/*238// @match http://brepols.metapress.com/*239// @match https://brepols.metapress.com/*240// @match http://www.bridgemaneducation.com/*241// @match https://www.bridgemaneducation.com/*242// @match http://referenceworks.brillonline.com/*243// @match https://referenceworks.brillonline.com/*244// @match http://www.brillonline.nl/*245// @match https://www.brillonline.nl/*246// @match http://nijhoffonline.nl/*247// @match https://nijhoffonline.nl/*248// @match http://britishacademy.universitypressscholarship.com/*249// @match https://britishacademy.universitypressscholarship.com/*250// @match http://bjp.rcpsych.org/*251// @match https://bjp.rcpsych.org/*252// @match http://britishperiodicals.chadwyck.co.uk/*253// @match https://britishperiodicals.chadwyck.co.uk/*254// @match http://www.pharmacopoeia.co.uk/*255// @match https://www.pharmacopoeia.co.uk/*256// @match http://www.abcb.gov.au/*257// @match https://www.abcb.gov.au/*258// @match http://www.bcaillustrated.com.au/*259// @match https://www.bcaillustrated.com.au/*260// @match http://www.businessnews.com.au/*261// @match https://www.businessnews.com.au/*262// @match http://bww.dnb.com.au/*263// @match https://bww.dnb.com.au/*264// @match http://www.butterworthsonline.com/*265// @match https://www.butterworthsonline.com/*266// @match http://www.cabdirect.org/*267// @match https://www.cabdirect.org/*268// @match http://www.cabi.org/*269// @match https://www.cabi.org/*270// @match http://caliber.ucpress.net/*271// @match https://caliber.ucpress.net/*272// @match http://histories.cambridge.org/*273// @match https://histories.cambridge.org/*274// @match http://universitypublishingonline.org/*275// @match https://universitypublishingonline.org/*276// @match http://journals.cambridge.org/*277// @match https://journals.cambridge.org/*278// @match http://uwa.cambridge.patron.eb20.com/*279// @match https://uwa.cambridge.patron.eb20.com/*280// @match http://www.csa3.com/*281// @match https://www.csa3.com/*282// @match http://www.caaa.ca/*283// @match https://www.caaa.ca/*284// @match http://journals.cms.math.ca/*285// @match https://journals.cms.math.ca/*286// @match http://www.cmaj.ca/*287// @match https://www.cmaj.ca/*288// @match http://www.canmin.org/*289// @match https://www.canmin.org/*290// @match http://pubservices.nrc-cnrc.ca/*291// @match https://pubservices.nrc-cnrc.ca/*292// @match http://www.lexxion.eu/*293// @match https://www.lexxion.eu/*294// @match http://ww3.cch.com.au:8080/*295// @match https://ww3.cch.com.au:8080/*296// @match http://www.ceda.com.au/*297// @match https://www.ceda.com.au/*298// @match http://www.cellbiolint.org/*299// @match https://www.cellbiolint.org/*300// @match http://www.cellpress.com/*301// @match https://www.cellpress.com/*302// @match http://eebo.chadwyck.com/*303// @match https://eebo.chadwyck.com/*304// @match http://iimp.chadwyck.com/*305// @match https://iimp.chadwyck.com/*306// @match http://iimpft.chadwyck.com/*307// @match https://iimpft.chadwyck.com/*308// @match http://www.charlestonco.com/*309// @match https://www.charlestonco.com/*310// @match http://www.chelonianjournals.org/*311// @match https://www.chelonianjournals.org/*312// @match http://www.csj.jp/*313// @match https://www.csj.jp/*314// @match http://www.chemnetbase.com/*315// @match https://www.chemnetbase.com/*316// @match http://www.chicagomanualofstyle.org/*317// @match https://www.chicagomanualofstyle.org/*318// @match http://oversea.cnki.net/*319// @match https://oversea.cnki.net/*320// @match http://www.pkulaw.cn/*321// @match https://www.pkulaw.cn/*322// @match http://www.cefc.com.hk/*323// @match https://www.cefc.com.hk/*324// @match http://www.cro3.org/*325// @match https://www.cro3.org/*326// @match http://www.citiprogram.org/*327// @match https://www.citiprogram.org/*328// @match http://shmu.alexanderstreet.com/*329// @match https://shmu.alexanderstreet.com/*330// @match http://www.classiques-garnier.com/*331// @match https://www.classiques-garnier.com/*332// @match http://uwau.classical.com/*333// @match https://uwau.classical.com/*334// @match http://www.aspresolver.com/*335// @match https://www.aspresolver.com/*336// @match http://www.clinchem.org/*337// @match https://www.clinchem.org/*338// @match http://clinicalevidence.bmj.com/*339// @match https://clinicalevidence.bmj.com/*340// @match http://www.clinicalkey.com/*341// @match https://www.clinicalkey.com/*342// @match http://www.clinicalevidence.org/*343// @match https://www.clinicalevidence.org/*344// @match http://cs.portlandpress.com/*345// @match https://cs.portlandpress.com/*346// @match http://www.update-software.com/*347// @match https://www.update-software.com/*348// @match http://cognet.mit.edu/*349// @match https://cognet.mit.edu/*350// @match http://www.comlaw.gov.au/*351// @match https://www.comlaw.gov.au/*352// @match http://www.biologists.org/*353// @match https://www.biologists.org/*354// @match http://www.biologists.com/*355// @match https://www.biologists.com/*356// @match http://www.computerworld.com.au/*357// @match https://www.computerworld.com.au/*358// @match http://www.connect4.com.au/*359// @match https://www.connect4.com.au/*360// @match http://www.connectweb.com.au/*361// @match https://www.connectweb.com.au/*362// @match http://www.oceanalaw.com/*363// @match https://www.oceanalaw.com/*364// @match http://www.asihcopeiaonline.org/*365// @match https://www.asihcopeiaonline.org/*366// @match http://www.cortex-online.org/*367// @match https://www.cortex-online.org/*368// @match http://library.cqpress.com/*369// @match https://library.cqpress.com/*370// @match http://www.crcnetbase.com/*371// @match https://www.crcnetbase.com/*372// @match http://www.credoreference.com/*373// @match https://www.credoreference.com/*374// @match http://www.edata-center.com/*375// @match https://www.edata-center.com/*376// @match http://dx.doi.org/*377// @match https://dx.doi.org/*378// @match http://www.publish.csiro.au/*379// @match https://www.publish.csiro.au/*380// @match http://clp.oxfordjournals.org/*381// @match https://clp.oxfordjournals.org/*382// @match http://web.ovid.unilinc.edu.au/*383// @match https://web.ovid.unilinc.edu.au/*384// @match http://www.current-reports.com/*385// @match https://www.current-reports.com/*386// @match http://www.datatrace.com/*387// @match https://www.datatrace.com/*388// @match http://www.datamonitor.com/*389// @match https://www.datamonitor.com/*390// @match http://www.dbpia.co.kr/*391// @match https://www.dbpia.co.kr/*392// @match http://www.datagold.com/*393// @match https://www.datagold.com/*394// @match http://www.gender.amdigital.co.uk/*395// @match https://www.gender.amdigital.co.uk/*396// @match http://www.dental-update.co.uk/*397// @match https://www.dental-update.co.uk/*398// @match http://www.dialogatsite.com/*399// @match https://www.dialogatsite.com/*400// @match http://dib.cambridge.org/*401// @match https://dib.cambridge.org/*402// @match http://www.dukeupress.edu/*403// @match https://www.dukeupress.edu/*404// @match http://www.dukejournals.org/*405// @match https://www.dukejournals.org/*406// @match http://www.dukemathjournal.org/*407// @match https://www.dukemathjournal.org/*408// @match http://www.earthmagazine.org/*409// @match https://www.earthmagazine.org/*410// @match http://www.exacteditions.com/*411// @match https://www.exacteditions.com/*412// @match http://www.esajournals.org/*413// @match https://www.esajournals.org/*414// @match http://www.edpsciences.org/*415// @match https://www.edpsciences.org/*416// @match http://www.europhysicsnews.org/*417// @match https://www.europhysicsnews.org/*418// @match http://www.aanda.org/*419// @match https://www.aanda.org/*420// @match http://www.euppublishing.com/*421// @match https://www.euppublishing.com/*422// @match http://www.editlib.org/*423// @match https://www.editlib.org/*424// @match http://www.educause.edu/*425// @match https://www.educause.edu/*426// @match http://www.elgaronline.com/*427// @match https://www.elgaronline.com/*428// @match http://www.electrochem.org/*429// @match https://www.electrochem.org/*430// @match http://ecsdl.org/*431// @match https://ecsdl.org/*432// @match http://www.e-enlightenment.com/*433// @match https://www.e-enlightenment.com/*434// @match http://www.expertconsultbook.com/*435// @match https://www.expertconsultbook.com/*436// @match http://www.emeraldinsight.com/*437// @match https://www.emeraldinsight.com/*438// @match http://www.empire.amdigital.co.uk/*439// @match https://www.empire.amdigital.co.uk/*440// @match http://www.igi-online.com/*441// @match https://www.igi-online.com/*442// @match http://www.oxford-naswsocialwork.com/*443// @match https://www.oxford-naswsocialwork.com/*444// @match http://press.endocrine.org/*445// @match https://press.endocrine.org/*446// @match http://www.engineeringvillage.com/*447// @match https://www.engineeringvillage.com/*448// @match http://www.justis.com/*449// @match https://www.justis.com/*450// @match http://www.engnetbase.com/*451// @match https://www.engnetbase.com/*452// @match http://edition.pagesuite-professional.co.uk/*453// @match https://edition.pagesuite-professional.co.uk/*454// @match http://www.envplan.com/*455// @match https://www.envplan.com/*456// @match http://www.yale.edu/*457// @match https://www.yale.edu/*458// @match http://www.eolss.net/*459// @match https://www.eolss.net/*460// @match http://www.equinoxpub.com/*461// @match https://www.equinoxpub.com/*462// @match http://hwwilsonweb.com/*463// @match https://hwwilsonweb.com/*464// @match http://vnweb.hwwilsonweb.com/*465// @match https://vnweb.hwwilsonweb.com/*466// @match http://www.edrs.com/*467// @match https://www.edrs.com/*468// @match http://estuariesandcoasts.org/*469// @match https://estuariesandcoasts.org/*470// @match http://etg.tg.com.au/*471// @match https://etg.tg.com.au/*472// @match http://www.erudit.org/*473// @match https://www.erudit.org/*474// @match http://www.europaworld.com/*475// @match https://www.europaworld.com/*476// @match http://www.eje-online.org/*477// @match https://www.eje-online.org/*478// @match http://www.ems-ph.org/*479// @match https://www.ems-ph.org/*480// @match http://www.erj.ersjournals.com/*481// @match https://www.erj.ersjournals.com/*482// @match http://www.evolutionary-ecology.com/*483// @match https://www.evolutionary-ecology.com/*484// @match http://www.ebmonline.org/*485// @match https://www.ebmonline.org/*486// @match http://www.digitaleditions.com.au/*487// @match https://www.digitaleditions.com.au/*488// @match http://www.libraryedition.com.au/*489// @match https://www.libraryedition.com.au/*490// @match http://f1000.com/*491// @match https://f1000.com/*492// @match http://www.fasebj.org/*493// @match https://www.fasebj.org/*494// @match http://www.fq.math.ca/*495// @match https://www.fq.math.ca/*496// @match http://infotrac.galegroup.com/*497// @match https://infotrac.galegroup.com/*498// @match http://www.finsia.com/*499// @match https://www.finsia.com/*500// @match http://www.fupress.net/*501// @match https://www.fupress.net/*502// @match http://flm-journal.org/*503// @match https://flm-journal.org/*504// @match http://fordham.universitypressscholarship.com/*505// @match https://fordham.universitypressscholarship.com/*506// @match http://www.atilf.fr/*507// @match https://www.atilf.fr/*508// @match http://www.futuremedicine.com/*509// @match https://www.futuremedicine.com/*510// @match http://find.galegroup.com/*511// @match https://find.galegroup.com/*512// @match http://www.gendatabaseonline.com/*513// @match https://www.gendatabaseonline.com/*514// @match http://genesdev.cshlp.org/*515// @match https://genesdev.cshlp.org/*516// @match http://www.genetics.org/*517// @match https://www.genetics.org/*518// @match http://www.geoscienceworld.org/*519// @match https://www.geoscienceworld.org/*520// @match http://www.csa.com/*521// @match https://www.csa.com/*522// @match http://www.icevirtuallibrary.com/*523// @match https://www.icevirtuallibrary.com/*524// @match http://GIDEONonline.net/*525// @match https://GIDEONonline.net/*526// @match http://www.portal.euromonitor.com/*527// @match https://www.portal.euromonitor.com/*528// @match http://www3.griffith.edu.au/*529// @match https://www3.griffith.edu.au/*530// @match http://ebooks.greenwood.com/*531// @match https://ebooks.greenwood.com/*532// @match http://www.groundimprovement.com/*533// @match https://www.groundimprovement.com/*534// @match http://guilfordjournals.com/*535// @match https://guilfordjournals.com/*536// @match http://www.hbcpnetbase.com/*537// @match https://www.hbcpnetbase.com/*538// @match http://www.accessmedicine.com/*539// @match https://www.accessmedicine.com/*540// @match http://www.hartjournals.co.uk/*541// @match https://www.hartjournals.co.uk/*542// @match http://www.hhpr.org/*543// @match https://www.hhpr.org/*544// @match http://ebooks.hcn.com.au/*545// @match https://ebooks.hcn.com.au/*546// @match http://heinonline.org/*547// @match https://heinonline.org/*548// @match http://henrystewart.metapress.com/*549// @match https://henrystewart.metapress.com/*550// @match http://www.hstalks.com/*551// @match https://www.hstalks.com/*552// @match http://www.hljournals.org/*553// @match https://www.hljournals.org/*554// @match http://www.heterocycles.jp/*555// @match https://www.heterocycles.jp/*556// @match http://highwire.stanford.edu/*557// @match https://highwire.stanford.edu/*558// @match http://www.hh.um.es/*559// @match https://www.hh.um.es/*560// @match http://historicbrass.org/*561// @match https://historicbrass.org/*562// @match http://serials.abc-clio.com/*563// @match https://serials.abc-clio.com/*564// @match http://www.math.uh.edu/*565// @match https://www.math.uh.edu/*566// @match http://parlipapers.chadwyck.co.uk/*567// @match https://parlipapers.chadwyck.co.uk/*568// @match http://clients.ibisworld.com.au/*569// @match https://clients.ibisworld.com.au/*570// @match http://ieeexplore.ieee.org/*571// @match https://ieeexplore.ieee.org/*572// @match http://books.igi-online.com/*573// @match https://books.igi-online.com/*574// @match http://services.igi-global.com/*575// @match https://services.igi-global.com/*576// @match http://portal.igpublish.com/*577// @match https://portal.igpublish.com/*578// @match http://www.iias.nl/*579// @match https://www.iias.nl/*580// @match http://old.iias.asia/*581// @match https://old.iias.asia/*582// @match http://www.cababstractsplus.org/*583// @match https://www.cababstractsplus.org/*584// @match http://incites.isiknowledge.com/*585// @match https://incites.isiknowledge.com/*586// @match http://www.inderscienceonline.com/*587// @match https://www.inderscienceonline.com/*588// @match http://www.indiaraj.amdigital.co.uk/*589// @match https://www.indiaraj.amdigital.co.uk/*590// @match http://www.iumj.indiana.edu/*591// @match https://www.iumj.indiana.edu/*592// @match http://cip.cornell.edu/*593// @match https://cip.cornell.edu/*594// @match http://iai.asm.org/*595// @match https://iai.asm.org/*596// @match http://www.infosci-books.com/*597// @match https://www.infosci-books.com/*598// @match http://journals.informs.org/*599// @match https://journals.informs.org/*600// @match http://www.informaworld.com/*601// @match https://www.informaworld.com/*602// @match http://www.informahealthcare.com/*603// @match https://www.informahealthcare.com/*604// @match http://www.i-law.com/*605// @match https://www.i-law.com/*606// @match http://search.informit.com.au/*607// @match https://search.informit.com.au/*608// @match http://www.ingentaconnect.com/*609// @match https://www.ingentaconnect.com/*610// @match http://www.ingentaselect.com/*611// @match https://www.ingentaselect.com/*612// @match http://icsd.fiz-karlsruhe.de/*613// @match https://icsd.fiz-karlsruhe.de/*614// @match http://www.iijournals.com/*615// @match https://www.iijournals.com/*616// @match http://intelliconnect.wkasiapacific.com/*617// @match https://intelliconnect.wkasiapacific.com/*618// @match http://www.aaiddjournals.org/*619// @match https://www.aaiddjournals.org/*620// @match http://www.ijdb.ehu.es/*621// @match https://www.ijdb.ehu.es/*622// @match http://www.communicationencyclopedia.com/*623// @match https://www.communicationencyclopedia.com/*624// @match http://www.ijocs.org/*625// @match https://www.ijocs.org/*626// @match http://www.ijee.dit.ie/*627// @match https://www.ijee.dit.ie/*628// @match http://www.intmedpress.com/*629// @match https://www.intmedpress.com/*630// @match http://www.brepolis.net/*631// @match https://www.brepolis.net/*632// @match http://www.imf.org/*633// @match https://www.imf.org/*634// @match http://www.imfstatistics.org/*635// @match https://www.imfstatistics.org/*636// @match http://www.intlpress.com/*637// @match https://www.intlpress.com/*638// @match http://journals.iucr.org/*639// @match https://journals.iucr.org/*640// @match http://intarch.ac.uk/*641// @match https://intarch.ac.uk/*642// @match http://onlinelibrary.wiley.com/*643// @match https://onlinelibrary.wiley.com/*644// @match http://intl.iovs.org/*645// @match https://intl.iovs.org/*646// @match http://oxia.ouplaw.com/*647// @match https://oxia.ouplaw.com/*648// @match http://www.iop.org/*649// @match https://www.iop.org/*650// @match http://content.iospress.com/*651// @match https://content.iospress.com/*652// @match http://webofknowledge.com/*653// @match https://webofknowledge.com/*654// @match http://apps.webofknowledge.com/*655// @match https://apps.webofknowledge.com/*656// @match http://www.webofknowledge.com/*657// @match https://www.webofknowledge.com/*658// @match http://www.researcherid.com/*659// @match https://www.researcherid.com/*660// @match http://www.ipasource.com/*661// @match https://www.ipasource.com/*662// @match http://www.ishib.org/*663// @match https://www.ishib.org/*664// @match http://www.sif.it/*665// @match https://www.sif.it/*666// @match http://www.itergateway.org/*667// @match https://www.itergateway.org/*668// @match http://www.iwaponline.com/*669// @match https://www.iwaponline.com/*670// @match http://www.jstage.jst.go.jp/*671// @match https://www.jstage.jst.go.jp/*672// @match http://www.joannabriggs.edu.au/*673// @match https://www.joannabriggs.edu.au/*674// @match http://connect.jbiconnectplus.org/*675// @match https://connect.jbiconnectplus.org/*676// @match http://jid.sagepub.com/*677// @match https://jid.sagepub.com/*678// @match http://www.lyellcollection.org/*679// @match https://www.lyellcollection.org/*680// @match http://www.asadl.org/*681// @match https://www.asadl.org/*682// @match http://www.african-archaeology.de/*683// @match https://www.african-archaeology.de/*684// @match http://agdevjournal.com/*685// @match https://agdevjournal.com/*686// @match http://www.jabfp.org/*687// @match https://www.jabfp.org/*688// @match http://www.japmaonline.org/*689// @match https://www.japmaonline.org/*690// @match http://www.journalofanimalscience.org/*691// @match https://www.journalofanimalscience.org/*692// @match http://quod.lib.umich.edu/*693// @match https://quod.lib.umich.edu/*694// @match http://www.sloan-c.org/*695// @match https://www.sloan-c.org/*696// @match http://intl.jbc.org/*697// @match https://intl.jbc.org/*698// @match http://www.ejbjs.org/*699// @match https://www.ejbjs.org/*700// @match http://www.jbmronline.com/*701// @match https://www.jbmronline.com/*702// @match http://jchemed.chem.wisc.edu/*703// @match https://jchemed.chem.wisc.edu/*704// @match http://jco.ascopubs.org/*705// @match https://jco.ascopubs.org/*706// @match http://www.psychiatrist.com/*707// @match https://www.psychiatrist.com/*708// @match http://jds.fass.org/*709// @match https://jds.fass.org/*710// @match http://www.jdentaled.org/*711// @match https://www.jdentaled.org/*712// @match http://gerontologist.gerontologyjournals.org/*713// @match https://gerontologist.gerontologyjournals.org/*714// @match http://www.iaglr.org/*715// @match https://www.iaglr.org/*716// @match http://www.journalofgreenbuilding.com/*717// @match https://www.journalofgreenbuilding.com/*718// @match http://www.jhortscib.org/*719// @match https://www.jhortscib.org/*720// @match http://www.jimmunol.org/*721// @match https://www.jimmunol.org/*722// @match http://www.jleukbio.org/*723// @match https://www.jleukbio.org/*724// @match http://www.jlr.org/*725// @match https://www.jlr.org/*726// @match http://www.jomms.org/*727// @match https://www.jomms.org/*728// @match http://www.jmecology.com/*729// @match https://www.jmecology.com/*730// @match http://jmd.amjpathol.org/*731// @match https://jmd.amjpathol.org/*732// @match http://www.jnrlse.org/*733// @match https://www.jnrlse.org/*734// @match http://www.jneurosci.org/*735// @match https://www.jneurosci.org/*736// @match http://www-thejns-net.org/*737// @match https://www-thejns-net.org/*738// @match http://www.jnabs.org/*739// @match https://www.jnabs.org/*740// @match http://jn.nutrition.org/*741// @match https://jn.nutrition.org/*742// @match http://jorthod.maneyjournals.org/*743// @match https://jorthod.maneyjournals.org/*744// @match http://www.jospt.org/*745// @match https://www.jospt.org/*746// @match http://www.journalofphilosophy.org/*747// @match https://www.journalofphilosophy.org/*748// @match http://www.joponline.org/*749// @match https://www.joponline.org/*750// @match http://jrm.medicaljournals.se/*751// @match https://jrm.medicaljournals.se/*752// @match http://www.jrheum.com/*753// @match https://www.jrheum.com/*754// @match http://www.jrheum.org/*755// @match https://www.jrheum.org/*756// @match http://journals.asha.org/*757// @match https://journals.asha.org/*758// @match http://www.jsad.com/*759// @match https://www.jsad.com/*760// @match http://www.jultrasoundmed.org/*761// @match https://www.jultrasoundmed.org/*762// @match http://www.jove.com/*763// @match https://www.jove.com/*764// @match http://www.opuluspress.se/*765// @match https://www.opuluspress.se/*766// @match http://www.jstor.org/*767// @match https://www.jstor.org/*768// @match http://plants.jstor.org/*769// @match https://plants.jstor.org/*770// @match http://www.justcite.com/*771// @match https://www.justcite.com/*772// @match http://uwa.kanopystreaming.com/*773// @match https://uwa.kanopystreaming.com/*774// @match http://www.karger.com/*775// @match https://www.karger.com/*776// @match http://content.karger.com/*777// @match https://content.karger.com/*778// @match http://www.rbgkew.org.uk/*779// @match https://www.rbgkew.org.uk/*780// @match http://klapp-online.de/*781// @match https://klapp-online.de/*782// @match http://www.kluwerarbitration.com/*783// @match https://www.kluwerarbitration.com/*784// @match http://www.kluweronline.com/*785// @match https://www.kluweronline.com/*786// @match http://www.kluwerlawonline.com/*787// @match https://www.kluwerlawonline.com/*788// @match http://www.knovel.com/*789// @match https://www.knovel.com/*790// @match http://www.labanimal.com/*791// @match https://www.labanimal.com/*792// @match http://www.thelancet.com/*793// @match https://www.thelancet.com/*794// @match http://www.revues.armand-colin.com/*795// @match https://www.revues.armand-colin.com/*796// @match http://tla.thomson.com.au/*797// @match https://tla.thomson.com.au/*798// @match http://subscriber.lawbookco.com.au/*799// @match https://subscriber.lawbookco.com.au/*800// @match http://www.lcoastpress.com/*801// @match https://www.lcoastpress.com/*802// @match http://my.lawlex.com.au/*803// @match https://my.lawlex.com.au/*804// @match http://llama.metapress.com/*805// @match https://llama.metapress.com/*806// @match http://librarymusicsource.com/*807// @match https://librarymusicsource.com/*808// @match http://leme.library.utoronto.ca/*809// @match https://leme.library.utoronto.ca/*810// @match http://www.lexisnexis.com.au/*811// @match https://www.lexisnexis.com.au/*812// @match http://librariesaustralia.nla.gov.au/*813// @match https://librariesaustralia.nla.gov.au/*814// @match http://online.liebertpub.com/*815// @match https://online.liebertpub.com/*816// @match http://www.litencyc.com/*817// @match https://www.litencyc.com/*818// @match http://www.literatureencyclopedia.com/*819// @match https://www.literatureencyclopedia.com/*820// @match http://lion.chadwyck.co.uk/*821// @match https://lion.chadwyck.co.uk/*822// @match http://www.londonlowlife.amdigital.co.uk/*823// @match https://www.londonlowlife.amdigital.co.uk/*824// @match http://www.lrb.co.uk/*825// @match https://www.lrb.co.uk/*826// @match http://lupjournals.org/*827// @match https://lupjournals.org/*828// @match http://www.macquariedictionary.com.au/*829// @match https://www.macquariedictionary.com.au/*830// @match http://www.maneyonline.com/*831// @match https://www.maneyonline.com/*832// @match http://www.mrlonline.org/*833// @match https://www.mrlonline.org/*834// @match http://msp.org/*835// @match https://msp.org/*836// @match http://www.mathscipub.org/*837// @match https://www.mathscipub.org/*838// @match http://www.mathnetbase.com/*839// @match https://www.mathnetbase.com/*840// @match http://opil.ouplaw.com/*841// @match https://opil.ouplaw.com/*842// @match http://online.medphys.org/*843// @match https://online.medphys.org/*844// @match http://www.mja.com.au/*845// @match https://www.mja.com.au/*846// @match http://www.medicalevidencematters.com/*847// @match https://www.medicalevidencematters.com/*848// @match http://www.medici.tv/*849// @match https://www.medici.tv/*850// @match http://www.medicinescomplete.com/*851// @match https://www.medicinescomplete.com/*852// @match http://www.mergentonline.com/*853// @match https://www.mergentonline.com/*854// @match http://www.metapress.com/*855// @match https://www.metapress.com/*856// @match http://www.sanbi.co.jp/*857// @match https://www.sanbi.co.jp/*858// @match http://www.micromedexsolutions.com/*859// @match https://www.micromedexsolutions.com/*860// @match http://search.micronexx.com/*861// @match https://search.micronexx.com/*862// @match http://www.mimsonline.com.au/*863// @match https://www.mimsonline.com.au/*864// @match http://www.mitpressjournals.org/*865// @match https://www.mitpressjournals.org/*866// @match http://collections.chadwyck.co.uk/*867// @match https://collections.chadwyck.co.uk/*868// @match http://www.mlajournals.org/*869// @match https://www.mlajournals.org/*870// @match http://publications.epress.monash.edu/*871// @match https://publications.epress.monash.edu/*872// @match http://www.mcponline.org/*873// @match https://www.mcponline.org/*874// @match http://epress.monash.edu/*875// @match https://epress.monash.edu/*876// @match http://publishing.monash.edu/*877// @match https://publishing.monash.edu/*878// @match http://www.morganclaypool.com/*879// @match https://www.morganclaypool.com/*880// @match http://datanalysis.morningstar.com.au/*881// @match https://datanalysis.morningstar.com.au/*882// @match http://multi-science.metapress.com/*883// @match https://multi-science.metapress.com/*884// @match http://jmpt.hcn.com.au/*885// @match https://jmpt.hcn.com.au/*886// @match http://www.msa.org.au/*887// @match https://www.msa.org.au/*888// @match http://www.musicforum.org.au/*889// @match https://www.musicforum.org.au/*890// @match http://muco.alexanderstreet.com/*891// @match https://muco.alexanderstreet.com/*892// @match http://www.myilibrary.com/*893// @match https://www.myilibrary.com/*894// @match http://myrmecologicalnews.org/*895// @match https://myrmecologicalnews.org/*896// @match http://periodicals.narr.de/*897// @match https://periodicals.narr.de/*898// @match http://www.nature.com/*899// @match https://www.nature.com/*900// @match http://uwa.naxosvideolibrary.com/*901// @match https://uwa.naxosvideolibrary.com/*902// @match http://uwa.naxosmusiclibrary.com/*903// @match https://uwa.naxosmusiclibrary.com/*904// @match http://www.nber.org/*905// @match https://www.nber.org/*906// @match http://nearmap.com/*907// @match https://nearmap.com/*908// @match http://www.neilsonjournals.com/*909// @match https://www.neilsonjournals.com/*910// @match http://neoreviews.aappublications.org/*911// @match https://neoreviews.aappublications.org/*912// @match http://www.nejm.org/*913// @match https://www.nejm.org/*914// @match http://nejm.highwire.org/*915// @match https://nejm.highwire.org/*916// @match http://www.newleftreview.org/*917// @match https://www.newleftreview.org/*918// @match http://www.dictionaryofeconomics.com/*919// @match https://www.dictionaryofeconomics.com/*920// @match http://www.nybooks.com/*921// @match https://www.nybooks.com/*922// @match http://www.pacificarchaeology.org/*923// @match https://www.pacificarchaeology.org/*924// @match http://journal.nzma.org.nz/*925// @match https://journal.nzma.org.nz/*926// @match http://c19.chadwyck.co.uk/*927// @match https://c19.chadwyck.co.uk/*928// @match http://www.nowpublishers.com/*929// @match https://www.nowpublishers.com/*930// @match http://www.nrcresearchpress.com/*931// @match https://www.nrcresearchpress.com/*932// @match http://mcom.alexanderstreet.com/*933// @match https://mcom.alexanderstreet.com/*934// @match http://www.nursingreview.com.au/*935// @match https://www.nursingreview.com.au/*936// @match http://www.statistics.gov.uk/*937// @match https://www.statistics.gov.uk/*938// @match http://ojps.aip.org/*939// @match https://ojps.aip.org/*940// @match http://www.oldenbourg-link.com/*941// @match https://www.oldenbourg-link.com/*942// @match http://www.onarchitecture.com/*943// @match https://www.onarchitecture.com/*944// @match http://www.mathjournals.org/*945// @match https://www.mathjournals.org/*946// @match http://www.onemine.org/*947// @match https://www.onemine.org/*948// @match http://www.openbookpublishers.com/*949// @match https://www.openbookpublishers.com/*950// @match http://www.jopdentonline.org/*951// @match https://www.jopdentonline.org/*952// @match http://www.opticsinfobase.org/*953// @match https://www.opticsinfobase.org/*954// @match http://www.orchestralmusic.com/*955// @match https://www.orchestralmusic.com/*956// @match http://ovidsp.ovid.com/*957// @match https://ovidsp.ovid.com/*958// @match http://somme.library.uwa.edu.au/*959// @match https://somme.library.uwa.edu.au/*960// @match http://www.oldcitypublishing.com/*961// @match https://www.oldcitypublishing.com/*962// @match http://www.atypon-link.com/*963// @match https://www.atypon-link.com/*964// @match http://access.ovid.com/*965// @match https://access.ovid.com/*966// @match http://online.factsandcomparisons.com/*967// @match https://online.factsandcomparisons.com/*968// @match http://advisor.lww.com/*969// @match https://advisor.lww.com/*970// @match http://www.oxfordartonline.com/*971// @match https://www.oxfordartonline.com/*972// @match http://www.oxfordbibliographies.com/*973// @match https://www.oxfordbibliographies.com/*974// @match http://www.oxforddnb.com/*975// @match https://www.oxforddnb.com/*976// @match http://www.oxford-humanrights.com/*977// @match https://www.oxford-humanrights.com/*978// @match http://www.oxford-economichistory.com/*979// @match https://www.oxford-economichistory.com/*980// @match http://www.oxford-theatreandperformance.com/*981// @match https://www.oxford-theatreandperformance.com/*982// @match http://www.oxfordhandbooks.com/*983// @match https://www.oxfordhandbooks.com/*984// @match http://www.oxfordwesternmusic.com/*985// @match https://www.oxfordwesternmusic.com/*986// @match http://acn.oxfordjournals.org/*987// @match https://acn.oxfordjournals.org/*988// @match http://www.oed.com/*989// @match https://www.oed.com/*990// @match http://www.oxfordjournals.org/*991// @match https://www.oxfordjournals.org/*992// @match http://jwelb.oxfordjournals.org/*993// @match https://jwelb.oxfordjournals.org/*994// @match http://www.oxfordmusiconline.com/*995// @match https://www.oxfordmusiconline.com/*996// @match http://www.oxfordreference.com/*997// @match https://www.oxfordreference.com/*998// @match http://www.oxfordscholarship.com/*999// @match https://www.oxfordscholarship.com/*1000// @match http://pjm.math.berkeley.edu/*1001// @match https://pjm.math.berkeley.edu/*1002// @match http://www.museumoftheearth.org/*1003// @match https://www.museumoftheearth.org/*1004// @match http://www.palgrave-journals.com/*1005// @match https://www.palgrave-journals.com/*1006// @match http://geo.arizona.edu/*1007// @match https://geo.arizona.edu/*1008// @match http://pediatrics.aappublications.org/*1009// @match https://pediatrics.aappublications.org/*1010// @match http://poj.peeters-leuven.be/*1011// @match https://poj.peeters-leuven.be/*1012// @match http://www.perceptionweb.com/*1013// @match https://www.perceptionweb.com/*1014// @match http://pci.chadwyck.com/*1015// @match https://pci.chadwyck.com/*1016// @match http://pio.chadwyck.co.uk/*1017// @match https://pio.chadwyck.co.uk/*1018// @match http://pao.chadwyck.co.uk/*1019// @match https://pao.chadwyck.co.uk/*1020// @match http://www.kappanmagazine.org/*1021// @match https://www.kappanmagazine.org/*1022// @match http://www.pdcnet.org/*1023// @match https://www.pdcnet.org/*1024// @match http://thephilosophersmagazine.com/*1025// @match https://thephilosophersmagazine.com/*1026// @match http://philpapers.org/*1027// @match https://philpapers.org/*1028// @match http://www.phycologia.org/*1029// @match https://www.phycologia.org/*1030// @match http://physicsworldarchive.iop.org/*1031// @match https://physicsworldarchive.iop.org/*1032// @match http://www.physsportsmed.com/*1033// @match https://www.physsportsmed.com/*1034// @match http://piprofiler.systematics.net.au/*1035// @match https://piprofiler.systematics.net.au/*1036// @match http://www.pidgeondigital.com/*1037// @match https://www.pidgeondigital.com/*1038// @match http://www.plantcell.org/*1039// @match https://www.plantcell.org/*1040// @match http://www.plantphysiol.org/*1041// @match https://www.plantphysiol.org/*1042// @match http://www.polymersdatabase.com/*1043// @match https://www.polymersdatabase.com/*1044// @match http://dlib.eastview.com/*1045// @match https://dlib.eastview.com/*1046// @match http://ps.fass.org/*1047// @match https://ps.fass.org/*1048// @match http://www.pnas.org/*1049// @match https://www.pnas.org/*1050// @match http://www.sciquest.org.nz/*1051// @match https://www.sciquest.org.nz/*1052// @match http://www.presidian.com.au/*1053// @match https://www.presidian.com.au/*1054// @match http://library.pressdisplay.com/*1055// @match https://library.pressdisplay.com/*1056// @match http://www.sleepmedtext.com/*1057// @match https://www.sleepmedtext.com/*1058// @match http://projecteuclid.org/*1059// @match https://projecteuclid.org/*1060// @match http://muse.jhu.edu.au/*1061// @match https://muse.jhu.edu.au/*1062// @match http://search.proquest.com/*1063// @match https://search.proquest.com/*1064// @match http://www.proteinscience.org/*1065// @match https://www.proteinscience.org/*1066// @match http://www.psychiatryonline.org/*1067// @match https://www.psychiatryonline.org/*1068// @match http://www.psychonomic-journals.org/*1069// @match https://www.psychonomic-journals.org/*1070// @match http://www.publichealthreports.org/*1071// @match https://www.publichealthreports.org/*1072// @match http://library.queensu.ca/*1073// @match https://library.queensu.ca/*1074// @match http://pubs.rsna.org/*1075// @match https://pubs.rsna.org/*1076// @match http://www.srmjournals.org/*1077// @match https://www.srmjournals.org/*1078// @match http://www.reproduction-online.org/*1079// @match https://www.reproduction-online.org/*1080// @match http://biblioline.nisc.com/*1081// @match https://biblioline.nisc.com/*1082// @match http://db.riskwaters.com/*1083// @match https://db.riskwaters.com/*1084// @match http://www.rockefeller.edu/*1085// @match https://www.rockefeller.edu/*1086// @match http://www.jem.org/*1087// @match https://www.jem.org/*1088// @match http://www.rupress.org/*1089// @match https://www.rupress.org/*1090// @match http://rmmc.eas.asu.edu/*1091// @match https://rmmc.eas.asu.edu/*1092// @match http://www.romanticism.amdigital.co.uk/*1093// @match https://www.romanticism.amdigital.co.uk/*1094// @match http://www.rep.routledge.com/*1095// @match https://www.rep.routledge.com/*1096// @match http://www.rsc.org/*1097// @match https://www.rsc.org/*1098// @match http://www.rsnz.org/*1099// @match https://www.rsnz.org/*1100// @match http://journals.royalsociety.org/*1101// @match https://journals.royalsociety.org/*1102// @match http://royalsocietypublishing.org/*1103// @match https://royalsocietypublishing.org/*1104// @match http://www.csu.edu.au/*1105// @match https://www.csu.edu.au/*1106// @match http://escarpmentpress.org/*1107// @match https://escarpmentpress.org/*1108// @match http://reference.sabinet.co.za/*1109// @match https://reference.sabinet.co.za/*1110// @match http://digitallibrary.sae.org/*1111// @match https://digitallibrary.sae.org/*1112// @match http://sage-ereference.com/*1113// @match https://sage-ereference.com/*1114// @match http://knowledge.sagepub.com/*1115// @match https://knowledge.sagepub.com/*1116// @match http://online.sagepub.com/*1117// @match https://online.sagepub.com/*1118// @match http://www.sauerlaender-verlag.com/*1119// @match https://www.sauerlaender-verlag.com/*1120// @match http://www.schattauer.de/*1121// @match https://www.schattauer.de/*1122// @match http://www.sciandmed.com/*1123// @match https://www.sciandmed.com/*1124// @match http://www.trrjournalonline.trb.org/*1125// @match https://www.trrjournalonline.trb.org/*1126// @match http://www.wssajournals.org/*1127// @match https://www.wssajournals.org/*1128// @match http://www.hub.sciverse.com/*1129// @match https://www.hub.sciverse.com/*1130// @match http://www.sciencedirect.com/*1131// @match https://www.sciencedirect.com/*1132// @match http://www.scopus.com/*1133// @match https://www.scopus.com/*1134// @match http://www.sciencemag.org/*1135// @match https://www.sciencemag.org/*1136// @match http://sos.thieme.com/*1137// @match https://sos.thieme.com/*1138// @match http://utpjournals.metapress.com/*1139// @match https://utpjournals.metapress.com/*1140// @match http://sex.sagepub.com/*1141// @match https://sex.sagepub.com/*1142// @match http://www.sjmjournals.org/*1143// @match https://www.sjmjournals.org/*1144// @match http://www.shancocksltd.co.uk/*1145// @match https://www.shancocksltd.co.uk/*1146// @match http://epubs.siam.org/*1147// @match https://epubs.siam.org/*1148// @match http://www.journalsleep.org/*1149// @match https://www.journalsleep.org/*1150// @match http://glmu.alexanderstreet.com/*1151// @match https://glmu.alexanderstreet.com/*1152// @match http://sfaa.metapress.com/*1153// @match https://sfaa.metapress.com/*1154// @match http://www.endocrinology-journals.org/*1155// @match https://www.endocrinology-journals.org/*1156// @match http://library.seg.org/*1157// @match https://library.seg.org/*1158// @match http://www.sgm.ac.uk/*1159// @match https://www.sgm.ac.uk/*1160// @match http://www.rangelands.org/*1161// @match https://www.rangelands.org/*1162// @match http://journalofrheology.org/*1163// @match https://journalofrheology.org/*1164// @match http://www.ssr.org/*1165// @match https://www.ssr.org/*1166// @match http://www.oecd-ilibrary.org/*1167// @match https://www.oecd-ilibrary.org/*1168// @match http://www.oecd-nea.org/*1169// @match https://www.oecd-nea.org/*1170// @match http://www.oecdobserver.org/*1171// @match https://www.oecdobserver.org/*1172// @match http://new.sourceoecd.org/*1173// @match https://new.sourceoecd.org/*1174// @match http://www.spe.org/*1175// @match https://www.spe.org/*1176// @match http://spiedigitallibrary.org/*1177// @match https://spiedigitallibrary.org/*1178// @match http://ebooks.spiedigitallibrary.org/*1179// @match https://ebooks.spiedigitallibrary.org/*1180// @match http://spiedigitallibrary.aip.org/*1181// @match https://spiedigitallibrary.aip.org/*1182// @match http://journals.spiedigitallibrary.org/*1183// @match https://journals.spiedigitallibrary.org/*1184// @match http://opticalengineering.spiedigitallibrary.org/*1185// @match https://opticalengineering.spiedigitallibrary.org/*1186// @match http://biomedicaloptics.spiedigitallibrary.org/*1187// @match https://biomedicaloptics.spiedigitallibrary.org/*1188// @match http://link.springer.de/*1189// @match https://link.springer.de/*1190// @match http://link.springer.com/*1191// @match https://link.springer.com/*1192// @match http://materials.springer.com/*1193// @match https://materials.springer.com/*1194// @match http://www.saiglobal.com/*1195// @match https://www.saiglobal.com/*1196// @match http://www.stata-journal.com/*1197// @match https://www.stata-journal.com/*1198// @match http://www.stat.sinica.edu.tw/*1199// @match https://www.stat.sinica.edu.tw/*1200// @match http://www.statindex.org/*1201// @match https://www.statindex.org/*1202// @match http://stahlonline.cambridge.org/*1203// @match https://stahlonline.cambridge.org/*1204// @match http://www.surgeryjournal.co.uk/*1205// @match https://www.surgeryjournal.co.uk/*1206// @match http://www.hcn.net.au/*1207// @match https://www.hcn.net.au/*1208// @match http://www.law.usyd.edu.au/*1209// @match https://www.law.usyd.edu.au/*1210// @match http://archives.smh.com.au/*1211// @match https://archives.smh.com.au/*1212// @match http://www.arabidopsis.org/*1213// @match https://www.arabidopsis.org/*1214// @match http://tax.thomsonreuters.com.au/*1215// @match https://tax.thomsonreuters.com.au/*1216// @match http://tl2.idcpublishers.info/*1217// @match https://tl2.idcpublishers.info/*1218// @match http://www.tandfonline.com/*1219// @match https://www.tandfonline.com/*1220// @match http://technopress.kaist.ac.kr/*1221// @match https://technopress.kaist.ac.kr/*1222// @match http://journal.telospress.com/*1223// @match https://journal.telospress.com/*1224// @match http://www.terrapub.co.jp/*1225// @match https://www.terrapub.co.jp/*1226// @match http://jep.textrum.com/*1227// @match https://jep.textrum.com/*1228// @match http://www.economist.com/*1229// @match https://www.economist.com/*1230// @match http://stephanus.tlg.uci.edu/*1231// @match https://stephanus.tlg.uci.edu/*1232// @match http://xroads.virginia.edu/*1233// @match https://xroads.virginia.edu/*1234// @match http://www.theshakespearerecords.com/*1235// @match https://www.theshakespearerecords.com/*1236// @match http://www.escj.org/*1237// @match https://www.escj.org/*1238// @match http://archive.thewest.com.au/*1239// @match https://archive.thewest.com.au/*1240// @match http://www.thomastelford.com/*1241// @match https://www.thomastelford.com/*1242// @match http://www.tlemea.com/*1243// @match https://www.tlemea.com/*1244// @match http://archive.scijournal.com/*1245// @match https://archive.scijournal.com/*1246// @match http://transactionpub.metapress.com/*1247// @match https://transactionpub.metapress.com/*1248// @match http://trb.metapress.com/*1249// @match https://trb.metapress.com/*1250// @match http://www.scientific.net/*1251// @match https://www.scientific.net/*1252// @match http://www.triangle.co.uk/*1253// @match https://www.triangle.co.uk/*1254// @match http://turf.lib.msu.edu/*1255// @match https://turf.lib.msu.edu/*1256// @match http://www.turpion.org/*1257// @match https://www.turpion.org/*1258// @match http://ulrichsweb.serialssolutions.com/*1259// @match https://ulrichsweb.serialssolutions.com/*1260// @match http://untreaty.un.org/*1261// @match https://untreaty.un.org/*1262// @match http://157.150.195.4/*1263// @match https://157.150.195.4/*1264// @match http://www.journals.uchicago.edu/*1265// @match https://www.journals.uchicago.edu/*1266// @match http://www.press.uillinois.edu/*1267// @match https://www.press.uillinois.edu/*1268// @match http://www.uwpress.org/*1269// @match https://www.uwpress.org/*1270// @match http://www.universitypressscholarship.com/*1271// @match https://www.universitypressscholarship.com/*1272// @match http://www.v-r.de/*1273// @match https://www.v-r.de/*1274// @match http://wileyonlinelibrary.com/*1275// @match https://wileyonlinelibrary.com/*1276// @match http://wlt.metapress.com/*1277// @match https://wlt.metapress.com/*1278// @match http://elib.library.uwa.edu.au/*1279// @match https://elib.library.uwa.edu.au/*1280// @match http://erl.library.uwa.edu.au:8050/*1281// @match https://erl.library.uwa.edu.au:8050/*1282// @match http://etext.library.uwa.edu.au/*1283// @match https://etext.library.uwa.edu.au/*1284// @match http://findit.library.uwa.edu.au/*1285// @match https://findit.library.uwa.edu.au/*1286// @match http://www.victoriandatabase.com/*1287// @match https://www.victoriandatabase.com/*1288// @match http://www.degruyter.com/*1289// @match https://www.degruyter.com/*1290// @match http://www.victorianperiodicals.com/*1291// @match https://www.victorianperiodicals.com/*1292// @match http://wellesley.chadwyck.co.uk/*1293// @match https://wellesley.chadwyck.co.uk/*1294// @match http://web5s.silverplatter.com/*1295// @match https://web5s.silverplatter.com/*1296// @match http://westlaw.com.au/*1297// @match https://westlaw.com.au/*1298// @match http://login.westlaw.co.uk/*1299// @match https://login.westlaw.co.uk/*1300// @match http://www.westlaw.com/*1301// @match https://www.westlaw.com/*1302// @match http://connectweb.com.au/*1303// @match https://connectweb.com.au/*1304// @match http://hw.oeaw.ac.at/*1305// @match https://hw.oeaw.ac.at/*1306// @match http://www.withoutsanctuary.org/*1307// @match https://www.withoutsanctuary.org/*1308// @match http://journals.witpress.com/*1309// @match https://journals.witpress.com/*1310// @match http://www.worldbank.org/*1311// @match https://www.worldbank.org/*1312// @match http://newfirstsearch.oclc.org/*1313// @match https://newfirstsearch.oclc.org/*1314// @match http://worldcatlibraries.org/*1315// @match https://worldcatlibraries.org/*1316// @match http://www.worldscinet.com/*1317// @match https://www.worldscinet.com/*1318// @match http://www.worldscientific.com/*1319// @match https://www.worldscientific.com/*1320// @match http://ebooks.worldscinet.com/*1321// @match https://ebooks.worldscinet.com/*1322// @match http://www.worldshakesbib.org/*1323// @match https://www.worldshakesbib.org/*1324// @match http://naa12.naa.gov.au/*1325// @match https://naa12.naa.gov.au/*1326// @match http://www.meddent.uwa.edu.au/*1327// @match https://www.meddent.uwa.edu.au/*1328// ==/UserScript==1329window.location.replace(window.location.href.replace(/(https?:\/\/)(.*)/i, "$1echo.louisville.edu/login?url=$1$2"))...
match.spec.js
Source:match.spec.js
...17 });18 // ---19 it('should match simple string', function(){20 var r1 = crossroads.addRoute('/lorem-ipsum');21 expect( r1.match('/lorem-ipsum') ).toBe( true );22 expect( r1.match('/lorem-ipsum/') ).toBe( true );23 expect( r1.match('/lorem-ipsum/dolor') ).toBe( false );24 });25 it('should ignore trailing slash on pattern', function(){26 var r1 = crossroads.addRoute('/lorem-ipsum/');27 expect( r1.match('/lorem-ipsum') ).toBe( true );28 expect( r1.match('/lorem-ipsum/') ).toBe( true );29 expect( r1.match('/lorem-ipsum/dolor') ).toBe( false );30 });31 it('should match params', function(){32 var s = crossroads.addRoute('/{foo}');33 expect( s.match('/lorem-ipsum') ).toBe( true );34 expect( s.match('/lorem-ipsum/') ).toBe( true );35 expect( s.match('/lorem-ipsum/dolor') ).toBe( false );36 expect( s.match('lorem-ipsum') ).toBe( true );37 expect( s.match('/123') ).toBe( true );38 expect( s.match('/123/') ).toBe( true );39 expect( s.match('123') ).toBe( true );40 expect( s.match('123/45') ).toBe( false );41 });42 it('should match optional params', function(){43 var s = crossroads.addRoute(':bar:');44 expect( s.match('lorem-ipsum') ).toBe( true );45 expect( s.match('') ).toBe( true );46 expect( s.match('lorem-ipsum/dolor') ).toBe( false );47 expect( s.match('/lorem-ipsum/') ).toBe( true );48 });49 it('should match normal params and optional params', function(){50 var s = crossroads.addRoute('/{foo}/:bar:');51 expect( s.match('/lorem-ipsum') ).toBe( true );52 expect( s.match('/lorem-ipsum/') ).toBe( true );53 expect( s.match('/lorem-ipsum/dolor') ).toBe( true );54 expect( s.match('123/45') ).toBe( true );55 });56 it('should work even with optional params on the middle of pattern', function(){57 var a = crossroads.addRoute('/{foo}/:bar:/{ipsum}'); //bad use!58 expect( a.match('/123/45/asd') ).toBe( true );59 expect( a.match('/123/asd') ).toBe( true );60 var b = crossroads.addRoute('/{foo}:bar:{ipsum}'); //bad use!61 expect( b.match('/123/45/asd') ).toBe( true );62 expect( b.match('/123/45') ).toBe( true );63 var c = crossroads.addRoute('/{foo}:bar:/ipsum');64 expect( c.match('/123/45/ipsum') ).toBe( true );65 expect( c.match('/123/ipsum') ).toBe( true );66 var d = crossroads.addRoute('/{foo}:bar:ipsum'); //weird use!67 expect( d.match('/123/ipsum') ).toBe( true );68 expect( d.match('/123/45/ipsum') ).toBe( true );69 });70 it('should support multiple consecutive optional params', function(){71 var s = crossroads.addRoute('/123/:bar:/:ipsum:');72 expect( s.match('/123') ).toBe( true );73 expect( s.match('/123/') ).toBe( true );74 expect( s.match('/123/asd') ).toBe( true );75 expect( s.match('/123/asd/45') ).toBe( true );76 expect( s.match('/123/asd/45/') ).toBe( true );77 expect( s.match('/123/asd/45/qwe') ).toBe( false );78 });79 it('should not be case sensitive by default', function () {80 var s = crossroads.addRoute('foo/bar');81 expect( s.match('foo') ).toBe( false );82 expect( s.match('Foo') ).toBe( false );83 expect( s.match('foo/bar') ).toBe( true );84 expect( s.match('Foo/Bar') ).toBe( true );85 expect( s.match('FoO/BAR') ).toBe( true );86 });87 it('should be allow toggling case sensitivity', function () {88 crossroads.ignoreCase = true;89 var s = crossroads.addRoute('foo/bar');90 expect( s.match('foo') ).toBe( false );91 expect( s.match('Foo') ).toBe( false );92 expect( s.match('foo/bar') ).toBe( true );93 expect( s.match('Foo/Bar') ).toBe( true );94 expect( s.match('FoO/BAR') ).toBe( true );95 });96 describe('rest params', function () {97 it('should support rest params', function () {98 var s = crossroads.addRoute('/123/{bar}/:ipsum*:');99 expect( s.match('/123') ).toBe( false );100 expect( s.match('/123/') ).toBe( false );101 expect( s.match('/123/asd') ).toBe( true );102 expect( s.match('/123/asd/45') ).toBe( true );103 expect( s.match('/123/asd/45/') ).toBe( true );104 expect( s.match('/123/asd/45/qwe') ).toBe( true );105 expect( s.match('/456/asd/45/qwe') ).toBe( false );106 });107 it('should work even in the middle of pattern', function () {108 var s = crossroads.addRoute('/foo/:bar*:/edit');109 expect( s.match('/foo') ).toBe( false );110 expect( s.match('/foo/') ).toBe( false );111 expect( s.match('/foo/edit') ).toBe( true );112 expect( s.match('/foo/asd') ).toBe( false );113 expect( s.match('/foo/asd/edit') ).toBe( true );114 expect( s.match('/foo/asd/edit/') ).toBe( true );115 expect( s.match('/foo/asd/123/edit') ).toBe( true );116 expect( s.match('/foo/asd/edit/qwe') ).toBe( false );117 });118 });119 describe('query string', function () {120 it('should match query string as first segment', function () {121 var r = crossroads.addRoute('{?q}');122 expect( r.match('') ).toBe( false );123 expect( r.match('foo') ).toBe( false );124 expect( r.match('/foo') ).toBe( false );125 expect( r.match('foo/') ).toBe( false );126 expect( r.match('/foo/') ).toBe( false );127 expect( r.match('?foo') ).toBe( true );128 expect( r.match('?foo=bar') ).toBe( true );129 expect( r.match('?foo=bar&lorem=123') ).toBe( true );130 });131 it('should match optional query string as first segment', function () {132 var r = crossroads.addRoute(':?q:');133 expect( r.match('') ).toBe( true );134 expect( r.match('foo') ).toBe( false );135 expect( r.match('/foo') ).toBe( false );136 expect( r.match('foo/') ).toBe( false );137 expect( r.match('/foo/') ).toBe( false );138 expect( r.match('?foo') ).toBe( true );139 expect( r.match('?foo=bar') ).toBe( true );140 expect( r.match('?foo=bar&lorem=123') ).toBe( true );141 });142 it('should match query string as 2nd segment', function () {143 var r = crossroads.addRoute('{a}{?q}');144 expect( r.match('') ).toBe( false );145 expect( r.match('foo') ).toBe( false );146 expect( r.match('/foo') ).toBe( false );147 expect( r.match('foo/') ).toBe( false );148 expect( r.match('/foo/') ).toBe( false );149 expect( r.match('foo?foo') ).toBe( true );150 expect( r.match('foo?foo=bar') ).toBe( true );151 expect( r.match('foo?foo=bar&lorem=123') ).toBe( true );152 });153 it('should match optional query string as 2nd segment', function () {154 var r = crossroads.addRoute('{a}:?q:');155 expect( r.match('') ).toBe( false );156 expect( r.match('foo') ).toBe( true );157 expect( r.match('/foo') ).toBe( true );158 expect( r.match('foo/') ).toBe( true );159 expect( r.match('/foo/') ).toBe( true );160 expect( r.match('foo?foo') ).toBe( true );161 expect( r.match('foo?foo=bar') ).toBe( true );162 expect( r.match('foo?foo=bar&lorem=123') ).toBe( true );163 });164 it('should match query string as middle segment', function () {165 //if hash is required should use the literal "#" to avoid matching166 //the last char of string as a string "foo?foo" shouldn't match167 var r = crossroads.addRoute('{a}{?q}#{hash}');168 expect( r.match('') ).toBe( false );169 expect( r.match('foo') ).toBe( false );170 expect( r.match('/foo') ).toBe( false );171 expect( r.match('foo/') ).toBe( false );172 expect( r.match('/foo/') ).toBe( false );173 expect( r.match('foo?foo') ).toBe( false );174 expect( r.match('foo?foo#bar') ).toBe( true );175 expect( r.match('foo?foo=bar#bar') ).toBe( true );176 expect( r.match('foo?foo=bar&lorem=123#bar') ).toBe( true );177 });178 it('should match optional query string as middle segment', function () {179 var r = crossroads.addRoute('{a}:?q::hash:');180 expect( r.match('') ).toBe( false );181 expect( r.match('foo') ).toBe( true );182 expect( r.match('/foo') ).toBe( true );183 expect( r.match('foo/') ).toBe( true );184 expect( r.match('/foo/') ).toBe( true );185 expect( r.match('foo?foo') ).toBe( true );186 expect( r.match('foo?foo=bar') ).toBe( true );187 expect( r.match('foo?foo=bar#bar') ).toBe( true );188 expect( r.match('foo?foo=bar&lorem=123') ).toBe( true );189 expect( r.match('foo?foo=bar&lorem=123#bar') ).toBe( true );190 });191 it('should match query string even if not using the special query syntax', function () {192 var r = crossroads.addRoute('{a}?{q}#{hash}');193 expect( r.match('') ).toBe( false );194 expect( r.match('foo') ).toBe( false );195 expect( r.match('/foo') ).toBe( false );196 expect( r.match('foo/') ).toBe( false );197 expect( r.match('/foo/') ).toBe( false );198 expect( r.match('foo?foo') ).toBe( false );199 expect( r.match('foo?foo#bar') ).toBe( true );200 expect( r.match('foo?foo=bar#bar') ).toBe( true );201 expect( r.match('foo?foo=bar&lorem=123#bar') ).toBe( true );202 });203 });204 describe('slash between params are optional', function(){205 describe('between required params', function(){206 it('after other param', function(){207 var a = crossroads.addRoute('{bar}{ipsum}');208 expect( a.match('123') ).toBe( false );209 expect( a.match('123/') ).toBe( false );210 expect( a.match('123/asd') ).toBe( true );211 expect( a.match('123/asd/') ).toBe( true );212 expect( a.match('123/asd/45') ).toBe( false );213 expect( a.match('123/asd/45/') ).toBe( false );214 expect( a.match('123/asd/45/qwe') ).toBe( false );215 });216 });217 describe('between optional params', function(){218 it('optional after other optional param', function(){219 var a = crossroads.addRoute(':bar::ipsum:');220 expect( a.match('123') ).toBe( true );221 expect( a.match('123/') ).toBe( true );222 expect( a.match('123/asd') ).toBe( true );223 expect( a.match('123/asd/') ).toBe( true );224 expect( a.match('123/asd/45') ).toBe( false );225 expect( a.match('123/asd/45/') ).toBe( false );226 expect( a.match('123/asd/45/qwe') ).toBe( false );227 });228 });229 describe('mixed', function(){230 it('between normal + optional', function(){231 var a = crossroads.addRoute('/{foo}:bar:');232 expect( a.match('/lorem-ipsum/dolor') ).toBe( true );233 });234 it('between normal + optional*2', function(){235 var b = crossroads.addRoute('/{foo}:bar::ipsum:');236 expect( b.match('/123') ).toBe( true );237 expect( b.match('/123/asd') ).toBe( true );238 expect( b.match('/123/asd/') ).toBe( true );239 expect( b.match('/123/asd/qwe') ).toBe( true );240 expect( b.match('/123/asd/qwe/') ).toBe( true );241 expect( b.match('/123/asd/qwe/asd') ).toBe( false );242 expect( b.match('/123/asd/qwe/asd/') ).toBe( false );243 });244 it('with slashes all', function(){245 var c = crossroads.addRoute('bar/{foo}/:bar:/:ipsum:');246 expect( c.match('bar/123') ).toBe( true );247 expect( c.match('bar/123/') ).toBe( true );248 expect( c.match('bar/123/asd') ).toBe( true );249 expect( c.match('bar/123/asd/') ).toBe( true );250 expect( c.match('bar/123/asd/45') ).toBe( true );251 expect( c.match('bar/123/asd/45/') ).toBe( true );252 expect( c.match('bar/123/asd/45/qwe') ).toBe( false );253 });254 it('required param after \\w/', function(){255 var a = crossroads.addRoute('/123/{bar}{ipsum}');256 expect( a.match('/123') ).toBe( false );257 expect( a.match('/123/') ).toBe( false );258 expect( a.match('/123/asd') ).toBe( false );259 expect( a.match('/123/asd/') ).toBe( false );260 expect( a.match('/123/asd/45') ).toBe( true );261 expect( a.match('/123/asd/45/') ).toBe( true );262 expect( a.match('/123/asd/45/qwe') ).toBe( false );263 });264 it('optional params after \\w/', function(){265 var a = crossroads.addRoute('/123/:bar::ipsum:');266 expect( a.match('/123') ).toBe( true );267 expect( a.match('/123/') ).toBe( true );268 expect( a.match('/123/asd') ).toBe( true );269 expect( a.match('/123/asd/') ).toBe( true );270 expect( a.match('/123/asd/45') ).toBe( true );271 expect( a.match('/123/asd/45/') ).toBe( true );272 expect( a.match('/123/asd/45/qwe') ).toBe( false );273 });274 });275 });276 describe('slash is required between word and param', function(){277 it('required param after \\w', function(){278 var a = crossroads.addRoute('/123{bar}{ipsum}');279 expect( a.match('/123') ).toBe( false );280 expect( a.match('/123/') ).toBe( false );281 expect( a.match('/123/asd') ).toBe( false );282 expect( a.match('/123/asd/') ).toBe( false );283 expect( a.match('/123/asd/45') ).toBe( false );284 expect( a.match('/123/asd/45/') ).toBe( false );285 expect( a.match('/123/asd/45/qwe') ).toBe( false );286 expect( a.match('/123asd') ).toBe( false );287 expect( a.match('/123asd/') ).toBe( false );288 expect( a.match('/123asd/45') ).toBe( true );289 expect( a.match('/123asd/45/') ).toBe( true );290 expect( a.match('/123asd/45/qwe') ).toBe( false );291 });292 it('optional param after \\w', function(){293 var a = crossroads.addRoute('/123:bar::ipsum:');294 expect( a.match('/123') ).toBe( true );295 expect( a.match('/123/') ).toBe( true );296 expect( a.match('/123/asd') ).toBe( true );297 expect( a.match('/123/asd/') ).toBe( true );298 expect( a.match('/123/asd/45') ).toBe( false );299 expect( a.match('/123/asd/45/') ).toBe( false );300 expect( a.match('/123/asd/45/qwe') ).toBe( false );301 expect( a.match('/123asd') ).toBe( true );302 expect( a.match('/123asd/') ).toBe( true );303 expect( a.match('/123asd/45') ).toBe( true );304 expect( a.match('/123asd/45/') ).toBe( true );305 expect( a.match('/123asd/45/qwe') ).toBe( false );306 });307 });308 describe('strict slash rules', function () {309 afterEach(function(){310 crossroads.patternLexer.loose();311 });312 it('should only match if traling slashes match the original pattern', function () {313 crossroads.patternLexer.strict();314 var a = crossroads.addRoute('{foo}');315 expect( a.match('foo') ).toBe( true );316 expect( a.match('/foo') ).toBe( false );317 expect( a.match('foo/') ).toBe( false );318 expect( a.match('/foo/') ).toBe( false );319 var b = crossroads.addRoute('/{foo}');320 expect( b.match('foo') ).toBe( false );321 expect( b.match('/foo') ).toBe( true );322 expect( b.match('foo/') ).toBe( false );323 expect( b.match('/foo/') ).toBe( false );324 var c = crossroads.addRoute('');325 expect( c.match() ).toBe( true );326 expect( c.match('') ).toBe( true );327 expect( c.match('/') ).toBe( false );328 expect( c.match('foo') ).toBe( false );329 var d = crossroads.addRoute('/');330 expect( d.match() ).toBe( false );331 expect( d.match('') ).toBe( false );332 expect( d.match('/') ).toBe( true );333 expect( d.match('foo') ).toBe( false );334 });335 });336 describe('loose slash rules', function () {337 beforeEach(function(){338 crossroads.patternLexer.loose();339 });340 it('should treat single slash and empty string as same', function () {341 var c = crossroads.addRoute('');342 expect( c.match() ).toBe( true );343 expect( c.match('') ).toBe( true );344 expect( c.match('/') ).toBe( true );345 expect( c.match('foo') ).toBe( false );346 var d = crossroads.addRoute('/');347 expect( d.match() ).toBe( true );348 expect( d.match('') ).toBe( true );349 expect( d.match('/') ).toBe( true );350 expect( d.match('foo') ).toBe( false );351 });352 });353 describe('legacy slash rules', function () {354 beforeEach(function(){355 crossroads.patternLexer.legacy();356 });357 afterEach(function(){358 crossroads.patternLexer.loose();359 });360 it('should treat single slash and empty string as same', function () {361 var c = crossroads.addRoute('');362 expect( c.match() ).toBe( true );363 expect( c.match('') ).toBe( true );364 expect( c.match('/') ).toBe( true );365 expect( c.match('foo') ).toBe( false );366 var d = crossroads.addRoute('/');367 expect( d.match() ).toBe( true );368 expect( d.match('') ).toBe( true );369 expect( d.match('/') ).toBe( true );370 expect( d.match('foo') ).toBe( false );371 });372 it('slash at end of string is optional', function () {373 var a = crossroads.addRoute('/foo');374 expect( a.match('/foo') ).toEqual( true );375 expect( a.match('/foo/') ).toEqual( true );376 expect( a.match('/foo/bar') ).toEqual( false );377 });378 it('slash at begin of string is required', function () {379 var a = crossroads.addRoute('/foo');380 expect( a.match('/foo') ).toEqual( true );381 expect( a.match('/foo/') ).toEqual( true );382 expect( a.match('foo') ).toEqual( false );383 expect( a.match('foo/') ).toEqual( false );384 expect( a.match('/foo/bar') ).toEqual( false );385 });386 });387 describe('rules', function(){388 describe('basic rules', function(){389 it('should allow array options', function(){390 var s = crossroads.addRoute('/{foo}/{bar}');391 s.rules = {392 foo : ['lorem-ipsum', '123'],393 bar : ['DoLoR', '45']394 };395 expect( s.match('/lorem-ipsum') ).toBe( false );396 expect( s.match('/lorem-ipsum/DoLoR') ).toBe( true );397 expect( s.match('/LoReM-IpSuM/DOLoR') ).toBe( true );398 expect( s.match('lorem-ipsum') ).toBe( false );399 expect( s.match('/123') ).toBe( false );400 expect( s.match('123') ).toBe( false );401 expect( s.match('/123/123') ).toBe( false );402 expect( s.match('/123/45') ).toBe( true );403 });404 it('should change array validation behavior when ignoreCase is false', function(){405 crossroads.ignoreCase = false;406 var s = crossroads.addRoute('/{foo}/{bar}');407 s.rules = {408 foo : ['lorem-ipsum', '123'],409 bar : ['DoLoR', '45']410 };411 expect( s.match('/lorem-ipsum') ).toBe( false );412 expect( s.match('/lorem-ipsum/dolor') ).toBe( false );413 expect( s.match('/lorem-ipsum/DoLoR') ).toBe( true );414 expect( s.match('/LoReM-IpSuM/DOLoR') ).toBe( false );415 expect( s.match('lorem-ipsum') ).toBe( false );416 expect( s.match('/123') ).toBe( false );417 expect( s.match('123') ).toBe( false );418 expect( s.match('/123/123') ).toBe( false );419 expect( s.match('/123/45') ).toBe( true );420 });421 it('should allow RegExp options', function(){422 var s = crossroads.addRoute('/{foo}/{bar}');423 s.rules = {424 foo : /(^[a-z0-9\-]+$)/,425 bar : /(.+)/426 };427 expect( s.match('/lorem-ipsum') ).toBe( false );428 expect( s.match('/lorem-ipsum/dolor') ).toBe( true );429 expect( s.match('lorem-ipsum') ).toBe( false );430 expect( s.match('/123') ).toBe( false );431 expect( s.match('123') ).toBe( false );432 expect( s.match('/123/45') ).toBe( true );433 });434 it('should allow function rule', function(){435 var s = crossroads.addRoute('/{foo}/{bar}/{ipsum}');436 s.rules = {437 foo : function(val, request, params){438 return (val === 'lorem-ipsum' || val === '123');439 },440 bar : function(val, request, params){441 return (request !== '/lorem-ipsum');442 },443 ipsum : function(val, request, params){444 return (params.bar === 'dolor' && params.ipsum === 'sit-amet') || (params.bar === '45' && params.ipsum === '67');445 }446 };447 expect( s.match('/lorem-ipsum') ).toBe( false );448 expect( s.match('/lorem-ipsum/dolor/sit-amet') ).toBe( true );449 expect( s.match('lorem-ipsum') ).toBe( false );450 expect( s.match('/123') ).toBe( false );451 expect( s.match('123') ).toBe( false );452 expect( s.match('/123/44/55') ).toBe( false );453 expect( s.match('/123/45/67') ).toBe( true );454 });455 it('should work with mixed rules', function(){456 var s = crossroads.addRoute('/{foo}/{bar}/{ipsum}');457 s.rules = {458 foo : function(val, request, params){459 return (val === 'lorem-ipsum' || val === '123');460 },461 bar : ['dolor', '45'],462 ipsum : /(sit-amet|67)/463 };464 expect( s.match('/lorem-ipsum') ).toBe( false );465 expect( s.match('/lorem-ipsum/dolor/sit-amet') ).toBe( true );466 expect( s.match('lorem-ipsum') ).toBe( false );467 expect( s.match('/123') ).toBe( false );468 expect( s.match('123') ).toBe( false );469 expect( s.match('/123/45/67') ).toBe( true );470 });471 it('should only check rules of optional segments if param exists', function(){472 var a = crossroads.addRoute('/123/:a:/:b:/:c:');473 a.rules = {474 a : /^\w+$/,475 b : function(val){476 return val === 'ipsum';477 },478 c : ['lorem', 'bar']479 };480 expect( a.match('/123') ).toBe( true );481 expect( a.match('/123/') ).toBe( true );482 expect( a.match('/123/asd') ).toBe( true );483 expect( a.match('/123/asd/') ).toBe( true );484 expect( a.match('/123/asd/ipsum/') ).toBe( true );485 expect( a.match('/123/asd/ipsum/bar') ).toBe( true );486 expect( a.match('/123/asd/45') ).toBe( false );487 expect( a.match('/123/asd/45/qwe') ).toBe( false );488 expect( a.match('/123/as#%d&/ipsum') ).toBe( false );489 expect( a.match('/123/asd/ipsum/nope') ).toBe( false );490 });491 it('should work with shouldTypecast=false', function(){492 var s = crossroads.addRoute('/{foo}/{bar}/{ipsum}');493 crossroads.shouldTypecast = false;494 s.rules = {495 foo : function(val, request, params){496 return (val === 'lorem-ipsum' || val === '123'); //only string validates497 },498 bar : ['dolor', '45'], //only string validates499 ipsum : /(sit-amet|67)/500 };501 expect( s.match('/lorem-ipsum') ).toBe( false );502 expect( s.match('/lorem-ipsum/dolor/sit-amet') ).toBe( true );503 expect( s.match('lorem-ipsum') ).toBe( false );504 expect( s.match('/123') ).toBe( false );505 expect( s.match('123') ).toBe( false );506 expect( s.match('/123/45/67') ).toBe( true );507 });508 });509 describe('query string', function () {510 it('should validate with array', function () {511 var r = crossroads.addRoute('/foo.php{?query}');512 r.rules = {513 '?query' : ['lorem=ipsum&dolor=456', 'amet=789']514 };515 expect( r.match('foo.php?bar=123&ipsum=dolor') ).toBe( false );516 expect( r.match('foo.php?lorem=ipsum&dolor=456') ).toBe( true );517 expect( r.match('foo.php?amet=789') ).toBe( true );518 });519 it('should validate with RegExp', function () {520 var r = crossroads.addRoute('/foo.php{?query}');521 r.rules = {522 '?query' : /^lorem=\w+&dolor=\d+$/523 };524 expect( r.match('foo.php?bar=123&ipsum=dolor') ).toBe( false );525 expect( r.match('foo.php?lorem=ipsum&dolor=12345') ).toBe( true );526 expect( r.match('foo.php?lorem=ipsum&dolor=amet') ).toBe( false );527 });528 it('should validate with Function', function () {529 var r = crossroads.addRoute('/foo.php{?query}');530 crossroads.shouldTypecast = true;531 r.rules = {532 '?query' : function(val, req, vals){533 return (val.lorem === 'ipsum' && typeof val.dolor === 'number');534 }535 };536 expect( r.match('foo.php?bar=123&ipsum=dolor') ).toBe( false );537 expect( r.match('foo.php?lorem=ipsum&dolor=12345') ).toBe( true );538 expect( r.match('foo.php?lorem=ipsum&dolor=amet') ).toBe( false );539 });540 });541 describe('path alias', function(){542 it('should work with string pattern', function(){543 var s = crossroads.addRoute('/{foo}/{bar}/{ipsum}');544 s.rules = {545 0 : ['lorem-ipsum', '123'],546 1 : function(val, request, params){547 return (request !== '/lorem-ipsum');548 },549 2 : /^(sit-amet|67)$/550 };551 expect( s.match('/lorem-ipsum') ).toBe( false );552 expect( s.match('/lorem-ipsum/dolor/sit-amet') ).toBe( true );553 expect( s.match('lorem-ipsum') ).toBe( false );554 expect( s.match('/123') ).toBe( false );555 expect( s.match('123') ).toBe( false );556 expect( s.match('/123/44/55') ).toBe( false );557 expect( s.match('/123/45/67') ).toBe( true );558 });559 it('should work with RegExp pattern', function(){560 var s = crossroads.addRoute(/([\-\w]+)\/([\-\w]+)\/([\-\w]+)/);561 s.rules = {562 0 : ['lorem-ipsum', '123'],563 1 : function(val, request, params){564 return (request !== '/lorem-ipsum');565 },566 2 : /^(sit-amet|67)$/567 };568 expect( s.match('/lorem-ipsum') ).toBe( false );569 expect( s.match('/lorem-ipsum/dolor/sit-amet') ).toBe( true );570 expect( s.match('lorem-ipsum') ).toBe( false );571 expect( s.match('/123') ).toBe( false );572 expect( s.match('123') ).toBe( false );573 expect( s.match('/123/44/55') ).toBe( false );574 expect( s.match('/123/45/67') ).toBe( true );575 });576 });577 describe('request_', function(){578 it('should validate whole request', function(){579 var s = crossroads.addRoute(/^([a-z0-9]+)$/);580 s.rules = {581 request_ : function(request){ //this gets executed after all other validations582 return request !== '555';583 }584 };585 expect( s.match('lorem') ).toBe( true );586 expect( s.match('lorem/dolor/sit-amet') ).toBe( false );587 expect( s.match('lorem-ipsum') ).toBe( false );588 expect( s.match('123') ).toBe( true );589 expect( s.match('555') ).toBe( false );590 });591 it('should execute after other rules', function(){592 var s = crossroads.addRoute('/{foo}/{bar}/{ipsum}');593 s.rules = {594 foo : function(val, request, params){595 return (val === 'lorem-ipsum' || val === '123');596 },597 bar : ['dolor', '45'],598 ipsum : /(sit-amet|67|555)/,599 request_ : function(request){ //this gets executed after all other validations600 return request !== '/123/45/555';601 }602 };603 expect( s.match('/lorem-ipsum') ).toBe( false );604 expect( s.match('/lorem-ipsum/dolor/sit-amet') ).toBe( true );605 expect( s.match('lorem-ipsum') ).toBe( false );606 expect( s.match('/123') ).toBe( false );607 expect( s.match('123') ).toBe( false );608 expect( s.match('/123/45/67') ).toBe( true );609 expect( s.match('/123/45/555') ).toBe( false );610 });611 it('can be an array', function(){612 var s = crossroads.addRoute(/^([a-z0-9]+)$/);613 s.rules = {614 request_ : ['lorem', '123']615 };616 expect( s.match('lorem') ).toBe( true );617 expect( s.match('lorem/dolor/sit-amet') ).toBe( false );618 expect( s.match('lorem-ipsum') ).toBe( false );619 expect( s.match('123') ).toBe( true );620 expect( s.match('555') ).toBe( false );621 });622 it('can be a RegExp', function(){623 var s = crossroads.addRoute(/^([a-z0-9]+)$/);624 s.rules = {625 request_ : /^(lorem|123)$/626 };627 expect( s.match('lorem') ).toBe( true );628 expect( s.match('lorem/dolor/sit-amet') ).toBe( false );629 expect( s.match('lorem-ipsum') ).toBe( false );630 expect( s.match('123') ).toBe( true );631 expect( s.match('555') ).toBe( false );632 });633 it('should work with optional params', function(){634 var s = crossroads.addRoute(':foo:');635 s.rules = {636 request_ : /^(lorem|123|)$/ //empty also matches!637 };638 expect( s.match('lorem') ).toBe( true );639 expect( s.match('lorem/dolor/sit-amet') ).toBe( false );640 expect( s.match('lorem-ipsum') ).toBe( false );641 expect( s.match('123') ).toBe( true );642 expect( s.match('555') ).toBe( false );643 expect( s.match('') ).toBe( true );644 });645 });646 describe('normalize_', function(){647 it('should ignore normalize_ since it isn\'t a validation rule', function () {648 var calledNormalize = false;649 var s = crossroads.addRoute('/{foo}/{bar}/{ipsum}');650 s.rules = {651 foo : function(val, request, params){652 return (val === 'lorem-ipsum' || val === '123');653 },654 bar : ['dolor', '45'],655 ipsum : /(sit-amet|67)/,656 normalize_ : function(){657 calledNormalize = true;658 return [true];659 }660 };661 expect( calledNormalize ).toBe( false );662 expect( s.match('/lorem-ipsum') ).toBe( false );663 expect( s.match('/lorem-ipsum/dolor/sit-amet') ).toBe( true );664 expect( s.match('lorem-ipsum') ).toBe( false );665 expect( s.match('/123') ).toBe( false );666 expect( s.match('123') ).toBe( false );667 expect( s.match('/123/45/67') ).toBe( true );668 });669 });670 });...
rules.js
Source:rules.js
1import {2 F, B, U, D, R, L,3 N, W, S, E, NW, NE, SW, SE, SLOT_M, SLOT_D,4 COLOR_D as CD, COLOR_F as CF, COLOR_R as CR5} from './consts.js'6const SE_D_AS_F = { [F]: CD, [U]: CF, [R]: CR }7const SE_D_AS_R = { [F]: CF, [U]: CR, [R]: CD }8const SE_D_AS_U = { [F]: CR, [U]: CD, [R]: CF }9const SLOT_M_SOLVED = { [F]: CF, [R]: CR }10const SLOT_M_REVERSED = { [F]: CR, [R]: CF }11const SLOT_D_SOLVED = { [F]: CF, [R]: CR, [D]: CD }12const SLOT_D_D_AS_F = { [F]: CD, [R]: CF, [D]: CR }13const SLOT_D_D_AS_R = { [F]: CR, [R]: CD, [D]: CF }14const topEdge = (topColor, dir) => {15 const mapping = { [W]: L, [N]: B, [E]: R, [S]: F }16 return { [U]: topColor, [mapping[dir]]: topColor === CF ? CR : CF }17}18// https://www.speedsolving.com/wiki/index.php/F2L19export const F2L = [20 // 121 {22 match: { [E]: topEdge(CF, E), [SE]: SE_D_AS_F },23 moves: "U (R U' R')"24 },25 // 226 {27 match: { [S]: topEdge(CR, S), [SE]: SE_D_AS_R },28 moves: "U' (F' U F)"29 },30 // 331 {32 match: { [W]: topEdge(CR, W), [SE]: SE_D_AS_F },33 moves: "F' U' F"34 },35 // 436 {37 match: { [N]: topEdge(CF, N), [SE]: SE_D_AS_R },38 moves: "(R U R')"39 },40 // 541 {42 match: { [N]: topEdge(CF, N), [SE]: SE_D_AS_F },43 moves: "(U' R U R') U (R' F R F')"44 },45 // 646 {47 match: { [W]: topEdge(CR, W), [SE]: SE_D_AS_R },48 moves: "R R (B U B' U') R R"49 },50 // 751 {52 match: { [W]: topEdge(CF, W), [SE]: SE_D_AS_F },53 moves: "U' (R U U R') U U (R U' R')"54 },55 // 856 {57 match: { [N]: topEdge(CR, N), [SE]: SE_D_AS_R },58 moves: "(U F' U U F) (U F' U U F)"59 },60 // 961 {62 match: { [N]: topEdge(CR, N), [SE]: SE_D_AS_F },63 moves: "(U F' U' F) U' (F' U' F)"64 },65 // 1066 {67 match: { [W]: topEdge(CF, W), [SE]: SE_D_AS_R },68 moves: "U' (R U R' U) (R U R')"69 },70 // 1171 {72 match: { [E]: topEdge(CR, E), [SE]: SE_D_AS_F },73 moves: "U (F R' F' R) (F R' F' R) U' R U R'"74 },75 // 1276 {77 match: { [S]: topEdge(CF, S), [SE]: SE_D_AS_R },78 moves: "R' U U R R U R R U R"79 },80 // 1381 {82 match: { [S]: topEdge(CR, S), [SE]: SE_D_AS_F },83 moves: "(U F' U F) U' (F' U' F)"84 },85 // 1486 {87 match: { [E]: topEdge(CF, E), [SE]: SE_D_AS_R },88 moves: "U' (R U' R' U) (R U R')"89 },90 // 1591 {92 match: { [S]: topEdge(CF, S), [SE]: SE_D_AS_F },93 moves: "R B L U' L' B' R'"94 },95 // 1696 {97 match: { [E]: topEdge(CR, E), [SE]: SE_D_AS_R },98 moves: "(R U' R') U U (F' U' F)"99 },100 // 17101 {102 match: { [E]: topEdge(CF, E), [SE]: SE_D_AS_U },103 moves: "(R U U R') U' (R U R')"104 },105 // 18106 {107 match: { [S]: topEdge(CR, S), [SE]: SE_D_AS_U },108 moves: "F' U U F U F' U' F"109 },110 // 19111 {112 match: { [N]: topEdge(CF, N), [SE]: SE_D_AS_U },113 moves: "U R U U R R (F R F')"114 },115 // 20116 {117 match: { [W]: topEdge(CR, W), [SE]: SE_D_AS_U },118 moves: "U' F' U U F F (R' F' R)"119 },120 // 21121 {122 match: { [W]: topEdge(CF, W), [SE]: SE_D_AS_U },123 moves: "R B U U B' R'"124 },125 // 22126 {127 match: { [N]: topEdge(CR, N), [SE]: SE_D_AS_U },128 moves: "F' L' U U L F"129 },130 // 23131 {132 match: { [S]: topEdge(CF, S), [SE]: SE_D_AS_U },133 moves: "U (F R' F' R) U (R U R')"134 },135 // 24136 {137 match: { [E]: topEdge(CR, E), [SE]: SE_D_AS_U },138 moves: "U F' L' U L F R U R'"139 },140 // 25141 {142 match: { [E]: topEdge(CF, E), [SLOT_D]: SLOT_D_SOLVED },143 moves: "U' (F' U F) U (R U' R')"144 },145 // 26146 {147 match: { [S]: topEdge(CR, S), [SLOT_D]: SLOT_D_SOLVED },148 moves: "U (R U' R') U' (F' U F)"149 },150 // 27151 {152 match: { [E]: topEdge(CF, E), [SLOT_D]: SLOT_D_D_AS_F },153 moves: "(R U' R' U) (R U' R')"154 },155 // 28156 {157 match: { [S]: topEdge(CR, S), [SLOT_D]: SLOT_D_D_AS_R },158 moves: "(R U R' U') F R' F' R"159 },160 // 29161 {162 match: { [S]: topEdge(CR, S), [SLOT_D]: SLOT_D_D_AS_F },163 moves: "(R' F R F') (R' F R F')"164 },165 // 30166 {167 match: { [E]: topEdge(CF, E), [SLOT_D]: SLOT_D_D_AS_R },168 moves: "(R U R' U') (R U R')"169 },170 // 31171 {172 match: { [SLOT_M]: SLOT_M_REVERSED, [SE]: SE_D_AS_U },173 moves: "(R U' R' U) (F' U F)"174 },175 // 32176 {177 match: { [SLOT_M]: SLOT_M_SOLVED, [SE]: SE_D_AS_U },178 moves: "(R U R' U') (R U R' U') (R U R')"179 },180 // 33181 {182 match: { [SLOT_M]: SLOT_M_SOLVED, [SE]: SE_D_AS_F },183 moves: "U' (R U' R') U U (R U' R')"184 },185 // 34186 {187 match: { [SLOT_M]: SLOT_M_SOLVED, [SE]: SE_D_AS_R },188 moves: "U (F' U F) U U (F' U F)"189 },190 // 35191 {192 match: { [SLOT_M]: SLOT_M_REVERSED, [SE]: SE_D_AS_F },193 moves: "U U (R U' R') U' (F' U' F)"194 },195 // 36196 {197 match: { [SLOT_M]: SLOT_M_REVERSED, [SE]: SE_D_AS_R },198 moves: "U F' U' F U' (R U R')"199 },200 // 37 Solved201 // 38202 {203 match: { [SLOT_M]: SLOT_M_REVERSED, [SLOT_D]: SLOT_D_SOLVED },204 moves: "(R' F R F') (R U' R' U) (R U' R' U U) (R U' R')"205 },206 // 39207 {208 match: { [SLOT_M]: SLOT_M_SOLVED, [SLOT_D]: SLOT_D_D_AS_F },209 moves: "(R U' R') U' (R U R') U U (R U' R')"210 },211 // 40212 {213 match: { [SLOT_M]: SLOT_M_SOLVED, [SLOT_D]: SLOT_D_D_AS_R },214 moves: "(R U' R' U) (R U U R') U (R U' R')"215 },216 // 41217 {218 match: { [SLOT_M]: SLOT_M_REVERSED, [SLOT_D]: SLOT_D_D_AS_F },219 moves: "R F (U R U' R' F') U' R'"220 },221 // 42222 {223 match: { [SLOT_M]: SLOT_M_REVERSED, [SLOT_D]: SLOT_D_D_AS_R },224 moves: "(R U R' U') (R U' R') U U (F' U' F)"225 }226].map(rule => ({227 match: rule.match,228 moves: rule.moves.replace(/(\(|\))/g, '').split(' ')229}))230// https://www.speedsolving.com/wiki/index.php/OLL231export const OLL = [232 {233 id: 1,234 match: {235 [NW]: L, [N]: B, [NE]: R, [E]: R, [SE]: R, [S]: F, [SW]: L, [W]: L236 },237 moves: "R U B' R B R R U' R' F R F'"238 },239 {240 id: 2,241 match: {242 [NW]: L, [N]: B, [NE]: B, [E]: R, [SE]: F, [S]: F, [SW]: L, [W]: L243 },244 moves: "U U F R' F' R U R R B' R' B U' R'"245 },246 {247 id: 3,248 match: { [NW]: B, [N]: B, [E]: R, [SE]: F, [S]: F, [SW]: L, [W]: L },249 moves: "L (U F U' F') L' U' R (B U B' U') R'"250 },251 {252 id: 4,253 match: { [NW]: L, [N]: B, [E]: R, [SE]: R, [S]: F, [SW]: F, [W]: L },254 moves: "B (U L U' L') B' U F (R U R' U') F'"255 },256 {257 id: 5,258 match: { [NW]: B, [N]: B, [NE]: R, [SW]: L, [W]: L },259 moves: "L' B B R B R' B L"260 },261 {262 id: 6,263 match: { [NW]: L, [N]: B, [NE]: B, [E]: R, [SE]: R },264 moves: "R B B L' B' L B' R'"265 },266 {267 id: 7,268 match: { [NW]: B, [NE]: R, [E]: R, [SE]: F, [S]: F },269 moves: "F R' F' R U U R U U R'"270 },271 {272 id: 8,273 match: { [NW]: L, [NE]: B, [S]: F, [SW]: F, [W]: L },274 moves: "R U U R' U U R' F R F'"275 },276 {277 id: 9,278 match: { [NW]: L, [NE]: B, [SE]: R, [S]: F, [W]: L },279 moves: "R' U' R U' R' U R' F R F' U R"280 },281 {282 id: 10,283 match: { [NW]: B, [NE]: R, [E]: R, [S]: F, [SW]: L },284 moves: "(F U F' U) (F' L F L') F U U F'"285 },286 {287 id: 11,288 match: { [N]: B, [NE]: R, [E]: R, [SE]: F, [SW]: L },289 moves: "R U' R' U' R U' R' U U F' U F U' R U R'"290 },291 {292 id: 12,293 match: { [NW]: L, [N]: B, [SE]: R, [SW]: F, [W]: L },294 moves: "F (R U R' U') F' U F (R U R' U') F'"295 },296 {297 id: 13,298 match: { [NW]: B, [N]: B, [NE]: R, [SE]: F, [S]: F },299 moves: "F U R U' R R F' R U R U' R'"300 },301 {302 id: 14,303 match: { [NW]: L, [N]: B, [NE]: B, [S]: F, [SW]: F },304 moves: "F' U' L' U U L U L' U' L F"305 },306 {307 id: 15,308 match: { [NW]: B, [N]: B, [NE]: R, [S]: F, [SW]: L },309 moves: "L' B' L R' U' R U L' B L"310 },311 {312 id: 16,313 match: { [NW]: L, [N]: B, [NE]: B, [SE]: R, [S]: F },314 moves: "R B R' (L U L' U') R B' R'"315 },316 {317 id: 17,318 match: { [N]: B, [NE]: B, [E]: R, [S]: F, [SW]: L, [W]: L },319 moves: "R U R' U (R' F R F') U U (R' F R F')"320 },321 {322 id: 18,323 match: { [NW]: L, [N]: B, [E]: R, [S]: F, [SW]: L, [W]: L },324 moves: "(L' B L B') U U (L' B L B') (U B' U B)"325 },326 {327 id: 19,328 match: { [N]: B, [E]: R, [SE]: R, [S]: F, [SW]: L, [W]: L },329 moves: "R' U U F R U R' U' F F U U F R"330 },331 {332 id: 20,333 match: { [N]: B, [E]: R, [S]: F, [W]: L },334 moves: "R B U B' R' F F B D' L' D B' F F"335 },336 {337 id: 21,338 match: { [NW]: L, [NE]: R, [SE]: R, [SW]: L },339 moves: "R U R' U R U' R' U R U U R'"340 },341 {342 id: 22,343 match: { [NW]: L, [NE]: B, [SE]: F, [SW]: L },344 moves: "R U U R' R' U' R R U' R' R' U U R"345 },346 {347 id: 23,348 match: { [NW]: B, [NE]: B },349 moves: "R' U U R F U' R' U' R U F'"350 },351 {352 id: 24,353 match: { [NW]: B, [SW]: F },354 moves: "L F R' F' L' F R F'"355 },356 {357 id: 25,358 match: { [NE]: B, [SW]: L },359 moves: "R' F' L' F R F' L F"360 },361 {362 id: 26,363 match: { [NW]: L, [NE]: B, [SW]: F },364 moves: "L' U' L U' L' U U L"365 },366 {367 id: 27,368 match: { [NW]: B, [NE]: R, [SE]: F },369 moves: "R U R' U R U U R'"370 },371 {372 id: 28,373 match: { [E]: R, [S]: F },374 moves: "F R U R' U' F F L' U' L U F"375 },376 {377 id: 29,378 match: { [N]: B, [E]: R, [SE]: R, [SW]: L },379 moves: "L' L' U' L B L' U L' L' U' L' B' L"380 },381 {382 id: 30,383 match: { [N]: B, [SE]: R, [SW]: L, [W]: L },384 moves: "R' R' U R' B' R U' R' R' U R B R'"385 },386 {387 id: 31,388 match: { [N]: B, [NE]: B, [E]: R, [SE]: F },389 moves: "L' U' B U L U' L' B' L"390 },391 {392 id: 32,393 match: { [NW]: B, [N]: B, [SW]: F, [W]: L },394 moves: "R U B' U' R' U R B R'"395 },396 {397 id: 33,398 match: { [NW]: B, [N]: B, [S]: F, [SW]: F },399 moves: "(R U R' U') (R' F R F')"400 },401 {402 id: 34,403 match: { [NW]: L, [N]: B, [NE]: R, [S]: F },404 moves: "(R U R' U') B' (R' F R F') B"405 },406 {407 id: 35,408 match: { [N]: B, [NE]: R, [SW]: F, [W]: L },409 moves: "R U U R' R' F R F' R U U R'"410 },411 {412 id: 36,413 match: { [N]: B, [NE]: R, [E]: R, [SW]: F },414 moves: "R' U' R U' R' U R U R B' R' B"415 },416 {417 id: 37,418 match: { [NW]: B, [N]: B, [E]: R, [SE]: R },419 moves: "R B' R' B U B U' B'"420 },421 {422 id: 38,423 match: { [NW]: L, [N]: B, [SE]: F, [W]: L },424 moves: "L U L' U L U' L' U' L' B L B'"425 },426 {427 id: 39,428 match: { [NW]: B, [N]: B, [SE]: R, [S]: F },429 moves: "L F' (L' U' L U) F U' L'"430 },431 {432 id: 40,433 match: { [N]: B, [NE]: B, [S]: F, [SW]: L },434 moves: "R' F (R U R' U') F' U R"435 },436 {437 id: 41,438 match: { [N]: B, [SE]: F, [SW]: F, [W]: L },439 moves: "B U L U' L' B' L' U U L U L' U L"440 },441 {442 id: 42,443 match: { [N]: B, [E]: R, [SE]: F, [SW]: F },444 moves: "R' U' R U F R U R' U' R' U R U' F'"445 },446 {447 id: 43,448 match: { [N]: B, [NE]: R, [E]: R, [SE]: R },449 moves: "B' U' R' U R B"450 },451 {452 id: 44,453 match: { [NW]: L, [N]: B, [SW]: L, [W]: L },454 moves: "B U L U' L' B'"455 },456 {457 id: 45,458 match: { [NW]: L, [N]: B, [S]: F, [SW]: L },459 moves: "F (R U R' U') F'"460 },461 {462 id: 46,463 match: { [NE]: R, [E]: R, [SE]: R, [W]: L },464 moves: "R' U' R' F R F' U R"465 },466 {467 id: 47,468 match: { [NW]: B, [NE]: R, [W]: L, [SW]: F, [S]: F, [SE]: R },469 moves: "F' (L' U' L U) (L' U' L U) F"470 },471 {472 id: 48,473 match: { [NW]: L, [NE]: B, [E]: R, [SE]: F, [S]: F, [SW]: L },474 moves: "F (R U R' U') (R U R' U') F'"475 },476 {477 id: 49,478 match: { [NW]: B, [N]: B, [NE]: R, [E]: R, [SE]: R, [SW]: F },479 moves: "R B' R R F R R B R R F' R"480 },481 {482 id: 50,483 match: { [NW]: L, [N]: B, [NE]: B, [SE]: F, [SW]: L, [W]: L },484 moves: "R B' R B R R U U F R' F' R"485 },486 {487 id: 51,488 match: { [NW]: B, [N]: B, [NE]: R, [SE]: R, [S]: F, [SW]: F },489 moves: "F U R U' R' U R U' R' F'"490 },491 {492 id: 52,493 match: { [NW]: B, [NE]: R, [E]: R, [SE]: R, [SW]: F, [W]: L },494 moves: "R' U' R U' R' U F' U F R"495 },496 {497 id: 53,498 match: { [NW]: L, [SW]: L, [S]: F, [SE]: R, [E]: R, [NE]: R },499 moves: "F R U R' U' F' R U R' U' R' F R F'"500 },501 {502 id: 54,503 match: { [NW]: L, [NE]: R, [SE]: R, [S]: F, [SW]: L, [W]: L },504 moves: "U U F R' F' R U U F F L F L' F"505 },506 {507 id: 55,508 match: { [NW]: L, [NE]: R, [E]: R, [SE]: R, [SW]: L, [W]: L },509 moves: "R U U R R U' R U' R' U U F R F'"510 },511 {512 id: 56,513 match: { [NW]: L, [N]: B, [NE]: R, [SE]: R, [S]: F, [SW]: L },514 moves: "L F L' U R U' R' U R U' R' L F' L'"515 },516 {517 id: 57,518 match: { [N]: B, [S]: F },519 moves: "R U R' U' L R' F R F' L'"520 }521].map(rule => ({522 id: rule.id,523 match: rule.match,524 moves: rule.moves.replace(/(\(|\))/g, '').split(' ')525}))526// https://www.speedsolving.com/wiki/index.php/PLL527export const PLL = [528 {529 name: 'H',530 match: { [N]: S, [S]: [N], [W]: E, [E]: W },531 moves: "L R U U L' R' F' B' U U F B"532 },533 {534 name: 'U-a',535 match: { [N]: W, [W]: [E], [E]: N },536 moves: "R R U' R' U' R U R U R U' R"537 },538 {539 name: 'U-b',540 match: { [N]: E, [E]: W, [W]: N },541 moves: "R' U R' U' R' U' R' U R U R R"542 },543 {544 name: 'Z',545 match: { [W]: N, [N]: W, [S]: E, [E]: S },546 moves: "U R' U' R U' R U R U' R' U R U R R U' R' U"547 },548 {549 name: 'A-a',550 match: { [NW]: NE, [NE]: SE, [SE]: NW },551 moves: "R' F R' B B R F' R' B B R R"552 },553 {554 name: 'A-b',555 match: { [NE]: SW, [SW]: SE, [SE]: NE },556 moves: "R B' R F F R' B R F F R R"557 },558 {559 name: 'E',560 match: { [NW]: NE, [NE]: NW, [SW]: SE, [SE]: SW },561 moves: "D R' D D F' D L D' F D D R D' F' L' F"562 },563 {564 name: 'F',565 match: { [NW]: NE, [NE]: NW, [W]: E, [E]: W },566 moves: "(R' U R U') R R (F' U' F U) (R F R' F') R R U'"567 },568 {569 name: 'G-a',570 match: { [NW]: SE, [SE]: SW, [SW]: NW, [W]: S, [S]: N, [N]: W },571 moves: "(R U R' U' R') U F (R U R U' R') F' U R' U U R"572 },573 {574 name: 'G-b',575 match: { [NW]: SW, [SW]: SE, [SE]: NW, [W]: N, [N]: S, [S]: W },576 moves: "R' U' R B B D (L' U L U' L) D' B B"577 },578 {579 name: 'G-c',580 match: { [NE]: SW, [SW]: SE, [SE]: NE, [N]: E, [E]: S, [S]: N },581 moves: "L' U' L U L U' F' L' U' L' U L F U' L U U L'"582 },583 {584 name: 'G-d',585 match: { [NE]: SE, [SE]: SW, [SW]: NE, [N]: S, [S]: E, [E]: N },586 moves: "L U L' B B D' (R U' R' U R') D B B"587 },588 {589 name: 'J-a',590 match: { [NW]: SW, [SW]: NW, [W]: S, [S]: W },591 moves: "(B' U F') U U (B U' B') U U (F B U')"592 },593 {594 name: 'J-b',595 match: { [NE]: SE, [SE]: NE, [E]: S, [S]: E },596 moves: "(B U' F) U U (B' U B) U U (F' B' U)"597 },598 {599 name: 'N-a',600 match: { [W]: E, [E]: W, [SW]: NE, [NE]: SW },601 moves: "(R U' L U U R' U L') (R U' L U U R' U L')"602 },603 {604 name: 'N-b',605 match: { [W]: E, [E]: W, [NW]: SE, [SE]: NW },606 moves: "(L' U R' U' U' L U' R) (L' U R' U' U' L U' R)"607 },608 {609 name: 'R-a',610 match: { [N]: E, [E]: N, [SW]: SE, [SE]: SW },611 moves: "R U U R' U U R B' R' U' R U R B R R"612 },613 {614 name: 'R-b',615 match: { [NW]: NE, [NE]: NW, [S]: E, [E]: S },616 moves: "R' U U R U U R' F R U R' U' R' F' R R"617 },618 {619 name: 'T',620 match: { [W]: E, [E]: W, [NE]: SE, [SE]: NE },621 moves: "R U R' U' R' F R R U' R' U' R U R' F'"622 },623 {624 name: 'V',625 match: { [NW]: SE, [SE]: NW, [N]: E, [E]: N },626 moves: "R' U R' U' B' R' B B U' B' U B' R B R"627 },628 {629 name: 'Y',630 match: { [NW]: SE, [SE]: NW, [W]: N, [N]: W },631 moves: "F R U' R' U' R U R' F' R U R' U' R' F R F'"632 }633].map(rule => ({634 name: rule.name,635 match: rule.match,636 moves: rule.moves.replace(/(\(|\))/g, '').split(' ')...
regexp-zero-length-alternatives.js
Source:regexp-zero-length-alternatives.js
...10var s6 = "xabx";11var s7 = "g0";12// Non-capturing empty first alternative greedy '*'13var re1 = new RegExp(/(?:|a|z)*/);14shouldBe('emptyStr.match(re1)', '[""]');15shouldBe('s1.match(re1)', '[""]');16shouldBe('s2.match(re1)', '["aaaa"]');17shouldBe('s3.match(re1)', '["aa"]');18// Non-capturing empty middle alternative greedy '*'19var re2 = new RegExp(/(?:a||z)*/);20shouldBe('emptyStr.match(re2)', '[""]');21shouldBe('s1.match(re2)', '[""]');22shouldBe('s2.match(re2)', '["aaaa"]');23shouldBe('s3.match(re2)', '["aa"]');24// Non-capturing empty last alternative greedy '*'25var re3 = new RegExp(/(?:a|z|)*/);26shouldBe('emptyStr.match(re3)', '[""]');27shouldBe('s1.match(re3)', '[""]');28shouldBe('s2.match(re3)', '["aaaa"]');29shouldBe('s3.match(re3)', '["aa"]');30// Capturing empty first alternative greedy '*'31var re4 = new RegExp(/(|a|z)*/);32shouldBe('emptyStr.match(re4)', '["", undefined]');33shouldBe('s1.match(re4)', '["", undefined]');34shouldBe('s2.match(re4)', '["aaaa", "a"]');35shouldBe('s3.match(re4)', '["aa", "a"]');36// Capturing empty middle alternative greedy '*'37var re5 = new RegExp(/(a||z)*/);38shouldBe('emptyStr.match(re5)', '["", undefined]');39shouldBe('s1.match(re5)', '["", undefined]');40shouldBe('s2.match(re5)', '["aaaa", "a"]');41shouldBe('s3.match(re5)', '["aa", "a"]');42// Capturing empty last alternative greedy '*'43var re6 = new RegExp(/(a|z|)*/);44shouldBe('emptyStr.match(re6)', '["", undefined]');45shouldBe('s1.match(re6)', '["", undefined]');46shouldBe('s2.match(re6)', '["aaaa", "a"]');47shouldBe('s3.match(re6)', '["aa", "a"]');48// Non-capturing empty first alternative fixed-count49var re7 = new RegExp(/(?:|a|z){2,5}/);50shouldBe('emptyStr.match(re7)', '[""]');51shouldBe('s1.match(re7)', '[""]');52shouldBe('s2.match(re7)', '["aaa"]');53shouldBe('s3.match(re7)', '["aa"]');54// Non-capturing empty middle alternative fixed-count55var re8 = new RegExp(/(?:a||z){2,5}/);56shouldBe('emptyStr.match(re8)', '[""]');57shouldBe('s1.match(re8)', '[""]');58shouldBe('s2.match(re8)', '["aaaa"]');59shouldBe('s3.match(re8)', '["aa"]');60// Non-capturing empty last alternative fixed-count61var re9 = new RegExp(/(?:a|z|){2,5}/);62shouldBe('emptyStr.match(re9)', '[""]');63shouldBe('s1.match(re9)', '[""]');64shouldBe('s2.match(re9)', '["aaaa"]');65shouldBe('s3.match(re9)', '["aa"]');66// Non-capturing empty first alternative non-greedy '*'67var re10 = new RegExp(/(?:|a|z)*?/);68shouldBe('emptyStr.match(re10)', '[""]');69shouldBe('s1.match(re10)', '[""]');70shouldBe('s2.match(re10)', '[""]');71shouldBe('s3.match(re10)', '[""]');72// Non-capturing empty middle alternative non-greedy '*'73var re11 = new RegExp(/(?:a||z)*?/);74shouldBe('emptyStr.match(re11)', '[""]');75shouldBe('s1.match(re11)', '[""]');76shouldBe('s2.match(re11)', '[""]');77shouldBe('s3.match(re11)', '[""]');78// Non-capturing empty last alternative non-greedy '*'79var re12 = new RegExp(/(?:a|z|)*?/);80shouldBe('emptyStr.match(re12)', '[""]');81shouldBe('s1.match(re12)', '[""]');82shouldBe('s2.match(re12)', '[""]');83shouldBe('s3.match(re12)', '[""]');84// Capturing empty first alternative non-greedy '*'85var re13 = new RegExp(/(|a|z)*?/);86shouldBe('emptyStr.match(re13)', '["", undefined]');87shouldBe('s1.match(re13)', '["", undefined]');88shouldBe('s2.match(re13)', '["", undefined]');89shouldBe('s3.match(re13)', '["", undefined]');90// Capturing empty middle alternative non-greedy '*'91var re14 = new RegExp(/(a||z)*?/);92shouldBe('emptyStr.match(re14)', '["", undefined]');93shouldBe('s1.match(re14)', '["", undefined]');94shouldBe('s2.match(re14)', '["", undefined]');95shouldBe('s3.match(re14)', '["", undefined]');96// Capturing empty last alternative non-greedy '*'97var re15 = new RegExp(/(a|z|)*?/);98shouldBe('emptyStr.match(re15)', '["", undefined]');99shouldBe('s1.match(re15)', '["", undefined]');100shouldBe('s2.match(re15)', '["", undefined]');101shouldBe('s3.match(re15)', '["", undefined]');102// Non-capturing empty first alternative greedy '?'103var re16 = new RegExp(/(?:|a|z)?/);104shouldBe('emptyStr.match(re16)', '[""]');105shouldBe('s1.match(re16)', '[""]');106shouldBe('s2.match(re16)', '["a"]');107shouldBe('s3.match(re16)', '["a"]');108// Non-capturing empty middle alternative greedy '?'109var re17 = new RegExp(/(?:a||z)?/);110shouldBe('emptyStr.match(re17)', '[""]');111shouldBe('s1.match(re17)', '[""]');112shouldBe('s2.match(re17)', '["a"]');113shouldBe('s3.match(re17)', '["a"]');114// Non-capturing empty last alternative greedy '?'115var re18 = new RegExp(/(?:a|z|)?/);116shouldBe('emptyStr.match(re18)', '[""]');117shouldBe('s1.match(re18)', '[""]');118shouldBe('s2.match(re18)', '["a"]');119shouldBe('s3.match(re18)', '["a"]');120// Capturing empty first alternative greedy '?'121var re19 = new RegExp(/(|a|z)?/);122shouldBe('emptyStr.match(re19)', '["", undefined]');123shouldBe('s1.match(re19)', '["", undefined]');124shouldBe('s2.match(re19)', '["a", "a"]');125shouldBe('s3.match(re19)', '["a", "a"]');126// Capturing empty middle alternative greedy '?'127var re20 = new RegExp(/(a||z)?/);128shouldBe('emptyStr.match(re20)', '["", undefined]');129shouldBe('s1.match(re20)', '["", undefined]');130shouldBe('s2.match(re20)', '["a", "a"]');131shouldBe('s3.match(re20)', '["a", "a"]');132// Capturing empty last alternative greedy '?'133var re21 = new RegExp(/(a|z|)?/);134shouldBe('emptyStr.match(re21)', '["", undefined]');135shouldBe('s1.match(re21)', '["", undefined]');136shouldBe('s2.match(re21)', '["a", "a"]');137shouldBe('s3.match(re21)', '["a", "a"]');138// Non-capturing empty first alternative non-greedy '?'139var re22 = new RegExp(/(?:|a|z)??/);140shouldBe('emptyStr.match(re22)', '[""]');141shouldBe('s1.match(re22)', '[""]');142shouldBe('s2.match(re22)', '[""]');143shouldBe('s3.match(re22)', '[""]');144// Non-capturing empty middle alternative non-greedy '?'145var re23 = new RegExp(/(?:a||z)??/);146shouldBe('emptyStr.match(re23)', '[""]');147shouldBe('s1.match(re23)', '[""]');148shouldBe('s2.match(re23)', '[""]');149shouldBe('s3.match(re23)', '[""]');150// Non-capturing empty last alternative non-greedy '?'151var re24 = new RegExp(/(?:a|z|)??/);152shouldBe('emptyStr.match(re24)', '[""]');153shouldBe('s1.match(re24)', '[""]');154shouldBe('s2.match(re24)', '[""]');155shouldBe('s3.match(re24)', '[""]');156// Capturing empty first alternative non-greedy '?'157var re25 = new RegExp(/(|a|z)??/);158shouldBe('emptyStr.match(re25)', '["", undefined]');159shouldBe('s1.match(re25)', '["", undefined]');160shouldBe('s2.match(re25)', '["", undefined]');161shouldBe('s3.match(re25)', '["", undefined]');162// Capturing empty middle alternative non-greedy '?'163var re26 = new RegExp(/(a||z)??/);164shouldBe('emptyStr.match(re26)', '["", undefined]');165shouldBe('s1.match(re26)', '["", undefined]');166shouldBe('s2.match(re26)', '["", undefined]');167shouldBe('s3.match(re26)', '["", undefined]');168// Capturing empty last alternative non-greedy '?'169var re27 = new RegExp(/(a|z|)??/);170shouldBe('emptyStr.match(re27)', '["", undefined]');171shouldBe('s1.match(re27)', '["", undefined]');172shouldBe('s2.match(re27)', '["", undefined]');173shouldBe('s3.match(re27)', '["", undefined]');174// Non-capturing empty first alternative greedy '*' non-terminal175var re28 = new RegExp(/(?:|a|z)*x/);176shouldBe('emptyStr.match(re28)', 'null');177shouldBe('s1.match(re28)', '["x"]');178shouldBe('s2.match(re28)', 'null');179shouldBe('s3.match(re28)', '["aax"]');180// Non-capturing empty middle alternative greedy '*' non-terminal181var re29 = new RegExp(/(?:a||z)*x/);182shouldBe('emptyStr.match(re29)', 'null');183shouldBe('s1.match(re29)', '["x"]');184shouldBe('s2.match(re29)', 'null');185shouldBe('s3.match(re29)', '["aax"]');186// Non-capturing empty last alternative greedy '*' non-terminal187var re30 = new RegExp(/(?:a|z|)*x/);188shouldBe('emptyStr.match(re30)', 'null');189shouldBe('s1.match(re30)', '["x"]');190shouldBe('s2.match(re30)', 'null');191shouldBe('s3.match(re30)', '["aax"]');192// Non-capturing two possibly empty alternatives greedy '*'193var re31 = new RegExp(/(?:a*|b*)*/);194shouldBe('emptyStr.match(re31)', '[""]');195shouldBe('s1.match(re31)', '[""]');196shouldBe('s3.match(re31)', '["aa"]');197shouldBe('s4.match(re31)', '["abab"]');198// Non-capturing two possibly empty non-greedy alternatives non-greedy '*'199var re32 = new RegExp(/(?:a*?|b*?)*/);200shouldBe('emptyStr.match(re32)', '[""]');201shouldBe('s1.match(re32)', '[""]');202shouldBe('s2.match(re32)', '["aaaa"]');203shouldBe('s4.match(re32)', '["abab"]');204shouldBe('s5.match(re32)', '["ab"]');205shouldBe('s6.match(re32)', '[""]');206// Three possibly empty alternatives with greedy +207var re33 = new RegExp(/(?:(?:(?!))|g?|0*\*?)+/);208shouldBe('emptyStr.match(re33)', '[""]');209shouldBe('s1.match(re33)', '[""]');210shouldBe('s7.match(re33)', '["g0"]');211// first alternative zero length fixed count212var re34 = new RegExp(/(?:|a)/);213shouldBe('emptyStr.match(re34)', '[""]');214shouldBe('s1.match(re34)', '[""]');215shouldBe('s2.match(re34)', '[""]');...
replace.js
Source:replace.js
1module.exports = function(grunt) {2 return {3 /***********4 * PRIVATE METHODS5 * Ignore _init method, which is a subset of other method names, and is used in different ways6 * Note: can't do public methods, as they need to be called as is7 ***********/8 one: {9 options: {10 patterns: [11 // Note: _a is now reserved for step two12 {13 match: /_processCountryData/g,14 replacement: '_b'15 }, {16 match: /_addCountryCode/g,17 replacement: '_c'18 }, {19 match: /_processAllCountries/g,20 replacement: '_d'21 }, {22 match: /_translateCountriesByLocale/g,23 replacement: '_d0'24 }, {25 match: /_countryNameSort/g,26 replacement: '_d1'27 }, {28 match: /_processCountryCodes/g,29 replacement: '_d2'30 }, {31 match: /_processPreferredCountries/g,32 replacement: '_e'33 }, {34 match: /_createEl/g,35 replacement: '_e2'36 }, {37 match: /_generateMarkup/g,38 replacement: '_f'39 }, {40 match: /_appendListItems/g,41 replacement: '_g'42 }, {43 match: /_setInitialState/g,44 replacement: '_h'45 }, {46 match: /_initListeners/g,47 replacement: '_i'48 }, {49 match: /_initHiddenInputListener/g,50 replacement: '_i0'51 }, {52 match: /_getClosestLabel/g,53 replacement: '_i1'54 }, {55 match: /_initDropdownListeners/g,56 replacement: '_i2'57 }, {58 match: /_initRequests/g,59 replacement: '_i3'60 }, {61 match: /_loadAutoCountry/g,62 replacement: '_i4'63 }, {64 match: /_initKeyListeners/g,65 replacement: '_j'66 }, {67 match: /_cap/g,68 replacement: '_j2'69 }, {70 match: /_initBlurListeners/g,71 replacement: '_l'72 }, {73 match: /_removeEmptyDialCode/g,74 replacement: '_l2'75 }, {76 match: /_getNumeric/g,77 replacement: '_m'78 }, {79 match: /_trigger/g,80 replacement: '_m2'81 }, {82 match: /_showDropdown/g,83 replacement: '_n'84 }, {85 match: /_toggleClass/g,86 replacement: '_n2'87 }, {88 match: /_setDropdownPosition/g,89 replacement: '_o'90 }, {91 match: /_getClosestListItem/g,92 replacement: '_o2'93 }, {94 match: /_bindDropdownListeners/g,95 replacement: '_p'96 }, {97 match: /_handleUpDownKey/g,98 replacement: '_q'99 }, {100 match: /_handleEnterKey/g,101 replacement: '_r'102 }, {103 match: /_searchForCountry/g,104 replacement: '_s'105 }, {106 match: /_startsWith/g,107 replacement: '_t'108 }, {109 match: /_updateValFromNumber/g,110 replacement: '_u'111 }, {112 match: /_updateFlagFromNumber/g,113 replacement: '_v'114 }, {115 match: /_isRegionlessNanp/g,116 replacement: '_w'117 }, {118 match: /_highlightListItem/g,119 replacement: '_x'120 }, {121 match: /_getCountryData/g,122 replacement: '_y'123 }, {124 match: /_setFlag/g,125 replacement: '_z'126 }, {127 match: /_updatePlaceholder/g,128 replacement: '_0'129 }, {130 match: /_selectListItem/g,131 replacement: '_1'132 }, {133 match: /_closeDropdown/g,134 replacement: '_2'135 }, {136 match: /_scrollTo/g,137 replacement: '_3'138 }, {139 match: /_updateDialCode/g,140 replacement: '_4'141 }, {142 match: /_getDialCode/g,143 replacement: '_5'144 }, {145 match: /_getFullNumber/g,146 replacement: '_6'147 }, {148 match: /_beforeSetNumber/g,149 replacement: '_7'150 }, {151 match: /_triggerCountryChange/g,152 replacement: '_8'153 }154 ]155 },156 files: {157 'tmp/one.min.js': 'tmp/wrapped.min.js',158 'tmp/one-jquery.min.js': 'tmp/wrapped-jquery.min.js',159 }160 },161 /***********162 * INLINE PRIVATE METHODS163 ***********/164 two: {165 options: {166 patterns: [167 {168 match: /_handleMouseoverCountryList/g,169 replacement: '_a0'170 }, {171 match: /_handleClickCountryList/g,172 replacement: '_a1'173 }, {174 match: /_handleClickOffToClose/g,175 replacement: '_a2'176 }, {177 match: /_handleKeydownOnDropdown/g,178 replacement: '_a3'179 }, {180 match: /_handleWindowScroll/g,181 replacement: '_a4'182 }, {183 match: /_handleSubmitOrBlurEvent/g,184 replacement: '_a8'185 }, {186 match: /_handleLabelClick/g,187 replacement: '_a9'188 }, {189 match: /_handleClickSelectedFlag/g,190 replacement: '_a10'191 }, {192 match: /_handleFlagsContainerKeydown/g,193 replacement: '_a11'194 }, {195 match: /_handleKeyupEvent/g,196 replacement: '_a12'197 }, {198 match: /_handleClipboardEvent/g,199 replacement: '_a13'200 }, {201 match: /_handleHiddenInputSubmit/g,202 replacement: '_a14'203 }204 ]205 },206 files: {207 'tmp/two.min.js': 'tmp/one.min.js',208 'tmp/two-jquery.min.js': 'tmp/one-jquery.min.js',209 }210 },211 /***********212 * INSTANCE FIELDS213 * Note: avoid option names as that will break things!214 ***********/215 three: {216 options: {217 patterns: [218 {219 match: /\.telInput/g,220 replacement: '.a'221 }, {222 match: /\.activeItem/g,223 replacement: '.b'224 }, {225 match: /\.highlightedItem/g,226 replacement: '.c'227 }, {228 match: /\.options/g,229 replacement: '.d'230 }, {231 match: /\.hadInitialPlaceholder/g,232 replacement: '.e'233 }, {234 match: /\.isMobile/g,235 replacement: '.g'236 }, {237 match: /\.resolveAutoCountryPromise/g,238 replacement: '.h'239 }, {240 match: /\.rejectAutoCountryPromise/g,241 replacement: '.i'242 }, {243 match: /\.resolveUtilsScriptPromise/g,244 replacement: '.i0'245 }, {246 match: /\.rejectUtilsScriptPromise/g,247 replacement: '.i1'248 }, {249 match: /\.defaultCountry/g,250 replacement: '.j'251 }, {252 match: /\.flagsContainer/g,253 replacement: '.k'254 }, {255 match: /\.selectedFlagInner/g,256 replacement: '.l'257 }, {258 match: /\.countryList/g,259 replacement: '.m'260 }, {261 match: /\.countries/g,262 replacement: '.p'263 }, {264 match: /\.countryCodes/g,265 replacement: '.q'266 }, {267 match: /\.selectedCountryData/g,268 replacement: '.s'269 }, {270 match: /\.selectedDialCode/g,271 replacement: '.t'272 }, {273 match: /\.dropdownArrow/g,274 replacement: '.u'275 }276 ]277 },278 files: {279 'build/js/intlTelInput.min.js': 'tmp/two.min.js',280 'build/js/intlTelInput-jquery.min.js': 'tmp/two-jquery.min.js',281 }282 }283 };...
emodal-utilities-strtotime.js
Source:emodal-utilities-strtotime.js
...34 // dates with "." or "-" as MDY instead of DMY35 // dates with two-digit years differently36 // etc...etc...37 // ...therefore we manually parse lots of common date formats38 match = text.match(39 /^(\d{1,4})([\-\.\/\:])(\d{1,2})([\-\.\/\:])(\d{1,4})(?:\s(\d{1,2}):(\d{2})?:?(\d{2})?)?(?:\s([A-Z]+)?)?$/);40 if (match && match[2] === match[4]) {41 if (match[1] > 1901) {42 switch (match[2]) {43 case '-':44 { // YYYY-M-D45 if (match[3] > 12 || match[5] > 31) {46 return fail;47 }48 return new Date(match[1], parseInt(match[3], 10) - 1, match[5],49 match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;50 }51 case '.':52 { // YYYY.M.D is not parsed by strtotime()53 return fail;54 }55 case '/':56 { // YYYY/M/D57 if (match[3] > 12 || match[5] > 31) {58 return fail;59 }60 return new Date(match[1], parseInt(match[3], 10) - 1, match[5],61 match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;62 }63 }64 } else if (match[5] > 1901) {65 switch (match[2]) {66 case '-':67 { // D-M-YYYY68 if (match[3] > 12 || match[1] > 31) {69 return fail;70 }71 return new Date(match[5], parseInt(match[3], 10) - 1, match[1],72 match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;73 }74 case '.':75 { // D.M.YYYY76 if (match[3] > 12 || match[1] > 31) {77 return fail;78 }79 return new Date(match[5], parseInt(match[3], 10) - 1, match[1],80 match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;81 }82 case '/':83 { // M/D/YYYY84 if (match[1] > 12 || match[3] > 31) {85 return fail;86 }87 return new Date(match[5], parseInt(match[1], 10) - 1, match[3],88 match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;89 }90 }91 } else {92 switch (match[2]) {93 case '-':94 { // YY-M-D95 if (match[3] > 12 || match[5] > 31 || (match[1] < 70 && match[1] > 38)) {96 return fail;97 }98 year = match[1] >= 0 && match[1] <= 38 ? +match[1] + 2000 : match[1];99 return new Date(year, parseInt(match[3], 10) - 1, match[5],100 match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;101 }102 case '.':103 { // D.M.YY or H.MM.SS104 if (match[5] >= 70) { // D.M.YY105 if (match[3] > 12 || match[1] > 31) {106 return fail;107 }108 return new Date(match[5], parseInt(match[3], 10) - 1, match[1],109 match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;110 }111 if (match[5] < 60 && !match[6]) { // H.MM.SS112 if (match[1] > 23 || match[3] > 59) {113 return fail;114 }115 today = new Date();116 return new Date(today.getFullYear(), today.getMonth(), today.getDate(),117 match[1] || 0, match[3] || 0, match[5] || 0, match[9] || 0) / 1000;118 }119 return fail; // invalid format, cannot be parsed120 }121 case '/':122 { // M/D/YY123 if (match[1] > 12 || match[3] > 31 || (match[5] < 70 && match[5] > 38)) {124 return fail;125 }126 year = match[5] >= 0 && match[5] <= 38 ? +match[5] + 2000 : match[5];127 return new Date(year, parseInt(match[1], 10) - 1, match[3],128 match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;129 }130 case ':':131 { // HH:MM:SS132 if (match[1] > 23 || match[3] > 59 || match[5] > 59) {133 return fail;134 }135 today = new Date();136 return new Date(today.getFullYear(), today.getMonth(), today.getDate(),137 match[1] || 0, match[3] || 0, match[5] || 0) / 1000;138 }139 }140 }141 }142 // other formats and "now" should be parsed by Date.parse()143 if (text === 'now') {144 return now === null || isNaN(now) ? new Date()145 .getTime() / 1000 | 0 : now | 0;146 }147 if (!isNaN(parsed = Date.parse(text))) {148 return parsed / 1000 | 0;149 }150 date = now ? new Date(now * 1000) : new Date();151 days = {152 'sun': 0,153 'mon': 1,154 'tue': 2,155 'wed': 3,156 'thu': 4,157 'fri': 5,158 'sat': 6159 };160 ranges = {161 'yea': 'FullYear',162 'mon': 'Month',163 'day': 'Date',164 'hou': 'Hours',165 'min': 'Minutes',166 'sec': 'Seconds'167 };168169 function lastNext(type, range, modifier) {170 var diff, day = days[range];171 if (typeof day !== 'undefined') {172 diff = day - date.getDay();173 if (diff === 0) {174 diff = 7 * modifier;175 } else if (diff > 0 && type === 'last') {176 diff -= 7;177 } else if (diff < 0 && type === 'next') {178 diff += 7;179 }180 date.setDate(date.getDate() + diff);181 }182 }183184 function process(val) {185 var splt = val.split(' '), // Todo: Reconcile this with regex using \s, taking into account browser issues with split and regexes186 type = splt[0],187 range = splt[1].substring(0, 3),188 typeIsNumber = /\d+/.test(type),189 ago = splt[2] === 'ago',190 num = (type === 'last' ? -1 : 1) * (ago ? -1 : 1);191 if (typeIsNumber) {192 num *= parseInt(type, 10);193 }194 if (ranges.hasOwnProperty(range) && !splt[1].match(/^mon(day|\.)?$/i)) {195 return date['set' + ranges[range]](date['get' + ranges[range]]() + num);196 }197 if (range === 'wee') {198 return date.setDate(date.getDate() + (num * 7));199 }200 if (type === 'next' || type === 'last') {201 lastNext(type, range, num);202 } else if (!typeIsNumber) {203 return false;204 }205 return true;206 }207 times = '(years?|months?|weeks?|days?|hours?|minutes?|min|seconds?|sec' +208 '|sunday|sun\\.?|monday|mon\\.?|tuesday|tue\\.?|wednesday|wed\\.?' +209 '|thursday|thu\\.?|friday|fri\\.?|saturday|sat\\.?)';210 regex = '([+-]?\\d+\\s' + times + '|' + '(last|next)\\s' + times + ')(\\sago)?';211 match = text.match(new RegExp(regex, 'gi'));212 if (!match) {213 return fail;214 }215 for (i = 0, len = match.length; i < len; i++) {216 if (!process(match[i])) {217 return fail;218 }219 }220 // ECMAScript 5 only221 // if (!match.every(process))222 // return false;223 return (date.getTime() / 1000);
...
Using AI Code Generation
1var match = require('devicefarmer-stf-client').match;2var device = match('android');3console.log(device);4var match = require('devicefarmer-stf-client').match;5var device = match('android');6console.log(device);7var match = require('devicefarmer-stf-client').match;8var device = match('android');9console.log(device);10var match = require('devicefarmer-stf-client').match;11var device = match('android');12console.log(device);13var match = require('devicefarmer-stf-client').match;14var device = match('android');15console.log(device);16var match = require('devicefarmer-stf-client').match;17var device = match('android');18console.log(device);19var match = require('devicefarmer-stf-client').match;20var device = match('android');21console.log(device);22var match = require('devicefarmer-stf-client').match;23var device = match('android');24console.log(device);25var match = require('devicefarmer-stf-client').match;26var device = match('android');27console.log(device);28var match = require('devicefarmer-stf-client').match;29var device = match('android');30console.log(device);31var match = require('devicefarmer-stf-client').match;32var device = match('android');33console.log(device);34var match = require('devicefarmer-stf-client').match;35var device = match('android');36console.log(device);37var match = require('devicefarmer-stf-client').match;38var device = match('android');39console.log(device);
Using AI Code Generation
1var devicefarmer = require('devicefarmer-stf-client');2stf.match(function(err, device) {3if (err) {4console.log(err);5} else {6console.log(device);7}8});9var devicefarmer = require('devicefarmer-stf-client');10stf.claim(function(err, device) {11if (err) {12console.log(err);13} else {14console.log(device);15}16});17var devicefarmer = require('devicefarmer-stf-client');18stf.unclaim(function(err, device) {19if (err) {20console.log(err);21} else {22console.log(device);23}24});25var devicefarmer = require('devicefarmer-stf-client');26stf.use(function(err, device) {27if (err) {28console.log(err);29} else {30console.log(device);31}32});33var devicefarmer = require('devicefarmer-stf-client');34stf.release(function(err, device) {35if (err) {36console.log(err);37} else {38console.log(device);39}40});41var devicefarmer = require('devicefarmer-stf-client');42stf.disconnect(function(err, device) {43if (err) {44console.log(err);45} else {46console.log(device);47}48});49var devicefarmer = require('devicefarmer-stf-client');
Using AI Code Generation
1var devicefarmer = require('devicefarmer-stf-client');2var client = new devicefarmer.Client();3client.match('device-serial', function(err, device) {4 if (err) {5 throw err;6 }7 console.log(device);8});9var devicefarmer = require('devicefarmer-stf-client');10var client = new devicefarmer.Client();11client.match('device-serial', 30000, function(err, device) {12 if (err) {13 throw err;14 }15 console.log(device);16});17var devicefarmer = require('devicefarmer-stf-client');18var client = new devicefarmer.Client();19client.match('device-serial', 30000, 1000, function(err, device) {20 if (err) {21 throw err;22 }23 console.log(device);24});25var devicefarmer = require('devicefarmer-stf-client');26var client = new devicefarmer.Client();27client.match('device-serial', 30000, 1000, {ignore: ['user']}, function(err, device) {28 if (err) {29 throw err;30 }31 console.log(device);32});33var devicefarmer = require('devicefarmer-stf-client');34var client = new devicefarmer.Client();35client.match('device-serial', {ignore: ['user']}, function(err, device) {36 if (err) {37 throw err;38 }39 console.log(device);40});41var devicefarmer = require('devicefarmer-stf-client');42var client = new devicefarmer.Client();43client.match('device-serial', {ignore: ['user']}, 30000, function(err, device) {44 if (err) {45 throw err;46 }47 console.log(device);48});49var devicefarmer = require('devicefarmer-stf-client');
Using AI Code Generation
1var stf = require('./index.js');2var STF = new stf({3});4STF.getDevices().then(function (devices) {5 var device = devices[0];6 console.log(device);7});8var stf = require('./index.js');9var STF = new stf({10});11STF.getDevices().then(function (devices) {12 var device = devices[0];13 console.log(device);14 device.match().then(function (match) {15 console.log(match);16 });17});18 at STF.getDevices.then.devices (/Users/username/Documents/devicefarmer-stf-client/test.js:12:24)19 at process._tickDomainCallback (internal/process/next_tick.js:182:7)20function getDevices() {21 return new Promise(function (resolve, reject) {22 request.get({23 }, function (err, res, body) {24 if (err) {25 reject(err);26 } else {27 resolve(body);28 }29 });30 });31}32getDevices().then(function (devices) {33 console.log(devices);34});35UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: Cannot read property 'then' of undefined
Using AI Code Generation
1var match = require('devicefarmer-stf-client').match;2{3"provider": {4}5},6{7"provider": {8}9}10];11var matcher = match({serial: "0123456789ABCDEF"});12var result = devices.filter(matcher);13console.log(result);14{15"provider": {16}17}
Using AI Code Generation
1var client = require('devicefarmer-stf-client');2var devices = client.getDevices();3var device = devices.match('device_id', 'serial');4device.connect(function(error) {5 if (error) {6 console.log('Error connecting device: ' + error);7 } else {8 console.log('Connected to device');9 device.installApp('/path/to/app.apk', function(error) {10 if (error) {11 console.log('Error installing app: ' + error);12 } else {13 console.log('App installed');14 device.startActivity('com.example.app/.MainActivity', function(error) {15 if (error) {16 console.log('Error starting activity: ' + error);17 } else {18 console.log('Activity started');19 device.disconnect(function(error) {20 if (error) {21 console.log('Error disconnecting device: ' + error);22 } else {23 console.log('Disconnected from device');24 }25 });26 }27 });28 }29 });30 }31});32#### `client.getDevices()`33#### `client.getDevice(serial)`34#### `devices.find(serial)`35#### `devices.match(matcher, value)`36#### `device.connect(callback)`37#### `device.disconnect(callback)`38#### `device.use(callback)`39#### `device.installApp(path, callback)`40#### `device.startActivity(name, callback)`
Using AI Code Generation
1var stf = require('devicefarmer-stf-client');2var device = stf.getDevice("serialno");3device.match('appname', function(err, success) {4if (err) {5console.log(err);6} else {7console.log(success);8}9});10var stf = require('devicefarmer-stf-client');11var device = stf.getDevice("serialno");12device.unmatch(function(err, success) {13if (err) {14console.log(err);15} else {16console.log(success);17}18});19var stf = require('devicefarmer-stf-client');20var device = stf.getDevice("serialno");21device.use(function(err, success) {22if (err) {23console.log(err);24} else {25console.log(success);26}27});28var stf = require('devicefarmer-stf-client');29var device = stf.getDevice("serialno");30device.release(function(err, success) {31if (err) {32console.log(err);33} else {34console.log(success);35}36});37var stf = require('devicefarmer-stf-client');38var device = stf.getDevice("serialno");39device.get(function(err, success) {40if (err) {41console.log(err);42} else {43console.log(success);44}45});46var stf = require('devicefarmer-stf-client');47var device = stf.getDevice("serialno");48device.getDisplay(function(err, success) {49if (err) {50console.log(err);51} else {52console.log(success);53}54});55var stf = require('devicefarmer-stf-client');56var device = stf.getDevice("serialno");57device.getDisplay(function(err, success) {58if (err) {59console.log(err);60} else {61console.log(success);62}63});
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!