Generate Ascii Images Like the Matrix

Published on Feb 25, 2013

Generate Ascii Image Like the Matrix

Inspired by this online image to text converter and this post on Oschina

script hosts at github. Poor hack, Any advice is welcomed.

Edit: Oooops, Demo sucks on my site, it's perfect if you generate an alone html file.look here and here

Demo

有有有有有有有有有有有有有有有有有有有有会有有有有有有有有有有有有有有有有有有有有有有有有有有有有有有有有有
有有有有有有有有有有有有有有有有有有会只有有有有有有有有有有有有有有有有有有有有有有有有有有有有有有有有有
有有有有有有有有的的的经有有有有有会十只只了有有有有有有有有有有有有的经有有有有有有有有有有有有有有有有有
有有有有有有有有有有有验有有有有有会到只只只有有有有有有有有有有有有的经有有有有有有有有有有有有有有有有有
有有有有有有有有有有有的有有有有有只到了只说有有有有有有有有有有有有有有有有有有有有有有有有有有有有有有有
有有有有有有有有有有有经有有有有有只了十五的验的会有有有有会有有验的的有有有有有有有有有的的经的的经有有有
有有有有有有有有有有有的有有有有有只有了会说有了验有有只只据据说有有的有有会有有有有有有有的的有有的有有有
有有有有有有有有有有有的有有有有会说只有有有有会的有说说有有据有了有字有据有有有有有有有有的有有有验有有有
有有有有有有有有有有有验有有有有会了说只的到只有的说到有到有了到了了只有到有到有有有有有有的有有有有有有有
有有有有有有有有有有有验有有有有会十了到的有只到的说了到了有十了十了的了了了到了十据会有有的有有有有有有有
有有有有有有有有有的的的的有有有据十十有的才到有的验了到了十十了了有的的才十了十了十了有的的的有会的的有有
有有有有有有有有会了会会会有有只据十十五五十才说只了了了了十十到了才字十才了了了了十了到有有有有有有有有有
有有有有有有有有会会会会才才只只十十十五五只有有到到到了了了了到到到十十五了了十十了到到有有有有有有有有有
有有有有有有有有有会会会才字说说十十十十五有有有到到到到到到了到到到了了了了十十了十了了到五有有有有有有有
有有有有有有有有才会会会才只说说了了十五字有有有有到到到到到到到到到了到了到了了十了到了到了有有有有有有有
有有有有有有有有才会会才字了了了了了五五说只有有有有到到到到到到到到到到了到了了了了到了了到说有有有有有有
有有有有有有才五字才才字说了到了了十五字说只只有有有有有有有到到到到到到了到到了了了了到了到有说有有有有有
有会会才才才才据五五字字到了只了十十五字说只只只有有有有有有有到有到到到了到到到了到了到了了有据才有有有会
会才五才才才才只字字字字到了了十十十字字说说说只有有有只有有说有只到到到到只到到到了了只到到到有说会有有会
会五说才才会字了字会才字到说十十十五字字说说只说有说有只有有只有说有到到有只到只到到了只有到到只据有会有会
才五字才才才字了才才才五了了十十十字字字说说才才才才才会只有只有说有到有据只有说有到到到有有到说据说有有会
才字字才才才字到才才才了十了十十十十五说说才才才才才才才只有只有说只有只十只有据只有到有只说到说只据说会会
才字才才才才到十有了五十十十十十十了十据字才才才才字五有有有只只说只有说十只有说据只有到据说有据只说据才才
才字才才才字了十五十十了了了十五五五只到字才才五十十只有有只只据只只只说五只字字据只有有据只有据说据会据才
才字才才才字十十十了了了了了十五十十十五五五十十说说只有有说只十到只只据字只才字说据有有据有说据据据有会才
才字才才才五十十十十了十五五五字字字字五五十十据五五据有说说只五了只据十字只才字据据只有据据据据五据会有才
才五字才字字十五十十五五五字字字字字才五五到了说了五了只据说五字有只据字字了才才才字说有据说据说说据据有字
字五五字字五五五五十五五五字字字字才字字十十说说说字了说说据字字有据据只到五十才字字据只据说说有到据五有五
五五五十十五有五十五五字字字字才才才字五十五字说说字十说据到字字有了十字字才才才才字据说说只据据五有据有五
五五只了了字只五五五五十五五字字才字五五十字字五到字十据十字字五十五五十只说字才才字据说说只据只有了才有五
五有有才才才字五五五五十五五五字五五十十十字字字了才字五字字五十十了据据据据到说字字据据说只说有只只才会五
五五据了才字说说五十据十十十五十十十十十五字才字说才字字字字字五十据据只据到十会会才说据到说说了字据了会五
五五五五十十十十十五据只据了十十十了到说了了了了字字字字字才才字字字据有有只有会才才说说据到了才字据了有五
五五五五五五五十十到据据只说只说说说五字五十十了十五字字才才才才才会会有了据会十会据说只据十字才据只十有五
五五五五五五十五会才据据说说说说说五十据到据据据五五字才才才才会会会才才字只到才才据据据只才才据说有字有五
五五五五五十十会会有有说说说据了了十据才据只据到五字字才才才才会会才才才才才才会才字到说说字五据会有会有五
五五五五十十有会有据有说到说有只说五五会据有有只才字字字才才才会会才才才才才会会会据据了只五据说才有会有五
五五五五五五有有有会有会会据说据有五字会会说只有才才才才才才才会会才才才才会会会会据说了据据才有有有有有五
五五五十会有有有有有有有有只说据有到五说有字说字字才字字字才会会会会会会会才会会才说说有据据据会有有有有才
五五十会有有有有有有有有有会说说据只字字才才才才才才字字五才会会会会会会才才才会才五只只据有会有有有有有字
五五十有有有有有有有有有有有据说据说五字才才才才才字字字五才会才才才会才才才才才字了只只据会有有有有有有才
五据有有有有有有有有有有有有说说据据十字字才才才才字字五五五五字才才才才才才才才字了只只据会有有有有有有字
只有会有有有有有有有有有有有说会据说到五字字字字字字字字字五字才才才才才才才才字五据只只说有有有有有有有说
有有有有有有有有有有有有有有说有说有据了五字字字字字字字字字字才才才才才才才字五五说据只据有有有有有有有有
有有有有有有有有有有有有有有有有才会据十十五字字字字字字字字五说据才才才才字字五有有据只据有有有有有有有有
有有有有有有有有有有有有有有会有有会说只据十十五字字字字字字字才才才才才字字五有说有到只只有有有有有有有有
有有有有有有有有有有有有有有有有有会据字说据据十十五五五五字字字字才才才字十据字十有有只说有有有有有有有有
有有有有有有有有有有有有有有有有有有会有据据据据据十五五五五字字才才才字五有字才会有有只说有有有有有有有有
有有有有有有有有有有有有有有有有有有会会会五五据了到了十五五字字才才字说到字才五有有有说说有有有有有有有有
有有有有有有有有有有有有有有有有有有有有会会有十了了到到到了字字字到有了字字才字有有有据说有有有有有有有有
有有有有有有有有有有有有有有有有有有有有有有有说了了了到到到到到到到了字字才才五会有有据说有有有有有有有有
有有有有有有有有有有有有有有有有有有有有有有才到了了十十了了到了了了字字才才才字五有才据据有有有有有有有有
有有有有有有有有有有有有有有有有有有有会十五了十十五五十十了了了十五字才才才才字字五说据只有有有有有有有

源码

#! /bin/env python
# -*- coding: utf-8 -*-

"""
Turn images into acsii.
"""

__author__ = 'Reverland ([email protected])'

import Image
import ImageOps
import sys


filename = 'a.jpg'


def makeHTMLbox(body, fontsize, imagesize):
    """takes one long string of words and a width(px) then put them in an HTML box"""
    boxStr = """<div style=\"font-size: %spx;line-height: 100%s; width: %s;background-color: rgb(0, 0, 0);border: 1px grey solid;text-align: center; overflow: hidden;\">%s</div>
    """
    return boxStr % (fontsize, '%', imagesize[0], body)


def makeHTMLascii(body, color):
    """take words and , and create an HTML word """
    #num = str(random.randint(0,255))
    # return random color for every tags
    color = 'rgb(%s, %s, %s)' % color
    # get the html data
    wordStr = '<span style=\"color:%s;float:left;\">%s</span>'
    return wordStr % (color, body)


def i2m(im, fontsize):
    """turn an image into ascii like matrix"""
    im = im.convert('L')
    im = ImageOps.autocontrast(im)
    im.thumbnail((im.size[0] / fontsize, im.size[1] / fontsize))
    string = ''
    colors = [(0, i, 0) for i in range(0, 256, 17)]
    words = '据说只有到了十五字才会有经验的'
    for y in range(im.size[1]):
        for x in range(im.size[0]):
            p = im.getpixel((x, y))
            i = 14
            while i >= 0:
                if p >= i * 17:
                    s = makeHTMLascii(words[3 * i:3 * (i + 1)], colors[i])
                    break
                i -= 1
            if x % im.size[0] == 0 and y > 0:
                s = s + '<br/>'
            string = string + s
    return string


def i2a(im, fontsize):
    """turn an image into ascii with colors"""
    im = im.convert('RGB')
    im = ImageOps.autocontrast(im)
    im.thumbnail((im.size[0] / fontsize, im.size[1] / fontsize))
    string = ''
    for y in range(im.size[1]):
        for x in range(im.size[0]):
            c = im.getpixel((x, y))
            # print c
            s = makeHTMLascii('翻', c)
            if x % im.size[0] == 0 and y > 0:
                s = s + '<br/>'
            string = string + s
    return string


def getHTMLascii(filename, fontsize, style='matrix', outputfile='a.html', scale=1):
    """Got html ascii image"""
    im = Image.open(filename)
    size = (int(im.size[0] * scale), int(im.size[1] * scale))
    im.thumbnail(size, Image.ANTIALIAS)
    if style == 'matrix':
        ascii = makeHTMLbox(i2m(im, fontsize), fontsize, im.size)
    elif style == 'ascii':
        ascii = i2a(im, fontsize)
    else:
        print "Just support ascii and matrix now, fall back to matrix"
        ascii = makeHTMLbox(i2m(im, fontsize), fontsize, im.size)
    with open(outputfile, 'wb') as f:
        f.write(ascii)
    return 1


if __name__ == '__main__':
    if sys.argv[1] == '--help' or sys.argv[1] == '-h':
        print """Usage:python i2a.py filename fontsize [optional-parameter]
        optional-parameter:
            scale -- between (0, 1)
            style -- matrix or ascii"""
    else:
        filename = sys.argv[1]
        try:
            fontsize = int(sys.argv[2])
        except:
            fontsize = int(raw_input('input fontsize please:'))
        try:
            scale = float(sys.argv[3])
        except:
            scale = 1
        try:
            style = sys.argv[4]
        except:
            style = 'matrix'
        getHTMLascii(filename, fontsize, scale=scale)

More Demo

翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻
翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻翻